我的 2019 PyCon China 小结(下)

2019 年 9 月 20 号下午。

出租车正驶向兴荣温德姆酒店。Adam 发微信说他到了,正准备去买杯星巴克。我说帮我带瓶水吧。Manjusaka 也要一瓶。laixintao 回了句“哪里”。

这一天终于到了。

《捕蛇者说》特别篇

还不到三点,我们四人已齐聚酒店,因为要录制《捕蛇者说》特别篇。特别在哪?以往我们都是线上录制,连着 Skype 对着屏幕聊天,而这是第一次在线下录。我们四人分坐在宾馆的两张床上,中间立着手机支架,录制就这么开始了。当面聊天就是爽!以往的各种抢话冷场统统不见,一切都无比流畅。除开音效不谈,我认为这是《捕蛇者说》目前为止听感最好的一期。

晚宴

PyCon 每年都有讲师晚宴,非讲师想参加需要买票。晚宴环境不错,有很多舒服的座椅和沙发,灯光也恰到好处,整个氛围非常适合聊天。食物以小点心为主。

于是大家三五成群各聊各的。我先是趁乱摸到 Luciano 身边打了个招呼,之后和 PSF 的 Noah Chen 聊了很多关于 PyCon 组织的话题。他很推崇 Euro PyCon 那种统合多个国家的大会,并且我们都认为 PyCon China 应该每年集中在一个城市举办。

接下来 Manjusaka 组织大家做自我介绍。上台的有工业界大佬,有开源大佬,有 Python core dev,有插件大佬,还有公众号大佬。道理我都懂,但是大佬为什么这么大?作为搬砖的蒟蒻只能在一旁瑟瑟发抖。

之后是自由聊天时间。我和 Giampaolo(以下简称 Paul) 寒暄了一会儿,听谭啸介绍了他用 Python 写的渲染器。laixintao 叫来小明,作为 Typlog 的作者和用户,我们自然聊起了播客制作。随后我和翔哥、Noah 一起吐槽了以前 PyCon China 质量低下的 talk。此时人已不多,于是翔哥、Paul、我、佳圆及其女友一起去吃宵夜。 Paul 对 Google 很有兴趣,问了我不少问题,至于杂七杂八的闲聊我记不住了。

回到酒店,已然累得够呛。然而我担心现场网络不好影响演示,遂决定提前去踩点。此时已过 11 点,酒店二楼却是一片忙碌。为了第二天的大会,志愿者们正在加班加点布置会场。他们并非不想提前准备,无奈前一天有其它活动,而酒店只允许在九点以后入场。我跟在 AWS 的讲师后面从头播放了一遍 slide,感觉问题不大,也就放心了。

Day 1

Day 1 以演讲为主。《参加 PyCon China 2019 上海站是怎样的体验?》已经把演讲介绍得差不多了,所以我不再赘述。我就讲讲自己的见闻。

嘉宾采访

距离 PyCon 开始还有几天,组织者找到我,希望我能负责一些讲师的采访。采访是今年的新环节,我觉得很有意思就答应了。我要采访的讲师包括:Elizaveta、张佳圆、Paul 和 thautwarm(红姐)。

首先采访的是红姐。我趁赞助商 talk 把他拉到走廊,结果摄像大哥的要求变来变去,录了四遍才算完。接下来采访 Paul。Paul 是外国人,因此摄像要求我翻译他的每个回答,这就很有挑战性了。要记住一大段话着实不容易,我只能靠意译蒙混过关,磕磕绊绊勉强完成。这时佳圆过来,我们是老熟人所以很顺利地就采访完了。

Elizaveta 的采访是下午做的。这是一次真·现场采访,我和她都没有提前准备。好在我已驾轻就熟,把上午的问题拿来又问了一遍,加上几个关于 JetBrains 的问题,凑了一场采访。

视频应该过一阵就会发布。我是真的不想出镜啊😭

我的演讲

这我第二次在 PyCon China 上演讲,上一次还要追溯到五年前,参见 PyCon2014 China:concurrent.futures 研究。凡是演讲过的人都知道,不管之前准备得多充分,slide 总是会改到最后一刻。就比如我前一天晚上躺在床上有了些想法,第二天六点就爬起来改。在会场我也没法专心听 talk,而是神经质地一遍遍过 slide 和改备注。由于各种因素,上午的演讲延迟了不少,Armin 上台已是 11:20——按原计划此时都该轮到我了。我虽不紧张,却有些焦躁,主要是担心听众离场去吃午饭。

Armin 讲完,总算该我了。上台前 Manjusaka 提醒我尽可能加快语速,不要超时(40 min),我说没问题,我按 30 min 准备的。然后就是连上电脑,开讲。演讲中有和观众互动的地方,第一个是开场感谢志愿者,第二个是水豚测试。听众不知道的是,水豚的几页 slide 我真的是字斟句酌,反复修改了不知道多少遍。我希望观众看到“文件名是什么?”这个问题时恍然大悟,而不是感觉被耍。由于太过不确定,前一天我和同学吃饭的时候还专门给她演示了那几页,结果同学的评价非常微妙:“像脑筋急转弯”。显然,“像脑筋急转弯”同时包含之前提到的两种意味,她也不确定哪种更多。最后我只好硬着头皮上了。

幸运的是,水豚一出直接炸场,观众对提问的反应出乎意料地好。我总算是舒了一口气。

之后和一些听众进行了交流。我发现做机器学习的同学普遍对调试工具不满意。虽然我本身不搞机器学习,但这确实是 Cyberbrain 可以做的一个点,毕竟 Python 在这方面用得非常多。

展台

感谢主办方,让《捕蛇者说》有了一个展台。

二楼和三楼都有展台,我们在三楼,旁边是图灵出版社。见下图:

我的演讲是上午最后一场,随后我就去到展台。陆陆续续地有人过来盖章和拿贴纸,我也不遗余力地宣传着捕蛇者说(P.S. 组织方通过盖章鼓励参会者去展台的做法很聪明)。听说过和没听说过我们的人大概37开,然而有些人对播客毫无概念,所以我只能先科普。一小时下来,大概的确让更多人知道了我们。

让我高兴的是见到了几位老听众,比如从第一期就开始听的齐不胜,他也是从我们节目得知 PyCon 的。详细聊了聊,没想到他已关注我博客很多年,而且居然曾经通过 My_Blog 项目学习 Django。自己写的文章和代码能影响他人,之前我从未对这件事有实感,而现在被亲口告知,不禁让我惶恐起来。齐不胜还说他看见我的上一篇文章之后,便让想来的同学联系我取走了赠票(他自己已买票)。我实在没想到会被这样关注,赶紧加个微信。

之后便去吃饭,一路和平安金融的同学聊天。

其它

与会间隙基本都在和人聊天。由于演讲内容相近,我和 Elizaveta 聊得比较多。Armin 一直在旁边,不过我们全程扯淡没聊技术话题,只记得他表示上海比他预期的干净很多。后来 MaskRay(宋教授) 也过来发表了一些关于调试的看法。

说到 MaskRay,他其实是被我拉来参会的。前几天我回上海 office 看老同事,不知怎么他就坐在旁边。一开始没认出来,因为我的概念里他应该在美国,然而这是有缘由的,这里就不多讲了。总之我那天吹了一波 Cyberbrain,给了他一张赠票,还介绍了红姐的 JIT。我是有心要介绍宋教授和红姐认识的,毕竟他们都是我非常敬仰的大牛,也都对编程语言有一定研究。和红姐聊完之后宋教授表示:

可以说是非常有意义了:)

吃饭

去年 PyCon 北京结束后,我、翔哥、红姐、信涛、messense 一起去吃晚饭。正是在那顿饭上,我第一次和人提起变量溯源的想法。如今时光飞逝,当时粗略的想法已成为 Cyberbrain,而 PyCon 也来到了 2019。自然,我们还是要聚一下。

今年又加入了新的小伙伴。首先自然是捕蛇者说的另两位主播,然后是宋教授以及佳圆。本来去年我们就叫了 Manjusaka,然而他在会场脱不开身。今年他说实在不想错过,就来了。

和朋友们畅谈的感觉真好,时间一下子就过去了。一想到明年不能回国,我心里就充满了悲伤。555,为什么不能多来几次 PyCon 。゚(゚´ω`゚)゚。

CMGS 来访

意外中的意外发生了,CMGS 大佬突访酒店,我赶紧下楼迎接。结果 CMGS 和 Manjusaka 直接攀谈起来。卧槽,你们居然认识??他们聊到了好多人,我一个都不认识。只能说大佬不愧是大佬,人脉太广了。

后来我们又去了 lepture 宽敞的大套房,而 CMGS 和 lepture 也很熟这件事已经完全不令我感到惊讶了。。。

Day 2

第二天是轻松的一天,因为我只有 Luciano 的 tutorial 要听。他讲的是 OOP,结果上来第一个例子我就不知道。原来对数字可以这样调用 magic methods??

1 .__add__  # 注意那个空格

别的倒是基本都了解。Luciano 推荐了一本书《An Introduction to Object-Oriented Programming》,他说这本书是少有的不针对特定语言的 OOP 教材,只讲 OOP 最根本的原理。我已经下单。Luciano 还推荐使用 composition,这当然并不新鲜,但是他讲到可以用 __getattr__ 自动把属性访问重定向到包含的 object 上,而这也是我经常使用的技巧。

在讲到 ___ 作为 attribute 前缀的区别时,Luciano 的说法和 Raymond Hettinger 几年前的 talk 不同。我提出了这一点,Luciano 表示,Raymond 的说法是对的,但是更好的做法是不继承非 abstract 的类,从而完全避免 override 造成的问题。我认为理想情况下 Luciano 是对的,但在实际编程中难免会遇到需要继承 concrete 类的情况,这时 Raymond 的建议(即用 __ 避免子类错误地覆盖父类中的方法)还是有用的。

下课之后我给 Luciano 推荐了 pdir2,我知道他一定会喜欢。果不其然, Luciano 一套 watch, star, fork 三连,搞得我有点慌。今天一看,他已经带来几十个 star。这就是大佬的影响力啊。

下午和红姐讨论了 Cyberbrain 可能的改进。红姐终于正式表态要加入了(P.S. 项目仍然非常需要对可视化感兴趣的同学)。我们着重探讨了如何实现更精确的变量追踪。

a, _ = x, y

比如上面这行代码,目前 Cyberbrain 基于简单的判断认为 a 的值与 x、y 都有关,然而实际上 y 是无关的,也不应该被溯源。我们希望从字节码层面入手改进,红姐提出了大致思路,我们会在未来一段时间看看可不可行。

之后我和组织者们打了个招呼,就离开了酒店。特别感谢张晋涛送的巧克力。

总结

两天半的活动,见了太多人,说了太多话,整个人都恍惚了。然而不论多累,我都是快乐的,能和这么多人聊这么多有趣的话题,实在是太棒了。整个过程中,既见到不少老朋友,也认识了很多新朋友,可谓收获满满。

我想通过这篇文章,将这份回忆珍藏下来。我爱 PyCon,我真的不舍得离开。

我的 2019 PyCon China 小结(上)

坐在从上海开往北京的高铁上,我开始敲这篇文章。

Kenneth Reitz 曾经说,他的一年是按 PyCon 计算的。尽管围绕他有很多争议,这句话依然让我有了奇妙的共鸣。对他来说,"PyCon"自然是指 PyCon US,而对我来说,则是 PyCon China。

2013 年是我第一次参加 PyCon。虽然 Google Drive 里还存着当年的 slide,然而关于大会,我仅存的记忆就是有讲师给了一个中国版的 Python Epiphanies talk,并且有一个很厉害的提问者和讲师讨论了一些我似懂非懂的概念。

2014 就不同了。作为一个萌新,我尝试报名了演讲,居然通过了(当时还不知道其实每年讲师都很缺)。于是我就对着文档讲了一下 concurrent.futures。当时为了准备演讲我曾发邮件给作者 Brian,结果今年 PyCon US 见到他了,还以同事的身份聊了几句。只能说缘分真的很奇妙。

15、16 两年体验基本没变。一个人去会场,拿纪念品,听讲,离开。虽然 16 年遇到了一个师兄,但除此之外并无可以攀谈的人。17 年情况特殊。由于我不太认同组织方的一些理念,所以并没有参加,而那年似乎也是 PyCon China 口碑跌倒谷底的一年(据我观察从 13 ~ 17 口碑是逐年走低的),以至于人们都懒得评价了。

正所谓否极泰来,17 年的低谷也孕育了希望。由于 PyCon 北京缺席,一些小伙伴自发筹备了一个小型线下聚会。这次聚会的组织者中,就有后来 PyCon China 2018/19 的组织者,同时也是我的好朋友,Manjusaka。

从 2018 年开始,我和他在网上渐渐熟络起来。以我片面的视角来看,Manjusaka 正是让 PyCon China 涅槃重生的关键人物。当然,其它组织者同样付出了很多,比如统筹全局的辛老师。Manjusaka 经常找我吐槽,比如办 PyCon 亏了巨多钱,视频录制方不肯给视频,又比如在北京办活动还需要额外交一笔安全费,等等等等,让我深感办活动之不易。面对如此多的困难,PyCon China 2018 出人意料地交出了一份漂亮的答卷。如果你浏览《参加北京 PyCon2014 是怎么样的体验?》和《参加 PyCon China 2018 北京场是怎么样的体验?》下面的回答,就会发现观众评价的巨大反差:14 年是一边倒的差评,18 年则是一边倒的好评。最有意思的是,gashero 两次都作为讲师出席,却给出了截然不同的评价(1, 2),从侧面证明了 PyCon 在组织方面的巨大进步。

总之 PyCon China 2018 大获成功,一举逆转了之前崩坏的口碑。大会之前几个月 Manjusaka 问我想不想演讲,然而我并没有什么好主题,就婉拒了。在现场 Manjusaka 又问我明年要不要讲。看到大会办得这么成功,我一激动就答应了(其实是因为拿了他的票不好意思XD)。

PyCon 结束后的半年我无暇他顾,一方面是工作和申请 promote,另一方面是找组和 transfer。等我 3 月份搬入 Irvine office 附近的公寓,一切才算告一段落,而我也终于可以静下心来思考之前的承诺。

其实,关于要讲什么我并非没有头绪。我从 17 年就有一个想法,这个想法来源于我在公司重构别人写的 Python 代码时的糟糕体验——那种面对十个参数和跳来跳去的调用时一脸懵逼的感觉我至今记忆犹新。当时我就想,如果有工具能直接告诉我这个程序是怎么运行的,那该多好啊。随后我把这个想法细化为“实现变量溯源”。然而它也只是个想法,我甚至都没告诉过别人,因为我完全不知道要怎么去实现,能不能实现。18 年 PyCon 上我认识了红姐,他是我这辈子第一个(也是目前唯一一个)能说上话的 PLT 圈内人。我和他稍微说了一下想做的东西,他说可以分析所有 import 的AST,通过 AST 找到每个变量的作用域,从目标变量开始递归。我试着依照这个思路去实现,然而当时有很多问题没想清楚,代码越弄越复杂,距离目标反而越来越远,加上要忙 transfer,只能暂时搁置。

今年 5 月份,就在我启程去 PyCon US 之前,我突然有了些新的想法。之前的思路是对程序进行预处理,相当于要做完整的静态分析,这太复杂了。为什么我们不能在 runtime 收集一些信息呢?比如每一行做一个快照保存当时的状态,这样既有了每个时刻的状态,又有了状态间的顺序,对比一下相邻状态不就知道发生了什么吗?我很兴奋,觉得似乎可行。带着这个想法,我在 PyCon US 和一些人进行了交流,比如贵司做 Python 工具链的同事,讲 debugger 原理的讲师 Liran Haimovitch。Liran 建议我在字节码层面做,因为他觉得字节码比 AST 更稳定。不过我还是决定先按自己的来。于是我在 PyCon US sprints 上敲下了新思路的第一行代码。对,虽然我没报名 sprints,但是我去待了半天,并且幸运地找到了一个没人的会议室。

接下来几个月就是紧张地工作了。我几乎投入了全部业余时间,终于赶在 PyCon 之前几周弄出了一个可演示的版本。这期间的某一个时刻,我感觉自己有 95% 的把握了,于是便正式报名成为 PyCon China 2019 上海场讲师。Slide 也花了不少心血,我还在组里试讲了一次,但与项目一比则可以忽略不计——毕竟 Cyberbrain 是我程序员生涯到目前为止遇到过的最大挑战。它不像 Web 项目,搜一搜总能找到答案。这是前人没有做过的东西,每一行代码每一个决定都存在不确定性,每一个不合理的设计都可能导致项目失败,所以我必须万分小心。这期间,我无数次痛苦地思考,无数次推翻之前的想法,也无数次想过放弃。然而在红姐,信涛,翔哥等小伙伴的帮助下,最终还是硬搞出来了。也许现在的代码之后都要推翻重写,但它让我确定了这个想法的可行性,这是最重要的。

于是,我踏上了回国的飞机,正式奔赴上海。(待续)

我的 2019 PyCon China 小结(下)

送 PyCon 门票啦

Update:已经送出。

我手上有一张 PyCon 上海(2019-09-21)的赠票,想要的话请通过任意方式告诉我,先到先得。具体参见

PyCon2019 中国Python开发者大会- 上海站

今年 PyCon China 大佬云集,不容错过。

P.S. 如果你想要门票,我希望是你本人去参加,而不是拿了送人。


top