分类目录归档:Life

回不去的上海

过完年回到上海的这段时间,陆续凑齐了所有的东西。买了新的床、床垫和衣柜(感谢房东出了 80% 的钱),买了二手的桌子、椅子、台灯、自行车……从家里寄来一些炊具和餐具。从超市买了米、油、鸡蛋和面条。唯独缺一把菜刀。快递不让寄刀,坐火车行李也不让带刀,附近的几个小超市也没找到。来上海后做的第一顿饭,是用勺子切了葱花炒的蛋炒饭(配料是在便利店买的沙拉蔬菜包):

虽然房子空间越来越小,还是缺很多东西,离我完美的上海新生活还差得很远。我想念我的大显示器、键盘鼠标以及各种有用没用的小物件。所以我最终决定在三月的第一个周末回家,把它们带过来。本打算在家呆一周就回来(一周后的车票都买好了),结果一直呆到了现在,侥幸躲过很多次核酸检测和抢菜团购。如果我还在上海,估计会在小区快要被封的时候满大街买刀吧。

回家还有另一件事想做。过年在家的时候,我向身边的亲戚朋友了解了当地在八九十年代的妇女拐卖情况(我家在徐州另一个县的农村)。但是很快假期就结束了,了解到的信息很有限,只在 Twitter 上写了几条推文作为总结。这次回去想深入采访当地农村人口拐卖的事情,写一篇文章出来。因为某些原因,这件事没有做成。

到家的前十四天,我的行程码上有上海的记录,去商场要登记,后来看电影都被要求提供 48 小时核酸证明(就是让我退票的意思)。我如果再晚两周回来,就要享受各种防疫套餐,什么 3+11 啦,7+7 啦,14 天内要做 9 次核酸。

随着上海开始封城,越来越多离谱荒谬的事情发生。每天看着这些信息感到愤怒又无力。这些因为防疫政策而不是病毒本身导致的饥饿、伤害、苦难和死亡是有意义的吗?现在这样混乱、极端的「清零政策」到底是为了什么?没人知道答案。广播里只是一味地重复:让我们众志成城,万众一心,大家吃一点苦,我们迟早会战胜病毒!更加悲哀的是,这些事情在每一个城市都可能发生、已经发生、甚至正在发生。

网络上到处都是煽动仇恨和对立的垃圾文章,比如前一阵那篇国本雄文,看到最后我都恍惚以为文革还没结束。另一方面,求救、揭露现实的文章和评论只会被封禁和删除。连公共媒体都热衷于转发各种意大利英国阴谋论网站的假新闻,你还能指望那些写手们弄出什么正常东西来。

现在仿佛又回到了呆在家里没工作的日子,不知道哪天能回上海。说不定还没有等到回上海那天,就要被封锁在徐州了,对于自己的生活现在谁能说得准呢。

为了薯条、月亮和六便士

前两天偶然翻到《月亮和六便士》的豆瓣条目,看到我刚好在十年前的这一天标记了这本书。当时写下了这条短评:

不知道那位老梆子现在是否还健在?那位像座小山一般、每天在楼道里踱来踱去、以贬低打骂学生为生的教导主任。

我们活着大概就是为了薯条、月亮和六便士。薯条在很远的码头上,而月亮和六便士不过是随时会被没收的东西。而被没收的月亮和六便士,也许我哪天可以拿回来。

2021 年总结

今年一整年都呆在家里。书断断续续地写,但一本也没写完。最后两个月,因为钱花光了,终于下定决心开始找工作,最终在 2021 年最后几天拿到第一份工作的 offer,结束了近五年的自由职业状态。这个 offer 给这一年画上了一个圆满的句号,我也从此跳进这个圈,开始一种稳定循环的新生活。

先从好坏两方面总结今年。

Good:

Bad:

  • 三个年目标全部落空:两本书都没有写完,APIFlask 也没有发布 1.0 版本
  • PyCon US 2021 演讲议题申请没通过(备选的闪电演讲通过了)
  • 找工作收到拒信若干封

今年尝试了很多新鲜的东西,比如第一次录播客、第一次参加圆桌、第一个英文演讲、第一场足球赛、第一份工作。今年也开始更活跃的使用 Twitter,并且重新捡起来被荒废的 PyCon China 账号。

从下半年开始,经常感觉很焦虑。一方面是因为写书进度缓慢,不知不觉一年又已经过半。另一方面是因为收入——今年拿到的稿费很少,加上不想浪费时间做外包,因此收入锐减。既没有挣到钱,也没有做成事,在这些压力下常常心情也不好,所以自觉失败。

时间记录

今年没有再完整的记录时间花销,去年一年的实验已经让我了解自己的时间花销情况。再继续意义不大,一来记录本身就会浪费很多时间,二来过于追求效率和生产力会让人感到疲惫。因此这一年只记录了一些重要的活动分类。

总记录时间一共 1815 小时(约占全年时间的 20%),其中前三项分别是:

  • 开源项目:535h 50m
  • 找工作:204h 37m
  • 游戏:200h 55m

完整的数据如下:

blank

开源项目时间基本都集中在年初,当时花了几个月时间开发 APIFlask。年中 Flask 2.0 发布后帮忙修了几个 bug,年底给 Bootstrap-Flask 发布了支持 Bootstrap 5 的 2.0 版本。

找工作集中在最后两个月,不过投入时间最多的几个职位都没有拿到 offer。晚点会在另外一篇文章详细记录找工作的经历和感想。

游戏时间大部分花在了最后一个月开始玩的《塞尔达传说:荒野之息》。这个游戏在年初就和 Switch 一起买了,因为怕花掉太多时间一直没有玩。在找工作等待面试答复的漫长煎熬过程中,什么事情都不想做,所以躲到游戏里。

时间花销排在第六位的写书,本来应该是我的主业。之前完成两本书的阻力很多,比如要解决收入问题,要整理第一版的旧文件排版,还要完善 APIFlask 并发布 1.0 版本。而目前来说,完成它们的最大阻力则是时间太少。工作之后,除了周末两天,每天只有下班后六点到十一点这个时间段才能做自己的事情。再去掉吃饭时间以及偶尔的散步、看电影、玩游戏、做开源项目……不过好在我可以在这个时间段专心做事,没有收入焦虑。

时间花销排在最后的是阅读。今年又没读什么书,记录在案的阅读时间只有 55 分钟……想想大概是在读《非暴力沟通》,不过读了个开头就用来垫枕头了。枕了那么久,也许会吸收到一点点灵气吧。

新年目标

因为 2021 年的三个年目标一个也没完成,所以 2022 年仍然是这三个:

戴尔恶魔城居民+1

一周前来到上海,今天顺利入职戴尔 EMC(别名恶魔城),我的找工作历程至此终于完结了。对新工作和新生活充满期待。

blank

来到上海找了三天房子,最终选了一个离公司 483 米、在意向清单里价格最高的房子。公司周围都是三十多年房龄的破旧小区,一室的价格应该够在家乡县城租七室三厅。好处是离体育场(江湾体育场)和商场(五角场)也只有五百米上下,有很多好吃好玩的地方。

第一次在公司上班,到处都很新鲜,不过第一天不太好意思到处闲逛。中午和同事们一起吃饭散步,感觉像是回到上学的时候。今天帮助我入职的 buddy 是我的读者,不过他今天在家办公并没有来(失职的入职 buddy)……其他同事还把我的书从他的工位拿过来「指认作者」,哈哈。

说到这本书,自然就想起来第二版的截稿日期就快到了,心情突然沉重。各位潜在的读者稍安勿躁,明早起床就开始写书!

开始找工作

在过去的几年里,虽然也有过几次找工作经历,但都是被别人推荐后去试一试,结果无一例外全失败。不过,除了学历、英语和申请时间点的问题,这些失败的职位大都不是我的强项所在(Python/Flask)。这一次我决定主动起来,以自己擅长的方向出发,努力在 2022 年之前找到人生的第一份正式工作。

我想是时候了。我在写书这件事上很难挣到足够多的钱,不应该再抱有写出畅销书的幻想(至少短期内不可能),所以找工作才是下一步应该要做的事情,这样才能让写书和做开源项目这些事变得可持续。

我会在拿到第一个 offer 的时候开下面的薯片庆祝!

blankP.S. 这盒薯片的过期时间是 2022 年 7 月 14 日。两个星期以来,它已经陪伴我经历四场面试,收到一封拒信。


2021/12/29 Update:

终于拿到了 offer,撒花!开吃!

blank


2022/1/21 Update:

已顺利入职戴尔 EMC。

拍抖音不尴尬

今晚出去散步,火车经过的时候我举起手机录像。身边有几个路人走过来,这让我感觉尴尬,像是手机烫手。但是当走过的大妈对身边的同伴说——“拍抖音的”,我一下就释然了。

想起以前经常拿着相机到处拍。骑着自行车在各种村子里闲逛,拍那些不一样的房子,破旧的,畸形的,门前有着小花园的,墙上写了毛笔字的。拍那些在门口发呆的老头老太太们。也会在某个城市暴走,拍躺倒在路边的工人(别担心,只是在午睡),破旧的没人注意的角落,旧市场沿街二楼趴在窗户边的孩子。这些时候就会很在意别人的眼光,感觉自己像是一个在人流里停下,让时间变慢的那个人;或者是升旗时迟到,需要穿过所有的人走到第一排的人。担心被被拍摄的人发现,也担心被路人发现。

一定是这种尴尬心理阻碍了我成为一个青年摄影家或是纪录片导演。当然,也可能罪魁祸首是高二偷走我装满照片的 U 盘的凶手,毕竟我青年时代的伟大作品都在那个 U 盘里 :D。

而有的人就可以完全做到不在意别人的眼光。在南京的时候,有一次步行去超市,在路上看到前面的人举着手机走路,走着走着就停住了,走过很远回过头看他还在那里,仿佛被人凭空点了穴一样。不知道他在那里站了多久,会不会一抬头发现天已经黑了。很显然,他有自己的世界和宇宙。我很羡慕。

我想这种不在意别人目光的能力是需要培养的。这样的锻炼我不常有,还记得我做的最大胆的一次。那是和女朋友刚刚认识的时候。那一天是 8 月 7 日,之所以记得那么清楚,因为我们把这一天叫做哑巴日,不过后来就慢慢丢失了这个传统。那天我们在车站见了面,见面之后不知道为什么我们都没有说话,就看着对方傻笑。于是我提议今天作为哑巴日,谁都不许说话,谁先说话就算谁输。我们到了肯德基,面对面坐着,不说话,憋着笑比划手势。然后我决定迎接更大的挑战,所以主动去点餐,对着菜单指着一个汉堡,比出「2」的手势,店员错愕后点头并且投来关切的眼神。我们在沉默中吃完了汉堡。不过那天谁先说了话我已经记不起来了。

和捕蛇者说聊聊自由职业

上一次参加捕蛇者说播客不仅聊了 Flask 和开源(见《和捕蛇者说聊聊 Flask 2.0》),也聊了自由职业。这个话题分为上下集,上集是和 Flask 那一期一起录的,下集对相关话题作了更深入和完善的补充。欢迎收听,希望可以给你带来一些启发和帮助:

算起来今年是我自由职业第五年了,尝试找过几次工作,但都没有成功,最终还是从毕业一直待业到现在。除了播客里聊到的内容,关于自由职业相关的话题我还有很多想法,有时间会写一篇文章来总结这几年的经历。

最后,感谢 laike9m 邀请,也感谢捕蛇者说给我机会学习和练习剪辑播客(感谢 laixintao 教给我很多剪辑技巧)。这三期播客的录制、剪辑(还有学习剪辑)加上写 show notes 以及两篇分享文章,一共花费了 64 个小时多一点。在第三期时,主播们还把播客后台权限开放给我,让我自己完成了播客的上架和发布。总之是一次非常有趣的体验。欢迎访问捕蛇者说的主页和 Twitter 了解关于它的更多信息。

中场休息

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

漫天的杨絮一飘完,天气就开始热了起来。西边的房间到下午就会被午后的太阳晒成桑拿房,所以我又搬回了冬天会被冻得头疼的东边的房间。院子外的蔷薇花开得非常鲜艳(不过下图里花已经快要谢了),我帮忙授粉的猕猴桃也结了非常多的果子,另外我还有幸参与了(一点点)今年的出蒜、种花生和种山芋活动。

blank

这半年来,家里的饮水机、洗衣机、楼下的莲蓬头和电视、厨房的灯泡都接连坏掉。因为爸不在家,所以我只好买了新的饮水机,但是洗衣机还是扔在一边,只能用来脱水。前段时间终于得知爸要回来了,我就去打印了一个欢迎横幅(「热烈欢迎李**同志回家!」),在院子里提前一周挂上,邻居们还以为我要结婚了。

blank

虽然家人希望我有一个稳定的工作,但我如果可以一年写一本书,那就可以生活的很好不用找工作(基于暂时不结婚没孩子不买房和车的前提)。糟糕的是,我已经在一本书上耗了两年了,我想我可以给自己起一个新的笔名——「拖稿李天王」。两年里,大多数时间都偏离了写作这个主线,把精力过多的分散在了能够获得短期回馈的事情上,比如外包项目、演讲和开源。

我决定明天休息一天 ,然后开始专注写作。接下来的目标是:十月前完成《Python Web API 设计与开发》初稿,十月底交稿。

2020 年总结

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

照例,先从好坏两方面总结一下。

Good:

Bad:

  • 尝试翻译一本英文书,但是试译稿没有通过编辑的质量要求
  • 没能按计划完成新书(延期两年了)
  • 组织「编程一小时」活动失败
  • 一次失败的外包合作
  • 玩太多游戏

很高兴我的书和项目在这一年帮到了更多的人:

感谢留言

而且我的读者群已经扩展到小学五年级了(继上一次某位正在上初中的读者邀请我评审他用 Flask 做的博客程序后)。如果还有三年级或是一年级的读者小朋友,记得吱一声 :P

2020 年只写了 23 篇文章,花了比较多时间写的是下面这几篇:

相比之下,文章数量要比 2019 年少 40 篇,也许是因为这一年花了更多时间来挣钱(虽然最后没剩下多少)。年初做了一个糟糕的外包项目,烂摊子接手,慢慢明白转手的原因,最后以没有拿到尾款结束。这之后就更谨慎了,半年时间里只做了一个微信小程序的后端 API。

除此之外,第一次通过写文章挣到了钱——给 Twilio 博客写文章的稿费。第一篇文章是做一个协作白板,因为 SocketIO 有一个类似的示例程序,所以做程序加上写文章只花了 17 小时 34 分钟。但是第二篇文章就没那么幸运了,这一篇做一个演讲程序,因为 Twilio 文档写的不是很详细,所以卡在程序实现上很久,断断续续花了两个月,最终耗时 50 小时 24 分钟,时薪骤降。

今年的收入大部分都用作房租和生活开支了。买了一个很大的显示器(43 寸),不过并没有让写书进度加快……买了 Switch,玩了一段时间《喷射战士 2》(Splatoon 2,拒绝官方译名),偶尔还会换回一代玩,喜欢第一代 Carbon Roller Deco 和 Rainmaker 鱼头的无敌效果。

去年在年总结里说要重新开始记录时间花销,说到做到,2020 年记录在案的时间一共 8769 小时 48 分钟(99.8% 覆盖率):

时间花销饼图

P.S. 上面的分类是时间大类,其中娱乐包括游戏(491 小时 4 分钟)、电影电视剧(283 小时 39 分钟)和上网(269 小时 22 分钟);休息时间大多是不同事项之间的切换和走神时间;工作包括外包开发(332 小时 49 分钟)和开源项目(136 小时 47 分钟);写作包括写书(158 小时 50 分钟)和写文章(129 小时 58 分钟);​学习包括学编程(101 小时 16 分钟)和学英语(81 小时 52 分钟)。

下面是包含所有时间分类的年度柱状图(紫色系是睡觉和吃饭,黄色系是外包和演讲,绿色系是开源项目和写作,蓝色系是清洁活动,红色系是娱乐):

时间花销柱状图

这也很好的解释了为什么这一年没有太多成果:玩了太多游戏,在各种网站上转来转去,写书的时间甚至没超过写文章多少。

2021 年开始没有再记录详细的时间开支——完整记录时间太花费精力了。比起每天的详细时间花销数据,我更关心的其实是有没有达到设定的时间目标,所以现在改为只记录两类时间:一类是想要达到的时间目标,比如写作、编程和学习;另一类是需要限制的时间花销,比如娱乐(计划 2021 年娱乐花销控制在 500 小时以内,目前是 123 小时 44 分钟)。

年底和女友一起离开了南京,接下来整个 2021 年都会呆在家里,目标是完成下面三件事:

  1. 完成《Python Web API 设计与开发》
  2. 完成《Flask Web 开发实战》第二版
  3. 完成 APIFlask 的 1.0 版本

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

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

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

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

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

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

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

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

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

2021/11/24 Update:我去联系了去年约好今年合作的那位校长。校长三天后回复我说计算机教室还没有安装好,我说可以进行「不插电编程」,校长说下午再聊。

南京再见!

去年五月份来到南京,在这里待了一年半,前两天回家了。本来是打算来南京找工作,顺便体验下城市生活,但是因为各种事情一再搁置找工作的事情:做外包和咨询项目、组织和参加技术大会、写书。一年后发现和呆在家里没有什么区别,反倒不如先回家,把书写完再做打算。

在这里挣的钱大部分都留在了这里,唯有房子里的东西却一件不落的带了回去。去时只有一个面包车的行李,回来时一辆小皮卡差点没装下。不过这一车的零零碎碎倒是并没有花什么钱,大部分家什尤其是大件都是二手货。除了买电子产品,大部分还是被住和吃掉了。

在南京的一年多里,和好朋友阿宽只见了三面,一直想去拜访高中在豆瓣认识的老郭也始终没能成行,去年参加黑客松约着要去东大微软学生俱乐部做关于 Flask 的分享,现在也只好暂时泡汤。而对这个城市本身,也没来得及完全熟悉它。钟山风景区去了大概有七八次,但是还没有完全逛完所有景点。在钟山风景区里骑自行车是非常舒服的事情,比这还舒服的事情是骑车下坡。最喜欢的下坡路线是从灵谷寺路和水榭路汇合点开始,先沿着灵谷寺路下坡冲到灵谷寺景区门前,然后右拐一路经过非常长的一段下坡冲到体育学院。陵园路梧桐树更漂亮但是红绿灯和路口太多,如果你走这里下坡的话,那么建议再费点力气向东爬上卫岗的大坡,然后就可以体验到另一个更陡峭的大下坡。说起来在长江大桥骑车到了江北也会有一段大下坡,但是那一段就没有那么舒服了,因为没有几米是平坦的水泥地,一路下去准会被颠得骨头散架,手脚发痒。blank

顺便提一句,去了灵谷寺景区发现灵谷寺是最没意思的地方(看到崭新的门面和门楹上挂的标语就没有进去的兴趣了),而无量殿(国民革命军阵亡将士祭堂)、淞沪会战阵亡将士纪念碑和灵谷塔(国民革命军阵亡将士纪念塔)才是参观的重点。我在爬上灵谷塔这一天(2020 年 9 月 19 日)才知道蒋中正就是蒋介石,中正是名,介石是字,可怜我在台北参观中正纪念堂的时候还一直以为蒋中正是蒋介石的儿子或孙子……

因为我大部分时间都呆在房间里,在南京郊区还是在徐州农村其实没有太大区别。既然用不到什么市政资源,那么都是一样的用水,用电,用连不上 Google 的网。除了拿快递和看电影比较麻烦外,回到家好处很多,生活空间更宽裕了,平时也不用小心翼翼担心吵到楼下。住在南京养宠物太麻烦,只能去逗小区里居无定所的的猫狗。而在家里的话,我们家的狗以及邻居、邻居的邻居的狗都是招手即来(挥手也不走)。奶奶家不仅有猫有狗,还有兔子和鸡。在村外走远一点偶尔还会遇到被赶着散步的羊群和牛群。在农村也不会有那么多密集、丑陋和无聊的政府宣传画。很多美食好吃便宜不用排队,物价很低,在超市和街上买东西不用犹豫。

过一段时间也许会怀念在南京的生活。怀念钟山风景区的梧桐树和栖霞山的枫叶;怀念孝陵卫地铁站旁罗汉巷的梅干菜锅盔;怀念南京东郊那间出租房里舒服但是没藏着音乐城的红沙发。

南京再见!或许哪天再回去。

我和 PyCon China 的故事

从参加 PyCon China 2018,到组织 PyCon China 2019,再到现在 PyCon China 2020 正式启动,我想这是一个很好的契机来记录下这两年我和 PyCon China 的故事。顺便也让更多的人了解 PyCon China,并且可以参与进来,让它变得更好。

这是一个小小的 PyCon China 私人切片,因为我已经退出筹备组,所以不代表官方立场。写起回忆来难免会有一堆牢骚不吐不快,为了避免让这篇文章变成一份扎手的手札,棘手的手记,我调整了抱怨浓度,牢骚大概只占一半,不会让你心烦。另外也因为我的视角有限,所以一些观点和想法或许有失偏颇,仅供参考,同时欢迎撰文补充和扩展。

参加 PyCon China 2018

2018 年 9 月 16 号,某位读者建议我去报名 PyCon China 演讲,这是我第一次知道 PyCon China。我一边推脱说我做不来,一边在想自己如果去的话要讲些什么好,结果当晚就报上了名,第二天又在组委会的「怂恿」下把演讲类型从快速演讲(10 分钟)换成了主题演讲。26 天后去北京参加了 PyCon China 2018,这是我第一次参加技术大会,回来后写了这篇总结文章,一半篇幅都是牢骚。

组织 PyCon China 2019

2019 年 4 月 20 号,在准备提交 2019 年的 PyCon China 演讲申请的时候,基于 PyCon China 2018 的体验向大会负责人辛庆老师提了一些改进建议,比如没有闪电演讲,演讲视频没有上传到网络上公开……然后聊着聊着就加入了筹备组。

2019 年从四月底到十月底这半年时间,我基本完整参与了 PyCon China 2019 的筹备。在整个筹备过程里,大部分事情都掺和了一些:协调规划各类事情、策划和实施闪电演讲、更新大会网站、翻译大会资料、审核宣传文章、创建和更新 Twitter 和 Facebook 账号、接待讲者、做主持人、整理上传幻灯片、写和改进各种表单/界面/措辞……在这段时间里,除了做各种杂务,我还完成了三个演讲:

这三个演讲花了很多时间准备,虽然完成的都不完美,但从收集到的会后反馈来看有很多人喜欢,这让我很开心。

在筹备工作里,我最主要的工作成果是策划闪电演讲,以及推动两个改进计划:「品牌形象建设计划」和「工作人员 Credit 计划」。

闪电演讲

4 月和辛庆老师沟通的时候,我提议增加闪电演讲专场来让大会变活泼一点,并且自荐可以负责策划和实施落地。然后我就开始负责做这件事情,一直到九月结束,跟踪了整个流程:写策划案、写宣传文章、发布相关社交动态、和讲师沟通、组织试讲、做主持人、自己出闪电演讲、提前跟摄影师要录像、剪辑录像、上传幻灯片和录像。

闪电演讲的模式大致参考了 PyCon US 和 PyCon AU。做这件事的出发点是让 PyCon China 现场气氛不要那么严肃,稍稍有趣一点,而且作为大会的最后一个环节,可以让大家有一个热烈欢快的结尾。本来的设计是闪电演讲作为整个大会独占的最终环节,放到主会场。但事情的发展慢慢就超出了控制。一开始是因为酒店预算有限,主会场上午用完下午要拆成两个会场,所以原定的闪电演讲主会场就被换到了 Web 分会场结尾。接着因为酒店交还场地的时间限制加上上午开始时间延后导致闪电演讲独占场次变成和其他几个会场一同进行。尽管如此,我还是继续把它作为大会结尾来推行,保留了 PyCon China 2019 结束语部分(本想再加一个工作人员 Credit 环节,但是因为各种原因作罢了)。

最终效果和预想打了一些折扣,这个折扣是很多事情共同造成的。首先是大家都不熟练,我第一次做主持人,讲者们(包括我)第一次做严格限时 5 分钟的闪电演讲,许多听众大概也是第一次看闪电演讲。再加上大多演讲都比较严肃,讲者或许更关注专业性而不是有趣好玩,听众似乎也更期待和习惯前者。尽管前一晚和几位讲者试讲时一再强调 5 分钟限时,但是最终严格限时策略也受阻,Noah Chen 赖着不走我却没办法,打断严肃的演讲又看起来没礼貌。算起账来,场地也要背一口锅,讲台太高,观众离讲台太远,观众分隔距离太大,导致讲者和听众、听众和听众之间很难建立连接。从我几次演讲的体验来看,大学才是更好的技术大会场地,酒店还是更适合严肃无聊的企业会议。

最后一共收到 20 个闪电演讲申请,上海场留下 7 个:

  • Connect to the World of Python’s Community – Noah Chen
  • 500 行 Python 写一个渲染器 – 谭啸
  • 基于 OwlReady2 的人机交互 – 宋从威
  • Byte Code 的革命 – 赵俊德
  • 使用 Sphinx 制作 Web 文档 – 陈照强
  • 一键将 C/C++ 代码转换为 Python 能调用的代码 – 韦泽华
  • Python 虚拟环境和依赖管理工具大乱斗 – 李辉

我在闪电演讲开场说这是 PyCon China 第一个闪电演讲专场,但也有可能是最后一个。看了今年的宣传文章,啊,乌鸦嘴!演讲时间又变回了无聊的十分钟快速演讲模式,很显然我的设想「闪电演讲开放给现场听众,随便报名,投票决定要听哪个」也没成。我在想,假如闪电演讲继续像去年那样(乱搞),也许就可以通过活泼的演讲形式和外界宣传来吸引到气质相符的演讲和演讲者,进一步影响到参会者,最终让整个大会轻松活泼一点。

blank

如果你对这个不甚完美的最后一次 PyCon China「真 · 闪电演讲」感兴趣的话,可以移步 bilibili 或 Youtube 看现场录像。

品牌形象建设计划

在我加入之后,发现 PyCon China 的品牌形象很混乱:微博账号长久停止更新,也没有建立 Twitter 和 Facebook 账号,各个账号的名称和头像都不统一,所以我就想建设一个统一完整的品牌形象,让它专业一点。

先是推动确立了统一的官方 logo,当时确定的主 logo 据说是一位新加坡华人工程师设计的作品(具体姓名忘记了,看官若了解还请评论告知),我很喜欢这个 logo:

blank后续的大会 logo 基本都是这个图案的变种。对于文字版的 logo,我选了基于这个 logo 设计的 PyCon China 2012 版的带文字 logo(作者是陆卫锋):

blank

然后用我最熟练的平面设计软件——Windows 画图删掉了「PyCon 2012」,调整了「CHINA」和图形的距离,让文字里东方明珠塔的塔尖收进图案内部,最终确立了文字版本的主 logo:

blank

大部分社交账号都统一使用这个 logo,官网上因为需要横向 logo,所以用了一个主 logo 横版的变体(由错姐设计)。只剩下两处没统一:新浪微博当时似乎是限制修改头像没改成,而 GitHub 组织大概是被漏掉了。统一了 logo 之后,接着结束了 PyCon China 没有 Twitter 和 Facebook 账号的历史,并且推动恢复了新浪微博账号的运营。但是拜托今年不要放弃更新 Twitter 和 Facebook 呀!29 号在公众号和新浪微博发布动态,而 Twitter 和 Facebook 一直都静悄悄……直到五天后才在 Twitter 上同步消息,而 Facebook 依然没有更新。这时演讲征集截止时间只剩下两天(29 号开放 7 号就结束似乎有些太短了?)

顺便说一句,发现今年出现了一个新的 PyChina logo,建议配套使用:如果社交帐号名称是 PyCon China,那么就用 PyCon China 的 logo;如果名称是 PyChina,那么就用 PyChina 的 logo。bilibili 账号这样搭配就显得混乱,违背了统一品牌形象的初衷(今年或许可以继续完成统一 logo 这件事)。

工作人员 Credit 计划

在 2018 年的大会网站以及我加入时 2019 年的大会网站上只列了一个出品人列表,这个列表更像是一个曾经参与、短暂参与和偶尔参与的混合列表。列表里有的人什么都做,比如李者璈(Manjusaka),和辛庆老师一样做各种协调和杂活,同时还全力支持多个城市的会务,兼职主持人(可塑性极强,如果讲者缺席了就可以当晚熬夜准备演讲第二天填空缺);有的人什么也不做,比如往届参与的成员和初创成员;更多的则是参与演讲议题评审的审稿人;而有的人做了很多工作,却没有被列到出品人列表里面,比如大部分真正处理各类具体筹备工作的工作人员其实大都不在这个列表里:

  • 辛庆(辛姐/Cynthia Xin):协调各类事情,做了很多杂务,因为太多所以不知道列出哪件比较好,反正至少顶了 PyCon China 半边天。
  • 许银(许老板/Jamie Xu):协调现场会务,处理现场各种「火灾水灾」事件。
  • 晁倩(倩姨/啊Q/Queena Chao):PyChina 公众号主理人和现场志愿者负责人,2019 年大部分公众号文章的编辑,同时也帮忙做各种杂务。
  • 王梦兰(大猫/Alan Wang):身兼多职,主营财务、社交媒体维护和资料翻译。
  • 王晓珂(Nicoco Wang):负责物料采购和现场签到,除了买买买,也一起帮忙做翻译和文章审阅。
  • 吴妙璇(错姐/小错/Mxuan):大部分现场物料、文章配图、幻灯片主题、T 恤等纪念品的设计都出自错姐之手。更多她的设计可以在《PyConChina大会设计2017-2019》看到。

在自己负责的领域之外,这里的每个人都会帮忙做各种杂务,也在现场做各种会务支持。除了我比较熟悉的这些人,还有很多其他工作人员和志愿者也一样在背后默默支持。尽管如此,大部分听众却没法了解到这些。

让积极做事情的人感到被认可是一件很重要的事情,电影结尾的演职员表即便滚动的再快,也会有人仔细在里面找自己的名字。一个合理的 Credit 机制可以让工作的时候有明确的分工和职责,有了认可也会让大家更有动力参与和投入。基于这些考虑,所以有了这个「工作人员 Credit 计划」。这个计划的重点就是制作一个分类的工作人员列表放到官网上,也推动了为公众号文章署名之类的小改进。

经过大家的共同努力,下面就是最终整理出的工作人员列表(篇幅所限,出品人没有列出,完整的工作人员列表可以在大会网站的工作人员页面看到):blank

这个页面其实还是未完成的状态。有一些特殊贡献没能列出,比如刘玉龙和何翔宇上传了所有的演讲视频到 bilibili 和 YouTube(中间李者璈也有协助);王梦兰在做新浪微博账号的更新和维护,中间还帮我接管过一段时间的 Twitter 和 Facebook。现场志愿者列表始终没有整理出来,估计也永远不会整理完了。

2019 未完成

筹备过程漫长,许多事情等不到答复可以自己动手,实在等不到那就放弃或折中,而更多的问题是在现场会务上集中出现。因为有太多变数和不确定性,而且又没有足够的时间进行预演,再加上缺乏流程约定和验收,上海场遇到了太多问题,仅我自己见到和体验到的就有:连接线不够长,电脑没法放到讲台;现场网络很差;有道同传失灵;主会场屏幕幻灯片两边有一些看不到;翻页笔频繁失灵;翻页笔不支持左右翻页;(继 2018 再一次)幻灯片尺寸错误;两个会场临时隔断墙隔音不好,分会场变大杂烩场;摄影师拍照片手法单调,拍讲师看不到背景幻灯片,不抓拍开场等关键画面;摄影师录像漏拍,而且没有备用摄像,导致上午主会场 laike9m 的演讲录像不完整……问题远远不止这些,细说起来大概三天三夜说不完。关于上海场会务的诸多问题在郑天航写的《在 PyCon Shanghai 2019 中我该做什么》里有很详细的介绍。

和大多数人类合作活动一样,PyCon China 2019 包含了各种妥协、事故和拖延,但是总有各种将就、补救和掩盖来让一切看起来还不错。对于观众来说看起来还不错就够了,但是对于组织者来说这远远不够,因为我们本可以做得更好,至少也要凭着这一次的经验,让下一次更好一点。

因为在筹备组这半年一直没工作,所以做什么事情都会慢慢变成全职,偶尔几天全职做外包,偶尔几天全职写书,偶尔变成全职参与 PyCon China(也因此被调侃家里有矿,所以筹备组里的人都叫我小李老板)。同样也是因为没工作,大多时间都花在了 PyCon China 筹备和准备演讲上,这半年除了拿过一次稿费做了一个外包项目外没有任何收入,生活也变得很混乱。为了让生活重回正轨,所以决定不再参与 2020 大会的策划。2019 年 10 月 27 号,成都场结束,PyCon China 2019 组织工作进入尾声,我就在筹备组群聊和大家说了再见。

在 PyCon China 的这段时间里,认识了很多有趣的朋友,收获了很多快乐的时光,希望大家一切顺利!

期待 PyCon China 2020

2020 年 10 月 29 号,PyCon China 2020 宣布正式启动了,会议时间定在 11 月的 28~29 号。希望今年的 PyCon China 可以办得更好……

等等,官网哪里去了?不知道为什么,PyCon China 2020 已经开始筹备了,官网却处于下线的状态(不论是 pyconchina.org.cn 还是 cn.pycon.org)。我认为官网是技术大会或者说任何现代品牌的最主要的网络门面,即使用户更喜欢关注微信公众号和新浪微博。对于一个技术大会来说,在网络上搜索关键词找不到官网,找到官网却打不开,这都会向观众传达一个很不专业的信号。修复并更新官网应该是在公开 PyCon China 2020 消息之前就应该做好的事情,也是现在的当务之急(上文提到官网时使用的链接指向的是我临时放到 greyli.com/archives/pyconchina 下的网站存档,基于 2019 大会网站源码生成)。

虽然不太可能实现,但我还是想说,我们应该有个博客……去年因为种种原因没能做成这件事,最终只是写了一篇文章放到 PyChina 的博客上,但我还是建议把 PyCon China 博客独立出来。有一个博客可以更方便发布各种消息给搜索引擎和超链接爱好者,而不仅仅是放到微信局域网里的公众号上服务微信用户。

尽管不再参与组织今年的 PyCon China,但是翻开去年写的《PyCon China 2020 规划》,还是有一些改进建议想一并写在这里,也许能够提供一些启发促成一些改进(不感兴趣请猛按空格键)。

首先是议题收集和审核流程需要改进。我在参与组织 FlaskCon 2020 时主办方使用的议题管理工具 Sessionize 很好用(议题收集、评审和日程表导出一体化工具),投票方式更简单合理,每个评审员独立完成投票,通过多重对比得出每个演讲的权重顺序,最终综合所有评审员的投票得出结果。这样远比微信群讨论和看板事项留言更高效,也比赞同反对式的投票方式更科学。而且可以调用其 API 生成网站议程时间表,不用投入大量精力手动同步议程变动。今年会议改线上刚好可以用 Sessionize 的免费社区版,但是考虑到今年演讲申请大都已经投递了,估计没法用(除非手动导入议题数据……),但是明年或许可以考虑。接着去年的想法,如果可能的话,取消工作人员页面的出品人概念,改为工作人员的子分类——议题审核组,只保留列表中该年参与的成员。

在议题申请上去年还有一个改进想法是在议题申请表里添加更多细化选项,比如「演讲难度」。标注演讲难度可以让听众有一个心理期待值预判,也可以让讲者不会有太多心理负担(担心话题太简单被人骂,担心话题太深奥也被人骂)。

另外,协作工具也需要改进。去年就尝试把全部工作沟通从微信转移到 Slack,但是过程并不顺利,不知道今年是不是又回到了微信群聊。我认为不应该互相迁就,而是要想办法让所有人都能正常上网,然后使用最好用的工具。

我在 19 年最后,花了很长时间来做的事情就是整理出一份《PyCon China 文档和资源导航》,收集了所有相关的资源和文档信息,以便能更好的利用这些文档,方便找到自己需要的资源和链接。同时也尽可能的扩充了大部分事项的检查清单,每一个事项都需要一个用来执行和验收的检查清单,这一点在会后总结时已经达成共识。同时我们也需要写更多的文档来规约和优化会议细节。比如分别交给讲者、听众、筹备组新成员、现场志愿者的入门指引和注意事项。​这些东西再统统加入文档和资源导航以便于查找,并且逐年迭代和优化。

最后,PyCon China 2020 需要新鲜的血液、肺泡和脑细胞,欢迎加入志愿者团队和筹备组,欢迎报名演讲。

有钱的出钱,有力的出力,柴禾多了,火就旺了。祝 PyCon China 越来越好。


延伸阅读: