<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Granda | Ideas &amp; Code</title><link>https://granda.org/de/</link><description>Recent content on Granda | Ideas &amp; Code</description><generator>Hugo</generator><language>de</language><lastBuildDate>Sat, 16 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://granda.org/de/index.xml" rel="self" type="application/rss+xml"/><item><title>Ein LLM auf einer Sony PSP</title><link>https://granda.org/de/2026/05/16/ein-llm-auf-einer-sony-psp/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/05/16/ein-llm-auf-einer-sony-psp/</guid><description>&lt;p&gt;Eine Sony PSP-2000 ist ein 333-MHz-MIPS-Handheld aus dem Jahr 2007 mit 64 MB RAM. Meins läuft diese Woche mit einem Transformer mit 15 Millionen Parametern und streamt englischen Text mit ein bis zwei Tokens pro Sekunde auf das LCD.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
 &lt;img src="https://granda.org/images/posts/an-llm-on-a-sony-psp-chat.png" alt="PSP-Framebuffer am Ende eines 64-Token-Bench-Laufs. Prompt 'Once upon a time, there was a little girl named Layla', Vervollständigung darunter, Fußzeile '64 tokens in 42.6s (1.5 tok/s)'." width="720" /&gt;
&lt;/p&gt;
&lt;p&gt;Das Modell ist Karpathys &lt;code&gt;stories15M&lt;/code&gt; (ein TinyStories-Checkpoint), int8-quantisiert auf etwa 17 MB. Die Laufzeitumgebung sind ~1100 Zeilen reines C, cross-kompiliert mit &lt;code&gt;pspdev/pspdev&lt;/code&gt; in Docker. Es gibt kein Python, kein &lt;code&gt;libtorch&lt;/code&gt;, keine hilfreiche Laufzeitumgebung auf dem Gerät — die PSP ist eine Single-Process-Box, die eine einzige &lt;code&gt;EBOOT.PBP&lt;/code&gt; vom Memory Stick lädt und dir &lt;code&gt;sceIo*&lt;/code&gt;, einen Framebuffer und eine VFPU gibt. Den Rest baust du selbst.&lt;/p&gt;</description></item><item><title>xAIs neuer Coding-Agent Grok Build liefert seine Prompts im Klartext</title><link>https://granda.org/de/2026/05/15/xais-neuer-coding-agent-grok-build-liefert-seine-prompts-im-klartext/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/05/15/xais-neuer-coding-agent-grok-build-liefert-seine-prompts-im-klartext/</guid><description>&lt;p&gt;xAI &lt;a href="https://x.ai/news/grok-build-cli"&gt;startete Grok Build&lt;/a&gt; gestern — ihre Antwort auf Claude Code und Codex CLI. Der Installationsbefehl ist eine einzelne Zeile, das Binary ist hinter ihrer obersten Verbraucherstufe ($299/Monat, $99 Einführungspreis) gesperrt, und der Agent selbst kommuniziert mit Grok 4 über eine OpenAI-kompatible HTTP-Oberfläche.&lt;/p&gt;
&lt;p&gt;Ich habe das Binary heruntergeladen, weil ich neugierig war, in welcher Sprache es gebaut wurde. Ich kam mit etwa dreißig wörtlichen System-Prompts, den Namen jedes internen Subagenten, jeder Tool-Beschreibung und einem ziemlich vollständigen Bild der Architektur heraus. Nichts davon erforderte mehr als &lt;code&gt;tr&lt;/code&gt; und &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Ein Totmannschalter für Firewall-Änderungen</title><link>https://granda.org/de/2026/05/05/ein-totmannschalter-f%C3%BCr-firewall-%C3%A4nderungen/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/05/05/ein-totmannschalter-f%C3%BCr-firewall-%C3%A4nderungen/</guid><description>&lt;p&gt;Die beängstigendste Zeile in der Homelab-Automatisierung ist die, die eine Firewall-Regel auf dem Router ändert, mit dem man per SSH verbunden ist.&lt;/p&gt;
&lt;p&gt;So bearbeiten Claude Code und ich sie trotzdem.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="die-angst"&gt;Die Angst&lt;/h2&gt;
&lt;p&gt;Ich musste eine UDM Pro-Regel namens &lt;em&gt;&amp;ldquo;Block inter-VLAN traffic&amp;rdquo;&lt;/em&gt; von &lt;code&gt;accept&lt;/code&gt; auf &lt;code&gt;drop&lt;/code&gt; umstellen. Die Regel war seit Ewigkeiten falsch konfiguriert — auf &lt;code&gt;accept&lt;/code&gt; gesetzt, wodurch jede per-Flow-Erlaubnis darüber kurzgeschlossen wurde — und sie wieder zu schließen war der ganze Punkt. Der Orchestrator, der die Änderung ausführte, war eine NixOS-VM in meinem Heimnetzwerk. Wenn die Umstellung den Pfad unterbrach, den diese VM (oder mein eigenes SSH) verwendete, wäre ich von meinem eigenen Router ausgesperrt ohne Konsolen-Fallback.&lt;/p&gt;</description></item><item><title>LLM-Gewichte von Hand patchen</title><link>https://granda.org/de/2026/04/15/llm-gewichte-von-hand-patchen/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/04/15/llm-gewichte-von-hand-patchen/</guid><description>&lt;p&gt;Ich habe eine Implementierung von ROME — Rang-1-Modellbearbeitung — von Grund auf geschrieben und dabei nur &lt;code&gt;torch&lt;/code&gt; und &lt;code&gt;transformers&lt;/code&gt; verwendet. Das Ziel: eine einzelne Tatsache in GPT-2 Medium mit einer einzigen Matrixaddition überschreiben und beobachten, was mit allem anderen passiert, was das Modell weiß.&lt;/p&gt;
&lt;p&gt;Ich habe vier Bearbeitungen durchgeführt. Drei waren chirurgisch präzise. Die vierte zeigte, dass die „Chirurgenhaftigkeit&amp;quot; von ROME extrem empfindlich gegenüber Implementierungsdetails ist, über die man nicht unbedingt von vornherein nachdenkt.&lt;/p&gt;</description></item><item><title>Analysen</title><link>https://granda.org/de/analytics/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/analytics/</guid><description/></item><item><title>Einen Raumfahrzeug-Computersimulator mit Claude Code bauen</title><link>https://granda.org/de/2026/03/30/einen-raumfahrzeug-computersimulator-mit-claude-code-bauen/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/03/30/einen-raumfahrzeug-computersimulator-mit-claude-code-bauen/</guid><description>&lt;p&gt;Ich wollte verstehen, wie Computer auf Raumfahrzeugen funktionieren. Die Echtzeit-Planung, die Strahlungshärtung, die verzögerungstolerante Vernetzung, die Mars-Rover mit der Erde in Verbindung hält. Mit Artemis II am Horizont (die erste bemannte Mondmission seit über 50 Jahren) schien es der richtige Zeitpunkt zu sein, tiefer einzutauchen. Also baute ich einen Simulator. Von Grund auf. Mit Claude Code als meinem Pair-Programmer.&lt;/p&gt;
&lt;p&gt;Keine physische Hardware. Alles läuft in QEMU und Docker auf einem Laptop. &lt;a href="https://github.com/granda/spacecraft-computing-sim"&gt;Code auf GitHub.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Dein geparkter Tesla ist ein Rechenzentrum</title><link>https://granda.org/de/2026/03/13/dein-geparkter-tesla-ist-ein-rechenzentrum/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/03/13/dein-geparkter-tesla-ist-ein-rechenzentrum/</guid><description>&lt;p&gt;Dein Auto steht 95 % der Zeit geparkt. Darin sitzt ein Chip, der 300–500 Billionen Operationen pro Sekunde ausführen kann, verbunden mit Kühlung, Leistungswandlung und einem Mobilfunkmodul. Er tut nichts.&lt;/p&gt;
&lt;p&gt;Tesla und xAI wollen das ändern. Am 11. März enthüllte Elon Musk &lt;a href="https://www.cnbc.com/2026/03/11/musk-unveils-joint-tesla-xai-project-macrohard.html"&gt;„Macrohard&amp;quot;&lt;/a&gt; – intern Digital Optimus genannt – ein gemeinsames Projekt, das geparkte Teslas in persönliche KI-Agenten verwandelt. Keine Chatbots. Agenten, die deinen Bildschirm beobachten, Maus und Tastatur steuern und echte Arbeit erledigen.&lt;/p&gt;</description></item><item><title>Visuelle QA als CI-Pipeline-Stufe</title><link>https://granda.org/de/2026/02/06/visuelle-qa-als-ci-pipeline-stufe/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/02/06/visuelle-qa-als-ci-pipeline-stufe/</guid><description>&lt;p&gt;Ich habe letzten Monat einen PR gemergt. Das Code-Review sah gut aus. Tests bestanden. Dann öffnete ich die Seite auf meinem Handy und die Seitenleiste war komplett kaputt.&lt;/p&gt;
&lt;p&gt;Die Lösung war trivial—eine fehlende Media Query. Der Bug war offensichtlich, sobald man sich tatsächlich die mobile Ansicht ansah. Niemand tat es.&lt;/p&gt;
&lt;p&gt;Also fügte ich eine Pipeline-Stufe hinzu, die hinschaut.&lt;/p&gt;
&lt;p&gt;Ich öffne ein GitHub-Issue, das sagt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Implementiere die Option Manuelle Eingabe zum Hinzufügen von Clients. Beim Klicken öffnet sich ein breites Slide-over-Drawer mit einem Formular zum Erstellen eines neuen Clients.&lt;/p&gt;</description></item><item><title>Für Wen Ist Agent Trace?</title><link>https://granda.org/de/2026/01/30/f%C3%BCr-wen-ist-agent-trace/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/01/30/f%C3%BCr-wen-ist-agent-trace/</guid><description>&lt;p&gt;Cursor veröffentlichte &lt;a href="https://github.com/cursor/agent-trace"&gt;Agent Trace&lt;/a&gt;, eine offene Spezifikation zur Verfolgung, welcher Code in einem Repo von einem LLM geschrieben wurde. Es zeichnet das Modell, das Tool, das Gespräch und die exakten Zeilenbereiche auf — alles wird an eine JSONL-Datei in Ihrem Projekt angehängt.&lt;/p&gt;
&lt;p&gt;Der Pitch: &amp;ldquo;Da Agenten immer mehr Code schreiben, ist es wichtig zu verstehen, was von KI im Gegensatz zu Menschen stammt.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Ich habe Zeit damit verbracht, die Spezifikation und die Referenzimplementierung zu lesen. Die Technik ist solide — sauberes Schema, durchdachte Erweiterbarkeit, gute Partnerliste (Amp, Amplitude, Cloudflare, Cognition, Google, Vercel). Aber ich kam immer wieder auf eine Frage zurück: was &lt;em&gt;macht&lt;/em&gt; man mit diesen Daten?&lt;/p&gt;</description></item><item><title>Abmelden</title><link>https://granda.org/de/unsubscribe/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/unsubscribe/</guid><description>&lt;p id="unsubscribe-message"&gt;Verarbeitung läuft...&lt;/p&gt;
&lt;script&gt;
(function() {
 const params = new URLSearchParams(window.location.search);
 const msg = document.getElementById('unsubscribe-message');

 if (params.get('success') === 'true') {
 msg.textContent = 'Sie haben sich vom Newsletter abgemeldet.';
 } else if (params.get('error') === 'missing') {
 msg.textContent = 'Fehler: Kein Abmelde-Token angegeben.';
 } else if (params.get('error') === 'invalid') {
 msg.textContent = 'Fehler: Ungültiger Abmelde-Link.';
 } else {
 msg.textContent = 'Fehler: Ein unbekannter Fehler ist aufgetreten.';
 }
})();
&lt;/script&gt;</description></item><item><title>Rich Links für Faule Entwickler</title><link>https://granda.org/de/2026/01/10/rich-links-f%C3%BCr-faule-entwickler/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/01/10/rich-links-f%C3%BCr-faule-entwickler/</guid><description>&lt;p&gt;Wenn ich einen Blog-Link auf Twitter oder Slack teile, wird er als reiner Text angezeigt. Kein Vorschaubild. Nur eine URL wie &lt;a href="https://granda.org/en/2026/01/02/claude-code-on-the-go/"&gt;granda.org/en/2026/01/02/claude-code-on-the-go/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ich brauchte Open Graph Bilder. Der Standardansatz: manuell ein 1200x630 Bild für jeden Beitrag erstellen. Das ist mühsam. Ich bat Claude, es zu automatisieren.&lt;/p&gt;
&lt;div class="desktop-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 Push[git push] --&amp;gt; GHA[GitHub Actions]
 GHA --&amp;gt; Hugo[Hugo Server]
 GHA --&amp;gt; PW[Playwright]
 PW --&amp;gt;|screenshot| Hugo
 PW --&amp;gt; IMG[OG Image]
 IMG --&amp;gt; Commit[git commit]
 Commit --&amp;gt; Deploy[Deploy]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="mobile-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 Push[git push] --&amp;gt; GHA[GitHub Actions]
 GHA --&amp;gt; Hugo[Hugo Server]
 GHA --&amp;gt; PW[Playwright]
 PW --&amp;gt;|screenshot| Hugo
 PW --&amp;gt; IMG[OG Image]
 IMG --&amp;gt; Commit[git commit]
 Commit --&amp;gt; Deploy[Deploy]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="die-einrichtung"&gt;Die Einrichtung&lt;/h2&gt;
&lt;p&gt;Ich erklärte Claude das Problem: Beiträge benötigen Social-Preview-Bilder, aber ich möchte sie nicht manuell erstellen. Screenshot des Artikelinhalts machen, als OG-Bild speichern, Frontmatter automatisch aktualisieren.&lt;/p&gt;</description></item><item><title>Mein QA Engineer ist ein LLM</title><link>https://granda.org/de/2026/01/09/mein-qa-engineer-ist-ein-llm/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/01/09/mein-qa-engineer-ist-ein-llm/</guid><description>&lt;p&gt;Claude kann auf Schaltflächen klicken.&lt;/p&gt;
&lt;p&gt;Das klingt trivial, aber es verändert, wie ich UIs erstelle. Mit Playwright MCP schreibt Claude nicht nur Code—es öffnet einen Browser, navigiert zu localhost und überprüft, dass die Dinge tatsächlich funktionieren. Es findet Bugs, die ich bei Code-Reviews übersehen würde.&lt;/p&gt;
&lt;h2 id="das-setup"&gt;Das Setup&lt;/h2&gt;
&lt;p&gt;Playwright MCP gibt Claude Browser-Automatisierung. Ich führe es mit Headless Chromium aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;playwright&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;@anthropic-ai/mcp-server-playwright&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--headless&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Jetzt kann Claude navigieren, klicken, tippen und Screenshots machen. Es sieht, was Nutzer sehen.&lt;/p&gt;</description></item><item><title>Meinen Eigenen Newsletter mit Claude Erstellen</title><link>https://granda.org/de/2026/01/07/meinen-eigenen-newsletter-mit-claude-erstellen/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/01/07/meinen-eigenen-newsletter-mit-claude-erstellen/</guid><description>&lt;p&gt;Tag zwei des Hacker News Verkehrsansturms. Vierzigtausend Besucher, keine Möglichkeit, sie wieder zu erreichen. Ich brauchte eine Newsletter-Anmeldung.&lt;/p&gt;
&lt;p&gt;Ich schaute mir Buttondown, Beehiiv, Substack, ConvertKit an. Alles übertrieben. Ich musste nur E-Mails sammeln. Ich brauchte keine Kampagnen, Analysen oder Abonnentenverwaltung. Und ich wollte meine Daten besitzen.&lt;/p&gt;
&lt;p&gt;Also bat ich Claude, es zu bauen.&lt;/p&gt;
&lt;div class="desktop-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 User([User]) --&amp;gt; Form[Newsletter Form]
 Form --&amp;gt;|POST /api/subscribe| Worker[Cloudflare Worker]
 Worker --&amp;gt; KV[(Cloudflare KV)]
 KV -.-&amp;gt;|Daily sync| GHA[GitHub Actions]
 GHA -.-&amp;gt; Repo[(subscribers.jsonl)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="mobile-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 User([User]) --&amp;gt; Form[Newsletter Form]
 Form --&amp;gt;|POST /api/subscribe| Worker[Cloudflare Worker]
 Worker --&amp;gt; KV[(Cloudflare KV)]
 KV -.-&amp;gt;|Daily sync| GHA[GitHub Actions]
 GHA -.-&amp;gt; Repo[(subscribers.jsonl)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="die-einrichtung"&gt;Die Einrichtung&lt;/h2&gt;
&lt;p&gt;Ich gab Claude ein Cloudflare API-Token über eine Umgebungsvariable und beschrieb, was ich wollte: ein Formular, das E-Mails sammelt und sie irgendwo speichert, wo ich die Kontrolle habe.&lt;/p&gt;</description></item><item><title>Claude Code Unterwegs</title><link>https://granda.org/de/2026/01/02/claude-code-unterwegs/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/de/2026/01/02/claude-code-unterwegs/</guid><description>&lt;p&gt;Ich lasse sechs Claude Code Agenten parallel von meinem Telefon aus laufen. Kein Laptop, kein Desktop—nur Termius auf iOS und eine Cloud-VM.&lt;/p&gt;
&lt;h2 id="das-setup"&gt;Das Setup&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 A[Phone] --&amp;gt;|Termius + mosh| B[Tailscale VPN]
 B --&amp;gt; C[Vultr VM]
 C --&amp;gt; D[Claude Code]
 D --&amp;gt;|PreToolUse hook| E[Poke webhook]
 E --&amp;gt;|Push notification| A
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Der Kreislauf ist: eine Aufgabe starten, Telefon in die Tasche, Benachrichtigung erhalten, wenn Claude Input braucht. Asynchrone Entwicklung von überall.&lt;/p&gt;
&lt;h2 id="infrastruktur"&gt;Infrastruktur&lt;/h2&gt;
&lt;p&gt;Eine Vultr VM in Silicon Valley:&lt;/p&gt;</description></item><item><title>Die KI es Machen Lassen</title><link>https://granda.org/de/2025/12/28/die-ki-es-machen-lassen/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/de/2025/12/28/die-ki-es-machen-lassen/</guid><description>&lt;p&gt;Ich brauchte einen Dev-Server: VM mit SSH-Zugang und installierten Dev-Tools. Ich beschrieb Claude Code, was ich wollte, und liess es das Setup erledigen.&lt;/p&gt;
&lt;h2 id="der-prompt"&gt;Der Prompt&lt;/h2&gt;
&lt;p&gt;Ich bat um eine Vultr VM mit 8 Kernen und 32GB RAM, nur uber Tailscale erreichbar, mit persistenten Sitzungen, die Netzwerkunterbrechungen uberleben.&lt;/p&gt;
&lt;h2 id="was-claude-code-baute"&gt;Was Claude Code Baute&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Provisionierte die VM uber Vultr API&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es erstellte eine 8-Kern/32GB Ubuntu-Instanz, wartete auf die IP und SSH&amp;rsquo;te dann als root ein.&lt;/p&gt;</description></item><item><title>Automatische Blog-Übersetzungen mit Claude und GitHub Actions</title><link>https://granda.org/de/2025/12/23/automatische-blog-%C3%BCbersetzungen-mit-claude-und-github-actions/</link><pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/de/2025/12/23/automatische-blog-%C3%BCbersetzungen-mit-claude-und-github-actions/</guid><description>&lt;p&gt;Jeder Beitrag, den ich schreibe, wird automatisch übersetzt. Claude übernimmt die Übersetzung, committet die Ergebnisse nach main, und die übersetzten Versionen werden zusammen mit dem Original deployt.&lt;/p&gt;
&lt;h2 id="der-ablauf"&gt;Der Ablauf&lt;/h2&gt;
&lt;p&gt;Der Übersetzungs-Workflow läuft in GitHub Actions, wenn englischer Content nach main gemergt wird:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;main]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;content/**/*.en.md&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 B[Merge nach main] --&amp;gt; C[Übersetzungen generiert]
 C --&amp;gt; D[Nach main committet]
 D --&amp;gt; E[Produktions-Deploy mit allen Sprachen]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="der-prompt"&gt;Der Prompt&lt;/h2&gt;
&lt;p&gt;Der Workflow verwendet &lt;a href="https://github.com/anthropics/claude-code-action"&gt;claude-code-action&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>Über</title><link>https://granda.org/de/authorship/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/de/authorship/</guid><description>&lt;h2 id="zusammenfassung"&gt;Zusammenfassung&lt;/h2&gt;
&lt;p&gt;Dieses Dokument beschreibt die von diesem Blog verwendete Autorenschaftsmethodik.&lt;/p&gt;
&lt;h2 id="1-einleitung"&gt;1. Einleitung&lt;/h2&gt;
&lt;p&gt;Dieser Blog wird größtenteils mit Unterstützung von Large Language Models (LLMs) erstellt. Der Autor liefert Anleitung, Bearbeitung und Qualitätskontrolle; die Maschine liefert erste Entwürfe und Übersetzungen.&lt;/p&gt;
&lt;h2 id="2-begründung"&gt;2. Begründung&lt;/h2&gt;
&lt;p&gt;Der Autor glaubt an Transparenz in Bezug auf AI-unterstützte Inhaltserstellung. Anstatt die verwendeten Werkzeuge zu verschleiern, zielt diese Offenlegung darauf ab:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Angemessene Erwartungen für Leser zu setzen&lt;/li&gt;
&lt;li&gt;Zu ehrlichen Normen rund um AI-Inhalte beizutragen&lt;/li&gt;
&lt;li&gt;Die kollaborative Natur des modernen Schreibens anzuerkennen&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="3-was-das-bedeutet"&gt;3. Was Das Bedeutet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ideen&lt;/strong&gt;: Von Menschen stammend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Struktur&lt;/strong&gt;: Kollaborativ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prosa&lt;/strong&gt;: Primär AI-generiert, von Menschen überprüft&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Übersetzungen&lt;/strong&gt;: Vollständig AI-generiert (nicht von Menschen überprüft)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-qualitätssicherung"&gt;4. Qualitätssicherung&lt;/h2&gt;
&lt;p&gt;Englische Inhalte werden vor der Veröffentlichung von Menschen überprüft. Übersetzungen werden automatisch generiert und können Fehler oder ungeschickte Formulierungen enthalten. Der Autor übernimmt die Verantwortung für den endgültigen veröffentlichten englischen Inhalt.&lt;/p&gt;</description></item><item><title>Über mich</title><link>https://granda.org/de/about/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/de/about/</guid><description>&lt;h2 id="zusammenfassung"&gt;Zusammenfassung&lt;/h2&gt;
&lt;p&gt;Dieses Dokument bietet Hintergrundinformationen über den Autor dieses Blogs.&lt;/p&gt;
&lt;h2 id="1-hintergrund"&gt;1. Hintergrund&lt;/h2&gt;
&lt;p&gt;Softwareingenieur mit 15 Jahren Erfahrung, davon 10 Jahre im Berufsfeld tätig.
Schwerpunkte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verteilte Systeme&lt;/li&gt;
&lt;li&gt;Backend-Entwicklung und Infrastruktur&lt;/li&gt;
&lt;li&gt;Full-Stack- und End-to-End-Produktentwicklung&lt;/li&gt;
&lt;li&gt;Benutzeroberflächendesign&lt;/li&gt;
&lt;li&gt;Aufbau sicherer und zuverlässiger Systeme&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-kontakt"&gt;2. Kontakt&lt;/h2&gt;
&lt;p&gt;Immer erfreut, mich mit anderen in der Branche zu vernetzen:
&lt;a href="https://x.com/mtt"&gt;@mtt&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hallo Welt</title><link>https://granda.org/de/2025/12/20/hallo-welt/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/de/2025/12/20/hallo-welt/</guid><description>&lt;p&gt;Willkommen auf meinem Blog! Das ist mein erster Beitrag.&lt;/p&gt;
&lt;p&gt;Ich werde hier Ideen, Notizen und interessante Dinge teilen.&lt;/p&gt;</description></item></channel></rss>