2026-03-04 22:54:54
我还能做些什么?终于写完书的那段时间,在下班回家的路上,我经常想到这个问题。用这少得可怜的时间和精力,我还能做些什么?冷风吹着沸腾了一天的脑袋,双脚麻木地踩着脚踏,我想不清楚。
我渐渐明白这几年为什么那么疲惫,一方面这是跳入了以工作为中心的现代生活结构所带来的必然结果,另一方面是因为我还想要同时保有我自己的理想世界,所以我要在工作的同时兼顾开源项目、社区建设、阅读写作、学习音乐和语言……但是我显然没有那么多时间和精力,所以总是感觉疲惫。
新书出版以后,我觉得不能再这样下去,所以在「我该做些什么」这个方向上做了很多思考和调整。今年可以算是「改变之年」。
今年放弃了一些东西。我开始更多地问自己:你真的想做这件事情吗?
关闭这些通道以后,感觉轻松多了。有一阵子每天只是上班,下班了就玩游戏,然后早早睡觉。原来现代人只有遵从这种「正确」的生活方式才能维持身心健康。但是我不会放弃自己的志业,只是现在还没有做好准备对工作说不。
今年还做了一些推倒重来,或者说不愿意放弃的事情:
太执着(有时也许是偏执)并不总是好事,你会感觉很累,好事多磨定律并不总是有效,而有些事情就是很难被正确地解决。新的一年还是要多多练习放弃,也练习拒绝,练习做一个「坏人」,多考虑自己的身心健康。
虽然不多, 但今年也有一些新的探索。主要是这三部分:
年初体验了第一次升职(Senior -> Principal)。但在这一年里最大的成就并不是在程序员角色的本职工作上,反而是在演艺事业上——年底做了部门年会的导演。花了整整一个月时间,策划和设计了一出舞台剧。和四十几个同事一起,以时空之旅作为主题,用穿越到过去的几个关键故事作为结构,呈现了这个部门过去十年的历程。舞台剧在公司附近的一个剧场上演,我在下面看着表演,听着大家的笑声和欢呼声,很有成就感也很幸福。这让我想起大学时的那次课堂展示。
在策划的过程中发挥了各种创意,比如让老板穿上机长的衣服,发布一台时空引擎——实际上是一个加了发光灯牌的空气净化器:
让同事穿上美人鱼的服装,演绎金斧子和银斧子的桥段:
把剧场设定为一个时光机,给每个人分发机票作为时空旅行的入场券。机票上有每个人的名字和“航空里程”(加入公司的时长):
设计了各种宣传海报(借用了许立志《搬运工》里的一句诗,虽然语境的转换有些讽刺)。最近还做了 DVD,用来送给所有人作为纪念:
在代码厨房社区的建设上,下半年继续在 PyCon China 2025 办了线下代码厨房开源松(第七次开源松)。同时策划了两个很受欢迎的社区活动,分别是「2025 开发者精神状态调查」和「流浪记事本计划」活动。前者是一个现场用圆形贴纸投票的实时问卷调查,后者是一个活动当天在整个会场随机传递的留言记事本。
年底发布了拖延五年的新书《Flask 从入门到进阶》,并且拿到了 Armin Ronacher(Flask 作者)的推荐语:
另外三月还第一次去了美国。用微软提供的赞助在西雅图玩了一周,参加了微软 MVP 峰会,也体验了很多新鲜事物。详见这篇西雅图和微软 MVP 峰会游记。
2026 年没有新的年度目标,因为去年的还没有完成……这次只有两个大致的方向:
一个是让身心更健康。在慢性疲劳里挣扎会让人失去对生活的热爱。想要恢复健康,想要掌控自己的身体和思绪。为了这个目标,除了开始运动,我会放弃和调整之前的很多计划。停下不重要的事情,重新对未来进行排序,也继续思考自己到底想做些什么。
另一个是重建生活秩序。我会过更多的离线生活,花更多的时间独处和陪家人。尝试对一切都全身心地沉浸。回到书、音乐和电影里,回到科学、艺术和自然里。交新的朋友,和老朋友见面。勇敢行动,勇敢表达自己。
最后,因为囤积了太多游戏和书,新年设置了两个和消费相关的年度挑战:
防止遇到非常想玩的新游戏和想看的书,同时设置一个豁免规则:通关五个已有的游戏就能买一个新游戏,书也同理。
希望新的一年可以开心玩游戏和看书。
2025-12-06 10:47:46
不管你是我的书和文章的读者,我的演讲和播客的听众,还是我的项目和活动的参与者,我都很想听听关于你与这些“作品”之间的故事。作为这一个人生阶段的回望,我想知道我过去这些年创作的内容和读者建立了怎样的连接,又产生了哪些影响。期待听到你的回响。
如果你愿意分享的话,可以通过下面的方式投稿:
不一定非得是惊心动魄的故事,也可以是简单的、甚至有点好笑的日常连接,比如:
《Flask Web 开发实战》买来后一直没有看,后来用来垫显示器了。这本书厚实又稳重,陪我度过了三年的工作时光。
2025-11-23 22:25:36
经过五年的写(拖)作(延),我的新书《Flask 从入门到进阶》终于出版了!作为《Flask Web 开发实战》的全新升级版,新版本在原书的基础上进行了大量更新和调整,以便适应当下的技术栈。目前已经有现货可以购买:
至此我在 Flask 这条人生支线的探索也算圆满了。我从大二自学 Python 和 Flask,毕业前开始写作《Flask Web 开发实战》,这本书出版的同时也成为了 Flask 的维护者,并且为大量相关项目贡献代码。从 2018 年出版到现在,一共重印了 14 次,累计售出 2 万本(包括电子书)。收获了很多好评,在豆瓣上评分也保持在 9 分左右:
到现在终于完成了新版本,而且还拿到了 Armin Ronacher(Flask 作者)的推荐语:
Great resources make great developers, and it’s wonderful to see Flask supported by such high-quality education materials.
感谢一直关注这本书并持续催更的朋友!这本书的完成是我们共同努力的结果 :D
这本书换了一个新书名,出于一个有点滑稽的原因。书名从《Flask Web 开发实战:入门、进阶与原理解析》变成了《Flask 从入门到进阶:Python Web 开发工程化实践》。不过新的副书名也能更好的概括这本书的特点:以学习 Flask Web 开发作为脉络,你能通过这本书掌握相对完整的 Python Web 工程化实践。从 HTTP 原理到数据库 ORM,从单元测试到代码风格再到性能优化,从 Web 程序开发到 Web API 开发,最后再到不同的部署方式。如果想要深入了解框架,最后还有一章源码解析。同时用两个示例程序串起来各种不同的知识点,比如 Flask 项目的组织方式和技巧,以及 Flask 开发中各类功能的实现。
访问这本书的主页查看详细介绍和章节目录:https://helloflask.com/book/4/
下面是一些具体内容上的变化:
| 旧版本 | 新版本 |
|---|---|
| Flask 1.x | Flask 3.x |
| Python 2.7, 3.6+ | Python 3.9+ |
| Bootstrap 4.x | Bootstrap 5.x |
| SQLAlchemy 1.x | SQLAlchemy 2.x |
| 旧版本 | 新版本 |
|---|---|
| Pipenv | PDM |
| Flask-Mail | Flask-Mailman |
| Flake8 | Ruff |
| Open Iconic | Bootstrap Icon |
| Flask-Moment + Moment.js | Day.js |
| jQuery | Vanilla JS |
| AJAX with jQuery | Fetch API |
| Flask for Web API | APIFlask |
| 云平台部署 | Docker 部署 |
示例程序上做了比较大的调整,删掉了旧版本的 SayHello、Todoism、CatChat,保留两个程序并做了比较大的重构:
| 旧版本 | 新版本 |
|---|---|
| Bluelog | Greybook |
| Albumy | Moments |
| helloflask/demos | helloflask/examples |
新版本计划是想做一些删减,比如从 700 页减到 500 页,毕竟一本厚书还是让人蛮有压力的。虽然删掉了两个章节,但是写到最后又快到了 700 页,实际的厚度比旧版本还要厚一点点。大概不知不觉又加了很多内容进来。
本书面向的读者群如下:
本书不包含对 Python 的基础知识介绍,所以读者需要事先对 Python 基本语法有一定的了解。另外,Web 开发不可避免的会涉及到一些 HTML、CSS 和 JavaScript 知识,如果你不熟悉这些,可以通过 MDN 提供的 Web 开发入门教程学习,简单了解即可。
Great resources make great developers, and it’s wonderful to see Flask supported by such high-quality education materials.
—— Armin Ronacher(Flask 作者,Sentry Platform 副总裁)
作为一名对 Python 充满热忱的软件工程师,一名乐于帮助他人、回馈社区的布道者,Grey 对技术准确性、阅读体验感的无限追求都体现在这本新作中,我相信每一名读者都能在字里行间感受到他的诚意。
—— 管俊(《DevOps 实践指南(第 2 版)》译者,戴尔中国卓越研发集团 DevOps 架构师)
这本书内容翔实,推荐给想要系统学习 Flask 的人。不要漏掉书中的小知识点哦。
—— Hsiaoming Yang(Typlog 创始人,Authlib 作者)
我是李辉(Grey Li),Flask & APIFlask 的维护者,Flask 开发团队(Pallets Team)成员, HelloFlask 社区和代码厨房社区创建者,微软 Python 方向最有价值专家(MVP)。目前就职于戴尔中国卓越研发集团,担任首席软件工程师。
我热衷于开源软件的应用和推广,为 Flask 等开源项目贡献过大量代码。也曾在 PyCon China、PyCon US、COSCUP、COSCon、CommunityOverCode 等技术大会担任演讲嘉宾。你可以在 GitHub 上看到我的开源项目。
如果你想了解我的新作品或其他动态,可以关注我的 Twitter 和微信公众号,或是加入我的邮件通讯列表。
在阅读过程中如果发现了排版或内容上的错误,欢迎通过下面的方式提交勘误。我会在后续重印时进行修正。感谢反馈!
如果你觉得这本书还不错,欢迎分享到社交网络,或是告诉你的同事和朋友。也欢迎在本书的豆瓣页面标记和评价。
2025-10-17 18:58:36
五年了,终于等到这一天。《Flask Web 开发实战》的全新升级版《Flask 从入门到进阶:Python Web 开发工程化实践》将于下个月正式发售。和上一版一样,先来预售作者签名版。
签名版的价格和上一版保持一致,依然是 109。付款方式和详细说明可以访问预售页面查看:
https://helloflask.com/book/4/signed/
签名版除了送 2 张 Flask 贴纸,还会额外送一张我的名片,可以用来当书签或者飞着玩。具体发货时间取决于正式发售时间,虽然不能完全保证,但我会尽量让签名书第一批发出。
你也许好奇为什么要换一个新书名,而不是作为第 2 版出版,即《Flask Web 开发实战(第 2 版)》。我设想了一些合理解释:因为内容变动比较多,换个更贴切的书名;在副书名里加一个 Python 关键字,更容易被别人搜索到……但背后实际的乌龙是:管理书号的工作人员在录入系统时打错了名字,把《Flask Web 开发实战》写成了《Flash Web 开发实战》。
按照出版规定,如果我想作为原书第 2 版来出版,那么新书名就只能叫《Flash Web 开发实战(第 2 版)》了。诸位应该也不想学 Flash Web 吧?
2025-10-13 21:12:29
即将出版的新书(预计将于本月底发售)变成了一个超强 deadline,它提及的所有东西都要在发售前成为现实。比如写进书里但其实还不存在的 APIFlask 3.0.0 版本,以及这个可以被当作先导材料的《Flask 入门教程》。
面向 Flask 2.x 的旧版本当然没法作为先导材料,所以断断续续花了 26 个小时完成了第 4 版的更新。新版本主要有下面这些变动:
另外正式加了一章介绍为什么以及如何为本书付费,取代了主页上自愿点击的「付费支持¥10」按钮。考虑到整本书内容完全公开,所以没法阻止读者逃票,但至少我已经克服了「伸手要钱」的羞耻。对于在工作之外挤出的这些时间,我需要一些正反馈。这样可以让自己更认真维护下去,也不会产生怨念。不仅是获得收入,有时还会收到读者的附言感谢,这给我的生活里带来了很多随机的开心时刻。
写新版本的过程中有时也会想,现在跟 AI 说一句「帮我用 Flask 写一个 Watchlist 程序」就大概能实现的程序,还有人愿意来读教程吗?我想至少,在通过教程来学习编程可以让你说一句「我真厉害」,而不仅仅是一句「AI 真厉害」。
另外这个教程最早是在 2019 年发布的,六年过去了,部署章节介绍的 PythonAnywhere 的 UI 和功能基本没有任何改变。我只需要更新 Python 版本选择那个页面的图片,其他部分不需要任何改动。有一种值得托付终生的感觉。希望可以做出来有这样品质的产品和作品。
最后附上相关链接:
2025-08-26 19:09:03
七月底,因为 SendGrid 不再提供免费额度,我开始寻找替代服务。在给 greyli.com 这个域名配置新的邮件服务 DNS 的时候,某些原因一直没成功。尝试过程中手贱把已有的几条邮件相关的 MX 和 CNAME 记录给暂停了。
一个月后的今天,发现注册某个服务总是收不到验证码,这时才发现我当时是把 [email protected] 的邮箱服务的 MX 记录给暂停了。整整一个月没法收到邮件,我太蠢了。
如果哪位朋友在这一个月内(2025/7/25 – 2025/8/26)给我发了邮件,请不要恨我,我只是没有看到。如果可以的话,麻烦再重新发一遍吧。