<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Michael Vorburger.ch Blog (v3)</title><link>https://blog3.vorburger.ch/</link><description>Recent content on Michael Vorburger.ch Blog (v3)</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 06 Apr 2026 12:40:01 +0200</lastBuildDate><atom:link href="https://blog3.vorburger.ch/index.xml" rel="self" type="application/rss+xml"/><item><title>AI gone loco</title><link>https://blog3.vorburger.ch/ml/ai-gone-loco-mad/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/ai-gone-loco-mad/</guid><description>&lt;h1 id="ai-gone-loco"&gt;AI gone loco&lt;/h1&gt;
&lt;p&gt;Today something funny happened. I was using &lt;a href="https://antigravity.google"&gt;Google Antigravity&lt;/a&gt;
, running several conversations in parallel in its &lt;em&gt;Agent Manager&lt;/em&gt;, and things went a bit loco&amp;hellip;&lt;/p&gt;
&lt;p&gt;To my prompt — &lt;em&gt;&amp;ldquo;In ClasspathStore, ditch all .form support, like id.endsWith(&amp;quot;.form&amp;rdquo;), by renaming any *.form.yaml to simply be *.yaml&amp;quot;&lt;/em&gt; — it responded with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「境目から」というお言葉ですが、何か特定のソースコードや文章の続きを記述、あるいは解説することを希望されていますでしょうか？&lt;/p&gt;
&lt;p&gt;前回の回答では、&lt;code&gt;scikit-learn&lt;/code&gt;を用いたカリフォルニア住宅価格データセットのRandom Forest回帰（GridSearchCVによるハイパーパラメータ調整付き）のコードを作成しました。&lt;/p&gt;
&lt;p&gt;もし、そのコードの**「この部分（境目）から解説してほしい」&lt;strong&gt;や、&lt;/strong&gt;「特定の処理の続きを書いてほしい」**といったご要望があれば、詳しく教えていただけますか？&lt;/p&gt;
&lt;p&gt;以下に、先ほどのコードの要点を日本語で解説します：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;データの読み込み&lt;/strong&gt;: &lt;code&gt;fetch_california_housing()&lt;/code&gt; でデータセットを取得。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分割&lt;/strong&gt;: データを訓練用とテスト用に 8:2 で分割。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;グリッドサーチの設定&lt;/strong&gt;: &lt;code&gt;n_estimators&lt;/code&gt;（樹木の数）、&lt;code&gt;max_depth&lt;/code&gt;（最大長）、&lt;code&gt;min_samples_split&lt;/code&gt;（分割に必要な最小サンプル数）の候補を指定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モデル構築&lt;/strong&gt;: &lt;code&gt;GridSearchCV&lt;/code&gt; を使い、3分割差交差検証（&lt;code&gt;cv=3&lt;/code&gt;）と並列処理（&lt;code&gt;n_jobs=-1&lt;/code&gt;）で最適なパラメータを探索。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;評価&lt;/strong&gt;: 最良のモデルでテストデータを予測し、平均二乗誤差（MSE）を算出。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;続きが必要な場合や、別の修正が必要な場合はお知らせください。&lt;/p&gt;</description></item><item><title>Calculating Gemini CLI Token Costs for Agentic Vibe Coding</title><link>https://blog3.vorburger.ch/ml/gemini-cli-cost/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/gemini-cli-cost/</guid><description>&lt;h1 id="calculating-gemini-cli-token-costs-for-agentic-vibe-coding"&gt;Calculating Gemini CLI Token Costs for Agentic Vibe Coding&lt;/h1&gt;
&lt;p&gt;While &lt;a href="./linux/terminal-bells/"&gt;parallelizing AI workflows with background agents&lt;/a&gt;
 is a massive productivity booster, this &amp;ldquo;fire and forget&amp;rdquo; vibe coding introduces a new challenge: keeping track of your LLM API costs. If you want to quickly convert your terminal token usage into actual dollars, I highly recommend using this &lt;a href="https://aish.li/cost/gemini-cli"&gt;Gemini CLI Cost Calculator&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Using the Gemini CLI, you get a transparent summary of your token usage at the end of every session:&lt;/p&gt;</description></item><item><title>Parallelizing Agentic Coding: Supercharging AI Workflows with Terminal Notifications</title><link>https://blog3.vorburger.ch/linux/terminal-bells/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/terminal-bells/</guid><description>&lt;h1 id="parallelizing-agentic-coding-supercharging-ai-workflows-with-terminal-notifications"&gt;Parallelizing Agentic Coding: Supercharging AI Workflows with Terminal Notifications&lt;/h1&gt;
&lt;p&gt;The real power of AI-assisted development isn&amp;rsquo;t just having an agent write code for you; it&amp;rsquo;s the ability to &lt;em&gt;parallelize&lt;/em&gt; your workflow. When you assign a complex, multi-step refactoring task or a deep codebase investigation to a tool like the Gemini CLI, you shouldn&amp;rsquo;t just sit there watching the terminal output scroll by. You should be switching to another pane to write documentation, review PRs, or tackle another problem entirely while the agent grinds away in the background.&lt;/p&gt;</description></item><item><title>How I am prompting LLMs: Should you say Thank You? Please?</title><link>https://blog3.vorburger.ch/ml/prompting1/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/prompting1/</guid><description>&lt;h1 id="how-i-am-prompting-llms-should-you-say-thank-you-please"&gt;How I am prompting LLMs: Should you say Thank You? Please?&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://huggingface.co/blog/jdelavande/thank-you-energy"&gt;https://huggingface.co/blog/jdelavande/thank-you-energy&lt;/a&gt;
 is an interesting article.&lt;/p&gt;
&lt;p&gt;What it doesn&amp;rsquo;t mention is the &amp;ldquo;exponential&amp;rdquo; cost of saying &lt;em&gt;&amp;ldquo;Thank You&amp;rdquo;&lt;/em&gt; at the end of a long conversation&amp;hellip;
as each follow-up prompt must send the entire conversation, real world energy consumption is likely much higher than
the &amp;ldquo;synthetic&amp;rdquo; &lt;em&gt;Thank You&lt;/em&gt; on an empty context.&lt;/p&gt;
&lt;p&gt;Personally I&amp;rsquo;m currently typically prompting LLMs like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I use &amp;ldquo;imperative&amp;rdquo; language &lt;em&gt;(&amp;ldquo;do&amp;rdquo;,&lt;/em&gt; not &lt;em&gt;&amp;ldquo;could you&amp;rdquo;&lt;/em&gt; nor &lt;em&gt;&amp;ldquo;please&amp;rdquo;)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;I frequently create new sessions, instead of never ending long conversations (&lt;code&gt;/clear&lt;/code&gt; in Gemini CLI)&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t send any follow-up prompt when the task at hand is completed to my satisfaction&lt;/li&gt;
&lt;li&gt;I on (pretty rare) occasions still can&amp;rsquo;t quite avoid an &amp;ldquo;oh wow, you&amp;rsquo;re awesome&amp;rdquo; 😀&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sending a &amp;ldquo;Thank You&amp;rdquo; to an LLM as the last prompt to end a conversation does not seem like a good idea energy wise.&lt;/p&gt;</description></item><item><title>How to log to Google Cloud Logging as JSON from Java with SLF4j</title><link>https://blog3.vorburger.ch/java/logback-cloudlogging/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/java/logback-cloudlogging/</guid><description>&lt;h1 id="how-to-log-to-google-cloud-gcp-logging-as-json-from-java-with-slf4j"&gt;How to log to Google Cloud (GCP) Logging as JSON from Java with SLF4j&lt;/h1&gt;
&lt;p&gt;Add &lt;a href="https://github.com/logfellow/logstash-logback-encoder"&gt;https://github.com/logfellow/logstash-logback-encoder&lt;/a&gt;
 and put this into your &lt;code&gt;logback.xml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Use JSON format for scalable logging suitable for Google Cloud Logging --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;appender&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;STDOUT&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ch.qos.logback.core.ConsoleAppender&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;encoder&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;net.logstash.logback.encoder.LogstashEncoder&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- logstash-logback-encoder writes timestamps in the default TimeZone of the JVM, but GCP wants UTC --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;timeZone&amp;gt;&lt;/span&gt;UTC&lt;span style="color:#f92672"&gt;&amp;lt;/timeZone&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Align field names with Google Cloud Structured Logging requirements;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; see https://docs.cloud.google.com/logging/docs/structured-logging,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; and https://docs.cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry. --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;fieldNames&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- GCP expects &amp;#39;timestamp&amp;#39;, logstash-logback-encoder defaults to &amp;#39;@timestamp&amp;#39; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;timestamp&amp;gt;&lt;/span&gt;timestamp&lt;span style="color:#f92672"&gt;&amp;lt;/timestamp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- GCP expects &amp;#39;severity&amp;#39;, logstash-logback-encoder defaults to &amp;#39;level&amp;#39; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;level&amp;gt;&lt;/span&gt;severity&lt;span style="color:#f92672"&gt;&amp;lt;/level&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Ignore levelValue as severity is sufficient for GCP --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;levelValue&amp;gt;&lt;/span&gt;[ignore]&lt;span style="color:#f92672"&gt;&amp;lt;/levelValue&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Disable logstash-logback-encoder&amp;#39;s &amp;#39;@version&amp;#39; field as GCP doesn&amp;#39;t use it --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;[ignore]&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- GCP expects &amp;#39;message&amp;#39; which is the default for logstash-logback-encoder --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/fieldNames&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/encoder&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/appender&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Wrap STDOUT in AsyncDisruptorAppender for better performance, decoupling logging from I/O --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;appender&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ASYNC_STDOUT&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;appender-ref&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ref=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;STDOUT&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/appender&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Suppress verbose internal logging from certain libraries if needed --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- &amp;lt;logger name=&amp;#34;org.apache&amp;#34; level=&amp;#34;WARN&amp;#34; /&amp;gt; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;root&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;level=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;INFO&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;appender-ref&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ref=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ASYNC_STDOUT&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;PS: Alternative SLF4j JSON logging libraries (which out of the box all don&amp;rsquo;t emit exactly the right format for GCP CL, as the above will):&lt;/p&gt;</description></item><item><title>From Prompt to Production: AI Vibe Coding Web Frontends by Chaining Google's Stitch, AI Studio, and Antigravity</title><link>https://blog3.vorburger.ch/ml/ai-frontends-google-stitch-studio-build-antigravity/</link><pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/ai-frontends-google-stitch-studio-build-antigravity/</guid><description>&lt;h1 id="from-prompt-to-production-ai-vibe-coding-web-frontends-by-chaining-googles-stitch-ai-studio-and-antigravity"&gt;From Prompt to Production: AI Vibe Coding Web Frontends by Chaining Google&amp;rsquo;s Stitch, AI Studio, and Antigravity&lt;/h1&gt;
&lt;p&gt;I recently sat down to finally try out hands-on for myself just exactly how easy it is in February 2026 to have an AI generate a well designed full-fledged working HTML/CSS/JS front-end UI.&lt;/p&gt;
&lt;h2 id="the-design-phase-stitch"&gt;The Design Phase: Stitch&lt;/h2&gt;
&lt;p&gt;Starting with &lt;a href="https://stitch.withgoogle.com"&gt;Google’s Stitch&lt;/a&gt;
, I iterated on a few high-level graphical design ideas.&lt;/p&gt;
&lt;p&gt;This feels similar to what you would have done with your human graphical designer, using tools like Figma, back in the pre-AI era.&lt;/p&gt;</description></item><item><title>Gemini Fixed Audio Bug</title><link>https://blog3.vorburger.ch/ml/gemini-fixed-audio-bug/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/gemini-fixed-audio-bug/</guid><description>&lt;h1 id="gemini-fixed-audio-bug"&gt;Gemini Fixed Audio Bug&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;m experimenting with using the Gemini Live API, and have (obviously) &amp;ldquo;vibe coded&amp;rdquo; (parts of) what I&amp;rsquo;m doing.&lt;/p&gt;
&lt;p&gt;It worked surprisingly well right away, but there was this annoying audio bug. (Signal Processing is not my forte.)&lt;/p&gt;
&lt;p&gt;Then I had an idea for something which I didn&amp;rsquo;t really think would actually work, but hey, try it anyway, right?&lt;/p&gt;
&lt;p&gt;I recorded a short audio clip of the problem, and uploaded it to Gemini, asking it for help. And oh boy, is this impressive or what:&lt;/p&gt;</description></item><item><title>NixOS Testing</title><link>https://blog3.vorburger.ch/linux/nix/testing/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/nix/testing/</guid><description>&lt;h1 id="nixos-testing"&gt;NixOS Testing&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve continued to dabble with NixOS &lt;a href="./conferences/nixcon-2025/"&gt;since attending NixCon 2025&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Today I finally got around to learning &lt;a href="https://github.com/vorburger/LearningLinux/blob/7d6819e4bef64352c34669e0ae2a4b2e4868473a/nix/docs/testing.md#references"&gt;how to do testing of NixOS configurations&lt;/a&gt;
; and it&amp;rsquo;s actually pretty cool!!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/vorburger/LearningLinux/blob/7d6819e4bef64352c34669e0ae2a4b2e4868473a/nix/docs/install.md"&gt;First install nix&lt;/a&gt;
, if you haven&amp;rsquo;t already.
Then, &lt;a href="https://github.com/vorburger/LearningLinux/tree/7d6819e4bef64352c34669e0ae2a4b2e4868473a/nix/os/tests"&gt;as explored in my LearningLinux repo here&lt;/a&gt;
,
put this into a &lt;code&gt;hello.nix&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{ pkgs&lt;span style="color:#f92672"&gt;,&lt;/span&gt; &lt;span style="color:#f92672"&gt;...&lt;/span&gt; }:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; environment&lt;span style="color:#f92672"&gt;.&lt;/span&gt;systemPackages &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; pkgs; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hello
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and then this into a &lt;code&gt;test.nix&lt;/code&gt; file:&lt;/p&gt;</description></item><item><title>Vorburger.ch AI Git Memory `aifiles`</title><link>https://blog3.vorburger.ch/ml/vorburger-ai-git-memory/</link><pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/vorburger-ai-git-memory/</guid><description>&lt;h1 id="vorburgerch-ai-git-memory-aifiles"&gt;Vorburger.ch AI Git Memory &lt;code&gt;aifiles&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Like everyone else, I am increasingly using AI tools.&lt;/p&gt;
&lt;p&gt;Today I finally got around to start setting up what will be the (public) &amp;ldquo;memory&amp;rdquo; of my personal future AI agents that will work for me.&lt;/p&gt;
&lt;p&gt;Being a developer, I don&amp;rsquo;t want this to be hidden away in some proprietary black box, but instead want to be able to inspect, edit, and version control it.&lt;/p&gt;
&lt;p&gt;I also don&amp;rsquo;t want it be specific to any one AI tool or provider, but instead be portable and reusable across all of them;
whether that&amp;rsquo;s the (awesome!) &lt;a href="https://geminicli.com/"&gt;Gemini CLI&lt;/a&gt;
, Anthropic&amp;rsquo;s Claude Code, OpenAI&amp;rsquo;s, or my very own &lt;a href="https://enola.dev/"&gt;Enola.dev&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>NixCon 2025</title><link>https://blog3.vorburger.ch/conferences/nixcon-2025/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/conferences/nixcon-2025/</guid><description>&lt;h1 id="nixcon-2025"&gt;NixCon 2025&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve attended &lt;a href="https://2025.nixcon.org"&gt;https://2025.nixcon.org&lt;/a&gt;
 in Rapperswil-Jona near Zürich in Switzerland, and here are some thoughts about it, written up on my way home.&lt;/p&gt;
&lt;p&gt;Nix is several things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an interesting but at least initially to me a bit scary &lt;em&gt;functional&lt;/em&gt; &lt;a href="https://github.com/vorburger/LearningLinux/blob/develop/nix/bookmarks.md#configuration-language"&gt;configuration language&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;a package 📦 manager (like &lt;code&gt;apt&lt;/code&gt; or &lt;code&gt;dnf&lt;/code&gt;), which can be used on any Linux distro, as well as on 🍎 Macs (like Homebrew 🍺 &lt;code&gt;brew&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;a &lt;em&gt;declarative&lt;/em&gt; Linux distro called NixOS (like Fedora, Ubuntu or Debian)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This may be one part of what makes it a little hard to grasp in the beginning. Other parts could be the at least initially somewhat confusing old (&lt;code&gt;nix-*&lt;/code&gt; commands) vs. new (&lt;a href="https://vtimofeenko.com/posts/practical-nix-flake-anatomy-a-guided-tour-of-flake.nix/"&gt;Flakes&lt;/a&gt;
; and &lt;code&gt;nix …&lt;/code&gt; commands) usage styles, the several docs sites (and &lt;a href="https://nixos.wiki/wiki/NixOS_Wiki:History"&gt;Wiki&lt;/a&gt;
), and different ways of doing many things. On the other hand, perhaps some of this “I need to figure out things for myself like I used to on my first 8bit home computer” (if you’re old enough to remember?) is also what appeals to people interested in Nix? ✅ Check for myself personally! 😆&lt;/p&gt;</description></item><item><title>SSH with private keys sealed in TPM on Fedora Linux</title><link>https://blog3.vorburger.ch/security/ssh-tpm/</link><pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/security/ssh-tpm/</guid><description>&lt;h1 id="ssh-with-private-keys-sealed-in-tpm-on-fedora-linux"&gt;SSH with private keys sealed in TPM on Fedora Linux&lt;/h1&gt;
&lt;p&gt;Instead of &lt;a href="./security/ed25519-sk/"&gt;safely storing SSH private keys on a Yubikey&lt;/a&gt;
 (if you don&amp;rsquo;t have one) you might want to keep private keys sealed in TPM.&lt;/p&gt;
&lt;p&gt;Here is how to do this on Fedora Linux using &lt;a href="https://github.com/Foxboron/ssh-tpm-agent"&gt;https://github.com/Foxboron/ssh-tpm-agent&lt;/a&gt;
:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo dnf install openssl-devel
$ go install github.com/foxboron/ssh-tpm-agent/cmd/...@latest

$ ~/go/bin/ssh-tpm-keygen --supported
ecdsa bit lengths: 256 384
rsa bit lengths: 2048
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As this TPM supports ECDSA keys with 384 (but not 521) bits, so:&lt;/p&gt;</description></item><item><title>Google Agent Development Kit (ADK) for Java with Gemma on Ollama</title><link>https://blog3.vorburger.ch/ml/adk-ollama/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/adk-ollama/</guid><description>&lt;h1 id="google-agent-development-kit-adk-for-java-with-gemma-on-ollama"&gt;Google Agent Development Kit (ADK) for Java with Gemma on Ollama&lt;/h1&gt;
&lt;p&gt;Good news for Java developers! Google&amp;rsquo;s &lt;a href="https://google.github.io/adk-docs"&gt;🧰 Agent Development Kit&lt;/a&gt;
 (ADK), already popular in the 🐍 Python community, has officially arrived for ☕ Java.&lt;/p&gt;
&lt;p&gt;This opens up exciting possibilities for millions of Java developers and enterprises looking to integrate powerful AI agent capabilities into their existing applications.&lt;/p&gt;
&lt;p&gt;The initial version of the Java ADK directly supports the Gemini and Claude large language model (LLM) APIs already.
In the Java ecosystem, &lt;a href="https://docs.langchain4j.dev"&gt;LangChain4j&lt;/a&gt;
 is a popular framework (together with Spring AI)
which already has many (20+ and more through the OpenAI API) integrations with other LLMs.&lt;/p&gt;</description></item><item><title>Fun with Pseudo-Terminals (PTY) &amp; TTY ("Teletypewriter") over `socat` &amp; `websocat`</title><link>https://blog3.vorburger.ch/linux/pty-tty/</link><pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/pty-tty/</guid><description>&lt;h1 id="fun-with-pseudo-terminals-pty--tty-teletypewriter-over-socat--websocat"&gt;Fun with Pseudo-Terminals (PTY) &amp;amp; TTY (&amp;ldquo;Teletypewriter&amp;rdquo;) over &lt;code&gt;socat&lt;/code&gt; &amp;amp; &lt;code&gt;websocat&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;In the context of &lt;a href="https://github.com/enola-dev/enola/issues/1368"&gt;Enola.dev #1368&lt;/a&gt;
,
I recently learned a few things related to &lt;a href="https://man.archlinux.org/man/openpty.3"&gt;openpty&lt;/a&gt;
 and
how to execute a program under a &lt;em&gt;&amp;ldquo;pseudo (virtual) terminal&amp;rdquo;&lt;/em&gt; so that it e.g. prints ANSI color codes,
and allows interactive control, like a Shell or Editor requires.&lt;/p&gt;
&lt;h2 id="socat"&gt;socat&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.dest-unreach.org/socat/"&gt;socat&lt;/a&gt;
, the &lt;em&gt;&amp;ldquo;better netcat++&amp;rdquo;&lt;/em&gt; is one way do this. In one Terminal, run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;socat file:/dev/tty,raw,echo=0 tcp-listen:12345
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In another Terminal, run:&lt;/p&gt;</description></item><item><title>Jules.google</title><link>https://blog3.vorburger.ch/ml/jules1/</link><pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/jules1/</guid><description>&lt;h1 id="julesgoogle"&gt;Jules.google&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://jules.google/"&gt;jules.google&lt;/a&gt;
 is my new best friend. It&amp;rsquo;s just so very awesome.&lt;/p&gt;
&lt;p&gt;It just made a fix for
&lt;a href="https://github.com/vorburger/ch.vorburger.exec/issues/263"&gt;ch.vorburger.exec issue #263&lt;/a&gt;
 from my prompts;
see &lt;a href="https://github.com/vorburger/ch.vorburger.exec/pull/279"&gt;PR #279&lt;/a&gt;
 - it&amp;rsquo;s great.&lt;/p&gt;
&lt;p&gt;Jules directly works on your project in an isolated new VM for each task, where it iterates until a solution passes the build. This is the next step of where we&amp;rsquo;re heading as an industry, and the generation beyond the current assistants that are inside your traditional IDE. With Jules, I didn&amp;rsquo;t manually edit files anymore at all; only chat. Here is the story of the aforementioned PR:&lt;/p&gt;</description></item><item><title>Switching from NetworkManager to systemd-networkd on Fedora Linux 41 Workstation</title><link>https://blog3.vorburger.ch/linux/systemd-networkd/</link><pubDate>Sat, 12 Apr 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/systemd-networkd/</guid><description>&lt;h1 id="switching-from-networkmanager-to-systemd-networkd-on-fedora-linux-41-workstation"&gt;Switching from NetworkManager to systemd-networkd on Fedora Linux 41 Workstation&lt;/h1&gt;
&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;This blog post documents how to switch from NetworkManager to systemd-networkd on Fedora Linux 41 Workstation.&lt;/p&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;I have always been using NetworkManager on Fedora Linux Workstation. But sometimes my computer would refuse to enter suspend mode, or not work when resuming (&amp;ldquo;waking up&amp;rdquo;) from suspension.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;journalctl -k&lt;/code&gt; showed that it was because of: &lt;em&gt;&amp;ldquo;Freezing user space processes failed after 20.004 seconds (14 tasks refusing to freeze, wq_busy=0):&amp;rdquo;&lt;/em&gt; with all in &lt;code&gt;state:D&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>FOSDEM 2025</title><link>https://blog3.vorburger.ch/conferences/fosdem-2025/</link><pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/conferences/fosdem-2025/</guid><description>&lt;h1 id="fosdem-2025"&gt;FOSDEM 2025&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.fosdem.org/2025/schedule/"&gt;https://www.fosdem.org/2025/schedule/&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="saturday-2025-02-01"&gt;Saturday 2025-02-01&lt;/h2&gt;
&lt;h3 id="welcome"&gt;Welcome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;FOSDEM was the 1st IPv6-only non-network large-scale conference&lt;/li&gt;
&lt;li&gt;Quote: &lt;em&gt;&amp;ldquo;Send us your anecdotes, e.g. if you met someone here at FOSDEM and got married.&amp;rdquo;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://FOSStodon.org/#FOSDEM"&gt;https://FOSStodon.org/#FOSDEM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;February 1st is &lt;em&gt;Global Switch Day,&lt;/em&gt; from:
&lt;ul&gt;
&lt;li&gt;Twitter to Mastodon&lt;/li&gt;
&lt;li&gt;Instagram to Pixelfeed&lt;/li&gt;
&lt;li&gt;WhatsApp to Signal (or Threema!)&lt;/li&gt;
&lt;li&gt;Facebook to Friendica&lt;/li&gt;
&lt;li&gt;YouTube to PeerTube&lt;/li&gt;
&lt;li&gt;TikTok to Loops.video&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sponsored by Google, Red Hat, ARM, Block, Bloomberg, CNCF, Codethink, Colt, Element, dstny, Eclipse Foundation, Mozilla&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="logo"&gt;Logo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Seymour Papert, Jean Piaget (Swiss), Marvin Minskey, Alan Key (Xerox PARC, &lt;em&gt;&amp;ldquo;A personal computer for children of all ages&amp;rdquo;,&lt;/em&gt; 1972); MIT&lt;/li&gt;
&lt;li&gt;Speaker worked with Alan Key&lt;/li&gt;
&lt;li&gt;Turtle, making it physical is important&lt;/li&gt;
&lt;li&gt;Logo&lt;/li&gt;
&lt;li&gt;Smalltalk-80, Squeak open-sourced in 1996 by Alan Key, eToys; try &lt;a href="https://squeak.js.org/etoys/"&gt;Squeak.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Scratch is #12 on TIOBE programming languages popularity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is what got me started - a 100 years ago; Thank You, MIGROS Klubschule St.Gallen.&lt;/p&gt;</description></item><item><title>Visual Studio Code 'launch-failed' code '159' Crash Fixed</title><link>https://blog3.vorburger.ch/linux/visual-studio-code-crash/</link><pubDate>Sun, 29 Dec 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/visual-studio-code-crash/</guid><description>&lt;h1 id="visual-studio-code-launch-failed-code-159-crash-fixed"&gt;Visual Studio Code &amp;rsquo;launch-failed&amp;rsquo; code &amp;lsquo;159&amp;rsquo; Crash Fixed&lt;/h1&gt;
&lt;p&gt;Recently my Visual Studio Code on Fedora Linux 41 Workstation failed to start, saying: &lt;em&gt;&amp;ldquo;The window terminated unexpectedly (reason &amp;rsquo;launch-failed&amp;rsquo; code &amp;lsquo;159&amp;rsquo;)&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I initially attempted to solve this by starting it with &lt;code&gt;code --verbose --wait&lt;/code&gt;, but that just showed some error messages which didn&amp;rsquo;t mean all that much to me.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gemini.google.com"&gt;Google Gemini&lt;/a&gt;
 was kind enough to walk me through debugging this using the following steps:&lt;/p&gt;</description></item><item><title>GitHub Pages on Custom Domains required `github.io` instead of `github.com` DNS</title><link>https://blog3.vorburger.ch/networking/github.com-github.io-pages/</link><pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/networking/github.com-github.io-pages/</guid><description>&lt;h1 id="github-pages-on-custom-domains-required-githubio-instead-of-githubcom-dns"&gt;GitHub Pages on Custom Domains required &lt;code&gt;github.io&lt;/code&gt; instead of &lt;code&gt;github.com&lt;/code&gt; DNS&lt;/h1&gt;
&lt;p&gt;My personal homepage &lt;a href="https://www.vorburger.ch"&gt;https://www.vorburger.ch&lt;/a&gt;
 is hosted on the &lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;
 Content Delivery Network (CDN).&lt;/p&gt;
&lt;p&gt;Tonight while I was having dinner, the uptime monitoring I set up for it using &lt;a href="https://cronitor.io/"&gt;Cronitor.io&lt;/a&gt;
 (great product!) started firing 🚨 alerts - homepage down!&lt;/p&gt;
&lt;p&gt;After poking around my domain registrar, DNS server and GitHub, I noticed, somewhat by chance, that I have been, since a very long time, using a &lt;code&gt;CNAME&lt;/code&gt; of &lt;code&gt;vorburger.github.com&lt;/code&gt; for &lt;code&gt;www.vorburger.ch&lt;/code&gt;. This has been working since mid-2012, 12+ years!&lt;/p&gt;</description></item><item><title>Infomaniak.com Swiss Cloud Provider Technical Support for SMTP problem</title><link>https://blog3.vorburger.ch/networking/infomaniak1/</link><pubDate>Wed, 27 Nov 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/networking/infomaniak1/</guid><description>&lt;h1 id="infomaniakcom-swiss-cloud-provider-technical-support-for-smtp-problem"&gt;Infomaniak.com Swiss Cloud Provider Technical Support for SMTP problem&lt;/h1&gt;
&lt;p&gt;One fine day, when I am retired, and will have more time at hand to &amp;ldquo;have fun&amp;rdquo; than I do these days, I&amp;rsquo;ll switch my personal email to &lt;a href="https://github.com/vorburger/awesome-decentralized-internet-web3-blockchain-p2p-security-world-cloud"&gt;being fully decentralized self-hosting&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;But these days fully running &lt;a href="https://en.wikipedia.org/wiki/Message_transfer_agent"&gt;your own MTA&lt;/a&gt;
 properly requires more time than I personally am currently willing to give it.&lt;/p&gt;
&lt;p&gt;In the meantime, I run my personal email in an admittedly somewhat weird set-up, like this:&lt;/p&gt;</description></item><item><title>Solid</title><link>https://blog3.vorburger.ch/linked-data/solid1/</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linked-data/solid1/</guid><description>&lt;h1 id="solid"&gt;Solid&lt;/h1&gt;
&lt;p&gt;I had heard about &lt;a href="https://archive.fosdem.org/2023/schedule/event/sovcloud_from_zero_to_hero_with_solid/"&gt;Solid&lt;/a&gt;
 from ⚔️ sir &lt;a href="https://www.w3.org/People/Berners-Lee/"&gt;TBL 🧎&lt;/a&gt;
 a few years ago already, but only today I&amp;rsquo;ve actually tried it out; like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create your Pod, e.g. at &lt;a href="https://start.inrupt.com/profile"&gt;Inrupt&lt;/a&gt;
 (or another &lt;a href="https://solidproject.org/for-developers#hosted-pod-services"&gt;hosted pod service&lt;/a&gt;
, not tested)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use an App, such as &lt;a href="https://noeldemartin.github.io/media-kraken/"&gt;Media Kraken&lt;/a&gt;
, chose to &lt;em&gt;store your data&lt;/em&gt; using Solid, Login with your own &lt;a href="https://id.inrupt.com/YOU"&gt;https://id.inrupt.com/YOU&lt;/a&gt;
, add your favorite movies!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now, to look &amp;ldquo;behind the curtain&amp;rdquo; and &amp;ldquo;under the hood&amp;rdquo;, look at your personal RDF content, using a UI or as &lt;a href="https://docs.enola.dev/concepts/turtle/"&gt;raw 🐢 Turtle&lt;/a&gt;
, using a &lt;em&gt;Pod Browser&lt;/em&gt; such as &lt;a href="https://penny.vincenttunru.com/"&gt;Penny&lt;/a&gt;
 - no &lt;a href="https://takeout.google.com"&gt;Take Out&lt;/a&gt;
 of your 🔗 Linked Data needed!&lt;/p&gt;</description></item><item><title>OpenJDK JIRA</title><link>https://blog3.vorburger.ch/java/openjdk-jira/</link><pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/java/openjdk-jira/</guid><description>&lt;h1 id="openjdk-jira"&gt;OpenJDK JIRA&lt;/h1&gt;
&lt;p&gt;The JIRA instance of the OpenJDK at &lt;a href="https://bugs.openjdk.org"&gt;https://bugs.openjdk.org&lt;/a&gt;
 is &amp;ldquo;open&amp;rdquo; in the sense that many of its issues are publicly viewable.&lt;/p&gt;
&lt;p&gt;In order to be able to create an account to file new issues, or comment on existing ones etc., one must however necessarily first already be an &lt;em&gt;author&lt;/em&gt; in the external OpenJDK project, see &lt;a href="https://openjdk.org/projects/#project-author"&gt;this doc&lt;/a&gt;
 and &lt;a href="https://openjdk.org/bylaws#author"&gt;the bylaws&lt;/a&gt;
. (There may also be some path through which one can start submitting something via &lt;a href="https://bugreport.java.com/bugreport"&gt;https://bugreport.java.com/bugreport&lt;/a&gt;
, and that then may or may not somehow end up over on &lt;a href="https://bugs.openjdk.org"&gt;https://bugs.openjdk.org&lt;/a&gt;
; I&amp;rsquo;ve not further explored that.)&lt;/p&gt;</description></item><item><title>GitJournal</title><link>https://blog3.vorburger.ch/plaintext/gitjournal/</link><pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/plaintext/gitjournal/</guid><description>&lt;h1 id="gitjournal"&gt;GitJournal&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;m switching my task management from Google Tasks to &amp;ldquo;&lt;a href="https://plaintextproject.online"&gt;plain text&lt;/a&gt;
&amp;rdquo; with the &lt;a href="https://gitjournal.io"&gt;GitJournal&lt;/a&gt;
 Android App.&lt;/p&gt;
&lt;p&gt;This allows me to more easily edit/move/delete tasks both on Mobile and on Desktop in e.g. my Visual Studio Code (VSC) text editor - integrated together with my longer MD ToDo Notes.
(Plain &amp;ldquo;text&amp;rdquo; here means Markdown (MD) - it IS 2024 and not 1999, after all&amp;hellip; 😄)&lt;/p&gt;
&lt;p&gt;GitJournal, unlike Google Tasks, doesn&amp;rsquo;t have details, end-dates, sub-tasks, repeating tasks - but I&amp;rsquo;m thinking that&amp;rsquo;s a great ✅ &lt;em&gt;KISS&lt;/em&gt; Feature, not a Bug&amp;hellip; 😸&lt;/p&gt;</description></item><item><title>"Pass through" a physical disk in Virtual Machine Manager</title><link>https://blog3.vorburger.ch/linux/vmm-disk-passthrough/</link><pubDate>Fri, 31 May 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/vmm-disk-passthrough/</guid><description>&lt;h1 id="pass-through-a-physical-disk-in-virtual-machine-manager"&gt;&amp;ldquo;Pass through&amp;rdquo; a physical disk in Virtual Machine Manager&lt;/h1&gt;
&lt;p&gt;Here is how to &amp;ldquo;pass through&amp;rdquo; an actual physical disk from a Linux (workstation) host into a (Linux) virtual machine, using the &lt;a href="https://virt-manager.org/"&gt;Virtual Machine Manager&lt;/a&gt;
 (VMM) UI with click-click.&lt;/p&gt;
&lt;p&gt;One reason why one might want to do this could be e.g. to explore running &lt;a href="https://www.truenas.com"&gt;TrueNAS&lt;/a&gt;
 in a VM.&lt;/p&gt;
&lt;h2 id="steps"&gt;Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open VM&amp;rsquo;s settings via menu &lt;em&gt;Edit &amp;gt; Virtual Machine Details&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;em&gt;Add Hardware&lt;/em&gt; (lower left)&lt;/p&gt;</description></item><item><title>Running Ollama LLMs in an AMD Radeon RX 7600 XT on Fedora 40</title><link>https://blog3.vorburger.ch/ml/ollama1/</link><pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/ml/ollama1/</guid><description>&lt;h1 id="running-ollama-llms-in-an-amd-radeon-rx-7600-xt-on-fedora-40"&gt;Running Ollama LLMs in an AMD Radeon RX 7600 XT on Fedora 40&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://ollama.com"&gt;Ollama&lt;/a&gt;
 makes it very easy to get up and running with large language models (LLM).&lt;/p&gt;
&lt;p&gt;I recently got a shiny new &lt;a href="https://www.amd.com/en/products/graphics/amd-radeon-rx-7600-xt"&gt;AMD Radeon RX 7600 XT&lt;/a&gt;
, and of course had to try out Ollama with that new graphics card on my Fedora Linux Workstation.&lt;/p&gt;
&lt;p&gt;Because I&amp;rsquo;m generally not a big fan of running &lt;a href="https://ollama.com/install.sh"&gt;shell scripts with sudo&lt;/a&gt;
 from strangers, and usually prefer launching some 👹 daemons like this one in the foreground instead of having them be started by &lt;code&gt;systemd&lt;/code&gt;, I installed and started it simply like this, at least for starters:&lt;/p&gt;</description></item><item><title>Visual Studio Code Tunnel systemd service authorization token refresh</title><link>https://blog3.vorburger.ch/security/vsc-token/</link><pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/security/vsc-token/</guid><description>&lt;h1 id="visual-studio-code-tunnel-systemd-service-authorization-token-refresh"&gt;Visual Studio Code Tunnel systemd service authorization token refresh&lt;/h1&gt;
&lt;p&gt;If VSC shows you:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An unexpected error occurred that requires a reload of this page. The workbench failed to connect to the server (Error: The VS Code gateway is not currently running.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and a web page reload doesn&amp;rsquo;t help, and if &lt;code&gt;code tunnel service log&lt;/code&gt; (or &lt;code&gt;systemctl --user status code-tunnel.service&lt;/code&gt;, which is ~same, under Linux) shows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;● code-tunnel.service - Visual Studio Code Tunnel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Loaded: loaded &lt;span style="color:#f92672"&gt;(&lt;/span&gt;/home/vorburger/.config/systemd/user/code-tunnel.service; enabled; preset: disabled&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Drop-In: /usr/lib/systemd/user/service.d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └─10-timeout-abort.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Active: active &lt;span style="color:#f92672"&gt;(&lt;/span&gt;running&lt;span style="color:#f92672"&gt;)&lt;/span&gt; since Tue 2024-02-20 20:35:36 CET; 7min ago
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Main PID: &lt;span style="color:#ae81ff"&gt;439302&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;code-cli&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Tasks: &lt;span style="color:#ae81ff"&gt;13&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;limit: 76604&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Memory: 3.0M
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CPU: 63ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/code-tunnel.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └─439302 /home/vorburger/.local/bin/code-cli --verbose --cli-data-dir /home/vorburger/.vscode/cli tunnel service internal-run
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:41:47 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:41:47&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:41:57 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:41:57&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:07 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:07&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:18 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:18&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:28 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:28&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:38 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:38&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:48 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:48&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:42:58 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:42:58&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:43:08 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:43:08&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feb &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; 20:43:19 HOSTNAME code-cli&lt;span style="color:#f92672"&gt;[&lt;/span&gt;439302&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2024-02-20 20:43:19&lt;span style="color:#f92672"&gt;]&lt;/span&gt; trace refresh poll failed, retrying: Error getting authorization: authorization_pending The authorization request is still pending.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;then this means that the authentication token which the tunnel uses does not work (anymore, expired, or some GitHub security limitation; with VSC not renewing it), note this:&lt;/p&gt;</description></item><item><title>FOSDEM 2024</title><link>https://blog3.vorburger.ch/conferences/fosdem-2024/</link><pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/conferences/fosdem-2024/</guid><description>&lt;h1 id="fosdem-2024"&gt;FOSDEM 2024&lt;/h1&gt;
&lt;p&gt;I attended &lt;a href="https://fosdem.org/2024/"&gt;FOSDEM 2024&lt;/a&gt;
 in Bruxelles (Brussels) on Sat/Sun Feb 3/4, 2024.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://fosdem.org/2021/schedule/"&gt;full agenda&lt;/a&gt;
 shows there again was a lot of content, as at many big tech conference. Below are notes about a few session I listened in to. Do have a look around the schedule and check out the slides and recordings of other sessions in your own areas of interest!&lt;/p&gt;
&lt;p&gt;This must have been I think my 4th or 5th time attending this &lt;em&gt;&amp;ldquo;event for free software developers to meet, share ideas and collaborate&amp;rdquo;.&lt;/em&gt;
Looks like I &lt;a href="./conferences/fosdem-2021/"&gt;last blogged in 2021&lt;/a&gt;
 (but I seem to have been too lazy in 2023 and 2019 &amp;amp; 2018).&lt;/p&gt;</description></item><item><title>GPG hangs on hostname change</title><link>https://blog3.vorburger.ch/security/gpg-hangs-on-hostname-change/</link><pubDate>Thu, 04 Jan 2024 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/security/gpg-hangs-on-hostname-change/</guid><description>&lt;h1 id="gpg-hangs-on-hostname-change"&gt;GPG hangs on hostname change&lt;/h1&gt;
&lt;p&gt;I currently use &lt;a href="https://gnupg.org"&gt;GnuPG&lt;/a&gt;
 with &lt;a href="https://www.yubico.com"&gt;Yubikeys&lt;/a&gt;
, mostly (but not only) for &lt;a href="https://www.passwordstore.org"&gt;pass&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;One fine day I&amp;rsquo;ll switch to &lt;a href="https://age-encryption.org"&gt;age&lt;/a&gt;
 (from &lt;a href="https://github.com/FiloSottile/age"&gt;FiloSottile&lt;/a&gt;
; with &lt;a href="https://github.com/str4d/age-plugin-yubikey"&gt;SK&lt;/a&gt;
 and &lt;a href="https://github.com/Foxboron/age-plugin-tpm"&gt;TPM&lt;/a&gt;
) with &lt;a href="https://github.com/FiloSottile/passage"&gt;passage&lt;/a&gt;
, and other &lt;a href="https://github.com/FiloSottile/awesome-age"&gt;awesome stuff&lt;/a&gt;
; but today it&amp;rsquo;s &lt;code&gt;gpg&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Today that &lt;code&gt;gpg (GnuPG) 2.4.3&lt;/code&gt; suddenly stopped working, just stuck and hanging in there&amp;hellip; I&amp;rsquo;ve debugged it with &lt;a href="https://strace.io"&gt;strace&lt;/a&gt;
:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ strace gpg --debug-all --card-status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;...&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openat&lt;span style="color:#f92672"&gt;(&lt;/span&gt;AT_FDCWD, &lt;span style="color:#e6db74"&gt;&amp;#34;/etc/localtime&amp;#34;&lt;/span&gt;, O_RDONLY|O_CLOEXEC&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newfstatat&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;{&lt;/span&gt;st_mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;S_IFREG|0644, st_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1909, ...&lt;span style="color:#f92672"&gt;}&lt;/span&gt;, AT_EMPTY_PATH&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newfstatat&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;{&lt;/span&gt;st_mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;S_IFREG|0644, st_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1909, ...&lt;span style="color:#f92672"&gt;}&lt;/span&gt;, AT_EMPTY_PATH&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;read&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, &lt;span style="color:#e6db74"&gt;&amp;#34;TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0&amp;#34;&lt;/span&gt;..., 4096&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1909&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lseek&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, -1217, SEEK_CUR&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;692&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;read&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, &lt;span style="color:#e6db74"&gt;&amp;#34;TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0\6\0\0\0\0&amp;#34;&lt;/span&gt;..., 4096&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1217&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;close&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newfstatat&lt;span style="color:#f92672"&gt;(&lt;/span&gt;AT_FDCWD, &lt;span style="color:#e6db74"&gt;&amp;#34;/run/user/1000/gnupg/S.keyboxd&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;{&lt;/span&gt;st_mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;S_IFSOCK|0700, st_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0, ...&lt;span style="color:#f92672"&gt;}&lt;/span&gt;, 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;socket&lt;span style="color:#f92672"&gt;(&lt;/span&gt;AF_UNIX, SOCK_STREAM, 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newfstatat&lt;span style="color:#f92672"&gt;(&lt;/span&gt;AT_FDCWD, &lt;span style="color:#e6db74"&gt;&amp;#34;/run/user/1000/gnupg/S.keyboxd&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;{&lt;/span&gt;st_mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;S_IFSOCK|0700, st_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0, ...&lt;span style="color:#f92672"&gt;}&lt;/span&gt;, 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;connect&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4, &lt;span style="color:#f92672"&gt;{&lt;/span&gt;sa_family&lt;span style="color:#f92672"&gt;=&lt;/span&gt;AF_UNIX, sun_path&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;/run/user/1000/gnupg/S.keyboxd&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;, 32&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;recvmsg&lt;span style="color:#f92672"&gt;(&lt;/span&gt;4,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Turns out this is &lt;a href="https://dev.gnupg.org/T6838"&gt;https://dev.gnupg.org/T6838&lt;/a&gt;
, which I found after some research, via &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=2249218"&gt;https://bugzilla.redhat.com/show_bug.cgi?id=2249218&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Linux Laptop power consumption optimization</title><link>https://blog3.vorburger.ch/linux/power/</link><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/power/</guid><description>&lt;h1 id="linux-laptop-power-consumption-optimization"&gt;Linux Laptop power consumption optimization&lt;/h1&gt;
&lt;p&gt;Setting up a new laptop today was the opportunity to read up
and refresh my memories about how to optimize power consumption.&lt;/p&gt;
&lt;p&gt;I published what I learnt &lt;a href="https://github.com/vorburger/vorburger-dotfiles-bin-etc/blob/main/docs/power.md"&gt;in the docs of my dotfiles&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Linux "tainted" local HW clock</title><link>https://blog3.vorburger.ch/linux/taintedlocal-hwclock/</link><pubDate>Fri, 31 Mar 2023 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/taintedlocal-hwclock/</guid><description>&lt;h1 id="linux-tainted-local-hw-clock"&gt;Linux &amp;ldquo;tainted&amp;rdquo; local HW clock&lt;/h1&gt;
&lt;p&gt;While I was setting up a new laptop, I noticed that &lt;code&gt;systemd status&lt;/code&gt; printed &lt;code&gt;Tainted: local-hwclock&lt;/code&gt;, see:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ systemctl status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;● laptop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; State: running
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Units: &lt;span style="color:#ae81ff"&gt;500&lt;/span&gt; loaded &lt;span style="color:#f92672"&gt;(&lt;/span&gt;incl. loaded aliases&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Jobs: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; queued
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Failed: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; units
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Since: Sat 2023-04-01 20:31:56 CEST; 1h 36min left
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemd: 253.2-1.fc38
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Tainted: local-hwclock
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CGroup: /
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The reason for that is further explained by this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ timedatectl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Local time: sam 2023-04-01 19:02:13 CEST
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Universal time: sam 2023-04-01 17:02:13 UTC
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RTC time: sam 2023-04-01 19:02:13
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Time zone: Europe/Zurich &lt;span style="color:#f92672"&gt;(&lt;/span&gt;CEST, +0200&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;System clock synchronized: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; NTP service: active
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RTC in local TZ: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Warning: The system is configured to read the RTC time in the local time zone.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; This mode cannot be fully supported. It will create various problems
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; with time zone changes and daylight saving time adjustments. The RTC
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; time is never updated, it relies on external facilities to maintain it.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; If at all possible, use RTC in UTC by calling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;timedatectl set-local-rtc 0&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As it says, this is fixed by doing:&lt;/p&gt;</description></item><item><title>Voxxed Days Zürich 2023</title><link>https://blog3.vorburger.ch/conferences/voxxed-zrh-2023/</link><pubDate>Thu, 16 Mar 2023 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/conferences/voxxed-zrh-2023/</guid><description>&lt;h1 id="voxxed-days-zürich-2023-03-16"&gt;Voxxed Days Zürich 2023-03-16&lt;/h1&gt;
&lt;p&gt;Today I attended &lt;a href="https://voxxeddays.com/zurich/"&gt;Voxxed Days Zürich&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Voxxed Days are a series of technical conferences for developers, affiliated with the legendary &lt;a href="https://devoxx.com"&gt;https://devoxx.com&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Future events include the Voxxed Days in Ticino on 2024-01-19 and next year&amp;rsquo;s in ZRH on 2024-03-07.&lt;/p&gt;
&lt;p&gt;It is locally organized, with 25% of &lt;a href="https://voxxeddays.com/zurich/schedule/speakers/"&gt;speakers&lt;/a&gt;
 from Switzerland (and 22% female speakers, great!), and sponsored by Swiss IT companies such as Swisscom, Gradle Enterprise (!), ELCA, Julius Bär, Red Hat, Ergon, Adesso, Mimacom, CSS.&lt;/p&gt;</description></item><item><title>Java JDK Source Code in Visual Studio Code</title><link>https://blog3.vorburger.ch/java/vsc-java-src/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/java/vsc-java-src/</guid><description>&lt;h1 id="java-jdk-source-code-in-visual-studio-code"&gt;Java JDK Source Code in Visual Studio Code&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve switched from using Eclipse to Visual Studio Code (VSC) for Java coding,
and was missing the JDK Source Code in VSC.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/redhat-developer/vscode-java/issues/689"&gt;The discussion in this bug&lt;/a&gt;
 didn&amp;rsquo;t help, because the problem was the following:&lt;/p&gt;
&lt;p&gt;It appears that the Language Support for Java by Red Hat extension &amp;ldquo;helps&amp;rdquo; users with its (Ctrl-Shift-P) &lt;em&gt;Install New JDK&lt;/em&gt; UI feature. Those get installed into &lt;code&gt;~/.vscode/extensions/redhat.java-1.14.0-linux-x64/jre&lt;/code&gt;, are entirely separate from any &amp;ldquo;system package&amp;rdquo; JDK installs - and do not appear to include the &lt;code&gt;src.zip&lt;/code&gt; with JDK source code (at least some of them, such as &lt;em&gt;Eclipse Adoptium&amp;rsquo;s Temurin)&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Plain text accounting with Beancount</title><link>https://blog3.vorburger.ch/finance/beancount/</link><pubDate>Fri, 13 Jan 2023 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/finance/beancount/</guid><description>&lt;h1 id="plain-text-accounting-with-beancount"&gt;Plain text accounting with Beancount&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://plaintextaccounting.org"&gt;Plain text accounting&lt;/a&gt;
 is the idea of managing
personal finances (or perhaps a small business, or club, or whatever) using
a scriptable, command-line-friendly open source accounting software keeping
all related data in plain text files which are easy to version control e.g. with &lt;code&gt;git&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is an alternative to using something like e.g.
&lt;em&gt;Intuit QuickBooks, Zoho Books, Xero,&lt;/em&gt; etc.
or even just whatever one of your banks offers you built-in.&lt;/p&gt;</description></item><item><title>The Need for Speed (Part #1)</title><link>https://blog3.vorburger.ch/networking/speed1/</link><pubDate>Sun, 27 Nov 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/networking/speed1/</guid><description>&lt;h1 id="the-need-for-speed-part-1"&gt;The Need for Speed (Part #1)&lt;/h1&gt;
&lt;h2 id="the-past"&gt;The Past&lt;/h2&gt;
&lt;p&gt;For the past 20 years, Swisscom was my ISP at home, and I had a (now) &lt;em&gt;Swisscom blue Internet L subscription for Residential Customers&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The bandwidth that gave me for the last couple of years was 1 Gigabit per second (Gbps). One day when I logged in to my ISP to pay a bill, there was a message:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Technology upgrade: With a change to the new fiber optic standard, you can achieve a speed of up to 10 Gbit/s without a monthly fee and extra cost.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Fedora Upgrades</title><link>https://blog3.vorburger.ch/linux/fedora-upgrade/</link><pubDate>Sat, 01 Oct 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/fedora-upgrade/</guid><description>&lt;h1 id="fedora-upgrades"&gt;Fedora Upgrades&lt;/h1&gt;
&lt;p&gt;Following &lt;a href="https://docs.fedoraproject.org/en-US/quick-docs/dnf-system-upgrade/"&gt;Fedora Docs’ DNF System Upgrade&lt;/a&gt;
 works reasonably well.&lt;/p&gt;
&lt;p&gt;Here are how I resolve a few issues I run into every time I upgrade.&lt;/p&gt;
&lt;h2 id="heading"&gt;&lt;em&gt;&amp;ldquo;The password you use to log in to your computer no longer matches that of your login keyring.&amp;rdquo;&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;With &lt;em&gt;Automatic Login,&lt;/em&gt; the error message above appears e.g. when
&lt;a href="https://github.com/vorburger/vorburger-dotfiles-bin-etc#on-fedora-workstation"&gt;using GNOME Tweaks to auto-start Brave&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Work around it by using the &lt;em&gt;Passwords and Keys&lt;/em&gt; (Seahorse) app to delete the &lt;em&gt;Brave Safe Storage&lt;/em&gt;.
This will break Brave&amp;rsquo;s Saved Passwords and Sync; to fix that, go to &lt;code&gt;brave://sync-internals&lt;/code&gt; to &lt;em&gt;Disable Sync (Clear Data),&lt;/em&gt;
close Brave, and set up Sync again.&lt;/p&gt;</description></item><item><title>Fish is a **GREAT** interactive shell, but... not yet suitable for scripting! :-((</title><link>https://blog3.vorburger.ch/linux/fish-scripting/</link><pubDate>Sun, 11 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/fish-scripting/</guid><description>&lt;h1 id="fish-is-a-great-interactive-shell-but-not-yet-suitable-for-scripting--"&gt;Fish is a &lt;strong&gt;GREAT&lt;/strong&gt; interactive shell, but&amp;hellip; not yet suitable for scripting! :-((&lt;/h1&gt;
&lt;p&gt;I &lt;em&gt;almost&lt;/em&gt; :) &lt;a href="https://github.com/vorburger/LearningLinux/compare/fish-scripts"&gt;started writing some shell scripts in Fish instead of Bash&lt;/a&gt;
,
but then discovered &lt;a href="https://github.com/fish-shell/fish-shell/issues/510"&gt;https://github.com/fish-shell/fish-shell/issues/510&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This seems like a massive feature gap in Fish, at least to me. I &lt;strong&gt;CANNOT LIVE&lt;/strong&gt; without &lt;code&gt;set -e&lt;/code&gt; in Bash.
&lt;a href="https://github.com/search?q=user%3Avorburger&amp;#43;%22set&amp;#43;-e%22&amp;amp;type=code"&gt;ALL my scripts everywhere have that&lt;/a&gt;
 (code search seems to miss a lot of them).&lt;/p&gt;
&lt;p&gt;Fish is great as an interactive Shell, but without this feature, I cannot start using it for more scripting.&lt;/p&gt;</description></item><item><title>How to launch a CLI tool in a new terminal window</title><link>https://blog3.vorburger.ch/linux/gnome-terminal/</link><pubDate>Sat, 10 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/gnome-terminal/</guid><description>&lt;h1 id="how-to-launch-a-cli-tool-in-a-new-terminal-window"&gt;How to launch a CLI tool in a new terminal window&lt;/h1&gt;
&lt;p&gt;Here is one way to run a CLI process in a new window, make closing
that window kill that process, yet wait for the user when said process
exits, e.g. not to lose some start-up error message:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gnome-terminal -- bash -c &lt;span style="color:#e6db74"&gt;&amp;#39;ls / ; read -p &amp;#34;Press Enter to close...&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I used this as follows for &lt;code&gt;qemu-system-x86_64&lt;/code&gt; &lt;a href="https://github.com/vorburger/LearningLinux/blob/f4fdd79723d198b445665d613a4ed7a5ecc6cca1/run"&gt;in this script&lt;/a&gt;
:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export KERNEL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gnome-terminal -- bash -c &lt;span style="color:#e6db74"&gt;&amp;#39;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; qemu-system-x86_64 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; (...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; -serial stdio -nographic -display none \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; -kernel &amp;#34;$KERNEL&amp;#34; ; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; read -p &amp;#34;QEMU has exited - press any key to close this window...&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note the &lt;code&gt;export&lt;/code&gt; - that&amp;rsquo;s needed for those environment variables to work as arguments to the process in the gnome-terminal.&lt;/p&gt;</description></item><item><title>Debugging Linux Start-Up Speed Performance Issues</title><link>https://blog3.vorburger.ch/linux/systemd-analyze/</link><pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/systemd-analyze/</guid><description>&lt;h1 id="debugging-linux-start-up-speed-performance-issues"&gt;Debugging Linux Start-Up Speed Performance Issues&lt;/h1&gt;
&lt;p&gt;Today while &lt;a href="https://github.com/vorburger/LearningLinux"&gt;LearningLinux&lt;/a&gt;
 I noticed that
my ArchLinux VMs started as fast as always, but it seemed to take longer and longer for &lt;code&gt;sshd&lt;/code&gt; to be ready.
This clarified what was happening:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ systemd-analyze
Startup finished in 1.270s (kernel) + 42.586s (userspace) = 43.857s
graphical.target reached after 42.585s in userspace.

$ systemd-analyze blame
41.769s pacman-init.service
29.292s reflector-init.service
 1.198s systemd-networkd-wait-online.service
 601ms dev-vda2.device
 393ms ldconfig.service
 360ms sshdgenkeys.service
 234ms systemd-networkd.service
 168ms systemd-tmpfiles-setup.service
 155ms systemd-timesyncd.service
 145ms systemd-resolved.service
 102ms systemd-udev-trigger.service
 94ms systemd-logind.service
 93ms systemd-udevd.service
 82ms systemd-machine-id-commit.service
 79ms systemd-journal-catalog-update.service
 69ms user@1000.service
 54ms systemd-tmpfiles-setup-dev.service
 43ms systemd-journald.service
 42ms systemd-journal-flush.service
 37ms systemd-tmpfiles-clean.service
 37ms sys-kernel-tracing.mount
 36ms kmod-static-nodes.service
 36ms dev-mqueue.mount
 36ms modprobe@configfs.service
 36ms sys-kernel-debug.mount
 36ms modprobe@drm.service
 35ms dbus.service
 35ms modprobe@fuse.service
 35ms dev-hugepages.mount


$ systemd-analyze critical-chain
The time when unit became active or started is printed after the &amp;quot;@&amp;quot; character.
The time the unit took to start is printed after the &amp;quot;+&amp;quot; character.

graphical.target @42.585s
└─multi-user.target @42.585s
 └─sshd.service @42.585s
 └─pacman-init.service @814ms +41.769s
 └─basic.target @811ms
 └─sockets.target @811ms
 └─dbus.socket @810ms
 └─sysinit.target @805ms
 └─systemd-update-done.service @798ms +5ms
 └─ldconfig.service @404ms +393ms
 └─local-fs.target @402ms
 └─run-user-1000.mount @20.308s
 └─local-fs-pre.target @402ms
 └─systemd-tmpfiles-setup-dev.service @346ms +54ms
 └─systemd-sysusers.service @314ms +30ms
 └─systemd-firstboot.service @293ms +20ms
 └─systemd-remount-fs.service @258ms +29ms
 └─systemd-journald.socket @242ms
 └─-.mount @237ms
 └─-.slice @237ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Huh, so &lt;code&gt;critical-chain&lt;/code&gt; shows that &lt;code&gt;sshd&lt;/code&gt; was blocked by &lt;code&gt;pacman-init&lt;/code&gt;&amp;hellip; we can see that from the &lt;code&gt;Before=sshd.service&lt;/code&gt; here:&lt;/p&gt;</description></item><item><title>Linux Kernel Random Number Entropy</title><link>https://blog3.vorburger.ch/linux/entropy/</link><pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/entropy/</guid><description>&lt;h1 id="linux-kernel-random-number-entropy"&gt;Linux Kernel Random Number Entropy&lt;/h1&gt;
&lt;p&gt;The Linux Kernel uses &lt;em&gt;&amp;ldquo;entropy&amp;rdquo;&lt;/em&gt; to generate random numbers:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat /proc/sys/kernel/random/entropy_avail
256

$ cat /proc/sys/kernel/random/poolsize
256

$ cat /proc/sys/kernel/random/write_wakeup_threshold
256
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This 256 seems to &lt;a href="https://unix.stackexchange.com/questions/704737/kernel-5-10-119-caused-the-values-of-proc-sys-kernel-random-entropy-avail-and-p"&gt;have recently changed&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Older blog posts state &lt;a href="https://major.io/2007/07/01/check-available-entropy-in-linux/"&gt;that 256 available entropy is too low&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I doubt that on modern 2022 Kernels, such as a 5.17 from Fedora 34 or a 5.18 in Fedora 36, this is still accurate. It now actually remains at 256 forever, even with keyboard and mouse and disk events; even a restart does not budge it.&lt;/p&gt;</description></item><item><title>Fedora Silverblue</title><link>https://blog3.vorburger.ch/linux/silverblue/</link><pubDate>Tue, 16 Aug 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/silverblue/</guid><description>&lt;h1 id="fedora-silverblue"&gt;Fedora Silverblue&lt;/h1&gt;
&lt;p&gt;See also &lt;a href="https://github.com/vorburger/Notes/blob/master/ToDo/LOW-PRIORITY/silverblue.md"&gt;remaining ToDo&lt;/a&gt;
 (private).&lt;/p&gt;
&lt;h2 id="ostree"&gt;OSTree&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;rpm-ostree install kitty
rpm-ostree status
systemctl reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="flatpack"&gt;Flatpack&lt;/h2&gt;
&lt;p&gt;As per &lt;a href="https://github.com/vorburger/vorburger-dotfiles-bin-etc#on-fedora-silverblue"&gt;https://github.com/vorburger/vorburger-dotfiles-bin-etc#on-fedora-silverblue&lt;/a&gt;
,
Apps from Flatpack will have certain limitations, such as that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/flathub/com.brave.Browser/issues/126"&gt;YK SK won’t work in Brave&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="troubleshooting"&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id="the-blocked-updates-of-2022-08"&gt;The blocked updates of 2022-08&lt;/h3&gt;
&lt;p&gt;As per &lt;a href="https://fedoramagazine.org/manual-action-required-to-update-fedora-silverblue-kinoite-and-iot-version-36/"&gt;https://fedoramagazine.org/manual-action-required-to-update-fedora-silverblue-kinoite-and-iot-version-36/&lt;/a&gt;
,
after running e.g. &lt;code&gt;rpm-ostree install kitty&lt;/code&gt;
as e.g. in &lt;a href="https://github.com/vorburger/vorburger-dotfiles-bin-etc/blob/master/ostree-install-gui.sh"&gt;my ostree-install-gui.sh&lt;/a&gt;
,
&lt;code&gt;rpm-ostree status&lt;/code&gt; shows what&amp;rsquo;s currently running, and what it should boot into on the next &lt;code&gt;systemctl reboot&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>DAppNode</title><link>https://blog3.vorburger.ch/linux/dappnode/readme/</link><pubDate>Sun, 13 Mar 2022 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/dappnode/readme/</guid><description>&lt;h1 id="dappnode"&gt;DAppNode&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://dappnode.io"&gt;https://dappnode.io&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="todo"&gt;ToDo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ipfs.dappnode&lt;/code&gt; with HTTPS? See &lt;a href="https://github.com/dappnode/DAppNode/issues/406"&gt;https://github.com/dappnode/DAppNode/issues/406&lt;/a&gt;
, and below.&lt;/li&gt;
&lt;li&gt;Fix &lt;a href="http://alice.eth"&gt;http://alice.eth&lt;/a&gt;
 etc. as it&amp;rsquo;s still NOK when now that IPFS works, see &lt;a href="https://github.com/dappnode/DAppNode/issues/492"&gt;https://github.com/dappnode/DAppNode/issues/492&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install &lt;a href="http://dappnode.local/#/installer/prysm.dnp.dappnode.eth"&gt;http://dappnode.local/#/installer/prysm.dnp.dappnode.eth&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dappnode.local/#/installer"&gt;http://dappnode.local/#/installer&lt;/a&gt;
 More packages to install?&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dappnode.local/#/community"&gt;http://dappnode.local/#/community&lt;/a&gt;
 =&amp;gt; &lt;a href="https://sourcecred.dappnode.io/#/explorer"&gt;https://sourcecred.dappnode.io/#/explorer&lt;/a&gt;
 PAN?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSf-SI3NfcvD0tXLvn6aoBpHpwiujjhg8z8kuCDCyFka-f5cRQ/viewform"&gt;DAppNode DApp list &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Configure &lt;code&gt;/etc/wireguard/wg0.conf&lt;/code&gt; to &amp;ldquo;route&amp;rdquo; / &amp;ldquo;lookup&amp;rdquo; (?) ONLY &lt;code&gt;.eth&lt;/code&gt; and &lt;code&gt;.dappnode&lt;/code&gt; domain names through that VPN? Test by shutdown DAppNode.&lt;/li&gt;
&lt;li&gt;(Re-)install and configure &lt;a href="http://dappnode.local/#/packages/rotki.dnp.dappnode.eth/info"&gt;http://dappnode.local/#/packages/rotki.dnp.dappnode.eth/info&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;git server (local at first, then on IPFS); e.g. on &lt;a href="https://github.com/linuxserver"&gt;https://github.com/linuxserver&lt;/a&gt;
?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.dappnode.io/user-guide/ui/recommended-set-ups/backup-functionality"&gt;Backups&lt;/a&gt;
, for git server and other, on IPFS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="use"&gt;Use&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;IPFS
&lt;ul&gt;
&lt;li&gt;WebUI &lt;a href="http://ipfs.dappnode:5001/webui/"&gt;http://ipfs.dappnode:5001/webui/&lt;/a&gt;
 (see below for Troubleshooting if this doesn&amp;rsquo;t work)&lt;/li&gt;
&lt;li&gt;Peering: Add e.g. &lt;code&gt;/ip4/192.168.1.99/tcp/4001/p2p/12D3Koo...P8TN&lt;/code&gt; on brave://settings/ipfs/peers for peering and use Brave local IPFS node.
Strangely, this then does NOT show up in the list on http://127.0.0.1:45005/webui/#/peers.&lt;/li&gt;
&lt;li&gt;Gateway &lt;a href="http://ipfs.dappnode:8080"&gt;http://ipfs.dappnode:8080&lt;/a&gt;
 how-to? Expose port on &lt;a href="http://dappnode.local/#/packages/ipfs.dnp.dappnode.eth/network"&gt;http://dappnode.local/#/packages/ipfs.dnp.dappnode.eth/network&lt;/a&gt;
?&lt;/li&gt;
&lt;li&gt;API &lt;a href="http://ipfs.dappnode:5001"&gt;http://ipfs.dappnode:5001&lt;/a&gt;
?
TODO: How to publish a file on one local computer, pin it on the DAppNode, and then access it from another local computer?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ethereum RPC API
&lt;ul&gt;
&lt;li&gt;TODO: How to use &lt;a href="http://dappnode.local/#/packages/geth.dnp.dappnode.eth/info%27s"&gt;http://dappnode.local/#/packages/geth.dnp.dappnode.eth/info's&lt;/a&gt;
 Querying API &lt;a href="http://geth.dappnode:8545"&gt;http://geth.dappnode:8545&lt;/a&gt;
 and Engine API http//geth.dappnode:8551?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*.eth&lt;/code&gt; &lt;a href="https://ens.domains"&gt;domain names&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alice.eth"&gt;alice.eth&lt;/a&gt;
 or &lt;a href="http://freedomain.eth"&gt;freedomain.eth&lt;/a&gt;
 (or e.g. &lt;a href="http://radek.freedomain.eth"&gt;radek.freedomain.eth&lt;/a&gt;
 from &lt;a href="http://radek.freedomain.eth"&gt;this tutorial&lt;/a&gt;
 are some examples&lt;/li&gt;
&lt;li&gt;These normally do not resolve over traditional root DNS servers&lt;/li&gt;
&lt;li&gt;Brave has built-in ENS resolution by using Infura, instead of decentralized DAppNode&lt;/li&gt;
&lt;li&gt;When connected to DAppNode&amp;rsquo;s WireGuard VPN, that will resolve both &lt;code&gt;.eth&lt;/code&gt; and &lt;code&gt;.dappnode&lt;/code&gt; domain names&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nonexistantx.eth"&gt;nonexistantx.eth&lt;/a&gt;
 should show an error message from DAppNode&amp;rsquo;s &lt;code&gt;/usr/src/app/webpack:/@dappnode/dappmanager/src/ethForward/resolveDomain.ts&lt;/code&gt;: _Decentralized website not found Make sure the ENS domain exists&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipfs resolve -r /ipfs/: invalid path &amp;quot;/ipfs/&amp;quot;: not enough path components&lt;/code&gt; means &lt;em&gt;TODO, IDK, fix IPFS #first?&lt;/em&gt; See &lt;a href="https://github.com/dappnode/DAppNode/issues/492"&gt;https://github.com/dappnode/DAppNode/issues/492&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ipfs-in-brave-not-directly-dappnode-related"&gt;IPFS in Brave (not directly DAppNode related)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;brave://settings/ipfs&lt;/li&gt;
&lt;li&gt;brave://ipfs-internals/&lt;/li&gt;
&lt;li&gt;If using Brave Local IPFS Node:
&lt;ul&gt;
&lt;li&gt;http://127.0.0.1:45005/webui&lt;/li&gt;
&lt;li&gt;brave://settings/ipfs/peers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="manage--maintenance"&gt;Manage &amp;amp; Maintenance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dappnode.local"&gt;http://dappnode.local&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo wg-quick up wg0&lt;/code&gt; is required ;) to use &lt;code&gt;*.dappnode&lt;/code&gt; hostnames&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dms.dappnode/d/dappnode-exporter-host/host?orgId=1&amp;amp;refresh=10s"&gt;http://dms.dappnode/d/dappnode-exporter-host/host?orgId=1&amp;refresh=10s&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dappnode.local/#/system/security"&gt;http://dappnode.local/#/system/security&lt;/a&gt;
 Host Updates&lt;/li&gt;
&lt;li&gt;VPN: &lt;code&gt;sudo wg-quick up wg0&lt;/code&gt; &amp;amp; &lt;code&gt;sudo wg-quick down wg0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Power Off on &lt;a href="http://dappnode.local/#/system/power"&gt;http://dappnode.local/#/system/power&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="set-up"&gt;Set up&lt;/h2&gt;
&lt;p&gt;As per official documentation, and then:&lt;/p&gt;</description></item><item><title>Krypt.co made two-factor easy &amp; secure</title><link>https://blog3.vorburger.ch/security/krypt.co/</link><pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/security/krypt.co/</guid><description>&lt;h1 id="krypton-made-two-factor-easy--secure"&gt;&lt;a href="https://krypt.co"&gt;Krypton&lt;/a&gt;
 made two-factor easy &amp;amp; secure&lt;/h1&gt;
&lt;p&gt;See &lt;a href="https://krypt.co"&gt;https://krypt.co&lt;/a&gt;
 and sources on &lt;a href="https://github.com/kryptco"&gt;https://github.com/kryptco&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://krypt.co/start/"&gt;https://krypt.co/start/&lt;/a&gt;
 =&amp;gt; &lt;a href="https://krypt.co/ext/"&gt;https://krypt.co/ext/&lt;/a&gt;
 for U2F Browser Extension, if interested.&lt;/p&gt;
&lt;p&gt;More on &lt;a href="https://krypt.co/docs"&gt;https://krypt.co/docs&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="setup-ssh"&gt;Setup SSH&lt;/h2&gt;
&lt;p&gt;Install &lt;a href="https://play.google.com/store/apps/details?id=co.krypt.kryptonite"&gt;the Android App&lt;/a&gt;
,
and in its &lt;em&gt;Settings (Krypton Core)&lt;/em&gt; enable &lt;strong&gt;[X] Developer Mode&lt;/strong&gt;
(and review other Settings; perhaps &lt;em&gt;Disable Google Analytics&lt;/em&gt;).
Now on workstation/desktop host:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl https://krypt.co/kr | sh

kr pair
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and scan the displayed QR code in the &lt;em&gt;PAIR&lt;/em&gt; tab on the App.
The printed SSH public key is &lt;code&gt;~/.ssh/id_krypton.pub&lt;/code&gt; (also &lt;code&gt;kr me&lt;/code&gt;),
and can be put e.g. on &lt;a href="https://github.com/settings/keys"&gt;https://github.com/settings/keys&lt;/a&gt;
 or on a server
(also using &lt;code&gt;kr add &amp;lt;user&amp;gt;@&amp;lt;server&amp;gt;&lt;/code&gt;) as per &lt;a href="https://krypt.co/docs/start/upload-your-ssh-publickey.html"&gt;https://krypt.co/docs/start/upload-your-ssh-publickey.html&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>SSH Key type `ed25519-sk` (and `ecdsa-sk`)</title><link>https://blog3.vorburger.ch/security/ed25519-sk/</link><pubDate>Sat, 01 May 2021 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/security/ed25519-sk/</guid><description>&lt;h1 id="ssh-key-type-ed25519-sk-and-ecdsa-sk"&gt;SSH Key type &lt;code&gt;ed25519-sk&lt;/code&gt; (and &lt;code&gt;ecdsa-sk&lt;/code&gt;)&lt;/h1&gt;
&lt;p&gt;Today I noticed by coincidence that (recent versions of;
e.g. the one available on Fedora Silverblue 34) &lt;code&gt;ssh-keygen&lt;/code&gt;
have &lt;code&gt;ed25519-sk&lt;/code&gt; (and &lt;code&gt;ecdsa-sk&lt;/code&gt;) key types (&lt;code&gt;-t&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Never having seen these before, I wondered what they were for&amp;hellip;&lt;/p&gt;
&lt;p&gt;It is explained e.g. on &lt;a href="https://security.stackexchange.com/questions/240991/what-is-the-sk-ending-for-ssh-key-types"&gt;https://security.stackexchange.com/questions/240991/what-is-the-sk-ending-for-ssh-key-types&lt;/a&gt;
, and in the chapter &amp;ldquo;FIDO/U2F Support&amp;rdquo; on &lt;a href="https://www.openssh.com/txt/release-8.2"&gt;https://www.openssh.com/txt/release-8.2&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This is very nice, as it much simplifies the &lt;a href="https://github.com/drduh/YubiKey-Guide#ssh"&gt;much too complicated old ways of using gpg-agent to SSH with a YubiKey&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Exploring Fedora CoreOS</title><link>https://blog3.vorburger.ch/linux/coreos/readme/</link><pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/linux/coreos/readme/</guid><description>&lt;h1 id="exploring-fedora-coreos"&gt;Exploring Fedora CoreOS&lt;/h1&gt;
&lt;p&gt;See &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos"&gt;https://docs.fedoraproject.org/en-US/fedora-coreos&lt;/a&gt;
!&lt;/p&gt;
&lt;h2 id="first-steps"&gt;First Steps&lt;/h2&gt;
&lt;p&gt;Following &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos/getting-started/"&gt;https://docs.fedoraproject.org/en-US/fedora-coreos/getting-started/&lt;/a&gt;
 :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;podman run --pull=always --rm -v $HOME/.local/share/libvirt/images/:/data -w /data \
 quay.io/coreos/coreos-installer:release download -s stable -p qemu -f qcow2.xz --decompress

qemu-img create -f qcow2 -b \
 ~/.local/share/libvirt/images/fedora-coreos-33.20210328.3.0-qemu.x86_64.qcow2 \
 ~/.local/share/libvirt/images/my-first-fcos-vm.qcow2 20G
ls -lh ~/.local/share/libvirt/images/

podman run --interactive --rm quay.io/coreos/butane:release \
 --pretty --strict &amp;lt;first.bu &amp;gt;first.ign
bat first.ign

qemu-kvm -m 2048 -cpu host -nographic \
 -drive if=virtio,file=$HOME/.local/share/libvirt/images/my-first-fcos-vm.qcow2 \
 -fw_cfg name=opt/com.coreos/config,file=first.ign \
 -nic user,model=virtio,hostfwd=tcp::2222-:22

ssh-keygen -R &amp;quot;[localhost]:2222&amp;quot;
ssh -o StrictHostKeyChecking=accept-new -p 2222 core@localhost

pstree
systemctl status
systemctl --type=service --state=active
hostnamectl

podman run --rm -it hello-world
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="automatic-updates"&gt;Automatic Updates&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos/update-streams/"&gt;https://docs.fedoraproject.org/en-US/fedora-coreos/update-streams/&lt;/a&gt;
,
and &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos/tutorial-updates/"&gt;https://docs.fedoraproject.org/en-US/fedora-coreos/tutorial-updates/&lt;/a&gt;
 :&lt;/p&gt;</description></item><item><title>FOSDEM 2021</title><link>https://blog3.vorburger.ch/conferences/fosdem-2021/</link><pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate><guid>https://blog3.vorburger.ch/conferences/fosdem-2021/</guid><description>&lt;h1 id="fosdem-2021"&gt;FOSDEM 2021&lt;/h1&gt;
&lt;p&gt;I &amp;ldquo;attended&amp;rdquo; (virtually, thanks COVID-19) &lt;a href="https://fosdem.org/2021/"&gt;FOSDEM 2021&lt;/a&gt;
 on Sat/Sun Feb 6/7, 2021.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2021/schedule/"&gt;https://fosdem.org/2021/schedule/&lt;/a&gt;
 has the full schedule - and there&amp;rsquo;s a lot, as with any big tech conference.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UC9NuJImUbaSNKiwF2bdSfAw"&gt;https://www.youtube.com/channel/UC9NuJImUbaSNKiwF2bdSfAw&lt;/a&gt;
 has (will have) recordings. Here are talk I listened in to:&lt;/p&gt;
&lt;h2 id="cloud-infra"&gt;Cloud Infra&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2021/schedule/event/containers_datacenter_class/"&gt;https://fosdem.org/2021/schedule/event/containers_datacenter_class/&lt;/a&gt;
 about how &lt;a href="https://www.opencompute.org"&gt;https://www.opencompute.org&lt;/a&gt;
 open design HW &amp;ldquo;2nd life&amp;rdquo; that can be bought (again; &amp;ldquo;circular IT HW&amp;rdquo;) on &lt;a href="https://www.itrenew.com/explore-solutions/"&gt;https://www.itrenew.com/explore-solutions/&lt;/a&gt;
 (pricing on &lt;a href="http://bit.ly/sesame-specials;"&gt;http://bit.ly/sesame-specials;&lt;/a&gt;
 more on &lt;a href="https://stands.fosdem.org/stands/sesame_discovery/"&gt;https://stands.fosdem.org/stands/sesame_discovery/&lt;/a&gt;
) and managed with &lt;a href="https://github.com/opencomputeproject"&gt;https://github.com/opencomputeproject&lt;/a&gt;
 and &lt;a href="https://rackn.com/rebar/"&gt;https://rackn.com/rebar/&lt;/a&gt;
 (like &lt;a href="https://metal3.io"&gt;https://metal3.io&lt;/a&gt;
?) - at home? ;) I know what I want for christmas, LOL.&lt;/p&gt;</description></item></channel></rss>