我渐渐明白这几年为什么那么疲惫,一方面这是跳入了以工作为中心的现代生活结构所带来的必然结果,另一方面是因为我还想要同时保有我自己的理想世界,所以我要在工作的同时兼顾开源项目、社区建设、阅读写作、学习音乐和语言……但是我显然没有那么多时间和精力,所以总是感觉疲惫。
新书出版以后,我觉得不能再这样下去,所以在「我该做些什么」这个方向上做了很多思考和调整。今年可以算是「改变之年」。
今年放弃了一些东西。我开始更多地问自己:你真的想做这件事情吗?
关闭这些通道以后,感觉轻松多了。有一阵子每天只是上班,下班了就玩游戏,然后早早睡觉。原来现代人只有遵从这种「正确」的生活方式才能维持身心健康。但是我不会放弃自己的志业,只是现在还没有做好准备对工作说不。
今年还做了一些推倒重来,或者说不愿意放弃的事情:
太执着(有时也许是偏执)并不总是好事,你会感觉很累,好事多磨定律并不总是有效,而有些事情就是很难被正确地解决。新的一年还是要多多练习放弃,也练习拒绝,练习做一个「坏人」,多考虑自己的身心健康。
虽然不多, 但今年也有一些新的探索。主要是这三部分:
年初体验了第一次升职(Senior -> Principal)。但在这一年里最大的成就并不是在程序员角色的本职工作上,反而是在演艺事业上——年底做了部门年会的导演。花了整整一个月时间,策划和设计了一出舞台剧。和四十几个同事一起,以时空之旅作为主题,用穿越到过去的几个关键故事作为结构,呈现了这个部门过去十年的历程。舞台剧在公司附近的一个剧场上演,我在下面看着表演,听着大家的笑声和欢呼声,很有成就感也很幸福。这让我想起大学时的那次课堂展示。
在策划的过程中发挥了各种创意,比如让老板穿上机长的衣服,发布一台时空引擎——实际上是一个加了发光灯牌的空气净化器:
让同事穿上美人鱼的服装,演绎金斧子和银斧子的桥段:
把剧场设定为一个时光机,给每个人分发机票作为时空旅行的入场券。机票上有每个人的名字和“航空里程”(加入公司的时长):
设计了各种宣传海报(借用了许立志《搬运工》里的一句诗,虽然语境的转换有些讽刺)。最近还做了 DVD,用来送给所有人作为纪念:
在代码厨房社区的建设上,下半年继续在 PyCon China 2025 办了线下代码厨房开源松(第七次开源松)。同时策划了两个很受欢迎的社区活动,分别是「2025 开发者精神状态调查」和「流浪记事本计划」活动。前者是一个现场用圆形贴纸投票的实时问卷调查,后者是一个活动当天在整个会场随机传递的留言记事本。
年底发布了拖延五年的新书《Flask 从入门到进阶》,并且拿到了 Armin Ronacher(Flask 作者)的推荐语:
另外三月还第一次去了美国。用微软提供的赞助在西雅图玩了一周,参加了微软 MVP 峰会,也体验了很多新鲜事物。详见这篇西雅图和微软 MVP 峰会游记。
2026 年没有新的年度目标,因为去年的还没有完成……这次只有两个大致的方向:
一个是让身心更健康。在慢性疲劳里挣扎会让人失去对生活的热爱。想要恢复健康,想要掌控自己的身体和思绪。为了这个目标,除了开始运动,我会放弃和调整之前的很多计划。停下不重要的事情,重新对未来进行排序,也继续思考自己到底想做些什么。
另一个是重建生活秩序。我会过更多的离线生活,花更多的时间独处和陪家人。尝试对一切都全身心地沉浸。回到书、音乐和电影里,回到科学、艺术和自然里。交新的朋友,和老朋友见面。勇敢行动,勇敢表达自己。
最后,因为囤积了太多游戏和书,新年设置了两个和消费相关的年度挑战:
防止遇到非常想玩的新游戏和想看的书,同时设置一个豁免规则:通关五个已有的游戏就能买一个新游戏,书也同理。
希望新的一年可以开心玩游戏和看书。
]]>如果你愿意分享的话,可以通过下面的方式投稿:
不一定非得是惊心动魄的故事,也可以是简单的、甚至有点好笑的日常连接,比如:
]]>《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 和微信公众号,或是加入我的邮件通讯列表。
在阅读过程中如果发现了排版或内容上的错误,欢迎通过下面的方式提交勘误。我会在后续重印时进行修正。感谢反馈!
如果你觉得这本书还不错,欢迎分享到社交网络,或是告诉你的同事和朋友。也欢迎在本书的豆瓣页面标记和评价。
]]>签名版的价格和上一版保持一致,依然是 109。付款方式和详细说明可以访问预售页面查看:
https://helloflask.com/book/4/signed/
签名版除了送 2 张 Flask 贴纸,还会额外送一张我的名片,可以用来当书签或者飞着玩。具体发货时间取决于正式发售时间,虽然不能完全保证,但我会尽量让签名书第一批发出。
你也许好奇为什么要换一个新书名,而不是作为第 2 版出版,即《Flask Web 开发实战(第 2 版)》。我设想了一些合理解释:因为内容变动比较多,换个更贴切的书名;在副书名里加一个 Python 关键字,更容易被别人搜索到……但背后实际的乌龙是:管理书号的工作人员在录入系统时打错了名字,把《Flask Web 开发实战》写成了《Flash Web 开发实战》。
按照出版规定,如果我想作为原书第 2 版来出版,那么新书名就只能叫《Flash Web 开发实战(第 2 版)》了。诸位应该也不想学 Flash Web 吧?
]]>面向 Flask 2.x 的旧版本当然没法作为先导材料,所以断断续续花了 26 个小时完成了第 4 版的更新。新版本主要有下面这些变动:
另外正式加了一章介绍为什么以及如何为本书付费,取代了主页上自愿点击的「付费支持¥10」按钮。考虑到整本书内容完全公开,所以没法阻止读者逃票,但至少我已经克服了「伸手要钱」的羞耻。对于在工作之外挤出的这些时间,我需要一些正反馈。这样可以让自己更认真维护下去,也不会产生怨念。不仅是获得收入,有时还会收到读者的附言感谢,这给我的生活里带来了很多随机的开心时刻。
写新版本的过程中有时也会想,现在跟 AI 说一句「帮我用 Flask 写一个 Watchlist 程序」就大概能实现的程序,还有人愿意来读教程吗?我想至少,在通过教程来学习编程可以让你说一句「我真厉害」,而不仅仅是一句「AI 真厉害」。
另外这个教程最早是在 2019 年发布的,六年过去了,部署章节介绍的 PythonAnywhere 的 UI 和功能基本没有任何改变。我只需要更新 Python 版本选择那个页面的图片,其他部分不需要任何改动。有一种值得托付终生的感觉。希望可以做出来有这样品质的产品和作品。
最后附上相关链接:
]]>一个月后的今天,发现注册某个服务总是收不到验证码,这时才发现我当时是把 [email protected] 的邮箱服务的 MX 记录给暂停了。整整一个月没法收到邮件,我太蠢了。
如果哪位朋友在这一个月内(2025/7/25 – 2025/8/26)给我发了邮件,请不要恨我,我只是没有看到。如果可以的话,麻烦再重新发一遍吧。
]]>对村里人来说,它叫「洗衣沟」。大人们常常聚集在这里拿着棍子敲打衣服。洗衣粉的袋子随手丢在河边。夹着土,叠了一层又一层。
对那时候的孩子们来说,这里是一个游乐场。在高高的水闸台子上往下扔石头。用石块在水里筑起小小的水坝。在河两边挖一些黄色的黏土,然后坐在台子上玩泥巴。黏土摔在粗砺的水泥台子上,常常会粘起一些半透明的小石子。于是我们做出来水晶手枪、动物和坦克。玩够了之后再还给土地。
过年的时候,我们会往水里扔鞭炮。除了普通的炮和有塑料外壳的「鱼雷」,印象最深的是一种在爆炸之前会旋转发光的炮。只在一家小店可以买到。据说是从经过国道的货车上掉下来的一箱炮,包装上是看不懂的英文。它在水下旋转,闪出五颜六色的光。光透过水变得缓慢而绚烂,像是发生在另一个世界的景象。
我们家买了洗衣机的时候,邻居们都过来参观。后来村子里的洗衣机越来越多,去河边洗衣服的人越来越少。偶然会见到有人去洗冬天的棉衣或是工厂的工服,总之是太脏太费水的东西。不管怎样,洗衣沟的水还是那样清澈,不知疲倦地流淌着,只不过岸边和洞深处多了很多水草。水草越长越多,直到占领了所有空白的水域。
再后来,河的右岸开了一家养鸭场。他们修了一条管道,把粪便排进河里去。下游的鱼塘主不愿意了,争执不下,就在上游用推土机筑了一个大坝,把整个河流硬生生地截断。人们在河边扔的垃圾也越堆越高。有人把成堆的蒜苗倾倒在这里,沤烂后发出难闻的味道。小河无聊的时候,也许会计算距离下一次建设美丽乡村还要多久。而它没想到的是,先等来的却是一场谋杀——左岸的砂石场经过一次扩建,把水闸连同河流都填平压在土下。他们需要可以挣钱的土地,不需要一条无用的河流。
面对垃圾、粪便、切割和覆灭,河流能做什么呢? 它什么也做不了。面对人类,它只是一个被征服和战胜的对象。
不会再有大人一边洗衣服一边大声地聊天。也不会再有孩子在那里玩水和泥巴,放鞭炮,用树叶叠出能舀水的勺子。
我在电脑里翻了很久,终于找到三张拍摄于 2013 年左右的照片。翻照片的过程里,我想到小学暑假住过的、散发着臭水沟气味的望京城中村,还有高中学校旁边短暂住过的小村子。再次想起的时候才发现它们已经全都不见了。
它们变成梦的河流,不再滚烫,也不再转动,只剩下空白。
#清空草稿箱计划# 原文创建于 2023 年 2 月 6 日,过年回家发现小河不见了。标题灵感来源于伍佰 & China Blue 的《梦的河流》。
]]>看到微软 MVP 峰会奖学金(scholarship)邮件的时候是在去年十二月初的某个工作日。中午花了一个小时的时间来写申请表,当时心想应该没几个人会这么认真写申请吧——后来发现果然我是中国区唯一拿到奖学金的人。这是微软第一次开放 MVP 奖学金项目,提供了最高 2500 美元的机票和酒店费用支持。这基本覆盖了这次美国行的主要开销,非常感谢微软。
收到奖学金申请通过的提醒邮件已经是一月末,距离三月末的 MVP 峰会剩下两个月时间。这时去美国还缺少最关键的东西——签证。现在看来申请签证的整个过程极其曲折:
在经历了各种忐忑和焦虑,以及无数次地刷新、登录和等待后,终于在北京通过了面签。走出大使馆回酒店的路上,心情好极了。一切终于重归平静。如果这次还没有通过,我很难对自己解释这两个月的折腾是为了什么。
最终我在出发前一周拿到了签证。接着在临出发当天的上午拿到了送给美国朋友的伴手礼,出发去机场前一小时去顺丰快递站提前拦截了为这次行程赶制的英文名片。总之在各种混乱和拖延中,完成了全部准备工作。
上海直飞西雅图需要 11 个小时,长途经济舱很难熬于是三部电影连连看。下飞机的第一印象是——美国的咕咕好大好勇敢,旁若无人地在人行道上散步。在机场迷路了一阵,在工作人员的提示下,终于在机场一侧的出口找到了公交站台。第一次上车前不确定要买哪一种类型的票,问了司机,司机直接让我上车,说不用买了。就这样,继续展开我的美国自由(免费)行。
第二印象是,这里的人大都很有礼貌且友善。坐公交的时候几乎每个人下车前都会和司机说一声谢谢。之后的几天基本也都是这样的体验:路边的车会提前停下来等你过斑马线,司机微笑着示意你先走。在商场里,店员会主动和你微笑打招呼。车站里的工作人员会和你说早上好。在远离市区的地方走路,有时迎面走过的陌生人也会和你打招呼。我甚至在想,是不是因为人太少了。如果不对彼此热情一点,就会感到太孤独。
在第一次面签的时候,我发现没有好好准备的话很难一下子说清楚微软 MVP 是什么,我和微软是什么关系,以及为什么微软要邀请我去美国参加这个会议。
微软 MVP 的全称是 Microsoft Most Valuable Professionals(微软最有价值专家)——是微软在全球范围内给一些对微软技术或开源社区有突出贡献的人颁发的奖项。我在 19 年成为微软 MVP,也是国内第一个 Python 方向的微软 MVP。
微软 MVP 峰会可以理解为全球微软 MVP 的大聚会。微软 MVP 峰会每年都会在西雅图的微软总部举办,这里会有各种编程技术和微软产品相关的分享,可以和微软产品组面对面交流和讨论。虽然我在六年前就成为了微软 MVP,但是考虑到去一趟美国是笔不小的花销,所以一直没有线下参加。今年有幸拿到了参会者奖学金,第一次线下微软 MVP 峰会终于成行。
我住的酒店在 Bellevue,临近西雅图和微软总部所在的 Redmond。而且酒店刚好在轻轨旁边,坐到微软总部不到 30 分钟。那几天每天上午九点出发,下午五点左右回来。感觉像是在微软上班。
因为是签了保密协议的内部活动,所以参会的具体内容没法分享。峰会一共三天,前后两天也会有一些产品组的活动可以参加。活动类型有很多,比如演讲、讨论会、见面会、剧场分享、园区游览,加起来一共有 400 多个 session。你可以提前在网站上查看和规划所有想去的 session。因为我对微软技术了解得并不多,所以选的议题基本都和 Python、GitHub、VS Code 相关,或是其他非技术相关的话题和活动。这几天也学到了很多活动组织相关的经验,也许未来办代码厨房活动的时候可以用得上。
微软的园区很大,去不同的楼经常需要搭摆渡车。会议的氛围很好,大家都很有热情。不过我英语一般(在美国的几天,多次立志学好英语),听着演讲经常不知道为什么大家都笑了起来。吃的东西也很丰富,每一餐都有不同类型的食物。
如果你在开源和技术社区有一些活动和贡献(包括写书和博客。不一定要和微软技术相关,也可以是 AI、Python 等领域),欢迎联系我,我可以帮忙提名。
微软 MVP 除了可以去微软总部参加每年举办的微软 MVP 峰会之外,还有很多福利。大致列一下:
可以通过邮箱 [email protected] 联系我,或者在领英或 Twitter 上发消息给我。
最好附上一个简单的自我介绍,如果有简历就更好了。
在微软 MVP 峰会这几天收获了一些奇妙的缘分。第二天结束是 Networking Mixer 活动,和第一天下午面向 Developer Technology 分类 MVP 的 DevTech Social 不同,这次是所有 MVP 都可以参加的社交聚会。地点在 4 号楼,一楼很大,整层楼散布着各种食物和酒水,而且到处都是人。入场会拿到一个 Bingo 游戏的卡片,用来集章抽奖。卡片上列满了微软产品组的名字,你需要找到分散在各处的对应产品组的员工给你盖章。同时在找的过程里可以品尝各种食物。
在找和吃的过程中,我接连碰到一个德国人——第一天午饭和他坐在一起闲聊了几句。直到第三次碰到他,我们都觉得缘分太深,于是就结伴起来。我们一起聊天一边找吃的,吃得差不多了就去四号楼外面的微软 logo 拍照。他说因为担心流浪汉问题,所以来美国几天一直没敢坐公共交通。我安慰他说没有的事,电车上干净人又少,公交上大家也很友善。顺便教了他怎么在手机上买票。本来打算一起去坐轻轨回 Bellevue,结果走到一半下了雨,他要回去打车,我就把剩下的最后一件伴手礼送给他,然后道了别。
中国区有十几位 MVP 来参加会议。其中有一位 KOKO 是台湾的 MVP,偶然和他聊起来才发现他在 19 年的时候听过我在 COSCUP 的那场演讲。啊,命运的奇妙连线。
到美国的第二天刚好是瑶瑶生日,在西雅图闲逛的时候想寄一封生日贺卡回家。看地图已经在附近却怎么也找不到邮局。这时一个美国人急匆匆地走过来问我知不知道邮局在那里,我说我也正在找。沿着街走了一段,最后我们一起找到了邮局。寄完贺卡在海边公园拍照时,一个没穿上衣的肌肉猛男刚好入镜,他看到我在拍照就顺势摆了一个 pose,然后对着我微笑。我也给他竖了大拇指。作为一个喜欢和陌生人聊天的人,很喜欢这样的氛围。
到美国的第二天在西雅图玩了一天。买了 City Pass C3,类似景点联票,$120 左右。三个景点组合我选了玻璃艺术馆+太空针塔+华盛顿湖游船。玩下来发现很像浦东美术馆+东方明珠+黄浦江游船。骑共享滑板车转来转去,心情放松,但也有点冷。本来以为从 70 号码头骑车赶到 55 号码头已经够冷了,结果差点冻死在游船上。
很喜欢海边的小公园。在公园的长椅坐着,低头看到地上写着一句诗:“I’m the captain of my soul”,一边念着一边抬头看到广阔的海和天空。
除了这几个景点,其他时间都在到处乱逛。作为路上观察学入门者,尝试发现和理解各种不同的东西。这里的电车和公交车对自行车很友好,公交车车头有可以展开的自行车支架,电车有专门空出的自行车位置。公交车还可以向路边一侧倾斜车身,让老年人更容易跨上台阶。这里的鸟很多。居民区有各种好看的小房子。市中心某些街道上有流浪汉和吸了毒在「挂机」的人。
闲逛中拍到的最满意的照片是下面这张:
第三天峰会下午的分享不太感兴趣,就去逛了微软商店。用半价折扣买了一个 Xbox 手柄,然后坐车去华盛顿大学看樱花。华盛顿大学门前是一大片草坪……写到这想起来实际上它没有大门也没有围墙。没有用来人脸识别和刷身份证的门禁,没有身份证放上去之后一句“无权限”的大声播报。没有打量和禁止你的保安。没有预约入校的申请表。你可以径直走进图书馆,拿起一本书看,不用担心自己是否被允许。
说起来我每天都坐的轻轨——连接西雅图大都市区的 Line 1&2——也没有门。每个站会有下图这样的一个入口,可以在两边刷手机付钱,上面提示语写着「付费进入」。因为我都是在 Transit App 上买日票($2),所以也不用刷。车站会有 1~2 位工作人员,但在那里的一周都没有人查我的票。没有被预设为坏人的感觉真好。
总体来说是很放松的一周。自然环境让人舒服。城市里没有丑陋的标语和宣传画。人很少,动物很多。大部分人的精神面貌是健康和自信的,也许他们没有太多愤怒和恐惧。
在制定旅游计划的时候,我列了一些想要体验的事情,有一条是看电影。在旅游这件事情上,相比于作为游客参观景点,我更喜欢体验本地人的日常生活。所以我经常随便在地图上找个地方,或是跟着公交车坐下去,在某个随机的站点下车。
在周二打折日订了票,只花了 $7。电影是最近拿了奥斯卡金像奖的《Anora》。电影院在 Bellevue 市中心。取票后买了点吃的,然后就直奔影厅——电影院也没有人检票。和国内准时开始不同,电影开场后还要再看大概二十多分钟的广告。电影对白比较简单,大概能看懂。本来想着十一点差不多结束,没想到一直看到了快十二点。回想起来已经记不起是后面的剧情乏味,还是倒时差的缘故,感觉越来越困。最后颇受好评的结尾都没看到就提前离场了。
这时是十二点多,公交已经停运。打车觉得太贵,而且 Bellevue 似乎没有共享单车或滑板车,最后决定步行回酒店。就这样,午夜十二点,我在美国街头走了十五分钟回到酒店。大概因为 Bellevue 是富人区,所以没有被抢劫和枪杀。一路上只见到两个遛狗的人。
这次旅行最糟糕的体验当属饮食。这一周吃到的大部分东西要么太咸要么太甜(而且还很贵)。麦当劳和肯德基有装饰精美的小房子,但是吃了一次发现汉堡里的肉有些硬和咸。
没有车的人生活会很不方便,酒店步行范围内很难找到便利店和超市。落地第一天晚饭,用咖啡机烧热水泡了带过去的唯一一盒泡面,其他几天都在后悔没有多带一点。
临走的最后一天,终于吃了顿像样的饭。周鹏飞请我和 Cynthia 去吃了一顿泰餐。终于吃上了接近中国菜的食物,我和我的胃都很感动。
本来想多呆几天,但是微软的奖学金限定了一周的往返航班日期。在回国的飞机上,坐累了,站起来看前排的电影。一块块小小的屏幕里同时放映着不同的人生,在两小时的长度里展开和结束。左前方的屏幕里是《布鲁克林》。看着女主角在纽约和家乡生活之间徘徊犹豫,感到难过。人实在太渺小了,一生也是如此短暂。面临的选择稀少且艰难。大部分时间都在各种搀着苦味的努力和无聊的工作里浪费掉了。
不如去海边散步,晒太阳,交新的朋友,传递快乐,再整点薯条。
回想起第一天凌晨四点醒过来,因为时差混乱睡不着了。想到接下来几天都可以放松地玩,心情好极了。
海边的那句诗,后来我在网上找到了完整的段落,出自 William Ernest Henley 的《Invictus》:
]]>It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate,
I am the captain of my soul.
过去几年,这本未完成的书是我最大的困扰和焦虑来源。所以今年最大的成果就是完成了《Flask Web 开发实战》第 2 版。算上交稿后的修订(出版社的 AI 审稿程序让我多花了 50 个小时来拯救我的书稿),写这个新版一共用了六百个小时。新版还拿到了 Armin Ronacher(Flask 作者)的推荐语。我在 Flask 领域的探索,这本书算是一个圆满收尾。接下来可以好好休息,然后探索一些新东西了。顺便说一句,因为出版社的组织调整,新书预计要到九月上市,这次<del>应该</del>不会再跳票了。
起源于我在 2022 年开源年会的代码厨房俱乐部现场招募,2023 年我们六位成员完成了依次取名为四分之一/二/三/四的四次聚会。我在最后一次聚会确立了代码厨房社区的构想——想要创建一个好玩、有用、关注人而不是技术、最小商业浓度的社区。确定了代码厨房社区的主要板块:以社区论坛为基础的 Steak Overcooked 和菜谱,一起做开源项目的「开源松 Song of Open Source」,还有未来可能会举办的「代码厨房年会 CodeKitchenConf」。23 年举办了第一场开源松,24 年用公司的场地办了第一场线下开源松,接着年末又和 PyCon China 2024 合作办了一个 Python 专场开源松。两次线下开源松都由「代码厨房乐队」的演出收尾。在这些活动里见到了很多认识或不认识的朋友,收获了很多快乐。另外年末重回了 PyCon China 组委会,帮忙打了一些零工,主要负责策划开源松会场。
在公司里也做了一些类似开源社区的探索。比如尝试对公司内的一些项目按照开源项目的标准进行改造;基于 Jenkins 搭建起一整套 Markdown 文档的预览和部署方案,并引导大家把文档放到代码仓库里;独立设计和组织了一场非常好玩的社区市集和两次 Meetup。在社区市集里又嵌套举办了「第一届五角场办公椅滑行比赛」。
作为一个回顾,年中去 CommunityOverCode 2024 做了一个演讲来分享在公司内外的社区营造实践。上班后精力有限,23 年也只做了一场演讲,是在 PyCon China 2023 分享的《濒危 Flask 扩展拯救计划》。关于社区建设的探索,晚点再单独整理一篇文章出来。
在开源项目上没什么大的进展,主要是在维护旧的项目。23 年给 APIFlask 发布了 2.0 版本,希望 25 年可以完成 3.0 版本。
和 23 年一样,因为大部分时间都比较疲惫,所以身体状态好的某些日子就显得非常美好。记得有几个冬日里的晴天,我在公司坐着,忍不住频频看向窗外的树。被阳光照得发亮的叶子在风中摇曳,水面也在慢慢跳动。心里涌动着幸福的感觉。
除了日常的疲惫,停不下来、无法放松的脑袋,以及大段的感冒,24 年还是有很多值得记录的事情:
其他的快乐回忆大都是音乐、游戏、书和电影带来的。
除了李志的「三缺一」,印象深刻的演出还有 23 年万青的「梅奔专场」,还记得演出即将开始时场外的雷声滚滚。从旺福那里接收到的快乐能量持续了很久。把豆瓣 FM 红心歌单导出到 Apple Music 之后,很长一段时间都在听这些高中大学时收藏的歌。
玩了一些游戏的开头,通关了《黑神话·悟空》,其他大部分游戏时间都花在了 CS2 上面。去掉大学时玩 CS:GO 的一百个小时以外,算下来今年玩了三百个小时。然而技术并没什么进步。沉迷于和弟弟或同事一起玩搭档模式然后各种努力尝试用电击枪电人。
电影看了一些,回想起来像是穿插在日常生活里的黑乎乎的幻梦。读书则是想起来就读,大多数时间只是买。最近看的书里很喜欢《夜晚的潜水艇》。喜欢第一个和最后一个故事的精巧和想象力。喜欢《竹峰寺》里对暮色的描写,还有《李茵的湖》里的八九十年代质地。
上班第三年。为了让工作没那么无聊,这三年尽了最大可能把自己的兴趣融入进来。除了 Python 方向的探索和前面提到的内部开源社区建设,还在演艺方面做了一些尝试。23 年为了部门年会节目成立了一个临时的「六点五月天」乐队,然后把乐队组建、节目准备和表演过程做成了这个《干杯》短片。后面就开始承接各种内部活动的视频拍摄和剪辑工作。
24 年部门年会又成立了「Grey 和他的朋友们」乐队。这次还做了三个不同版本的年会预告片,悬疑版、搞笑版和飞行版各一个。飞行版里和同事用穿越机拍了从公司对面的楼出发、从露台飞进公司并下楼进到年会会场的镜头(想要实现一镜到底的效果,嘿嘿)。年会开场时放了这个视频,大家坐在会场里看从公司外面离自己越来越近的飞行画面,和 23 年的视频异曲同工。
工作三年里还有很多有趣的经历和感想,后面放到单独的文章来写。
这两年在写书、工作、开源项目和社区活动的夹缝里喘不过气。2025 年对我来说希望是「舒展」的一年。想要花很多的时间在自己身上,让自己身心更加放松,多关注身体的紧张和疼痛。想要过一些坚实平静的离线生活,减少浪费在网络上的时间。三十岁对我来说可以作为一个中场休息,想想下一个十年做些什么好。
今年的目标大部分都是让人快乐的目标:
大概想到这些,考虑到是舒展的一年,能完成三个就可以了 :P(年初把这些计划发到了代码厨房,也欢迎来分享你的计划)
除了这篇拖了很久完成、还留着一些线头的年总结,还有很多文章躺在草稿箱里,希望今年能多完成一些。
最后祝自己和看到这里的你,新年更平静,也更自由。
这篇文章顺便加入了一些 23 年的内容。动笔之前先去翻了 23 年年总结的草稿(还记得那种疲惫缠身的感觉),附在这里留做备份:
七月我们突破了屏幕的限制,在戴尔五角场办公室举办了第一次线下代码厨房开源松。而这一次开源松 Sprint 6 我打算在 11 月 23 日举办的 PyCon China 2024 大会里办一场开源松。没错,一场面向 Python 爱好者的开源松!
开源松(Song of Open Source)是代码厨房社区自造的词语,可以大概理解为开源黑客松,但是又不必那么 hack。只是一场开源爱好者互相交流和共同参与开源项目的聚会活动。我们希望借助这个活动来鼓励和帮助大家参与开源项目、推动开源项目发展、孵化新的项目 idea。
如果你从来都没有参与过开源项目的话,这次活动也许会是你开源之路的第一步。你会认识其他喜欢编程和开源的朋友,和开源项目维护者们交流,顺便提交第一个开源贡献。
开源松活动在大会下午开始,你可以在现场找到开源松会场指引标识,或者到代码厨房社区展台询问。如果打算参加活动,记得在报名大会时勾选相应的选项。会场内会设置三个活动区域:
顺便也欢迎来代码厨房展台玩。我们为还没开始工作、或者刚刚被裁的朋友准备了「Python 八股文面试题挑战」……通过挑战的话可以体验现场拿 offer 的感觉。
在其他项目报名之前,我们已经准备了两个代码厨房社区项目:
FineWeather:一个 Vuejs+Python 实现的网络相册
不管你喜不喜欢拍照,肯定有一堆照片存在某个地方。有没有想过摆脱商业公司的限制,自己部署一个在线相册?放上自己最喜欢的照片,自己的数据自己管理。一起来打造一个完美的开源相册程序吧。
下面是项目作者 Allen 部署的相册实例:
APIFlask:Python Web API 框架
基于 Flask 实现的 Web API 框架,集成了 marshmallow、webargs 等项目来让 Web API 开发更加简单。我们在计划项目的 3.0 版本,有很多有用的功能可以加入。完成了大半的文档翻译项目也等待一个人来再推进一步。
如果你有自己的 Python 开源项目,欢迎报名参与!作为项目维护者,你需要完成这些事情:
报名方式:在代码厨房社区置顶贴留言,或是通过下面的表单报名:
除了了解 Git 基本用法,你还要会一点 Python。有一台充电器还找得到的笔记本电脑。还有一点点的开源热情。
如果你不仅仅想要来做开源项目,那么可以带一点其他的东西来。比如一个关于你自己项目或其他经验的五分钟分享、新项目的 idea……尽管自由发挥。 如果你有其他想法和建议,欢迎留言。
这次开源松将在 PyCon China 2024 内举办,因此报名大会即可参与:
]]>写到这里就去豆瓣翻了下这部《偷自行车的人》。我在若干年前标记时写道:「纯粹的电影。平实、有感染力,这他妈才是现实主义啊。餐厅吃饭那段真让人心酸。」。等车子被偷那天,我计划重新看一遍这部电影,然后回来更新这篇文章。
最近勉强算是把书写完了,可以放下一颗心来。但是又好像没有完全写完,因为还要处理读者试读留下的评论,以及编辑还没发来的审稿建议。接下来有太多新的计划可以展开,不过让心再次悬起来之前,不如多停留一会儿。与此同时,CS2 的游戏时间记录即将突破 300 小时……
11/4 更新:被偷了。心情很复杂。错愕、后知后觉的侥幸突然中断、失去的难过混在一起,远没有想象得那么轻松。只是因为早上红绿灯晚了几秒,把车子停在了另一个不常去的地铁入口,晚上回来车子就不见了。事实证明,在上海杨浦,一辆没上锁的六成新自行车被偷需要七天。
2025/3/3 更新:买了一辆二手的迪卡侬 Riverside 500 旅行车,每天又可以开心地骑车上下班了!
]]>回上海的这一天上午,我需要去附近的乡里走一趟。
桃市附近多了一家养蜂场,叫小武养蜂场。风景区附近的围墙上有一些新的标语。下一句是“仰望星空展未来”,上一句你肯定猜不出来——“一心一意跟党走”。电信营业厅戴着口罩咳嗽的店员,提醒我新冠还没有过去。天气很晒,但风很凉爽,耳机里是 Vampire Weekend 的那张《Father of the Bride》,一张专辑刚好够打一个来回。在这样的街上,太阳浇灭了所有购物的冲动。更何况这里没有城市里的那些陷阱——没有音乐,没有香氛,没有创意十足的广告,没有精致完美的女人在墙上直勾勾地想把你看穿。只有奄奄一息的老年人和中年人在发烫的遮阳棚下玩手机和打盹。我还是想买一些东西,只想买一些必需品。去两元超市给小巴买了一个橡胶球,两块钱。不过每次送给它的球都玩不了几天——要么被它咬烂,要么被邻居家的狗偷走。然后去隔壁的超市买了一瓶矿泉水,也是两块钱。
从上海回家是在父亲节前一天,我在火车上看完了安妮·埃尔诺的《一个男人的位置》。听了《昨日之海》的某期播客后买了这本书和《一个女人的故事》。某一天我把《位置》读了个开头,然后放在我的床边。一放就是许多天过去。这种情况多了,床头柜变成书柜,堆栈变成积木。果然旅途才是最适合阅读的环境,单程就可以读一本书。
这本书的阅读体验像是某个人的博客,一个为爸爸写的博客。很多人小学的时候都会写一篇《我的爸爸》这样的作文。成年之后,直至爸爸去世,却很少有人再写一篇《我的爸爸》。我突然想到,世界上某个人也许会在爸爸的葬礼上读他写的第一篇《我的爸爸》:我的爸爸不抽烟,也不喝酒。他戴墨镜的样子很酷……
读的过程中,我不断想起从小到大我熟悉的那些“大人”。想起每一次的婚礼和葬礼,那些家族里的男人们。想起他们在这个世界上的位置,以及他们为了把下一代推离到更远的位置的努力。他们从没有想过有另一条路可走,总是像个硬汉。他们快乐吗?他们的孩子快乐吗?也许从没有人问过他们。祝他们夏天快乐。
]]>