<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Rowan&apos;s Blog</title><description>日常碎碎念的地方，记录工作生活过程中的各种有意义的事情。</description><link>https://rowanliu.com/</link><item><title>[译] 任务、微任务、队列与调度</title><link>https://rowanliu.com/posts/tasks-microtasks-queues-and-schedules/</link><guid isPermaLink="true">https://rowanliu.com/posts/tasks-microtasks-queues-and-schedules/</guid><description>本文深入解析浏览器事件循环中的任务（macrotask）与微任务（microtask）的执行顺序，以及它们在不同浏览器中的调度差异。</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>[译] 触发变更检测，但不要太频繁</title><link>https://rowanliu.com/posts/cd-coalescing/</link><guid isPermaLink="true">https://rowanliu.com/posts/cd-coalescing/</guid><description>本文解释 Angular 中基于 zone 的变更检测为何会在微任务队列清空后触发，并说明为什么用微任务合并比多次 setTimeout() 更适合手动调度 CD 周期。</description><pubDate>Sat, 30 May 2026 08:45:00 GMT</pubDate></item><item><title>[译] CLDR：你的 locale 真相来源</title><link>https://rowanliu.com/posts/cldr-angular/</link><guid isPermaLink="true">https://rowanliu.com/posts/cldr-angular/</guid><description>CLDR 是 Angular 本地化格式的事实来源。本文通过真实 issue 演示如何判断显示问题到底是 bug 还是数据规范使然。</description><pubDate>Sat, 30 May 2026 08:30:00 GMT</pubDate></item><item><title>[译] 默认具备 Tree-shaking 能力</title><link>https://rowanliu.com/posts/tree-shakable-as-default/</link><guid isPermaLink="true">https://rowanliu.com/posts/tree-shakable-as-default/</guid><description>构建 Angular 库时，如何利用 providedIn: &apos;root&apos; 与 useFactory 让抽象服务默认具备 Tree-shaking 能力，避免把未使用的代码带进最终产物。</description><pubDate>Sat, 30 May 2026 08:10:00 GMT</pubDate></item><item><title>[译] Resource: async loading with signals</title><link>https://rowanliu.com/posts/resources-as-signals/</link><guid isPermaLink="true">https://rowanliu.com/posts/resources-as-signals/</guid><description>谁说你需要效果？</description><pubDate>Sat, 30 May 2026 06:35:22 GMT</pubDate></item><item><title>[译] 了解 Angular 中的私有属性降级</title><link>https://rowanliu.com/posts/private-fields-downleveling/</link><guid isPermaLink="true">https://rowanliu.com/posts/private-fields-downleveling/</guid><description>以及有关 browserslist 和 Esbuild 集成到 Angular 的更多信息</description><pubDate>Sat, 30 May 2026 06:33:31 GMT</pubDate></item><item><title>[译] 用 input() 信号替换 @Input 设置器</title><link>https://rowanliu.com/posts/input-setters-caveats/</link><guid isPermaLink="true">https://rowanliu.com/posts/input-setters-caveats/</guid><description>了解输入设置器的注意事项</description><pubDate>Sat, 30 May 2026 06:32:13 GMT</pubDate></item><item><title>[译] v18 中的混合变更检测</title><link>https://rowanliu.com/posts/zoneless-with-zoneless-hybrid/</link><guid isPermaLink="true">https://rowanliu.com/posts/zoneless-with-zoneless-hybrid/</guid><description>无区域有助于基于区域。</description><pubDate>Sat, 30 May 2026 06:31:29 GMT</pubDate></item><item><title>[译] Angular 17.1 预览版中为所有人提供无区域变更检测</title><link>https://rowanliu.com/posts/zoneless-preview/</link><guid isPermaLink="true">https://rowanliu.com/posts/zoneless-preview/</guid><description>你准备好了吗？</description><pubDate>Sat, 30 May 2026 06:30:47 GMT</pubDate></item><item><title>[译] 模板中继器的默认性能</title><link>https://rowanliu.com/posts/performance-for-repeaters/</link><guid isPermaLink="true">https://rowanliu.com/posts/performance-for-repeaters/</guid><description>这是关于@for</description><pubDate>Sat, 30 May 2026 06:29:54 GMT</pubDate></item><item><title>[译] Angular v17 中变更检测的状态</title><link>https://rowanliu.com/posts/v17-change-detection/</link><guid isPermaLink="true">https://rowanliu.com/posts/v17-change-detection/</guid><description>全球本地化：全球化为本地化</description><pubDate>Sat, 30 May 2026 06:28:37 GMT</pubDate></item><item><title>[译] 信号和订阅</title><link>https://rowanliu.com/posts/signals-subscriptions/</link><guid isPermaLink="true">https://rowanliu.com/posts/signals-subscriptions/</guid><description>我需要取消订阅吗？</description><pubDate>Sat, 30 May 2026 06:27:54 GMT</pubDate></item><item><title>[译] ESBuild-based builder, to infinity and beyond</title><link>https://rowanliu.com/posts/v17-builders/</link><guid isPermaLink="true">https://rowanliu.com/posts/v17-builders/</guid><description>v17 构建者方面的新增内容</description><pubDate>Sat, 30 May 2026 06:26:34 GMT</pubDate></item><item><title>[译] 了解 Angular 的可延迟视图 - 第 1 部分。 2</title><link>https://rowanliu.com/posts/defer-part2/</link><guid isPermaLink="true">https://rowanliu.com/posts/defer-part2/</guid><description>里面的魔法</description><pubDate>Sat, 30 May 2026 06:25:40 GMT</pubDate></item><item><title>[译] Understanding Angular&apos;s deferrable views - Part. 1</title><link>https://rowanliu.com/posts/defer-part1/</link><guid isPermaLink="true">https://rowanliu.com/posts/defer-part1/</guid><description>@defer 是街区里的新酷孩子</description><pubDate>Sat, 30 May 2026 06:24:17 GMT</pubDate></item><item><title>[译] 延迟加载 Angular 的动画模块</title><link>https://rowanliu.com/posts/animations-async/</link><guid isPermaLink="true">https://rowanliu.com/posts/animations-async/</guid><description>主包中的内容减少了几 kB</description><pubDate>Sat, 30 May 2026 06:23:11 GMT</pubDate></item><item><title>[译] 在 Angular 中延迟加载服务并考虑测试</title><link>https://rowanliu.com/posts/lazy-loading-mockable/</link><guid isPermaLink="true">https://rowanliu.com/posts/lazy-loading-mockable/</guid><description>我们应该能够模拟我们延迟加载的内容</description><pubDate>Sat, 30 May 2026 06:21:35 GMT</pubDate></item><item><title>[译] 查找、调试并修复 Angular 中的内存泄漏</title><link>https://rowanliu.com/posts/angular-memory-leak/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-memory-leak/</guid><description>了解可帮助您调查内存泄漏的工具。</description><pubDate>Sat, 30 May 2026 06:20:02 GMT</pubDate></item><item><title>[译] Angular 声明式模板如何实现高性能渲染</title><link>https://rowanliu.com/posts/angular-declarative-templating/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-declarative-templating/</guid><description>本文从 Angular Ivy 编译产物入手，解释声明式模板如何通过创建/更新模式、节点复用、OnPush 与脏检查、以及插值记忆化来减少 DOM 操作。</description><pubDate>Sat, 30 May 2026 01:30:00 GMT</pubDate></item><item><title>[译] 理解 effect</title><link>https://rowanliu.com/posts/understanding-effects/</link><guid isPermaLink="true">https://rowanliu.com/posts/understanding-effects/</guid><description>本文介绍 Angular v19 中 Root effect 与 View effect 的差异、调度时机，以及它们在渲染与测试中的实际影响。</description><pubDate>Fri, 29 May 2026 12:07:42 GMT</pubDate></item><item><title>[译] Angular Input 与 Output 的不对称性</title><link>https://rowanliu.com/posts/angular-input-output-asymmetry/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-input-output-asymmetry/</guid><description>本文探讨了 Angular 中 input() 与 output() 看似对称却本质不同的设计：input 是基于状态的通信（信号），而 output 是基于事件的通信（Observable），理解这一差异有助于正确使用 Angular 的响应式原语。</description><pubDate>Fri, 29 May 2026 11:35:37 GMT</pubDate></item><item><title>[译] Signal 决策图</title><link>https://rowanliu.com/posts/signal-decision-chart/</link><guid isPermaLink="true">https://rowanliu.com/posts/signal-decision-chart/</guid><description>一张帮助你在 Angular 中选择合适的 Signal 原语的决策图。</description><pubDate>Tue, 26 May 2026 15:45:00 GMT</pubDate></item><item><title>[译] 无生命周期钩子的 Angular —— 使用现代 API 构建组件</title><link>https://rowanliu.com/posts/angular-lifecycle-hook-free/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-lifecycle-hook-free/</guid><description>探索如何使用 Angular 最新的信号（Signals）、DestroyRef、afterRender 等现代 API 替代传统的生命周期钩子，编写更简洁、可维护的组件。</description><pubDate>Tue, 26 May 2026 05:00:00 GMT</pubDate></item><item><title>[译] inject 函数不是服务定位器——除非你把它用成了服务定位器</title><link>https://rowanliu.com/posts/angular-inject-not-service-locator/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-inject-not-service-locator/</guid><description>深入探讨 Angular 中 inject() 函数与服务定位器模式的区别，理解注入上下文的基础原理，以及如何避免将 inject() 误用为服务定位器。</description><pubDate>Mon, 25 May 2026 16:00:00 GMT</pubDate></item><item><title>Signals 内在原理：从 Vue Reactivity 到 Angular Signals 的响应式编程统一模型</title><link>https://rowanliu.com/posts/signals-unified-reactivity-model/</link><guid isPermaLink="true">https://rowanliu.com/posts/signals-unified-reactivity-model/</guid><description>把 Vue 2/3、Angular Signals、Solid.js 与 TC39 Signals Proposal 放进同一张坐标系：依赖追踪、变化传播、副作用调度。理解不同框架响应式系统背后的共同模型，而不是只记 API。</description><pubDate>Sun, 24 May 2026 16:00:00 GMT</pubDate></item><item><title>Node.js 工程化 2026：告别 ts-node，原生 TypeScript 运行时时代已到</title><link>https://rowanliu.com/posts/nodejs-typescript-modern-2026/</link><guid isPermaLink="true">https://rowanliu.com/posts/nodejs-typescript-modern-2026/</guid><description>Node.js 已内置 Type Stripping，可直接运行满足条件的 TypeScript 文件；ts-node 不再是唯一选择。本文讲解现代 Node.js 项目结构、内置 TS 支持与其局限、Bun/Deno 的现实评估，以及 tsup、Vitest、zod 的最佳实践。</description><pubDate>Fri, 01 May 2026 18:00:00 GMT</pubDate></item><item><title>2026 年 React 入门路线：抛弃 dva/umi，拥抱 React 19 + Vite + Ant Design 5</title><link>https://rowanliu.com/posts/react19-vite-antd5-starter/</link><guid isPermaLink="true">https://rowanliu.com/posts/react19-vite-antd5-starter/</guid><description>2019 年的 CRA + dva + umi 方案早已过时。本文给出 2026 年 React 入门的正确路线：React 19 + Vite + Ant Design 5 + Zustand + React Router v7，配合完整的工程化配置。</description><pubDate>Fri, 01 May 2026 17:00:00 GMT</pubDate></item><item><title>Vue 3 六年回望：从 2020 年的激进 RFC 到 2026 年的稳健生态</title><link>https://rowanliu.com/posts/vue3-six-years-retrospective/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue3-six-years-retrospective/</guid><description>Vue 3 从 2020 年发布到 2026 年已走过六年。本文回顾 Vue 3 的设计决策、生态演进、Vue 2 EOL 的落幕，以及 2026 年 Vue 生态的现实选型建议。</description><pubDate>Fri, 01 May 2026 16:00:00 GMT</pubDate></item><item><title>前端构建工具十年：从 Gulp 到 Vite，再到 Rolldown 的时代终章</title><link>https://rowanliu.com/posts/frontend-build-tools-evolution/</link><guid isPermaLink="true">https://rowanliu.com/posts/frontend-build-tools-evolution/</guid><description>从 2014 年的 Grunt/Gulp 任务流，到 Webpack 的模块打包时代，再到 Vite 的 ESM 革命和 Rolldown 的 Rust 重写——一篇文章看懂前端构建工具十年演化史。</description><pubDate>Fri, 01 May 2026 15:00:00 GMT</pubDate></item><item><title>VuePress 退场，VitePress 登场：2026 年技术文档站的最优解</title><link>https://rowanliu.com/posts/vuepress-to-vitepress-giscus/</link><guid isPermaLink="true">https://rowanliu.com/posts/vuepress-to-vitepress-giscus/</guid><description>VuePress 1/2 时代的终结与 VitePress 的崛起。本文详解 VitePress 核心优势、从 VuePress 的迁移路径、Giscus 评论系统接入，以及搜索、国际化、自定义主题等实战配置。</description><pubDate>Fri, 01 May 2026 14:00:00 GMT</pubDate></item><item><title>从 Travis CI 迁移到 GitHub Actions：2026 年的前端自动化部署实战</title><link>https://rowanliu.com/posts/travis-ci-to-github-actions/</link><guid isPermaLink="true">https://rowanliu.com/posts/travis-ci-to-github-actions/</guid><description>Travis CI 曾是开源项目的 CI 首选，但 2021 年的收费政策变化让大量项目流失。本文详解如何把 .travis.yml 迁移到 GitHub Actions，并介绍 pnpm 缓存、Secrets、矩阵构建等实用技巧。</description><pubDate>Fri, 01 May 2026 13:00:00 GMT</pubDate></item><item><title>Lerna 已死，Monorepo 未亡：pnpm workspace + Changesets + Turborepo 实战</title><link>https://rowanliu.com/posts/monorepo-pnpm-changesets-turborepo/</link><guid isPermaLink="true">https://rowanliu.com/posts/monorepo-pnpm-changesets-turborepo/</guid><description>Lerna 2022 年停维护后，现代 Monorepo 的最优解是什么？本文手把手讲解 pnpm workspace + Changesets + Turborepo 的完整实战配置，以及如何从 Lerna 平滑迁移。</description><pubDate>Fri, 01 May 2026 12:00:00 GMT</pubDate></item><item><title>Zone.js 谢幕，Signals 登场：Angular 17-19 变更检测完全指南</title><link>https://rowanliu.com/posts/angular-signals-zoneless/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-signals-zoneless/</guid><description>深入讲解 Angular Signals 体系：signal()、computed()、effect() 的核心 API，Zoneless 模式的开启方式，以及如何将存量 Zone.js 组件渐进式迁移到 Signals 架构。</description><pubDate>Fri, 01 May 2026 11:00:00 GMT</pubDate></item><item><title>从 OAuth 2.0 到 OAuth 2.1：PKCE、BFF 与现代前端认证的正确姿势</title><link>https://rowanliu.com/posts/oauth2-pkce-bff-modern-auth/</link><guid isPermaLink="true">https://rowanliu.com/posts/oauth2-pkce-bff-modern-auth/</guid><description>回顾 2020 年 OAuth 2.0 方案的安全隐患，深入讲解 OAuth 2.1 的核心变化、PKCE 流程、BFF 模式，以及如何用 NestJS + Passport 构建安全的现代认证网关。</description><pubDate>Fri, 01 May 2026 10:00:00 GMT</pubDate></item><item><title>Angular SSR、Hydration 与 BFF：从零理清架构知识点</title><link>https://rowanliu.com/posts/angular-ssr-hydration-bff/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-ssr-hydration-bff/</guid><description>Angular 的易混知识点</description><pubDate>Sat, 18 Apr 2026 03:23:19 GMT</pubDate></item><item><title>Angular 升级指南（三）：Angular 19-22 新特性详解</title><link>https://rowanliu.com/posts/angular-features-19-to-21/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-features-19-to-21/</guid><description>Angular 19-22 标志着框架的成熟期--Signals 全面稳定、Zoneless 正式落地、Signal Forms、Angular Aria 无障碍组件、默认 OnPush 等特性让 Angular 焕然一新。</description><pubDate>Fri, 17 Apr 2026 04:00:00 GMT</pubDate></item><item><title>Angular 升级指南（二）：Angular 16-18 新特性详解</title><link>https://rowanliu.com/posts/angular-features-16-to-18/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-features-16-to-18/</guid><description>Angular 16-18 是框架的变革期——Signals 响应式系统诞生、新控制流语法、@defer 延迟加载、esbuild 构建器、SSR 水合等重磅特性逐步落地。</description><pubDate>Sat, 11 Apr 2026 12:10:00 GMT</pubDate></item><item><title>Angular 升级指南（一）：Angular 13-15 新特性详解</title><link>https://rowanliu.com/posts/angular-features-13-to-15/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-features-13-to-15/</guid><description>从 Angular 13 到 15，框架经历了 Ivy 全面接管、Typed Forms、Standalone Components 等里程碑式变革。本文逐版本梳理每个新特性的使用方式与升级要点。</description><pubDate>Sat, 11 Apr 2026 12:00:00 GMT</pubDate></item><item><title>HTTP/3 科普：QUIC、0-RTT、队头阻塞、连接迁移，一次讲清楚</title><link>https://rowanliu.com/posts/http3-quic-guide/</link><guid isPermaLink="true">https://rowanliu.com/posts/http3-quic-guide/</guid><description>从前端开发者的视角出发，系统讲解 HTTP/3 背后的核心概念：QUIC 协议、0-RTT 握手、队头阻塞、连接迁移，以及它对实际项目的影响。</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>从自研到开源：使用 Prometheus 实现可扩展的网络探测与 HTTP/3 就绪</title><link>https://rowanliu.com/posts/slack-network-probing-prometheus/</link><guid isPermaLink="true">https://rowanliu.com/posts/slack-network-probing-prometheus/</guid><description>本文翻译自 Slack 工程博客，介绍了 Slack 如何从自研网络探测系统迁移到 Prometheus Blackbox Exporter，并扩展支持 HTTP/3 (QUIC) 探测的全过程。</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate></item><item><title>AI 智能体能构建真正的 Stripe 集成吗？</title><link>https://rowanliu.com/posts/stripe-ai-agents-integrations/</link><guid isPermaLink="true">https://rowanliu.com/posts/stripe-ai-agents-integrations/</guid><description>本文翻译自 Stripe 官方博客，Stripe 构建了一个包含 102 个真实集成任务的基准测试，来检验 AI 编码智能体能否构建生产级别的 Stripe 集成。</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate></item><item><title>One Month with OpenClaw - An Honest Review</title><link>https://rowanliu.com/posts/one-month-with-openclaw/</link><guid isPermaLink="true">https://rowanliu.com/posts/one-month-with-openclaw/</guid><description>After spending 600 RMB per month on AI tools for a month, here&apos;s what I learned about AI assistants and myself.</description><pubDate>Thu, 02 Apr 2026 02:30:00 GMT</pubDate></item><item><title>Daily English Reading: The New Era of Space Exploration</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-31-space-exploration/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-31-space-exploration/</guid><description>B2-level English reading about space exploration, Mars missions, and commercial spaceflight</description><pubDate>Mon, 30 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: The Future of Remote Work</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-30-remote-work/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-30-remote-work/</guid><description>B2-level English reading about remote work trends and digital collaboration</description><pubDate>Sun, 29 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: Mental Wellness in Modern Life</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-29-mental-wellness/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-29-mental-wellness/</guid><description>B2-level English reading about mental health and well-being in contemporary society</description><pubDate>Sat, 28 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: Green Technology and Sustainable Living</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-28-green-tech/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-28-green-tech/</guid><description>B2-level English reading about sustainable technology and eco-friendly lifestyle</description><pubDate>Fri, 27 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: Digital Privacy in the Modern Age</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-27-digital-privacy/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-27-digital-privacy/</guid><description>B2-level English reading article about digital privacy and data protection with audio narration</description><pubDate>Thu, 26 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading - The Science of Sleep</title><link>https://rowanliu.com/posts/daily-english-reading-science-of-sleep/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-science-of-sleep/</guid><description>Today&apos;s B2 level English reading article about the science of sleep, its importance for health, and tips for better rest, with audio and Chinese translation.</description><pubDate>Wed, 25 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading - Digital Detox</title><link>https://rowanliu.com/posts/daily-english-reading-digital-detox/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-digital-detox/</guid><description>Today&apos;s B2 level English reading article about digital detox - why unplugging from technology can improve your mental health and productivity, with audio and Chinese translation.</description><pubDate>Tue, 24 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: The Rise of AI Companions</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-24-ai-companions/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-24-ai-companions/</guid><description>B2-level English reading article about AI companions and how technology is reshaping human connection with audio narration</description><pubDate>Mon, 23 Mar 2026 20:00:00 GMT</pubDate></item><item><title>我的 OpenClaw 探索之路 - 从踩坑到真香</title><link>https://rowanliu.com/posts/openclaw-exploration/</link><guid isPermaLink="true">https://rowanliu.com/posts/openclaw-exploration/</guid><description>从「API 费用爆炸」到「订阅真香」——我是如何走上 OpenClaw 自托管之路的，以及这一周的实战记录</description><pubDate>Mon, 23 Mar 2026 03:39:00 GMT</pubDate></item><item><title>Daily English Reading: Climate Action in 2026: Progress and Challenges</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-23-climate-change/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-23-climate-change/</guid><description>B2-level English reading article about climate change and environmental action with audio narration and Chinese translation</description><pubDate>Sun, 22 Mar 2026 20:00:00 GMT</pubDate></item><item><title>10年前端考古：从 Vue 到 AI，我的 GitHub 学习轨迹</title><link>https://rowanliu.com/posts/github-10years-archaeology/</link><guid isPermaLink="true">https://rowanliu.com/posts/github-10years-archaeology/</guid><description>回顾10年来在 GitHub 上留下的98个仓库，记录从 Vue 新手到 AI 全栈的成长历程。</description><pubDate>Sun, 22 Mar 2026 10:00:00 GMT</pubDate></item><item><title>Daily English Reading: The Science of Mental Wellbeing in Modern Life</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-22-mental-health/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-22-mental-health/</guid><description>B2-level English reading article about mental health and wellbeing with audio narration and Chinese translation</description><pubDate>Sat, 21 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading: How AI is Transforming Our Daily Lives in 2026</title><link>https://rowanliu.com/posts/daily-english-reading-2026-03-21-ai-technology/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-2026-03-21-ai-technology/</guid><description>B2-level English reading article about artificial intelligence with audio narration and Chinese translation</description><pubDate>Fri, 20 Mar 2026 20:00:00 GMT</pubDate></item><item><title>五百年后，他生活在上海</title><link>https://rowanliu.com/posts/five-hundred-years-in-shanghai/</link><guid isPermaLink="true">https://rowanliu.com/posts/five-hundred-years-in-shanghai/</guid><description>一个「大话西游」式的现代都市短篇系列。五百年前他大闹天宫，五百年后他挤早高峰地铁、在出租屋里算外卖、在年会上抽到裁员通知。</description><pubDate>Fri, 20 Mar 2026 08:00:00 GMT</pubDate></item><item><title>Daily English Reading - Forever Chemicals</title><link>https://rowanliu.com/posts/daily-english-reading-forever-chemicals/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-forever-chemicals/</guid><description>Today&apos;s B2 level English reading article about PFAS (forever chemicals) and their impact on health and environment, with audio and Chinese translation.</description><pubDate>Thu, 19 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Daily English Reading - How Sleep Affects Your Brain</title><link>https://rowanliu.com/posts/daily-english-reading-sleep-affects-brain/</link><guid isPermaLink="true">https://rowanliu.com/posts/daily-english-reading-sleep-affects-brain/</guid><description>Today&apos;s B2 level English reading article about how sleep affects your brain, with audio and Chinese translation.</description><pubDate>Wed, 18 Mar 2026 20:00:00 GMT</pubDate></item><item><title>How to Nap Like a Pro - How to Nap</title><link>https://rowanliu.com/posts/how-to-nap-like-a-pro/</link><guid isPermaLink="true">https://rowanliu.com/posts/how-to-nap-like-a-pro/</guid><description>GQ Wellness article about how to nap properly.</description><pubDate>Wed, 18 Mar 2026 06:00:00 GMT</pubDate></item><item><title>English Teacher 4</title><link>https://rowanliu.com/posts/english-teacher-4/</link><guid isPermaLink="true">https://rowanliu.com/posts/english-teacher-4/</guid><description>跟着Roy学习英语已经有很长一段时间了，总的来说我的想法，菲教适合入门，开口，仅此而已。</description><pubDate>Mon, 24 Nov 2025 00:09:00 GMT</pubDate></item><item><title>One year in Shanghai</title><link>https://rowanliu.com/posts/one-year-in-shanghai/</link><guid isPermaLink="true">https://rowanliu.com/posts/one-year-in-shanghai/</guid><description>找到自己的舒适区，然后再稍微努力一点点。</description><pubDate>Tue, 21 Oct 2025 10:00:00 GMT</pubDate></item><item><title>work with AI</title><link>https://rowanliu.com/posts/work-with-ai/</link><guid isPermaLink="true">https://rowanliu.com/posts/work-with-ai/</guid><description>和 AI 一起工作。</description><pubDate>Sun, 24 Aug 2025 20:00:00 GMT</pubDate></item><item><title>Start from Shanghai</title><link>https://rowanliu.com/posts/start-from-shanghai/</link><guid isPermaLink="true">https://rowanliu.com/posts/start-from-shanghai/</guid><description>After six months at Accenture, I am enjoying my work with Angular 18 and learning Agile methodologies. I aim to obtain an AWS SAA certification. Personally, I&apos;ve secured a Shanghai Residence Permit for my child&apos;s kindergarten while balancing family responsibilities as Tina starts a new job.</description><pubDate>Sun, 27 Apr 2025 18:20:23 GMT</pubDate></item><item><title>Angular Upgrade from 13 to 17</title><link>https://rowanliu.com/posts/angular-upgrade-from-13-to-17/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-upgrade-from-13-to-17/</guid><description>复杂的事情可以拆分小的任务，这样更具有可行性。</description><pubDate>Sun, 14 Jul 2024 20:23:19 GMT</pubDate></item><item><title>AI Changed My Life</title><link>https://rowanliu.com/posts/ai-changed-my-life/</link><guid isPermaLink="true">https://rowanliu.com/posts/ai-changed-my-life/</guid><description>ChatGPT彻底的改变了我的工作流程，成为了我的得力助手。</description><pubDate>Mon, 13 May 2024 19:34:43 GMT</pubDate></item><item><title>Crowded Subway</title><link>https://rowanliu.com/posts/crowded-subway/</link><guid isPermaLink="true">https://rowanliu.com/posts/crowded-subway/</guid><description>用身体挡住别人，用手机遮掩尴尬，攒满一身的戾气，影响一天的状态。</description><pubDate>Thu, 01 Feb 2024 08:23:34 GMT</pubDate></item><item><title>Blog in Progress</title><link>https://rowanliu.com/posts/blog-in-progress/</link><guid isPermaLink="true">https://rowanliu.com/posts/blog-in-progress/</guid><description>人生就是不停地折腾，向着更好的自己前进，直到自己累了。</description><pubDate>Sat, 20 Jan 2024 14:19:23 GMT</pubDate></item><item><title>兜兜转转记笔记</title><link>https://rowanliu.com/posts/my-note/</link><guid isPermaLink="true">https://rowanliu.com/posts/my-note/</guid><description>记得小学老师总是提到“好记性不如烂笔头”，我想我从中获益了。</description><pubDate>Mon, 15 Jan 2024 14:19:23 GMT</pubDate></item><item><title>探索 Astro：2024 年前端开发社区的魅力</title><link>https://rowanliu.com/posts/known-astro/</link><guid isPermaLink="true">https://rowanliu.com/posts/known-astro/</guid><description>第一次了解到 Astro 是通过一个Netfily 2023年12月的前端技术栈年度总结，发现它的使用占比升高了很多， 于是就比较好奇，究竟哪个特点吸引了那么多开发者使用它。 首先被它吸引是由于它做出来的网站样式非常酷，不得不说，作为前端我可能格外关注网站的样式。</description><pubDate>Mon, 01 Jan 2024 18:32:00 GMT</pubDate></item><item><title>Annual Summary 19-23</title><link>https://rowanliu.com/posts/annual-summary-19-23/</link><guid isPermaLink="true">https://rowanliu.com/posts/annual-summary-19-23/</guid><description>我的5家公司，我曾经走过的路，虽有坎坷，但总算收获不少。</description><pubDate>Sat, 30 Dec 2023 12:12:12 GMT</pubDate></item><item><title>English Teacher 3</title><link>https://rowanliu.com/posts/english-teacher-3/</link><guid isPermaLink="true">https://rowanliu.com/posts/english-teacher-3/</guid><description>截止到现在 2024年1月22日09:05:19，已经成功推荐5个学生（Conrad, Leo, Klay, A girl, Robert）跟Roy学习。</description><pubDate>Tue, 05 Dec 2023 12:09:00 GMT</pubDate></item><item><title>English Teacher 2</title><link>https://rowanliu.com/posts/english-teacher-2/</link><guid isPermaLink="true">https://rowanliu.com/posts/english-teacher-2/</guid><description>有时自己有种想拯救苍生的情节，那么就从身边的人开始。</description><pubDate>Sun, 03 Dec 2023 10:09:00 GMT</pubDate></item><item><title>English Teacher 1</title><link>https://rowanliu.com/posts/english-teacher-1/</link><guid isPermaLink="true">https://rowanliu.com/posts/english-teacher-1/</guid><description>有的时候过来人的一句话，就会对你的生活产生巨大的改变，感恩每个遇到的人。</description><pubDate>Fri, 01 Dec 2023 10:09:00 GMT</pubDate></item><item><title>[译] Passport 文档（四）操作</title><link>https://rowanliu.com/posts/nestjs-passport-operations/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-passport-operations/</guid><description>Passport 暴露一个 `login()` 函数在 `req`（也有 `logIn()` 这个别名）上，它能够在建立登录 session 时使用。 ```js</description><pubDate>Sun, 22 Nov 2020 00:00:00 GMT</pubDate></item><item><title>[译] Passport 文档（三）基本与摘要</title><link>https://rowanliu.com/posts/nestjs-passport-apis/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-passport-apis/</guid><description>连同定义 HTTP 的身份验证框架，[RFC 2617](http://tools.ietf.org/html/rfc2617) 也定义了基本和摘要认证方案。这两种方案都使用用户名和密码作为凭证来认证用户，并且通常用于保护 API 端点。</description><pubDate>Sun, 15 Nov 2020 00:00:00 GMT</pubDate></item><item><title>[译] Passport 文档（二）提供者</title><link>https://rowanliu.com/posts/nestjs-passport-providers/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-passport-providers/</guid><description>Facebook 策略允许用户使用他们的 Facebook 账户登录一个 web 应用。在内部，Facebook 认证使用 OAuth 2.0 进行工作。 Facebook 支持通过 [passport-facebook](https://github.com/jaredhanson/passpor</description><pubDate>Sun, 08 Nov 2020 00:00:00 GMT</pubDate></item><item><title>[译] Passport 文档（一）入门</title><link>https://rowanliu.com/posts/nestjs-passport-general/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-passport-general/</guid><description>Passport 是 NodeJS 的认证中间件。他的唯一设计目的是：验证请求。书写模块化的、封装代码是一种美德，所以 Passport 将除了验证请求之外的功能都分发给应用程序来实现。关注点分离使代码能够更加整洁、可维护，同时也使 Passport 能够极易集成到应用中。</description><pubDate>Sun, 01 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Passport 相关汇总</title><link>https://rowanliu.com/posts/nestjs-passport-overview/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-passport-overview/</guid><description>权限管理是所有系统都会有的一部分，所以我们要了解一下 nodejs 中权限部分是怎么做的，都涉及哪些模块。 Passport 是一个简单、低调的 nodejs 身份验证中间件。它是弹性的、模块化的，能够集成到任何基于 express 的 web 应用。支持一系列权限策略：账号密码、Facebook、</description><pubDate>Thu, 15 Oct 2020 00:00:00 GMT</pubDate></item><item><title>OAuth 2.0 详解</title><link>https://rowanliu.com/posts/nestjs-oauth2/</link><guid isPermaLink="true">https://rowanliu.com/posts/nestjs-oauth2/</guid><description>OAuth 2.0 是一种授权机制，主要用来颁发令牌。 给快递员一个7天的授权码，这样不提供自己的密码即可让快递员进入小区，这样的授权机制是安全的，当时间到了之后如果仍然有需求可以二次授权，否则就自动过期</description><pubDate>Thu, 01 Oct 2020 00:00:00 GMT</pubDate></item><item><title>Angular 版本升级指南</title><link>https://rowanliu.com/posts/angular-version-update/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-version-update/</guid><description>- Removal of View Engine: Angular 13 fully transitioned to Ivy, removing the older View Engine, which simplifies the framework and improves performanc</description><pubDate>Tue, 15 Sep 2020 00:00:00 GMT</pubDate></item><item><title>Zone.js 原理</title><link>https://rowanliu.com/posts/angular-zone/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-zone/</guid><description>Zone.js, View Engine, and Ivy are all related to Angular, a popular web application framework.</description><pubDate>Tue, 01 Sep 2020 00:00:00 GMT</pubDate></item><item><title>Angular Ivy vs View Engine</title><link>https://rowanliu.com/posts/angular-ivy-vs-view-engine/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-ivy-vs-view-engine/</guid><description>view engine from Angular 2. ivy introduced in Angular 9. https://designtechworld.medium.com/ivy-compiler-vs-view-engine-b607c3897d3d</description><pubDate>Sat, 15 Aug 2020 00:00:00 GMT</pubDate></item><item><title>Angular 变更检测</title><link>https://rowanliu.com/posts/angular-change-detection/</link><guid isPermaLink="true">https://rowanliu.com/posts/angular-change-detection/</guid><description>浏览器渲染：模型 -&gt; 视图。 模型可以是JavaScript中的原始数据类型、对象、数组或其他数据对象。视图可以是页面的表单、段落、按钮，这些页面元素使用 DOM 来表示。</description><pubDate>Sat, 01 Aug 2020 00:00:00 GMT</pubDate></item><item><title>Vue 3 对比默认构建包大小</title><link>https://rowanliu.com/posts/vue3-build-size/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue3-build-size/</guid><description>2.0 项目创建 ```js vue create vue2-demo ``` 3.0 项目创建过程 ```js vue create vue-next-demo</description><pubDate>Mon, 01 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Vue 3 新特性</title><link>https://rowanliu.com/posts/vue3-features/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue3-features/</guid><description>1. 通过yarn dev构建好 vue.global.js 文件 2. 通过http-server或者类似工具，启动一个server环境。 3. 注意 index.js 中的内容和文章有出入。</description><pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate></item><item><title>[译] 2020 年关于 Vue 3 你需要知道的事</title><link>https://rowanliu.com/posts/translate-vue3-2020/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-vue3-2020/</guid><description>现在 VueJS 是最热的框架之一，它在2019的周下载量翻了一倍。 2020年Vue3发布时，它将更加流行。 现在Vue团队的重点在使它能够适合所有开发者，新版本将更强大、更有效率。同时有很多的内部优化将让我们用的更爽。</description><pubDate>Wed, 01 Apr 2020 00:00:00 GMT</pubDate></item><item><title>[译] Vue 3 的开发进展</title><link>https://rowanliu.com/posts/translate-making-vue3/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-making-vue3/</guid><description>来自重写中的下一个版本的 Vue.js 课程。 在去年，Vue 团队一直在 Vue.js 的下一个主要版本工作，我们希望在 2020 年上半年能够发布。（在写这篇文章的时候工作仍在继续）。在 2018 年底 Vue 新版本的想法就已经成型，当时 Vue 2 代码库已经有两年半的历史了。在通用软件的生</description><pubDate>Sun, 01 Mar 2020 00:00:00 GMT</pubDate></item><item><title>[译] Angular 拦截器的 10 种用法</title><link>https://rowanliu.com/posts/translate-angular-interceptors/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-angular-interceptors/</guid><description>有许多种方式使用拦截器，我确定我们大多数人使用的很浅显。在这篇文章中，我将介绍在 Angular 中我最喜欢的 10 种使用拦截器的方式。 我使例子尽可能的简洁。我希望他们能够启发你们去思考使用拦截器的新方式。这篇文章不是关于拦截器教学的，因为已经有很多好的文章了。但是，在开始倒数之前，让我们以一些</description><pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate></item><item><title>[译] core-js@3, babel 展望未来</title><link>https://rowanliu.com/posts/translate-corejs3-babel/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-corejs3-babel/</guid><description>core-js@3 和 babel 补丁相关功能的重大变化详解</description><pubDate>Sun, 01 Dec 2019 00:00:00 GMT</pubDate></item><item><title>[译] Node.js 架构和 12 个最佳实践</title><link>https://rowanliu.com/posts/translate-nodejs-best-practices/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-nodejs-best-practices/</guid><description>虽然 Node.js 才诞生 11 年，但是已经是过去 10 年来最流行的 web 开发框架之一。我是一个终极粉丝，感谢 Node.js，让我能够在浏览器外部写 JavaScript 代码，去创建一个非阻塞的、流畅的、快速的、健壮的、可扩展的服务端应用程序。</description><pubDate>Fri, 15 Nov 2019 00:00:00 GMT</pubDate></item><item><title>React + Ant Design 入门</title><link>https://rowanliu.com/posts/react-ant-design/</link><guid isPermaLink="true">https://rowanliu.com/posts/react-ant-design/</guid><description>要说为啥要学习React，可能是因为难以抗拒Ant Design的美。 根据Ant Design的文档，先尝试quick start，发现没有配置webpack等构件工具的情况下难以运行起来。所以从推荐的umi/dva/antd开始</description><pubDate>Fri, 01 Nov 2019 00:00:00 GMT</pubDate></item><item><title>[译] @vue/cli-plugin-typescript</title><link>https://rowanliu.com/posts/translate-vue-cli-typescript/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-vue-cli-typescript/</guid><description>翻译 @vue/cli-plugin-typescript README， [原 README](https://github.com/vuejs/vue-cli/blob/dev/packages/%40vue/cli-plugin-typescript/README.md)</description><pubDate>Fri, 25 Oct 2019 00:00:00 GMT</pubDate></item><item><title>[译] @vue/cli-plugin-eslint</title><link>https://rowanliu.com/posts/translate-vue-cli-eslint/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-vue-cli-eslint/</guid><description>- **`vue-cli-service lint`** ``` Usage: vue-cli-service lint [options] [...files]</description><pubDate>Sun, 20 Oct 2019 00:00:00 GMT</pubDate></item><item><title>[译] Vue CLI 插件开发指南</title><link>https://rowanliu.com/posts/translate-vue-cli-plugin-dev/</link><guid isPermaLink="true">https://rowanliu.com/posts/translate-vue-cli-plugin-dev/</guid><description>已经提了 merge request [https://github.com/vuejs/vue-cli/pull/5345](https://github.com/vuejs/vue-cli/pull/5345)</description><pubDate>Tue, 15 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 深入响应式原理</title><link>https://rowanliu.com/posts/vue-analysis-responsive/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-responsive/</guid><description>```js &lt;input v-model=&quot;message&quot;/&gt; export default { data(){ message: &apos;&apos; } } ``` 修改message的值，DOM就会改变，究竟如何做到的呢。</description><pubDate>Tue, 01 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 组件化</title><link>https://rowanliu.com/posts/vue-analysis-components/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-components/</guid><description>生命周期函数会被合并为数组。 这种合并思想值得借鉴，本身有一套默认配置，合并传入的配置，达到定制化的目的。 放一张经典的生命周期图 _init src/core/instance/init.js</description><pubDate>Sun, 15 Sep 2019 00:00:00 GMT</pubDate></item><item><title>Vue update 过程</title><link>https://rowanliu.com/posts/vue-analysis-update/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-update/</guid><description>```js src/core/instance/lifecycle.js src/platforms/web/runtime/index.js src/platforms/web/runtime/patch.js</description><pubDate>Sun, 08 Sep 2019 00:00:00 GMT</pubDate></item><item><title>Virtual DOM 详解</title><link>https://rowanliu.com/posts/vue-analysis-virtual-dom/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-virtual-dom/</guid><description>直接操作DOM会影响性能，所以才产生了虚拟DOM。 一个对象，两个前提，三个步骤。 Virtual DOM是一个基本的JavaScript对象，也是整个Virtual DOM数的基本。</description><pubDate>Sun, 01 Sep 2019 00:00:00 GMT</pubDate></item><item><title>Vue render 函数</title><link>https://rowanliu.com/posts/vue-analysis-render/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-render/</guid><description>template ```js &lt;div id=&quot;app&quot;&gt; {{ message }} &lt;/div&gt; ``` render ```js render: function(createElement){</description><pubDate>Thu, 22 Aug 2019 00:00:00 GMT</pubDate></item><item><title>Vue 实例挂载的实现</title><link>https://rowanliu.com/posts/vue-analysis-mounted/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-mounted/</guid><description>Vue中我们是通过$mount实例方法去挂载vm的，$mount方法在多个文件中都有定义，如 ```js $mount src/platform/web/entry-runtime-with-compiler.js</description><pubDate>Thu, 15 Aug 2019 00:00:00 GMT</pubDate></item><item><title>new Vue 发生了什么</title><link>https://rowanliu.com/posts/vue-analysis-new-vue/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-new-vue/</guid><description>src/core/instance/index.js ```js function Vue (options) { if (process.env.NODE_ENV !== &apos;production&apos; &amp;&amp;</description><pubDate>Thu, 08 Aug 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 数据驱动</title><link>https://rowanliu.com/posts/vue-analysis-data-driven/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-data-driven/</guid><description>Vue.js的核心思想是数据驱动。 视图是由数据驱动生成的，我们对视图的修改，不会直接操作DOM，而是通过修改数据。 - 简化代码量 - 利于维护 简洁的模板语法来声明式的将数据渲染为DOM：</description><pubDate>Thu, 01 Aug 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 从入口开始</title><link>https://rowanliu.com/posts/vue-analysis-entry/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-entry/</guid><description>``` src/platforms/web/entry-runtime-with-compiler.js src/platforms/web/runtime/index.js</description><pubDate>Mon, 22 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 源码构建</title><link>https://rowanliu.com/posts/vue-analysis-compile/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-compile/</guid><description>Vue.js源码是通过Rollup构建的，配置在build目录下。 使用Runtime only时，需要借助如webpack的vue-loader工具把.vue文件编译成JavaScript，因为这是在编译阶段做的，所以Runtime only只包含运行时的Vue.js代码，因此代码体积也更轻量。</description><pubDate>Mon, 15 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 源码目录设计</title><link>https://rowanliu.com/posts/vue-analysis-src-structure/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-src-structure/</guid><description>src下的源码 ```js src |-- compiler |-- core |-- platforms |-- server |-- sfc |-- shared</description><pubDate>Mon, 08 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Vue.js 技术揭秘 - Flow</title><link>https://rowanliu.com/posts/vue-analysis-flow/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-analysis-flow/</guid><description>Flow是Facebook出品的JavaScript静态类型检查工具，Vue.js的源码利用了Flow做静态类型检查，当然新版的Vue.js中使用了TypeScript来做这个事情。</description><pubDate>Mon, 01 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Egg.js 入门</title><link>https://rowanliu.com/posts/eggjs-init/</link><guid isPermaLink="true">https://rowanliu.com/posts/eggjs-init/</guid><description>``` npm init egg --type=simple ``` yarn init 不好使。 之前曾经在本地创建过mysql的环境，但是很久不用也就没有启动了，但是这次无论如何也不能成功启动起来。</description><pubDate>Sat, 15 Jun 2019 00:00:00 GMT</pubDate></item><item><title>TypeScript 入门</title><link>https://rowanliu.com/posts/typescript-intro/</link><guid isPermaLink="true">https://rowanliu.com/posts/typescript-intro/</guid><description>JavaScript 类型化逐渐成为了主流。 - [ ] [文档学习](https://github.com/llccing-demo/Typescript-simple)</description><pubDate>Sat, 01 Jun 2019 00:00:00 GMT</pubDate></item><item><title>Three.js 高级几何体</title><link>https://rowanliu.com/posts/threejs-high-geometry/</link><guid isPermaLink="true">https://rowanliu.com/posts/threejs-high-geometry/</guid><description>- ConvexGeometry 凸面体 - LatheGeometry 扫描体 - TubeGeometry 管状几何体 - ExtrudeGeometry 拉伸几何体</description><pubDate>Wed, 15 May 2019 00:00:00 GMT</pubDate></item><item><title>SQL 聚合查询 GROUP BY</title><link>https://rowanliu.com/posts/sql-group-by/</link><guid isPermaLink="true">https://rowanliu.com/posts/sql-group-by/</guid><description>五个常用的聚合函数 - COUNT - SUM - AVG - MAX - MIN - **计算行数** ```SQL SELECT COUNT(*) FROM `Product`</description><pubDate>Wed, 15 May 2019 00:00:00 GMT</pubDate></item><item><title>SQL SELECT 查询基础</title><link>https://rowanliu.com/posts/sql-select/</link><guid isPermaLink="true">https://rowanliu.com/posts/sql-select/</guid><description>```SQL SELECT * FROM Product; ``` ```SQL SELECT product_id AS &apos;商品别名&apos;, product_name AS &apos;商品名字&apos;,</description><pubDate>Wed, 08 May 2019 00:00:00 GMT</pubDate></item><item><title>Three.js 几何体</title><link>https://rowanliu.com/posts/threejs-geometry/</link><guid isPermaLink="true">https://rowanliu.com/posts/threejs-geometry/</guid><description>**常见几何体** - PlaneGeometry 平面 - CircleGeometry 圆形 - ShapeGeometry 塑形 - CubeGeometry 立方体</description><pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate></item><item><title>SQL CREATE 建表</title><link>https://rowanliu.com/posts/sql-create/</link><guid isPermaLink="true">https://rowanliu.com/posts/sql-create/</guid><description>数据库选的是 MySQL，语法是 MySQL 语法。 ```SQL CREATE DATABASE shop; ``` ```SQL CREATE TABLE Product(</description><pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate></item><item><title>Three.js 材质</title><link>https://rowanliu.com/posts/threejs-material/</link><guid isPermaLink="true">https://rowanliu.com/posts/threejs-material/</guid><description>简单材质 - MeshBasicMaterial 网格基础材质 - MeshDepthMaterial 网格深度材质 - MeshNormalMaterial 网格法向材质</description><pubDate>Mon, 15 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Three.js 光源</title><link>https://rowanliu.com/posts/threejs-light/</link><guid isPermaLink="true">https://rowanliu.com/posts/threejs-light/</guid><description>- Three.js库里有哪些可用的光源？ - 什么时候用什么样的光源？ - 如何调整和配置各种光源的行为？ - 如何创建镜头炫光？ - AmbientLight 环境光</description><pubDate>Mon, 01 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Webpack 学习笔记</title><link>https://rowanliu.com/posts/webpack-learning/</link><guid isPermaLink="true">https://rowanliu.com/posts/webpack-learning/</guid><description>书籍的作者是个[孩子](http://resume.wuhaolin.cn/)，像我一样的孩子，不过比我小一岁，大家同是16年毕业，人家是真的优秀。 这本书知识点是挺全的，就是过于简单，没有深入的内容，字里行间透露着青涩，像我一样的青涩。</description><pubDate>Fri, 15 Mar 2019 00:00:00 GMT</pubDate></item><item><title>CSS Grid 布局详解</title><link>https://rowanliu.com/posts/css-grid/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-grid/</guid><description>网格布局是最强大的CSS布局方案。 它将网页分成一个个网格，可以任意组合不同的网格，做出各种各样的布局。 Grid布局与Flex布局有一定的相似性，都可以指定容器内部多个项目的位置。但是，也存在重大区别，</description><pubDate>Fri, 01 Mar 2019 00:00:00 GMT</pubDate></item><item><title>PAC 代理自动配置</title><link>https://rowanliu.com/posts/pac-proxy/</link><guid isPermaLink="true">https://rowanliu.com/posts/pac-proxy/</guid><description>Proxy Auto Config，代理自动配置，PAC 类似配置文件，通过这个文件，浏览器或者其他UA可以对每一个 URL 配置代理服务。 尝试的手机是 小米CC9 Pro，发现不太行，不生效，向参考文章中第一篇作者提问了，但是没有获得有价值的信息。</description><pubDate>Fri, 15 Feb 2019 00:00:00 GMT</pubDate></item><item><title>VuePress 评论系统</title><link>https://rowanliu.com/posts/vuepress-comment/</link><guid isPermaLink="true">https://rowanliu.com/posts/vuepress-comment/</guid><description>没有评论的blog，不是一个好的blog。 当然vuepress是用来做产品使用文档的，而不是blog，所以自身就没有评论交互的基因在，但是这个可以改，已经有人提issue反馈这个问题了。</description><pubDate>Fri, 01 Feb 2019 00:00:00 GMT</pubDate></item><item><title>JavaScript 面试题集</title><link>https://rowanliu.com/posts/interview-js/</link><guid isPermaLink="true">https://rowanliu.com/posts/interview-js/</guid><description>```js a(typeof[1,2]); // object a(typeof &apos;string&apos;); // string var f = true; a(typeof f); // boolean</description><pubDate>Tue, 15 Jan 2019 00:00:00 GMT</pubDate></item><item><title>Lerna Monorepo 管理</title><link>https://rowanliu.com/posts/lerna-monorepo/</link><guid isPermaLink="true">https://rowanliu.com/posts/lerna-monorepo/</guid><description>:::tip 一个管理有多个包的JavaScript项目的工具。 ::: 主要是从 [vue-next](https://github.com/vuejs/vue-next) 项目了解到这个工具，并且发现 [vuepress](https://github.com/vuejs/vuepress) 这</description><pubDate>Tue, 15 Jan 2019 00:00:00 GMT</pubDate></item><item><title>CSS 面试题集</title><link>https://rowanliu.com/posts/interview-css/</link><guid isPermaLink="true">https://rowanliu.com/posts/interview-css/</guid><description>:::tip 利用CSS进行元素的水平居中，比较简单，行内元素设置其父元素的text-align:center，块级元素设置其本身的 margin-left和margin-right为auto即可。设置垂直居中则有些麻烦，现整理记录如下。</description><pubDate>Tue, 01 Jan 2019 00:00:00 GMT</pubDate></item><item><title>组件的重写</title><link>https://rowanliu.com/posts/vue-component-rewrite/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-component-rewrite/</guid><description>现在开发后台管理系统，你不用个组件库都不好意思跟人打招呼。 做了很多后台管理系统，并且一直和UI、测试同学，针对组件库的事甩锅给组件的开发者。 **甩** UI：“这个按钮太大了，改小一点。”</description><pubDate>Sat, 15 Dec 2018 00:00:00 GMT</pubDate></item><item><title>Gzip 压缩优化</title><link>https://rowanliu.com/posts/gzip-compression/</link><guid isPermaLink="true">https://rowanliu.com/posts/gzip-compression/</guid><description>**gzip**是一种文件格式，也是用来压缩、解压文件的应用程序。这个程序是Jean-loup Gailly和Mark Adler创建的，它被用来替代早期Unix系统上的压缩工具，并且计划给GNU（GNU&apos;s Not Unix）用，“gzip”中的“g”就是来自GNU。</description><pubDate>Sat, 01 Dec 2018 00:00:00 GMT</pubDate></item><item><title>Vue CLI 2 迁移到 Vue CLI 3</title><link>https://rowanliu.com/posts/vue-cli2-to-cli3/</link><guid isPermaLink="true">https://rowanliu.com/posts/vue-cli2-to-cli3/</guid><description>- vue-cli3 已经升级到 webpack4，性能优化、构建速度提升。 - 将 webpack 的复杂配置隐藏到依赖中，减少复杂配置。 - eslint 配置，cli3 中加入了 Airbnb 等规则，这次构建使用了 Airbnb 的规则，使代码更加规范，同时会提升 js 的编写能力。</description><pubDate>Thu, 15 Nov 2018 00:00:00 GMT</pubDate></item><item><title>Travis CI 持续集成</title><link>https://rowanliu.com/posts/travis-ci/</link><guid isPermaLink="true">https://rowanliu.com/posts/travis-ci/</guid><description>编码只是软件开发的一小部分，更多的时间往往花在构件和测试。 Travis只支持GitHub，不支持其他代码托管服务。 没有Travis CI的情况下，每次写完需要执行下列操作。</description><pubDate>Thu, 01 Nov 2018 00:00:00 GMT</pubDate></item><item><title>前端架构演进</title><link>https://rowanliu.com/posts/frontend-architecture/</link><guid isPermaLink="true">https://rowanliu.com/posts/frontend-architecture/</guid><description>tips: 前端架构这个单词到底是什么，我迷茫了。 web front end architecture the structure of the web front end</description><pubDate>Mon, 15 Oct 2018 00:00:00 GMT</pubDate></item><item><title>响应式 Web 设计</title><link>https://rowanliu.com/posts/css-responsive/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-responsive/</guid><description>主要是应用在官网的设计， CSS3媒体查询可以让我们针对不同的媒体类型定义不同的样式，当浏览器窗口变化的过程中，页面会根据浏览器的宽度和高度重新渲染页面。 定义浏览器的分隔点，可以参考bootstrap或者其他更细致的方案。</description><pubDate>Mon, 01 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Promise 完全指南</title><link>https://rowanliu.com/posts/es6-promise/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-promise/</guid><description>异步编程的解决方案，比传统的回调函数和事件更合理和强大。 Promise 最早由社区提出、实现，ES6 将其写入了语言标准，统一了用法，原生提供了 Promise 对象。</description><pubDate>Sat, 15 Sep 2018 00:00:00 GMT</pubDate></item><item><title>表单验证的设计模式</title><link>https://rowanliu.com/posts/design-pattern-form-validation/</link><guid isPermaLink="true">https://rowanliu.com/posts/design-pattern-form-validation/</guid><description>缺点： - 多人协作时，会覆盖。 - 创建了全局变量影响性能。 优点：避免了全局变量，一旦出现覆盖现象，会全部覆盖。 问题：当别人想用你的方法时，不能复制一份，或者说别人不能通过new的方式继承这些方法。</description><pubDate>Sat, 15 Sep 2018 00:00:00 GMT</pubDate></item><item><title>Generator 异步应用</title><link>https://rowanliu.com/posts/es6-generator-async/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-generator-async/</guid><description>异步操作，一个任务不是连续完成的，先执行一段，转而执行其他任务，等做好了准备，再回过头执行第二段。 ES6之前的异步操作，大致以下四种： - 回调函数 - 事件监听</description><pubDate>Sat, 01 Sep 2018 00:00:00 GMT</pubDate></item><item><title>面向对象编程 OOP</title><link>https://rowanliu.com/posts/design-pattern-oop/</link><guid isPermaLink="true">https://rowanliu.com/posts/design-pattern-oop/</guid><description>:::tip 面向对象编程（Object-Oriented Programming） ::: 这样将我们将要用到的属性和方法都封装到抽象的Book类里面了,当使用功能方法时,不能直接使用Book类，需要使用new关键字来实例化新的对象。</description><pubDate>Sat, 01 Sep 2018 00:00:00 GMT</pubDate></item><item><title>设计模式开篇</title><link>https://rowanliu.com/posts/design-pattern-intro/</link><guid isPermaLink="true">https://rowanliu.com/posts/design-pattern-intro/</guid><description>Singleton 单例模式 Abstract Factory 抽象工厂模式 Builder 生成器模式 Factory Method 工厂方法模式 Prototype 原型模式</description><pubDate>Mon, 20 Aug 2018 00:00:00 GMT</pubDate></item><item><title>Generator 函数详解</title><link>https://rowanliu.com/posts/es6-generator/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-generator/</guid><description>Generator函数是ES6提供的一种异步变成解决方案,语法行为与传统函数完全不同。 Generator函数有多种理解角度，语法上，可以将Generator函数理解为状态机，封装了多个内部状态。</description><pubDate>Wed, 15 Aug 2018 00:00:00 GMT</pubDate></item><item><title>ES6 函数的扩展</title><link>https://rowanliu.com/posts/es6-function-extension/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-function-extension/</guid><description>- 函数参数的默认值 ```js // demo1 // ES5 function log(x, y) { y = y || &apos;World&apos;; console.log(x, y);</description><pubDate>Wed, 01 Aug 2018 00:00:00 GMT</pubDate></item><item><title>排序算法详解</title><link>https://rowanliu.com/posts/sorting-algorithms/</link><guid isPermaLink="true">https://rowanliu.com/posts/sorting-algorithms/</guid><description>```js /** * 冒泡排序 * 入门级排序 * * 2018年09月16日23:14:17 */ let a = [123, 3, 3, 0, 31, 23, -12, 898, -2, 4, 5, 1, 2];</description><pubDate>Wed, 01 Aug 2018 00:00:00 GMT</pubDate></item><item><title>Drag &amp; Drop API</title><link>https://rowanliu.com/posts/js-drag-drop/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-drag-drop/</guid><description>&lt;iframe height=&quot;265&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;js-basic-drag&quot; src=&quot;https://codepen.io/llccing/embed/GRRePmw?height=265&amp;theme-id=defau</description><pubDate>Sun, 15 Jul 2018 00:00:00 GMT</pubDate></item><item><title>Cookie 详解</title><link>https://rowanliu.com/posts/js-cookie/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-cookie/</guid><description>一个cookie就是存储在用户浏览器中的一小段文本文件。cookie是纯文本的形式。浏览器将其储存并且根据一系列规则在每个请求中将该信息返回致服务器。web服务器可以用cookie来识别用户（定向投放广告）。多数需要登录的站点通通常会在认证通过后设置一个cookie，之后通过这个cookie做校验。</description><pubDate>Sun, 01 Jul 2018 00:00:00 GMT</pubDate></item><item><title>计算盒模型的各种尺寸</title><link>https://rowanliu.com/posts/js-box-model/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-box-model/</guid><description>上来一张图 offsetWidth/offsetHeight 返回元素的宽度/高度，不包含滚动内容的宽度/高度包括元素的边框、内边距和滚动条。 offsetLeft/offsetTop</description><pubDate>Fri, 15 Jun 2018 00:00:00 GMT</pubDate></item><item><title>AJAX 详解</title><link>https://rowanliu.com/posts/js-ajax/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-ajax/</guid><description>Asynchronous JavaScript + XML, while not a technology in itself, is a term coined in 2005 by Jesse James Garrett, that describes a &quot;new&quot; approach to u</description><pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate></item><item><title>arguments 对象</title><link>https://rowanliu.com/posts/js-arguments/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-arguments/</guid><description>箭头函数中不可用，可以使用arguments对象在函数中引用函数的参数。 &lt;iframe height=&quot;265&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;js-basic-argumetns&quot; src=&quot;https://codepen.io/llcci</description><pubDate>Tue, 15 May 2018 00:00:00 GMT</pubDate></item><item><title>apply 与 call</title><link>https://rowanliu.com/posts/js-apply-call/</link><guid isPermaLink="true">https://rowanliu.com/posts/js-apply-call/</guid><description>call方法使用一个指定的this值和单独给出的一个或多个参数来调用一个函数。 apply使用一个指定的this值和一个参数数组或类数组来调用一个函数。 这两个函数的第一个参数都是指定的this值，apply的第二个参数是array，而call的第二个到第N个参数就是第二个到第N个参数。</description><pubDate>Tue, 01 May 2018 00:00:00 GMT</pubDate></item><item><title>Set 与 Map 数据结构</title><link>https://rowanliu.com/posts/es6-set-map/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-set-map/</guid><description>ES6新提供的数据结构Set。类似数组，但是所有成员都是唯一的，没有重复值。 属性 - Set.prototype.constructor: 构造函数 - Set.prototype.size: 返回实例成员总数</description><pubDate>Sun, 15 Apr 2018 00:00:00 GMT</pubDate></item><item><title>ES6 对象的扩展</title><link>https://rowanliu.com/posts/es6-object-extension/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-object-extension/</guid><description>ES6 允许直接写入变量和函数，作为对象的属性和方法，这样的书写更加简洁。 ```js var foo = &apos;bar&apos;; var baz1 = { foo }; console.log(baz);</description><pubDate>Sun, 01 Apr 2018 00:00:00 GMT</pubDate></item><item><title>前端工程师的职业规划</title><link>https://rowanliu.com/posts/frontend-career/</link><guid isPermaLink="true">https://rowanliu.com/posts/frontend-career/</guid><description>1. 分级：初级、中级、资深、架构师、项目负责人 2. 能力层次： 前端能力（50%），后端能力（25%），业务能力（25%）T字型。 3. 综合素质：软技能、项目经验，沟通组织</description><pubDate>Sun, 01 Apr 2018 00:00:00 GMT</pubDate></item><item><title>ES6 字符串的扩展</title><link>https://rowanliu.com/posts/es6-string-extension/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-string-extension/</guid><description>- 字符的 Unicode 表示法 - codePointAt() - String.fromCodePoint() - 字符串的遍历器接口 - at() - normalize()</description><pubDate>Thu, 15 Mar 2018 00:00:00 GMT</pubDate></item><item><title>rem 适配方案</title><link>https://rowanliu.com/posts/css-rem/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-rem/</guid><description>rem和em都是相对单位，CSS3引入rem。 :::tip em作为font-size的单位时，代表父元素的字体大小。**em作为其他属性的单位时，代表自身字体大小。**</description><pubDate>Thu, 01 Mar 2018 00:00:00 GMT</pubDate></item><item><title>let 和 const</title><link>https://rowanliu.com/posts/es6-let-const/</link><guid isPermaLink="true">https://rowanliu.com/posts/es6-let-const/</guid><description>```js &apos;use strict&apos;; { let a = 10; var b = 1; } console.log(a); // Uncaught ReferenceError: a is not defined</description><pubDate>Thu, 01 Mar 2018 00:00:00 GMT</pubDate></item><item><title>常用的布局实现</title><link>https://rowanliu.com/posts/css-layout/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-layout/</guid><description>- 左右布局 - 上左右布局 - 上左中右布局 &lt;iframe height=&quot;265&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;layout-float&quot; src=&quot;https://codepen.io/llccing/embed/vYYyoQM?he</description><pubDate>Thu, 15 Feb 2018 00:00:00 GMT</pubDate></item><item><title>inline-block 详解</title><link>https://rowanliu.com/posts/css-inline-block/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-inline-block/</guid><description>1. 能够设置宽高 2. inline-block各个元素，高度不同时，以文本基线对齐，通过vertical-align:top;实现顶部对齐 &lt;iframe height=&quot;265&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;float vs inlin</description><pubDate>Thu, 01 Feb 2018 00:00:00 GMT</pubDate></item><item><title>Annual Summary 16-18</title><link>https://rowanliu.com/posts/annual-summary-16-18/</link><guid isPermaLink="true">https://rowanliu.com/posts/annual-summary-16-18/</guid><description>16年毕业，初八就到了北京，人生地不熟，如何闲鱼翻身进大厂成为打工人呢。</description><pubDate>Tue, 23 Jan 2018 14:14:00 GMT</pubDate></item><item><title>CSS 选择器</title><link>https://rowanliu.com/posts/css-selector/</link><guid isPermaLink="true">https://rowanliu.com/posts/css-selector/</guid><description>```css body { color: blue; } ``` ```css .btn { font-size: 14px; } ``` ```css .dialog .title {</description><pubDate>Mon, 15 Jan 2018 00:00:00 GMT</pubDate></item><item><title>2018 Web 开发实用指南</title><link>https://rowanliu.com/posts/2018-web-dev-guide/</link><guid isPermaLink="true">https://rowanliu.com/posts/2018-web-dev-guide/</guid><description>偶然间看到的视频，视频中主要介绍现在的web开发比较常用的软件、框架（UI/JS）以及全栈工程师可以掌握的几个点。 &lt;iframe style=&quot;margin: 0 auto;&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/</description><pubDate>Mon, 01 Jan 2018 00:00:00 GMT</pubDate></item><item><title>前端基础设施 (Gulp)</title><link>https://rowanliu.com/posts/gulp-frontend-infra/</link><guid isPermaLink="true">https://rowanliu.com/posts/gulp-frontend-infra/</guid><description>* 自动清除缓存，自动刷新，加速开发调试过程 [browserSync](https://www.browsersync.io/) or [browserSync国内](http://www.browsersync.cn/)</description><pubDate>Thu, 01 Jun 2017 00:00:00 GMT</pubDate></item><item><title>jQuery 源码解读</title><link>https://rowanliu.com/posts/jquery-source/</link><guid isPermaLink="true">https://rowanliu.com/posts/jquery-source/</guid><description>最开始用jQuery是在第一份实习工作时，那个时候感觉jQuery非常nb，$()选择器简直不要特别方便。 现在的工作中也一直在使用，不过在前端框架（Angular、React）异常崛起的现在，加之ES6标准的实施，</description><pubDate>Thu, 01 Jun 2017 00:00:00 GMT</pubDate></item><item><title>jQuery 实践</title><link>https://rowanliu.com/posts/jquery-practice/</link><guid isPermaLink="true">https://rowanliu.com/posts/jquery-practice/</guid><description>有个这样的一个需求，表格中有许多要输入的input，input有长度的控制，和数字控制。 开始想到的做法是用jQuery valudate，一个表单验证插件，后台考虑到表格中所有的input都要进行控制，而jQuery validate需要绑定id，或者每个input加上相应的类来控制，就会变得非常</description><pubDate>Wed, 01 Mar 2017 00:00:00 GMT</pubDate></item><item><title>Bootstrap 入门</title><link>https://rowanliu.com/posts/bootstrap-intro/</link><guid isPermaLink="true">https://rowanliu.com/posts/bootstrap-intro/</guid><description>&lt;iframe height=&quot;265&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;bootstrap tooltip&quot; src=&quot;https://codepen.io/llccing/embed/PooKqvM?height=265&amp;theme-id=0</description><pubDate>Sun, 01 Jan 2017 00:00:00 GMT</pubDate></item></channel></rss>