<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>YY Ahn</title>
  <subtitle>YY Ahn - Recent updates</subtitle>
  <link href="https://yyahn.com/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://yyahn.com/" rel="alternate" type="text/html"/>
  <id>https://yyahn.com/</id>
  <updated>2026-03-04T17:55:32Z</updated>
  
  <author>
    <name>Yong-Yeol (YY) Ahn</name>
  </author>
  
  <generator uri="https://github.com/yyahn/foliate" version="0.5.2">foliate</generator>

  
  <entry>
    <title>Claude Code: How I Use It</title>
    <link href="https://yyahn.com/wiki/Claude Code/How I Use It/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Claude Code/How I Use It/</id>
    <published>2026-02-28T00:00:00Z</published>
    <updated>2026-02-28T17:03:06Z</updated>
    
    <content type="html"><![CDATA[<p>How I currently use <a class="wikilink" href="/wiki/Claude Code/" rel="nofollow">Claude Code</a>. This is a living document that evolves with my workflow.</p>
<h1 id="environment">Environment<a class="header-anchor" href="#environment" title="Link to this section" rel="nofollow">#</a></h1>
<ul>
<li>Terminal: <a class="wikilink" href="/wiki/Software/Ghostty/" rel="nofollow">Ghostty</a>. </li>
<li>Dictation: <a class="wikilink" href="/wiki/Wispr Flow/" rel="nofollow">Wispr Flow</a> for voice input. I have a note about interpreting phonetic typos in <code>CLAUDE.md</code>. </li>
<li>Config managed via <a class="wikilink" href="/wiki/dotfiles/" rel="nofollow">dotfiles</a> repo (<code>~/.claude/</code> symlinked into <code>~/git/dotfiles/claude/</code>)</li>
</ul>
<p>I use <a class="wikilink" href="/wiki/Software/Ghostty/" rel="nofollow">Ghostty</a> for its simplicity, speed, and native macOS integration. I used to use <a class="wikilink" href="/wiki/tmux/" rel="nofollow">tmux</a> (see <a class="wikilink" href="/wiki/Claude Code/Tips/#tmux + Neovim Setup" rel="nofollow">tmux + Neovim setup</a>), but tmux adds another layer of latency and memory overhead. Now I just use Ghostty&rsquo;s built-in splits: <code>⌘+D</code> / <code>⌘+⇧+D</code>.</p>
<p>My default layout is two panes side by side — Claude Code on the left, <a class="wikilink" href="/wiki/Neovim/" rel="nofollow">Neovim</a> on the right. I split further as needed but try to return to this two-pane setup. Neovim is the right fit here for the same reason as Ghostty: snappy and versatile. You can quickly move around, explore files, and make edits while CC works in the other pane. I sometimes run watch scripts (e.g., auto-compile, file sync) in a tiny extra pane.</p>
<p>Usually I have several tabs open (one for each project) with each tab having 2+ panes. </p>
<h1 id="claudemd-setup"><a href="http://CLAUDE.md" rel="nofollow">CLAUDE.md</a> setup<a class="header-anchor" href="#claudemd-setup" title="Link to this section" rel="nofollow">#</a></h1>
<p>Three layers:
- <strong>Global</strong> (<code>~/.claude/CLAUDE.md</code>): Python/uv preferences, wiki/blog paths, project tracking conventions, academic writing style
- <strong>Project</strong> (<code>CLAUDE.md</code>): repo-specific instructions, commands, code style</p>
<h1 id="custom-skills">Custom skills<a class="header-anchor" href="#custom-skills" title="Link to this section" rel="nofollow">#</a></h1>
<p>I keep a small set of research-oriented skills. They include:</p>
<ul>
<li><code>math</code> — symbolic verification with <a class="wikilink" href="/wiki/SymPy/" rel="nofollow">SymPy</a></li>
<li><code>doi-bibtex</code> — fetch BibTeX from DOI</li>
<li><code>arxiv-metadata</code> — fetch paper metadata from arXiv</li>
<li><code>openalex-database</code> — query <a class="wikilink" href="/wiki/OpenAlex/" rel="nofollow">OpenAlex</a> for literature search and bibliometrics</li>
</ul>
<p>Plus the <a href="https://github.com/anthropics/skills" rel="nofollow">Anthropic document-skills</a> plugin for PDF, PPTX, DOCX, etc.</p>
<h1 id="custom-agents">Custom agents<a class="header-anchor" href="#custom-agents" title="Link to this section" rel="nofollow">#</a></h1>
<p>My custom agents include:</p>
<ul>
<li><code>file-paper</code> — file an academic paper to my wiki. It fills in metadata and then search my wiki to identify &amp; link relevant papers and other concepts</li>
<li><code>wikify</code> — turn anything into a wiki page. This calls <code>file-paper</code> agent when necessary. Otherwise follow similar steps to create links to relevant pages. </li>
<li><code>latex-cleanup</code> — review LaTeX documents after editing</li>
<li><code>codebase-analyzer</code>, <code>code-smell-refactor</code>, <code>security-auditor</code> — code quality</li>
</ul>
<h1 id="custom-commands">Custom commands<a class="header-anchor" href="#custom-commands" title="Link to this section" rel="nofollow">#</a></h1>
<ul>
<li><code>git-sync</code> — add, commit, pull &ndash;rebase, push</li>
<li><code>release</code> — bump version, tag, push, create GitHub release, publish</li>
<li><code>uv-init</code> — bootstrap Python/uv/direnv environment</li>
<li><code>new-research-project</code> — scaffold from my project template</li>
<li><code>wikify</code> — routes to the right agent (file-paper for papers, wikify for everything else)</li>
</ul>]]></content>
    
  </entry>
  
  <entry>
    <title>Claude Code: Skills</title>
    <link href="https://yyahn.com/wiki/Claude Code/Skills/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Claude Code/Skills/</id>
    <published>2026-02-28T00:00:00Z</published>
    <updated>2026-03-01T03:39:03Z</updated>
    
    <content type="html"><![CDATA[<p><a class="wikilink" href="/wiki/Claude Code/" rel="nofollow">Claude Code</a> skills: reusable &ldquo;recipes&rdquo; that CC can execute on demand. Each skill is a markdown document containing specific instructions for a task, optionally accompanied by scripts.</p>
<p>See the <a href="https://code.claude.com/docs/en/skills" rel="nofollow">Official documentation</a> for more details.</p>
<h1 id="creating-skills">Creating Skills<a class="header-anchor" href="#creating-skills" title="Link to this section" rel="nofollow">#</a></h1>
<p>Skills are stored as <code>SKILL.md</code> files in <code>.claude/skills/SKILL_NAME/</code> (project-level) or <code>~/.claude/skills/SKILL_NAME/</code> (global). Each skill file contains a <strong>YAML header</strong> with a description of when the skill should be used, step-by-step instructions for CC to follow, and optional references to helper scripts.</p>
<p>The YAML header requires:</p>
<ul>
<li><code>name</code>: A short identifier for the skill</li>
<li><code>description</code>: When the skill should be invoked (CC uses this to decide relevance)</li>
</ul>
<p>When CC is launched, only the YAML headers of available skills are loaded to CC&rsquo;s context. They are used as an <em>index</em> for CC. CC uses these descriptions to determine which skills to invoke.</p>
<h2 id="example-a-minimal-math-skill">Example: A Minimal Math Skill<a class="header-anchor" href="#example-a-minimal-math-skill" title="Link to this section" rel="nofollow">#</a></h2>
<div class="highlight"><pre><span></span><code>~/.claude/skills/math/
├──<span class="w"> </span>SKILL.md
└──<span class="w"> </span>verify.py
</code></pre></div>

<p>The <code>SKILL.md</code> file may look like:</p>
<div class="highlight"><pre><span></span><code><span class="nn">---</span>
<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">math</span>
<span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;</span>
<span class="w">  </span><span class="no">Verify mathematical derivations step-by-step using SymPy.</span>
<span class="w">  </span><span class="no">Use this when users ask to verify proofs, check calculations,</span>
<span class="w">  </span><span class="no">or solve symbolic math problems.</span>
<span class="nn">---</span>

<span class="nt">When the user asks you to verify or solve mathematical problems</span><span class="p">:</span>

<span class="l l-Scalar l-Scalar-Plain">1. Use the bundled `verify.py` script for symbolic computation</span>
<span class="l l-Scalar l-Scalar-Plain">2. Show step-by-step derivation</span>
<span class="l l-Scalar l-Scalar-Plain">3. Verify the final result</span>

<span class="c1">## Usage</span>

<span class="nt">Run the verification script</span><span class="p">:</span>

<span class="w">    </span><span class="c1"># Check two expressions are equal</span>
<span class="w">    </span><span class="l l-Scalar l-Scalar-Plain">~/.claude/skills/math/verify.py eq &quot;EXPR1&quot; &quot;EXPR2&quot;</span>

<span class="w">    </span><span class="l l-Scalar l-Scalar-Plain"># Simplify/expand expression</span>
<span class="w">    </span><span class="l l-Scalar l-Scalar-Plain">~/.claude/skills/math/verify.py simp &quot;EXPR&quot;</span>

<span class="l l-Scalar l-Scalar-Plain">Always explain your reasoning alongside the output.</span>
</code></pre></div>

<p>A skill may or may not have accompanying scripts. It can have no script at all (just instructions) or simple inline code examples.</p>
<h1 id="using-skills">Using Skills<a class="header-anchor" href="#using-skills" title="Link to this section" rel="nofollow">#</a></h1>
<p>Skills are not invoked by the user, but only by CC. Skills are exposed to CC based on the YAML header. When CC determines that the skill is applicable, it will invoke the skill. When invoked, CC reads the full skill file and follows its instructions.</p>
<p>The &ldquo;math skill&rdquo; shown above would be invoked automatically when you ask CC to check derivation of some mathematical formula.</p>
<p>Skills essentially let you encode repeatable workflows as reusable &ldquo;recipes&rdquo; that CC can execute on demand.</p>
<h1 id="installing-skills-from-plugin-marketplace">Installing Skills from Plugin Marketplace<a class="header-anchor" href="#installing-skills-from-plugin-marketplace" title="Link to this section" rel="nofollow">#</a></h1>
<p>CC provides a built-in plugin marketplace for easy skill installation. Use the <code>/plugin marketplace add</code> command:</p>
<div class="highlight"><pre><span></span><code>/plugin<span class="w"> </span>marketplace<span class="w"> </span>add<span class="w"> </span>&lt;github-repo&gt;
</code></pre></div>

<p>For example, to install the official Anthropic skills:</p>
<div class="highlight"><pre><span></span><code>/plugin<span class="w"> </span>marketplace<span class="w"> </span>add<span class="w"> </span>anthropics/skills
</code></pre></div>

<p>This command:</p>
<ol>
<li>Fetches the GitHub repository (e.g., <code>github.com/anthropics/skills</code>)</li>
<li>Downloads all skill files (<code>.md</code> and associated scripts)</li>
<li>Installs them to your <code>.claude/plugins/</code> directory</li>
</ol>
<p>Note that these skills are not automatically available. You need to explicitly enable them by invoking <code>/plugin</code> command or manually editing <code>.claude/settings.json</code> (project-level) or <code>~/.claude/settings.json</code> (global):</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;enabledPlugins&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;pyright-lsp@claude-plugins-official&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;document-skills@anthropic-agent-skills&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;example-skills@anthropic-agent-skills&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>

<h1 id="checking-available-skills-and-using-them">Checking available skills and using them<a class="header-anchor" href="#checking-available-skills-and-using-them" title="Link to this section" rel="nofollow">#</a></h1>
<p>In CC, you can check available skills by running:</p>
<div class="highlight"><pre><span></span><code>/skills
</code></pre></div>

<p>If the skills are correctly installed, you should see the list of available skills. They will be invoked when necessary.</p>
<h1 id="skill-collections">Skill Collections<a class="header-anchor" href="#skill-collections" title="Link to this section" rel="nofollow">#</a></h1>
<p>Several community repositories provide curated collections of ready-to-use skills:</p>
<ul>
<li><a href="https://github.com/anthropics/skills" rel="nofollow">anthropics/skills</a> - Official repository with example skills from Anthropic</li>
<li><a href="https://github.com/K-Dense-AI/claude-scientific-skills" rel="nofollow">K-Dense-AI/claude-scientific-skills</a> - Scientific skills for research</li>
<li><a href="https://github.com/travisvn/awesome-claude-skills" rel="nofollow">travisvn/awesome-claude-skills</a></li>
<li><a href="https://github.com/ComposioHQ/awesome-claude-skills" rel="nofollow">ComposioHQ/awesome-claude-skills</a></li>
</ul>]]></content>
    
  </entry>
  
  <entry>
    <title>Ghostty</title>
    <link href="https://yyahn.com/wiki/Software/Ghostty/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Software/Ghostty/</id>
    <published>2026-02-28T00:00:00Z</published>
    <updated>2026-03-01T13:27:11Z</updated>
    
    <content type="html"><![CDATA[<p>A GPU-accelerated terminal emulator by <a class="wikilink" href="/wiki/Person/Mitchell Hashimoto/" rel="nofollow">Mitchell Hashimoto</a> (co-founder of HashiCorp). Written in <a class="wikilink" href="/wiki/Zig/" rel="nofollow">Zig</a>, with platform-native UI on macOS and Linux. </p>
<ul>
<li>Site: <a href="https://ghostty.org" rel="nofollow">https://ghostty.org</a></li>
<li>Source: <a href="https://github.com/ghostty-org/ghostty" rel="nofollow">https://github.com/ghostty-org/ghostty</a></li>
</ul>
<p>Key features: native macOS integration (splits, tabs, fullscreen behave like a real Mac app), GPU rendering via Metal/OpenGL, fast text throughput (competitive with <a class="wikilink" href="/wiki/Software/Alacritty/" rel="nofollow">Alacritty</a>), and modern features. Config is a single plain-text file.</p>
<p>I use it as my primary terminal — see <a class="wikilink" href="/wiki/Claude Code/How I Use It/#Environment" rel="nofollow">Claude Code: How I use it</a>.</p>]]></content>
    
  </entry>
  
  <entry>
    <title>Accessible PDF from LaTeX</title>
    <link href="https://yyahn.com/wiki/Accessible PDF from LaTeX/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Accessible PDF from LaTeX/</id>
    <published>2026-02-24T00:00:00Z</published>
    <updated>2026-02-24T23:57:05Z</updated>
    
    <content type="html"><![CDATA[<p>How to make <a class="wikilink" href="/wiki/LaTeX/" rel="nofollow">LaTeX</a> <a class="wikilink" href="/wiki/Curriculum vitae/" rel="nofollow">CVs</a> produce tagged, screen-reader-friendly <a class="wikilink" href="/wiki/PDF/" rel="nofollow">PDF</a>s &ndash; relevant for ADA Title II compliance (deadline April 2026).</p>
<p>Most LaTeX CVs (pdflatex + article class) produce untagged PDFs with no structure metadata, which are invisible to screen readers. The fix is minimal &ndash; a few lines added to your preamble, switch to LuaLaTeX, and your existing layout is preserved.</p>
<p>Validated with <a href="https://pdfix.io/validate-pdf-ua/" rel="nofollow">PDFix PDF/UA validator</a>.</p>
<h2 id="the-fix-5-changes">The fix (5 changes)<a class="header-anchor" href="#the-fix-5-changes" title="Link to this section" rel="nofollow">#</a></h2>
<h3 id="1-add-documentmetadata-before-documentclass">1. Add <code>\DocumentMetadata</code> before <code>\documentclass</code><a class="header-anchor" href="#1-add-documentmetadata-before-documentclass" title="Link to this section" rel="nofollow">#</a></h3>
<p>This must be the very first thing in your <code>.tex</code> file, before <code>\documentclass</code>.</p>
<div class="highlight"><pre><span></span><code><span class="k">\DocumentMetadata</span><span class="nb">{</span>
  lang = en,
  pdfstandard = a-2b,
  pdfstandard = ua-1,
  pdfversion = 2.0,
  testphase = <span class="nb">{</span>phase-II<span class="nb">}</span>,
<span class="nb">}</span>
<span class="k">\documentclass</span><span class="na">[10pt]</span><span class="nb">{</span>article<span class="nb">}</span>  <span class="c">% your existing documentclass</span>
</code></pre></div>

<ul>
<li><code>pdfstandard = a-2b</code> &ndash; PDF/A-2b archival compliance</li>
<li><code>pdfstandard = ua-1</code> &ndash; PDF/UA-1 universal accessibility compliance</li>
<li><code>testphase = {phase-II}</code> &ndash; activates automatic tagging of headings, lists, and other structures</li>
</ul>
<h3 id="2-swap-font-packages-lualatex-requires-opentype-fonts">2. Swap font packages (LuaLaTeX requires OpenType fonts)<a class="header-anchor" href="#2-swap-font-packages-lualatex-requires-opentype-fonts" title="Link to this section" rel="nofollow">#</a></h3>
<p>LuaLaTeX uses OpenType fonts via <code>fontspec</code> instead of the old Type1 font system.</p>
<div class="highlight"><pre><span></span><code><span class="c">% REMOVE these:</span>
<span class="c">%   \usepackage[utf8]{inputenc}</span>
<span class="c">%   \usepackage[T1]{fontenc}</span>
<span class="c">%   \usepackage[sc]{mathpazo}</span>

<span class="c">% ADD these:</span>
<span class="k">\usepackage</span><span class="nb">{</span>fontspec<span class="nb">}</span>
<span class="k">\setmainfont</span><span class="nb">{</span>TeX Gyre Pagella<span class="nb">}</span>    <span class="c">% Palatino equivalent</span>
<span class="k">\setmonofont</span><span class="nb">{</span>Inconsolatazi4-Regular.otf<span class="nb">}</span>[BoldFont=Inconsolatazi4-Bold.otf]  <span class="c">% optional, for \texttt</span>
</code></pre></div>

<p>Common font substitutions:
- mathpazo / Palatino -&gt; <code>TeX Gyre Pagella</code>
- Times / mathptmx -&gt; <code>TeX Gyre Termes</code>
- Computer Modern -&gt; Latin Modern (already default in LuaLaTeX)
- Helvetica / helvet -&gt; <code>TeX Gyre Heros</code></p>
<h3 id="3-add-metadata-to-hypersetup">3. Add metadata to <code>\hypersetup</code><a class="header-anchor" href="#3-add-metadata-to-hypersetup" title="Link to this section" rel="nofollow">#</a></h3>
<div class="highlight"><pre><span></span><code><span class="k">\hypersetup</span><span class="nb">{</span>
  pdftitle=<span class="nb">{</span>Curriculum Vitae - Your Name<span class="nb">}</span>,
  pdfauthor=<span class="nb">{</span>Your Name<span class="nb">}</span>,
  pdfsubject=<span class="nb">{</span>Academic CV<span class="nb">}</span>,
  pdflang=<span class="nb">{</span>en<span class="nb">}</span>,
  pdfdisplaydoctitle=true,    <span class="c">% required for PDF/UA</span>
  <span class="c">% ... your existing options (colorlinks, etc.)</span>
<span class="nb">}</span>
</code></pre></div>

<p><code>pdfdisplaydoctitle=true</code> is required by PDF/UA &ndash; it tells PDF viewers to show the document title in the title bar instead of the filename.</p>
<h3 id="4-replace-symbol-fonts-that-lack-unicode-mappings">4. Replace symbol fonts that lack Unicode mappings<a class="header-anchor" href="#4-replace-symbol-fonts-that-lack-unicode-mappings" title="Link to this section" rel="nofollow">#</a></h3>
<p>Packages like <code>marvosym</code> produce glyphs that can&rsquo;t be mapped to Unicode, which fails PDF/UA validation. Use <code>fontawesome5</code> instead:</p>
<div class="highlight"><pre><span></span><code><span class="c">% REMOVE:</span>
<span class="c">%   \usepackage{marvosym}   % \Letter, \Mundus lack Unicode mapping</span>

<span class="c">% ADD:</span>
<span class="k">\usepackage</span><span class="nb">{</span>fontawesome5<span class="nb">}</span>   <span class="c">% \faEnvelope, \faGlobe, \faOrcid, etc.</span>
</code></pre></div>

<p>Icon examples:
- <code>\faEnvelope</code> &ndash; envelope (email)
- <code>\faGlobe</code> &ndash; globe (website)
- <code>\faOrcid</code> &ndash; ORCID logo
- <code>\faGithub</code> &ndash; GitHub logo
- <code>\faPhone</code> &ndash; phone</p>
<h3 id="5-build-with-lualatex">5. Build with LuaLaTeX<a class="header-anchor" href="#5-build-with-lualatex" title="Link to this section" rel="nofollow">#</a></h3>
<div class="highlight"><pre><span></span><code>latexmk<span class="w"> </span>-lualatex<span class="w"> </span>cv
</code></pre></div>

<p>Or in a Makefile:</p>
<div class="highlight"><pre><span></span><code><span class="nf">cv.pdf</span><span class="o">:</span><span class="w"> </span><span class="n">cv</span>.<span class="n">tex</span>
<span class="w">    </span>latexmk<span class="w"> </span>-lualatex<span class="w"> </span>cv
</code></pre></div>

<h2 id="how-to-verify">How to verify<a class="header-anchor" href="#how-to-verify" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li><a href="https://pdfix.io/validate-pdf-ua/" rel="nofollow">PDFix Validate PDF/UA</a> &ndash; web-based, upload and get a report. Passes with the recipe above.</li>
<li><a href="https://pac.pdf-accessibility.org/en" rel="nofollow">PAC (PDF Accessibility Checker)</a> &ndash; desktop tool, considered the gold standard. Not yet tested with this recipe.</li>
<li><a href="https://check.axes4.com/en/" rel="nofollow">axesCheck</a> &ndash; web-based PDF/UA and WCAG checker. Does not pass yet with this recipe; may require additional fixes.</li>
<li>macOS VoiceOver (Cmd+F5) &ndash; open PDF in Preview, navigate with VoiceOver</li>
<li><code>pdfinfo cv.pdf</code> &ndash; quick check that Tagged says &ldquo;yes&rdquo; (requires <code>poppler</code>: <code>brew install poppler</code>)</li>
</ul>
<h2 id="what-this-produces">What this produces<a class="header-anchor" href="#what-this-produces" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li>PDF/A-2b + PDF/UA-1 compliant</li>
<li>Structure tags (H1, P, L, LI) for screen reader navigation</li>
<li>Document language set to English</li>
<li>Title and author metadata embedded</li>
<li>DisplayDocTitle enabled</li>
</ul>
<h2 id="what-it-doesnt-fix">What it doesn&rsquo;t fix<a class="header-anchor" href="#what-it-doesnt-fix" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li>Images still need alt text (most CVs are text-only so this is fine)</li>
<li>Complex table layouts may not tag perfectly</li>
<li>Custom environments using low-level TeX may need adjustment</li>
<li><code>phase-III</code> tagging (full paragraph tagging) may conflict with some packages &ndash; <code>phase-II</code> is the safe choice</li>
</ul>
<h2 id="requirements">Requirements<a class="header-anchor" href="#requirements" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li>TeX Live 2025 (or later) &ndash; the tagging framework is relatively new</li>
<li>LuaLaTeX (included in standard TeX Live)</li>
<li><code>poppler</code> for <code>pdfinfo</code> CLI verification (<code>brew install poppler</code> on macOS)</li>
</ul>
<h2 id="tested-with">Tested with<a class="header-anchor" href="#tested-with" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li>Custom <code>\marginpar</code> sidebar section layouts &ndash; works, layout preserved</li>
<li><code>biblatex</code> with <code>biber</code> &ndash; works</li>
<li><code>fancyhdr</code> &ndash; works</li>
<li><code>paralist</code> (<code>compactitem</code>) &ndash; works</li>
<li><code>orcidlink</code> &ndash; works</li>
<li><code>fontawesome5</code> &ndash; works</li>
<li>Standard and custom list environments &ndash; works</li>
</ul>]]></content>
    
  </entry>
  
  <entry>
    <title>Claude Code: Tips</title>
    <link href="https://yyahn.com/wiki/Claude Code/Tips/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Claude Code/Tips/</id>
    <published>2026-02-22T00:00:00Z</published>
    <updated>2026-03-01T03:39:07Z</updated>
    
    <content type="html"><![CDATA[<p><a class="wikilink" href="/wiki/Claude Code/" rel="nofollow">Claude Code</a> tips.</p>
<h1 id="general-tips">General tips<a class="header-anchor" href="#general-tips" title="Link to this section" rel="nofollow">#</a></h1>
<ul>
<li><code>Shift + Tab</code> to cycle through normal, plan, and accept-edits mode.</li>
<li>Use <code>@</code> to mention specific files.</li>
<li>Use <code>#</code> to add something to memory. </li>
</ul>
<h1 id="permission-modes">Permission modes<a class="header-anchor" href="#permission-modes" title="Link to this section" rel="nofollow">#</a></h1>
<p>Shift+Tab cycles through three modes: default, auto-accept edits, and plan. <code>bypassPermissions</code> is intentionally excluded from this cycle by default.</p>
<p>If you&rsquo;re comfortable using bypass permissions mode regularly, set it as your default in <code>~/.claude/settings.json</code>:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;permissions&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;defaultMode&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;bypassPermissions&quot;</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>

<p>With this config, Claude Code starts in bypass permissions mode, and Shift+Tab will include it in the cycle so you can freely switch between modes.</p>
<h1 id="tmux-neovim-setup"><code>tmux</code> + <code>Neovim</code> Setup<a class="header-anchor" href="#tmux-neovim-setup" title="Link to this section" rel="nofollow">#</a></h1>
<p>If you prefer terminal-based light-weight setup over IDEs like cursor, a nice way is to have a <a class="wikilink" href="/wiki/Software/tmux/" rel="nofollow">tmux</a> session per project with Claude Code and an editor (e.g., <a class="wikilink" href="/wiki/Neovim/" rel="nofollow">Neovim</a>) open side by side. You read, check, and edit with <a class="wikilink" href="/wiki/Neovim/" rel="nofollow">Neovim</a> while asking things to Claude Code. When doing this, it is critical for <code>Neovim</code> to auto-reload files when Claude Code edits them externally. Without this setup, you&rsquo;ll be viewing stale files unless you force-reload with <code>:e!</code>, which creates an annoying situation with unsaved edits in the current buffer that diverged from the file content.</p>
<p>To do so, you have to configure <code>tmux</code> correctly <em>in addition to</em> <code>Neovim</code>.</p>
<h2 id="neovim-configuration"><code>Neovim</code> configuration<a class="header-anchor" href="#neovim-configuration" title="Link to this section" rel="nofollow">#</a></h2>
<p>Add to your Neovim config (e.g., <code>lua/user/options.lua</code>):</p>
<div class="highlight"><pre><span></span><code><span class="c1">-- Auto-reload files when changed externally</span>
<span class="nv">vim</span><span class="p">.</span><span class="py">o</span><span class="p">.</span><span class="py">autoread</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
<span class="nv">vim</span><span class="p">.</span><span class="py">api</span><span class="p">.</span><span class="nf">nvim_create_autocmd</span><span class="p">({</span><span class="w"> </span><span class="s1">&#39;FocusGained&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;BufEnter&#39;</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nv">command</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;checktime&#39;</span><span class="p">,</span>
<span class="p">})</span>
</code></pre></div>

<h2 id="tmux-configuration"><code>tmux</code> configuration<a class="header-anchor" href="#tmux-configuration" title="Link to this section" rel="nofollow">#</a></h2>
<p>Add to your <code>tmux.conf</code>:</p>
<div class="highlight"><pre><span></span><code>set -g focus-events on
</code></pre></div>

<p>This tells <code>tmux</code> to forward <em>focus events</em> to <code>Neovim</code>. Without it, <code>Neovim</code> won&rsquo;t know when you switch back to it and won&rsquo;t trigger the <code>FocusGained</code> autocmd.</p>
<h2 id="applying-changes">Applying changes<a class="header-anchor" href="#applying-changes" title="Link to this section" rel="nofollow">#</a></h2>
<p>For <code>Neovim</code>, restart or source your config. For <code>tmux</code>, either restart <code>tmux</code>, or run <code>tmux set -g focus-events on</code> in the terminal, or run <code>Ctrl+a</code> (or your prefix) then <code>:</code> and type <code>set -g focus-events on</code> inside <code>tmux</code>.</p>
<h1 id="collections">Collections<a class="header-anchor" href="#collections" title="Link to this section" rel="nofollow">#</a></h1>
<ul>
<li><a href="https://github.com/ykdojo/claude-code-tips" rel="nofollow">https://github.com/ykdojo/claude-code-tips</a></li>
<li><a href="https://adocomplete.com/advent-of-claude-2025/" rel="nofollow">https://adocomplete.com/advent-of-claude-2025/</a></li>
</ul>]]></content>
    
  </entry>
  
  <entry>
    <title>Cost of car ownership: the million-dollar decision you&#39;re not thinking about</title>
    <link href="https://yyahn.com/wiki/Cost of car ownership/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Cost of car ownership/</id>
    <published>2026-02-18T00:00:00Z</published>
    <updated>2026-03-01T20:31:52Z</updated>
    
    <content type="html"><![CDATA[<p>One day, a PhD student mentioned the unexpected high cost of car repair—often over a thousand dollars, regardless of how cheap your car is. This got me thinking: how much have I actually saved by replacing a car with an <a class="wikilink" href="/wiki/Bike/Ebike/" rel="nofollow">e-bike</a>?</p>
<p>I did a back-of-the-envelope calculation. Even though I thought I already fully appreciated the cost of car ownership, the result was eye-opening. Replacing my car with an e-bike was probably one of the <strong>most impactful and best financial decisions <em>in my life</em></strong>.</p>
<h2 id="people-dont-see-the-true-cost-of-car-ownership">People don&rsquo;t see the true cost of car ownership<a class="header-anchor" href="#people-dont-see-the-true-cost-of-car-ownership" title="Link to this section" rel="nofollow">#</a></h2>
<p>Here&rsquo;s the quick calculation. I take the average number: the <em>average</em> cost of owning a new car in the US is, according to AAA, roughly <code>$12,000</code> per year or <code>$1,000</code> per month<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="nofollow">1</a></sup>. If you have never thought about it, this may sound crazy. You may be confident that you are paying way less. But, note that car-related spending is usually the most underestimated category of spending. We tend to only pay attention to the fuel and not to other costs like insurance, registration, tax, and depreciation. </p>
<p>Why do we underestimate car costs so badly? First, people pay a big upfront cost that fades from memory. Depreciation is even harder to feel—your car quietly loses value every day, but you don&rsquo;t <em>see</em> that depreciation. Second, we tend to unconsciously replace &ldquo;driving cost&rdquo; with fuel cost, forgetting everything else. Third, irregular expenses like repairs, registration, and taxes are infrequent enough to feel like <em>surprises</em> rather than actual, predictable costs of ownership. And then there&rsquo;s parking; many of us pay for parking passes, meters, or garage fees so routinely that we stop even noticing it as a car cost. For instance, you pay somewhere between <code>$400</code> and <code>$1200</code> for parking garage access at UVA (vs. you can get <code>$400+</code> incentive if you forgo the parking pass). </p>
<p>The result is that we <em>massively underestimate how much we spend on cars</em>.</p>
<h2 id="my-case-calculation">My case: calculation<a class="header-anchor" href="#my-case-calculation" title="Link to this section" rel="nofollow">#</a></h2>
<p><strong>tl;dr: ~2 cars x <code>$10k</code>/year x 5 years ~ <code>$100k</code>. Cost of e-bike ownership is a rounding error.</strong></p>
<p>I bought my e-bike in 2020 and sold an old car. If I followed the American lifestyle, I could have purchased a new car instead. If we think about 5 years, I&rsquo;d have spent about </p>
<blockquote>
<p><code>$12,000</code> x 5 = <strong><code>$60,000</code></strong></p>
</blockquote>
<p>to own a car. For an ebike, I&rsquo;d use <code>$100-$300</code>/year. This includes depreciation, other equipment and accessories, maintenance, etc. You may be wondering why this is so low given that some ebikes are <code>$2,000+</code> or even approaching <code>$10,000</code>. But the cost of owning an ebike is heavily concentrated in the purchase price. After buying one, you don&rsquo;t really have much to spend on.</p>
<p>Although those expensive ebikes may be more visible, you can buy decent ebikes around <code>$1,000</code> these days. In my case, I bought a Rad Runner Plus under <code>$2,000</code> and sold it around half of that price. So, annualized depreciation was less than <code>$200</code>. Maintenance is just once or twice per year at less than <code>$100</code> each time. The accessories and other equipment are also not too expensive; I still use many of the accessories that I bought. And the price of &ldquo;fuel&rdquo; is simply too cheap to be meaningful—maybe several dollars per year.</p>
<p>So, at the five-year mark, with <code>$200</code>/yr, the total cost for an ebike is really a rounding error at around <code>$1,000</code>. The difference would be</p>
<blockquote>
<p><code>$60,000</code> - <code>$1,000</code> ≈ <strong><code>$59,000</code></strong></p>
</blockquote>
<p>But that&rsquo;s just one car. In the US, it&rsquo;s totally normal for a household to have two or three. I could have also bought a car for my oldest as soon as they were old enough to drive.</p>
<blockquote>
<p><code>$59,000</code> + <code>$12,000</code> x 2 ≈ <strong><code>$83,000</code></strong></p>
</blockquote>
<p>If we had replaced the other old car with a shiny new car, we could have spent maybe an additional <code>$2,000</code> per year. </p>
<blockquote>
<p><code>$83,000</code> + <code>$2,000</code> x 5 ≈ <strong><code>$93,000</code></strong></p>
</blockquote>
<p><strong>That&rsquo;s close to <code>$100,000</code> right there just in 5 years!</strong></p>
<h2 id="compared-with-car-ownership-an-ebike-is-practically-free">Compared with car ownership, an ebike is <em>practically free</em>.<a class="header-anchor" href="#compared-with-car-ownership-an-ebike-is-practically-free" title="Link to this section" rel="nofollow">#</a></h2>
<ol>
<li>The <em>cost of purchasing an ebike</em> (remember, you&rsquo;ll still retain lots of its value after several years) is roughly a single major car repair or maintenance you need to routinely handle.</li>
<li>The annualized cost of owning an ebike is just a couple of tanks of gasoline.</li>
<li>And then the cost of ebike &ldquo;fuel&rdquo; is just a cup of coffee that you drink while filling up your car, <em>per year</em>!</li>
</ol>
<h2 id="your-car-may-be-costing-you-a-million-dollars">Your car may be costing you a MILLION dollars<a class="header-anchor" href="#your-car-may-be-costing-you-a-million-dollars" title="Link to this section" rel="nofollow">#</a></h2>
<p><code>$100,000</code> can be <em>life-changing</em>. It can mean being able to purchase a house or not—this was indeed a significant fraction of my recent down payment. It can mean a fully-paid college vs. a massive student debt. And if you invest the whole amount in an index fund (assuming 8%) for 30 years, <strong>it&rsquo;ll grow to <code>~$1M</code>!</strong></p>
<p>In other words, choosing whether or not to own a car can literally determine whether you&rsquo;ll be a millionaire when you retire. And remember, this difference can be made in just <em>five years</em>.</p>
<p>What happens if we extrapolate? After putting the initial <code>$100,000</code> to work, if you forego two cars (<code>~$24,000</code>/year) for 30 years, the difference grows to about <strong><code>~$4M</code></strong>!</p>
<h2 id="how-about-used-cars">How about used cars?<a class="header-anchor" href="#how-about-used-cars" title="Link to this section" rel="nofollow">#</a></h2>
<p>You might think: &ldquo;But that&rsquo;s for <em>new</em> cars. I drive a used car, so it&rsquo;s way cheaper.&rdquo; It&rsquo;s true that the AAA number is based on new vehicles, and used cars do cost less, mainly because depreciation is lower. But maintenance and repair costs tend to be higher. When you add it all up, <a href="https://www.nerdwallet.com/article/loans/auto-loans/total-cost-owning-car" rel="nofollow">used car ownership still typically runs $5,000+ per year</a>. </p>
<p>Also take a look at this video: <a href="https://www.youtube.com/watch?v=QwibaQMKYu8" rel="nofollow">Car ownership cost me a LOT of money. I&rsquo;m done</a>. He diligently collected <em>most</em> of the receipts and calculated how much he spent on his car. Even though he got his car almost for free, ended up spending over $4,000 a year. Most people buy much better (with plenty of remaining depreciation) used cars than this.</p>
<p>So let&rsquo;s redo the math with used cars. Say, conservatively, you spend <code>$6,000</code>/year per car instead of <code>$12,000</code>. For two cars over 5 years, that&rsquo;s still <code>$60,000</code>—and invested at 8% for 30 years, that alone grows to about <strong><code>~$600,000</code></strong>. Similarly, starting with <code>$60,000</code> and then saving <code>$6,000</code> per year will get you to about <code>$1.3M</code>.</p>
<p>In other words, used cars can be definitely cheaper, but not drastically cheaper. It is still a million-dollar decision. </p>
<h2 id="how-about-evs">How about EVs?<a class="header-anchor" href="#how-about-evs" title="Link to this section" rel="nofollow">#</a></h2>
<p>EVs are way better than gas cars, for the environment, for air quality, and for fuel and maintenance costs. But EVs still don&rsquo;t drastically change the ownership cost picture. The upfront price and depreciation are still significant, and you still pay for insurance, registration, parking, and tires. Unless you&rsquo;re lucky enough to lock in an insane lease deal or something, you&rsquo;re still spending thousands of dollars a year to own one.</p>
<p>And from the perspective of cities and built environment, an EV is still a car. It still takes up the same amount of road and parking space, still contributes to congestion, still prevents you from moving, still makes streets less safe for pedestrians, and still fuels the same sprawling infrastructure. And it probably destroys the road more than gas cars. Switching from gas to electric is a step forward, but it doesn&rsquo;t address lots of negative externalities of car ownership. </p>
<h2 id="beyond-the-direct-savings">Beyond the direct savings<a class="header-anchor" href="#beyond-the-direct-savings" title="Link to this section" rel="nofollow">#</a></h2>
<p>But even this is underestimating the difference. Cycling is one of the healthiest habits you can have—an excellent low-impact aerobic exercise. Some people worry about not getting exercise on an ebike, but studies show that e-bike riders get roughly the same amount of exercise as acoustic bike riders<sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="nofollow">2</a></sup>. The reason is simple: because e-bikes are easier to ride, people ride them way more often!</p>
<p>It&rsquo;s not just about physical health, but mental health too. From my experience, bike commuting can have enormous impact on mental health. The way it resets stress and lifts mood feels almost magical.</p>
<p><a href="https://www.vtpi.org/nmt-tdm.pdf" rel="nofollow">A report</a> estimates that the health benefits of switching to bike commuting are about <code>$1,000-$2,000</code> per year, although I&rsquo;m not entirely sure whether this captures the full benefits of being healthy and happy.</p>
<p>And then there&rsquo;s the impact on the safety of our streets—you&rsquo;re not going to kill someone or destroy buildings with an ebike—and the climate crisis. These are harder to put a dollar figure on, but they&rsquo;re enormous.</p>
<h2 id="what-this-means-for-the-cities">What this means for the cities<a class="header-anchor" href="#what-this-means-for-the-cities" title="Link to this section" rel="nofollow">#</a></h2>
<p>The benefits extend well beyond individual finances and fitness. If more people make this switch, many positive effects ripple through our cities.</p>
<p><strong>Infrastructure costs can drop dramatically.</strong> Roads are expensive to build and maintain, and the damage grows exponentially<sup id="fnref:3"><a class="footnote-ref" href="#fn:3" rel="nofollow">3</a></sup> with vehicle weight. A single truck does thousands of times more damage to the road than a bike. Better yet, bike lanes move five times more people per meter of street width than car lanes<sup id="fnref:4"><a class="footnote-ref" href="#fn:4" rel="nofollow">4</a></sup>. In other words, the number of people transported on a 5-lane <a class="wikilink" href="/wiki/Stroad/" rel="nofollow">stroad</a>—that have been built and maintained with billions and billions of dollars—can be handled by a single two-way bike lane that costs almost nothing compared to that. Cities could redirect millions and billions from road maintenance to other priorities—or simply lower taxes.</p>
<p><strong>Parking demand shrinks.</strong> <a class="wikilink" href="/wiki/Parking minimum/" rel="nofollow">Parking requirements</a> have shaped American cities for decades, burying valuable urban land under asphalt. Constructing parking space is expensive. A single spot in a structured parking garage can cost <code>$60,000 – $150,000</code> or even more for expensive places. <a class="wikilink" href="/wiki/Free parking/" rel="nofollow">Free parking</a> seems free but someone always pays—usually through higher prices, higher taxes, or both. When people switch to bikes, that land becomes available for housing, parks, or businesses. And on a personal level, parking is a surprisingly concrete entry point: a university parking pass alone can run $500–$1,000 a year—enough to pay for a decent e-bike within a year or two. </p>
<p><strong>Traffic congestion eases.</strong> Here&rsquo;s the counterintuitive part: because bikes are so much more space-efficient than cars, it can trigger so-called <a class="wikilink" href="/wiki/Traffic evaporation/" rel="nofollow">traffic evaporation</a>, where reduced road capacity actually leads to less total traffic. In Cambridge, MA, after separated bike lanes were installed on Garden Street, <a href="https://www.cambridgebikesafety.org/2024/03/06/bicycle-use-in-cambridge-soars-following-installation-of-separated-bike-lanes-according-to-new-study/" rel="nofollow">bike volumes surged over 500%</a> with a corresponding drop in driving mode share. Across the Boston area, streets with new bike lanes saw <a href="https://mass.streetsblog.org/2025/12/05/boston-data-show-streets-with-new-bike-lanes-successfully-shift-traffic-from-cars-to-bikes" rel="nofollow">car traffic drop 9–15% while bike trips soared</a>. Every person switching from a car to other modes means less traffic because <em>all other modes are much more space-efficient</em>. If you have been to places like Copenhagen or Amsterdam, you must have seen all the quiet streets with very few cars (but with bike traffic jams). If some of those people on the bikes had to drive, these cities would have been completely choked with traffic. </p>
<p>The individual choice to ditch a car is already financially compelling. But when many people make that choice, the collective benefits multiply tremendously. </p>
<h2 id="conclusion">Conclusion<a class="header-anchor" href="#conclusion" title="Link to this section" rel="nofollow">#</a></h2>
<p>Here&rsquo;s the bottom line: switching from a car-dependent average-American lifestyle to an e-bike probably saved my household up to <strong><code>$100k</code> just over five years</strong>. If invested over a lifetime, that difference grows to <strong>over a million dollars</strong>.</p>
<p>Of course, this isn&rsquo;t for everyone. Some people genuinely need cars for work, family situations, or disabilities. Some places just do not have any viable alternative to cars (~~run away!~~). I&rsquo;m not arguing everyone should sell their car tomorrow. I&rsquo;m just sad that our built environment, engineers, and car monoculture in North America pushes people into expensive car ownership.</p>
<p>But I think the most important step isn&rsquo;t even about the numbers—it&rsquo;s about questioning the default. Most of us never stop to ask: &ldquo;Do I actually <em>have to own</em> a car?&rdquo; We just assume we do, because everyone around us has one, because our cities were built around them, because it&rsquo;s what you do when you grow up. But once you pause and genuinely ask the question, you might find that the answer is not as obvious as you thought.</p>
<p>I would argue that many of &ldquo;you&rdquo; are probably overestimating the difficulty of going car-light/car-free, while heavily underestimating the true cost of car ownership. Maybe you have never estimated the true cost, are too afraid to take the leap, or simply never imagined the alternatives.</p>
<p>So why not try your own back-of-the-envelope calculation? You might surprise yourself. And maybe try biking.</p>
<h2 id="see-also">See also<a class="header-anchor" href="#see-also" title="Link to this section" rel="nofollow">#</a></h2>
<ul>
<li><a href="https://onedrive.live.com/view.aspx?resid=79AE734DAB571B71%21144977&amp;authkey=!AAhBricAGHekghM" rel="nofollow">Car economics</a>: an analysis by <a class="wikilink" href="/wiki/YT/TechAltar/" rel="nofollow">TechAltar</a></li>
<li><a href="https://www.youtube.com/watch?v=QwibaQMKYu8" rel="nofollow">Car ownership cost me a LOT of money. I&rsquo;m done</a></li>
<li><a class="wikilink" href="/wiki/Urban design/Parking destroys cities/" rel="nofollow">Parking destroys cities</a>.<ul>
<li><a href="https://www.theatlantic.com/ideas/archive/2021/05/parking-drives-housing-prices/618910/" rel="nofollow">Atlantic: How Parking Destroys Cities</a></li>
</ul>
</li>
</ul>
<p>(share your thoughts on <a href="https://bsky.app/profile/yyahn.bsky.social/post/3mfcid443sk2h" rel="nofollow">bluesky</a> and subscribe 👇)</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://newsroom.aaa.com/wp-content/uploads/2025/09/UPDATE-AAA-Fact-Sheet-Your-Driving-Cost-9.2025-1.pdf&#160;" rel="nofollow">https://newsroom.aaa.com/wp-content/uploads/2025/09/UPDATE-AAA-Fact-Sheet-Your-Driving-Cost-9.2025-1.pdf&#160;</a><a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text" rel="nofollow">&#8617;</a></p>
</li>
<li id="fn:2">
<p>Bourne et al. (2018). &ldquo;Health benefits of electrically-assisted cycling.&rdquo; <em>International Journal of Behavioral Nutrition and Physical Activity</em>. <a href="https://doi.org/10.1186/s12966-018-0751-8&#160;" rel="nofollow">https://doi.org/10.1186/s12966-018-0751-8&#160;</a><a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text" rel="nofollow">&#8617;</a></p>
</li>
<li id="fn:3">
<p>Technically, road damage follows a power law (approximately the <a href="https://en.wikipedia.org/wiki/Fourth_power_law" rel="nofollow">fourth power</a> of axle load), not an exponential relationship. This was established by the <a href="https://en.wikipedia.org/wiki/AASHO_Road_Test" rel="nofollow">AASHO Road Test</a> (1958–1960).&#160;<a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text" rel="nofollow">&#8617;</a></p>
</li>
<li id="fn:4">
<p>NACTO. &ldquo;Transit Street Design Guide: Volume and Throughput.&rdquo; <a href="https://nacto.org/publication/transit-street-design-guide/introduction/why/designing-move-people/&#160;" rel="nofollow">https://nacto.org/publication/transit-street-design-guide/introduction/why/designing-move-people/&#160;</a><a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text" rel="nofollow">&#8617;</a></p>
</li>
</ol>
</div>]]></content>
    
  </entry>
  
  <entry>
    <title>Zero-shot stance detection in practice: insights on training, prompting, and decoding with a capable lightweight LLM</title>
    <link href="https://yyahn.com/wiki/Paper/Aiyappa2026zero-shot/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Paper/Aiyappa2026zero-shot/</id>
    <published>2026-02-13T00:00:00Z</published>
    <updated>2026-02-13T23:43:06Z</updated>
    
    <content type="html"><![CDATA[<ul>
<li><a href="https://peerj.com/articles/cs-3540/" rel="nofollow">https://peerj.com/articles/cs-3540/</a></li>
<li>Rachith Aiyappa, Shruthi Senthilmani, Jisun An, Haewoon Kwak, Yong-Yeol Ahn</li>
</ul>
<p><a class="wikilink" href="/wiki/Zero-shot learning/" rel="nofollow">Zero-shot</a> <a class="wikilink" href="/wiki/Stance detection/" rel="nofollow">Stance detection</a></p>]]></content>
    
  </entry>
  
  <entry>
    <title>Gloaguen et al., Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?</title>
    <link href="https://yyahn.com/wiki/Paper/Gloaguen2026agents/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/Paper/Gloaguen2026agents/</id>
    <published>2026-02-12T00:00:00Z</published>
    <updated>2026-03-01T13:28:20Z</updated>
    
    <content type="html"><![CDATA[<ul>
<li><a href="https://arxiv.org/abs/2602.11988" rel="nofollow">https://arxiv.org/abs/2602.11988</a></li>
<li><a class="wikilink" href="/wiki/Person/Thibaud Gloaguen/" rel="nofollow">Thibaud Gloaguen</a>, <a class="wikilink" href="/wiki/Person/Niels Mundler/" rel="nofollow">Niels Mundler</a>, <a class="wikilink" href="/wiki/Person/Mark Muller/" rel="nofollow">Mark Muller</a>, <a class="wikilink" href="/wiki/Person/Veselin Raychev/" rel="nofollow">Veselin Raychev</a>, <a class="wikilink" href="/wiki/Person/Martin Vechev/" rel="nofollow">Martin Vechev</a></li>
</ul>
<p><a class="wikilink" href="/wiki/LLMs/" rel="nofollow">LLMs</a>, <a class="wikilink" href="/wiki/Software engineering/" rel="nofollow">Software engineering</a>, <a class="wikilink" href="/wiki/Benchmark/" rel="nofollow">Benchmark</a></p>
<p>Evaluated whether repository-level context files (e.g., <code>AGENTS.md</code>, <code>CLAUDE.md</code>) actually help coding agents. Found that they tend to <em>reduce</em> task success rates while increasing inference cost by over 20% — the files encouraged agents to explore more broadly and test more thoroughly without improving outcomes. The recommendation is to keep context files minimal.</p>
<p>Directly relevant to <a class="wikilink" href="/wiki/Claude Code/" rel="nofollow">Claude Code</a>&rsquo;s use of <code>CLAUDE.md</code>. A cautionary example of how imposing human-written structure on capable agents can backfire. Over-specifying context constrains rather than assists (see <a class="wikilink" href="/wiki/Claude Code/#Don't over-engineer" rel="nofollow">Claude Code</a>).</p>]]></content>
    
  </entry>
  
  <entry>
    <title>YY&#39;s Random Walks</title>
    <link href="https://yyahn.com/wiki/yy-randomwalks/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/yy-randomwalks/</id>
    <published>2026-02-07T00:00:00Z</published>
    <updated>2026-02-08T23:11:48Z</updated>
    
    <content type="html"><![CDATA[<p>A newsletter about science, technology, academia, and occasional rabbit holes. </p>
<ul>
<li><a href="https://buttondown.com/yyahn" rel="nofollow">Subscribe on Buttondown</a></li>
<li><a href="https://buttondown.com/yyahn/archive/" rel="nofollow">Archive</a></li>
</ul>]]></content>
    
  </entry>
  
  <entry>
    <title>YY&#39;s Bike Shed</title>
    <link href="https://yyahn.com/wiki/yy-bikeshed/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/wiki/yy-bikeshed/</id>
    <published>2026-02-06T00:00:00Z</published>
    <updated>2026-02-08T23:13:01Z</updated>
    
    <content type="html"><![CDATA[<p>A newsletter about what the research says on bike infrastructure, housing, and urban mobility. </p>
<ul>
<li><a href="https://buttondown.com/bikeshed" rel="nofollow">Subscribe on Buttondown</a></li>
<li><a href="https://buttondown.com/bikeshed/archive/" rel="nofollow">Archives</a></li>
</ul>]]></content>
    
  </entry>
  

  
  <entry>
    <title>Recently Updated Pages</title>
    <link href="https://yyahn.com/wiki/" rel="alternate" type="text/html"/>
    <id>https://yyahn.com/feed/updates/2026-03-04</id>
    <published>2026-03-04T17:55:32Z</published>
    <updated>2026-03-04T17:55:32Z</updated>
    <content type="html"><![CDATA[<p>The following pages were recently updated:</p>
<ul>
  <li><a href="https://yyahn.com/wiki/LaTeX/Pet peeves/">LaTeX Pet peeves</a> - 2026-03-04</li>
  <li><a href="https://yyahn.com/wiki/Cosine similarity/">Cosine similarity</a> - 2026-03-04</li>
  <li><a href="https://yyahn.com/wiki/Claude Code/">Claude Code</a> - 2026-03-01</li>
  <li><a href="https://yyahn.com/wiki/dotfiles/">dotfiles</a> - 2026-02-28</li>
  <li><a href="https://yyahn.com/wiki/Traffic evaporation/">Traffic evaporation</a> - 2026-02-19</li>
  <li><a href="https://yyahn.com/wiki/Bike/Ebike/">Ebike</a> - 2026-02-19</li>
  <li><a href="https://yyahn.com/wiki/GitHub/Workflow/">GitHub Workflow</a> - 2026-02-07</li>
  <li><a href="https://yyahn.com/wiki/articles/20251012_translating_bigcity_lessons_to_small_towns/">Why big-city bike lane lessons (spoiler: they tend to boost local businesses) may still apply to small towns</a> - 2026-02-07</li>
</ul>]]></content>
  </entry>
  
</feed>