<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bookmark on Ricky</title><link>https://linzeyan.github.io/zh-tw/tags/bookmark/</link><description>Recent content in Bookmark on Ricky</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><lastBuildDate>Wed, 03 Jun 2026 10:07:17 +0800</lastBuildDate><atom:link href="https://linzeyan.github.io/zh-tw/tags/bookmark/index.xml" rel="self" type="application/rss+xml"/><item><title>Articles</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260603-articles/</link><pubDate>Wed, 03 Jun 2026 10:07:17 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260603-articles/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://medium.com/@0050211" target="_blank" rel="noopener">https://medium.com/@0050211&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://bitcoinbook-3nd-zh.doge.tg/" target="_blank" rel="noopener">精通比特幣&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://virtualosmuseum.org/" target="_blank" rel="noopener">https://virtualosmuseum.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://polypad.amplify.com/" target="_blank" rel="noopener">mathematical playground&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hub.twinkleai.tw/" target="_blank" rel="noopener">台灣資料的 MCP Hub&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.kindyinfo.com/" target="_blank" rel="noopener">幼園通：幼兒園地圖查詢系統&lt;/a>&lt;/li>
&lt;li>&lt;strong>Github&lt;/strong>
&lt;ul>
&lt;li>&lt;a href="https://github.com/xiaolincoder/CS-Base" target="_blank" rel="noopener">小林 x 图解计算机基础&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Haxxnet/Compose-Examples" target="_blank" rel="noopener">Awesome Docker Compose Examples&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/studyplace-io/Golang-Concurrency-Pattern-Demo" target="_blank" rel="noopener">Golang-Concurrency-Pattern-Demo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/quii/learn-go-with-tests" target="_blank" rel="noopener">Learn Go with Tests&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Admol/SystemDesign" target="_blank" rel="noopener">SystemDesign&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/erdong/prometheus-notes" target="_blank" rel="noopener">Prometheus Notes&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/rustcn-org/rust-algos" target="_blank" rel="noopener">Rust算法题解&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/jbranchaud/til" target="_blank" rel="noopener">📝 Today I Learned&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/GoogleCloudPlatform/golang-samples" target="_blank" rel="noopener">golang-samples&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/lifei6671/interview-go" target="_blank" rel="noopener">Golang 面试题搜集&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/xdite/learn-hack" target="_blank" rel="noopener">打造超人學習能力&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/smallnest/network_benchmark" target="_blank" rel="noopener">单机百万级别QPS 网络传输&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/ruanyf/ai-test-case" target="_blank" rel="noopener">AI 编程的测试用例&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Andyyyy64/whichllm" target="_blank" rel="noopener">whichllm: Find the best local LLM that actually runs on your hardware.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/neuphonic/neutts" target="_blank" rel="noopener">NeuTTS: On-device TTS model by Neuphonic&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/simonoppowa/OpenNutriTracker" target="_blank" rel="noopener">OpenNutriTracker is a free and open source calorie tracker with a focus on simplicity and privacy.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/xai-org/x-algorithm" target="_blank" rel="noopener">Algorithm powering the For You feed on X&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/DigitalPlatDev/FreeDomain" target="_blank" rel="noopener">DigitalPlat FreeDomain: Free Domain For Everyone&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/antoinezambelli/forge" target="_blank" rel="noopener">forge: A Python framework for self-hosted LLM tool-calling and multi-step agentic workflows.&lt;/a>: Three ways to use it: Proxy server, WorkflowRunner, Guardrails middleware.&lt;/li>
&lt;li>&lt;a href="https://github.com/KeygraphHQ/shannon" target="_blank" rel="noopener">Shannon Lite is an autonomous, white-box AI pentester for web applications and APIs. It analyzes your source code, identifies attack vectors, and executes real exploits to prove vulnerabilities before they reach production.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/manaflow-ai/cmux" target="_blank" rel="noopener">cmux: Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/superset-sh/superset" target="_blank" rel="noopener">superset: Code Editor for the AI Agents Era - Run an army of Claude Code, Codex, etc. on your machine&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/soxoj/maigret" target="_blank" rel="noopener">Maigret collects a dossier on a person by username only, checking for accounts on a huge number of sites and gathering all the available information from web pages. No API keys required.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/OpenBMB/VoxCPM" target="_blank" rel="noopener">VoxCPM2: Tokenizer-Free TTS for Multilingual Speech Generation, Creative Voice Design, and True-to-Life Cloning&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Donchitos/Claude-Code-Game-Studios" target="_blank" rel="noopener">Turn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/alistaitsacle/free-llm-api-keys" target="_blank" rel="noopener">https://github.com/alistaitsacle/free-llm-api-keys&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/helloianneo/ian-xiaohei-illustrations" target="_blank" rel="noopener">Ian Xiaohei Illustrations 是一个 Codex Skill，用来指导 AI Agent 为中文文章、帖子、博客、Notion 文档和方法论内容生成正文配图。&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/pewdiepie-archdaemon/odysseus" target="_blank" rel="noopener">odysseus: A self-hosted AI workspace &amp;ndash; meant to be the self-hosted version of the UI experience you get from ChatGPT and Claude. But with more jank and fun. Running on your own hardware, with your own data &amp;ndash; local-first, privacy-first, and no trojan.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/mengxi-ream/read-frog" target="_blank" rel="noopener">🐸 Read Frog - Open Source Immersive Translate | 🐸 陪读蛙 - 开源沉浸式翻译&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/LiveContainer/LiveContainer" target="_blank" rel="noopener">LiveContainer is an app launcher (not emulator or hypervisor) that allows you to run iOS apps inside it.&lt;/a>: Allows you to install unlimited apps (3 app/10 app id free developer account limit does not apply here) with only one app &amp;amp; app id. You can also have multiple versions of an app installed with multiple data containers.&lt;/li>
&lt;li>&lt;a href="https://github.com/T8RIN/ImageToolbox" target="_blank" rel="noopener">Image Toolbox is a powerful app for advanced image manipulation. It offers dozens of features, from basic tools like crop and draw to filters, OCR, and a wide range of image processing options&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/evilsocket/nyx" target="_blank" rel="noopener">Nyx (goddess of the night in Greek mythology) is a self-contained script for cleaning forensic traces on Linux, macOS, and Windows.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/bobeff/open-source-games" target="_blank" rel="noopener">Open source games&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/golang/groupcache" target="_blank" rel="noopener">groupcache&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://github.com/groupcache/groupcache-go" target="_blank" rel="noopener">groupcache-go&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/Archeb/peer.as" target="_blank" rel="noopener">PEER.AS — explore global BGP routing, IP prefixes, ASNs, AS_PATH, origins and peering. The whole thing runs in your browser: there is no backend, no API, and no database server. The site is just a bundle of static files you can host, fork, or mirror anywhere.&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Tool&lt;/strong>
&lt;ul>
&lt;li>&lt;a href="https://instances.vantage.sh/" target="_blank" rel="noopener">ec2instances.info&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://imagefree.net/zh-Hant" target="_blank" rel="noopener">https://imagefree.net/zh-Hant&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Article&lt;/strong>
&lt;ul>
&lt;li>&lt;a href="https://xdgbasedirectoryspecification.com/" target="_blank" rel="noopener">XDG Base Directory Spec&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://zackoverflow.dev/writing/zig-vs-rust-in-2026/" target="_blank" rel="noopener">Zig vs Rust in 2026&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://emschwartz.me/your-clippy-config-should-be-stricter/" target="_blank" rel="noopener">Your Clippy Config Should Be Stricter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blogblog.club/blogrollroll/" target="_blank" rel="noopener">部落卷卷&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://refactoringenglish.com/tools/hn-popularity/" target="_blank" rel="noopener">HN Popularity Contest&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blainsmith.com/articles/httptrace-with-go/" target="_blank" rel="noopener">Tracing HTTP Requests with Go&amp;rsquo;s &lt;code>net/http/httptrace&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>免費 3D 列印模型網站&lt;/strong>
&lt;ul>
&lt;li>&lt;a href="https://makerworld.com" target="_blank" rel="noopener">MakerWorld&lt;/a>: Bambu Lab 官方模型平台。很多模型已經附好列印參數（3MF），下載後可直接列印。適合新手。&lt;/li>
&lt;li>&lt;a href="https://www.printables.com" target="_blank" rel="noopener">Printables&lt;/a>: Prusa 官方社群平台。高品質免費模型很多，分類清楚。實用工具、收納、機械零件特別豐富。&lt;/li>
&lt;li>&lt;a href="https://www.thingiverse.com" target="_blank" rel="noopener">Thingiverse&lt;/a>: 歷史最悠久的 3D 模型網站之一。免費模型數量非常大。&lt;/li>
&lt;li>&lt;a href="https://thangs.com" target="_blank" rel="noopener">Thangs&lt;/a>: 兼具模型搜尋引擎與模型平台。可以搜尋多個模型網站的內容。有免費也有付費模型。&lt;/li>
&lt;li>&lt;a href="https://cults3d.com" target="_blank" rel="noopener">Cults3D&lt;/a>: 設計師作品較多。公仔、模型、Cosplay 道具品質高。付費模型比例較高，但也有免費下載區。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="xdg-base-directory-spec">XDG Base Directory Spec&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Category&lt;/th>
&lt;th>Environment Variable&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>FHS Approximation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Configuration&lt;/td>
&lt;td>$XDG_CONFIG_HOME&lt;/td>
&lt;td>$HOME/.config&lt;/td>
&lt;td>/etc&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Data&lt;/td>
&lt;td>$XDG_DATA_HOME&lt;/td>
&lt;td>$HOME/.local/share&lt;/td>
&lt;td>/usr/share&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>State&lt;/td>
&lt;td>$XDG_STATE_HOME&lt;/td>
&lt;td>$HOME/.local/state&lt;/td>
&lt;td>/var/lib&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cache&lt;/td>
&lt;td>$XDG_CACHE_HOME&lt;/td>
&lt;td>$HOME/.cache&lt;/td>
&lt;td>/var/cache&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">package&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;os&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;log&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;path/filepath&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">getConfigDir&lt;/span>() (&lt;span style="color:#66d9ef">string&lt;/span>, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">configDir&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">os&lt;/span>.&lt;span style="color:#a6e22e">Getenv&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;XDG_CONFIG_HOME&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// If the value of the environment variable is unset, empty, or not an absolute path, use the default&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">configDir&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#f92672">||&lt;/span> &lt;span style="color:#a6e22e">configDir&lt;/span>[&lt;span style="color:#ae81ff">0&lt;/span>:&lt;span style="color:#ae81ff">1&lt;/span>] &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;/&amp;#34;&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">homeDir&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">os&lt;/span>.&lt;span style="color:#a6e22e">UserHomeDir&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">filepath&lt;/span>.&lt;span style="color:#a6e22e">Join&lt;/span>(&lt;span style="color:#a6e22e">homeDir&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;.config&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;my-application-name&amp;#34;&lt;/span>), &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// The value of the environment variable is valid; use it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">filepath&lt;/span>.&lt;span style="color:#a6e22e">Join&lt;/span>(&lt;span style="color:#a6e22e">configDir&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;my-application-name&amp;#34;&lt;/span>), &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">config_dir&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">getConfigDir&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> panic(&lt;span style="color:#a6e22e">err&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#a6e22e">config_dir&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="whichllm">whichllm&lt;/h2>
&lt;p>&lt;code>uvx whichllm@latest&lt;/code>&lt;/p></description></item><item><title>Articles</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260513-articles/</link><pubDate>Wed, 13 May 2026 11:15:33 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260513-articles/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://github.com/itgoyo/TelegramChannels" target="_blank" rel="noopener">TelegramChannels&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/warp-tech/warpgate" target="_blank" rel="noopener">warpgate: is a smart &amp;amp; fully transparent SSH, HTTPS, Kubernetes, MySQL, PostgreSQL bastion host that doesn&amp;rsquo;t require a client app or an SSH wrapper.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jakub.kr/writing/details-that-make-interfaces-feel-better" target="_blank" rel="noopener">Details that make interfaces feel better: &lt;code>npx skills add jakubkrehel/make-interfaces-feel-better&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/TheStageAI/TheWhisper" target="_blank" rel="noopener">TheWhisper: High-Performance Speech-to-Text&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/nexu-io/open-design" target="_blank" rel="noopener">Open Design: The open-source alternative to Claude Design. Local-first, web-deployable, BYOK at every layer — 16 coding-agent CLIs auto-detected on your PATH (Claude Code, Codex, Devin for Terminal, Cursor Agent, Gemini CLI, OpenCode, Qwen, Qoder CLI, GitHub Copilot CLI, Hermes, Kimi, Pi, Kiro, Kilo, Mistral Vibe, DeepSeek TUI) become the design engine, driven by 31 composable Skills and 72 brand-grade Design Systems. No CLI? An OpenAI-compatible BYOK proxy is the same loop minus the spawn.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/ultraworkers/claw-code" target="_blank" rel="noopener">Claw Code is the public Rust implementation of the claw CLI agent harness. The canonical implementation lives in rust/, and the current source of truth for this repository is ultraworkers/claw-code.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/LING71671/Open-ClaudeCode" target="_blank" rel="noopener">Open-ClaudeCode: 完整开源的 Claude Code 项目 - 基于 Anthropic 官方源码重建&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/claude-code-best/claude-code" target="_blank" rel="noopener">Claude Code Best V5 (CCB): 牢 A (Anthropic) 官方 Claude Code CLI 工具的源码反编译/逆向还原项目。目标是将 Claude Code 大部分功能及工程化能力复现 (问就是老佛爷已经付过钱了)。虽然很难绷, 但是它叫做 CCB(踩踩背)&amp;hellip; 而且, 我们实现了企业版或者需要登陆 Claude 账号才能使用的特性, 实现技术普惠&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/aattaran/deepclaude" target="_blank" rel="noopener">deepclaude: Use Claude Code&amp;rsquo;s autonomous agent loop with DeepSeek V4 Pro, OpenRouter, or any Anthropic-compatible backend. Same UX, 17x cheaper.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/pyinfra-dev/pyinfra" target="_blank" rel="noopener">pyinfra turns Python code into shell commands and runs them on your servers. Execute ad-hoc commands and write declarative operations. Target SSH servers, local machine and Docker containers. Fast and scales from one server to thousands. Think ansible but Python instead of YAML, and a lot faster.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/jdx/mise" target="_blank" rel="noopener">mise: Dev tools, env vars, and tasks in one CLI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/endevco/aube" target="_blank" rel="noopener">Aube installs automatically when you run a script. The tightest security defaults of any Node.js package manager - and the only one with a lifecycle-script jail. Drops into existing projects using existing lockfiles.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/V4bel/dirtyfrag" target="_blank" rel="noopener">Dirty Frag: Universal Linux LPE&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://sinceyouarrived.world/taken" target="_blank" rel="noopener">taken. You opened this page. It already knows the following.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://internetarchive.ch/" target="_blank" rel="noopener">internetarchive.ch&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.kronis.dev/blog/apple-is-increasing-my-cortisol-levels" target="_blank" rel="noopener">Apple is increasing my cortisol levels&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/dwarvesf/hidden" target="_blank" rel="noopener">Hidden Bar lets you hide menu bar items to give your Mac a cleaner look.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/stonerl/Thaw" target="_blank" rel="noopener">Thaw is a powerful menu bar management tool for macOS 26. While its primary function is hiding and showing menu bar items, it aims to cover a wide variety of additional features to make it one of the most versatile menu bar tools available.&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="dirty-frag">Dirty Frag&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git clone https://github.com/V4bel/dirtyfrag.git &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> cd dirtyfrag &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> gcc -O0 -Wall -o exp exp.c -lutil &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> ./exp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Articles</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260430-articles/</link><pubDate>Thu, 30 Apr 2026 11:46:57 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260430-articles/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://github.com/garrytan/gstack" target="_blank" rel="noopener">gstack: Use Garry Tan&amp;rsquo;s exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/tw93/waza" target="_blank" rel="noopener">Waza: Engineering habits you already know, turned into skills Claude can run.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/docmd-io/docmd" target="_blank" rel="noopener">docmd: Build production-ready documentation from Markdown in seconds.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/hexiecs/talk-normal" target="_blank" rel="noopener">talk-normal: Make any LLM talk like a normal person. A system prompt that removes AI slop.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.iqiipi.com/the-quiet-colossus.html" target="_blank" rel="noopener">The Quiet Colossus&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/smol-machines/smolvm" target="_blank" rel="noopener">smolvm: Tool to build &amp;amp; run portable, lightweight, self-contained virtual machines.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.calif.io/p/mad-bugs-even-cat-readmetxt-is-not" target="_blank" rel="noopener">MAD Bugs: &amp;ldquo;cat readme.txt&amp;rdquo; is not safe in iTerm2&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aistupidlevel.info/" target="_blank" rel="noopener">https://aistupidlevel.info/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://markdown.new/" target="_blank" rel="noopener">https://markdown.new/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/JuliusBrussee/caveman" target="_blank" rel="noopener">caveman: Claude Code skill that cuts 65% of tokens by talking like caveman&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/shivampkumar/trellis-mac" target="_blank" rel="noopener">trellis-mac: This is a port of Microsoft&amp;rsquo;s TRELLIS.2 — a state-of-the-art image-to-3D model — from CUDA-only to Apple Silicon via PyTorch MPS. No NVIDIA GPU required.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://opensource.posit.co/blog/2026-04-20_ggsql_alpha_release/" target="_blank" rel="noopener">ggsql: A grammar of graphics for SQL&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://lawsofsoftwareengineering.com/" target="_blank" rel="noopener">https://lawsofsoftwareengineering.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://vidstudio.app/video-editor" target="_blank" rel="noopener">VidStudio: a browser based video editor that doesn&amp;rsquo;t upload your files&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/calcom/cal.diy" target="_blank" rel="noopener">cal.diy: Scheduling infrastructure for absolutely everyone.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/microsoft/RustTraining" target="_blank" rel="noopener">RustTraining&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/duncaen/opendoas" target="_blank" rel="noopener">opendoas: A portable fork of the OpenBSD &lt;code>doas&lt;/code> command, is a minimal replacement for the venerable &lt;code>sudo&lt;/code>.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/codeforreal1/compressO" target="_blank" rel="noopener">compressO: Convert any video/image into a tiny size. 100% free &amp;amp; open-source. Available for Mac, Windows &amp;amp; Linux.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/tw93/kami" target="_blank" rel="noopener">kami: Part of a trilogy: Kaku (書く) writes code, Waza (技) drills habits, Kami (紙) delivers documents.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/bergside/design-md-chrome" target="_blank" rel="noopener">design-md-chrome: Chrome extension to extract styles from any website and generate DESIGN.md files and design skills for AI based on TypeUI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.a-nan53.tw/product/enter-adult-baseball-cowhide-glove/" target="_blank" rel="noopener">佐enter 成人碎牛皮手套&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/localsend/localsend" target="_blank" rel="noopener">localsend: An open-source cross-platform alternative to AirDrop&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://gtfobins.org" target="_blank" rel="noopener">GTFOBins is a curated list of Unix-like executables that can be used to bypass local security restrictions in misconfigured systems.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/warpdotdev/warp" target="_blank" rel="noopener">Warp is an agentic development environment, born out of the terminal.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/corbindavenport/just-the-browser" target="_blank" rel="noopener">Just the Browser: Remove AI features, telemetry data reporting, sponsored content, product integrations, and other annoyances from web browsers.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://copy.fail/" target="_blank" rel="noopener">Copy Fail: CVE-2026-31431&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="mad-bugs-cat-readmetxt-is-not-safe-in-iterm2">MAD Bugs: &amp;ldquo;cat readme.txt&amp;rdquo; is not safe in iTerm2&lt;/h2>
&lt;h3 id="the-core-bug">The core bug&lt;/h3>
&lt;p>The bug is a trust failure. iTerm2 accepts the SSH conductor protocol from terminal output that is not actually coming from a trusted, real conductor session. In other words, untrusted terminal output can impersonate the remote conductor.&lt;/p></description></item><item><title>Articles</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260415-articles/</link><pubDate>Wed, 15 Apr 2026 09:22:42 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260415-articles/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://ganhua.wang/singleflight" target="_blank" rel="noopener">SingleFlight&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://catcoding.me/p/apple-gatekeeper-scan/" target="_blank" rel="noopener">macOS 奇怪的安全扫码机制&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/xindoo/agentic-design-patterns" target="_blank" rel="noopener">Agentic Design Patterns&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://tw93.fun/2026-03-12/claude.html" target="_blank" rel="noopener">你不知道的 Claude Code：架构、治理与工程实践&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://tw93.fun/2026-03-21/agent.html" target="_blank" rel="noopener">你不知道的 Agent：原理、架构与工程实践&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/rtk-ai/rtk" target="_blank" rel="noopener">rtk: CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Wilfred/difftastic" target="_blank" rel="noopener">difftastic: a structural diff that understands syntax&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.anisafifi.com/en/blog/i-ditched-elasticsearch-for-meilisearch-heres-what-nobody-tells-you/" target="_blank" rel="noopener">I Ditched Elasticsearch for Meilisearch. Here&amp;rsquo;s What Nobody Tells You.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://taiwan.md/" target="_blank" rel="noopener">策展島嶼的深度敘事&lt;/a>: &lt;a href="https://github.com/frank890417/taiwan-md" target="_blank" rel="noopener">https://github.com/frank890417/taiwan-md&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://colobu.com/2025/11/01/Linux%20%E4%B8%AD%E7%BD%91%E7%BB%9C%E5%8C%85%E7%9A%84%E4%B8%80%E7%94%9F/index/" target="_blank" rel="noopener">Linux 中网络包的一生&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/coderamp-labs/gitingest" target="_blank" rel="noopener">Gitingest: Turn any Git repository into a prompt-friendly text ingest for LLMs.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.ilograph.com/blog/posts/more-common-diagram-mistakes/" target="_blank" rel="noopener">7 More Common Mistakes in Architecture Diagrams&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://claude.com/resources/use-cases" target="_blank" rel="noopener">Use Cases&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/obra/superpowers" target="_blank" rel="noopener">Superpowers&lt;/a>: Superpowers is a complete software development workflow for your coding agents, built on top of a set of composable &amp;ldquo;skills&amp;rdquo; and some initial instructions that make sure your agent uses them.&lt;/li>
&lt;li>&lt;a href="https://github.com/affaan-m/everything-claude-code" target="_blank" rel="noopener">everything-claude-code&lt;/a>: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.&lt;/li>
&lt;li>&lt;a href="https://github.com/msitarzewski/agency-agents" target="_blank" rel="noopener">Agency Agents&lt;/a>: A complete AI agency at your fingertips - From frontend wizards to Reddit community ninjas, from whimsy injectors to reality checkers. Each agent is a specialized expert with personality, processes, and proven deliverables.&lt;/li>
&lt;li>&lt;a href="https://github.com/666ghj/MiroFish" target="_blank" rel="noopener">MiroFish: A Simple and Universal Swarm Intelligence Engine, Predicting Anything.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/lightpanda-io/browser" target="_blank" rel="noopener">Lightpanda Browser: the headless browser designed for AI and automation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.dailydoseofds.com/p/anatomy-of-the-claude-folder" target="_blank" rel="noopener">Anatomy of the .claude/ Folder&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/J-x-Z/cocoa-way" target="_blank" rel="noopener">Cocoa-Way: Native macOS Wayland Compositor written in Rust using Smithay. Experience seamless Linux app streaming on macOS without XQuartz.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/chenglou/pretext" target="_blank" rel="noopener">Pretext: Fast, accurate &amp;amp; comprehensive text measurement &amp;amp; layout&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.mgrunwald.com/ghostmoon/" target="_blank" rel="noopener">Ghostmoon.app: A Swiss Army Knife for your macOS menu bar&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.codingfont.com/" target="_blank" rel="noopener">CodingFont: A game to help you pick a coding font&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://piechowski.io/post/git-commands-before-reading-code/" target="_blank" rel="noopener">The Git Commands I Run Before Reading Any Code&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/memstechtips/Winhance" target="_blank" rel="noopener">Winhance: Application designed to optimize, customize and enhance your Windows experience.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://arhan.sh/blog/native-instant-space-switching-on-macos/" target="_blank" rel="noopener">Native Instant Space Switching on MacOS&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Fluid-CAD/FluidCAD" target="_blank" rel="noopener">FluidCAD: Write CAD models in JavaScript. See the result in real time.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/VoltAgent/awesome-design-md" target="_blank" rel="noopener">Awesome DESIGN.md: Copy a DESIGN.md into your project, tell your AI agent &amp;ldquo;build me a page that looks like this&amp;rdquo; and get pixel-perfect UI that actually matches.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/safishamsi/graphify" target="_blank" rel="noopener">graphify&lt;/a>: AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot CLI, OpenClaw, Factory Droid, Trae, Google Antigravity). Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="singleflight">SingleFlight&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">package&lt;/span> &lt;span style="color:#a6e22e">analyzer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;context&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;sync&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;golang.org/x/sync/singleflight&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;github.com/nathan/stock_bot/internal/storage&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">type&lt;/span> &lt;span style="color:#a6e22e">AnalysisService&lt;/span> &lt;span style="color:#66d9ef">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">genai&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">GenAIClient&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">d1Client&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">storage&lt;/span>.&lt;span style="color:#a6e22e">D1Client&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">stockCache&lt;/span> &lt;span style="color:#66d9ef">map&lt;/span>[&lt;span style="color:#66d9ef">string&lt;/span>]&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">mu&lt;/span> &lt;span style="color:#a6e22e">sync&lt;/span>.&lt;span style="color:#a6e22e">RWMutex&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">sf&lt;/span> &lt;span style="color:#a6e22e">singleflight&lt;/span>.&lt;span style="color:#a6e22e">Group&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> (&lt;span style="color:#a6e22e">s&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">AnalysisService&lt;/span>) &lt;span style="color:#a6e22e">analyzeStock&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span> &lt;span style="color:#a6e22e">context&lt;/span>.&lt;span style="color:#a6e22e">Context&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span>, &lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>) (&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 1. 第一層防護：檢查記憶體快取 (L1 Cache)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">mu&lt;/span>.&lt;span style="color:#a6e22e">RLock&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">result&lt;/span>, &lt;span style="color:#a6e22e">ok&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">stockCache&lt;/span>[&lt;span style="color:#a6e22e">code&lt;/span>]; &lt;span style="color:#a6e22e">ok&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">mu&lt;/span>.&lt;span style="color:#a6e22e">RUnlock&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">result&lt;/span>, &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">mu&lt;/span>.&lt;span style="color:#a6e22e">RUnlock&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 2. 第二層防護：Singleflight (請求合併)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">key&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;stock:&amp;#34;&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#a6e22e">code&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">v&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>, &lt;span style="color:#a6e22e">_&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">sf&lt;/span>.&lt;span style="color:#a6e22e">Do&lt;/span>(&lt;span style="color:#a6e22e">key&lt;/span>, &lt;span style="color:#66d9ef">func&lt;/span>() (&lt;span style="color:#66d9ef">interface&lt;/span>{}, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 3. 執行昂貴的邏輯 (DB + Gemini API)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">result&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">doAnalyzeStock&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span>, &lt;span style="color:#a6e22e">name&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 4. 寫入快取 (務必在 singleflight 內部完成，防止下一波瞬間擊穿)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">mu&lt;/span>.&lt;span style="color:#a6e22e">Lock&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">stockCache&lt;/span>[&lt;span style="color:#a6e22e">code&lt;/span>] = &lt;span style="color:#a6e22e">result&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">mu&lt;/span>.&lt;span style="color:#a6e22e">Unlock&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">result&lt;/span>, &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">v&lt;/span>.(&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>), &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> (&lt;span style="color:#a6e22e">s&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">AnalysisService&lt;/span>) &lt;span style="color:#a6e22e">doAnalyzeStock&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span> &lt;span style="color:#a6e22e">context&lt;/span>.&lt;span style="color:#a6e22e">Context&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span>, &lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>) (&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 建立一個子 Context 用於內部的多個非同步任務&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">g&lt;/span>, &lt;span style="color:#a6e22e">ctx&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">errgroup&lt;/span>.&lt;span style="color:#a6e22e">WithContext&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">dbData&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">aiResult&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 任務 1：查資料庫&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">g&lt;/span>.&lt;span style="color:#a6e22e">Go&lt;/span>(&lt;span style="color:#66d9ef">func&lt;/span>() &lt;span style="color:#66d9ef">error&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 隨時檢查 Context 是否已取消&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">select&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#f92672">&amp;lt;-&lt;/span>&lt;span style="color:#a6e22e">ctx&lt;/span>.&lt;span style="color:#a6e22e">Done&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">ctx&lt;/span>.&lt;span style="color:#a6e22e">Err&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 模擬資料庫查詢&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">dbData&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Historical Data&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 任務 2：呼叫 Gemini API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">g&lt;/span>.&lt;span style="color:#a6e22e">Go&lt;/span>(&lt;span style="color:#66d9ef">func&lt;/span>() &lt;span style="color:#66d9ef">error&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 將 ctx 傳入 API 客戶端，讓它能跟隨整體的超時控制&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">res&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">genai&lt;/span>.&lt;span style="color:#a6e22e">Generate&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Analyze this: &amp;#34;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#a6e22e">code&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">aiResult&lt;/span> = &lt;span style="color:#a6e22e">res&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 等待所有任務完成或其中一個出錯&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">g&lt;/span>.&lt;span style="color:#a6e22e">Wait&lt;/span>(); &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>{&lt;span style="color:#a6e22e">Data&lt;/span>: &lt;span style="color:#a6e22e">dbData&lt;/span>, &lt;span style="color:#a6e22e">Analysis&lt;/span>: &lt;span style="color:#a6e22e">aiResult&lt;/span>}, &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> (&lt;span style="color:#a6e22e">s&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">AnalysisService&lt;/span>) &lt;span style="color:#a6e22e">analyzeStockWithMetrics&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span> &lt;span style="color:#a6e22e">context&lt;/span>.&lt;span style="color:#a6e22e">Context&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>) (&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">key&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;stock:&amp;#34;&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#a6e22e">code&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">v&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>, &lt;span style="color:#a6e22e">shared&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">sf&lt;/span>.&lt;span style="color:#a6e22e">Do&lt;/span>(&lt;span style="color:#a6e22e">key&lt;/span>, &lt;span style="color:#66d9ef">func&lt;/span>() (&lt;span style="color:#66d9ef">interface&lt;/span>{}, &lt;span style="color:#66d9ef">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">doAnalyzeStock&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Name&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 紀錄監控指標：分辨是「原始呼叫」還是「共享結果」&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">status&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;original&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">shared&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">status&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;shared&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">s&lt;/span>.&lt;span style="color:#a6e22e">sfCounter&lt;/span>.&lt;span style="color:#a6e22e">Add&lt;/span>(&lt;span style="color:#a6e22e">ctx&lt;/span>, &lt;span style="color:#ae81ff">1&lt;/span>, &lt;span style="color:#a6e22e">metric&lt;/span>.&lt;span style="color:#a6e22e">WithAttributes&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">attribute&lt;/span>.&lt;span style="color:#a6e22e">String&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;stock_code&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">code&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">attribute&lt;/span>.&lt;span style="color:#a6e22e">String&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;type&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">status&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">err&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">v&lt;/span>.(&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">StockAnalysisResult&lt;/span>), &lt;span style="color:#66d9ef">nil&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="macos-奇怪的安全扫码机制">macOS 奇怪的安全扫码机制&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看最近的 syspolicyd 扫描记录&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>log show --predicate &lt;span style="color:#e6db74">&amp;#39;subsystem == &amp;#34;com.apple.syspolicy.exec&amp;#34;&amp;#39;&lt;/span> --last 5m --style compact | grep performScan
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>System Settings → Privacy &amp;amp; Security → Full Disk Access，给 VS Code 完全磁盘访问权限有效&lt;/code>&lt;/p></description></item><item><title>Tools</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260315-tools/</link><pubDate>Sun, 15 Mar 2026 17:52:24 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260315-tools/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://github.com/sheeki03/tirith" target="_blank" rel="noopener">tirith&lt;/a>: Tirith guards the gate and intercepts suspicious URLs, ANSI injection, and pipe-to-shell attacks before they execute.&lt;/li>
&lt;li>&lt;a href="https://github.com/subtrace/subtrace" target="_blank" rel="noopener">subtrace&lt;/a>: Inspect HTTP requests in any server with just a single command.&lt;/li>
&lt;li>&lt;a href="https://github.com/j178/prek" target="_blank" rel="noopener">prek&lt;/a>: ⚡ Better &lt;code>pre-commit&lt;/code>, re-engineered in Rust&lt;/li>
&lt;li>&lt;a href="https://igorstechnoclub.com/sandbox-exec/" target="_blank" rel="noopener">sandbox-exec&lt;/a>: macOS&amp;rsquo;s Little-Known Command-Line Sandboxing Tool&lt;/li>
&lt;li>&lt;a href="https://github.com/vignesh07/babyshark" target="_blank" rel="noopener">babyshark&lt;/a>: Flows-first PCAP TUI (case files, gorgeous UX).&lt;/li>
&lt;li>&lt;a href="https://github.com/AlexsJones/llmfit" target="_blank" rel="noopener">llmfit&lt;/a>: A terminal tool that right-sizes LLM models to your system&amp;rsquo;s RAM, CPU, and GPU. Detects your hardware, scores each model across quality, speed, fit, and context dimensions, and tells you which ones will actually run well on your machine.&lt;/li>
&lt;/ul>
&lt;h2 id="sandbox-execdeprecated">sandbox-exec(Deprecated)&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>sandbox-exec -f profile.sb command_to_run&lt;/code>&lt;/p></description></item><item><title>Links</title><link>https://linzeyan.github.io/zh-tw/posts/2026/20260314-links/</link><pubDate>Sat, 14 Mar 2026 07:07:03 +0800</pubDate><guid>https://linzeyan.github.io/zh-tw/posts/2026/20260314-links/</guid><description>&lt;ul>
&lt;li>&lt;a href="https://anystorage.dev" target="_blank" rel="noopener">AnyStorage&lt;/a>: AnyStorage brings S3, R2, Backblaze B2, MinIO, and other compatible services into a single desktop workspace with a cleaner rhythm than cloud dashboards.&lt;/li>
&lt;li>&lt;a href="https://brianhsu.dev/referhero/" target="_blank" rel="noopener">歹晚郎內推互助網絡&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://grid.space/stem/" target="_blank" rel="noopener">Grid&lt;/a>: Free, Privacy-First Digital Fabrication Tools for STEM Learning&lt;/li>
&lt;li>&lt;a href="https://audioconvert.ai/british-accent-generator" target="_blank" rel="noopener">Free British Accent Generator&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/rtvkiz/minimal" target="_blank" rel="noopener">minimal&lt;/a>: Minimal CVE Hardened container image collection&lt;/li>
&lt;li>&lt;a href="https://hub.docker.com/hardened-images/catalog" target="_blank" rel="noopener">Docker Hardened Images&lt;/a>: secure, minimal, production-ready images.&lt;/li>
&lt;li>&lt;a href="https://github.com/r-wasm/webr" target="_blank" rel="noopener">webr&lt;/a>: The statistical language R compiled to WebAssembly via Emscripten, for use in web browsers and Node.&lt;/li>
&lt;li>&lt;a href="https://www.canirun.ai/" target="_blank" rel="noopener">Can I Run AI locally?&lt;/a>: Find out which AI models your machine can actually run.&lt;/li>
&lt;li>&lt;a href="https://github.com/saschb2b/cant-maintain" target="_blank" rel="noopener">Can&amp;rsquo;t Maintain&lt;/a>: A &amp;ldquo;Can&amp;rsquo;t Unsee&amp;rdquo;-style training game that teaches junior React/TypeScript developers proper prop naming conventions and JSDoc documentation.&lt;/li>
&lt;li>&lt;a href="https://github.com/MedUnes/go-kata" target="_blank" rel="noopener">Go Katas&lt;/a>: A collection of daily coding challenges designed to help you master idiomatic Go through deliberate, repetitive practice.&lt;/li>
&lt;li>&lt;a href="https://pagedout.institute/" target="_blank" rel="noopener">Paged Out!&lt;/a>: a free experimental (one article == one page) technical magazine about programming (especially programming tricks!), hacking, security hacking, retro computers, modern computers, electronics, demoscene, and other similar topics.&lt;/li>
&lt;li>&lt;a href="https://open-meteo.com/" target="_blank" rel="noopener">Free Weather API&lt;/a>: Open-Meteo is an open-source weather API and offers free access for non-commercial use. No API key required.&lt;/li>
&lt;/ul></description></item></channel></rss>