PyGotham 2019 随笔
概览
上周末,PyGotham邀请我参加他们在曼哈顿举办的年度大会并发表演讲。为了尽可能从这次活动中获益,我整理了笔记,记录自己参加活动时学到的东西。分享出来,希望对其他人也有趣或有用。

评分与点评
| 大会属性 | 评分 |
|---|---|
| 演讲质量 | C |
| 活动顺畅度 | A |
| 场地 | A |
| 我对自己演讲的感受 | B |
演讲质量
我对今年演讲的总体质量有些失望。有几场我很喜欢(见下文),但有很多场都没有达到我的预期。
部分问题在于,我本来就不是目标受众。今年有很多场机器学习演讲,我觉得机器学习很有意思,但我的工作用不到它,所以入门级机器学习演讲我已经看够了。
活动顺畅度
要为 PyGotham 的组织者点赞,他们把活动办得像一台运转良好的机器。作为演讲者,我总能在需要的时候获得所有信息。我看过的每场演讲,其音视频设备都运行良好。一切都按时进行。食物美味而且分量充足,不过碳水化合物稍微多了点。
场地
宾夕法尼亚酒店是举办大会的绝佳场地。这里有三个舞台,座位足够多,我从来不会觉得拥挤,也不用担心想看的演讲没有位置。各个房间彼此距离很近,方便在不同演讲之间移动;走廊里也有足够空间,可以和其他参会者交流。
我对自己演讲的感受
见下文的“点评我的演讲”。
最喜欢的演讲
在一切腐烂殆尽之前归档互联网
演讲者:来自 Monadical 的 Nick Sweeting(尼克·斯威廷)
我以前从没意识到,围绕网页归档有着如此庞大的社区,他们的工具也已经如此成熟。Nick 指出,我们丢失集中式数据存储库的情况非常普遍。亚历山大图书馆这样的古代典籍如此,Geocities 和 Tumblr 这样的数字信息也是如此。普通人拥有归档和保存自己副本的工具时,这些存储库才能存续下来。
Nick 介绍了各种可用于归档网页的工具,并带我们了解了致力于互联网归档的不同组织和在线社区。这些工具的成熟度超出了我的预期,其中有好几种甚至可以归档单页应用(SPA):这类应用会通过大量 JavaScript 和 RPC 动态生成 HTML。常用工具中甚至也提供了强大的归档功能。
Nick 展示了下面这条 wget 命令,它会完整下载单个网页,包括所有 JavaScript、CSS 和图片:
wget \
--no-verbose \
--adjust-extension \
--convert-links \
--force-directories \
--backup-converted \
--span-hosts \
--no-parent \
-e robots=off \
--restrict-file-names=windows \
--timeout=60 \
--warc-file=archive.warc \
--page-requisites \
--user-agent="Lalala this is chrome I promise..." \
--load-cookies="mycookies.txt" \
--compression=auto \
--no-check-certificate \
--no-hsts \
"https://2019.pygotham.org"--compression=auto 标志,因为你的 wget 版本不支持它。其他我喜欢的内容:
- Nick 分享了 kiwix,这是一个我之前不了解的项目。他们提供 Wikipedia 和 StackOverflow 等大型内容网站的离线副本,你可以在本地运行。
- Nick 维护着归档资源和社区目录。
当维护 Python 项目不是你的本职工作时
演讲者:Hynek Schlawack(海内克·施拉瓦克)
Hynek 维护着几个很受欢迎的开源项目(attrs、structlog),而且只有有限的时间来审查外部 pull request。他使用自动化工具来减少审查所需的时间,并帮助第三方贡献者自行找出 bug。这与我的代码审查第一原则非常契合:让计算机去做无聊的部分。
Hynek 是一位有趣而活泼的演讲者。他用一句玩笑开场:“大家好,我是 Hynek,你不知道自己有这么一位欧洲朋友。”这为整场演讲定下了基调:内容会很有趣,有时还会带点调侃意味。
其他我喜欢的内容:
- 他介绍了几个我以前不知道的工具:
- isort:对 Python import 语句排序。
- 我把它添加到了我的 Python3 样板项目中。
- 这个工具的不足在于,它只有两种模式:“自动修复”(这不是我想要的构建检查方式),或者“给出一条没有帮助的失败消息”。
- Black:格式化 Python 代码中的空白。
- 挺有意思,但相比我偏好的格式化工具 yapf,它似乎没有带来任何实质性的改进。
- tox:在不同的虚拟环境中运行 Python 测试脚本。
- 我记得大约五年前用过 tox,但当时我是把它当作在单元测试中模拟行为的工具。如今这个项目已经完全不同了,所以我不知道是 mock 进入标准库后它改变了方向,还是我自己搞混了。
- 总之,它看起来挺不错。我还没创建过需要在多个 Python 环境中运行的项目,但把它留在工具箱里总没坏处。
- isort:对 Python import 语句排序。
- 我喜欢 Hynek 的pull request 检查清单示例和贡献者文档。
- 我以前从没见过有人为自己的演讲制作公开的文字提纲,但Hynek 的提纲很有帮助。
让你异步起来,成就美好未来!
演讲者:来自 Nexmo 的 Mark Smith(马克·史密斯)
Mark 介绍了 Python 的 asyncio 模块,这是用于编写并发代码的 Python 库。他解释说,自己是通过构建一个名为 mysyncio 的简化版本,弄清楚这个库的工作原理的。
Mark 只用了这么少的代码,就重新实现了 asyncio 如此多的功能,这让我印象深刻。他的实现跳过了真正 asyncio 模块的一些关键特性,尤其是线程安全和异常处理,但实现了 asyncio 的核心功能。并发编程通常很难理解,因此看到 Mark 这个去除魔法的库版本后,我觉得 asyncio 直观多了。
点评我的演讲
演讲者:Michael Lynch(迈克尔·林奇,我本人)
我对自己的演讲感觉不错。我对准备程度很满意(完整演练了 5 到 7 遍),不过我希望自己能早点开始排练,而不是拖延到大会那一周才开始。
在 PyTexas 演讲之后,我给自己的改进建议是说慢一点,不要总低头看笔记本电脑。我觉得在 PyGotham 上,我太专注于保持缓慢的语速,结果语调听起来很平,仿佛连我自己都已经对演讲内容感到厌倦。前 5 到 10 分钟之后有所改善,但今后演讲时我想提醒自己,要记得在表达中投入情感。
我犯的最大错误,是使用 Google Slides 的“演讲者视图”来投影演讲,而不是镜像屏幕。我以为屏幕上的计时器能帮助我把握节奏,却忘了它会让我看不到自己的幻灯片。我对幻灯片足够熟悉,仅凭演讲者视图中的小缩略图也能讲出大部分内容,但有几次我不得不转身背对观众,看着屏幕读取文字。
做得好的地方
- 我对所讲的内容很熟悉。
- 我成功放慢了语速,并把注意力保持在观众身上。
需要改进的地方
- 记得镜像笔记本电脑的显示画面,而不是使用“演讲者视图”进行演示。
- 说得慢不代表语调要平。能参加这些大会让我感到兴奋,所以我可以在演讲中更好地表现出这种热情。
- 内容本身听起来有点像临床报告——可以增加一些轻松的内容和更多笑话。
- 早点开始排练,这样准备时就不会感到仓促。
费用
| 支出 | 金额 |
|---|---|
| 火车票 | $95.00 |
| 住宿(两晚) | $0(住在朋友家) |
| Uber 车费 | $9.08 |
| 食物 | $5.44 |
| 总计 | $109.52 |
和参加 PyTexas 花掉的约 1,200 美元相比,看看这个数字吧!如果所有大会组织者都能把大会安排在距离我开车或乘火车可达的地方,并确保我附近正好有朋友住着、家里还有空卧室,那就太方便了。
时间方面,我准备了 5 到 10 个小时。准备这次演讲容易多了,因为我已经有 PyTexas 的幻灯片,不过根据上次大会后的反思,我还是对演示做了一些修改。
其他想法
“我可以改进什么?”
在之前的大会上,当有人来告诉我喜欢我的演讲时,我总是只会谢谢他们。今年我尝试回答:“谢谢!你觉得哪些地方可以改进?”人们听到这个问题时有些意外,但通常会思考片刻,然后给出一些建议。
大会中很不幸地缺少反馈。每个人都可以改进自己的公开演讲能力和幻灯片的清晰度,但演讲者没有多少数据来了解哪些地方有效、哪些地方无效。看演讲时,我经常发现一些问题,很希望能告诉演讲者他们犯了一个很容易修正的错误。但主动向别人提出未经请求的建议很不礼貌,尤其是涉及某件他们本来可能就感到焦虑的事情时。
以后有人在我演讲结束后来找我时,我会向他们道谢,同时也记得问问我还能做得更好。如果你看过我的演讲,告诉我你觉得我可以改进什么。
大会是产生想法的好地方
大会能激发创造性思维。我总会忘记这一点,直到自己坐在会场里,但每次参加大会都会发生这种事。我在大会上产生过一些平时绝不可能想到的点子。
我不确定是不是因为有时我在听演讲时思绪会飘走。也可能是因为演讲者带着我走过他们的思考过程,触发了我平时不会产生的其他想法。但每次参加大会,我都会带着一些关于自己的业务或未来想做项目的好点子离开。
我应该做一场关于盗取加密货币的演讲
作为一个只有在那种场合才会产生的想法,我在 PyGotham 上意识到,应该把“我是如何盗走你的 Siacoin 的”改成一场大会演讲。这是一个有趣的故事,使用了 Python,还涉及 Levenshtein distance 和公钥密码学等几个我可以用有趣方式讲解的话题。我以前从没想过把它做成大会演讲,但一旦想到这一点,就觉得再明显不过了。
也许我什么都不该要求
今年早些时候参加 PyTexas 后,我意识到自己正在寻找一个新项目,而现场有满屋子的技术从业者,所以我本该请他们来和我聊聊自己业务中的痛点。毫无疑问,每个人的工作中都有一些方面,希望能直接交给托管服务来处理。我已经(希望如此)证明了自己是一名能力合格的开发者,所以他们本可以请我为他们开发一些东西。
在 PyGotham 上,我在演讲结束时邀请大家来找我,聊聊他们工作中觉得缺失的托管服务。然后,什么也没有发生。
我原以为,最差的情况至少也会收到一些糟糕的想法,比如:“我们想要 MailChimp,不过希望它免费且不限量。”但没有,什么都没有。所以这种策略也许没什么价值。以后我可能会尝试利用这个平台,为 What Got Done 吸引一些新用户。
审阅 CFP 很有启发
演讲者申请参加大会时,要填写“CFP”,即征集提案(call for proposals)。这通常是几段文字,用来说明你为什么应该在大会上演讲,以及活动日程中的简介应该怎么写,才能吸引参会者来听你的演讲。
PyGotham 是我参加过的第一个允许参会者查看并投票选出每一份 CFP 的大会。我写过几份 CFP,但以前从没读过别人的,所以这次以一个对演讲入选拥有投票权(不管这权重具体是多少)的人的身份参与其中,让我很受启发。
一些收获:
- 审阅 CFP 真的很累。
- 我记得大约有 300 份投稿。我把它分成了 3 到 4 个班次,但我肯定会仅仅因为精力水平不同,对一些投稿比对另一些更耐心、更慷慨。
- 在自己的兴趣和大众的兴趣之间取得平衡很难。
- 比如,我对机器学习演讲没那么感兴趣,但我知道其他人感兴趣。我应该给这类演讲投赞成票还是反对票?
- 在 CFP 中表现得自以为是会适得其反。
- 有些投稿者表现得仿佛填写 CFP 有失身份。有一个问题是“你的演讲讲什么?”接下来的问题大致是“参会者应该从你的演讲中带走什么?”我看到好几个人懒洋洋地回答后一个问题,比如“见上文”,或者“这和第一个问题没有实质区别”。
- 当你已经审阅了 100 份 CFP,却必须淘汰读过内容的 90% 时,那些自以为是的投稿最容易被拒绝。
每年参加三场大会是个好目标
年初时,我设定了一个目标,要在 2019 年参加三场大会并发表演讲。PyGotham 让我完成了这个目标:
- NERD Summit 2019
- PyTexas 2019(我的笔记)
- PyGotham 2019
现在回头看,我觉得三场仍然是个很好的目标。每场大会都会让我筋疲力尽一两个星期,但它们也会激发出好想法,让我接触到一些否则可能不会发现的工具和技术。
随机一篇博客