<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Quiet Side</title><description>Jun 的个人文集：记录前端工程、AI 工具、Agent 实践与安静生活。</description><link>https://blog.ipage.fun/</link><item><title>浏览器翻译插件上线后，真正麻烦的是适配真实网页</title><link>https://blog.ipage.fun/posts/adapting-browser-translation-to-real-web-pages/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/adapting-browser-translation-to-real-web-pages/</guid><description>浏览器翻译插件在测试页面里跑通并不难，麻烦的是它要长期面对 SPA 路由、动态加载、复杂布局、站点样式和局部失败。上线以后，我更多时间花在让它稳定适配真实网页，而不是继续堆翻译功能。</description><pubDate>Mon, 22 Jun 2026 13:12:00 GMT</pubDate></item><item><title>词典查不到的时候，AI 兜底也不能随便兜</title><link>https://blog.ipage.fun/posts/contextual-llm-word-lookup-fallback/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/contextual-llm-word-lookup-fallback/</guid><description>Parallel Translate 里有些词不是普通单词，而是品牌、银行、产品名或缩写。直接让 LLM 接管所有未命中查词会变慢也会变脏，我最后把它限制成只在用户主动查词、有上下文时触发的语境化兜底。</description><pubDate>Thu, 18 Jun 2026 02:36:00 GMT</pubDate></item><item><title>查词接口不能为了完整，把用户卡在原地</title><link>https://blog.ipage.fun/posts/making-word-lookup-fast-before-making-it-rich/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/making-word-lookup-fast-before-making-it-rich/</guid><description>在 Parallel Translate 里，主动查词最重要的是先让用户看到可用结果。后来我把查词接口从同步等待外部富化，改成先返回词库结果，再把音频、例句和补充释义放到后台慢慢补齐。</description><pubDate>Sun, 14 Jun 2026 12:24:00 GMT</pubDate></item><item><title>划词翻译面板为什么难做</title><link>https://blog.ipage.fun/posts/why-selection-translation-panel-is-hard/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/why-selection-translation-panel-is-hard/</guid><description>划词翻译看起来只是选中文字后弹出一个小面板，真正难的是选区解释、浮层定位、样式隔离、词典与 AI 编排、发音播放和生词状态同步。一个小面板背后，其实是一套横跨页面、扩展和后台服务的交互系统。</description><pubDate>Thu, 11 Jun 2026 02:00:00 GMT</pubDate></item><item><title>给 Next.js 套一层 Electron 壳：零改动打包成桌面应用</title><link>https://blog.ipage.fun/posts/electron-nextjs-zero-change-packaging/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/electron-nextjs-zero-change-packaging/</guid><description>StockTracker 之前是一个纯 Web 服务，想着 Electron 易于分发，尝试把它打包成桌面客户端。本文记录整个过程中 Next.js 代码零改动的架构设计、踩过的坑和最终方案。</description><pubDate>Sat, 30 May 2026 02:00:00 GMT</pubDate></item><item><title>我如何组织 AI 翻译扩展的缓存、批处理与 Provider</title><link>https://blog.ipage.fun/posts/governing-ai-translation-requests-in-a-browser-extension/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/governing-ai-translation-requests-in-a-browser-extension/</guid><description>在双语阅读扩展里，翻译请求如果由页面脚本随手发送，很快会变慢、变贵、难以恢复。我在 Parallel Translate 中如何把缓存、批处理、多 Provider 与页面渲染拆开处理。</description><pubDate>Fri, 29 May 2026 02:00:00 GMT</pubDate></item><item><title>我如何在浏览器扩展中把网页变成双语阅读视图</title><link>https://blog.ipage.fun/posts/building-a-bilingual-reading-view-inside-web-pages/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/building-a-bilingual-reading-view-inside-web-pages/</guid><description>我最近在做一个双语阅读浏览器扩展。真正棘手的并不是把一句英文交给翻译服务，而是在不破坏原网页的前提下，找到正文、按需翻译、保留交互，并且随时还原页面。</description><pubDate>Wed, 27 May 2026 02:00:00 GMT</pubDate></item><item><title>为什么我用 SQLite 作为个人投资系统的数据底座</title><link>https://blog.ipage.fun/posts/sqlite-as-the-core-of-a-local-first-investment-system/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/sqlite-as-the-core-of-a-local-first-investment-system/</guid><description>在 StockTracker 里，我没有把 SQLite 当成一个简陋的本地缓存，而是把它作为个人投资账本和 AI 工作流状态的本地数据底座。这篇文章从持久化方案对比讲到 SQLite 的机制和取舍。</description><pubDate>Mon, 18 May 2026 12:00:00 GMT</pubDate></item><item><title>为什么投资系统不能只使用 JavaScript number 计算金额</title><link>https://blog.ipage.fun/posts/why-javascript-number-is-not-enough-for-investment-accounting/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/why-javascript-number-is-not-enough-for-investment-accounting/</guid><description>JavaScript 的 number 很方便，但它表达的是二进制浮点数，不是金融系统需要的十进制语义。这篇文章从 0.1 + 0.2 讲到手续费、每股成本、FIFO 成本队列和 big.js 选型。</description><pubDate>Sun, 17 May 2026 12:00:00 GMT</pubDate></item><item><title>AI 对话里的逐字输出，背后其实是一条不断吐数据的 HTTP 响应</title><link>https://blog.ipage.fun/posts/how-ai-chat-streaming-works/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/how-ai-chat-streaming-works/</guid><description>很多 AI 对话产品看起来像是在一个字一个字地打出来，背后通常不是 WebSocket，而是基于 text/event-stream 或 ReadableStream 的 HTTP 流式响应。这篇文章拆解 SSE、Content-Type 和前端增量渲染的实现细节。</description><pubDate>Sun, 10 May 2026 13:00:00 GMT</pubDate></item><item><title>做 AI 对话产品，难点不在聊天框</title><link>https://blog.ipage.fun/posts/the-hard-part-of-ai-chat-is-workflow-state/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/the-hard-part-of-ai-chat-is-workflow-state/</guid><description>在 StockTracker 里做 AI 对话之后，我越来越觉得真正难的不是把模型接进聊天框，而是让一次提问、一次澄清、一次分析和一段历史都能成为可继续推进的工作流状态。</description><pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate></item><item><title>让 AI 分析靠谱之前，先把投资账算清楚</title><link>https://blog.ipage.fun/posts/making-ai-investment-analysis-reliable-starts-with-accounting/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/making-ai-investment-analysis-reliable-starts-with-accounting/</guid><description>在 StockTracker 里，我越来越意识到 AI 投研体验的底座不是提示词，而是可审计的交易账本、成本口径、手续费规则和行情有效性。</description><pubDate>Tue, 05 May 2026 12:00:00 GMT</pubDate></item><item><title>我如何从持仓数据设计个人投资 Agent</title><link>https://blog.ipage.fun/posts/building-a-local-first-investment-agent/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/building-a-local-first-investment-agent/</guid><description>StockTracker 的 AI Agent 不是通用聊天机器人，而是围绕本地持仓数据工作的投研助手。这篇文章拆解它的设计思路、核心链路和一些取舍。</description><pubDate>Thu, 30 Apr 2026 12:00:00 GMT</pubDate></item><item><title>做 Agent 时，我越来越在意记忆所有权</title><link>https://blog.ipage.fun/posts/dont-give-away-memory-ownership-when-building-agents/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/dont-give-away-memory-ownership-when-building-agents/</guid><description>很多 Agent 产品把“记忆”当成体验卖点，但从工程和产品角度看，我越来越觉得记忆所有权才是真正的核心。</description><pubDate>Sun, 19 Apr 2026 11:40:00 GMT</pubDate></item><item><title>用 Claude Code 做大项目迁移时，我更在意什么</title><link>https://blog.ipage.fun/posts/what-i-care-about-when-using-claude-code-for-large-migrations/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/what-i-care-about-when-using-claude-code-for-large-migrations/</guid><description>大模型确实能显著加速复杂项目迁移，但真正决定结果的，往往不是模型本身，而是分工、文档和约束。</description><pubDate>Thu, 09 Apr 2026 13:10:00 GMT</pubDate></item><item><title>AI 时代，我越来越觉得思考力比答案更重要</title><link>https://blog.ipage.fun/posts/thinking-matters-more-than-speed-in-the-ai-era/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/thinking-matters-more-than-speed-in-the-ai-era/</guid><description>在 AI 把“快速得到答案”变成默认体验之后，我反而越来越在意慢思考、深阅读和独立判断能力。</description><pubDate>Sat, 28 Mar 2026 12:30:00 GMT</pubDate></item><item><title>主流 React 状态管理库应该如何选择</title><link>https://blog.ipage.fun/posts/react-state-management-libraries-comparison/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/react-state-management-libraries-comparison/</guid><description>状态管理库没有绝对最优，尤其在大型 To B 项目里，真正需要比较的是状态类型、更新模型、性能边界、团队协作成本以及它是否适合当前业务规模。</description><pubDate>Fri, 18 Apr 2025 02:00:00 GMT</pubDate></item><item><title>为什么复杂项目里的客户端状态更适合用 Zustand</title><link>https://blog.ipage.fun/posts/migrating-client-state-from-mobx-to-zustand/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/migrating-client-state-from-mobx-to-zustand/</guid><description>MobX 和 Zustand 都能管理 React 客户端状态，但在大状态量、高频更新和复杂页面协作场景下，它们的性能模型和维护成本差异会被明显放大。</description><pubDate>Fri, 21 Mar 2025 12:38:00 GMT</pubDate></item><item><title>React 开发利器：点击页面直达源码的实现原理</title><link>https://blog.ipage.fun/posts/react-source-code-inspector/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/react-source-code-inspector/</guid><description>介绍 react-dev-inspector 的使用方式和实现原理，以及如何支持云开发机的源码跳转。</description><pubDate>Sat, 15 Jun 2024 02:00:00 GMT</pubDate></item><item><title>React Query 如何维护复杂项目页面中的数据一致性</title><link>https://blog.ipage.fun/posts/react-query-data-consistency-in-project-management/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/react-query-data-consistency-in-project-management/</guid><description>To B 项目管理页面通常共享列表、详情和成员数据，使用 React Query 时需要设计稳定查询键、失效策略与更新后的同步路径。</description><pubDate>Fri, 17 May 2024 12:26:00 GMT</pubDate></item><item><title>动态表单中的条件联动如何避免循环计算</title><link>https://blog.ipage.fun/posts/dynamic-form-field-dependencies-and-state-evaluation/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/dynamic-form-field-dependencies-and-state-evaluation/</guid><description>动态表单支持条件必填、条件有效、条件可见和条件默认值后，字段依赖会形成关系图；只有区分状态推导与值写入，才能避免循环计算。</description><pubDate>Fri, 20 Oct 2023 12:28:00 GMT</pubDate></item><item><title>动态表单系统如何用 schema 与 layout 组织页面</title><link>https://blog.ipage.fun/posts/schema-driven-dynamic-form-rendering/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/schema-driven-dynamic-form-rendering/</guid><description>企业级项目中表单字段与页面编排都会变化，将 schema 与 layout 拆成两层配置，可以分别管理业务数据和界面结构。</description><pubDate>Fri, 14 Jul 2023 12:34:00 GMT</pubDate></item><item><title>营销平台埋点设计：从协议到采集的完整方案</title><link>https://blog.ipage.fun/posts/marketing-platform-tracking-design/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/marketing-platform-tracking-design/</guid><description>营销页面的价值在于转化，而转化的前提是有数据。本文从埋点协议、组件级埋点、采集链路、曝光监听、批量上报到数据落盘，完整介绍营销平台的埋点设计方案。</description><pubDate>Fri, 18 Nov 2022 02:00:00 GMT</pubDate></item><item><title>同一套广告内容如何同时支持 H5 与 Lynx 页面</title><link>https://blog.ipage.fun/posts/h5-and-lynx-ad-page-rendering/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/h5-and-lynx-ad-page-rendering/</guid><description>客户端广告页既需要 H5 的灵活性，也可以借助 Lynx 的 view、text、image 等元素构建原生渲染页面，并配合资源下发改善首屏体验。</description><pubDate>Fri, 23 Sep 2022 12:28:00 GMT</pubDate></item><item><title>组件搭好了还不够，营销页还需要事件和数据</title><link>https://blog.ipage.fun/posts/low-code-event-datasource-expression-workflow/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-event-datasource-expression-workflow/</guid><description>营销页面不是静态拼图，按钮点击、表单提交、接口请求、数据绑定和条件表达式共同构成了低代码平台的运行逻辑。</description><pubDate>Fri, 19 Aug 2022 02:00:00 GMT</pubDate></item><item><title>页面发布能很快生效，靠的不是重新打包</title><link>https://blog.ipage.fun/posts/low-code-page-publishing-and-performance/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-page-publishing-and-performance/</guid><description>低代码营销平台发布的关键不是生成页面文件，而是让页面 DSL、组件资源、数据请求和缓存策略共同支撑秒级生效与稳定访问。</description><pubDate>Fri, 17 Jun 2022 02:00:00 GMT</pubDate></item><item><title>同一份页面配置，在编辑、预览和线上不是一回事</title><link>https://blog.ipage.fun/posts/low-code-renderer-edit-preview-runtime/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-renderer-edit-preview-runtime/</guid><description>同一份低代码 DSL 在编辑器、预览和线上生产环境中有完全不同的渲染目标，因此 Renderer 不能只有一个形态。</description><pubDate>Fri, 15 Apr 2022 02:00:00 GMT</pubDate></item><item><title>用阿里飞冰 ICE 构建广告配置后台</title><link>https://blog.ipage.fun/posts/ice-ad-management-console/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/ice-ad-management-console/</guid><description>广告后台需要同时管理投放计划、素材、时间、状态和查询条件，基于 React 与阿里飞冰 ICE 可以建立更稳定的页面组织方式。</description><pubDate>Fri, 18 Mar 2022 12:24:00 GMT</pubDate></item><item><title>后来发现低代码最怕的是 DSL 越写越乱</title><link>https://blog.ipage.fun/posts/low-code-dsl-is-the-real-product-boundary/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-dsl-is-the-real-product-boundary/</guid><description>低代码营销平台后期能否扩展，关键不在编辑器界面多漂亮，而在 DSL 是否能稳定描述页面结构、组件属性、事件、数据绑定、权限和版本。</description><pubDate>Fri, 18 Feb 2022 02:00:00 GMT</pubDate></item><item><title>拖拽这件事，最后改的其实是一棵组件树</title><link>https://blog.ipage.fun/posts/low-code-drag-engine-and-config-schema/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-drag-engine-and-config-schema/</guid><description>低代码编辑器的核心不是简单拖动 DOM，而是围绕组件树、拖拽命中、属性 schema、数据源配置和组件通信建立一套稳定的编辑协议。</description><pubDate>Fri, 21 Jan 2022 02:00:00 GMT</pubDate></item><item><title>当时做营销搭建器，我先想清楚的是三列结构</title><link>https://blog.ipage.fun/posts/low-code-marketing-platform-architecture/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/low-code-marketing-platform-architecture/</guid><description>一个营销低代码平台不能只看编辑器界面，还要从组件体系、渲染容器、配置协议、开发调试和运行时边界一起设计。</description><pubDate>Fri, 19 Nov 2021 02:00:00 GMT</pubDate></item><item><title>小程序首次加载时间应该从哪些地方优化</title><link>https://blog.ipage.fun/posts/mini-program-startup-performance-optimization/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/mini-program-startup-performance-optimization/</guid><description>小程序首次加载慢通常不是单点问题，需要从主包体积、分包策略、图片资源、首屏数据和渲染节奏共同优化。</description><pubDate>Fri, 17 Sep 2021 12:32:00 GMT</pubDate></item><item><title>小程序长列表如何通过窗口化渲染保持流畅</title><link>https://blog.ipage.fun/posts/mini-program-virtual-list-rendering/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/mini-program-virtual-list-rendering/</guid><description>长列表优化的核心不是重复渲染全部数据，而是依据滚动位置只维护可视区域附近的节点，并保留正确的列表空间。</description><pubDate>Fri, 21 May 2021 12:18:00 GMT</pubDate></item><item><title>小程序文章详情页如何渲染服务端富文本</title><link>https://blog.ipage.fun/posts/mini-program-rich-text-article-rendering/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/mini-program-rich-text-article-rendering/</guid><description>资讯详情页需要把 HTML 内容转换为小程序能够展示的节点结构，并继续支持正文图片、图集预览与异常内容降级。</description><pubDate>Fri, 18 Sep 2020 12:36:00 GMT</pubDate></item><item><title>用 36 张图片实现可滑动的车型全景展示</title><link>https://blog.ipage.fun/posts/mini-program-car-360-view-with-image-frames/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/mini-program-car-360-view-with-image-frames/</guid><description>在小程序中使用一组环绕拍摄的车型图片，根据手指横向拖动切换当前帧，可以用可控成本实现接近 360 度转动的展示效果。</description><pubDate>Fri, 24 Apr 2020 12:24:00 GMT</pubDate></item><item><title>一个 JS Bridge 库要怎样处理版本兼容</title><link>https://blog.ipage.fun/posts/js-bridge-sdk-version-compatibility/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/js-bridge-sdk-version-compatibility/</guid><description>JS Bridge 库真正难维护的地方是版本兼容：H5 发布快，客户端发布慢，SDK 必须在能力探测、降级、灰度和协议演进上提供稳定边界。</description><pubDate>Fri, 15 Nov 2019 02:00:00 GMT</pubDate></item><item><title>为什么要把小程序项目从 WePY 迁移到 Taro</title><link>https://blog.ipage.fun/posts/migrating-mini-program-from-wepy-to-taro/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/migrating-mini-program-from-wepy-to-taro/</guid><description>当业务页面越来越多时，小程序框架迁移不只是替换语法，更重要的是统一 React 技术栈、组件边界和长期维护方式。</description><pubDate>Fri, 16 Aug 2019 12:30:00 GMT</pubDate></item><item><title>JS Bridge 最重要的是先把协议定清楚</title><link>https://blog.ipage.fun/posts/js-bridge-protocol-design/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/js-bridge-protocol-design/</guid><description>JS Bridge 协议决定了 H5 和客户端如何描述方法、参数、回调、错误、事件和权限，它比具体通信方式更影响长期可维护性。</description><pubDate>Fri, 22 Mar 2019 02:00:00 GMT</pubDate></item><item><title>移动端 H5 是怎么和客户端说上话的</title><link>https://blog.ipage.fun/posts/js-bridge-webview-communication-principles/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/js-bridge-webview-communication-principles/</guid><description>JS Bridge 的本质是在 WebView 和客户端之间建立一层受控通信通道，让 H5 能调用客户端能力，也让客户端能把结果回传给页面。</description><pubDate>Fri, 14 Sep 2018 02:00:00 GMT</pubDate></item><item><title>用 React 组织移动端页面中的状态与交互</title><link>https://blog.ipage.fun/posts/react-mobile-pages-state-and-interaction/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/react-mobile-pages-state-and-interaction/</guid><description>移动端页面包含列表、筛选、弹层、滚动和异步请求，使用 React 时需要先区分数据状态、界面状态与交互状态。</description><pubDate>Fri, 22 Jun 2018 12:20:00 GMT</pubDate></item><item><title>视频爬虫系统不能只写一个脚本跑到底</title><link>https://blog.ipage.fun/posts/node-pm2-video-crawler-task-queue/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/node-pm2-video-crawler-task-queue/</guid><description>用 Node.js 和 Chrome Headless 做视频抓取时，真正需要设计的是任务队列、进程模型、失败重试、下载流水线和多进程并发控制。</description><pubDate>Fri, 18 Aug 2017 02:00:00 GMT</pubDate></item><item><title>我的 MacBook Pro 常用应用</title><link>https://blog.ipage.fun/posts/applications-of-my-macbook-pro/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/applications-of-my-macbook-pro/</guid><description>分享我在 MacBook Pro 上常用的一些效率工具，覆盖编辑器、版本控制和日常实用软件。</description><pubDate>Mon, 10 Jul 2017 12:48:19 GMT</pubDate></item><item><title>在微信和 QQ 中处理二次分享</title><link>https://blog.ipage.fun/posts/wechat-qq-share-summary/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/wechat-qq-share-summary/</guid><description>记录在微信和 QQ 中做二次分享时的接入思路、封装方式和注意事项。</description><pubDate>Mon, 19 Jun 2017 12:26:20 GMT</pubDate></item><item><title>当时为什么会用 Chrome Headless 去抓视频链接</title><link>https://blog.ipage.fun/posts/chrome-headless-exploration/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/chrome-headless-exploration/</guid><description>视频资源提链不能只靠普通 HTTP 请求，很多页面需要真实浏览器执行脚本、等待异步加载、监听网络请求，Chrome Headless 正好补上了这部分能力。</description><pubDate>Fri, 09 Jun 2017 09:31:20 GMT</pubDate></item><item><title>Chrome 59 DevTools 中值得关注的新功能</title><link>https://blog.ipage.fun/posts/whats-new-in-devtools-chrome-59/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/whats-new-in-devtools-chrome-59/</guid><description>梳理 Chrome 59 DevTools 的几个实用更新，包括 Coverage、整页截图和 async/await 调试。</description><pubDate>Wed, 07 Jun 2017 03:34:54 GMT</pubDate></item><item><title>使用 FIIL Diva Pro 的一些感受</title><link>https://blog.ipage.fun/posts/fiil-diva-pro/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/fiil-diva-pro/</guid><description>入手 FIIL Diva Pro 的简单开箱与体验，聊聊蓝牙、降噪和日常使用感受。</description><pubDate>Fri, 02 Jun 2017 06:10:22 GMT</pubDate></item><item><title>如何组织贴吧个人中心的主态与客态页面</title><link>https://blog.ipage.fun/posts/android-tieba-profile-self-and-visitor-mode/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-tieba-profile-self-and-visitor-mode/</guid><description>贴吧 Android 客户端个人中心存在主态与客态差异，同一页面在不同身份、关系与权限下需要合理组织数据、视图和交互状态。</description><pubDate>Mon, 14 Nov 2016 12:36:00 GMT</pubDate></item><item><title>如何在贴吧回帖中实现手绘涂鸦表情</title><link>https://blog.ipage.fun/posts/android-tieba-doodle-emoticon-in-reply/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-tieba-doodle-emoticon-in-reply/</guid><description>在贴吧 Android 客户端的回帖场景中增加涂鸦表情能力，需要处理触摸绘制、笔迹建模、撤销重做、图片导出与发帖上传链路。</description><pubDate>Tue, 18 Oct 2016 12:28:00 GMT</pubDate></item><item><title>Android 中旋转屏幕后如何保存 Activity 状态</title><link>https://blog.ipage.fun/posts/android-activity-state-restoration/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-activity-state-restoration/</guid><description>记录 Activity 因屏幕旋转被重建时的状态保存方法，区分界面临时状态与需要持久化的数据。</description><pubDate>Fri, 02 Sep 2016 11:36:00 GMT</pubDate></item><item><title>从使用场景理解 Android 四大组件</title><link>https://blog.ipage.fun/posts/android-four-components-notes/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-four-components-notes/</guid><description>从页面跳转、后台任务、系统事件和跨应用数据访问四个场景出发，整理 Activity、Service、BroadcastReceiver 与 ContentProvider 的职责和协作方式。</description><pubDate>Mon, 08 Aug 2016 12:16:00 GMT</pubDate></item><item><title>理解 Android 中 Handler、Looper 与 MessageQueue 的协作</title><link>https://blog.ipage.fun/posts/android-handler-looper-message-queue/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-handler-looper-message-queue/</guid><description>从更新 UI 的常见需求出发，理解 Android 中 Handler、Looper 和 MessageQueue 如何协作，以及如何避免延迟消息造成的内存泄漏。</description><pubDate>Mon, 18 Jul 2016 12:42:00 GMT</pubDate></item><item><title>用 Canvas 实现 Android 圆环进度条</title><link>https://blog.ipage.fun/posts/android-round-progress-bar/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-round-progress-bar/</guid><description>一个基于 Canvas 实现 Android 圆环进度条的简洁方案，包含画笔设置、圆角线帽与起始角度处理。</description><pubDate>Mon, 13 Jun 2016 08:39:38 GMT</pubDate></item><item><title>理解 Android 自定义 View 的测量与绘制</title><link>https://blog.ipage.fun/posts/android-custom-view-measure-and-draw/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-custom-view-measure-and-draw/</guid><description>梳理 Android 自定义 View 中 onMeasure、onSizeChanged 与 onDraw 的职责，并用一个简单的圆点视图理解尺寸与绘制的关系。</description><pubDate>Mon, 09 May 2016 13:18:00 GMT</pubDate></item><item><title>Android OpenGL 中纹理显示异常的处理方法</title><link>https://blog.ipage.fun/posts/android-opengl-dev-tips/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/android-opengl-dev-tips/</guid><description>记录 Android OpenGL 纹理在部分机型显示异常时，通过将位图尺寸调整到 2 的幂来解决贴图失败的问题。</description><pubDate>Tue, 05 Apr 2016 08:26:04 GMT</pubDate></item><item><title>在 PHP 页面中实现 BigPipe 流式渲染与模块通信</title><link>https://blog.ipage.fun/posts/php-bigpipe-module-communication-and-streaming/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/php-bigpipe-module-communication-and-streaming/</guid><description>在 PHP 输出动态页面的场景下，整理 BigPipe 如何发送页面骨架与 Pagelet，以及前端如何处理模块到达、依赖和通信。</description><pubDate>Fri, 18 Sep 2015 12:40:00 GMT</pubDate></item><item><title>使用 BigPipe 让页面内容逐块呈现</title><link>https://blog.ipage.fun/posts/bigpipe-pagelet-progressive-rendering-notes/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/bigpipe-pagelet-progressive-rendering-notes/</guid><description>BigPipe 通过将复杂页面拆成独立 Pagelet，让服务端生成内容与浏览器渲染同时推进，从而更早展示用户最关心的区域。</description><pubDate>Fri, 21 Aug 2015 12:12:00 GMT</pubDate></item><item><title>用 AngularJS 组织广告配置后台页面</title><link>https://blog.ipage.fun/posts/angularjs-ad-management-console-practice/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/angularjs-ad-management-console-practice/</guid><description>广告配置类后台页面包含筛选、投放时间、素材选择与状态操作，本文整理使用 AngularJS 1.x 组织列表、表单、服务和可复用指令的实践。</description><pubDate>Tue, 28 Jul 2015 12:24:00 GMT</pubDate></item><item><title>在 CodeIgniter 中去掉 URL 里的 index.php</title><link>https://blog.ipage.fun/posts/php-codeigniter-remove-index-php/</link><guid isPermaLink="true">https://blog.ipage.fun/posts/php-codeigniter-remove-index-php/</guid><description>整理在 Apache 环境下为 CodeIgniter 去掉 URL 中 index.php 的几种常见配置方式。</description><pubDate>Mon, 10 Feb 2014 08:36:34 GMT</pubDate></item></channel></rss>