Print in place nuts with cura ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Date: August 12, 2024 Print in place nuts with cura | Waylon Walker { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Print in place nuts with cura", "datePublished": "2024-08-12T08:54:00Z", "dateModified": "2024-08-12T08:54:00Z", "publisher": { "@type": "Organization", "name": "Waylon Walker", "url": "https://waylonwalker.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://waylonwalker.com/print-in-place-nuts-with-cura/" }, "image": "https://waylonwalker.com/8bitcc.png", "keywords": [ "3d-printing" ], "url": "https://waylonwalker.com/print-in-place-nuts-with-cura/" } var params = new URLSearchParams(location.search); if (params.get('specimen') === 'canonical-headings') { document.documentElement.classList.add('canonical-specimen-route'); if (params.get('capture') === 'natural') document.documentElement.classList.add('canonical-natural-route'); } (function() { var root = document.documentElement; var fallbackSize = root.dataset.textSize || 'large'; var allowed = { small: true, medium: true, large: true, 'x-large': true }; var size = allowed[fallbackSize] ? fallbackSize : 'large'; var allowVisitorSize = true; if (allowVisitorSize) { try { var stored = localStorage.getItem('text-size'); if (stored && allowed[stored]) { size = stored; } } catch (_) { // ignore storage access failures } } root.dataset.textSize = size; })(); (function() { var fallbackMode = 'dark'; window.__markataThemeFallbackMode = fallbackMode; var mode = fallbackMode; var picked = ''; var aesthetic = ''; var fontpack = ''; try { var stored = localStorage.getItem('color-mode') || localStorage.getItem('theme'); if (stored === 'light' || stored === 'dark') { mode = stored; } // Restore the visitor's theme picker choice before any CSS paints. picked = localStorage.getItem('theme-palette-' + mode) || ''; aesthetic = localStorage.getItem('theme-aesthetic') || ''; fontpack = localStorage.getItem('theme-fontpack') || ''; } catch (_) { // ignore storage access failures } document.documentElement.dataset.theme = mode; document.documentElement.classList.toggle('dark', mode === 'dark'); // Pin data-palette to the variant that matches the resolved mode so the // per-palette CSS block agrees with data-theme on first paint. var palettes = { light: 'ayu\u002Dlight', dark: 'ayu\u002Ddark' }; window.__markataThemeDefaults = palettes; // Seasonal palette: northern hemisphere seasons, switching to a holiday // palette a few days before and on the day of world holidays. window.__markataSeasonal = {"lead":3,"s":[{"l":"Spring","f":320,"lt":"pollen8","dk":"pollen8-dark"},{"l":"Summer","f":621,"lt":"summer-beach","dk":"summer-beach-dark"},{"l":"Autumn","f":922,"lt":"autumn-light","dk":"autumn"},{"l":"Winter","f":1221,"lt":"winter-frost-light","dk":"winter-frost"}],"h":[{"l":"New Year","d":["01-01"],"lt":"white-gold","dk":"black-gold"},{"l":"Lunar New Year","d":["2025-01-29","2026-02-17","2027-02-06","2028-01-26","2029-02-13","2030-02-03","2031-01-23","2032-02-11","2033-01-31","2034-02-19","2035-02-08","2036-01-28"],"lt":"lunar-new-year-light","dk":"lunar-new-year"},{"l":"Valentine's Day","d":["02-14"],"lt":"valentine-light","dk":"valentine"},{"l":"St. Patrick's Day","d":["03-17"],"lt":"st.-patrick's-day-light","dk":"st.-patrick's-day"},{"l":"Easter","d":["2025-04-20","2026-04-05","2027-03-28","2028-04-16","2029-04-01","2030-04-21","2031-04-13","2032-03-28","2033-04-17","2034-04-09","2035-03-25","2036-04-13"],"lt":"blessing","dk":"blessing-dark"},{"l":"Earth Day","d":["04-22"],"lt":"everforest-light","dk":"everforest-dark"},{"l":"Halloween","d":["10-31"],"lt":"halloween-light","dk":"halloween"},{"l":"Diwali","d":["2025-10-20","2026-11-08","2027-10-29","2028-10-17","2029-11-05","2030-10-26","2031-11-14","2032-11-02","2033-10-22"],"lt":"diwali-light","dk":"diwali"},{"l":"Hanukkah","d":["2025-12-15","2026-12-05","2027-12-25","2028-12-13","2029-12-03","2030-12-21","2031-12-11","2032-11-29","2033-12-17","2034-12-07","2035-12-26"],"n":8,"lt":"hanukkah-light","dk":"hanukkah"},{"l":"Christmas","d":["12-25"],"lt":"christmas-light","dk":"christmas"}]}; window.__markataSeasonalDefault = false; window.__markataSeasonalPick = function(forMode, date) { var s = window.__markataSeasonal, now = date || new Date(), y = now.getFullYear(); var today = Date.UTC(y, now.getMonth(), now.getDate()) / 864e5; var best = null, bestDiff = 1e9; s.h.forEach(function(h) { h.d.forEach(function(d) { var p = d.split('-'), years = p.length === 3 ? [+p[0]] : [y - 1, y, y + 1]; years.forEach(function(yy) { var diff = Date.UTC(yy, +p[p.length - 2] - 1, +p[p.length - 1]) / 864e5 - today; if (diff <= s.lead && diff > -(h.n || 1) && diff < bestDiff) { best = h; bestDiff = diff; } }); }); }); if (!best) { var md = (now.getMonth() + 1) * 100 + now.getDate(); best = s.s[s.s.length - 1]; s.s.forEach(function(x) { if (md >= x.f) best = x; }); } return { label: best.l, name: forMode === 'dark' ? best.dk : best.lt }; }; if (picked === 'seasonal' || (!picked && window.__markataSeasonalDefault)) { picked = window.__markataSeasonalPick(mode).name; } if (picked === 'seasonal') picked = ''; var modePalette = picked || (mode === 'dark' ? palettes.dark : palettes.light); if (modePalette) { document.documentElement.dataset.palette = modePalette; } if (aesthetic) { document.documentElement.dataset.aesthetic = aesthetic; } window.__markataPageFontpack = document.documentElement.dataset.fontpack || ''; window.__markataVisitorFontpack = fontpack; var preloadFontpack = fontpack || window.__markataPageFontpack; // Preload only the pack that will render this page. This avoids fetching // both the page default and a returning visitor's stored choice. var fontURLs = ({"brush":["/assets/fonts/space-grotesk-prose-core.woff2","/assets/fonts/knewave-display-core.woff2"],"brutalist":["/assets/fonts/space-grotesk-prose-core.woff2","/assets/fonts/bungee-display-core.woff2"],"code-editorial":["/assets/fonts/literata-prose-core.woff2","/assets/fonts/space-grotesk-prose-core.woff2"],"dry-brush":["/assets/fonts/source-sans-3-prose-core.woff2","/assets/fonts/water-brush-display-core.woff2"],"editorial":["/assets/fonts/source-serif-4-prose-core.woff2","/assets/fonts/cormorant-garamond-display-core.woff2"],"field-notebook":["/assets/fonts/source-sans-3-prose-core.woff2","/assets/fonts/knewave-display-core.woff2"],"garage":["/assets/fonts/ibm-plex-sans-prose-core.woff2","/assets/fonts/trade-winds-display-core.woff2"],"handwritten":["/assets/fonts/source-sans-3-prose-core.woff2","/assets/fonts/kalam-display-core.woff2"],"humanist":["/assets/fonts/source-serif-4-prose-core.woff2","/assets/fonts/source-sans-3-prose-core.woff2"],"indie-zine":["/assets/fonts/space-grotesk-prose-core.woff2","/assets/fonts/rubik-dirt-display-core.woff2"],"literary":["/assets/fonts/literata-prose-core.woff2","/assets/fonts/fraunces-display-core.woff2"],"marker-note":["/assets/fonts/source-sans-3-prose-core.woff2","/assets/fonts/permanent-marker-display-core.woff2"],"modern-editorial":["/assets/fonts/manrope-prose-core.woff2","/assets/fonts/fraunces-display-core.woff2"],"modern-soft":["/assets/fonts/manrope-prose-core.woff2","/assets/fonts/syne-display-core.woff2"],"painted-sign":["/assets/fonts/source-sans-3-prose-core.woff2","/assets/fonts/finger-paint-display-core.woff2"],"plain":["/assets/fonts/source-serif-4-prose-core.woff2","/assets/fonts/inter-tight-display-core.woff2"],"poster-grit":["/assets/fonts/space-grotesk-prose-core.woff2","/assets/fonts/sedgwick-ave-display-display-core.woff2"],"system":[],"system-newspaper":[],"system-reader":[],"system-serif":[],"system-terminal":[],"technical":["/assets/fonts/ibm-plex-sans-prose-core.woff2"],"typewriter":["/assets/fonts/crimson-pro-prose-core.woff2","/assets/fonts/special-elite-display-core.woff2"]})[preloadFontpack] || []; if (Array.isArray(fontURLs)) { fontURLs.forEach(function(url) { var link = document.createElement('link'); link.rel = 'preload'; link.href = url; link.as = 'font'; link.type = 'font/woff2'; link.crossOrigin = 'anonymous'; document.head.appendChild(link); }); } if (fontpack) { document.documentElement.dataset.fontpack = fontpack; } })(); :root { } /* Native controls and scrollbars follow the site's resolved mode, not the OS. */ html:root { color-scheme: dark; } html:root[data-theme="light"] { color-scheme: light; } .share-panel { margin: var(--space-8, 2rem) 0 var(--space-6, 1.5rem); padding-top: var(--space-4, 1rem); border-top: 1px solid var(--color-border, #e1e1e1); } .share-panel__title { font-size: var(--text-sm, 0.95rem); font-weight: 600; margin: 0 0 0.75rem; } .share-buttons, .share-panel__grid { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: var(--space-4, 1rem); } .share-button { display: inline-flex; align-items: center; justify-content: center; width: 2.2rem; height: 2.2rem; padding: 0; background: transparent; border-radius: 999px; border: 1px solid var(--color-border, #d0d0d0); color: var(--color-text, currentColor); cursor: pointer; text-decoration: none; transition: border-color 0.2s ease, background-color 0.2s ease, color 0.2s ease; } .share-button__icon { width: 1.1rem; height: 1.1rem; display: inline-flex; align-items: center; justify-content: center; } .share-button__icon svg { width: 100%; height: 100%; display: block; } .share-button__label, .share-button__name { display: none; } .share-button__hint { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .share-button:hover, .share-button:focus-visible { color: var(--color-primary, #4f46e5); border-color: var(--color-primary, #4f46e5); background: color-mix(in srgb, var(--color-primary, #4f46e5) 12%, var(--color-surface, #ffffff)); } .share-button--copied { color: var(--color-primary, #4f46e5); border-color: var(--color-primary, #4f46e5); background: color-mix(in srgb, var(--color-primary, #4f46e5) 16%, transparent); } /* Prevent horizontal overflow from background decorations */ html, body { max-width: 100vw; overflow-x: hidden; } /* Article background variables for content readability */ :root { --article-bg: color-mix(in srgb, var(--color-background) 95%, transparent); --article-blur: 8px; --article-shadow: 0 4px 24px rgba(0, 0, 0, 0.4); --article-radius: 12px; } /* Apply article background styling when background decorations are enabled */ article.post, section.feed, div.feed, .blogroll-page, .reader-page { background: var(--article-bg); box-shadow: var(--article-shadow); border-radius: var(--article-radius); } /* Responsive padding for feed/list containers - mobile first. article.post keeps the theme padding scale from main.css. */ section.feed, div.feed, .blogroll-page, .reader-page { padding: var(--space-6, 1.5rem); } @media (max-width: 768px) { section.feed, div.feed, .blogroll-page, .reader-page { padding: var(--space-4, 1rem) var(--space-3, 0.75rem); border-radius: var(--radius, 0.375rem); } } @media (max-width: 480px) { section.feed, div.feed, .blogroll-page, .reader-page { padding: var(--space-3, 0.75rem) var(--space-2, 0.5rem); border-radius: 0; } } @media (max-width: 375px) { section.feed, div.feed, .blogroll-page, .reader-page { padding: var(--space-2, 0.5rem) var(--space-1, 0.25rem); } } .background-layer { width: 100%; height: 100%; } /* Style for snow-fall custom element */ snow-fall { display: block; position: fixed; inset: 0; pointer-events: none; z-index: 5; } /* Disable snow animation for users who prefer reduced motion */ @media (prefers-reduced-motion: reduce) { snow-fall { display: none; } } /* Ensure article, nav, header, and footer are ABOVE snow with solid backgrounds */ article.post, .post-content { position: relative; z-index: 10; background: var(--article-bg, var(--color-background)); } .site-header, header { position: relative; z-index: 20; background: var(--color-background); } .site-footer, footer { position: relative; z-index: 20; background: var(--color-background); } nav, .sidebar, .site-nav { position: relative; z-index: 20; background: var(--color-background); } /* Main content area above snow */ main { position: relative; z-index: 10; } html mark { background-color: var(--color-highlight) !important; color: var(--color-highlight-text) !important; } /* Internal conformance profile; scoped so normal site documents are unchanged. */ [data-rendering-specimen="canonical-headings"] { box-sizing: border-box; width: 1280px !important; height: 1000px !important; min-height: 1000px !important; padding: 24px; overflow: hidden !important; line-height: 1.6 !important; } [data-rendering-specimen="canonical-headings"] .canonical-document { box-sizing: border-box; width: 680px; max-width: 100%; margin-inline: auto; padding-inline: 0; font-family: var(--font-body, system-ui, sans-serif); font-size: 1rem; line-height: 1.6; } [data-rendering-specimen="canonical-headings"] .canonical-document__title, [data-rendering-specimen="canonical-headings"] .post-content h1, [data-rendering-specimen="canonical-headings"] .post-content h2, [data-rendering-specimen="canonical-headings"] .post-content h3, [data-rendering-specimen="canonical-headings"] .post-content h4, [data-rendering-specimen="canonical-headings"] .post-content h5, [data-rendering-specimen="canonical-headings"] .post-content h6 { font-family: var(--font-heading, var(--font-body, system-ui, sans-serif)) !important; font-weight: 400; overflow: visible; border: 0; padding: 0; } [data-rendering-specimen="canonical-headings"] .canonical-document__title { margin: 0 0 0.75rem; font-size: clamp(2.5rem, 8vw, 5rem); line-height: 0.95; } [data-rendering-specimen="canonical-headings"] .post-content h1 { margin: 2.5rem 0 0.75rem; font-size: clamp(2.5rem, 8vw, 5rem); line-height: 0.95; } [data-rendering-specimen="canonical-headings"] .post-content h2 { margin: 2.5rem 0 0.75rem; font-size: clamp(2rem, 5vw, 3.5rem); line-height: 1; } [data-rendering-specimen="canonical-headings"] > .markata-canonical-texture-layer { position: absolute; inset: 0; width: 1280px; height: 1000px; pointer-events: none; background-repeat: repeat; background-image: var(--theme-texture-image, none); background-size: calc(180px * var(--theme-texture-scale, 0.92)); opacity: var(--theme-texture-opacity, 0); z-index: 20; } [data-rendering-specimen="canonical-headings"] .post-content h3 { margin: 2.5rem 0 0.75rem; font-size: 2rem; line-height: 1.05; } [data-rendering-specimen="canonical-headings"] .post-content h4 { margin: 2.5rem 0 0.75rem; font-size: 1.5rem; line-height: 1.1; } [data-rendering-specimen="canonical-headings"] .post-content h5 { margin: 2.5rem 0 0.75rem; font-size: 1.25rem; line-height: 1.2; } [data-rendering-specimen="canonical-headings"] .post-content h6 { margin: 2.5rem 0 0.75rem; font-size: 1rem; line-height: 1.25; } [data-rendering-specimen="canonical-headings"] .canonical-document :is(code, pre, kbd, samp) { font-family: var(--font-code, ui-monospace, monospace); } [data-rendering-specimen="canonical-headings"] .canonical-document :is(strong, em, mark, a) { font-family: inherit; } [data-rendering-specimen="canonical-headings"] .canonical-document :is(code, kbd, samp) { font-family: var(--font-code, ui-monospace, monospace); } html[data-fontpack] [data-rendering-specimen="canonical-headings"] .post-content :is(h1, h2, h3, h4, h5, h6) :is(strong, em, a) { color: var(--color-text) !important; font-family: var(--font-heading) !important; } html[data-fontpack] [data-rendering-specimen="canonical-headings"] .post-content :is(h1, h2, h3, h4, h5, h6) mark { background: var(--color-highlight) !important; color: var(--color-highlight-text) !important; -webkit-text-fill-color: var(--color-highlight-text) !important; } [data-rendering-specimen="canonical-headings"] .canonical-document :is(h1, h2, h3, h4, h5, h6) :is(strong, em, a) { color: var(--color-text) !important; font-family: var(--font-heading) !important; } [data-rendering-specimen="canonical-headings"] .canonical-document :is(h1, h2, h3, h4, h5, h6) mark { background: var(--color-highlight) !important; color: var(--color-highlight-text) !important; -webkit-text-fill-color: var(--color-highlight-text) !important; } [data-rendering-specimen="canonical-headings"] :is(h1, h2, h3, h4, h5, h6) :is(strong, em, a) { color: var(--color-text) !important; font-family: var(--font-heading) !important; } [data-rendering-specimen="canonical-headings"] :is(h1, h2, h3, h4, h5, h6) mark { background: var(--color-highlight) !important; color: var(--color-highlight-text) !important; -webkit-text-fill-color: var(--color-highlight-text) !important; } [data-rendering-specimen="canonical-headings"] .post-content :is(h1, h2, h3, h4, h5, h6) :is(code, kbd, samp) { color: inherit !important; font-family: var(--font-code, ui-monospace, monospace) !important; } html.canonical-specimen-route body { background-size: 1344px 559px !important; } html.canonical-specimen-route body { line-height: 1.6 !important; } html.canonical-specimen-route body::before { background-size: calc(180px * .92) calc(180px * .92) !important; } html.canonical-specimen-route body::after { background-size: 1344px 559px !important; } [data-rendering-specimen="canonical-headings"] .post-content p { margin: 1rem 0; } [data-rendering-specimen="canonical-headings"] mark { box-decoration-break: clone; -webkit-box-decoration-break: clone; } /* The capture harness uses this query route. Keep the specimen itself as the only painted surface; normal site chrome must not enter evidence. */ html.canonical-specimen-route body, body:has([data-rendering-specimen="canonical-headings"]) { overflow: hidden; } html.canonical-specimen-route body > :not(.page-wrapper), body:has([data-rendering-specimen="canonical-headings"]) > :not(.skip-link):not(.site-header):not(#view-transition-progress):not(footer):not(.page-wrapper) { display: none !important; } body:has([data-rendering-specimen="canonical-headings"]) > .skip-link, body:has([data-rendering-specimen="canonical-headings"]) > .site-header, body:has([data-rendering-specimen="canonical-headings"]) > #view-transition-progress, body:has([data-rendering-specimen="canonical-headings"]) > footer { display: none !important; } html.canonical-specimen-route body .page-wrapper, body:has([data-rendering-specimen="canonical-headings"]) .page-wrapper { display: contents; } body:has([data-rendering-specimen="canonical-headings"]) .page-wrapper > :not(main) { display: none !important; } html.canonical-specimen-route body .page-wrapper > :not(main) { display: none !important; } html.canonical-specimen-route body [data-rendering-specimen="canonical-headings"], body:has([data-rendering-specimen="canonical-headings"]) [data-rendering-specimen="canonical-headings"] { box-sizing: border-box; width: 1280px !important; height: 1000px !important; min-height: 1000px !important; max-width: none !important; margin: 0; padding: 24px; overflow: hidden !important; } html.canonical-specimen-route [data-rendering-specimen="canonical-headings"] .canonical-document { width: 680px !important; max-width: 100% !important; margin-inline: auto; } html.canonical-specimen-route:not(.canonical-natural-route) [data-rendering-specimen="canonical-headings"] { box-sizing: border-box !important; width: 1280px !important; height: 1000px !important; min-height: 1000px !important; max-height: 1000px !important; overflow: hidden !important; } html.canonical-natural-route, html.canonical-natural-route body, html.canonical-natural-route body .page-wrapper, html.canonical-natural-route body [data-rendering-specimen="canonical-headings"] { height: auto !important; min-height: 0 !important; max-height: none !important; overflow: visible !important; } html.canonical-natural-route body { width: 1280px; } html.canonical-natural-route body [data-rendering-specimen="canonical-headings"] { width: 1280px !important; max-width: none !important; } Skip to main content Waylon Walker start here Article start here Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here. metaslash archive Collection archive All published posts 2596 posts Publication rhythm rss Article rss I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in... metaslash reader RSS reader reader Recent articles, videos, and podcasts from followed RSS feeds. 116 sources random Serendipity random Find a post you might have missed. 2696 posts in the draw Colors Style Font No themes match. Size A A A A ←→↑↓ preview · 123 tabs · Enter done Reset Loading: Auto Loading preference Auto Recommended Save Data Full Quality Use Auto Keep my choice Suggestion Series b In this series ‹ › calendar [ prev ] next {} feeds javascript b64 web wakelock vhs themes grafana dashboards as k8s configmap ruff single line import Markata list posts by year Use pbpaste for clean shell history pre-commit exclude newlines in css before testing nvim installs vim date aptitude why configure timezone bc tailwind aspect markdown it attrs with slashes dont work setting up nvim-manager starship prompt emoji in headless chrome in docker postiz-file-upload Links rely on color to be distiniquishable urllink debug cloudflared tunnel setup cloudflared tunnel on ubuntu price an stl print on slant3d k3s config after first install Print in place nuts with cura Vim-gq Slug Obsidian-new-file Obsidian-go-to-definition Obsidian Using Templater Like Copier Obsidian Image Converter convert mp4 for twitter with ffmpeg arch remove orphaned packages k8s kustomize diff kubectl dash k animal well keyboard diskcache as debounce Install sealed-secreats via manifest playerctl fixes arch media keys tailwind post template tailscale ssh Latest Page in Markata just picker showmount-e control minio token access How to List Sqlite tables Redka Runs on SQLite Am I vulnerable to the xz backdoor? arch dependencies copier trust {"feeds":[{"slug":"til","title":"Today I Learned","priority":"auto","primary":true,"containsCurrentPost":true,"variants":[{"key":"md","label":"md","href":"/til.md"},{"key":"json","label":"json","href":"/til/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/til/archive/rss.xml"},{"key":"rss","label":"rss","href":"/til/rss.xml"},{"key":"atom","label":"atom","href":"/til/atom.xml"},{"key":"html","label":"html","href":"/til/"},{"key":"simple","label":"simple","href":"/til/simple/"},{"key":"txt","label":"txt","href":"/til.txt"}],"calendar":true,"posts":[{"slug":"javascript-b64","title":"javascript b64","href":"/javascript-b64/?feed=til"},{"slug":"web-wakelock","title":"web wakelock","href":"/web-wakelock/?feed=til"},{"slug":"vhs-themes","title":"vhs themes","href":"/vhs-themes/?feed=til"},{"slug":"grafana-dashboards-as-k8s-configmap","title":"grafana dashboards as k8s configmap","href":"/grafana-dashboards-as-k8s-configmap/?feed=til"},{"slug":"ruff-single-line-import","title":"ruff single line import","href":"/ruff-single-line-import/?feed=til"},{"slug":"markata-list-posts-by-year","title":"Markata list posts by year","href":"/markata-list-posts-by-year/?feed=til"},{"slug":"use-pbpaste-for-clean-shell-history","title":"Use pbpaste for clean shell history","href":"/use-pbpaste-for-clean-shell-history/?feed=til"},{"slug":"pre-commit-exclude","title":"pre-commit exclude","href":"/pre-commit-exclude/?feed=til"},{"slug":"newlines-in-css-before","title":"newlines in css before","href":"/newlines-in-css-before/?feed=til"},{"slug":"testing-nvim-installs","title":"testing nvim installs","href":"/testing-nvim-installs/?feed=til"},{"slug":"vim-date","title":"vim date","href":"/vim-date/?feed=til"},{"slug":"aptitude-why","title":"aptitude why","href":"/aptitude-why/?feed=til"},{"slug":"configure-tz","title":"configure timezone","href":"/configure-tz/?feed=til"},{"slug":"bc","title":"bc","href":"/bc/?feed=til"},{"slug":"tailwind-aspect","title":"tailwind aspect","href":"/tailwind-aspect/?feed=til"},{"slug":"markdown-it-attrs-with-slashes-dont-work","title":"markdown it attrs with slashes dont work","href":"/markdown-it-attrs-with-slashes-dont-work/?feed=til"},{"slug":"setting-up-nvim-manager-starship-prompt","title":"setting up nvim-manager starship prompt","href":"/setting-up-nvim-manager-starship-prompt/?feed=til"},{"slug":"emoji-in-headless-chrome-in-docker","title":"emoji in headless chrome in docker","href":"/emoji-in-headless-chrome-in-docker/?feed=til"},{"slug":"postiz-file-upload","title":"postiz-file-upload","href":"/postiz-file-upload/?feed=til"},{"slug":"links-rely-on-color-to-be-distiniquishable","title":"Links rely on color to be distiniquishable","href":"/links-rely-on-color-to-be-distiniquishable/?feed=til"},{"slug":"urllink","title":"urllink","href":"/urllink/?feed=til"},{"slug":"debug-cloudflared-tunnel","title":"debug cloudflared tunnel","href":"/debug-cloudflared-tunnel/?feed=til"},{"slug":"setup-cloudflared-tunnel-on-ubuntu","title":"setup cloudflared tunnel on ubuntu","href":"/setup-cloudflared-tunnel-on-ubuntu/?feed=til"},{"slug":"price-an-stl-print-on-slant3d","title":"price an stl print on slant3d","href":"/price-an-stl-print-on-slant3d/?feed=til"},{"slug":"k3s-config-after-first-install","title":"k3s config after first install","href":"/k3s-config-after-first-install/?feed=til"},{"slug":"print-in-place-nuts-with-cura","title":"Print in place nuts with cura","href":"/print-in-place-nuts-with-cura/?feed=til","active":true},{"slug":"vim-gq","title":"Vim-gq","href":"/vim-gq/?feed=til"},{"slug":"slug","title":"Slug","href":"/slug/?feed=til"},{"slug":"obsidian-new-file","title":"Obsidian-new-file","href":"/obsidian-new-file/?feed=til"},{"slug":"obsidian-go-to-definition","title":"Obsidian-go-to-definition","href":"/obsidian-go-to-definition/?feed=til"},{"slug":"obsidian-using-templater-like-copier","title":"Obsidian Using Templater Like Copier","href":"/obsidian-using-templater-like-copier/?feed=til"},{"slug":"obsidian-image-converter","title":"Obsidian Image Converter","href":"/obsidian-image-converter/?feed=til"},{"slug":"convert-mp4-for-twitter-with-ffmpeg","title":"convert mp4 for twitter with ffmpeg","href":"/convert-mp4-for-twitter-with-ffmpeg/?feed=til"},{"slug":"arch-remove-orphaned-packages","title":"arch remove orphaned packages","href":"/arch-remove-orphaned-packages/?feed=til"},{"slug":"kubebernetes-kustomize-diff","title":"k8s kustomize diff","href":"/kubebernetes-kustomize-diff/?feed=til"},{"slug":"kubectl-dash-k","title":"kubectl dash k","href":"/kubectl-dash-k/?feed=til"},{"slug":"animal-well-keyboard","title":"animal well keyboard","href":"/animal-well-keyboard/?feed=til"},{"slug":"diskcache-as-debounce","title":"diskcache as debounce","href":"/diskcache-as-debounce/?feed=til"},{"slug":"install-sealed-secreats-via-manifest","title":"Install sealed-secreats via manifest","href":"/install-sealed-secreats-via-manifest/?feed=til"},{"slug":"playerctl-fixes-arch","title":"playerctl fixes arch media keys","href":"/playerctl-fixes-arch/?feed=til"},{"slug":"tailwind-post-template","title":"tailwind post template","href":"/tailwind-post-template/?feed=til"},{"slug":"tailscale-ssh","title":"tailscale ssh","href":"/tailscale-ssh/?feed=til"},{"slug":"latest-page-in-markata","title":"Latest Page in Markata","href":"/latest-page-in-markata/?feed=til"},{"slug":"just-picker","title":"just picker","href":"/just-picker/?feed=til"},{"slug":"showmount-e","title":"showmount-e","href":"/showmount-e/?feed=til"},{"slug":"control-minio-token-access","title":"control minio token access","href":"/control-minio-token-access/?feed=til"},{"slug":"how-to-list-sqlite-tables","title":"How to List Sqlite tables","href":"/how-to-list-sqlite-tables/?feed=til"},{"slug":"redka-runs-on-sqlite","title":"Redka Runs on SQLite","href":"/redka-runs-on-sqlite/?feed=til"},{"slug":"am-i-vulnerable-to-the-xz-backdoor","title":"Am I vulnerable to the xz backdoor?","href":"/am-i-vulnerable-to-the-xz-backdoor/?feed=til"},{"slug":"arch-dependencies","title":"arch dependencies","href":"/arch-dependencies/?feed=til"},{"slug":"copier-trust","title":"copier trust","href":"/copier-trust/?feed=til"}],"totalPosts":178,"prev":{"slug":"k3s-config-after-first-install","title":"k3s config after first install","href":"/k3s-config-after-first-install/?feed=til"},"next":{"slug":"vim-gq","title":"Vim-gq","href":"/vim-gq/?feed=til"}},{"slug":"archive","title":"Archive","priority":"auto","primary":true,"containsCurrentPost":true,"variants":[{"key":"md","label":"md","href":"/archive.md"},{"key":"json","label":"json","href":"/archive/feed.json"},{"key":"rss","label":"rss","href":"/archive/rss.xml"},{"key":"atom","label":"atom","href":"/archive/atom.xml"},{"key":"html","label":"html","href":"/archive/"},{"key":"simple","label":"simple","href":"/archive/simple/"},{"key":"txt","label":"txt","href":"/archive.txt"}],"calendar":true,"posts":[{"slug":"thought-399","title":"Elwin Ransom 👽 on X: “Help, I’m being Helix pilled by my own f…","href":"/thought-399/?feed=archive"},{"slug":"thought-398","title":"ticklemykeys on X: “New cap of my own design https://t.co/j63q…","href":"/thought-398/?feed=archive"},{"slug":"thought-397","title":"ticklemykeys on X: “Full size MX caps, printing flawlessly wit…","href":"/thought-397/?feed=archive"},{"slug":"wyattbubbylee-zmk-config-wyatt-3x5","title":"⭐ wyattbubbylee zmk-config-wyatt-3x5","href":"/wyattbubbylee-zmk-config-wyatt-3x5/?feed=archive"},{"slug":"thought-396","title":"Cherry 8 mm keycap mount","href":"/thought-396/?feed=archive"},{"slug":"thought-394","title":"distrobox/docs/usage/distrobox-assemble.md at main · 89luca89/…","href":"/thought-394/?feed=archive"},{"slug":"shots/portajohn2-on-portajohn1","title":"Modular Input Device on Wood","href":"/shots/portajohn2-on-portajohn1/?feed=archive"},{"slug":"thought-393","title":"urob/zmk-config: Personal ZMK firmware configuration for vario…","href":"/thought-393/?feed=archive"},{"slug":"thought-392","title":"add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da","href":"/thought-392/?feed=archive"},{"slug":"manyfold3d-manyfold","title":"⭐ manyfold3d manyfold","href":"/manyfold3d-manyfold/?feed=archive"},{"slug":"thought-391","title":"Taildrop · Tailscale Docs","href":"/thought-391/?feed=archive"},{"slug":"valberg-django-admin-tui","title":"⭐ valberg django-admin-tui","href":"/valberg-django-admin-tui/?feed=archive"},{"slug":"thought-390","title":"triliu/Heawood42: Files for the Heawood42 ortholinear split ke…","href":"/thought-390/?feed=archive"},{"slug":"triliu-heawood42","title":"⭐ triliu Heawood42","href":"/triliu-heawood42/?feed=archive"},{"slug":"thought-389","title":"Leveret v2 \u0026 lever keycaps","href":"/thought-389/?feed=archive"},{"slug":"k3s-config-after-first-install","title":"k3s config after first install","href":"/k3s-config-after-first-install/?feed=archive"},{"slug":"thought-388","title":"Alternatives to Using Pure Black (#000000) for Text and Backgr…","href":"/thought-388/?feed=archive"},{"slug":"thought-387","title":"Wes Bos on X: “Are you using position: absolute; to overlap el…","href":"/thought-387/?feed=archive"},{"slug":"thought-386","title":"Buttery icons","href":"/thought-386/?feed=archive"},{"slug":"pifi-org-pifi-openwrt-raspberry-pi","title":"⭐ pifi-org pifi-openwrt-raspberry-pi","href":"/pifi-org-pifi-openwrt-raspberry-pi/?feed=archive"},{"slug":"trying-n8n","title":"Trying-n8n","href":"/trying-n8n/?feed=archive"},{"slug":"thought-385","title":"NOT - LTT Screwdriver - Fancy by Erer2001 | Download free STL …","href":"/thought-385/?feed=archive"},{"slug":"thought-384","title":"Installing Python - uv","href":"/thought-384/?feed=archive"},{"slug":"thought-383","title":"Switching Configs in Neovim • Michael Uloth","href":"/thought-383/?feed=archive"},{"slug":"tjdevries-kickstart-css","title":"⭐ tjdevries kickstart.css","href":"/tjdevries-kickstart-css/?feed=archive"},{"slug":"print-in-place-nuts-with-cura","title":"Print in place nuts with cura","href":"/print-in-place-nuts-with-cura/?feed=archive","active":true},{"slug":"infused-kim-kb_zmk_ps2_mouse_trackpoint_driver","title":"⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver","href":"/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/?feed=archive"},{"slug":"tjdevries-failwind-nvim","title":"⭐ tjdevries failwind.nvim","href":"/tjdevries-failwind-nvim/?feed=archive"},{"slug":"new-caps-for-porta-john","title":"New-caps-for-porta-john","href":"/new-caps-for-porta-john/?feed=archive"},{"slug":"thought-382","title":"Keyboard Build Log | Halfwit’s Dev Blog","href":"/thought-382/?feed=archive"},{"slug":"vim-gq","title":"Vim-gq","href":"/vim-gq/?feed=archive"},{"slug":"slug","title":"Slug","href":"/slug/?feed=archive"},{"slug":"obsidian-new-file","title":"Obsidian-new-file","href":"/obsidian-new-file/?feed=archive"},{"slug":"blogging-in-2024","title":"blogging in 2024","href":"/blogging-in-2024/?feed=archive"},{"slug":"thought-381","title":"Hotkey to open link under at the text cursor position while ty…","href":"/thought-381/?feed=archive"},{"slug":"obsidian-go-to-definition","title":"Obsidian-go-to-definition","href":"/obsidian-go-to-definition/?feed=archive"},{"slug":"braindefender-klp-lame-keycaps","title":"⭐ braindefender KLP-Lame-Keycaps","href":"/braindefender-klp-lame-keycaps/?feed=archive"},{"slug":"thought-379","title":"Make your own luck (do this to stand out in a crowded industry…","href":"/thought-379/?feed=archive"},{"slug":"thought-378","title":"I Invented Airless Cornhole Bags - YouTube","href":"/thought-378/?feed=archive"},{"slug":"thought-377","title":"The Tank - YouTube","href":"/thought-377/?feed=archive"},{"slug":"obsidian-using-templater-like-copier","title":"Obsidian Using Templater Like Copier","href":"/obsidian-using-templater-like-copier/?feed=archive"},{"slug":"trying-obsidian","title":"Trying Obsidian","href":"/trying-obsidian/?feed=archive"},{"slug":"obsidian-image-converter","title":"Obsidian Image Converter","href":"/obsidian-image-converter/?feed=archive"},{"slug":"thought-374","title":"How Fly.io uses Docker (without Docker) - YouTube","href":"/thought-374/?feed=archive"},{"slug":"thought-373","title":"Ultimate Modular Macro Keyboard “Kibly” : r/MechanicalKeyboards","href":"/thought-373/?feed=archive"},{"slug":"thought-372","title":"This is Goodbye? - YouTube","href":"/thought-372/?feed=archive"},{"slug":"thought-369","title":"he’s back again","href":"/thought-369/?feed=archive"},{"slug":"thought-361","title":"Note-taking with Zettelkasten - An Introduction - YouTube","href":"/thought-361/?feed=archive"},{"slug":"thought-360","title":"add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-…","href":"/thought-360/?feed=archive"},{"slug":"convert-mp4-for-twitter-with-ffmpeg","title":"convert mp4 for twitter with ffmpeg","href":"/convert-mp4-for-twitter-with-ffmpeg/?feed=archive"},{"slug":"thought-359","title":"Tickle My Keys","href":"/thought-359/?feed=archive"}],"totalPosts":2596,"prev":{"slug":"tjdevries-kickstart-css","title":"⭐ tjdevries kickstart.css","href":"/tjdevries-kickstart-css/?feed=archive"},"next":{"slug":"infused-kim-kb_zmk_ps2_mouse_trackpoint_driver","title":"⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver","href":"/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/?feed=archive"}},{"slug":"all","title":"All Posts","priority":"auto","containsCurrentPost":true,"variants":[{"key":"md","label":"md","href":"/all.md"},{"key":"json","label":"json","href":"/all/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/all/archive/rss.xml"},{"key":"rss","label":"rss","href":"/all/rss.xml"},{"key":"atom","label":"atom","href":"/all/atom.xml"},{"key":"html","label":"html","href":"/all/"},{"key":"simple","label":"simple","href":"/all/simple/"},{"key":"txt","label":"txt","href":"/all.txt"}],"calendar":true,"posts":[{"slug":"thought-399","title":"Elwin Ransom 👽 on X: “Help, I’m being Helix pilled by my own f…","href":"/thought-399/?feed=all"},{"slug":"thought-398","title":"ticklemykeys on X: “New cap of my own design https://t.co/j63q…","href":"/thought-398/?feed=all"},{"slug":"thought-397","title":"ticklemykeys on X: “Full size MX caps, printing flawlessly wit…","href":"/thought-397/?feed=all"},{"slug":"wyattbubbylee-zmk-config-wyatt-3x5","title":"⭐ wyattbubbylee zmk-config-wyatt-3x5","href":"/wyattbubbylee-zmk-config-wyatt-3x5/?feed=all"},{"slug":"thought-396","title":"Cherry 8 mm keycap mount","href":"/thought-396/?feed=all"},{"slug":"thought-394","title":"distrobox/docs/usage/distrobox-assemble.md at main · 89luca89/…","href":"/thought-394/?feed=all"},{"slug":"shots/portajohn2-on-portajohn1","title":"Modular Input Device on Wood","href":"/shots/portajohn2-on-portajohn1/?feed=all"},{"slug":"thought-393","title":"urob/zmk-config: Personal ZMK firmware configuration for vario…","href":"/thought-393/?feed=all"},{"slug":"thought-392","title":"add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da","href":"/thought-392/?feed=all"},{"slug":"manyfold3d-manyfold","title":"⭐ manyfold3d manyfold","href":"/manyfold3d-manyfold/?feed=all"},{"slug":"thought-391","title":"Taildrop · Tailscale Docs","href":"/thought-391/?feed=all"},{"slug":"valberg-django-admin-tui","title":"⭐ valberg django-admin-tui","href":"/valberg-django-admin-tui/?feed=all"},{"slug":"thought-390","title":"triliu/Heawood42: Files for the Heawood42 ortholinear split ke…","href":"/thought-390/?feed=all"},{"slug":"triliu-heawood42","title":"⭐ triliu Heawood42","href":"/triliu-heawood42/?feed=all"},{"slug":"thought-389","title":"Leveret v2 \u0026 lever keycaps","href":"/thought-389/?feed=all"},{"slug":"k3s-config-after-first-install","title":"k3s config after first install","href":"/k3s-config-after-first-install/?feed=all"},{"slug":"thought-388","title":"Alternatives to Using Pure Black (#000000) for Text and Backgr…","href":"/thought-388/?feed=all"},{"slug":"thought-387","title":"Wes Bos on X: “Are you using position: absolute; to overlap el…","href":"/thought-387/?feed=all"},{"slug":"thought-386","title":"Buttery icons","href":"/thought-386/?feed=all"},{"slug":"pifi-org-pifi-openwrt-raspberry-pi","title":"⭐ pifi-org pifi-openwrt-raspberry-pi","href":"/pifi-org-pifi-openwrt-raspberry-pi/?feed=all"},{"slug":"trying-n8n","title":"Trying-n8n","href":"/trying-n8n/?feed=all"},{"slug":"thought-385","title":"NOT - LTT Screwdriver - Fancy by Erer2001 | Download free STL …","href":"/thought-385/?feed=all"},{"slug":"thought-384","title":"Installing Python - uv","href":"/thought-384/?feed=all"},{"slug":"thought-383","title":"Switching Configs in Neovim • Michael Uloth","href":"/thought-383/?feed=all"},{"slug":"tjdevries-kickstart-css","title":"⭐ tjdevries kickstart.css","href":"/tjdevries-kickstart-css/?feed=all"},{"slug":"print-in-place-nuts-with-cura","title":"Print in place nuts with cura","href":"/print-in-place-nuts-with-cura/?feed=all","active":true},{"slug":"infused-kim-kb_zmk_ps2_mouse_trackpoint_driver","title":"⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver","href":"/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/?feed=all"},{"slug":"tjdevries-failwind-nvim","title":"⭐ tjdevries failwind.nvim","href":"/tjdevries-failwind-nvim/?feed=all"},{"slug":"new-caps-for-porta-john","title":"New-caps-for-porta-john","href":"/new-caps-for-porta-john/?feed=all"},{"slug":"thought-382","title":"Keyboard Build Log | Halfwit’s Dev Blog","href":"/thought-382/?feed=all"},{"slug":"vim-gq","title":"Vim-gq","href":"/vim-gq/?feed=all"},{"slug":"slug","title":"Slug","href":"/slug/?feed=all"},{"slug":"obsidian-new-file","title":"Obsidian-new-file","href":"/obsidian-new-file/?feed=all"},{"slug":"blogging-in-2024","title":"blogging in 2024","href":"/blogging-in-2024/?feed=all"},{"slug":"thought-381","title":"Hotkey to open link under at the text cursor position while ty…","href":"/thought-381/?feed=all"},{"slug":"obsidian-go-to-definition","title":"Obsidian-go-to-definition","href":"/obsidian-go-to-definition/?feed=all"},{"slug":"braindefender-klp-lame-keycaps","title":"⭐ braindefender KLP-Lame-Keycaps","href":"/braindefender-klp-lame-keycaps/?feed=all"},{"slug":"thought-379","title":"Make your own luck (do this to stand out in a crowded industry…","href":"/thought-379/?feed=all"},{"slug":"thought-378","title":"I Invented Airless Cornhole Bags - YouTube","href":"/thought-378/?feed=all"},{"slug":"thought-377","title":"The Tank - YouTube","href":"/thought-377/?feed=all"},{"slug":"obsidian-using-templater-like-copier","title":"Obsidian Using Templater Like Copier","href":"/obsidian-using-templater-like-copier/?feed=all"},{"slug":"trying-obsidian","title":"Trying Obsidian","href":"/trying-obsidian/?feed=all"},{"slug":"obsidian-image-converter","title":"Obsidian Image Converter","href":"/obsidian-image-converter/?feed=all"},{"slug":"thought-374","title":"How Fly.io uses Docker (without Docker) - YouTube","href":"/thought-374/?feed=all"},{"slug":"thought-373","title":"Ultimate Modular Macro Keyboard “Kibly” : r/MechanicalKeyboards","href":"/thought-373/?feed=all"},{"slug":"thought-372","title":"This is Goodbye? - YouTube","href":"/thought-372/?feed=all"},{"slug":"thought-369","title":"he’s back again","href":"/thought-369/?feed=all"},{"slug":"thought-361","title":"Note-taking with Zettelkasten - An Introduction - YouTube","href":"/thought-361/?feed=all"},{"slug":"thought-360","title":"add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-…","href":"/thought-360/?feed=all"},{"slug":"convert-mp4-for-twitter-with-ffmpeg","title":"convert mp4 for twitter with ffmpeg","href":"/convert-mp4-for-twitter-with-ffmpeg/?feed=all"},{"slug":"thought-359","title":"Tickle My Keys","href":"/thought-359/?feed=all"}],"totalPosts":2650,"prev":{"slug":"tjdevries-kickstart-css","title":"⭐ tjdevries kickstart.css","href":"/tjdevries-kickstart-css/?feed=all"},"next":{"slug":"infused-kim-kb_zmk_ps2_mouse_trackpoint_driver","title":"⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver","href":"/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/?feed=all"}},{"slug":"blog","title":"Blog","priority":"primary","primary":true,"variants":[{"key":"md","label":"md","href":"/blog.md"},{"key":"json","label":"json","href":"/blog/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/blog/archive/rss.xml"},{"key":"rss","label":"rss","href":"/blog/rss.xml"},{"key":"atom","label":"atom","href":"/blog/atom.xml"},{"key":"html","label":"html","href":"/blog/"},{"key":"simple","label":"simple","href":"/blog/simple/"},{"key":"txt","label":"txt","href":"/blog.txt"}],"calendar":true,"posts":[{"slug":"is-your-org-ready-for-agents","title":"Is Your Org Ready For Agents","href":"/is-your-org-ready-for-agents/?feed=blog"},{"slug":"brain-rot-or-the-new-normal","title":"Brain Rot Or The New Normal","href":"/brain-rot-or-the-new-normal/?feed=blog"},{"slug":"the-vomit-prompt","title":"The Vomit Prompt","href":"/the-vomit-prompt/?feed=blog"},{"slug":"becoming-a-piano-repair-tech","title":"Becoming A Piano Repair Tech","href":"/becoming-a-piano-repair-tech/?feed=blog"},{"slug":"stl-text-lab-update","title":"Stl Text Lab Update","href":"/stl-text-lab-update/?feed=blog"},{"slug":"keys-waylonwalker-com","title":"Keys.waylonwalker.com","href":"/keys-waylonwalker-com/?feed=blog"},{"slug":"malicious-aur-packages-jun-2026","title":"Malicious Aur Packages Jun 2026","href":"/malicious-aur-packages-jun-2026/?feed=blog"},{"slug":"prompt-seagulls","title":"Prompt Seagulls","href":"/prompt-seagulls/?feed=blog"},{"slug":"agents-are-never-done","title":"agents are never done","href":"/agents-are-never-done/?feed=blog"},{"slug":"carry","title":"/carry/","href":"/carry/?feed=blog"},{"slug":"i-built-a-tmux-session-switcher","title":"I Built A Tmux Session Switcher","href":"/i-built-a-tmux-session-switcher/?feed=blog"},{"slug":"verify","title":"/verify","href":"/verify/?feed=blog"},{"slug":"top4","title":"/top4","href":"/top4/?feed=blog"},{"slug":"yep","title":"/yep","href":"/yep/?feed=blog"},{"slug":"nope","title":"/nope","href":"/nope/?feed=blog"},{"slug":"first-w-in-brotato","title":"First W In Brotato","href":"/first-w-in-brotato/?feed=blog"},{"slug":"pm-not-babysitter","title":"Pm Not Babysitter","href":"/pm-not-babysitter/?feed=blog"},{"slug":"agent-management-is-exhausting","title":"Agent Management Is Exhausting","href":"/agent-management-is-exhausting/?feed=blog"},{"slug":"stop-using-boomer-ai","title":"Stop Using Boomer Ai","href":"/stop-using-boomer-ai/?feed=blog"},{"slug":"mentions","title":"Mentions","href":"/mentions/?feed=blog"},{"slug":"what-your-coding-tool-says-about-you","title":"What Your Coding Tool Says About You","href":"/what-your-coding-tool-says-about-you/?feed=blog"},{"slug":"dont-trust-users-tokens","title":"Dont Trust Users Tokens","href":"/dont-trust-users-tokens/?feed=blog"},{"slug":"ai","title":"Ai","href":"/ai/?feed=blog"},{"slug":"og-sample","title":"Og-Sample","href":"/og-sample/?feed=blog"},{"slug":"2026-resolutions","title":"2026 Resolutions","href":"/2026-resolutions/?feed=blog"},{"slug":"developer-vs-artist-ai","title":"Developer Vs Artist Ai","href":"/developer-vs-artist-ai/?feed=blog"},{"slug":"the-right-reasons-to-run-kubernetes-in-your-homelab","title":"The Right Reasons To Run Kubernetes In Your Homelab","href":"/the-right-reasons-to-run-kubernetes-in-your-homelab/?feed=blog"},{"slug":"one-year-of-shots","title":"One Year Of Shots","href":"/one-year-of-shots/?feed=blog"},{"slug":"the-wrong-reasons-to-run-kubernetes-in-your-homelab","title":"The Wrong Reasons To Run Kubernetes In Your Homelab","href":"/the-wrong-reasons-to-run-kubernetes-in-your-homelab/?feed=blog"},{"slug":"another-big-cloud-outage-nov-2025","title":"Another Big Cloud Outage Nov 2025","href":"/another-big-cloud-outage-nov-2025/?feed=blog"},{"slug":"3d-printed-corner-clamp","title":"3d-Printed Corner Clamp","href":"/3d-printed-corner-clamp/?feed=blog"},{"slug":"techbrophobic","title":"Techbrophobic","href":"/techbrophobic/?feed=blog"},{"slug":"mcat-anything","title":"Mcat Anything","href":"/mcat-anything/?feed=blog"},{"slug":"missing-thoughts-on-main","title":"Missing Thoughts","href":"/missing-thoughts-on-main/?feed=blog"},{"slug":"rules","title":"Rules","href":"/rules/?feed=blog"},{"slug":"first-3d-printed-threads","title":"First 3d Printed Threads","href":"/first-3d-printed-threads/?feed=blog"},{"slug":"3d-printing-dovetails-experiment","title":"3d Printing Dovetails Experiment","href":"/3d-printing-dovetails-experiment/?feed=blog"},{"slug":"python-extras-are-for-shipping","title":"python extras are for shipping","href":"/python-extras-are-for-shipping/?feed=blog"},{"slug":"kraft-coordinates","title":"Kraft-Coordinates","href":"/kraft-coordinates/?feed=blog"},{"slug":"shots-get-an-upgrade","title":"Shots Get An Upgrade To the Main Feed","href":"/shots-get-an-upgrade/?feed=blog"},{"slug":"zmk-two-hand-hold-down","title":"zmk two hand hold down","href":"/zmk-two-hand-hold-down/?feed=blog"},{"slug":"why-make-a-website-in-2025","title":"Why Make a Website in 2025","href":"/why-make-a-website-in-2025/?feed=blog"},{"slug":"store","title":"store","href":"/store/?feed=blog"},{"slug":"when-to-vibe-code","title":"When To Vibe Code","href":"/when-to-vibe-code/?feed=blog"},{"slug":"keycap-cut-away","title":"Keycap Cut Away","href":"/keycap-cut-away/?feed=blog"},{"slug":"knife-sharpener-small-upgrade","title":"Knife Sharpener Small Upgrade","href":"/knife-sharpener-small-upgrade/?feed=blog"},{"slug":"im-out-on-agents","title":"I’m Out On Agents","href":"/im-out-on-agents/?feed=blog"},{"slug":"trying-forgejo","title":"trying forgejo","href":"/trying-forgejo/?feed=blog"},{"slug":"blender-donut-tutorial-2025","title":"blender donut tutorial 2025","href":"/blender-donut-tutorial-2025/?feed=blog"},{"slug":"command-palettes-are-overrated","title":"command palettes are overrated","href":"/command-palettes-are-overrated/?feed=blog"},{"slug":"just-fucking-use-kubernetes","title":"just fucking use kubernetes","href":"/just-fucking-use-kubernetes/?feed=blog"}],"totalPosts":328},{"slug":"ping","title":"ping","priority":"primary","primary":true,"variants":[{"key":"md","label":"md","href":"/ping.md"},{"key":"json","label":"json","href":"/ping/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/ping/archive/rss.xml"},{"key":"rss","label":"rss","href":"/ping/rss.xml"},{"key":"atom","label":"atom","href":"/ping/atom.xml"},{"key":"html","label":"html","href":"/ping/"},{"key":"simple","label":"simple","href":"/ping/simple/"},{"key":"txt","label":"txt","href":"/ping.txt"}],"calendar":true,"posts":[{"slug":"ping-80","title":"Hand painted feature film","href":"/ping-80/?feed=ping"},{"slug":"ping-79","title":"Open binaries","href":"/ping-79/?feed=ping"},{"slug":"ping-78","title":"What to do while you wait for your agent","href":"/ping-78/?feed=ping"},{"slug":"ping-77","title":"typesafe jev any good","href":"/ping-77/?feed=ping"},{"slug":"ping-76","title":"Are the ai labs really slowing down?","href":"/ping-76/?feed=ping"},{"slug":"ping-75","title":"Touch dishwasher controls","href":"/ping-75/?feed=ping"},{"slug":"ping-74","title":"politics in linux","href":"/ping-74/?feed=ping"},{"slug":"ping-73","title":"when did openai bring back the hourly limit","href":"/ping-73/?feed=ping"},{"slug":"ping-72","title":"second brain slop is dumb","href":"/ping-72/?feed=ping"},{"slug":"ping-71","title":"agentic engineering takes discipline","href":"/ping-71/?feed=ping"},{"slug":"ping-70","title":"Dammit I think I made an editor","href":"/ping-70/?feed=ping"},{"slug":"ping-69","title":"Microsoft can only 50k","href":"/ping-69/?feed=ping"},{"slug":"ping-68","title":"No one wants to on call vibes","href":"/ping-68/?feed=ping"},{"slug":"ping-67","title":"thinking about headlines","href":"/ping-67/?feed=ping"},{"slug":"ping-66","title":"Ping 66","href":"/ping-66/?feed=ping"},{"slug":"ping-65","title":"Ping 65","href":"/ping-65/?feed=ping"},{"slug":"ping-64","title":"hmmm.","href":"/ping-64/?feed=ping"},{"slug":"ping-63","title":"Does codex change throughout the token usage window?","href":"/ping-63/?feed=ping"},{"slug":"ping-62","title":"Mythos gone already","href":"/ping-62/?feed=ping"},{"slug":"ping-61","title":"just good enough","href":"/ping-61/?feed=ping"},{"slug":"flowing-thoughts-ai-to-help-blast-radius","title":"Flowing Thoughts Ai To Help Blast Radius","href":"/flowing-thoughts-ai-to-help-blast-radius/?feed=ping"},{"slug":"ping-59","title":"Ping 59","href":"/ping-59/?feed=ping"},{"slug":"ping-58","title":"remember rule 4","href":"/ping-58/?feed=ping"},{"slug":"ping-57","title":"almost left tokens on the table","href":"/ping-57/?feed=ping"},{"slug":"ping-56","title":"Can You Feel the Slop","href":"/ping-56/?feed=ping"},{"slug":"ping-55","title":"approve rm","href":"/ping-55/?feed=ping"},{"slug":"ping-54","title":"Ping 54","href":"/ping-54/?feed=ping"},{"slug":"ping-53","title":"Tokens Just don’t go as far as they used to","href":"/ping-53/?feed=ping"},{"slug":"ping-52","title":"Ping 52","href":"/ping-52/?feed=ping"},{"slug":"ping-50-a","title":"Ping 50 A","href":"/ping-50-a/?feed=ping"},{"slug":"ping-50","title":"Prove Yourself Agent","href":"/ping-50/?feed=ping"},{"slug":"ping-49","title":"What happens when the 0 days are exposed?","href":"/ping-49/?feed=ping"},{"slug":"ping-48","title":"Ping 48","href":"/ping-48/?feed=ping"},{"slug":"ping-46","title":"What is this job anymore","href":"/ping-46/?feed=ping"},{"slug":"ping-47","title":"Ping 47","href":"/ping-47/?feed=ping"},{"slug":"ping-45","title":"The year of the supply chain attacks","href":"/ping-45/?feed=ping"},{"slug":"ping-44","title":"The final nail for Windows?","href":"/ping-44/?feed=ping"},{"slug":"ping-43","title":"Ping 43","href":"/ping-43/?feed=ping"},{"slug":"ping-42","title":"Social Media is dead","href":"/ping-42/?feed=ping"},{"slug":"ping-37","title":"Where Is The Tech Industry Going","href":"/ping-37/?feed=ping"},{"slug":"is-compaction-the-issue","title":"Is Compaction The Issue","href":"/is-compaction-the-issue/?feed=ping"},{"slug":"lets-land-the-plane","title":"Lets Land The Plane","href":"/lets-land-the-plane/?feed=ping"},{"slug":"i-dont-want-someone-else-running-my-agents","title":"I don’t want someone else running my agents","href":"/i-dont-want-someone-else-running-my-agents/?feed=ping"},{"slug":"ping-38","title":"Ping 38","href":"/ping-38/?feed=ping"},{"slug":"ping-35b","title":"Learning to agent","href":"/ping-35b/?feed=ping"},{"slug":"ping-35","title":"Studio Ghibli Images in the Wild","href":"/ping-35/?feed=ping"},{"slug":"ping-36","title":"Ping 36","href":"/ping-36/?feed=ping"},{"slug":"ping-34","title":"Research, Plan, Implement","href":"/ping-34/?feed=ping"},{"slug":"ping-32","title":"Context Poisoning Was There All Along","href":"/ping-32/?feed=ping"},{"slug":"ping-33","title":"Agents cannot replace the thinking, they only amplify it","href":"/ping-33/?feed=ping"},{"slug":"ping-31","title":"Thinking about ai productivity again","href":"/ping-31/?feed=ping"}],"totalPosts":80},{"slug":"thoughts-feed","title":"Thoughts","priority":"primary","primary":true,"variants":[{"key":"md","label":"md","href":"/thoughts-feed.md"},{"key":"json","label":"json","href":"/thoughts-feed/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/thoughts-feed/archive/rss.xml"},{"key":"rss","label":"rss","href":"/thoughts-feed/rss.xml"},{"key":"atom","label":"atom","href":"/thoughts-feed/atom.xml"},{"key":"html","label":"html","href":"/thoughts-feed/"},{"key":"simple","label":"simple","href":"/thoughts-feed/simple/"},{"key":"txt","label":"txt","href":"/thoughts-feed.txt"}],"calendar":true,"posts":[{"slug":"can-you-still-say-i-built-this-if-ai-did-the-coding","title":"Can You Still Say “I Built This” If AI Did the Coding?","href":"/can-you-still-say-i-built-this-if-ai-did-the-coding/?feed=thoughts-feed"},{"slug":"asciirest-animated-ascii-art-for-web-pages-by-bas3line","title":"ascii.rest: animated ascii art for web pages, by @bas3line","href":"/asciirest-animated-ascii-art-for-web-pages-by-bas3line/?feed=thoughts-feed"},{"slug":"the-pi-updates-are-insane-pull-requests-are-dead-turso-joining-supabase-syntax-weekly","title":"The Pi Updates are insane ⟡ Pull Requests are Dead ⟡ Turso Joining Supabase ⌁ Syntax Weekly ⌁","href":"/the-pi-updates-are-insane-pull-requests-are-dead-turso-joining-supabase-syntax-weekly/?feed=thoughts-feed"},{"slug":"friday-october-2-2026","title":"Friday, October 2, 2026","href":"/friday-october-2-2026/?feed=thoughts-feed"},{"slug":"the-issue-with-everyone-vibe-coding-their-own-software","title":"The Issue With Everyone Vibe Coding Their Own Software","href":"/the-issue-with-everyone-vibe-coding-their-own-software/?feed=thoughts-feed"},{"slug":"we-use-mcp-wrong","title":"We use MCP wrong","href":"/we-use-mcp-wrong/?feed=thoughts-feed"},{"slug":"bastardica","title":"Bastardica","href":"/bastardica/?feed=thoughts-feed"},{"slug":"fixing-the-pr-bottleneck-matt-pocock-aihero","title":"Fixing the PR Bottleneck — Matt Pocock, AIHero","href":"/fixing-the-pr-bottleneck-matt-pocock-aihero/?feed=thoughts-feed"},{"slug":"thought-1033","title":"Claude Opus 5.5 100 HTML Files","href":"/thought-1033/?feed=thoughts-feed"},{"slug":"thought-1032","title":"dax on X: “in the next version of OpenCode we added /btw which…","href":"/thought-1032/?feed=thoughts-feed"},{"slug":"thought-1031","title":"Superlogical Pre-Alpha Demo: CLI - YouTube","href":"/thought-1031/?feed=thoughts-feed"},{"slug":"im-done-with-devices-that-do-everything","title":"I’m done with devices that do everything","href":"/im-done-with-devices-that-do-everything/?feed=thoughts-feed"},{"slug":"state-of-agentic-coding-10-with-armin-and-ben","title":"State of Agentic Coding #10 with Armin and Ben","href":"/state-of-agentic-coding-10-with-armin-and-ben/?feed=thoughts-feed"},{"slug":"lex-speedman-lex-at-2x-guest-at-1x","title":"Lex Speedman — Lex at 2x, guest at 1x","href":"/lex-speedman-lex-at-2x-guest-at-1x/?feed=thoughts-feed"},{"slug":"i-make-my-own-field-notes-and-it-costs-almost-nothing","title":"I Make My Own Field Notes (and it costs almost nothing)","href":"/i-make-my-own-field-notes-and-it-costs-almost-nothing/?feed=thoughts-feed"},{"slug":"itrsquos-just-the-carpethellip","title":"It’s just the Carpet…","href":"/itrsquos-just-the-carpethellip/?feed=thoughts-feed"},{"slug":"nate-berkopec-nateberkopec-on-x","title":"Nate Berkopec (@nateberkopec) on X","href":"/nate-berkopec-nateberkopec-on-x/?feed=thoughts-feed"},{"slug":"i-tried-the-os-everyone-says-will-replace-macos","title":"I Tried The OS Everyone Says Will Replace macOS","href":"/i-tried-the-os-everyone-says-will-replace-macos/?feed=thoughts-feed"},{"slug":"thought-1030","title":"/goal is a special command for OpenAI… | justin․searls․co","href":"/thought-1030/?feed=thoughts-feed"},{"slug":"thought-1029","title":"A Calendar View For My Blog - Jim Nielsen’s Blog","href":"/thought-1029/?feed=thoughts-feed"},{"slug":"thought-1028","title":"My Mechanical Keyboards","href":"/thought-1028/?feed=thoughts-feed"},{"slug":"a-quote-from-linus-torvalds","title":"A quote from Linus Torvalds","href":"/a-quote-from-linus-torvalds/?feed=thoughts-feed"},{"slug":"stop-making-tuis","title":"Stop Making TUIs","href":"/stop-making-tuis/?feed=thoughts-feed"},{"slug":"insane-ama-penalties-craig-used-for-traction-unadilla-madness-canadian-champions-crowned","title":"Insane AMA Penalties! Craig Used For Traction! Unadilla Madness! Canadian Champions Crowned!","href":"/insane-ama-penalties-craig-used-for-traction-unadilla-madness-canadian-champions-crowned/?feed=thoughts-feed"},{"slug":"im-done-with-terminals","title":"I’m done with terminals","href":"/im-done-with-terminals/?feed=thoughts-feed"},{"slug":"this-diy-datacenter-is-nuts","title":"This DIY Datacenter is NUTS","href":"/this-diy-datacenter-is-nuts/?feed=thoughts-feed"},{"slug":"thought-1027","title":"We BROKE the Golden Rule of Ergonomic Keyboards - YouTube","href":"/thought-1027/?feed=thoughts-feed"},{"slug":"dhh-how-to-build-a-profitable-company-without-losing-control","title":"DHH: How to Build a Profitable Company Without Losing Control","href":"/dhh-how-to-build-a-profitable-company-without-losing-control/?feed=thoughts-feed"},{"slug":"stop-being-skeptical-about-ai-for-development-with-charity-majors","title":"Stop being skeptical about AI for development with Charity Majors","href":"/stop-being-skeptical-about-ai-for-development-with-charity-majors/?feed=thoughts-feed"},{"slug":"thought-1026","title":"A quote from Florian Herrengt","href":"/thought-1026/?feed=thoughts-feed"},{"slug":"thought-1025","title":"Blogging and blog setups — baty.net","href":"/thought-1025/?feed=thoughts-feed"},{"slug":"thought-1024","title":"Heart of Mycelium - Gameplay Trailer - YouTube","href":"/thought-1024/?feed=thoughts-feed"},{"slug":"thought-1023","title":"The Truth About Turning Your Hobby Into a Job","href":"/thought-1023/?feed=thoughts-feed"},{"slug":"thought-1022","title":"Pipes: Blocking Communication - YouTube","href":"/thought-1022/?feed=thoughts-feed"},{"slug":"thought-1021","title":"What happens when your team 5x their token usage - YouTube","href":"/thought-1021/?feed=thoughts-feed"},{"slug":"thought-1020","title":"11 Laws of the Universe - YouTube","href":"/thought-1020/?feed=thoughts-feed"},{"slug":"thought-1019","title":"Post by @thdxr.com — Bluesky","href":"/thought-1019/?feed=thoughts-feed"},{"slug":"thought-1018","title":"XBOX DISC TO DIGITAL COMING SOON #shorts - YouTube","href":"/thought-1018/?feed=thoughts-feed"},{"slug":"thought-1017","title":"Sustainable Augmented Development • Kent Beck • YOW! 2025","href":"/thought-1017/?feed=thoughts-feed"},{"slug":"thought-1016","title":"The Internet I Grew Up With Doesn’t Exist Anymore - cleberg.net","href":"/thought-1016/?feed=thoughts-feed"},{"slug":"thought-1015","title":"Nibelungenlied40 | Book Split Keyboard Design","href":"/thought-1015/?feed=thoughts-feed"},{"slug":"thought-1014","title":"Dumb people lay off - YouTube","href":"/thought-1014/?feed=thoughts-feed"},{"slug":"thought-1013","title":"The Website Specification","href":"/thought-1013/?feed=thoughts-feed"},{"slug":"thought-1012","title":"Revisiting the closed canon","href":"/thought-1012/?feed=thoughts-feed"},{"slug":"thought-1011","title":"On Rendering Diffs :: Pierre Computer Company","href":"/thought-1011/?feed=thoughts-feed"},{"slug":"thought-1010","title":"His presence is still felt in the codebase to this day 😂 #codi…","href":"/thought-1010/?feed=thoughts-feed"},{"slug":"thought-1009","title":"UUID as a service?!","href":"/thought-1009/?feed=thoughts-feed"},{"slug":"thought-1007","title":"Average Theo video be like - YouTube","href":"/thought-1007/?feed=thoughts-feed"},{"slug":"thought-1001","title":"My First Time Hearing Lamb Of God. What Took Me So Long? - You…","href":"/thought-1001/?feed=thoughts-feed"},{"slug":"thought-1000","title":"The Point Of Making Things Is To Make Them - YouTube","href":"/thought-1000/?feed=thoughts-feed"},{"slug":"thought-999","title":"Jonathan Blow Made Me Quit My Job | Prime Reacts - YouTube","href":"/thought-999/?feed=thoughts-feed"}],"totalPosts":913},{"slug":"pings","title":"Pings","priority":"primary","primary":true,"variants":[{"key":"md","label":"md","href":"/pings.md"},{"key":"json","label":"json","href":"/pings/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/pings/archive/rss.xml"},{"key":"rss","label":"rss","href":"/pings/rss.xml"},{"key":"atom","label":"atom","href":"/pings/atom.xml"},{"key":"html","label":"html","href":"/pings/"},{"key":"simple","label":"simple","href":"/pings/simple/"},{"key":"txt","label":"txt","href":"/pings.txt"}],"calendar":true,"posts":[{"slug":"ping-80","title":"Hand painted feature film","href":"/ping-80/?feed=pings"},{"slug":"ping-79","title":"Open binaries","href":"/ping-79/?feed=pings"},{"slug":"ping-78","title":"What to do while you wait for your agent","href":"/ping-78/?feed=pings"},{"slug":"ping-77","title":"typesafe jev any good","href":"/ping-77/?feed=pings"},{"slug":"ping-76","title":"Are the ai labs really slowing down?","href":"/ping-76/?feed=pings"},{"slug":"ping-75","title":"Touch dishwasher controls","href":"/ping-75/?feed=pings"},{"slug":"ping-74","title":"politics in linux","href":"/ping-74/?feed=pings"},{"slug":"ping-73","title":"when did openai bring back the hourly limit","href":"/ping-73/?feed=pings"},{"slug":"ping-72","title":"second brain slop is dumb","href":"/ping-72/?feed=pings"},{"slug":"ping-71","title":"agentic engineering takes discipline","href":"/ping-71/?feed=pings"},{"slug":"ping-70","title":"Dammit I think I made an editor","href":"/ping-70/?feed=pings"},{"slug":"ping-69","title":"Microsoft can only 50k","href":"/ping-69/?feed=pings"},{"slug":"ping-68","title":"No one wants to on call vibes","href":"/ping-68/?feed=pings"},{"slug":"ping-67","title":"thinking about headlines","href":"/ping-67/?feed=pings"},{"slug":"ping-66","title":"Ping 66","href":"/ping-66/?feed=pings"},{"slug":"ping-65","title":"Ping 65","href":"/ping-65/?feed=pings"},{"slug":"ping-64","title":"hmmm.","href":"/ping-64/?feed=pings"},{"slug":"ping-63","title":"Does codex change throughout the token usage window?","href":"/ping-63/?feed=pings"},{"slug":"ping-62","title":"Mythos gone already","href":"/ping-62/?feed=pings"},{"slug":"ping-61","title":"just good enough","href":"/ping-61/?feed=pings"},{"slug":"flowing-thoughts-ai-to-help-blast-radius","title":"Flowing Thoughts Ai To Help Blast Radius","href":"/flowing-thoughts-ai-to-help-blast-radius/?feed=pings"},{"slug":"ping-59","title":"Ping 59","href":"/ping-59/?feed=pings"},{"slug":"ping-58","title":"remember rule 4","href":"/ping-58/?feed=pings"},{"slug":"ping-57","title":"almost left tokens on the table","href":"/ping-57/?feed=pings"},{"slug":"ping-56","title":"Can You Feel the Slop","href":"/ping-56/?feed=pings"},{"slug":"ping-55","title":"approve rm","href":"/ping-55/?feed=pings"},{"slug":"ping-54","title":"Ping 54","href":"/ping-54/?feed=pings"},{"slug":"ping-53","title":"Tokens Just don’t go as far as they used to","href":"/ping-53/?feed=pings"},{"slug":"ping-52","title":"Ping 52","href":"/ping-52/?feed=pings"},{"slug":"ping-50-a","title":"Ping 50 A","href":"/ping-50-a/?feed=pings"},{"slug":"ping-50","title":"Prove Yourself Agent","href":"/ping-50/?feed=pings"},{"slug":"ping-49","title":"What happens when the 0 days are exposed?","href":"/ping-49/?feed=pings"},{"slug":"ping-48","title":"Ping 48","href":"/ping-48/?feed=pings"},{"slug":"ping-46","title":"What is this job anymore","href":"/ping-46/?feed=pings"},{"slug":"ping-47","title":"Ping 47","href":"/ping-47/?feed=pings"},{"slug":"ping-45","title":"The year of the supply chain attacks","href":"/ping-45/?feed=pings"},{"slug":"ping-44","title":"The final nail for Windows?","href":"/ping-44/?feed=pings"},{"slug":"ping-43","title":"Ping 43","href":"/ping-43/?feed=pings"},{"slug":"ping-42","title":"Social Media is dead","href":"/ping-42/?feed=pings"},{"slug":"ping-37","title":"Where Is The Tech Industry Going","href":"/ping-37/?feed=pings"},{"slug":"is-compaction-the-issue","title":"Is Compaction The Issue","href":"/is-compaction-the-issue/?feed=pings"},{"slug":"lets-land-the-plane","title":"Lets Land The Plane","href":"/lets-land-the-plane/?feed=pings"},{"slug":"i-dont-want-someone-else-running-my-agents","title":"I don’t want someone else running my agents","href":"/i-dont-want-someone-else-running-my-agents/?feed=pings"},{"slug":"ping-38","title":"Ping 38","href":"/ping-38/?feed=pings"},{"slug":"ping-35b","title":"Learning to agent","href":"/ping-35b/?feed=pings"},{"slug":"ping-35","title":"Studio Ghibli Images in the Wild","href":"/ping-35/?feed=pings"},{"slug":"ping-36","title":"Ping 36","href":"/ping-36/?feed=pings"},{"slug":"ping-34","title":"Research, Plan, Implement","href":"/ping-34/?feed=pings"},{"slug":"ping-32","title":"Context Poisoning Was There All Along","href":"/ping-32/?feed=pings"},{"slug":"ping-33","title":"Agents cannot replace the thinking, they only amplify it","href":"/ping-33/?feed=pings"},{"slug":"ping-31","title":"Thinking about ai productivity again","href":"/ping-31/?feed=pings"}],"totalPosts":80},{"slug":"shots","title":"Shots","priority":"primary","primary":true,"variants":[{"key":"md","label":"md","href":"/shots.md"},{"key":"json","label":"json","href":"/shots/feed.json"},{"key":"archive-rss","label":"archive-rss","href":"/shots/archive/rss.xml"},{"key":"rss","label":"rss","href":"/shots/rss.xml"},{"key":"atom","label":"atom","href":"/shots/atom.xml"},{"key":"html","label":"html","href":"/shots/"},{"key":"simple","label":"simple","href":"/shots/simple/"},{"key":"txt","label":"txt","href":"/shots.txt"}],"calendar":true,"posts":[{"slug":"shots/bat-cap","title":"Bat Cap","href":"/shots/bat-cap/?feed=shots"},{"slug":"shots/ghost-cap","title":"Ghost Cap","href":"/shots/ghost-cap/?feed=shots"},{"slug":"shots/jack-o-lantern-cap","title":"Jack-O-Lantern Cap","href":"/shots/jack-o-lantern-cap/?feed=shots"},{"slug":"shots/this-girl-is-getting-good-at-bike-riding","title":"This Girl Is Getting Good At Bike Riding","href":"/shots/this-girl-is-getting-good-at-bike-riding/?feed=shots"},{"slug":"shots/a-ride-around-the-neighborhood","title":"A Ride Around The Neighborhood","href":"/shots/a-ride-around-the-neighborhood/?feed=shots"},{"slug":"shots/i-came-across-a-welded-in-hot-swap-prototype","title":"I Came Across A Welded In Hot Swap Prototype","href":"/shots/i-came-across-a-welded-in-hot-swap-prototype/?feed=shots"},{"slug":"shots/not-every-attempt-lands-on-the-board","title":"Not Every Attempt Lands On The Board","href":"/shots/not-every-attempt-lands-on-the-board/?feed=shots"},{"slug":"shots/dobby-looking-ominous","title":"Dobby Looking Ominous","href":"/shots/dobby-looking-ominous/?feed=shots"},{"slug":"shots/washing-the-algae-off-the-sidewalk-overflow","title":"Washing The Agae Off The Sidewalk Overflow","href":"/shots/washing-the-algae-off-the-sidewalk-overflow/?feed=shots"},{"slug":"shots/rewashing-the-algae-off-the-sidewalk-f26","title":"Rewashing The Algae Off The Sidewalk F26","href":"/shots/rewashing-the-algae-off-the-sidewalk-f26/?feed=shots"},{"slug":"shots/bike-ride-in-my-mando-shirt","title":"Bike Ride In My Mando Shirt","href":"/shots/bike-ride-in-my-mando-shirt/?feed=shots"},{"slug":"shots/confident-cat-on-a-rail","title":"Confident Cat On A Rail","href":"/shots/confident-cat-on-a-rail/?feed=shots"},{"slug":"shots/friday-afternoon-americano-at-work","title":"Friday Afternoon Americano At Work","href":"/shots/friday-afternoon-americano-at-work/?feed=shots"},{"slug":"shots/models-app-is-working","title":"Models App Is Working","href":"/shots/models-app-is-working/?feed=shots"},{"slug":"shots/second-sentinal-final-audience-wish","title":"Second Sentinel Final Audience Wish","href":"/shots/second-sentinal-final-audience-wish/?feed=shots"},{"slug":"shots/second-sentinal-second-encounter","title":"Second Sentinel Second Encounter","href":"/shots/second-sentinal-second-encounter/?feed=shots"},{"slug":"shots/second-sentinal-first-encounter","title":"Second Sentinel First Encounter","href":"/shots/second-sentinal-first-encounter/?feed=shots"},{"slug":"shots/boomer-chat-achievement-unlocked","title":"Boomer Chat Achievement Unlocked","href":"/shots/boomer-chat-achievement-unlocked/?feed=shots"},{"slug":"shots/caps-bed-adhesion","title":"Caps Bed Adhesion","href":"/shots/caps-bed-adhesion/?feed=shots"},{"slug":"shots/cracked-caps","title":"Cracked Caps","href":"/shots/cracked-caps/?feed=shots"},{"slug":"shots/any-guesses-what-im-printing","title":"Any Guesses What I’M Printing","href":"/shots/any-guesses-what-im-printing/?feed=shots"},{"slug":"shots/cap-sander-v1","title":"Cap Sander V1","href":"/shots/cap-sander-v1/?feed=shots"},{"slug":"shots/caps-fonts","title":"Caps Fonts","href":"/shots/caps-fonts/?feed=shots"},{"slug":"shots/caps-gets-striped-keys","title":"Caps Gets Striped Keys","href":"/shots/caps-gets-striped-keys/?feed=shots"},{"slug":"shots/caps-views","title":"Caps Views","href":"/shots/caps-views/?feed=shots"},{"slug":"shots/dark-foggy-tunnel","title":"Dark Foggy Tunnel","href":"/shots/dark-foggy-tunnel/?feed=shots"},{"slug":"shots/caps-symbols","title":"Caps Symbols","href":"/shots/caps-symbols/?feed=shots"},{"slug":"shots/share-to-plaindown","title":"Share To Plaindown","href":"/shots/share-to-plaindown/?feed=shots"},{"slug":"shots/neovim-cap","title":"Neovim Cap","href":"/shots/neovim-cap/?feed=shots"},{"slug":"shots/cmon-toyota-wheres-your-nerd-font","title":"C’mon, Toyota, where’s your Nerd Font?","href":"/shots/cmon-toyota-wheres-your-nerd-font/?feed=shots"},{"slug":"shots/caps-themes","title":"Caps Themes","href":"/shots/caps-themes/?feed=shots"},{"slug":"shots/nvim-cap-installed","title":"Nvim Cap Installed","href":"/shots/nvim-cap-installed/?feed=shots"},{"slug":"shots/caps-review-with-individual-key-override","title":"Caps Review With Individual Key Override","href":"/shots/caps-review-with-individual-key-override/?feed=shots"},{"slug":"shots/comparing-depth-of-color-in-esc-keys","title":"Comparing Depth Of Color In Esc Keys","href":"/shots/comparing-depth-of-color-in-esc-keys/?feed=shots"},{"slug":"shots/chicken-fried-rice-in-august","title":"Chicken Fried Rice In August","href":"/shots/chicken-fried-rice-in-august/?feed=shots"},{"slug":"shots/mid-print-on-a-new-set-of-caps","title":"Mid Print On A New Set Of Caps","href":"/shots/mid-print-on-a-new-set-of-caps/?feed=shots"},{"slug":"shots/first-set-of-caps-printed-from-caps.waylonwalker.com","title":"First Set Of Caps Printed From Caps.waylonwalker.com","href":"/shots/first-set-of-caps-printed-from-caps.waylonwalker.com/?feed=shots"},{"slug":"shots/caps-got-good-adhesion","title":"Caps Got Good Adhesion","href":"/shots/caps-got-good-adhesion/?feed=shots"},{"slug":"shots/caps-app-is-working","title":"Caps App Is Working","href":"/shots/caps-app-is-working/?feed=shots"},{"slug":"shots/it-kept-printing-sideways","title":"It Kept Printing Sideways","href":"/shots/it-kept-printing-sideways/?feed=shots"},{"slug":"shots/dusty-routing","title":"Dusty Routing","href":"/shots/dusty-routing/?feed=shots"},{"slug":"shots/i-feel-called-out-for-burning-things-in-the-oven","title":"I Feel Called Out For Burning Things In The Oven","href":"/shots/i-feel-called-out-for-burning-things-in-the-oven/?feed=shots"},{"slug":"shots/got-me-my-first-set-of-akko-rosewoods","title":"got me my first set of akko rosewoods","href":"/shots/got-me-my-first-set-of-akko-rosewoods/?feed=shots"},{"slug":"shots/fresh-marin","title":"Fresh Marin","href":"/shots/fresh-marin/?feed=shots"},{"slug":"shots/into-the-tunnel","title":"Into The Tunnel","href":"/shots/into-the-tunnel/?feed=shots"},{"slug":"shots/entering-the-tunnel","title":"Entering The Tunnel","href":"/shots/entering-the-tunnel/?feed=shots"},{"slug":"shots/fresh-marin-in-the-dark","title":"Fresh Marin In The Dark","href":"/shots/fresh-marin-in-the-dark/?feed=shots"},{"slug":"shots/i-did-one-more-prompt-to-a-long-running-session-a-day-later","title":"I Did One More Prompt To A Long Running Session A Day Later","href":"/shots/i-did-one-more-prompt-to-a-long-running-session-a-day-later/?feed=shots"},{"slug":"shots/t-handle-wire-puller-in-action","title":"T Handle Wire Puller In Action","href":"/shots/t-handle-wire-puller-in-action/?feed=shots"},{"slug":"shots/t-handle-wire-puller","title":"T Handle Wire Puller","href":"/shots/t-handle-wire-puller/?feed=shots"},{"slug":"shots/sharpdart","title":"Sharpdart","href":"/shots/sharpdart/?feed=shots"}],"totalPosts":283}],"rotationFeedSlugs":["archive","blog","ping","til","thoughts-feed","pings","shots","all"],"currentFeedIndex":0,"currentPostSlug":"print-in-place-nuts-with-cura"} (() => { const calendarLink = document.getElementById('feed-nav-calendar-link'); const picker = document.getElementById('feed-nav-select'); const dataNode = document.getElementById('feed-sidebar-data'); if (!calendarLink || !picker || !dataNode) return; let feedData = []; try { feedData = JSON.parse(dataNode.textContent || '{}').feeds || []; } catch (_) {} const updateCalendarLink = () => { const slug = picker.value || ''; const selectedFeed = feedData.find((entry) => (entry.slug || '') === slug); calendarLink.hidden = Boolean(selectedFeed && selectedFeed.calendar === false); calendarLink.href = (slug ? `/${slug}/` : '/') + '?view=calendar'; }; picker.addEventListener('change', updateCalendarLink); new MutationObserver(updateCalendarLink).observe(picker, { childList: true, subtree: true }); updateCalendarLink(); })(); Print in place nuts with cura ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Waylon Walker Author Aug 12, 2024 3d-printing Copy this post URL Rich Markdown Text View Markdown View Text curl .ansi {"title":"Print in place nuts with cura","url":"https://waylonwalker.com/print-in-place-nuts-with-cura/","markdown":"# Print in place nuts with cura\n\nSource: https://waylonwalker.com/print-in-place-nuts-with-cura/\n\n---\ntitle: \"Print in place nuts with cura\"\ndate: 2024-08-12\npublished: true\ntags:\n - 3d-printing\ntemplate: til\n---","text":"Print in place nuts with cura\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nDate: August 12, 2024\n\nSource: https://waylonwalker.com/print-in-place-nuts-with-cura/","markdown_url":"https://waylonwalker.com/print-in-place-nuts-with-cura.md","text_url":"https://waylonwalker.com/print-in-place-nuts-with-cura.txt","ansi_curl":"curl https://waylonwalker.com/print-in-place-nuts-with-cura.ansi"} (function() { if (window.__markataPostCopyBound) { return; } window.__markataPostCopyBound = true; function copyText(text) { if (!text) { return Promise.reject(new Error('missing copy text')); } if (navigator.clipboard && navigator.clipboard.writeText) { return navigator.clipboard.writeText(text); } var textarea = document.createElement('textarea'); textarea.value = text; textarea.setAttribute('readonly', ''); textarea.style.position = 'absolute'; textarea.style.left = '-9999px'; document.body.appendChild(textarea); textarea.select(); textarea.setSelectionRange(0, textarea.value.length); var result = document.execCommand('copy'); document.body.removeChild(textarea); return result ? Promise.resolve() : Promise.reject(new Error('execCommand failed')); } function setAbsoluteURLs(container, rootURL) { var attrs = ['href', 'src', 'poster']; attrs.forEach(function(attr) { var selector = '[' + attr + ']'; container.querySelectorAll(selector).forEach(function(node) { var value = node.getAttribute(attr); if (!value) { return; } try { node.setAttribute(attr, new URL(value, rootURL).href); } catch (err) { } }); }); } function removeCopyNoise(container) { container.querySelectorAll('.anchor, .heading-anchor, [aria-hidden="true"], [role="presentation"]').forEach(function(node) { node.remove(); }); container.querySelectorAll('h1 a[href^="#"], h2 a[href^="#"], h3 a[href^="#"], h4 a[href^="#"], h5 a[href^="#"], h6 a[href^="#"]').forEach(function(node) { node.remove(); }); container.querySelectorAll('pre code').forEach(function(node) { var language = ''; (node.className || '').split(/\s+/).forEach(function(className) { if (className.indexOf('language-') === 0) { language = className.slice('language-'.length); } }); var pre = node.parentNode; pre.setAttribute('data-copy-code-block', 'true'); if (language) { pre.setAttribute('data-language', language); node.setAttribute('data-language', language); } node.textContent = (node.textContent || '').replace(/\n+$/, ''); }); } function applyRichStyles(container) { var styles = { h1: 'margin:0 0 16px;font-size:2em;font-weight:700;line-height:1.2;', h2: 'margin:28px 0 14px;font-size:1.5em;font-weight:700;line-height:1.25;', h3: 'margin:24px 0 12px;font-size:1.25em;font-weight:700;line-height:1.3;', h4: 'margin:20px 0 10px;font-size:1.1em;font-weight:700;line-height:1.35;', h5: 'margin:18px 0 8px;font-size:1em;font-weight:700;line-height:1.4;', h6: 'margin:16px 0 8px;font-size:0.95em;font-weight:700;line-height:1.4;', p: 'margin:0 0 14px;line-height:1.6;white-space:normal;', ul: 'margin:0 0 16px;padding-left:24px;', ol: 'margin:0 0 16px;padding-left:24px;', li: 'margin:0 0 6px;', blockquote: 'margin:20px 0;padding:4px 0 4px 16px;border-left:3px solid #cbd5e1;', pre: 'margin:16px 0;padding:12px 14px;white-space:pre-wrap;overflow:auto;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;', code: 'font-family:ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;', a: 'text-decoration:underline;', hr: 'margin:24px 0;', img: 'max-width:100%;height:auto;', table: 'border-collapse:collapse;margin:16px 0;', th: 'border:1px solid #d0d7de;padding:6px 10px;text-align:left;', td: 'border:1px solid #d0d7de;padding:6px 10px;text-align:left;' }; Object.keys(styles).forEach(function(selector) { container.querySelectorAll(selector).forEach(function(node) { var existing = node.getAttribute('style'); node.setAttribute('style', styles[selector] + (existing ? existing : '')); }); }); container.querySelectorAll('[data-copy-code-block]').forEach(function(node) { var existing = node.getAttribute('style'); node.setAttribute('style', 'margin:16px 0;padding:12px 14px;white-space:pre-wrap;overflow:auto;background:#f8fafc;' + (existing ? existing : '')); }); } function buildRichPayload(root) { var data = readPayload(root); var title = data.title || document.title; var url = data.url || window.location.href; var article = document.querySelector('.post .post-content'); var wrapper = document.createElement('div'); var heading = document.createElement('h1'); var source = document.createElement('p'); var link = document.createElement('a'); heading.textContent = title; link.href = url; link.textContent = url; source.appendChild(link); wrapper.appendChild(heading); wrapper.appendChild(source); if (article) { var content = article.cloneNode(true); removeCopyNoise(content); setAbsoluteURLs(content, url); applyRichStyles(content); wrapper.appendChild(content); } heading.setAttribute('style', 'margin:0 0 16px;font-size:2em;font-weight:700;line-height:1.2;'); source.setAttribute('style', 'margin:0 0 18px;line-height:1.5;white-space:normal;'); link.setAttribute('style', 'text-decoration:underline;'); return { html: wrapper.innerHTML, text: data.text || url }; } function readPayload(root) { var payloadNode = root.querySelector('.post-copy__payload'); var raw = payloadNode ? payloadNode.textContent : '{}'; try { return JSON.parse(raw); } catch (err) { return {}; } } function copyRich(root) { var payload = buildRichPayload(root); if (window.ClipboardItem && navigator.clipboard && navigator.clipboard.write) { var item = new ClipboardItem({ 'text/html': new Blob([payload.html], { type: 'text/html' }), 'text/plain': new Blob([payload.text], { type: 'text/plain' }) }); return navigator.clipboard.write([item]).catch(function() { return copyText(payload.text); }); } return copyText(payload.text); } function feedbackMessage(kind) { if (kind === 'url') { return 'URL copied'; } if (kind === 'rich') { return 'Rich copy ready'; } if (kind === 'markdown') { return 'Markdown copied'; } if (kind === 'text') { return 'Text copied'; } if (kind === 'markdown-url') { return 'Markdown URL copied'; } if (kind === 'text-url') { return 'Text URL copied'; } if (kind === 'ansi-curl') { return 'curl command copied'; } return 'Copied'; } function buildFormatPath(ext) { var path = window.location.pathname || '/'; if (path !== '/' && path.endsWith('/')) { path = path.slice(0, -1); } return path + ext; } document.addEventListener('click', function(event) { var button = event.target.closest('.post-copy__option'); if (!button) { return; } var root = button.closest('[data-post-copy]'); if (!root) { return; } var status = root.querySelector('.post-copy__status'); var details = root.querySelector('.post-copy__details'); var kind = button.dataset.copyKind; var data = readPayload(root); var action; if (kind === 'markdown-url') { if (details) { details.open = false; } window.location.href = buildFormatPath('.md'); return; } if (kind === 'text-url') { if (details) { details.open = false; } window.location.href = buildFormatPath('.txt'); return; } if (kind === 'url') { action = copyText(data.url || window.location.href); } else if (kind === 'rich') { action = copyRich(root); } else if (kind === 'markdown') { action = copyText(data.markdown || ''); } else if (kind === 'ansi-curl') { action = copyText(data.ansi_curl || ''); } else { action = copyText(data.text || ''); } action.then(function() { root.dataset.copyState = 'copied'; if (status) { status.textContent = feedbackMessage(kind); } if (details) { details.open = false; } window.setTimeout(function() { if (status) { status.textContent = ''; } root.dataset.copyState = ''; }, 1800); }).catch(function() { root.dataset.copyState = 'error'; if (status) { status.textContent = 'Unable to copy'; } window.setTimeout(function() { if (status) { status.textContent = ''; } root.dataset.copyState = ''; }, 1800); }); }); })(); Share this post ─────────────── Twitter Bluesky LinkedIn WhatsApp Facebook Telegram Pinterest Reddit Hacker News Email Copy link (function() { if (window.__markataShareCopyBound) { return; } window.__markataShareCopyBound = true; function copyToClipboard(text) { if (!text) { return Promise.reject(); } if (navigator.clipboard && navigator.clipboard.writeText) { return navigator.clipboard.writeText(text); } var textarea = document.createElement('textarea'); textarea.value = text; textarea.setAttribute('readonly', ''); textarea.style.position = 'absolute'; textarea.style.left = '-9999px'; document.body.appendChild(textarea); textarea.select(); textarea.setSelectionRange(0, textarea.value.length); var result = document.execCommand('copy'); document.body.removeChild(textarea); return result ? Promise.resolve() : Promise.reject(); } function showDesktopToast(target, text) { if (!target) { return; } if (window.matchMedia && !window.matchMedia('(min-width: 769px)').matches) { return; } target.textContent = text; target.classList.add('share-toast--visible'); clearTimeout(target._timeout); target._timeout = window.setTimeout(function() { target.classList.remove('share-toast--visible'); }, 1600); } document.addEventListener('click', function(event) { var button = event.target.closest('[data-share-action="copy"]'); if (!button) { return; } event.preventDefault(); var payload = button.dataset.shareCopy; if (!payload) { return; } var hint = button.querySelector('.share-button__hint'); var defaultLabel = button.dataset.shareLabel || button.getAttribute('aria-label') || 'Copy link'; var feedback = button.dataset.shareFeedback || 'Link copied to clipboard'; var panel = button.closest('.share-panel'); var toast = panel ? panel.querySelector('.share-toast') : null; copyToClipboard(payload).then(function() { if (hint) { hint.textContent = feedback; } button.setAttribute('aria-label', feedback); button.classList.add('share-button--copied'); showDesktopToast(toast, feedback); window.setTimeout(function() { if (hint) { hint.textContent = ''; } button.setAttribute('aria-label', defaultLabel); button.classList.remove('share-button--copied'); }, 1800); }).catch(function() { if (hint) { hint.textContent = 'Unable to copy'; } }); }); })(); /about Article /about Husband, dad of two, and hobbyist builder of things on the internet. metaslash /now Article /now This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers. slash /colophon Article /colophon Colophon a page that describes how the site > is made, with what tools, supporting what technologies blogdevmeta /blogroll Followed sites /blogroll The blogs and feeds I follow. 116 sources /reader RSS reader /reader Recent articles, videos, and podcasts from followed RSS feeds. 116 sources /ai Article /ai Last updated Jan 2026. aillmslash Twitter(opens in new tab) GitHub(opens in new tab) LinkedIn(opens in new tab) View as: Markdown Text ANSI Card © 2026 Waylon Walker. Waylon Walker https://waylonwalker.com Waylon Walker's personal blog Keyboard Shortcuts ────────────────── × ### Scrolling +---------+------------------+ | j | Scroll down | +---------+------------------+ | k | Scroll up | | g g | Scroll to top | | Shift G | Scroll to bottom | | d | Half-page down | | u | Half-page up | +---------+------------------+ ### Navigation +-------------+-------------------------------------------------------+ | j / ↓ | Next post (in feeds) | +-------------+-------------------------------------------------------+ | k / ↑ | Previous post (in feeds) | | Enter / o | Open highlighted post | | Shift O | Open in new tab | | g h | Go to home | | g s | Focus search | | [ / Shift K | Previous post in series (or previous page) | | ] / Shift J | Next post in series (or next page) | | b | Toggle left sidebar | | Shift B | Toggle right sidebar | | s | Toggle reader mode (posts) / simple/rich view (feeds) | +-------------+-------------------------------------------------------+ ### Theme +-------+------------------------+ | t | Open theme picker | +-------+------------------------+ | , / . | Previous / Next theme | | < / > | Previous / Next style | | F / f | Previous / Next font | | \ | Toggle dark/light mode | +-------+------------------------+ ### Utility +--------+----------------------------+ | / | Focus search input | +--------+----------------------------+ | ⌘CtrlK | Focus search (alternative) | | y y | Copy URL to clipboard | | ? | Show this help | | Esc | Close / clear highlight | +--------+----------------------------+ Disable Shortcuts Shortcuts are disabled when typing in input fields // Honor prefers-reduced-motion: pause autoplaying preview videos (function() { function handleReducedMotion() { if (!window.matchMedia) return; if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; document.querySelectorAll('video[autoplay]').forEach((v) => { try { v.pause(); v.removeAttribute('autoplay'); } catch (_) { // ignore } }); } handleReducedMotion(); if (window.matchMedia) { const mq = window.matchMedia('(prefers-reduced-motion: reduce)'); if (mq && typeof mq.addEventListener === 'function') { mq.addEventListener('change', handleReducedMotion); } } })(); // Custom Navigation Shortcuts from config // Mention Cards - load once, the first time a page has mention links. // SPA navigation can reach such a page after a first page without any; // once loaded the script re-initialises itself on view-transition-complete. (function() { var mentionCardsLoaded = false; function loadMentionCards() { if (mentionCardsLoaded || !document.querySelector('a.mention')) return; mentionCardsLoaded = true; window.removeEventListener('view-transition-complete', loadMentionCards); var mentionScript = document.createElement('script'); mentionScript.src = '/js/mention-cards.eadff291.js'; mentionScript.defer = true; document.body.appendChild(mentionScript); } loadMentionCards(); if (!mentionCardsLoaded) window.addEventListener('view-transition-complete', loadMentionCards); })(); // Keyboard Shortcuts Registry - load the core registry first, then load dependent scripts const shortcutsRegistryScript = document.createElement('script'); shortcutsRegistryScript.src = '/js/shortcuts-registry.47e34d14.js'; // Use onload to ensure registry is fully loaded before dependent scripts shortcutsRegistryScript.onload = function() { // Keyboard Shortcuts - load search and core shortcuts if (document.querySelector('#pagefind-search, #shortcuts-modal, [type="search"]')) { const shortcutsScript = document.createElement('script'); shortcutsScript.src = '/js/search-shortcuts.dbacfc75.js'; document.body.appendChild(shortcutsScript); } // Scrolling Shortcuts - always available const scrollingScript = document.createElement('script'); scrollingScript.src = '/js/scrolling-shortcuts.b3e4e8fa.js'; document.body.appendChild(scrollingScript); // Navigation Shortcuts - load if feed, post cards, or prev/next navigation exist if (document.querySelector('.feed, .feed-sidebar, .doc-sidebar, .post-nav, .card, [data-card], [data-action="prev"], [data-action="next"], .pagination-prev, .pagination-next')) { const navigationScript = document.createElement('script'); navigationScript.src = '/js/navigation-shortcuts.d9c93267.js'; document.body.appendChild(navigationScript); } // History Shortcuts - always available (go back/forward) const historyScript = document.createElement('script'); historyScript.src = '/js/history-shortcuts.06ade051.js'; document.body.appendChild(historyScript); }; document.body.appendChild(shortcutsRegistryScript); // Custom Shortcuts - load if custom shortcuts are defined in config // Pagination (JS mode) - only load if JS pagination element exists if (document.querySelector('.pagination-js')) { const paginationScript = document.createElement('script'); paginationScript.src = '/js/pagination.361bd4f5.js'; paginationScript.defer = true; document.body.appendChild(paginationScript); } if (document.querySelector('video[data-hover-play], video[data-adaptive-preview]')) { const hoverPlayVideoScript = document.createElement('script'); hoverPlayVideoScript.src = '/js/hover-play-video.9c9a981f.js'; hoverPlayVideoScript.defer = true; document.body.appendChild(hoverPlayVideoScript); } // Feed cycling - populates the feed sidebar picker, counter, and prev/next // feed controls when the page ships feed sidebar data. if (document.querySelector('#feed-sidebar-data')) { const feedCyclingScript = document.createElement('script'); feedCyclingScript.src = '/js/feed-cycling.938a27de.js'; feedCyclingScript.defer = true; document.body.appendChild(feedCyclingScript); } // GLightbox - load when page has zoomable images // Lite YouTube embeds (oEmbed) window.__markataSearchEndpoint = window.__markataSearchEndpoint || 'https://waylonwalker.com/api/search'; // If a bleve search endpoint is configured, skip pagefind and load bleve search instead. if (window.__markataSearchEndpoint) { (function() { var script = document.createElement('script'); script.src = '/js/bleve-search.132d4e98.js'; document.body.appendChild(script); })(); } // end Bleve-only search window.MARKATA_GO_D3_URL = 'https://d3js.org/d3.v7.min.js'; // View Transitions Configuration window.VIEW_TRANSITIONS_CONFIG = { enabled: true, debug: false, skipClasses: [], skipSelectors: [], transitionDuration: 300, updateMeta: true, scrollToTop: true, }; // Special routes that should always use full navigation. // (View-transition navigation swaps DOM without running inline scripts.) (function() { var p = "random"; p = (p || 'random').replace(/^\/+|\/+$/g, ''); window.MARKATA_GO_RANDOM_POST_PATH = '/' + p + '/'; })(); (function() { if (typeof window === 'undefined') { return; } var MIN_VIEWPORT_MULTIPLIER = 1.75; function initArticleProgressIndicator() { if (window.__articleProgressCleanup) { window.__articleProgressCleanup(); window.__articleProgressCleanup = null; } var container = document.querySelector('.article-progress'); var indicator = document.querySelector('.article-progress__indicator'); var article = document.querySelector('article.post'); if (!container || !indicator || !article) { return; } var raf = window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(cb) { return window.setTimeout(cb, 16); }; var scheduled = false; var lastValue = -1; var lastVisibility = null; function clamp(value, min, max) { if (value < min) return min; if (value > max) return max; return value; } function refresh() { scheduled = false; var rect = article.getBoundingClientRect(); var articleTop = window.scrollY + rect.top; var articleHeight = rect.height; var viewportHeight = window.innerHeight || 1; var minHeight = viewportHeight * MIN_VIEWPORT_MULTIPLIER; var shouldShow = articleHeight >= minHeight; if (shouldShow !== lastVisibility) { container.classList.toggle('article-progress--hidden', !shouldShow); lastVisibility = shouldShow; } if (!shouldShow) { if (lastValue !== 0) { lastValue = 0; indicator.style.transform = 'scaleX(0)'; } return; } var scrollableDistance = articleHeight - viewportHeight; var ratio; if (scrollableDistance <= 0) { ratio = 1; } else { ratio = clamp((window.scrollY - articleTop) / scrollableDistance, 0, 1); } if (Math.abs(ratio - lastValue) < 0.001) { return; } lastValue = ratio; indicator.style.transform = 'scaleX(' + ratio + ')'; } function schedule() { if (scheduled) { return; } scheduled = true; raf(refresh); } window.addEventListener('scroll', schedule, { passive: true }); window.addEventListener('resize', schedule); window.__articleProgressCleanup = function() { window.removeEventListener('scroll', schedule); window.removeEventListener('resize', schedule); }; schedule(); } window.initArticleProgressIndicator = initArticleProgressIndicator; window.addEventListener('view-transition-complete', initArticleProgressIndicator); initArticleProgressIndicator(); })();