<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>caillou.ch</title><description>Blog of caillou.ch</description><link>https://caillou.ch/</link><item><title>mdx kitchen sink</title><link>https://caillou.ch/blog/2026-02-22-mdx-kitchen-sink/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-02-22-mdx-kitchen-sink/</guid><description>every MDX formatting option this site supports, in one place.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate></item><item><title>cli tool: worktrunk</title><link>https://caillou.ch/blog/2026-03-20-cli-tool-worktrunk/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-03-20-cli-tool-worktrunk/</guid><description>git worktree management for humans.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>responsive font-weight with tailwind</title><link>https://caillou.ch/blog/2026-03-22-responsive-font-weight-tailwind/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-03-22-responsive-font-weight-tailwind/</guid><description>lighter font weights on HiDPI screens using Tailwind v4 theme variables.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate></item><item><title>pointer events replace touch + mouse in drag and drop</title><link>https://caillou.ch/blog/2026-03-24-pointer-events-dnd/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-03-24-pointer-events-dnd/</guid><description>pointerdown/up/move handles both touch and mouse. no more duplicate listeners.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate></item><item><title>iTerm: unlimited scrollback</title><link>https://caillou.ch/blog/2026-05-16-iterm-unlimited-scrollback/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-05-16-iterm-unlimited-scrollback/</guid><description>iTerm&apos;s default scrollback is 1000 lines. you can turn that off.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>a fish-style prompt for PowerShell</title><link>https://caillou.ch/blog/2026-06-03-starship-prompt-powershell/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-03-starship-prompt-powershell/</guid><description>starship gives PowerShell a prompt i can live with.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>fish-style abbreviations for PowerShell</title><link>https://caillou.ch/blog/2026-06-05-fish-abbreviations-powershell/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-05-fish-abbreviations-powershell/</guid><description>abbreviations expand inline before they run. here&apos;s how in PowerShell.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>reproduce a flaky test with stress-ng</title><link>https://caillou.ch/blog/2026-06-09-reproduce-flaky-test-stress-ng/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-09-reproduce-flaky-test-stress-ng/</guid><description>it passed locally and failed on CI. stress-ng made it fail locally too.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>serialize TanStack Query mutations</title><link>https://caillou.ch/blog/2026-06-11-serialize-tanstack-query-mutations/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-11-serialize-tanstack-query-mutations/</guid><description>my optimistic drag and drop raced itself. one scope id fixed it.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>TIL the &lt;a&gt; tag has a download attribute</title><link>https://caillou.ch/blog/2026-06-15-anchor-download-attribute/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-15-anchor-download-attribute/</guid><description>i spotted the download attribute on an anchor tag and assumed Content-Disposition already did the job. turns out it&apos;s for when you can&apos;t touch the server.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>stop pnpm churning package.json line endings</title><link>https://caillou.ch/blog/2026-06-16-pnpm-package-json-line-endings/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-16-pnpm-package-json-line-endings/</guid><description>pnpm add rewrote package.json from CRLF to LF and git diffed the whole file. one line in gitattributes fixed it.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate></item><item><title>fake a non-retina screen on Chrome</title><link>https://caillou.ch/blog/2026-06-17-chrome-fake-non-retina-screen/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-17-chrome-fake-non-retina-screen/</guid><description>a Chrome flag retired the old non-retina monitor I kept around just to test on.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate></item><item><title>make shift+enter a newline in Claude Code on Windows</title><link>https://caillou.ch/blog/2026-06-18-claude-code-shift-enter-windows-terminal/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-18-claude-code-shift-enter-windows-terminal/</guid><description>shift+enter sent my half-written message instead of making a newline. ctrl+j fixes it in any terminal; a keybinding wins back the muscle memory.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate></item><item><title>keep an AVD session awake with f15</title><link>https://caillou.ch/blog/2026-06-19-keep-avd-awake-f15/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-19-keep-avd-awake-f15/</guid><description>AVD logged me out over lunch and killed a long job. f15 is a key that does nothing, so I send one every two minutes to look busy.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate></item><item><title>reset Karabiner after sleep without a reboot</title><link>https://caillou.ch/blog/2026-06-20-reset-karabiner-after-sleep/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-20-reset-karabiner-after-sleep/</guid><description>Karabiner stopped remapping after my Mac woke. i finally found a way to reset it without a reboot.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>lazygit: open a file straight from the diff</title><link>https://caillou.ch/blog/2026-06-24-lazygit-open-file-from-diff/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-24-lazygit-open-file-from-diff/</guid><description>to edit the file i&apos;m looking at, i&apos;d have to find it again in my editor. pressing `e` opens it directly, in whatever editor i configure.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>disable Chrome&apos;s AI features with a macOS config profile</title><link>https://caillou.ch/blog/2026-06-26-disable-chrome-ai-omnibox/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-06-26-disable-chrome-ai-omnibox/</guid><description>Chrome put AI in my address bar, and the flags I turned off came back after an update. a macOS config profile sets the enterprise policy that turns it off for good.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate></item><item><title>finding what freezes VS Code: tsserver log and extension host profile</title><link>https://caillou.ch/blog/2026-07-02-vscode-tsserver-log-extension-host-profile/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-07-02-vscode-tsserver-log-extension-host-profile/</guid><description>cmd+click on a type froze VS Code, and the tsserver log looked healthy. an extension host profile found the culprit.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate></item><item><title>copy a Claude Code answer as markdown with /copy</title><link>https://caillou.ch/blog/2026-07-03-claude-code-copy-markdown/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-07-03-claude-code-copy-markdown/</guid><description>mouse-copying a Claude Code answer loses the code ticks and the links. /copy puts the raw markdown on the clipboard instead.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate></item><item><title>save the Chrome console to a file</title><link>https://caillou.ch/blog/2026-07-04-chrome-devtools-console-save-as/</link><guid isPermaLink="true">https://caillou.ch/blog/2026-07-04-chrome-devtools-console-save-as/</guid><description>a web app left open overnight showed errors in the morning. right-click the console, save as, and the whole session is a log file.</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate></item></channel></rss>