feat: finishing of M0
This commit is contained in:
@@ -0,0 +1,309 @@
|
||||
<!doctype html>
|
||||
<html lang="de" data-language-prefix="">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml" />
|
||||
|
||||
<link rel="alternate" hreflang="de" href="/2005/11/13/esmeralda" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Sprache">
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="de">🇩🇪</span>
|
||||
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en" data-lang-prefix="/en" title="en">🇬🇧</a>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Seitensuche">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Seitensuche">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Suchen..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Esmeralda</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2005"
|
||||
data-blog-calendar-month="11"
|
||||
aria-label="Kalender öffnen"
|
||||
title="Kalender öffnen"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Kalender wird geladen …"
|
||||
data-i18n-error="Kalenderdaten konnten nicht geladen werden."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archivkalender</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Kalender schließen"
|
||||
title="Kalender schließen"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Kalender wird geladen …</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomie">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/category/picture/">picture</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/fotografie/">fotografie</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/makro/">makro</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/natur/">natur</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/spinne/">spinne</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/tiere/">tiere</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><h3><a href="/media/esmeralda/">Esmeralda</a></h3>
|
||||
<p><img src="/media/2005/11/eb0cf9d7-6fbd-4b74-9be3-759d6e16f240.jpg" alt="Esmeralda"></p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,307 @@
|
||||
<!doctype html>
|
||||
<html lang="de" data-language-prefix="">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Sprache">
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="de">🇩🇪</span>
|
||||
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en" data-lang-prefix="/en" title="en">🇬🇧</a>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Seitensuche">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Seitensuche">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Suchen..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>cmux — Das Terminal für Multitasking</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="3"
|
||||
aria-label="Kalender öffnen"
|
||||
title="Kalender öffnen"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Kalender wird geladen …"
|
||||
data-i18n-error="Kalenderdaten konnten nicht geladen werden."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archivkalender</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Kalender schließen"
|
||||
title="Kalender schließen"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Kalender wird geladen …</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomie">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/category/aside/">aside</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/programmierung/">programmierung</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/mac-os-x/">mac-os-x</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/sysadmin/">sysadmin</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><p><a href="https://www.cmux.dev/de">cmux — Das Terminal für Multitasking</a> ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<div class="single-post-backlinks" aria-label="Rückverweise">
|
||||
<span class="single-post-backlinks-label">Verlinkt von</span>
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-backlink-bubble" href="/2026/03/13/ghostty">ghostty</a>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,300 @@
|
||||
<!doctype html>
|
||||
<html lang="de" data-language-prefix="">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Sprache">
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="de">🇩🇪</span>
|
||||
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en" data-lang-prefix="/en" title="en">🇬🇧</a>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Seitensuche">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Seitensuche">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Suchen..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Ghostty</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="3"
|
||||
aria-label="Kalender öffnen"
|
||||
title="Kalender öffnen"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Kalender wird geladen …"
|
||||
data-i18n-error="Kalenderdaten konnten nicht geladen werden."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archivkalender</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Kalender schließen"
|
||||
title="Kalender schließen"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Kalender wird geladen …</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomie">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/category/aside/">aside</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/programmierung/">programmierung</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/sysadmin/">sysadmin</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/tag/mac-os-x/">mac-os-x</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><p><a href="https://ghostty.org/">Ghostty</a> ist die Basis, auf der <a href="/2026/03/13/cmux-das-terminal-fur-multitasking">cmux — Das Terminal für Multitasking</a> aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
169
fixtures/golden-generated-sites/rfc1437-sample/assets/bds.css
Normal file
169
fixtures/golden-generated-sites/rfc1437-sample/assets/bds.css
Normal file
@@ -0,0 +1,169 @@
|
||||
:root { color-scheme: light dark; }
|
||||
@media only screen and (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme]) { --pico-background-color: #13171f; }
|
||||
}
|
||||
[data-theme='dark'] { --pico-background-color: #13171f; }
|
||||
body { max-width: 960px; margin: 0 auto; padding: 2rem 1rem 4rem; background: var(--pico-background-color, var(--background-color)); color: var(--pico-color, var(--color)); }
|
||||
main { display: grid; gap: 1rem; }
|
||||
.blog-menu { position: relative; display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; border-top: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); border-bottom: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); padding: .4rem 0; margin: -.15rem 0 .2rem; }
|
||||
.blog-menu > .blog-menu-list { width: 100%; }
|
||||
.blog-menu-list { list-style: none; display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .75rem; margin: 0; padding: 0; }
|
||||
.blog-menu-item { position: relative; }
|
||||
.blog-menu-link { display: inline-flex; align-items: center; color: var(--pico-muted-color, var(--muted-color)); text-decoration: none; font-size: .94rem; line-height: 1.4; padding: .2rem .1rem; }
|
||||
.blog-menu-item-with-children > .blog-menu-link::after { content: '▾'; font-size: .7em; margin-left: .38rem; opacity: .72; }
|
||||
.blog-menu-link:hover,
|
||||
.blog-menu-link:focus-visible { color: var(--pico-color, var(--color)); text-decoration: underline; }
|
||||
.blog-menu-submenu { position: absolute; top: calc(100% + .12rem); left: 0; min-width: 12rem; display: none; border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); background: var(--pico-card-background-color, var(--card-background-color)); padding: .3rem 0; z-index: 10; }
|
||||
.blog-menu-submenu .blog-menu-list { flex-direction: column; flex-wrap: nowrap; gap: 0; margin: 0; }
|
||||
.blog-menu-submenu .blog-menu-item { display: block; padding: 0; margin: 0; }
|
||||
.blog-menu-submenu .blog-menu-link { display: block; padding: .22rem .75rem; font-size: .88rem; line-height: 1.3; }
|
||||
.blog-menu-submenu .blog-menu-item a.blog-menu-link { margin: 0; }
|
||||
.blog-menu-item-with-children:hover > .blog-menu-submenu,
|
||||
.blog-menu-item-with-children:focus-within > .blog-menu-submenu { display: block; }
|
||||
.blog-menu-calendar { position: relative; display: inline-flex; align-items: baseline; justify-content: center; margin-left: auto; align-self: baseline; flex-shrink: 0; }
|
||||
.blog-menu-calendar-button { display: inline-flex; align-items: center; justify-content: center; width: auto; height: auto; margin: 0; padding: .2rem .1rem; border: 0; background: transparent; color: var(--pico-muted-color, var(--muted-color)); border-radius: 0; cursor: pointer; font: inherit; font-size: .94rem; line-height: 1.4; appearance: none; -webkit-appearance: none; vertical-align: baseline; }
|
||||
.blog-menu-calendar-button svg { display: block; width: .9rem; height: .9rem; fill: none; stroke: currentColor; transform: translateY(2px); }
|
||||
.blog-menu-calendar-button:hover,
|
||||
.blog-menu-calendar-button:focus-visible { color: var(--pico-color, var(--color)); }
|
||||
.blog-calendar-panel { position: absolute; top: calc(100% + .15rem); right: 0; width: min(17.5rem, 92vw); border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); background: var(--pico-card-background-color, var(--card-background-color)); padding: .32rem; z-index: 30; }
|
||||
.blog-calendar-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: .1rem; }
|
||||
.blog-calendar-header strong { font-size: .9rem; line-height: 1.2; }
|
||||
.blog-calendar-close { border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); background: transparent; color: var(--pico-muted-color, var(--muted-color)); width: 1.35rem; height: 1.35rem; border-radius: .2rem; padding: 0; cursor: pointer; line-height: 1; }
|
||||
.blog-calendar-close:hover,
|
||||
.blog-calendar-close:focus-visible { color: var(--pico-color, var(--color)); border-color: var(--pico-color, var(--color)); }
|
||||
.blog-calendar-content { display: grid; gap: .08rem; }
|
||||
.blog-calendar-status { margin: .1rem 0 0; color: var(--pico-muted-color, var(--muted-color)); font-size: .74rem; }
|
||||
[data-blog-calendar-root] { font-size: .86rem; }
|
||||
[data-blog-calendar-root] [data-vc=header] { margin-bottom: .08rem; }
|
||||
[data-blog-calendar-root] [data-vc=month],
|
||||
[data-blog-calendar-root] [data-vc=year] { padding: .08rem .18rem; font-size: .9rem; line-height: 1.15; }
|
||||
[data-blog-calendar-root] [data-vc=months],
|
||||
[data-blog-calendar-root] [data-vc=years] { row-gap: .32rem; }
|
||||
[data-blog-calendar-root] [data-vc=years] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
||||
[data-blog-calendar-root] [data-vc-months-month],
|
||||
[data-blog-calendar-root] [data-vc-years-year] { height: 1.72rem; }
|
||||
[data-blog-calendar-root] [data-vc-months-month],
|
||||
[data-blog-calendar-root] [data-vc-years-year] { word-break: normal; white-space: nowrap; }
|
||||
[data-blog-calendar-root] [data-vc-years-year] { min-width: 2.5rem; font-size: .7rem; line-height: 1; }
|
||||
[data-blog-calendar-root] [data-vc-week=days] { margin-bottom: .08rem; }
|
||||
[data-blog-calendar-root] [data-vc-week-day] { font-size: .68rem; line-height: .9rem; min-width: 1.45rem; }
|
||||
[data-blog-calendar-root] [data-vc-date] { padding-top: 0; padding-bottom: 0; }
|
||||
[data-blog-calendar-root] [data-vc-date-btn] { min-height: 1.45rem; min-width: 1.45rem; font-size: .68rem; line-height: .9rem; }
|
||||
[data-blog-calendar-has-posts='true'] [data-vc-date-btn] {
|
||||
border-color: hsl(var(--blog-calendar-heat-hue, 210) 85% 42% / .95);
|
||||
background-color: hsl(var(--blog-calendar-heat-hue, 210) 88% 52% / var(--blog-calendar-heat-alpha, 0));
|
||||
}
|
||||
[data-blog-calendar-root] [data-vc-months-month][data-blog-calendar-has-posts='true'],
|
||||
[data-blog-calendar-root] [data-vc-years-year][data-blog-calendar-has-posts='true'] {
|
||||
background-color: hsl(var(--blog-calendar-heat-hue, 210) 88% 52% / var(--blog-calendar-heat-alpha, 0));
|
||||
border-color: hsl(var(--blog-calendar-heat-hue, 210) 85% 42% / .95);
|
||||
}
|
||||
.post { border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); padding: 1rem; background: var(--pico-card-background-color, var(--card-background-color)); min-width: 0; }
|
||||
.post pre { position: relative; overflow-x: auto; max-width: 100%; border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); border-radius: .3rem; margin: .9rem 0; padding: .85rem .9rem; background: var(--pico-code-background-color, rgba(33, 38, 45, .82)); box-sizing: border-box; }
|
||||
.post pre code { display: block; font-size: .88rem; line-height: 1.5; white-space: pre; }
|
||||
.code-copy-button {
|
||||
position: absolute;
|
||||
top: .4rem;
|
||||
right: .4rem;
|
||||
border: 1px solid var(--pico-muted-border-color, var(--muted-border-color));
|
||||
background: var(--pico-card-background-color, var(--card-background-color));
|
||||
color: var(--pico-muted-color, var(--muted-color));
|
||||
border-radius: .25rem;
|
||||
width: 1.8rem;
|
||||
height: 1.8rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
opacity: .88;
|
||||
}
|
||||
.code-copy-button:hover,
|
||||
.code-copy-button:focus-visible { opacity: 1; color: var(--pico-color, var(--color)); }
|
||||
.code-copy-icon { font-size: .95rem; line-height: 1; }
|
||||
.code-copy-success .code-copy-button { color: var(--pico-ins-color, rgb(53, 117, 56)); border-color: var(--pico-ins-color, rgb(53, 117, 56)); }
|
||||
.code-copy-failed .code-copy-button { color: var(--pico-del-color, rgb(183, 72, 72)); border-color: var(--pico-del-color, rgb(183, 72, 72)); }
|
||||
.post iframe { width: 100%; min-height: 20rem; }
|
||||
.macro-youtube, .macro-vimeo { margin-bottom: 1rem; }
|
||||
.macro-gallery, .macro-photo-archive, .macro-tag-cloud { border: 1px dashed var(--pico-muted-border-color, var(--muted-border-color)); padding: .75rem; margin: 1rem 0; }
|
||||
.gallery-container { display: grid; gap: .5rem; }
|
||||
.macro-gallery.gallery-cols-1 .gallery-container { grid-template-columns: 1fr; }
|
||||
.macro-gallery.gallery-cols-2 .gallery-container { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
.macro-gallery.gallery-cols-3 .gallery-container { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
||||
.macro-gallery.gallery-cols-4 .gallery-container { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
||||
.macro-gallery.gallery-cols-5 .gallery-container { grid-template-columns: repeat(5, minmax(0, 1fr)); }
|
||||
.macro-gallery.gallery-cols-6 .gallery-container { grid-template-columns: repeat(6, minmax(0, 1fr)); }
|
||||
.gallery-item, .photo-archive-item { display: block; overflow: hidden; border-radius: .25rem; }
|
||||
.gallery-item img, .photo-archive-item img { display: block; width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; }
|
||||
.lb-nav a, .lb-nav a:hover, .lb-nav a:focus-visible { border: 0; box-shadow: none; outline: none; text-decoration: none; }
|
||||
.gallery-caption { margin-top: .5rem; text-align: center; color: var(--pico-muted-color, var(--muted-color)); font-size: .92rem; }
|
||||
.gallery-empty, .photo-archive-empty { color: var(--pico-muted-color, var(--muted-color)); font-style: italic; }
|
||||
.photo-archive-container { display: grid; gap: 1rem; }
|
||||
.photo-archive-month { display: grid; grid-template-columns: 3.25rem 1fr; gap: .75rem; align-items: start; }
|
||||
.photo-archive-month-label { display: flex; justify-content: center; align-items: center; }
|
||||
.photo-archive-month-label span { writing-mode: vertical-rl; transform: rotate(180deg); letter-spacing: .08em; text-transform: uppercase; color: var(--pico-muted-color, var(--muted-color)); }
|
||||
.photo-archive-gallery { display: grid; gap: .5rem; grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
||||
.photo-archive-single-month .photo-archive-gallery { grid-template-columns: repeat(5, minmax(0, 1fr)); }
|
||||
.macro-tag-cloud { min-height: 14rem; }
|
||||
.tag-cloud-canvas { display: block; width: 100%; height: auto; min-height: 12rem; }
|
||||
.tag-cloud-empty { color: var(--pico-muted-color, var(--muted-color)); font-style: italic; }
|
||||
.archive-day-group { display: grid; grid-template-columns: 5.25rem 1fr; gap: 1.25rem; align-items: stretch; }
|
||||
.archive-day-marker { display: flex; justify-content: center; align-items: center; color: var(--pico-muted-color, var(--muted-color)); }
|
||||
.archive-day-marker span { writing-mode: vertical-rl; transform: rotate(180deg); letter-spacing: .16em; font-size: 1.05rem; font-weight: 600; text-transform: uppercase; }
|
||||
.archive-day-posts { display: grid; gap: 1rem; }
|
||||
.archive-day-separator { position: relative; height: 2px; width: 100%; color: var(--pico-color, var(--color)); border-top: 1px solid currentColor; opacity: .18; margin: .45rem 0 .65rem; }
|
||||
.archive-day-separator::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to right, transparent 0%, transparent 18%, currentColor 58%, transparent 92%, transparent 100%); opacity: .85; }
|
||||
.single-post { margin: 0; padding: 0; background: transparent; border: 0; box-shadow: none; }
|
||||
.single-post-taxonomy { display: flex; flex-wrap: wrap; gap: .4rem .45rem; margin: -.1rem 0 .2rem; }
|
||||
.single-post-taxonomy-bubble {
|
||||
--bubble-accent: var(--pico-ins-color, rgb(53, 117, 56));
|
||||
--bubble-bg: var(--bubble-accent);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
border: 1px solid var(--bubble-accent);
|
||||
border-radius: 999px;
|
||||
padding: .1rem .5rem;
|
||||
font-size: .74rem;
|
||||
line-height: 1.35;
|
||||
color: #000;
|
||||
background: var(--bubble-bg, var(--bubble-accent));
|
||||
text-decoration: none;
|
||||
}
|
||||
.single-post-taxonomy-bubble:hover,
|
||||
.single-post-taxonomy-bubble:focus-visible { text-decoration: underline; }
|
||||
.single-post-taxonomy-bubble-category { --bubble-accent: var(--pico-ins-color, rgb(53, 117, 56)); --bubble-bg: var(--pico-ins-color, rgb(53, 117, 56)); }
|
||||
.single-post-taxonomy-bubble-tag { --bubble-accent: var(--pico-del-color, rgb(183, 72, 72)); --bubble-bg: var(--pico-del-color, rgb(183, 72, 72)); }
|
||||
.single-post-backlinks { display: flex; flex-wrap: wrap; gap: .4rem .45rem; align-items: center; margin-top: 1.5rem; }
|
||||
.single-post-backlinks-label { font-size: .74rem; line-height: 1.35; color: var(--pico-muted-color, var(--muted-color)); margin-right: .15rem; }
|
||||
.single-post-backlink-bubble { --bubble-accent: var(--pico-primary, rgb(16, 107, 193)); --bubble-bg: var(--pico-primary, rgb(16, 107, 193)); color: var(--pico-primary-inverse, #fff); }
|
||||
.preview-pagination { display: flex; justify-content: space-between; align-items: center; gap: .75rem; margin-top: .25rem; }
|
||||
.preview-pagination-link { color: var(--pico-muted-color, var(--muted-color)); text-decoration: none; font-size: .92rem; opacity: .72; transition: opacity .15s ease-in-out; }
|
||||
.preview-pagination-link:hover,
|
||||
.preview-pagination-link:focus-visible { opacity: 1; text-decoration: underline; }
|
||||
.preview-pagination .spacer { flex: 1; }
|
||||
.not-found { display: grid; place-items: center; min-height: 48vh; }
|
||||
.not-found article { max-width: 32rem; text-align: center; }
|
||||
.language-switcher { position: fixed; right: .75rem; top: 1.5rem; display: flex; flex-direction: column; gap: .1rem; z-index: 100; }
|
||||
.language-switcher-badge { display: block; padding: .05rem .1rem; font-size: .85rem; line-height: 1.1; text-decoration: none; border: 1px solid transparent; border-radius: .15rem; cursor: pointer; opacity: .7; transition: opacity .15s ease-in-out; }
|
||||
.language-switcher-badge:hover,
|
||||
.language-switcher-badge:focus-visible { opacity: 1; border-color: var(--pico-color, var(--color)); }
|
||||
.language-switcher-badge-current { opacity: 1; border-color: var(--pico-primary, var(--primary)); }
|
||||
.blog-search-widget, .blog-search-standalone { position: relative; margin-top: .15rem; }
|
||||
.blog-search-standalone { position: fixed; right: .75rem; top: 1.5rem; z-index: 100; }
|
||||
.blog-search-toggle { display: inline-flex; align-items: center; justify-content: center; border: 0; background: transparent; color: var(--pico-muted-color, var(--muted-color)); cursor: pointer; padding: .15rem; opacity: .7; transition: opacity .15s ease-in-out; }
|
||||
.blog-search-toggle:hover, .blog-search-toggle:focus-visible { opacity: 1; color: var(--pico-color, var(--color)); }
|
||||
.blog-search-toggle svg { display: block; }
|
||||
.blog-search-panel { position: absolute; top: calc(100% + .25rem); right: 0; width: min(24rem, 90vw); z-index: 40; border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); background: var(--pico-card-background-color, var(--card-background-color)); padding: .5rem; border-radius: .35rem; box-shadow: 0 4px 24px rgba(0,0,0,.25); }
|
||||
.blog-search-panel .pagefind-ui { --pagefind-ui-scale: .8; --pagefind-ui-primary: var(--pico-primary, var(--primary)); --pagefind-ui-text: var(--pico-color, var(--color)); --pagefind-ui-background: var(--pico-card-background-color, var(--card-background-color)); --pagefind-ui-border: var(--pico-muted-border-color, var(--muted-border-color)); --pagefind-ui-tag: var(--pico-muted-border-color, var(--muted-border-color)); --pagefind-ui-border-width: 1px; --pagefind-ui-border-radius: .2rem; --pagefind-ui-image-border-radius: .2rem; --pagefind-ui-image-box-ratio: 0; --pagefind-ui-font: inherit; font-size: .85rem; }
|
||||
.blog-search-panel .pagefind-ui__search-input { font-size: .85rem; padding: .3rem .5rem; border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); background: var(--pico-background-color, var(--background-color)); color: var(--pico-color, var(--color)); border-radius: .2rem; width: 100%; }
|
||||
.blog-search-panel .pagefind-ui__search-clear { color: var(--pico-muted-color, var(--muted-color)); background: none; font-size: .8rem; }
|
||||
.blog-search-panel .pagefind-ui__search-clear:focus { outline-color: var(--pico-primary, var(--primary)); }
|
||||
.blog-search-panel .pagefind-ui__drawer { max-height: min(60vh, 28rem); overflow-y: auto; }
|
||||
.blog-search-panel .pagefind-ui__message { color: var(--pico-muted-color, var(--muted-color)); font-size: .78rem; padding: .25rem 0; }
|
||||
.blog-search-panel .pagefind-ui__result { border-top: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); padding: .4rem 0; }
|
||||
.blog-search-panel .pagefind-ui__result-link { color: var(--pico-primary, var(--primary)); font-size: .85rem; }
|
||||
.blog-search-panel .pagefind-ui__result-title { font-size: .85rem; }
|
||||
.blog-search-panel .pagefind-ui__result-excerpt { font-size: .78rem; color: var(--pico-muted-color, var(--muted-color)); }
|
||||
.blog-search-panel .pagefind-ui__result-excerpt mark { background-color: var(--pico-primary-focus, rgba(255,223,0,.35)); color: inherit; }
|
||||
.blog-search-panel .pagefind-ui__button { color: var(--pico-primary, var(--primary)); background: none; border: 1px solid var(--pico-muted-border-color, var(--muted-border-color)); border-radius: .2rem; font-size: .78rem; cursor: pointer; }
|
||||
.blog-search-panel .pagefind-ui__button:hover { border-color: var(--pico-primary, var(--primary)); }
|
||||
@@ -0,0 +1,299 @@
|
||||
(() => {
|
||||
const button = document.querySelector('[data-blog-calendar-toggle]');
|
||||
const panel = document.querySelector('[data-blog-calendar-panel]');
|
||||
const closeButton = document.querySelector('[data-blog-calendar-close]');
|
||||
const calendarRoot = document.querySelector('[data-blog-calendar-root]');
|
||||
const status = document.querySelector('[data-blog-calendar-status]');
|
||||
|
||||
if (!button || !panel || !calendarRoot || !status) {
|
||||
return;
|
||||
}
|
||||
|
||||
const languagePrefix = document.documentElement.getAttribute('data-language-prefix') || '';
|
||||
|
||||
const labels = {
|
||||
loading: panel.getAttribute('data-i18n-loading') || 'Loading calendar…',
|
||||
error: panel.getAttribute('data-i18n-error') || 'Calendar data could not be loaded.',
|
||||
};
|
||||
|
||||
let isInitialized = false;
|
||||
let years = {};
|
||||
let months = {};
|
||||
let days = {};
|
||||
let maxYearCount = 0;
|
||||
let maxMonthCount = 0;
|
||||
let maxDayCount = 0;
|
||||
|
||||
function pad2(value) {
|
||||
return String(value).padStart(2, '0');
|
||||
}
|
||||
|
||||
function normalizeCountMap(value) {
|
||||
if (!value || typeof value !== 'object') {
|
||||
return {};
|
||||
}
|
||||
|
||||
const map = {};
|
||||
for (const [key, rawCount] of Object.entries(value)) {
|
||||
const count = Number(rawCount);
|
||||
if (!Number.isFinite(count) || count <= 0) {
|
||||
continue;
|
||||
}
|
||||
map[key] = Math.floor(count);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
function computeMaxCount(value) {
|
||||
const counts = Object.values(value || {});
|
||||
if (counts.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
return Math.max(...counts.map((count) => Number(count) || 0));
|
||||
}
|
||||
|
||||
function applyHeatStyle(target, count, maxCount) {
|
||||
if (!(target instanceof HTMLElement) || !Number.isFinite(count) || count <= 0 || !Number.isFinite(maxCount) || maxCount <= 0) {
|
||||
target?.style?.setProperty('--blog-calendar-heat-alpha', '0');
|
||||
target?.style?.setProperty('--blog-calendar-heat-hue', '210');
|
||||
return;
|
||||
}
|
||||
|
||||
const normalized = Math.min(1, count / maxCount);
|
||||
const hue = Math.round(210 - (210 * normalized));
|
||||
const alpha = (0.30 + normalized * 0.65).toFixed(3);
|
||||
|
||||
target.style.setProperty('--blog-calendar-heat-hue', String(hue));
|
||||
target.style.setProperty('--blog-calendar-heat-alpha', alpha);
|
||||
}
|
||||
|
||||
function navigateTo(pathname) {
|
||||
if (!pathname) {
|
||||
return;
|
||||
}
|
||||
window.location.assign(languagePrefix + pathname);
|
||||
}
|
||||
|
||||
function parseInitialYearMonth() {
|
||||
const initialYearRaw = button.getAttribute('data-blog-calendar-year');
|
||||
const initialMonthRaw = button.getAttribute('data-blog-calendar-month');
|
||||
|
||||
const initialYear = Number(initialYearRaw);
|
||||
const initialMonth = Number(initialMonthRaw);
|
||||
|
||||
let selectedYear = Number.isInteger(initialYear) && initialYear > 0 ? initialYear : null;
|
||||
let selectedMonth = Number.isInteger(initialMonth) && initialMonth >= 1 && initialMonth <= 12
|
||||
? (initialMonth - 1)
|
||||
: null;
|
||||
|
||||
if (!Number.isInteger(selectedYear) || !Number.isInteger(selectedMonth)) {
|
||||
const rawPathname = window.location.pathname || '';
|
||||
const pathname = languagePrefix && rawPathname.startsWith(languagePrefix + '/')
|
||||
? rawPathname.slice(languagePrefix.length)
|
||||
: rawPathname;
|
||||
const parts = pathname.split('/').filter(Boolean);
|
||||
const pathYear = Number(parts[0]);
|
||||
const pathMonth = Number(parts[1]);
|
||||
|
||||
if (!Number.isInteger(selectedYear) && Number.isInteger(pathYear) && pathYear > 0 && String(parts[0]).length === 4) {
|
||||
selectedYear = pathYear;
|
||||
}
|
||||
|
||||
if (!Number.isInteger(selectedMonth) && Number.isInteger(pathMonth) && pathMonth >= 1 && pathMonth <= 12) {
|
||||
selectedMonth = pathMonth - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return { selectedYear, selectedMonth };
|
||||
}
|
||||
|
||||
async function loadCalendarData() {
|
||||
const response = await fetch('/calendar.json', { cache: 'no-store' });
|
||||
if (!response.ok) {
|
||||
throw new Error('calendar.json request failed');
|
||||
}
|
||||
|
||||
const parsed = await response.json();
|
||||
years = normalizeCountMap(parsed?.years);
|
||||
months = normalizeCountMap(parsed?.months);
|
||||
days = normalizeCountMap(parsed?.days);
|
||||
maxYearCount = computeMaxCount(years);
|
||||
maxMonthCount = computeMaxCount(months);
|
||||
maxDayCount = computeMaxCount(days);
|
||||
}
|
||||
|
||||
function getDateFromClickEvent(event) {
|
||||
if (!(event?.target instanceof Element)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const dateEl = event.target.closest('[data-vc-date]');
|
||||
if (!(dateEl instanceof HTMLElement)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return dateEl.dataset.vcDate || '';
|
||||
}
|
||||
|
||||
async function initializeCalendar() {
|
||||
if (isInitialized) {
|
||||
return;
|
||||
}
|
||||
|
||||
status.textContent = labels.loading;
|
||||
|
||||
try {
|
||||
await loadCalendarData();
|
||||
|
||||
const Calendar = window.VanillaCalendarPro?.Calendar;
|
||||
if (typeof Calendar !== 'function') {
|
||||
throw new Error('Vanilla Calendar Pro is unavailable');
|
||||
}
|
||||
|
||||
const initialYearMonth = parseInitialYearMonth();
|
||||
const calendarOptions = {
|
||||
...(Number.isInteger(initialYearMonth.selectedYear) ? { selectedYear: initialYearMonth.selectedYear } : {}),
|
||||
...(Number.isInteger(initialYearMonth.selectedMonth) ? { selectedMonth: initialYearMonth.selectedMonth } : {}),
|
||||
onCreateDateEls(_self, dateEl) {
|
||||
const dateKey = dateEl.dataset.vcDate || '';
|
||||
const count = Number(days[dateKey] || 0);
|
||||
const buttonEl = dateEl.querySelector('[data-vc-date-btn]');
|
||||
|
||||
if (!(buttonEl instanceof HTMLElement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (count <= 0) {
|
||||
dateEl.removeAttribute('data-blog-calendar-has-posts');
|
||||
applyHeatStyle(buttonEl, 0, maxDayCount);
|
||||
return;
|
||||
}
|
||||
|
||||
dateEl.setAttribute('data-blog-calendar-has-posts', 'true');
|
||||
applyHeatStyle(buttonEl, count, maxDayCount);
|
||||
},
|
||||
onCreateMonthEls(self, monthEl) {
|
||||
if (!(monthEl instanceof HTMLElement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const monthIndex = Number(monthEl.dataset.vcMonthsMonth);
|
||||
const selectedYear = Number(self?.context?.selectedYear);
|
||||
if (!Number.isInteger(monthIndex) || !Number.isInteger(selectedYear)) {
|
||||
monthEl.removeAttribute('data-blog-calendar-has-posts');
|
||||
applyHeatStyle(monthEl, 0, maxMonthCount);
|
||||
return;
|
||||
}
|
||||
|
||||
const monthKey = String(selectedYear) + '-' + pad2(monthIndex + 1);
|
||||
const count = Number(months[monthKey] || 0);
|
||||
if (count <= 0) {
|
||||
monthEl.removeAttribute('data-blog-calendar-has-posts');
|
||||
applyHeatStyle(monthEl, 0, maxMonthCount);
|
||||
return;
|
||||
}
|
||||
|
||||
monthEl.setAttribute('data-blog-calendar-has-posts', 'true');
|
||||
applyHeatStyle(monthEl, count, maxMonthCount);
|
||||
},
|
||||
onCreateYearEls(_self, yearEl) {
|
||||
if (!(yearEl instanceof HTMLElement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const yearValue = Number(yearEl.dataset.vcYearsYear);
|
||||
if (!Number.isInteger(yearValue)) {
|
||||
yearEl.removeAttribute('data-blog-calendar-has-posts');
|
||||
applyHeatStyle(yearEl, 0, maxYearCount);
|
||||
return;
|
||||
}
|
||||
|
||||
const yearKey = String(yearValue);
|
||||
const count = Number(years[yearKey] || 0);
|
||||
if (count <= 0) {
|
||||
yearEl.removeAttribute('data-blog-calendar-has-posts');
|
||||
applyHeatStyle(yearEl, 0, maxYearCount);
|
||||
return;
|
||||
}
|
||||
|
||||
yearEl.setAttribute('data-blog-calendar-has-posts', 'true');
|
||||
applyHeatStyle(yearEl, count, maxYearCount);
|
||||
},
|
||||
onClickDate(_self, event) {
|
||||
const dateKey = getDateFromClickEvent(event);
|
||||
if (!dateKey || !days[dateKey]) {
|
||||
return;
|
||||
}
|
||||
|
||||
const [year, month, day] = dateKey.split('-');
|
||||
if (!year || !month || !day) {
|
||||
return;
|
||||
}
|
||||
|
||||
navigateTo('/' + year + '/' + month + '/' + day + '/');
|
||||
},
|
||||
onClickMonth(self) {
|
||||
const selectedYear = Number(self?.context?.selectedYear);
|
||||
const selectedMonth = Number(self?.context?.selectedMonth);
|
||||
|
||||
if (!Number.isInteger(selectedYear) || !Number.isInteger(selectedMonth)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const monthKey = String(selectedYear) + '-' + pad2(selectedMonth + 1);
|
||||
if (!months[monthKey]) {
|
||||
return;
|
||||
}
|
||||
|
||||
navigateTo('/' + String(selectedYear) + '/' + pad2(selectedMonth + 1) + '/');
|
||||
},
|
||||
onClickYear(self) {
|
||||
const selectedYear = Number(self?.context?.selectedYear);
|
||||
|
||||
if (!Number.isInteger(selectedYear)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const yearKey = String(selectedYear);
|
||||
if (!years[yearKey]) {
|
||||
return;
|
||||
}
|
||||
|
||||
navigateTo('/' + String(selectedYear) + '/');
|
||||
},
|
||||
};
|
||||
|
||||
const calendar = new Calendar('[data-blog-calendar-root]', calendarOptions);
|
||||
|
||||
calendar.init();
|
||||
status.textContent = '';
|
||||
status.setAttribute('hidden', 'hidden');
|
||||
isInitialized = true;
|
||||
} catch {
|
||||
status.textContent = labels.error;
|
||||
status.removeAttribute('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
function setPanelOpen(isOpen) {
|
||||
if (isOpen) {
|
||||
panel.removeAttribute('hidden');
|
||||
void initializeCalendar();
|
||||
return;
|
||||
}
|
||||
|
||||
panel.setAttribute('hidden', 'hidden');
|
||||
}
|
||||
|
||||
button.addEventListener('click', () => {
|
||||
const isHidden = panel.hasAttribute('hidden');
|
||||
setPanelOpen(isHidden);
|
||||
});
|
||||
|
||||
if (closeButton) {
|
||||
closeButton.addEventListener('click', () => {
|
||||
setPanelOpen(false);
|
||||
});
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,136 @@
|
||||
(function () {
|
||||
function resolveCodeLanguage(codeElement) {
|
||||
if (!codeElement) {
|
||||
return '';
|
||||
}
|
||||
|
||||
var direct = codeElement.getAttribute('data-code-language');
|
||||
if (typeof direct === 'string' && direct.trim()) {
|
||||
return direct.trim().toLowerCase();
|
||||
}
|
||||
|
||||
var className = codeElement.className || '';
|
||||
var classMatch = className.match(/(?:^|\s)language-([\w.+-]+)/i);
|
||||
if (classMatch && classMatch[1]) {
|
||||
return classMatch[1].toLowerCase();
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
function fallbackCopy(value) {
|
||||
var textarea = document.createElement('textarea');
|
||||
textarea.value = value;
|
||||
textarea.setAttribute('readonly', 'readonly');
|
||||
textarea.style.position = 'fixed';
|
||||
textarea.style.opacity = '0';
|
||||
textarea.style.pointerEvents = 'none';
|
||||
document.body.appendChild(textarea);
|
||||
textarea.focus();
|
||||
textarea.select();
|
||||
|
||||
try {
|
||||
return document.execCommand('copy');
|
||||
} catch {
|
||||
return false;
|
||||
} finally {
|
||||
document.body.removeChild(textarea);
|
||||
}
|
||||
}
|
||||
|
||||
async function copyCodeToClipboard(value) {
|
||||
if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
|
||||
try {
|
||||
await navigator.clipboard.writeText(value);
|
||||
return true;
|
||||
} catch {
|
||||
return fallbackCopy(value);
|
||||
}
|
||||
}
|
||||
|
||||
return fallbackCopy(value);
|
||||
}
|
||||
|
||||
function ensureCopyButton(preElement, codeElement) {
|
||||
if (!preElement || preElement.querySelector(':scope > .code-copy-button')) {
|
||||
return;
|
||||
}
|
||||
|
||||
preElement.classList.add('code-block-enhanced');
|
||||
|
||||
var button = document.createElement('button');
|
||||
button.type = 'button';
|
||||
button.className = 'code-copy-button';
|
||||
button.setAttribute('aria-hidden', 'true');
|
||||
|
||||
var icon = document.createElement('span');
|
||||
icon.className = 'code-copy-icon';
|
||||
icon.textContent = '⧉';
|
||||
button.appendChild(icon);
|
||||
|
||||
button.addEventListener('click', async function () {
|
||||
var codeText = codeElement.textContent || '';
|
||||
var copied = await copyCodeToClipboard(codeText);
|
||||
preElement.classList.remove('code-copy-failed');
|
||||
preElement.classList.remove('code-copy-success');
|
||||
preElement.classList.add(copied ? 'code-copy-success' : 'code-copy-failed');
|
||||
|
||||
if (copied) {
|
||||
icon.textContent = '✓';
|
||||
window.setTimeout(function () {
|
||||
preElement.classList.remove('code-copy-success');
|
||||
icon.textContent = '⧉';
|
||||
}, 1200);
|
||||
return;
|
||||
}
|
||||
|
||||
window.setTimeout(function () {
|
||||
preElement.classList.remove('code-copy-failed');
|
||||
}, 1200);
|
||||
});
|
||||
|
||||
preElement.appendChild(button);
|
||||
}
|
||||
|
||||
function highlightCodeBlock(codeElement) {
|
||||
var highlighter = window.hljs;
|
||||
if (!highlighter || typeof highlighter.highlightElement !== 'function') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (codeElement.getAttribute('data-code-highlighted') === 'true') {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
highlighter.highlightElement(codeElement);
|
||||
codeElement.setAttribute('data-code-highlighted', 'true');
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
|
||||
function initCodeBlocks() {
|
||||
var codeNodes = document.querySelectorAll('pre > code');
|
||||
codeNodes.forEach(function (codeElement) {
|
||||
var preElement = codeElement.parentElement;
|
||||
if (!preElement || preElement.tagName !== 'PRE') {
|
||||
return;
|
||||
}
|
||||
|
||||
var language = resolveCodeLanguage(codeElement);
|
||||
if (language) {
|
||||
codeElement.setAttribute('data-code-language', language);
|
||||
preElement.setAttribute('data-code-language', language);
|
||||
}
|
||||
|
||||
ensureCopyButton(preElement, codeElement);
|
||||
highlightCodeBlock(codeElement);
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initCodeBlocks, { once: true });
|
||||
} else {
|
||||
initCodeBlocks();
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,505 @@
|
||||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.d3||(g.d3 = {}));g=(g.layout||(g.layout = {}));g.cloud = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||||
// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/
|
||||
// Algorithm due to Jonathan Feinberg, https://s3.amazonaws.com/static.mrfeinberg.com/bv_ch03.pdf
|
||||
|
||||
const dispatch = require("d3-dispatch").dispatch;
|
||||
|
||||
const RADIANS = Math.PI / 180;
|
||||
|
||||
const SPIRALS = {
|
||||
archimedean: archimedeanSpiral,
|
||||
rectangular: rectangularSpiral
|
||||
};
|
||||
|
||||
const cw = 1 << 11 >> 5;
|
||||
const ch = 1 << 11;
|
||||
|
||||
module.exports = function() {
|
||||
var size = [256, 256],
|
||||
text = cloudText,
|
||||
font = cloudFont,
|
||||
fontSize = cloudFontSize,
|
||||
fontStyle = cloudFontNormal,
|
||||
fontWeight = cloudFontNormal,
|
||||
rotate = cloudRotate,
|
||||
padding = cloudPadding,
|
||||
spiral = archimedeanSpiral,
|
||||
words = [],
|
||||
timeInterval = Infinity,
|
||||
event = dispatch("word", "end"),
|
||||
timer = null,
|
||||
random = Math.random,
|
||||
cloud = {},
|
||||
canvas = cloudCanvas;
|
||||
|
||||
cloud.canvas = function(_) {
|
||||
return arguments.length ? (canvas = functor(_), cloud) : canvas;
|
||||
};
|
||||
|
||||
cloud.start = function() {
|
||||
var contextAndRatio = getContext(canvas()),
|
||||
board = zeroArray((size[0] >> 5) * size[1]),
|
||||
bounds = null,
|
||||
n = words.length,
|
||||
i = -1,
|
||||
tags = [],
|
||||
data = words.map(function(d, i) {
|
||||
d.text = text.call(this, d, i);
|
||||
d.font = font.call(this, d, i);
|
||||
d.style = fontStyle.call(this, d, i);
|
||||
d.weight = fontWeight.call(this, d, i);
|
||||
d.rotate = rotate.call(this, d, i);
|
||||
d.size = ~~fontSize.call(this, d, i);
|
||||
d.padding = padding.call(this, d, i);
|
||||
return d;
|
||||
}).sort(function(a, b) { return b.size - a.size; });
|
||||
|
||||
if (timer) clearInterval(timer);
|
||||
timer = setInterval(step, 0);
|
||||
step();
|
||||
|
||||
return cloud;
|
||||
|
||||
function step() {
|
||||
var start = Date.now();
|
||||
while (Date.now() - start < timeInterval && ++i < n && timer) {
|
||||
var d = data[i];
|
||||
d.x = (size[0] * (random() + .5)) >> 1;
|
||||
d.y = (size[1] * (random() + .5)) >> 1;
|
||||
cloudSprite(contextAndRatio, d, data, i);
|
||||
if (d.hasText && place(board, d, bounds)) {
|
||||
tags.push(d);
|
||||
event.call("word", cloud, d);
|
||||
if (bounds) cloudBounds(bounds, d);
|
||||
else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];
|
||||
// Temporary hack
|
||||
d.x -= size[0] >> 1;
|
||||
d.y -= size[1] >> 1;
|
||||
}
|
||||
}
|
||||
if (i >= n) {
|
||||
cloud.stop();
|
||||
event.call("end", cloud, tags, bounds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cloud.stop = function() {
|
||||
if (timer) {
|
||||
clearInterval(timer);
|
||||
timer = null;
|
||||
}
|
||||
for (const d of words) {
|
||||
delete d.sprite;
|
||||
}
|
||||
return cloud;
|
||||
};
|
||||
|
||||
function getContext(canvas) {
|
||||
const context = canvas.getContext("2d", {willReadFrequently: true});
|
||||
|
||||
canvas.width = canvas.height = 1;
|
||||
const ratio = Math.sqrt(context.getImageData(0, 0, 1, 1).data.length >> 2);
|
||||
canvas.width = (cw << 5) / ratio;
|
||||
canvas.height = ch / ratio;
|
||||
|
||||
context.fillStyle = context.strokeStyle = "red";
|
||||
|
||||
return {context, ratio};
|
||||
}
|
||||
|
||||
function place(board, tag, bounds) {
|
||||
var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],
|
||||
startX = tag.x,
|
||||
startY = tag.y,
|
||||
maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),
|
||||
s = spiral(size),
|
||||
dt = random() < .5 ? 1 : -1,
|
||||
t = -dt,
|
||||
dxdy,
|
||||
dx,
|
||||
dy;
|
||||
|
||||
while (dxdy = s(t += dt)) {
|
||||
dx = ~~dxdy[0];
|
||||
dy = ~~dxdy[1];
|
||||
|
||||
if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;
|
||||
|
||||
tag.x = startX + dx;
|
||||
tag.y = startY + dy;
|
||||
|
||||
if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||
|
||||
tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;
|
||||
// TODO only check for collisions within current bounds.
|
||||
if (!bounds || collideRects(tag, bounds)) {
|
||||
if (!cloudCollide(tag, board, size[0])) {
|
||||
var sprite = tag.sprite,
|
||||
w = tag.width >> 5,
|
||||
sw = size[0] >> 5,
|
||||
lx = tag.x - (w << 4),
|
||||
sx = lx & 0x7f,
|
||||
msx = 32 - sx,
|
||||
h = tag.y1 - tag.y0,
|
||||
x = (tag.y + tag.y0) * sw + (lx >> 5),
|
||||
last;
|
||||
for (var j = 0; j < h; j++) {
|
||||
last = 0;
|
||||
for (var i = 0; i <= w; i++) {
|
||||
board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
|
||||
}
|
||||
x += sw;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
cloud.timeInterval = function(_) {
|
||||
return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval;
|
||||
};
|
||||
|
||||
cloud.words = function(_) {
|
||||
return arguments.length ? (words = _, cloud) : words;
|
||||
};
|
||||
|
||||
cloud.size = function(_) {
|
||||
return arguments.length ? (size = [+_[0], +_[1]], cloud) : size;
|
||||
};
|
||||
|
||||
cloud.font = function(_) {
|
||||
return arguments.length ? (font = functor(_), cloud) : font;
|
||||
};
|
||||
|
||||
cloud.fontStyle = function(_) {
|
||||
return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle;
|
||||
};
|
||||
|
||||
cloud.fontWeight = function(_) {
|
||||
return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight;
|
||||
};
|
||||
|
||||
cloud.rotate = function(_) {
|
||||
return arguments.length ? (rotate = functor(_), cloud) : rotate;
|
||||
};
|
||||
|
||||
cloud.text = function(_) {
|
||||
return arguments.length ? (text = functor(_), cloud) : text;
|
||||
};
|
||||
|
||||
cloud.spiral = function(_) {
|
||||
return arguments.length ? (spiral = SPIRALS[_] || _, cloud) : spiral;
|
||||
};
|
||||
|
||||
cloud.fontSize = function(_) {
|
||||
return arguments.length ? (fontSize = functor(_), cloud) : fontSize;
|
||||
};
|
||||
|
||||
cloud.padding = function(_) {
|
||||
return arguments.length ? (padding = functor(_), cloud) : padding;
|
||||
};
|
||||
|
||||
cloud.random = function(_) {
|
||||
return arguments.length ? (random = _, cloud) : random;
|
||||
};
|
||||
|
||||
cloud.on = function() {
|
||||
var value = event.on.apply(event, arguments);
|
||||
return value === event ? cloud : value;
|
||||
};
|
||||
|
||||
return cloud;
|
||||
};
|
||||
|
||||
function cloudText(d) {
|
||||
return d.text;
|
||||
}
|
||||
|
||||
function cloudFont() {
|
||||
return "serif";
|
||||
}
|
||||
|
||||
function cloudFontNormal() {
|
||||
return "normal";
|
||||
}
|
||||
|
||||
function cloudFontSize(d) {
|
||||
return Math.sqrt(d.value);
|
||||
}
|
||||
|
||||
function cloudRotate() {
|
||||
return (~~(random() * 6) - 3) * 30;
|
||||
}
|
||||
|
||||
function cloudPadding() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Fetches a monochrome sprite bitmap for the specified text.
|
||||
// Load in batches for speed.
|
||||
function cloudSprite(contextAndRatio, d, data, di) {
|
||||
if (d.sprite) return;
|
||||
var c = contextAndRatio.context,
|
||||
ratio = contextAndRatio.ratio;
|
||||
|
||||
c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
|
||||
var x = 0,
|
||||
y = 0,
|
||||
maxh = 0,
|
||||
n = data.length;
|
||||
--di;
|
||||
while (++di < n) {
|
||||
d = data[di];
|
||||
c.save();
|
||||
c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font;
|
||||
const metrics = c.measureText(d.text);
|
||||
const anchor = -Math.floor(metrics.width / 2);
|
||||
let w = (metrics.width + 1) * ratio;
|
||||
let h = d.size << 1;
|
||||
if (d.rotate) {
|
||||
var sr = Math.sin(d.rotate * RADIANS),
|
||||
cr = Math.cos(d.rotate * RADIANS),
|
||||
wcr = w * cr,
|
||||
wsr = w * sr,
|
||||
hcr = h * cr,
|
||||
hsr = h * sr;
|
||||
w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;
|
||||
h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
|
||||
} else {
|
||||
w = (w + 0x1f) >> 5 << 5;
|
||||
}
|
||||
if (h > maxh) maxh = h;
|
||||
if (x + w >= (cw << 5)) {
|
||||
x = 0;
|
||||
y += maxh;
|
||||
maxh = 0;
|
||||
}
|
||||
if (y + h >= ch) break;
|
||||
c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);
|
||||
if (d.rotate) c.rotate(d.rotate * RADIANS);
|
||||
c.fillText(d.text, anchor, 0);
|
||||
if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, anchor, 0);
|
||||
c.restore();
|
||||
d.width = w;
|
||||
d.height = h;
|
||||
d.xoff = x;
|
||||
d.yoff = y;
|
||||
d.x1 = w >> 1;
|
||||
d.y1 = h >> 1;
|
||||
d.x0 = -d.x1;
|
||||
d.y0 = -d.y1;
|
||||
d.hasText = true;
|
||||
x += w;
|
||||
}
|
||||
var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,
|
||||
sprite = [];
|
||||
while (--di >= 0) {
|
||||
d = data[di];
|
||||
if (!d.hasText) continue;
|
||||
var w = d.width,
|
||||
w32 = w >> 5,
|
||||
h = d.y1 - d.y0;
|
||||
// Zero the buffer
|
||||
for (var i = 0; i < h * w32; i++) sprite[i] = 0;
|
||||
x = d.xoff;
|
||||
if (x == null) return;
|
||||
y = d.yoff;
|
||||
var seen = 0,
|
||||
seenRow = -1;
|
||||
for (var j = 0; j < h; j++) {
|
||||
for (var i = 0; i < w; i++) {
|
||||
var k = w32 * j + (i >> 5),
|
||||
m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;
|
||||
sprite[k] |= m;
|
||||
seen |= m;
|
||||
}
|
||||
if (seen) seenRow = j;
|
||||
else {
|
||||
d.y0++;
|
||||
h--;
|
||||
j--;
|
||||
y++;
|
||||
}
|
||||
}
|
||||
d.y1 = d.y0 + seenRow;
|
||||
d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);
|
||||
}
|
||||
}
|
||||
|
||||
// Use mask-based collision detection.
|
||||
function cloudCollide(tag, board, sw) {
|
||||
sw >>= 5;
|
||||
var sprite = tag.sprite,
|
||||
w = tag.width >> 5,
|
||||
lx = tag.x - (w << 4),
|
||||
sx = lx & 0x7f,
|
||||
msx = 32 - sx,
|
||||
h = tag.y1 - tag.y0,
|
||||
x = (tag.y + tag.y0) * sw + (lx >> 5),
|
||||
last;
|
||||
for (var j = 0; j < h; j++) {
|
||||
last = 0;
|
||||
for (var i = 0; i <= w; i++) {
|
||||
if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))
|
||||
& board[x + i]) return true;
|
||||
}
|
||||
x += sw;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function cloudBounds(bounds, d) {
|
||||
var b0 = bounds[0],
|
||||
b1 = bounds[1];
|
||||
if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;
|
||||
if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;
|
||||
if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;
|
||||
if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;
|
||||
}
|
||||
|
||||
function collideRects(a, b) {
|
||||
return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;
|
||||
}
|
||||
|
||||
function archimedeanSpiral(size) {
|
||||
var e = size[0] / size[1];
|
||||
return function(t) {
|
||||
return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];
|
||||
};
|
||||
}
|
||||
|
||||
function rectangularSpiral(size) {
|
||||
var dy = 4,
|
||||
dx = dy * size[0] / size[1],
|
||||
x = 0,
|
||||
y = 0;
|
||||
return function(t) {
|
||||
var sign = t < 0 ? -1 : 1;
|
||||
// See triangular numbers: T_n = n * (n + 1) / 2.
|
||||
switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {
|
||||
case 0: x += dx; break;
|
||||
case 1: y += dy; break;
|
||||
case 2: x -= dx; break;
|
||||
default: y -= dy; break;
|
||||
}
|
||||
return [x, y];
|
||||
};
|
||||
}
|
||||
|
||||
// TODO reuse arrays?
|
||||
function zeroArray(n) {
|
||||
var a = [],
|
||||
i = -1;
|
||||
while (++i < n) a[i] = 0;
|
||||
return a;
|
||||
}
|
||||
|
||||
function cloudCanvas() {
|
||||
return document.createElement("canvas");
|
||||
}
|
||||
|
||||
function functor(d) {
|
||||
return typeof d === "function" ? d : function() { return d; };
|
||||
}
|
||||
|
||||
},{"d3-dispatch":2}],2:[function(require,module,exports){
|
||||
// https://d3js.org/d3-dispatch/ v1.0.6 Copyright 2019 Mike Bostock
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(global = global || self, factory(global.d3 = global.d3 || {}));
|
||||
}(this, function (exports) { 'use strict';
|
||||
|
||||
var noop = {value: function() {}};
|
||||
|
||||
function dispatch() {
|
||||
for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
|
||||
if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
|
||||
_[t] = [];
|
||||
}
|
||||
return new Dispatch(_);
|
||||
}
|
||||
|
||||
function Dispatch(_) {
|
||||
this._ = _;
|
||||
}
|
||||
|
||||
function parseTypenames(typenames, types) {
|
||||
return typenames.trim().split(/^|\s+/).map(function(t) {
|
||||
var name = "", i = t.indexOf(".");
|
||||
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
|
||||
if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
|
||||
return {type: t, name: name};
|
||||
});
|
||||
}
|
||||
|
||||
Dispatch.prototype = dispatch.prototype = {
|
||||
constructor: Dispatch,
|
||||
on: function(typename, callback) {
|
||||
var _ = this._,
|
||||
T = parseTypenames(typename + "", _),
|
||||
t,
|
||||
i = -1,
|
||||
n = T.length;
|
||||
|
||||
// If no callback was specified, return the callback of the given type and name.
|
||||
if (arguments.length < 2) {
|
||||
while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
|
||||
return;
|
||||
}
|
||||
|
||||
// If a type was specified, set the callback for the given type and name.
|
||||
// Otherwise, if a null callback was specified, remove callbacks of the given name.
|
||||
if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
|
||||
while (++i < n) {
|
||||
if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
|
||||
else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
copy: function() {
|
||||
var copy = {}, _ = this._;
|
||||
for (var t in _) copy[t] = _[t].slice();
|
||||
return new Dispatch(copy);
|
||||
},
|
||||
call: function(type, that) {
|
||||
if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
|
||||
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
||||
for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
||||
},
|
||||
apply: function(type, that, args) {
|
||||
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
||||
for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
||||
}
|
||||
};
|
||||
|
||||
function get(type, name) {
|
||||
for (var i = 0, n = type.length, c; i < n; ++i) {
|
||||
if ((c = type[i]).name === name) {
|
||||
return c.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function set(type, name, callback) {
|
||||
for (var i = 0, n = type.length; i < n; ++i) {
|
||||
if (type[i].name === name) {
|
||||
type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (callback != null) type.push({name: name, value: callback});
|
||||
return type;
|
||||
}
|
||||
|
||||
exports.dispatch = dispatch;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
|
||||
},{}]},{},[1])(1)
|
||||
});
|
||||
10
fixtures/golden-generated-sites/rfc1437-sample/assets/highlight.min.css
vendored
Normal file
10
fixtures/golden-generated-sites/rfc1437-sample/assets/highlight.min.css
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
||||
Theme: GitHub Dark
|
||||
Description: Dark theme as seen on github.com
|
||||
Author: github.com
|
||||
Maintainer: @Hirse
|
||||
Updated: 2021-05-15
|
||||
|
||||
Outdated base version: https://github.com/primer/github-syntax-dark
|
||||
Current colors taken from GitHub's CSS
|
||||
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
|
||||
1244
fixtures/golden-generated-sites/rfc1437-sample/assets/highlight.min.js
vendored
Normal file
1244
fixtures/golden-generated-sites/rfc1437-sample/assets/highlight.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
fixtures/golden-generated-sites/rfc1437-sample/assets/lightbox.min.css
vendored
Normal file
1
fixtures/golden-generated-sites/rfc1437-sample/assets/lightbox.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.lb-loader,.lightbox{text-align:center;line-height:0}body.lb-disable-scrolling{overflow:hidden}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;opacity:.8;display:none}.lightbox{position:absolute;left:0;width:100%;z-index:10000;font-weight:400;outline:0}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-loader,.lb-nav{position:absolute;left:0}.lb-outerContainer:after{content:"";display:table;clear:both}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../images/loading.gif) no-repeat}.lb-nav{top:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../images/prev.png) left 48% no-repeat;opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../images/next.png) right 48% no-repeat;opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{content:"";display:table;clear:both}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../images/close.png) top right no-repeat;text-align:right;outline:0;opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;opacity:1}
|
||||
25
fixtures/golden-generated-sites/rfc1437-sample/assets/lightbox.min.js
vendored
Normal file
25
fixtures/golden-generated-sites/rfc1437-sample/assets/lightbox.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.amber.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.amber.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.blue.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.blue.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.cyan.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.cyan.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.fuchsia.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.fuchsia.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.green.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.green.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.grey.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.grey.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.indigo.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.indigo.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.jade.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.jade.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.lime.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.lime.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.orange.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.orange.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.pink.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.pink.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.pumpkin.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.pumpkin.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.purple.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.purple.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.red.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.red.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.sand.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.sand.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.slate.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.slate.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.violet.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.violet.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.yellow.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.yellow.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.zinc.min.css
vendored
Normal file
4
fixtures/golden-generated-sites/rfc1437-sample/assets/pico.zinc.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,52 @@
|
||||
(() => {
|
||||
const toggle = document.querySelector('[data-blog-search-toggle]');
|
||||
const panel = document.querySelector('[data-blog-search-panel]');
|
||||
const root = document.querySelector('[data-blog-search-root]');
|
||||
|
||||
if (!toggle || !panel || !root) {
|
||||
return;
|
||||
}
|
||||
|
||||
let initialized = false;
|
||||
|
||||
function initSearch() {
|
||||
if (initialized || typeof PagefindUI === 'undefined') {
|
||||
return;
|
||||
}
|
||||
initialized = true;
|
||||
var placeholder = root.getAttribute('data-search-placeholder') || 'Search...';
|
||||
new PagefindUI({
|
||||
element: root,
|
||||
showSubResults: true,
|
||||
showImages: false,
|
||||
translations: { placeholder: placeholder }
|
||||
});
|
||||
var input = root.querySelector('input');
|
||||
if (input) {
|
||||
input.focus();
|
||||
}
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function() {
|
||||
var isHidden = panel.hasAttribute('hidden');
|
||||
if (isHidden) {
|
||||
panel.removeAttribute('hidden');
|
||||
initSearch();
|
||||
} else {
|
||||
panel.setAttribute('hidden', '');
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
if (!panel.hasAttribute('hidden') && !panel.contains(e.target) && !toggle.contains(e.target)) {
|
||||
panel.setAttribute('hidden', '');
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && !panel.hasAttribute('hidden')) {
|
||||
panel.setAttribute('hidden', '');
|
||||
toggle.focus();
|
||||
}
|
||||
});
|
||||
})();
|
||||
@@ -0,0 +1,272 @@
|
||||
(function () {
|
||||
function parseWords(rawWords) {
|
||||
if (!rawWords || typeof rawWords !== 'string') {
|
||||
return [];
|
||||
}
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(rawWords);
|
||||
return Array.isArray(parsed) ? parsed : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function clamp01(value) {
|
||||
if (!Number.isFinite(value)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (value < 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (value > 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function parseCssColor(colorValue) {
|
||||
if (typeof colorValue !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const value = colorValue.trim();
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const hexMatch = value.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
|
||||
if (hexMatch) {
|
||||
const hex = hexMatch[1];
|
||||
if (hex.length === 3) {
|
||||
return [
|
||||
Number.parseInt(hex[0] + hex[0], 16),
|
||||
Number.parseInt(hex[1] + hex[1], 16),
|
||||
Number.parseInt(hex[2] + hex[2], 16),
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
Number.parseInt(hex.slice(0, 2), 16),
|
||||
Number.parseInt(hex.slice(2, 4), 16),
|
||||
Number.parseInt(hex.slice(4, 6), 16),
|
||||
];
|
||||
}
|
||||
|
||||
const rgbMatch = value.match(/^rgba?\\(([^)]+)\\)$/i);
|
||||
if (rgbMatch) {
|
||||
const channels = rgbMatch[1]
|
||||
.split(',')
|
||||
.map((channel) => channel.trim())
|
||||
.slice(0, 3)
|
||||
.map((channel) => {
|
||||
if (channel.endsWith('%')) {
|
||||
return Math.round((Number.parseFloat(channel) / 100) * 255);
|
||||
}
|
||||
|
||||
return Math.round(Number.parseFloat(channel));
|
||||
});
|
||||
|
||||
if (channels.length === 3 && channels.every((channel) => Number.isFinite(channel))) {
|
||||
return channels.map((channel) => Math.max(0, Math.min(255, channel)));
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function interpolateColor(fromColor, toColor, t) {
|
||||
return [
|
||||
Math.round(fromColor[0] + ((toColor[0] - fromColor[0]) * t)),
|
||||
Math.round(fromColor[1] + ((toColor[1] - fromColor[1]) * t)),
|
||||
Math.round(fromColor[2] + ((toColor[2] - fromColor[2]) * t)),
|
||||
];
|
||||
}
|
||||
|
||||
function mixColor(fromColor, toColor, weight) {
|
||||
return interpolateColor(fromColor, toColor, clamp01(weight));
|
||||
}
|
||||
|
||||
function colorToCss(color) {
|
||||
return 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] + ')';
|
||||
}
|
||||
|
||||
function getPicoThemeStops() {
|
||||
const style = window.getComputedStyle(document.documentElement);
|
||||
|
||||
const blue = parseCssColor(style.getPropertyValue('--pico-secondary')) || [74, 99, 146];
|
||||
const green = parseCssColor(style.getPropertyValue('--pico-ins-color')) || [53, 117, 56];
|
||||
const red = parseCssColor(style.getPropertyValue('--pico-del-color')) || [183, 72, 72];
|
||||
|
||||
const yellow = mixColor(green, red, 0.45);
|
||||
const orange = mixColor(green, red, 0.72);
|
||||
|
||||
return [blue, green, yellow, orange, red];
|
||||
}
|
||||
|
||||
function interpolateStops(stops, value) {
|
||||
if (!Array.isArray(stops) || stops.length === 0) {
|
||||
return 'currentColor';
|
||||
}
|
||||
|
||||
if (stops.length === 1) {
|
||||
return colorToCss(stops[0]);
|
||||
}
|
||||
|
||||
const clamped = clamp01(value);
|
||||
const scaled = clamped * (stops.length - 1);
|
||||
const lowerIndex = Math.floor(scaled);
|
||||
const upperIndex = Math.min(stops.length - 1, lowerIndex + 1);
|
||||
const localT = scaled - lowerIndex;
|
||||
|
||||
return colorToCss(interpolateColor(stops[lowerIndex], stops[upperIndex], localT));
|
||||
}
|
||||
|
||||
function resolveQuantileColorMap(words) {
|
||||
const counts = Array.from(
|
||||
new Set(words.map((word) => Number(word.count)).filter((count) => Number.isFinite(count)))
|
||||
).sort((a, b) => a - b);
|
||||
|
||||
const quantiles = new Map();
|
||||
if (counts.length === 0) {
|
||||
return quantiles;
|
||||
}
|
||||
|
||||
if (counts.length === 1) {
|
||||
quantiles.set(counts[0], 1);
|
||||
return quantiles;
|
||||
}
|
||||
|
||||
counts.forEach((count, index) => {
|
||||
quantiles.set(count, index / (counts.length - 1));
|
||||
});
|
||||
|
||||
return quantiles;
|
||||
}
|
||||
|
||||
function applyThemeAwareColors(words, container) {
|
||||
const gammaRaw = Number.parseFloat(container.getAttribute('data-color-easing') || '0.7');
|
||||
const gamma = Number.isFinite(gammaRaw) && gammaRaw > 0 ? gammaRaw : 0.7;
|
||||
const quantiles = resolveQuantileColorMap(words);
|
||||
const stops = getPicoThemeStops();
|
||||
|
||||
return words.map((word) => {
|
||||
const count = Number(word.count);
|
||||
const quantile = quantiles.get(count) ?? 0;
|
||||
const eased = Math.pow(clamp01(quantile), gamma);
|
||||
|
||||
return {
|
||||
...word,
|
||||
color: interpolateStops(stops, eased),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function drawTagCloud(container) {
|
||||
const cloudFactory = window.d3 && window.d3.layout && typeof window.d3.layout.cloud === 'function'
|
||||
? window.d3.layout.cloud
|
||||
: null;
|
||||
|
||||
if (!cloudFactory) {
|
||||
return;
|
||||
}
|
||||
|
||||
const langPrefix = document.documentElement.getAttribute('data-language-prefix') || '';
|
||||
const rawWords = container.getAttribute('data-tag-cloud-words');
|
||||
const words = parseWords(rawWords);
|
||||
if (words.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const colorDistribution = container.getAttribute('data-color-distribution') || 'quantile';
|
||||
const colorTheme = container.getAttribute('data-color-theme') || 'pico';
|
||||
const coloredWords = colorDistribution === 'quantile' && colorTheme === 'pico'
|
||||
? applyThemeAwareColors(words, container)
|
||||
: words;
|
||||
|
||||
const width = Number.parseInt(container.getAttribute('data-width') || '900', 10) || 900;
|
||||
const height = Number.parseInt(container.getAttribute('data-height') || '420', 10) || 420;
|
||||
const orientation = container.getAttribute('data-orientation') || 'horizontal';
|
||||
|
||||
const resolveRotation = () => {
|
||||
if (orientation === 'mixed-hv') {
|
||||
return Math.random() < 0.5 ? 0 : 90;
|
||||
}
|
||||
|
||||
if (orientation === 'mixed-diagonal') {
|
||||
const diagonalAngles = [-60, -30, 0, 30, 60, 90];
|
||||
const index = Math.floor(Math.random() * diagonalAngles.length);
|
||||
return diagonalAngles[index];
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
const svgNode = container.querySelector('svg.tag-cloud-canvas');
|
||||
if (!svgNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (svgNode.firstChild) {
|
||||
svgNode.removeChild(svgNode.firstChild);
|
||||
}
|
||||
|
||||
cloudFactory()
|
||||
.size([width, height])
|
||||
.words(coloredWords.map((word) => ({ ...word })))
|
||||
.padding(4)
|
||||
.rotate(() => resolveRotation())
|
||||
.font('sans-serif')
|
||||
.fontSize((word) => word.size)
|
||||
.on('end', (layoutWords) => {
|
||||
svgNode.setAttribute('viewBox', '0 0 ' + width + ' ' + height);
|
||||
svgNode.setAttribute('preserveAspectRatio', 'xMidYMid meet');
|
||||
|
||||
const group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
||||
group.setAttribute('transform', 'translate(' + (width / 2) + ',' + (height / 2) + ')');
|
||||
|
||||
for (const word of layoutWords) {
|
||||
const textNode = document.createElementNS('http://www.w3.org/2000/svg', 'text');
|
||||
textNode.textContent = word.text;
|
||||
textNode.setAttribute('text-anchor', 'middle');
|
||||
textNode.setAttribute('transform', 'translate(' + word.x + ',' + word.y + ')rotate(' + (word.rotate || 0) + ')');
|
||||
textNode.style.fontFamily = 'sans-serif';
|
||||
textNode.style.fontSize = word.size + 'px';
|
||||
textNode.style.fill = typeof word.color === 'string' && word.color.length > 0
|
||||
? word.color
|
||||
: 'currentColor';
|
||||
textNode.style.cursor = 'pointer';
|
||||
textNode.style.opacity = '0.9';
|
||||
|
||||
const titleNode = document.createElementNS('http://www.w3.org/2000/svg', 'title');
|
||||
titleNode.textContent = word.text + ' (' + word.count + ')';
|
||||
textNode.appendChild(titleNode);
|
||||
|
||||
textNode.addEventListener('click', () => {
|
||||
if (word && typeof word.url === 'string' && word.url.length > 0) {
|
||||
window.location.assign(langPrefix + word.url);
|
||||
}
|
||||
});
|
||||
|
||||
group.appendChild(textNode);
|
||||
}
|
||||
|
||||
svgNode.appendChild(group);
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
function initTagClouds() {
|
||||
const containers = document.querySelectorAll('[data-tag-cloud="true"]');
|
||||
containers.forEach((container) => drawTagCloud(container));
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initTagClouds, { once: true });
|
||||
} else {
|
||||
initTagClouds();
|
||||
}
|
||||
})();
|
||||
1
fixtures/golden-generated-sites/rfc1437-sample/assets/vanilla-calendar.min.css
vendored
Normal file
1
fixtures/golden-generated-sites/rfc1437-sample/assets/vanilla-calendar.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
fixtures/golden-generated-sites/rfc1437-sample/assets/vanilla-calendar.min.js
vendored
Normal file
2
fixtures/golden-generated-sites/rfc1437-sample/assets/vanilla-calendar.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
634
fixtures/golden-generated-sites/rfc1437-sample/atom.xml
Normal file
634
fixtures/golden-generated-sites/rfc1437-sample/atom.xml
Normal file
@@ -0,0 +1,634 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<title>rfc1437</title>
|
||||
<subtitle>Content-type: matter-transport/sentient-life-form</subtitle>
|
||||
<id>https://www.rfc1437.de/</id>
|
||||
<link href="https://www.rfc1437.de/" rel="alternate" />
|
||||
<link href="https://www.rfc1437.de/atom.xml" rel="self" />
|
||||
<updated>2026-03-15T09:36:46.000Z</updated>
|
||||
<entry xml:lang="de">
|
||||
<title>Pagefind | Pagefind — Static low-bandwidth search at scale</title>
|
||||
<id>https://www.rfc1437.de/2026/03/15/pagefind-pagefind-static-low-bandwidth-search-at-scale</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/15/pagefind-pagefind-static-low-bandwidth-search-at-scale" />
|
||||
<updated>2026-03-15T09:36:46.000Z</updated>
|
||||
<published>2026-03-15T09:36:46.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Pagefind | Pagefind — Static low-bandwidth search at scale](https://pagefind.app/) ist eine statische Suchmaschine für statisch generiertes HTML, so wie mein Blog. Und wird demnächst die Suche auf diesem Blog betreiben. Keine externen abhängigkeiten, kein Server, keine Komplexität der Infrastruktur - einfach nur ein paar zusätzliche Files, die mit hochgeladen werden. Und natürlich aktives JavaScript im Browser.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Pagefind | Pagefind — Static low-bandwidth search at scale](https://pagefind.app/) ist eine statische Suchmaschine für statisch generiertes HTML, so wie mein Blog. Und wird demnächst die Suche auf diesem Blog betreiben. Keine externen abhängigkeiten, kein Server, keine Komplexität der Infrastruktur - einfach nur ein paar zusätzliche Files, die mit hochgeladen werden. Und natürlich aktives JavaScript im Browser.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="javascript" />
|
||||
<category term="nodejs" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>pi.dev</title>
|
||||
<id>https://www.rfc1437.de/2026/03/14/pi-dev</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/14/pi-dev" />
|
||||
<updated>2026-03-14T20:38:58.000Z</updated>
|
||||
<published>2026-03-14T20:38:58.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[pi.dev](https://shittycodingagent.ai/) ist ein minimalistischer Harness für agentic coding, dessen Fokus nicht auf Features, sondern auf Erweiterbarkeit liegt. Die Grundidee ist solide:. eine sehr einfache Harness die durch Typescript-Plugins erweitert werden kann, so dass sich die Harness an den eigenen Workflow anpassen und an die eigenen Anforderungen. Werde ich mir vielleicht demnächst mal angucken.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[pi.dev](https://shittycodingagent.ai/) ist ein minimalistischer Harness für agentic coding, dessen Fokus nicht auf Features, sondern auf Erweiterbarkeit liegt. Die Grundidee ist solide:. eine sehr einfache Harness die durch Typescript-Plugins erweitert werden kann, so dass sich die Harness an den eigenen Workflow anpassen und an die eigenen Anforderungen. Werde ich mir vielleicht demnächst mal angucken.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="vibecoding" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>steveyegge/beads: Beads - A memory upgrade for your coding agent</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/steveyegge-beads-beads-a-memory-upgrade-for-your-coding-agent</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/steveyegge-beads-beads-a-memory-upgrade-for-your-coding-agent" />
|
||||
<updated>2026-03-13T16:10:34.000Z</updated>
|
||||
<published>2026-03-13T16:10:34.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[steveyegge/beads: Beads - A memory upgrade for your coding agent](https://github.com/steveyegge/beads) ist ein Todo-Listen-Tool für Agenten. Im Prinzip ein Gedächtnis für Projekte über das sich Agenten steuern können (hinterlegen von Tasks und Features) und auch komplexere Abläufe gesteuert werden können, bei denen ein Agent über eine ganze Reihe von Issues laufen muss und diese lösen muss, wo Tasks abhängigkeiten haben können und Agenten nur den Satz an Aufgaben sehen, die auch wirklich gerade angegangen werden können. Interessant für Projekte, in denen man Agenten in Loops laufen lassen will, um größere Aufgaben zu lösen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[steveyegge/beads: Beads - A memory upgrade for your coding agent](https://github.com/steveyegge/beads) ist ein Todo-Listen-Tool für Agenten. Im Prinzip ein Gedächtnis für Projekte über das sich Agenten steuern können (hinterlegen von Tasks und Features) und auch komplexere Abläufe gesteuert werden können, bei denen ein Agent über eine ganze Reihe von Issues laufen muss und diese lösen muss, wo Tasks abhängigkeiten haben können und Agenten nur den Satz an Aufgaben sehen, die auch wirklich gerade angegangen werden können. Interessant für Projekte, in denen man Agenten in Loops laufen lassen will, um größere Aufgaben zu lösen.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="vibecoding" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/dolthub-doltgresql-doltgresql-version-controlled-postgresql</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/dolthub-doltgresql-doltgresql-version-controlled-postgresql" />
|
||||
<updated>2026-03-13T15:17:32.000Z</updated>
|
||||
<published>2026-03-13T15:17:32.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL](https://github.com/dolthub/doltgresql) ist der PostgreSQL-flavored Partner von [dolthub/dolt: Dolt – Git for Data](/posts/dolthub-dolt-dolt-git-for-data) und bietet die gleichen Features, nur mit Anlehnung an PostgreSQL und einem Binär-Interface das zu PostgreSQL kompatibel ist.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL](https://github.com/dolthub/doltgresql) ist der PostgreSQL-flavored Partner von [dolthub/dolt: Dolt – Git for Data](/posts/dolthub-dolt-dolt-git-for-data) und bietet die gleichen Features, nur mit Anlehnung an PostgreSQL und einem Binär-Interface das zu PostgreSQL kompatibel ist.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="postgresql" />
|
||||
<category term="datenbank" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>dolthub/dolt: Dolt – Git for Data</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/dolthub-dolt-dolt-git-for-data</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/dolthub-dolt-dolt-git-for-data" />
|
||||
<updated>2026-03-13T15:17:25.000Z</updated>
|
||||
<published>2026-03-13T15:17:25.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[dolthub/dolt: Dolt – Git for Data](https://github.com/dolthub/dolt?tab=readme-ov-file) ist eine SQL Datenbank, die intern mit Mechanismen wie git arbeitet und dadurch Daten-Branches und Merges unterstützt und allgemein die Möglichkeit bietet, dass Daten in der Datenbank versioniert und mit History funktionieren. Und das ganze auch analog zu git erlaubt die Datenchanges über die Versionsverwaltung zu verteilen. Im Prinzip "slow transaction shipping".</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[dolthub/dolt: Dolt – Git for Data](https://github.com/dolthub/dolt?tab=readme-ov-file) ist eine SQL Datenbank, die intern mit Mechanismen wie git arbeitet und dadurch Daten-Branches und Merges unterstützt und allgemein die Möglichkeit bietet, dass Daten in der Datenbank versioniert und mit History funktionieren. Und das ganze auch analog zu git erlaubt die Datenchanges über die Versionsverwaltung zu verteilen. Im Prinzip "slow transaction shipping".</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="datenbank" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>paperclipai/paperclip: Open-source orchestration for zero-human companies</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/paperclipai-paperclip-open-source-orchestration-for-zero-human-companies</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/paperclipai-paperclip-open-source-orchestration-for-zero-human-companies" />
|
||||
<updated>2026-03-13T15:08:58.000Z</updated>
|
||||
<published>2026-03-13T15:00:21.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[paperclipai/paperclip: Open-source orchestration for zero-human companies](https://github.com/paperclipai/paperclip) ist ein Ansatz um Agenten zu orchestrieren und zu verwalten. Das interessante hier ist, dass es mit einer Organisation angelehnt an eine Firmenorganisation arbeitet und mit Mitteln die Kommunikation der Agenten abbildet, die eine gute Transparenz bieten könnte. Ich habe es noch nicht ausprobiert, aber neben [gastown](https://github.com/steveyegge/gastown) eines der interessanteren Projekte zu diesem Thema. Das ganze Umfeld von Agent-Orchestrierung ist alles noch recht neu, von daher ist das noch ein großes Feld an Experimenten, aber spannend zu beobachten.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[paperclipai/paperclip: Open-source orchestration for zero-human companies](https://github.com/paperclipai/paperclip) ist ein Ansatz um Agenten zu orchestrieren und zu verwalten. Das interessante hier ist, dass es mit einer Organisation angelehnt an eine Firmenorganisation arbeitet und mit Mitteln die Kommunikation der Agenten abbildet, die eine gute Transparenz bieten könnte. Ich habe es noch nicht ausprobiert, aber neben [gastown](https://github.com/steveyegge/gastown) eines der interessanteren Projekte zu diesem Thema. Das ganze Umfeld von Agent-Orchestrierung ist alles noch recht neu, von daher ist das noch ein großes Feld an Experimenten, aber spannend zu beobachten.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="vibecoding" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Ghostty</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/ghostty</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/ghostty" />
|
||||
<updated>2026-03-13T11:59:19.000Z</updated>
|
||||
<published>2026-03-13T11:38:27.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Ghostty](https://ghostty.org/) ist die Basis, auf der [cmux — Das Terminal für Multitasking](/posts/cmux-das-terminal-fur-multitasking) aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Ghostty](https://ghostty.org/) ist die Basis, auf der [cmux — Das Terminal für Multitasking](/posts/cmux-das-terminal-fur-multitasking) aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="sysadmin" />
|
||||
<category term="mac-os-x" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry>
|
||||
<title>cmux — Das Terminal für Multitasking</title>
|
||||
<id>https://www.rfc1437.de/2026/03/13/cmux-das-terminal-fur-multitasking</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/13/cmux-das-terminal-fur-multitasking" />
|
||||
<updated>2026-03-13T07:23:52.000Z</updated>
|
||||
<published>2026-03-13T07:21:42.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[cmux — Das Terminal für Multitasking](https://www.cmux.dev/de) ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[cmux — Das Terminal für Multitasking](https://www.cmux.dev/de) ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="mac-os-x" />
|
||||
<category term="sysadmin" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry>
|
||||
<title>NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1</title>
|
||||
<id>https://www.rfc1437.de/2026/03/12/nuget-gallery-photino-blazor-customwindow-1-3-1</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/12/nuget-gallery-photino-blazor-customwindow-1-3-1" />
|
||||
<updated>2026-03-13T07:21:55.000Z</updated>
|
||||
<published>2026-03-12T20:13:10.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1](https://www.nuget.org/packages/Photino.Blazor.CustomWindow) ist eine Library für Photino Blazor, mit der man Fenster Chrome-less machen kann. Also Titelbalken und Standarddekorationen entfernen kann. Idee dahinter ist darüber mehr Kontrolle über das Look-and-Feel zu bekommen und kompaktere UIs zu schaffen. Mit dieser Library bekommt man dann Grundfunktionen zurück wie Fenstergrößenänderungen und andere Standardelemente, die Benutzer erwarten, aber unter voller Kontrolle der Anwendung.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1](https://www.nuget.org/packages/Photino.Blazor.CustomWindow) ist eine Library für Photino Blazor, mit der man Fenster Chrome-less machen kann. Also Titelbalken und Standarddekorationen entfernen kann. Idee dahinter ist darüber mehr Kontrolle über das Look-and-Feel zu bekommen und kompaktere UIs zu schaffen. Mit dieser Library bekommt man dann Grundfunktionen zurück wie Fenstergrößenänderungen und andere Standardelemente, die Benutzer erwarten, aber unter voller Kontrolle der Anwendung.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="c#" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry>
|
||||
<title>OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark</title>
|
||||
<id>https://www.rfc1437.de/2026/03/07/openclaw-memory-masterclass-the-complete-guide-to-agent-memory-that-survives-velvetshark</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/07/openclaw-memory-masterclass-the-complete-guide-to-agent-memory-that-survives-velvetshark" />
|
||||
<updated>2026-03-08T16:29:16.000Z</updated>
|
||||
<published>2026-03-07T05:53:59.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark](https://velvetshark.com/openclaw-memory-masterclass) - interessante Zusammenstellung des Memory-Systems und der Fallstricke mit Compaction bei Openclaw. Der Agent ist ja dazu da, über lange Zeit zu laufen, dadurch ist aber auch immer die Gefahr, dass Compaction gerade in komplexeren Situationen mitten drin zuschlägt. Und openclaw läuft autonom, also will man sicher sein, dass es auch kontinuierlich weitergeht.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark](https://velvetshark.com/openclaw-memory-masterclass) - interessante Zusammenstellung des Memory-Systems und der Fallstricke mit Compaction bei Openclaw. Der Agent ist ja dazu da, über lange Zeit zu laufen, dadurch ist aber auch immer die Gefahr, dass Compaction gerade in komplexeren Situationen mitten drin zuschlägt. Und openclaw läuft autonom, also will man sicher sein, dass es auch kontinuierlich weitergeht.</p></div></content>
|
||||
<category term="llm" />
|
||||
<category term="openclaw" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry>
|
||||
<title>unum-cloud/USearch: Fast Open-Source Search & Clustering engine × for Vectors & Arbitrary Objects × in C++, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolfram 🔍</title>
|
||||
<id>https://www.rfc1437.de/2026/03/05/unum-cloud-usearch-fast-open-source-search-clustering-engine-x-for-vectors-arbitrary-objects-x-in-c-c-python-javascript-rust-java-objective-c-swift-c-golang-and-wolfram</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/05/unum-cloud-usearch-fast-open-source-search-clustering-engine-x-for-vectors-arbitrary-objects-x-in-c-c-python-javascript-rust-java-objective-c-swift-c-golang-and-wolfram" />
|
||||
<updated>2026-03-08T17:01:36.000Z</updated>
|
||||
<published>2026-03-05T21:18:44.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[unum-cloud/USearch](https://github.com/unum-cloud/USearch) - drin was drauf steht. Also eine Library, die einen Index für Vektoren bietet, die z.B. aus Embedding stammen können und so semantisch ähnliche Texte finden können. Nicht Text-ähnlich, sondern semantisch, also Inhalt. Spannendes Thema, die dafür nötigen Modelle sind mit den LLMs verwandt, aber eben nicht large, sondern small - sie brauchen nicht voll zu verstehen und zu generieren, weil sie nur Vektoren erstellen, die dann gegeneinander verglichen werden können und je höher die Ähnlichkeit, desto höher die Ähnlichkeit der Texte im Thema. Cooles kleines Feature für bDS.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[unum-cloud/USearch](https://github.com/unum-cloud/USearch) - drin was drauf steht. Also eine Library, die einen Index für Vektoren bietet, die z.B. aus Embedding stammen können und so semantisch ähnliche Texte finden können. Nicht Text-ähnlich, sondern semantisch, also Inhalt. Spannendes Thema, die dafür nötigen Modelle sind mit den LLMs verwandt, aber eben nicht large, sondern small - sie brauchen nicht voll zu verstehen und zu generieren, weil sie nur Vektoren erstellen, die dann gegeneinander verglichen werden können und je höher die Ähnlichkeit, desto höher die Ähnlichkeit der Texte im Thema. Cooles kleines Feature für bDS.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="llm" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.</title>
|
||||
<id>https://www.rfc1437.de/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon" />
|
||||
<updated>2026-03-08T16:29:28.000Z</updated>
|
||||
<published>2026-03-02T11:05:49.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.](https://github.com/waybarrios/vllm-mlx) Den benutze ich, um [mlx-community/gemma-3-12b-it-4bit](/posts/mlx-community-gemma-3-12b-it-4bit-hugging-face) auf meinem MacBook Air zu betreiben. Klappt sehr gut, kleines Shell-Script zum Starten des Servers und dann bin ich autonom. Nicht so komfortabel wie Ollama, aber dafür unterstützt es perfekt Apple's MLX und nutzt damit Silicon gut aus.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.](https://github.com/waybarrios/vllm-mlx) Den benutze ich, um [mlx-community/gemma-3-12b-it-4bit](/posts/mlx-community-gemma-3-12b-it-4bit-hugging-face) auf meinem MacBook Air zu betreiben. Klappt sehr gut, kleines Shell-Script zum Starten des Servers und dann bin ich autonom. Nicht so komfortabel wie Ollama, aber dafür unterstützt es perfekt Apple's MLX und nutzt damit Silicon gut aus.</p></div></content>
|
||||
<category term="llm" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>mlx-community/gemma-3-12b-it-4bit · Hugging Face</title>
|
||||
<id>https://www.rfc1437.de/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face" />
|
||||
<updated>2026-03-08T16:29:35.000Z</updated>
|
||||
<published>2026-03-02T11:03:41.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[mlx-community/gemma-3-12b-it-4bit · Hugging Face](https://huggingface.co/mlx-community/gemma-3-12b-it-4bit) ist das bisher beste Modell für lokalen Betrieb, mit dem ich die Bildbetitelung und sogar lokalen Chat realisieren kann. Nicht das schnellste, da es schon recht groß ist, aber für Offline-Betrieb absolut geeignet, wenn ich mir da ein paar Mechanismen für Batchverarbeitung von Bildern etc. einfallen lasse. Das könnte gerade für Urlaubszeiten super spannend sein. Eine Bildbeschreibung liegt dann zwar bei einer Minute, aber hey, dafür keine Abhängigkeiten.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[mlx-community/gemma-3-12b-it-4bit · Hugging Face](https://huggingface.co/mlx-community/gemma-3-12b-it-4bit) ist das bisher beste Modell für lokalen Betrieb, mit dem ich die Bildbetitelung und sogar lokalen Chat realisieren kann. Nicht das schnellste, da es schon recht groß ist, aber für Offline-Betrieb absolut geeignet, wenn ich mir da ein paar Mechanismen für Batchverarbeitung von Bildern etc. einfallen lasse. Das könnte gerade für Urlaubszeiten super spannend sein. Eine Bildbeschreibung liegt dann zwar bei einer Minute, aber hey, dafür keine Abhängigkeiten.</p></div></content>
|
||||
<category term="llm" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Models.dev — An open-source database of AI models</title>
|
||||
<id>https://www.rfc1437.de/2026/03/01/models-dev-an-open-source-database-of-ai-models</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/01/models-dev-an-open-source-database-of-ai-models" />
|
||||
<updated>2026-03-08T16:29:42.000Z</updated>
|
||||
<published>2026-03-01T12:40:31.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Models.dev — An open-source database of AI models](https://models.dev/) ist eine sehr praktische Seite, die für alle möglichen Anbieter und alle möglichen LLMs Rahmenparameter liefert, inklusive sogar API Preise. Und technische Parameter wie Input/Output Tokens.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Models.dev — An open-source database of AI models](https://models.dev/) ist eine sehr praktische Seite, die für alle möglichen Anbieter und alle möglichen LLMs Rahmenparameter liefert, inklusive sogar API Preise. Und technische Parameter wie Input/Output Tokens.</p></div></content>
|
||||
<category term="llm" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Ollama</title>
|
||||
<id>https://www.rfc1437.de/2026/03/01/ollama</id>
|
||||
<link href="https://www.rfc1437.de/2026/03/01/ollama" />
|
||||
<updated>2026-03-08T16:29:46.000Z</updated>
|
||||
<published>2026-03-01T11:40:25.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Ollama](https://ollama.com/) - eine Runtime-Umgebung für LLMs, die es erlaubt Modelle lokal zu betreiben. Mein Lieblingsmodell zur Zeit: [qwen2.5vl:7b-q4_K_M](https://ollama.com/library/qwen2.5vl:7b-q4_K_M). Mit nur 6.6 GB Größe läuft das problemlos auf einem MacBook Air M4 und hat noch genug Speicher und Kapazität frei um Programme nebenbei laufen zu lassen. Das Modell ist im Chat erstaunlich brauchbar und vor allem hat es klasse Vision-Fähigkeiten. Ideal um für Bilder Titel, Alt-Texte oder Zusammenfassungen zu liefern, ohne dafür Geld an große Provider abzudrücken. Und ein wichtiger Baustein, um bDS wieder zurück zu full-offline zu bringen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Ollama](https://ollama.com/) - eine Runtime-Umgebung für LLMs, die es erlaubt Modelle lokal zu betreiben. Mein Lieblingsmodell zur Zeit: [qwen2.5vl:7b-q4_K_M](https://ollama.com/library/qwen2.5vl:7b-q4_K_M). Mit nur 6.6 GB Größe läuft das problemlos auf einem MacBook Air M4 und hat noch genug Speicher und Kapazität frei um Programme nebenbei laufen zu lassen. Das Modell ist im Chat erstaunlich brauchbar und vor allem hat es klasse Vision-Fähigkeiten. Ideal um für Bilder Titel, Alt-Texte oder Zusammenfassungen zu liefern, ohne dafür Geld an große Provider abzudrücken. Und ein wichtiger Baustein, um bDS wieder zurück zu full-offline zu bringen.</p></div></content>
|
||||
<category term="llm" />
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>mistralai/mistral-vibe: Minimal CLI coding agent by Mistral</title>
|
||||
<id>https://www.rfc1437.de/2026/02/28/mistralai-mistral-vibe-minimal-cli-coding-agent-by-mistral</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/28/mistralai-mistral-vibe-minimal-cli-coding-agent-by-mistral" />
|
||||
<updated>2026-03-08T16:29:55.000Z</updated>
|
||||
<published>2026-02-28T18:58:21.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[mistralai/mistral-vibe: Minimal CLI coding agent by Mistral](https://github.com/mistralai/mistral-vibe) - begleitend zum [AI Studio - Mistral AI](/posts/ai-studio-mistral-ai) gibt es die Vibe-Coding Oberfläche zu Devstral auch als Open Source. Sehr nett, weil es ein gutes Paar macht. Wird definitiv bei mir etwas ausprobiert, auch wenn ich sicherlich für große Projekte dann eher zu den Boliden (Opus 4.6) greifen würde.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[mistralai/mistral-vibe: Minimal CLI coding agent by Mistral](https://github.com/mistralai/mistral-vibe) - begleitend zum [AI Studio - Mistral AI](/posts/ai-studio-mistral-ai) gibt es die Vibe-Coding Oberfläche zu Devstral auch als Open Source. Sehr nett, weil es ein gutes Paar macht. Wird definitiv bei mir etwas ausprobiert, auch wenn ich sicherlich für große Projekte dann eher zu den Boliden (Opus 4.6) greifen würde.</p></div></content>
|
||||
<category term="vibecoding" />
|
||||
<category term="llm" />
|
||||
<category term="mistral" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>AI Studio - Mistral AI</title>
|
||||
<id>https://www.rfc1437.de/2026/02/28/ai-studio-mistral-ai</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/28/ai-studio-mistral-ai" />
|
||||
<updated>2026-03-08T16:30:01.000Z</updated>
|
||||
<published>2026-02-28T18:55:50.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[AI Studio - Mistral AI](https://console.mistral.ai/home) - da in den USA ja doch wieder die Lage etwas angespannter wird, und einfach weil man immer mal gucken sollte, was außerhalb der USA passiert, hier ein Link auf eine europäische Alternative zu den großen US Betreibern. Mistral bietet mit Devstral 2 ein Coding-Modell an, das nicht nur open weights ist (also frei zu bekommen und zu betreiben, wenn man die nötige Hardware hat), sondern auch im Betrieb bei Nutzung von Mistral selber recht günstig ist. Und die Leistung liegt etwas oberhalb Claude Haiku 4.5, und zwar unterhalb Sonnet 4.5, aber nicht super weit. Also durchaus brauchbar und meine ersten Experimente waren nicht schlecht. Leider keine Vision-Fähigkeit, also für Experimente mit Bildern nicht so geeignet (und daher für mein bDS nicht ideal), aber trotzdem spannend genug um es im Auge zu behalten.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[AI Studio - Mistral AI](https://console.mistral.ai/home) - da in den USA ja doch wieder die Lage etwas angespannter wird, und einfach weil man immer mal gucken sollte, was außerhalb der USA passiert, hier ein Link auf eine europäische Alternative zu den großen US Betreibern. Mistral bietet mit Devstral 2 ein Coding-Modell an, das nicht nur open weights ist (also frei zu bekommen und zu betreiben, wenn man die nötige Hardware hat), sondern auch im Betrieb bei Nutzung von Mistral selber recht günstig ist. Und die Leistung liegt etwas oberhalb Claude Haiku 4.5, und zwar unterhalb Sonnet 4.5, aber nicht super weit. Also durchaus brauchbar und meine ersten Experimente waren nicht schlecht. Leider keine Vision-Fähigkeit, also für Experimente mit Bildern nicht so geeignet (und daher für mein bDS nicht ideal), aber trotzdem spannend genug um es im Auge zu behalten.</p></div></content>
|
||||
<category term="vibecoding" />
|
||||
<category term="llm" />
|
||||
<category term="mistral" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>ZK I Zettel 1 (1) - Niklas Luhmann-Archiv</title>
|
||||
<id>https://www.rfc1437.de/2026/02/28/zk-i-zettel-1-1-niklas-luhmann-archiv</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/28/zk-i-zettel-1-1-niklas-luhmann-archiv" />
|
||||
<updated>2026-03-08T16:30:07.000Z</updated>
|
||||
<published>2026-02-28T15:35:59.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[ZK I Zettel 1 \(1\) - Niklas Luhmann-Archiv](https://niklas-luhmann-archiv.de/bestand/zettelkasten/zettel/ZK_1_NB_1_1_V) - woher die Inspiration für mein Blog kommt, bzw. was mich immer unter der technischen Oberfläche bewegt hat.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[ZK I Zettel 1 \(1\) - Niklas Luhmann-Archiv](https://niklas-luhmann-archiv.de/bestand/zettelkasten/zettel/ZK_1_NB_1_1_V) - woher die Inspiration für mein Blog kommt, bzw. was mich immer unter der technischen Oberfläche bewegt hat.</p></div></content>
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus</title>
|
||||
<id>https://www.rfc1437.de/2026/02/28/agent-ui-standards-multiply-mcp-apps-and-google-s-a2ui-richard-macmanus</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/28/agent-ui-standards-multiply-mcp-apps-and-google-s-a2ui-richard-macmanus" />
|
||||
<updated>2026-03-08T16:30:13.000Z</updated>
|
||||
<published>2026-02-28T06:02:52.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>wer so wie ich gerne einen Überblick über UI-integration von LLMs haben möchte und sich fragt, wie A2UI und MCP Apps im Vergleich arbeiten und was sie bieten: [Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus](https://ricmac.org/2025/12/19/agent-ui-standards-multiply-mcp-apps-and-googles-a2ui/) hilft. Ich habe in bDS ja A2UI implementiert, damit im internen Chat das LLM auch visuelle Aspekte nutzen kann, und das gefällt mir schon sehr gut. Aber die Idee, Teile meines UI auch in externe Agents einzubringen ist auch faszinierend. Auch wenn ich finde, dass "lokales HTML/JS in einem IFrame" irgendwie erstmal nach Hack klingt, aber vieles im LLM Umfeld gibt mir das Gefühl im Moment, einfach weil ja alles über einen normalen Text-Stream geschoben wird und man hofft, dass die LLMs sich an die Formate halten (selbst A2UI arbeitet so).</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>wer so wie ich gerne einen Überblick über UI-integration von LLMs haben möchte und sich fragt, wie A2UI und MCP Apps im Vergleich arbeiten und was sie bieten: [Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus](https://ricmac.org/2025/12/19/agent-ui-standards-multiply-mcp-apps-and-googles-a2ui/) hilft. Ich habe in bDS ja A2UI implementiert, damit im internen Chat das LLM auch visuelle Aspekte nutzen kann, und das gefällt mir schon sehr gut. Aber die Idee, Teile meines UI auch in externe Agents einzubringen ist auch faszinierend. Auch wenn ich finde, dass "lokales HTML/JS in einem IFrame" irgendwie erstmal nach Hack klingt, aber vieles im LLM Umfeld gibt mir das Gefühl im Moment, einfach weil ja alles über einen normalen Text-Stream geschoben wird und man hofft, dass die LLMs sich an die Formate halten (selbst A2UI arbeitet so).</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="llm" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>cloudflare/cobweb: COBOL to WebAssembly compiler</title>
|
||||
<id>https://www.rfc1437.de/2026/02/27/cloudflare-cobweb-cobol-to-webassembly-compiler</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/27/cloudflare-cobweb-cobol-to-webassembly-compiler" />
|
||||
<updated>2026-03-08T16:30:38.000Z</updated>
|
||||
<published>2026-02-27T13:43:32.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[cloudflare/cobweb: COBOL to WebAssembly compiler](https://github.com/cloudflare/cobweb) - ich lass das einfach mal hier liegen. Soll doch jemand anders den alten Kram wegräumen. [was soll man da auch anderes sagen](https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/).</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[cloudflare/cobweb: COBOL to WebAssembly compiler](https://github.com/cloudflare/cobweb) - ich lass das einfach mal hier liegen. Soll doch jemand anders den alten Kram wegräumen. [was soll man da auch anderes sagen](https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/).</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Pyodide</title>
|
||||
<id>https://www.rfc1437.de/2026/02/27/pyodide</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/27/pyodide" />
|
||||
<updated>2026-03-08T16:30:43.000Z</updated>
|
||||
<published>2026-02-27T13:23:39.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Pyodide](https://pyodide.org/en/stable/) ist so ein bisschen mein Lebensretter in bDS: ich muss nämlich gestehen, ich bin jetzt nicht wirklich super tief in TypeScript drin und hab auch eigentlich keine Lust das selber zu schreiben. Wenn die KI das macht, ist das ok, da gibt es genug Wissen auf das ein LLM zurückgreifen kann, aber ich will eigentlich nicht mich da tief einarbeiten. Und Python ist schon seit langem eine meiner favorisierten Sprachen. Und Pyodide bietet genau das: eine Portierung von CPython auf WebAssembly. Das bietet eine angenehme Sprache für Scripte und Makros, die aber auf alles zugreifen kann, was die Applikation macht und - wenn ich das mal will - auch Python Libraries ladenm kann.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Pyodide](https://pyodide.org/en/stable/) ist so ein bisschen mein Lebensretter in bDS: ich muss nämlich gestehen, ich bin jetzt nicht wirklich super tief in TypeScript drin und hab auch eigentlich keine Lust das selber zu schreiben. Wenn die KI das macht, ist das ok, da gibt es genug Wissen auf das ein LLM zurückgreifen kann, aber ich will eigentlich nicht mich da tief einarbeiten. Und Python ist schon seit langem eine meiner favorisierten Sprachen. Und Pyodide bietet genau das: eine Portierung von CPython auf WebAssembly. Das bietet eine angenehme Sprache für Scripte und Makros, die aber auf alles zugreifen kann, was die Applikation macht und - wenn ich das mal will - auch Python Libraries ladenm kann.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Drizzle ORM - Why Drizzle?</title>
|
||||
<id>https://www.rfc1437.de/2026/02/27/drizzle-orm-why-drizzle</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/27/drizzle-orm-why-drizzle" />
|
||||
<updated>2026-03-08T16:30:48.000Z</updated>
|
||||
<published>2026-02-27T13:17:08.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Drizzle ORM](https://orm.drizzle.team/docs/overview) - war ein Vorschlag der KI beim Bau von bDS und hat sich sehr bewährt. Sauberer ORM für TypeScript mit einer recht netten API, die mich stark an Django erinnert. Zusätzlich saubere Abbildung von Migrations, die dann aber einfach SQL erlauben, also auch komplexere Migrationen ermöglichen. Und bisher völlig unauffällig im Betrieb. Was besonders interessant ist: da gibts eine direkte Übersetzung nach GraphQL, so dass man die objekte dann auch nach außen auf ein API legen kann, was ich mir glaube ich mal angucken sollte (bzw. mich bei der KI beschweren sollte, dass es sich das mal anguckt). Ich bin ja immer ein Fan von flexiblen Standard-Integrationen um externe Tools anzubinden.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Drizzle ORM](https://orm.drizzle.team/docs/overview) - war ein Vorschlag der KI beim Bau von bDS und hat sich sehr bewährt. Sauberer ORM für TypeScript mit einer recht netten API, die mich stark an Django erinnert. Zusätzlich saubere Abbildung von Migrations, die dann aber einfach SQL erlauben, also auch komplexere Migrationen ermöglichen. Und bisher völlig unauffällig im Betrieb. Was besonders interessant ist: da gibts eine direkte Übersetzung nach GraphQL, so dass man die objekte dann auch nach außen auf ein API legen kann, was ich mir glaube ich mal angucken sollte (bzw. mich bei der KI beschweren sollte, dass es sich das mal anguckt). Ich bin ja immer ein Fan von flexiblen Standard-Integrationen um externe Tools anzubinden.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>A2UI</title>
|
||||
<id>https://www.rfc1437.de/2026/02/27/a2ui</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/27/a2ui" />
|
||||
<updated>2026-03-08T16:30:53.000Z</updated>
|
||||
<published>2026-02-27T13:13:21.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[A2UI](https://a2ui.org/) ist ein interessantes Projekt für ein streaming-orientiertes Protokoll für Anwendungen mit LLM Integration. Die Grundidee ist Streaming von JSON Schnipseln aus denen sich dann inkrementell das UI zusammenbaut, und das LLM hat die Kontrolle darüber, was in das UI rein wandert. Es erlaubt dem LLM mehr als nur simple textuelle Beschreibungen oder einfache Ascii-Grafiken zu produzieren und gibt auch Rückfragen des LLM eine andere Optik. Das ganze kommt von Google und wird auf einem offenen [github Projekt](https://github.com/google/A2UI) gepflegt. In bDS habe ich das ganze auch eingebaut und das hat schon was, wenn man über seine Blogposts eine Heatmap der Verteilung auf die Monate bekommen kann.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[A2UI](https://a2ui.org/) ist ein interessantes Projekt für ein streaming-orientiertes Protokoll für Anwendungen mit LLM Integration. Die Grundidee ist Streaming von JSON Schnipseln aus denen sich dann inkrementell das UI zusammenbaut, und das LLM hat die Kontrolle darüber, was in das UI rein wandert. Es erlaubt dem LLM mehr als nur simple textuelle Beschreibungen oder einfache Ascii-Grafiken zu produzieren und gibt auch Rückfragen des LLM eine andere Optik. Das ganze kommt von Google und wird auf einem offenen [github Projekt](https://github.com/google/A2UI) gepflegt. In bDS habe ich das ganze auch eingebaut und das hat schon was, wenn man über seine Blogposts eine Heatmap der Verteilung auf die Monate bekommen kann.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Waggle Dance</title>
|
||||
<id>https://www.rfc1437.de/2026/02/23/waggle-dance</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/23/waggle-dance" />
|
||||
<updated>2026-03-08T16:30:57.000Z</updated>
|
||||
<published>2026-02-23T20:20:07.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Waggle Dance](https://boardgamegeek.com/boardgame/158572/waggle-dance) . oldie, but goldie. Immer wieder spaßig wie dieses doch recht einfache Spiel die Leute mitnehmen kann, auch über 10 Jahren nach seiner Veröffentlichung.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Waggle Dance](https://boardgamegeek.com/boardgame/158572/waggle-dance) . oldie, but goldie. Immer wieder spaßig wie dieses doch recht einfache Spiel die Leute mitnehmen kann, auch über 10 Jahren nach seiner Veröffentlichung.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="aside" />
|
||||
<category term="spielelog" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>OpenCode | Der Open-Source AI-Coding-Agent</title>
|
||||
<id>https://www.rfc1437.de/2026/02/22/opencode-der-open-source-ai-coding-agent</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/22/opencode-der-open-source-ai-coding-agent" />
|
||||
<updated>2026-03-08T16:31:02.000Z</updated>
|
||||
<published>2026-02-22T18:07:25.000Z</published>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[OpenCode | Der Open-Source AI-Coding-Agent](https://opencode.ai/de) - ein open-source coding agent der so langsam Claude Code den Rang ablaufen könnte. Sehr gut in der Ausführung und vor allem Provider-agnostisch. Man kann jedes Modell anhängen, sogar ein selber lokal gehostetes mit LM Studio oder ollama. Wenn man einfach mal spielen will, kann man es auch einfach nur runterladen und loslegen, sogar ohne eine Kreditkarte zu hinterlegen (dann natürlich mit limitierten Tokens, aber für erste Experimente durchaus nutzbar. Und unabhängig von den großen Anbietern (ok, außer deren Modelle, wenn man die benutzen will - und für ernsthaftes Coding sind die leider noch notwendig). OpenCode bietet auch selber AI Modelle an, die dann abgerechnet werden, aber ein paar Modelle sind immer frei verfügbar und bieten damit durchaus ernsthaftes Experimentieren ohne Investment.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[OpenCode | Der Open-Source AI-Coding-Agent](https://opencode.ai/de) - ein open-source coding agent der so langsam Claude Code den Rang ablaufen könnte. Sehr gut in der Ausführung und vor allem Provider-agnostisch. Man kann jedes Modell anhängen, sogar ein selber lokal gehostetes mit LM Studio oder ollama. Wenn man einfach mal spielen will, kann man es auch einfach nur runterladen und loslegen, sogar ohne eine Kreditkarte zu hinterlegen (dann natürlich mit limitierten Tokens, aber für erste Experimente durchaus nutzbar. Und unabhängig von den großen Anbietern (ok, außer deren Modelle, wenn man die benutzen will - und für ernsthaftes Coding sind die leider noch notwendig). OpenCode bietet auch selber AI Modelle an, die dann abgerechnet werden, aber ein paar Modelle sind immer frei verfügbar und bieten damit durchaus ernsthaftes Experimentieren ohne Investment.</p></div></content>
|
||||
<category term="vibecoding" />
|
||||
<category term="programmierung" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Steve Yegge on Vibe Coding</title>
|
||||
<id>https://www.rfc1437.de/2026/02/22/steve-yegge-on-vibe-coding</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/22/steve-yegge-on-vibe-coding" />
|
||||
<updated>2026-03-08T16:31:06.000Z</updated>
|
||||
<published>2026-02-22T14:43:25.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Steve Yegge spricht im Interview über die Zukunft der Programmierung und die Herausforderungen des Vibe Codings. Der Autor teilt seine Erfahrungen und sieht einen Umbruch vergleichbar mit der Einführung von Hochsprachen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Steve Yegge spricht im Interview über die Zukunft der Programmierung und die Herausforderungen des Vibe Codings. Der Autor teilt seine Erfahrungen und sieht einen Umbruch vergleichbar mit der Einführung von Hochsprachen.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="vibecoding" />
|
||||
<category term="article" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>bDS langsam benutzbar</title>
|
||||
<id>https://www.rfc1437.de/2026/02/22/neue-software-langsam-benutzbar</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/22/neue-software-langsam-benutzbar" />
|
||||
<updated>2026-03-08T16:31:11.000Z</updated>
|
||||
<published>2026-02-22T12:28:19.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So langsam macht die neue Software Spaß, alles was man für die Benutzung und Erstellung braucht ist weitestgehend vorhanden. Ein paar kleine Schönheitsfehler hat sie moch und es gibt noch das eine oder andere Feature, das ich will, aber ich kann schon alles machen, was ich wirklich als Minimum brauche. Veröffentlichen geht jetzt einfach mit einem shell script:</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So langsam macht die neue Software Spaß, alles was man für die Benutzung und Erstellung braucht ist weitestgehend vorhanden. Ein paar kleine Schönheitsfehler hat sie moch und es gibt noch das eine oder andere Feature, das ich will, aber ich kann schon alles machen, was ich wirklich als Minimum brauche. Veröffentlichen geht jetzt einfach mit einem shell script:</p><p>```bash<br />#!/bin/sh</p><p>cd ~/Blogs/rfc1437.de/html</p><p>rsync -rav --delete \<br /> --exclude='thumbnails/' \<br /> --exclude='media/' \<br /> * git.rfc1437.de:git-server/html/</p><p>cd ..</p><p>rsync -rav --delete thumbnails/ git.rfc1437.de:git-server/html/thumbnails/<br />rsync -rav --exclude='*.meta' --delete media/ git.rfc1437.de:git-server/html/media/<br />```</p><p>Ja, das war jetzt nur um meine Source-Formatierung zu testen. Und?</p></div></content>
|
||||
<category term="sysadmin" />
|
||||
<category term="article" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Blogging Desktop Server</title>
|
||||
<id>https://www.rfc1437.de/2026/02/16/blogging-desktop-server</id>
|
||||
<link href="https://www.rfc1437.de/2026/02/16/blogging-desktop-server" />
|
||||
<updated>2026-03-08T16:31:16.000Z</updated>
|
||||
<published>2026-02-16T13:40:48.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Big Damn Stupid](https://git.rfc1437.de/hugo/rfc1437) - ne, Blogging Desktop Server. Im Moment mein Lieblingsprojekt an dem ich mit Vibe-Coding herumspiele und mir eine Software baue, mit der ich das Blog betreiben kann. Aber diesmal mit der klaren Perspektive, dass ich nicht wieder dem Bitrot oder der Komplexitätsspirale erliege. Simple Software mit brauchbarer Oberfläche für die Pflege der Blogbeiträge, aber die Speicherung als Markdown Files mit YAML Frontmatter um einfach stabil für die Zukunft zu sein. Das ganze dann mit sqlite für Caching und Volltextsuche und andere Komfort-Features und git für die Synchronisation der Blog-Daten, und git-lfs für die Bilder. Fühlt sich gerade richtig brauchbar an.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Big Damn Stupid](https://git.rfc1437.de/hugo/rfc1437) - ne, Blogging Desktop Server. Im Moment mein Lieblingsprojekt an dem ich mit Vibe-Coding herumspiele und mir eine Software baue, mit der ich das Blog betreiben kann. Aber diesmal mit der klaren Perspektive, dass ich nicht wieder dem Bitrot oder der Komplexitätsspirale erliege. Simple Software mit brauchbarer Oberfläche für die Pflege der Blogbeiträge, aber die Speicherung als Markdown Files mit YAML Frontmatter um einfach stabil für die Zukunft zu sein. Das ganze dann mit sqlite für Caching und Volltextsuche und andere Komfort-Features und git für die Synchronisation der Blog-Daten, und git-lfs für die Bilder. Fühlt sich gerade richtig brauchbar an.</p></div></content>
|
||||
<category term="programmierung" />
|
||||
<category term="blogging" />
|
||||
<category term="vibecoding" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Schotten Totten 2</title>
|
||||
<id>https://www.rfc1437.de/2023/08/27/schotten-totten-2-board-game-boardgamegeek</id>
|
||||
<link href="https://www.rfc1437.de/2023/08/27/schotten-totten-2-board-game-boardgamegeek" />
|
||||
<updated>2026-03-08T16:31:57.000Z</updated>
|
||||
<published>2023-08-27T19:27:23.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Schotten Totten 2](https://boardgamegeek.com/boardgame/300930/schotten-totten-2) entwickelt sich zu einem unserer Lieblings-Spiele für zwei Spieler. Ein Remake des alten Schotten Totten (das es leider nicht mehr zu kaufen gibt unter dem Namen, nur als Battle Line, aber das eben nur auf Englisch). Im Gegensatz zum ersten Spiel jetzt asymmetrisch mit gerade genug Unterschied in der Spielweise, dass sich die beiden Seiten definitiv unterschiedlich anfühlen, aber trotzdem noch größtenteils die gleichen Sachen machen. Schnell aufgebaut, schnell gespielt und schnell weggeräumt mit genug Taktik um einen für ein paar Spiele zu fesseln. Und der Grafik-Stil ist einfach nett.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Schotten Totten 2](https://boardgamegeek.com/boardgame/300930/schotten-totten-2) entwickelt sich zu einem unserer Lieblings-Spiele für zwei Spieler. Ein Remake des alten Schotten Totten (das es leider nicht mehr zu kaufen gibt unter dem Namen, nur als Battle Line, aber das eben nur auf Englisch). Im Gegensatz zum ersten Spiel jetzt asymmetrisch mit gerade genug Unterschied in der Spielweise, dass sich die beiden Seiten definitiv unterschiedlich anfühlen, aber trotzdem noch größtenteils die gleichen Sachen machen. Schnell aufgebaut, schnell gespielt und schnell weggeräumt mit genug Taktik um einen für ein paar Spiele zu fesseln. Und der Grafik-Stil ist einfach nett.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
<category term="spielelog" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Tak</title>
|
||||
<id>https://www.rfc1437.de/2023/08/27/tak-board-game-boardgamegeek</id>
|
||||
<link href="https://www.rfc1437.de/2023/08/27/tak-board-game-boardgamegeek" />
|
||||
<updated>2026-03-08T16:31:23.000Z</updated>
|
||||
<published>2023-08-27T19:23:47.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Tak](https://boardgamegeek.com/boardgame/197405/tak) ist ein ziemlich interessantes Spiel: [inspiriert aus einem Fantasy-Roman von Patrick Rothfuss](https://en.wikipedia.org/wiki/Tak_\(game\)), zum Leben erweckt als eine fiktives "klassisches" Strategiespiel. Das schöne daran: man kann es sich problemlos selber machen, wenn man will und geschickt ist. Die Regeln sind super simpel und leicht gelernt, das Spiel aber trickreich mit vielen Möglichkeiten dem Gegner Fallen zu stellen. Wird vermutlich für unseren nächsten Urlaub mitgenommen, weil praktisch zum Draussen spielen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Tak](https://boardgamegeek.com/boardgame/197405/tak) ist ein ziemlich interessantes Spiel: [inspiriert aus einem Fantasy-Roman von Patrick Rothfuss](https://en.wikipedia.org/wiki/Tak_\(game\)), zum Leben erweckt als eine fiktives "klassisches" Strategiespiel. Das schöne daran: man kann es sich problemlos selber machen, wenn man will und geschickt ist. Die Regeln sind super simpel und leicht gelernt, das Spiel aber trickreich mit vielen Möglichkeiten dem Gegner Fallen zu stellen. Wird vermutlich für unseren nächsten Urlaub mitgenommen, weil praktisch zum Draussen spielen.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="tak" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
<category term="spielelog" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org</title>
|
||||
<id>https://www.rfc1437.de/2023/08/27/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy-linux-org</id>
|
||||
<link href="https://www.rfc1437.de/2023/08/27/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy-linux-org" />
|
||||
<updated>2026-03-08T16:32:01.000Z</updated>
|
||||
<published>2023-08-27T10:55:08.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Weil mich Google Authenticator ärgert: [In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org](https://www.linux.org/threads/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy.36577/). Keepassxc ist deutlich netter, wie ich finde, und ist deutlich kontrollierbarer für mich.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Weil mich Google Authenticator ärgert: [In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org](https://www.linux.org/threads/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy.36577/). Keepassxc ist deutlich netter, wie ich finde, und ist deutlich kontrollierbarer für mich.</p></div></content>
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Mal wieder auf Linux ...</title>
|
||||
<id>https://www.rfc1437.de/2023/08/19/mal-wieder-auf-linux</id>
|
||||
<link href="https://www.rfc1437.de/2023/08/19/mal-wieder-auf-linux" />
|
||||
<updated>2026-03-08T16:32:06.000Z</updated>
|
||||
<published>2023-08-19T13:26:04.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>... und natürlich tuts Surround-Sound meines Notebooks nicht mehr, aus Gründen. Und Fingerprint-Login macht weitaus weniger Sinn, wenn man nach Login dann doch das Passwort für den Keyring eingeben muss. Wenn der wenigstens erst beim ersten Bedarf nach einem Passwort käme, dann wärs ja ok, aber der geht direkt nach Login auf. Bah.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>... und natürlich tuts Surround-Sound meines Notebooks nicht mehr, aus Gründen. Und Fingerprint-Login macht weitaus weniger Sinn, wenn man nach Login dann doch das Passwort für den Keyring eingeben muss. Wenn der wenigstens erst beim ersten Bedarf nach einem Passwort käme, dann wärs ja ok, aber der geht direkt nach Login auf. Bah.</p><p>Ansonsten bin ich allerdings angenehm überrascht davon, wie gut die Linux-Unterstützung für das Lenovo T480 ist. Alles andere funktioniert bisher tadellos.</p></div></content>
|
||||
<category term="linux" />
|
||||
<category term="article" />
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
<title>Autumn Leaves</title>
|
||||
<id>https://www.rfc1437.de/2022/11/11/autumn-leaves</id>
|
||||
<link href="https://www.rfc1437.de/2022/11/11/autumn-leaves" />
|
||||
<updated>2026-03-07T21:06:30.000Z</updated>
|
||||
<published>2022-11-11T12:06:46.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p></p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p></p></div></content>
|
||||
<category term="picture" />
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
<title>Prime Time for Prime Slime</title>
|
||||
<id>https://www.rfc1437.de/2022/11/06/prime-time-for-prime-slime</id>
|
||||
<link href="https://www.rfc1437.de/2022/11/06/prime-time-for-prime-slime" />
|
||||
<updated>2026-03-07T21:06:31.000Z</updated>
|
||||
<published>2022-11-06T12:59:14.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Prime Time for Prime Slime](https://www.moxfield.com/users/rfc1437) is the second of my "reinventing the past" deck lists. It is actually my first commander precon deck - Mimeoplasm - just spiced up to 11. It kinda is funny how I stuck with the theme of the deck, transitioning it from the precon to Ooze tribal and later reanimator, then turned it into Muldrotha combo and again turned it back to Mimeoplasm, when the Prime Slime secret lair came out (I love the art style), going full on Necrotic Ooze combo this time. It is a ton of fun to play, which is why some of the old stuff from my collection made it's way into that deck. #EDH #MtG #MagicTheGathering</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Prime Time for Prime Slime](https://www.moxfield.com/users/rfc1437) is the second of my "reinventing the past" deck lists. It is actually my first commander precon deck - Mimeoplasm - just spiced up to 11. It kinda is funny how I stuck with the theme of the deck, transitioning it from the precon to Ooze tribal and later reanimator, then turned it into Muldrotha combo and again turned it back to Mimeoplasm, when the Prime Slime secret lair came out (I love the art style), going full on Necrotic Ooze combo this time. It is a ton of fun to play, which is why some of the old stuff from my collection made it's way into that deck. #EDH #MtG #MagicTheGathering</p></div></content>
|
||||
<category term="edh" />
|
||||
<category term="magicthegathering" />
|
||||
<category term="mtg" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
<title>Sweet, so sweet</title>
|
||||
<id>https://www.rfc1437.de/2022/11/05/sweet-so-sweet</id>
|
||||
<link href="https://www.rfc1437.de/2022/11/05/sweet-so-sweet" />
|
||||
<updated>2026-03-08T12:21:49.000Z</updated>
|
||||
<published>2022-11-05T07:08:12.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p></p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p></p></div></content>
|
||||
<category term="photography" />
|
||||
<category term="picture" />
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
<title>Kaalia of the Blast</title>
|
||||
<id>https://www.rfc1437.de/2022/11/05/kaalia-of-the-blast</id>
|
||||
<link href="https://www.rfc1437.de/2022/11/05/kaalia-of-the-blast" />
|
||||
<updated>2026-03-07T21:06:36.000Z</updated>
|
||||
<published>2022-11-05T06:37:13.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Kaalia of the Blast](https://www.moxfield.com/decks/t4ZVxFbALUS1ciFv6s7tmQ) is one of my "lets recreate original commander" decks. The idea is to keep close to the original structure - one commander with the focus of the deck, a supporting commander that could become the main with some changes, and a big dragon in the same colors. And have the game plan of one of the originals, too. So in a way an updated Kaalia with a bit more focus and dedication, but still Angel/Dragon/Demon beatdown. #EDH #MtG</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Kaalia of the Blast](https://www.moxfield.com/decks/t4ZVxFbALUS1ciFv6s7tmQ) is one of my "lets recreate original commander" decks. The idea is to keep close to the original structure - one commander with the focus of the deck, a supporting commander that could become the main with some changes, and a big dragon in the same colors. And have the game plan of one of the originals, too. So in a way an updated Kaalia with a bit more focus and dedication, but still Angel/Dragon/Demon beatdown. #EDH #MtG</p></div></content>
|
||||
<category term="edh" />
|
||||
<category term="magicthegathering" />
|
||||
<category term="mtg" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Abdel, Agent of the Iron Throne</title>
|
||||
<id>https://www.rfc1437.de/2022/08/22/abdel-agent-of-the-iron-throne-commander-edh-agent-of-the-iron-throne-and-abdel-adrian-gorions-ward-deck-list-mtg-moxfield-an-mtg-deck-builder-site-for-magic-the-gathering</id>
|
||||
<link href="https://www.rfc1437.de/2022/08/22/abdel-agent-of-the-iron-throne-commander-edh-agent-of-the-iron-throne-and-abdel-adrian-gorions-ward-deck-list-mtg-moxfield-an-mtg-deck-builder-site-for-magic-the-gathering" />
|
||||
<updated>2026-03-08T16:32:16.000Z</updated>
|
||||
<published>2022-08-22T06:54:04.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Abdel, Agent of the Iron Throne](https://www.moxfield.com/users/rfc1437) ist meine neueste high-power, near-competetive Kreation. Das Deck hat einen sehr linearen Combo Plan mit viel Redundanz in den Teilen, und vor allem sowohl Combo-Element als auch Combo-Payoff in der Command Zone. Was an Interaktion aufgrund der Farben fehlt, wird durch Resilienz ersetzt. Ich mag ja lineare Combo, weil das dem Spiel einen klaren Plan vorgibt und es zum Beispiel Mulligan-Entscheidungen deutlich einfacher macht.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Abdel, Agent of the Iron Throne](https://www.moxfield.com/users/rfc1437) ist meine neueste high-power, near-competetive Kreation. Das Deck hat einen sehr linearen Combo Plan mit viel Redundanz in den Teilen, und vor allem sowohl Combo-Element als auch Combo-Payoff in der Command Zone. Was an Interaktion aufgrund der Farben fehlt, wird durch Resilienz ersetzt. Ich mag ja lineare Combo, weil das dem Spiel einen klaren Plan vorgibt und es zum Beispiel Mulligan-Entscheidungen deutlich einfacher macht.</p></div></content>
|
||||
<category term="edh" />
|
||||
<category term="magicthegathering" />
|
||||
<category term="mtg" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Dargo for the Lulz</title>
|
||||
<id>https://www.rfc1437.de/2021/01/14/dargo-for-the-lulz</id>
|
||||
<link href="https://www.rfc1437.de/2021/01/14/dargo-for-the-lulz" />
|
||||
<updated>2026-03-08T16:32:20.000Z</updated>
|
||||
<published>2021-01-14T12:32:10.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Dargo for the Lulz](https://www.moxfield.com/decks/WO7RNg0DOkaJWTiM-cfWiQ) ist ein Deck, das mich positiv überrascht hat, wie stark es ist. Ich würde es in eine ähnliche Gegend wie Godo stellen, also durchaus cEDH viable. Zwar ist die Combo nicht alleine der Commander, aber es braucht nur eine weitere Karte (Phyrexian Altar) und es geht los, wenn noch ein paar Treasures rumliegen oder Kreaturen zum Opfern da sind. Und der Plan-B mit Beatdown funktioniert auch gut.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Dargo for the Lulz](https://www.moxfield.com/decks/WO7RNg0DOkaJWTiM-cfWiQ) ist ein Deck, das mich positiv überrascht hat, wie stark es ist. Ich würde es in eine ähnliche Gegend wie Godo stellen, also durchaus cEDH viable. Zwar ist die Combo nicht alleine der Commander, aber es braucht nur eine weitere Karte (Phyrexian Altar) und es geht los, wenn noch ein paar Treasures rumliegen oder Kreaturen zum Opfern da sind. Und der Plan-B mit Beatdown funktioniert auch gut.</p></div></content>
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Brettspielrunde - wie macht man das in Zeiten von Corona?</title>
|
||||
<id>https://www.rfc1437.de/2020/03/27/brettspielrunde-wie-macht-man-das-in-zeiten-von-corona</id>
|
||||
<link href="https://www.rfc1437.de/2020/03/27/brettspielrunde-wie-macht-man-das-in-zeiten-von-corona" />
|
||||
<updated>2026-03-08T16:32:35.000Z</updated>
|
||||
<published>2020-03-27T18:45:02.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Also wir haben da eine Lösung gefunden. Und es lief richtig gut - 6 Spieler waren dabei, jeder zu Hause. Bei mir war das Spiel und eine Kamerakonstruktion, um das Bild ins Internet zu stellen - und mit Microsoft Teams dann allen nach Hause zu liefern. Dazu dann Headsets und los gings, Spiel erklären, spielen, gemeinsam drüber reden - all das geht auch zu Zeiten des Social Distancing.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Also wir haben da eine Lösung gefunden. Und es lief richtig gut - 6 Spieler waren dabei, jeder zu Hause. Bei mir war das Spiel und eine Kamerakonstruktion, um das Bild ins Internet zu stellen - und mit Microsoft Teams dann allen nach Hause zu liefern. Dazu dann Headsets und los gings, Spiel erklären, spielen, gemeinsam drüber reden - all das geht auch zu Zeiten des Social Distancing.</p><p></p><p>Das Kamera-Stativ hatte ich eh schon, der kleine Schwenkarm mit Handy-Halterung kostet 35€ und das Handy - sowas hat man oft ja schon da. Dann auf dem Handy eine kleine App - "IP Webcam" - mit der die Kamera des Handy über eine Webseite erreichbar wird. Und auf dem Notebook Teams, mit dem ich das Fenster des Browsers mit allen Teilnehmern geteilt habe. Und los kanns gehen!</p></div></content>
|
||||
<category term="article" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Jhoira, Scrap That! (Commander / EDH MTG Deck)</title>
|
||||
<id>https://www.rfc1437.de/2020/03/13/jhoira-scrap-that-commander-edh-mtg-deck</id>
|
||||
<link href="https://www.rfc1437.de/2020/03/13/jhoira-scrap-that-commander-edh-mtg-deck" />
|
||||
<updated>2026-03-08T16:32:49.000Z</updated>
|
||||
<published>2020-03-13T18:03:55.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Jhoira, Scrap That!](http://tappedout.net/mtg-decks/jhoira-scrap-that/) ist mitlerweile mein primäres Deck für cEDH und es hat sich verdammt gut bewährt bisher. Das Deck hat eigentlich immer eine Line, kann auf fast alles reagieren und hat gute Rebuild-Fähigkeiten. Durch mehrere überlappende Combos bietet es flexible Wege durch Stax oder Hate hindurch trotzdem zu gewinnen. Und selbst wenn ich nicht gewinne: das Deck hinterlässt bei den Gegnern definitiv einen bleibenden Eindruck.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Jhoira, Scrap That!](http://tappedout.net/mtg-decks/jhoira-scrap-that/) ist mitlerweile mein primäres Deck für cEDH und es hat sich verdammt gut bewährt bisher. Das Deck hat eigentlich immer eine Line, kann auf fast alles reagieren und hat gute Rebuild-Fähigkeiten. Durch mehrere überlappende Combos bietet es flexible Wege durch Stax oder Hate hindurch trotzdem zu gewinnen. Und selbst wenn ich nicht gewinne: das Deck hinterlässt bei den Gegnern definitiv einen bleibenden Eindruck.</p></div></content>
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Rurik: Dawn of Kiev</title>
|
||||
<id>https://www.rfc1437.de/2020/02/20/rurik-dawn-of-kiev</id>
|
||||
<link href="https://www.rfc1437.de/2020/02/20/rurik-dawn-of-kiev" />
|
||||
<updated>2026-03-08T16:32:54.000Z</updated>
|
||||
<published>2020-02-20T18:05:19.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Rurik: Dawn of Kiev](https://boardgamegeek.com/boardgame/228328/rurik-dawn-kiev) ist ein Kickstarter-Spiel, das bei mir vor ein paar Wochen eingetrudelt ist und seit dem ein paar Mal auf dem Tisch war. Interessante Aspekte bei dem Spiel sind die Aktionswahl mit unterschiedlich bewerteten Beratern in einer eigenen Auktionsphase, in der man die Aktionsmöglichkeiten selektiert und ein bischen die Reihenfolge, in der man diese ausführt, aber wie stark die Aktion sein wird, hängt von dem Mitspielern ab. Ausgewertet werden die Aktionen erst in der zweiten Phase, in der man dann zusehen muss, mit dem was man bekommt klar zu kommen. Die Zielwertungen sind sehr nah beieinander, jeder Punkt zählt. Dazu noch sehr nettes Spielmaterial und eine praktische Sortiereinlage.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Rurik: Dawn of Kiev](https://boardgamegeek.com/boardgame/228328/rurik-dawn-kiev) ist ein Kickstarter-Spiel, das bei mir vor ein paar Wochen eingetrudelt ist und seit dem ein paar Mal auf dem Tisch war. Interessante Aspekte bei dem Spiel sind die Aktionswahl mit unterschiedlich bewerteten Beratern in einer eigenen Auktionsphase, in der man die Aktionsmöglichkeiten selektiert und ein bischen die Reihenfolge, in der man diese ausführt, aber wie stark die Aktion sein wird, hängt von dem Mitspielern ab. Ausgewertet werden die Aktionen erst in der zweiten Phase, in der man dann zusehen muss, mit dem was man bekommt klar zu kommen. Die Zielwertungen sind sehr nah beieinander, jeder Punkt zählt. Dazu noch sehr nettes Spielmaterial und eine praktische Sortiereinlage.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="aside" />
|
||||
<category term="spielelog" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Bears on a Plane (Commander / EDH MTG Deck)</title>
|
||||
<id>https://www.rfc1437.de/2020/02/20/bears-on-a-plane-commander-edh-mtg-deck</id>
|
||||
<link href="https://www.rfc1437.de/2020/02/20/bears-on-a-plane-commander-edh-mtg-deck" />
|
||||
<updated>2026-03-08T16:33:00.000Z</updated>
|
||||
<published>2020-02-20T13:46:09.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Bears on a Plane](http://tappedout.net/mtg-decks/bears-on-a-plane/) ist mein Versuch ein effektives Prison-Deck in cEDH zu bauen. Erste Versuche mit dem Deck waren dementsprechend "disgusting". Kann nur sporadisch getestet werden wegen Anger-Management-Issues der Playgroup ...</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Bears on a Plane](http://tappedout.net/mtg-decks/bears-on-a-plane/) ist mein Versuch ein effektives Prison-Deck in cEDH zu bauen. Erste Versuche mit dem Deck waren dementsprechend "disgusting". Kann nur sporadisch getestet werden wegen Anger-Management-Issues der Playgroup ...</p></div></content>
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Tin Elves (Commander / EDH MTG Deck)</title>
|
||||
<id>https://www.rfc1437.de/2019/11/08/tin-elves-commander-edh-mtg-deck</id>
|
||||
<link href="https://www.rfc1437.de/2019/11/08/tin-elves-commander-edh-mtg-deck" />
|
||||
<updated>2026-03-08T16:33:03.000Z</updated>
|
||||
<published>2019-11-08T19:10:20.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Tin Elves](http://tappedout.net/mtg-decks/tin-elves/) - Blechelfen. Mein letztes Artefakt-Combo Deck für Magic the Gathering. Hat sich beim letzten Spiel super solide angefühlt. Das Deck geht hart auf Artefakte-Combos, benutzt dafür aber eine Reihe von Elementen, die auch super gut für eine Aggro-Strategie funktionieren. Wenn mir meine Combo-Teile weggeschossen werden, greife ich einfach mit einer Horder Thoptern an. Und Emry als Commander hilft mir um den Commander-Tax herum zu kommen, weil ihre Affinity-to-Artifacts Fähigkeit in diesem Deck Gold wert ist - und da sie zusätzlich auch noch ein Combo-Element ist, hat das Deck sehr gute Chancen auf Comebacks aus dem Hintertreffen. Ich werde die Liste vermutlich noch etwas stabilisieren, aber die Zusammenstellung scheint ein echter Treffer zu sein. Geht vermutlich mit nach Bologna.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Tin Elves](http://tappedout.net/mtg-decks/tin-elves/) - Blechelfen. Mein letztes Artefakt-Combo Deck für Magic the Gathering. Hat sich beim letzten Spiel super solide angefühlt. Das Deck geht hart auf Artefakte-Combos, benutzt dafür aber eine Reihe von Elementen, die auch super gut für eine Aggro-Strategie funktionieren. Wenn mir meine Combo-Teile weggeschossen werden, greife ich einfach mit einer Horder Thoptern an. Und Emry als Commander hilft mir um den Commander-Tax herum zu kommen, weil ihre Affinity-to-Artifacts Fähigkeit in diesem Deck Gold wert ist - und da sie zusätzlich auch noch ein Combo-Element ist, hat das Deck sehr gute Chancen auf Comebacks aus dem Hintertreffen. Ich werde die Liste vermutlich noch etwas stabilisieren, aber die Zusammenstellung scheint ein echter Treffer zu sein. Geht vermutlich mit nach Bologna.</p></div></content>
|
||||
<category term="magicthegathering" />
|
||||
<category term="spielen" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Wingspan</title>
|
||||
<id>https://www.rfc1437.de/2019/11/08/wingspan</id>
|
||||
<link href="https://www.rfc1437.de/2019/11/08/wingspan" />
|
||||
<updated>2026-03-08T16:33:08.000Z</updated>
|
||||
<published>2019-11-08T18:06:27.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Wingspan](https://boardgamegeek.com/boardgame/266192/wingspan) ist mein diesjähriger Neuzugang aus Essen (nicht der einzige, aber der, den ich bisher gespielt hab) und ich bin sehr zufrieden, das Spiel gekauft zu haben. Ein Tableau-Builder mit Karten, bei dem die Karten die Aktionsmöglichkeiten verbessern - das fängt schon mal perfekt für mich an. Variabler Setup, geheime Ziele und hohes Combo-Potential in den Karten machts noch besser. Und die ersten Spiele mit 2 und 5 Spielern waren super spannend. Das Spiel bietet einen nette Eskalationskurve im Spiel - die Runden haben weniger und weniger Aktionen, die Aktionen selber werden aber besser und besser. Und wenn man mal eine produktive Combo trifft, fühlt sich das einfach gut an. Dazu ordentliche Verarbeitung der Materialen und ansprechende Grafik, das ist ein slam-dunk für mich.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Wingspan](https://boardgamegeek.com/boardgame/266192/wingspan) ist mein diesjähriger Neuzugang aus Essen (nicht der einzige, aber der, den ich bisher gespielt hab) und ich bin sehr zufrieden, das Spiel gekauft zu haben. Ein Tableau-Builder mit Karten, bei dem die Karten die Aktionsmöglichkeiten verbessern - das fängt schon mal perfekt für mich an. Variabler Setup, geheime Ziele und hohes Combo-Potential in den Karten machts noch besser. Und die ersten Spiele mit 2 und 5 Spielern waren super spannend. Das Spiel bietet einen nette Eskalationskurve im Spiel - die Runden haben weniger und weniger Aktionen, die Aktionen selber werden aber besser und besser. Und wenn man mal eine produktive Combo trifft, fühlt sich das einfach gut an. Dazu ordentliche Verarbeitung der Materialen und ansprechende Grafik, das ist ein slam-dunk für mich.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="wingspan" />
|
||||
<category term="aside" />
|
||||
<category term="spielelog" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Golos, Combo Pilgrim (Commander / EDH MTG Deck)</title>
|
||||
<id>https://www.rfc1437.de/2019/08/20/golos-combo-pilgrim-commander-edh-mtg-deck</id>
|
||||
<link href="https://www.rfc1437.de/2019/08/20/golos-combo-pilgrim-commander-edh-mtg-deck" />
|
||||
<updated>2026-03-08T16:33:12.000Z</updated>
|
||||
<published>2019-08-20T17:56:45.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Golos is on a pilgrimage to find the most efficient combos to run in his deck - [and I am helping him](http://tappedout.net/mtg-decks/golos-combo-pilgrim/) to achieve his goal. Meine letzte Deckliste, an der ich arbeite. Wird ziemlich hart in Richtung cEDH laufen. Bei den ersten Spielen fühlte sich das schon richtig gut an, auch wenn ein bischen das explosive Combo-Feeling fehlte. Aber das ist in meiner Meta vielleicht auch gar nicht schlecht, wir spielen eher längere Spiele. Daher ist die Liste mehr auf Antworten und weniger auf T2 Combo-Win ausgelegt. Aber von dem, was die Liste macht, geht das voll in meine präferierte Richtung - nicht Suicide-Combo, sondern erstmal schauen was geht, dann zuschlagen, wenn keiner genug antworten haben kann.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Golos is on a pilgrimage to find the most efficient combos to run in his deck - [and I am helping him](http://tappedout.net/mtg-decks/golos-combo-pilgrim/) to achieve his goal. Meine letzte Deckliste, an der ich arbeite. Wird ziemlich hart in Richtung cEDH laufen. Bei den ersten Spielen fühlte sich das schon richtig gut an, auch wenn ein bischen das explosive Combo-Feeling fehlte. Aber das ist in meiner Meta vielleicht auch gar nicht schlecht, wir spielen eher längere Spiele. Daher ist die Liste mehr auf Antworten und weniger auf T2 Combo-Win ausgelegt. Aber von dem, was die Liste macht, geht das voll in meine präferierte Richtung - nicht Suicide-Combo, sondern erstmal schauen was geht, dann zuschlagen, wenn keiner genug antworten haben kann.</p></div></content>
|
||||
<category term="cedh" />
|
||||
<category term="magicthegathering" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Marvel Champions - Fantasy Flight Games</title>
|
||||
<id>https://www.rfc1437.de/2019/08/02/marvel-champions-fantasy-flight-games</id>
|
||||
<link href="https://www.rfc1437.de/2019/08/02/marvel-champions-fantasy-flight-games" />
|
||||
<updated>2026-03-08T16:33:16.000Z</updated>
|
||||
<published>2019-08-02T12:19:43.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Marvel Champions - Fantasy Flight Games](https://www.fantasyflightgames.com/en/news/2019/7/31/marvel-champions/) Wow, das kommt unerwartet. Es sieht stark nach einem weiteren Ableger des LOTR Systems aus, allerdings auf den ersten Blick etwas streamlined. Aber wenn das ganze trotzdem die Spieltiefe von LOTR erreicht, wärs klasse. Ich habe zwar mitlerweile eine gut laufende Magic Spielrunde, aber so für zwischendurch fand ich LOTR immer eigentlich recht spannend, da viele Spielentscheidungen (speziell der Szenario-spezifische Bau eines Decks) sehr nah an Magic ran kommen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[Marvel Champions - Fantasy Flight Games](https://www.fantasyflightgames.com/en/news/2019/7/31/marvel-champions/) Wow, das kommt unerwartet. Es sieht stark nach einem weiteren Ableger des LOTR Systems aus, allerdings auf den ersten Blick etwas streamlined. Aber wenn das ganze trotzdem die Spieltiefe von LOTR erreicht, wärs klasse. Ich habe zwar mitlerweile eine gut laufende Magic Spielrunde, aber so für zwischendurch fand ich LOTR immer eigentlich recht spannend, da viele Spielentscheidungen (speziell der Szenario-spezifische Bau eines Decks) sehr nah an Magic ran kommen.</p></div></content>
|
||||
<category term="spielen" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>Pauper Comes to Paper | MAGIC: THE GATHERING</title>
|
||||
<id>https://www.rfc1437.de/2019/06/28/pauper-comes-to-paper-magic-the-gathering</id>
|
||||
<link href="https://www.rfc1437.de/2019/06/28/pauper-comes-to-paper-magic-the-gathering" />
|
||||
<updated>2026-03-08T16:33:22.000Z</updated>
|
||||
<published>2019-06-28T06:46:02.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Wow, [Pauper Comes to Paper](https://magic.wizards.com/en/articles/archive/news/pauper-comes-paper-2019-06-27) - mit vereinheitlichter Legalität. Leider werden gleich zwei meiner Lieblings-Commons gebannt: Hymn to Tourach und High Tide. Schade. Aber trotzdem schön, endlich eine einheitliche Legalität für Karten zu haben.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Wow, [Pauper Comes to Paper](https://magic.wizards.com/en/articles/archive/news/pauper-comes-paper-2019-06-27) - mit vereinheitlichter Legalität. Leider werden gleich zwei meiner Lieblings-Commons gebannt: Hymn to Tourach und High Tide. Schade. Aber trotzdem schön, endlich eine einheitliche Legalität für Karten zu haben.</p></div></content>
|
||||
<category term="magicthegathering" />
|
||||
<category term="pauper" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>The London Mulligan | MAGIC: THE GATHERING</title>
|
||||
<id>https://www.rfc1437.de/2019/06/03/the-london-mulligan-magic-the-gathering</id>
|
||||
<link href="https://www.rfc1437.de/2019/06/03/the-london-mulligan-magic-the-gathering" />
|
||||
<updated>2026-03-02T16:35:06.000Z</updated>
|
||||
<published>2019-06-03T15:03:37.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Der [London Mulligan](https://magic.wizards.com/en/articles/archive/news/london-mulligan-2019-06-03) wird der offizielle Mulligan in Magic ab Core Set 2020. Klasse. Wir haben den in Commander ausprobiert und er war völlig ok. Und in Pauper wars auch gut. Klar, es gibt sicherlich ein paar Decks, die übermäßig profitieren, aber das kann man anderweitig regeln. Der neue Mulligan hilft einfach "Nicht-Spiele" aufgrund von mehrfachen schlechten Starthänden zu vermeiden. Es gibt nix nervigeres als ein Spiel im Mulligan zu verlieren, weil einfach jede Hand ohne Länder oder nur Länder war.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Der [London Mulligan](https://magic.wizards.com/en/articles/archive/news/london-mulligan-2019-06-03) wird der offizielle Mulligan in Magic ab Core Set 2020. Klasse. Wir haben den in Commander ausprobiert und er war völlig ok. Und in Pauper wars auch gut. Klar, es gibt sicherlich ein paar Decks, die übermäßig profitieren, aber das kann man anderweitig regeln. Der neue Mulligan hilft einfach "Nicht-Spiele" aufgrund von mehrfachen schlechten Starthänden zu vermeiden. Es gibt nix nervigeres als ein Spiel im Mulligan zu verlieren, weil einfach jede Hand ohne Länder oder nur Länder war.</p></div></content>
|
||||
<category term="magicthegathering" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>A Force to be Reckoned With | Article by Jim Davis</title>
|
||||
<id>https://www.rfc1437.de/2019/05/20/a-force-to-be-reckoned-with-article-by-jim-davis</id>
|
||||
<link href="https://www.rfc1437.de/2019/05/20/a-force-to-be-reckoned-with-article-by-jim-davis" />
|
||||
<updated>2026-03-02T16:35:10.000Z</updated>
|
||||
<published>2019-05-20T15:49:19.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[A Force to be Reckoned With](https://www.coolstuffinc.com/a/jimdavis-05202019-a-force-to-be-reckoned-with/) - die neue Karte "Force of Vigor" hat mal eben zwei meiner Decks deutlich getroffen. Jhoira als Artefakt-Storm-Deck und Paradox Arcum als Artefakt-Kombo sind beide ziemlich abhängig von ihren Artefakten und Enchantments, so eine Karte kann die mal eben abschalten. Instant-speed. Für lau. Autsch. Wenn andere Liste stärker auf Mana-Dorks statt Mana-Rocks gehen, haben sie genug grüne Karten um den FoV aktiv zu bekommen. Und dann bin ich raus. Jhoira kann sich vielleicht noch knapp halten, Storm hat in der Regel mehrere Vektoren, aber da Artefakte nur mit Shimmer Myr instant-speed werden (und der als Artefakt angreifbar bleibt), ist Arcum wirklich hart betroffen.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[A Force to be Reckoned With](https://www.coolstuffinc.com/a/jimdavis-05202019-a-force-to-be-reckoned-with/) - die neue Karte "Force of Vigor" hat mal eben zwei meiner Decks deutlich getroffen. Jhoira als Artefakt-Storm-Deck und Paradox Arcum als Artefakt-Kombo sind beide ziemlich abhängig von ihren Artefakten und Enchantments, so eine Karte kann die mal eben abschalten. Instant-speed. Für lau. Autsch. Wenn andere Liste stärker auf Mana-Dorks statt Mana-Rocks gehen, haben sie genug grüne Karten um den FoV aktiv zu bekommen. Und dann bin ich raus. Jhoira kann sich vielleicht noch knapp halten, Storm hat in der Regel mehrere Vektoren, aber da Artefakte nur mit Shimmer Myr instant-speed werden (und der als Artefakt angreifbar bleibt), ist Arcum wirklich hart betroffen.</p></div></content>
|
||||
<category term="cedh" />
|
||||
<category term="magicthegathering" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
<entry xml:lang="de">
|
||||
<title>May 20, 2019 Banned and Restricted Announcement | MAGIC: THE GATHERING</title>
|
||||
<id>https://www.rfc1437.de/2019/05/20/may-20-2019-banned-and-restricted-announcement-magic-the-gathering</id>
|
||||
<link href="https://www.rfc1437.de/2019/05/20/may-20-2019-banned-and-restricted-announcement-magic-the-gathering" />
|
||||
<updated>2026-03-02T16:35:15.000Z</updated>
|
||||
<published>2019-05-20T15:15:55.000Z</published>
|
||||
<author><name>hugo</name></author>
|
||||
<summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[May 20, 2019 Banned and Restricted Announcement](https://magic.wizards.com/en/articles/archive/news/may-20-2019-banned-and-restricted-announcement) - da hat mir Wizards of the Coast mal eben zwei meiner Decks komplett neutralisiert - Izzet Blitz braucht die kostenlosen Spells um seine Kreaturen zu pumpen oder Direktschaden zu aktivieren und Skred Delver brauchte sie um die Hand zu füllen im Mittelspiel. Autsch. Ok, in letzter Zeit hab ich meistens Tron gespielt (oder mal GB Tortex, wenn mir nach wilden Boardstates war), aber trotzdem, Skred Delver war immer noch mein Lieblingsdeck wegen seiner explosiven Comebacks.</p></div></summary>
|
||||
<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>[May 20, 2019 Banned and Restricted Announcement](https://magic.wizards.com/en/articles/archive/news/may-20-2019-banned-and-restricted-announcement) - da hat mir Wizards of the Coast mal eben zwei meiner Decks komplett neutralisiert - Izzet Blitz braucht die kostenlosen Spells um seine Kreaturen zu pumpen oder Direktschaden zu aktivieren und Skred Delver brauchte sie um die Hand zu füllen im Mittelspiel. Autsch. Ok, in letzter Zeit hab ich meistens Tron gespielt (oder mal GB Tortex, wenn mir nach wilden Boardstates war), aber trotzdem, Skred Delver war immer noch mein Lieblingsdeck wegen seiner explosiven Comebacks.</p></div></content>
|
||||
<category term="magicthegathering" />
|
||||
<category term="pauper" />
|
||||
<category term="article" />
|
||||
<category term="aside" />
|
||||
</entry>
|
||||
</feed>
|
||||
3112
fixtures/golden-generated-sites/rfc1437-sample/calendar.json
Normal file
3112
fixtures/golden-generated-sites/rfc1437-sample/calendar.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,309 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-language-prefix="/en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/en/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/en/atom.xml" />
|
||||
|
||||
<link rel="alternate" hreflang="en" href="/en/2005/11/13/esmeralda" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/en/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/en/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Language">
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en/" data-lang-prefix="" title="de">🇩🇪</a>
|
||||
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="en">🇬🇧</span>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Site search">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Site search">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Search..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Esmeralda</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2005"
|
||||
data-blog-calendar-month="11"
|
||||
aria-label="Open calendar"
|
||||
title="Open calendar"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Loading calendar…"
|
||||
data-i18n-error="Calendar data could not be loaded."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archive calendar</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Close calendar"
|
||||
title="Close calendar"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Loading calendar…</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomy">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/en/category/picture/">picture</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/fotografie/">fotografie</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/makro/">makro</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/natur/">natur</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/spinne/">spinne</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/tiere/">tiere</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><h3><a href="/media/esmeralda/">Esmeralda</a></h3>
|
||||
<p><img src="/media/2005/11/eb0cf9d7-6fbd-4b74-9be3-759d6e16f240.jpg" alt="Esmeralda"></p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,309 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-language-prefix="/en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/en/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/en/atom.xml" />
|
||||
|
||||
<link rel="alternate" hreflang="en" href="/en/2026/03/13/cmux-das-terminal-fur-multitasking" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/en/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/en/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Language">
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en/" data-lang-prefix="" title="de">🇩🇪</a>
|
||||
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="en">🇬🇧</span>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Site search">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Site search">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Search..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>cmux — The Terminal for Multitasking</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="3"
|
||||
aria-label="Open calendar"
|
||||
title="Open calendar"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Loading calendar…"
|
||||
data-i18n-error="Calendar data could not be loaded."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archive calendar</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Close calendar"
|
||||
title="Close calendar"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Loading calendar…</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomy">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/en/category/aside/">aside</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/programmierung/">programmierung</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/mac-os-x/">mac-os-x</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/sysadmin/">sysadmin</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><p><a href="https://www.cmux.dev/de">cmux — The Terminal for Multitasking</a> is a pretty brilliant terminal program for CLI workflows, which are experiencing a resurgence especially through agentic coding. And what I love about it: it has clean persistence of open workspaces where you can have multiple tabs, so I don't have to keep my work environment open all the time. I've always liked having various directories open directly because I switch back and forth between several while programming, and this works much better with CMUX than with anything else.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<div class="single-post-backlinks" aria-label="Backlinks">
|
||||
<span class="single-post-backlinks-label">Linked from</span>
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-backlink-bubble" href="/en/2026/03/13/ghostty">ghostty</a>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,302 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-language-prefix="/en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/en/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/en/atom.xml" />
|
||||
|
||||
<link rel="alternate" hreflang="en" href="/en/2026/03/13/ghostty" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/en/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/en/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Language">
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en/" data-lang-prefix="" title="de">🇩🇪</a>
|
||||
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="en">🇬🇧</span>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Site search">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Site search">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Search..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Ghostty</h1>
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="3"
|
||||
aria-label="Open calendar"
|
||||
title="Open calendar"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Loading calendar…"
|
||||
data-i18n-error="Calendar data could not be loaded."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archive calendar</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Close calendar"
|
||||
title="Close calendar"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Loading calendar…</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="single-post-taxonomy" aria-label="Taxonomy">
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-category" href="/en/category/aside/">aside</a>
|
||||
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/programmierung/">programmierung</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/sysadmin/">sysadmin</a>
|
||||
|
||||
|
||||
<a class="single-post-taxonomy-bubble single-post-taxonomy-bubble-tag" href="/en/tag/mac-os-x/">mac-os-x</a>
|
||||
|
||||
</div>
|
||||
|
||||
<article class="single-post" data-template="single-post" data-pagefind-body>
|
||||
<div class="post"><p><a href="https://ghostty.org/">Ghostty</a> is the foundation that <a href="/en/2026/03/13/cmux-das-terminal-fur-multitasking">cmux — The Terminal for Multitasking</a> was built on. Generally also a very nice terminal that responds noticeably faster than the standard terminal and already works very well. What I didn't like was that tabs weren't automatically reopened in the appropriate directories when the program was closed. I simply have too many persistent sessions that I keep coming back to. cmux just does that better.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
943
fixtures/golden-generated-sites/rfc1437-sample/en/index.html
Normal file
943
fixtures/golden-generated-sites/rfc1437-sample/en/index.html
Normal file
@@ -0,0 +1,943 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-language-prefix="/en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/en/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/en/atom.xml" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/en/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/en/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Language">
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en/" data-lang-prefix="" title="de">🇩🇪</a>
|
||||
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="en">🇬🇧</span>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Site search">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Site search">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Search..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 class="archive-heading">Content-type: matter-transport/sentient-life-form</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/en/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="4"
|
||||
aria-label="Open calendar"
|
||||
title="Open calendar"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Loading calendar…"
|
||||
data-i18n-error="Calendar data could not be loaded."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archive calendar</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Close calendar"
|
||||
title="Close calendar"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Loading calendar…</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<section class="post-list" data-template="post-list" data-list-page="true" data-first-page="true" data-last-page="false">
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>01.04.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/stonerl/Thaw">stonerl/Thaw: Menu bar manager for macOS 26</a> - helps against the notch on Apple MacBooks. It's already embarrassing that you need an extra program to do this, and that the system doesn't support it out of the box.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>29.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/Fission-AI/OpenSpec?tab=readme-ov-file">Fission-AI/OpenSpec: Spec-driven development (SDD) for AI coding assistants.</a> is a lighter-weight variant of <a href="/en/2026/03/27/juxt-allium-a-language-for-sharpening-intent-alongside-implementation">juxt/allium: A language for sharpening intent alongside implementation.</a>. Could also be quite interesting—the tooling is more developed, but the language is weaker. Allium is much more formal and oriented toward pseudocode.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/juxt/allium">juxt/allium: A language for sharpening intent alongside implementation.</a> is a very exciting project. Specifically, a specification language for the behavior of software systems. A language for which there is no runtime environment or compiler, except the LLM. Implemented as Agent Skills. Super exciting because it also includes a Distill, with which you can analyze existing software and retroactively build specifications, or work out a specification in an interview process with the AI that is much more precisely understandable to an LLM than general English. A funny detail on the side: I tried Allium with Qwen3-Coder-Next, my current favorite model for local hosting, in <a href="/en/2026/03/14/pi-dev">pi.dev</a>. I couldn't install the binary for Allium (a syntax checker and linter) with homebrew, so pi.dev simply downloaded the binary and installed it itself.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/scitrera/cuda-containers">scitrera/cuda-containers: Scitrera builds of various CUDA containers for version consistency, starting primarily with NVIDIA DGX Spark Containers</a> - I'm currently a big fan of eugr/vllm-node as a base package because it always provides up-to-date versions for vLLM, but if I want to play around with sglang sometime, this is probably the most similar project. I'm particularly interested in EAGLE-3 speculative decoding - basically, tokens are generated in parallel via a very small model and the main model checks what fits and takes it, or generates itself if necessary. This way you can often have a third of the tokens generated via a much faster simple model in the <3B range and only pass every third one through the large model.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/thushan/olla">thushan/olla: High-performance lightweight proxy and load balancer for LLM infrastructure. Intelligent routing, automatic failover and unified model discovery across local and remote inference backend</a> might be the better choice following the LiteLLM debacle (hacked supply chain with data extractor in the package). For me, it's definitely interesting because I simply want to run two models and make them available under a single endpoint, and all the other packages are significantly overkill for that.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>25.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://forums.developer.nvidia.com/t/running-mistral-small-4-119b-nvfp4-on-nvidia-dgx-spark-gb10/363863/26">Running Mistral Small 4 119B NVFP4 on NVIDIA DGX Spark (GB10) - DGX Spark / GB10 User Forum / DGX Spark / GB10 - NVIDIA Developer Forums</a> - lifesaver discussion in the NVIDIA forums. With what's in there, I got Mistral Small 4 running smoothly. And it runs cleanly with 150K context and 100 tokens/second in generation. Wow. This is the first time I've really noticed the power of this machine.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>22.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://zed.dev/blog/fastest-ai-code-editor">Zed: The Fastest AI Code Editor — Zed's Blog</a> is a pretty cool editor that finally comes with a good VIM implementation. It supports Coding Agents and is open to open weight and self-hosted models. To be honest, I really like it and it's genuinely fast. And it's written in Rust, which excites me even more.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://mistral.ai/news/mistral-small-4">Introducing Mistral Small 4 | Mistral AI</a> is another interesting candidate for the <a href="/en/2026/03/22/asus-ascent-gx10-asus-deutschland">ASUS Ascent GX10||ASUS Deutschland</a>, especially since I don't need side-car models for vision there, because the model itself already comes with vision capabilities built-in. And as a MoE model, it should also deliver good speed performance.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4">nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 · Hugging Face</a> will likely be the first large model on the <a href="/en/2026/03/22/asus-ascent-gx10-asus-deutschland">ASUS Ascent GX10||ASUS Deutschland</a> because it was trained optimized on NVFP4 - and thus does not experience any "dumbing down" due to quantization, but functions completely normally as expected. And it is optimized for agentic workflows, which should benefit OpenClaw, just as the 1M context, which can probably even be utilized in the model (different architecture than classic transformer-based models).</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://tailscale.com/wireguard-vpn">WireGuard® for Enterprise</a> sounds funny on a purely private blog with that name, but they have pretty affordable plans for VPN-like constructs that make it very easy to reach your local home devices while on the go. There are certainly other alternatives, but I think if I run my agent locally, I'd rather put the subscription money into a proper VPN service instead, where I get more value overall. Update: it's free for private users up to 3 users. Nice.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.asus.com/de/networking-iot-servers/desktop-ai-supercomputer/ultra-small-ai-supercomputers/asus-ascent-gx10/">ASUS Ascent GX10||ASUS Deutschland</a> is arriving in the next few days. AI powerhouse that will allow me to run larger models locally and, for example, operate an OpenClaw Agent autonomously at home without needing any subscriptions. I'm really looking forward to seeing what's possible with it.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>19.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>Cognee is also something I’ll keep an eye on for later. Basically a knowledge graph controlled by an LLM to make memory available for another LLM. Certainly exciting to play around with when I have good local hardware to run larger models on. But for now, just a memory keeper.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>Docker Model Runner Adds vLLM Support on macOS | Docker - at first just noticed, that could be interesting later because I can run models via Docker with vllm, while using Apple Silicon at the same time. Interesting here is that it comes as a Docker image ready to use, and I don't have to fiddle with setup. I'm currently working more with my own <a href="/en/2026/03/18/rfc1437-mlxserver-a-simple-mlx-based-server-for-small-models-to-run-locally">rfc1437/MLXServer: a simple MLX based server for small models to run locally</a> simply because I only need it for offline operation, but vllm-metal could be very exciting later.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>18.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/rfc1437/MLXServer">rfc1437/MLXServer: a simple MLX based server for small models to run locally</a> is a tool that I built (with AI assistance) to run small models directly locally, without heavy overhead. It doesn't consume much memory, has a built-in local chat for personal experiments, and feels significantly more practical to me compared to the big alternatives—fewer knobs to adjust, but consequently less confusion. I just want to run a small model locally for my on-the-road blog.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/mlx-community/Qwen3.5-9B-MLX-4bit">mlx-community/Qwen3.5-9B-MLX-4bit · Hugging Face</a> is another nice, small model — larger than the others, thus slightly more consistent in execution, but still pretty fast. And that's the upper limit of what you can run on a MacBook Air M4 with 16GB RAM without crashing the computer.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>16.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>Google/gemma-3-4b-it · Hugging Face is a pretty nice model that has been trained for many European languages and is therefore well suited for local translations – it loads under 4G into memory and occupies approximately 6.5G in interference during operation. And it has Vision Capability, so it can also be used to get image descriptions. Ideal, for example, to be used locally with bDS when you want to be offline on the go. And significantly smaller than <a href="https://huggingface.co/mlx-community/gemma-3-12b-it-4bit">mlx-community/gemma-3-12b-it-4bit · Hugging Face</a> – that was borderline on my Macbook Air.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>15.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://inferencer.com/">Inferencer | Run and Deeply Control Local AI Models</a> is an interesting tool that allows you to run LLMs locally. Of course, LM Studio or <a href="/en/2026/03/01/ollama">Ollama</a> or <a href="/en/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon">vllm-mlx</a> can do this as well. But Inferencer has a feature called "Model streaming" that's pretty cool: it can run models that are actually too large for memory. Of course, you're trading time for memory, but for a local model for image captioning or similar smaller tasks, you could definitely use it. However, I have the feeling that the model becomes somewhat more fragile this way - for example, it suddenly doesn't use tools correctly anymore (I tried it with gemma3 12b, which is just scratching the memory limit of my laptop).</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://pagefind.app/">Pagefind | Pagefind — Static low-bandwidth search at scale</a> is a static search engine for statically generated HTML, like my blog. And it will soon power the search on this blog. No external dependencies, no server, no infrastructure complexity - just a few additional files that get uploaded. And of course active JavaScript in the browser.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>14.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://shittycodingagent.ai/">pi.dev</a> is a minimalist harness for agentic coding whose focus is not on features, but on extensibility. The underlying idea is solid: a very simple harness that can be extended through TypeScript plugins, so the harness can adapt to your own workflow and requirements. Maybe I'll take a closer look at it soon.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>13.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/steveyegge/beads">steveyegge/beads: Beads - A memory upgrade for your coding agent</a> is a to-do list tool for agents. Essentially a memory system for projects that agents can use to manage themselves (storing tasks and features) and to coordinate more complex workflows where an agent needs to work through a series of issues and resolve them. Tasks can have dependencies, and agents only see the set of tasks that can actually be worked on right now. Interesting for projects where you want to run agents in loops to solve larger tasks.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/dolthub/doltgresql">dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL</a> is the PostgreSQL-flavored partner of <a href="/en/2026/03/13/dolthub-dolt-dolt-git-for-data">dolthub/dolt: Dolt – Git for Data</a> and offers the same features, but with PostgreSQL syntax and a binary interface that is compatible with PostgreSQL.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/dolthub/dolt?tab=readme-ov-file">dolthub/dolt: Dolt – Git for Data</a> is a SQL database that internally uses mechanisms similar to git, thereby supporting data branches and merges and generally providing the ability to version data in the database and work with history. And like git, it also allows data changes to be distributed via version control. In principle, "slow transaction shipping".</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/paperclipai/paperclip">paperclipai/paperclip: Open-source orchestration for zero-human companies</a> is an approach to orchestrating and managing agents. What's interesting here is that it works with an organization modeled after a company structure and uses means to depict agent communication that could provide good transparency. I haven't tried it yet, but alongside <a href="https://github.com/steveyegge/gastown">gastown</a>, it's one of the more interesting projects on this topic. The whole field of agent orchestration is still quite new, so there's still a large area of experimentation, but it's exciting to watch.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://ghostty.org/">Ghostty</a> is the foundation that <a href="/en/2026/03/13/cmux-das-terminal-fur-multitasking">cmux — The Terminal for Multitasking</a> was built on. Generally also a very nice terminal that responds noticeably faster than the standard terminal and already works very well. What I didn't like was that tabs weren't automatically reopened in the appropriate directories when the program was closed. I simply have too many persistent sessions that I keep coming back to. cmux just does that better.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.cmux.dev/de">cmux — The Terminal for Multitasking</a> is a pretty brilliant terminal program for CLI workflows, which are experiencing a resurgence especially through agentic coding. And what I love about it: it has clean persistence of open workspaces where you can have multiple tabs, so I don't have to keep my work environment open all the time. I've always liked having various directories open directly because I switch back and forth between several while programming, and this works much better with CMUX than with anything else.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>12.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.nuget.org/packages/Photino.Blazor.CustomWindow">NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1</a> is a library for Photino Blazor that allows you to make windows chrome-less. That is, you can remove the title bar and standard decorations. The idea behind it is to gain more control over the look and feel and create more compact UIs. With this library, you get back basic functions like window resizing and other standard elements that users expect, but under full control of the application.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>07.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://velvetshark.com/openclaw-memory-masterclass">OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark</a> - interesting compilation of the memory system and the pitfalls with compaction in Openclaw. The agent is meant to run for a long time, but there is always the risk that compaction will strike right in the middle of complex situations. And openclaw runs autonomously, so you want to be sure that it continues continuously.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>05.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/unum-cloud/USearch">unum-cloud/USearch</a> - that's what it says. So a library that offers an index for vectors that can come from embeddings, for example, and can find semantically similar texts. Not text-similar, but semantically, i.e., content. Interesting topic, the models required for this are related to LLMs, but not large, but small - they don't need to fully understand and generate because they only create vectors that can then be compared against each other and the higher the similarity, the higher the similarity of the texts in the topic. Cool little feature for bDS.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>02.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/waybarrios/vllm-mlx">waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.</a> I use this to run <a href="/en/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face">mlx-community/gemma-3-12b-it-4bit</a> on my MacBook Air. It works very well, a small shell script to start the server and then I am autonomous. Not as comfortable as Ollama, but it perfectly supports Apple's MLX and thus makes good use of Silicon.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/mlx-community/gemma-3-12b-it-4bit">mlx-community/gemma-3-12b-it-4bit · Hugging Face</a> is currently the best model for local operation, allowing me to implement image captioning and even local chat. It's not the fastest, as it's quite large, but it's absolutely suitable for offline operation if I come up with a few mechanisms for batch processing of images, etc. This could be super exciting for vacation times. An image description might take a minute, but hey, no dependencies.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>01.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://models.dev/">Models.dev — An open-source database of AI models</a> is a very practical site that provides framework parameters for all kinds of providers and all kinds of LLMs, including even API prices. And technical parameters such as input/output tokens.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://ollama.com/">Ollama</a> - a runtime environment for LLMs that allows models to be run locally. My favorite model at the moment: <a href="https://ollama.com/library/qwen2.5vl:7b-q4_K_M">qwen2.5vl:7b-q4_K_M</a>. With only 6.6 GB in size, this runs smoothly on a MacBook Air M4 and still has enough memory and capacity to run programs alongside it. The model is surprisingly usable in chat and above all has excellent vision capabilities. Ideal for providing titles, alt text, or summaries for images without having to pay big providers for it. And an important building block to bring bDS back to full-offline.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>28.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/mistralai/mistral-vibe">mistralai/mistral-vibe: Minimal CLI coding agent by Mistral</a> - accompanying the <a href="/en/2026/02/28/ai-studio-mistral-ai">AI Studio - Mistral AI</a> there is also the Vibe coding interface to Devstral as open source. Very nice, because it makes a good pair. Will definitely try it out, even if I will probably rather reach for the powerhouses (Opus 4.6) for larger projects.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://console.mistral.ai/home">AI Studio - Mistral AI</a> - as the situation in the USA becomes a bit more tense again, and simply because one should always check what is happening outside the USA, here is a link to a European alternative to the major US operators. Mistral offers a coding model with Mistral 2 that is not only open weights (i.e., freely available and operable if you have the necessary hardware), but also quite affordable when using Mistral itself. And the performance is slightly above Claude Haiku 4.5, and below Sonnet 4.5, but not by much. So quite usable and my first experiments were not bad. Unfortunately, no vision capability, so not very suitable for experiments with images (and therefore not ideal for my bDS), but still interesting enough to keep an eye on.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://niklas-luhmann-archiv.de/bestand/zettelkasten/zettel/ZK_1_NB_1_1_V">ZK I Zettel 1 (1) - Niklas Luhmann-Archiv</a> - where the inspiration for my blog comes from, or what has always driven me beneath the technical surface.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>If you, like me, want an overview of UI integration for LLMs and are wondering how A2UI and MCP Apps compare and what they offer: <a href="https://ricmac.org/2025/12/19/agent-ui-standards-multiply-mcp-apps-and-googles-a2ui/">Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus</a> helps. I have implemented A2UI in bDS so that the LLM can also use visual aspects in the internal chat, and I really like that. But the idea of incorporating parts of my UI into external agents is also fascinating. Even if I find that "local HTML/JS in an IFrame" somehow sounds like a hack at first, but much in the LLM environment gives me the feeling right now, simply because everything is pushed through a normal text stream and you hope that the LLMs adhere to the formats (even A2UI works like this).</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/cloudflare/cobweb">cloudflare/cobweb: COBOL to WebAssembly compiler</a> - I'll just leave this here. Let someone else clean up the old stuff. <a href="https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/">what else can you say</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://pyodide.org/en/stable/">Pyodide</a> is a bit of a lifesaver for me in bDS: I must admit, I'm not really super deep into TypeScript and I actually don't feel like writing it myself. If the AI does it, that's okay, there's enough knowledge for an LLM to draw on, but I don't really want to delve deep into it myself. And Python has been one of my favorite languages for a long time. And Pyodide offers exactly that: a port of CPython to WebAssembly. It provides a pleasant language for scripts and macros that can access everything the application does and - if I ever want to - can also load Python libraries.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://orm.drizzle.team/docs/overview">Drizzle ORM</a> - was suggested by AI during the construction of bDS and has proven to be very reliable. A clean ORM for TypeScript with a quite nice API that strongly reminds me of Django. Additionally, clean mapping of migrations, which then simply allow SQL, thus enabling more complex migrations. And so far completely unobtrusive in operation. What is particularly interesting: there is a direct translation to GraphQL, so that the objects can also be exposed to an API, which I think I should take a look at (or rather, I should complain to the AI that it should take a look at it). I am always a fan of flexible standard integrations to connect external tools.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://a2ui.org/">A2UI</a> is an interesting project for a streaming-oriented protocol for applications with LLM integration. The basic idea is streaming JSON snippets from which the UI is then incrementally built, and the LLM controls what goes into the UI. It allows the LLM to produce more than just simple textual descriptions or basic ASCII graphics and also gives LLM queries a different look. The whole thing comes from Google and is maintained on an open <a href="https://github.com/google/A2UI">github project</a>. In bDS, I have also integrated it, and it's quite something when you can get a heatmap of the distribution of your blog posts across the months.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>23.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/158572/waggle-dance">Waggle Dance</a> . oldie, but goldie. Always fun how this rather simple game can captivate people, even over 10 years after its release.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>22.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://opencode.ai/de">OpenCode | The Open-Source AI Coding Agent</a> - an open-source coding agent that could soon outperform Claude Code. Very good in execution and above all provider-agnostic. You can attach any model, even one self-hosted with LM Studio or ollama. If you just want to play around, you can simply download it and get started, even without providing a credit card (then of course with limited tokens, but quite usable for initial experiments. And independent of the major providers (ok, except for their models if you want to use them - and for serious coding, those are unfortunately still necessary). OpenCode also offers its own AI models, which are then billed, but a few models are always freely available and thus offer quite serious experimentation without investment.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/en/2026/02/22/steve-yegge-on-vibe-coding">Steve Yegge on Vibe Coding</a></h2>
|
||||
|
||||
<p>Steve Yegge talks in the interview about the future of programming and the challenges of vibe coding. The author shares his experiences and sees a upheaval comparable to the introduction of high-level languages.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/en/2026/02/22/neue-software-langsam-benutzbar">bDS slowly usable</a></h2>
|
||||
|
||||
<p>Now the new software is starting to be fun, everything you need for usage and creation is largely present. It still has a few minor flaws and there are one or two features I want, but I can already do everything I really need as a minimum. Publishing now works easily with a shell script:</p>
|
||||
<pre><code class="language-bash" data-code-language="bash">#!/bin/sh
|
||||
|
||||
cd ~/Blogs/rfc1437.de/html
|
||||
|
||||
rsync -rav --delete \
|
||||
--exclude='thumbnails/' \
|
||||
--exclude='media/' \
|
||||
* git.rfc1437.de:git-server/html/
|
||||
|
||||
cd ..
|
||||
|
||||
rsync -rav --delete thumbnails/ git.rfc1437.de:git-server/html/thumbnails/
|
||||
rsync -rav --exclude='*.meta' --delete media/ git.rfc1437.de:git-server/html/media/
|
||||
</code></pre>
|
||||
<p>Yes, that was just to test my source formatting. And?</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>16.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://git.rfc1437.de/hugo/rfc1437">Big Damn Stupid</a> - no, Blogging Desktop Server. Currently my favorite project where I play around with Vibe-Coding and build software with which I can run the blog. But this time with the clear perspective that I won't succumb to bit rot or the complexity spiral again. Simple software with a usable interface for maintaining blog posts, but storage as Markdown files with YAML front matter to be easily stable for the future. Then with sqlite for caching and full-text search and other comfort features and git for synchronizing the blog data, and git-lfs for the images. Feels quite usable right now.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.08.2023</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/300930/schotten-totten-2">Schotten Totten 2</a> is becoming one of our favorite two-player games. A remake of the old Schotten Totten (which unfortunately is no longer available under that name, only as Battle Line, but that only in English). Unlike the first game, now asymmetric with just enough difference in gameplay that the two sides definitely feel different, but still mostly doing the same things. Quick to set up, quick to play, and quick to put away with enough tactics to keep you hooked for a few games. And the graphic style is just nice.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/197405/tak">Tak</a> is quite an interesting game: <a href="https://en.wikipedia.org/wiki/Tak_(game)">inspired by a fantasy novel by Patrick Rothfuss</a>, brought to life as a fictional "classic" strategy game. The beauty of it: you can easily make it yourself if you want and are skilled. The rules are super simple and easy to learn, but the game is tricky with many opportunities to set traps for the opponent. It will probably be taken for our next vacation because it's practical to play outdoors.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>Because Google Authenticator annoys me: <a href="https://www.linux.org/threads/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy.36577/">In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org</a>. Keepassxc is much nicer, in my opinion, and is much more controllable for me.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>19.08.2023</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/en/2023/08/19/mal-wieder-auf-linux">Again on Linux ...</a></h2>
|
||||
|
||||
<p>... and of course, the surround sound of my notebook no longer works, for reasons. And fingerprint login makes a lot less sense when you have to enter the password for the keyring after login anyway. If it at least came up for the first time when a password was needed, that would be okay, but it comes up directly after login. Bah.</p>
|
||||
<p>Otherwise, however, I am pleasantly surprised at how good the Linux support for the Lenovo T480 is. Everything else has been working flawlessly so far.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>11.11.2022</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/en/2022/11/11/autumn-leaves">Autumn Leaves</a></h2>
|
||||
|
||||
<p><img src="/media/2022/11/65232be1-264f-428e-93cb-1fd3788b2f47.jpg" alt="autumn leaf against fuzzy background with other leaves and sky"></p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<nav class="preview-pagination" aria-label="Pagination">
|
||||
|
||||
<span class="spacer"></span>
|
||||
|
||||
|
||||
|
||||
<a href="/en/page/2/" class="preview-pagination-link" aria-label="older">older</a>
|
||||
|
||||
</nav>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/close.png
Normal file
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/close.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 280 B |
Binary file not shown.
|
After Width: | Height: | Size: 8.3 KiB |
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/next.png
Normal file
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/next.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/prev.png
Normal file
BIN
fixtures/golden-generated-sites/rfc1437-sample/images/prev.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
943
fixtures/golden-generated-sites/rfc1437-sample/index.html
Normal file
943
fixtures/golden-generated-sites/rfc1437-sample/index.html
Normal file
@@ -0,0 +1,943 @@
|
||||
<!doctype html>
|
||||
<html lang="de" data-language-prefix="">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Content-type: matter-transport/sentient-life-form</title>
|
||||
|
||||
<link rel="stylesheet" href="/assets/pico.slate.min.css" />
|
||||
<link rel="stylesheet" href="/assets/lightbox.min.css" />
|
||||
<link rel="stylesheet" href="/assets/highlight.min.css" />
|
||||
<link rel="stylesheet" href="/assets/vanilla-calendar.min.css" />
|
||||
<link rel="stylesheet" href="/assets/bds.css" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml" />
|
||||
|
||||
<script defer src="/assets/highlight.min.js"></script>
|
||||
<script defer src="/assets/code-enhancements.js"></script>
|
||||
<script defer src="/assets/d3.layout.cloud.js"></script>
|
||||
<script defer src="/assets/tag-cloud.js"></script>
|
||||
<script defer src="/assets/lightbox.min.js"></script>
|
||||
<script defer src="/assets/vanilla-calendar.min.js"></script>
|
||||
<script defer src="/assets/calendar-runtime.js"></script>
|
||||
<script defer src="/assets/search-runtime.js"></script>
|
||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css" />
|
||||
<script defer src="/pagefind/pagefind-ui.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<nav class="language-switcher" aria-label="Sprache">
|
||||
|
||||
|
||||
<span class="language-switcher-badge language-switcher-badge-current" aria-current="true" title="de">🇩🇪</span>
|
||||
|
||||
|
||||
|
||||
<a class="language-switcher-badge" href="/en" data-lang-prefix="/en" title="en">🇬🇧</a>
|
||||
|
||||
|
||||
<div class="blog-search-widget" aria-label="Seitensuche">
|
||||
<button type="button" class="blog-search-toggle" data-blog-search-toggle aria-label="Seitensuche">
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<circle cx="11" cy="11" r="8"></circle>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="blog-search-panel" data-blog-search-panel hidden>
|
||||
<div id="blog-search" data-blog-search-root data-search-placeholder="Suchen..."></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
(function(){
|
||||
var links=document.querySelectorAll('.language-switcher-badge[data-lang-prefix]');
|
||||
var path=location.pathname.replace(/^\/[a-z]{2}(?=\/|$)/,'') || '/';
|
||||
links.forEach(function(a){a.href=(a.dataset.langPrefix||'')+path;});
|
||||
}());
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 class="archive-heading">Content-type: matter-transport/sentient-life-form</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="blog-menu">
|
||||
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/">Home</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item blog-menu-item-with-children">
|
||||
|
||||
<span class="blog-menu-link">Bilderarchiv</span>
|
||||
|
||||
|
||||
<div class="blog-menu-submenu">
|
||||
<ul class="blog-menu-list">
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2022/">Bilderarchiv 2022</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2016/">Bilderarchiv 2016</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2015/">Bilderarchiv 2015</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2014/">Bilderarchiv 2014</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2013/">Bilderarchiv 2013</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2012/">Bilderarchiv 2012</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2011/">Bilderarchiv 2011</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2010/">Bilderarchiv 2010</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2009/">Bilderarchiv 2009</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2008/">Bilderarchiv 2008</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2005/">Bilderarchiv 2005</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2004/">Bilderarchiv 2004</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/bilderarchiv-2003/">Bilderarchiv 2003</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/picture/">Fotoblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/tag-cloud/">Tag Cloud</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/spielelog/">Spieleblog</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/category/kochbuch/">Kochbuch</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/wiki/">Wiki</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="blog-menu-item">
|
||||
|
||||
<a class="blog-menu-link" href="/impressum/">Impressum</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="blog-menu-item blog-menu-calendar">
|
||||
<button
|
||||
type="button"
|
||||
class="blog-menu-calendar-button"
|
||||
data-blog-calendar-toggle
|
||||
data-blog-calendar-year="2026"
|
||||
data-blog-calendar-month="4"
|
||||
aria-label="Kalender öffnen"
|
||||
title="Kalender öffnen"
|
||||
>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" focusable="false">
|
||||
<rect x="3" y="5" width="18" height="16" rx="2" ry="2"></rect>
|
||||
<line x1="3" y1="9" x2="21" y2="9"></line>
|
||||
<line x1="8" y1="3" x2="8" y2="7"></line>
|
||||
<line x1="16" y1="3" x2="16" y2="7"></line>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<section
|
||||
id="blog-calendar"
|
||||
class="blog-calendar-panel"
|
||||
data-blog-calendar-panel
|
||||
data-i18n-loading="Kalender wird geladen …"
|
||||
data-i18n-error="Kalenderdaten konnten nicht geladen werden."
|
||||
hidden
|
||||
>
|
||||
<header class="blog-calendar-header">
|
||||
<strong>Archivkalender</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="blog-calendar-close"
|
||||
data-blog-calendar-close
|
||||
aria-label="Kalender schließen"
|
||||
title="Kalender schließen"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</header>
|
||||
<div class="blog-calendar-content">
|
||||
<div data-blog-calendar-root></div>
|
||||
<p class="blog-calendar-status" data-blog-calendar-status>Kalender wird geladen …</p>
|
||||
</div>
|
||||
</section>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
<section class="post-list" data-template="post-list" data-list-page="true" data-first-page="true" data-last-page="false">
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>01.04.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/stonerl/Thaw">stonerl/Thaw: Menu bar manager for macOS 26</a> - hilft gegen das Notch auf Apple MacBooks. Schon peinlich, dass man ein extra Programm braucht, um das zu machen, und dass das System das nicht von Hause aus unterstützt.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>29.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/Fission-AI/OpenSpec?tab=readme-ov-file">Fission-AI/OpenSpec: Spec-driven development (SDD) for AI coding assistants.</a> ist eine leichtgewichtigere Variante zu <a href="/2026/03/27/juxt-allium-a-language-for-sharpening-intent-alongside-implementation">juxt/allium: A language for sharpening intent alongside implementation.</a>. Könnte auch ganz interessant sein, das Tooling ist weiter ausgebaut, dafür die Sprache schwächer. Allium ist wesentlich formaler und in Richtung Pseudocode.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/juxt/allium">juxt/allium: A language for sharpening intent alongside implementation.</a> ist ein sehr spannendes Projekt. Und zwar eine Spezifikationssprache für Verhalten von Softwaresystemen. Eine Sprache, für die es keine Laufzeitumgebung oder Compiler gibt, außer der LLM. Implementiert als Agent Skills. Super spannend, weil es unter anderem auch ein Distill gibt, mit dem man bestehende Software analysieren und retroaktiv Spezifikationen aufbauen kann, oder im Interviewverfahren mit der KI eine Spezifikation ausarbeiten kann, die für ein LLM deutlich präziser verständlich ist als allgemeines Englisch. Witziges Detail am Rande: ich habe Allium mit Qwen3-Coder-Next ausprobiert, meinem derzeitigen Lieblingsmodell für lokales Hosting, in <a href="/2026/03/14/pi-dev">pi.dev</a>. Ich konnte das binary für Allium (ein Syntaxchecker und Linter) nicht mit homebrew installieren, pi.dev hat einfach kurzerhand das Binary runtergeladen und selber installiert.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/scitrera/cuda-containers">scitrera/cuda-containers: Scitrera builds of various CUDA containers for version consistency, starting primarily with NVIDIA DGX Spark Containers</a> bin ja im Moment ein großer Fan von eugr/vllm-node als Basispaket, weil es immer aktuelle Versionen für vLLM bietet, aber wenn ich mal mit sglang spielen will, ist das hier vermutlich das ähnlichste Projekt. Mich interessiert da speziell EAGLE-3 spekulatives Dekodieren - im Prinzip werden dabei über ein sehr kleines Modell parallel Token generiert und das Hauptmodell guckt was passt und nimmt das, oder generiert selber wenn nötig. Dadurch kann man oft ein drittel der Token über ein viel schnelleres banales Modell im <3B Bereich generieren lassen und nur jedes dritte wirklich über das große Modell.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/thushan/olla">thushan/olla: High-performance lightweight proxy and load balancer for LLM infrastructure. Intelligent routing, automatic failover and unified model discovery across local and remote inference backend</a> ist nach dem Debakel von LiteLLM (gehackte supply-chain mit Datenextraktor im Paket) vielleicht die bessere Wahl. Für mich auf jeden Fall interessant, weil ich einfach nur zwei Modelle betreiben will und diese unter einem Endpunkt verfügbar machen will, und da sind alle anderen Pakete deutlicher Overkill.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>25.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://forums.developer.nvidia.com/t/running-mistral-small-4-119b-nvfp4-on-nvidia-dgx-spark-gb10/363863/26">Running Mistral Small 4 119B NVFP4 on NVIDIA DGX Spark (GB10) - DGX Spark / GB10 User Forum / DGX Spark / GB10 - NVIDIA Developer Forums</a> - live-saver Diskussion in den NVIDIA Foren. Mit dem was da steht habe ich Mistral Small 4 zum Fliegen bekommen. Und es läuft sauber mit 150K Context und 100 Token/Sekunde in der Generierung. Wow. Das ist das erste Mal, dass ich die Power der Kiste wirklich bemerke.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>22.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://zed.dev/blog/fastest-ai-code-editor">Zed: The Fastest AI Code Editor — Zed's Blog</a> ist ein ziemlich cooler Editor, der endlich auch mit einer guten VIM Implementation daher kommt. Unterstützt Coding Agents und ist offen für Open Weight und home-hosted Modelle. Gefällt mir ehrlich gesagt sehr gut und ist wirklich schnell. Und ist in Rust geschrieben, was mich nochmal mehr begeistert.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://mistral.ai/news/mistral-small-4">Introducing Mistral Small 4 | Mistral AI</a> ist ein weiterer interessanter Kandidat für die <a href="/2026/03/22/asus-ascent-gx10-asus-deutschland">ASUS Ascent GX10||ASUS Deutschland</a>, vor allem brauche ich dort keine Side-car Modelle für Vision, weil das Modell selber auch schon gleich Vision mitbring. Und als MoE Modell dürfte es auch gut Speed hinlegen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4">nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 · Hugging Face</a> wird wahrscheinlich das erste große Modell auf der <a href="/2026/03/22/asus-ascent-gx10-asus-deutschland">ASUS Ascent GX10||ASUS Deutschland</a> werden, weil es optimiert auf NVFP4 trainiert wurde - und damit nicht eine "verdummung" erfährt, wegen der Quantisierung, sondern ganz normal wie erwartet funktioniert. Und es ist auf agentische Workflows optimiert, was OpenClaw begünstigen sollte, genauso wie der 1M Context, der in dem Modell vermutlich sogar genutzt werden kann (andere Architektur als klassische Transformer basierte Modelle).</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://tailscale.com/wireguard-vpn">WireGuard® for Enterprise</a> klingt komisch auf einem rein privaten Blog mit dem Namen, aber die haben recht günstige Tarife für VPN-ähnliche Konstrukte, mit denen man sehr leicht seine lokalen Geräte zu Hause auch von Unterwegs erreichbar machen kann. Gibt sicherlich auch andere Alternativen, aber ich glaube wenn ich meinen Agent lokal laufen lasse, stecke ich das Geld für Subscriptions lieber in einen ordentlichen VPN Dienst, da habe ich generell mehr von. Update: ist kostenlos für Privatbenutzer bis 3 User. Nett.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.asus.com/de/networking-iot-servers/desktop-ai-supercomputer/ultra-small-ai-supercomputers/asus-ascent-gx10/">ASUS Ascent GX10||ASUS Deutschland</a> kommt in den nächsten Tagen. KI Bolide, der es mir erlauben wird, auch größere Modelle lokal zu betreiben und z.B. einen OpenClaw Agent autonom zu Hause zu betreiben, ohne dafür dann auch noch Subscriptions zu brauchen. Bin schon echt gespannt, was damit geht. Kommt mit angepasstem Ubuntu, auch ein nettes Detail.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>19.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/topoteretes/cognee">topoteretes/cognee: Knowledge Engine for AI Agent Memory in 6 lines of code</a> ist auch etwas, das ich mir für später merke. Im Prinzip ein Wissens-Graph der über eine LLM gesteuert aufgebaut wird, um Memory für eine andere LLM verfügbar zu machen. Sicherlich spannend damit zu spielen, wenn ich mal eine gute lokale Hardware habe, auf der ich größere Modelle betreiben kann. Aber für jetzt nur ein Merker.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.docker.com/blog/docker-model-runner-vllm-metal-macos/">Docker Model Runner Adds vLLM Support on macOS | Docker</a> - erstmal nur gemerkt, das könnte später interessant werden, weil ich darüber Modelle über Docker mit vllm betreiben kann, bei gleichzeitiger Nutzung von Apple Silicon. Interessant daran ist hier, dass es als Docker Image fertig konfiguriert kommt und ich mich nicht mit Setup rumschlagen muss. Im Moment arbeite ich ja eher mit meinem eigenen <a href="/2026/03/18/rfc1437-mlxserver-a-simple-mlx-based-server-for-small-models-to-run-locally">rfc1437/MLXServer: a simple MLX based server for small models to run locally</a>, einfach weil ich es eh nur für den Offline-Betrieb brauche, aber für später könnte vllm-metal sehr spannend sein.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>18.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/rfc1437/MLXServer">rfc1437/MLXServer: a simple MLX based server for small models to run locally</a> ist ein Tool, das ich mir (KI-gestützt) gebaut habe, um kleine Modelle direkt lokal auszuführen, ohne großen Ballast. Das frisst nicht viel Speicher, hat gleich einen lokalen Chat eingebaut für eigene Experimente und fühlt sich für mich deutlich praktischer an als die großen Alternativen - weniger Knöpfe zum Einstellen, aber dadurch auch weniger Verwirrung. Ich will ja einfach nur ein kleines Modell lokal betreiben für mein Blog on-the-road.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/mlx-community/Qwen3.5-9B-MLX-4bit">mlx-community/Qwen3.5-9B-MLX-4bit · Hugging Face</a> ist noch ein weiteres nettes kleines Modell - größer als die anderen, dadurch aber auch etwas konsistenter in der Ausführung, aber immer noch echt fix. Und ist so die Obergrenze, was man auf einem MacBook Air M4 mit 16G Ram betreiben kann, ohne den Rechner zu crashen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>16.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/google/gemma-3-4b-it">google/gemma-3-4b-it · Hugging Face</a> ist ein ziemlich nettes Modell, dass für viele europäische Sprachen trainiert ist und daher gut für Übersetzungen lokal benutzt werden kann - es lädt unter 4G in den Speicher und belegt im Betrieb in der Interferenz ca. 6.5G. Und es hat Vision Capability, kann also auch benutzt werden um Bildbeschreibungen zu bekommen. Ideal, um z.B. mit bDS als lokales Modell benutzt zu werden wenn man offline unterwegs sein will. Und deutlich kleiner als <a href="/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face">mlx-community/gemma-3-12b-it-4bit · Hugging Face</a> - das war bei meinem Macbook Air grenzwertig.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>15.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://inferencer.com/">Inferencer | Run and Deeply Control Local AI Models</a> ist ein interessantes Tool, mit dem man LLMs lokal betreiben kann. Das kann natürlich LM Studio oder <a href="/2026/03/01/ollama">Ollama</a> oder <a href="/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon">vllm-mlx</a> auch. Aber Inferencer hat ein Feature namens "Model streaming", das ziemlich cool ist: es kann Modelle betreiben, die eigentlich zu groß für den Speicher sind. Natürlich tauscht man da Zeit gegen Speicher, aber für ein lokales Modell zur Bildbetitelung oder ähnliche kleinere Sachen kann man das durchaus mal benutzen. Ich habe aber das Gefühl, dass das Modell dadurch irgendwie fragiler wird - z.B. nutzt es Tools plötzlich nicht mehr richtig (ich habs mit gemma3 12b probiert, das so gerade an der Speichergrenze meines Laptops kratzt).</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://pagefind.app/">Pagefind | Pagefind — Static low-bandwidth search at scale</a> ist eine statische Suchmaschine für statisch generiertes HTML, so wie mein Blog. Und wird demnächst die Suche auf diesem Blog betreiben. Keine externen abhängigkeiten, kein Server, keine Komplexität der Infrastruktur - einfach nur ein paar zusätzliche Files, die mit hochgeladen werden. Und natürlich aktives JavaScript im Browser.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>14.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://shittycodingagent.ai/">pi.dev</a> ist ein minimalistischer Harness für agentic coding, dessen Fokus nicht auf Features, sondern auf Erweiterbarkeit liegt. Die Grundidee ist solide:. eine sehr einfache Harness die durch Typescript-Plugins erweitert werden kann, so dass sich die Harness an den eigenen Workflow anpassen und an die eigenen Anforderungen. Werde ich mir vielleicht demnächst mal angucken.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>13.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/steveyegge/beads">steveyegge/beads: Beads - A memory upgrade for your coding agent</a> ist ein Todo-Listen-Tool für Agenten. Im Prinzip ein Gedächtnis für Projekte über das sich Agenten steuern können (hinterlegen von Tasks und Features) und auch komplexere Abläufe gesteuert werden können, bei denen ein Agent über eine ganze Reihe von Issues laufen muss und diese lösen muss, wo Tasks abhängigkeiten haben können und Agenten nur den Satz an Aufgaben sehen, die auch wirklich gerade angegangen werden können. Interessant für Projekte, in denen man Agenten in Loops laufen lassen will, um größere Aufgaben zu lösen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/dolthub/doltgresql">dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL</a> ist der PostgreSQL-flavored Partner von <a href="/2026/03/13/dolthub-dolt-dolt-git-for-data">dolthub/dolt: Dolt – Git for Data</a> und bietet die gleichen Features, nur mit Anlehnung an PostgreSQL und einem Binär-Interface das zu PostgreSQL kompatibel ist.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/dolthub/dolt?tab=readme-ov-file">dolthub/dolt: Dolt – Git for Data</a> ist eine SQL Datenbank, die intern mit Mechanismen wie git arbeitet und dadurch Daten-Branches und Merges unterstützt und allgemein die Möglichkeit bietet, dass Daten in der Datenbank versioniert und mit History funktionieren. Und das ganze auch analog zu git erlaubt die Datenchanges über die Versionsverwaltung zu verteilen. Im Prinzip "slow transaction shipping".</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/paperclipai/paperclip">paperclipai/paperclip: Open-source orchestration for zero-human companies</a> ist ein Ansatz um Agenten zu orchestrieren und zu verwalten. Das interessante hier ist, dass es mit einer Organisation angelehnt an eine Firmenorganisation arbeitet und mit Mitteln die Kommunikation der Agenten abbildet, die eine gute Transparenz bieten könnte. Ich habe es noch nicht ausprobiert, aber neben <a href="https://github.com/steveyegge/gastown">gastown</a> eines der interessanteren Projekte zu diesem Thema. Das ganze Umfeld von Agent-Orchestrierung ist alles noch recht neu, von daher ist das noch ein großes Feld an Experimenten, aber spannend zu beobachten.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://ghostty.org/">Ghostty</a> ist die Basis, auf der <a href="/2026/03/13/cmux-das-terminal-fur-multitasking">cmux — Das Terminal für Multitasking</a> aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.cmux.dev/de">cmux — Das Terminal für Multitasking</a> ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>12.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://www.nuget.org/packages/Photino.Blazor.CustomWindow">NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1</a> ist eine Library für Photino Blazor, mit der man Fenster Chrome-less machen kann. Also Titelbalken und Standarddekorationen entfernen kann. Idee dahinter ist darüber mehr Kontrolle über das Look-and-Feel zu bekommen und kompaktere UIs zu schaffen. Mit dieser Library bekommt man dann Grundfunktionen zurück wie Fenstergrößenänderungen und andere Standardelemente, die Benutzer erwarten, aber unter voller Kontrolle der Anwendung.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>07.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://velvetshark.com/openclaw-memory-masterclass">OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark</a> - interessante Zusammenstellung des Memory-Systems und der Fallstricke mit Compaction bei Openclaw. Der Agent ist ja dazu da, über lange Zeit zu laufen, dadurch ist aber auch immer die Gefahr, dass Compaction gerade in komplexeren Situationen mitten drin zuschlägt. Und openclaw läuft autonom, also will man sicher sein, dass es auch kontinuierlich weitergeht.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>05.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/unum-cloud/USearch">unum-cloud/USearch</a> - drin was drauf steht. Also eine Library, die einen Index für Vektoren bietet, die z.B. aus Embedding stammen können und so semantisch ähnliche Texte finden können. Nicht Text-ähnlich, sondern semantisch, also Inhalt. Spannendes Thema, die dafür nötigen Modelle sind mit den LLMs verwandt, aber eben nicht large, sondern small - sie brauchen nicht voll zu verstehen und zu generieren, weil sie nur Vektoren erstellen, die dann gegeneinander verglichen werden können und je höher die Ähnlichkeit, desto höher die Ähnlichkeit der Texte im Thema. Cooles kleines Feature für bDS.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>02.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/waybarrios/vllm-mlx">waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.</a> Den benutze ich, um <a href="/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face">mlx-community/gemma-3-12b-it-4bit</a> auf meinem MacBook Air zu betreiben. Klappt sehr gut, kleines Shell-Script zum Starten des Servers und dann bin ich autonom. Nicht so komfortabel wie Ollama, aber dafür unterstützt es perfekt Apple's MLX und nutzt damit Silicon gut aus.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://huggingface.co/mlx-community/gemma-3-12b-it-4bit">mlx-community/gemma-3-12b-it-4bit · Hugging Face</a> ist das bisher beste Modell für lokalen Betrieb, mit dem ich die Bildbetitelung und sogar lokalen Chat realisieren kann. Nicht das schnellste, da es schon recht groß ist, aber für Offline-Betrieb absolut geeignet, wenn ich mir da ein paar Mechanismen für Batchverarbeitung von Bildern etc. einfallen lasse. Das könnte gerade für Urlaubszeiten super spannend sein. Eine Bildbeschreibung liegt dann zwar bei einer Minute, aber hey, dafür keine Abhängigkeiten.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>01.03.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://models.dev/">Models.dev — An open-source database of AI models</a> ist eine sehr praktische Seite, die für alle möglichen Anbieter und alle möglichen LLMs Rahmenparameter liefert, inklusive sogar API Preise. Und technische Parameter wie Input/Output Tokens.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://ollama.com/">Ollama</a> - eine Runtime-Umgebung für LLMs, die es erlaubt Modelle lokal zu betreiben. Mein Lieblingsmodell zur Zeit: <a href="https://ollama.com/library/qwen2.5vl:7b-q4_K_M">qwen2.5vl:7b-q4_K_M</a>. Mit nur 6.6 GB Größe läuft das problemlos auf einem MacBook Air M4 und hat noch genug Speicher und Kapazität frei um Programme nebenbei laufen zu lassen. Das Modell ist im Chat erstaunlich brauchbar und vor allem hat es klasse Vision-Fähigkeiten. Ideal um für Bilder Titel, Alt-Texte oder Zusammenfassungen zu liefern, ohne dafür Geld an große Provider abzudrücken. Und ein wichtiger Baustein, um bDS wieder zurück zu full-offline zu bringen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>28.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/mistralai/mistral-vibe">mistralai/mistral-vibe: Minimal CLI coding agent by Mistral</a> - begleitend zum <a href="/2026/02/28/ai-studio-mistral-ai">AI Studio - Mistral AI</a> gibt es die Vibe-Coding Oberfläche zu Devstral auch als Open Source. Sehr nett, weil es ein gutes Paar macht. Wird definitiv bei mir etwas ausprobiert, auch wenn ich sicherlich für große Projekte dann eher zu den Boliden (Opus 4.6) greifen würde.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://console.mistral.ai/home">AI Studio - Mistral AI</a> - da in den USA ja doch wieder die Lage etwas angespannter wird, und einfach weil man immer mal gucken sollte, was außerhalb der USA passiert, hier ein Link auf eine europäische Alternative zu den großen US Betreibern. Mistral bietet mit Devstral 2 ein Coding-Modell an, das nicht nur open weights ist (also frei zu bekommen und zu betreiben, wenn man die nötige Hardware hat), sondern auch im Betrieb bei Nutzung von Mistral selber recht günstig ist. Und die Leistung liegt etwas oberhalb Claude Haiku 4.5, und zwar unterhalb Sonnet 4.5, aber nicht super weit. Also durchaus brauchbar und meine ersten Experimente waren nicht schlecht. Leider keine Vision-Fähigkeit, also für Experimente mit Bildern nicht so geeignet (und daher für mein bDS nicht ideal), aber trotzdem spannend genug um es im Auge zu behalten.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://niklas-luhmann-archiv.de/bestand/zettelkasten/zettel/ZK_1_NB_1_1_V">ZK I Zettel 1 (1) - Niklas Luhmann-Archiv</a> - woher die Inspiration für mein Blog kommt, bzw. was mich immer unter der technischen Oberfläche bewegt hat.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>wer so wie ich gerne einen Überblick über UI-integration von LLMs haben möchte und sich fragt, wie A2UI und MCP Apps im Vergleich arbeiten und was sie bieten: <a href="https://ricmac.org/2025/12/19/agent-ui-standards-multiply-mcp-apps-and-googles-a2ui/">Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus</a> hilft. Ich habe in bDS ja A2UI implementiert, damit im internen Chat das LLM auch visuelle Aspekte nutzen kann, und das gefällt mir schon sehr gut. Aber die Idee, Teile meines UI auch in externe Agents einzubringen ist auch faszinierend. Auch wenn ich finde, dass "lokales HTML/JS in einem IFrame" irgendwie erstmal nach Hack klingt, aber vieles im LLM Umfeld gibt mir das Gefühl im Moment, einfach weil ja alles über einen normalen Text-Stream geschoben wird und man hofft, dass die LLMs sich an die Formate halten (selbst A2UI arbeitet so).</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://github.com/cloudflare/cobweb">cloudflare/cobweb: COBOL to WebAssembly compiler</a> - ich lass das einfach mal hier liegen. Soll doch jemand anders den alten Kram wegräumen. <a href="https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/">was soll man da auch anderes sagen</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://pyodide.org/en/stable/">Pyodide</a> ist so ein bisschen mein Lebensretter in bDS: ich muss nämlich gestehen, ich bin jetzt nicht wirklich super tief in TypeScript drin und hab auch eigentlich keine Lust das selber zu schreiben. Wenn die KI das macht, ist das ok, da gibt es genug Wissen auf das ein LLM zurückgreifen kann, aber ich will eigentlich nicht mich da tief einarbeiten. Und Python ist schon seit langem eine meiner favorisierten Sprachen. Und Pyodide bietet genau das: eine Portierung von CPython auf WebAssembly. Das bietet eine angenehme Sprache für Scripte und Makros, die aber auf alles zugreifen kann, was die Applikation macht und - wenn ich das mal will - auch Python Libraries ladenm kann.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://orm.drizzle.team/docs/overview">Drizzle ORM</a> - war ein Vorschlag der KI beim Bau von bDS und hat sich sehr bewährt. Sauberer ORM für TypeScript mit einer recht netten API, die mich stark an Django erinnert. Zusätzlich saubere Abbildung von Migrations, die dann aber einfach SQL erlauben, also auch komplexere Migrationen ermöglichen. Und bisher völlig unauffällig im Betrieb. Was besonders interessant ist: da gibts eine direkte Übersetzung nach GraphQL, so dass man die objekte dann auch nach außen auf ein API legen kann, was ich mir glaube ich mal angucken sollte (bzw. mich bei der KI beschweren sollte, dass es sich das mal anguckt). Ich bin ja immer ein Fan von flexiblen Standard-Integrationen um externe Tools anzubinden.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://a2ui.org/">A2UI</a> ist ein interessantes Projekt für ein streaming-orientiertes Protokoll für Anwendungen mit LLM Integration. Die Grundidee ist Streaming von JSON Schnipseln aus denen sich dann inkrementell das UI zusammenbaut, und das LLM hat die Kontrolle darüber, was in das UI rein wandert. Es erlaubt dem LLM mehr als nur simple textuelle Beschreibungen oder einfache Ascii-Grafiken zu produzieren und gibt auch Rückfragen des LLM eine andere Optik. Das ganze kommt von Google und wird auf einem offenen <a href="https://github.com/google/A2UI">github Projekt</a> gepflegt. In bDS habe ich das ganze auch eingebaut und das hat schon was, wenn man über seine Blogposts eine Heatmap der Verteilung auf die Monate bekommen kann.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>23.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/158572/waggle-dance">Waggle Dance</a> . oldie, but goldie. Immer wieder spaßig wie dieses doch recht einfache Spiel die Leute mitnehmen kann, auch über 10 Jahren nach seiner Veröffentlichung.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>22.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://opencode.ai/de">OpenCode | Der Open-Source AI-Coding-Agent</a> - ein open-source coding agent der so langsam Claude Code den Rang ablaufen könnte. Sehr gut in der Ausführung und vor allem Provider-agnostisch. Man kann jedes Modell anhängen, sogar ein selber lokal gehostetes mit LM Studio oder ollama. Wenn man einfach mal spielen will, kann man es auch einfach nur runterladen und loslegen, sogar ohne eine Kreditkarte zu hinterlegen (dann natürlich mit limitierten Tokens, aber für erste Experimente durchaus nutzbar. Und unabhängig von den großen Anbietern (ok, außer deren Modelle, wenn man die benutzen will - und für ernsthaftes Coding sind die leider noch notwendig). OpenCode bietet auch selber AI Modelle an, die dann abgerechnet werden, aber ein paar Modelle sind immer frei verfügbar und bieten damit durchaus ernsthaftes Experimentieren ohne Investment.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/2026/02/22/steve-yegge-on-vibe-coding">Steve Yegge on Vibe Coding</a></h2>
|
||||
|
||||
<p>Steve Yegge spricht im Interview über die Zukunft der Programmierung und die Herausforderungen des Vibe Codings. Der Autor teilt seine Erfahrungen und sieht einen Umbruch vergleichbar mit der Einführung von Hochsprachen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/2026/02/22/neue-software-langsam-benutzbar">bDS langsam benutzbar</a></h2>
|
||||
|
||||
<p>So langsam macht die neue Software Spaß, alles was man für die Benutzung und Erstellung braucht ist weitestgehend vorhanden. Ein paar kleine Schönheitsfehler hat sie moch und es gibt noch das eine oder andere Feature, das ich will, aber ich kann schon alles machen, was ich wirklich als Minimum brauche. Veröffentlichen geht jetzt einfach mit einem shell script:</p>
|
||||
<pre><code class="language-bash" data-code-language="bash">#!/bin/sh
|
||||
|
||||
cd ~/Blogs/rfc1437.de/html
|
||||
|
||||
rsync -rav --delete \
|
||||
--exclude='thumbnails/' \
|
||||
--exclude='media/' \
|
||||
* git.rfc1437.de:git-server/html/
|
||||
|
||||
cd ..
|
||||
|
||||
rsync -rav --delete thumbnails/ git.rfc1437.de:git-server/html/thumbnails/
|
||||
rsync -rav --exclude='*.meta' --delete media/ git.rfc1437.de:git-server/html/media/
|
||||
</code></pre>
|
||||
<p>Ja, das war jetzt nur um meine Source-Formatierung zu testen. Und?</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>16.02.2026</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://git.rfc1437.de/hugo/rfc1437">Big Damn Stupid</a> - ne, Blogging Desktop Server. Im Moment mein Lieblingsprojekt an dem ich mit Vibe-Coding herumspiele und mir eine Software baue, mit der ich das Blog betreiben kann. Aber diesmal mit der klaren Perspektive, dass ich nicht wieder dem Bitrot oder der Komplexitätsspirale erliege. Simple Software mit brauchbarer Oberfläche für die Pflege der Blogbeiträge, aber die Speicherung als Markdown Files mit YAML Frontmatter um einfach stabil für die Zukunft zu sein. Das ganze dann mit sqlite für Caching und Volltextsuche und andere Komfort-Features und git für die Synchronisation der Blog-Daten, und git-lfs für die Bilder. Fühlt sich gerade richtig brauchbar an.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>27.08.2023</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/300930/schotten-totten-2">Schotten Totten 2</a> entwickelt sich zu einem unserer Lieblings-Spiele für zwei Spieler. Ein Remake des alten Schotten Totten (das es leider nicht mehr zu kaufen gibt unter dem Namen, nur als Battle Line, aber das eben nur auf Englisch). Im Gegensatz zum ersten Spiel jetzt asymmetrisch mit gerade genug Unterschied in der Spielweise, dass sich die beiden Seiten definitiv unterschiedlich anfühlen, aber trotzdem noch größtenteils die gleichen Sachen machen. Schnell aufgebaut, schnell gespielt und schnell weggeräumt mit genug Taktik um einen für ein paar Spiele zu fesseln. Und der Grafik-Stil ist einfach nett.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p><a href="https://boardgamegeek.com/boardgame/197405/tak">Tak</a> ist ein ziemlich interessantes Spiel: <a href="https://en.wikipedia.org/wiki/Tak_(game)">inspiriert aus einem Fantasy-Roman von Patrick Rothfuss</a>, zum Leben erweckt als eine fiktives "klassisches" Strategiespiel. Das schöne daran: man kann es sich problemlos selber machen, wenn man will und geschickt ist. Die Regeln sind super simpel und leicht gelernt, das Spiel aber trickreich mit vielen Möglichkeiten dem Gegner Fallen zu stellen. Wird vermutlich für unseren nächsten Urlaub mitgenommen, weil praktisch zum Draussen spielen.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
|
||||
<p>Weil mich Google Authenticator ärgert: <a href="https://www.linux.org/threads/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy.36577/">In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org</a>. Keepassxc ist deutlich netter, wie ich finde, und ist deutlich kontrollierbarer für mich.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>19.08.2023</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/2023/08/19/mal-wieder-auf-linux">Mal wieder auf Linux ...</a></h2>
|
||||
|
||||
<p>... und natürlich tuts Surround-Sound meines Notebooks nicht mehr, aus Gründen. Und Fingerprint-Login macht weitaus weniger Sinn, wenn man nach Login dann doch das Passwort für den Keyring eingeben muss. Wenn der wenigstens erst beim ersten Bedarf nach einem Passwort käme, dann wärs ja ok, aber der geht direkt nach Login auf. Bah.</p>
|
||||
<p>Ansonsten bin ich allerdings angenehm überrascht davon, wie gut die Linux-Unterstützung für das Lenovo T480 ist. Alles andere funktioniert bisher tadellos.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div class="archive-day-separator" aria-hidden="true"></div>
|
||||
|
||||
|
||||
|
||||
<section class="archive-day-group">
|
||||
<aside class="archive-day-marker"><span>11.11.2022</span></aside>
|
||||
<div class="archive-day-posts">
|
||||
|
||||
<div class="post">
|
||||
|
||||
|
||||
|
||||
<h2 class="post-title"><a href="/2022/11/11/autumn-leaves">Herbstblätter</a></h2>
|
||||
|
||||
<p><img src="/media/2022/11/65232be1-264f-428e-93cb-1fd3788b2f47.jpg" alt="Herbstblatt gegen unscharfen Hintergrund mit anderen Blättern und Himmel"></p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<nav class="preview-pagination" aria-label="Seitennummerierung">
|
||||
|
||||
<span class="spacer"></span>
|
||||
|
||||
|
||||
|
||||
<a href="/page/2/" class="preview-pagination-link" aria-label="älter">älter</a>
|
||||
|
||||
</nav>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
630
fixtures/golden-generated-sites/rfc1437-sample/rss.xml
Normal file
630
fixtures/golden-generated-sites/rfc1437-sample/rss.xml
Normal file
@@ -0,0 +1,630 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<channel>
|
||||
<title>rfc1437</title>
|
||||
<link>https://www.rfc1437.de/</link>
|
||||
<description>Content-type: matter-transport/sentient-life-form</description>
|
||||
<lastBuildDate>Sun, 15 Mar 2026 09:36:46 GMT</lastBuildDate>
|
||||
<generator>bDS</generator>
|
||||
<item>
|
||||
<title>Pagefind | Pagefind — Static low-bandwidth search at scale</title>
|
||||
<link>https://www.rfc1437.de/2026/03/15/pagefind-pagefind-static-low-bandwidth-search-at-scale</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/15/pagefind-pagefind-static-low-bandwidth-search-at-scale</guid>
|
||||
<pubDate>Sun, 15 Mar 2026 09:36:46 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist eine statische Suchmaschine für statisch generiertes HTML, so wie mein Blog. Und wird demnächst die Suche auf diesem Blog betreiben. Keine externen abhängigkeiten, kein Server, keine Komplexität der Infrastruktur - einfach nur ein paar zusätzliche Files, die mit hochgeladen werden. Und natürlich aktives JavaScript im Browser.</p>]]></description>
|
||||
<content:encoded>< ist eine statische Suchmaschine für statisch generiertes HTML, so wie mein Blog. Und wird demnächst die Suche auf diesem Blog betreiben. Keine externen abhängigkeiten, kein Server, keine Komplexität der Infrastruktur - einfach nur ein paar zusätzliche Files, die mit hochgeladen werden. Und natürlich aktives JavaScript im Browser.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>javascript</category>
|
||||
<category>nodejs</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>pi.dev</title>
|
||||
<link>https://www.rfc1437.de/2026/03/14/pi-dev</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/14/pi-dev</guid>
|
||||
<pubDate>Sat, 14 Mar 2026 20:38:58 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein minimalistischer Harness für agentic coding, dessen Fokus nicht auf Features, sondern auf Erweiterbarkeit liegt. Die Grundidee ist solide:. eine sehr einfache Harness die durch Typescript-Plugins erweitert werden kann, so dass sich die Harness an den eigenen Workflow anpassen und an die eigenen Anforderungen. Werde ich mir vielleicht demnächst mal angucken.</p>]]></description>
|
||||
<content:encoded>< ist ein minimalistischer Harness für agentic coding, dessen Fokus nicht auf Features, sondern auf Erweiterbarkeit liegt. Die Grundidee ist solide:. eine sehr einfache Harness die durch Typescript-Plugins erweitert werden kann, so dass sich die Harness an den eigenen Workflow anpassen und an die eigenen Anforderungen. Werde ich mir vielleicht demnächst mal angucken.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>vibecoding</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>steveyegge/beads: Beads - A memory upgrade for your coding agent</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/steveyegge-beads-beads-a-memory-upgrade-for-your-coding-agent</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/steveyegge-beads-beads-a-memory-upgrade-for-your-coding-agent</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 16:10:34 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein Todo-Listen-Tool für Agenten. Im Prinzip ein Gedächtnis für Projekte über das sich Agenten steuern können (hinterlegen von Tasks und Features) und auch komplexere Abläufe gesteuert werden können, bei denen ein Agent über eine ganze Reihe von Issues laufen muss und diese lösen muss, wo Tasks abhängigkeiten haben können und Agenten nur den Satz an Aufgaben sehen, die auch wirklich gerade angegangen werden können. Interessant für Projekte, in denen man Agenten in Loops laufen lassen will, um größere Aufgaben zu lösen.</p>]]></description>
|
||||
<content:encoded>< ist ein Todo-Listen-Tool für Agenten. Im Prinzip ein Gedächtnis für Projekte über das sich Agenten steuern können (hinterlegen von Tasks und Features) und auch komplexere Abläufe gesteuert werden können, bei denen ein Agent über eine ganze Reihe von Issues laufen muss und diese lösen muss, wo Tasks abhängigkeiten haben können und Agenten nur den Satz an Aufgaben sehen, die auch wirklich gerade angegangen werden können. Interessant für Projekte, in denen man Agenten in Loops laufen lassen will, um größere Aufgaben zu lösen.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>vibecoding</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/dolthub-doltgresql-doltgresql-version-controlled-postgresql</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/dolthub-doltgresql-doltgresql-version-controlled-postgresql</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 15:17:32 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist der PostgreSQL-flavored Partner von [dolthub/dolt: Dolt – Git for Data](/posts/dolthub-dolt-dolt-git-for-data) und bietet die gleichen Features, nur mit Anlehnung an PostgreSQL und einem Binär-Interface das zu PostgreSQL kompatibel ist.</p>]]></description>
|
||||
<content:encoded>< ist der PostgreSQL-flavored Partner von [dolthub/dolt: Dolt – Git for Data](/posts/dolthub-dolt-dolt-git-for-data) und bietet die gleichen Features, nur mit Anlehnung an PostgreSQL und einem Binär-Interface das zu PostgreSQL kompatibel ist.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>postgresql</category>
|
||||
<category>datenbank</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>dolthub/dolt: Dolt – Git for Data</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/dolthub-dolt-dolt-git-for-data</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/dolthub-dolt-dolt-git-for-data</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 15:17:25 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist eine SQL Datenbank, die intern mit Mechanismen wie git arbeitet und dadurch Daten-Branches und Merges unterstützt und allgemein die Möglichkeit bietet, dass Daten in der Datenbank versioniert und mit History funktionieren. Und das ganze auch analog zu git erlaubt die Datenchanges über die Versionsverwaltung zu verteilen. Im Prinzip "slow transaction shipping".</p>]]></description>
|
||||
<content:encoded>< ist eine SQL Datenbank, die intern mit Mechanismen wie git arbeitet und dadurch Daten-Branches und Merges unterstützt und allgemein die Möglichkeit bietet, dass Daten in der Datenbank versioniert und mit History funktionieren. Und das ganze auch analog zu git erlaubt die Datenchanges über die Versionsverwaltung zu verteilen. Im Prinzip "slow transaction shipping".</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>datenbank</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>paperclipai/paperclip: Open-source orchestration for zero-human companies</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/paperclipai-paperclip-open-source-orchestration-for-zero-human-companies</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/paperclipai-paperclip-open-source-orchestration-for-zero-human-companies</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 15:00:21 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein Ansatz um Agenten zu orchestrieren und zu verwalten. Das interessante hier ist, dass es mit einer Organisation angelehnt an eine Firmenorganisation arbeitet und mit Mitteln die Kommunikation der Agenten abbildet, die eine gute Transparenz bieten könnte. Ich habe es noch nicht ausprobiert, aber neben [gastown](https://github.com/steveyegge/gastown) eines der interessanteren Projekte zu diesem Thema. Das ganze Umfeld von Agent-Orchestrierung ist alles noch recht neu, von daher ist das noch ein großes Feld an Experimenten, aber spannend zu beobachten.</p>]]></description>
|
||||
<content:encoded>< ist ein Ansatz um Agenten zu orchestrieren und zu verwalten. Das interessante hier ist, dass es mit einer Organisation angelehnt an eine Firmenorganisation arbeitet und mit Mitteln die Kommunikation der Agenten abbildet, die eine gute Transparenz bieten könnte. Ich habe es noch nicht ausprobiert, aber neben [gastown](https://github.com/steveyegge/gastown) eines der interessanteren Projekte zu diesem Thema. Das ganze Umfeld von Agent-Orchestrierung ist alles noch recht neu, von daher ist das noch ein großes Feld an Experimenten, aber spannend zu beobachten.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>vibecoding</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Ghostty</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/ghostty</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/ghostty</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 11:38:27 GMT</pubDate>
|
||||
<description>< ist die Basis, auf der [cmux — Das Terminal für Multitasking](/posts/cmux-das-terminal-fur-multitasking) aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p>]]></description>
|
||||
<content:encoded>< ist die Basis, auf der [cmux — Das Terminal für Multitasking](/posts/cmux-das-terminal-fur-multitasking) aufgebaut wurde. Generell ebenfalls ein sehr nettes Terminal, das auch deutlich schneller reagiert als das Standardterminal und auch schon sehr gut funktioniert. Was mir nicht gefiel, war dass Tabs nicht automatisch in den passenden Pfaden wieder neu geöffnet wurden, wenn das Programm beendet wurde. Ich habe einfach zu lange persistente Sessions, die ich immer wieder aufgreife. Das macht cmux einfach besser.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>sysadmin</category>
|
||||
<category>mac-os-x</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>cmux — Das Terminal für Multitasking</title>
|
||||
<link>https://www.rfc1437.de/2026/03/13/cmux-das-terminal-fur-multitasking</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/13/cmux-das-terminal-fur-multitasking</guid>
|
||||
<pubDate>Fri, 13 Mar 2026 07:21:42 GMT</pubDate>
|
||||
<description>< ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p>]]></description>
|
||||
<content:encoded>< ist ein ziemlich geniales Terminal-Programm für die gerade durch Agentic Coding wieder verstärkt kommenden CLI Workflows. Und was mich begeistert: es hat eine saubere Persistierung von offenen Workspaces in denen man dann mehrere Tabs haben kann, so dass ich meine Arbeitsumgebung nicht ständig offen lassen muss. Ich habe immer gerne diverse Verzeichnisse direkt offen, weil ich zwischen mehreren hin und her wechsel wärend der Programmierung, das läuft mit CMUX deutlich besser als mit allen anderen.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>mac-os-x</category>
|
||||
<category>sysadmin</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>NuGet Gallery | Photino.Blazor.CustomWindow 1.3.1</title>
|
||||
<link>https://www.rfc1437.de/2026/03/12/nuget-gallery-photino-blazor-customwindow-1-3-1</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/12/nuget-gallery-photino-blazor-customwindow-1-3-1</guid>
|
||||
<pubDate>Thu, 12 Mar 2026 20:13:10 GMT</pubDate>
|
||||
<description>< ist eine Library für Photino Blazor, mit der man Fenster Chrome-less machen kann. Also Titelbalken und Standarddekorationen entfernen kann. Idee dahinter ist darüber mehr Kontrolle über das Look-and-Feel zu bekommen und kompaktere UIs zu schaffen. Mit dieser Library bekommt man dann Grundfunktionen zurück wie Fenstergrößenänderungen und andere Standardelemente, die Benutzer erwarten, aber unter voller Kontrolle der Anwendung.</p>]]></description>
|
||||
<content:encoded>< ist eine Library für Photino Blazor, mit der man Fenster Chrome-less machen kann. Also Titelbalken und Standarddekorationen entfernen kann. Idee dahinter ist darüber mehr Kontrolle über das Look-and-Feel zu bekommen und kompaktere UIs zu schaffen. Mit dieser Library bekommt man dann Grundfunktionen zurück wie Fenstergrößenänderungen und andere Standardelemente, die Benutzer erwarten, aber unter voller Kontrolle der Anwendung.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>c#</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>OpenClaw Memory Masterclass: The complete guide to agent memory that survives • VelvetShark</title>
|
||||
<link>https://www.rfc1437.de/2026/03/07/openclaw-memory-masterclass-the-complete-guide-to-agent-memory-that-survives-velvetshark</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/07/openclaw-memory-masterclass-the-complete-guide-to-agent-memory-that-survives-velvetshark</guid>
|
||||
<pubDate>Sat, 07 Mar 2026 05:53:59 GMT</pubDate>
|
||||
<description>< - interessante Zusammenstellung des Memory-Systems und der Fallstricke mit Compaction bei Openclaw. Der Agent ist ja dazu da, über lange Zeit zu laufen, dadurch ist aber auch immer die Gefahr, dass Compaction gerade in komplexeren Situationen mitten drin zuschlägt. Und openclaw läuft autonom, also will man sicher sein, dass es auch kontinuierlich weitergeht.</p>]]></description>
|
||||
<content:encoded>< - interessante Zusammenstellung des Memory-Systems und der Fallstricke mit Compaction bei Openclaw. Der Agent ist ja dazu da, über lange Zeit zu laufen, dadurch ist aber auch immer die Gefahr, dass Compaction gerade in komplexeren Situationen mitten drin zuschlägt. Und openclaw läuft autonom, also will man sicher sein, dass es auch kontinuierlich weitergeht.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>llm</category>
|
||||
<category>openclaw</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>unum-cloud/USearch: Fast Open-Source Search & Clustering engine × for Vectors & Arbitrary Objects × in C++, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolfram 🔍</title>
|
||||
<link>https://www.rfc1437.de/2026/03/05/unum-cloud-usearch-fast-open-source-search-clustering-engine-x-for-vectors-arbitrary-objects-x-in-c-c-python-javascript-rust-java-objective-c-swift-c-golang-and-wolfram</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/05/unum-cloud-usearch-fast-open-source-search-clustering-engine-x-for-vectors-arbitrary-objects-x-in-c-c-python-javascript-rust-java-objective-c-swift-c-golang-and-wolfram</guid>
|
||||
<pubDate>Thu, 05 Mar 2026 21:18:44 GMT</pubDate>
|
||||
<description>< - drin was drauf steht. Also eine Library, die einen Index für Vektoren bietet, die z.B. aus Embedding stammen können und so semantisch ähnliche Texte finden können. Nicht Text-ähnlich, sondern semantisch, also Inhalt. Spannendes Thema, die dafür nötigen Modelle sind mit den LLMs verwandt, aber eben nicht large, sondern small - sie brauchen nicht voll zu verstehen und zu generieren, weil sie nur Vektoren erstellen, die dann gegeneinander verglichen werden können und je höher die Ähnlichkeit, desto höher die Ähnlichkeit der Texte im Thema. Cooles kleines Feature für bDS.</p>]]></description>
|
||||
<content:encoded>< - drin was drauf steht. Also eine Library, die einen Index für Vektoren bietet, die z.B. aus Embedding stammen können und so semantisch ähnliche Texte finden können. Nicht Text-ähnlich, sondern semantisch, also Inhalt. Spannendes Thema, die dafür nötigen Modelle sind mit den LLMs verwandt, aber eben nicht large, sondern small - sie brauchen nicht voll zu verstehen und zu generieren, weil sie nur Vektoren erstellen, die dann gegeneinander verglichen werden können und je höher die Ähnlichkeit, desto höher die Ähnlichkeit der Texte im Thema. Cooles kleines Feature für bDS.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>llm</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>waybarrios/vllm-mlx: OpenAI and Anthropic compatible server for Apple Silicon.</title>
|
||||
<link>https://www.rfc1437.de/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/02/waybarrios-vllm-mlx-openai-and-anthropic-compatible-server-for-apple-silicon</guid>
|
||||
<pubDate>Mon, 02 Mar 2026 11:05:49 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< Den benutze ich, um [mlx-community/gemma-3-12b-it-4bit](/posts/mlx-community-gemma-3-12b-it-4bit-hugging-face) auf meinem MacBook Air zu betreiben. Klappt sehr gut, kleines Shell-Script zum Starten des Servers und dann bin ich autonom. Nicht so komfortabel wie Ollama, aber dafür unterstützt es perfekt Apple's MLX und nutzt damit Silicon gut aus.</p>]]></description>
|
||||
<content:encoded>< Den benutze ich, um [mlx-community/gemma-3-12b-it-4bit](/posts/mlx-community-gemma-3-12b-it-4bit-hugging-face) auf meinem MacBook Air zu betreiben. Klappt sehr gut, kleines Shell-Script zum Starten des Servers und dann bin ich autonom. Nicht so komfortabel wie Ollama, aber dafür unterstützt es perfekt Apple's MLX und nutzt damit Silicon gut aus.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>llm</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>mlx-community/gemma-3-12b-it-4bit · Hugging Face</title>
|
||||
<link>https://www.rfc1437.de/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/02/mlx-community-gemma-3-12b-it-4bit-hugging-face</guid>
|
||||
<pubDate>Mon, 02 Mar 2026 11:03:41 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist das bisher beste Modell für lokalen Betrieb, mit dem ich die Bildbetitelung und sogar lokalen Chat realisieren kann. Nicht das schnellste, da es schon recht groß ist, aber für Offline-Betrieb absolut geeignet, wenn ich mir da ein paar Mechanismen für Batchverarbeitung von Bildern etc. einfallen lasse. Das könnte gerade für Urlaubszeiten super spannend sein. Eine Bildbeschreibung liegt dann zwar bei einer Minute, aber hey, dafür keine Abhängigkeiten.</p>]]></description>
|
||||
<content:encoded>< ist das bisher beste Modell für lokalen Betrieb, mit dem ich die Bildbetitelung und sogar lokalen Chat realisieren kann. Nicht das schnellste, da es schon recht groß ist, aber für Offline-Betrieb absolut geeignet, wenn ich mir da ein paar Mechanismen für Batchverarbeitung von Bildern etc. einfallen lasse. Das könnte gerade für Urlaubszeiten super spannend sein. Eine Bildbeschreibung liegt dann zwar bei einer Minute, aber hey, dafür keine Abhängigkeiten.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>llm</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Models.dev — An open-source database of AI models</title>
|
||||
<link>https://www.rfc1437.de/2026/03/01/models-dev-an-open-source-database-of-ai-models</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/01/models-dev-an-open-source-database-of-ai-models</guid>
|
||||
<pubDate>Sun, 01 Mar 2026 12:40:31 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist eine sehr praktische Seite, die für alle möglichen Anbieter und alle möglichen LLMs Rahmenparameter liefert, inklusive sogar API Preise. Und technische Parameter wie Input/Output Tokens.</p>]]></description>
|
||||
<content:encoded>< ist eine sehr praktische Seite, die für alle möglichen Anbieter und alle möglichen LLMs Rahmenparameter liefert, inklusive sogar API Preise. Und technische Parameter wie Input/Output Tokens.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>llm</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Ollama</title>
|
||||
<link>https://www.rfc1437.de/2026/03/01/ollama</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/03/01/ollama</guid>
|
||||
<pubDate>Sun, 01 Mar 2026 11:40:25 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - eine Runtime-Umgebung für LLMs, die es erlaubt Modelle lokal zu betreiben. Mein Lieblingsmodell zur Zeit: [qwen2.5vl:7b-q4_K_M](https://ollama.com/library/qwen2.5vl:7b-q4_K_M). Mit nur 6.6 GB Größe läuft das problemlos auf einem MacBook Air M4 und hat noch genug Speicher und Kapazität frei um Programme nebenbei laufen zu lassen. Das Modell ist im Chat erstaunlich brauchbar und vor allem hat es klasse Vision-Fähigkeiten. Ideal um für Bilder Titel, Alt-Texte oder Zusammenfassungen zu liefern, ohne dafür Geld an große Provider abzudrücken. Und ein wichtiger Baustein, um bDS wieder zurück zu full-offline zu bringen.</p>]]></description>
|
||||
<content:encoded>< - eine Runtime-Umgebung für LLMs, die es erlaubt Modelle lokal zu betreiben. Mein Lieblingsmodell zur Zeit: [qwen2.5vl:7b-q4_K_M](https://ollama.com/library/qwen2.5vl:7b-q4_K_M). Mit nur 6.6 GB Größe läuft das problemlos auf einem MacBook Air M4 und hat noch genug Speicher und Kapazität frei um Programme nebenbei laufen zu lassen. Das Modell ist im Chat erstaunlich brauchbar und vor allem hat es klasse Vision-Fähigkeiten. Ideal um für Bilder Titel, Alt-Texte oder Zusammenfassungen zu liefern, ohne dafür Geld an große Provider abzudrücken. Und ein wichtiger Baustein, um bDS wieder zurück zu full-offline zu bringen.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>llm</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>mistralai/mistral-vibe: Minimal CLI coding agent by Mistral</title>
|
||||
<link>https://www.rfc1437.de/2026/02/28/mistralai-mistral-vibe-minimal-cli-coding-agent-by-mistral</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/28/mistralai-mistral-vibe-minimal-cli-coding-agent-by-mistral</guid>
|
||||
<pubDate>Sat, 28 Feb 2026 18:58:21 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - begleitend zum [AI Studio - Mistral AI](/posts/ai-studio-mistral-ai) gibt es die Vibe-Coding Oberfläche zu Devstral auch als Open Source. Sehr nett, weil es ein gutes Paar macht. Wird definitiv bei mir etwas ausprobiert, auch wenn ich sicherlich für große Projekte dann eher zu den Boliden (Opus 4.6) greifen würde.</p>]]></description>
|
||||
<content:encoded>< - begleitend zum [AI Studio - Mistral AI](/posts/ai-studio-mistral-ai) gibt es die Vibe-Coding Oberfläche zu Devstral auch als Open Source. Sehr nett, weil es ein gutes Paar macht. Wird definitiv bei mir etwas ausprobiert, auch wenn ich sicherlich für große Projekte dann eher zu den Boliden (Opus 4.6) greifen würde.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>vibecoding</category>
|
||||
<category>llm</category>
|
||||
<category>mistral</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>AI Studio - Mistral AI</title>
|
||||
<link>https://www.rfc1437.de/2026/02/28/ai-studio-mistral-ai</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/28/ai-studio-mistral-ai</guid>
|
||||
<pubDate>Sat, 28 Feb 2026 18:55:50 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - da in den USA ja doch wieder die Lage etwas angespannter wird, und einfach weil man immer mal gucken sollte, was außerhalb der USA passiert, hier ein Link auf eine europäische Alternative zu den großen US Betreibern. Mistral bietet mit Devstral 2 ein Coding-Modell an, das nicht nur open weights ist (also frei zu bekommen und zu betreiben, wenn man die nötige Hardware hat), sondern auch im Betrieb bei Nutzung von Mistral selber recht günstig ist. Und die Leistung liegt etwas oberhalb Claude Haiku 4.5, und zwar unterhalb Sonnet 4.5, aber nicht super weit. Also durchaus brauchbar und meine ersten Experimente waren nicht schlecht. Leider keine Vision-Fähigkeit, also für Experimente mit Bildern nicht so geeignet (und daher für mein bDS nicht ideal), aber trotzdem spannend genug um es im Auge zu behalten.</p>]]></description>
|
||||
<content:encoded>< - da in den USA ja doch wieder die Lage etwas angespannter wird, und einfach weil man immer mal gucken sollte, was außerhalb der USA passiert, hier ein Link auf eine europäische Alternative zu den großen US Betreibern. Mistral bietet mit Devstral 2 ein Coding-Modell an, das nicht nur open weights ist (also frei zu bekommen und zu betreiben, wenn man die nötige Hardware hat), sondern auch im Betrieb bei Nutzung von Mistral selber recht günstig ist. Und die Leistung liegt etwas oberhalb Claude Haiku 4.5, und zwar unterhalb Sonnet 4.5, aber nicht super weit. Also durchaus brauchbar und meine ersten Experimente waren nicht schlecht. Leider keine Vision-Fähigkeit, also für Experimente mit Bildern nicht so geeignet (und daher für mein bDS nicht ideal), aber trotzdem spannend genug um es im Auge zu behalten.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>vibecoding</category>
|
||||
<category>llm</category>
|
||||
<category>mistral</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>ZK I Zettel 1 (1) - Niklas Luhmann-Archiv</title>
|
||||
<link>https://www.rfc1437.de/2026/02/28/zk-i-zettel-1-1-niklas-luhmann-archiv</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/28/zk-i-zettel-1-1-niklas-luhmann-archiv</guid>
|
||||
<pubDate>Sat, 28 Feb 2026 15:35:59 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - woher die Inspiration für mein Blog kommt, bzw. was mich immer unter der technischen Oberfläche bewegt hat.</p>]]></description>
|
||||
<content:encoded>< - woher die Inspiration für mein Blog kommt, bzw. was mich immer unter der technischen Oberfläche bewegt hat.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Agent UI Standards Multiply: MCP Apps and Google’s A2UI - Richard MacManus</title>
|
||||
<link>https://www.rfc1437.de/2026/02/28/agent-ui-standards-multiply-mcp-apps-and-google-s-a2ui-richard-macmanus</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/28/agent-ui-standards-multiply-mcp-apps-and-google-s-a2ui-richard-macmanus</guid>
|
||||
<pubDate>Sat, 28 Feb 2026 06:02:52 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< hilft. Ich habe in bDS ja A2UI implementiert, damit im internen Chat das LLM auch visuelle Aspekte nutzen kann, und das gefällt mir schon sehr gut. Aber die Idee, Teile meines UI auch in externe Agents einzubringen ist auch faszinierend. Auch wenn ich finde, dass "lokales HTML/JS in einem IFrame" irgendwie erstmal nach Hack klingt, aber vieles im LLM Umfeld gibt mir das Gefühl im Moment, einfach weil ja alles über einen normalen Text-Stream geschoben wird und man hofft, dass die LLMs sich an die Formate halten (selbst A2UI arbeitet so).</p>]]></description>
|
||||
<content:encoded>< hilft. Ich habe in bDS ja A2UI implementiert, damit im internen Chat das LLM auch visuelle Aspekte nutzen kann, und das gefällt mir schon sehr gut. Aber die Idee, Teile meines UI auch in externe Agents einzubringen ist auch faszinierend. Auch wenn ich finde, dass "lokales HTML/JS in einem IFrame" irgendwie erstmal nach Hack klingt, aber vieles im LLM Umfeld gibt mir das Gefühl im Moment, einfach weil ja alles über einen normalen Text-Stream geschoben wird und man hofft, dass die LLMs sich an die Formate halten (selbst A2UI arbeitet so).</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>llm</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>cloudflare/cobweb: COBOL to WebAssembly compiler</title>
|
||||
<link>https://www.rfc1437.de/2026/02/27/cloudflare-cobweb-cobol-to-webassembly-compiler</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/27/cloudflare-cobweb-cobol-to-webassembly-compiler</guid>
|
||||
<pubDate>Fri, 27 Feb 2026 13:43:32 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - ich lass das einfach mal hier liegen. Soll doch jemand anders den alten Kram wegräumen. [was soll man da auch anderes sagen](https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/).</p>]]></description>
|
||||
<content:encoded>< - ich lass das einfach mal hier liegen. Soll doch jemand anders den alten Kram wegräumen. [was soll man da auch anderes sagen](https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/).</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Pyodide</title>
|
||||
<link>https://www.rfc1437.de/2026/02/27/pyodide</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/27/pyodide</guid>
|
||||
<pubDate>Fri, 27 Feb 2026 13:23:39 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist so ein bisschen mein Lebensretter in bDS: ich muss nämlich gestehen, ich bin jetzt nicht wirklich super tief in TypeScript drin und hab auch eigentlich keine Lust das selber zu schreiben. Wenn die KI das macht, ist das ok, da gibt es genug Wissen auf das ein LLM zurückgreifen kann, aber ich will eigentlich nicht mich da tief einarbeiten. Und Python ist schon seit langem eine meiner favorisierten Sprachen. Und Pyodide bietet genau das: eine Portierung von CPython auf WebAssembly. Das bietet eine angenehme Sprache für Scripte und Makros, die aber auf alles zugreifen kann, was die Applikation macht und - wenn ich das mal will - auch Python Libraries ladenm kann.</p>]]></description>
|
||||
<content:encoded>< ist so ein bisschen mein Lebensretter in bDS: ich muss nämlich gestehen, ich bin jetzt nicht wirklich super tief in TypeScript drin und hab auch eigentlich keine Lust das selber zu schreiben. Wenn die KI das macht, ist das ok, da gibt es genug Wissen auf das ein LLM zurückgreifen kann, aber ich will eigentlich nicht mich da tief einarbeiten. Und Python ist schon seit langem eine meiner favorisierten Sprachen. Und Pyodide bietet genau das: eine Portierung von CPython auf WebAssembly. Das bietet eine angenehme Sprache für Scripte und Makros, die aber auf alles zugreifen kann, was die Applikation macht und - wenn ich das mal will - auch Python Libraries ladenm kann.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Drizzle ORM - Why Drizzle?</title>
|
||||
<link>https://www.rfc1437.de/2026/02/27/drizzle-orm-why-drizzle</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/27/drizzle-orm-why-drizzle</guid>
|
||||
<pubDate>Fri, 27 Feb 2026 13:17:08 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - war ein Vorschlag der KI beim Bau von bDS und hat sich sehr bewährt. Sauberer ORM für TypeScript mit einer recht netten API, die mich stark an Django erinnert. Zusätzlich saubere Abbildung von Migrations, die dann aber einfach SQL erlauben, also auch komplexere Migrationen ermöglichen. Und bisher völlig unauffällig im Betrieb. Was besonders interessant ist: da gibts eine direkte Übersetzung nach GraphQL, so dass man die objekte dann auch nach außen auf ein API legen kann, was ich mir glaube ich mal angucken sollte (bzw. mich bei der KI beschweren sollte, dass es sich das mal anguckt). Ich bin ja immer ein Fan von flexiblen Standard-Integrationen um externe Tools anzubinden.</p>]]></description>
|
||||
<content:encoded>< - war ein Vorschlag der KI beim Bau von bDS und hat sich sehr bewährt. Sauberer ORM für TypeScript mit einer recht netten API, die mich stark an Django erinnert. Zusätzlich saubere Abbildung von Migrations, die dann aber einfach SQL erlauben, also auch komplexere Migrationen ermöglichen. Und bisher völlig unauffällig im Betrieb. Was besonders interessant ist: da gibts eine direkte Übersetzung nach GraphQL, so dass man die objekte dann auch nach außen auf ein API legen kann, was ich mir glaube ich mal angucken sollte (bzw. mich bei der KI beschweren sollte, dass es sich das mal anguckt). Ich bin ja immer ein Fan von flexiblen Standard-Integrationen um externe Tools anzubinden.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>A2UI</title>
|
||||
<link>https://www.rfc1437.de/2026/02/27/a2ui</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/27/a2ui</guid>
|
||||
<pubDate>Fri, 27 Feb 2026 13:13:21 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein interessantes Projekt für ein streaming-orientiertes Protokoll für Anwendungen mit LLM Integration. Die Grundidee ist Streaming von JSON Schnipseln aus denen sich dann inkrementell das UI zusammenbaut, und das LLM hat die Kontrolle darüber, was in das UI rein wandert. Es erlaubt dem LLM mehr als nur simple textuelle Beschreibungen oder einfache Ascii-Grafiken zu produzieren und gibt auch Rückfragen des LLM eine andere Optik. Das ganze kommt von Google und wird auf einem offenen [github Projekt](https://github.com/google/A2UI) gepflegt. In bDS habe ich das ganze auch eingebaut und das hat schon was, wenn man über seine Blogposts eine Heatmap der Verteilung auf die Monate bekommen kann.</p>]]></description>
|
||||
<content:encoded>< ist ein interessantes Projekt für ein streaming-orientiertes Protokoll für Anwendungen mit LLM Integration. Die Grundidee ist Streaming von JSON Schnipseln aus denen sich dann inkrementell das UI zusammenbaut, und das LLM hat die Kontrolle darüber, was in das UI rein wandert. Es erlaubt dem LLM mehr als nur simple textuelle Beschreibungen oder einfache Ascii-Grafiken zu produzieren und gibt auch Rückfragen des LLM eine andere Optik. Das ganze kommt von Google und wird auf einem offenen [github Projekt](https://github.com/google/A2UI) gepflegt. In bDS habe ich das ganze auch eingebaut und das hat schon was, wenn man über seine Blogposts eine Heatmap der Verteilung auf die Monate bekommen kann.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Waggle Dance</title>
|
||||
<link>https://www.rfc1437.de/2026/02/23/waggle-dance</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/23/waggle-dance</guid>
|
||||
<pubDate>Mon, 23 Feb 2026 20:20:07 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< . oldie, but goldie. Immer wieder spaßig wie dieses doch recht einfache Spiel die Leute mitnehmen kann, auch über 10 Jahren nach seiner Veröffentlichung.</p>]]></description>
|
||||
<content:encoded>< . oldie, but goldie. Immer wieder spaßig wie dieses doch recht einfache Spiel die Leute mitnehmen kann, auch über 10 Jahren nach seiner Veröffentlichung.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>spielelog</category>
|
||||
<category>spielen</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>OpenCode | Der Open-Source AI-Coding-Agent</title>
|
||||
<link>https://www.rfc1437.de/2026/02/22/opencode-der-open-source-ai-coding-agent</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/22/opencode-der-open-source-ai-coding-agent</guid>
|
||||
<pubDate>Sun, 22 Feb 2026 18:07:25 GMT</pubDate>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - ein open-source coding agent der so langsam Claude Code den Rang ablaufen könnte. Sehr gut in der Ausführung und vor allem Provider-agnostisch. Man kann jedes Modell anhängen, sogar ein selber lokal gehostetes mit LM Studio oder ollama. Wenn man einfach mal spielen will, kann man es auch einfach nur runterladen und loslegen, sogar ohne eine Kreditkarte zu hinterlegen (dann natürlich mit limitierten Tokens, aber für erste Experimente durchaus nutzbar. Und unabhängig von den großen Anbietern (ok, außer deren Modelle, wenn man die benutzen will - und für ernsthaftes Coding sind die leider noch notwendig). OpenCode bietet auch selber AI Modelle an, die dann abgerechnet werden, aber ein paar Modelle sind immer frei verfügbar und bieten damit durchaus ernsthaftes Experimentieren ohne Investment.</p>]]></description>
|
||||
<content:encoded>< - ein open-source coding agent der so langsam Claude Code den Rang ablaufen könnte. Sehr gut in der Ausführung und vor allem Provider-agnostisch. Man kann jedes Modell anhängen, sogar ein selber lokal gehostetes mit LM Studio oder ollama. Wenn man einfach mal spielen will, kann man es auch einfach nur runterladen und loslegen, sogar ohne eine Kreditkarte zu hinterlegen (dann natürlich mit limitierten Tokens, aber für erste Experimente durchaus nutzbar. Und unabhängig von den großen Anbietern (ok, außer deren Modelle, wenn man die benutzen will - und für ernsthaftes Coding sind die leider noch notwendig). OpenCode bietet auch selber AI Modelle an, die dann abgerechnet werden, aber ein paar Modelle sind immer frei verfügbar und bieten damit durchaus ernsthaftes Experimentieren ohne Investment.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>vibecoding</category>
|
||||
<category>programmierung</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Steve Yegge on Vibe Coding</title>
|
||||
<link>https://www.rfc1437.de/2026/02/22/steve-yegge-on-vibe-coding</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/22/steve-yegge-on-vibe-coding</guid>
|
||||
<pubDate>Sun, 22 Feb 2026 14:43:25 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description><![CDATA[<p>Steve Yegge spricht im Interview über die Zukunft der Programmierung und die Herausforderungen des Vibe Codings. Der Autor teilt seine Erfahrungen und sieht einen Umbruch vergleichbar mit der Einführung von Hochsprachen.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Steve Yegge spricht im Interview über die Zukunft der Programmierung und die Herausforderungen des Vibe Codings. Der Autor teilt seine Erfahrungen und sieht einen Umbruch vergleichbar mit der Einführung von Hochsprachen.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>programmierung</category>
|
||||
<category>vibecoding</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>bDS langsam benutzbar</title>
|
||||
<link>https://www.rfc1437.de/2026/02/22/neue-software-langsam-benutzbar</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/22/neue-software-langsam-benutzbar</guid>
|
||||
<pubDate>Sun, 22 Feb 2026 12:28:19 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description><![CDATA[<p>So langsam macht die neue Software Spaß, alles was man für die Benutzung und Erstellung braucht ist weitestgehend vorhanden. Ein paar kleine Schönheitsfehler hat sie moch und es gibt noch das eine oder andere Feature, das ich will, aber ich kann schon alles machen, was ich wirklich als Minimum brauche. Veröffentlichen geht jetzt einfach mit einem shell script:</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>So langsam macht die neue Software Spaß, alles was man für die Benutzung und Erstellung braucht ist weitestgehend vorhanden. Ein paar kleine Schönheitsfehler hat sie moch und es gibt noch das eine oder andere Feature, das ich will, aber ich kann schon alles machen, was ich wirklich als Minimum brauche. Veröffentlichen geht jetzt einfach mit einem shell script:</p><p>```bash<br />#!/bin/sh</p><p>cd ~/Blogs/rfc1437.de/html</p><p>rsync -rav --delete \<br /> --exclude='thumbnails/' \<br /> --exclude='media/' \<br /> * git.rfc1437.de:git-server/html/</p><p>cd ..</p><p>rsync -rav --delete thumbnails/ git.rfc1437.de:git-server/html/thumbnails/<br />rsync -rav --exclude='*.meta' --delete media/ git.rfc1437.de:git-server/html/media/<br />```</p><p>Ja, das war jetzt nur um meine Source-Formatierung zu testen. Und?</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>sysadmin</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Blogging Desktop Server</title>
|
||||
<link>https://www.rfc1437.de/2026/02/16/blogging-desktop-server</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2026/02/16/blogging-desktop-server</guid>
|
||||
<pubDate>Mon, 16 Feb 2026 13:40:48 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - ne, Blogging Desktop Server. Im Moment mein Lieblingsprojekt an dem ich mit Vibe-Coding herumspiele und mir eine Software baue, mit der ich das Blog betreiben kann. Aber diesmal mit der klaren Perspektive, dass ich nicht wieder dem Bitrot oder der Komplexitätsspirale erliege. Simple Software mit brauchbarer Oberfläche für die Pflege der Blogbeiträge, aber die Speicherung als Markdown Files mit YAML Frontmatter um einfach stabil für die Zukunft zu sein. Das ganze dann mit sqlite für Caching und Volltextsuche und andere Komfort-Features und git für die Synchronisation der Blog-Daten, und git-lfs für die Bilder. Fühlt sich gerade richtig brauchbar an.</p>]]></description>
|
||||
<content:encoded>< - ne, Blogging Desktop Server. Im Moment mein Lieblingsprojekt an dem ich mit Vibe-Coding herumspiele und mir eine Software baue, mit der ich das Blog betreiben kann. Aber diesmal mit der klaren Perspektive, dass ich nicht wieder dem Bitrot oder der Komplexitätsspirale erliege. Simple Software mit brauchbarer Oberfläche für die Pflege der Blogbeiträge, aber die Speicherung als Markdown Files mit YAML Frontmatter um einfach stabil für die Zukunft zu sein. Das ganze dann mit sqlite für Caching und Volltextsuche und andere Komfort-Features und git für die Synchronisation der Blog-Daten, und git-lfs für die Bilder. Fühlt sich gerade richtig brauchbar an.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>programmierung</category>
|
||||
<category>blogging</category>
|
||||
<category>vibecoding</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Schotten Totten 2</title>
|
||||
<link>https://www.rfc1437.de/2023/08/27/schotten-totten-2-board-game-boardgamegeek</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2023/08/27/schotten-totten-2-board-game-boardgamegeek</guid>
|
||||
<pubDate>Sun, 27 Aug 2023 19:27:23 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< entwickelt sich zu einem unserer Lieblings-Spiele für zwei Spieler. Ein Remake des alten Schotten Totten (das es leider nicht mehr zu kaufen gibt unter dem Namen, nur als Battle Line, aber das eben nur auf Englisch). Im Gegensatz zum ersten Spiel jetzt asymmetrisch mit gerade genug Unterschied in der Spielweise, dass sich die beiden Seiten definitiv unterschiedlich anfühlen, aber trotzdem noch größtenteils die gleichen Sachen machen. Schnell aufgebaut, schnell gespielt und schnell weggeräumt mit genug Taktik um einen für ein paar Spiele zu fesseln. Und der Grafik-Stil ist einfach nett.</p>]]></description>
|
||||
<content:encoded>< entwickelt sich zu einem unserer Lieblings-Spiele für zwei Spieler. Ein Remake des alten Schotten Totten (das es leider nicht mehr zu kaufen gibt unter dem Namen, nur als Battle Line, aber das eben nur auf Englisch). Im Gegensatz zum ersten Spiel jetzt asymmetrisch mit gerade genug Unterschied in der Spielweise, dass sich die beiden Seiten definitiv unterschiedlich anfühlen, aber trotzdem noch größtenteils die gleichen Sachen machen. Schnell aufgebaut, schnell gespielt und schnell weggeräumt mit genug Taktik um einen für ein paar Spiele zu fesseln. Und der Grafik-Stil ist einfach nett.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>spielelog</category>
|
||||
<category>spielen</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Tak</title>
|
||||
<link>https://www.rfc1437.de/2023/08/27/tak-board-game-boardgamegeek</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2023/08/27/tak-board-game-boardgamegeek</guid>
|
||||
<pubDate>Sun, 27 Aug 2023 19:23:47 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein ziemlich interessantes Spiel: [inspiriert aus einem Fantasy-Roman von Patrick Rothfuss](https://en.wikipedia.org/wiki/Tak_\(game\)), zum Leben erweckt als eine fiktives "klassisches" Strategiespiel. Das schöne daran: man kann es sich problemlos selber machen, wenn man will und geschickt ist. Die Regeln sind super simpel und leicht gelernt, das Spiel aber trickreich mit vielen Möglichkeiten dem Gegner Fallen zu stellen. Wird vermutlich für unseren nächsten Urlaub mitgenommen, weil praktisch zum Draussen spielen.</p>]]></description>
|
||||
<content:encoded>< ist ein ziemlich interessantes Spiel: [inspiriert aus einem Fantasy-Roman von Patrick Rothfuss](https://en.wikipedia.org/wiki/Tak_\(game\)), zum Leben erweckt als eine fiktives "klassisches" Strategiespiel. Das schöne daran: man kann es sich problemlos selber machen, wenn man will und geschickt ist. Die Regeln sind super simpel und leicht gelernt, das Spiel aber trickreich mit vielen Möglichkeiten dem Gegner Fallen zu stellen. Wird vermutlich für unseren nächsten Urlaub mitgenommen, weil praktisch zum Draussen spielen.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>spielelog</category>
|
||||
<category>spielen</category>
|
||||
<category>tak</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>In-depth tutorial: How to set up 2FA TOTP with KeepassXC, Aegis and Authy. | Linux.org</title>
|
||||
<link>https://www.rfc1437.de/2023/08/27/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy-linux-org</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2023/08/27/in-depth-tutorial-how-to-set-up-2fa-totp-with-keepassxc-aegis-and-authy-linux-org</guid>
|
||||
<pubDate>Sun, 27 Aug 2023 10:55:08 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description><. Keepassxc ist deutlich netter, wie ich finde, und ist deutlich kontrollierbarer für mich.</p>]]></description>
|
||||
<content:encoded><. Keepassxc ist deutlich netter, wie ich finde, und ist deutlich kontrollierbarer für mich.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Mal wieder auf Linux ...</title>
|
||||
<link>https://www.rfc1437.de/2023/08/19/mal-wieder-auf-linux</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2023/08/19/mal-wieder-auf-linux</guid>
|
||||
<pubDate>Sat, 19 Aug 2023 13:26:04 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description><![CDATA[<p>... und natürlich tuts Surround-Sound meines Notebooks nicht mehr, aus Gründen. Und Fingerprint-Login macht weitaus weniger Sinn, wenn man nach Login dann doch das Passwort für den Keyring eingeben muss. Wenn der wenigstens erst beim ersten Bedarf nach einem Passwort käme, dann wärs ja ok, aber der geht direkt nach Login auf. Bah.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>... und natürlich tuts Surround-Sound meines Notebooks nicht mehr, aus Gründen. Und Fingerprint-Login macht weitaus weniger Sinn, wenn man nach Login dann doch das Passwort für den Keyring eingeben muss. Wenn der wenigstens erst beim ersten Bedarf nach einem Passwort käme, dann wärs ja ok, aber der geht direkt nach Login auf. Bah.</p><p>Ansonsten bin ich allerdings angenehm überrascht davon, wie gut die Linux-Unterstützung für das Lenovo T480 ist. Alles andere funktioniert bisher tadellos.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>linux</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Autumn Leaves</title>
|
||||
<link>https://www.rfc1437.de/2022/11/11/autumn-leaves</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2022/11/11/autumn-leaves</guid>
|
||||
<pubDate>Fri, 11 Nov 2022 12:06:46 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>en</dc:language>
|
||||
<description><</p>]]></description>
|
||||
<content:encoded><</p>]]></content:encoded>
|
||||
<category>picture</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Prime Time for Prime Slime</title>
|
||||
<link>https://www.rfc1437.de/2022/11/06/prime-time-for-prime-slime</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2022/11/06/prime-time-for-prime-slime</guid>
|
||||
<pubDate>Sun, 06 Nov 2022 12:59:14 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>en</dc:language>
|
||||
<description>< is the second of my "reinventing the past" deck lists. It is actually my first commander precon deck - Mimeoplasm - just spiced up to 11. It kinda is funny how I stuck with the theme of the deck, transitioning it from the precon to Ooze tribal and later reanimator, then turned it into Muldrotha combo and again turned it back to Mimeoplasm, when the Prime Slime secret lair came out (I love the art style), going full on Necrotic Ooze combo this time. It is a ton of fun to play, which is why some of the old stuff from my collection made it's way into that deck. #EDH #MtG #MagicTheGathering</p>]]></description>
|
||||
<content:encoded>< is the second of my "reinventing the past" deck lists. It is actually my first commander precon deck - Mimeoplasm - just spiced up to 11. It kinda is funny how I stuck with the theme of the deck, transitioning it from the precon to Ooze tribal and later reanimator, then turned it into Muldrotha combo and again turned it back to Mimeoplasm, when the Prime Slime secret lair came out (I love the art style), going full on Necrotic Ooze combo this time. It is a ton of fun to play, which is why some of the old stuff from my collection made it's way into that deck. #EDH #MtG #MagicTheGathering</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>edh</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>mtg</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Sweet, so sweet</title>
|
||||
<link>https://www.rfc1437.de/2022/11/05/sweet-so-sweet</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2022/11/05/sweet-so-sweet</guid>
|
||||
<pubDate>Sat, 05 Nov 2022 07:08:12 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>en</dc:language>
|
||||
<description><</p>]]></description>
|
||||
<content:encoded><</p>]]></content:encoded>
|
||||
<category>picture</category>
|
||||
<category>photography</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Kaalia of the Blast</title>
|
||||
<link>https://www.rfc1437.de/2022/11/05/kaalia-of-the-blast</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2022/11/05/kaalia-of-the-blast</guid>
|
||||
<pubDate>Sat, 05 Nov 2022 06:37:13 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>en</dc:language>
|
||||
<description>< is one of my "lets recreate original commander" decks. The idea is to keep close to the original structure - one commander with the focus of the deck, a supporting commander that could become the main with some changes, and a big dragon in the same colors. And have the game plan of one of the originals, too. So in a way an updated Kaalia with a bit more focus and dedication, but still Angel/Dragon/Demon beatdown. #EDH #MtG</p>]]></description>
|
||||
<content:encoded>< is one of my "lets recreate original commander" decks. The idea is to keep close to the original structure - one commander with the focus of the deck, a supporting commander that could become the main with some changes, and a big dragon in the same colors. And have the game plan of one of the originals, too. So in a way an updated Kaalia with a bit more focus and dedication, but still Angel/Dragon/Demon beatdown. #EDH #MtG</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>edh</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>mtg</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Abdel, Agent of the Iron Throne</title>
|
||||
<link>https://www.rfc1437.de/2022/08/22/abdel-agent-of-the-iron-throne-commander-edh-agent-of-the-iron-throne-and-abdel-adrian-gorions-ward-deck-list-mtg-moxfield-an-mtg-deck-builder-site-for-magic-the-gathering</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2022/08/22/abdel-agent-of-the-iron-throne-commander-edh-agent-of-the-iron-throne-and-abdel-adrian-gorions-ward-deck-list-mtg-moxfield-an-mtg-deck-builder-site-for-magic-the-gathering</guid>
|
||||
<pubDate>Mon, 22 Aug 2022 06:54:04 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist meine neueste high-power, near-competetive Kreation. Das Deck hat einen sehr linearen Combo Plan mit viel Redundanz in den Teilen, und vor allem sowohl Combo-Element als auch Combo-Payoff in der Command Zone. Was an Interaktion aufgrund der Farben fehlt, wird durch Resilienz ersetzt. Ich mag ja lineare Combo, weil das dem Spiel einen klaren Plan vorgibt und es zum Beispiel Mulligan-Entscheidungen deutlich einfacher macht.</p>]]></description>
|
||||
<content:encoded>< ist meine neueste high-power, near-competetive Kreation. Das Deck hat einen sehr linearen Combo Plan mit viel Redundanz in den Teilen, und vor allem sowohl Combo-Element als auch Combo-Payoff in der Command Zone. Was an Interaktion aufgrund der Farben fehlt, wird durch Resilienz ersetzt. Ich mag ja lineare Combo, weil das dem Spiel einen klaren Plan vorgibt und es zum Beispiel Mulligan-Entscheidungen deutlich einfacher macht.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>edh</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>mtg</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Dargo for the Lulz</title>
|
||||
<link>https://www.rfc1437.de/2021/01/14/dargo-for-the-lulz</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2021/01/14/dargo-for-the-lulz</guid>
|
||||
<pubDate>Thu, 14 Jan 2021 12:32:10 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein Deck, das mich positiv überrascht hat, wie stark es ist. Ich würde es in eine ähnliche Gegend wie Godo stellen, also durchaus cEDH viable. Zwar ist die Combo nicht alleine der Commander, aber es braucht nur eine weitere Karte (Phyrexian Altar) und es geht los, wenn noch ein paar Treasures rumliegen oder Kreaturen zum Opfern da sind. Und der Plan-B mit Beatdown funktioniert auch gut.</p>]]></description>
|
||||
<content:encoded>< ist ein Deck, das mich positiv überrascht hat, wie stark es ist. Ich würde es in eine ähnliche Gegend wie Godo stellen, also durchaus cEDH viable. Zwar ist die Combo nicht alleine der Commander, aber es braucht nur eine weitere Karte (Phyrexian Altar) und es geht los, wenn noch ein paar Treasures rumliegen oder Kreaturen zum Opfern da sind. Und der Plan-B mit Beatdown funktioniert auch gut.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Brettspielrunde - wie macht man das in Zeiten von Corona?</title>
|
||||
<link>https://www.rfc1437.de/2020/03/27/brettspielrunde-wie-macht-man-das-in-zeiten-von-corona</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2020/03/27/brettspielrunde-wie-macht-man-das-in-zeiten-von-corona</guid>
|
||||
<pubDate>Fri, 27 Mar 2020 18:45:02 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description><![CDATA[<p>Also wir haben da eine Lösung gefunden. Und es lief richtig gut - 6 Spieler waren dabei, jeder zu Hause. Bei mir war das Spiel und eine Kamerakonstruktion, um das Bild ins Internet zu stellen - und mit Microsoft Teams dann allen nach Hause zu liefern. Dazu dann Headsets und los gings, Spiel erklären, spielen, gemeinsam drüber reden - all das geht auch zu Zeiten des Social Distancing.</p>]]></description>
|
||||
<content:encoded><</p><p>Das Kamera-Stativ hatte ich eh schon, der kleine Schwenkarm mit Handy-Halterung kostet 35€ und das Handy - sowas hat man oft ja schon da. Dann auf dem Handy eine kleine App - "IP Webcam" - mit der die Kamera des Handy über eine Webseite erreichbar wird. Und auf dem Notebook Teams, mit dem ich das Fenster des Browsers mit allen Teilnehmern geteilt habe. Und los kanns gehen!</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Jhoira, Scrap That! (Commander / EDH MTG Deck)</title>
|
||||
<link>https://www.rfc1437.de/2020/03/13/jhoira-scrap-that-commander-edh-mtg-deck</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2020/03/13/jhoira-scrap-that-commander-edh-mtg-deck</guid>
|
||||
<pubDate>Fri, 13 Mar 2020 18:03:55 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist mitlerweile mein primäres Deck für cEDH und es hat sich verdammt gut bewährt bisher. Das Deck hat eigentlich immer eine Line, kann auf fast alles reagieren und hat gute Rebuild-Fähigkeiten. Durch mehrere überlappende Combos bietet es flexible Wege durch Stax oder Hate hindurch trotzdem zu gewinnen. Und selbst wenn ich nicht gewinne: das Deck hinterlässt bei den Gegnern definitiv einen bleibenden Eindruck.</p>]]></description>
|
||||
<content:encoded>< ist mitlerweile mein primäres Deck für cEDH und es hat sich verdammt gut bewährt bisher. Das Deck hat eigentlich immer eine Line, kann auf fast alles reagieren und hat gute Rebuild-Fähigkeiten. Durch mehrere überlappende Combos bietet es flexible Wege durch Stax oder Hate hindurch trotzdem zu gewinnen. Und selbst wenn ich nicht gewinne: das Deck hinterlässt bei den Gegnern definitiv einen bleibenden Eindruck.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Rurik: Dawn of Kiev</title>
|
||||
<link>https://www.rfc1437.de/2020/02/20/rurik-dawn-of-kiev</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2020/02/20/rurik-dawn-of-kiev</guid>
|
||||
<pubDate>Thu, 20 Feb 2020 18:05:19 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist ein Kickstarter-Spiel, das bei mir vor ein paar Wochen eingetrudelt ist und seit dem ein paar Mal auf dem Tisch war. Interessante Aspekte bei dem Spiel sind die Aktionswahl mit unterschiedlich bewerteten Beratern in einer eigenen Auktionsphase, in der man die Aktionsmöglichkeiten selektiert und ein bischen die Reihenfolge, in der man diese ausführt, aber wie stark die Aktion sein wird, hängt von dem Mitspielern ab. Ausgewertet werden die Aktionen erst in der zweiten Phase, in der man dann zusehen muss, mit dem was man bekommt klar zu kommen. Die Zielwertungen sind sehr nah beieinander, jeder Punkt zählt. Dazu noch sehr nettes Spielmaterial und eine praktische Sortiereinlage.</p>]]></description>
|
||||
<content:encoded>< ist ein Kickstarter-Spiel, das bei mir vor ein paar Wochen eingetrudelt ist und seit dem ein paar Mal auf dem Tisch war. Interessante Aspekte bei dem Spiel sind die Aktionswahl mit unterschiedlich bewerteten Beratern in einer eigenen Auktionsphase, in der man die Aktionsmöglichkeiten selektiert und ein bischen die Reihenfolge, in der man diese ausführt, aber wie stark die Aktion sein wird, hängt von dem Mitspielern ab. Ausgewertet werden die Aktionen erst in der zweiten Phase, in der man dann zusehen muss, mit dem was man bekommt klar zu kommen. Die Zielwertungen sind sehr nah beieinander, jeder Punkt zählt. Dazu noch sehr nettes Spielmaterial und eine praktische Sortiereinlage.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>spielelog</category>
|
||||
<category>spielen</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bears on a Plane (Commander / EDH MTG Deck)</title>
|
||||
<link>https://www.rfc1437.de/2020/02/20/bears-on-a-plane-commander-edh-mtg-deck</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2020/02/20/bears-on-a-plane-commander-edh-mtg-deck</guid>
|
||||
<pubDate>Thu, 20 Feb 2020 13:46:09 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist mein Versuch ein effektives Prison-Deck in cEDH zu bauen. Erste Versuche mit dem Deck waren dementsprechend "disgusting". Kann nur sporadisch getestet werden wegen Anger-Management-Issues der Playgroup ...</p>]]></description>
|
||||
<content:encoded>< ist mein Versuch ein effektives Prison-Deck in cEDH zu bauen. Erste Versuche mit dem Deck waren dementsprechend "disgusting". Kann nur sporadisch getestet werden wegen Anger-Management-Issues der Playgroup ...</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Tin Elves (Commander / EDH MTG Deck)</title>
|
||||
<link>https://www.rfc1437.de/2019/11/08/tin-elves-commander-edh-mtg-deck</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/11/08/tin-elves-commander-edh-mtg-deck</guid>
|
||||
<pubDate>Fri, 08 Nov 2019 19:10:20 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - Blechelfen. Mein letztes Artefakt-Combo Deck für Magic the Gathering. Hat sich beim letzten Spiel super solide angefühlt. Das Deck geht hart auf Artefakte-Combos, benutzt dafür aber eine Reihe von Elementen, die auch super gut für eine Aggro-Strategie funktionieren. Wenn mir meine Combo-Teile weggeschossen werden, greife ich einfach mit einer Horder Thoptern an. Und Emry als Commander hilft mir um den Commander-Tax herum zu kommen, weil ihre Affinity-to-Artifacts Fähigkeit in diesem Deck Gold wert ist - und da sie zusätzlich auch noch ein Combo-Element ist, hat das Deck sehr gute Chancen auf Comebacks aus dem Hintertreffen. Ich werde die Liste vermutlich noch etwas stabilisieren, aber die Zusammenstellung scheint ein echter Treffer zu sein. Geht vermutlich mit nach Bologna.</p>]]></description>
|
||||
<content:encoded>< - Blechelfen. Mein letztes Artefakt-Combo Deck für Magic the Gathering. Hat sich beim letzten Spiel super solide angefühlt. Das Deck geht hart auf Artefakte-Combos, benutzt dafür aber eine Reihe von Elementen, die auch super gut für eine Aggro-Strategie funktionieren. Wenn mir meine Combo-Teile weggeschossen werden, greife ich einfach mit einer Horder Thoptern an. Und Emry als Commander hilft mir um den Commander-Tax herum zu kommen, weil ihre Affinity-to-Artifacts Fähigkeit in diesem Deck Gold wert ist - und da sie zusätzlich auch noch ein Combo-Element ist, hat das Deck sehr gute Chancen auf Comebacks aus dem Hintertreffen. Ich werde die Liste vermutlich noch etwas stabilisieren, aber die Zusammenstellung scheint ein echter Treffer zu sein. Geht vermutlich mit nach Bologna.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>spielen</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Wingspan</title>
|
||||
<link>https://www.rfc1437.de/2019/11/08/wingspan</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/11/08/wingspan</guid>
|
||||
<pubDate>Fri, 08 Nov 2019 18:06:27 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< ist mein diesjähriger Neuzugang aus Essen (nicht der einzige, aber der, den ich bisher gespielt hab) und ich bin sehr zufrieden, das Spiel gekauft zu haben. Ein Tableau-Builder mit Karten, bei dem die Karten die Aktionsmöglichkeiten verbessern - das fängt schon mal perfekt für mich an. Variabler Setup, geheime Ziele und hohes Combo-Potential in den Karten machts noch besser. Und die ersten Spiele mit 2 und 5 Spielern waren super spannend. Das Spiel bietet einen nette Eskalationskurve im Spiel - die Runden haben weniger und weniger Aktionen, die Aktionen selber werden aber besser und besser. Und wenn man mal eine produktive Combo trifft, fühlt sich das einfach gut an. Dazu ordentliche Verarbeitung der Materialen und ansprechende Grafik, das ist ein slam-dunk für mich.</p>]]></description>
|
||||
<content:encoded>< ist mein diesjähriger Neuzugang aus Essen (nicht der einzige, aber der, den ich bisher gespielt hab) und ich bin sehr zufrieden, das Spiel gekauft zu haben. Ein Tableau-Builder mit Karten, bei dem die Karten die Aktionsmöglichkeiten verbessern - das fängt schon mal perfekt für mich an. Variabler Setup, geheime Ziele und hohes Combo-Potential in den Karten machts noch besser. Und die ersten Spiele mit 2 und 5 Spielern waren super spannend. Das Spiel bietet einen nette Eskalationskurve im Spiel - die Runden haben weniger und weniger Aktionen, die Aktionen selber werden aber besser und besser. Und wenn man mal eine produktive Combo trifft, fühlt sich das einfach gut an. Dazu ordentliche Verarbeitung der Materialen und ansprechende Grafik, das ist ein slam-dunk für mich.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>spielelog</category>
|
||||
<category>spielen</category>
|
||||
<category>wingspan</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Golos, Combo Pilgrim (Commander / EDH MTG Deck)</title>
|
||||
<link>https://www.rfc1437.de/2019/08/20/golos-combo-pilgrim-commander-edh-mtg-deck</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/08/20/golos-combo-pilgrim-commander-edh-mtg-deck</guid>
|
||||
<pubDate>Tue, 20 Aug 2019 17:56:45 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< to achieve his goal. Meine letzte Deckliste, an der ich arbeite. Wird ziemlich hart in Richtung cEDH laufen. Bei den ersten Spielen fühlte sich das schon richtig gut an, auch wenn ein bischen das explosive Combo-Feeling fehlte. Aber das ist in meiner Meta vielleicht auch gar nicht schlecht, wir spielen eher längere Spiele. Daher ist die Liste mehr auf Antworten und weniger auf T2 Combo-Win ausgelegt. Aber von dem, was die Liste macht, geht das voll in meine präferierte Richtung - nicht Suicide-Combo, sondern erstmal schauen was geht, dann zuschlagen, wenn keiner genug antworten haben kann.</p>]]></description>
|
||||
<content:encoded>< to achieve his goal. Meine letzte Deckliste, an der ich arbeite. Wird ziemlich hart in Richtung cEDH laufen. Bei den ersten Spielen fühlte sich das schon richtig gut an, auch wenn ein bischen das explosive Combo-Feeling fehlte. Aber das ist in meiner Meta vielleicht auch gar nicht schlecht, wir spielen eher längere Spiele. Daher ist die Liste mehr auf Antworten und weniger auf T2 Combo-Win ausgelegt. Aber von dem, was die Liste macht, geht das voll in meine präferierte Richtung - nicht Suicide-Combo, sondern erstmal schauen was geht, dann zuschlagen, wenn keiner genug antworten haben kann.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>cedh</category>
|
||||
<category>magicthegathering</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Marvel Champions - Fantasy Flight Games</title>
|
||||
<link>https://www.rfc1437.de/2019/08/02/marvel-champions-fantasy-flight-games</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/08/02/marvel-champions-fantasy-flight-games</guid>
|
||||
<pubDate>Fri, 02 Aug 2019 12:19:43 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< Wow, das kommt unerwartet. Es sieht stark nach einem weiteren Ableger des LOTR Systems aus, allerdings auf den ersten Blick etwas streamlined. Aber wenn das ganze trotzdem die Spieltiefe von LOTR erreicht, wärs klasse. Ich habe zwar mitlerweile eine gut laufende Magic Spielrunde, aber so für zwischendurch fand ich LOTR immer eigentlich recht spannend, da viele Spielentscheidungen (speziell der Szenario-spezifische Bau eines Decks) sehr nah an Magic ran kommen.</p>]]></description>
|
||||
<content:encoded>< Wow, das kommt unerwartet. Es sieht stark nach einem weiteren Ableger des LOTR Systems aus, allerdings auf den ersten Blick etwas streamlined. Aber wenn das ganze trotzdem die Spieltiefe von LOTR erreicht, wärs klasse. Ich habe zwar mitlerweile eine gut laufende Magic Spielrunde, aber so für zwischendurch fand ich LOTR immer eigentlich recht spannend, da viele Spielentscheidungen (speziell der Szenario-spezifische Bau eines Decks) sehr nah an Magic ran kommen.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>spielen</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>Pauper Comes to Paper | MAGIC: THE GATHERING</title>
|
||||
<link>https://www.rfc1437.de/2019/06/28/pauper-comes-to-paper-magic-the-gathering</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/06/28/pauper-comes-to-paper-magic-the-gathering</guid>
|
||||
<pubDate>Fri, 28 Jun 2019 06:46:02 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - mit vereinheitlichter Legalität. Leider werden gleich zwei meiner Lieblings-Commons gebannt: Hymn to Tourach und High Tide. Schade. Aber trotzdem schön, endlich eine einheitliche Legalität für Karten zu haben.</p>]]></description>
|
||||
<content:encoded>< - mit vereinheitlichter Legalität. Leider werden gleich zwei meiner Lieblings-Commons gebannt: Hymn to Tourach und High Tide. Schade. Aber trotzdem schön, endlich eine einheitliche Legalität für Karten zu haben.</p>]]></content:encoded>
|
||||
<category>aside</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>pauper</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>The London Mulligan | MAGIC: THE GATHERING</title>
|
||||
<link>https://www.rfc1437.de/2019/06/03/the-london-mulligan-magic-the-gathering</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/06/03/the-london-mulligan-magic-the-gathering</guid>
|
||||
<pubDate>Mon, 03 Jun 2019 15:03:37 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< wird der offizielle Mulligan in Magic ab Core Set 2020. Klasse. Wir haben den in Commander ausprobiert und er war völlig ok. Und in Pauper wars auch gut. Klar, es gibt sicherlich ein paar Decks, die übermäßig profitieren, aber das kann man anderweitig regeln. Der neue Mulligan hilft einfach "Nicht-Spiele" aufgrund von mehrfachen schlechten Starthänden zu vermeiden. Es gibt nix nervigeres als ein Spiel im Mulligan zu verlieren, weil einfach jede Hand ohne Länder oder nur Länder war.</p>]]></description>
|
||||
<content:encoded>< wird der offizielle Mulligan in Magic ab Core Set 2020. Klasse. Wir haben den in Commander ausprobiert und er war völlig ok. Und in Pauper wars auch gut. Klar, es gibt sicherlich ein paar Decks, die übermäßig profitieren, aber das kann man anderweitig regeln. Der neue Mulligan hilft einfach "Nicht-Spiele" aufgrund von mehrfachen schlechten Starthänden zu vermeiden. Es gibt nix nervigeres als ein Spiel im Mulligan zu verlieren, weil einfach jede Hand ohne Länder oder nur Länder war.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>magicthegathering</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>A Force to be Reckoned With | Article by Jim Davis</title>
|
||||
<link>https://www.rfc1437.de/2019/05/20/a-force-to-be-reckoned-with-article-by-jim-davis</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/05/20/a-force-to-be-reckoned-with-article-by-jim-davis</guid>
|
||||
<pubDate>Mon, 20 May 2019 15:49:19 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - die neue Karte "Force of Vigor" hat mal eben zwei meiner Decks deutlich getroffen. Jhoira als Artefakt-Storm-Deck und Paradox Arcum als Artefakt-Kombo sind beide ziemlich abhängig von ihren Artefakten und Enchantments, so eine Karte kann die mal eben abschalten. Instant-speed. Für lau. Autsch. Wenn andere Liste stärker auf Mana-Dorks statt Mana-Rocks gehen, haben sie genug grüne Karten um den FoV aktiv zu bekommen. Und dann bin ich raus. Jhoira kann sich vielleicht noch knapp halten, Storm hat in der Regel mehrere Vektoren, aber da Artefakte nur mit Shimmer Myr instant-speed werden (und der als Artefakt angreifbar bleibt), ist Arcum wirklich hart betroffen.</p>]]></description>
|
||||
<content:encoded>< - die neue Karte "Force of Vigor" hat mal eben zwei meiner Decks deutlich getroffen. Jhoira als Artefakt-Storm-Deck und Paradox Arcum als Artefakt-Kombo sind beide ziemlich abhängig von ihren Artefakten und Enchantments, so eine Karte kann die mal eben abschalten. Instant-speed. Für lau. Autsch. Wenn andere Liste stärker auf Mana-Dorks statt Mana-Rocks gehen, haben sie genug grüne Karten um den FoV aktiv zu bekommen. Und dann bin ich raus. Jhoira kann sich vielleicht noch knapp halten, Storm hat in der Regel mehrere Vektoren, aber da Artefakte nur mit Shimmer Myr instant-speed werden (und der als Artefakt angreifbar bleibt), ist Arcum wirklich hart betroffen.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>cedh</category>
|
||||
<category>magicthegathering</category>
|
||||
</item>
|
||||
<item>
|
||||
<title>May 20, 2019 Banned and Restricted Announcement | MAGIC: THE GATHERING</title>
|
||||
<link>https://www.rfc1437.de/2019/05/20/may-20-2019-banned-and-restricted-announcement-magic-the-gathering</link>
|
||||
<guid isPermaLink="true">https://www.rfc1437.de/2019/05/20/may-20-2019-banned-and-restricted-announcement-magic-the-gathering</guid>
|
||||
<pubDate>Mon, 20 May 2019 15:15:55 GMT</pubDate>
|
||||
<author>hugo</author>
|
||||
<dc:language>de</dc:language>
|
||||
<description>< - da hat mir Wizards of the Coast mal eben zwei meiner Decks komplett neutralisiert - Izzet Blitz braucht die kostenlosen Spells um seine Kreaturen zu pumpen oder Direktschaden zu aktivieren und Skred Delver brauchte sie um die Hand zu füllen im Mittelspiel. Autsch. Ok, in letzter Zeit hab ich meistens Tron gespielt (oder mal GB Tortex, wenn mir nach wilden Boardstates war), aber trotzdem, Skred Delver war immer noch mein Lieblingsdeck wegen seiner explosiven Comebacks.</p>]]></description>
|
||||
<content:encoded>< - da hat mir Wizards of the Coast mal eben zwei meiner Decks komplett neutralisiert - Izzet Blitz braucht die kostenlosen Spells um seine Kreaturen zu pumpen oder Direktschaden zu aktivieren und Skred Delver brauchte sie um die Hand zu füllen im Mittelspiel. Autsch. Ok, in letzter Zeit hab ich meistens Tron gespielt (oder mal GB Tortex, wenn mir nach wilden Boardstates war), aber trotzdem, Skred Delver war immer noch mein Lieblingsdeck wegen seiner explosiven Comebacks.</p>]]></content:encoded>
|
||||
<category>article</category>
|
||||
<category>aside</category>
|
||||
<category>magicthegathering</category>
|
||||
<category>pauper</category>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
126299
fixtures/golden-generated-sites/rfc1437-sample/sitemap.xml
Normal file
126299
fixtures/golden-generated-sites/rfc1437-sample/sitemap.xml
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user