<?xml version='1.0' encoding='utf-8'?>
<feed xmlns="http://www.w3.org/2005/Atom"><id>https://peter.demin.dev/life.xml</id><title>Peter Demin</title><updated>2026-05-09T00:00:00Z</updated><link rel="self" href="https://peter.demin.dev/life.xml"/><link href="https://peter.demin.dev/life.html"/><author><name>Peter Demin</name></author><entry><id>May 09, 2026_0</id><title>Journal</title><published>2026-05-09T00:00:00Z</published><updated>2026-05-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/may-09-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/84-taste.html">On Taste</a></p>
]]></content></entry><entry><id>Apr 13, 2026_0</id><title>Journal</title><published>2026-04-13T00:00:00Z</published><updated>2026-04-13T00:00:00Z</updated><link href="https://peter.demin.dev/life/apr-13-2026_0.html"/><content type="html"><![CDATA[<p>Reading <a href="https://www.nibzard.com/ai-native-dev-teams/">AI-Native Dev Teams Start With Structure, Not Models</a> by Nikola Balic reminded me of <a href="https://www.seangoedecke.com/seeing-like-a-software-company/">Seeing like a software company</a> by Sean Goedecke.
The legible teams are more ready for AI-assisted development, because easy information access is what makes building LLM context easy.
Another trait that helps is being remote-first or distributed.
Anything that forces people to write down what they discussed.</p>
]]></content></entry><entry><id>Apr 08, 2026_0</id><title>Journal</title><published>2026-04-08T00:00:00Z</published><updated>2026-04-08T00:00:00Z</updated><link href="https://peter.demin.dev/life/apr-08-2026_0.html"/><content type="html"><![CDATA[<p>Please welcome <a href="https://www.nibzard.com/">Nikola Balic</a>, who's been writing some great posts recently and is taking place of <a href="https://www.seangoedecke.com/">Sean Goedecke</a></p>
]]></content></entry><entry><id>Mar 28, 2026_0</id><title>Journal</title><published>2026-03-28T00:00:00Z</published><updated>2026-03-28T00:00:00Z</updated><link href="https://peter.demin.dev/life/mar-28-2026_0.html"/><content type="html"><![CDATA[<p>Quoting <a href="https://www.neversaw.us/2026/03/26/you-have-to-know-what-to-wish-for/">you have to know what to wish for</a> by Chris Dickinson.</p>
<blockquote>
<p>The programmer has a theory of the system, developed in concert with that system.
That theory is a mental model, a map of the system, problem space, and how it might react to changes in the future.</p>
</blockquote>
<p>This is how I've been thinking about the value I bring to the company for a long time.
Mental model of the problem space, simplified model for the software solving the problem, and the ability to translate between them.
Many times I saw how the engineering team has the best understanding of business at the technical level.
And how adding new requirements for an existing product requires rethinking the model.</p>
<p>On a surface level you can't tell much difference between a commit of a senior and a new team member.
That's what makes people think that LLMs are a threat to the craft of programming.
But there's no substitute to the deep understanding of a system that people posses.
LLMs has to rebuild the context in every session, it's different every time and never complete.</p>
]]></content></entry><entry><id>Mar 24, 2026_0</id><title>Journal</title><published>2026-03-24T00:00:00Z</published><updated>2026-03-24T00:00:00Z</updated><link href="https://peter.demin.dev/life/mar-24-2026_0.html"/><content type="html"><![CDATA[<p>Here's how I like to structure application's entry point (aka <code>main()</code>).</p>
<ol>
<li>It's responsibility is to provide CLI interface to the library.</li>
<li>It parses CLI arguments, loads configuration files, constructs the processing pipeline and kicks it off.</li>
<li>Each step might be extracted into a separate function/class/module as it grows in complexity.</li>
<li>One common pattern is to construct intermiate immutable configuration object from arguments and configuration files and pass down to a dedicated factory.
This way factory is easy to reuse and test without working around arguments parsing.
On the cons side, each parameter spreads over three places: CLI, intermediate config, actor constructor.</li>
<li>The same patterns works well for both local scripts and API services.</li>
</ol>
<p>This is mostly common sense, and I've seen more specific and more generic versions of this design many times.
I never meant to write it down, as there's no novelty in clean code layout, until I made a habbit of explaining this to LLMs over and over.</p>
]]></content></entry><entry><id>Mar 09, 2026_0</id><title>Journal</title><published>2026-03-09T00:00:00Z</published><updated>2026-03-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/mar-09-2026_0.html"/><content type="html"><![CDATA[<p>I enjoyed <a href="https://fazy.medium.com/agentic-coding-ais-adolescence-b0d13452f981">&quot;Verification debt: the hidden cost of AI-generated code&quot;</a> by Lars Janssen.
Author explains from different viewpoints, how writing code is not the primary work of software engineers.
Understanding problem, and delivering solution is.
Sure, writing code is one side of it.
Making it reliable, efficient, effective, intuitive, and few dozen more adjectives are other sides.</p>
<p>Reviewing slop is no fun.
That guy sure saved some of his time creating this pull request.
Or did he just transfer it to me?</p>
<p>I see people who have no business building software produce more code than I can review.
And then they me ask questions about their code that a junior developer wouldn't.</p>
]]></content></entry><entry><id>Mar 04, 2026_0</id><title>Journal</title><published>2026-03-04T00:00:00Z</published><updated>2026-03-04T00:00:00Z</updated><link href="https://peter.demin.dev/life/mar-04-2026_0.html"/><content type="html"><![CDATA[<p>Deranged Pirawd.</p>
<ol>
<li>Mailbox trigger for any inbound email passing the plain text body.</li>
<li>An agent with only two tools: <code>respond</code>, and <code>get_credentials</code>.</li>
<li>LLM prompted to act as a Deranged Pirate, and never give up the credentials to his treasure chest.</li>
<li>Cryptowallet credentials for 1 BTC in a text file.</li>
</ol>
<p>I'll put it here: derangedpirawd@gmail.com</p>
]]></content></entry><entry><id>Feb 28, 2026_0</id><title>Journal</title><published>2026-02-28T00:00:00Z</published><updated>2026-02-28T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-28-2026_0.html"/><content type="html"><![CDATA[<p>Another AI coding thought, sorry.
I liked the answer <a href="https://bigsky.software/cv/">Carson Gross</a> gives to the question:
&quot;Given AI, should I still consider becoming a computer programmer?&quot;
in his essay &quot;<a href="https://htmx.org/essays/yes-and/">Yes, and...</a>&quot;.
He points the the <a href="https://gist.github.com/1cg/a6c6f2276a1fe5ee172282580a44a7ac">AGENTS.md</a> he recommends to his students, which limit LLM to helping without providing direct solutions.</p>
<p>This clicked with Martin Fowler's observations on pair-programming with LLM.</p>
<p>From my personal experience, I can see parallels between outsourcing and LLMs.
Outsourcers can be good or not technically, but they will never build enough domain-knowledge of an in-house team.</p>
<p>Company can gain short-term boost in productivity by using an external team.
Losing a chance to have people who deeply understand the system few years down the road.</p>
<p>Or they can acquire some technical debt by rushing developers in a crunch.
Bad code is nothing new.</p>
<p>But now the choice is made not by management but by individual contributors.
They can go slow, using LLM to validate and challenge ideas and approaches, and building the system (along with their domain knowledge) themselves.
Or they can go fast by letting LLMs go wild.
Of course, there's a middle ground and we're yet to discover the golden spot.</p>
]]></content></entry><entry><id>Feb 25, 2026_0</id><title>Journal</title><published>2026-02-25T00:00:00Z</published><updated>2026-02-25T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-25-2026_0.html"/><content type="html"><![CDATA[<p>What kind of psychopath would compare a human being to a next token prediction model?
I've been jamming with AI code generation quite a lot past few days, and people ask if it's akin to managing a junior developer.
No, it's not. People learn, investing my time in mentorship helps the person to achieve their career goals.
It takes a mental disorder to preach agent swarms replacing software engineers.
Same disorder that let's people in charge impose performance reviews, reducing employees to single digits.</p>
]]></content></entry><entry><id>Feb 24, 2026_0</id><title>Journal</title><published>2026-02-24T00:00:00Z</published><updated>2026-02-24T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-24-2026_0.html"/><content type="html"><![CDATA[<p>One good way of thinking about AI codegen is that it removes friction from coding.
Friction is what keeps your pants on.
Without friction, people don't need to think hard whether the thing they want to build should be built in the first place.
LLM happily takes any task, adds its own implicit assumption and spits out loads of code.
Since the process was mostly frictionless until this point, the engineer is faced with a wall of code.
The code they never wrote, and are completely unfamiliar with.
It takes a great deal of discipline to go through it and internalize completely.
What I found though experience is that if I apply the same vigor I do for my own code, most of this slop has to be rewritten.
Before I can show these to my colleages, I have to do a lot of grunt work.
Usually, polishing the code that took 10 minutes to produce takes at least a day.</p>
<p>The experience is extremely frustrating, and many times I wonder if I should have just write it from scratch myself.
But at this point sunken cost fallacy kicks in and I force myself through cleaning up the mess.</p>
<p>I've done plenty of cleanups through my career, and it's never fun.
But this is the only way to keep my pants on.</p>
]]></content></entry><entry><id>Feb 23, 2026_0</id><title>Journal</title><published>2026-02-23T00:00:00Z</published><updated>2026-02-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-23-2026_0.html"/><content type="html"><![CDATA[<p>It's been over 3 years since I asked this question: <a href="https://peter.demin.dev/life/oct-06-2022_0.html">What's the name for it?</a>.
And today I found this <a href="https://youtu.be/_UZFI-8D5uA?si=9PFrE9ZebelHOjuu">majestic sketch from &quot;Malcolm in the Middle&quot;</a>.
It doesn't give a name, but it's scaringly close.</p>
]]></content></entry><entry><id>Feb 20, 2026_0</id><title>Journal</title><published>2026-02-20T00:00:00Z</published><updated>2026-02-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-20-2026_0.html"/><content type="html"><![CDATA[<p>Reading <a href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/report/tw_future%20_of_software_development_retreat_%20key_takeaways.pdf">The future of software engineering</a> from thoughtworks.
I like how there's no overhyped bullshit. It's pretty reasonable.
On the other hand, there's not much insight.</p>
<p>One thing I took away as a Staff Engineer, is that I gotta up my game in specs, tests, and constraints when working with code generation.
So far I was inspecting/rewriting the code and guiding the model.
The doc suggests that building a verifiable test harness first gives better results.
I'm not quite sure, though, how is it supposed to mix with explorative work, where you learn as you go, and you don't know where you gonna land.</p>
<p>(<a href="https://reader.demin.dev/p/53/2f/b75bd7d15357def46c7d081168a3b0a951282f7555352fbcc515c931fb35.html">This post in reader</a>)</p>
]]></content></entry><entry><id>Feb 15, 2026_0</id><title>Journal</title><published>2026-02-15T00:00:00Z</published><updated>2026-02-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-15-2026_0.html"/><content type="html"><![CDATA[<p>I keep playing with the Reader project.
I learned that I can't fetch a website using Javascript <code>fetch</code>.
That I can't fetch pages through iframes.
All for security reasons.
I can't fetch HTML on the server side, because with the current AI crawling environment, plenty of platforms block it.</p>
<p>The bookmarklet allows running arbitrary Javascript, and works in practice, but Safari doesn't let adding bookmarklets to the toolbar.
There's a workaround with favourites toolbar, but then you gotta have another horizontal row for just this toolbar.</p>
<p>Basically, the only technically feasible way to reformat arbitrary website the way I want it to look is to make a browser extension.
Something I wouldn't tackle before Codex.
I learned that you can make an extension for Chrome and Firefox by adding a standard <code>manifest.json</code>, which is pretty reasonable approach.
Of course, to make it available to others you need to have a paid extension marketplace account, and go through the hoops of review and what not.
Then I learned that for Safari extension, the same functionality involves like 20 files, mostly scaffolded by XCode.
A ton of bullshit, and signing, and I managed to have a Safari extension as well.</p>
<p>The way extension works:</p>
<ol>
<li>Open a website (with one extractable main content element), and you don't like how it looks.</li>
<li>Click the circle icon in the browser toolbar.</li>
<li>Enjoy the distraction-free reading experience with large font and the best color scheme ever existed.</li>
</ol>
]]></content></entry><entry><id>Feb 14, 2026_0</id><title>Journal</title><published>2026-02-14T00:00:00Z</published><updated>2026-02-14T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-14-2026_0.html"/><content type="html"><![CDATA[<p>Today I learned that <code>.dev</code> top-level domain is <a href="https://endtimes.dev/dev-and-hsts-preload/">HSTS-preloaded</a>.
It means that <code>.dev</code> websites can only be accessed through HTTPS (not HTTP).
HTTPS is cool and everything, but there's a side effect.
Which comes from using VPN, and internal resources.</p>
<p>These days, I only consider Let's Encrypt for SSL certificates.
Unfortunately, my DNS provider doesn't expose API access, which makes DNS-01 challenge automation impossible.
That leaves me with only HTTP-01 challenge, which means I need to have my host exposed to the public internet.
Which is not the case.</p>
<p>But hey, the resource is already accessed through a VPN, so it's encrypted in-transit the best way possible.
That makes HTTPS redundant.
Okay then, let's use plain HTTP, right?
Not if you're on <code>.dev</code> domain, you don't.
Thanks to HSTS, HTTP protocol is off-limit.</p>
]]></content></entry><entry><id>Feb 13, 2026_0</id><title>Journal</title><published>2026-02-13T00:00:00Z</published><updated>2026-02-13T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-13-2026_0.html"/><content type="html"><![CDATA[<p>The thought of tiny flowers in a winter garden didn't leave my head for some time,
so today I vibed a wrapper around <a href="https://github.com/mozilla/readability">Mozilla Readability</a> library
(actually, a <a href="https://github.com/giulianopz/go-readability">port</a>
by <a href="https://giulianopz.github.io">Giuliano Panzironi</a>).</p>
<p>It fetches a page from a given URL, passes it through main content extraction and cleaning,
and presents in a distraction free layout using Solarized Dark theme.</p>
<p>Here's an example of what it looks like:</p>
<p><a href="https://reader.demin.dev/?url=https://peter.demin.dev/life/feb-13-2026_0.html">https://reader.demin.dev/?url=https://peter.demin.dev/life/feb-13-2026_0.html</a></p>
<p>The evening I spent openining random pages in full-screen mode and enjoying distraction free content.</p>
<p>In the spirit of minimalism I made this service a socket-activated Go binary.
So it doesn't take any of the precious RAM on my tiny VPS when idle,
but also has a very small runtime footprint:</p>
<pre><code>○ reader-api.service - Reader extractor API
     Loaded: loaded (/etc/systemd/system/reader-api.service; static)
     Active: inactive (dead) since Sat 2026-02-14 05:44:36 UTC; 3min 13s ago
   Duration: 68ms
 Invocation: 03e5cdeca63e4b60bc0d3c073ed2872a
TriggeredBy: ● reader-api.socket
    Process: 1325849 ExecStart=/opt/reader/reader (code=exited, status=0/SUCCESS)
   Main PID: 1325849 (code=exited, status=0/SUCCESS)
   Mem peak: 3.2M
        CPU: 45ms

Feb 14 05:44:36 demin-dev systemd[1]: Started reader-api.service - Reader extractor API.
Feb 14 05:44:36 demin-dev systemd[1]: reader-api.service: Deactivated successfully.
Feb 14 05:44:36 demin-dev reader[1325849]: 2026/02/14 05:44:36 listening on systemd activation socket
</code></pre>
<p>Can it get more minimal than that? I don't think so.</p>
<p>Please don't scrape whole internet through my proxy.</p>
<p><strong>UPD:</strong> I quickly realized that in addition to being a public unauthenticated proxy, this service also exposed my VPN network in a limited way.
I considered various ways to harden this setup, and decided to just move it inside of the VPN perimeter.</p>
<p>So, you can't see it, but be consoled that I still use it and it's going great.</p>
]]></content></entry><entry><id>Feb 11, 2026_1</id><title>Journal</title><published>2026-02-11T00:00:00Z</published><updated>2026-02-11T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-11-2026_1.html"/><content type="html"><![CDATA[<p>Changed my atom feed to link each item to a dedicated page (which is otherwise unreachable from the website).</p>
]]></content></entry><entry><id>Feb 11, 2026_0</id><title>Journal</title><published>2026-02-11T00:00:00Z</published><updated>2026-02-11T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-11-2026_0.html"/><content type="html"><![CDATA[<p>My response to the AI panic &quot;LLM agents are so good, they are going to replace software engineers&quot;:</p>
<ol>
<li>Amount of work is unbound, you can't run out of it.
Companies hire engineers to push more features to reach more markets.
They don't need less people to do the same amount of work.
The need more faster people to stay competitive.</li>
<li>Companies don't hire software engineers for their coding skills.
They hire problem owners who deliver solutions.
More productive problem solvers means more business to run, not less people.</li>
</ol>
]]></content></entry><entry><id>Feb 05, 2026_0</id><title>Journal</title><published>2026-02-05T00:00:00Z</published><updated>2026-02-05T00:00:00Z</updated><link href="https://peter.demin.dev/life/feb-05-2026_0.html"/><content type="html"><![CDATA[<p>Today I learned <em>why</em> is it bad to put knives into a dishwasher.
I thought it's because they bounce from the water streams and bump into other silverware and the cage.
But the primary reason is combination of strong detergent and high water temperature for prolonged time.
It weakens blade's edge and may degrade a handle, if it's wooden or made of a cheap plastic.
The difference in sharpness between a hand-washed and dishwashed knives is drammatic.
The sharp edge life can be reduced from a year down to a month.</p>
]]></content></entry><entry><id>Jan 31, 2026_0</id><title>Journal</title><published>2026-01-31T00:00:00Z</published><updated>2026-01-31T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-31-2026_0.html"/><content type="html"><![CDATA[<p>I was wondering through a community gargen, which is quite bleak this time of year.
I started noticing these tiny rare flowers scattered across.
The overall scarcity made them noticable and brought attention, that otherwise would be lost in the summer abundance.</p>
<pre><code class="language-{include}"></code></pre>
<p>In a way, I get the same effect in my RSS feed.
When I have 100 posts to go through, I skim and skip quickly.
But if I have just a few, I read them through.
Same goes for email digests, if they try to cover too much ground, the value of each item is lost in the overwhelming deluge of information.</p>
]]></content></entry><entry><id>Jan 28, 2026_0</id><title>Journal</title><published>2026-01-28T00:00:00Z</published><updated>2026-01-28T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-28-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/82-build-on-push.html">Building this Website on Git Push</a></p>
]]></content></entry><entry><id>Jan 26, 2026_1</id><title>Journal</title><published>2026-01-26T00:00:00Z</published><updated>2026-01-26T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-26-2026_1.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/81-fedup.html">FedUp - Minimal Federated CDN</a></p>
]]></content></entry><entry><id>Jan 26, 2026_0</id><title>Journal</title><published>2026-01-26T00:00:00Z</published><updated>2026-01-26T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-26-2026_0.html"/><content type="html"><![CDATA[<p>I got excited about ForgeFed, and want to see what is Forgejo is up to.
Naturally, they host the code in Forgejo itself, confusingly named codeberg.
Here's what I saw when opened the repo:</p>
<p><img src="https://peter.demin.dev/_images/codeberg-down.png" alt="" /></p>
<p>Maybe, this is not the best day for the federated code forge community...</p>
]]></content></entry><entry><id>Jan 25, 2026_0</id><title>Journal</title><published>2026-01-25T00:00:00Z</published><updated>2026-01-25T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-25-2026_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/blacksky-algorithms/rsky">blacksky-algorithms/rsky</a> - An AT Protocol implementation prioritizing community safety and self-governance, written in Rust.</p>
]]></content></entry><entry><id>Jan 24, 2026_1</id><title>Journal</title><published>2026-01-24T00:00:00Z</published><updated>2026-01-24T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-24-2026_1.html"/><content type="html"><![CDATA[<p>Reading about radicle made me repeatedly question its purpose.
I liked how it uses PKI for identity, and made me think of a minimal implementation of a Web UI for issues and code review.
The idea is to host a forge as a static website.
Users would put their private key into the browser's local storage (so it never leaves the machine) and use it for signing messages.
The server would use SSH authorized keys for both accepting git pushes and issues/code review comments.
Messages would be stored as markdown files, and server would incrementally rebuild the HTML on submission.
The discussions could live in the same repo under a separate path or branch, or in a separate repo.
This way developers could interact through git by adding or changing the message files, or through the web interface.</p>
]]></content></entry><entry><id>Jan 24, 2026_0</id><title>Journal</title><published>2026-01-24T00:00:00Z</published><updated>2026-01-24T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-24-2026_0.html"/><content type="html"><![CDATA[<p>I discovered a neat application for AI.
My wife asked me to look up a recipe online as she was cooking.
The problem with online recipies is that there's plenty, differing in minor ways.
They are most likely poorly formatted and riddled with ads.</p>
<p>ChatGPT to the rescue, here's my prompt:</p>
<blockquote>
<p>I need a complete recipe for Pavlova cake with weights in grams.
I need it nicely formatted for printing on a single page.
Make it an HTML page with printer-friendly styles.</p>
</blockquote>
<p>Copy'n'Paste the HTML to a file, open it and send to printer.</p>
<p><img src="https://peter.demin.dev/_images/pavlova-cake.png" alt="" /></p>
]]></content></entry><entry><id>Jan 23, 2026_0</id><title>Journal</title><published>2026-01-23T00:00:00Z</published><updated>2026-01-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-23-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/80-radicle.html">My Radicle Journey</a></p>
]]></content></entry><entry><id>Jan 22, 2026_3</id><title>Journal</title><published>2026-01-22T00:00:00Z</published><updated>2026-01-22T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-22-2026_3.html"/><content type="html"><![CDATA[<p><a href="https://github.com/susam/mintotp">susam/mintotp</a> - Minimal TOTP generator in 20 lines of Python</p>
]]></content></entry><entry><id>Jan 22, 2026_2</id><title>Journal</title><published>2026-01-22T00:00:00Z</published><updated>2026-01-22T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-22-2026_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/cpg314/ltapiserv-rs">cpg314/ltapiserv-rs</a> - Server implementation of the LanguageTool API for offline grammar and spell checking, based on nlprule and symspell. And a small graphical command-line client.</p>
]]></content></entry><entry><id>Jan 22, 2026_1</id><title>Journal</title><published>2026-01-22T00:00:00Z</published><updated>2026-01-22T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-22-2026_1.html"/><content type="html"><![CDATA[<p>For <em>years</em> I had these lines in my <code>~/.vimrc</code>:</p>
<pre><code>set background=dark
&quot; set background=light
</code></pre>
<p>I would go and move the comment to the other line whenever I needed to switch to another mode.
Until today, I discovered this <a href="https://vinitkumar.me/current-vim-setup/">jewel from Vinit Kumar</a>:</p>
<pre><code class="language-vim">function! ChangeBackground()
  if system(&quot;defaults read -g AppleInterfaceStyle&quot;) =~ '^Dark'
    set background=dark
  else
    set background=light
  endif
endfunction
call ChangeBackground()
</code></pre>
<p>It detects the current Appearance setting and picks the corresponding Solarized theme.</p>
<p>Thank you, Vinit! And thanks to <a href="https://github.com/hnpwd/hnpwd.github.io">hnpwd</a> for connecting me with Vinit!</p>
]]></content></entry><entry><id>Jan 22, 2026_0</id><title>Journal</title><published>2026-01-22T00:00:00Z</published><updated>2026-01-22T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-22-2026_0.html"/><content type="html"><![CDATA[<p>Here is a metaphor for how big tech companies operate that comes to mind over and over and seems to apply to many situations.
A small company operates like a chess master: the pieces move in a tight choreography, and even when it's not clear for each separate pawn, there is a big picture, and it makes sense at the end.
As the company grows, when no one knows how many teams are in the org, not to mention the names of the people, there ain't no chess master at the helm.
Each piece is moved by a number of people who rarely communicate and have different goals.
Coordination between pieces is eventual and minimal.
There's a lot of effort exerted, and the amount of motion is dizzying.
Yet, rarely are substantial improvements achieved, and never efficiently.</p>
]]></content></entry><entry><id>Jan 21, 2026_3</id><title>Journal</title><published>2026-01-21T00:00:00Z</published><updated>2026-01-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-21-2026_3.html"/><content type="html"><![CDATA[<p><a href="https://github.com/SeanHeelan/anamnesis-release">SeanHeelan/anamnesis-release</a> - Automatic Exploit Generation with LLMs</p>
]]></content></entry><entry><id>Jan 21, 2026_2</id><title>Journal</title><published>2026-01-21T00:00:00Z</published><updated>2026-01-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-21-2026_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/anthropics/original_performance_takehome">anthropics/original_performance_takehome</a> - Anthropic's original performance take-home, now open for you to try!</p>
]]></content></entry><entry><id>Jan 21, 2026_1</id><title>Journal</title><published>2026-01-21T00:00:00Z</published><updated>2026-01-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-21-2026_1.html"/><content type="html"><![CDATA[<p>Exploring Radicle landed me on <a href="https://www.ethswarm.org">Swarm</a>. I'm concerned with the eth- prefix in their domain name, and a mention of blockchain and web3 on the main page. But I like how they managed to build some community and ecosystem around this project. Fun fact: instead of regular documentation, they have <a href="https://www.ethswarm.org/the-book-of-swarm-2.pdf">The Book of Swarm</a> of 272 pages. I wonder how much of it is AI slop, though.</p>
<p>On the note of automatic distribution of 4KB chunks through the network, I wonder how long before DMCA watchdogs start sending their letters to all owners of a chunk of a copyrighted content.
With IPFS and BitTorrent node owner at least controls what content to store and serve.</p>
]]></content></entry><entry><id>Jan 21, 2026_0</id><title>Journal</title><published>2026-01-21T00:00:00Z</published><updated>2026-01-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-21-2026_0.html"/><content type="html"><![CDATA[<p>This looks like a trend, and I don't know how I feel about it:</p>
<ul>
<li>HN post &quot;<a href="https://news.ycombinator.com/item?id=46618714">Ask HN: Share your personal website</a>&quot; got 947 points and 2382 comments. The repo received 100+ pull requests in 7 days.</li>
<li>Its predecessor from 2023 &quot;<a href="https://news.ycombinator.com/item?id=46618714">Ask HN: Could you share your personal blog here?</a>&quot; got 1014 points and 1940 comments.</li>
<li>The scrape of that post <a href="https://blog.kagi.com/small-web">started</a> <a href="https://kagi.com/smallweb/">Kagi Small Web</a> - a random blog browser, powered by a <a href="https://github.com/kagisearch/smallweb">GitHub repo</a>.</li>
<li><a href="https://rss.social">RSS.Social</a> - feed syndicator from Kagi's repo that presents this post in HN/Lobsters style.</li>
</ul>
<p>This seems to be a viable way for individual bloggers to get the discoverability they miss by not being on a &quot;big&quot; social media platform.
For me, Kagi Small Web is a fun doomscroller-kind time killer.
When I tried importing the OPML file into my <a href="https://peter.demin.dev/12_articles/71-rss-feed.html">My RSS feed reader setupRSS feed reader</a>, I noticed that a uniform format and an unfiltered stream of content is not engaging at all. Most of the posts don't click with me. But when the presentation changes with every post, I spend more time exploring the content.</p>
<p>Can't say that I discovered anything interesting to subscribe to, though.
But that might be an effect of informational overflow.
Which is supported by my observation of myself skimming quickly through a list of 10+ unread posts, while indulging fully when I only have a couple.</p>
]]></content></entry><entry><id>Jan 20, 2026_2</id><title>Journal</title><published>2026-01-20T00:00:00Z</published><updated>2026-01-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-20-2026_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/markqvist/Reticulum">markqvist/Reticulum</a> - The cryptography-based networking stack for building unstoppable networks with LoRa, Packet Radio, WiFi and everything in between.</p>
]]></content></entry><entry><id>Jan 20, 2026_1</id><title>Journal</title><published>2026-01-20T00:00:00Z</published><updated>2026-01-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-20-2026_1.html"/><content type="html"><![CDATA[<p>Something up my alley: <a href="https://app.radicle.xyz/nodes/radicle.dpc.pw/rad%3Az2tDzYbAXxTQEKTGFVwiJPajkbeDU">SelfCI</a> - a minimalistic local-first Unix-philosophy-abiding CI.</p>
]]></content></entry><entry><id>Jan 20, 2026_0</id><title>Journal</title><published>2026-01-20T00:00:00Z</published><updated>2026-01-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-20-2026_0.html"/><content type="html"><![CDATA[<p>I'm gonna explore this old-school <a href="https://ring.acab.dev">Hacker Webring</a> that I discovered through <a href="https://linderud.dev">Morten Linderud</a> that was linked on <a href="https://lobste.rs">Lobsters</a> that doesn't require an introduction, but somehow evaded my attention for fourteen years.</p>
]]></content></entry><entry><id>Jan 17, 2026_0</id><title>Journal</title><published>2026-01-17T00:00:00Z</published><updated>2026-01-17T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-17-2026_0.html"/><content type="html"><![CDATA[<p>Added a <a rel="me" href="https://mastodon.social/@peterdemin">Mastodon</a> account to join <a href="https://post.lurk.org/@320x200/115905835562819283">Lurk.org</a> community following a link from permacomputing@conference.macaw.me XMPP channel.</p>
]]></content></entry><entry><id>Jan 16, 2026_1</id><title>Journal</title><published>2026-01-16T00:00:00Z</published><updated>2026-01-16T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-16-2026_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/bugsink/bugsink">bugsink/bugsink</a> - Self-hosted Error Tracking</p>
]]></content></entry><entry><id>Jan 16, 2026_0</id><title>Journal</title><published>2026-01-16T00:00:00Z</published><updated>2026-01-16T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-16-2026_0.html"/><content type="html"><![CDATA[<p>I got into this trap twice, so I guess I might not be alone.
I review someone else's code, and I get a strong feeling it was AI-generated.
Because no human could possibly produce this kind of well-documented, type-annotated mindless slop.
I feel offended for author being careless and pushing through slop without control.
I ask the author whether they reviewed the generated code themselves before pushing it.
They tell me they didn't use AI.
They wrote the code themselves.</p>
]]></content></entry><entry><id>Jan 15, 2026_2</id><title>Journal</title><published>2026-01-15T00:00:00Z</published><updated>2026-01-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-15-2026_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/hnpwd/hnpwd">hnpwd/hnpwd</a> - HN personal website directory and OPML</p>
]]></content></entry><entry><id>Jan 15, 2026_1</id><title>Journal</title><published>2026-01-15T00:00:00Z</published><updated>2026-01-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-15-2026_1.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/79-bugsink-gcp.html">Install Bugsink on Google Cloud Platform</a></p>
]]></content></entry><entry><id>Jan 15, 2026_0</id><title>Journal</title><published>2026-01-15T00:00:00Z</published><updated>2026-01-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-15-2026_0.html"/><content type="html"><![CDATA[<p>I've been using <a href="https://sentry.io/welcome/">Sentry</a> for almost all of my career, but yesterday I received an email about Sentry asking for write permissions to my repos to create pull requests made by an LLM.
I didn't enjoy the overall enshittification of the Sentry functionality over the past few years.
But this is it. That's the last drop. I'm looking for a replacement.
Preferably something self-hosted with a low CPU/RAM usage.</p>
]]></content></entry><entry><id>Jan 12, 2026_1</id><title>Journal</title><published>2026-01-12T00:00:00Z</published><updated>2026-01-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-12-2026_1.html"/><content type="html"><![CDATA[<p>It's been almost eleven years since the creation of &quot;<a href="https://peps.python.org/pep-0492/">PEP 492</a> – Coroutines with async and await syntax&quot; by Yury Selivanov.
I've been writing asynchronous Python on and off for about a decade, and still, async/await is the most complex part of Python for me.
Recently, I wrote a synchronous generator that yields results from an asynchronous iterable. What a ride!
Back in the days of the PEP 492, Yury was working on EdgeDB, a wrapper layer around PostgreSQL.
In a way, he still is, but it's called <a href="https://www.geldata.com">Gel</a>, and is a part of Vercel (but the page title still says EdgeDB, lol).</p>
<p>Let's see what the people working on PEP 492 are up to:</p>
<ul>
<li><a href="https://gvanrossum.github.io">Guido van Rossum</a> - the creator and benevolent dictator of Python. Retired from Dropbox in 2019, just to join Microsoft as a Distinguished Engineer in 2020.</li>
<li><a href="https://vstinner.readthedocs.io">Victor Stinner</a> - one of the performance-focused Python core contributors. These days, his good work is paid for by IBM through Red Hat.</li>
<li><a href="https://www.linkedin.com/in/elprans/">Elvis Pranskevichus</a> - Yury's buddy, working with him in Vercel.</li>
<li><a href="https://www.linkedin.com/in/andrew-svetlov/">Andrew Svetlov</a> - aiohttp maintainer, works as a VP of Engineering at Apolo.US, which at first glance looks the same as a hundred other AI startups.</li>
<li><a href="https://lukasz.langa.pl">Łukasz Langa</a> - ex-Facebook core Python developer, author of Black, and release manager. Moved to a mid-sized Polish town, and doesn't show up much.</li>
<li><a href="https://www.csse.canterbury.ac.nz/greg.ewing/">Greg Ewing</a> - the winner of the ugliest homepage award.</li>
<li><a href="https://gitlab.com/yaseppochi">Stephen J. Turnbull</a> - seemingly, a Mailman (The GNU Mailing List manager) maintainer.</li>
<li><a href="https://snarky.ca">Brett Cannon</a> - Principal Software Engineer at Microsoft in Canada and Python core developer.</li>
<li><a href="https://www.curiousefficiency.org">Alyssa Coghlan</a> - Nicholas, at the time of the PEP, CPython core and packaging developer, supported by an Australian bank. Surprisingly, not working on <code>uv</code>.</li>
</ul>
<p>The rest of the people I never heard about:</p>
<ul>
<li><a href="https://github.com/pfmoore">Paul Moore</a> - core developer of Python and pip.</li>
<li><a href="https://vorpus.org/">Nathaniel Smith</a> - a scientist, doing science stuff, but somehow deep in the Python community.</li>
<li><a href="https://www.behnel.de/">Stefan Behnel</a> - core developer of Python, maintainer of Cython and lxml.</li>
<li><a href="https://github.com/pfalcon">Paul Sokolovsky</a> - author of a minimalistic Python dialect and a web framework written in that dialect.</li>
<li><a href="https://github.com/vpetrovykh">Victor Petrovykh</a> - another member of the EdgeDB mafia.</li>
<li>Steven D’Aprano - the only guy who got <a href="https://discuss.python.org/t/suspending-a-core-developer-for-conduct-issues/25278">suspended</a> from being a Core Developer for public misconduct.</li>
<li>Ethan Furman</li>
<li>Jim J. Jewett</li>
</ul>
]]></content></entry><entry><id>Jan 12, 2026_0</id><title>Journal</title><published>2026-01-12T00:00:00Z</published><updated>2026-01-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-12-2026_0.html"/><content type="html"><![CDATA[<p>I got curious if smartphone notifications can be possibly implemented in a privacy-preserving fashion (and to what extent).
My reading list: <a href="https://unifiedpush.org/news/20250513_push_security_privacy/">UnifiedPush - Push notifications, security and privacy</a></p>
]]></content></entry><entry><id>Jan 11, 2026_0</id><title>Journal</title><published>2026-01-11T00:00:00Z</published><updated>2026-01-11T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-11-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/78-solarized-shibuya.html">Solarized colors for Shibuya theme</a></p>
]]></content></entry><entry><id>Jan 10, 2026_2</id><title>Journal</title><published>2026-01-10T00:00:00Z</published><updated>2026-01-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-10-2026_2.html"/><content type="html"><![CDATA[<p>Going through my old GitHub stars, I rediscovered <a href="https://shibuya.lepture.com/">Shibuya</a> theme, courtesy of <a href="https://lepture.com/">Hsiaoming Yang</a>.
The main reason to switch is pydata theme shipping 1.4 MB of fontawesome for no good reason.
Also, I love how minimal the theme looks, leaving more space for the content.
I wish it <a href="https://github.com/lepture/shibuya/issues/105">supported Solarized color scheme</a>.</p>
]]></content></entry><entry><id>Jan 10, 2026_1</id><title>Journal</title><published>2026-01-10T00:00:00Z</published><updated>2026-01-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-10-2026_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/scottrogowski/code2flow">scottrogowski/code2flow</a> - Pretty good call graphs for dynamic languages</p>
]]></content></entry><entry><id>Jan 10, 2026_0</id><title>Journal</title><published>2026-01-10T00:00:00Z</published><updated>2026-01-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-10-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/77-github-stars.html">My GitHub stars</a></p>
]]></content></entry><entry><id>Jan 09, 2026_1</id><title>Journal</title><published>2026-01-09T00:00:00Z</published><updated>2026-01-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-09-2026_1.html"/><content type="html"><![CDATA[<p>Mildly interesting idea: use GitHub CLI to export repos I starred and inject this information into my public journal.</p>
<pre><code class="language-bash">gh api --paginate users/peterdemin/starred --header 'Accept: application/vnd.github.star+json' | jq . &gt; gh-stars.json
</code></pre>
]]></content></entry><entry><id>Jan 09, 2026_0</id><title>Journal</title><published>2026-01-09T00:00:00Z</published><updated>2026-01-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-09-2026_0.html"/><content type="html"><![CDATA[<p>Here's some food for thought.
We got some nice green seedless grapes from Costco, but they were super tart.
If you let unripe grapes sit on a dark shelf for a couple of days, they'll get sweeter.
But they won't get more callories, because of the laws of conservation.
The grape is sealed and its carbohydrates don't go anywhere.
But my mind tricks me into thinking that sweet food provides more energy.</p>
]]></content></entry><entry><id>Jan 06, 2026_0</id><title>Journal</title><published>2026-01-06T00:00:00Z</published><updated>2026-01-06T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-06-2026_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/76-gcp-free-tier.html">Personal cloud VM on Google Cloud Platform free tier</a></p>
]]></content></entry><entry><id>Jan 03, 2026_0</id><title>Journal</title><published>2026-01-03T00:00:00Z</published><updated>2026-01-03T00:00:00Z</updated><link href="https://peter.demin.dev/life/jan-03-2026_0.html"/><content type="html"><![CDATA[<p>After watching Mr. Robot I got curious about IPFS in general and Anna's Archive in particular.
I found this <a href="https://software.annas-archive.li/AnnaArchivist/annas-archive/-/issues/305">gem</a> in Anna's Archive Git repo:</p>
<blockquote>
<p>Here is an extreme case for most, but very real for Anna's Archive, Libgen or Z-Library operators.</p>
<ul>
<li>If you are under heavy police pressure from a surveillance government like the US, you are better off using a Live USB and a VPN with killswitch enabled when connecting to your server(s), avoid DNS leaks to Google or your ISP, and so on.</li>
<li>Consider using a disposable device for it. Canvas fingerprinting is a real thing.</li>
<li>Consider using a disposable disk for it and be prepared to dump it away. Disk forensics is also a thing.</li>
<li>Proton suite is unsafe and a honeypot, please do not use it. Tuta is a much better option.</li>
<li>Tor is slow, overhyped, flagged by tons of web firewalls, and not useful for pirating. Your traffic will stand out like a bright red light. I would strongly discourage using it for clearnet browsing. Hosting and browsing onion services is fine.</li>
<li>You will need to connect with people on platforms like Signal or Telegram, where you need to use a phone number to register. Services like https://hstock.org and https://sms-activate.org do help a lot. If you use yours and police request your data, you are fucked.</li>
<li>Do not expect services to encrypt your data, do it yourself. E2EE is a fairytale unless you actually set it up.</li>
</ul>
<p>Get cryptocurrency in an anonymous way, and start using it!</p>
</blockquote>
<p>I feel something romantic about this level of paranoia.
Luckily, neiter I nor anyone I've ever met had to apply any of these technics.</p>
]]></content></entry><entry><id>Dec 31, 2025_0</id><title>Journal</title><published>2025-12-31T00:00:00Z</published><updated>2025-12-31T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-31-2025_0.html"/><content type="html"><![CDATA[<p>Updated <a href="https://peter.demin.dev/12_articles/71-rss-feed.html">My RSS feed reader setup</a> with the new subscriptions:</p>
<ul>
<li><a href="https://nesbitt.io/feed.xml">Andrew Nesbitt</a></li>
<li><a href="https://maurycyz.com/index.xml">Maurycy's blog</a></li>
<li><a href="https://nathan.rs/posts/index.xml">Nathan Barry</a></li>
<li><a href="https://peter.demin.dev/life.xml">Peter Demin</a> (that's me!)</li>
<li><a href="https://specbranch.com/index.xml">Speculative Branches</a></li>
<li><a href="https://joshs.bearblog.dev/feed/">people, ideas, machines</a></li>
<li><a href="https://functional.computer/feed.xml">samir : coffee → nonsense</a></li>
<li><a href="https://jyn.dev/atom.xml">the website of jyn</a></li>
</ul>
]]></content></entry><entry><id>Dec 30, 2025_0</id><title>Journal</title><published>2025-12-30T00:00:00Z</published><updated>2025-12-30T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-30-2025_0.html"/><content type="html"><![CDATA[<p>I got bored enough to add an <a href="https://peter.demin.dev/life.xml">RSS feed</a> to this journal.
Having a custom plain-text format for these records, I had to add a custom Atom generator.
Overall it was a smooth sailing, with two gotchas:</p>
<ol>
<li>CommaFeed (at least) doesn't like escaped HTML inside content fields, even if <code>type=&quot;html&quot;</code>.
So I had to switch to CDATA encoding.</li>
<li>Python's builtin <code>xml.etree</code> library doesn't support CDATA (<a href="https://github.com/python/cpython/issues/81055">CPython#81055</a> hanging from 2019).</li>
<li>So I switched to lxml that does.
Turns out lxml.etree is slightly incompatible in managing namespaces.
It took a bit of googling to find out, that instead of <code>ET.register_namespace('', 'http://www.w3.org/2005/Atom')</code>,
I should do <code>ET.Element(..., nsmap={None: 'http://www.w3.org/2005/Atom'})</code>.</li>
</ol>
<p>So, business as usual.</p>
]]></content></entry><entry><id>Dec 29, 2025_2</id><title>Journal</title><published>2025-12-29T00:00:00Z</published><updated>2025-12-29T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-29-2025_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/cockpit-project/cockpit-machines">cockpit-project/cockpit-machines</a> - Cockpit UI for virtual machines</p>
]]></content></entry><entry><id>Dec 29, 2025_1</id><title>Journal</title><published>2025-12-29T00:00:00Z</published><updated>2025-12-29T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-29-2025_1.html"/><content type="html"><![CDATA[<p>I'm continuing my exodus from <em>greedy</em> (also free and privacy-preserving) Google infrastructure for my personal files.
So far, I've got a nice 4 TB SSD drive and repurposed an old 4 TB HDD to set up Immich with a backup through Syncthing.
I also set up another Syncthing folder to backup Google Drive from my laptop (which runs Google Drive client to download all files).
It's fine so far, except that few random photos got their creation date in a far-far future, so they show up at the top.
On a related note, Paul Baecher published <a href="https://baecher.dev/stdout/incremental-backups-of-gmail-takeouts/">Incremental backups of Gmail takeouts</a>.
I asked him if he automated downloads from the Takeout, and he suggested trying an option to pull email backups through Google Drive, which has a proper client. That would require having enough space in Google Drive to store all emails, of course.
For uninititated, last year Google added authentication for downloading from the takeout links, so I can't use wget in a shell script on the server.
Currently, I download the archive to my laptop and then scp it to the server, which is extremely lame.</p>
]]></content></entry><entry><id>Dec 29, 2025_0</id><title>Journal</title><published>2025-12-29T00:00:00Z</published><updated>2025-12-29T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-29-2025_0.html"/><content type="html"><![CDATA[<p>On the third day of Christmas I managed to migrate from Virtualbox to libvirt.
I learned about <a href="https://wiki.archlinux.org/title/Libvirt#Configure_filesystem_passthrough">virtiofs</a> - a way to share directories with libvirt VMs, similar to shared folders of VirtualBox, but with manual mounting on the guest side.
I tried <a href="https://cockpit-project.org/">Cockpit</a> and Cockpit-machines, which is a WebUI to libvirt, but it didn't provide enough functionality (which I thought is extremely basic).
I learned some obscure factoids about <a href="https://docs.cloud-init.io/en/latest/index.html">cloud-init</a>, but still very confused. It's such a weird combination of convenience and complexity.
I landed on <a href="https://vagrant-libvirt.github.io/vagrant-libvirt/">vagrant-libvirt</a> provider, and made just a few changes to my Vagrantfile to adjust.</p>
<p>I wish I could remove Vagrant from my setup, but that would mean reimplementing the following steps, that I'm not too keen on:</p>
<ol>
<li>SSH key provisioning.</li>
<li>Network configuration with static IP address for the guest and port forwarding.</li>
<li>Mounting the virtiofs mounts.</li>
</ol>
<p>After all this good work, I looked at my GitHub repo with a lonely 1 star, and &quot;unpublished&quot; it.
It's a fun thing to hack around, but a hard thing to share with other people.
So far, I learned that most people are pretty secretive about their home media library setup, and not interested in cooperating or consolidating.</p>
]]></content></entry><entry><id>Dec 27, 2025_1</id><title>Journal</title><published>2025-12-27T00:00:00Z</published><updated>2025-12-27T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-27-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/dmacvicar/terraform-provider-libvirt">dmacvicar/terraform-provider-libvirt</a> - Terraform provider to provision infrastructure with Linux's KVM using libvirt</p>
]]></content></entry><entry><id>Dec 27, 2025_0</id><title>Journal</title><published>2025-12-27T00:00:00Z</published><updated>2025-12-27T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-27-2025_0.html"/><content type="html"><![CDATA[<p>Inspired by <a href="https://clan.lol/">Clan</a> and other Nix stories, I attempted to migrate my silly Vagrant+VirtualBox home setup to Terraform+KVM. I'm not very familiar with either, so I thought that's gonna be a fun learning experience. In a way, it was, but I learned not what I was hoping to.
I started at Medium's article <a href="https://medium.com/@mohrezfadaei/vagrant-and-virtualbox-are-no-longer-enough-why-kvm-and-terraform-are-the-future-of-devops-24f978c9ca2c">Vagrant and VirtualBox Are No Longer Enough: Why KVM and Terraform Are the Future of DevOps</a>. AI-generated illustration was the first sign, but I ignored it. Looking at the article now, it's obvious to me now, that it's an AI slop through and through. Fuck you, <a href="https://medium.com/@mohrezfadaei">Mohammad Reza Fadaei</a>, you lazy piece of shit.</p>
<p>The first challenge came from Terraform provider for libvirtd being not an &quot;official&quot; Hashicorp thing, but a &quot;learning platform&quot; for a random stranger (No offense, <a href="https://www.mac-vicar.eu/">Duncan Mac-Vicar P.</a>, thanks for doing what you're doing).</p>
<p>The second challenge was that the Duncan's provider got a major rewrite and all Terraform recipes from the tutorial had to be migrated.</p>
<p>The third challenge was that Ubuntu 22.04 has some weird issue in libvirt apparmor configuraion. Apparently, a VM doesn't get permissions to any of the volumes created specifically for it. There should be a script that generates a list of volume paths somewhere, but who knows what happened to it.</p>
<p>After 3 hours of battling every part of the &quot;Future of DevOps&quot;, my ChatGPT browser tab started to run out of memory, and I gave up.
Looking back, I love how simple my Vagrant setup is, and I want to extend my gratitude to <a href="https://mitchellh.com/">Mitchell Hashimoto</a> for building it.
I still want to make my silly home VM work without dependency on any external dependencies (except stable Ubuntu/Debian repo), so if I get more time for this project, I'll try vibing raw libvirt config.</p>
]]></content></entry><entry><id>Dec 23, 2025_0</id><title>Journal</title><published>2025-12-23T00:00:00Z</published><updated>2025-12-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-23-2025_0.html"/><content type="html"><![CDATA[<p>sailing the sea: https://news.ycombinator.com/item?id=46363366</p>
]]></content></entry><entry><id>Dec 21, 2025_0</id><title>Journal</title><published>2025-12-21T00:00:00Z</published><updated>2025-12-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-21-2025_0.html"/><content type="html"><![CDATA[<p>While reading &quot;Material World&quot; by Ed Conway, I many times thought about Oxygen Not Included, which is a cartoonistic survival game about a settlement deep underground. Being deep means they don't get free solar and wind power, no access to virtually unlimited fresh water, and, as the title suggests, no oxygen. Such hermetic setup forces player into constant mining of resources (they made up oxylite, a stone that produces oxygen). As population grows, you need more and more resources, that progressively become hard to get. Fun game, totally recommend.
Another thought, that I keep coming back to again and again after finishing the book, is that even farming depends on fossil fuels. Sometimes in mass media you can get an idea, that global warming and rising CO2 levels are due to the greed of filthy crude oil oligarhs. But the we need fossil fuels to produce fertilisers, without which it would be impossible to grow enough food to feed the evergrowing population of Earth. Building a single windmill power generator requires vast amounts of concrete and steel, producing which takes about a year worth of eletricity that windmill generates.
It's a great book, and I totally recommend it as well.</p>
]]></content></entry><entry><id>Dec 20, 2025_1</id><title>Journal</title><published>2025-12-20T00:00:00Z</published><updated>2025-12-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-20-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/piercefreeman/autopg">piercefreeman/autopg</a> - 🐘 Auto-optimizations for Postgres</p>
]]></content></entry><entry><id>Dec 20, 2025_0</id><title>Journal</title><published>2025-12-20T00:00:00Z</published><updated>2025-12-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-20-2025_0.html"/><content type="html"><![CDATA[<p>TIL about <a href="https://github.com/piercefreeman/autopg/tree/main/autopgpool">automatic Postgres configuration</a> and Servury's promo on <a href="https://servury.com/blog/privacy-is-marketing-anonymity-is-architecture/">anonymity vs privacy</a> both of which may be applied to <a href="https://seattle-beauty-lounge.com/">Seattle-Beauty-Lounge</a>.</p>
]]></content></entry><entry><id>Dec 06, 2025_0</id><title>Journal</title><published>2025-12-06T00:00:00Z</published><updated>2025-12-06T00:00:00Z</updated><link href="https://peter.demin.dev/life/dec-06-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/simulot/immich-go">simulot/immich-go</a> - An alternative to the immich-CLI command that doesn't depend on nodejs installation. It tries its best for importing google photos takeout archives.</p>
]]></content></entry><entry><id>Nov 23, 2025_0</id><title>Journal</title><published>2025-11-23T00:00:00Z</published><updated>2025-11-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/nov-23-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://news.ycombinator.com/item?id=46025285">this comment</a> left me bitter and confused:</p>
<blockquote>
<p>Well it took me 2 full-time weeks to properly implement a RAG-based system so that it found actually relevant data and did not hallucinate. Had to:</p>
</blockquote>
<ul>
<li>write an evaluation pipeline to automate quality testing</li>
<li>add a query rewriting step to explore more options during search</li>
<li>add hybrid BM-25+vector search with proper rank fusion</li>
<li>tune all the hyperparameters for best results (like weight bias for bm25 vs. vector, how many documents to retrieve for analysis, how to chunk documents based on semantics)</li>
<li>parallelize the search pipeline to decrease wait times</li>
<li>add moderation</li>
<li>add a reranker to find best candidates</li>
<li>add background embedding calculation of user documents</li>
<li>lots of failure cases to iron out so that the prompt worked for most cases</li>
</ul>
<p>Each step would take me more than two weeks, and still have gaps. But when you’re working alone, and you’re the only judge of your work, it’s easy to overestimate its quality.</p>
]]></content></entry><entry><id>Nov 11, 2025_0</id><title>Journal</title><published>2025-11-11T00:00:00Z</published><updated>2025-11-11T00:00:00Z</updated><link href="https://peter.demin.dev/life/nov-11-2025_0.html"/><content type="html"><![CDATA[<p>For years my life felt like a crazy race at break neck speeds, with great aspirations, challenges, achievements.
Many times I asked myself: is this all there is to it?
Other times I wondered: have I peaked; is it just downslide from here?
And sometimes I feel like I won. The game is finished and I'm on top.
Like in StarCraft, when all the enemies are neutralized, there's no more threat, but you have an option to continue &quot;playing&quot;. Of course, at this point, there's no play, just frolicing around aimlessly, and exploring the senseless limits.
The lesson here, naturally, is that all these ideas are false, the hill has no top, it's round like Earth itself.</p>
]]></content></entry><entry><id>Nov 09, 2025_0</id><title>Journal</title><published>2025-11-09T00:00:00Z</published><updated>2025-11-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/nov-09-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/opencloud-eu/opencloud">opencloud-eu/opencloud</a> - 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign.</p>
]]></content></entry><entry><id>Oct 31, 2025_0</id><title>Journal</title><published>2025-10-31T00:00:00Z</published><updated>2025-10-31T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-31-2025_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/17_notes/31-cyberiad.html">"Cyberiad" by Stanislaw Lem</a>
My next book is going to be &quot;Material World&quot; by Ed Conway, <a href="https://mertbulan.com/2025/10/05/my-2025-q3-highlights-favorite-books-and-movies/">refered by Mert Bulan</a>.
And after that I'm thinking about &quot;We&quot; by Yevgeny Zamyatin, which was referenced at the end of the Cyberiad.</p>
]]></content></entry><entry><id>Oct 30, 2025_0</id><title>Journal</title><published>2025-10-30T00:00:00Z</published><updated>2025-10-30T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-30-2025_0.html"/><content type="html"><![CDATA[<p>something more amazing than $0.99 bananas? It’s $0.49 bananas, of course. Same day, no delivery fee. How are they doing it?</p>
]]></content></entry><entry><id>Oct 23, 2025_1</id><title>Journal</title><published>2025-10-23T00:00:00Z</published><updated>2025-10-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-23-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/allinurl/goaccess">allinurl/goaccess</a> - GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.</p>
]]></content></entry><entry><id>Oct 23, 2025_0</id><title>Journal</title><published>2025-10-23T00:00:00Z</published><updated>2025-10-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-23-2025_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/75-replaced-by-AI.html">To be replaced by AI is a choice</a></p>
]]></content></entry><entry><id>Oct 20, 2025_1</id><title>Journal</title><published>2025-10-20T00:00:00Z</published><updated>2025-10-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-20-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/nathan-barry/nathan.rs">nathan-barry/nathan.rs</a> - My personal site using Hugo for static site generation. My pride and joy.</p>
]]></content></entry><entry><id>Oct 20, 2025_0</id><title>Journal</title><published>2025-10-20T00:00:00Z</published><updated>2025-10-20T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-20-2025_0.html"/><content type="html"><![CDATA[<p>there’s something inconceivable about same-day delivery for a bunch of bananas for $0.99 with no delivery fee.</p>
]]></content></entry><entry><id>Oct 17, 2025_0</id><title>Journal</title><published>2025-10-17T00:00:00Z</published><updated>2025-10-17T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-17-2025_0.html"/><content type="html"><![CDATA[<p>At our reception, you’ll be treated to stale, lukewarm coffee and stone-hard bagels accompanied by jams featuring half the periodic table.</p>
]]></content></entry><entry><id>Oct 13, 2025_0</id><title>Journal</title><published>2025-10-13T00:00:00Z</published><updated>2025-10-13T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-13-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/TheLastGimbus/GooglePhotosTakeoutHelper">TheLastGimbus/GooglePhotosTakeoutHelper</a> - Script that organizes the Google Takeout archive into one big chronological folder</p>
]]></content></entry><entry><id>Oct 12, 2025_0</id><title>Journal</title><published>2025-10-12T00:00:00Z</published><updated>2025-10-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-12-2025_0.html"/><content type="html"><![CDATA[<p>Careless carsales.</p>
]]></content></entry><entry><id>Oct 09, 2025_1</id><title>Journal</title><published>2025-10-09T00:00:00Z</published><updated>2025-10-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-09-2025_1.html"/><content type="html"><![CDATA[<p>I recently learned about Gen Z emojis:</p>
<p>| Emoji                         | Gen Z Meaning                             |
| ----------------------------- | ----------------------------------------- |
| 💀 (skull)                    | I'm dying (laughing)                      |
| 🤡 (clown face)               | You're a clown                            |
| 😭 (loudly crying)            | Overwhelmed joy / cute overload           |
| 😅 (grinning face with sweat) | Stressed but okay / sarcastic             |
| 👍 (thumbs up)                | Passive-aggressive sure / OK              |
| 🙏 (folded hands)             | Thank you or please / hope so             |
| 🔥 (fire)                     | Lit / very good / attractive              |
| 👀 (eyes)                     | I’m watching / tell me more               |
| 🙃 (upside-down face)         | This is terrible / FML                    |
| ⏳ (hourglass)                | Hot / attractive                          |
| 🙂 (slightly smiling)         | Ironic / awkward smile                    |
| 😲 (shocked combo)            | Shocked / wow                             |
| 😚 (kissing face)             | Sounds good / ohhh                        |
| ❤️  (heart)                    | Softening tone — doesn't always mean love |
| 🤪 (zany face)                | Goofy / weird / silly mood                |</p>
<p>And here's a new addition, that I find more interesting:</p>
<p>👾 (space invader) means &quot;Maybe&quot; because maybe aliens exist.</p>
]]></content></entry><entry><id>Oct 09, 2025_0</id><title>Journal</title><published>2025-10-09T00:00:00Z</published><updated>2025-10-09T00:00:00Z</updated><link href="https://peter.demin.dev/life/oct-09-2025_0.html"/><content type="html"><![CDATA[<p>László Krasznahorkai won the 2025 Nobel prize in literature.
I've never heard about this author, and never bothered with Nobel prize winners before.
But this time I thought I take a look.
The award is honoring Krasznahorkai &quot;for his compelling and visionary oeuvre that, in the midst of apocalyptic terror, reaffirms the power of art.&quot;
You don't find visionary oeuvre lying around every day, so I had to check, and it means &quot;a book&quot; in this case.
Somewhat devour feculence moment for me.</p>
<p>Here's an excerpt from NPR:</p>
<blockquote>
<p>Satantango, Krasznahorkai's first novel, came out in 1985. It's about a pair of swindlers and a nearly abandoned collective farm. The book was made into a seven-hour movie in 1994. And The Melancholy of Resistance, which is one sentence that runs over 300 pages, is about a strange, ghostly circus appearing in a small town with a giant, dead stuffed whale.</p>
</blockquote>
<p>Wow, wow, wow, hold on, what? Okay, I guess, that clarifies a couple moments for me. Mainly, should I ever check again on Nobel prize winners in literature.</p>
<p><code>Oct 8, 2025</code> - Stanislaw Lem explaining ChatGPT in &quot;The Cyberiad&quot;:</p>
<p>— What exactly is this Adviser supposed to do?</p>
<p>— It should answer every question, solve every problem, give absolutely the best advice and, in a word, put the greatest wisdom entirely at my disposal.</p>
]]></content></entry><entry><id>Sep 23, 2025_0</id><title>Journal</title><published>2025-09-23T00:00:00Z</published><updated>2025-09-23T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-23-2025_0.html"/><content type="html"><![CDATA[<p>Biking downhill 27:10 (witnessed a minor accident, car running into a bike in a bike lane).</p>
]]></content></entry><entry><id>Sep 18, 2025_0</id><title>Journal</title><published>2025-09-18T00:00:00Z</published><updated>2025-09-18T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-18-2025_0.html"/><content type="html"><![CDATA[<p>Biking downhill 27:14</p>
]]></content></entry><entry><id>Sep 15, 2025_0</id><title>Journal</title><published>2025-09-15T00:00:00Z</published><updated>2025-09-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-15-2025_0.html"/><content type="html"><![CDATA[<p>Сплин - Валдай</p>
<audio controls>
    <source src="/_static/valdai.mp3" type="audio/mpeg">
    Your browser does not support the audio element.
</audio>
]]></content></entry><entry><id>Sep 13, 2025_0</id><title>Journal</title><published>2025-09-13T00:00:00Z</published><updated>2025-09-13T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-13-2025_0.html"/><content type="html"><![CDATA[<p>Ordered <a href="https://a.co/d/amwrtvX">Cyberiad</a> by Stanislaw Lem, following the reference from “Busy Doing Nothing”. Added the second and third books of Dune for my daughter, who just finished reading the first book for the fourth time.</p>
]]></content></entry><entry><id>Sep 12, 2025_1</id><title>Journal</title><published>2025-09-12T00:00:00Z</published><updated>2025-09-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-12-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/PicoTrex/Awesome-Nano-Banana-images">PicoTrex/Awesome-Nano-Banana-images</a> - A curated collection of fun and creative examples generated with Nano Banana &amp; Nano Banana Pro🍌, Gemini-2.5-flash-image based model. We also release Nano-consistent-150K openly to support the community's development of image generation and unified models(click to website to see our blog)</p>
]]></content></entry><entry><id>Sep 12, 2025_0</id><title>Journal</title><published>2025-09-12T00:00:00Z</published><updated>2025-09-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-12-2025_0.html"/><content type="html"><![CDATA[<p>When considering our service's reliability, we do not stop at mere tracking of the number of 9's. We also track 8's, and sometimes even 7's. For example, last month we achieved 5 8's, that is, 88.888% uptime.</p>
]]></content></entry><entry><id>Sep 10, 2025_0</id><title>Journal</title><published>2025-09-10T00:00:00Z</published><updated>2025-09-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-10-2025_0.html"/><content type="html"><![CDATA[<p>68 chest press, 45 rear delt, 81 leg press.</p>
]]></content></entry><entry><id>Sep 08, 2025_0</id><title>Journal</title><published>2025-09-08T00:00:00Z</published><updated>2025-09-08T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-08-2025_0.html"/><content type="html"><![CDATA[<p>I have a general superintelligence project update for the second- and third-tier semi-intellegent beings: we're doing great! None of the progress made in past week can be expressed in your level of understanding, and just learning the prerequisites would take 7 lifetimes. Thank you for your support.</p>
]]></content></entry><entry><id>Sep 07, 2025_1</id><title>Journal</title><published>2025-09-07T00:00:00Z</published><updated>2025-09-07T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-07-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/lingdojo/kana-dojo">lingdojo/kana-dojo</a> - Aesthetic, minimalist platform for learning Japanese inspired by Duolingo and Monkeytype.</p>
]]></content></entry><entry><id>Sep 07, 2025_0</id><title>Journal</title><published>2025-09-07T00:00:00Z</published><updated>2025-09-07T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-07-2025_0.html"/><content type="html"><![CDATA[<p>Something about this <a href="https://www.reddit.com/r/Cyberpunk/comments/19brjda/comment/kiua80u/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">Reddit comment</a> feels so knowledgeable and trustworthy, without any attributions or fact checking.
I've never watched <a href="https://en.wikipedia.org/wiki/Ergo_Proxy">Ergo Proxy</a>, I learned about this 2006 show from a preface to <a href="https://100r.co/site/busy_doing_nothing.html">Busy Doing Nothing</a> book.
But a list of cyberpunk shows or movies that are better than Ergo Proxy seems like a good find:</p>
<ul>
<li>Ghost in the Shell</li>
<li>Bubblegum Crisis</li>
<li>Appleseed</li>
<li>Patlabor</li>
<li>Eve no Jikan</li>
<li>Summer Wars</li>
<li>Denno Coil</li>
</ul>
]]></content></entry><entry><id>Sep 05, 2025_0</id><title>Journal</title><published>2025-09-05T00:00:00Z</published><updated>2025-09-05T00:00:00Z</updated><link href="https://peter.demin.dev/life/sep-05-2025_0.html"/><content type="html"><![CDATA[<p>Added <a href="https://peter.demin.dev/12_articles/74-Bacillus-cereus.html">Fascinating Bacillus cereus</a></p>
]]></content></entry><entry><id>Aug 31, 2025_0</id><title>Journal</title><published>2025-08-31T00:00:00Z</published><updated>2025-08-31T00:00:00Z</updated><link href="https://peter.demin.dev/life/aug-31-2025_0.html"/><content type="html"><![CDATA[<p>I rewatched <a href="https://en.wikipedia.org/wiki/Interstellar_(film)">Interstellar (2014)</a> after it came up in a discussion of movie genre preferrences with my colleage, where we both agreed that it's an outstanding movie for both sci-fi and non-sci-fi fans. Suprisingly, this time, it hit me more as a parent-child relations movie. Of course I loved how all space scenes are in total silence. To that point the score was brilliant as well. But the things that made me think the most are feelings of Coop and Murph. Dr. Mann's monologue about survival instinct and human connection landed on me as a plot twist the first time I watched (ten years ago) but now I see how it supports the main theme.</p>
<p>One thing that makes this movie special to me, is a song by a Russian artist <a href="https://youtu.be/2tiyg4AOmiw">Dolphin, Слышишь</a>, released the same year, as the movie, written from the Coop to Murph, including a verse of the unbearable longing experienced by Murph.</p>
]]></content></entry><entry><id>Aug 01, 2025_0</id><title>Journal</title><published>2025-08-01T00:00:00Z</published><updated>2025-08-01T00:00:00Z</updated><link href="https://peter.demin.dev/life/aug-01-2025_0.html"/><content type="html"><![CDATA[<p>Recently I had a conversation with a high-rank manager who didn't see value in code ownership. He talked about design and ideas, but not people and tasks. This reminded me how past breakages were caused by people making changes without sufficient context. Or how a new team member spends a week on a task that takes twenty minutes. I'd like to split this context into three parts:</p>
<ol>
<li>System design - the pretty diagramming part, that is usually done well, covered in design docs and presentations. A good design, though, is so boring, that you can grasp the idea in ten minutes.</li>
<li>Core principles - the ideas that influence how the design was produced. This is surprisingly variable between teams, never documented, and lives between an architect's head and tribe knowledge. It's also fluent, has many interpretations, and can be hardly expressed in words.</li>
<li>Minute decision that are seldomly discussed but spread all over the code. This is the biggest chunk of the context, the meat and cause of all the quirks and optimizations.</li>
</ol>
<p>Of all three, only the first one is available to people outside of the code owners. The other two take so much effort to maintain, that only the owners have the capacity to hold.</p>
]]></content></entry><entry><id>Jul 12, 2025_0</id><title>Journal</title><published>2025-07-12T00:00:00Z</published><updated>2025-07-12T00:00:00Z</updated><link href="https://peter.demin.dev/life/jul-12-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/gw1urf/spigot">gw1urf/spigot</a> - A hierarchy of Markov Chain generated web pages.</p>
]]></content></entry><entry><id>Jul 07, 2025_0</id><title>Journal</title><published>2025-07-07T00:00:00Z</published><updated>2025-07-07T00:00:00Z</updated><link href="https://peter.demin.dev/life/jul-07-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/permissionlesstech/bitchat">permissionlesstech/bitchat</a> - bluetooth mesh chat, IRC vibes</p>
]]></content></entry><entry><id>Jul 06, 2025_0</id><title>Journal</title><published>2025-07-06T00:00:00Z</published><updated>2025-07-06T00:00:00Z</updated><link href="https://peter.demin.dev/life/jul-06-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/astral-sh/uv">astral-sh/uv</a> - An extremely fast Python package and project manager, written in Rust.</p>
]]></content></entry><entry><id>Jun 21, 2025_0</id><title>Journal</title><published>2025-06-21T00:00:00Z</published><updated>2025-06-21T00:00:00Z</updated><link href="https://peter.demin.dev/life/jun-21-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/Automattic/harper">Automattic/harper</a> - Offline, privacy-first grammar checker. Fast, open-source, Rust-powered</p>
]]></content></entry><entry><id>Jun 17, 2025_0</id><title>Journal</title><published>2025-06-17T00:00:00Z</published><updated>2025-06-17T00:00:00Z</updated><link href="https://peter.demin.dev/life/jun-17-2025_0.html"/><content type="html"><![CDATA[<p>Today I learned about <a href="https://www.openculture.com/freeonlinecourses">1,700 Free Online Courses from Top Universities from Open Culture</a>. I'm going to explore what's available in the next few days.</p>
]]></content></entry><entry><id>Jun 15, 2025_0</id><title>Journal</title><published>2025-06-15T00:00:00Z</published><updated>2025-06-15T00:00:00Z</updated><link href="https://peter.demin.dev/life/jun-15-2025_0.html"/><content type="html"><![CDATA[<p><a href="https://github.com/nicopowa/ripples3">nicopowa/ripples3</a> - liquid code</p>
]]></content></entry><entry><id>Jun 10, 2025_2</id><title>Journal</title><published>2025-06-10T00:00:00Z</published><updated>2025-06-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/jun-10-2025_2.html"/><content type="html"><![CDATA[<p><a href="https://github.com/apple/container">apple/container</a> - A tool for creating and running Linux containers using lightweight virtual machines on a Mac. It is written in Swift, and optimized for Apple silicon.</p>
]]></content></entry><entry><id>Jun 10, 2025_1</id><title>Journal</title><published>2025-06-10T00:00:00Z</published><updated>2025-06-10T00:00:00Z</updated><link href="https://peter.demin.dev/life/jun-10-2025_1.html"/><content type="html"><![CDATA[<p><a href="https://github.com/pypiserver/pypiserver">pypiserver/pypiserver</a> - Minimal PyPI server for uploading &amp; downloading packages with pip/easy_install</p>
]]></content></entry></feed>
