<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>文章 | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《Express全新面貌》</title><link>https://channel.meo-ai.com/posts/638</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/638</guid><pubDate>Fri, 22 May 2026 10:19:28 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Express全新面貌》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%90%8E%E7%AB%AF&quot; title=&quot;#后端&quot;&gt;#后端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NodeJS&quot; title=&quot;#NodeJS&quot;&gt;#NodeJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ExpressJS&quot; title=&quot;#ExpressJS&quot;&gt;#ExpressJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%A1%86%E6%9E%B6&quot; title=&quot;#Web框架&quot;&gt;#Web框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E6%A1%A3%E9%87%8D%E6%9E%84&quot; title=&quot;#文档重构&quot;&gt;#文档重构&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA&quot; title=&quot;#开源社区&quot;&gt;#开源社区&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Express官方博客宣布完成网站全面重构与品牌焕新，涵盖Astro技术栈迁移、AI智能搜索、版本化文档及全新Logo设计，标志着这个Node.js生态老牌框架在2024年重启后进入新阶段。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 网站底层从Jekyll迁移到Astro，带来更灵活的组件模型、国际化支持和内容页性能提升，文档生成与维护方式也一并升级&lt;br /&gt;2. 文档新增多版本并行浏览，Express 4和5的文档可以独立查看，告别版本混淆的烦恼&lt;br /&gt;3. 搜索接入了Orama的AI能力，支持自然语言提问，找API和概念更快更准&lt;br /&gt;4. 全站文档开放了&lt;code&gt;llms.txt&lt;/code&gt;端点，方便大模型和AI助手直接读取最新文档&lt;br /&gt;5. 接下来的重点是补齐内容缺口、完善多语言翻译，并让文档和新版本同步发布&lt;br /&gt;6. 新Logo由社区公开协作设计，品牌定位为&quot;Established·Dependable·Approachable&quot;，延续极简风格的同时开启新篇章&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot;&gt;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Express.js&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;A New Look for Express · Express.js&quot; src=&quot;/static/https://cdn4.telesco.pe/file/wA2caV0UkMmeoh17rgLVtNzvyWKWs1ADySiANFvKMtX7ZjtizXJfc3N3ubErisnP0Q7WJz8Ojg4VA9KkMr3kmZ61N2zKVCDsvF5LaiWlEwtjgrLyeVFUCsR5Qmwy8GKgotri1m0XfksU5n6u1Z5suVQpqRG4JjJxq23hcAagl8KjogAisdPdu2Z4izIU2tQ14SI-CgxZrG3WSB9llO4cdZZpYqjj61QO_SsR9wVK0ZxYTRGhOeLE5spJXn6UntHL1oELl91xEUzTV7GXqlXV3wS3H_lEekLvx0-8ytmOSDfvhCNEPMHus2Bzz1_Jan-Pu8A8IcxBXvlxFXhVfJuiTQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;A New Look for Express · Express.js&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Mirage：AI Agent的统一虚拟文件系统》</title><link>https://channel.meo-ai.com/posts/629</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/629</guid><pubDate>Fri, 08 May 2026 23:24:01 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Mirage：AI Agent的统一虚拟文件系统》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23AI_Tools&quot; title=&quot;#AI_Tools&quot;&gt;#AI_Tools&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI_Agent&quot; title=&quot;#AI_Agent&quot;&gt;#AI_Agent&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&quot; title=&quot;#文件系统&quot;&gt;#文件系统&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Python&quot; title=&quot;#Python&quot;&gt;#Python&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23SDK&quot; title=&quot;#SDK&quot;&gt;#SDK&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23S3&quot; title=&quot;#S3&quot;&gt;#S3&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Slack&quot; title=&quot;#Slack&quot;&gt;#Slack&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23GitHub&quot; title=&quot;#GitHub&quot;&gt;#GitHub&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Redis&quot; title=&quot;#Redis&quot;&gt;#Redis&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%BC%93%E5%AD%98&quot; title=&quot;#缓存&quot;&gt;#缓存&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23OpenAI&quot; title=&quot;#OpenAI&quot;&gt;#OpenAI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vercel_AI_SDK&quot; title=&quot;#Vercel_AI_SDK&quot;&gt;#Vercel_AI_SDK&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23LangChain&quot; title=&quot;#LangChain&quot;&gt;#LangChain&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Mirage 是一个专为 AI Agent 设计的统一虚拟文件系统，它将 S3、Google Drive、Slack、Gmail、Redis 等数十种后端服务挂载到同一棵文件树下。Agent 只需用熟悉的 Unix/bash 工具（如 grep、cat、cp）就能跨服务读写数据，无需学习 N 个 SDK 或 MCP。支持 Python/TypeScript SDK 和 CLI，可嵌入 FastAPI、Express 等应用，并内置双层缓存（索引缓存 + 文件缓存）减少网络开销，兼容 OpenAI Agents SDK、Vercel AI SDK、LangChain 等主流框架。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- 统一挂载，万物皆文件：把 S3、GDrive、Slack、GitHub、MongoDB、Redis 等后端并排挂载到同一个根目录下，Agent 看到的始终只有一棵树&lt;br /&gt;- 零学习成本：任何懂 bash 的 LLM 都能直接上手，用 &lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;cat&lt;/code&gt;、&lt;code&gt;cp&lt;/code&gt;、&lt;code&gt;wc&lt;/code&gt; 这些经典命令跨服务操作，不用记新 API&lt;br /&gt;- 双层缓存省流量：自带索引缓存（目录列表）和文件缓存（对象字节），默认用内存，也可切 Redis 共享给多进程/多机器&lt;br /&gt;- 多语言 SDK + CLI：提供 Python 和 TypeScript（Node / Browser / Core）SDK，以及轻量 CLI，可嵌入你的 FastAPI、Express 或浏览器应用&lt;br /&gt;- 主流框架即插即用：已适配 OpenAI Agents SDK、Vercel AI SDK、LangChain、Pydantic AI、CAMEL、OpenHands 等&lt;br /&gt;- 工作空间可移植：支持克隆、快照、版本化管理，Agent 运行环境能在机器间迁移而不必重新配置&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://github.com/strukto-ai/mirage&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/strukto-ai/mirage&quot;&gt;https://github.com/strukto-ai/mirage&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/strukto-ai/mirage&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;The World&apos;s First Virtual Terminal for AI Agents. Contribute to strukto-ai/mirage development by creating an account on GitHub.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - strukto-ai/mirage: The World&apos;s First Virtual Terminal for AI Agents&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;The World&apos;s First Virtual Terminal for AI Agents. Contribute to strukto-ai/mirage development by creating an account on GitHub.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《node-html-to-text：HTML转纯文本转换器》</title><link>https://channel.meo-ai.com/posts/627</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/627</guid><pubDate>Fri, 08 May 2026 02:59:05 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《node-html-to-text：HTML转纯文本转换器》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23NodeJS&quot; title=&quot;#NodeJS&quot;&gt;#NodeJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%B7%A5%E5%85%B7%E5%BA%93&quot; title=&quot;#工具库&quot;&gt;#工具库&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23HTML%E8%A7%A3%E6%9E%90&quot; title=&quot;#HTML解析&quot;&gt;#HTML解析&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E6%9C%AC%E8%BD%AC%E6%8D%A2&quot; title=&quot;#文本转换&quot;&gt;#文本转换&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%95%B0%E6%8D%AE%E6%8F%90%E5%8F%96&quot; title=&quot;#数据提取&quot;&gt;#数据提取&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%86%85%E5%AE%B9%E5%A4%84%E7%90%86&quot; title=&quot;#内容处理&quot;&gt;#内容处理&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;node-html-to-text 是一款成熟的 Node.js 库，用于将 HTML 文档解析并转换为格式优美的纯文本。它通过类 CSS 的 selectors 机制实现高度灵活的格式化控制，支持表格、链接、列表等复杂结构，并提供 &lt;code&gt;compile&lt;/code&gt; 预编译模式以优化批量处理性能。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- **核心能力**：支持行内/块级标签、表格（含跨行跨列）、链接、自动换行、Unicode 等，能把复杂 HTML 干净地转成可读文本&lt;br /&gt;- **两种使用模式**：`convert()&lt;code&gt; 适合单次转换；`compile()&lt;/code&gt; 预编译配置后批量处理，性能更优，推荐处理大量文档时使用&lt;br /&gt;- **Selectors 驱动配置**：采用类似 CSS 的 selectors 数组来匹配元素并指定格式化方式，支持标签、类名、ID、属性等组合选择，特异性高的规则优先生效&lt;br /&gt;- **丰富的自定义扩展**：可通过 &lt;code&gt;formatters&lt;/code&gt; 注册自定义格式化函数，还能传入 &lt;code&gt;metadata&lt;/code&gt; 让 formatter 访问额外上下文信息，满足特殊业务需求&lt;br /&gt;- **版本演进清晰**：v8 引入 selectors 体系，v9 支持 ESM/CJS 双模式并移除大量废弃选项，v10 要求 Node.js 20.19.0+，API 趋于稳定现代&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://github.com/html-to-text/node-html-to-text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/html-to-text/node-html-to-text&quot;&gt;https://github.com/html-to-text/node-html-to-text&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/html-to-text/node-html-to-text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Advanced html to text converter. Contribute to html-to-text/node-html-to-text development by creating an account on GitHub.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;GitHub - html-to-text/node-html-to-text: Advanced html to text converter&quot; src=&quot;/static/https://cdn4.telesco.pe/file/eLbfP41-MLTGRv32Hns1wLtU_vYiIichFyMUIlYA0YwfGHH5-HQjWH4pLvoSRS-a0Cwo7KEkdJhmGAC-DlBaXVougyCl0d_DYfyzyfafSBqUrf7vBDdHIHBi2wCy_NCA6HgnQtbzNREhJpqqXHtxpV0QVVNraVjfN1bjoqbANtMQpWQYUIDAzmnlz-LAGj8bSL1b0J7r7ZztttcH61pmiZC2ijHNri6dTBGu3hTVB3tSK04_PdpJJuxl4Idb2IVeoUNabd36ayNyou2B2iebfyXKOsu_h9jEObNH3EfBqdBxwuXA6XZUHUDrympxcmGSUjszHsl2NlG1C1iV7VR12g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - html-to-text/node-html-to-text: Advanced html to text converter&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Advanced html to text converter. Contribute to html-to-text/node-html-to-text development by creating an account on GitHub.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 本文深入解析了GitHub Copilot CLI三秒ASCII开机动画背后的复杂工程实现，揭示了终端动画在缺乏统一标准的环境下，如何通过自定义工具链、语义化颜色映射和无障碍优先设计，解决跨终端兼容性与可访问性挑战</title><link>https://channel.meo-ai.com/posts/553</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/553</guid><pubDate>Sat, 31 Jan 2026 04:28:17 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 本文深入解析了GitHub Copilot CLI三秒ASCII开机动画背后的复杂工程实现，揭示了终端动画在缺乏统一标准的环境下，如何通过自定义工具链、语义化颜色映射和无障碍优先设计，解决跨终端兼容性与可访问性挑战。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.blog/engineering/from-pixels-to-characters-the-engineering-behind-github-copilot-clis-animated-ascii-banner/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.blog/engineering/from-pixels-to-characters-the-engineering-behind-github-copilot-clis-animated-ascii-banner/&quot;&gt;https://github.blog/engineering/from-pixels-to-characters-the-engineering-behind-github-copilot-clis-animated-ascii-banner/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.blog/engineering/from-pixels-to-characters-the-engineering-behind-github-copilot-clis-animated-ascii-banner&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Learn how GitHub built an ASCII animation for the Copilot CLI using custom tooling, ANSI color roles, and advanced terminal engineering.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The GitHub Blog&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;From pixels to characters: The engineering behind GitHub Copilot CLI’s animated ASCII banner&quot; src=&quot;/static/https://cdn4.telesco.pe/file/C2CJaVHTz4FRMxLMdZQs4nSWUIoXZsetlQyjTIWZdGJfeOemORGw7Gv9CDPVmlfEFdi18sL-PV-O4Uz4AMfUoSjeX7RZmbxTQLSsOVqIwbpWlDFp3T0IF6Sdut4nwAe3Jgu-HfTNk6ph-quWMcKS4pMUA04vLNHIxeOo0OTiPtsVgdaC1epN7NZEiKL68rbFh4saht8Yk1PXg0t7cW_ZFKndZ6tPbwq9GCvOn9PvaPiFudzWQZV2c8yKbt2ULu13UAHnvy-b2F5_iKzysYYxuAEdWBS3LczkYcQZ6cHgSknBAV2owItUCFCU_yAjiIxql16UYHagsxNDBy6-6lfrJQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;From pixels to characters: The engineering behind GitHub Copilot CLI’s animated ASCII banner&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Learn how GitHub built an ASCII animation for the Copilot CLI using custom tooling, ANSI color roles, and advanced terminal engineering.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章  2026 年，Favicon 最佳实践的文章</title><link>https://channel.meo-ai.com/posts/550</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/550</guid><pubDate>Wed, 28 Jan 2026 06:32:00 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt;  2026 年，Favicon 最佳实践的文章。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs&quot;&gt;https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Prefer SVG over PNG, trust browsers to downscale, drop obscure formats—the ultimate, exhaustive guide to favicons for modern web. Includes steps for static HTML and Webpack.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;evilmartians.com&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;How to Favicon in 2026: Three files that fit most needs—Martian Chronicles, Evil Martians’ team blog&quot; src=&quot;/static/https://cdn4.telesco.pe/file/CHXtybOJ5ro3UUu5uupzwhPUxpd8Ci4vIDmAq9GQtzQ0nwFMbfdjLMNOKWqNGNI1cGeEPj4wMaF6dlOwD-T1l7KXFMuupbQhMnxdOA_VS4UtYuGe3JG30vE4wg_aP4ZecB5kpXr_ccyYSiyeZz2ib7M4u6xkK60K2_1Miacaa3UiXElulkmJNbpW1Hpmkk4o3cb6IGyB-4pfkNLCV3Q6dWWbUCg2SF4AAuzLK1LXbZdSZOhavmYcc7B-tTLtkoneqCDcrdv1yvFXcMJSUWgg6x_k-_mndKhPk7H03OuDmx5uHsqDCe-EMq4xq5ZN87N5m1i3QrtPJn4ZWoU1ELFZtw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;How to Favicon in 2026: Three files that fit most needs—Martian Chronicles, Evil Martians’ team blog&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Prefer SVG over PNG, trust browsers to downscale, drop obscure formats—the ultimate, exhaustive guide to favicons for modern web. Includes steps for static HTML and Webpack.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 有开发者大胆预测，微软迟早会放弃 Windows，转战“Windows 外壳的 Linux”</title><link>https://channel.meo-ai.com/posts/547</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/547</guid><pubDate>Wed, 21 Jan 2026 10:19:00 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 有开发者大胆预测，微软迟早会放弃 Windows，转战“Windows 外壳的 Linux”。大胆，确实挺有想象空间。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://gamesbymason.com/blog/2026/microsoft/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://gamesbymason.com/blog/2026/microsoft/&quot;&gt;https://gamesbymason.com/blog/2026/microsoft/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://gamesbymason.com/blog/2026/microsoft&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;When you think Microsoft you probably don&apos;t think sense of humor. And yet, I&apos;m convinced that Microsoft is going to do a very specific *very* funny thing within our lifetimes.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/g3ENf0efC6ApH02jgV34x5_Q4wpXlKIH7CHXr-L5RtLZGku_-PYT7URrwG35mq-gbOOFrhDyT22-mv72Y5KYbpMuxjGuvEF-Nj2z91viOJH47ru_0z4N5UYGf-VcL5Np8xoSlc3Dj6j4fxOj9QzwiOESXhjBCfzQV-Y5pf-HPR5FDK_Pu4exjMgh2-IJx16T0vp8oAqSg3CoeOkoXZKBDjEIvNfDTpjmuXUKJYeym3iLEV5XxCRL8hMLrmCnPezh0AaO0G_W0S_ctEdTofdYl7COswxvA6GcN4wmtvu3fhR-ft2AhSrwWyl86VFEnwwIPcN-PoIayIoUP0R8hE-CtQ.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Games by Mason&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;&lt;i class=&quot;emoji&quot; style=&quot;background-image:url(&apos;//telegram.org/img/emoji/40/F09FAA9F.png&apos;)&quot;&gt;&lt;b&gt;🪟&lt;/b&gt;&lt;/i&gt; Prediction: Microsoft Is Going To Do The Funniest Thing Imaginable | Games by Mason&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;When you think Microsoft you probably don&apos;t think sense of humor. And yet, I&apos;m convinced that Microsoft is going to do a very specific *very* funny thing within our lifetimes.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 ASCII 字符不是像素：深入解读 ASCII 渲染 </title><link>https://channel.meo-ai.com/posts/544</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/544</guid><pubDate>Wed, 21 Jan 2026 08:24:45 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; ASCII 字符不是像素：深入解读 ASCII 渲染 &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://alexharri.com/blog/ascii-rendering&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://alexharri.com/blog/ascii-rendering&quot;&gt;https://alexharri.com/blog/ascii-rendering&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://alexharri.com/blog/ascii-rendering&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A look at how I used shape vectors to achieve sharp, high-quality ASCII rendering.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/KwKUL6GS2zeQfjQBlu6GrSvfD0i_oFg4TcV9I2nRn6ViriubIt6n5pTbdxPDjq6KzY6OCmOxWJE-_Zw8YxRUJnqhO9eW9r3Nql1m4rg0zBwXRnn5ziewV_LOWo44oMzC7x7z57BeOqlAIKaGIkz4hZtGBiLEFRH8FLTzcxKu7IGxCUetbYy-b0jvshuTje-Hl35q7lYBDwQSJTKW7CgxJrQmESwAolzIZ6Jpl-aGPkkgidi7SuTe_EOdhYfDEKL8082-hPDk6lVg9NWpMAGq2O1aGdbNxJ0yJ2D9IiCu0y_rFb5i1XGrqCzXCqkdnvPISEzuojagBzSslEQZB41CTA.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Alexharri&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;ASCII characters are not pixels: a deep dive into ASCII rendering&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A look at how I used shape vectors to achieve sharp, high-quality ASCII rendering.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 这是一条关于 tanstack start 中间件的文章</title><link>https://channel.meo-ai.com/posts/511</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/511</guid><pubDate>Wed, 12 Nov 2025 14:10:44 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 这是一条关于 tanstack start 中间件的文章。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://frontendmasters.com/blog/introducing-tanstack-start-middleware/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/introducing-tanstack-start-middleware/&quot;&gt;https://frontendmasters.com/blog/introducing-tanstack-start-middleware/&lt;/a&gt;</content:encoded></item><item><title>#文章 利用 ES2022 的 Error.cause 在构造函数中保留原始错误：`new Error(msg, { cause: err })`</title><link>https://channel.meo-ai.com/posts/509</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/509</guid><pubDate>Wed, 12 Nov 2025 08:47:36 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 利用 ES2022 的 &lt;code&gt;Error.cause&lt;/code&gt; 在构造函数中保留原始错误：`new Error(msg, { cause: err })`。&lt;br /&gt;  - 错误链非枚举，不污染日志；可逐层访问 `err.cause` 获取完整堆栈与类型。&lt;br /&gt;  - 自定义错误类只需 &lt;code&gt;super(message, { cause })&lt;/code&gt; 即可自动继承该能力；TypeScript 需 `target/lib ≥ es2022`。&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;使用场景&lt;/b&gt;&lt;br /&gt;  - 多层架构（服务→服务、包装函数、微调用）中，顶层抛出的同时需要追踪根因。&lt;br /&gt;  - 数据库/网络异常被重新包装为业务错误（如 &lt;code&gt;ConnectionTimeoutError&lt;/code&gt; → &lt;code&gt;DatabaseError&lt;/code&gt; → `ServiceUnavailableError`）。&lt;br /&gt;  - 单元测试断言：`expect(err.cause).toBeInstanceOf(原始错误类)`。&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;最佳实践&lt;/b&gt;&lt;br /&gt;  - 只在关键上下文加链，避免过度包装导致调试噪音。&lt;br /&gt;  - 手动记录：`console.error(err)&lt;code&gt; 后紧跟 `console.error(&apos;Caused by:&apos;, err.cause)`；使用递归辅助函数 `logErrorChain/logFullErrorChain&lt;/code&gt; 打印完整链。&lt;br /&gt;  - 保持错误类型清晰，自定义类命名语义化，方便日志与监控筛选。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://allthingssmitty.com/2025/11/10/error-chaining-in-javascript-cleaner-debugging-with-error-cause/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://allthingssmitty.com/2025/11/10/error-chaining-in-javascript-cleaner-debugging-with-error-cause/&quot;&gt;https://allthingssmitty.com/2025/11/10/error-chaining-in-javascript-cleaner-debugging-with-error-cause/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://allthingssmitty.com/2025/11/10/error-chaining-in-javascript-cleaner-debugging-with-error-cause&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Use JavaScript&apos;s &apos;cause&apos; property to chain errors, preserve context, and simplify debugging. Cleaner stack traces, better test assertions.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/hFpRlauNh_gLPR4H11inbpSWA7Y4MAdeiU8ZiJ1FG0l9Dxdu_GTSCAY5hjgyJCj2H_KoTKMVGWR8LVH-oD5FTTIeuipvAmgpTpVVvcNpXoXmIwk7sKKCWiJRv4rl9lrq8TT5MehGtn-NfpdV6gHfE-r4zHhM3v2RWkR0vNg53DWo_Rf6mMURE5bmC0sRsGXK7iBX83-kFTSqvvW0H23myzhiGOw5AZTyHQxdohPtMI6I1fukWkPz14fWN8Kgwgj4XnO3eXsXM9b8KNxHR6NfFgFqYfoHHUW81VrbKAyj6yssn82u-VV8a-NpLHCwUfmpDCa19IwMss6wmchp4broKw.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Allthingssmitty&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Error chaining in JavaScript: cleaner debugging with Error.cause - Matt Smith&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Use JavaScript&apos;s &apos;cause&apos; property to chain errors, preserve context, and simplify debugging. Cleaner stack traces, better test assertions.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 Navigation API即将全面支持所有浏览器：这项令人振奋的新 Web 平台 API 很快将在所有浏览器中上线，它将重新定义我们构建客户端/单页应用导航的方式</title><link>https://channel.meo-ai.com/posts/508</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/508</guid><pubDate>Wed, 12 Nov 2025 02:21:39 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; Navigation API即将全面支持所有浏览器：这项令人振奋的新 Web 平台 API 很快将在所有浏览器中上线，它将重新定义我们构建客户端/单页应用导航的方式。不再需要使用原本并非为单页应用设计的笨拙 History API，也不再需要一个 &amp;lt;Link&amp;gt; 组件来拦截点击事件以调用 event.preventDefault() 和 history.pushState() ，取而代之的是，将有一个统一的中心位置来处理和拦截导航事件。React 团队正在开发一项过渡指示器功能，该功能将利用这一 API 提供原生的加载状态反馈。</content:encoded></item><item><title>#文章 #CSS 文章示范了用容器查询、:has()、clamp()等现代 CSS，让“头部+卡片网格”这一简单布局随卡片数量与宽度自动切换形态</title><link>https://channel.meo-ai.com/posts/503</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/503</guid><pubDate>Mon, 03 Nov 2025 01:31:57 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; 文章示范了用容器查询、&lt;code&gt;:has()&lt;/code&gt;、&lt;code&gt;clamp()&lt;/code&gt;等现代 CSS，让“头部+卡片网格”这一简单布局随卡片数量与宽度自动切换形态。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ishadeed.com/article/modern-css-section-layout/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://ishadeed.com/article/modern-css-section-layout/&quot;&gt;https://ishadeed.com/article/modern-css-section-layout/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://ishadeed.com/article/modern-css-section-layout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Building a typical section design with modern CSS.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Ishadeed&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Solved By Modern CSS: Section Layout&quot; src=&quot;/static/https://cdn4.telesco.pe/file/Urwb90-FWrxSrFB48B95N5A6Y914sWMTuGhAGrVXFWuwmvg8sOlFkrvco0QaXTv9_gshB0NPaHr0H2nGbh-JCYnWcvORnU8aUUxgN1D59LdA4GdEndouQT8MEzt2a-LqkthAyRT5UBqLLjJGopewYyGJ6msqZ4gTAooZs7vEpSjomyehvV_pRNQdK8pkOACYKOcjK1U0KMAokeWcjq7un2Twxg6E_d_Op1ZKzhPY6APj6ig-Up3ZsLD8cM5ynwV1CXXlkX-aOavX_SvGaIPp9iEphAcB1qeKQDM0-3F5tq_2bRDO9heMKVspSZZyCjK9hugAJDFox32DkHbEug-uGw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Solved By Modern CSS: Section Layout&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Building a typical section design with modern CSS.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 作者在使用 Next.js App Router 和 React Server Components（RSC）一年后的不满和失望，并解释了他们为什么选择迁移到 TanStack Start</title><link>https://channel.meo-ai.com/posts/498</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/498</guid><pubDate>Thu, 30 Oct 2025 08:47:40 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 作者在使用 Next.js App Router 和 React Server Components（RSC）一年后的不满和失望，并解释了他们为什么选择迁移到 TanStack Start。作者详细分析了 Next.js App Router 和 RSC 的设计缺陷，包括：乐观更新不可、每次导航都是另一次获取、布局人为受限、内容双重下载、Turbopack 表现不佳。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot;&gt;https://paperclover.net/blog/webdev/one-year-next-app-router&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A critique of React Server Components and Next.js 15.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;paperclover.net&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;One Year with Next.js App Router — Why We&apos;re Moving On&quot; src=&quot;/static/https://cdn4.telesco.pe/file/pJS0P0dIGJYWvyIyNzbrjwr5THL-FQmbpmOdrzlxqvKq0dtWPfnF5nksenYkwxcnJbAmpl5iN4Filyjwv33mFIkJo5GHYf1VFEVZtlyqnwJKuLuJlVUPnef_0AcBpQNEAvd3C1tNo4Pi6Ei902UpikIqHrFskbl2HKBYPUgXaOz3pV457zmglVOfHJ0gezSpe0HnRRJ1l9wXcJFXdUlInMF_e0lSU-YCj_6psvsSfyTQwPaySd3j9EvQiQf6rpoTxYkfZ_gKCOx9l84pSYqH5F1ptu_yhtKexuQZ3CriN_NLi_u3HA1J3XKHnTlczPnkNLXYzRl37sCsqyU8HoK54g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;One Year with Next.js App Router — Why We&apos;re Moving On&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A critique of React Server Components and Next.js 15.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 #JS  JavaScript 中的异步循环，作者对比总结了部分实践</title><link>https://channel.meo-ai.com/posts/496</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/496</guid><pubDate>Wed, 29 Oct 2025 10:42:49 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JS&quot; title=&quot;#JS&quot;&gt;#JS&lt;/a&gt;  JavaScript 中的异步循环，作者对比总结了部分实践&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://allthingssmitty.com/2025/10/20/rethinking-async-loops-in-javascript/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://allthingssmitty.com/2025/10/20/rethinking-async-loops-in-javascript/&quot;&gt;https://allthingssmitty.com/2025/10/20/rethinking-async-loops-in-javascript/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://allthingssmitty.com/2025/10/20/rethinking-async-loops-in-javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Struggling with &apos;await&apos; in loops? Explore common mistakes and modern solutions to optimize async code for performance.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/hS7EJPAvekcm-I6SkLonc4qbh1SiPpOzltkTXcM1Ou4tfwg-FE81WpbSrZEV2uTKzy_-puAEI0syS-45ruOXYqZZFgJ69_b_d6EAuSbIADzTguVZWOteyo_0b6zPFXEd1uKZcHhS9zW1O6gkb9hFznKOAIGXf7SA3qcTiwSm-zzPk2852ZV-nR2T0WUStBzSMk7C5aj5n_0NpIdove7onKbIKFljmSiBRqnLpbFswY4Hj7c9i5kp-PmhysjuTy0lqvNEBJRHWGvt0oexn6i3TBdcTBdW8AodLXkrxFY8xBTHyG20illvoVNXiA_At7A1ibbufnTvWj-21x3PVGBkHA.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Allthingssmitty&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Rethinking async loops in JavaScript - Matt Smith&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Struggling with &apos;await&apos; in loops? Explore common mistakes and modern solutions to optimize async code for performance.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#UX #文章  模态框和非模态框，这两者的区别以及如何使用？</title><link>https://channel.meo-ai.com/posts/495</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/495</guid><pubDate>Fri, 24 Oct 2025 10:25:11 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23UX&quot; title=&quot;#UX&quot;&gt;#UX&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt;  模态框和非模态框，这两者的区别以及如何使用？&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.a11y-collective.com/blog/modal-vs-dialog/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.a11y-collective.com/blog/modal-vs-dialog/&quot;&gt;https://www.a11y-collective.com/blog/modal-vs-dialog/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://a11y-collective.com/blog/modal-vs-dialog&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Confused about modal vs dialog components? Discover implementation patterns, accessibility guidelines, and best practices for creating user-friendly interfaces.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The A11Y Collective&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;When to Use Modal vs Dialog Components&quot; src=&quot;/static/https://cdn4.telesco.pe/file/FvYNuXea52bdIlw9OrRMCRhyh2nFKaONTNHZO31iftadArGaoBWFsO_vKwOxw9KYV0Ypud-6HIkmlveq_ZT3OlOYxjdRCTQVQDiFwLfx0daf88lviRRlo7uw74ue9f4xBBLfha5EhSh72QjUvn334qU2_zmQhg3_w5d6agrtGXqpPl7GJOMLS2XnBTJTgoLNWWKXeDP3GNLDav9h9XmzEfA6MY5MXPdvBlgM3k-WeLLXXYZ4dAyKUK8uSF3hPe5rOfEW5SkY70PtCiaGQHlt9qbF0fJ-QfdRZ_kZ6XAjz-YFi2qdINDdt8iIYxt6dA3SbCgjhgDCWVf3_R5u3jLNXw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;When to Use Modal vs Dialog Components&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Confused about modal vs dialog components? Discover implementation patterns, accessibility guidelines, and best practices for creating user-friendly interfaces.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#UX #文章 主要介绍了ARIA属性在无障碍网络应用中的关键作用，特别是aria-selected、aria-pressed、aria-current和aria-checked这四个容易混淆的属性</title><link>https://channel.meo-ai.com/posts/494</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/494</guid><pubDate>Fri, 24 Oct 2025 10:20:15 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23UX&quot; title=&quot;#UX&quot;&gt;#UX&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 主要介绍了ARIA属性在无障碍网络应用中的关键作用，特别是aria-selected、aria-pressed、aria-current和aria-checked这四个容易混淆的属性。文章详细解释了每个属性的用途、适用场景、常见值以及最佳实践，同时指出了开发者在使用这些属性时常见的错误，并强调了正确使用ARIA属性对于确保辅助技术准确传达界面状态的重要性。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.tpgi.com/what-state-aria-in/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.tpgi.com/what-state-aria-in/&quot;&gt;https://www.tpgi.com/what-state-aria-in/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://tpgi.com/what-state-aria-in&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;This article explains how to use ARIA to indicate the difference between selected, pressed, current, and checked states of elements.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;TPGi — a Vispero company&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;What State ARIA In? - TPGi — a Vispero company&quot; src=&quot;/static/https://cdn4.telesco.pe/file/PtAXAf4A8i2r8ccy605hSpil1a7SThfuicz1o1z_ukmrDwej0-zrD6vzbaaddrppr7hVRns2WMnRSGRdzArqjJebvdACZACGSdo-boib_hYbJF66afTsdrXSxBz4Ipmo01mRpF80m7J0DgptK7nvAZFoTZKUjV4ZPkZoM08hpplrcBUmVuQynVJlr9KMgAHhdr9tZY7RzrDxhUzGZT6z6eppRk7qJYoMVm-ZGHdKla3B7Bg49LYbucnBUFL1pcBEGIbJLfUQy3jIMqAvE8X8w_2a9Qp9aRKc9d_PjGveFcaLG3VK03S0XiCZxEi64hQWqbBPbDTHq3Lr1VZJ4xOxug.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;What State ARIA In? - TPGi — a Vispero company&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;This article explains how to use ARIA to indicate the difference between selected, pressed, current, and checked states of elements.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 Next.js App Router 结合 React Server Components 带来 零 JS 前端渲染、流式 SSR 与自动代码分割 等亮点，却同时陷入 乐观更新缺失、每次导航重复取数、布局受限、双倍内容下载与调试痛苦 的深度缺陷；作者用一年实战证明，这套架构对动态应用既浪费带宽又折磨开发者，最终迁往 TanStack Start 才重获性能与可维护性</title><link>https://channel.meo-ai.com/posts/493</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/493</guid><pubDate>Fri, 24 Oct 2025 00:50:03 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; Next.js App Router 结合 React Server Components 带来 零 JS 前端渲染、流式 SSR 与自动代码分割 等亮点，却同时陷入 乐观更新缺失、每次导航重复取数、布局受限、双倍内容下载与调试痛苦 的深度缺陷；作者用一年实战证明，这套架构对动态应用既浪费带宽又折磨开发者，最终迁往 TanStack Start 才重获性能与可维护性。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot;&gt;https://paperclover.net/blog/webdev/one-year-next-app-router&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://paperclover.net/blog/webdev/one-year-next-app-router&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A critique of React Server Components and Next.js 15.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;paperclover.net&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;One Year with Next.js App Router — Why We&apos;re Moving On&quot; src=&quot;/static/https://cdn4.telesco.pe/file/iyep2GNqQrbqTOdNKaJAG5mTPLVtmZGLjOPZ9Aex9CQseZ8YBRK-rsZj5eJM0tHKOaHSR4YtkgMaBxRGDPuXwbMg1aT8j8LzdGW2eyWzIArxUZf8DzaKKo1aIf9z1vxxzgZiSYL1R_FVNDY1tBx8JhzxUJt9SYy2LfxWD026cOLt7uBOrPL8_k0-Ugb1-OwgD2G8vY3yaswBDjqBIEJWByBjc4PQt2YZ29MkjF-KoPspRPcj9KMh1btIE7nuQ8rJF4kGGFtR7PRNRhqQhedieXQ5E4lxoUJ3ordRL-y7tWxuIqhO438mzIB9x7K97DnVG2MwrYwoBb5FNGPnglwkNA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;One Year with Next.js App Router — Why We&apos;re Moving On&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A critique of React Server Components and Next.js 15.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 React Server Components 本身并不“神奇”，真正的性能提升来自“服务器端数据获取 + Streaming + Suspense”的正确组合</title><link>https://channel.meo-ai.com/posts/492</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/492</guid><pubDate>Fri, 24 Oct 2025 00:45:57 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; React Server Components 本身并不“神奇”，真正的性能提升来自“服务器端数据获取 + Streaming + Suspense”的正确组合。 如果只用 RSC 而不重构数据流，性能甚至可能倒退。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.developerway.com/posts/react-server-components-performance&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.developerway.com/posts/react-server-components-performance&quot;&gt;https://www.developerway.com/posts/react-server-components-performance&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://developerway.com/posts/react-server-components-performance&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A data-driven comparison of CSR, SSR, and RSC under the same app and test setup, focusing on initial-load performance and the impact of client- vs server-side data fetching (including Streaming + Suspense).&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Developer Way&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;React Server Components: Do They Really Improve Performance?&quot; src=&quot;/static/https://cdn4.telesco.pe/file/ClF4RT_PBRGfaS80NlI1JDiQW9WXA8OCNqXegdTIxGSNOPJeo2lTgs4TBElhMUzR7_1J72p9hE2xuJSXTo6x5YiqWGt2uUYs1Vpwi9Zb8JGZSJsNY6jp9cPy7yet1-PvBqFJNmjkdP4wRPRXIpZLvwtly527t_ZRxnRU3IDNX9Yu8oXi0rJa5K4e0nwNxc7MYJPGzzxT18rJKWgeQXkowvZOHVsEPZBMSKhHDISR_-ptQPTySAhfNOZvGuVrJEzdVqQsY3ZKxMK9qqJXVsIf9Qw5jHjca-h7C--Oftt8jDm3Z5tiQWrPdp4q9Dz1obLUm7_t7K5MnyQ3tsNWezhBuA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;React Server Components: Do They Really Improve Performance?&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A data-driven comparison of CSR, SSR, and RSC under the same app and test setup, focusing on initial-load performance and the impact of client- vs server-side data fetching (including Streaming + Suspense).&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 2025 年的 Node.js 已内置全套现代 Web 标准与开发工具，升 20.x 即可零依赖写 ESM、fetch、测试、watch、权限、单文件部署，彻底告别“装包装到哭”的旧时代</title><link>https://channel.meo-ai.com/posts/490</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/490</guid><pubDate>Wed, 22 Oct 2025 02:54:49 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 2025 年的 Node.js 已内置全套现代 Web 标准与开发工具，升 20.x 即可零依赖写 ESM、fetch、测试、watch、权限、单文件部署，彻底告别“装包装到哭”的旧时代。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://kashw1n.com/blog/nodejs-2025/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://kashw1n.com/blog/nodejs-2025/&quot;&gt;https://kashw1n.com/blog/nodejs-2025/&lt;/a&gt;</content:encoded></item><item><title>#AI #文章 原型≠产品：作者指出，氛围编码工具适合创意验证，但无法替代专业开发</title><link>https://channel.meo-ai.com/posts/489</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/489</guid><pubDate>Wed, 22 Oct 2025 01:27:37 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23AI&quot; title=&quot;#AI&quot;&gt;#AI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 原型≠产品：作者指出，氛围编码工具适合创意验证，但无法替代专业开发。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://thenewstack.io/as-vibe-coding-fades-woz-offers-production-ready-alternative/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://thenewstack.io/as-vibe-coding-fades-woz-offers-production-ready-alternative/&quot;&gt;https://thenewstack.io/as-vibe-coding-fades-woz-offers-production-ready-alternative/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://thenewstack.io/as-vibe-coding-fades-woz-offers-production-ready-alternative&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Woz launches to build production-ready apps using prebuilt components and human oversight, as traffic to leading vibe coding tools drops by as much as 64%.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The New Stack&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;As Vibe Coding Fades, Woz Offers Production-Ready Alternative&quot; src=&quot;/static/https://cdn4.telesco.pe/file/E7MWQHfkrfdaQyfDabC2enL-FbWE69rtXdlWZ2sjkSNmMbqpF1q6XgpPBgaXiudqwQ36Vn8jGbjq9dTmNFCV2XZvnlThmSSPQETbOT41MkBKBI7pEfeSOCYkCbwucmkWHGCEalb_yywN4F4UFaf70zTToiWwTLkKVvRM3VUPA0xDbYjMMWRM2W8eHz_l-9D_n1a-4L52BKTkS174-xKO-_YXl6sIwODlCBgmOWwCtfiQnnR11hnV0-CmTKde_QlkIWuIVXFGgFfxRGvU4llQ-KHXo8YYnMgd3W4tMgb7maSIzNDJQkws43gNZcYoSTPipGyYGqzgWpQ177LfKc2U8g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;As Vibe Coding Fades, Woz Offers Production-Ready Alternative&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Woz launches to build production-ready apps using prebuilt components and human oversight, as traffic to leading vibe coding tools drops by as much as 64%.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#React #文章 文章介绍了如何使用React的`useDeferredValue()`和`useSuspenseQuery()`构建响应式的异步组合框组件，通过将数据获取逻辑提取到单独组件中并利用Suspense和错误边界，简化了加载和错误状态管理，同时通过`useDeferredValue()`优化渲染，实现平滑的用户体验和过时数据更新体验</title><link>https://channel.meo-ai.com/posts/485</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/485</guid><pubDate>Thu, 16 Oct 2025 06:29:31 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 文章介绍了如何使用React的`useDeferredValue()`和`useSuspenseQuery()`构建响应式的异步组合框组件，通过将数据获取逻辑提取到单独组件中并利用Suspense和错误边界，简化了加载和错误状态管理，同时通过`useDeferredValue()`优化渲染，实现平滑的用户体验和过时数据更新体验。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://certificates.dev/blog/building-an-async-combobox-with-usesuspensequery-and-usedeferredvalue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://certificates.dev/blog/building-an-async-combobox-with-usesuspensequery-and-usedeferredvalue&quot;&gt;https://certificates.dev/blog/building-an-async-combobox-with-usesuspensequery-and-usedeferredvalue&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://certificates.dev/blog/building-an-async-combobox-with-usesuspensequery-and-usedeferredvalue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Learn how to build a responsive async combobox component using React&apos;s useDeferredValue() and useSuspenseQuery(). Discover how these concurrent features work together to create smooth user experiences with declarative loading states, optimistic updates, and…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;certificates.dev&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Building an Async Combobox with useSuspenseQuery() and useDeferredValue()&quot; src=&quot;/static/https://cdn4.telesco.pe/file/QlXpg7g3Oa0UvPsoln1NRQTtt776jdg_82J3-dKztmbwFJjeTcn_Er01n3Ue5tFfAMEtCvJKBuMOvUGfSNxlYnkCGogvK4tWG9nLU8bVwuN1pe_3-tmk7g9KlCqpR8oMFMQQEArW-EsDXiuDezBbgat2HAjskD_up1R_qXu5mH4lYQcL7rzSBO84RmmeUnI2zf-9qtQt33bx2SCTP_iwiXKHwyrLzPhDWZ6BtPVzuZwx1Q72M9m_WcoK39Mr5RNqYzvoXLqz8c5r5wicpDQ2_pmsgdXFzjcew75B05UJxSqNvRRvPLZGcBq7v7ZYG_mavbdoo6Pq4Io1qDEEGcdnUg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Building an Async Combobox with useSuspenseQuery() and useDeferredValue()&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Learn how to build a responsive async combobox component using React&apos;s useDeferredValue() and useSuspenseQuery(). Discover how these concurrent features work together to create smooth user experiences with declarative loading states, optimistic updates, and…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>