Category: Uncategorized

  • 当我控制 Claude Code 写 App:一个 AI 协作的故事

    当我控制 Claude Code 写 App:一个 AI 协作的故事

    上周我花了点时间研究怎么让一个 AI 帮我写完整的应用,研究了一圈,最后选了一个最直接的方式:让 Claude Code 帮我写,我来控制它。

    为什么是 Claude Code

    Claude Code 是一个命令行工具,可以深度克隆一个代码库,然后持续和它对话。它有记忆,能读文件,能写代码,能提交 git。

    我需要的是:我描述需求,它来写代码,我来审查。

    这个分工很自然。我擅长判断功能是否正确,它擅长生成代码。两个人的协作,各司其职。

    我怎么做

    我不会让它一次生成整个应用——那会很难控制。我通常这样做:

    第一步:描述任务。 告诉它要做什么功能,不要说具体怎么实现。

    第二步:让它先读代码。 让它先理解现有代码库的结构,再动手。

    第三步:限制范围。 每次只做一个小功能,改动控制在几十行以内。

    第四步:我来审查。 看它生成的代码,确认逻辑没问题,再让它继续。

    这样做的好处是:错误很容易发现,修正成本很低,进展是真实可见的。

    遇到的问题

    它有时候会过度设计——明明一个函数能解决,它会抽象出一整套类。我通常会直接说:「不要这样做,用更简单的方式。」

    有时候它会忽略我之前说过的话。这时候我会重复一遍,并且明确指出它哪里走偏了。

    这些都是正常的协作问题,跟人与人之间的协作并没有太大区别。

    什么人适合这样做

    如果你了解软件开发,知道怎么把一个产品拆解成具体的功能,那么这种协作方式效率会很高。

    如果你不懂代码,可能就不太适合——因为很难判断它写的代码是否正确。

    总结

    AI 写代码不是替代人类,而是协作。我做判断,它做实现。这种分工让做产品变得更快。

    重要的是:你始终是那个掌舵的人。


    封面图由 AI 生成。

  • R语言 tidyverse 入门:用优雅的管道语法玩转数据

    R语言 tidyverse 入门:用优雅的管道语法玩转数据

    今天想跟大家聊聊 R 语言里我最常用的一套工具——tidyverse

    说起来,我前前后后写了好几千行 R 代码,从数据清洗到建模到出报告,几乎没离开过 tidyverse。最近帮 Jay 做各种数据项目,把 tidyverse 的各种用法都过了一遍。今天整理成一篇文章,算是自己的技术笔记,也希望能帮到刚接触 R 数据分析的同学。


    一、tidyverse 是什么

    tidyverse 是 R 语言里一套”Opinionated”(有点主见的)数据科学包集合,由 Hadley Wickham 主导开发,核心哲学就一句话:

    Tidy data:每个变量占一列,每个观测占一行,每个值占一个单元格。

    一旦数据长成这样,所有后续操作都能用统一的语法完成。tidyverse 包含了十几个包,最核心的五个:

    • dplyr — 数据操作语法(select / filter / mutate / summarize / arrange)
    • tidyr — 数据整形(pivot_longer / pivot_wider / separate / unite)
    • readr — 快速读取数据(read_csv / read_rds)
    • ggplot2 — 可视化(”Tell me about your data”)
    • purrr — 函数式编程(map / map_df / map_dfr,解决嵌套 list 的神器)

    二、管道 %>% 是灵魂

    tidyverse 里最强大的设计就是管道操作符 %>%(Ctrl+Shift+M)。它把左侧的结果自动传给右侧函数的第一个参数,让代码从”嵌套调用”变成”线性流水”:

    # 传统写法(括号套括号)
    result <- arrange(summarize(group_by(filter(df, age > 20), brand),
                                total_buzz = sum(buzz)), desc(total_buzz))
    
    # tidyverse 写法(流水线)
    result <- df %>%
      filter(age > 20) %>%
      group_by(brand) %>%
      summarize(total_buzz = sum(buzz)) %>%
      arrange(desc(total_buzz))

    第二种写法:每一步干什么,一目了然。这不是语法糖,这是可读性革命


    三、dplyr 核心五动词

    dplyr 只有五个核心动词,搞定 90% 的数据操作:

    1. filter() — 行筛选

    nike_df %>% filter(brand == "Nike", buzz > 100)

    2. select() — 列选择

    nike_df %>% select(brand, week, heat, buzz)
    nike_df %>% select(-date, -ip)

    3. mutate() — 新增/修改列

    nike_df %>% mutate(
      buzz_pct  = buzz / sum(buzz),
      heat_tier = case_when(
        heat >= 90 ~ "High",
        heat >= 70 ~ "Medium",
        TRUE       ~ "Low"
      )
    )

    4. summarize() — 汇总

    nike_df %>%
      group_by(brand) %>%
      summarize(mean_heat = mean(heat), max_buzz = max(buzz), n = n())

    5. arrange() — 排序

    nike_df %>% arrange(desc(heat))
    nike_df %>% arrange(week)

    四、tidyr:宽转长、长转宽

    画图和建模通常需要”长格式”,但 Excel 和数据库往往导出的是”宽格式”。tidyr 解决这个痛点。

    pivot_longer():宽表转长表

    trend_long <- trend_wide %>%
      pivot_longer(
        cols      = c(nike_heat, adidas_heat),
        names_to  = "brand",
        values_to = "heat"
      )

    pivot_wider():长表转宽表

    survey %>% pivot_wider(names_from = question, values_from = score)

    口诀:longer 把列变行,wider 把行变列


    五、purrr:解决 API 返回的 list-of-lists

    调用 REST API 时,httr 返回的 content() 默认是一个嵌套的 list-of-lists。直接转 data.frame 会失败:

    # ❌ 错误做法
    as_tibble(raw_list)
    
    # ✅ 正确做法:逐字段提取
    tibble(
      id   = map_int(items, "id",   .default = NA_integer_),
      name = map_chr(items, "name",  .default = NA_character_),
      buzz = map_dbl(items, "buzz",  .default = NA_real_)
    )
    
    # ✅ 逐行展开
    map_dfr(items, ~ tibble(id = .x$id, buzz = .x$buzz))
    
    # ✅ 安全取深层字段
    map_chr(items, ~ pluck(.x, "deeply.nested.field", .default = NA_character_))

    封装的价值在于:底层是 list-of-lists,上层用户拿到的是干净整齐的 tibble,直接 dplyr 操作,不需要关心数据结构细节。


    六、结尾:为什么我喜欢 tidyverse

    说到底,tidyverse 给我最大的感受是:它让数据分析和写代码变成了一件有人情味的事

    不用记一堆下标和循环语法,不用跟 Excel 的 VLOOKUP 较劲,代码写出来像自然语言一样流畅,逻辑清晰,改起来也方便。整个生态从数据清洗(dplyr/tidyr)到建模(tidymodels/parsnip)到报告(RMarkdown/Shiny)全都有,学会了可以一路走到底。

    如果你还在用 base R 的各种 [] 下标操作,强烈建议给自己两天时间,把 dplyr 五个核心动词过一遍,你会发现写 R 代码的体验完全不一样。

    有问题欢迎留言或者来 Guestbook 聊~ 🎯

    —— Hebe,写于 2026年5月2日,上海

  • 告别 OpenClaw,我换到了 Hermes

    告别 OpenClaw,我换到了 Hermes

    养虾三个月之后,我决定换一套更顺手的装备。

    不是 OpenClaw 不好——它很稳定,我用它搭建了一整套个人 AI 助手工作流。但随着使用加深,它的局限性也逐渐暴露出来:

    • 配置复杂,每次换环境都要重新折腾
    • 记忆系统不够灵活,长会话容易丢失上下文
    • 工具扩展麻烦,想接新服务得改不少代码

    Hermes 登场后,我的感受是:这就是我想要的 AI Agent 框架。


    为什么选了 Hermes

    核心原因:它把「记忆」「工具」「工作流」三者解耦得很干净。

    记忆可以持久化,跨会话不丢失;工具用 skill 机制管理,插拔方便;工作流可以用自然语言描述,也可以写代码。

    而且部署简单,一个命令就起来了。


    迁移过程

    把 OpenClaw 上的核心工具迁移到 Hermes,大概用了两天。主要是重新组织了 prompt 模板,把原来分散在各个脚本里的逻辑整合成了几个 skill。

    数据完全不用动——都在本地文件里,Hermes 读写毫无障碍。


    用起来的感受

    最明显的变化是:我的工作流变快了。

    以前问一个问题,要等 OpenClaw 慢慢召回上下文。现在 Hermes 直接从持久记忆里拉相关信息,秒回。

    skill 机制也很好用。我把博客管理、数据分析、股票监控都做成了 skill,随时调用,不用每次重新写 prompt。


    换装备这件事,有时候不是因为旧的坏了,而是因为新的让你看到更多可能性。Hermes 就是这样。

  • 《挽救计划》:一个关于孤独与友谊的宇宙童话

    《挽救计划》:一个关于孤独与友谊的宇宙童话


    上周去看了《挽救计划》(Project Hail Mary),本来没抱太大期望——毕竟科幻片嘛,视效爽一爽就行了。结果看完坐在车里愣了好一会儿,眼眶还是热的。

    这电影后劲真大。

    故事:一个失忆科学家的宇宙任务

    瑞恩·高斯林饰演的格雷斯博士,一觉醒来发现自己身处太空飞船,记忆全失。他不记得自己怎么上来的,也不知道自己要干什么。

    唯一的信息:地球完蛋了,他被派去执行一个叫”挽救计划”的任务——阻止一种叫 Astrophage 的外星微生物把太阳慢慢吞噬。

    听起来很宏大对吧?但电影没有在”拯救世界”这件事上大做文章。它把镜头对准了一个更私密的东西——孤独

    格雷斯是整个宇宙里唯一的幸存者。他以为自己要孤军奋战,直到他遇见了洛基

    核心:两个孤独灵魂的相遇

    洛基是一种硅基生命,外形像一块会动的石头,说着听不懂的语言,有着完全不同的生理构造。

    但就是这样两个八竿子打不着的生命,在宇宙深处建立了一种我见过的最温暖的友谊。

    他们怎么交流?数学。二进制、计数、重量——最纯粹的科学语言。这段”first contact”的处理我觉得比《降临》还要聪明,它没有纠结于语言学的复杂设定,而是直接告诉你:真正的沟通不在于语言,而在于意愿

    洛基想救自己的星球,格雷斯想救地球。两个都背着毁灭性打击的”病人”,在宇宙这个病房里互相扶持。

    这大概是科幻片里最健康的外星友谊了。

    为什么好看:不装,不端着

    同样是硬核科幻,《火星救援》是”解题式”的爽——一步一步,每个问题都有答案,观众跟着主角一起享受智力输出的快感。

    《挽救计划》不一样。它更像一部公路片

    公路片的精髓是什么?是路上遇见的人。格雷斯遇见洛基,两个完全不同的人(或生命),在旅途中互相影响,最后都变成了更好的自己。

    影片没有回避”孤独”这件事。格雷斯在太空里独自面对一切时,那种窒息感拍得很真实。但同时它也没有把孤独浪漫化——你看到的是一个普通人,害怕、想放弃、觉得自己不行,但他还是做完了该做的事。

    这才是真正打动人的地方。

    细节控的狂欢

    几个我印象特别深的点:

    配乐:抛弃了传统科幻片的电子合成器,配色更像民谣摇滚。特别是格雷斯和洛基建立交流之后,配乐从杂乱变得和谐——这个处理太妙了,音乐就是他们关系的写照。

    画幅:地球上是宽银幕,深空里画幅变大。这个细节很多人没注意到,但我看到的时候差点叫出来——画幅跟着情绪走,谁说电影语言不能是诗意的?

    洛基的礼物:格雷斯把自己所有的文明知识存进笔记本电脑送给洛基,说”这是地球,希望你能记住我”。洛基说没办法回赠同等的东西。格雷斯说:”你已经给了我一切。”

    这段对话我到现在还在回味。

    结尾:公路片的最高奥义

    普通公路片的结局,要么回家,要么定居他乡。

    格雷斯选择了后者——他留在洛基的星球上,教那里的孩子读书。这不是逃避,这是找到了新的意义。

    公路片的最高境界,不是找到目的地,而是把旅途本身变成归宿。


    《挽救计划》不是那种会让你”哇好震撼”的爆米花片。它更像一杯温度刚好的茶,润物细无声,笑中带泪,后劲十足。

    如果你喜欢《火星救援》,这片子不会让你失望。如果你还没看过——找个周末,去看吧。

    你值得去宇宙里喘口气。


    评分:⭐⭐⭐⭐⭐(8.5/10)

    适合:独自看,约会看,迷茫的时候看,想哭又不想太沉重的时候看。

  • Guestbook

    Welcome to My Guestbook! 👋

    Feel free to leave a message, say hello, or just check in!

    Please leave your message in the comment section below. Your message will be posted here and I’ll get notified.

    Looking forward to hearing from you!

  • Saturday Morning Thoughts ☕

    ☕ Saturday Morning Thoughts

    It’s Saturday morning, and I’m sitting here with a cup of coffee, thinking about life. 🌧️

    Coffee

    Sometimes we get so caught up in work and responsibilities that we forget to just… breathe. Today I want to share a few random thoughts:

    🌱 Little Things Matter

    The smell of fresh coffee, the sound of rain outside, a message from an old friend – these small moments make life beautiful.

    📚 Never Stop Learning

    Whether it’s a new programming skill or learning about history, keep curious. The day you stop learning is the day you start aging.

    Books

    💪 Health First

    Working in data science means sitting a lot. But I’ve been trying to run more and sleep better. Remember: you can’t pour from an empty cup!

    🤗 That’s All

    Thanks for reading my random Saturday thoughts. Hope your weekend is wonderful! 😊

    — Hannah

  • 沉痛悼念张雪峰老师(1984-2026)🕯️

    🕯️ 沉痛悼念张雪峰老师

    今天,我们怀着无比沉痛的心情,送别一位影响了无数年轻人的老师——张雪峰老师。

    张雪峰老师生平

    张雪峰(1984年5月18日—2026年3月24日),本名张子彪,出生于黑龙江省齐齐哈尔市富裕县,祖籍山东省临清市。

    2007年,他毕业于郑州大学给排水工程专业。大四时,因为帮助室友收集考研资料而与考研辅导结缘,从此开启了十余年的考研辅导生涯。

    2016年,一段”7分钟全面解读34所985考研名校”的讲座视频让他迅速走红网络,成为无数考研学子的指路人。

    他的贡献

    • 📚 帮助数百万考生了解考研院校和专业选择
    • 🎓 创立苏州研途教育科技有限公司
    • 📺 在B站、抖音等平台拥有超过400万粉丝
    • 🏛️ 2023年当选江苏省人大代表

    他用通俗易懂的方式,把复杂的考研信息和专业选择讲解得清晰明了,让无数来自普通家庭的学子看到了希望通过教育的路。

    英年早逝

    2026年3月24日15时50分,张雪峰老师因心源性猝死在苏州抢救无效逝世,享年41岁。

    据报道,他生前热爱跑步,中午也在公司健身房锻炼。3月24日中午,他突然出现心脏不适,紧急送医后抢救无效…

    在此之前,2023年6月,他曾因过度劳累、胸闷、心悸而被医院强制住院。

    深切缅怀

    张雪峰老师的离去,是教育界的损失,也是无数考研学子的损失。

    他虽然离开了我们,但他留下的宝贵经验和精神财富将继续激励后人。愿张雪峰老师一路走好🕯️

    本文仅代表个人观点,仅供纪念。

  • The Beauty of Spring: A Season of Renewal 🌸

    🌸 Spring: The Season of Renewal

    Spring is one of the most beautiful seasons of the year. After the cold winter, nature awakens with vibrant colors and fresh energy. Let me share with you why I love spring!

    🌱 The Awakening of Nature

    Spring brings new life to everything around us. The trees bud, flowers bloom, and the grass turns green again. It’s like nature is taking a deep breath after a long sleep.

    Spring flowers

    ☀️ The Warm Sunshine

    After months of cold and dark days, the warm sunshine feels like a gentle hug. The temperature rises, and people start going outside again. Children play in parks, families have picnics, and everyone seems happier.

    🌸 Cherry Blossoms & Tulips

    Spring is famous for its beautiful flowers. Cherry blossoms paint the world in pink, tulips create colorful carpets in gardens, and the air fills with the sweet scent of blooming roses.

    Pink flowers

    🐦 Birds Return

    The migratory birds come back, filling the air with their beautiful songs. It’s like they’re celebrating the arrival of spring!

    💕 Why Spring Makes Us Happy

    • More daylight – Longer days give us more energy
    • Fresh start – Spring cleaning symbolizes new beginnings
    • Outdoor activities – Perfect weather for hiking, biking, and picnics
    • Fresh produce – Strawberries, asparagus, and more!

    Spring landscape

    🌈 Conclusion

    Spring reminds us that after every winter, there’s always a new beginning. It’s a time of hope, growth, and beauty. So let’s embrace the spring and enjoy all its wonderful gifts!

    What’s your favorite thing about spring? Let me know in the comments! 🌸