作者归档:李辉

蚊子偷看我写书

家里太舒服,所以决定去图书馆写书。起得太晚,到达已经是十一点半。写了半小时,午饭时间到。想找到特定颜色的共享单车,结果一直找到吃饭的地方。

午饭后脑袋昏沉,睡了一觉,压得手臂发麻。醒过来两眼失神,无法聚焦。感觉越来越热。不知道为什么 VPN 节点全部失联,换了备用服务器,然而命令行还是无法连接 GitHub。打开几个网页,但是早已没有兴致解决这类问题。政府可真是神通广大,随随便便就浪费掉我三十分钟。感觉越来越热,决定打包离开。

图书馆有两个天井,四个位置都有人。徘徊了两圈,终于等到一个空位。今天风很凉爽,一年里少有的好天气。树叶在旁边沙沙地响。下午四点零八分,开始写书。四点十分,发现一只蚊子在附近转来转去,好像要偷看我的书稿——我那写了两年还是一团浆糊的书稿。经过一阵周旋,四点十一分,蚊子终于被我杀死了。

如果没有工作的话,我可以一天一天地在城市里游荡。从一个座位到另一个座位,从一栋建筑到另一栋建筑。直到把想做的事情做完,直到我对这个地方感到厌倦。如果没有鬼魂,这个世界就太没意思了。如果没有自由的人,那这个城市还有什么希望?

P.S. 距离我信誓旦旦宣称的交稿时间已经过去 5 天,距离跟编辑承诺的交稿时间还剩 25 天,距离合同上的交稿日期还剩两个月满一周年。

代码厨房欢迎你

代码厨房是一个面向编程和开源爱好者的社区。社区的主体是坐落在 codekitchen.community 的论坛。这个论坛的前身是创建于 2019 年 1 月 11 日的 HelloFlask 论坛(HelloFlask discuss!),因为论坛服务器一直在海外颠沛流离,所以访问起来并不是很顺利。最近把论坛以及 628 位 HelloFlask 原住民一起搬家到了香港,改头换面变成代码厨房社区。

「代码厨房」最早是我创建的公众号的名字。同一时间注册了 daimachufang.com,想要在这个网站上放些什么已经不得而知。后来公众号一再改名,代码厨房已经不见。再一次想起来是在去年 10 月, 29 日心血来潮去参加中国开源年会的开源集市。作为现场唯一一个个人展位,我带去了两个项目。一个是方学园,另一个便是代码厨房俱乐部

出发前一天为代码厨房俱乐部更新了 daimachufang.com,也就是下面的样子:

俱乐部现场成立,现场报名。报名单上收集了十个人,最后筛选到五个。算上我自己,六个人在一年内完成了四次聚会。大家互相带来很多新想法和思考,也玩得很开心,但逐渐有点忘记最初想要做什么。于是,在 2023 年的 10 月 22 号,最后一次聚会,大家回到了报名的地方——微软 Reactor。我在那里重新介绍了代码厨房社区的构想

代码厨房的核心构想是「一个让人快乐和放松的编程社区」,主要的板块是:

blank

不论你是当下、曾经还是未来的编程爱好者,都可以加入我们。代码厨房欢迎你!

APIFlask 2.0 版本发布

一边上班一边赶工做开源项目真是太累了。更不用说还要一边焦虑写书的进度。不过这次 2.0 版本基本把想做的功能都完成了,剩下两个大的功能(为蓝本拆分单独的 OpenAPI Spec、解耦 marshmallow)实在是没精力加进来了,只好放到 2.1。

APIFlask 2.0 版本的 codename 是 Gongqing(年初我从五角场搬到了共青森林公园旁边。没错,1.0 版本是 Wujiaochang)。

回到正题,这次最主要的一个变动(breaking change)是把所有 input 装饰器的参数改成了关键字参数。

@app.post('/pets')
@app.input(PetQuery, location='query')
@app.input(PetIn)  # equals to app.input(PetIn, location='json')
def create_pet(query_data, json_data):
    pass

关键字参数的名字默认是 {location}_data,通过 arg_name 参数可以自定义。这个改动让我删掉了很多 hack Flask 的代码。推动这个功能在上游 webargs 实现,所以不用加代码在自己这里。再加上一些改动已经在 Flask 实现了,又删掉一些。非常轻松。理想情况是,文档越来越多,代码越来越少。

如果你感兴趣的话,下面是 2.0 版本的详细内容:

 

共青森林公园吉祥狗

下雨天和女朋友去共青森林公园散步。因为只有一把伞,所以不得不在中途避了一刻钟雨。我们聊到古代人在这种廊桥避雨,可能一避就是一整天。她说书生一般会在这里邂逅狐妖,然后相谈甚欢。我说然后雨停了就各自走了,再也没有见过。没有烂俗的故事,不给后人拍电影的机会。

雨天的共青森林公园人很少,让人放松。雨稍停的时候,遇到两只非常有戏剧效果的狗。想说服它们放下安逸的生活去逐梦演艺圈或是戏剧圈,它们不为所动。尽管从一路中分到底的毛发可以看出来它们被淋得很惨,但它们说喜欢这样,喜欢这么简单的生活——每天在公园里探险,淋雨,晒太阳,吃游客供奉的食物,汪汪,汪汪……我把放在包里随着我颠沛流离已经变得稀碎的饼干送给了它们。

建议园方让它们俩做「共青森林公园吉祥狗」(当然前提是它们愿意),取代那两只淋多久也不会中分的松鼠。

P.S. 推荐雨天的共青森林公园。记得要穿拖鞋。


blank
blankblankblank

自行车叨位去

最近开始骑车上班了。 单程 20 分钟左右,每周去公司三天的话,一周就可以获得 120 分钟运动时间。在此之前,我会坐九点二十五分出发的那班公交,只需要 15 分钟。不过我经常在九点二十一分才出门。这样下去,迟早有一天会有公交车弃我而去、而我喘着粗气远远目送的画面出现。

在中原城市广场附近,有一个很大的路口,和一个时间超长的红绿灯。我经常在那里等红灯变绿的时候发呆。在路上我会听根据播放历史生成的随机歌单,上一首也许是周杰伦,下一首可能是巴赫。有一次我经过那个路口,耳机里刚好播放到拉赫玛尼诺夫第二钢琴协奏曲的第一小节,突然就很想哭。那个时刻时间变得很缓慢,那个路口也变得更大了,像是一面湖。我漂在上面,风推着我走,周围的人都是我最熟悉的朋友。我们一起在湖面上荡着,吹着凉爽的风,晒着九点多的太阳,又或者是黄昏时柔和的太阳。这一天就到这里多好。

骑车上班的时候,生活又开始流动起来。虽然绕来绕去无论怎么组合,也都只有那么几条路。但是因为背景音乐不同,每天都像是新的电影。到了公司我并不直接进去,而是沿着路继续往前骑,再绕江湾体育场一圈,这一圈让我心情平静。如果不够平静,那就再多一圈。

春天快乐

除了一堆药,医生还开了一个颈托,三百五十块。付款前犹豫了两秒。果然,淘宝只要两百块。回家前路过体育学院旁边的二层破败小楼,看到有小吃摊就拐了进去。躲开一地的猫,发现只有炸香肠和炒饭炒面。虽然炒饭和炒面有一堆排列组合,但我还是走掉了。没有车篮不说,买了去哪里吃呢,回到家估计要冷了。过去之前心里想着的是鸡蛋灌饼和火烧,至少也是手抓饼。

经过大润发,看到高大的樱花树,也可能是山茶树(总之是会开红色花朵的某种树)。想起来再往前是民星公园。没有犹豫,径直转了过去。小小的公园,还算精致。树很多,很密。有些开了花,有些发了新的叶子。这个时节,如果不开花,也不繁茂,春天会责怪你的。七拐八拐转了一圈,除了两三个带着孩子的中年男女,其他都是老年人。穿着精致的、化着浓妆的、悠闲的、昂扬的老年人。尽管在不可避免地走向衰败,但这个公园和春天都是他们的。可是过了几十个春天,不会感到腻烦吗?围着这小小的公园,一圈又一圈,不会感到疲倦吗?也许我不该逆时针走,这样他们就不用被我观察,我也不用生出那么多混乱的念头。

公园中央是一团浑浊的湖,长满了各种水草。没有鸭子。鸭子大概都飞去看海了吧?现在天气这么好,至少也要去共青森林公园里度个假。湖边一圈围栏上挂着三个人——白手套先生在压腿,白口罩小姐在拉伸胳膊,另一个呢,是我,穿着白色的球鞋在写日记。

说到底只是不想回家。期待有另一件计划之外的事情发生。期待迎面突然走来一个人,拉着我的胳膊说,快跟我走,没有时间解释了……什么?合什么 PR!?等到第二个 code owner 看到之后 approve了 CI bot 会自动 merge 的……&%¥%……

好了,该回家了。白手套先生和白口罩小姐,春天快乐!

七手八脚的写诗

一个人是怎么样开始写诗的?在工厂里打着工,突然就开始写诗了,突然就自杀了。我想诗是情绪和感觉的完美出口。一个灵魂不受拘束的世界。一种很容易就实现完美、精巧和纯粹的东西。在这个世界里活得辛苦,就去另一个世界。

更重要的是,写诗好快乐。像是落在奇思妙想蹦床上。像是突然多长了几只手几只脚,可以「七手八脚」的走路和说话。对于地球,我顶多可以写一句「今年地球转得也太快了」,而其他人却可以写出:

  • 地球吓了一跳 / 死了十几万个细胞
  • 绕了一圈 / 我悲哀地发现 / 我终究还是 / 逃不出这地球
  • 何以这晚之后 / 我竟想去习武保护地球

如果不管好坏的话,写诗的快乐可以和涂鸦、画漫画、制作梗图、和陌生人聊得投机后相忘江湖并列。

2022 年总结

今年地球转得也太快了。听同事说,开始工作以后,地球转速加快是正常现象,结了婚和有孩子后还会有额外加成。考虑到地球转速问题,我想这份总结不宜再拖下去。

一月开始了第一份工作。找工作时还希望可以去办公室呆一呆,后来就变得越来越懒,一周只去一两天。三月初侥幸离开上海,更是在家呆了半年才回来。工作上倒也得心应手,只是工作之外有太多的事情想做——但没有足够的时间和精力。这渐渐变成我最大的困扰。

我不是精力旺盛的人。无论去不去公司,工作之外挤出的时间常常都是疲惫不堪的浑水。在这少得可怜又困倦的时间里,经常纠结该做些什么。要看这本书吗?还是那个电影?写书?做开源项目?最后多半躺在床上听歌玩手机,至多做些明天的规划。

听到一首歌唱:

如果继续这样 / 我还是我吗 / 我还喜欢我吗
或者我应该死去吧 / 总好过变得更差

又听到另一首歌唱:

I don’t want to live like this
But I don’t want to die

音乐也许是解药(不,早起才是)。从张玮玮的演出回来后,有了继续学吉他的念头。十年过去了,是时候开始文艺复兴了吧!买来吉他练习一阵后,想起高中随吉他一起卖掉的那本李志野孩子吉他谱。因为李志被封杀,导致那本吉他谱已经买不到。厚着脸皮翻出十年前的豆邮,问买家能不能把那本吉他谱卖回给我。目前还没有收到回信。

去年开始不再完整记录时间花销,但也有 1815 小时,今年只有 512 个小时(6%)。

blank

在开源项目上投入的时间比写书多了一倍。除了发布 APIFlask 1.0 和 Bootstrap-Flask 2.0,也给 Flask 实现了几个小功能:

  • 给 flask run 命令添加 –debug 选项(#4779
  • 允许视图函数返回列表作为 JSON 响应(#4672

虽然书没写完,倒是更新了《Flask 入门教程》第三版

做了两个演讲,一个是在 COSCon 2022 做的闪电演讲(实际是开源集市的路演,不过摆摊比演讲有意思,还能认识新朋友);另一个是在 Python Meetup 做的关于 Python 和 OpenAPI 的分享(实际是炒冷饭,不过有额外加料)。没记录时间的还有一个在公司做的关于 Python 编程规范的分享,以此还在年底拿到了「2022 年度新秀奖」。

明年会更少记录时间,比如娱乐活动分类就已经存档——开心很重要,不再追究时间了。

这一年因为开始上班而过得平淡乏味,没有太多东西可以总结。仔细回想也有一些有意思的事情,比如工作上发生的各种事情,比如代码厨房俱乐部。打算在另外的文章来写,这里就不展开了。

今年的疫情对我没有什么大的影响。上海为了科学防疫而封城时我躲在老家,农村因为科学放开而瘟疫蔓延时我躲在上海。唯一的影响只有愤怒。因为各种所谓防疫导致的伤害、不公和死亡,还有各种愚蠢言论而愤怒。当然,最后除了骂傻屄,已经没有什么想说。

明年只设一个目标:

希望明年可以多过一些离线生活。希望写完书可以好好放松,好好浪费时间。

P.S. 本文中的「今年」指 2022 年,「明年」指 2023 年。

每年回家都会去看一眼邻村村委会的灯牌。从它第一次灭灯开始,我就期待有一天能拍到「忘记使命」。可是这灯牌太聪明,始终不让我的阴谋得逞——去年在我逐渐得意时,直接从「忘牢记使命」灭成了「忘使命」。今年再一看,已经只剩下「忘」。想起年末网易新闻的年度总结视频被封禁,它仿佛也心领神会,昭示着今年不能记住,只许忘却。

blank

晒得到太阳的房子

搬到了一个能晒到太阳的房子,就在森林(公园)旁边。晚上十二点多还能听到一班火车慢悠悠驶过的声音。

房子在马路边的顶楼。终于能够在房间里自由走动,也有风景可看,不用再面对一整面楼 6*N 扇窗户、担心会不会有人在看我。没有人看见我多好。以前走在田地里的时候,即使看不到一个人,仍然幻想能在春天的麦地里建造一个用单向玻璃围起来、没有屋顶的房子。我能看到周围的一切,没人能看见我。

只是顶楼有些冷,像是从南方搬到了北方。睡觉时甚至感觉有冷风在吹,伸手摸得到。好在白天可以晒到太阳,扯平了。于是,来上海之后第一次晒了被子,第一次晒着太阳午睡。在上一个房子里,只能在一天的某个特定时段,站在阳台的特定位置,在远处大楼「就可怜可怜你吧」的眼神下,晒一晒心事。

再见了,五角场的街坊邻居们。

早起是唯一出路

今年一直处于被工作、写书和开源项目这三件事情拉扯的状态。这个月底是手里第二本书合同上的截稿时间,但我第一本还没完成。

想起史蒂芬金在《写作这回事》里说,写作最关键的东西是一扇你心甘情愿关上的门。最近逐渐平静下来,门也关上了。但是发现只关上门还不够,每天晚上要么又累又困,要么只想做些划拉鼠标和手机这种体力活。最终一晚一晚在焦虑中看着时间流逝。在一年还剩下十天的当下,我突然醒悟:早起才是唯一出路!

早起的鸟儿有虫吃,早起的鸟儿能写书。明天早上开始,七点半起床。