欢迎填写 Flask 用户调查问卷

以参加捕蛇者说播客录制 Ep 30 为契机,创建了一个 Flask 用户调查问卷,用来收集 Flask 用户的反馈和建议。尽管这个问卷是由我个人而不是 Flask 官方(Pallets)发起(不过 Flask 官方也在计划着做一个调查问卷),但是我会把收集到的信息反馈到 Flask 开发团队进行讨论。因此,你的建议的确有可能让 Flask 变得更好。 [...] 

欢迎来 GOTC 大会听我的演讲

GOTC(The Global Opensource Technology Conference,全球开源技术峰会)是由开源中国(OSCHINA)和 Linux 软件基金会(The Linux Foundation)联合主办的开源技术大会。上海站(上海世博中心 SECC)在 7 月 9 日 ~ 7 月 10 日举办;深圳站(深圳会展中心)在 7 月 31 日 ~ 8 月 1 日举办。大会邀请到很多非常厉害的开发者,比如 Linus Torvalds。两个会场均免费开放,仅需报名即可。欢迎参加!

我的演讲主题是《基于 Python 的 OpenAPI 实践》,介绍如下:

OpenAPI(原 Swagger)是一个流行的 REST API 描述规范,围绕它有许多非常实用的 Web API 开发工具。而 Python 是一门流行的编程语言,使用它可以非常高效地开发 Web API。这个议题将会以 OpenAPI 的入门介绍开始,探索如何在流行的 Python Web 框架中实现 OpenAPI 支持,并在最后介绍一些现有的解决方案和工具。

这个演讲基本上是正在写的《Python Web API 设计与开发》第八章的内容概括 + 开发 APIFlask 的一些想法 + 周边项目(FastAPIConnexion 等)研究总结。暂定大纲为:

  • OpenAPI 介绍
  • Code-first 模式(从 Python Web 框架代码生成 OpenAPI spec)
  • Design/API-first 模式(从 OpenAPI spec 生成 Python Web 框架基础代码)

我的演讲在深圳站第一天分会场「编程语言艺术」专题论坛。如果你感兴趣的话,欢迎来听;如果对演讲内容有任何建议,欢迎提出。

中场休息

今天在捕蛇者说录制了第一个播客,聊得很开心,虽然有时不知道自己在说什么……一开始还有点紧张,感觉像是在进行一场面试,而且一次来了四个面试官(大概是因为我已经很久没有这样跟别人聊过天了)。这次节目也让我偶尔想象做一个自己的播客,它大概会叫做「真实人类计划」,专门随机采访各种陌生人(尤其是活得不开心的那些人)。经过这一阵疲惫之后,刚好一年过半,是时候来一个中场休息了。 [...] 

PyCon US 2021: FastAPI Seems Good, so Why Don’t We Build Something Similar For Flask?

Meta:

这是我第一次参加 PyCon US,也是第一次做英文演讲。也许会有一些语法和发音的问题,不过因为时间有限,我已经尽力了……这次开始准备的比较晚,演讲基本是在三天内完成的,演讲前一天花了一整天时间准备,从早上一直到第二天两点。总耗时 18 小时 41 分钟。相比之下,同样是五分钟的闪电演讲,在 PyCon China 2019 上海场的闪电演讲《Python 虚拟环境和依赖管理工具大乱斗》却花费了接近 40 个小时(大部分时间都用来做幻灯片了)。

这个演讲本来是一个比较深入的主题演讲,不过因为主题演讲申请惨遭淘汰,只好换成闪电演讲。演讲灵感来自前段时间的那篇《请不要把 Flask 和 FastAPI 放到一起比较》。

尽管是预录制演讲,但是不知道主办方哪里没弄好,实际大会直播的时候音画不同步,卡顿很严重(见官方发布的演讲视频)。

2020 年总结

2021 年已经过去四个月了,每次到某个重要的时间节点都想完成这篇 2020 年总结,结果总是有各种事情挤占时间,所以错过了元旦、错过了大年初一、错过了 26 岁生日、错过了植树节和愚人节,最后来到这一天。 [...] 

APIFlask:一个基于 Flask 的 Web API 框架

经常看到有人把 FastAPI 和 Flask 放到一起比较,但是却没有意识到这完全是两种东西——前者是基于 Web 框架 Starlette 添加了 Web API 功能支持的(框架之上的)框架,而后者是和 Starlette 同类的通用 Web 框架。你怎么能让小明和骑电动车的小军赛跑然后还夸小军好快好强?为了让框架 PK 爱好者们有一个更公平的比较对象,从一份 APIFairy 0.6.2 版本的 fork 开始,我实现了一个基于 Flask 的 Web API 框架——APIFlask [...] 

组织「编程一小时」活动失败记

编程一小时(Hour of Code)」是由非盈利组织 Code.org 发起的公益活动,会在每年十二月初举办(计算机科学教育周)。简单来说,类似「地球一小时」活动,「编程一小时」活动就是在中小学引导学生们学习编程一小时。使用的材料大都是一些图形化的编程游戏(比如《我的世界》编程一小时教程),在游戏里使用类似 Scratch 的拖拽式编程逻辑块来操纵游戏中的人物做各种事情。

中国的「编程一小时」活动主要由微软和苹果这些大公司发起和主办。月初的时候,微软 MVP 项目组开始召集 MVP 做活动的讲师。南京有好几个学校需要讲师,但是我已经不在南京了,所以就想着在当地(徐州某县级市某镇某村)的中小学组织一次。在网上找了一些往年的活动记录,发现也有在农村组织的,想着应该没什么问题。

先是给高中的老师发了消息,没回;然后去村里的小学找校长,爬了三层楼没找到校长室,找到校长的电话打过去,校长说电脑坏了;发消息给初中的老师,老师说他们学校没有电脑;去了乡里的小学,门卫大叔说校长刚走;趁还没放学,我又赶到邻村的小学,老师告诉我要有教育局的通知才行。

「你好,我是微软的社区专家,想在你们学校举办一场免费的编程科普公益活动,叫做编程一小时。微软会提供相关的物料,我来做讲师,你们只要提供计算机教室和组织学生就可以了。」——听起来的确有些像骗子,也许对方以为我是要来推销少儿右脑开发心算术或是人工智能 5G 学习机。按理说我应该在这里就放弃了,但是我有点不甘心。尽管已经有 3 小时 48 分钟的沉没成本,我还是打算再试一下。

第二天,我花了五十分钟车程到达教育局,但是没到五分钟就出来了——没成想连教育局的门都进不去。教育局门卫室的保安问我找谁,我说:「我是……我来……」。保安又问:「你到底要找谁?要去哪个科室?」。我说:「我想来咨询一下关于进学校做免费编程培训的许可问题」。保安说:「没有这个科室,你想去哪个学校直接去找学校谈」。我说学校让我来找教育局,保安说来教育局没用得去找学校。在来回进行了几遍类似的对话后,保安有点生气,气冲冲地说「你这个人年纪轻轻怎么听不懂话呢!」。我也有点生气,但也只能气冲冲说句「好,谢谢!」。

既然到了市里,就想着再碰碰运气,所以紧接着我又去了市里最好的初中。这所初中的北门离公交站近,所以先去了北门。门卫师傅说校长室在南门,办事都走南门。因为校园不让进,所以我只能绕墙去南门(两门相距 530 米)。到了南门后,门卫师傅说校长不在,去开会了。我说那我找年级主任也行,师傅问我找哪一个年级主任……沟通(扯皮)半天后终于让我进了门卫室,让我等等看,说校长兴许一会儿来。一阵沉默。沉默之后我多介绍了一下自己,拿出来更多的宣传材料。门卫师傅指着玻璃桌面下的某个电话,让我打到校长室试一试,没人接。又是一段沉默。接着我又详细介绍了自己要做的事情。师傅提议让我去找副校长,副校长室在北门八号楼五楼,让我去北门。于是我绕墙回到北门,北门师傅问我找哪一位副校长?打过电话没有?预约了吗?我说南门师傅让我走北门找副校长,北门师傅说办事都走南门,没有预约校园不给外人进,让我走南门。如此重复几遍,直到师傅不耐烦了,我又绕墙回到南门。和南门师傅说着说着,师傅又指了桌面下某位副校长的手机让我打,打不通。继续沉默,沉默是今晚的南京市长江大桥。过了一会儿师傅又翻出另一本电话簿,找到校长的手机让我打,依然没人接。我看了看崭新的教学楼,告别门卫师傅,再绕墙走回北门,准备坐公交车离开这冰冷的城市。不幸的是,因为太晚了,回乡下的公交车已经没了,我只好斥巨资打车回家。

第三天一早我试着加上了副校长的微信,这是我离成功最近的一次。我们聊得很顺利,直到校长告诉我他们新教学楼刚建成,学校计算机教室还没装配……擦干眼泪,我又去了乡里的小学,上次去校长刚走,这次去校长刚好在门卫室。我听到了熟悉的答案:「这个活动挺好,不过校外的培训要有教育局的批准才能做,你得去教育局申请」。至此,耗时 7 小时 54 分的「编程一小时」活动策划正式宣告失败。

本来还想着也许会让某个小朋友喜欢上编程,若干年后他在写职业生涯回忆录的时候可能还会提到我——「走上这条路是因为小时候某一天不知道从哪里来了一个人在我们学校上了一堂编程启蒙课……」。现在也好,万一他以后因为做程序员得了颈椎病和脱发,可能还要怪到我头上呢。