导语

在 NightTeam 读者群里的朋友应该都知道,上周末的时候(9月21-22日),PyCon China 2019 的第一站在上海开始了,而我很荣幸地被组委会邀请到上海蹭吃蹭喝,白嫖了一个晚宴+两天的大会门票...在这里先感谢一下组委会。

既然今年的主力站是上海,那么自然而然地,更多的大佬、干货都会聚集于此。

那么今年的 PyCon 上海站,都有哪些有意思的东西呢?跟我来看看吧~


晚宴

首先,就是这个晚宴了,也就是票务信息里写的所谓的“Python 之夜”。

这个晚宴的话,不管你是单买一张晚宴票,还是直接买的 VIP 票,其实都是很值得的,但似乎很多人并没有意识到。毕竟这个票价其实是非常便宜的,单买一张晚宴票的价格也不过就是与在商场里吃一顿稍微好点的饭的价格相当而已(200 至 300 人民币)。

在晚宴的几个小时里,你能与在台上分享知识的讲师面对面地聊天、交流技术,而聊嗨了的话,加个微信回去继续聊也不是什么稀奇的事情。

由于今年是 Python 诞生 30 周年的关系,所以今年的晚宴还有个额外的环节 —— 吃蛋糕。

PS:蛋糕挺好吃的,奶油不腻。


第一天

接着就是充满了干货和广告的大会第一天了,上海站一共有 6 个分会场,内容涵盖了几个 Python 圈子里比较常见、热门的方向。

主会场

Python 的永恒之美 —— Luciano Ramalho

中规中矩吧,内容大概就是开场白+说了说 Python 里一些比较优雅的写法。

PS:期间翻译炸了好几次...事故现场图在本文的最后。

构建 Python 物联网(IoT)图像分类解决方案并与 Azure 无服务器功能集成 —— Dave Glove

这个分享是 Azure(微软旗下的云计算平台)的广告,但项目本身还是挺有意思的。

项目使用了 Azure 的一些服务,经过了简单地组合、操作后就变成了一个可以识别摄像头下的水果是什么水果的小工具,全程基本不用写代码,大部分的操作只需要点点点就能完成,很轻松地就能完成整个项目。(当然,有实际意义的项目没这么简单)

项目地址:

https://github.com/gloveboxes/Creating-an-image-recognition-solution-with-Azure-IoT-Edge-and-Azure-Cognitive-Services

PPT 后面推荐的一个网站(https://www.hackster.io)也挺有意思的,网站内全是创意硬件项目,其中有很多很有趣的项目,可以了解一下。

PS:这一场演讲中就已经可以看到那个 VS Code 的新功能了。

PS:中间又出事故了,事故现场视频在本文的最后。

从模块化到全球分发,Python 在 Serverless 领域你不能错过的最新功能 —— 谢洪恩

这个分享是 AWS(亚马逊旗下的云计算平台)的广告,主要是宣传 Serverless(无服务器运算/功能即服务)相关的产品和服务。

他们在这方面的核心就是 Lambda 了,同类产品国内的阿里云也是有的,名为函数计算。

我前面写的《当你写爬虫遇到 APP 的请求有加密参数时该怎么办?》的初级篇以及《当你写爬虫抓不到 APP 请求包的时候该怎么办?》的高级篇中,用到的那两个 DEMO APP 的服务端就是使用的阿里云的函数计算+API 网关+日志服务组合搭建的。

得益于 Serverless 这种架构的特性,我只需要实现一个核心的“检测加密参数”的函数就可以使用了,全程都不需要理会Web服务器、日志聚合统计、部署、调试防火墙、限流等乱七八糟的事情,只需要点几下,就能实现其余那些业务无关的功能,那些功能全都被云计算平台给包办了。

但 Serverless 也不是没有缺点的,它在使用量少、服务功能简单的情况下非常省钱(甚至不要钱),但如果你的服务使用量非常大,各种云计算服务烧的钱就是你直接买台服务器自己部署的几倍、甚至更高了。

另外,如果你的服务功能较为复杂,在这一套部署方式下如果碰到什么“并非是你代码产生的问题”,你将很难自己解决,毕竟大部分功能都是云计算厂商帮你实现的,你只能联系云计算厂商帮忙。

调试是一种新的发布:慢语言的意外优势 —— Armin Ronacher

没翻译,听不太懂,打扰了。

PS:Armin 的高桥流风格 PPT 是真的骚。

Python 调试新思路 —— laike9m

这一个分享非常有意思,laike9m 老哥写了一个帮助 DEBUG 的工具 —— Cyberbrain,使用起来的效果差不多是这样:

在你注入一行代码到你需要 DEBUG 的位置后,执行一下整段代码,这个工具就能自动输出一个像上面这样子的参数变化图。

通过这个参数变化图,你可以很轻松地了解到这个参数的整个生命周期,例如:它是如何初始化的、它是如何被某一个函数调用赋值的。

更厉害的是,它可以帮你忽略掉一些无关的代码,比如用于生成上面这张样例图的代码实际上是这样的:

def func_f(bar):
    x = len(bar)
    return x

def func_c(baa):
    baa.append(None)
    baa.append('?')

def func_a(foo):
    for i in range(2): pass
    ba = [foo]
    func_c(ba)
    foo = func_f(ba)  # foo is our target
    cyberbrain.register(foo)

import cyberbrain
cyberbrain.init()
fo = 1
func_a(fo)

可以看到上面那个 func_a 的位置,是有一个无用的 for 循环的,它在 ba = [foo] 的前面,但我们在前面的图片中并没有看到这个 for 循环,原因很简单,因为它是一个无关的代码。(这个忽略无关代码的功能据 laike9m 说是使用分治的思路实现的)

当然,如果只是这样的话,好像也只能用于 Python 程序的 DEBUG,有没有更骚的操作呢?

有,我看到这个东西的第一眼,就想到了一个很骚的操作:可以把它改造一下用在逆向上。实际上类似的工具在 PC、Android 逆向领域中是有的,只不过他们都是通过静态分析实现的(而且貌似没有忽略无关代码的这种功能)。

那么,如果把它用在同样是动态语言的 JavaScript 上呢?

同样的效果、同样的操作,配合上简单的混淆还原,就能让简单的逆向更加简单、难的逆向掉头发更少。

你可以通过这个工具,轻松地知道某个加密参数的生成全过程,而且它还会帮你忽略掉其他的无关代码,可以直接无视那些加了花指令的恶心人的代码。

好了,点到为止,大家有兴趣的话可以尝试实现一下同类工具。

项目地址:

https://github.com/laike9m/Cyberbrain

PPT:

https://yanshuo.io/assets/player/?deck=5d6c9136d37616007449891e

PS:分享时的“会议时间”部分放的两张水豚图也是很...现场节目效果爆炸。

PS:这个项目还处于初期阶段,虽然能用但还需要优化,据 laike9m 说,目前反推做的还不准,在 x, _ = a, b 的情况下,这个工具会认为 xab 都有关。不过他在大会第二天与 thautwarm(红姐)交流后,似乎已经有了一些新的思路,期待 Cyberbrain 项目的后续发展。

语言特性

GIL 的过去和未来 —— 张佳圆

这个分享讲了一下为什么会有 GIL、为什么会用 GIL、怎么避开 GIL 等,其实网上讲 GIL 的文章很多,但那些文章都没有他讲得这么细,等后面官方放出回放后,想了解这方面的朋友可以看一看、了解一下。

不过,对于爬虫这种网络请求部分占耗时大头的应用场景来说,直接上协程即可(因为协程切换的消耗比多线程更低)。

如果你发现,你的爬虫程序出现了性能问题,可以加上多进程,或是只把网络请求的部分使用协程实现,解析部分独立出来使用多进程或其他更高性能的语言实现(如Go、C),只需要用一些简单的中继操作就可以了。

PS:对不起,翻到眼睛都快瞎了都没找到照片。

Speed up file transfers and file copies in Python —— Giampaolo Rodola

嗯,没翻译听不太懂。大概内容就是讲了一下文件传输的时候会影响性能的部分,以及规避的方式:Zero-copy(零拷贝),并且后续貌似会有语言级的支持(听别人说的)。

Python语法扩展框架 moshmosh 和其上的 CPython compatible JIT 实现 —— thautwarm

这个项目很骚,弄出了一个可以根据情况选择性编译(翻译)部分内容运行的 Python JIT 实现,而且还能兼容原本的 C 扩展。不过这个项目还处于 DEMO 阶段,虽然能演示,但也就仅此而已了,并不能用于生产环境,期待后续发展。

项目地址:

https://github.com/thautwarm/moshmosh

https://github.com/thautwarm/restrain-jit

Web专场

从 thriftpy 中学习 rpc 协议 —— 张汝家

这个分享的话就比较中规中矩了,只是介绍了一下 Thrift 的用法,算是科普、入门型的分享。

如果你想要知道 Thrift 和 gRPC 哪个更好、更适合你的业务场景的话,可以看看这篇文章:https://blog.csdn.net/dazheng/article/details/48830511,讲得已经很细了。

引用一下这篇文章中最后的选择部分:

什么时候应该选择gRPC而不是Thrift

  • 需要良好的文档、示例
  • 喜欢、习惯HTTP/2、ProtoBuf
  • 对网络传输带宽敏感

什么时候应该选择Thrift而不是gRPC

  • 需要在非常多的语言间进行数据交换
  • 对CPU敏感
  • 协议层、传输层有多种控制要求
  • 需要稳定的版本
  • 不需要良好的文档和示例

基础架构

开源 AIOps 数据中台搭建与 Python 的作用 —— 丁来强

虽然讲师自称不打广告,但这个分享其实全程都有阿里云日志服务的广告,不过内容还是挺详尽的,广告部分只是简单一提就过了。

内容主要是各种数据收集、存储方式的优劣势,以及各个工具之间的组合、配套方式,对这方面想了解的朋友同样可以等官方回放出来之后看一看、了解一下。

分层次构建应用系统的可观测性 —— 刘征

Elastic 的广告,还是那一套内容,看一半就溜了...他们家工具是挺好用,可惜资源占用还是挺大的,不管是 ES 还是Filebeat(对,就是 Filebeat),资源占用都比较大,在预算少、机器配置低的情况下很难得到一个很好的体验。

当然,今年的 Elastic 与去年相比也不是没有变化的,今年的 Kibana 终于有了中文界面!(7.0就有了

再也不用看着全英文的页面脑壳疼了!虽然说英文界面用多了也就那样,但是终归还是没中文看着舒服的。

不过翻译效果的话,据刘征说,目前是请人帮他们翻译的,效果仅仅就是能看而已,还存在一些词不达意的问题,需要等后续优化,不过这已经是一个很大的进步了,毕竟前面那么久都没好好搞多语言。

基于 Python 构建高稳定可扩展的自动化测试集群——网易游戏自动化测试实践分享 —— 杨柳

嗯,Airtest 的广告,上一次见到 Airtest 是在 OSCHINA 的源创会上,那时候是熊博老哥在讲这东西。经过了大半年的发展,Airtest 相较于之前而言已经完善了非常多,之前存在的一些 BUG 也都修复了,整个使用体验舒服了很多。

不过...分享内容还是差不多的,依然是演示一下使用、吹一吹他们的手机机柜和机房、晒一下他们那一堆各种品牌、各种型号的手机...以及秀一下各种优化。

Airtest 的话,用在 APP 爬虫上的相关操作已经有很多文章说过了,甚至 Airtest 官方微信公众号都有转发过,所以这里就不再深入地说了,具体操作有兴趣的朋友可以自己搜索一下。

项目地址:

https://github.com/AirtestProject/Airtest

http://airtest.netease.com

云测试服务:

https://airlab.163.com

闪电演讲

链接世界的 Python Community? —— Noah Chen

Python 基金会广告,由于各种因素最终没能像彩排时那样在5分钟内讲完,挺可惜的。

500 行 Python 写一个渲染器 —— 谭啸

嗯,娱乐项目,而且讲师节奏控制得不好,讲到一半就被拉下去了。但是讲师的学习思路挺不错的,建议还在入门阶段的朋友们学习一下。

项目地址:

https://github.com/tvytlx/render-py

基于 OwlReady2 的人机交互 —— 宋从威

全程懵逼,打扰了。

Byte Code 的革命 —— 赵俊德

在这个分享中,讲师用 5 分钟不到的时间科普了一遍 Python 的字节码相关知识,不过由于时间紧迫,讲得比较浅,现场很多人听的时候应该都是一脸懵逼的,所以还是看看网上的文章吧...

不过有意思的地方在于,讲师创办了一个公司,他们做了个 Python 脚本加密产品 —— PyArmor,功能看起来挺强大的,有需要的朋友可以了解一下。

项目地址:

https://github.com/dashingsoft/pyarmor

http://pyarmor.dashingsoft.com

PS:果然,脱发会让人变强。

使用 Sphinx 制作 Web 文档 —— 陈照强

有点水啊兄dei。PS:居然在陈祥安的水群里看到了他...

一键将 C/C++ 代码转换为 Python 能调用的代码 —— 韦泽华

emmm...这个分享的话简单地说就是鄙视了一下 ctypes、boost.python、pybind11 这些在 Python 中调用 C/C++ 代码的工具,然后放出来一个名为 c2py 的工具,效果吊打上面的这些工具,而且比它们使用起来更方便。

我本来一开始是想着能不能用这玩意调用 Android NDK 的 so 库的,不过看了一下项目说明,它是将 C/C++ 源码进行了转换,只能用于 C/C++ 的头文件(.h 后缀),所以就没法搞了,很可惜。

项目地址:

https://github.com/nanoric/c2py

Python 虚拟环境和依赖管理工具大乱斗 —— 李辉

“PPT” 其实是 Web,还很精美,做 Web 开发的就是不一样。

PS:现场讲述如何同时找两个女朋友(误),辉哥不怕回家跪搓衣板吗?

第二天

T1:Pythonic Objects: idiomatic OOP in Python —— Luciano Ramalho

说好的翻译没了,以我浅薄的英语水平只能听懂一部分。

嗯,大概就是从浅到深地讲解了面向对象的各种操作,并介绍了一些魔法方法(双下划线系列)的效果,补全了一些之前没有注意到的知识点。

T2:Plate Spinning: Modern Concurrency in Python ——Luciano Ramalho

嗯,依然没有翻译。

大概就是讲了一下线程、进程、协程的特性、问题、优劣势、实现原理、版本差异等,并介绍了一下 Asyncio 事件循环的替代品、协程环境下用的库等。

但上面其实很多内容我踩坑的时候已经了解到了...所以...就全程写这篇文章了。

PS

其实 T1、T2 的课程内容本体并不是重点,重点在于人少,上午的 T1 和下午的 T2 都是只有十几个人买了票(或者像我这样白嫖),所以课程中有什么疑惑都能直接当场向 Luciano 提问。

T2 的内容结束后,在场的几位大佬还因为 “aiofiles这种库是否有意义” 的问题,产生了一次额外的讨论环节(全程不敢 BB,靠着腾讯翻译君勉强听懂),这在大会场上是不可能发生的事情,所以就像晚宴一样,都属于非常值得花钱买的(虽然这个有点贵,999 一张)。

课程中的照片以及最后的大合照由于版权、肖像权问题,这里就不放了。


幕后

至此,PyCon 上海站两天的内容就结束了,虽然表面的 PyCon 非常光鲜亮丽,但我们也不能只看表面的东西,毕竟不光是讲师需要“台上一分钟台下十年功”,组委会的准备工作也需要花费非常多的精力、人力以及金钱!

用爱发电

据辛姐(辛庆)所说,前几年的 PyCon China 没有这么多像 Python 基金会、微软这样的赞助商,每次筹办都需要烧组委会自己的钱,而大会本身又收支不平衡,完全就是在用爱发电。

去年(2018年)的 PyCon China,组委会在办完后一算,血亏十来万(人民币),门票钱根本就入不豁出。如果他们一开始不是抱着为社区做贡献的心态来搞的话,可能早就坚持不下去了。

所以如果你喜欢 Python 这门语言、愿意让这个社区变得更好的话,可以去 PyCon China 做做志愿者、帮帮忙,或者报个名当一回讲师,这样可以支持一下组委会的工作。

布置场地

9月20日晚上,晚宴结束后,组委会的工作人员们就开始了忙碌的准备工作。因为场地很多,每一个场地的设备都需要调试的关系,他们一直弄到凌晨才结束。

桌子还没收拾好,先调试调试设备

彩排

闪电演讲由于演讲时间紧迫,需要讲师们提前多次练习、彩排,才能确保正式开始的时候能把控好时间,在5分钟内将内容全都讲完。

于是,在布置场地的同时,闪电演讲的几位讲师也在排练着,还让我们几个在边上只围观不干活的吃瓜群众扮演现场观众,所以我们也是提前听了一遍完整版的闪电演讲?(部分讲师的)。

可惜的是,现场情况复杂,出现了一些意料之外的状况,导致内容较多的讲师们最终还是没能在5分钟内将所有内容都讲出来,十分可惜。

吐槽

吐槽方面的话,基本就大家都在说的那几个问题了,毕竟其他方面做得确实没什么毛病。

有道同传抽风、后续全程无翻译

有道同传在刚开始的时候还是挺稳定的,虽然有些断断续续,但内容至少还正常,但过了一段时间后就开始逐渐崩坏,最终还是被工作人员关闭了,后来再也没启用过。

不过这个问题的话,我问了一下工作人员,其实是因为网络问题导致的。

他们用来放有道同传的那台机是连的 WIFI,而会场的人又实在是太多太多了,酒店的 AP 设备根本扛不住,所以没办法及时地将音频流传输至服务器,于是就炸了。

而他们在此之前想到的其他方案,又会需要高额的金钱支撑,所以最终还是选用了合作方 —— 网易有道的商业级同传翻译产品(免费使用)。由于问题是网络导致的,所以有道其实并不背锅。

不过这个问题其实很好解决,只需要从酒店的交换机那边拉一条网线直接连到场控区就好了,轻松解决网络问题,有道再也不用背锅了。这个建议我已经告知他们了,希望后续有外国人的场次在这方面会有改善。

PPT 内视频音频不同步

这个问题出现于9月21日早上 Dave Glove 的「构建 Python 物联网(IoT)图像分类解决方案并与 Azure 无服务器功能集成」这个分享中,直接让本来好好的一个人工智能识别水果的演示变成了人工智障哈哈哈哈哈哈。

不过这个问题的原因不太清楚,因为布置的时候测试播放是正常的,可能是玄学吧,“测试时好好的,一到现场就炸了”什么的。

<video id="video">

<source id="mp4" src="https://oss.crawler-lab.com/PyCon上海站到底讲了啥?/asserts/23.mp4" type="video/mp4">

</video>

为什么赞助商最低的是“白银赞助”,“青铜赞助”呢?

据晁倩小姐姐解释,这个是因为...今年的赞助商都很给力,没有青铜级别的赞助商,所以最低的就是白银了。


结语

断断续续地写完了,Typora 里显示本文字数已破万...内容还是挺多的,没想到会写这么多出来,如果有些错别字或者都不通顺的地方还请见谅,实在太长了。

PS:现在的时间是2019年9月24日凌晨3点,我准备把图片传到 OSS,然后放到微信上定时发送了。


文章作者:「夜幕团队 NightTeam」 - Loco

夜幕团队成立于 2019 年,团队包括崔庆才、周子淇、陈祥安、唐轶飞、冯威、蔡晋、戴煌金、张冶青和韦世东。

涉猎的编程语言包括但不限于 Python、Rust、C++、Go,领域涵盖爬虫、深度学习、服务研发、对象存储等。团队非正亦非邪,只做认为对的事情,请大家小心。


本篇文章由一文多发平台ArtiPub自动发布


MarvinZhang
147 声望14 粉丝