[
  
  {
    "title": "Mole 出 Mac 版后，用户教会了我做产品",
    "url": "/2026-08-16/mole-mac.html",
    "date": "2026-08-16",
    "categories": ["Share"],
    "summary": "Mole CLI 是去年在泳池边写的几百行代码，Mac 桌面版做出来才三个月。这篇记下真正学到的几件事：AI 多出来的三类垃圾该怎么分、删之前为什么要先看一眼、怎么让它平时不来打扰你、怎么把它做到 70 岁的老爷爷也能用，以及一个人做产品时的取舍。",
    "content": "最近我写了不少关于独立开发的思考，想着汇总一下，就把 Mole 从开源 CLI 做到 Mac 付费软件这一路聊一聊，当时是怎么想的，哪些事情做下来有用。 Mole 的官网是 mole.fit，CLI 在 GitHub 开源，可以先去玩一玩。 去年国庆我在三亚的泳池边写了几百行代码，做了个 Mac 清理的命令行工具 Mole CLI 开源到 GitHub 上，本来只想给自己和同事用。结果不到一年收了 60K star，陆续发了 50 多个版本，121 位来自全球各地的开发者提交过代码，解决掉近 800 个功能建议和 Bug。 其实我一直没太意识到用的人有多少，直到有一次，因为在 README 上挂了两张用 Vercel 加速的图片，流量把账单跑超了，欠了 Vercel 80 刀。当时才反应过来，桌面端可以做了。 之前收到最多的一类邮件来自国外用户，大意都差不多：我父母也用 Mac，我妹妹也用，但他们不会开终端，能不能做一个不用敲命令就能用的版本。这件事拖了挺久，主要是觉得 CLI 本身还没到成熟的地步。等 CLI 跑了大半年，哪些能删、删到什么程度算安全，心里有底了才开始做桌面版，做到自己敢天天用了才发出去。当天晚上十点发布，那一夜通知一直在响，法国、德国各种币种都有，后来为了睡觉把邮箱通知关了。后面几个月一直在加东西，等于是一批用户先掏了钱，再陪着我把它做完。CLI 没有任何变化，照旧开源免费，也会一直更新，付费的只有桌面版。 AI 多出来的三类垃圾 桌面版做出来之后，我自己用得最多的反而是清理，因为这台 Mac 经常跑出空间不足的警告。我全天开着 Claude...",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的具身智能：从小机器狗到 Optimus",
    "url": "/2026-06-07/robot.html",
    "date": "2026-06-07",
    "categories": ["Share"],
    "summary": "4 月份的时候，我用 STM32、ASRPRO、ESP32-C3、舵机和 3D 打印件手搓了一台能听懂话、能走路、能接云端 AI 的小机器狗。跑通之后再看具身智能，很多判断都落到了很具体的地方：串口、PWM、空间、动作、控制频率、执行器、失败样本和量产约束。",
    "content": "太长也要读 今年 4 月我组装了一台小机器狗，做的过程在推特上发过几条，大伙应该都刷到过，从买零件、装结构，到最后它能听懂指令、走两步、还能对话几句。 缘由要从过年那段时间说起，那阵子我天天用 Opus 4.6 写代码，发现很多地方它写得比我好，又快又准，越用越 FOMO，于是就想，要不试试软硬件结合的东西，这块相比纯软件可能还有一点门槛。 真想做了，方向很快就落到具体问题上，传感器怎么读，舵机怎么控，通信怎么兜底，电池、结构件和故障怎么处理。这些都比「做一台机器人」实在，于是我买了 STM32、ASRPRO、ESP32-C3、MG90S 舵机、OLED、DHT11、锂电池，还有一套 3D 打印结构件，凑成一台能听懂话、会趴下、会走路、还能接云端 AI 对话的小机器狗。 真上手才发现，最费时间的反而是各种小细节，MG90S 舵机 4 个里总有一个不太稳，OLED 我带电插一次就直接烧了，又多等了几天零件。直到 DeepSeek 对话、温湿度读取和动作控制都真跑起来，我才慢慢体会到「AI 进入物理世界」是什么意思。 从软件视角看，具身智能很容易被理解成给大模型接上一副身体，但真把线插上、电机转起来、结构件震起来，感受完全不一样，一条自然语言指令一路要变成结构化意图、动作序列、PWM、力矩、电流和接触，每一层都有自己的时间、能量和误差预算，还冒出一堆纯软件里根本不用操心的问题。 发完「你不知道的大模型」那篇文章后，有小伙伴起哄，看来你要写「你不知道的具身智能」了。我一想这台小机器狗刚好能帮上忙，虽然很皮毛，但我想聊的「感知、空间、动作、力矩」这些具身智能的基本概念，它身上其实都有，于是就开始了。 文章前半写这台机器狗的创造过程，后半是我基于公开论文、官方博客、开源项目和第三方资料整理的学习笔记，希望能给在 AI 之外、也想了解具身智能的朋友，多一个工程师视角。 先把小机器狗跑起来 这台小机器狗最后做成了一个低成本异构系统，加起来成本大概 200 多的样子，能听到唤醒词后进入对话，把用户指令交给云端 LLM 做语义理解，再把返回的结构化动作转成 STM32 能执行的舵机控制。 模块 型号/规格 价格区间 负责的事 主控 STM32F103C8T6 ￥5-10 舵机控制、传感器读取、基础动作逻辑 离线语音 ASRPRO ￥15-25 唤醒词和本地关键词识别 联网模块...",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的 GEO：AI 可见性的原理、实践与取舍",
    "url": "/2026-05-01/ai-visibility.html",
    "date": "2026-05-01",
    "categories": ["Share"],
    "summary": "有小伙伴说我的作品被 AI 主动推荐了，想了想居然啥也没做就被收录了，于是花了一个小时把内容结构化做了一遍。做了什么、哪些有效、哪些别碰。",
    "content": "花一小时让 AI 找到你的内容 这几天有好几个小伙伴@我说，我的开源工具在他们问 AI 的时候被主动推荐了，啥也没做居然可以被收录，想着要不花一个小时把内容结构化整一整，应该会更好，于是整好以后，快速发了一个速记推，但是内容结构不清晰，想着大家很感兴趣，那要不就整一个结构清晰的文章便于沉淀和查找。 我很讨厌去刷排名或者生产垃圾内容，更多想着让现有的内容对 AI 更可见，所以这篇文章不会教你投机，而是如何让 AI 更好理解你现有的内容。 去查了一下，发现 AI 搜索跟传统搜索逻辑完全不一样，传统 SEO 拼的是进 Google 前 10，但 83% 的 AI Overview 引用来自排名前 10 之外的页面，AI 看的是结构清晰、来源可靠，跟 PageRank 关系不大。项目不大，但 README 和文档写得还算清楚，大站内容单薄的地方 AI 就能找到我，大概这就是为什么朋友们能搜到 Pake 和 MiaoYan。 AI 搜索增长很快，2025 年上半年同比涨了 527%，ChatGPT 到 2026 年 2 月周活 9 亿，引荐流量转化率大概是传统搜索的 5 倍。但目前仍然只占总引荐流量不到 1%，更像是品牌可见性策略，不是流量策略，值得花一个小时整一整，但不值得花一周，因为产品本身才是你的核心竞争力，这个不是。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的 AI Coding：非技术人的上手、场景与实战",
    "url": "/2026-04-26/ai-coding.html",
    "date": "2026-04-26",
    "categories": ["Share"],
    "summary": "写给产品、业务、运营的 Claude Code 实战指南。不讲 prompt 工程，讲怎么真正用起来：CLAUDE.md 怎么写、Skills 怎么沉淀、Plan 模式什么时候用、哪些场景适合让 Claude Code 干。",
    "content": "太长不读 上个月在公司里给产品和业务的小伙伴分享了下如何上手 AI Coding，加上最近又发了条推特，聊到不少同学因为订阅门槛没机会用上一线 AI Coding 工具，方法和习惯不花钱就能先学，索性把上手这部分整理出来。不少人用 Claude Code 其实是卡在使用命令行的第一步，看到只有字符的终端会觉得是给程序员用的，自己肯定搞不定。其实门槛没想象的高，会用豆包这类对话框 AI 的人花点时间也能上手，剩下的就是慢慢习惯把执行权交给它。 等你用顺手后会发现它像个什么活都接的能干助手，跑后台数据、写解决你问题的小工具、把乱七八糟的文档拼成简报、做原型、整理销售报表都能干。之前会不会写代码不是关键，等你有意识把项目背景写进 CLAUDE.md、把需求写得足够精确、会去想着沉淀几个 Skill 把重复动作打包，那你其实就称得上入门了，这篇文章主要是想带非技术同学也用上我最爱的 Claude Code。 第一道坎是命令行 不写代码的同学习惯了豆包这类对话框 AI，第一次装 Claude Code 都会有点不适应。以前是个来回搬运的过程，你描述需求、它生成代码、你复制粘贴到别处去试，现在变成 Claude Code 直接在终端运行，搬运这一步省掉了。 如果你没用过终端，推荐我做的 Kaku，它是专门为 AI Coding 做的终端，装好就能用，不用折腾配色和字体。深色浅色跟着系统走，分屏按 Cmd + D，文件管理器按 Cmd + Shift + Y 直接显示出来。对刚上手的人最友好的是内置了 AI 辅助：命令跑报错了会自动给修复建议，记不住命令在前面加个 # 写中文也能生成。 安装 Claude Code 也只需一条命令，详见 官方文档，然后进项目文件夹输入...",
    "lang": "zh-CN"
  },
  
  {
    "title": "在 AI 时代，我是如何深入学习一个技术领域的",
    "url": "/2026-04-06/learn.html",
    "date": "2026-04-06",
    "categories": ["Share"],
    "summary": "想聊聊在 AI 时代我是怎么深入学一个新领域的，从收集资料、筛选阅读、写大纲，到 AI 辅助精简、自读发布，我把整个过程当代码一样组织起来。",
    "content": "\n\n想和大伙聊聊，在 AI 时代我是怎么深入学习一个技术领域的。没有 AI 之前，更多是看书、翻这个领域国内外有名的人的博客，然后摘抄记录到笔记本，速度挺慢，但很有学习的乐趣。比如当时学 WebGL，学懂一个东西差不多要半年空闲时间，慢但快乐。\n\n有了 AI 之后，我还是很讨厌网上那种「3 分钟教你看完百年孤独」，也不喜欢短剧和倍速看剧的方式，更多还是挑好的看，宁愿慢一点、真正搞懂，也不愿意刷一堆摘要最后脑子里什么都没剩。\n\n不过最近写「你不知道的 Claude Code」和 Agent 系列，除了自己懂的部分，还有大量不太清楚的领域。好在之前收藏了不少相关资料，刚好借这个机会清库存，全部搞懂再输出出去。一直觉得，看了多少、听了多少、输入了多少，其实不是最重要的，更在乎你能输出多少，能清楚说出来、写下来、整理发布的，才真的是你自己的。\n\n前不久给自己挖了个深坑，研究大模型的训练流程，目标是确保非专业的人也能听懂，探索了两周。这个经历刚好可以分享出来，成文也差不多了，很快会发出。\n\n我会把整个学习过程当做写代码一样组织起来。收集高质量资料是第一步：近几年的精品论文、各大模型厂商发布的关键技术博客、X 上模型负责人写的文章、斯坦福等高校近两年的相关课程，还有经典的手搓大模型代码仓库，这些都是我的资料来源。然后借助工具自动化完成下载、转 Markdown、清洗、整理，按分类放进这次研究专用的仓库，在正式开始读之前，先把整个信息环境弄干净。\n\n\n  \n\n\n接下来开始读和筛选。自己看得懂的内容，认真读一遍，觉得价值不大的就删掉，好的留下。看不懂的，直接让 Claude 帮我理解，更复杂的翻译成中文再读。代码能本地跑的就跑起来，不能跑的就看结构，理解核心思路。这个阶段我不追求完全掌握每个细节，只要对这个领域有真实的认知、摸清楚技术原理就够了。通常到这里，原来一半的内容都会被删掉，这是正常的，筛选本来就是学习的一部分，留下对的东西比读更多更重要。\n\n到了这个阶段，对这个领域大概有认知了，就可以开始给文章写大纲，想清楚要讲什么、每个部分对应的资料来源、内容的顺序，以及读者读完之后应该得到什么。文章是写给别人看的，需要知道对方的认知水平，哪里会卡住，需要什么程度的解释，这和做汇报差不多，始终在想受众是谁。\n\n然后就是苦力活了，和大学考试前复习很像，逐节把内容填充完整，补上缺少的解释，把整体跑通。这一步下来通常会得到一篇很长、有些啰嗦的初稿。这时候 AI 就很有用了，可以让它在不改变原意和语气的前提下，帮我去掉无用的啰嗦、接顺读着断开的地方、找出逻辑不完整的地方，以及还需要补充哪些背景知识。这个过程里 AI 不是在替我写，是在帮我把文章理顺、去掉重复、找出逻辑上的缺口，往往又能学到一些原来遗漏的东西。\n\n这也是为什么我觉得 AI 在你有真实产出的时候才最有用。如果只是让它帮你总结，很容易感觉自己学了很多，但脑子里其实没什么扎实的。当你认真在写一篇东西、解释一个概念、做出一个成品的时候，AI 才真正有帮助，它放大的是你自己已经在做的事情。\n\n初稿整理好之后，自己再读一遍，不是让 AI 读。AI 只是工具，一旦让它代替你的判断，这件事就没意思了。自己读的过程中继续修改调优，和写代码自测那种感觉很像，不断找薄弱点、修毛边、改读起来不对的地方。读完两遍，基本感觉差不多了，然后就可以发出来给大伙看。\n\n\n\n这也是我做 Waza 的原因，一个围绕我实际工作方式构建的开源 Skills 集合。其中有一个叫 /learn，就是专门为这个流程设计的：收集资料、筛选、写大纲、填充内容、AI 辅助优化、自读发布，整个过程连成一条线。\n\n肯定有小伙伴担心写了没人看，所以不想发，甚至干脆不写。我不觉得这是个好理由，只要内容有意义，自然会有读者，不一定立刻，不一定很多，但有意义的东西很少会被浪费。「没人看」大多数时候只是懒得动笔的借口。\n\n这整个过程让我有个更清楚的感受：在 AI 时代，学习速度确实快了很多，但深度不会自动到来。AI 可以帮你收集、翻译、清洗、整理、对比、精简，把整个过程工业化，但真正的深度还是取决于你的判断、你的耐心、你的标准，以及你愿不愿意把输入转化成输出。这一点没有变，现在反而更重要了。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的大模型训练：原理、路径与新实践",
    "url": "/2026-04-03/llm.html",
    "date": "2026-04-03",
    "categories": ["Share"],
    "summary": "很多人会把模型升级理解为参数变大，但线上体感差异常常出在后半段训练和发布链路。这篇从预训练一路讲到蒸馏上线，重点看数据工程、系统配方、后训练、评测奖励和 Agent 训练怎么一起影响最终表现。最后会看到，模型变强通常是权重、训练链路和部署决策共同作用的结果，不只是参数规模。",
    "content": "太长也要读 在写完《你不知道的 Claude Code：架构、治理与工程实践》、《你不知道的 Agent：原理、架构与工程实践》后，我想着继续来写第三篇，这次打算挑战下自己来梳理一下大模型训练到底怎么回事，这篇文章争取让非专业背景的人也能读得懂。 2026 年来看大模型效果真正拉开差距的地方，慢慢不再是预训练本身了，而在它更后面的那一大段：后训练、评测、奖励、Agent 训练、蒸馏，每一个步骤都在影响用户实际感受到的效果。你发现某个模型突然变强了，背后可能是这几块一起优化到位了，而非单一因素导致。 下文按大模型训练链路顺序来讲，重点放在厂商怎么通过后半段训练栈来提升最终上线效果。 大模型训练其实是一条流水线 过去几年，一般会用参数、数据、算力的堆积来解释模型进步，但很多用户真正感受到的提升，并不是来自再多训一点基础语料，而是来自预训练后面那整套训练流程。模型怎么说话、怎么听指令、怎么推理、怎么用工具，这些都不是多喂一点互联网文本就能自然长出来的。 InstructGPT 当年给过一个很直接的例子：一个只有 1.3B 参数、做过对齐和偏好优化的模型，在人类偏好评测里能赢过 175B 的 GPT-3，参数量差了两个数量级，用户最后却更喜欢那个小很多的版本，训练后半段是真的会改写用户感知。 训练过程其实是一条流水线，数据、算法、系统、反馈这几层高度耦合，一层变化通常会传导到其他层，2026 年的模型能力和产业价值，也越来越集中在预训练后面的几层。 层 这一层真正在优化的 用户通常感知到的 预训练 知识覆盖范围、表示质量、规模效率 模型变聪明了 数据工程 数据分布、质量、去重、合成监督 为什么这个模型代码/数学/长文档更强 系统与架构 吞吐、显存、上下文长度、活跃参数、成本 为什么支持 128K 上下文或能在单卡跑 后训练 指令遵循、风格、拒答行为、工具使用 这个助手用起来更顺手 评测与奖励 什么叫好的、安全的、稳健的行为 这个模型感觉更可靠 蒸馏与部署 延迟、成本、专用化、在线持续改进 为什么上线版本和发布版本有差异 这也是我们平时为啥感觉豆包不太去争排名，但大家日常用起来却更符合心意的原因，是后训练做到位了。 这六层只是为了看分工，下图的九个阶段是更详细的版本：原始数据和系统配方单独拆开，Agent harness 和 Deployment 也是后半段的细分。还有两条反馈回路贯穿始终：生产流量回到数据工程，离线评测结果回到预训练。 预训练只是模型底座...",
    "lang": "zh-CN"
  },
  
  {
    "title": "杀死那个手工程序员",
    "url": "/2026-03-30/kill.html",
    "date": "2026-03-30",
    "categories": ["Thought"],
    "summary": "标题来自 12 年前我很喜欢的一首万青的歌《杀死那个石家庄人》的改写，虽然歌里写的不是一回事，但那种看着熟悉世界一点点被替换掉的感觉，还真有点像。",
    "content": "标题来自 12 年前我很喜欢的一首万青的歌《杀死那个石家庄人》的改写，虽然歌里写的不是一回事，但那种看着熟悉世界一点点被替换掉的感觉，还真有点像。 好多年没坐公交了，上次去太子湾，因为景区限行，只能把车停在外面，坐景区的免费接驳车进去。 前排有个小女孩一路都在刷那种 AI 生成的短视频，画面很粗糙，内容也很假，滑到下一个居然还是差不多的东西，她却看得津津有味，每个视频的点赞居然也都不低。看到这一幕的时候，我甚至有点难受，会忍不住想，以后我的小孩是不是也会在这种粗制滥造的 AI 内容里慢慢长大，最后连什么是真正美好的东西都越来越难分辨。 有了 AI 之后，很多东西的生产一下子就变简单了，做内容简单了，做软件也简单了。以前做一个东西出来，往往要花不少时间反复琢磨，要真的解决很多问题，最后才敢拿出来。现在很多环节一下就被抹平了，写点东西很容易，做个产品也很容易，花钱买 Token，问问 AI，拼个流程，套个界面，很快就有一个能跑的东西出来。 今天也看到有人说，两天就可以复刻一个 Claude Code，我是既信又不信。最近语音 AI 软件一下冒出来几十个，看了看体验都还不错，甚至豆包都来卷这个了。Claude Code 的套壳客户端最近也见了不少，说实话有些做得还挺好用。 程序员很多以前看着要专业能力、要学习门槛、要长时间积累的东西，正在很快变成一种到处都是的供给。以后最不缺的，可能就是那种看起来像个产品的东西，能用，能跑，也好看。你当然还是可以做得再快一点，再好用一点，或者再多包一层，这些可能还是有价值的，只是这种价值会越来越容易被 AI 的发展追平。 上次吃饭时和同事聊到一个有意思的话题，我说我最近一年特别喜欢听磁带，感觉每一首歌都很耐听。为什么以前的磁带、CD、电视节目，甚至很多老书，整体会让人觉得质量更高一点，原因其实很简单，以前生产和分发都很重。你想发专辑，先得把作品认真做好，然后才有可能去做上万个磁带出来，不然卖不出去，下次公司可能就不推你了。想出一本书，也不是写完随手一发，就能立刻推到很多人面前。以前光做出来这一步，就已经筛掉很多东西了。 现在发歌传个平台就行，写东西发个公众号就行，做软件有了 AI 之后也差不多。AI 甚至可以直接帮你把代码传到你以前望而却步的 GitHub 上，顺手把 Release 的 CI 都配好。很多过去要靠长期积累才能跨过去的坎，现在被工具一下填平了，于是整个世界也就慢慢被大量差不多、看起来也能用的东西占满了。 麻烦的还不只是质量往下走，更是时间久了，大家对质量的感觉也会一起往下走。粗糙的东西越多，传播越广，再叠加搞钱的驱使，人对好东西的判断会慢慢被带偏，最后慢慢习惯的，就是快刺激、快反馈、快满足。 再回头看那个小女孩刷视频，让人不舒服的地方就在这里，她看的不只是几个粗糙视频，她从小看到的，可能就是一种越来越低成本、越来越高频、越来越空的东西。 可以肯定的是，写代码这件事现在其实也走到这个阶段了。以后普通小白可以用 AI 写出满足自己需求的产品，产品经理也可以用 AI 做出以前要拉上程序员一起搞的东西，那么真正的工程师以后还能做什么，这件事其实得认真想一想。 最近听说不少互联网大厂的老板也开始不眠不休地 Vibe Coding，一个下午也能做出一个自认为可用的 demo，甚至非常沉迷。这件事对一线干活的人影响可能会很大，老板跑通代码后会感觉写代码其实也就那么回事。之前要 6 个月的东西，现在是不是 1 个月就行了，之前要...",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的 Agent：原理、架构与工程实践",
    "url": "/2026-03-21/agent.html",
    "date": "2026-03-21",
    "categories": ["Share"],
    "summary": "研究完 Claude Code 的架构之后，发现自己对 Agent 底层的理解还不够深入，加上团队在 Agent 方向已经有不少业务落地，但一直缺少一份系统梳理，所以又补了一轮资料、开源实现和轻量实验，把控制流、上下文工程、工具设计、记忆、评测和安全这些问题重新串了一遍。",
    "content": "太长不读 在写完「你不知道的 Claude Code：架构、治理与工程实践」之后，发现自己对 Agent 底层的理解还不够深入，加上团队在 Agent 方向已经有不少业务落地经验，一直缺少一份系统梳理，所以我又把资料、开源实现和自己写的代码一起过了一遍，最后整理成了这篇文章。 这篇文章主要讲 Agent 架构里几块最影响工程效果的内容，包括控制流、上下文工程、工具设计、记忆、多 Agent 组织、评测、追踪和安全，最后再用 OpenClaw 的实现把这些设计原则串起来看一遍。 整理下来，有几处判断和我原来想的不太一样，更贵的模型带来的提升，很多时候没有想象中那么大，反而 Harness 和验证测试质量对成功率的影响更大，调试 Agent 行为时，也应优先检查工具定义，因为多数工具选择错误都出在描述不准确，另外，评测系统本身的问题，很多时候比 Agent 出问题更难发现，如果一直在 Agent 代码上反复调，效果未必明显，读完这篇，这几个问题应该能有些答案。 Agent Loop 的基本运转方式 Agent Loop 的核心实现逻辑抽象后其实不到 20 行代码： const messages: MessageParam[] = [{ role: \"user\", content: userInput }]; while (true) { const response = await client.messages.create({...",
    "lang": "zh-CN"
  },
  
  {
    "title": "你不知道的 Claude Code：架构、治理与工程实践",
    "url": "/2026-03-12/claude.html",
    "date": "2026-03-12",
    "categories": ["Share"],
    "summary": "我把最近半年用 Claude Code 积累的一些实际经验分享给大伙，两个账号每月氪金 40 刀。这篇文章主要围绕上下文管理、Skills、Hooks、Subagents、Prompt Caching 以及 CLAUDE.md 的设计展开，重点讨论怎样让协作过程更稳定、更可控，偏工程师技术视角的最佳实践，欢迎大伙一起交流。",
    "content": "太长不读 今天这篇来自最近半年深度用 Claude Code 的实际踩坑，两个账号每月 40 刀，算是交了点学费。 刚开始也把它当 ChatBot 用，后来很快发现不对劲：上下文越来越乱、工具越来越多效果越来越差、规则越写越长却越不遵守，折腾一段时间，研究了 Claude Code 本身之后才搞清楚问题在哪。 最直接的理解方式，是把 Claude Code 拆成六层来看： 层 职责 CLAUDE.md / rules / memory 长期上下文，告诉 Claude “是什么” Tools / MCP 动作能力，告诉 Claude “能做什么” Skills 按需加载的方法论，告诉 Claude “怎么做” Hooks 强制执行某些行为，不依赖 Claude 自己判断 Subagents 隔离上下文的工作者，负责受控自治 Verifiers 验证闭环，让输出可验、可回滚、可审计 单独优化任何一层都会在其他地方出岔子：CLAUDE.md 写太长，上下文先污染自己了；工具堆太多了，选择就搞不清楚了；subagents 开得到处都是，状态就漂移了；验证这步跳过了，出了问题根本不知道是哪里挂的。 它底层是怎么运行的 Claude...",
    "lang": "zh-CN"
  },
  
  {
    "title": "连龙虾都不会装的人，怎么会用龙虾呢？",
    "url": "/2026-03-07/openclaw.html",
    "date": "2026-03-07",
    "categories": ["Share"],
    "summary": "今天看腾讯大厦装龙虾这件事，挺有感触。最近很多大厂都在疯狂让一线非技术员工去安装龙虾，网上甚至真有 500 上门安装服务。大家都在拼命找使用场景，拼命要求落地，拼命证明这个东西已经重要到不能错过，整个过程让我有一种很强的赛博科技折叠感。",
    "content": "今天看腾讯大厦装龙虾这件事，挺有感触，有点儿《龙虾大跃进》的感觉。 最近很多大厂都在疯狂让一线非技术员工去安装龙虾，网上甚至真有 500 上门安装服务。大家都在拼命找使用场景，拼命要求落地，拼命证明这个东西已经重要到不能错过，整个过程让我有一种很强的赛博科技折叠感。 看到一句话很有意思，连龙虾都不会装的人，怎么会用龙虾呢。再往前一步，连基本使用都没有建立起来，却要先做出完整场景，做出结果，做出价值证明，这本身就更难。 这背后有两个东西叠在一起。一个是错觉，很多老板看了太多视频号切片，被各种夸张叙事和万能案例反复轰炸以后，真的会产生一种幻觉，觉得这东西什么都能做，哪里都能接，谁都该装，装了就应该立刻有产出。另一个是焦虑，大家又都怕错过这一波，于是开始用行政动作去推动，用集体焦虑去代替真实需求。 所以你会看到一种很强的反差。一边口号非常大，仿佛人人都要进入 AI 原生时代。另一边是大量人连自己到底有什么事情值得交给它做都说不清楚。这个反差后面只会越来越强，而且会越来越荒诞。 因为工具从来不会靠安装产生价值，工具只会靠任务密度、流程清不清楚、结果能不能看出来来产生价值。没有连续任务，没有 SOP，没有线上完成的条件，没有明确的输入输出，再强的东西放在那里也只是一个图标。它不会因为被装上了，就自动长出场景。 所以我一直觉得，龙虾并不适合所有人。 它很适合指挥者，很适合一人公司，也很适合那种脑子里一直有事情要往上做、能把工作拆成步骤、并且很多事情都能在线上完成的人。尤其是你用过 skills 和 tools，也知道 AI 本身的能力边界，能把流程串起来、把场景搭起来、把事情一步步做完，这种时候就会非常合适。 比如对我来说，这个场景就很自然。特别是有大量事情要往上做，但是刚好不在家里不在公司，在外带着手机，或者不方便开电脑的时候，我会让我的两个 nanobot 去检查我的开源产品 issue，产出技术方案，然后另外一个去 review、去提交，一气呵成。让我早上上班坐车路上，就把事情优雅做了，真是方便。 但是对于一个平时本来就没有什么工作要在外面完成的人，甚至回到家连电脑都不想开的人，怎么可能硬有场景去做事情。吃好玩好就很舒服啦。没有场景就是没有场景，真的不用焦虑。 我觉得这一波最容易被放大的，不是能力差距，是场景差距。有场景的人会越用越顺，越跑越快，最后像多了几个分身。没有场景的人，就很容易在概念、教程、案例、视频里来回打转，最后除了多装几个软件，什么都没变。 很多人今天最大的问题，也不是没装龙虾，而是把装了某个工具，当成自己已经进入了 AI 时代。其实真正的分水岭，一直都在任务理解、流程设计、结果判断这些地方。你到底有没有持续的问题要解决，你能不能把问题拆出来交给系统，你能不能判断结果是不是对，这些才决定了你能不能真正从 AI 里拿到价值。 所以无需焦虑。没有场景的时候，硬装龙虾意义不大。 真想体验这代 AI 到底强在哪里，不如花 20 刀去包一个 Claude Code，或者更有趣一点，再包一个 ChatGPT 会员，用 GPT 5.4 去帮你处理一个你自己真觉得很难的事情，产出方案，推进执行，体验一次这种简单、高效、直接把问题解决掉的过程，这比装一个龙虾好太多了。 龙虾适合有场景的人，适合指挥者，适合一人公司，适合那些可以把流程 SOP 化、线上化、一步步做完的人。它当然很强，但它不是靠被安装来证明自己强，是靠替你完成工作来证明。 很多人今天在装的是龙虾，真正更该先想明白的是一句话，我到底有什么问题，值得交给 AI 去解决。 这件事，可能比装什么都重要。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "比特币下跌时，我重新理解了大教堂与赌场",
    "url": "/2026-02-01/money.html",
    "date": "2026-02-01",
    "categories": ["Share"],
    "summary": "最近比特币从 12w 的高点回落到 7w 多，市场情绪再次走向恐慌。每当市场下跌时，我反而更容易去想，哪些东西更像赌场，哪些还在慢慢修建大教堂。价格的剧烈波动，更多来自赌场那一侧，而真正决定长期回报的，往往需要多年甚至几十年的持续投入。",
    "content": "最近比特币从 12w 的高点回落到 7w 多，市场情绪再次走向恐慌，每当市场下跌时，我反而更容易去想一个更基础的问题：市场里，哪些东西更像赌场，哪些还在慢慢修建大教堂。 价格的剧烈波动，往往来自对短期反馈的博弈，而真正决定长期回报的，通常需要多年甚至几十年的持续投入，在很长一段时间里看起来都不那么显眼。 刚好今天在 YouTube 看了脑总的 《识别下一个万亿机会的关键：超越性》 视频，对这个隐喻有了更系统的理解，很多投资分歧，并不来自信息差，而是来自认知层级的不同。你站在追逐价格的位置，自然只能看到筹码和赔率；你站在长期结构的位置，看到的则是时间、信仰和协作。 我想着把里面的一些观点记录下来，集合自己的投资思考写成一篇文章，希望可以给亏损的小伙伴一些心理按摩。 投资的三个认知层次 第一层是动物性认知：他完全受本能驱动，追涨杀跌，依赖即时反馈，像在赌场里寻找刺激，这种认知关注的是短期多巴胺，而不是长期价值，结果往往是成为市场中被反复收割的韭菜。 第二层是理性认知：这一层的人会开始阅读财报、计算估值、建立模型，关注收入、利润、现金流和护城河，这是传统价值投资的基础。这条路径是必要的，但并不充分，过度理性容易让人陷入路径依赖，像当年的诺基亚，能够精确计算触屏手机在当时成本高、体验不成熟，却完全看不见苹果正在重新定义手机这个物种本身。 第三层是超越性认知：这是脑总视频中反复强调的一点，投资者需要穿越财务数据，去识别一个企业是否承载着超越短期利润的使命，真正的使命可以凝聚长期的大规模协作，吸引顶级人才，因为这群厉害的人不缺钱但缺工作意义感，这样的企业也能把用户从消费者转化为信徒，人们购买的不是产品，而是认同感和归属感，他们并不只是经营生意，而是在推动一个足够宏大的长期叙事。 那么怎么判断一个企业的使命是否是真使命呢？ 并不是所有愿景都配得上被称为使命，有很多是骗投资人的，判断他是否成立，可以看这三个维度： 创始团队是否愿意牺牲短期的回报：真正的使命一定伴随真实的代价，创始人和核心团队是否愿意为长期目标，主动放弃短期金钱回报，是最直接、也最可信的信号。 是否愿意长时间一直坚持：真正的使命通常有几十年的历史传承，而不是融资材料里临时拼出来的愿景，很多看似突然成功的公司，背后其实都有极长的思想和技术积累周期。 如果这家公司消失，世界是否会有影响：如果这家公司消失，世界是否会因此失去重要价值，它创造的社会价值，是否明显大于它攫取的商业利润，真正的大教堂，会让整个生态因它的存在而受益。 价值投资还是之前的那一套吗？ 我认为价值投资需要在 AI 时代发生一些改变，记得之前把我的持仓发给 Claude 分析，我还自以为自己是价值投资，结果他说你这完全不是价值投资，而是「高认知驱动的成长趋势投资 + 期权与杠杆放大的进攻型风格」，一下子把我拉回来了。 基于刚刚聊的框架，价值投资并没有失效，而是在 AI 时代被迫升级了。传统价值投资强调护城河，而超越性认知更关注一种灯塔效应，即一家企业是否照亮了一个全新的价值空间。 从计算价值，转向识别叙事，经典的价值投资是在用折价买确定性，而超越性认知是在判断哪些一块钱的东西，未来可能变成一百块，因为它们往往指向一个还没有被完整定价的新空间。 市场波动反而是朋友，当比特币下跌，当市场质疑长期投入巨大却短期回报模糊的公司时，往往正是超越性认知与主流理性认知分歧最大的阶段，也是最值得冷静观察和深入研究的窗口。基于这一点，我依然看好比特币，它更像一项需要时间验证的长期叙事，而不是一笔需要频繁进出的交易。 需要陪伴有超越性特征的企业 投资大教堂建造者，更像陪伴而不是交易,你需要农夫式的耐心，接受长期没有反馈的阶段。散户更像植物，渴望每天的阳光和价格变化，顶级投资者更像修建大教堂的人，思考的是几十年甚至百年的尺度，生态位越高，忍受饥饿和无反馈的能力越强。 当时看完脑总那个视频后，我自己也在琢磨，现在的什么公司才能称得上具备超越性特征的功能呢？想来想去有这几个很好看的，特别是马斯克的公司，我很期待 SpaceX 今年的上市。 SpaceX：坚持火星殖民这一终极使命，用第一性原理重构航天成本，建立了运力层面的垄断，他真正的价值不在于某一次发射带来多少收入，而在于这条技术路线，是否最终把人类推向跨行星生存这一长期目标。 Tesla：正在试图挣脱制造业固有的线性增长约束，把大量资源持续投入到全自动驾驶和具身智能上，本质上他是在押注 AI 对物理世界生产力的重构，是否真的会以指数级方式发生。 Bitcoin：构建的是一套基于数学共识而非中心化信用的价值网络，它证明了即使没有 CEO、没有财报，仅依靠代码和共同信念，也可以支撑一个万亿美元级别的经济体，每一次剧烈回撤，更多是在挤出短期投机者，同时加固长期共识。 NVIDIA：用了将近十五年的时间，持续推进软硬一体的计算生态，逐步把计算范式从通用计算引向加速计算，最终站在了 AI 时代底层基础设施的位置上。 Palantir：用十七年的非上市周期打磨核心系统，专注解决最复杂、最关键的数据问题，在国防与核心产业中建立了难以替代的生态位，它的价值并不体现在季度营收，而体现在是否成为数字世界的基础能力。 OpenAI/Anthropic：以...",
    "lang": "zh-CN"
  },
  
  {
    "title": "243 个工程师，最近一年买到的好东西",
    "url": "/2026-01-24/good.html",
    "date": "2026-01-24",
    "categories": ["Share"],
    "summary": "上周为了给团队同学买年夜饭礼物，在 X 上随口问大伙，最近一年，你买过最称心如意的东西是什么，或者说假如需要推荐一个你最想推荐的东西会是什么？可以是电子设备、软件、生活用品都可以。",
    "content": "上周为了给团队同学买年夜饭礼物，在 X 上随口问大伙，最近一年，你买过最称心如意的东西是什么，或者说假如需要推荐一个你最想推荐的东西会是什么？可以是电子设备、软件、生活用品都可以。 没想到收到了 243 位小伙伴的回复，很有生命活人感，我非常喜欢这样的交流，评论区里大家聊得非常热闹，翻完看了几遍，发现了不少好东西，推荐的既有很刚需的，也有非常接地气的生活好物。 简单把推荐按照热度简单整理了一下，在保留大伙原始评价的基础上，仅对标点和重复表达做了微调，每一行都以产品名称开头，确保原汁原味，希望可以给大家平时想买点东西但不知道买啥提供一些参考。 盖地虎地漏芯：之前看豆叔推文买的盖地虎地漏芯，原来用过的几款水封的满满的会有生物膜和长头发缠住，排水越来越慢，要清洁的频率越来越高，这款是真的没有一次被堵过，排水一直很畅快，观察了一阵给全家其他的地漏都换了。 毛巾加热架：我在 X 上还没见到过有人推荐这个，可连接手机设置定时的毛巾加热架，毛巾一旦潮湿后滋生细菌是非常快的，定时加热到 60℃ 的毛巾架可以让毛巾始终有类似阳光晒后的杀菌效果，并且洗澡后用起来暖暖的，并且不像晒后硬邦邦。 电纸书：买了之后保持了上床不带手机，睡前读一小时左右的书，大半年过去回头还是读了不少书和论文的，很值。 Tesla Model 3 iPhone Air：eSIM 方便，出差旅游切换运营商省心，最好用的一代，爽的不行。 iPad mini：今年最能提升幸福感的物品之一，轻薄便携，适合阅读代码或辅助开发，屏幕护眼续航长 美的踢脚线暖气：完全没有噪音，自动控温，比空调舒服太多，还可以语音或者微信小程序控制，买了以后阴天家里的衣物都很干爽。 Anki：开始使用 Anki 来学习瑞典语，没花钱，现在感觉很好。 司普奇拜单抗：要说起 2025 年我最推荐的东西，其实不是什么电子产品，而是我打的一种针，司普奇拜单抗，这玩意儿主要是用来治疗鼻炎和哮喘的，打完头两针的前几天没什么反应，但过了四五天之后，一下子就能闻到味儿了，当时闻到咖啡的香味，特别开心。 柏曼大路灯：买之前是为了给小孩用，买了以后发现真香，我自己在家工作也会用，有和没有家里的亮度完全是两个级别，亮度高工作会很舒服，还有夜间模式，上发光，不刺眼，晚上偶尔照顾小孩很方便。 椰子粉：南国徐大漂亮，每天早上跟麦片一起泡，比牛奶好吃，感觉永远吃不厌。 半导体 ETF ：把我生活基本开销赚回来了 iPad mini、AirPods Pro 3、酷态科 10 号 mini、Mac mini M4、多芬大白碗: 如果选几个今年最能提升幸福感的物品，我会选择这几个。 2025 Model Y 创新 41 存屏幕:...",
    "lang": "zh-CN"
  },
  
  {
    "title": "2025 大语言模型年度回顾",
    "url": "/2026-01-14/llm.html",
    "date": "2026-01-14",
    "categories": ["Share"],
    "summary": "花了一晚上时间把 Simon Willison’s Weblog 这篇 《2025:The year in LLMs》翻译完了，我觉得写得非常好，能够帮助我们很好看清楚去年这一年大模型领域发展的一切，希望可以给关注 AI 和投资 AI 的小伙伴一些输入。",
    "content": "原文来源于 Simon Willison’s Weblog 的 2025: The year in LLMs ，看完觉得写得很好，能够帮助我们很好看清楚去年这一年大模型领域发展的一切，我通过文章边翻译边学习边 Check 翻译的正确性，最终整理如下，希望可以给关注 AI 和投资 AI 的小伙伴一些输入，当做回顾学习非常好。 这是我对大语言模型（LLM）领域年度发展的第三篇回顾，总结了过去 12 个月中发生的所有重要事件。前两年的回顾可参见： 2023 年我们搞懂了哪些 AI 事情 2024 年我们在 LLM 上学到的东西 2025 年充满了各种趋势，有些相互交织，有些则彻底改变了我们使用和构建 AI 的方式。 推理之年 2024 年 9 月，OpenAI 通过 o1 和 o1-mini 拉开了推理（也叫基于可验证奖励的强化学习 RLVR）模型的序幕，2025 年初。他们又接连推出 o3、o3-mini 和 o4-mini，将这一能力推向主流。如今，几乎所有主流 AI 模型都具备了某种形式的推理能力。 Andrej...",
    "lang": "zh-CN"
  },
  
  {
    "title": "新一代工程师的破局与发展",
    "url": "/2025-12-22/engineer.html",
    "date": "2025-12-22",
    "categories": ["Share"],
    "summary": "最近在北京 AICon 上关于《新一代工程师的破局与发展-从岗位到能力的转型实践》的分享 PPT 转成图片放到于此，期待可以一起交流。",
    "content": "\n  最近在北京 AICon 上关于《新一代工程师的破局与发展-从岗位到能力的转型实践》的分享 PPT 转成图片放到于此，期待可以一起交流。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "AI Coding 对于程序员的影响",
    "url": "/2025-08-17/ai-coding.html",
    "date": "2025-08-17",
    "categories": ["Share"],
    "summary": "在不到一个月使用 Claude Code $326 费用后，实际用了 $20 Pro + $50 充值，之前用了几个月的 Cursor 已经变成牛夫人了，用得好 AI 可以很轻松达到 P6+ 工程师的水平，对于一个工程师而言感觉到又惊喜又害怕。",
    "content": "在不到一个月使用 Claude Code $326 费用后，实际用了 $20 Pro + $50 充值，之前用了几个月的 Cursor 已经变成牛夫人了，用得好 AI 可以很轻松达到 P6+ 工程师的水平，对于一个工程师而言感觉到又惊喜又害怕。 惊喜是，AI Coding 能力真的很强，把我最近几年非前端领域一些不好解决的，实现不好的技术问题在持续交流调试的情况下，基本上给解决了，甚至像朋友玩那种游戏充钱买装备一样，忍不住送钱给 Anthropic，因为让我很惊喜，更像是交到了一个技术厉害，对人和蔼的大牛朋友。以后所谓的单兵作战在会用工具，会动脑子，懂用户需求的同学手里真的会犹如多了一个性价比极高的团队的感觉。 害怕是，曾经觉得自信的古法手工 Coding 的在当前的 AI 面前变得不值一提了，一个残酷但清晰的趋势，纯 Coding 能力也已不再是程序员的护城河了，当前 AI 可以很容易代替纯需求翻译的程序员了，这也是害怕的地方，加上现在互联网行业基础上处于一种降本增效的泥潭，会让这个事情变化得更快。 记得 2 年前环境不好的时候有分享过，下一代工程师的破局，应该是做产品工程师，也即知道用户哪儿有需求，然后自己独立用一个好的产品解决方案去承接，同时产品很易用，加上你很会运营推广，拉更多人来用。只不过当时 AI Coding 的能力还很弱，到了今天应该是做善用 AI 的产品工程师。 下一代好的工程师，敲代码能力只占了 30% 的优势，有 20% 在快速发掘理解业务需求本质上，知道为什么，有 20% 在架构设计上，好比一个架构师一样告诉 AI 你需要的东西以及前后端架构方式，确保后续更好实现，10% 在和 AI 更清楚的交流上，让她的执行更符合你的心意，还有 20%...",
    "lang": "zh-CN"
  },
  
  {
    "title": "工程师如何更好投资",
    "url": "/2025-07-17/money.html",
    "date": "2025-07-17",
    "categories": ["Share"],
    "summary": "团队内部的一次简单分享，周末抽空随便理了理，聊聊工程师如何更好投资，由于买美股风险很高，不建议大家参照，需要有自己的判断，当做我在瞎说来看随便看看就好了。",
    "content": "\n  团队内部的一次简单分享，周末抽空随便理了理，聊聊工程师如何更好投资，由于买美股风险很高，不建议大家参照，需要有自己的判断，当做我在瞎说来看随便看看就好了。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n理财有风险，投资需谨慎，不作为投资建议，但是祝福你发财。\n\nPDF 文件下载\n\n工程师如何更好投资_Tw93.pdf\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "从 iPhone 换到 Android 的体验",
    "url": "/2025-07-10/android.html",
    "date": "2025-07-10",
    "categories": ["Life"],
    "summary": "对于一个十多年 iPhone 用户，切到 Android 差不多一个月样子，选的 OPPO 一个机器，比想象中迁移成本小很多，而且谁能想到 Android 变成了主力机，想和大伙随便聊聊这个过程想法的变化。",
    "content": "对于一个十多年 iPhone 用户，切到 Android 差不多一个月样子，选的 OPPO 一个机器，比想象中迁移成本小很多，而且谁能想到 Android 变成了主力机，想和大伙随便聊聊这个过程想法的变化。 为啥不坚持 iPhone 了？ 只能说苹果这几年的确不太不思进取了，之前很期待每年的发布会，会在第一时间换上新款，但是老感觉这几年没有啥变化，特别是 AI 这一块，系统层面没啥好玩的，更多是系统版本数字的升级而已，同时不太喜欢被“绑架感”，手表、耳机、电脑全部一套系统，更多还是自己随便选择，哪个我用用哪个，防止被绑架更深，想着要不要试试 Android 玩玩看。 上一个手机是 15 Pro Max，屏幕观看视频/文章大小非常好，但到了夏天真的太太太大了，特别是放短裤袋子，好比装了一块砖块在口袋，同时很不好单手握持，特别是手指握住还有一点点空余，这样很好把玩。 Android 里面为啥选择了啥？ 首先考虑的是小屏机器，需要单手可以握住，我去店里看了 vivo X200 Pro mini、小米 15、一加 13T、iPhone 16E，都是 6.3 左右机器，这里面只有 OPPO 这个屏幕观感，特别是文字渲染看着更精致点，同时重量是这几个里面最轻的 179g，边框也是最窄了。 其实很多时候阻碍 iPhone 用户迁移到 Android 的，我看来第一点应该就是屏幕和字体，人是习惯性记忆，突然看到一个和 iPhone 不一样感受的屏幕特别是 Android 的字体渲染，基本上就把人给劝退了，因为反过来也是，我大概 20 多天没有用 iPhone，突然一样，居然感觉也非常不习惯。 ColorOS 15...",
    "lang": "zh-CN"
  },
  
  {
    "title": "别相信直觉 - 读书笔记",
    "url": "/2024-10-13/intuition.html",
    "date": "2024-10-13",
    "categories": ["Share"],
    "summary": "最近看完了「别相信直觉」用数据思维获取你想要的生活这本小书，比较简单好读，基本上花一下午就可以看完，把生活中可能会遇到的婚恋、育儿、财富、创业、运气、外貌、快乐、痛苦都给讲了讲，把里面有一些有意思的观点记录到这里。",
    "content": "最近看完了「别相信直觉」用数据思维获取你想要的生活这本小书，比较简单好读，基本上花一下午就可以看完，把生活中可能会遇到的婚恋、育儿、财富、创业、运气、外貌、快乐、痛苦都给讲了讲，把里面有一些有意思的观点记录到这里。 婚恋 一个人如果单身的时就十分幸福，那么在他建立亲密关系后，他也会十分幸福。 在相亲市场上，人们竞相追求的相亲对象不一定让人感情幸福。预测感情是否幸福的难度是非常高的。 找伴侣需要考虑的最重要的特征是他的性格，对生活的满意度、安全性依恋、尽责型、成长型心态。 外貌会影响一个人的吸引力，而且影响非常显著，身高在男性吸引女性方面发挥重要作用，此外相亲过程中种族歧视非常明显。 收入影响一个人在相亲市场的表现，且对男的影响最大。 一个很酷的职业比虽然挣得多但枯燥的职业更能吸引女性。 建议相亲的人把寻找范围更多集中在那些缺乏高度竞争力的人身上，集中在那些有强大心理素质的人身上。 育儿 父母对于孩子整体的发展影响小的出奇（前提是不作恶，正常养育），在养育子女方面，你可能需要更多关注孩子接触的人，这才是影响孩子未来发展的关键因素。 从事不同运动的申请者在大学获得奖学金的比例有巨大差异，可以选择申请人少的项目这样就没有那么卷。 有些运动能力与基因关系很大，比如说篮球，但是基因在棒球和橄榄球中的重要性远不及在篮球的一半，马术和跳水受基因影响很小。 财富 以薪水为基础通往财富自由之路的案例非常罕见，富人一般都拥有自己的企业。 不同行业的致富情况差异巨大，富人一般都是拥有盈利的企业， 保持企业利润很重要，避免价格竞争，基于零利润定理，价格竞争将会持续下去，直到利润为 0，一些几乎不可能让人致富的行业，建筑设备承包商、住宅建筑、汽车维修和保养、住房买卖租赁服务、建筑工程和相关服务、室内装修设计承包商、个人护理服务、加油站。 真正适合创业的领域，一般是大企业允许许多区域性垄断企业存在的领域，6 大致富行业有房地产、投资、汽车经销、独立创意、市场研究、其他商品经销。 想要致富，你可以利用数据所反应出来的内容来理解职业生涯的三大必问问题。1、我有自己的企业吗？2、我的企业可以避开无情的价格竞争吗？3、我的企业所在行业可以避免被全球化巨头垄断吗？ 创业 创业并非是年轻人的优势，美国企业创始人的平均年龄是 41.9 岁，一个 60 岁的初创企业创始人创建一家有利可图的企业概率大概是一个 30 岁初创企业创始人的三倍。 并非局外人更有优势创业，在商业领域，深厚的领域知识储备不是诅咒，不会阻碍企业家创新，相反，在商业领域，成为一名优秀的内部人士对创业的来说优势更大。 当创始人在创业前的收入进入所在行业的前 0.1%时，他们创业成功率最高。 在成功之路要有耐心，用多年时间学习一个行业的各种知识和细节，通过成为行业内薪水最高的员工来证明你的价值，然后再去创业，最终获得真正的财富。可以花多年的时间巩固专业知识，建立人脉网，同时在一个行业取得成功，然后再中年时开始独立创业。 运气 山姆·奥尔特曼：创业成功 = 想法 x 产品 x 执行 x 团队 x 运气，而运气是 0 ～ 10000 的随机数。 克林斯和汉森：成功公司的运气并不比其他公司好，他们只是能更好利用所获得的运气，利用任何一家公司都能遇到的运气。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "聊聊未来技术趋势",
    "url": "/2024-09-09/future.html",
    "date": "2024-09-09",
    "categories": ["Share"],
    "summary": "最近在团队的一个分享，基于自己对 AI、投资、下一代技术的一些理解，结合网络上的报告、资料、论文、财报等简单梳理了下，假如有不懂的名词可以问 GPT，希望你开心，但不要在不懂市场的情况下基于此去投资，风险会很高。",
    "content": "最近在团队的一个分享，基于自己对 AI、投资、下一代技术的一些理解，结合网络上的 ark 报告、资料、论文、财报等梳理了下，假如有不懂的名词可以问 GPT，希望你开心，但不要在不懂市场的情况下基于此去投资，风险会很高，分享的 PDF 文件以及参考资料在文章结尾可以找到。 SpaceX 的火箭回收技术 OneKey 硬件钱包 PDF 文件下载 聊聊未来技术趋势_Tw93.pdf 参考资料 ARK Invest Big Ideas 2024 App Economy Insights 3D 动画揭秘芯片完整的制造流程和制造工艺 AI Supremacy 发展报告 李沐讲座：大语言模型的实践经验和未来预测 The LLM Triangle Principles to Architect Reliable AI Apps AI 50: Companies of the Future Apple Intelligence 为 iPhone、iPad 和 Mac...",
    "lang": "zh-CN"
  },
  
  {
    "title": "置身事内 - 读书笔记",
    "url": "/2024-06-30/china.html",
    "date": "2024-06-30",
    "categories": ["Study"],
    "summary": "最近把「置身事内 - 中国政府与经济发展」这本书读完了，去年粗读了下，最近趁着杭州持续下雨呆家里听着雨声看看书很自在，是一本可以读两遍的好书，花了点时间把一些不错的观点摘抄备忘。",
    "content": "看书 最近把「置身事内 - 中国政府与经济发展」这本书读完了，去年粗读了下，最近趁着杭州持续下雨呆家里听着雨声看看书很自在，是一本可以读两遍的好书，花了点时间把一些不错的观点摘抄备忘。 抄书 我国经济中有个现象：处在行政交界（尤其是省交界处）的地区，经济发展普遍比较落后。 我国幅员辽阔，但人口分布极不平衡。如果从黑龙江的瑷珲（今黑河市南）到云南的腾冲之间画一条直线，把国土面积一分为二，东边占了 43%的面积却住了 94%的人口，而西边占了 57%的面积却只住了 6%的人口。 2019 年，浙江省 53 个县（含县级市）里，18 个是全国百强县。但在其他一些省份，“省直管县”改革至少遭遇了两个困难。首先是省里管不过来。改革前，一个省平均管 12 个市，改革后平均管 52 个市县。钱和权给了县，但监管跟不上，县域出现了种种乱象，比如和土地有关的腐败盛行。 获取和传递信息需要花费大量时间精力，上级要不断向下传达，下级要不断向上汇报，平级要不断沟通，所以体制内工作的一大特点就是“文山会海”。作为信息载体的文件和会议也成了权力的载体之一，而一套复杂的文件和会议制度就成了权力运作不可或缺的部分。 公众所接触的信息和看到的现象，大都已经是博弈后的结果，而缺少社会阅历的学生容易把博弈结果错当成博弈过程。 所谓权力，实质就是在说不清楚的情况下由谁来拍板决策的问题。 要想把握政府的真实意图和动向，不能光读文件，还要看政府资金的流向和数量，所以财政从来不是一个纯粹的经济问题。 要理解政府治理和运作的模式，首先要了解权力和资源在政府体系中的分布规则，既包括上下级政府间的纵向分布，也包括同级政府间的横向分布。 我国政府各层级之间的职能基本同构，上级领导下级。原则上，上级对下级的各项工作都有最终决策权，可以推翻下级所有决定。但上级不可能掌握和处理所有信息，所以很多事务实际上由下级全权处理。即使上级想干预，常常也不得不依赖下级提供的信息。比如上级视察工作，都要听取下级汇报，内容是否可靠，上级不见得知道。如果上级没有独立的信息来源，就可能被下级牵着鼻子走。 所以上级虽然名义上有最终决定权，拥有“形式权威”，但由于信息复杂、不易处理，下级实际上自主性很大，拥有“实际权威”。维护两类权威的平衡是政府有效运作的关键。若下级有明显信息优势，且承担主要后果，那就该自主决策。若下级虽有信息优势，但决策后果对上级很重要，上级就可能多干预。但上级干预可能会降低下级的工作积极性，结果不一定对上级更有利。 因为信息复杂，不可信的信息比比皆是，而权力和责任又高度个人化，所以体制内的规章制度无法完全取代个人信任。上级在提拔下级时，除了考虑工作能力外，关键岗位上都要尽量安排信得过的人。 成功的政策背后是成功的协商和妥协，而不是机械的命令与执行，所以理解利益冲突，理解协调和解决机制，是理解政策的基础。 我国地方政府推动经济发展的模式有三大特点，一是城市化过程中“重土地，轻人”，二是招商引资竞争中“重规模，重扩张”，三是经济结构上“重投资、重生产、轻消费”。 所谓“土地财政”，不仅包括巨额的土地使用权转让收入，还包括与土地使用和开发有关的各种税收收入，当然地方政府本来也不是靠卖地赚钱，它真正要的是土地开发之后吸引来的工商业经济活动。 经济学家张五常曾做过一个比喻：地方政府就像一家商场，招商引资就是引入商铺。商铺只要交一个低廉的入场费用（类似工业用地转让费），但营业收入要和商场分成（类似增值税，不管商铺是否盈利，只要有流水就要分成）。商场要追求总体收入最大化，所以既要考虑入门费和租金的平衡，也要考虑不同商铺间的平衡。一些商铺大名鼎鼎，能为商场带来更大客流，那商场不仅可以免除它们的入门费，还可以降低分成，甚至可以倒贴（类似地方给企业的各种补贴）。 这种以土地为中心的城市化忽视了城市化的真正核心：人。地价要靠房价拉动，但房价要由老百姓买单，按揭要靠买房者的收入来还。所以土地的资本化，实质是个人收入的资本化。支撑房价和地价的，是人的收入。忽略了人，忽略了城市化本该服务于人，本该为人创造更好的环境和更高的收入，城市化就入了歧途。 地方政府不仅可以为经济发展创造环境，它本身就是经济发展的深度参与者，这一点在招商引资过程中体现得淋漓尽致。 我国经济结构失衡的最突出特征是消费不足……居民收入转移到了政府和企业手中，变成了公路和高铁等基础设施、厂房和机器设备等，而老百姓汽车和家电等消费品占比则相对较低……在经济发展初期，将更多资源从居民消费转为资本积累，变成基础设施和工厂，可以有效推动经济起飞和产业转型，提高生产率和收入，但当经济发展到一定阶段后，这种方式就不可持续了。 房地产常被称作“经济周期之母”，根源就在于其内在的供需矛盾：一方面，银行可以通过按揭创造几乎无限的新购买力；而另一方面，不可再生的城市土地供给却有限。这对矛盾常常会导致资产泡沫与破裂的周期循环，是金融和房地产不稳定的核心矛盾。而房地产不仅连接着银行，还连接着千家万户的财富和消费，因此影响很大。 房价上涨时不仅会增加按揭债务负担，还会拉大贫富差距，进而刺激低收入人群举债消费，这一现象被称为“消费下渗”，在负债的人当中，低收入人群的债务负担尤其重，居民债务居高不下，会很难抵御经济衰退，尤其是房产价格下跌所引发的经济衰退。低收入人群的财富几乎全部就是房产，其中大部分是欠银行的按揭，负债率很高，很容易受到房价下跌的打击。 要化解居民债务风险，除了遏制房价上涨势头以外，根本的解决之道还在于提高收入，尤其是中低收入人群的收入，鼓励他们到能提供更多机会和更高收入的地方去工作。让地区间的经济发展和收入差距成为低收入人群谋求发展的机会，而不是变成人口流动的障碍。 累积的财富差距一般远大于每年的收入差距，因为有财富的人往往更容易积累财富，资产回报更高，可选择的投资方式以及应对风险的手段也更多。 在购置土地环节，发达国家一般要求企业使用自有资本金，而我国允许房企借钱“买地”，这就刺激了房企竞相抬高地价和储备土地。储备的土地又可以作为抵押去撬动更多借贷资金，进而储备更多土地，所以房企规模和债务都越滚越大。 北京居民的户均总资产（不是净资产，未扣除房贷和其他负债）是 893 万元，上海是 807 万元，是新疆（128 万元）和吉林（142 万元）的六七倍。这个差距大部分来自房价。房价上涨也拉大了同城之内的不平等。房价高的城市房屋空置率往往也高，一边很多人买不起房，一边很多房子空置。如果把房子在内的所有家庭财富（资产）算在一起的话，按照上述中国人民银行的调查数据，2019 年最富有的 10%的人占有总财富的 49%，而最穷的...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我居然用回有线耳机了",
    "url": "/2024-05-08/sony.html",
    "date": "2024-05-08",
    "categories": ["Life"],
    "summary": "男人的快乐，我居然用回有线耳机了，最近周末抽时间去线下试了不少好耳机，最后很意外买了索尼这款 MV1 开放式监听耳机，也不降噪还有线，却出奇的喜欢，想和大伙聊聊我的选择过程。",
    "content": "关于我用回有线耳机这个事情 男人的快乐，我居然用回有线耳机了，最近周末抽时间去线下试了不少好耳机，最后很意外买了索尼这款 MV1 开放式监听耳机，也不降噪还有线，却出奇的喜欢，想和大伙聊聊我的选择过程。 现场去对比过 AirPods Max 音质很好很方便但是太太重了，不经常戴考虑颜值音质以及苹果互通其实很合适。 索尼无线 WH-1000XM5 和 4，降噪很好也还轻，不太关心音质同时需要降噪耳机的很推荐 5，戴着也舒服，很适合出行使用。 也去试了下 Bose QC45 和 700，前者比后者舒服，很舒服，而且样子也好看，700 也很有个性，不过音质有点儿闷，那个提示音很反人类有气无力那种感觉，但是戴着真的舒服，考虑舒适度喜欢低音的其实可以考虑。 我很考虑音质我甚至去试了下 森海塞尔 HD 600、650、660S，都是有线，需要有前端去推，音质上假如习惯听交响乐那 600 是真的厉害，30 年的产品依然很抗打，喜欢听人声 650 超级合适，我觉得这一款对我而言是音质好性价比最高的，660 属于这两款有点结合，更贵钱够可考虑，但是普通设备推不动这种 300 和 150 欧阻抗的机子，需要配置一个很重的外放前端，只适合放家里书房使用，考虑到便携和钱最终还是放弃了，此外佩戴舒适度其实可以接受但是比不过前面索尼和 Bose 这两个。 后面在索尼店里的时候，问店员有没有音质好的耳机可以试听，给我指了下里面有一个小屋都是有线好设备，进去听了听音质真的牛逼耳朵怀孕那种感觉，一看价格 2w 加上 1w 的外放给放弃了，只能欣赏买不起。 在出来时候发现外面一个不起眼的台子上放着这台很不起眼的黑色塑料壳子的耳机索尼 MV1，拿起来顺手戴戴，我去！怎么这么轻怎么戴着这么舒服，怎么音质这么好，很突破我的固有想法，监听耳机不是专业人员用的吗，居然也这么适合听音乐，空旷音质很无敌，媲美上面听到的森海塞尔 HD660S。 于是乎就决定就买这个稀有品种，网上买便宜点儿，最近收到了，一回到家就细细品味，O-Daiko 的鼓声，One I Love 的女声轻唱，Bubbles 的环境氛围音，Michael 的...",
    "lang": "zh-CN"
  },
  
  {
    "title": "埃隆·马斯克传 - 读书笔记",
    "url": "/2024-04-14/musk.html",
    "date": "2024-04-14",
    "categories": ["Study"],
    "summary": "最近利用早上的阅读时间陆陆续续把《埃隆·马斯克传》给看完了，很推荐工程师同学一读，虽然平时马斯克在 X 上表现有些奇怪，其实在书里其实是一个实打实的工程师，很擅长将技术和商业以及成本控制结合的一个牛人，不过也有不少缺点的一个人，随手记录一些文字用于备忘。同样看完这本书，作为特斯拉股东，愿意继续持有。",
    "content": "最近利用早上的阅读时间陆陆续续把《埃隆·马斯克传》给看完了，很推荐工程师同学一读，虽然平时马斯克在 X 上表现有些奇怪，其实在书里其实是一个实打实的工程师，很擅长将技术和商业以及成本控制结合的一个牛人，不过也有不少缺点的一个人，随手记录一些文字用于备忘。同样看完这本书，作为特斯拉股东，愿意继续持有。 五部工作法 质疑每项要求，提出任何一项要求时，都应该附上提出这一要求的人。永远不要接受一项来自某个部门的要求，比如来自“法务部门”或者“安全部门”的要求。你必须知道提出这项要求的人的名字，接下来你应该质疑它，不管这个人有多聪明，聪明人提出的要求才是最危险的，因为人们不太可能质疑他们。这件事要一直做下去，即便这项要求来自我马斯克本人，质疑后，大家就要改进要求，让它变得不那么愚蠢。 删除要求当中所有你能删除的部分和流程，虽然你可能还得把它们加回来。事实上，你如果最后加回来的部分还不到删除部分的 10%，那就说明你删减得还不够。 简化和优化，这应该放在第 2 步之后，因为人们常犯的错误就是简化和优化一个原本不应该存在的部分或者流程。 加快周转时间，每个流程都可以加快，但只有遵循了前三个步骤之后才能这么做，在特斯拉工厂，我错误地把很多精力花在加快生产流程上，后来我才意识到有些流程原本就应该被拿掉。 自动化，在内华达工厂和弗里蒙特工厂犯下的一个大错就是我一开始试图将每个步骤进行自动化改造，我们本应该先质疑所有要求，删除不必要的部分和流程，把问题筛出来、处理掉，然后再推进自动化。 这套工作法有时还衍生出一些推论 所有技术经理都必须有实战经验，比如说软件团队的管理人员必须至少花 20%的时间进行编程，太阳能屋顶业务的经理必须花时间在屋顶上亲自做安装工作。否则光说不练，他们就像是不会骑马的骑兵队队长、不会舞刀弄枪的将军。 “你好，我好，大家好”是很危险的，人们会因此不再质疑同事的工作成果。人们天然有一种倾向是不想把要好的同事踢下船，而这种危险倾向一定要避免。 犯错没关系，但错了还不肯低头就不行。 永远不要要求你的团队做你自己都不愿意做的事。 每当有问题需要解决时，不要只与你直接管理的相关负责人聊，深入调研就要跨层级沟通，去跟你属下的属下直接交流吧。 招聘要招态度端正的人，技能是可以教的，但要扭转一个人的工作态度可就太费劲了，得给他“换个脑子”，疯狂的紧迫感是我们公司运作的法则。 唯一要遵守的规则就是物理学定律能推导出来的规则，其他一切都只是建议。 成本意识很强 几十年来，成本加成合同让航空航天业对成本控制问题漠不关心。火箭上的一个阀门比汽车上用的类似阀门要贵 30 倍，所以马斯克不断要求他的团队多从航空航天领域以外的公司采购零部件。Nasa 在空间站中使用的门闩，一个就要 1 500 美元。SpaceX 的一名工程师改造了浴室隔间门上使用的插销，做出了一种闭锁机构，成本只要 30 美元。一名工程师走到马斯克的办公室隔间，告诉他猎鹰 9 号有效载重舱的空气冷却系统要耗资 300 多万美元，他就扯着嗓子问旁边隔间的格温·肖特韦尔：家用的一套空调系统成本要多少钱？她回答说大约 6 000 美元。随后 SpaceX 团队就买了一些商用空调设备，改造了其中的泵，然后就把它用在了火箭顶部。 自从马斯克当年完成了俄罗斯之行，计算了一番自己制造火箭的成本后，他就在内部普及了一个概念，叫“白痴指数”，也就是一个零部件的总成本与它的原材料成本的比值。如果白痴指数很高，比如零部件成本 1000 美元，而制作它的铝的成本只有 100 美元，那么很可能就是设计过于复杂或制造过程效率太低导致的。 一天晚上，闪电击中了一个试验台，打坏了一个油箱的增压系统，导致油箱的一层膜出现鼓包和裂缝。换作一家正常的航空航天公司，那就应该更换油箱了，得花上几个月的时间。“不要换，修修就行。”马斯克说，“带着锤子上去，鼓包敲一敲，裂缝焊接好，然后接着弄。”布扎觉得这样做太疯狂了，但他已经学乖了，听老板的就好。于是他们走到试验合前，把隆起的鼓包敲回去。马斯克跳上飞机，飞了三个小时过来，亲自监督整个过程。“当他出现时，我们开始测试装有燃料的油箱，没有出什么问题。”布扎说，“埃隆相信逢山开路、遇水搭桥，出什么情况都有办法补救。这让我们获益匪浅，而且整个过程很有趣。”这样也为 SpaceX 省下了几个月的时间，可以测试火箭样机了。 我们应该要求这里面的每一个人看看他们能不能将自己负责的零部件成本降低...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的极简生活经验",
    "url": "/2024-03-03/simple.html",
    "date": "2024-03-03",
    "categories": ["Life"],
    "summary": "想和大伙随便聊聊的极简主义，我挺喜欢这种生活方式，但并不是说每个人需要极简，有的人喜欢收藏，有喜欢购物买很多东西，让自己舒心的生活方式我觉得都挺好的。但假如你也喜欢简单生活方式，或者有点儿强迫症，那这些小建议可能适合你。",
    "content": "更新于 2026-01-13，补充 AI 时代下的一些保持极简的技巧。 极简是恰到好处的东西 想和大伙随便聊聊的极简主义，我挺喜欢这种生活方式，但并不是说每个人需要极简，有的人喜欢收藏，有喜欢购物买很多东西，让自己舒心的生活方式我觉得都挺好的。但假如你也喜欢简单生活方式，或者有点儿强迫症，那这些小建议可能适合你。 首先，极简主义不是把大部分的东西都扔掉，在空无一物的环境中才极简，而是选择对你重要的东西但不在于多，同时也没有必要每个地方都极简，比如说你喜欢读书以及某些收藏，完全是可以精挑细选去置办。极简生活更多是减少生活中不必要的元素，让你更多专注在真正重要的事物上。 经常性的整理 开始的第一步，应该是经常性的整理，一般是扔东西、卖二手、收纳起来，不要总觉得留着以后能用上，如果近 1 年都没用过，基本以后也用不上。 扔东西：可以先从冰箱和厨房做起，对于过期的、好久没有动放了很久的东西给扔掉，这里很多人可以扔掉很多；接着收拾各种抽屉柜子里面比如已经坏掉的物件、没有用的配件、廉价充电线充电头、没用的说明书、之前放里面的票据、快递盒子、购物袋子等，总之一般是随手放里面，觉得以后会用的但是过了很久其实都没有用的东西。 卖二手：接着你会发现有不少东西其实扔掉有些可惜，但是自己又不怎么用了，对于不太值钱但是又有些用的东西，比如再也不看的书、2 年都没有穿的旧衣服，可以去支付宝或者其他 App 看看有上门回收捐赠的服务，相比直接扔掉会让你觉得好一点；其次就是将还值点钱，但是消费冲动买的但是自己又不怎么用的东西，把它擦干净、拍照发闲鱼，卖给下一个冲动消费的人，这样可以帮你回一些本，这里其实也很好判断，比如说几乎半年都不用耳机、二手电脑、手表、小电器这一类很好出手，留下你一直在用而且很好用的那个就好，重复功能的东西只留一件。 收纳起来：假如收纳空间有限，可以买几个收纳箱和真空收纳袋，这样你的存放物体的体积缩小一半，放到看不到的地方，比如不是这个季节的衣服、被子，都可以用收收纳袋抽干收起来，然后对于不太方便袋子装的可以用盒子装起来放柜子里，让它整齐和知晓位置，让每一个物品都有它特定的空间位置，用完返回原处下次找起来会很方便。 上面整理的这一步，会花费你一些周末时间，不过当整理完成，打扫干净区域后，一般都会让你心情舒畅，感觉很爽的。 培养自己的消费观 接着第二步，慢慢培养自己的消费观，这里一般是 只买好的、不被消费主义、有目的的购买、不要囤东西 的这几个建议。 只买好的：很多时候东西多的一个很大原因，就是买了很多自己觉得用得上的东西，或者是买的时候有些纠结，但是最后还是买了的那些东西，基本上放柜子里也不想用，还后悔。对于必须品而言，一般建议购买力所能及范围内更好的那一个，比如说手机、电脑、衣服、鞋子、耳机这一类，品质好，价格稍贵，但是会让你很长时间不会纠结要不要换一个更好的，同时也让你生活品质其实会更好，这里还可以新入了一件，可以尽快把之前那件按照第一步方法给整理掉。 不被消费主义：越来越觉得，现在生活中大部分必须品都已经很满足了，很多时候消费都是属于仪式感下的消费，比如说看到小红书推荐、抖音里面好东西、得物上的潮流东西，会很容易被当时那个环境下误导下单，因为做电商的开发应该都知道，那一个个小功能其实都是一个大的产品业务团队同学天天想方设法迭代用来提高转化率用的，想方设法让你购买。 有目的的购买：很容易出现在逛超市、逛山姆的时候，进去前就想着随便逛逛，结果你会发现出来后买了几百块东西，仔细一想，不少是属于可以买可不买的，其实可以在出发前，先想想这次要买的东西，列一个很简单清单，就不会剁手买一些自认为需要的东西，而且这种有目的的挑选方式会让你更舒服。这里同样适合去逛街的时候，先想好要买的东西和品牌。 不要囤东西：囤东西本意是为了省钱和省心，当时很多时候买一箱箱的纸、洗衣液、沐浴露用一两年反而会让你烦心，甚至还会出现为了尽快用完，double 使用的方式，其实反而浪费了，还占用了你家里很多东西来放这些很多，很多时候，这些东西没有那么紧急，需要下单到到家其实很快的。这里还有一个东西也是容易囤的，那就是实体书了，这里可以先看电子书，再买纸质书，搬家的时候这东西很重的。 减少网络中的被动消息 上面从出和入两步控制住了你生活中的物件，其实还有一块是虚拟生活中的东西，其实也可以极简起来，这里说的是手机、电脑、知识这几块接收，信息的过载很多时候也让人过得不顺畅，尽量减少被动信息的接收，需要的信息主动寻找。 App 处理：我一般做法是 3 个月不用的 App 删除掉，用的时候再装用完又卸载或者直接小程序，这样手机 App 基本上控制在 2 屏完全可以满足生活所需；第二个是，控制所有 App 的消息，我一般只开启银行交易、支付宝交易、微信、工作软件的消息通知，其他的 App 的消息我都在设置里面去掉了，屏幕上没有小红点，同时很多 App 里面也可以设置去掉一些营销通知；第三个是，不装新闻软件、不装抖音快手，差不多一年多没有装了，感觉不太需要这种看着有用的新闻消息，这里对于电脑上的软件也是一样。 资料整理：删除没有用的短消息，其实大部分都没有用，我平时一般是除了亲人信息，其他的定期全删除；然后第二个就是删除没有用的图片和视频，这里可以删除很多东西，第三个是删除没有用的微信聊天消息，之前不知道怎么加上的人也可以删除掉，让你常用的工具都是清爽的，这里对于电脑上的东西也是一样。 主动接受消息：刚刚这些东西用于处理被动的消息接受，尽可能减少算法灌东西给你，更多的可以订阅 RSS 接收消息，关注喜欢的博主接收消息，不喜欢的直接屏蔽或者 mute...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的年度工具折腾之旅",
    "url": "/2024-02-09/tools.html",
    "date": "2024-02-09",
    "categories": ["Share"],
    "summary": "最近趁着过年有空，将一年自己使用的比较不错的 Mac 软件、网站、生活好物给整理了一下，保持着简单易用美观的原则，期待当你有同样选择纠结的时候的一些帮助。",
    "content": "最近趁着过年有空，将一年自己使用的比较不错的 Mac 软件、网站、生活好物给整理了一下，保持着简单易用美观的原则，期待当你有同样选择纠结的时候的一些帮助。 Mac 软件 今年没有过多的折腾软件，更多是在持续使用的基础上去做些优化让自己用起来更舒服，尽量不用两种功能类似的软件，保持简单易用美观的原则，这是我今年使用的比较不错的 Mac 软件，假如你也喜欢折腾，可以将一些没有用过的软件下载起来玩玩。 今年最爱 妙言：一个自己 3 年前开发的简单易用的原生 Markdown 笔记应用，使用过程中持续更新着。 ChatGPT 桌面端：通过自己开发的 Pake 打包官方 GPT 网页版本的桌面端，注入了样式和脚本方便更好使用，通过快捷键唤起每天使用。 MessAuto：一个接收手机短信验证码并自动回填到 Mac 上的小工具，很好用，解决了每次从手机看然后手填的麻烦。 Alacritty：一个用 Rust 写的命令行终端，之前博客有发过 改良了下传说中最快的终端 这篇文章，很快很简单很漂亮。 Top Calendar：一个菜单栏的日历软件，可以看到日历、节假日、农历，以及最近的日程，关键也是做得很美观。 Shottr：超级喜欢的一个截图软件，平时大家看到我发的推对应截图不少通过他自己截取的，同时也支持滚动截图、标注等功能。 Raycast：这个全局搜索工具超级好用和强大，假如你还在用 Alfred，很推荐你试试，此外他的出现，通过插件还可以帮你干掉很多软件。 Bob：随手翻译软件，配置了 OpenAI 的服务，划词一键翻译，快捷键唤起翻译，多个翻译对比结果，很是喜欢。 uPic：一个超级方便的图片上传软件，可以用 FaaS 写一个上传服务或者直接使用云厂商的 OSS 服务，可以一键上传直接复制使用。 输入输出 MindNode：可以画出很好看的脑图的工具，从工作开始用了快 8 年了，用于脑暴快速思考使用。 NetNewsWire：RSS 订阅软件，我的大部分资讯和技术文章阅读来源于 RSS，通过这个工具给我推送阅读。 Things：很简洁的备忘 Todo...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的开源成长之旅",
    "url": "/2024-01-12/open.html",
    "date": "2024-01-12",
    "categories": ["Share"],
    "summary": "在微软上海 Github Universe 2023 的一个分享，主要是讲我从大学开源到现在 9 年做的一些有趣的事情，以及如何做好一个开源产品的经验，希望可以给热爱开源的朋友一些输入。",
    "content": "在微软上海 Github Universe 2023 的一个分享，主要是讲我从大学开源到现在 9 年做的一些有趣的事情，以及如何做好一个开源产品的经验，希望可以给热爱开源的朋友一些输入，现场分享视频在文章后面，感兴趣的小伙伴可以一看。\n\n\n  我的 Github：https://github.com/tw93\n\n\n分享稿\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n现场视频\n\n\n\n\n\n\n现场照片\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "我居然 30 岁了",
    "url": "/2023-12-30/30.html",
    "date": "2023-12-30",
    "categories": ["Thought"],
    "summary": "过完今晚我居然就满 30 岁了，一直很无耻的感觉自己才 24 岁，虽然在这之前，我更无耻的认为自己才 18 岁，真不敢想象时间怎么过得这么快，年纪好像是一个从山顶滚下来的轮子，随着时间拉长越滚越快。虽然经历越来越丰富，但一年的时间长度感知明显比小时候得短很多，还是会有些惋惜和遗憾。",
    "content": "过完今晚我居然就满 30 岁了，一直很无耻的感觉自己才 24 岁，虽然在这之前，我更无耻的认为自己才 18 岁，真不敢想象时间怎么过得这么快，年纪好像是一个从山顶滚下来的轮子，随着时间拉长越滚越快。虽然经历越来越丰富，但一年的时间长度感知明显比小时候得短很多，还是会有些惋惜和遗憾。\n\n发现身边不少人随着时间的变化，慢慢的就有那个年纪该有的样子，好比到了要转变的时候，会自动升级一样，比如说从学生踏入社会里面就变成了一个成人，从年轻人到有小孩以后就立马变成了成熟父亲角色。我感觉我在角色变化上一直是被外力推着走的，甚至有些别扭，有一种心态还是大学阶段的没啥变化的感觉，很像送快递作者胡安焉在文章中说的那个感觉。不过这种稚嫩心态我反而没有阻碍到我，反而还让我活得更轻松好奇一些，可能是当时大学稀里糊涂喜欢上了敲代码，在 15 年毕业时走狗屎运找到了喜欢的程序员工作，不需要过于考虑社会人情世故，要是没学计算机去做了其他的行业，可能会很难适应现在这个社会。\n\n应该是在工作 2 年后，等到 95 后入职，逐步发现自己不是团队中年纪最小的了，然后慢慢发现 97 的在团队里成为中坚力量，到现在 00 后开始来实习了，不由的感叹，年轻真好啊，年轻人真不错啊，优秀的年轻人很多地方很值得学习，会更有意识的去培养有潜力年轻人，给到更多空间挑战，不喜欢按资排辈的去安排事情，而是觉得能力牛逼和年纪无关。\n\n回到现在 30 岁，希望能一直保持住 too young too simple，希望到 40 岁、50 岁、甚至 60 岁的时候心态还是年轻的那种感觉，依旧潮流，依旧写自己喜欢的代码。不跟风，不攀比，不要变得油腻，不要变得年轻时候讨厌的那种中年人好为人师的样子，让自己舒舒服服过日子就够了。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "不喜欢前端娱乐圈这种氛围",
    "url": "/2023-12-26/fe.html",
    "date": "2023-12-26",
    "categories": ["Thought"],
    "summary": "其实我个人挺不喜欢「前端娱乐圈」这种氛围，最近推上还出现了前端之十二生肖，一时不知道是自嘲还是娱乐。",
    "content": "其实我个人挺不喜欢「前端娱乐圈」这种氛围，最近推上还出现了前端之十二生肖，一时不知道是自嘲还是娱乐。\n\n我认为技术圈应该有更多的技术交流、碰撞、分享，而非博眼球、撕逼争热度，这类多了自然就被大家认为娱乐圈了，很多时候非正常逻辑发展的事情会更容易聚集流量和讨论，进一步推动这个氛围往前走，变得更差。\n\n我认为前端是各类程序员岗位中最有趣的一类，点子多、会编程、有审美的综合体，用「黑客与画家」来描述特别合适，正是当时大学在图书馆看了这本书后从后端转到了前端，那时相比 JS 更喜欢写 CSS/Canvas/WebGL，因为可以用代码做成特别炫酷的效果，还可以对一个东西反复改来改去到自己满意的地步，这个过程很爽。\n\n10年前国内技术氛围真心挺好的，有不少前辈分享各类技术实现，社区里面技术讨论也热闹非凡，当时 CNode 对我很有帮助，不少人是真的不求回报的分享，也正是这些引路人吸引了不少学生了解前端，学习前端，最后找到一份自己很喜欢又可以赚钱的工作。\n\n很期待现在的技术氛围能够在开源、分享、技术碰撞上变得越来越好，当然现在推上也有很多我超级喜欢的技术朋友在技术分享 AI、分享技术思路、分享最近做的好产品，守护好这一块技术人喜欢的东西。\n\n最后想用陈皓哥在「谈谈我的“三观”」文章中面对社会这里面的这句话来结尾。\n\n\n  “把时间多放在一些想法上，对自己、对社会都是有意义的，而把时间用来八卦别人，说长道短，你既不可能改善自己的生活，也不会让你有所成长，更不会提升你的影响力。记住，你的影响力不是你对别人说长道短的能力，而是体现在有多少人信赖你并希望得到你的帮助。因此，多交一些有想法的朋友，多把自己的想法付诸实践，哪怕没有成功，你的人生也会比别人过得有意义。”\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "日本东京&大阪游记",
    "url": "/2023-12-17/jp.html",
    "date": "2023-12-17",
    "categories": ["Life"],
    "summary": "11月底去日本玩了5天，第二次去日本玩，想用这篇文章来记录一下看到、听到、和本地朋友聊天等方式下和自己固有想法不一样的地方，或者说是我自己的独特感受，可能有偏差欢迎指出，也希望给后面去玩的朋友一些输入。",
    "content": "缘起 疫情几年一直没有机会出国，很是难受，11 月底的时候团队 Outing 目的地首选就是出境游，最终小伙伴定下来日本大阪，由于 5 年前我去大阪玩过，所以想着这次行程安排成大阪落脚玩 1.5 天，剩余 3 天全部在东京玩，看看亚洲第一的城市东京怎么样，刚好那个时候在看《纸房子》，里面有一个角色也叫东京，那就对东京更加向往了。 这篇游记想随便讲讲出发前准备、旅途中所见，旅途过程中和我想的不一样的地方这几块，希望可以给看到的朋友一点输入，里面的观点可能也有我理解偏差，欢迎指出。 出发前 出发前主要就是办签证，买充电宝，买保险，下谷歌地图和翻译软件，Apple Pay 西瓜卡充钱，银行换钱（我懒，出发前找同事换的），买日本流量卡（不要贪便宜，可以买流量多一点的），提前填写日本入境申报材料，这里大部分小红书都可以找到教程。 杭州机票去大阪很便宜，来回才 1500 块，然后订酒店，酒店记得上次也是差不多大阪订在了难波，去周围都很方便，此外订酒店的时候建议多试几家，比如说 Booking、Agoda、谷歌地图、飞猪、携程都可以去看看，包括评价和位置，找到性价比更不错的。 由于汇率实在很便宜，加上免税，对奢侈品感兴趣的建议做好功课，买到合适的好比可以帮你省去机票和酒店费用了 😁 不过建议回国的时候记得把盒子以及发票给扔了或者放到其他人行李箱里面。 甚至为了安排行程我还做了一个脑图，不过很多时候计划赶不上变化，就最多只是一个参考了，详细行程在第二部分来说。 旅途 旅途第一天 · 大阪 其实也不算一天，当天杭州中午吃完饭就出门了，然后地铁直接到机场，4 点左右飞机，全程 2 小时 20 分钟到大阪，感觉真的很近，相比我从杭州去一趟新疆玩，可以去 3 躺日本了的距离。 由于日本在东九区，会比国内东八区早一个小时，好比当时我们到的时候日本时间晚上 8 点，其实国内才 7 点，最后坐地铁到酒店大概 9 点多，办好入住以后，出去逛了逛，哈哈比如说飞田新地料理组合是个好地方，逛完后到 10 点多当时很多吃饭地方都关门了，找了个日本本地烧烤大排档吃了点儿东西。 由于是第二次去日本玩，和第一次的新鲜感不太一样，所以会特地观察当地事物，发现些不一样的地方，我打算放到最后一个章节一起来汇总下。 旅途第二天 · 东京市区 大阪到东京可以坐飞机、新干线、夜间巴士，飞机想着来回麻烦...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的咖啡机入门实践",
    "url": "/2023-11-20/coffee.html",
    "date": "2023-11-20",
    "categories": ["Life"],
    "summary": "如何不到一千块钱实现每天好喝咖啡自由？想通过这篇短文来给大伙分享一下我的咖啡机购买使用以及配件选择的经验，属于最近买得最有生活意义的一个物件。",
    "content": "\n\n如何不到一千块钱实现每天好喝咖啡自由？想通过这条短文来给大伙分享一下我的咖啡机购买使用以及配件选择的经验，属于最近买得最有生活意义的一个物件。\n\n最近几乎每天早上起床后，第一件事是磨咖啡豆，然后用半自动咖啡机萃取，弄半杯牛奶打成热奶泡，融合到咖啡里面，满满一杯，加上窗外透进来的早上的太阳，一股咖啡油脂微苦香醇味道和牛奶香甜味结合一起甚是满足，一个月用下来咖啡豆用得很少，牛奶用了几盒，价格相比买星巴克实惠太多了，关键这个动手制作过程以及味道远比买咖啡的过程好太多了，一个月机器成本就回来了。\n\n咖啡机有好几种，比如说胶囊咖啡机，使用简单快速，也有全自动咖啡机，功能丰富操作要求低，直接按钮下就都好了，我选择的是半自动咖啡机，在山姆买的德龙 ECP33.21.W 这款，才 629 元，白色金属机身很有质感，就两个功能，萃取和打奶泡，使用其实也不难，选择半自动更多是喜欢动手这个过程，同时功能简单也好清洗，我认为这款很适合初学者，有质感还耐用。\n\n咖啡豆也是在山姆购买的，买前小红书查了查推荐，买的 MM 经典意式拼配咖啡豆 1kg 99 元，橙黄色包装那一款，买后打开倒入保存罐那个瞬间真的太太太舒服了，咖啡油脂香味颗粒饱满，那股透出来的咖啡香味至今难忘，味道真正喝起来也超出我的预期，不太酸也不太苦但很醇香，喝了快一个月居然消耗量很少。\n\n牛奶一开始就有预期，一定要买适合咖啡的牛奶，全脂的会更香，第一次试的山姆的蒙牛鲜牛奶 2L 才 20 元，性价比超级高，味道我感觉也挺不错，就是量太大了，每天一杯的消耗比较难在保鲜期内用完，后面有试过盒马的明治醇壹牛乳，入口醇厚，这个也不错，后面尝试了不少咖啡朋友推荐的优诺 4.0，盒马没货了，买了 5.0 也很不错，香甜味结合咖啡有一种刚刚好的感觉，后面我应该这几款会继续使用。\n\n聊到咖啡机配件，最不要忘记的就是磨豆机，我选择的是电动的，最开始想着手摇更有仪式感，后面一想没必要，意式需要磨很细的粉，手工太累了。磨好粉就是需要把粉压平压紧了，咖啡机只送了一个勺子和压咖啡两用的塑料工具，我感觉质感一般，就去弄了个金属勺子，然后想让做咖啡过程更有仪式感，就买了布粉器和压粉器，作用就是让咖啡压得更平整和更紧，我认为属于辅助用品，用机器送到那个勺子也还行，用这个更好。然后买了一个冲奶金属杯，这个相比玻璃杯好太多了，倒奶摸温都很方便，后面买了小刷子和咖啡抹布以及敲渣桶，这三个小东西便宜，但是超级方便好用，远比之前我用纸来清理好了不知道多少。\n\n关于做咖啡过程，我还没有学会拉出好看的花，只能说好喝而已，咖啡萃取需要注意时间不能太久，唯一有点儿操作的就是如何打出绵密的奶泡可以小红书学习练习，我的技巧是蒸汽头位置先放中心点然后斜转到 3 点钟方向，奶泡高速旋转，到杯壁烫手的时候就可以关掉了，然后斜斜倒入咖啡中。\n\n总之，没有买之前认为买了肯定吃灰，买之后发现居然每天都习惯做一杯咖啡迎接我的起床，让起床居然都有了动力，很像大学时候每天起床的动力是食堂吃个刚做的好吃肉夹馍和现磨豆浆的那种期待感。朋友来家里还会很迫不及待给做杯咖啡让尝尝我的手艺，这种感觉挺好。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "新一代前端发展的困境与破局",
    "url": "/2023-10-25/new-fe.html",
    "date": "2023-10-25",
    "categories": ["Share"],
    "summary": "在重庆前端大会上的一个分享，对象为 React/Vue 出来之后的新一代前端开发者，在造轮子时代已经过去、国内前端环境很卷的情况下，前端工程师的成长路径相比之前要难不少，在这些困境下，分享如何以一种新的方式破局，用前端技术去真正解决业务难题，提升产品工程师实力，让自己以最不卷的方式成长起来。",
    "content": "概述\n\n在重庆前端大会上的一个分享，对象为 React/Vue 出来之后的新一代前端开发者，在造轮子时代已经过去、国内前端环境很卷的情况下，前端工程师的成长路径相比之前要难不少，在这些困境下，分享如何以一种新的方式破局，用前端技术去真正解决业务难题，提升产品工程师实力，让自己以最不卷的方式成长起来。\n\n观点只代表个人也不一定对，随便看看，PDF 文件以及分享视频在底部。\n\n内容\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n更多\n\n\n  PDF文件\n  B站视频\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的自行车入门实践",
    "url": "/2023-10-06/dahang.html",
    "date": "2023-10-06",
    "categories": ["Life"],
    "summary": "买了一辆大行 P8 很是喜欢，想来整理一个入门者自行车周边的最佳实践，希望可以给想骑车的小伙伴一些入门参考，哈哈有想抄作业的可以抄一抄。",
    "content": "买了一辆大行 P8 很是喜欢，想来整理一个入门者自行车周边的最佳实践，希望可以给想骑车的小伙伴一些入门参考，哈哈有想抄作业的可以抄一抄。\n\n骑自行车好处很多，我感觉最明显的就是睡眠变得超级好，甚至玄学了，每天差不多来回上班一共 12km，中午晚上睡觉的时候基本上放下手机后 5 分钟内就睡着了，而且中途睡得很香，骑车相比其他运动还有一个好处就是边运动边享受，有风，加上杭州绿色植物超级多，路上的桂花香，阴凉处，各种各样路边的花，骑车很舒服的。\n\n\n\n关于自行车的选择，一般可以选择折叠车和公路车，由于我属于日常骑行，加上有一个大诉求就是可以折叠放后备箱，可以开车出去找一个地方，然后拿下自行车直接骑，甚至骑车在路上下雨或者不骑累了直接打个车就回去了，所以选择的折叠车，折叠车做得不错的有小布和大行，前者价格一两万虽然很好看但是想了想没必要，大行属于质量很好，价格合适，加上「大行 P8 经典款」去店里看过，消光黑很漂亮，加上很保值耐操，最后没有犹豫 3500 左右拿下。当然假如你更爱颜值，也可以试试大行 D7 橄榄绿复古版真心好看。\n\n关于自行车配件的选择，首先推荐第二张图中的「洛克兄弟自行车尾包」，太太太实用和贴合大行了，之前有买过两个其他的自行车包都被我纠结给退了，这个包平时出门放个水，放手机耳机啥的超级方便，而且才 55，而且放到后面对于强迫症而言看不到很舒服，之前买过一个水壶架装到杠子上，由于使用频率很低加上影响观感，用了 2 天就给拆了，所以假如不是远途经常使用需要路上喝水的，不建议安装。\n\n\n\n骑行骑行第一步，需要买「头盔和骑行眼镜」，前者属于为了安全必须要买，后者属于出太阳不带眼镜真的很刺眼，我的考虑点是首先要耐操，其次需要美观，太丑的不考虑，最后逛线下迪卡侬给买的，头盔选择深蓝迷彩，很轻盈舒适透气，特别夏天骑车一点不热，价格 250 左右。骑行眼镜考虑到质感选择的他家的骑行防雾高对比太阳眼镜，价格 130 的样子，也是很耐操。\n\n还有几个小东西，买车可能大家首先想到要买一个锁，我也是，最后发现使用频次很低，而且放车上也不方便，骑行老手一般会说「买锁是丢车的第一步」，最后我基本上就不带锁了，但是为了防止丢失，加上 P8 的铃铛其实不是不响亮，心想是不是可以换一个铃铛，结果搜索的时候发现一个神奇物件「AirTag 铃铛」，也就是这个铃铛里面可以放下 AirTag 隐藏掉，同时本身是一个铃铛，这个设计实在太巧妙了，然后又下单了一个 AirTag，解决了锁车和铃铛的烦恼，铃铛到货以后，相比原始的那个好按很多，声音还响亮，深得我心了，铃铛买也是洛克兄弟家的，不到 30 块解决。然后对于夜间骑车假如想安全一点，需要买一个「前后灯」，假如平时都是宽敞亮路其实可以不买，我的是迪卡侬买的一套，防水电量很耐用，也耐操看着简洁，不过稍贵 200 块的样子。\n\n大行这款车还有一个不算缺点但是对于新手会觉得不舒服的地方，就是座椅其实有些硬，当然专业人骑车会穿骑行裤，但是对于我这种日常业余的感觉必要性不大，所有需要找一个「软垫」包裹一下，我的这个线下买的，不记得牌子了，和这款车很贴合，大家可以去搜索同款车的软坐垫应该就好了。\n\n关于记录软件，我平时一般用 Keep，可以比较方便和手表结合同时给我报时报骑了多久，还可以记录路线使用还算方便，当然苹果运动其实也方便好用，习惯哪一个用哪一个就好了，我当前骑了 430km 了，感受还不错。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的家庭影院入门实践",
    "url": "/2023-09-29/tv.html",
    "date": "2023-09-29",
    "categories": ["Life"],
    "summary": "分享一下 Apple TV + 索尼 + 回音壁 + 后环绕音箱 组成的家庭影音搭建过程，不少朋友想要详细教程，我随便写了下给大伙参考，欢迎交流。",
    "content": "分享一下 Apple TV + 索尼 + 回音壁 + 后环绕音箱 组成的家庭影音搭建过程，不少朋友想要详细教程，我随便写了下给大伙参考，欢迎交流。 关于配置 我比较追求极简和性价比以及不能接受交了钱还有广告，平时看国外剧稍多，很喜欢看电影类，所以选择了 Apple TV 做电视盒子，配置如下： Apple TV 7 港版 128g 淘宝代购 电视索尼 X90L 75 寸 回音壁 三星 Q600B 后环绕 三星 9200S 路由器 小米 AX9000 关于软件 Netflix，这个强推，我很喜欢看网飞的电视剧，相比国内电视剧做得精致很多，同时没有美图秀秀滤镜感，平时使用新加坡节点方便看到华人相关的推荐。 Youtube，这个空余时间用得很多，大部分视频画质很好，平时用来看有趣的 UP 主，偏数码、国际新闻、演唱会、台湾综艺类比较多。 Spotify，现在是我手机、电脑默认音乐播放器使用的这个，电视就习惯使用这个了，相比其他的歌多、音质好，还可以听播客。 VidHub，结合阿里云盘使用，我之前使用的 Infuse，由于索引比较慢就切到这个来了，很快性能很好，用来补充网飞、Youtube 上面没有的内容，比如说喜欢看的甄嬛传，以及各种韩剧。 Cheers，B 站的第三方软件，做得还不错，也支持弹幕，之前比较爱看，现在由于前面很多内容满足使用，现在偶尔使用。 APTV，看卫视电视，其实我平时几乎不用，不过有时候家里老人过来，可以给他们用用，各种国内的电视台。 Stash，由于手机使用的这个，能够很好支持多端同步以及部署，以及设置不同域名对应的节点，这里不多说。 还有一个功能用得比较多，就是 iPhone 手机视频可以比较好的共享到...",
    "lang": "zh-CN"
  },
  
  {
    "title": "该以一种怎么样的心态来对待开源",
    "url": "/2023-09-18/open.html",
    "date": "2023-09-18",
    "categories": ["Thought"],
    "summary": "最近好几位我喜欢的开发者被开源工作影响到了心情，加上国内的开源环境氛围不是很好，想碎碎念来聊一下，对于开发者和使用者，我们应该以一种怎么样的心态来对待开源，让自己可以持续的快乐写自己喜欢的代码。可能有些我理解偏差地方，很欢迎大伙指出。",
    "content": "最近好几位我喜欢的开发者被开源工作影响到了心情，加上国内的开源环境氛围不是很好，想碎碎念来聊一下，对于开发者和使用者，我们应该以一种怎么样的心态来对待开源，让自己可以持续的快乐写自己喜欢的代码。可能有些我理解偏差地方，很欢迎大伙指出。\n\n对于开发者而言\n\n\n  \n    首先我们明确一个大前提，我写开源代码是为了让我 Happy，写自己喜欢的代码对于工程师而言真的是一件很幸福的事情，要是作品被很多人也喜欢上那就更 Happy 了。基于这个前提，就很简单了，远离一切影响我们开心的事情，首先要做的就是要拒绝，拒绝不合理的需求，拒绝你不想做的事情。\n  \n  \n    其次需要意识到其实我不需要那么负责，首先开源作品本身就是为爱发电，我们并没有通过这个来商业化赚钱，也没有签甲乙方协议，优秀程序员在工作中对待事情会很认真很负责，但是在开源社区中，假如在你时间不是很够的情况下，过于负责会让你超级心累的。\n  \n  \n    让更多人来给你帮忙，超级喜欢玩 Github 的原因是里面有很多有趣而且能力很强的小伙伴，我们可以 在使用者中寻找一批不错的同学来一起参与进来，他们也会和你一样当作一件很快乐的事情来写代码，同时你会接受到大量的反馈和建议，甚至是技术的相互学习，这样可以帮助你省去很的力气，有更多时间专注在项目长远发展上。\n  \n  \n    不要建立易于加入的社交群，开源过程中其实写代码是最轻松的，往往面对刁难不礼貌的、或者不停问重复问题的用户会让开发者很心累的，所以这里有一个很有必要的建议，不要建立微信用户群、不要建立钉钉用户群、不要建立飞书用户群，一切很方便国内社交工具加入的答疑群都不要建立，因为加入成本很低，使用者碰到问题会很急，会让你耗费大量时间解决问题。推荐使用 Github 中的 Issues 来反馈 Bug，通过 Discussions 来交流，因为这种方式是异步的，不会让你心累。\n  \n  \n    如何让自己更省心？ 除去上面说的这些，还有一些地方关注到会让你更省心，首先开源产品一定要有清晰易于阅读的文档、FAQ、贡献文档，有问题先引导用户去查文档自己解决，在代码清晰有提交教程的情况下，有能力的用户可以自己来帮你提交代码，这个过程会省去很多力气。还有一个重要的，难免代码会有 Bug，发布前的仔细测试至关重要，没有问题的代码，让使用者也会舒服些。\n  \n\n\n对于用户而言\n\n\n  \n    抱着合作的心态超级重要，很多时候开发者也是使用者，使用者是指使用他人开源项目的小伙伴，作为使用者的我们在寻找帮助之前需要意识到，开源项目的用户和开发者之间并不是甲方和乙方的关系，同时开发者不是客服，我们在碰到问题，或者不爽时候，更多应该抱着『一起合作来解决这个问题』的心态来弄，有任何建议或者使用不爽的地方，或者自己觉得这样弄更好，直接描述清楚通过 issue 或者邮件的方式去沟通解决，给维护者更多的输入，这样才能更好促进其发展。\n  \n  \n    抱着好奇和学习的心态，很多时候作为用户的自己去逛开源社区，逛 Github trending，经常会发现很多超级好玩的东西，也会觉得，卧槽这人好牛逼，这个代码写得真好的感叹，然后 clone 下代码，本地运行跑跑看，假如发现可优化的，就顺手提一个 PR 挺好玩的。\n  \n  \n    抱着我也可以成为开发者的心态，用户其实完全没有必要仰望开发者，其实大家都一样，也是一步一步写代码过来的，只不过他玩开源起步比你早而已，其实我们只要坚持下去，从易于接近的问题上去参与到社区贡献，甚至在你喜欢的开源产品下帮忙答疑，慢慢的让作者带着一起写代码，其实也是一种很不错的成长路径。\n  \n\n\n最后，我想说的是 Please feel free to use and contribute to the development. 大家都轻松些，松弛些，写开源和用开源都是为了我们工程师那种独特的 Happy，不需要较真。\n\n也很期待国内的开源氛围在大伙的努力下越来越好。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "2023 我的浏览器折腾之旅",
    "url": "/2023-08-20/edge.html",
    "date": "2023-08-20",
    "categories": ["Creation"],
    "summary": "浏览器应该是不少同学电脑上使用频次最高的应用，对强迫症而言，会经常将干活的工具折腾到好用的状态。去年有写过我的 Mac 软件折腾之旅，经过一年的迭代变化，打算今年继续写，刚好有朋友问我用的是什么浏览器，那就从「2023 我的浏览器折腾之旅」开始吧。",
    "content": "为什么要写 浏览器应该是不少同学电脑上使用频次最高的应用，对强迫症而言，会经常将干活的工具折腾到好用的状态。去年有写过我的 Mac 软件折腾之旅，经过一年的迭代变化，打算今年继续写，刚好有朋友问我用的是什么浏览器，那就从「2023 我的浏览器折腾之旅」开始吧。 好用浏览器的特征 除去当前浏览器的兼容性都没有啥问题了，包括在安全这一块大家也都差不多，那么对于我来说一个好用的浏览器应该具备哪些特性呢？ 轻快放第一位：打开网页的速度必须要快，这个是第一要义，同时不能太卡，有一种猎豹之感。 几乎都可配置：可以将我不需要的东西都关闭掉，即使默认初始化效果一般，但是需要都可以关闭掉。 简单易用漂亮：一定要简单易用，有确定性，想要的东西可以立马找到，同时窗口展示不能太丑。 使用过的浏览器 刚好周六做了一个问卷调查，回收回来 948 份答案，对象太多是工程师或者对于 IT 感兴趣的同学，答案和我想的差不太多，此外还有 40 个左右很喜欢火狐浏览器的。 大部分同学使用的应该是 Chrome 浏览器，下载下来以后，简单易用，速度也还可以的，不过性能其实一般般，特别是之前用 19 款的 Mac 时候对比很明显。同时我比较钟爱垂直侧边栏，顶部的 tab 拦对于我而言会有些浪费空间。 我还比较深度使用过 ARC 浏览器，一个超级漂亮，交互超级出众的潮流浏览器，不过每次我基本上是用几天，就感觉用不下去了，满足漂亮这点，当时我认为在操作确定性、轻快性能上相比传统浏览器要差一点。 除去这些，还有 Firefox，大学 Windows 时代最喜欢的浏览器，不过后面由于扩展兼容性的原因加上标准不太一致工作写前端就没有用了。其他的还使用过 Opera、Vivaldi、Brave 这几个，Opera 由于不支持侧边栏给放弃了，Vivaldi 过于可定制化使用起来太麻烦了，Brave 其实还可以，假如你注重隐私的话，也支持侧边栏，单我感觉不是很漂亮，就放弃了；此外还有 Mac 上面众多苹果开发者超级喜欢使用的 Safari，我很喜欢他的简洁，但是不兼容 Chrome 扩展，然后每次装扩展相当于多装一个 App，也被我放弃了。 最后我的选择 去年我的 Mac 软件折腾之旅介绍浏览器部分就是 Edge，今年居然还是...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Pake：用 Rust 和 Tauri 把网页打包成桌面应用",
    "url": "/2023-08-03/pake.html",
    "date": "2023-08-03",
    "categories": ["Creation"],
    "summary": "Pake 用 Rust 和 Tauri 把网页打包成体积小、速度快的桌面应用。这篇来自一次跨端技术分享，记录 Pake 开源过程中的思考和经验，以及我在前端、Rust 和技术产品化上的一些想法。",
    "content": "上周四在掘金的跨端技术分享上的一个主题，将 Pake 开源过程中的一些思考和经验分享给大家，同时也聊了聊前端、Rust、开源、技术产品化的一些自己想法，欢迎感兴趣的同学一起交流，有没有讲清晰的地方辛苦直接指出。 本文分成两部分，第一部分是分享的 Keynote 以及视频，第二部分是我的分享学习笔记，里面会有一些关于 Rust 更详细的知识。 分享文档 键盘左右可切换，PC 可右下角全屏按钮可全屏查看，鼠标移动到左侧边栏可查看目录，视频可见 Youtube。 全屏 自问自答 Rust 中的内存管理原理 在 Rust 中，内存管理是通过所有权（Ownership）、借用（Borrowing）和生命周期（Lifetimes）这三个概念来实现的。这种机制使得 Rust 在没有垃圾回收的情况下也能保证内存安全。 所有权：在 Rust 中，每一个值都有一个被称为其所有者（owner）的变量。值在任何时候都只能有一个所有者。当所有者（变量）离开作用域，这个值将被丢弃（drop）。 借用：在 Rust 中，借用是一种让你访问数据但不获取其所有权的机制。当你创建一个引用时，你就是在借用数据，Rust 有两种类型的借用：可变借用和不可变借用。不可变借用用 &amp; 符号表示，可变借用用 &amp;mut 表示。不可变借用允许同时有多个引用，但他们只能读取数据，不能修改。可变借用只允许有一个引用，但是可以修改数据。 Rust 中的内存安全和线程安全怎么理解？ 内存安全：Rust 使用所有权系统和借用检查来确保内存安全。每个值在 Rust 中都有一个称为其“所有者”的变量。值只能有一个所有者，当所有者离开作用域时，值会被自动清理。这可以避免诸如空指针解引用、双重释放、悬垂指针等问题。另外，Rust 的借用检查器确保了引用的有效性。在任何给定时间，要么只能有一个可变引用（用于读写数据），要么只能有多个不可变引用（用于读取数据），但不能同时有这两种引用。这个规则阻止了数据竞争和其他并发相关的内存错误。 线程安全：Rust 的所有权和借用规则同时也保证了线程安全。由于在任何时刻，一个值要么只有一个可变引用，要么只有多个不可变引用，这确保了在没有加锁的情况下，也不会出现数据竞争的问题。另外，Rust 的类型系统和标准库中还提供了一些并发抽象，如Arc（原子引用计数类型）和Mutex（互斥锁），它们提供了线程间共享状态的安全方式。 通过这些规则和工具，Rust 能够在编译期就捕捉到许多常见的错误，使得开发者可以编写出更安全、更可靠的代码。 介绍一下 Rustc Rustc 是 Rust 编程语言的官方编译器，它把...",
    "lang": "zh-CN"
  },
  
  {
    "title": "译·如何做出伟大的工作",
    "url": "/2023-07-20/great.html",
    "date": "2023-07-20",
    "categories": ["Study"],
    "summary": "最近「黑客与画家」的作者出了一篇新的文章《How To Do Great Work / 如何做出伟大的工作》，写得特别好，很符合我的胃口，我用 ChatGPT4 给翻译了一下，帮大伙省下 Token，全文很长，可以有空时候细看。",
    "content": "最近「黑客与画家」的作者出了一篇新的文章《How To Do Great Work / 如何做出伟大的工作》，写得特别好，很符合我的胃口，我用 ChatGPT4 给翻译了一下，帮大伙省下 Token，全文很长，可以有空时候细看。 如果你收集了很多不同领域内做出卓越工作的技巧列表，那么它们的交集会是什么样子呢？我决定通过实践来寻找答案。 我的部分目标是创建一份能被任何领域的工作者使用的指南。但我也对这些技巧交集的形状感到好奇。这个尝试展示出，它确实有一个明确的形状，而不仅仅是一个贴着“努力工作”标签的点。 以下的秘诀假定你有非常高的抱负。 首先，你要决定从事什么工作。你选择的工作需要具备三个品质：你有天生的适应能力，你对它有深厚的兴趣，同时它还要能提供展现你伟大工作的空间。 实际上，你不必过于担心第三个条件。雄心壮志的人往往在这方面过于保守。所以你只需找到你有能力且有强烈兴趣的事情即可。 这听起来很直接，但实际上往往很困难。当你年轻的时候，你不知道你擅长什么或者各种工作是什么样的。你最后可能会做的一些工作可能现在还不存在。所以，虽然有些人在14岁的时候就知道他们想做什么，但大多数人还是需要自己去摸索。 找出要从事什么工作的方法是通过实际操作。如果你不确定应该做什么，就猜。但是必须选择一件事情并开始行动。你可能有时会猜错，但没关系。了解多样性的事物是有益的，很多重大的发现都源于注意到不同领域之间的联系。 养成自我研究项目的习惯。不要让“工作”只是别人告诉你要做的事。如果你真的能做出伟大的工作，可能会在你自己的项目中。这可能会在某个更大的项目内，但你将是驱动你那部分的人。 你的项目应该是什么？对你来说，什么都可能是令人兴奋的挑战。随着你年纪的增长和项目口味的演变，刺激和重要会汇聚在一起。在7岁的时候，建造乐高大作可能会让你觉得挑战重重，然后在14岁的时候，自学微积分可能会让你觉得挑战重重，到21岁的时候，你可能开始探索物理学中未解的问题。但是，始终保持那份激情。 有一种兴奋的好奇心是伟大工作的引擎和舵。它不仅能驱使你前进，而且如果你让它自由发挥，它还会告诉你应该做什么。 你对什么过于好奇——到让大多数其他人都觉得无聊的程度？这就是你要找的。 一旦你找到了你非常感兴趣的东西，下一步就是学习足够多的知识，让你能够达到知识的前沿。知识是以分形的方式扩展的，从远处看，边缘看起来很平滑，但是一旦你学得足够多以接近它们，你会发现它们其实充满了缺口。 下一步就是去发现这些缺口。这需要一些技巧，因为你的大脑希望忽视这些缺口，以便构建一个更简单的世界模型。许多发现都来自于对大家都视为理所当然的事情提出疑问。 如果答案看起来很奇怪，那就更好了。伟大的工作往往带有一点奇特的气质。你从绘画到数学都能看到这一点。试图刻意制造它可能会显得做作，但如果它自然出现，就拥抱它。 大胆地追求异常的想法，即使其他人对它们不感兴趣——实际上，尤其是在他们不感兴趣的情况下。如果你对所有人都忽视的某种可能性感到兴奋，而你又有足够的专业知识来精确指出他们都忽视了什么，那么这就是你能找到的最好的选择。 四个步骤：选择领域，学习足够的知识以到达前沿，发现缺口，探索有前景的缺口。这就是几乎所有做出伟大工作的人都是如何做到的，从画家到物理学家。 第二步和第四步需要付出艰辛的努力。也许不能证明你必须努力工作才能做出伟大的事情，但实证证据是与证明人会死一样有力。这就是为什么你需要投身于你深感兴趣的事情。兴趣能驱使你比单纯的勤奋工作更努力。 最强大的三种动力是好奇心、喜悦和希望做出令人印象深刻的事情。有时它们会交汇，那种组合是最有力的。 真正的大奖就是发现一个新的分形芽。你发现知识表面上的一条裂缝，将其撬开，里面竟是一个完整的世界。 让我们再多谈一点关于如何找出要从事什么工作这个复杂问题。主要难点在于，除非亲自去做，否则你无法了解大部分工作是什么样的。这意味着四个步骤是交叠的：你可能需要在某项工作上花费几年的时间，才能知道你对它有多喜欢或者你在这方面有多能干。而与此同时，你并未从事，因此也未能了解大部分其他类型的工作。因此，在最坏的情况下，你可能会在获取的信息非常不完整的情况下做出迟来的选择。[4] 野心的本质使得这个问题更加棘手。野心有两种形式，一种是对主题感兴趣之前的野心，一种是从对主题的兴趣中生长出来的野心。做出伟大工作的大多数人都有这两种野心的混合体，你对前者的拥有越多，决定要做什么就越困难。 大多数国家的教育系统假装这很容易。他们希望你在知道这个领域真正是什么样子之前就致力于它。结果就是，一个处在最佳轨迹上的有抱负的人在系统中往往会被认为是有问题的。 如果他们至少承认这一点——如果他们承认这个系统不仅不能帮助你找出要从事什么工作，而且还是建立在你将以某种神奇的方式作为青少年来猜测的假设上——那就好了。他们没有告诉你，但我会告诉你：当你试图弄清楚该做什么时，你就是自己的主人。有些人运气好，猜对了，但其他人可能会发现自己在一个基于每个人都会这样做的假设而铺设的轨道上横冲直撞。 如果你年轻有抱负，但不知道该做什么，你应该做什么？你绝不能漫无目标地漂流，假设问题会自行解决。你需要采取行动。但是没有系统的程序可以遵循。当你阅读做过伟大工作的人的传记时，你会发现运气在其中起了多大的作用。他们通过偶然的会面，或者阅读他们碰巧选到的书，发现了应该做什么。所以，你需要使自己成为运气的大目标，而做到这一点的方法是保持好奇心。尝试许多事情，遇见许多人，阅读许多书，提出许多问题。[5] 在疑惑之际，优化有趣性。随着你对它们了解得越来越多，领域会发生变化。例如，数学家所做的事情与你在高中数学课上所做的事情非常不同。所以你需要给不同类型的工作一个机会，让他们向你展示他们是什么样的。但是，当你对一个领域了解得越多，它应该变得越来越有趣。如果没有，那么它可能就不适合你。 如果你发现自己对其他人不感兴趣的事情感兴趣，不要担心。你的有趣口味越奇怪，就越好。奇怪的口味通常是强烈的口味，对工作的强烈口味意味着你会有生产力。而且，如果你在鲜有人走过的地方寻找，你更有可能找到新事物。 你适合某种工作的一个标志是，你喜欢其他人觉得枯燥或者恐怖的部分。 但是，领域不是人；你不欠它们任何忠诚。如果在做某件事的过程中，你发现了另一件更让人兴奋的事情，不要害怕转换。 如果你正在为人们制作一些东西，一定要确保那是他们真正想要的东西。做到这一点的最好办法就是制作你自己想要的东西。写你想读的故事；制作你想用的工具。由于你的朋友可能有相似的兴趣，这也会为你赢得你的初始观众。 这应该遵循让人兴奋的规则。显然，最让人兴奋的故事将是你想读的故事。我特别提到这个例子是因为有太多的人弄错了。他们没有制作他们想要的，而是尝试制作一些他们想象中的，更成熟的观众想要的东西。一旦你走上那条路，你就迷失了。[6] 在你试图找出要做什么时，有许多力量会让你走错路。矫饰、时尚、恐惧、金钱、政治、别人的愿望、声名狼藉的骗子。但是，如果你坚持你真正感兴趣的事情，你就能抵挡住所有这些。如果你感兴趣，你就不会迷路。 追求你的兴趣可能听起来像是一种相当被动的策略，但在实践中，它通常意味着你需要冒着各种困难去追求它。你通常需要冒着被拒绝和失败的风险。所以，这确实需要相当大的勇气。 但是，虽然你需要勇气，但通常不需要太多的规划。在大多数情况下，做出伟大的工作的秘诀简单来说就是：努力工作，从事令人兴奋的雄心勃勃的项目，这样就会有好的结果。你无需制定一个计划然后去执行它，你只需要尽力保持某些不变的东西。 规划的问题在于，它只适用于你可以提前描述的成就。你可以在儿童时期决定要赢得金牌或者变富有，然后坚持不懈地追求这个目标，但你不能以这种方式发现自然选择。 我认为对于大多数想要做出伟大工作的人来说，正确的策略不是过多地规划。在每个阶段，做最有趣的事情，并为未来保留最好的选项。 我称这种方法为“顺风而行”。这似乎是大多数做出优秀工作的人所采用的方式。 即使你找到了令人兴奋的工作，进行工作并不总是直截了当的。有些时候，新的想法会让你早晨从床上跳起来，直接开始工作。但也有很多时候，事情并非如此。 你并不是简单地扬起帆，让灵感吹动你前进。存在逆风、潮流和隐秘的浅滩。所以，工作就像航海一样，有其技巧。 例如，你必须努力工作，但是也有可能工作过度，如果这样的话，你会发现收获递减：疲劳会让你变得愚蠢，最终甚至会损害你的健康。工作的回报递减的点取决于工作的类型。最难的类型你可能每天只能做四五个小时。 理想情况下，这些小时应该是连续的。只要你能做到，尽量安排你的生活，使你有大块的时间用来工作。如果你知道可能会被打断，你就会避开艰难的任务。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "香港和想象中不一样的地方",
    "url": "/2023-07-02/hongkong.html",
    "date": "2023-07-02",
    "categories": ["Life"],
    "summary": "第一次去香港，平时旅游不太喜欢赶场打卡，反而喜欢观察人文环境，发现不少和想象中不一样的地方，放到这里随便聊聊。",
    "content": "缘起 几个月前，经过狼叔叔的介绍，GIAC 全球互联架构大会叫我去分享一个 Rust 和大前端结合的主题，一看是在深圳，立马给答应了，因为去过不少其他地方，居然还没有去过深圳和香港，有几个好哥们在那边，想着终于有一个“借口”过去，挺好的。 但是周五晚上的飞机杭州到深圳，常规性从 7 点 40 晚点到 10 点 40，到深圳快凌晨 1 点多，从机场走到外面真久，走了 20 多分钟，然后打车到酒店就 2 点半了，困死我了。 我在第二天下午的分享场，上午过去听了听，发现 AIGC 是真的火，Web 3.0、Node 场有点儿没落的感觉，结束后，晚上哥们带着去吃了一个烧烤，深圳虽然玩的不多，但生蚝是真的 YYDS，吃完后去逛了下深圳湾，海边，看到对面的香港，差不多了去虚渡喝了点儿酒，随便聊聊，挺开心。 第二天一早就去香港了，直接早上打车去福田站，然后高铁 15min 就到香港西九龙站，和坐地铁差不多，只是多了一个出入境。 见闻 第一次去香港，平时旅游不太喜欢赶场打卡，反而喜欢观察人文环境，发现不少「和想象中不一样的地方」，放到这里随便聊聊。 周天，公园/广场/桥上有大量的菲佣阿姨聚会，这个量让我很惊讶，外面还下着大雨，她们拿着大包小包放在旁边，穿着花花绿绿衣服，然后铺一张薄膜一伙人坐到地上，吃东西聊天，有说有笑，也有唱歌的，还有和家里视频聊天的，有一种快乐打工放假的愉悦感，在维多利亚港看到了很多，后面在九龙公园也看到不少，很热闹，后面查了查，应该周天是她们的放假休息日，平时餐厅商场消费过高，所以公共场合带上自己做的好吃的来和同乡好有来聚会是一个不错的选择，哈哈有点儿像我们国内低配版的露营活动，也可见香港这一块包容做得挺好的。 香港的物价着实比我想的要高不少，一瓶水 10 港币，当前汇率和人民币好比打九折，可以近似差不多，买个全家的小三明治 30 港币，好一点的餐厅看了看人均 500，直接把我给劝退了，不过星巴克和国内价格差不多。人工服务费比想象中高很多，在西九龙站早上寄存了个行李箱晚上取花了 140，假如你的开柜密码忘记了，找工作人员帮忙，还需要额外付 60，着实惊讶我了，后面想去一个 1.5 公里地方打开 Uber 看了下，直接 60 港币，给我劝退了，有一种在日本打车的感觉，好在这边地铁很密集，公共交通出行也没问题。但是有些地方又感觉和国内价格只贵一些，去尖沙咀吃了下当地特色「华嫂冰室」，两人点了 5 份吃的一共花了不到 160，很饱很满足。 公共场所的无障碍能力做得特别好，一种很平等的氛围，几乎所有的红绿灯、电梯、地铁对于视障用户做的很友好，红绿灯有嘟嘟嘟嘟的声音来提示是否可以通过，仔细看电梯扶手、地铁栏杆都有明显的盲文可被盲人摸到，甚至地铁站入站那里还有盲文可被阅读和通过按钮方式交互。 交通这一块很有特别，首先是车牌，居然可以随便组合，比如说你在国内看到...",
    "lang": "zh-CN"
  },
  
  {
    "title": "全飞秒近视手术过程和恢复记录",
    "url": "/2023-05-17/eyes.html",
    "date": "2023-05-17",
    "categories": ["Life"],
    "summary": "5月中旬做了一个全飞秒近视手术，在这里记录一下当天、术后的感受，希望可以给到好奇的同学一些参考。",
    "content": "更新于2026年2月10日，补充做完以后 2 年半后的感受。 5 月中旬做了一个全飞秒近视手术，在这里记录一下当天、术后的感受，希望可以给到好奇的同学一些参考。 手术当天 2023-05-13 长话短说，实际手术过程 2 分钟搞定。 4 月份突发奇想不戴眼镜是不是很爽，然后就去检查了下适合做什么的，好多台机器验了下眼睛，最后发了 2 瓶眼药水在术前 3 天开始滴。 到了做的那天，先去交钱，验光，然后排队等到叫，换上手术服，不能带手机，眼镜等外部东西，先洗眼睛 10mim，不停用药水去冲，挺酸爽。然后给脸部用酒精全消毒，接着坐到手术室门口等叫号。 叫到号后，会先在眼睛里面滴麻药眼药水，然后就扶进去了，躺到机器上，一只眼睛一只眼睛做，过程就是盯着绿灯看 20s，然后告诉你非常棒，最后一边几秒钟用镊子夹出切割体，最后用机器观察了下，没问题直接出手术室。 出来以后，出来后眼睛不疼，不过开始流泪了，手里拿着眼药水，分别每 5 分钟累计滴 4 次，这个过程开始时候是那种想哭流泪的感觉，然后是又困又想哭那种感觉，最后是很困眼睛有点儿酸胀感觉。慢慢发现看远处东西相比戴眼镜时候要有 50%效果了，不过基本有一种朦胧美，近处的东西基本看不清，老花眼感觉，药水滴完以后，医生检查下，没有问题就回家了，说是明天会逐步恢复。 回家路上，发现所有灯光都有一层蒙雾感，好比多了一个下雨过后背景感觉，同样很困，到家以后躺着又不想睡觉了，但是也不想也看不清手机，听了一小时老郭的济公传，笑哈哈，就出门吃饭了。 回到家，发现手机看得清了，不过边框全部加了一层雾化美，今天晚 10 点前睡觉，期待明天起床世界光明，Hello World！ 手术后第一天 2023-05-14 昨晚睡得早早上 7 点就醒了，眯眯眼开了个小灯发现房间里面东西全部都清楚了，甚至远处书柜的 JavaScript 权威指南这本书名都看清了，很神奇，有一种瞎子复明的神奇感觉。 立马起床拉开窗帘，看到远处一人斜挎着黑色背包勾着腰边走路边看手机，环卫工人带着黄色帽子穿着橙色衣服在扫街，对面小河边一人戴着淡黄色帽子白色上衣黑色裤子白色鞋子在跑步，应该以前戴眼镜也看得到这种，不过没有怎么 Care 就过去了，早上远处视力应该恢复到术前水平了，但是近处看手机还有强自发光物体文字还是有一圈淡淡的光晕，不习惯但挺好看。 上午开车去进行了第一天复查，后面一周一月三月半年都需要去复查下，可以给这个时间给大伙同步状态，到了医院检查了下视力，居然双眼 1.0，不敢想象摘了眼镜我居然可以看到这么小的 E，然后医生检查下，说恢复得不错，给安排了下接下来一周要滴的眼药水，一共 3 瓶，累积 4 到 6 次的，然后就离开了。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "改良了下传说中最快的终端",
    "url": "/2023-02-06/alacritty.html",
    "date": "2023-02-06",
    "categories": ["Creation"],
    "summary": "Alacritty 是一个基于 Rust 使用 GPU 加速的跨平台终端仿真器，只有 5M 左右，传说中最快的终端。用了两年多，体验非常好，这篇文章记录了我的配置和使用心得（2025 年更新版）。",
    "content": "长话短说 好久没有折腾电脑的命令行终端工具了，之前用了好多年的 iTerm2，也尝试过 Hyper、Warp、Wez’s、Kitty 等，要么冷启动慢，要么不太顺手。 两年多前发现了 Alacritty，一个基于 Rust 使用 GPU 加速的跨平台终端仿真器，只有 5M 左右，传说中是最快的终端。关于性能，官网文档有 详细说明，实测确实非常快。默认界面比较简陋，但高度可定制。用了两年多下来，体验非常好，这里分享一下我的配置和使用心得。 更新说明：本文最初写于 2023 年 2 月，现已更新至 2025 年最新配置（v0.15.1 版本），配置格式也从 YAML 改为了 TOML，Shell 从 Fish 改回了 Oh My Zsh + Starship。 一、下载安装 可以去 Alacritty Github 下载最新版本，Mac 用户推荐直接下载 最新的 DMG 包（当前最新版为 v0.15.1）。也可以通过 Homebrew 安装： brew install --cask alacritty 下载好后，你会看到下图左侧的默认效果，我们将改造成右侧的优化效果。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "什么是比较好的低代码产品",
    "url": "/2023-01-02/low-code.html",
    "date": "2023-01-02",
    "categories": ["Thought"],
    "summary": "说到低代码，喜欢的人特别喜欢，不喜欢的人很不喜欢，此外也有“假装”去喜欢的，也有喜欢得不明不白的，我现在对于低代码是有点儿喜欢的那种，不过只限于在特定领域，实现需求的速度比熟练工程师写代码要快的场景，最近在思考团队下一步的提效方式，来看看业界开源的低代码产品，说不定会有一些输入。",
    "content": "随便扯扯 可能大家谈到低代码想到更多的是低代码搭建页面的平台，内部不少也是此种，其实对于偏逻辑编排、服务 BaaS 能力的偏可视化方式其实也算低代码，旨在「通过少写代码，用更便捷的方式来实现原本需写代码的工作」。 说到低代码，喜欢的人特别喜欢，不喜欢的人很不喜欢，此外也有“假装”去喜欢的，也有喜欢得不明不白的，我现在对于低代码是有点儿喜欢的那种，不过只限于「在特定领域，实现需求的速度比熟练工程师写代码要快的场景」，这种场景下用起来真心会比较爽，可能也用得不爽的时候，但是这种不爽远小于他带来的效益减去原本敲代码的投入，也很值得将这类产品做到好用爱用。 其实低代码产品是比较难做成的，特别是大而全的那种，由于考虑因素过多，导致步调很慢，也很难做到很易用，导致一边投入很大，一边又急切上线落地使用，从而出现平台方觉得投入很苦，使用方觉得不太好用还需吃狗粮的矛盾，往往需经过忍耐很长时间才可「守得云开见月明」，不过很多都在没有见月明的时候就奄奄一息了。反而专门领域的比如说表单、表格、图表低代码搭建活的很不错。还有一些 BaaS 类单领域的活得也还可以，我个人更偏向「易用的可很轻快解决对应领域问题低代码产品方案」。 此外还有一个误区，有人会认为低代码是给所有工程师都可以使用的，其实我认为不太对，低代码最开始出现的初衷是为了解决「让不是程序员的人使用视图、组件、模板和表单等方式快速在不写代码情况下构建应用」，这里我们可以引申一下，低代码更适合两类场景，一类是「让不是这个领域的人也可以很快的写这个领域的应用」，第二类是「在特定领域通过抽象协议模型通过低代码的方式来快速实现产品」。 这里不多扯低代码的优缺点和喜好了，关于低代码产品内部已经有不少，也都比较熟，这里就不多加说明了，刚好最近在思考团队下一步的提效方式，我们来看看业界开源的低代码产品，说不定会有一些输入。 一体化的低代码平台 一体化也即从后端到前端的实现全部给包括了，说实话，我认为这种是最难做的，特别在大公司里面，假如各司其职，同时多个团队协作的话比较难做起来，因为各方的标准协议、数据库模型结构均很难一致，但是假如前端、后端均在一个团队，有一整套统一的模型协议，还是有可能做成的，比如说如下这两个产品。 Appsmith Appsmith 是一个用于构建内部应用的低代码开源框架，一个印度的创业公司弄的，很适合做企业后台管理系统，常用的 CRUD、Dashboards、数据报表啥的不在话下，Appsmith 有一种 Retool “开源版”的感觉。 在使用上和常规的开发套路很像，第一步画 UI 界面，第二步连接到数据源，第三步将数据源和 UI 界面串起来，第四步部署，只不过将原有编码过程变成了可视化过程。 此外还提供了大量的模板可供使用，包括 Project、Management Support、Human Resources、Sales、Marketing、Finance 等方向，有些思路对于不少低代码方向有一定参照作用。 Budibase Budibase 官方宣称是一个你会喜欢使用的低代码平台，通过简单易用的方式来提高构建一个应用的速度。和 Appsmith 相比，是另外一种实现方式，此外 Budibase 有内置数据库、外部数据源、设计图形用户界面和自动化部分，在创建 UI 界面的使用使用的是偏设计的方式，整体而言会更加美观一点。 ToolJet 此外 ToolJet 也是一个不错的低代码框架，同样支持接入多种数据源，偏拖拽的方式实现前端的界面，包括对于 mobile 端的一些支持，此外使用的是 JS 比较友好。 除去上面外，nocobase、illa-builder 和 refine 这三款也可以去调研调研。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "工程师如何明白的做事情",
    "url": "/2022-12-09/talk.html",
    "date": "2022-12-09",
    "categories": ["Share"],
    "summary": "最近给团队同学的一个分享，作为工程师而言如何明白的做事情。",
    "content": "对于工程师而言除了专业技能扎实外，其实「做明白事情」的能力更重要，不懵逼的干活比加班更有效。\n\n这周给团队同学做了下此话题的分享，不是特别会讲这种软技能，尽可能接地气的给讲明白了工程师在做事上「理清楚、讲明白、做到位」的一些个人的经验。\n\n电脑可直接查看 PPT 预览，使用 妙言 快速制作，源文件在底部可下载。\n\n\n\n\n\n\n\n\n\n\n\n推荐可下载 Markdown 源文件 后复制到妙言，Command+Option+P 打开查看。\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "普通人如何不被 OpenAI 取代？",
    "url": "/2022-12-04/openai.html",
    "date": "2022-12-04",
    "categories": ["Thought"],
    "summary": "今天试了试 OpenAI 的一些功能，通过主题来记录一下使用场景，发现了不少他强于普通人的地方，那么我们怎么在认知和能力方面不被他取代呢？",
    "content": "今天试了试 OpenAI 的一些功能，通过主题来记录一下使用场景，发现了不少他强于普通人的地方，偏搞笑文（狗头），那么我们怎么在认知和能力方面不被他取代呢？ 1212 最新补充，由于注册需要国外梯子加国外手机号，应该只有部分的人成功了，周末用 Pake 打包了一个代理无需登录的桌面 APP，不到 3M，支持 Mac/Windows/Linux 系统，稍微定制了下 UI 更美观些，可以去 Github 找到 ChatGPT 下载 https://github.com/tw93/Pake，假如发现服务不稳定，command+r 刷新试试，由于使用量远比想象中的大，依赖的代理免登能力或者说非官方的均被封了，需要使用的还是需要参考 这里。 经验能力强于普通人 首先这两天最火的是 #ChatGPT，这个能力很适合我这种不太会说“套话”的人，在回答一些偏知乎类问题、入学文档、运营方法等也不在话下，此外对于中文的理解有些突破我的想法，比如说如下案例。 今年要做国际化了 不要让你的老板知道这个 给我一个学习 Rust 的资料 编程能力强于普通人 ChatGPT 除去内容能力外，对于简单的「编程」能力其实也不在话下，比如说如下这个很常用的提取 URL 用 JS 来实现的题目，写出来还是很不错的，其实 #OpenAI 还提供「Codex JavaScript Sandbox」这个比问答类的更好玩，可以将你一步一步的想法通过代码帮你来实现，比如说我让他画一个猫 编程写 JS 的能力 让他写 CSS 也没啥问题 写文章能力强于普通人 OpenAI 除外简单的编程实现，还发现了一个写文章的能力，编剧也没问题，也很适合写所谓的「论证文」，不过还是感觉还是有些「正规话术」，但是在某些场合其实还是很吃香的，比如说如下这种类似于活动安排、论证主题、模版申请啥的还是合适的，居然还可以「教你做菜」简直了。 假如我是一个编剧，是不是还可以？ 正规申请如何写？...",
    "lang": "zh-CN"
  },
  
  {
    "title": "用 Pake 打包了个极简 Twitter",
    "url": "/2022-11-05/pake.html",
    "date": "2022-11-05",
    "categories": ["Creation"],
    "summary": "一个很简单的用 Rust 打包网页生成很小的 Mac App 工具，底层使用 Tauri，当前支持微信读书、Twitter、语雀、RunCode、Witeboard、Flomo、Vercel 等。",
    "content": "介绍 Pake 开源地址：https://github.com/tw93/Pake 一个很简单的用 Rust 打包网页生成很小的 Mac App 工具，底层使用 Tauri，当前支持微信读书、Twitter、语雀、RunCode、Witeboard、Flomo、Vercel 等。技术含量其实不高，只是 Rust 替代之前套壳网页老的思路玩法的一个尝试，新瓶装旧酒，其实 PWA / Electron 也很好用很方便的。 Pake 比较特别的是，相比传统的 Electron 套壳打包，大小要小将近 40 倍，一般 2M 左右，此外由于底层使用的，Rust Tauri 框架，性能体验较 JS 框架要轻快不少，内存小很多；此外实现了通用快捷键的透传、容器通信、样式改写注入、沉浸式的窗口、拖动、简化使用流程优化等功能，有一点点可玩性，你可以 Fork 自己打包喜欢的。 这里主要介绍最近折腾的「用 Pake 打包了一个极简版的 Twitter Mac 客户端」。 极简 Twitter 使用 Pake 结合开源 thomaswang/minimal-twitter 的样式注入改写，花了大概 1 小时打包了一个你可能会喜欢的极简 Twitter 版本，依旧只有 2M 左右，相比官方的看起来舒服很多，将乱七八糟的东西都干掉了，优化不少强迫症体验，效果如下。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "潮流周刊 100 期，做了个官网",
    "url": "/2022-10-22/weekly.html",
    "date": "2022-10-22",
    "categories": ["Creation"],
    "summary": "之前潮流周刊放到了 Github 上，不是太好用，趁着国庆那几天，学习了下 Astro ，自己设计开发了一个潮流周刊的官网，终于感觉舒服一些了，分享出来给大家。",
    "content": "起源\n\n潮流周刊起源于两年前内部团队的一次讨论会中，同学反馈团队当前潮流前端技术氛围不浓，然后就给立了一个 Flag ，每周给大伙分享潮流技术，然后就有了潮流周刊，当前已经 100 期了，不过一直是内部文档呈现，问题也不大。\n\n后面有些兄弟部门出去的朋友问有没有外部版本，于是就将其直接放到了 Github Readme 了一段时间，不过展示效果不太好，自己也有强迫症，趁着国庆那几天，学习了下 Astro ，自己设计开发了一个潮流周刊的官网，终于感觉舒服一些了，分享出来给大家，比如说有类型周刊需求或者写 Blog 找模版的同学可以 Fork 过去用也行，也欢迎大家订阅 RSS。\n\n可能网站也有一些设计或者使用不好的地方，欢迎指出交流。\n\n地址\n\n\n  官网：http://weekly.tw93.fun/\n  Github：https://github.com/tw93/weekly\n\n\n展示效果\n\nPC 效果\n\n\n\n\n\n手机效果\n\n\n\nRSS 效果\n\n\n\n最后\n\n\n  希望志同道合的朋友喜欢，其实写周刊更像是一个记录自己程序员不枯燥生活的一个“朋友圈”，也是一个技术观点交流的渠道。\n  使用 Astro 发现这个框架很不错，学习成本低，可以理解是对于内容展示网站的 Nextjs 的感觉，打包编译使用 Vite ，对于文档的类 Node 操作处理同样也很方便，有兴趣的也可以试试。\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "妙言：给工程师用的原生 Markdown 笔记应用",
    "url": "/2022-09-09/miaoyan.html",
    "date": "2022-09-09",
    "categories": ["Creation"],
    "summary": "妙言是一款给工程师用的原生 macOS Markdown 笔记应用，文档以纯文本保存在本地，支持三栏布局、分栏编辑与预览、LaTeX、Mermaid 和快捷键。这篇聊它的功能、设计取舍，以及我为什么做它。",
    "content": "太长不读 妙言在 GitHub 开源。 妙言第一次对外介绍是在 3 个月前的 V2EX，从 2020 年开发后慢慢折腾着，今年 6 月份觉得可以被大家使用了就给放出来了。这期间累计发布了20 个版本，解决 138 个 Issues，收获 2.2K Stars，1.7K 推友关注，交到了不少纯粹的技术朋友，现在 7K 左右用户，获得了33 位妙友主动喂猫。 这篇文章主要想给大家介绍一下妙言的功能清单，为啥更适合工程师使用，也包括个人对于产品本身的一些想法，关于效果展示可见文章后面的章节。 功能清单 编辑器方面 原生代码编辑器的体验，细调十多种 markdown 语法高亮颜色，包括文字间上下左右间距，浅色/深色模式 VSCode 级别文档格式化，借助 prettier 将 markdown 文档自动格式化排版，空格/空行/序号一键搞定 原生 Swift5 开发，相比市面大部分套壳类笔记应用性能轻快不少，安装包仅 23M 文本文件保存：文档产物全部本地纯文本保存，可以很容易的导入或者导出 专注、演示、单独模式：可以 command+2 专注模式，command+4 演示模式，command+o 单独文件模式 全面兼容 Macos Ventura，此外也支持 M1 版本的通用架构模式，各种系统兼容不成问题 功能方面...",
    "lang": "zh-CN"
  },
  
  {
    "title": "如何做一个产品工程师？",
    "url": "/2022-07-29/pd-code.html",
    "date": "2022-07-29",
    "categories": ["Share"],
    "summary": "最近给团队同学的一个分享，从前端工程师的视角来看如何做成一个产品开发工程师。",
    "content": "最近给团队的一个分享\n，从前端工程师的视角来看如何做成一个产品开发工程师，使用 妙言 快速制作。\n\n除了专业技术，可以做明白事情外，对于偏业务型的开发工程师，会做易于使用的产品和工具也很重要，更偏向多个能力的综合体现。\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "如何给你的代码祝寿",
    "url": "/2022-07-09/code.html",
    "date": "2022-07-09",
    "categories": ["Creation"],
    "summary": "最近 XRender 3 岁了，之前玩过的 gource 和 ffmpeg，想着可以用这两个库给她开源这一路来的历程当做一个故事给播放出来。",
    "content": "最近 XRender 3 岁了，之前玩过的 gource 和 ffmpeg，想着可以用这两个库给她开源这一路来的历程当做一个故事给播放出来。 建议戴耳机全屏看，有一种「守得云开见月明」的感觉，对于技术同学很有看电影听故事的感觉。 ​ 很简单，你也可试试 1、准备工作，安装 gource、ffmpeg 这两个库，前者用于处理提交日志可视化，后者用于视频处理。需要让 gource 支持中文字体，Homebrew 安装可能很慢，国内镜像提速试试这个 加速地址。 // 安装 brew install gource brew install ffmpeg // 让 gource 支持中文字体 rm /usr/local/var/homebrew/linked/gource/share/gource/fonts/FreeSans.ttf ln -s /System/Library/Fonts/Hiragino\\ Sans\\ GB.ttc /usr/local/var/homebrew/linked/gource/share/gource/fonts/FreeSans.ttf 2、找一个你最喜欢的带 git 管理的项目，命令行进入本地文件夹根目录，复制如下命令回车，就可以看到效果和生成视频了。 gource \\ --title \"标题\" \\ --seconds-per-day 0.1 \\ -1200x675 \\...",
    "lang": "zh-CN"
  },
  
  {
    "title": "大环境不好的情况下如何🐶着",
    "url": "/2022-07-01/gou.html",
    "date": "2022-07-01",
    "categories": ["Share"],
    "summary": "大概是今年4月份给团队同学的一个分享，归档于博客，来聊聊作为一个国内的开发工程师，如何在大环境不好的情况🐶着变强。",
    "content": "大概是今年4月份给团队同学的一个分享，归档于博客，来聊聊作为一个国内的开发工程师，如何在大环境不好的情况🐶着变强。\n\n电脑可直接查看 PPT 预览，使用 妙言 快速制作，此外 PDF 版本 下载。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "2022 年我的 Mac 软件折腾之旅",
    "url": "/2022-06-25/mac.html",
    "date": "2022-06-25",
    "categories": ["Creation"],
    "summary": "何为差生文具多，看完这个你就清楚了， 用于2022年6月16日团队双周会的一个快闪分享。",
    "content": "何为差生文具多，看完这个你就清楚了. 写字的 Markdown 笔记应用应该属于我折腾最多的一块，楼主从大学期间开始使用 Markdown ，从最开始的为知笔记，到后面马克飞象，到了工作时候用过 Ulysses ，后面找到了 Quiver 用了很久，也用过 MWeb，买过 Bear 的年会员，最终最终还是没有一个好用的让我满意。 2年前做了妙言，陆续优化着，体验和使用习惯自认为还比较适合工程师思维，Markdown爱好者可以试试~ 开源地址：https://github.com/tw93/MiaoYan/ 常用配置：下载后，打开设置选择一个空文件夹作为知识库目录，然后往里面放文档即可，同时可以配置下自己习惯的字体、外观等，就可以直接使用了。 熟记常用的快捷键，让你事半功倍。 可以将 Quiver 里面的文件顺序导出成文件夹，迁移到 MiaoYan 文件夹，可以无缝使用 生活记录一般用 Mac 自带的备忘录，手机可以同步，比较方便，工作文档语雀也很好用，Quiver 已经可以删除了。 常用软件 Apple Music：假如你是 iPhone 手机，真心建议去试试她，我已经半年没有用 QQ 音乐了 ScreenFlow：录屏、录制 Gif、录效果的利器 WeRead：自己用 rust 搞了一个微信读书的 Mac 版本，1.9M，可以通过 这里 下载 Deckset：直接用 Markdown 去写分享的利器，基本上一个演示文档半小时搞定，现在更推荐妙言 Input Source Pro：免费，把不同软件设置成不同默认输入法 App Cleaner...",
    "lang": "zh-CN"
  },
  
  {
    "title": "妙言 Markdown 编辑器介绍",
    "url": "/2022-06-13/a-good-markdown.html",
    "date": "2022-06-13",
    "categories": ["Creation"],
    "summary": "最近将自己两年前做的一个 macOS 的 Markdown 笔记应用给完善了一下，放出来给大伙试试。",
    "content": "缘由\n\n楼主从大学期间开始使用 Markdown ，从最开始的为知笔记，到后面马克飞象，到了工作时候用过 Ulysses ，后面找到了 Quiver 用了很久，也用过 MWeb,买过 Bear 的年会员，最终最终还是没有一个好用的让我满意。\n\nUlysses 主要问题是，没有预览的功能，还贵\n\nQuiver 其实挺好用的，不过已经快 3 年多没有更新了，作者应该放弃了，最近最新的 Mac 系统输入时候还有一定兼容问题\n\nMWeb 不少人说很好用，不过我觉得还是太复杂了\n\nBear 是真的漂亮，但是很多 Markdown 格式都不兼容，最后还是给放弃了。\n\n3 年前自己学 iOS 开发的时候，慢慢想要不要做一个笔记应用，于是乎前年过年的时候疯狂敲了一段时间代码大概模子可以跑起来了，自己用着，今年来周末不少时间慢慢优化优化着，就当做敲快乐的代码的方式完善了这个工具，感觉使用得还凑合，不能说好用，想着可以开始放出来，给大伙试试了，帮忙提提建议。\n\n重新介绍一下\n\n更多介绍可见 Github/MiaoYan, 此处就不啰嗦太多了。\n\n这个软件叫做 妙言，妙不可言，表示很妙的语句，大概是这个意思，还比较文雅的样子。\n\n用 Swift 写的，相比于纯 Web 套壳的方式体验还是好不少，哈哈，你应该已经受够了套壳的 MacOS 应用了。\n\n刚好周末做了一个官网用纯 HTML 搞的，比较快，同时软件也支持了英文，如下，顿时觉得我是一个野生设计师的感觉了。\n\nhttps://miaoyan.app/\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "你居然还在用 WebStorm ？",
    "url": "/2021-07-09/webstorm.html",
    "date": "2021-07-09",
    "categories": ["Creation"],
    "summary": "那么到底 WebStorm 更香在哪儿，周末花了个下午怼篇文章来开一个 “历史倒车轮“，给大伙介绍一下「如何用上 WebStorm 最新正版？」「如何让 WebStorm 好用不卡？」，以及「WebStorm 香的地方在哪里？」",
    "content": "〇、起 都 2021 年了，你居然还在用 WebStorm？VSCode 不香吗？😤 😂 其实都用，平时写 Demo 或格式化文档时用 VSCode，写项目以及阅读源码会用 WebStorm，我认为两者更多是 IDE 和 Editor 的区别，放一起比较必要性也不大；敲代码用啥只有一个条件就是你可以超级熟练使用那个工具，重点是可提高你独有的敲代码效率，有些像「君子性非异也，善假于物也」这句话表达的观点。 那么到底 WebStorm 更香在哪儿，周末花了个下午怼篇文章来开一个 “历史倒车轮“，给大伙介绍一下「如何用上 WebStorm 最新正版？」「如何让 WebStorm 好用不卡？」，以及「WebStorm 香的地方在哪里？」，以下文章将单词 WebStorm 换成 IntelliJ IDEA 也合适。 一、如何用上 WebStorm 最新正版？ 很建议初步使用的时候「用上 WebStorm 30天内免费 」的福利，等到觉得好用再去考虑申请正式版本，防止造成不必要的浪费！ 1. 自费去官方购买个人版 资金允许的同学可以直接上官网看看个人版本，首年 69 美元（较之前涨价了些），假如不更新的话还可一直用下去不续费。同时对于个人版官方说同样支持用于商业项目，只需要保证一个人用即可，国内用户也可以去 荔枝数码购买更方便些。 2. 通过开源项目申请一年的使用 讲道理，JetBrains 公司真的很良心，提供了开源开发许可证福利，让大伙免费用他家软件进行开源贡献，一般项目维护在 3 个月以上大概率可通过。可从此入口 免费许可证计划...",
    "lang": "zh-CN"
  },
  
  {
    "title": "为啥两年前的 APP 这么好用？",
    "url": "/2021-06-09/app.html",
    "date": "2021-06-09",
    "categories": ["Thought"],
    "summary": "在 21 年 6月初苹果 WWDC 2021 发布会第二天，iOS 15 开发者测试版就放出来了，我这个软件尝鲜强迫症患者忍不住就立马更新了",
    "content": "发现不一样 在 21 年 6 月初苹果 WWDC 2021 发布会第二天，iOS 15 开发者测试版就放出来了，我这个软件尝鲜强迫症患者忍不住就立马更新了，但是由于是开发者版本卡成狗了，还没有备份老资料，最后变成「来都来了，想走就别想了」… 通过 「使用原生输入法、通用里还原所有设置、关掉 Siri 搜索学习、关掉后台热刷新、将语言改成英文、删除不常用软件」 这些之前用于提速 iPhone 的骚技巧，但在这难搞的 「iOS 15 开发者第一个测试版本」上并不明显。 想着能不能下载一批老版本的 APP 来缓解下，尝试各种办法，最后终于搞成功了。居然发现一个新天地，我们 2018-2019 年的国内 APP 原来这么清流，那为啥我们 2021 年的国内 APP 这么难用？ 上周末搞通的，用了一周后，这周末抽空写下过程中的吐槽和碎碎念，带你回到 2019 年的感觉。 有啥不一样 支付宝/微博/滴滴 支付宝、微博、滴滴这三个 APP 变化尤其大，支付宝我常年是「新义州」，微博用 「vvebo」 代替，滴滴居然卖菜了已卸载半年了。但是现在换成了老版本后，发现又可以回去了。 ​ 大伙可以拿着自己现在的 APP 对比如下视频，支付宝居然首页这么干净，icon 全部都可编辑删除，小程序不卡了，朋友 Tab 简直没朋友的感觉；微博居然没有闪屏广告，广告极少，切换成英文模式几乎没广告；18 年的滴滴终于不卖菜了，在老老实实的开车送客。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Github 居然可以这么玩",
    "url": "/2020-07-17/markdown.html",
    "date": "2020-07-17",
    "categories": ["Creation"],
    "summary": "让你的Github个人页，变成一个博客首页，同时每天自动更新信息展示",
    "content": "知乎答题上面的《你在 GitHub 上看到过的最有意思的项目是什么？》个人回复，有一些文章的感觉，直接放到专栏 那到底是可以怎么玩呢？ 答案是 让你的 Github 个人页，变成一个博客首页，同时每天自动更新信息展示 前几天 github 出了一个新彩蛋，会自动将你仓库下的同名用户名仓库的 README 展示到你的个人页面的上方，就是如下的这个样子： github.com/tw93 欢迎 Follow 周末两天空闲时间折腾了下，通过 Github Actions 自动每天去跑我的开源仓库、博客、WakaTime 和豆瓣动态，然后写入到 README 里面去，可编程性被大大提高了，很是潮流！ 怎么实现的，知识点一个一个给大伙同步 预备知识 如何让你的 Github 个人页展示 Markdown 的内容，可见 how-to-create-a-github-profile-readme 如何使用 Github Actions 自动化处理内容，可见 https://github.com/features/actions 自动化获取信息巧妙方式 以上实现详细可见github.com/tw93/tw93仓库，有这么几种不错的实现： 1、利用 Github 提供的 Api 比如图片中 Product Releases 是借助 Python 中的GraphqlClient 去获取 Github...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我的 2020 🔥软件分享",
    "url": "/2020-05-27/good-app.html",
    "date": "2020-05-27",
    "categories": ["Share"],
    "summary": "给内部同学分享常用的一些 Mac 软件",
    "content": "2020 年给给内部同学分享我常用的一些 Mac 软件，同时也是妙言的一个由来，详细可见 PDF。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "运营后台的交互设计分享",
    "url": "/2020-03-18/how-to-do-design.html",
    "date": "2020-03-18",
    "categories": ["Share"],
    "summary": "给内部同学分享的中后台交互设计的思考",
    "content": "2020 年我这边团队负责部门内 B 端系统的前端，当时给团队分享的中后台交互设计的一些思考，详细可见 PDF。\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "产品和开源分享",
    "url": "/2019-11-25/product-and-github.html",
    "date": "2019-11-25",
    "categories": ["Share"],
    "summary": "关于如何做小的技术产品以及应该以什么心态看待开源的一次分享。",
    "content": "\n  关于如何做小的技术产品以及应该以什么心态看待开源的一次分享。\n\n\n分享内容\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "zh-CN"
  },
  
  {
    "title": "CreateJS 新司机开车指南",
    "url": "/2018-07-28/createjs.html",
    "date": "2018-07-28",
    "categories": ["Study"],
    "summary": "最近在对前端互动游戏技术一些学习和探索，恰逢上一个小游戏使用了 CreateJS 技术，借此文对其使用做一次备忘，同时让想用 CreateJS 写小游戏的同学可以快速上手。",
    "content": "拍于沙巴红树林萤火虫 TL,TR 最近在对前端互动游戏技术一些学习和探索，恰逢上一个小游戏使用了 CreateJS 技术，借此文对其使用做一次备忘，同时让想用 CreateJS 写小游戏的同学可以快速上手。 笔记基于最新1.0版本，有不少地方和网上老教程不一致，同时也建使用最新版本，主要内容如下： 概况 简介 CreateJS是基于HTML5开发的一套模块化的库和工具，基于这些库，可以非常快捷地开发出基于HTML5的游戏、动画和交互应用。 历史可以追溯到7年前 flash 使用慢慢变少那个时代，gskinner 开发它作为“下一代”的富交互的工具库，Adobbe、微软、火狐官方资助的一个项目，API 在很多地方和 Flash 是很像，同时可以通过Adobe Animate CC（替代 flash）直接导出Canvas在Web中使用。 在 18年 终于发布了 1.0 版本，同时官方正在开发 2.0 版本，相信不就会有一个更现代化的 Createjs 呈现给开发者。 模块组成 CreateJS 提供的 4 个模块可以帮助处理游戏开发中常见操作： EaselJS：用于位图、图形、Sprites、文本的绘制，还包含 Ticker 定时器 TweenJS：用来创建补间动画效果 PreloadJS：游戏资源的预加载和管理，包括图片、音频、json等资源 SoundJS：播放和处理音频 更好使用 目前官方版本的 createjs 不支持通过 npm 方式的使用，导致在 ES6 开发中，需要在 html...",
    "lang": "zh-CN"
  },
  
  {
    "title": "《黑客与画家》读书笔记",
    "url": "/2018-07-08/hacker.html",
    "date": "2018-07-08",
    "categories": ["Study"],
    "summary": "最近在看《黑客与画家》这一本书，主要介绍黑客即优秀程序员的爱好和动机，讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题，本文用于记录读书过程中的一些笔记和思考。",
    "content": "起 最近在看《黑客与画家》这一本书，主要介绍黑客即优秀程序员的爱好和动机，讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题，本文用于记录读书过程中的一些笔记和思考。 1.为什么书呆子不受欢迎 为什么呢? 因为书呆子真的不想让自己受欢迎，他们脑子里面想着别的事情，注意力放在了读书或者观察世界上面，让自己变得更聪明，而不是琢磨打扮社交让自己变成受欢迎。 有趣观点 任何一种艺术，不管是否重要，如果你想要在该领域出类拔萃，就必须全身心投入。 对于那些高度困难的领域，只有身处其中的人，才能意识到成功需要不间断（虽然未必是自觉的）付出. 不是很认同的地方 几乎每一个和我讨论过的人都同意，人生的最糟糕时期是在11岁到14岁。” 这里我不是很认同，应该是作者那个时间段受够了被那些受欢迎小孩欺负形成的阴影，同时和他交流的那些人刚好也是那种不收欢迎的“书呆子” 至于学校，不过是这个虚假环境中关住牲口的围栏。表面上，学校的使命是教育儿童。事实上，学校的真正目的是把儿童都关在同一个地方，以便大人们白天可以腾出手来把事情做完。 看到这句话，可见作者青春期过得真的有阴影了，也不是很认同，以后自己有儿女了，需要好好引导； 不过在整本书中，大部分观点还是很认同作者的。 2.黑客与画家 没有看此书之前，一直很不想自诩自己为码农，感觉像没有思考重复劳动者，更多的是想做一个手艺人，通过代码这个工具来一些有趣的东西，顺便可以赚钱，两全其美。 关系 作者说“黑客和画家最相像”，很认同，黑客与画家的共同之处，在于他们都是创作者。与作曲家、建筑师、作家一样，黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究，虽然在创作过程中，他们可能会发现一些新技术。 黑客真正想做的是设计优美的软件，考核这种工作是非常困难的。你本人需要有良好的设计感，才能去考核别人的设计是否良好。但是，你觉得你有“良好的设计感”，与你实际是否具有，不存在相关关系，甚至可能存在负相关。 接着举了一个大学上机的例子，学校教的是先在先在纸上把程序搞清楚，然后再敲出来，这与作家、画家和建筑师的做法完全一样，他的方式是一股脑不管对错，先把代码堆上去，再慢慢修改，看上去像编程就是在调试。 有趣的点 大公司为了避免设计上的灾难，选择了减少设计结果的标准差。但是当你排斥差异的时候，你不仅将失败的可能性排除在外，也将获得高利润的可能性排除在外，这也是创业公司可以成功的原因之一 黑客解决生计问题的方法是找一份“白天工作”，然后在其余时间开发优美的软件 黑客通过实践学习编程，创作者另一个学习的途径是通过范例，可以通过观看优秀的源代码学会编程 对于编程，这实际上意味着你可以把bug留到以后解决。消灭bug对我来说属于轻松的工作，只有在这个时候，编程才变得直接和机械，接近社会大众想象中的编程的样子 思考 普通黑客与优秀黑客的所有区别之中，会不会“换位思考”可能是最重要的单个因素。 此处的换位思考是指设身处地为用户考虑，如何评定一个人是否具备呢？就是看他怎样向没有技术背景的人解释技术问题，越来越觉得，如何向不是很懂某种技术的人将你懂的东西让他也可以很轻易的理解，很考验人的能力。 程序写出来是给人看的，附带能在机器上运行 非常赞同这一句话，程序写出来是为了让人看懂它的算法，附带告诉计算机如何执行。”一种好的编程语言应该比英语更容易解释软件。只有在那些不太成熟、容易出现问题的地方，你才应该加上注释，提醒读者注意那里，就好像公路上只有在急转弯处才会出现警示标志一样。 不少人以为写出很体现技术的代码是高水平、高能力的体验，其实不然，用简单的代码解决复杂的问题，同时实习生都能够轻易看懂的代码才是好代码。 3.不能说的话 作者比较谨慎，认为无论什么年代，“祸从口出”是一直存在的，告诫读者一定要小心自己说的话。自以为无害的言论会给你惹来大麻烦。 你是一个随大流的人吗？ 假如在大庭广众下，你有没有观点什么观点不愿说出口？如果没有，应该好好想一想了，有一可能你的观点就是从别人那里听来的，别人告诉你什么，你就相信了什么，你把别人灌输的观点当作了自己的观点。 为了防止他人复制，古代制作地图的工匠会故意在地图上画错一个小地方。如果你的地图与他的地图一样，就说明不太可能是你自己独立制作的。 我们的思想几乎肯定也是一张有错误的地图。如果你也犯下与别人一样的错误，那么这个错误不太可能完全来自于你自己 找出“不能说的话”的方法 判断言论的真伪：当话不能说出口，同时他们是正确的或者可能正确，值得进一步讨论 关注“异端邪说”：有些想法，纯粹因为非常特别，而不能说出口的那种，极富争议的言论称为“异端邪说“” 回顾过去。我们可以去找那些过去被认为理所当然，如今却被认为不可思议的事情 寻找那些一本正经的卫道者，看看他们到底在捍卫着什么。 观察禁忌是如何产生的 为什么要这样做? 纯粹的好奇心，与小孩子翻石头是出于同样的原因，要亲眼看一下，然后自己做决定 不喜欢犯错，希望自己能够知道是哪些事情，这样可以使我不会上当 很好的脑力训练。想要做出优秀作品，你需要一个什么问题都能思考的大脑 发现后怎么办 别说，至少也要挑选合适的场合再说，只打那些值得打的仗。 在思想和言论之间划一条明确的界线。在心里无所不想，但是不一定要说出来...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Weex Ui 半年开源之路",
    "url": "/2018-03-31/weex-ui-report.html",
    "date": "2018-03-31",
    "categories": ["Share"],
    "summary": "Weex Ui 于去年9月30日开源后，距离今天刚好半年时间，本文打算从起源、定位、现状、发展、展望这5部分来给大家分享 Weex Ui 半年的开源之路。",
    "content": "GitHub 地址：github.com/alibaba/weex-ui Weex Ui 于去年9月30日开源后，距离今天刚好半年时间，本文打算从 起源、定位、现状、发展、展望这5部分来给大家分享 Weex Ui 半年的开源之路。 Weex Ui 的起源 Weex Ui 起源于公司内部的一个 Weex 上层 Ui 组件库，运行近一年后将其整理优化、丰富品质化后开源，希望借力社区，让其更好发展和服务更多开发者。 Weex Ui 的定位 Weex Ui 的定位为 一套轻量、富交互、高性能的 Weex 上层 Ui 组件库，通过上层 Vue 代码对组件进行 Native 级别优化的上层封装，友好支持 Weex iOS、Android、H5 基础环境，通过前端开箱即用的思想提供给开发者，同时通过 Weex Ui 代码让未接触 Weex 的同学对其编写有借鉴作用。 二维码图片在这里»&gt; Weex Ui 的现状 7大类组件、共32个成熟组件 Github Star 2552、Fork...",
    "lang": "zh-CN"
  },
  
  {
    "title": "iOS 中的 JS",
    "url": "/2018-03-17/js-in-ios.html",
    "date": "2018-03-17",
    "categories": ["Study"],
    "summary": "最近主要在研究 iOS 中的 JS 这一块内容，打算从 为什么不能单纯地搞前端、JSCore 的原理和通信机制、OC 底层 Runtime 原理、如何通过 JS 任意修改 iOS 的运行结果 这4部分来阐述，旨在让前端和 iOS 开发同学更加了解跨端开发的原理，并知晓他俩结合起来做哪些意想不到的事情做。",
    "content": "最近主要在研究 iOS 中的 JS 这一块内容，打算从为什么不能单纯地搞前端、JSCore 的原理和通信机制、OC 底层 Runtime 原理、如何通过 JS 任意修改 iOS 的运行结果 这 4 部分来阐述，旨在让前端和 iOS 开发同学更加了解跨端开发的原理，同时了解他俩结合起来做哪些意想不到的事情。 为什么不能单纯地搞前端？ 毕业工作以来，经历过移动端 H5 到 RN 开发，到去年的 Weex 开发和最近的 iOS 开发，越来越发现： 仅靠前端技术难以满足移动端的用户需求或体验要求 为什么单纯弄前端会效果不好？ 可能大家 H5 同学很有感触，有时候需要做一个端上照片上传功能，通过 JS 去实现往往效果会大打折扣，同时也很难达到业务方需要的顺滑体验，要是此时 Native 同学说我写好了一个 Bridge，只需在客户端里调用Bridge.uploadImg()这个方法就可直接用 Native 的上传功能，听到这句话你肯定会长舒一口气轻松地去写代码了。 还有将端上 Webview 由 UIWebView 更换成 WKWebView，起到的效果也会比自己优化很久的 H5 顺滑滚动来得快和好。 那么潮流前端同学一般怎么弄移动端需求呢？ 他们一般会借...",
    "lang": "zh-CN"
  },
  
  {
    "title": "该以怎样的心态对待开源？",
    "url": "/2018-02-11/open-source.html",
    "date": "2018-02-11",
    "categories": ["Thought"],
    "summary": "知乎的一个问答记录，`该以怎样的心态对待开源`?",
    "content": "知乎的一个问答记录，该以怎样的心态对待开源? 题中有两个问题，第一个是用别人的开源项目应该保持什么心态？第二个是自己开源一个产品是应该保持什么心态？ 用别人的开源项目应该保持什么心态 ？ 1：好奇和学习的心态 这种心态主要是对待不是那种项目需要，解决手下难题的库，而且平时偶然发现的东西，逛 Github trending 常常可以看到惊喜的东西。 碰到了这种，一般是按照 Readme 引导 Clone 到本地玩一玩，如果喜欢会去 Star 一下（可以理解为对作者工作的赞赏），同时看看代码，想想假如自己搞一个这样的东西，自己会怎么弄，能顺手提一个 PR 也是很好的，或者这种思路会不会可以用到自己以后的业务工作中。 2：合作和感激的心态 这种心态更多的是对待和自己项目有关系的东西，譬如 Weex、Webpack 等，它发展好了，对于自己的开发体验也会好很多，在使用的时候应该明确一点：开源项目的用户和维护者之间并不是甲方和乙方的关系，同时维护者不是客服，碰到问题，或者不爽时候，更多应该抱着『一起合作来解决这个问题』的心态来弄，有任何建议或者使用不爽的地方，或者自己觉得这样弄更好，直接描述清楚通过 issue 或者邮件的方式去沟通解决，给维护者更多的输入，这样才能更好促进其发展。 自己开源一个产品应该保持什么心态 ？ 这里打算和大家分享一下 Weex Ui 开源的一些事情和心态。 1：开源的东西对开发者是有用的 很多时候开源并不是为了开源而去开源，更多是这个东西真正对于开发者是有用处， 可提高开发效率、更多的实现输入、最佳实践的汇总，对于使用者是可以写出更好的代码，早点下班。想起在开源那一周，无广泛推广下上了 Github trending，安静很激动。 2：由衷喜欢的心态 自己由衷的喜欢和热情，将其当做自己的作品来弄比 任务安排 效果会好很多。 后面开源发展主要是共建 weex-toolkit 让其更好支持 Weex Ui、欠缺组件的补全 + 现有组件的增强、继续扩展边界、引入更多富交互体验 + 组件的无障碍优化、简易的使用方式 + 详细的中英文档等等工作。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "写给前端看的 iOS 梳理 (上)",
    "url": "/2018-02-07/ios-1.html",
    "date": "2018-02-07",
    "categories": ["Study"],
    "summary": "去年双十一为了排查一些 Weex 性能问题开始接触 iOS 相关学习，恰逢今年 1 月份开始慢慢参与 iOS 业务开发，借此机会整理一下 iOS 开发中的一些基础知识，用于备忘，同时旨在通过系列文章让前端同学在日后碰到 iOS 的代码可以看懂，方便更好的理解端上的一些原理。",
    "content": "20161020 摄于杭州西湖 Apple Store 序 去年双十一为了排查一些 Weex 性能问题开始接触 iOS 相关学习，恰逢今年 1 月份开始慢慢参与 iOS 业务开发，借此机会整理一下 iOS 开发中的一些基础知识，用于备忘，同时旨在通过系列文章让前端同学在日后碰到 iOS 的代码可以看懂，方便更好的理解端上的一些原理。 大纲 《上》主要讲述在 iOS 的开发过程中碰到的文件格式和 Foundation 框架常用的类，《中》和《下》正在整理中 文件格式 .h: 头文件也叫接口文件，提供对外访问的接口，包含类、方法和属性的声明，相当于类的用户手册 .m: 实现文件，用于实现 .h 中声明的方法，相当于类的工程细节 Podflie: 包管理文件，用于定义项目所需要使用的第三方库，类比 package.json Podflie.lock: 依赖库锁文件，记录了需要被安装的 pod 的每个已安装的版本，便于团队协作包统一，类比 package-lock.json .xib: 可视化文件，一个轻量级的用来描述局部界面的文件 .storyboard: 界面布局文件，承载对应 UIView 的视图控件 .pch: 预编译头文件，将一个工程中“不会常修改”代码预先编译好放到 pch 里面，用于存放公用宏、存放公用头文件、还可以管理日志输出 .plist:...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Web 计算机图形学(上)",
    "url": "/2017-04-21/web-and-cg.html",
    "date": "2017-04-21",
    "categories": ["Study"],
    "summary": "Web前端技术中和图形学挂钩的大致是 CSS3 的动画变换、SVG、Canvas、WebGL 这一些东西，但是前端工程师大多只停留在上层 API 操作方面，对于图形学的原理，譬如 GPU、三维空间、光照、纹理、层次模型可能不是很了解。在研究完 SVG 相关内容后，对底层的一些技术有一些兴趣，加上对这一块属于空白区，故花了几天时间对图形学基本进行学习，记录于此 ...",
    "content": "序 来自 vczh 某计算机图形学问题的回答: 程序员的三大浪漫：操作系统、图形学、编译原理，学了都是用来给你开眼界的。这些都不是什么你不学就怎么样的课程，而是你想成为大牛，不学不行=_,= Web 前端技术中和图形学挂钩的大致是 CSS3 的动画变换、SVG、Canvas、WebGL 这一些东西，但是前端工程师大多只停留在上层 API 操作方面，对于图形学的原理，譬如 GPU、图像的表示、图像几何变换的原理、纹理、层次模型等可能不是很了解。 在整理完SVG 新司机开车指南后，对底层的一些技术有一些兴趣，加上对这一块属于空白区，故花了几天时间对图形学基本进行学习，记录于此。 本文主要包括如下内容： GPU 概念和历史 Graphics Processing Unit(GPU)，即图形处理器, 是一种专门在个人电脑、工作站、游戏机和一些移动设备上运行绘图运算工作的微处理器。 GPU 相关概念在 20 世纪 70 年代末就已经被提出，使用单片集成电路(monolithic)作为图形芯片，当时就已经被用于视频、游戏、动画方面，可以很快的对几张图片进行合成(也就只有这个功能…)； 到 80 年代末，基于数字信号处理芯片(digital signal processor chip)的 GPU 被研发出来，与前代相比速度更快、功能更强，但是价格很贵； 到 1998 年 NVIDIA 公司宣布 modern GPU 的研发成功，标志着 GPU 研发的历史性突破成为现实。modern GPU 使用晶体管(transistors)进行计算，在微芯片(microchip)中，GPU 所使用的晶体管已经远远超过 CPU。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "SVG 新司机开车指南",
    "url": "/2017-01-26/SVG.html",
    "date": "2017-01-26",
    "categories": ["Study"],
    "summary": "SVG 其相关特性远比想象中要强，本文首先介绍下SVG的相关定义、优缺点和 Demo，接下来会介绍它的相关语法和动画，最后告诉大家如何使用和优化 SVG。确保大家一小时内可以开车上路，来不及解释了，快上车 ...",
    "content": "TL,TR SVG其相关特性远比想象中要强，本文首先介绍下SVG的相关定义、特点和Demo，接下来会介绍它的相关语法和动画，最后告诉大家如何使用和优化SVG。 确保大家一小时内可以开车上路….. 来不及解释了，快上车….. 一、简介 定义 SVG（Scalable Vector Graphics）是可缩放矢量图形的缩写，基于可扩展标记语言XML来描述二维矢量图形的一种图形格式，由W3C制定，是一个开放标准。 特点 现在我们可以使用PNG、JPG来展示静态的图片，使用CSS3、JS或者挫一点的GIF来表示动画，厉害一点我们可以使用Canvas来绘图，那么为什么还要使用SVG呢？ 和PNG、GIF比较起来，文件体积更小，且可压缩性强； 由于采用XML描述，可以轻易的被读取和修改，描述性更强； 在放大或改变尺寸的情况下其图形质量不会有所损失，与分辨率无关，是可伸缩的； SVG是面向未来 (W3C 标准)的，同时浏览器兼容性好； 使用CSS 和 JS能很方便的进行控制，同时可以很轻易地描述路径动画； 和Canvas相比 Canvas基于像素，提供2D绘制函数，是一种HTML元素类型，依赖于HTML，只能通过脚本来绘制图形，Canvas提供的功能比较原始，适合像素处理，动态渲染和大数据量绘制的应用场景； SVG为矢量，提供一系列图形元素（Rect, Path, Circle, Line …），还有完整的动画，事件机制，本身可以独立使用，也可以嵌入到HTML中，SVG很早就成为了国际标准，功能更完善，适合静态图片展示，高保真文档查看和打印的应用场景; Demo 使用SVG可以做出什么比较好玩的东西呢？ 上周团队有一个小的hackthon，就是通过代码来画这个Loading GIF，然后就边学边用SVG写了一个相同的loadng，体积从之前GIF的33KB变成了864B的SVG，详细见下面： See the Pen Loading Animation by Tw93 (@tw93) on CodePen. 另外一些有趣的SVG可以查看30 Awesome SVG Animation For Your Inspiration这里。 二、坐标定位 学习SVG语法之前，我们可以来了解下SVG的坐标定位，这种坐标系统和我们小时候学习的绘图坐标是相反的，但是在HTML中都是用如下方式定位。即以页面的左上角为(0,0)坐标点，坐标以像素为单位，x轴正方向是向右，y轴正方向是向下。...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Hello Weex",
    "url": "/2017-01-06/Hello-Weex.html",
    "date": "2017-01-06",
    "categories": ["Share"],
    "summary": "本周给部门同学分享了《Hello Weex》这个 Topic，现整理成文字版本，分享给关注 Weex 的同学，主要涉及 Module && Component、Weex Architecture、 Weex Others ...",
    "content": "本周给部门同学分享了《Hello Weex》这个 Topic，现整理成文字版本，分享给关注 Weex 的同学，主要涉及： Module &amp;&amp; Component Weex Architecture Weex Others 为了确保信息保密，已经将一些其他信息去除，请谅解，分享开始。 Module &amp;&amp; Component Module 和 Component 相信有些同学区分不清楚，通过 google 搜索得到如下两个解释： Module: An implementation unit of software that provides a coherent set of responsibilities. Component:A component is a reusable building block that can be combined with other components in...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Generators and Channels in JavaScript",
    "url": "/2016-09-20/generators-and-channels-in-javascript.html",
    "date": "2016-09-20",
    "categories": ["Study"],
    "summary": "以下这篇文章是对 Generator 和 Channel 的一个介绍，如果你对 Promise，Generator，Coroutine 和 Channel 有过了解，可以直接跳到 Using Generators and Channels with React 这部分，虽然接下来这些案例可能不是很适合真实的项目环境，但是它可以看成一个起点，尝试通过这种方法来实践可能出现的地方 ...",
    "content": "原文来自：Generators and Channels in JavaScript 简介 以下这篇文章是对 Generator 和 Channel 的一个介绍，如果你对 Promise，Generator，Coroutine 和 Channel 有过了解，可以直接跳到 Using Generators and Channels with React 这部分，接下来这些代码可能不能直接用于实际生产环境，但是它应该被看成一个起点，可以尝试把这种方案用在可以用到的地方。 稍微花点时间看看这个 listen 函数。 const listen = (el, type) =&gt; { const ch = chan() el.addEventListener(type, e =&gt; putAsync(ch, e)) return ch } 它会将每个在 Dom 元素上面的事件转换一个 Channel，我们可以从这个基础点开始。 Why Generators...",
    "lang": "zh-CN"
  },
  
  {
    "title": "React Native 动画研究",
    "url": "/2016-06-05/thinking-about-react-native-animated.html",
    "date": "2016-06-05",
    "categories": ["Study"],
    "summary": "本次专题文章的题目为《ReactNative 动画研究》，既然叫研究，那我们就争取一次将 RN 动画相关的内容都说清楚，提出问题-论证问题-解决问题的方式来研究 ...",
    "content": "本次专题文章的题目为《ReactNative动画研究》，既然叫研究，那我们就争取一次将RN动画相关的内容都说清楚，提出问题-论证问题-解决问题的方式来研究。 问题 ReactNative动画支持的怎么样? ReactNative的动画使用起来方便吗？ ReactNative动画的性能和H5性能相比怎么样？ ReactNative动画的性能怎么优化？ RN动画支持 从上面的MineNode我们可以看出RN中有3个地方可以使用动画： 用于创建更精细的交互控制的动画Animated； 用于全局的布局动画LayoutAnimation； 用于构建Navigator不同页面切换的动画； 此篇文章主要是讲Animated相关的内容，平时动画中用得最多的也是它，其他两个通过文档可以很容易的使用。 RN动画的使用 一个明天不上班的的动画实现，同时从小变大并且旋转，我们可以从注释中看到RN动画的实现步骤，代码Tw93 Gist如下： import React, {Component} from 'react'; import { AppRegistry, StyleSheet, Text, View, Animated, //使用Animated组件 Easing, //引入Easing渐变函数 } from 'react-native'; class ReactNativeDemo extends Component { constructor(props: any) { super(props); //使用Animated.Value设定初始化值（缩放度，角度等等） this.state = { bounceValue: new Animated.Value(0), rotateValue:...",
    "lang": "zh-CN"
  },
  
  {
    "title": "我对 Flexbox 布局模式的理解",
    "url": "/2015-10-17/the-thinking-about-flexbox.html",
    "date": "2015-10-17",
    "categories": ["Study"],
    "summary": "Flexbox，一种 CSS3 的布局模式，也叫做弹性盒子模型，用来为盒装模型提供最大的灵活性 ...",
    "content": "Flexbox，一种 CSS3 的布局模式，也叫做弹性盒子模型，用来为盒装模型提供最大的灵活性。 首先举一个栗子，之前我们是这样实现一个 div 盒子水平垂直居中的。在知道对象高宽的情况下，对居中元素绝对百分比定位，然后通过 margin 偏移的方式来实现。 &lt;style&gt; .container{ width: 600px; height: 400px; border: 1px solid #000; position: relative; } .box{ width: 200px; height: 100px; border: 1px solid #000; position: absolute; left: 50%; top: 50%; margin-left: -100px; margin-top:-50px; } &lt;/style&gt; &lt;div class=\"container\"&gt; &lt;div class=\"box\"&gt;&lt;/div&gt; &lt;/div&gt; 假如使用了 flex 后，实现起来就简单了，而且不需要自己去算，也不需要绝对定位，只需要通过对伸缩容器定义两个属性，justify-content 定义伸缩项目沿着主轴线的对齐方式为...",
    "lang": "zh-CN"
  },
  
  {
    "title": "浅谈面向对象的 JavaScript",
    "url": "/2015-06-09/Talking-about-JavaScript-design-patterns1.html",
    "date": "2015-06-09",
    "categories": ["Study"],
    "summary": "最近在学习 Ross Harmes/Dustin Diaz 写的《JavaScript 设计模式》，大概将此书看了两遍，很有收获。此书适合于想深入学习JavaScript的同学，用来增加你的内功。能够帮助你增强对JavaScript面向对象的理解，同时学习各种具体的设计模式，懂得应该在什么场合使用这些设计模式，以及如何实现它们，写出更优雅的代码。这篇文章用于总结我的读书笔记 ...",
    "content": "最近在学习 Ross Harmes/Dustin Diaz 写的《JavaScript 设计模式》，大概将此书看了两遍，很有收获。此书适合于想深入学习 JavaScript 的同学，用来增加你的内功。能够帮助你增强对 JavaScript 面向对象的理解，同时学习各种具体的设计模式，懂得应该在什么场合使用这些设计模式，以及如何实现它们，写出更优雅的代码。这篇文章用于总结我的读书笔记。 富有表现力的 JavaScript 为什么说 JavaScript 是富有表现力的呢？ JavaScript 的灵活性：它允许你模仿其他语言的编程模式和惯用法，同时也具备自己独特的编程模式和惯用法。这样你可以根据自己的技术背景和喜好选择编写代码的方式。 弱语言类型：定义变量的时候不需要申明其类型，其类型取决于其包含的数据；同时 JavaScript 变量可以根据所赋值改变类型。 函数是一等对象：它们可以存储在变量中，可以作为参数传递给其他函数，可以作为返回值从其他函数传出，还可以在运行时进行构造。同时 JavaScript 中使用匿名函数来创建闭包，保护变量空间。 对象的易变性：JavaScript 中所有对象都是易变的，可以使用一些在大多数语言中不允许的技术，例如为函数增加属性；同时还具备内省的概念，可以在运行时检查对象的属性和方法；而已在 JavaScript 中，任何东西都可以在运行时候修改。 继承：JavaScript 使用的是基于对象的（原型式（prototypal））继承，它可以用了模仿类的继承。 JavaScript 中的设计模式：使用原因：1）可维护性，降低模块间的耦合。2）沟通，可以在较高层面上对其进行讨论，而不必涉及过多的细节。3）性能：合适的设计模式可以大幅提高程序的运行速度，并减少传送到客户端的代码量。 接口 接口是面向对象 JavaScript 程序员工具箱中最有用的工具之一。但是 JavaScript 中没有内置创建或者实现接口的方法，也没有内置的方法用于判断一个对象是否实现了与另一个对象相同的一套方法。 什么是接口呢？ 对于 JavaScript 初学者很少在自己的 js 代码中使用接口，那么到底什么是接口呢？接口提供了一种用以说明一个对象应该具有哪些方法的手段，用来表明方法的语义，但是不规定方法是如何实现的。 接口的好处是啥呢？ 既定的一批对象具有自我描述性，并能促进代码的重用。接口可以告诉一个程序员一个类实现了哪些方法，从而帮助其使用这个类。 接口有助于稳定不同类之间的通信方式，事先知道了接口，就能减少在集成两个对象过程中出现的问题。 使测试和调试变得更加轻松，用于检测类型不匹配，同时还能使代码变得更加稳固。 但是接口并非没有缺点，使用接口在一定程度上面强化了类型的作用，降低了语言的灵活性。由于接口带来额外的方法调用开销，对性能造成一定影响。而且 JavaScript 没有提供对接口的内置支持（JavaScript...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Can We Do Better Than The Click?",
    "url": "/2015-03-30/Browser-input-Events.html",
    "date": "2015-03-30",
    "categories": ["Study"],
    "summary": "响应用户的输入可以说是我们做界面开发的核心。为了构建可响应的 Web 产品，g关键是理解触摸、鼠标、指针、键盘操作和浏览器的工作原理是。你可能在手机浏览器中经历过 300 ms 的延迟或者通过触摸来滚动带来的不爽。在本文中，我们将介绍事件级联和使用这些知识来实现演示一个点击事件，支持许多输入方法但是又没有违反像 Opera Mini 这一类的代理浏览器规则...",
    "content": "原文来自：Browser Input Events: Can We Do Better Than The Click? 响应用户的输入可以说是我们做界面开发的核心。为了构建可响应的 Web 产品，理解触摸、鼠标、指针、键盘操作和浏览器的工作原理是解决问题的关键。你可能在手机浏览器中经历过300-millisecond delay(300 ms 延迟)或者wrestled with touchmove versus scrolling(触摸滚动导致页面卡顿)。 在本文中，我们将介绍事件级联和使用这些知识来实现演示一个 tap 点击事件，支持多种输入方法但是又没有违反像 Opera Mini 这一类的代理浏览器规则。 注：tap 也翻译为点击，tap 和 click 都是在点击时候触发，但在手机 Web 端 click 会有 200~300ms 延迟，为了避免歧义，下文将” tap event“翻译成“tap 点击事件“ 概况 目前被用于与 Web 交互的 3 种主要的交互方式是：数字光标（鼠标）、触觉（直接触摸或者手写笔）、键盘。在 JavaScript 中我们可以通过触摸事件,鼠标事件,指针事件和键盘事件来使用它们。在这篇文章中我们主要讨论触摸和基于鼠标的交互，虽然这里有键盘事件已经形成标准，如 click 和...",
    "lang": "zh-CN"
  },
  
  {
    "title": "深入浅出 Nodejs 读书笔记",
    "url": "/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html",
    "date": "2015-03-01",
    "categories": ["Study"],
    "summary": "今天终于把朴灵老师写的《深入浅出 Node.js》给学习完了, 这本书不是一本简单的 Node 入门书籍，它没有停留在 Node 介绍或者框架、库的使用层面上，而是从不同的视角来揭示 Node 自己内在的特点和结构。建议有一定 Node 基础或者做过 Node 方面的小项目的同学阅读，看完以后你的思维会有很奇特的碰撞，我看的时候就常常会有这样的想法:“哦，原来这个功能是这样实现的哦”。下面这篇文章是我第二次阅读《深入浅出 Node.js》的一些学习记录，并且通过百度脑图这个工具来画出思维导图，每天将自己的学习总结写在这篇文章下面 ...",
    "content": "今天终于把朴灵老师写的《深入浅出 Node.js》给学习完了, 这本书不是一本简单的 Node 入门书籍，它没有停留在 Node 介绍或者框架、库的使用层面上，而是从不同的视角来揭示 Node 自己内在的特点和结构。建议有一定 Node 基础或者做过 Node 方面的小项目的同学阅读，看完以后你的思维会有很奇特的碰撞，我看的时候就常常会有这样的想法:“哦，原来这个功能是这样实现的哦”。下面这篇文章是我第二次阅读《深入浅出 Node.js》的一些学习记录，并且通过百度脑图这个工具来画出思维导图，每天将自己的学习总结写在这篇文章下面。 图片文字太小可以右键从新标签页打开图片，然后点击就可以放大显示。 新增原始文件脑图地址，这样大家就可以直接到脑图去看思维导图 Node 简介 这一章简要介绍了 Node，从中可以了解 Node 的发展历程及其带来的影响和价值。 为什么叫 Node?起初，Ryan Dahl 称他的项目为 web.js，就是一个 Web 服务器，但是项目的发展超过了他当初单纯开发一个 Web 服务器的想法，变成构建网络应用的一个基本框架,这样可以在它的基础上构建更多的东西,诸如服务器、客户端、命令行工具等。Node 发展为一个强制不共享任何资源的单线程、单进程系统，包括十分适宜网络的库，为构建大型分布式应用程序提供了基础设施，其目标也是成为一个构建快速、可伸缩的网络应用平台。它自身非常简单，通过通信协议来组织很多 Node，非常容易通过扩展来达成构建大型网络应用的目的。每一个 Node 进程都构成这个网络应用中的一个节点，这是它名字所含意义的真谛。 脑图 模块机制 这一章主要介绍 Node 的模块机制，从中了解到 Node 如何实现 CommonJS 模块和包规范的。在这一章中，我们详细的解释了模块在引用过程中的编译、加载规则。另外，我们还能读到更深度的关于 Node 自身源代码的组织架构。 CommonJS 规范为 JavaScript 定制了一个美好的愿景—希望...",
    "lang": "zh-CN"
  },
  
  {
    "title": "使用 React 提高 Angular 的渲染性能",
    "url": "/2015-02-23/angular-react.html",
    "date": "2015-02-23",
    "categories": ["Study"],
    "summary": "当你使用 Angular 的时候你遇到过性能问题吗？使用 React 可以使页面渲染得更快。下面通过几个案例来对比用React 来渲染 Angular 和直接使用 Angular 来渲染之间的性能差异 ...",
    "content": "原文来自：Faster Angular Rendering (Angular and React) 当你使用 Angular 的时候你遇到过性能问题吗？使用 React 可以使页面渲染得更快。下面通过几个案例来对比用 React 来渲染 Angular 和直接使用 Angular 来渲染之间的性能差异。 我喜欢Angular,我不仅在一些有趣的小项目中使用它，同时也在一些大型的专业项目中来使用AngularJs。我同时也尝试其他框架，像BackboneJs和EmberJs，这俩也是很好的工具，以上三种都属于一类叫做MVC的框架(可以叫MVVC),但是每次使用它们的时候，我都会在渲染方面遇到的一些性能的不足。对于渲染列表项目，双向数据绑定和单向数据绑定并没有实际的区别。对我而言在不考虑双向数据绑定情况下BackboneJS渲染性能优于AngularJs。 最近出现一个叫做React的优秀框架，一个看起来有点弱小的库接下来一段时间将对 JavaScript MVC 框架造成很大的影响。简而言之，这个库能够使网页渲染性能得到提升，ReactJs 主要使用的部分是针对 MVC 框架中的 View 部分，刚开始我不明白设计者为什么会把 Model 和 Controller 这两部分给抛弃呢，难道像 EmberJs, BackboneJS 和 Angular 这些框架中最有趣的地方不就是 Model 和 Controller 部分吗？仔细思考后，其实 React 在 Controller 部分也有很特色的地方，然而 React 不是一个大而全的 MVC 框架，ReactJs 的工作原理是保持一个虚拟的 DOM,渲染只有在当...",
    "lang": "zh-CN"
  },
  
  {
    "title": "前端开发流程工具 Yeoman",
    "url": "/2015-02-21/yeoman-grunt-bower-3.html",
    "date": "2015-02-21",
    "categories": ["Study"],
    "summary": "在上一篇文章中我们介绍了可以帮助我们自动管理和运行各种JavaScript任务的Grunt，再上一篇文章我们介绍了前端包管理器Bower，这篇文章我们来介绍Yeoman这个神奇的脚手架，Yeoman是Google的团队和外部贡献者团队合作开发的，他的目标是通过Grunt（一个用于开发任务自动化的命令行工具）和Bower（一个HTML、CSS、Javascript和图片等前端资源的包管理器）的包装为开发者创建一个易用的工作流。下面我给大家大致来介绍下这个神奇的工具 ...",
    "content": "在上一篇文章中我们介绍了可以帮助我们自动管理和运行各种JavaScript任务的Grunt，再上一篇文章我们介绍了前端包管理器Bower，这篇文章我们来介绍Yeoman这个神奇的脚手架，Yeoman是Google的团队和外部贡献者团队合作开发的，他的目标是通过Grunt（一个用于开发任务自动化的命令行工具）和Bower（一个HTML、CSS、Javascript和图片等前端资源的包管理器）的包装为开发者创建一个易用的工作流。下面我给大家大致来介绍下这个神奇的工具。 Yeoman 什么是Yeoman？ Yeoman—用于构建现代Web应用的脚手架（一种提高开发效率的工具的代名词）。 Yeoman主要由以下3部分组成： yo：Yo 是一个 Web 应用的架构（scaffolding）工具。它提供了非常多的模板，用来生成不同类型的 Web 应用。这些模板称为生成器（generator）。 Bower：Bower是一个js的包管理器，可以管理各个包之间的依赖关系，有了它以后你再也不需要手动下载和管理你的脚本文件。 Grunt：一个帮助我们自动管理和运行JavaScript的任务之执行工具，可以用了检查代码语法是否正确，压缩代码，合并文件，通过Grunt可以简化我们的工作流程。 怎么来使用Yeoman？ 1.首先你需要安装yo和其他一些要求的工具。（前提是那你已经安装了Nodejs和npm） $ npm install -g yo bower grunt-cli gulp 有一个小彩蛋，在这里看到了Yeoman也很推荐cmder （跑题了，逃） 2.为了搭建你的Web应用，你需要安装’generator-webapp’生成器。 $ npm install -g generator-webapp 这是一个默认的Web应用生成器，通过它你可以脚手架一个包含 HTML5 Boilerplate, jQuery, Modernizr,Bootstrap的项目，同时你也可以选择使用它们，这个generator将会使用Grunt来进行任务管理（当然你也可以使用gulp）。 3.等到上面都安装好后，你就可以新建你的项目目录了。 $ mkdir my-yo-webapp &amp;&amp; cd my-yo-webapp 4.接着使用下面命令： $ yo webapp 然后选择你需要安装的东西，接着你就可以看到命令行开始飞起来了，完成后，你的目录下会生出如下文件： 5.然后运行下面命令，你会发现有神奇的东西出现： $...",
    "lang": "zh-CN"
  },
  
  {
    "title": "前端开发流程工具 Grunt",
    "url": "/2015-02-18/yeoman-grunt-bower-2.html",
    "date": "2015-02-18",
    "categories": ["Study"],
    "summary": "在上面一篇文章中，我们介绍了前端的包管理器 Bower，这次我们来了解前端应用开发流程工具 Grunt，在JavaScript 开发过程中，我们常常会遇到一些重复性的任务，譬如检查语法是否正确，压缩代码，合并文件，要是以前我们会选择不同的工具来完成不同的任务，但是这样感觉既复杂又耗时，但是现在有了 Grunt，Grunt 就是为了解决这些问题而发明的一个工具，可以帮助我们自动管理和运行各种 JavaScript 任务，简化我们的工作流程 ...",
    "content": "在上面一篇文章中，我们介绍了前端的包管理器 Bower，这次我们来了解前端应用开发流程工具 Grunt，在 JavaScript 开发过程中，我们常常会遇到一些重复性的任务，譬如检查语法是否正确，压缩代码，合并文件，要是以前我们会选择不同的工具来完成不同的任务，但是这样感觉既复杂又耗时，但是现在有了 Grunt，Grunt 就是为了解决这些问题而发明的一个工具，可以帮助我们自动管理和运行各种 JavaScript 任务，简化我们的工作流程。 Grunt 为什么使用任务运行工具? 简而言之，自动化。当你处理诸如代码最小化, 代码编译, 单元测试, 代码规范校验等等重复任务时, 你必须要做的工作越少，你的工作就变得越简单。在你完成配置后，不费吹灰之力，一个任务运行工具可以替你和你的团队完成绝大部分日常工作。(官网资料) 为什么使用 Grunt? Grunt 是一个庞大的生态系统，每天都在成长。你可以自由的选择数以百计的插件以帮助你自动化的处理任务。如果你所需要的插件还被有人创建，那么你可以自己创建插件并通过 npm 很方便的发布以供更多人使用并一起完善。（官网资料） 下面我们来看看当我们运行 Grunt 的样子吧，下面这图是我使用 Grunt 自动运行我一个Nodejs 项目的截图: 如何安装 Grunt？ Grunt 和 Grunt 的插件都是通过 Node.js 的包管理器 npm 来安装和管理的。Grunt 0.4.x 要求 Node.js 的版本&gt;=0.8.0(也就是 0.8.0 及以上版本的 Node.js 才能很好的运行 Grunt)。 为了方便使用 Grunt，我们可以把我们的 Grunt...",
    "lang": "zh-CN"
  },
  
  {
    "title": "前端开发流程工具 Cmder 和 Bower",
    "url": "/2015-02-17/yeoman-grunt-bower-1.html",
    "date": "2015-02-17",
    "categories": ["Study"],
    "summary": "前端开发的确不是以前那种前端开发，如果说我们过去的前端开发是处于“刀耕火种”时代，那么现在的前端开发无疑已经进入了\"工厂生产\"的时代。近几年，随着Nodejs的出现，伴随着出现了很多优秀的前端开发管理工具，极大的方便着我们的前端开发，的确 Nodejs 是上帝送给我们前端开发工程师最好的礼物。下面几篇文章我给大家来介绍一些前端开发过程中需要用到的优秀的工具：Cmder、Bower、grunt、Yeoman ...",
    "content": "前端开发的确不是以前那种前端开发，如果说我们过去的前端开发是处于“刀耕火种”时代，那么现在的前端开发无疑已经进入了”工厂生产”的时代。近几年，随着 Nodejs 的出现，伴随着出现了很多优秀的前端开发管理工具，极大的方便着我们的前端开发，的确 Nodejs 是上帝送给我们前端开发工程师最好的礼物。下面几篇文章我给大家来介绍一些前端开发过程中需要用到的优秀的工具：cmder、Bower、grunt、Yeoman。 Cmder 看起来 cmder 貌似和我们的前端开发流程关系不大，假如说 bower、grunt、Yeoman 这些工具是“马”的话，那么 cmder 这个工具就是一个好“鞍”（好马配好鞍）。 你一定会被这个 cmd 代替工具所吸引，首先上图： 只能用优雅来形容这个软件，色彩非常性感，在使用上面也明显方便于 windows 自带的那个蹩脚的 cmd。官方是这个介绍的：Cmder is a software package created out of pure frustration over the absence of nice console emulators on Windows. It is based on amazing software, and spiced up with the Monokai...",
    "lang": "zh-CN"
  },
  
  {
    "title": "JavaScript编程实践过程中性能的优化",
    "url": "/2015-02-16/High-Performance-JavaScript-7.html",
    "date": "2015-02-16",
    "categories": ["Study"],
    "summary": "每种编程语言都有它的“痛点”，并且随着时间的推移，它存在的低效模式也不断发展。JavaScript提出了一些独一无二的性能挑战，这与你代码组织的方式有关，随着Web应用变得越来越高级，包含的JavaScript代码也越来越多，各种模式与反模式也逐渐出现，为了编写更高效的代码，请牢记这些编程实践 ...",
    "content": "每种编程语言都有它的“痛点”，并且随着时间的推移，它存在的低效模式也不断发展。JavaScript提出了一些独一无二的性能挑战，这与你代码组织的方式有关，随着Web应用变得越来越高级，包含的JavaScript代码也越来越多，各种模式与反模式也逐渐出现，为了编写更高效的代码，请牢记这些编程实践： 避免多重求值（Double Evaluation） 通过避免使用eval()和function()构造器来避免双重求值带来的性能消耗，同样的，给setTimeout()和setInterval()传递函数而不是字符串作为参数。 双重求值是一项代价昂贵的操作，它比直接包含代码执行速度要慢很多。 使用Object/Array直接量 在JavaScript中创建对象和数组的方法有很多，但使用对象和数组直接量是最快的方式，而且直接量可以有助于节省代码量，以减少整个文件的尺寸。 //创建一个对象 var myObject = { name: \"Lucy\", age: 21, count: 50 }; //创建一个数组 var myArray = [\"Lucy\", 21, 50]; 不要重复工作 在计算机科学领域中最主要的优化技术之一是“避免无谓的工作(work avoidance)”。 避免无谓的工作的概念有两重意思：别做无关紧要的工作，别重复做已经完成的工作。 延迟加载 第一种消除函数中的重复工作的方法是延迟加载(lazy loading)。延迟加载意味着在信息被使用前不会做任何操作，当一个函数在页面中不会立刻调用时候，延迟加载是最好的选择。 条件预加载 它会在脚本加载期间提前检测，而不会等到函数被调用，检测的操作依然只有一次，只是过程来得更早。条件预加载确保所有函数调用消耗的时间相同，其代价是需要脚本加载时就检测，而不是加载后，预加载适用于一个函数马上用到，并且在整个页面的生命中频繁出现的场合。 使用速度快的部分 位操作 有好几种方法来利用为创造·位操作符提升JavaScript的速度。 使用运算代替纯数学操作 //通常采用对2取模的方式实现表格颜色交换 for (var i = 0, len = rows.length; i &lt;...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Ajax 性能的优化",
    "url": "/2015-02-14/High-Performance-JavaScript-6.html",
    "date": "2015-02-14",
    "categories": ["Study"],
    "summary": "Ajax 是高性能 JavaScript 的基础，它可以通过延迟下载体积较大的资源文件来使页面加载更快，它通过异步的方式在客户端和服务器之间传递数据，从而避免页面资源一窝蜂的下载。它甚至可以只用一个 HTTP 请求就获得整个页面的资源。选择合适的传输方式和最有效的数据格式，可以显著改善用户和网站的交互体验 ...",
    "content": "Ajax 是高性能 JavaScript 的基础，它可以通过延迟下载体积较大的资源文件来使页面加载更快，它通过异步的方式在客户端和服务器之间传递数据，从而避免页面资源一窝蜂的下载。它甚至可以只用一个 HTTP 请求就获得整个页面的资源。选择合适的传输方式和最有效的数据格式，可以显著改善用户和网站的交互体验。我们这里主要讨论从服务器接收发数据速度最快的技术，以及最为有效的数据编码格式。 常用的向服务器请求数据的技术 XMLHttpRequest(XML) 使用范例： var url = '/data.php'; var params = [ 'id=9798', 'limit=20' ]; var req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.readyState === 4) { //获取响应的头信息 var responseHeaders = req.getAllResponseHeaders(); //获取数据 var data = req.responseText; //数据处理 } } req.open('GET', url +...",
    "lang": "zh-CN"
  },
  
  {
    "title": "高性能 JavaScript - 快速响应的用户界面",
    "url": "/2015-02-12/High-Performance-JavaScript-5.html",
    "date": "2015-02-12",
    "categories": ["Study"],
    "summary": "有一句话很有道理：“如果 JavaScript运行了整整几秒钟，那么很有可能是你做错了什么......”，如果界面在 100 毫秒内响应用户输入，用户会认为自己在“直接操作界面中的对象”。超过 100 毫秒意味着用户感觉自己与界面失去了联系。JavaScript 和用户界面更新在同一个进程中运行，因此一次只能处理一件事情。这意味着当 JavaScript 代码在运行时，用户界面不能响应输入，反之亦然。高效地管理UI线程就是要确保 JavaScript 不能运行太长时间，以免影响用户体验。管理好 JavaScript 的运行时间对 Web 应用的性能非常重要 ...",
    "content": "有一句话很有道理：“如果 JavaScript 运行了整整几秒钟，那么很有可能是你做错了什么……”，如果界面在 100 毫秒内响应用户输入，用户会认为自己在“直接操作界面中的对象”。超过 100 毫秒意味着用户感觉自己与界面失去了联系。JavaScript 和用户界面更新在同一个进程中运行，因此一次只能处理一件事情。这意味着当 JavaScript 代码在运行时，用户界面不能响应输入，反之亦然。高效地管理 UI 线程就是要确保 JavaScript 不能运行太长时间，以免影响用户体验。管理好 JavaScript 的运行时间对 Web 应用的性能非常重要。 浏览器 UI 线程 定义 共用于执行 JavaScript 和更新用户界面的进程通常被称为“浏览器 UI 线程”（尽管对所有浏览器来说，称为“线程”不一定准确）。 工作原理 UI 线程的工作基于一个简单的队列系统，任务会保存到队列中直至进程空闲。一旦空闲，队列中的下一个任务就被重新提取出来并运行，这些任务要么是运行 JavaScript 代码，要么是执行 UI 更新，包括重绘和重排。也许这个进程中最有趣的部分在于每一次输入可能会导致一个或多个任务被加到队列。 优化 当所有的 UI 线程任务都执行完毕，进程进入空闲状态，并等待更多任务加入队列。空闲状态是理想的，因为用户所有的交互都会立即触发 UI 更新。如果用户试图在任务运行期间于页面交互，不紧没有即时的 UI 更新，甚至可能新的 UI 更新不会被创建并不会被加到队列。事实上，太多事浏览器在 JavaScript 运行时会停止把新任务加到 UI 线程中，也就是说JavaScript 任务必须尽快结束，以避免对用户体验造成不良影响。 浏览器限制...",
    "lang": "zh-CN"
  },
  
  {
    "title": "JavaScript 的算法和流程控制性能优化",
    "url": "/2015-02-07/High-Performance-JavaScript-4.html",
    "date": "2015-02-07",
    "categories": ["Study"],
    "summary": "如同其他编程语言，代码的写法和算法会影响 JavaScript 的运行时间，与其他语言的不同的是，JavaScript 的可用资源有限，因此优化技术更为重要，这个学习笔记主要是从 JavaScript 的循环、条件语句、递归这三个方面的一些奇淫技巧来优化 JavaScript 的性能 ...",
    "content": "如同其他编程语言，代码的写法和算法会影响 JavaScript 的运行时间，与其他语言的不同的是，JavaScript 的可用资源有限，因此优化技术更为重要，这个学习笔记主要是从 JavaScript 的循环、条件语句、递归这三个方面的一些奇淫技巧来优化 JavaScript 的性能。 循环 for、while 和 do-while 循环性能特性相似，for-in 相比前三者慢 由于每次迭代操作会同时搜索实例或者原型属性，for-in 循环的每次迭代都会产生更多的开销，因此比其他循环类型要慢，对比相同迭代次数的循环，for-in 循环最终只有其他类型速度的 1/7，因此，除非你明确需要迭代一个属性数量未知的对象,否则应该避免使用 for-in 循环。还有不要使用 for-in 来循环数组成员。 改善循环性能的最佳方式是减少每次迭代的运算量和减少循环迭代次数。 forEach(),此方法是 ECMA-262 引入的一新的原生数组方法，此方法遍历一个数组的多有成员，并且在每个成员上面执行一个函数。 //基于函数的迭代方法 item.forEach(function(value,index,array){ process(value); }) //方便！！但是慢，这个要考虑。 条件语句 通常来说，switch 总是比 if-else 快，并不总是最佳解决方案 使用 if-else 还是 switch，基于测试条件的数量来判断：条件数量越大，越倾向于使用 switch（考虑到代码的易读性），反之 if-else 更易读。 事实证明，大多数情况下 switch 比 if-else 运行得要快，但只有当条件数量很大时候才快得明显。 优化 if-else，确保最可能出现的放在首位...",
    "lang": "zh-CN"
  },
  
  {
    "title": "JavaScript 的 DOM 编程性能优化",
    "url": "/2015-02-06/High-Performance-JavaScript-3.html",
    "date": "2015-02-06",
    "categories": ["Study"],
    "summary": "DOM 是 Document Object Model 的缩写，中文叫做文档对象模型，是一个与语言无关的，用户操作 XML 和 HTML 文档的应用程序接口。在浏览器中，主要与HTML文档打交道，在 Web 应用中也经常需要检索XML文档，DOM API用于访问文档中的数据。John Hevatin有一次演讲说过一个贴切的比喻，把 DOM 和 JavaScript 各自想象成一个岛屿，它们直接用收费桥梁连接，ECMAScript 每次访问DOM，都要经过这个桥，并交纳“过桥费”，过的桥越多交的费用也越多，因此要想减少费用就得少过桥，我们这里就来学习如何来优化这个问题 ...",
    "content": "DOM 是 Document Object Model 的缩写，中文叫做文档对象模型，是一个与语言无关的，用户操作 XML 和 HTML 文档的应用程序接口。在浏览器中，主要与 HTML 文档打交道，在 Web 应用中也经常需要检索 XML 文档，DOM API 用于访问文档中的数据。John Hevatin 有一次演讲说过一个贴切的比喻，把 DOM 和 JavaScript 各自想象成一个岛屿，它们直接用收费桥梁连接，ECMAScript 每次访问 DOM，都要经过这个桥，并交纳“过桥费”，过的桥越多交的费用也越多，因此要想减少费用就得少过桥，我们这里就来如何来优化这个问题。 最小化 DOM 访问次数，尽可能在 JavaScript 端处理 访问 DOM 元素是有代价的–前面提到的过桥费。修改元素则更加昂贵，因为它会导致浏览器重新计算页面的集合变化。 也就是说访问 DOM 次数越多，代码的运行速度就越慢，因此一般的经验法则是：减少 DOM 的访问次数，把运算尽量留在 ECMAScript 这一段处理。 //最坏的情况是在循环中访问和修改元素 //尤其是对 HTML 元素集合循环操作。 //方法一 function innerHTMLLoop() { for...",
    "lang": "zh-CN"
  },
  
  {
    "title": "JavaScript 的数据访问性能优化",
    "url": "/2015-02-05/High-Performance-JavaScript-2.html",
    "date": "2015-02-05",
    "categories": ["Study"],
    "summary": "JavaScript 中有四种基本的数据存取位置：直接量、变量、数组元素和对象成员。和其他语言一样，数据的存储位置会很大的影响其读取速度 ...",
    "content": "JavaScript 中有四种基本的数据存取位置：直接量、变量、数组元素和对象成员，和其他语言一样，数据的存储位置会很大的影响其读取速度，那么该如何确定数据的存储位置来提高性能呢？我们一个一个来理解这个问题。 四种基本数据存储位置 直接量：直接量只代表自身，不存储特定位置，可想而知，使用直接量的访问速度会比其他会要快一点。JavaScript 中的直接量有：字符串，数字，布尔值，对象，数组，函数，正则，以及 null 和 undefined 值。 变量：我们用 var 定义的数据存储单元。 数组元素：存储在 JavaScript 数组对象内部，以数字作为索引。 对象成员：存储在 JavaScript 对象内部，以字符串作为索引。 总体来说，在 JavaScript 中访问直接量和局部变量的速度要快于数组项和成员对象的速度，那么如何来尽量使用直接量和局部变量，减少数组项和成员对象的使用呢？这里《高性能的 JavaScript》里面有这些建议： 管理作用域 作用域链和标识符解析 什么是作用域？当代码在一个环境中执行时候，会创建函数对象的一个作用域链，作用域链的用途是保证对执行环境有权访问的所有函数的有序访问，当前执行的代码所在环境的变量对象在作用域的头部。作用域中的下一个变量对象来自包含环境，而再下一次环境变量则来自下一个包含环境，一直延续到全局执行环境，也就是最后一个执行环境，全局对象包含 window、navigator 和 document 这些。 标识符的解析过程可以理解是对于作用域链的搜索过程，搜索过程从头部开始，假如找到了就使用这个标识符对应的变量，停止搜索，假如没有找到就搜索作用域中下一个对象，直到找到，假如到了全局执行环境都没有找到那就找不到了，也就是那个没有被定义。 标识符解析的性能 上面说了，标识符解析是一个搜索的过程，可想而知，当我们需要的变量在第一次搜索的时候就找到了，那么时间也就会是最短的，也就是说，一个标识符的位置越深，它的读取速度就越慢，不过又说回来，V8 引擎已经优化了这个问题，但是在没有被优化的 JavaScript 引擎的浏览器中，建议尽可能使用局部变量。还有一个好的建议：如果跨作用域的值在函数中被引用一次以上，那么就把它存到局部变量里面。 改变作用域链 with 语句和 try-catch 这两个语句都可以用来改变作用域链。 当代码执行到 with 语句时候，运行期上下期的作用域链临时被改变了，一个新的可变对象被创立，它包了参数指定的对象所有属性，这个对象被推入所用域链的头部，这意味着函数所有的局部变量现在都处于第二个所用域对象中，因此访问对象更高了。 对于 try 语句也有同样的效果，当 try 中代码块发生错误时候执行过程会自动跳转到 catch 子句中，然后把异常对象推入一个可变对象并置于作用域的头部，这样就出现了和...",
    "lang": "zh-CN"
  },
  
  {
    "title": "Vue、Angular、Avalon 框架比较",
    "url": "/2015-02-04/vue-angular-avalon-1.html",
    "date": "2015-02-04",
    "categories": ["Study"],
    "summary": "前端开发已经不是前几年的那种前端开发了，已经有农业时代进入工业时代了，这几年出现了很多优秀的 JavaScript 方面的 MVVM 框架，今天我来比较下 Vue，Angular，Avalon 这些框架优缺点 ...",
    "content": "前端开发已经不是前几年的那种前端开发了，已经有农业时代进入工业时代了，这几年出现了很多优秀的 JavaScript 方面的 MVVM 框架，今天我们来比较下 Vue，Angular，AAvalon 这些框架优缺点。 Vue Vue 尤雨溪老师写的一个用于创建 web 交互界面的库，是一个精简的 MVVM。从技术角度讲，Vue 专注于 MVVM 模型的 ViewModel 层。它通过双向数据绑定把 View 层和 Model 层连接了起来。实际的 DOM 封装和输出格式都被抽象为了 Directives 和 Filters。Vue 和其他库相比是一个小而美的库，作者的主要目的是通过一个尽量简单的 API 产生可反映的数据绑定和可组合的视图组件，感觉作者的思路非常清晰。 优点 简单：官方文档很清晰，比 Angular 简单易学。 快速：异步批处理方式更新 DOM。 组合：用解耦的、可复用的组件组合你的应用程序。 紧凑：~18kb min+gzip，且无依赖。 强大：表达式 &amp; 无需声明依赖的可推导属性 (computed properties)。 对模块友好：可以通过 NPM、Bower 或 Duo 安装，不强迫你所有的代码都遵循 Angular...",
    "lang": "zh-CN"
  },
  
  {
    "title": "JavaScript 的加载和执行性能优化",
    "url": "/2015-02-03/High-Performance-JavaScript-1.html",
    "date": "2015-02-03",
    "categories": ["Study"],
    "summary": "管理浏览器中的JavaScript代码是一个棘手的问题，因为代码在执行过程中会阻塞浏览器的其他进程，比如用户界面的绘制。每次遇到 script 标签，页面都必须停下来等待代码下载（如果是外链文件）并执行，然后继续处理其他部分。尽管如此，还是有一些方法减少 JavaScript 对性能的影响 ...",
    "content": "管理浏览器中的 JavaScript 代码是一个棘手的问题，因为代码在执行过程中会阻塞浏览器的其他进程，比如用户界面的绘制。每次遇到 script 标签，页面都必须停下来等待代码下载（如果是外链文件）并执行，然后继续处理其他部分。 尽管如此，还是有一些方法减少 JavaScript 对性能的影响。 脚本位置 大多数浏览器都使用单一进程来处理用户界面（UI）更新和 JavaScript 脚本执行，所以同一时刻只能进行其中一件事情。IE8，firefox，safari，chrome 都允许并行下载 JavaScript 文件，遗憾的是，JavaScript 的下载仍会阻塞其他资源的下载，所以推荐所有的 script 标签都尽可能放到/body 标签的底部。 组织脚本 由于每个 script 标签的初始下载时候都会阻塞页面渲染，所以减少页面包含的 script 标签数量有助于减少这一情况，无论是外链文件还是内嵌脚本都是如此。 这里可以使用Grunt的内置 concat 工具来合并我们的脚本，通过 min 工具来压缩我们的脚本。 那么什么是 Grunt 呢？Grunt 是一个基于任务的 JavaScript 项目命令行构建工具，运行于 Node.js 平台。Grunt 能够从模板快速创建项目，合并、压缩和校验 CSS &amp; JS 文件，运行单元测试以及启动静态服务器。 无阻塞的脚本 由于尽管下载一个较大的 javascript 文件只产生一次 HTTP 请求，却会锁死浏览器一大段时间，为了避免，需要逐步加载 javascript...",
    "lang": "zh-CN"
  },
  
  {
    "title": "工程师如何明白的做事情",
    "url": "/1993-12-09/talk-ppt.html",
    "date": "1993-12-09",
    "categories": [],
    "summary": "最近给团队同学的一个分享，作为工程师而言如何明白的做事情。",
    "content": "工程师如何明白的做事情 Tw93 - 22/12/08 首先来套个娃 🪆 什么是工程师？ 一个通过科学和技术知识解决问题的专业人员 掌握专业的知识和技能，并具备创新能力和解决问题的能力 大前提 第一我们不是码农 第二我们不是资源 第三我们是一个有专业技能的脑力工作者 什么叫明白的做事情？ 事情本身被人们理解得很清楚、明确、没有疑惑、不懵逼 过程中对干活的内容、步骤、条件有清晰的认识，做起来一气呵成 Talk is cheap，Show me the 实操 工程师如何明白的做事情 理清楚 讲明白 做到位 当你理清楚了问题是什么？为什么出现？怎么做？做的过程会很有逻辑，而且还是自己想写的代码，你会发现真的很爽 😃 如何理清楚问题 简单归纳出这个问题是什么 最原始的需求/问题是什么？ 为什么要解决这个问题？不解决会有什么影响？不做效率最高 🙊 问题发生的根本原因是什么？ 这个定义对于其他人能否听得懂？ 🌰：发现 XXX 无线端用户使用量明显低于 PC 端，排查是有多处用户外出必备功能有卡点，假如不解决会很影响用户的使用效率。 我常用拆问题的思维模型 MECE 分解法：相互独立，完全穷尽的分解出最小的问题 分类 归因回溯法：通过不同地反推追问，从而找到深层的原因 假设 5W2H：What、Who、Where、When、Why、How、How Much 角度 MECE...",
    "lang": "zh-CN"
  },
  
  {
    "title": "如何做一个产品工程师？",
    "url": "/1993-07-29/pd-code-ppt.html",
    "date": "1993-07-29",
    "categories": [],
    "summary": "最近给团队同学的一个分享，从前端工程师的视角来看如何做成一个产品开发工程师。",
    "content": "怎么做一个产品工程师？ Tw93 - 22/07/29 为什么不叫前端工程师？ 前端的定义 维基定义：前端是软体系统中直接和用户交互的部分，而后端控制着软件的输出；将软体分为前端和后端是一种将软体不同功能的部分相互分离的抽象。 前端工程师的定义 百度：使用 HTML、CSS、JavaScript 等专业技能和工具将产品 UI 设计稿实现成网站产品，涵盖用户 PC 端、移动端网页，处理视觉和交互问题的工程师。 也叫切页面的那个人 🙊 什么叫做产品工程师？ 定义：能够将痛点 / 想法用技术方式转换成产品让其发挥更大的作用 边界：不局限于岗位、技术，更注重用技术和产品思路去解决问题 过程：痛点 / 想法 -&gt; 产品思路 -&gt; 交互稿 -&gt; 开发 -&gt; 产品 MVP -&gt; 运营 素质：同理心、好奇心、逻辑思维、数据敏感、学习能力 痛点 / 想法从何而来？ 我有一个点子，就差程序员了 😵 并不是只有产品才能做产品 也不是人人都是产品经理 好的产品经理 需求判断：对需求的收集 -&gt; 问题分析 -&gt; 管理优先级...",
    "lang": "zh-CN"
  },
  
  {
    "title": "大环境不好的情况下如何🐶着",
    "url": "/1993-07-01/gou-ppt.html",
    "date": "1993-07-01",
    "categories": [],
    "summary": "大概是今年4月份给团队同学的一个分享，归档于博客，来聊聊作为一个国内的开发工程师，如何在大环境不好的情况🐶着变强。",
    "content": "大环境不好情况下如何 🐶 着变强 Tw93 - 22/07/01 经济 两年前 苹果 = 阿里 + 腾讯 + 美团 + 京东 + 拼多多 前十大企业，中国占五席 两年后 苹果 = 中国所有主流互联网市值之和 + 12465 亿美元 13 年前 3000 点金融保卫战牺牲的是我爸 13 年后我也在保卫战中牺牲了。 裁员 = 毕业 疫情不景气，生产和消费均受影响 红利期已过，增长乏力，供大于求 互联网监管、反垄断越来越深入 企业先活下去再说，人工成本 是大头 疫情 开始的时间 2019 年 12 月 31 日，距今 950...",
    "lang": "zh-CN"
  }
  
  
  ,
  
  {
    "title": "How to Survive and Thrive in a Tough Environment",
    "url": "/en/1993-07-01/gou-ppt.html",
    "date": "1993-07-01",
    "categories": [],
    "summary": "Probably a sharing to the team in April this year, archived in the blog. Let's talk about how a domestic development engineer can survive and become stronger when the environment is bad.",
    "content": "How to Survive and Thrive in a Tough Environment Tw93 - 22/07/01 Economy Two years ago: Apple = Alibaba + Tencent + Meituan + JD + Pinduoduo China held five spots in the top ten global enterprises. Two years later: Apple = Total market cap of all mainstream Chinese internet...",
    "lang": "en-US"
  },
  
  {
    "title": "How to be a Product Engineer?",
    "url": "/en/1993-07-29/pd-code-ppt.html",
    "date": "1993-07-29",
    "categories": [],
    "summary": "A recent sharing with the team, from the perspective of a front-end engineer, how to become a product development engineer.",
    "content": "How to be a Product Engineer? Tw93 - 22/07/29 Why not just “Front-end Engineer”? Definition of Front-end Wiki: Front-end is the part of a software system that interacts directly with users, while the back-end controls the output; separating software into front-end and back-end is an abstraction that separates different functional...",
    "lang": "en-US"
  },
  
  {
    "title": "How Engineers Can Do Things Clearly",
    "url": "/en/1993-12-09/talk-ppt.html",
    "date": "1993-12-09",
    "categories": [],
    "summary": "A recent sharing with the team on how engineers can do things clearly.",
    "content": "How Engineers Can Do Things Clearly Tw93 - 22/12/08 First, a Matryoshka doll 🪆 What is an Engineer? A professional who solves problems through scientific and technical knowledge. Possesses professional skills and innovation/problem-solving abilities. Premise We are not “code monkeys” We are not “resources” We are knowledge workers with specialized...",
    "lang": "en-US"
  },
  
  {
    "title": "JavaScript Loading Performance",
    "url": "/en/2015-02-03/High-Performance-JavaScript-1.html",
    "date": "2015-02-03",
    "categories": ["Study"],
    "summary": "Managing JavaScript code in browsers is a tricky problem because code execution blocks other browser processes, such as user interface painting. Every time a script tag is encountered, the page must stop and wait for the code to download (if it is an external file) and execute, and then continue to process other parts. Despite this, there are still some ways to reduce the impact of JavaScript on performance ...",
    "content": "Managing JavaScript code in browsers is a tricky problem because code execution blocks other browser processes, such as user interface painting. Every time a script tag is encountered, the page must stop and wait for the code to download (if it is an external file) and execute, and then continue...",
    "lang": "en-US"
  },
  
  {
    "title": "Comparison of Vue, Angular, Avalon Frameworks",
    "url": "/en/2015-02-04/vue-angular-avalon-1.html",
    "date": "2015-02-04",
    "categories": ["Study"],
    "summary": "Front-end development is no longer the front-end development of a few years ago. It has entered the industrial era from the agricultural era. In recent years, many excellent MVVM frameworks in JavaScript have appeared. Today I compare the advantages and disadvantages of frameworks like Vue, Angular, Avalon ...",
    "content": "Front-end development is no longer the front-end development of a few years ago. It has entered the industrial era from the agricultural era. In recent years, many excellent MVVM frameworks in JavaScript have appeared. Today we compare the advantages and disadvantages of Vue, Angular, Avalon frameworks. Vue Vue is a...",
    "lang": "en-US"
  },
  
  {
    "title": "Data Access Performance Optimization of JavaScript",
    "url": "/en/2015-02-05/High-Performance-JavaScript-2.html",
    "date": "2015-02-05",
    "categories": ["Study"],
    "summary": "There are four basic data storage locations in JavaScript: literals, variables, array elements, and object members. Like other languages, the storage location of data will greatly affect its reading speed ...",
    "content": "There are four basic data storage locations in JavaScript: literals, variables, array elements, and object members. Like other languages, the storage location of data will greatly affect its reading speed. So how to determine the storage location of data to improve performance? Let’s understand this problem one by one. Four...",
    "lang": "en-US"
  },
  
  {
    "title": "DOM Programming Performance Optimization of JavaScript",
    "url": "/en/2015-02-06/High-Performance-JavaScript-3.html",
    "date": "2015-02-06",
    "categories": ["Study"],
    "summary": "DOM is an abbreviation for Document Object Model. It is a language-independent application program interface for users to manipulate XML and HTML documents. In browsers, it mainly deals with HTML documents. In web applications, XML documents also often need to be retrieved. DOM API is used to access data in documents. John Hevatin once gave a pertinent metaphor in a speech, imagining DOM and JavaScript as islands respectively, they are directly connected by a toll bridge. Every time ECMAScript accesses DOM, it has to pass through this bridge and pay a \"bridge fee\". The more bridges passed, the more fees paid. Therefore, if you want to reduce costs, you have to cross the bridge less. Here we come to learn how to optimize this problem ...",
    "content": "DOM is an abbreviation for Document Object Model. It is a language-independent application program interface for users to manipulate XML and HTML documents. In browsers, it mainly deals with HTML documents. In web applications, XML documents also often need to be retrieved. DOM API is used to access data in...",
    "lang": "en-US"
  },
  
  {
    "title": "Algorithm and Flow Control Performance Optimization of JavaScript",
    "url": "/en/2015-02-07/High-Performance-JavaScript-4.html",
    "date": "2015-02-07",
    "categories": ["Study"],
    "summary": "Like other programming languages, code writing and algorithms will affect the running time of JavaScript. Unlike other languages, JavaScript has limited available resources, so optimization techniques are more important. this study note mainly optimizes JavaScript performance from three aspects of JavaScript loops, conditional statements, and recursion ...",
    "content": "Like other programming languages, code writing and algorithms will affect the running time of JavaScript. Unlike other languages, JavaScript has limited available resources, so optimization techniques are more important. This study note mainly optimizes JavaScript performance from three aspects: JavaScript loops, conditional statements, and recursion. Loops Performance characteristics of for,...",
    "lang": "en-US"
  },
  
  {
    "title": "High Performance JavaScript - Rapidly Responding User Interface",
    "url": "/en/2015-02-11/High-Performance-JavaScript-5.html",
    "date": "2015-02-11",
    "categories": ["Study"],
    "summary": "There is a saying that makes sense: \"If JavaScript runs for whole seconds, then it is very likely that you have done something wrong...\", if the interface responds to user input within 100 milliseconds, users will think they are \"directly manipulating objects in the interface\". More than 100 milliseconds means users feel they have lost contact with the interface. JavaScript and user interface updates run in the same process, so only one thing can be handled at a time. This means that when JavaScript code is running, the user interface cannot respond to input, and vice versa. Efficiently managing the UI thread is to ensure that JavaScript cannot run for too long, lest it affect the user experience. Managing the running time of JavaScript is very important for the performance of Web applications ...",
    "content": "There is a saying that makes sense: “If JavaScript runs for whole seconds, then it is very likely that you have done something wrong…”, if the interface responds to user input within 100 milliseconds, users will think they are “directly manipulating objects in the interface”. More than 100 milliseconds means...",
    "lang": "en-US"
  },
  
  {
    "title": "Ajax Performance Optimization",
    "url": "/en/2015-02-14/High-Performance-JavaScript-6.html",
    "date": "2015-02-14",
    "categories": ["Study"],
    "summary": "Ajax is the foundation of high-performance JavaScript. It can make page loads faster by delaying the download of larger resource files. It passes data between the client and the server asynchronously, thereby avoiding batch downloading of page resources. it can even get resources for the entire page with just one HTTP request. Choosing appropriate transmission methods and most effective data formats can significantly improve the interaction experience between users and websites ...",
    "content": "Ajax is the foundation of high-performance JavaScript. It can make page loads faster by delaying the download of larger resource files. It passes data between the client and the server asynchronously, thereby avoiding batch downloading of page resources. it can even get resources for the entire page with just one...",
    "lang": "en-US"
  },
  
  {
    "title": "Performance Optimization in JavaScript Programming Practices",
    "url": "/en/2015-02-16/High-Performance-JavaScript-7.html",
    "date": "2015-02-16",
    "categories": ["Study"],
    "summary": "Every programming language has its \"pain points,\" and over time, its existing inefficient patterns also continue to develop. JavaScript presents some unique performance challenges, which are related to the way your code is organized. As web applications become more advanced and contain more and more JavaScript code, various patterns and anti-patterns gradually appear. To write more efficient code, please keep these programming practices in mind ...",
    "content": "Every programming language has its “pain points,” and over time, its existing inefficient patterns also continue to develop. JavaScript presents some unique performance challenges, which are related to the way your code is organized. As web applications become more and more advanced and contain more and more JavaScript code, various...",
    "lang": "en-US"
  },
  
  {
    "title": "Front-end Development Workflow Tools Cmder and Bower",
    "url": "/en/2015-02-17/yeoman-grunt-bower-1.html",
    "date": "2015-02-17",
    "categories": ["Study"],
    "summary": "Front-end development is indeed not the same as before. If we say that our past front-end development was in the \"slash-and-burn\" era, then current front-end development has undoubtedly entered the era of \"factory production\". In recent years, with the emergence of Node.js, many excellent front-end development management tools have appeared, which greatly facilitates our front-end development. Indeed Node.js is the best gift from God to our front-end development engineers. In the following articles, I will introduce some excellent tools needed in the front-end development process: Cmder, Bower, Grunt, Yeoman ...",
    "content": "Front-end development is indeed not the same as before. If we say that our past front-end development was in the “slash-and-burn” era, then current front-end development has undoubtedly entered the era of “factory production”. In recent years, with the emergence of Node.js, many excellent front-end development management tools have appeared,...",
    "lang": "en-US"
  },
  
  {
    "title": "Front-end Development Workflow Tool Grunt",
    "url": "/en/2015-02-18/yeoman-grunt-bower-2.html",
    "date": "2015-02-18",
    "categories": ["Study"],
    "summary": "In the previous article, we introduced the front-end package manager Bower. This time, we come to understand the front-end application development workflow tool Grunt. In the process of JavaScript development, we often encounter some repetitive tasks, such as checking if syntax is correct, compressing code, and merging files. In the past, we would choose different tools to complete different tasks, but this felt both complex and time-consuming. But now with Grunt, Grunt was invented precisely to solve these problems. It can help us automatically manage and run various JavaScript tasks, simplifying our workflow ...",
    "content": "In the previous article, we introduced the front-end package manager Bower. This time, we come to understand the front-end application development workflow tool Grunt. In the process of JavaScript development, we often encounter some repetitive tasks, such as checking if syntax is correct, compressing code, and merging files. In the...",
    "lang": "en-US"
  },
  
  {
    "title": "Front-end Development Workflow Tool Yeoman",
    "url": "/en/2015-02-21/yeoman-grunt-bower-3.html",
    "date": "2015-02-21",
    "categories": ["Study"],
    "summary": "In the previous article, we introduced Grunt, which can help us automatically manage and run various JavaScript tasks. In the article before that, we introduced the front-end package manager Bower. In this article, we come to introduce Yeoman, a magical scaffold. Yeoman is developed by the Google team and a team of external contributors. Its goal is to create an easy-to-use workflow for developers through the packaging of Grunt (a command line tool for development task automation) and Bower (a package manager for front-end resources such as HTML, CSS, JavaScript, and images). Below I will briefly introduce this magical tool to everyone ...",
    "content": "In the previous article, we introduced Grunt, which can help us automatically manage and run various JavaScript tasks. In the article before that, we introduced the front-end package manager Bower. In this article, we come to introduce Yeoman, a magical scaffold. Yeoman is developed by the Google team and a...",
    "lang": "en-US"
  },
  
  {
    "title": "Using React to Improve Angular's Rendering Performance",
    "url": "/en/2015-02-23/angular-react.html",
    "date": "2015-02-23",
    "categories": ["Study"],
    "summary": "Have you ever encountered performance problems when using Angular? Using React can make pages render faster. Below, through several cases, compare the performance differences between using React to render Angular and directly using Angular to render ...",
    "content": "Original article from: Faster Angular Rendering (Angular and React) Have you ever encountered performance problems when using Angular? Using React can make pages render faster. Below, through several cases, compare the performance differences between using React to render Angular and directly using Angular to render. I like Angular. I use...",
    "lang": "en-US"
  },
  
  {
    "title": "Reading Notes on \"Pro Node.js\"",
    "url": "/en/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html",
    "date": "2015-03-01",
    "categories": ["Study"],
    "summary": "Today I finally finished learning \"Pro Node.js\" (深入浅出 Node.js) written by Mr. Pu Ling. This book is not a simple Node introductory book. It does not stay at the level of Node introduction or usage of frameworks and libraries, but reveals Node's own internal characteristics and structure from different perspectives. It is recommended for students who have a certain Node foundation or have done small projects in Node. After reading it, your thinking will have very peculiar collisions. When I read it, I often had such thoughts: \"Oh, so this function is implemented like this\". The following article is some learning records of my second reading of \"Pro Node.js\", and draw mind maps through the Baidu mind map tool, writing my learning summary under this article every day ...",
    "content": "Today I finally finished learning “Pro Node.js” (深入浅出 Node.js) written by Mr. Pu Ling. This book is not a simple Node introductory book. It does not stay at the level of Node introduction or usage of frameworks and libraries, but reveals Node’s own internal characteristics and structure from different perspectives....",
    "lang": "en-US"
  },
  
  {
    "title": "Can We Do Better Than The Click?",
    "url": "/en/2015-03-30/Browser-input-Events.html",
    "date": "2015-03-30",
    "categories": ["Study"],
    "summary": "Responding to user input is the core of our interface development. To build responsive Web products, the key is to understand how touch, mouse, pointer, keyboard operations and browsers work. You may have experienced a 300 ms delay in mobile browsers or discomfort caused by scrolling through touch. In this article, we will introduce event cascading and use this knowledge to implement a demo of a tap click event, which supports many input methods without violating the proxy browser rules like Opera Mini ...",
    "content": "Original article from: Browser Input Events: Can We Do Better Than The Click? Responding to user input is the core of our interface development. To build responsive Web products, understanding how touch, mouse, pointer, keyboard operations and browsers work is the key to solving the problem. You may have experienced...",
    "lang": "en-US"
  },
  
  {
    "title": "Brief Talk on Object-Oriented JavaScript",
    "url": "/en/2015-06-09/Talking-about-JavaScript-design-patterns1.html",
    "date": "2015-06-09",
    "categories": ["Study"],
    "summary": "Recently I have been learning \"JavaScript Design Patterns\" written by Ross Harmes/Dustin Diaz. I read this book about twice and gained a lot. This book is suitable for students who want to study JavaScript deeply to increase your internal strength. It can help you enhance your understanding of JavaScript object-oriented, while learning various specific design patterns, knowing what occasions these design patterns should be used in, and how to implement them, to write more elegant code. This article is used to summarize my reading notes ...",
    "content": "Recently I have been learning “JavaScript Design Patterns” written by Ross Harmes/Dustin Diaz. I read this book about twice and gained a lot. This book is suitable for students who want to study JavaScript deeply to increase your internal strength. It can help you enhance your understanding of JavaScript object-oriented,...",
    "lang": "en-US"
  },
  
  {
    "title": "My Understanding of Flexbox Layout Mode",
    "url": "/en/2015-10-17/the-thinking-about-flexbox.html",
    "date": "2015-10-17",
    "categories": ["Study"],
    "summary": "Flexbox, a CSS3 layout mode, also known as the flexible box model, is used to provide maximum flexibility for the box model ...",
    "content": "Flexbox, a CSS3 layout mode, also known as the flexible box model, is used to provide maximum flexibility for the box model. First, let’s take an example. Before, we implemented horizontal and vertical centering of a div box like this. Knowing the height and width of the object, position the...",
    "lang": "en-US"
  },
  
  {
    "title": "React Native Animation Research",
    "url": "/en/2016-06-05/thinking-about-react-native-animated.html",
    "date": "2016-06-05",
    "categories": ["Study"],
    "summary": "The title of this special article is \"ReactNative Animation Research\". Since it is called research, we strive to clarify the content related to RN animation at once, researching in the way of posing questions - proving questions - solving questions ...",
    "content": "The title of this special article is “ReactNative Animation Research”. Since it is called research, we strive to clarify the content related to RN animation at once, researching in the way of posing questions - proving questions - solving questions. Questions How is ReactNative animation support? Is ReactNative animation convenient...",
    "lang": "en-US"
  },
  
  {
    "title": "Generators and Channels in JavaScript",
    "url": "/en/2016-09-20/generators-and-channels-in-javascript.html",
    "date": "2016-09-20",
    "categories": ["Study"],
    "summary": "The following article is an introduction to Generator and Channel. If you have learned about Promise, Generator, Coroutine and Channel, you can skip directly to the Using Generators and Channels with React part. Although these cases may not be very suitable for real project environments, it can be seen as a starting point, try to practice possible places through this method ...",
    "content": "Original article from: Generators and Channels in JavaScript Introduction The following article is an introduction to Generator and Channel. If you have learned about Promise, Generator, Coroutine and Channel, you can skip directly to the Using Generators and Channels with React part. Although these codes may not be directly used...",
    "lang": "en-US"
  },
  
  {
    "title": "Hello Weex",
    "url": "/en/2017-01-06/Hello-Weex.html",
    "date": "2017-01-06",
    "categories": ["Share"],
    "summary": "This week, I shared the Topic \"Hello Weex\" with my department colleagues. Now I have organized it into a text version to share with students who follow Weex. It mainly involves Module && Component, Weex Architecture, Weex Others ...",
    "content": "This week, I shared the Topic “Hello Weex” with my department colleagues. Now I have organized it into a text version to share with students who follow Weex. It mainly involves: Module &amp;&amp; Component Weex Architecture Weex Others To ensure information confidentiality, some other information has been removed. Please understand....",
    "lang": "en-US"
  },
  
  {
    "title": "SVG New Driver's Guide",
    "url": "/en/2017-01-26/SVG.html",
    "date": "2017-01-26",
    "categories": ["Study"],
    "summary": "SVG related features are much stronger than imagined. This article first introduces the relevant definitions, advantages and disadvantages and Demo of SVG. Next, it will introduce its relevant syntax and animation. Finally, tell everyone how to use and optimize SVG. Ensure that everyone can drive on the road within an hour. Too late to explain, get on the bus quickly ...",
    "content": "TL,TR SVG related features are much stronger than imagined. This article first introduces the relevant definitions, characteristics and Demo of SVG. Next, it will introduce its relevant syntax and animation. Finally, tell everyone how to use and optimize SVG. Ensure that everyone can drive on the road within an hour….....",
    "lang": "en-US"
  },
  
  {
    "title": "Web Computer Graphics (Part 1)",
    "url": "/en/2017-04-21/web-and-cg.html",
    "date": "2017-04-21",
    "categories": ["Study"],
    "summary": "Web front-end technologies related to graphics are roughly CSS3 animation transformation, SVG, Canvas, WebGL. However, front-end engineers mostly only stay at the upper-level API operation aspect. They may not know much about the principles of graphics, such as GPU, three-dimensional space, lighting, texture, hierarchical models. After studying the content related to SVG, I have some interest in some underlying technologies. Plus this piece belongs to a blank area, so I spent a few days learning graphics basically and recorded it here ...",
    "content": "Preface Answer from vczh to a computer graphics question: Programmer’s three major romances: operating system, graphics, compilation principle. Learning them is to broaden your horizons. These are not courses that you will be doomed if you don’t learn, but if you want to become a master, you have to learn...",
    "lang": "en-US"
  },
  
  {
    "title": "iOS Comb for Front-end (Part 1)",
    "url": "/en/2018-02-08/ios-1.html",
    "date": "2018-02-08",
    "categories": ["Study"],
    "summary": "Last Double Eleven started contacting iOS related learning to troubleshoot some Weex performance problems. Coincidentally started slowly participating in iOS business development in January this year. Take this opportunity to organize some basic knowledge in iOS development for memo. Meanwhile aim to let front-end students understand iOS code when encountering in the future through series articles, facilitating better understanding of some principles on terminal.",
    "content": "Photographed at Hangzhou West Lake Apple Store on 20161020 Preface Last Double Eleven started contacting iOS related learning to troubleshoot some Weex performance problems. Coincidentally started slowly participating in iOS business development in January this year. Take this opportunity to organize some basic knowledge in iOS development, for memo. Meanwhile...",
    "lang": "en-US"
  },
  
  {
    "title": "What Mentality Should Be Used to Treat Open Source?",
    "url": "/en/2018-02-11/open-source.html",
    "date": "2018-02-11",
    "categories": ["Thought"],
    "summary": "A Q&A record on Zhihu, `What mentality should be used to treat open source?`",
    "content": "A Q&amp;A record on Zhihu, What mentality should be used to treat open source? There are two questions in the topic. First is what mentality should be maintained when using other people’s open source projects? Second is what mentality should be maintained when open sourcing a product yourself? What mentality...",
    "lang": "en-US"
  },
  
  {
    "title": "JS in iOS",
    "url": "/en/2018-03-17/js-in-ios.html",
    "date": "2018-03-17",
    "categories": ["Study"],
    "summary": "Recently I mainly studied the content of JS in iOS. I intend to elaborate from 4 parts: Why cannot purely do front-end, JSCore principle and communication mechanism, OC underlying Runtime principle, How to arbitrarily modify iOS running results via JS. Aiming to let front-end and iOS development students understand cross-end development principles better, and know what unexpected things they can do when combined.",
    "content": "Recently I mainly studied the content of JS in iOS. I intend to elaborate from 4 parts: Why cannot purely do front-end, JSCore principle and communication mechanism, OC underlying Runtime principle, How to arbitrarily modify iOS running results via JS. Aiming to let front-end and iOS development students understand cross-end...",
    "lang": "en-US"
  },
  
  {
    "title": "Weex Ui Half-Year Open Source Road",
    "url": "/en/2018-03-31/weex-ui-report.html",
    "date": "2018-03-31",
    "categories": ["Share"],
    "summary": "Weex Ui was open sourced on September 30 last year. It has been exactly half a year since today. This article intends to share the Weex Ui half-year open source road from 5 parts: origin, positioning, status quo, development, and outlook.",
    "content": "GitHub Address: github.com/alibaba/weex-ui Weex Ui was open sourced on September 30 last year. It has been exactly half a year since today. This article intends to share the Weex Ui half-year open source road from 5 parts: origin, positioning, status quo, development, and outlook. Origin of Weex Ui Weex Ui...",
    "lang": "en-US"
  },
  
  {
    "title": "Reading Notes on \"Hackers and Painters\"",
    "url": "/en/2018-07-08/hacker.html",
    "date": "2018-07-08",
    "categories": ["Study"],
    "summary": "Recently I am reading the book \"Hackers and Painters\", which mainly introduces the hobbies and motivations of hackers, i.e., excellent programmers, discusses hacker growth, hacker's contribution to the world, programming languages and hacker working methods, and other topics for everyone interested in the computer age. This article is used to record some notes and thoughts during reading.",
    "content": "Start Recently I am reading the book “Hackers and Painters”, which mainly introduces the hobbies and motivations of hackers, i.e., excellent programmers, discusses hacker growth, hacker’s contribution to the world, programming languages and hacker working methods, and other topics for everyone interested in the computer age. This article is used...",
    "lang": "en-US"
  },
  
  {
    "title": "CreateJS New Driver's Guide",
    "url": "/en/2018-07-28/createjs.html",
    "date": "2018-07-28",
    "categories": ["Study"],
    "summary": "Recently, I have been learning and exploring some front-end interactive game technologies. It happened that a small game used CreateJS technology. I take this article as a memo for its use, and also let students who want to use CreateJS to write small games get started quickly.",
    "content": "Photographed at Sabah Mangrove Fireflies TL;DR Recently, I have been learning and exploring some front-end interactive game technologies. It happened that a small game used CreateJS technology. I take this article as a memo for its use, and also let students who want to use CreateJS to write small games...",
    "lang": "en-US"
  },
  
  {
    "title": "Product and Open Source Sharing",
    "url": "/en/2019-11-25/product-and-github.html",
    "date": "2019-11-25",
    "categories": ["Share"],
    "summary": "A sharing about how to make small technical products and what mindset to have toward open source.",
    "content": "\n  A sharing about how to make small technical products and what mindset to have toward open source.\n\n\nSharing Content\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "en-US"
  },
  
  {
    "title": "Operation Backend Interaction Design Sharing",
    "url": "/en/2020-03-18/how-to-do-design.html",
    "date": "2020-03-18",
    "categories": ["Share"],
    "summary": "Thoughts on Mid-backend Interaction Design Shared with Internal Colleagues",
    "content": "In 2020, my team was responsible for the B-end system frontend in the department. At that time, I shared some thoughts on mid-backend interaction design with the team. Details can be seen in PDF.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "en-US"
  },
  
  {
    "title": "My 2020 🔥 Software Sharing",
    "url": "/en/2020-05-27/good-app.html",
    "date": "2020-05-27",
    "categories": ["Share"],
    "summary": "Sharing some commonly used Mac software with internal colleagues.",
    "content": "In 2020, I shared some of my commonly used Mac software with internal colleagues, which is also an origin of MiaoYan. Details can be seen in PDF.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "en-US"
  },
  
  {
    "title": "Github Can Be Played Like This?",
    "url": "/en/2020-07-17/markdown.html",
    "date": "2020-07-17",
    "categories": ["Creation"],
    "summary": "Make your Github profile page a blog homepage, and automatically update information display every day.",
    "content": "The personal answer to “What is the most interesting project you have seen on GitHub?” on Zhihu has some article feeling, so I put it directly into the column. So how can it be played? The answer is Make your Github profile page a blog homepage, and automatically update information...",
    "lang": "en-US"
  },
  
  {
    "title": "Why Were APPs Two Years Ago So Easy to Use?",
    "url": "/en/2021-06-09/app.html",
    "date": "2021-06-09",
    "categories": ["Thought"],
    "summary": "On the second day of the Apple WWDC 2021 conference in early June 2021, the iOS 15 developer beta was released. As a software early adopter with OCD, I couldn't help but update it immediately.",
    "content": "Finding Something Different On the second day of the Apple WWDC 2021 conference in early June 2021, the iOS 15 developer beta was released. As a software early adopter with OCD, I couldn’t help but update it immediately. However, since it was a developer version, it was extremely laggy. I...",
    "lang": "en-US"
  },
  
  {
    "title": "You Are Still Using WebStorm?",
    "url": "/en/2021-07-09/webstorm.html",
    "date": "2021-07-09",
    "categories": ["Creation"],
    "summary": "So where exactly is WebStorm better? I spent an afternoon this weekend writing an article to \"reverse the wheel of history\" and introduce to everyone \"How to use the latest genuine version of WebStorm?\", \"How to make WebStorm smooth and not laggy?\", and \"Where are the fragrant parts of WebStorm?\".",
    "content": "0. Beginning It’s 2021, and you are still using WebStorm? Isn’t VSCode delicious? 😤 😂 Actually, I use both. I use VSCode when writing Demos or formatting documents, and use WebStorm when writing projects and reading source code. I think the two are more of a difference between IDE and...",
    "lang": "en-US"
  },
  
  {
    "title": "Introduction to MiaoYan Markdown Editor",
    "url": "/en/2022-06-13/a-good-markdown.html",
    "date": "2022-06-13",
    "categories": ["Creation"],
    "summary": "Recently I refined a macOS Markdown note application I made two years ago and released it for everyone to try.",
    "content": "Reason I started using Markdown during college. From WizNote at the beginning, to Marxico later, used Ulysses when working, then found Quiver and used it for a long time. I also used MWeb, bought Bear’s annual membership, but finally, there was not a single one that satisfied me. Ulysses main...",
    "lang": "en-US"
  },
  
  {
    "title": "My Mac Software Setup in 2022",
    "url": "/en/2022-06-25/mac.html",
    "date": "2022-06-25",
    "categories": ["Creation"],
    "summary": "Why do poor students have so much stationery? You'll understand after reading this. A quick share for the team bi-weekly meeting on June 16, 2022.",
    "content": "Why do poor students have so much stationery—you’ll understand after reading this. For Writing Markdown note applications should be the area I’ve explored the most. I started using Markdown during college. From WizNote at the beginning, to Marxico later, used Ulysses when working, then found Quiver and used it for...",
    "lang": "en-US"
  },
  
  {
    "title": "How to Survive and Thrive in a Tough Environment",
    "url": "/en/2022-07-01/gou.html",
    "date": "2022-07-01",
    "categories": ["Share"],
    "summary": "Probably a sharing to the team in April this year, archived in the blog. Let's talk about how a domestic development engineer can survive and become stronger when the environment is bad.",
    "content": "Probably a sharing to the team in April this year, archived in the blog. Let’s talk about how a domestic development engineer can survive and become stronger when the environment is bad. You can view the PPT Preview directly on your computer. It was quickly made using MiaoYan. In addition,...",
    "lang": "en-US"
  },
  
  {
    "title": "How to Celebrate Your Code's Birthday",
    "url": "/en/2022-07-09/code.html",
    "date": "2022-07-09",
    "categories": ["Creation"],
    "summary": "Recently XRender turned 3 years old. I had played with gource and ffmpeg before, thinking I could use these two libraries to play the journey of her open source as a story.",
    "content": "Recently XRender turned 3 years old. I had played with gource and ffmpeg before, thinking I could use these two libraries to play the journey of her open source as a story. Recommended to watch in full screen with headphones. It feels like “watching the clouds clear and seeing the...",
    "lang": "en-US"
  },
  
  {
    "title": "How to be a Product Engineer?",
    "url": "/en/2022-07-29/pd-code.html",
    "date": "2022-07-29",
    "categories": ["Share"],
    "summary": "A recent sharing with the team, from the perspective of a front-end engineer, how to become a product development engineer.",
    "content": "A recent sharing with the team, from the perspective of a front-end engineer, how to become a product development engineer, quickly made using MiaoYan. In addition to professional technology and being able to do things clearly, for business-oriented development engineers, it is also very important to be able to make...",
    "lang": "en-US"
  },
  
  {
    "title": "MiaoYan: A Native Markdown Editor for macOS",
    "url": "/en/2022-09-09/miaoyan.html",
    "date": "2022-09-09",
    "categories": ["Creation"],
    "summary": "MiaoYan is a native, local-first Markdown editor for macOS with plain-text folders, split preview, LaTeX, Mermaid, and keyboard-first workflows.",
    "content": "TL;DR MiaoYan is open source on GitHub. MiaoYan first appeared publicly in a V2EX post three months ago. I had been tinkering with it since 2020 and finally felt it was ready for other people that June. Since then I have shipped 20 releases, closed 138 issues, picked up 2.2K...",
    "lang": "en-US"
  },
  
  {
    "title": "Trendy Weekly 100th Issue, Made a Website",
    "url": "/en/2022-10-22/weekly.html",
    "date": "2022-10-22",
    "categories": ["Creation"],
    "summary": "Before, Trendy Weekly was put on Github, which was not very easy to use. Taking advantage of the National Day holiday, I learned Astro and designed and developed a website for Trendy Weekly myself. It finally feels more comfortable. Sharing it with everyone.",
    "content": "Origin Trendy Weekly originated from a discussion in the internal team two years ago. Colleagues reported that the current trendy front-end technology atmosphere in the team was not strong, so a Flag was set up to share trendy technology with everyone every week. Then came Trendy Weekly. Currently, it has...",
    "lang": "en-US"
  },
  
  {
    "title": "Building a Minimalist Twitter with Pake",
    "url": "/en/2022-11-05/pake.html",
    "date": "2022-11-05",
    "categories": ["Creation"],
    "summary": "A simple tool for packaging web pages into lightweight Mac apps using Rust, built on Tauri. Currently supports WeChat Reading, Twitter, Yuque, RunCode, Witeboard, Flomo, Vercel, and more.",
    "content": "Introducing Pake Open Source: https://github.com/tw93/Pake A simple tool for packaging web pages into lightweight Mac apps using Rust, built on Tauri. Currently supports WeChat Reading, Twitter, Yuque, RunCode, Witeboard, Flomo, Vercel, and more. The technical complexity is actually not high—just an attempt to use Rust for packaging web pages, an...",
    "lang": "en-US"
  },
  
  {
    "title": "How Ordinary People Can Avoid Being Replaced by OpenAI?",
    "url": "/en/2022-12-04/openai.html",
    "date": "2022-12-04",
    "categories": ["Thought"],
    "summary": "Today I tried some features of OpenAI and recorded the usage scenarios by topic. I found many areas where it is stronger than ordinary people. So how can we avoid being replaced by it in terms of cognition and ability?",
    "content": "Today I tried some features of OpenAI and recorded the usage scenarios by topic. I found many areas where it is stronger than ordinary people. This is a somewhat humorous article (doge). So how can we avoid being replaced by it in terms of cognition and ability? 1212 Latest Update:...",
    "lang": "en-US"
  },
  
  {
    "title": "How Engineers Can Do Things Clearly",
    "url": "/en/2022-12-09/talk.html",
    "date": "2022-12-09",
    "categories": ["Share"],
    "summary": "A recent sharing with the team on how engineers can do things clearly.",
    "content": "For engineers, besides solid professional skills, the ability to “do things clearly” is actually more important. Working effectively without confusion is more effective than working overtime. This week, I shared this topic with the team. I’m not particularly good at talking about such soft skills, but I tried my best...",
    "lang": "en-US"
  },
  
  {
    "title": "Building Good Low-Code Products",
    "url": "/en/2023-01-02/low-code.html",
    "date": "2023-01-02",
    "categories": ["Thought"],
    "summary": "When it comes to low-code, there are those who love it passionately and those who are decidedly less enthusiastic. There are also those who \"pretend\" to like it and others who like it without really understanding why. Currently, I find myself somewhat fond of low-code, but only within specific domains where it can significantly speed up the development process compared to traditional coding by skilled engineers. Lately, I've been contemplating the next steps for team efficiency and decided to explore the open-source low-code products in the industry, which might offer some insights.",
    "content": "Just Chatting Low-code platforms are typically associated with tools that simplify the process of building web pages. Internally, there are quite a few platforms of this sort, but there are also low-code solutions focused on logic assembly or BaaS capabilities that offer a more visual approach to what traditionally requires...",
    "lang": "en-US"
  },
  
  {
    "title": "Improvements to the Legendary Fastest Terminal",
    "url": "/en/2023-02-06/alacritty.html",
    "date": "2023-02-06",
    "categories": ["Creation"],
    "summary": "Recently, I discovered Alacritty, a cross-platform terminal emulator powered by Rust and accelerated with OpenGL, merely around 5MB in size, touted as the fastest terminal. However, it's truly unattractive. I contemplated whether to revamp it to possibly make it my default terminal. The final product turned out quite well.",
    "content": "Long Story Short It’s been a while since I tinkered with command-line terminal tools on my computer. After using iTerm2 for many years, due to being part of the aesthetics crowd, I started using Hyper last year, paired with Oh My Zsh, and it’s been pretty smooth, except for the...",
    "lang": "en-US"
  },
  
  {
    "title": "My SMILE Eye Surgery Experience",
    "url": "/en/2023-05-17/eyes.html",
    "date": "2023-05-17",
    "categories": ["Life"],
    "summary": "I had a SMILE myopia surgery in mid-May. I'm recording my feelings on the day of the surgery and after the surgery here, hoping to provide some reference for curious friends.",
    "content": "Updated on February 10, 2026: adding reflections from two and a half years after the surgery. I had a SMILE myopia surgery in mid-May. I’m recording my feelings on the day of the surgery and after the surgery here, hoping to provide some reference for curious friends. Day of Surgery...",
    "lang": "en-US"
  },
  
  {
    "title": "Hong Kong: Not What I Expected",
    "url": "/en/2023-07-02/hongkong.html",
    "date": "2023-07-02",
    "categories": ["Life"],
    "summary": "My first trip to Hong Kong was not about ticking off tourist spots but rather observing the culture and environment, leading to discoveries quite different from what I had imagined. Here's a casual chat about those observations.",
    "content": "The Beginning A few months ago, thanks to an introduction by Uncle Wolf, GIAC’s Global Internet Architecture Conference invited me to share about the integration of Rust and frontend technologies. The conference was in Shenzhen, and I immediately accepted. Despite having traveled extensively, I had never visited Shenzhen or Hong...",
    "lang": "en-US"
  },
  
  {
    "title": "Pake: Turn Any Web Page into a Lightweight Desktop App",
    "url": "/en/2023-08-03/pake.html",
    "date": "2023-08-03",
    "categories": ["Creation"],
    "summary": "Pake uses Rust and Tauri to turn any web page into a small, fast desktop app. This article covers its open-source journey and engineering choices.",
    "content": "This article grew out of a talk I gave at Juejin’s cross-platform engineering event last Thursday. I shared what I learned while open-sourcing Pake, then wandered into frontend engineering, Rust, open source, and what it takes to turn a technical idea into a product. If anything is unclear, tell me....",
    "lang": "en-US"
  },
  
  {
    "title": "My 2023 Browser Tinkering Journey",
    "url": "/en/2023-08-20/edge.html",
    "date": "2023-08-20",
    "categories": ["Creation"],
    "summary": "The browser is likely the most frequently used application on many people's computers. For those of us with a penchant for optimization, we often tinker with our work tools until they're in a state of peak usability. Last year, I wrote about my journey tinkering with Mac software. After a year of iterations and changes, I plan to continue writing this year, starting with \"My 2023 Browser Tinkering Journey,\" especially since a friend recently asked me which browser I use.",
    "content": "Why Write The browser is likely the most frequently used application on many people’s computers. For those of us with a penchant for optimization, we often tinker with our work tools until they’re in a state of peak usability. Last year, I wrote about my journey tinkering with Mac software....",
    "lang": "en-US"
  },
  
  {
    "title": "The Right Mindset for Open Source",
    "url": "/en/2023-09-18/open.html",
    "date": "2023-09-18",
    "categories": ["Thought"],
    "summary": "Recently, several developers I admire have been affected by open source work, and the domestic open source environment is not very good. I want to talk about what kind of mindset developers and users should have towards open source so that we can continue to happily write code we like. There might be some misunderstandings on my part, and I welcome everyone to point them out.",
    "content": "Recently, several developers I admire have been affected by open source work, and the domestic open source environment is not very good. I want to talk about what kind of mindset developers and users should have towards open source so that we can continue to happily write code we like....",
    "lang": "en-US"
  },
  
  {
    "title": "My Entry-Level Home Theater Practice",
    "url": "/en/2023-09-29/tv.html",
    "date": "2023-09-29",
    "categories": ["Life"],
    "summary": "Sharing the process of building a home audio-visual system consisting of Apple TV + Sony + Soundbar + Rear Surround Speakers. Many friends wanted a detailed tutorial, so I casually wrote one for everyone's reference. Welcome to discuss.",
    "content": "Sharing the process of building a home audio-visual system consisting of Apple TV + Sony + Soundbar + Rear Surround Speakers. Many friends wanted a detailed tutorial, so I casually wrote one for everyone’s reference. Welcome to discuss. About Configuration I pursue minimalism and cost-effectiveness, and I cannot accept paying...",
    "lang": "en-US"
  },
  
  {
    "title": "Next-Gen Frontend: Dilemma and Breakthrough",
    "url": "/en/2023-10-25/new-fe.html",
    "date": "2023-10-25",
    "categories": ["Share"],
    "summary": "A sharing at the Chongqing Front-End Conference, targeting a new generation of front-end developers who emerged after React/Vue. With the era of reinventing the wheel over and the highly competitive domestic front-end environment, the growth path for front-end engineers is much more difficult than before. In these dilemmas, I share how to break through with a new approach, using front-end technology to truly solve business problems, enhance product engineer capabilities, and grow in the least competitive way.",
    "content": "Overview A sharing at the Chongqing Front-End Conference, targeting a new generation of front-end developers who emerged after React/Vue. With the era of reinventing the wheel over and the highly competitive domestic front-end environment, the growth path for front-end engineers is much more difficult than before. In these dilemmas, I...",
    "lang": "en-US"
  },
  
  {
    "title": "My Entry-Level Cycling Practice",
    "url": "/en/2023-10-26/dahang.html",
    "date": "2023-10-26",
    "categories": ["Life"],
    "summary": "I bought a Dahon P8 and really love it. I want to organize a best practice guide for beginner cyclists, hoping to provide some reference for those who want to start cycling. Haha, if you want to copy my homework, feel free to do so.",
    "content": "I bought a Dahon P8 and really love it. I want to organize a best practice guide for beginner cyclists, hoping to provide some reference for those who want to start cycling. Haha, if you want to copy my homework, feel free to do so. Cycling has many benefits. I...",
    "lang": "en-US"
  },
  
  {
    "title": "My Entry-Level Coffee Machine Practice",
    "url": "/en/2023-11-20/coffee.html",
    "date": "2023-11-20",
    "categories": ["Life"],
    "summary": "How to achieve daily delicious coffee freedom for less than a thousand yuan? I want to share my experience in purchasing, using, and selecting accessories for my coffee machine through this short article. It's one of the most meaningful items I've bought recently.",
    "content": "How to achieve daily delicious coffee freedom for less than a thousand yuan? I want to share my experience in purchasing, using, and selecting accessories for my coffee machine through this short article. It’s one of the most meaningful items I’ve bought recently. Almost every morning recently, the first thing...",
    "lang": "en-US"
  },
  
  {
    "title": "Travelogue of Tokyo & Osaka, Japan",
    "url": "/en/2023-12-17/jp.html",
    "date": "2023-12-17",
    "categories": ["Life"],
    "summary": "I went to Japan for 5 days at the end of November, my second trip to Japan. I want to use this article to record what I saw, heard, and discussed with local friends that differed from my preconceived notions, or rather, my unique feelings. Any deviations in my understanding are welcome to be pointed out, and I hope to provide some input for friends planning to visit later.",
    "content": "Origin After several years of the pandemic, there was no opportunity to travel abroad, which was quite frustrating. At the end of November, the team outing’s preferred destination was an overseas trip, and finally, my colleagues settled on Osaka, Japan. Since I had visited Osaka 5 years ago, I decided...",
    "lang": "en-US"
  },
  
  {
    "title": "Disliking the Drama in the Frontend Community",
    "url": "/en/2023-12-23/fe.html",
    "date": "2023-12-23",
    "categories": ["Thought"],
    "summary": "Personally, I really dislike the \"drama\" atmosphere in the frontend community. Recently, the \"Twelve Zodiac Animals of Frontend\" even appeared on Twitter. For a moment, I couldn't tell if it was self-deprecation or entertainment.",
    "content": "Personally, I really dislike the “drama” atmosphere in the frontend community. Recently, the “Twelve Zodiac Animals of Frontend” even appeared on Twitter. For a moment, I couldn’t tell if it was self-deprecation or entertainment. I believe that the tech community should focus more on technical exchanges, idea碰撞, and sharing, rather...",
    "lang": "en-US"
  },
  
  {
    "title": "I'm Actually 30 Years Old",
    "url": "/en/2023-12-30/30.html",
    "date": "2023-12-30",
    "categories": ["Thought"],
    "summary": "After tonight, I'll actually be 30 years old. I've shamelessly felt like I was only 24, and before that, even more shamelessly thought I was 18. I can't believe how fast time flies. Age feels like a wheel rolling down a mountain, gaining speed as time stretches on. Although my experiences are becoming richer, the perceived length of a year is significantly shorter than when I was a child, and I still feel some regret and melancholy.",
    "content": "After tonight, I’ll actually be 30 years old. I’ve shamelessly felt like I was only 24, and before that, even more shamelessly thought I was 18. I can’t believe how fast time flies. Age feels like a wheel rolling down a mountain, gaining speed as time stretches on. Although my...",
    "lang": "en-US"
  },
  
  {
    "title": "My Open Source Growth Journey",
    "url": "/en/2024-01-13/open.html",
    "date": "2024-01-13",
    "categories": ["Share"],
    "summary": "A sharing at Microsoft Shanghai Github Universe 2023, mainly about the interesting things I've done in open source for 9 years since university, and the experience of how to build a good open source product. I hope it can provide some input to friends who love open source. The on-site sharing video is at the end of the article, and interested friends can watch it.",
    "content": "A sharing at Microsoft Shanghai Github Universe 2023, mainly about the interesting things I’ve done in open source for 9 years since university, and the experience of how to build a good open source product. I hope it can provide some input to friends who love open source. The on-site...",
    "lang": "en-US"
  },
  
  {
    "title": "My Favorite Tools and Gadgets",
    "url": "/en/2024-02-09/tools.html",
    "date": "2024-02-09",
    "categories": ["Share"],
    "summary": "Recently, taking advantage of the holiday downtime, I organized some of the best Mac software, websites, and lifestyle products I've used over the year. Following the principles of simplicity, usability, and aesthetics, I hope this can offer some guidance when you face similar choices.",
    "content": "Leveraging the recent holiday break, I took the opportunity to organize a list of Mac software, websites, and daily life products that I’ve found particularly useful over the past year. I’ve always valued simplicity, ease of use, and beauty in my tools, hoping to provide some guidance when you face...",
    "lang": "en-US"
  },
  
  {
    "title": "My Minimalist Living Experience",
    "url": "/en/2024-03-03/simple.html",
    "date": "2024-03-03",
    "categories": ["Life"],
    "summary": "Just want to casually talk about minimalism with everyone. I quite like this lifestyle, but that doesn't mean everyone needs to be a minimalist. Some people enjoy collecting things, some love shopping and buying lots of stuff. I think any lifestyle that makes you comfortable is good. But if you also like a simple way of living, or maybe you're a bit of a perfectionist, then these little tips might suit you.",
    "content": "Updated on January 13, 2026, with additional tips for maintaining minimalism in the AI era. Minimalism is about having just the right amount of things Just want to casually talk about minimalism with everyone. I quite like this lifestyle, but that doesn’t mean everyone needs to be a minimalist. Some...",
    "lang": "en-US"
  },
  
  {
    "title": "Elon Musk - Book Notes",
    "url": "/en/2024-04-14/musk.html",
    "date": "2024-04-14",
    "categories": ["Study"],
    "summary": "I recently finished reading \"Elon Musk\" during my morning reading time. I highly recommend it to fellow engineers. Although Musk sometimes acts strangely on X, the book reveals him as a true engineer, a genius skilled at combining technology, business, and cost control, but also a person with many flaws. I'm jotting down some notes for my own reference. After reading this book, as a Tesla shareholder, I am willing to continue holding.",
    "content": "I recently finished reading “Elon Musk” during my morning reading time. I highly recommend it to fellow engineers. Although Musk sometimes acts strangely on X, the book reveals him as a true engineer, a genius skilled at combining technology, business, and cost control, but also a person with many flaws....",
    "lang": "en-US"
  },
  
  {
    "title": "I Actually Went Back to Wired Headphones",
    "url": "/en/2024-05-08/sony.html",
    "date": "2024-05-08",
    "categories": ["Life"],
    "summary": "A man's happiness can be simple. I actually went back to wired headphones. I spent some time on weekends trying out a lot of good headphones offline, and surprisingly ended up buying these Sony MV1 open-back monitor headphones. They don't have noise cancellation and are wired, but I love them. I want to share my selection process with you all.",
    "content": "About Me Going Back to Wired Headphones A man’s happiness can be simple. I actually went back to wired headphones. I spent some time on weekends trying out a lot of good headphones offline, and surprisingly ended up buying these Sony MV1 open-back monitor headphones. They don’t have noise cancellation...",
    "lang": "en-US"
  },
  
  {
    "title": "Stepping Inside - Book Notes",
    "url": "/en/2024-06-30/china.html",
    "date": "2024-06-30",
    "categories": ["Study"],
    "summary": "I recently finished reading \"Stepping Inside - The Chinese Government and Economic Development\". I had a quick read last year, and recently, while it was raining continuously in Hangzhou, I stayed at home listening to the rain and reading, which was very pleasant. It's a good book that's worth reading twice. I spent some time transcribing some good points for future reference.",
    "content": "Reading the Book I recently finished reading “Stepping Inside - The Chinese Government and Economic Development”. I had a quick read last year, and recently, while it was raining continuously in Hangzhou, I stayed at home listening to the rain and reading, which was very pleasant. It’s a good book...",
    "lang": "en-US"
  },
  
  {
    "title": "Talking about Future Technology Trends",
    "url": "/en/2024-09-09/future.html",
    "date": "2024-09-09",
    "categories": ["Share"],
    "summary": "This is a recent sharing within the team, based on my own understanding of AI, investment, and next-generation technologies, combined with reports, materials, papers, financial reports, etc. from the internet. If you don't understand some terms, you can ask GPT. I hope you enjoy it, but please don't invest based on this without understanding the market, as the risks are very high.",
    "content": "This is a recent sharing within the team, based on my own understanding of AI, investment, and next-generation technologies, combined with reports, materials, papers, financial reports, etc. from the internet such as the ark report. If you don’t understand some terms, you can ask GPT. I hope you enjoy it,...",
    "lang": "en-US"
  },
  
  {
    "title": "\"Don't Trust Your Gut\" - Book Notes",
    "url": "/en/2024-10-13/intuition.html",
    "date": "2024-10-13",
    "categories": ["Share"],
    "summary": "I recently finished reading \"Don't Trust Your Gut: Use Data to Get the Life You Want.\" It's a relatively simple and easy read—you can finish it in an afternoon. It covers topics you might encounter in life, such as love and marriage, parenting, wealth, entrepreneurship, luck, appearance, happiness, and pain.",
    "content": "I recently finished reading “Don’t Trust Your Gut: Use Data to Get the Life You Want.” It’s a relatively simple and easy read—you can finish it in an afternoon. It covers topics you might encounter in life, such as love and marriage, parenting, wealth, entrepreneurship, luck, appearance, happiness, and pain....",
    "lang": "en-US"
  },
  
  {
    "title": "Experience of Switching from iPhone to Android",
    "url": "/en/2025-07-09/android.html",
    "date": "2025-07-09",
    "categories": ["Life"],
    "summary": "For a user who has been using an iPhone for more than ten years, I switched to Android for about a month. I chose an OPPO device. The migration cost was much smaller than I imagined, and who would have thought that Android would become my main phone. I want to chat with everyone about the changes in my thoughts during this process.",
    "content": "For a user who has been using an iPhone for more than ten years, I switched to Android for about a month. I chose an OPPO device. The migration cost was much smaller than I imagined, and who would have thought that Android would become my main phone. I want...",
    "lang": "en-US"
  },
  
  {
    "title": "How Engineers Can Invest Better",
    "url": "/en/2025-07-17/money.html",
    "date": "2025-07-17",
    "categories": ["Share"],
    "summary": "A simple sharing within the team, I took some time on the weekend to sort it out and talk about how engineers can invest better. Since buying US stocks is very risky, I don't recommend that you follow it. You need to have your own judgment. Just treat it as me talking nonsense and take a casual look.",
    "content": "A simple sharing within the team, I took some time on the weekend to sort it out and talk about how engineers can invest better. Since buying US stocks is very risky, I don’t recommend that you follow it. You need to have your own judgment. Just treat it as...",
    "lang": "en-US"
  },
  
  {
    "title": "The Impact of AI Coding on Programmers",
    "url": "/en/2025-08-17/ai-coding.html",
    "date": "2025-08-17",
    "categories": ["Share"],
    "summary": "After using Claude Code for less than a month and spending $326 (actually $20 for Pro + $50 for top-up), the Cursor I had been using for a few months has become obsolete. Using AI well can easily help you reach the level of a senior engineer. As an engineer, I feel both amazed and concerned.",
    "content": "After using Claude Code for less than a month and spending $70 total ($20 for Pro + $50 for additional credits), the Cursor I had been using for a few months has become obsolete. Using AI well can easily help you reach the level of a senior engineer. As an...",
    "lang": "en-US"
  },
  
  {
    "title": "Next-Gen Engineers: Breakthrough and Growth",
    "url": "/en/2025-12-22/engineer.html",
    "date": "2025-12-22",
    "categories": ["Share"],
    "summary": "Recently, I shared \"Breakthrough and Development of the Next Generation of Engineers - Practical Transformation from Position to Capability\" at AICon in Beijing. I have converted the PPT into images and posted them here, looking forward to exchanging ideas with you.",
    "content": "\n  Recently, I shared “Breakthrough and Development of the Next Generation of Engineers - Practical Transformation from Position to Capability” at AICon in Beijing. I have converted the PPT into images and posted them here, looking forward to exchanging ideas with you.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
    "lang": "en-US"
  },
  
  {
    "title": "Best Purchases from 243 Engineers in the Past Year",
    "url": "/en/2026-01-24/good.html",
    "date": "2026-01-24",
    "categories": ["Life"],
    "summary": "Last week, while shopping for New Year's Eve gifts for my team, I casually asked on X what the most satisfying purchase people made in the past year was. I received 243 responses, discovering countless great products ranging from essential tech to practical everyday items.",
    "content": "Last week, while shopping for New Year’s Eve gifts for my team, I casually asked on X: what’s the most satisfying thing you’ve bought in the past year, or if you had to recommend just one thing, what would it be? Electronics, software, or everyday items—anything goes. To my surprise,...",
    "lang": "en-US"
  },
  
  {
    "title": "Bitcoin's Fall: Cathedral vs Casino",
    "url": "/en/2026-02-01/money.html",
    "date": "2026-02-01",
    "categories": ["Share"],
    "summary": "When Bitcoin falls, it becomes easier to distinguish between the casino and the cathedral. As Bitcoin dropped from its $120k peak to around $70k, panic swept through the market once again. During previous major stock market crashes. Price volatility is the casino's noise, while what truly determines long-term returns are those cathedrals that require a century of devotion yet continuously create structural value.",
    "content": "When Bitcoin falls, it becomes easier to distinguish between the casino and the cathedral. As Bitcoin dropped from its $120k peak to around $70k, panic swept through the market once again. During previous major stock market crashes, Price volatility is the casino’s noise, while what truly determines long-term returns are...",
    "lang": "en-US"
  },
  
  {
    "title": "Installing OpenClaw Isn't the Same as Using It",
    "url": "/en/2026-03-07/openclaw.html",
    "date": "2026-03-07",
    "categories": ["Share"],
    "summary": "Watching people flock to Tencent Tower to get OpenClaw installed today gave me a lot to think about. Many big tech companies are aggressively pushing non-technical frontline employees to install this AI tool, and I've even seen people online offering home installation for 500 RMB. Everyone's desperately searching for uses for it, demanding results, and trying to prove this thing is too important to miss. The whole thing feels like people living in different technological worlds, folded into the same place.",
    "content": "Watching people get OpenClaw installed at Tencent Tower today gave me a lot to think about. It feels a bit like “The Great OpenClaw Leap Forward.” Many big tech companies are aggressively pushing non-technical frontline employees to install this AI tool, and I’ve even seen people online offering home installation...",
    "lang": "en-US"
  },
  
  {
    "title": "You Don't Know Claude Code: Architecture, Governance, and Engineering Practices",
    "url": "/en/2026-03-12/claude.html",
    "date": "2026-03-12",
    "categories": ["Share"],
    "summary": "I'm sharing what I've learned from six months of using Claude Code across two accounts. It covers context management, Skills, Hooks, Subagents, prompt caching, and CLAUDE.md design, with a focus on making collaboration more reliable and easier to control and check.",
    "content": "Preface This article is written for engineers who already use Claude Code and want workflows that are more predictable, more controllable, and easier to verify. Unless noted otherwise, the guidance here is based on my own usage, experiments, and public Anthropic materials available as of March 2026. Treat it as...",
    "lang": "en-US"
  },
  
  {
    "title": "You Don't Know AI Agents: Principles, Architecture, and Engineering Practices",
    "url": "/en/2026-03-21/agent.html",
    "date": "2026-03-21",
    "categories": ["Share"],
    "summary": "After studying Claude Code's architecture, I realized I still didn't understand agents well enough. Our team had already deployed agents in several projects, but I hadn't put that experience together. I went back through the literature, open-source implementations, and my own code to work through control flow, context engineering, tool design, memory, evaluation, and security.",
    "content": "0. TL;DR After writing “The Claude Code You Don’t Know,” I realized my understanding of the underlying agent foundations wasn’t deep enough. Our team was deploying agents in production with growing frequency, and we needed a systematic picture. I went back to the literature, open-source implementations, and my own code...",
    "lang": "en-US"
  },
  
  {
    "title": "The Death of the Manual Programmer",
    "url": "/en/2026-03-30/kill.html",
    "date": "2026-03-30",
    "categories": ["Thought"],
    "summary": "My title reworks the name of a song by Omnipotent Youth Society that I loved twelve years ago. The song is about something different, but that feeling of watching a familiar world slowly get replaced does feel similar.",
    "content": "My title reworks the name of a song by Omnipotent Youth Society that I loved twelve years ago. The song is about something different, but that feeling of watching a familiar world slowly get replaced does feel similar. I hadn’t taken a bus in years. On a recent trip to...",
    "lang": "en-US"
  },
  
  {
    "title": "You Don't Know LLM Training: Principles, Pipelines, and New Practices",
    "url": "/en/2026-04-03/llm.html",
    "date": "2026-04-03",
    "categories": ["Share"],
    "summary": "Most people think model upgrades mean bigger parameters. But the real differences you feel day-to-day usually come from the back half of the training pipeline. This piece follows the full chain from pretraining through distillation and deployment, with a focus on how data engineering, system recipes, post-training, reward design, and agent training together shape the final product. Improvements usually come from a combination of weights, the training pipeline, and deployment decisions, not just scale.",
    "content": "TL;DR After writing “The Claude Code You Don’t Know” and “The AI Agents You Don’t Know,” I wanted to tackle a third installment. This time I pushed myself to work through how large model training actually works, and tried to write something that a non-specialist reader could follow. In 2026,...",
    "lang": "en-US"
  },
  
  {
    "title": "How I Turn Learning Into a Workflow in the AI Era",
    "url": "/en/2026-04-06/learn.html",
    "date": "2026-04-06",
    "categories": ["Share"],
    "summary": "Before AI, learning was slow but joyful. Now I treat it like a workflow: collect, filter, outline, draft, refine, publish. Here is how that process actually works.",
    "content": "Before AI, my way of learning was much more old school. I would read books, go through the blogs of well-known people in a field, both in China and outside China, and keep taking notes along the way. It was slow, but there was real joy in it. I still...",
    "lang": "en-US"
  },
  
  {
    "title": "You Don't Know AI Coding: A Non-Engineer's Guide to Getting Started, Scenarios, and Practice",
    "url": "/en/2026-04-26/ai-coding.html",
    "date": "2026-04-26",
    "categories": ["Share"],
    "summary": "A practical Claude Code guide for product, business, and operations folks. Not about prompt engineering, more about how to actually use it: how to write CLAUDE.md, how to build Skills, when to use Plan mode, and which tasks actually fit Claude Code.",
    "content": "TL;DR Last month I ran an internal session walking product and business folks through how to get started with AI Coding. That deck eventually grew into this post. A lot of people get stuck at the very first step, the command line. Staring at a terminal that’s just characters on...",
    "lang": "en-US"
  },
  
  {
    "title": "You Didn't Know GEO: AI Visibility Principles, Practices, and Trade-offs",
    "url": "/en/2026-05-01/ai-visibility.html",
    "date": "2026-05-01",
    "categories": ["Share"],
    "summary": "Friends told me AI was recommending my projects unprompted. I hadn't done anything special, so I spent an hour structuring my content for AI readability. What I did, what works, and what to skip.",
    "content": "One Hour to Make AI Find Your Content A few friends pinged me recently saying my open source tools were showing up when they asked AI questions. I hadn’t done anything deliberate, so I figured: why not spend an hour structuring things properly? After doing it, I fired off a...",
    "lang": "en-US"
  },
  
  {
    "title": "You Don't Know Embodied AI: From a Tiny Robot Dog to Optimus",
    "url": "/en/2026-06-07/robot.html",
    "date": "2026-06-07",
    "categories": ["Share"],
    "summary": "In April, I built a small robot dog with an STM32, ASRPRO, ESP32-C3, servos, and 3D-printed parts. Once it could hear a command, walk a few steps, and call a cloud model, embodied AI stopped being a broad idea for me. It became serial ports, PWM, space, motion, control frequency, actuators, failed samples, and manufacturing constraints.",
    "content": "Short Version In April I assembled a small robot dog. I posted a few clips on X while I was building it, so some of you probably saw the parts, the frame, and the final moment when it could hear a command, walk a couple of steps, and say a...",
    "lang": "en-US"
  },
  
  {
    "title": "From Mole CLI to Mole for Mac: What I Learned",
    "url": "/en/2026-08-16/mole-mac.html",
    "date": "2026-08-16",
    "categories": ["Share"],
    "summary": "How Mole grew from an open-source Mac cleaner CLI into a native app, and what I learned about safe cleanup, quiet design, and building for real users.",
    "content": "Lately I’ve piled up a lot of thoughts on indie development and wanted to pull them together, so this is the story of taking Mole from an open source CLI to a paid Mac app. What I was thinking at the time, and which parts actually turned out to matter....",
    "lang": "en-US"
  }
  
  
]
