1<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="author" content="Anthony Fu"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="revisit-after" content="7 days"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="alternate" type="application/rss+xml" title="Anthony Fu's Blog" href="/feed.xml"><meta name="msapplication-TileColor" content="#ffffff"><title>Anthony Fu</title>
1<script>!function(){const e=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,t=localStorage.getItem("vueuse-color-scheme")||"auto";("dark"===t||e&&"light"!==t)&&document.documentElement.classList.toggle("dark",!0)}()</script>
1<script type="module" crossorigin="" src="/assets/app-i8bZJj9W.js"></script>
1<link rel="modulepreload" crossorigin="" href="/assets/rolldown-runtime-hePW80VL.js"><link rel="stylesheet" crossorigin="" href="/assets/app-CcwtqiuP.css"><link rel="modulepreload" crossorigin="" href="/assets/posts-Drrfm8Bi.js"><link rel="modulepreload" crossorigin="" href="/assets/vue.BHyNcdic-D2KugMlH.js"><link rel="modulepreload" crossorigin="" href="/assets/SubNav-COre2Osq.js"><link rel="modulepreload" crossorigin="" href="/assets/ListPosts-B6edk6AX.js"></head><body class="font-sans text-gray-700 dark:text-gray-200 relative"><div id="app" data-server-rendered="true"><!--[--><header class="header z-40" data-v-f7964d7e=""><a href="/" class="w-12 h-12 absolute xl:fixed m-5 select-none outline-none" focusable="false" data-v-f7964d7e=""><svg viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-f7964d7e="" data-v-69a3f4dd=""><title data-v-69a3f4dd="">Anthony Fu @ antfu.me</title><mask id="mask0_634_3" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="24" y="7" width="50" height="87" data-v-69a3f4dd=""><path d="M73.7892 9.12595C69.3501 1.20478 61.8262 17.7197 60.2461 21.1572C56.9356 28.6299 55.2305 35.5788 53.5 43.5C51.5438 41.4076 48.5048 36.8913 47 34.5C46 32.5 44.178 33.3348 45.2582 35.5C44.2048 33.7065 44 31 40.4582 28.8541C31.3543 28.0321 23.7209 43.6536 25 51.5C28.5029 62.7044 40 53 42.8659 47.9845C42.5649 50.8241 42.5649 54.7847 45.424 56.1298C48.5 57 49.8631 54.9342 51.8194 52.9913C50.6908 64.7236 49.2612 76.9042 53.1737 88.4123C54.9794 94.9884 61.3747 96.6324 62.0519 88.5618C62.9547 78.5482 60.4719 68.7589 57.4623 59.3431C56.6347 56.6529 55.5 54.5 54.6886 51.7956C54.6886 48 55.6585 50.6972 57.0861 52.244C58.7413 54.0375 64.309 59.3431 66.5 59.5C65 57.5 64.5348 56.8771 64.309 56.6529C61.9014 53.6638 59.0423 50.8989 56.4842 47.9845C61.6757 40.5117 66.7167 32.3663 70.1777 23.7726C71.6825 19.3637 74.8425 13.7591 73.7892 9.12595ZM43.3926 40.8853C41.7373 45.4437 39.7811 48.956 35.9439 52.0945C26.1502 60.1051 25.1428 47.741 28.6457 41.8568C33.16 32.4411 42.7154 24.0715 43.3926 40.8853ZM52.5 49C51.2962 50.7187 49.5314 53.3274 47.5 54C45.8447 54.4484 45.3488 53.2902 45.0478 51.7956C44.145 46.8636 45.725 42.0063 46.4021 37.2237C48.0574 40.3622 50.119 42.8614 52 46C52.3762 46.822 53.0267 48.1033 52.5 49ZM55.1299 56.1298C58.3652 65.9192 60.5471 76.1569 59.6442 86.3947C58.7413 95.362 55.8823 88.8607 54.7537 84.3023C52.4213 74.2887 53 63.5 54.227 53.8133C54.528 54.5606 54.9042 55.6067 55.1299 56.1298ZM71.4568 11.1436C69.8767 21.755 62.0519 36.7006 55.4308 45.0701C56.7851 38.0457 58.7413 31.2454 61.45 24.5946C61.6757 23.2495 71.6072 3.52135 71.4568 11.1436Z" fill="white" data-v-69a3f4dd=""></path></mask><g mask="url(#mask0_634_3)" data-v-69a3f4dd=""><path class="path1" d="M43.8252 39.3048C43.5 29 38 27 31 35.5C16.9959 58.4158 35 61 42.5 46C44.4559 42.5 45.5001 37 45.5001 37C44.8789 42.2731 43.8252 45.9801 43.8252 50C43.8252 56.6285 48 57.9 54.5 48.4C60.5 40.9 68.5 27.5 72 15.5C74.4792 7 70.5 4.5 64 16.5C55 31.5 50.7595 59 52.3 78C53.8038 96.5469 63 97.5 61 79.5C59.5082 66.0734 52 42.5 45.5001 33C48 38.5 57 52 65.5 58.5" stroke="black" stroke-width="2.5" stroke-linecap="round" data-v-69a3f4dd=""></path></g></svg></a><button title="Scroll to top" fixed="" right-3="" bottom-3="" w-10="" h-10="" hover:op100="" rounded-full="" hover-bg-hex-8883="" transition="" duration-300="" z-100="" print:hidden="" class="op0! pointer-events-none" data-v-f7964d7e=""><div i-ri-arrow-up-line="" data-v-f7964d7e=""></div></button><nav class="nav" data-v-f7964d7e=""><div class="spacer" data-v-f7964d7e=""></div><div class="right" print:op0="" data-v-f7964d7e=""><a aria-current="page" href="/posts" class="router-link-active router-link-exact-active" title="Blog" data-v-f7964d7e=""><span class="lt-md:hidden" data-v-f7964d7e="">Blog</span><div i-ri-article-line="" md:hidden="" data-v-f7964d7e=""></div></a><a href="/projects" class="" title="Projects" data-v-f7964d7e=""><span class="lt-md:hidden" data-v-f7964d7e="">Projects</span><div i-ri-lightbulb-line="" class="md:hidden" data-v-f7964d7e=""></div></a><a href="/talks" class="lt-md:hidden" title="Talks" data-v-f7964d7e="">Talks </a><a href="/sponsors-list" class="" title="Sponsors" data-v-f7964d7e=""><span class="lt-md:hidden" data-v-f7964d7e="">Sponsors</span><div i-ri-heart-line="" class="md:hidden" data-v-f7964d7e=""></div></a><a href="/podcasts" class="lt-md:hidden" title="Podcasts" data-v-f7964d7e=""><div i-ri-mic-line="" data-v-f7964d7e=""></div></a><a href="/photos" class="" title="Photos" data-v-f7964d7e=""><div i-ri-camera-3-line="" data-v-f7964d7e=""></div></a><a href="/demos" class="" title="Demos" data-v-f7964d7e=""><div i-ri-screenshot-line="" data-v-f7964d7e=""></div></a><a href="https://bsky.app/profile/antfu.me" target="_blank" title="Bluesky" class="lt-md:hidden" data-v-f7964d7e=""><div i-ri-bluesky-line="" data-v-f7964d7e=""></div></a><a href="https://github.com/antfu" target="_blank" title="GitHub" class="lt-md:hidden" data-v-f7964d7e=""><div i-uil-github-alt="" data-v-f7964d7e=""></div></a><a href="/feed.xml" target="_blank" title="RSS" class="lt-md:hidden" data-v-f7964d7e=""><div i-la-rss-square="" style="font-size:1.25rem;margin:0 -.125rem" data-v-f7964d7e=""></div></a><a class="select-none" title="Toggle Color Scheme" data-v-f7964d7e=""><div i-ri-sun-line="" dark:i-ri-moon-line=""></div></a></div></nav></header><main class="px-7 py-10 of-x-hidden"><!--[--><!----><!----><article class=""><!--[--><div class="prose m-auto slide-enter-content"><div class="prose m-auto mb-8 select-none animate-none! op100!"><button flex="~ gap1" items-center="" mb2="" op30="" text-sm=""><div i="carbon-checkbox"></div>English Only</button><div mb-0="" flex="~ col gap-1 sm:row sm:gap-3 wrap" text-3xl=""><a aria-current="page" href="/posts" class="router-link-active router-link-exact-active !border-none opacity-100 underline">Blog </a><a href="/talks" class="!border-none opacity-20 hover:opacity-50">Talks </a><a href="/podcasts" class="!border-none opacity-20 hover:opacity-50">Podcasts </a><a href="/streams" class="!border-none opacity-20 hover:opacity-50">Streams </a><a href="/notes" class="!border-none opacity-20 hover:opacity-50">Notes</a></div></div><ul only-date=""><!----><!--[--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:-2;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2026</span></div><div class="slide-enter" style="--enter-stage:0;--enter-step:60ms"><a href="/posts/pluggable-extensible-playful-devtools" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Pluggable, Extensible, and Playful DevTools</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Sep 16</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:1;--enter-step:60ms"><a href="/posts/ecosystem-sponsorship-forwarding" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Ecosystem Sponsorship Forwarding</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Aug 25</span><!----><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:0;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2025</span></div><div class="slide-enter" style="--enter-stage:2;--enter-step:60ms"><a href="/posts/categorize-deps" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Categorize Your Dependencies</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 28</span><span text-sm="" op40="" ws-nowrap="">· 8min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:3;--enter-step:60ms"><a href="/posts/ohayo-tokyo" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!---->
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--15 mr2 my-auto hidden md:block">æ¥æ¬èª</span><span align-middle="">ãã¯ãããæ±äº¬ï¼</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 8</span><span text-sm="" op40="" ws-nowrap="">· 7min</span><!----><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">æ¥æ¬èª</span></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:4;--enter-step:60ms"><a href="/posts/hello-tokyo" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Hello Tokyo!</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 8</span><span text-sm="" op40="" ws-nowrap="">· 7min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:5;--enter-step:60ms"><a href="/posts/photos-page" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Photos Page</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 12</span><span text-sm="" op40="" ws-nowrap="">· 3min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:6;--enter-step:60ms"><a href="/posts/async-sync-in-between" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Async, Sync, in Between</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 3</span><span text-sm="" op40="" ws-nowrap="">· 18min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:7;--enter-step:60ms"><a href="/posts/move-on-to-esm-only" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Move on to ESM-only</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Feb 5</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:8;--enter-step:60ms"><a href="/posts/epoch-semver" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Epoch Semantic Versioning</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jan 7</span><span text-sm="" op40="" ws-nowrap="">· 8min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:7;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2024</span></div><div class="slide-enter" style="--enter-stage:9;--enter-step:60ms"><a href="https://nuxt.com/blog/nuxt-icon-v1-0" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Introducing Nuxt Icon v1</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Nov 25</span><span text-sm="" op40="" ws-nowrap="">· 20min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:10;--enter-step:60ms"><a href="/posts/sponsorship-forwarding" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Initiative on Sponsorship Forwarding</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 20</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:11;--enter-step:60ms"><a href="https://nuxt.com/blog/eslint-module" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Refreshed Nuxt ESLint Integrations</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 10</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:12;--enter-step:60ms"><a href="https://eslint.org/blog/2024/04/eslint-config-inspector/" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Introducing ESLint Config Inspector</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Apr 5</span><span text-sm="" op40="" ws-nowrap="">· 5min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:13;--enter-step:60ms"><a href="/posts/mental-health-oss-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">弿ºçå¿ç建设</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 16</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:14;--enter-step:60ms"><a href="/posts/mental-health-oss" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Mental Health in Open Source</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 16</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:15;--enter-step:60ms"><a href="https://nuxt.com/blog/shiki-v1" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">The Evolution of Shiki v1.0</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 11</span><span text-sm="" op40="" ws-nowrap="">· 20min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:16;--enter-step:60ms"><a href="/posts/shiki-magic-move" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">The Magic in Shiki Magic Move</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 4</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:15;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2023</span></div><div class="slide-enter" style="--enter-stage:17;--enter-step:60ms"><a href="https://nuxt.com/blog/nuxt-devtools-v1-0" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Nuxt Devtools v1.0</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Nov 13</span><span text-sm="" op40="" ws-nowrap="">· 20min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:18;--enter-step:60ms"><a href="/posts/animated-svg-logo" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Animated SVG Logo</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jul 19</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:19;--enter-step:60ms"><a href="/posts/ai-qrcode-101" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Stable Diffusion QR Code 101</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jul 10</span><span text-sm="" op40="" ws-nowrap="">· 35min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:20;--enter-step:60ms"><a href="/posts/ai-qrcode-refine" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">
1Refining AI Generated QR Code</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jun 30</span><span text-sm="" op40="" ws-nowrap="">· 16min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:21;--enter-step:60ms"><a href="/posts/ai-qrcode" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Stylistic QR Code with Stable Diffusion</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jun 25</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:22;--enter-step:60ms"><a href="/posts/manage-github-notifications-2023" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">How I Manage GitHub Notifications</span><!----></div><div flex="~ gap-2 items-center"><!----><span align-middle="" op50="" flex-none="" i-ri:film-line="" title="Provided in video"></span><!----><span text-sm="" op50="" ws-nowrap="">May 17</span><span text-sm="" op40="" ws-nowrap="">· 20min</span><!----><span text-sm="" op40="" ws-nowrap="" md:hidden="">· GitHub Maintainer Summit 2023</span><!----><!----></div></li><div op50="" text-sm="" hidden="" mt--2="" md:block="">GitHub Maintainer Summit 2023</div></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:23;--enter-step:60ms"><a href="/posts/sliding-enter-animation" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Sliding Enter Animation</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">May 7</span><span text-sm="" op40="" ws-nowrap="">· 6min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:24;--enter-step:60ms"><a href="https://nuxt.com/blog/introducing-nuxt-devtools" target="_blank" rel="noopener noreferrer" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Introducing Nuxt Devtools</span><span align-middle="" op50="" flex-none="" text-xs="" ml--1.5="" i-carbon-arrow-up-right="" title="External"></span></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 27</span><span text-sm="" op40="" ws-nowrap="">· 12min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:25;--enter-step:60ms"><a href="/posts/nuxt-dx-2023" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Development Experience with Nuxt</span><!----></div><div flex="~ gap-2 items-center"><!----><span align-middle="" op50="" flex-none="" i-ri:film-line="" title="Provided in video"></span><!----><span text-sm="" op50="" ws-nowrap="">Feb 9</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><span text-sm="" op40="" ws-nowrap="" md:hidden="">· Vue Amsterdam 2023</span><!----><!----></div></li><div op50="" text-sm="" hidden="" mt--2="" md:block="">Vue Amsterdam 2023</div></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:24;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2022</span></div><div class="slide-enter" style="--enter-stage:26;--enter-step:60ms"><a href="/posts/bonjour-paris" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Bonjour Paris!</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Dec 10</span><span text-sm="" op40="" ws-nowrap="">· 6min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:27;--enter-step:60ms"><a href="/posts/dev-ssr-on-nuxt" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Dev SSR on Nuxt with Vite</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 4</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:28;--enter-step:60ms"><a href="/posts/why-not-prettier" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Why I don't use Prettier</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 1</span><span text-sm="" op40="" ws-nowrap="">· 12min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:29;--enter-step:60ms"><a href="/posts/why-not-prettier-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">为ä»ä¹æä¸ä½¿ç¨ Prettier</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 1</span><span text-sm="" op40="" ws-nowrap="">· 12min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:30;--enter-step:60ms"><a href="/posts/why-reproductions-are-required" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Why Reproductions are Required</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">May 30</span><span text-sm="" op40="" ws-nowrap="">· 9min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:31;--enter-step:60ms"><a href="/posts/why-reproductions-are-required-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">ã请æä¾æå°éç°ã</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">May 30</span><span text-sm="" op40="" ws-nowrap="">· 9min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:30;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2021</span></div><div class="slide-enter" style="--enter-stage:32;--enter-step:60ms"><a href="/posts/publish-esm-and-cjs" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Ship ESM & CJS in one Package</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Nov 29</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:33;--enter-step:60ms"><a href="/posts/icons-in-pure-css" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Icons in Pure CSS</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 31</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:34;--enter-step:60ms"><a href="/posts/icons-in-pure-css-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">èè纯 CSS 徿 </span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 31</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:35;--enter-step:60ms"><a href="/posts/reimagine-atomic-css" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Reimagine Atomic CSS</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 26</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:36;--enter-step:60ms"><a href="/posts/reimagine-atomic-css-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">éæ°ææ³ååå CSS</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 26</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:37;--enter-step:60ms"><a href="/posts/journey-with-icons-continues" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Journey with Icons Continues</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Sep 10</span><span text-sm="" op40="" ws-nowrap="">· 15min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:38;--enter-step:60ms"><a href="/posts/async-with-composition-api" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Async with Composition API</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jul 16</span><span text-sm="" op40="" ws-nowrap="">· 17min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:39;--enter-step:60ms"><a href="/posts/about-yak-shaving" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">About Yak Shaving</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">May 19</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:40;--enter-step:60ms"><a href="/posts/about-yak-shaving-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">å
³äº Yak Shaving</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">May 19</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:41;--enter-step:60ms"><a href="/posts/composable-vue-vueday-2021" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Composable Vue</span><!----></div><div flex="~ gap-2 items-center"><!----><span align-middle="" op50="" flex-none="" i-ri:film-line="" title="Provided in video"></span><!----><span text-sm="" op50="" ws-nowrap="">Apr 28</span><span text-sm="" op40="" ws-nowrap="">· 30min</span><!----><span text-sm="" op40="" ws-nowrap="" md:hidden="">· VueDay 2021</span><!----><!----></div></li><div op50="" text-sm="" hidden="" mt--2="" md:block="">VueDay 2021</div></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:42;--enter-step:60ms"><a href="/posts/vue-beijing-2021" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Develop with Vite</span><!----></div><div flex="~ gap-2 items-center"><!----><span align-middle="" op50="" flex-none="" i-ri:film-line="" title="Provided in video"></span><!----><span text-sm="" op50="" ws-nowrap="">Mar 28</span><span text-sm="" op40="" ws-nowrap="">· 18min</span><!----><span text-sm="" op40="" ws-nowrap="" md:hidden="">· Vue Beijing</span><!----><!----></div></li><div op50="" text-sm="" hidden="" mt--2="" md:block="">Vue Beijing</div></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:43;--enter-step:60ms"><a href="/posts/reflection-of-speaking-in-public" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Reflection of Speaking in Public</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 27</span><span text-sm="" op40="" ws-nowrap="">· 5min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:44;--enter-step:60ms"><a href="/posts/windicss-and-tailwind-jit" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Windi CSS and Tailwind JIT</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 18</span><span text-sm="" op40="" ws-nowrap="">· 8min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:45;--enter-step:60ms"><a href="/posts/typed-provide-and-inject-in-vue" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Typed Provide and Inject in Vue</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Mar 5</span><span text-sm="" op40="" ws-nowrap="">· 8min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:46;--enter-step:60ms"><a href="/posts/rewrite-in-vite" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Rewrite in Vite</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jan 31</span><span text-sm="" op40="" ws-nowrap="">· 10min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><div select-none="" relative="" h20="" pointer-events-none="" slide-enter="" style="--enter-stage:45;--enter-step:60ms"><span text-8em="" color-transparent="" absolute="" left--3rem="" top--2rem="" font-bold="" text-stroke-2="" text-stroke-hex-aaa="" op10="">2020</span></div><div class="slide-enter" style="--enter-stage:47;--enter-step:60ms"><a href="/posts/destructuring-with-object-or-array" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Destructuring... with object or array?</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Oct 21</span><span text-sm="" op40="" ws-nowrap="">· 8min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:48;--enter-step:60ms"><a href="/posts/binfe-2020-zh" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2">
1<span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 ml--12 mr2 my-auto hidden md:block">䏿</span><!----><span align-middle="">import { reactive } from 'vue'</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Sep 26</span><span text-sm="" op40="" ws-nowrap="">· 25min</span><!----><span text-sm="" op40="" ws-nowrap="" md:hidden="">· 滨æ±å端æ²é¾ 2020</span><span align-middle="" flex-none="" class="text-xs bg-zinc:15 text-zinc5 rounded px-1 py-0.5 my-auto md:hidden">䏿</span><!----></div></li><div op50="" text-sm="" hidden="" mt--2="" md:block="">滨æ±å端æ²é¾ 2020</div></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:49;--enter-step:60ms"><a href="/posts/watch-with-reactivity" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Watch with @vue/reactivity</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Sep 18</span><span text-sm="" op40="" ws-nowrap="">· 12min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:50;--enter-step:60ms"><a href="/posts/journey-with-icons" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Journey with Icons</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Aug 16</span><span text-sm="" op40="" ws-nowrap="">· 7min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:51;--enter-step:60ms"><a href="/posts/make-libraries-working-with-vue-2-and-3" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Make Libraries Working with Vue 2 and 3</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jul 1</span><span text-sm="" op40="" ws-nowrap="">· 5min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:52;--enter-step:60ms"><a href="/posts/vue-3-notes" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Vue 3 Migration Notes</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jul 1</span><!----><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:53;--enter-step:60ms"><a href="/posts/type-inferencing-in-vue" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">Type Inferencing in Vue</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jun 28</span><!----><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--[--><!----><div class="slide-enter" style="--enter-stage:54;--enter-step:60ms"><a href="/posts/new-house" class="item block font-normal mb-6 mt-2 no-underline"><li class="no-underline" flex="~ col md:row gap-2 md:items-center"><div class="title text-lg leading-1.2em" flex="~ gap-2"><!----><!----><span align-middle="">New House</span><!----></div><div flex="~ gap-2 items-center"><!----><!----><!----><span text-sm="" op50="" ws-nowrap="">Jun 12</span><span text-sm="" op40="" ws-nowrap="">· 2min</span><!----><!----><!----><!----></div></li><!----></a></div><!--]--><!--]--></ul></div><!--]--></article><div class="prose m-auto mt-8 mb-8 slide-enter animate-delay-500 print:hidden"><!----><br><span font-mono="" op50="">> </span><a href="/" class="font-mono op50 hover:op75"></a></div><!--]--><div class="mt-10 mb-6 prose m-auto flex slide-enter animate-delay-1200! copyright"><span class="text-sm op50"><a target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" style="color:inherit">CC BY-NC-SA 4.0</a> 2021-PRESENT © Anthony Fu</span><div class="flex-auto"></div></div></main><!----><!--]--></div>
1<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
vendor: 1 bytes, line 1
1
2<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="c371ba89-d187-498f-9bd9-e6bc5afd1fbb" data-netlify-deploy-branch="main" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiYzM3MWJhODktZDE4Ny00OThmLTliZDktZTZiYzVhZmQxZmJiIiwiYWNjb3VudF9pZCI6IjVjMTQ1YTVjMGVhZGE4Zjc0NTIzM2FlNyIsImRlcGxveV9pZCI6IjZhYWEyMmRiYjFkZmY2MDAwNzU0NTY5ZCIsImlzc3VlciI6Im5mc2VydmVyIn0.9qSVMoCXD6pNQ4Wt32n-3OemV7VZb1evIZiRSJMbDsw"></script>
2 3</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.