在 PyCon Shanghai 2019 中我该做什么

参与了两年的 PyCon China 主会场举办,今年来了 PyCon Shanghai 会场,exciting!

emmm, 当然每次都是作为志愿者 (和半个主办方) 来帮忙的,

今年是属于 应急组 (骗你的,没有这个组,其实是机动组) 成员,从事各项现场浇水救火工作。

这样作为这么一种末端执行者的过程中,我能更全面的看到一些举办会议中出现的问题,

并总结一些可以流程或者可以改进的点,让我们明天能在知乎上被喷得轻一点。

关于 PyCon 我有太多想说的了,所以本篇很长,也不适合手机阅读,目前是按 时间顺序 做的记录总结,

然后关于总结的总结,整理了有哪些我觉得可能需要提前准备的,以及本次缺失的,可以直接点击跳转最后

关于演讲设备篇检查清单,可以点击这里跳转 内场之设备篇


下面说的这些并不只是站在志愿者的角度 (a.k.a. 我的职责) 上去提的,而是想站在这个大会 应该 要怎么运作的角度 (a.k.a. 主办方的职责) 去思考得到的。

而主办方或者说组委会又需要站在来参与者的角度上设身处地的想,所以我们会来的有哪些类型的人呢?

  • 志愿者,除了主办方以外,他们是最早到的人,也是我们的主要人手
  • 参会者,买票来听的人,也是占比最多的人群
  • 讲师,大家都是为了他们来的
  • 合作展商,也是出钱的

我按时间顺序挨着说一下各个流程环节,最后再总结一下,关于现场,有哪些需要提前准备的,有哪些检查清单的点。

也会说说哪些是该做但我们没有做到的,哪些是我补救的。

(部分工作内容点是在 志愿者安排文件 中写了的,我这里就是稍微展开说很多一些遗漏的细节点)


# 提前一天的准备

接讲师来酒店、跟志愿者确认工作内容、跟酒店确认工作、准备第二天用餐、现场展台搭建等,这里暂时不谈,因为本篇主要是想讲关于现场的。(绝对不是因为会前筹划的相关内容再写两篇也写不下)

# PyCon 当天 - 凌晨开始

2019-09-21。PyCon 用的场地是兴荣温德姆酒店 2、3 楼。

# 志愿者到来

志愿者们一早 6 点左右就陆续来了,围绕着他们的到来,一些工作开始了。

不,准确说,在他们来之前,也有些跟志愿者和现场相关的工作需要已经做了,比如

  • 群里再次通知地点、发地图定位,定位精确到具体的哪一道门

  • 通知提醒需要自带的东西 (笔记本、U 盘、充电宝、打印机)、天气情况等

    • 当然 笔记本、U 盘、充电宝 些主办方也应该 #提前准备 足够用的 (这里在后面的演讲播控一章去说),当然对应的物资清单也是该有的 (本次并没有)
    • 充电宝,在假设大部分志愿者都没自带的情况下,主办方事先准备 10 来个可租界的共享充电宝就很有必要,因为手机电是肯定用不过一天的 (本次并没有)
  • 场地入口摆放指示牌 / 导航牌,考虑多个门口

    (这里主办方是做了几个指示牌的,但当时还没摆出来,我打车到酒店了是一个很偏的侧门,下车简直怀疑是不是我看错地址了)

在 2 楼的主会场,首先需要有统筹 / 签到的人在,给来的志愿者们

  • 签到、领工牌、领会服 (需前一晚 #提前准备 放置好)

  • 确认所属工作组、告诉他该找哪位负责人,(需要签到处要有熟悉安排的人在)

    负责人告诉他现在立刻要做的事、后续的事

  • 搬早餐、发放早餐 (需要 #提前一天预定、按时送到)

  • 垃圾桶、垃圾袋 (需要 #提前一晚 让酒店工作人员放好)

    (这个最开始也是没有,随着早餐的饮食,大家垃圾丢哪里就很是问题了。我搬完早餐后就先找了个纸箱和塑料膜应急,然后去楼下叫酒店工作人员拿垃圾箱上来)

    (不只是志愿者需要垃圾桶,会场内、走道内、茶歇旁都应该有)

  • 志愿者自带的行李、背包等安放位置 (需 #提前一晚 安排好就进的小房间)

    (这一点可能主办方没有想到,我问了一圈后问到有厦门厅还是我们订的,就在志愿者群里发了条通知)

    (这里再说本质一点,是需要主办方有固定的物资/工具集中存放点,很多具体的工具、备用的工具都能从这里拿到,减少到处叫人、到处问人的时间)

    (还有跟这块相关的是跟酒店 #提前确认 会场能使用到的最早(布置) / 最晚(收拾)时间,如果是订半天的会场,确认剩余半天的场地被租借的情况)

# 签到处

好了,吃完早餐,丢了垃圾各位志愿者就可以正式开始工作了,

在最早哪会只来了几个人时,大家其实都算机动人员,最优先的事情就是帮上面一笔带过的签到组搭建签到点位、走通签到流程,包括准备:展桌、签到设备(笔记本、平板、打印机)、电源、衣服、工牌;

# 入口导航牌

做完签到准备这一层,再去把没摆上的入口导航牌摆门口,包括酒店门口、各楼层门口),

(有些导航牌没有箭头 =>,我就在白色的贴纸上画上箭头贴上去了),

这样的好处是可以省下一个去门口引导志愿者的志愿者人手。

# 场内导航牌/场内引导

由于我们会场跨越两层楼,展位也有很多 (10 个左右),走道也并非扩阔,完全可以预见一些比较拥挤的情况;并且有些没有背景墙的展位,人一多了就挡住了桌子和展板,后面的都不知道这里是干什么了,只能依赖于问人和口口相传;

展位、嘉宾休息室、换场方向 (电梯)、卫生间 (酒店卫生间位置一般比较隐蔽)、垃圾桶所在地 (前期并不存在),这些都是在不问人情况下很难自己找到的

因此会场有高过人均头顶的导航牌就很有必要 (这块一直都 #缺失,跟工作人员提过找板子的事,迫于叫了人并没有后续,我也没有补救成功) (这里也是用户体验里很重要的观念,引导系统)

为了避免持续拥堵和刚来找不当方向的情况,是需要有志愿者在签到处做持续引导 (你可以理解为复读机,不断重复跟一小波一小群人说哪儿是哪儿) (前期可能没有人在做,我找了两位志愿者同学跟他们说了一下),

也需要 #提前准备 把会场平面示意图印在指南手册 (这里主办方还做的挺好的)、和会场入口 (#缺失)

# 展位布置

背景墙布置

背景墙安装已经做完啦不用管啦 (这个只能提前一天做的,包括切割焊接,工作量太大)

需要贴的照片开始往上贴了

有些 #提前准备 好的需要参会者互动贴上去的贴纸、签名,合影用的标语 KT 板,搬到相应的背景墙旁边。(这块很属于杂活,我也没看到安排文件上有分配人手做,所以我就自己顺手搬了)

背景墙还有作为采访背景的职能,这块需要在采访时有足够的人手(#缺失 当时只有两个,我又叫了两位来,情况好转了些)拦住从中间穿的人,请他们绕道 (现场出现了很多被穿过的人打断的情况,有嘉宾面色不悦,摄影师一直安抚说马上就完,没有人打扰了);

或者更好的做法就是后来让摄影师把摄像机前移,取背景墙侧摄,留出 1/3 过道,拦人的压力就小很多了

展商展位

展板#提前准备 的不多说,按照预定的位置搬过去

展桌桌布椅子 这些需要找酒店工作人员搬运 / 或告知地点志愿者也协助搬运

照例插一句,那么最晚到这里开始志愿者就需要和酒店工作人员打交道了,发现了本次会场最让我难受的一系列问题:很多时候找不到工作人员 / 以及跟服务员说的事如果不亲自跟着去做就会没有后续。

从见到工作人员开始,需要至少获得酒店本场次的负责人、后台设备技术负责人联系方式,这能让你在后面需要找人手 / 设备出问题时省很多时间来处理应急情况 (后面再讲)。

让我们继续,展位指示牌是可以简单指引一下这个展位每个部分都有哪些部分 / 职能,在 签到台、二楼的周边服务台很需要用到 (签到台我看到是有纸折起来类似铭牌,周边服务台的是 #缺失,我就手写了几张贴纸贴上了)

电源线,展位有些是需要用电的,需要 #提前准备 长电源线 (内场有,展位的 #缺失)、足够多的安全的接线板;最好过道两边墙上都有电源接口 (需要跟酒店 #提前确认),如果需要过道横向拉线,需要确保插座不能暴露在过道中间、线必须用电工胶布 (安全问题,#缺失) 全部粘地;

最开始 PyCharm 展位前志愿者同学拉的电源就把插线板暴露在路中间,过往不下十个人被绊住,也有同学说「迟早会有人被绊倒」,我赶紧叫酒店工作人员再拿接线板来,和旁边同学一起把原有的扯了新接一个,把插线板接口藏在展桌布下面,拿黑胶布 (没有电工胶布) 来全部粘在地上

一系列的布置之后,出现了一堆碎屑、包装纸垃圾需要清理,你看,最开始准备的~~(其实还不存在的)~~垃圾桶)是不是派上用场了

周边展位

跟主办方相关的展位就是 签到台 和 周边服务台 的展位了,签到台是上面已经写了,现在可以开始搞周边展位了

像周边展位这样有好几部分环节的,就很需要有 展位指示牌 which 刚才上面已经写了,本质是明确的向参会者传达 「这里有什么,能找到什么」,节省重复的说名字来引导参会者走完 填问券、领东西、发票等一系列流程

周边还需要 #提前确认 各种流程能否走通 (当时出现来了人各种扫码之后,发现调查问券二维码错了、加现场群二维码自动回复错误#翻车 现场,又是一顿修补)

而周边也是一个很吃展示和宣传的展位,东西也很多,我当时是按柜台思路做的,每样东西摆出几个放在展桌上,供大家看,需要领取时按不同情况有些直接从桌上拿,有些只从存货的袋子/盒子里拿

比如领会服 T 恤,遇到了好几个参会者到服务台问衣服是不是这里领,这时就发现了展位指示牌对于周边这种展的局限性,于是让旁边同学拿了一件衣服出来直接摆在桌上,这样更能直观的表现这里是领什么的部分;其他物品也是这样的思路。

# 内场搭建

屏幕、音响、网络、舞台、讲台、灯光、座位,这些工作量太大,只能 #提前一晚 就准备好,甚至主会场的设备也应调试好,早上宝贵的时间只够挨着过最后一遍确认的检查流程。

嘉宾、讲师的座位的铭牌也需要确认一遍,并且他们的座位位置安排也需要有文件记录 (#缺失),再不济也要有照相记录,这在引导嘉宾入座和找人 (尤其是在开幕后) 非常有用。

灯光效果也是容易遗忘的应急检查点,灯光突然被误关的时候、分会场需要调节亮度的时候,在这种需要应急处理的时候,你才会想的起来。 (在去年 18 年的 PyCon 上我事先确认了这些点,今年我本来抱着一个参会者的心态,就没有想事前做很多,于是就遇到了下午 B 会场的灯突然被误关一半的情况)

然后就到了最重要的一章

# 内场之设备篇

演讲能进行得下去的最基础的前提就是,

  • 讲师想讲的话能让大家听得到
  • 讲师想展示内容能让大家看得到

所以所有的围绕这两点的设备都是重中之重;

这些设备也是最容易关键时候出问题的东西,所以这里引申出了两个点,

  • 所有主会场讲师的 Slides (a.k.a PPT) 都需要 #提前一晚 现场确认演示效果无误 (#缺失,显然每年都没做到) (分会场还有后面说的中午的时间)
  • 所有会场都要有一个常驻设备技术人员 (#严重缺失,我每次都找不到人,投屏问题我都是轮流去各会场看,开场后所有音量大小都是我去调音台根据讲师声音大小调整的)

关于演出效果,我根据经验:

  • 话筒,每个会场至少两个 (#提前准备)

  • 话筒电池,每个会场必须有能坚持半天的预留电池 (#提前准备 ,一般是 5 号电池)

  • 笔记本电量,需不需要接电源,能放多久,不能出现演讲到一半没电关机的情况

  • 音响

    • 各个音响是否能响 (#缺失)

      能响是很基础的对吧,我也觉得,但是主会场当时 4 个音响只有一个侧边的能响,会场另一侧最后位置声音就会小很多。

      叫设备技术支持人员又是要服务员打电话催 10 分钟,来修了半个小时也没修好,直到最后也没修复

      所以主会场刚开始我去调音台把声音调大了一点,后面也是按上台讲师说话的声音大小再去修正

    • 音响到话筒是否易产生啸叫

      主会场我只听到出现一次啸叫,这块还是做的很好

    • 调音台有没有播控 (#缺失)

    • Slide 中视频声音能否正常放出 (#缺失)

      • 显然没有,本质是确认 Slide 本身文件是否正常、视频输出线是否有同时输出声音
      • 所以出现了 Dave 演讲时用另一台电脑放声音的严重音画不同步的 #翻车 现场
  • 视频

    • 确认各个会场屏幕是否亮屏正常、颜色正常、同步正常、亮度合适

    • 确认各个会场屏幕分辨率 / 比例 / 物理尺寸并通知对应讲师

      这块做的挺好,我看到有安排文件里有记录各个屏的分辨率比例

      但不知道是否 #提前通知 到讲师了。主会场 Armin 的演讲出现了 Slide 因为比例被上下截断的 #翻车 现场

    • 确认有无异形比例的问题屏 (#缺失)

      主会场两侧的屏幕都是异形比例屏,被横向压缩了,实际物理比例和对应分辨率比例不一致

    • 视频播放电脑;讲师直接用主办方的还是自己的,主办方的电脑性能是否足够,有无问题

    • 视频转接头 (#缺失),考虑到讲师各种各样的笔记本不同输出,显然需要需要事先准备足够多的转接头;

      最低要求是至少有 HDMI、TypeC、DP 互换的排列组合

      (我们这次还出现了借了讲师的转接头差点还不了的情况)

    • 长视频传输线 (#缺失),足够能从讲台接到控制台上的,让讲师能看自己的备注

      因为有转接头,所以以上三种类型的线理论上都可以,但一般是 HDMI 线,便宜,兼容控制台设备多

      分会场 B 就直到 A 会场完了给它拿过去,才用上了长线,之前都是放在控制台那里,讲师用翻页笔只能上下翻和看屏幕

    • 确认 Slide 配合屏幕分辨率能否在后排能看清文字

      看不清就尽量让讲师改,放大

  • 软件

    我们来列一下这样大会常见的讲师 Slide 文件格式

    • pptx - 不多说,巨硬家 大家最常见的,但实际会上用的很少的,软件就无脑配备 Office 最新版

    • keynote - 苹果家的,软件也是无脑更新 keynote 最新版就行

    • reveal.js 及其类似 html 页面形式 slide - 软件至少要有 Chrome, Firefox 最新版

      (18 年有遇到 Ezio 演讲的 slide 只兼容 Firefox 的问题)

    • pdf - 最简单了,不用特殊准备,系统 win10, macOS 等都自带支持的

  • 播放控制

    投屏方式,

    翻页笔 / 无线鼠标 (#提前准备),

    视频切换台、调音台,是否有人负责 (#缺失,至少调音台都是我在调),播控同学是否会用 (#缺失,我都问过,只有 B 会场同学会切),有没有常驻设备人员 (#严重缺失,下午我只看到 E, C 会场有人),有没有紧急电话 (#缺失 只有 D 会场有)

  • slide

    • slide 转移基本都靠 #提前准备 的 U盘,需要保证有冗余的备份文件的 U盘 (#缺失)、保证讲师更改 slide 后能确实重新放到 U 盘,重新放到要播放的笔记本上了

    • 关于 slide 本身,需要播放一遍确认 排版、字体、动画、内嵌图片/视频、音量播放等 (#严重缺失)

    • 还需要确认 Slide 中有没有左右翻页的情况,因为翻页笔和鼠标都不支持

    今年这些确认工作就像没做一样,大量翻车 (也可能是没时间做,这就涉及到筹划问题)

    想到去年我就两个会场所有的 PPT 确认,今年就一言难尽

    U 盘内和每个播放的 笔记本内,还需要有大会的宣传背景图 (#缺失),在没有开场之前一直保持背景是宣传图,而不是黑屏 (E会场)

  • 网络

    有些主题是需要有网络现场演示的,着需要

    • #提前确认 并通知酒店网络情况
    • #提前准备 有线网络、网线、专用演示路由器、或者 4G 上网卡设备 (#缺失)
    • 协助讲师一起 #提前准备 不能用网的 failback 对策,保证演讲能进行
  • 倒计时

    • 足够每个会场的细分不同时间的倒计时牌

      (这里主办是准备了足够多的,但是下午会场因为一些混乱还是有 A 会场缺了倒计时牌,我下午跟人跑了两趟也没找到)

    • 有倒计时负责人

  • 会场大门前后门检查 (#缺失)

    • 门有没有锁,该不该开,能不能开

      比如一般应该在会议开始前打开前后门,在会议中途只开后门

      (当我下午开场前检查时 E, F 场都只开了前门锁了后门,所以赶紧叫经理叫人来开门)

    • 门有没有问题,隔音效果如果

      (C B 会场都有一扇门开关声音很大,B 会场我让一位保安哥哥站那扇门前,C 场用胶布修了下门)

这个检查清单很长,目的是为了能见少一些已知的坑点,但还有很多突发情况依然只能靠临场应变来处理。

下午各个分会场的确认流程也是应该按这个清单走一遍

# 会议主持人

想起了在校时主持人培训的恐怖,流程、语气感情、节奏把控、应急处理等,各类细节再写两篇文章也讲不完,所以略过了。

最关键的就是主持人对于串场的处理保证会议能按流程走、对各种突发情况的圆场处理 保证会议能进行得下去。

比如分会场 A 就遇到了主持人离开换后备主持人~~(其实并不存在所以就我去了)~~(#缺失)上场的应急情况。

串场相对简单,最难的是开场白和结尾致辞,需要用感情讲出优秀的文案,不同专业程度的主持人给人的感觉很不一样。

我在 A 会场的结尾就欠缺深度过于平淡,相对的我看到最好的是 B 会场 李辉 对整个 PyCon 的收尾,不说了,我要去找视频再看一遍。

# 参会者陆续入场

到酒店门口 ->

看到门口引导牌 -> 跟随来到会场签到台 ->

签到完领袋领会牌 -> 告知各项事务 ->

看到展位引导牌 -> 依次走展位流程 -> 完了后一路跟随引导牌来到楼上周边服务台 ->

根据各展会的盖章领会服 -> 做问券领周边 ->

饿了,领零食 -> 吃完,包装袋按导航牌到垃圾桶处扔掉 -> 吃完口渴,现场饮水处饮用 ->

想上卫生间洗手,看到卫生间的导航牌指向 -> 进出洗手间 ->

之后准备进场入座 -> 大会开幕

上线写的就是提前准备好了各种事情,在有引导牌下的理想情况,实际当然不会这么顺利,所以剩下的志愿者同学就是负责解答各种问题,帮助和引导参会者走完这个流程

# 讲师到达

讲师一般都是安排住酒店的,所以就是按时下楼,如果没有按时,需要主办方去提醒。

所以这块接引工作主要分为:

  • 提醒时间
  • 接引进嘉宾休息室 (需 #提前准备)
  • 接引入场前排指定位置入座 (嘉宾如果不坐前排,会给参会者心理感官不太好)
  • 再次确认 Slide 及修改情况
  • 每段主题演讲时间提醒下一场讲师准备 (#缺失)

对于国外讲师,一般需要专人(翻译)负责接引,并告知各项事宜

# 大会开幕

开场后,主要需要机动人员在场处理各种应急工作。(例如晕车腹泻,所以可以 #提前准备 一些常见速效药,比如治晕车腹泻的) (跟医药相关的就是急救和疏散通道问题)

如果会议有延迟安排 (今天特殊恶劣天气原因),需要同时通知 志愿者、参会者、讲师,换言之,就是通知到所有人,确保所有人都是知道时间安排。

这里引申出一个问题,会议议程时间如何控制、会议延迟如何补救?

# 午间

快到中午那会,也就是大会结束之前至少提前半小时就要叫志愿者去分批吃饭了。(这里吃饭的时候又出现 没有垃圾桶 的情况,我去的时候地上已经堆了很多餐饮剩饭的盒子,再过一会就很难控制了,赶紧下楼(因为楼上但是没有工作人员)找酒店人员抢了两个袋子上来套在盒子上)

到上午场演讲结束时,主持人结束还需要再次提醒:

  • 全体合照 (#缺失)
  • 下半场开始时间
  • 普通参会者附近就餐建议地点 (#缺失)
  • 讲师嘉宾就餐引导 (#提前准备 餐饮券发放)

除主会场外的各分会场在这个时间也应该布置和检查完了,等主会场中午散场后,就是大量人手投入到主会场转分会场的布置中。

检查清单也走上面那个清单,需要注意音响和话筒的是否串场 (18 年 #翻车)

# 下午分会场开始

提前一点准备在现场对各个会场的议程和内容宣传 (#缺失, 微软场没有写明内容和议程,快开始前我发现人数太少也没宣传,就写了快大点的 KT 板放在微软的展板上,但是已经临近开场,没能救回来,也跟主办方提了在微信群发消息,但在刚开场大家都在专心听讲,很少有看手机,更别说站起来走出来)

然后各个会场也就再按上午会场的流程,在主持人带领下进行各自演讲。

中间我们配合酒店工作人员摆出茶歇甜品等待各个场次的中间休息环节。 (给我们的茶歇点个赞,灰常好恰!)

# 会议结束

陆续结束的其他场次主持人需要在结尾告知还有其他会场、以及最后到 B 场内到 lighting talk (首先主持人要知道这么个流程,这一点我跑每个会场跟主持人说了一遍,确实有差点忘了的)

志愿者部分引导这些提前出来的参会者,部分开始收拾已经结束的会场,避免最后全结束才同时收拾的人手紧张局面 (这一点我们也做的很好)

收拾时需要有物资清单点 (#缺失),区分哪些是主办方的、哪些是酒店的、哪些是借的嘉宾的 (有借有还,口碑不难)

散场后的讲师也需要有主办方接引 (#缺失,可能是人手不足),我觉得是需要有让人家觉得讲完下来后,大家是有联系的感情,不是说主办方用完人就不管了,别让人这样觉得心寒或不人情,也就是至少寒暄两句。

说到讲师这里,所有会场演讲完后,也应该最后聚集讲师参加讲师晚宴 (#提前一晚准备),促进一个嘉宾间良性循环的交流场景,也增加一点对 PyCon 的反馈和口碑。(令我感到奇怪的是,晚宴这个问题,第一会场结束开始,我就陆续问了 4 个主办方的人,他们都给我说没有吧 (包括在我们聚餐时间),但实际上是有的,这就让我感觉很诧异,难道神秘到要偷偷举办连主办方都不知道么)

最后到场地收拾、物资清点、提醒志愿者拿存放的东西和要领的会场礼物证书等 (#缺失,应该在群里有通知的,但是很多人也没注意到,我最后喊了几嗓子领证书也收效甚微)

# 志愿者聚餐

吃爽了,红包收爽了,谢谢许老板,谢谢各位主办、志愿者小伙伴,大家下场再见

# 会场总结

作为身处场地的执行末端人员,我基本完全不知道我该做什么,我只能根据按照大会进行的流程来推断,它还有哪些事情需要我去做,哪些可以提升,这样眼里看到全是事,一样样挑着做。

最大的问题就是酒店工作人员问题,因为去年的工作人员很好找,人也很多,今天的上午几乎全程看不到他们,下午稍微多了几个,但是都会变成那种如果不亲自跟着去做就会没有后续;然后就是设备技术人员问题,由于我今年没有存各种号码了,所以一到找人时候就翻车,然后现场演示也就翻车。

还有些同学会觉得自己只应该做被安排的工作,例如主会场 Dave 演讲时话筒没电,我看了一眼周围没有志愿者同学起身,就立即去前面播控位置拿话筒给他换,但是我下来了跟当时话筒放他面前的播控同学说,「下次这样的话就你上去接一下话筒来换」,

对方回复 「我不知道,又不是我负责的」,我说,「那要不你现在就多一个工作就负责换电池救场嘛」

对方回复 「我不熟悉,我可能没空,你要不还是找个别的志愿者来负责吧」。。。

我很能理解这样的想法,只是想说,我们这些志愿者们,在面对筹办会议的组委会面前你确实是是志愿者,但在面对众多观众以及嘉宾面前,在他们眼里,你就是主办方

emmm,回来熬夜码字流水帐,通过我在会场时记的笔记,展示整理了这篇,扛不住了,我先去睡个觉

# 最后的最后总结

这里汇总了一些我觉得可能需要提前准备的,以及本次缺失的

筹划会议、联系酒店的内容不在此之类

# 提前准备

  • 物资清单 (至少列出重要的大概)
  • 应急医药 (创口贴、酒精、晕车腹泻退烧等速效药))
  • 周边及活动领取相关物品 (贴纸、胸章、衣服、会牌、手册、倒计时牌一类,太多了不赘述)
  • 各类笔、剪刀、美工刀、胶布等常用工具
  • 笔记本、U 盘、打印机、(共享)充电宝、(长)电源线、插座等展位相关设备
  • (长)视频线、转接头、电池、翻页笔、无线鼠标 等演示相关设备
  • LED大屏(尺寸确认)、舞台、背景墙、门口导航牌 等实地搭建相关大型物品设备
  • 会场平面示意图,手册内、现场导航牌

# 提前一天准备

  • 嘉宾及志愿者 早、午、晚餐预定
  • 和酒店预定茶歇的饮食
  • 大型设备安装、座椅摆放
  • 嘉宾休息室

# 提前一晚准备

  • 垃圾桶垃圾袋及摆放
  • 集中的工具 / 物资 / 志愿者背包存放包间
  • 屏幕、话筒音响、网络、舞台、讲台、灯光、座位 的调试和确认工作
  • 讲师 Slides 收集并确认播放效果

# 提前确认

  • 会场可用的最早(布置) / 最晚(收拾)时间
  • 应急出口
  • 半天的场地被其他活动租借的情况
  • 酒店管理层联系方式
  • 足够的驻场设备技术负责人
  • 确认酒店设备工具存放点
  • 确认酒店电源、灯光、空调、调音控制点
  • 会场现场网络
  • 签到台、服务台 各项流程能否走通
  • 内场演讲设备确认
  • 讲师 Slides 播放效果确认
  • 分会场具体内容和议程宣传
  • 分会场前后门检查

# 缺失

  • 高过头顶的展位导航牌 (用于没有背景墙的展位,展板也会被人流挡住)
  • 会场平面示意图导航牌
  • 应急医药
  • 供内部使用的充电宝
  • 电工胶布
  • 长电源线
  • 长视频线、转接头
  • 讲师 Slides 播放效果确认
  • 酒店管理层(大堂经理)联系方式
  • 足够的驻场设备技术负责人
  • 确认酒店设备工具存放点
  • 确认酒店电源、灯光、空调、调音控制点
  • 分会场前后门检查
  • 后备主持人

# 抛出的一些命题

  1. 会议延迟如何控制
  2. 如何找到交待任务后能靠谱执行的人
  3. 现场如果有事如何确保通知到所有人
仿 Spotlight 风格做的 Alfred3 主题样式

迫于 Alfred3 默认的样式以及自带的选择都过于违和 (谁用谁知道),

所以简单做了这个跟 Spotlight 相同配色、透明度、blur,当然也相同高宽样式

预览一下咯:

alfred-default

alfred-active

有道翻译插件 的样式也很搭

youdao-default

youdao-active

对比下原版 Spotlight:

(看起来小一点是截图比例问题)

spotlight

spotlight-active

那么,在哪里能下载到呢?

Spotlight.alfredappearance - GitHub 文件地址

GitHub CDN 直接下载地址

下载文件后直接打开,Powerpack 过的 Alfred3 能自动加载样式,

或者手动进首选项设置 Alfred -> Preferences -> Appearance -> plus

[译] Vue 3 和 Vue 2 中响应式的不同

Vue.js 核心团队已经开始讨论将在 Vue3 中改变的实现了。API 不会有变化,但响应式机制将会有所不用。这意味着什么,对你来说有什么意义?

# Vue 2 的响应式

Vue.js 2 中的响应式是通过 Object.defineProperty 方法定义 gettersetter 完成的。我们来把 Vue 中做的事情简化出一个版本。

Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get:function(){
       return value;
    },
    set:function(newValue){
        if(value !== newValue){
           value = newValue;
           tellTheWorldIhaveChanged(); //somebody is watching!
        }
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13

使用形如这样的结构,当我们每次对属性进行更改时,它都会去通知需要知道这里有变化的观察者和依赖。这个属性的设置(注:指 defineProperty)是在我们的初始化模型(注:this.data)和我们显式调用 Vue.set/vm.$set 时工作的。

但是,通过这样的设置使下面内容需要额外处理:

# 1. 按索引更新数组元素

data(){
  return {
    names:[]
  }
}
...
this.persons[0] = 'John Elway';
1
2
3
4
5
6
7

你很可能已经意识到以上代码不会触发更新。事实上,Vue 详细的指南 中明确地提到关于数组的警告。为啥会这样呢?因为数组的 setter 属性无法拦截检测通过索引的赋值。

一个处理办法是使用 Vue.set 方法

Vue.set(this.names, 0, 'John Elway');
1

并且 Vue 也对一些数组方法做了足够的包装,我们可以直接使用 Array 方法直接更新数组对象。

this.names.push('John Elway');
1

# 2. 动态添加属性

data(){
  return {
    names:[]
  }
}
...
this.$data.lastAddedName = 'John Elway';
1
2
3
4
5
6
7

这可能是最好的例子,对吧?我可能应该知道某个属性已经存在,但有些情况下我们或许并不知道属性名称。JavaScript 提供 loosed-typedness 允许我们轻松添加属性。然而,Vue 响应式并不清楚我们添加了什么。

放着我来! —— Vue.set

Vue.set(this.$data,'lastAddedName','John Elway');
1

如果我们能有一种避免所有 Vue.set 使用情况并把索引操作还给我们的方法 ...

# Vue 3 的响应式

Welcome to 通过代理 (Proxy) 实现响应式的世界。Proxy 是在 ES6 或者称 ES2015 中引进的特性,他们已经出现一段时间,因此我确信大家已经了解他们了,但可能不会在生产环境中使用。因为 Proxy 也是无法shim 的特性,没有 polyfill,也无法在浏览器中 fake 实现。

幸运的是,它的语法并不荒谬。事实上,他也算有些熟悉。

let data = {
   names:[]
};
data.names = new Proxy(data.names,{
    set:function(obj, prop, value){
            if(obj[prop] !== value){
                obj[prop] = value;
                tellTheWorldIhaveChanged();
            }
        }
});
1
2
3
4
5
6
7
8
9
10
11

这里 proxy 不仅拦截前面提到的数组索引赋值,还会在调用数组方法时触发,不再需要包装方法。

那么关于动态添加属性呢?

data = new Proxy(data,{
    set:function(obj, prop, value){
            if(obj[prop] !== value){
                obj[prop] = value;
                tellTheWorldIhaveChanged();
            }
        }
});
data.lastAddedName = 'John Elway'; //tellTheWorldIhaveChanged()
1
2
3
4
5
6
7
8
9

OMG. Awesome! 让我们赶紧在 Change.org 上催更让它快点发布吧!

# 总结

我在 Vue 2.5 发布之前就开始简短的写了。Vue 3 并没有被过多讨论,但由于上面提到的变化,我真的很期待它。话虽如此,我还是无法在近期的工作项目中使用它。Why? Vue3 没有对 IE 的兼容性,Babel 也不能解决这个问题。

但是,这种重构依然有长期优势:

  1. 简化源码 - 这种重构使得团队去掉数组方法包装并减少需要做的类型检查
  2. 新手更易上手 - 从响应式中获取的警告有助于 Vue 新手,这将消除社区论坛一整类的问题
  3. 更好的性能 - 我见到一些人们建议这样做来提升响应式的速度,它其实已经非常快了,我还没在这一点上被说服

感谢阅读!如果你发现了任何错误,请联系我

# Update

似乎使用 Proxy 的版本将附加 -next (像ES-next) 到当前版本号,而不是用 Vue 3。这种更新可能最早出现在 Vue 2.6Vue2.6-next 中。这将消除对 API 中可用内容的混淆。

[译] Netflix 是怎么做以 Notebook 驱动的架构

Jupyter Notebook 是数据科学家库中最强大的工具之一。通常,诸如 Jupyter 或 Zeppelin 等 Notebook 技术用于各种任务,例如数据挖掘,模型测试或数据准备。

如果你在一个小型的数据科学家团队,那么使用 Notebook 场景似乎非常有限,但是大型组织运行几十个并行的数据科学工作又如何呢?

最近,Netflix 工程团队发布了一系列博客文章,详细的介绍了他们使用 Jupyter Notebook 应用的内部架构。

# Netflix 中的 Notebooks

最初,Netflix 采用 Jupyter Notebook 作为数据挖掘和分析的工具。

然而,工程团队很快意识到 Jupyter 在运行时的抽象、可扩展性、代码的可解释性和调试方面提供了明显的优势,如果使用得当,这些优势可能会对数据科学工作效率产生重大影响。

为了扩大 Jupyter 作为数据科学分析的使用,Netflix 工程团队需要解决几个主要挑战:

notebooks-at-scale

  • 代码-输出不匹配:Notebooks 经常被修改,很多时候,你在环境中看到的输出与当前代码不对应。

  • 服务器要求:Notebooks 通常需要运行 Notebook 服务器运行时 (Jupyter),这在大规模采用时是一个架构挑战。

  • 调度:大多数数据科学模型需要定期执行,但是用于调度 Notebook 的工具仍然相当有限。

  • 参数化:Notebooks 是相当静态的代码环境,但输入参数的使用场景又非常繁多。

  • 集成测试:每个 Notebook 是独立的代码环境,很明显这很难与其他 Notebooks 集成。因此,使用 Notebooks 时,像集成测试这样的任务就是个噩梦。

为了应对上述一些挑战,Netflix工程团队开始努力为 Jupyter 封装一系列基础架构,以图简化 Notebook 在整个团队中应用的困难。

# Runtime 运行时

要解决的第一个挑战是创建一个与服务器无关的运行时,支持 Notebook 的参数化执行。

Netflix 决定采用 Papermill 来实现这一目标。Papermill 基于流行的 nteract 库,是一个用于参数化、执行和分析 Jupyter Notebook 的工具。

从技术上讲,Papermill 接收 Notebook 路径和一些参数输入,然后使用输入执行和渲染请求的 Notebook。当每个单元被执行时,它将产生的结果保存到一个独立输出的 Notebook 中。

Papermill 的另一个好处是能够将 Notebook 的输出存储在不同的存储格式中。

以 Netflix 为例在,团队决定将任何 Notebook 执行的结果输出到由 Commuter 管理的 S3 bucket 中;

Commuter 是另一个基于 nteract 的平台,包括用于查找 Notebook 的资源浏览器,并提供了兼容 Jupyter 版本的内容 API。

从高层次来看,Netflix 笔记本架构开始看起来如下图所示:

img

# 调度

Netflix 工程团队需要解决的另一个关键挑战是创建基础架构,以便能够定期执行 Notebook。

在引入 Papermill 之后,这一挑战变得相对容易解决,因为这个架构本质上将参数化执行与调度分离,这意味着它可以与不同的调度器模型配合使用。

Netflix 团队决定将他们的 Notebooks 与他们自己的调度框架 Meson 集成。从技术上讲,Meson 是一个通用的工作流程编排和调度框架,用于跨异步系统执行 ML 管道。

这一过程的架构相对简单,如下图所示:

notebook-and-docker

# 集成测试

为了在 Noteboo k架构中自动化集成测试,Netflix 采用了 Papermill 的多输出功能。本质上,集成测试是另一个Notebook,输出成为目标 Notebook 的输入。

notebook-to-testing

Netflix 的架构是我见过的大规模使用 Jupyter Notebook 最先进的基础设施之一。在这种架构中实现的大多数模式都基于开源工具,并且可以被刚开始进行数据科学之旅的团队轻松使用。

做了一款小清新的 zsh 主题 jovial

折腾过各种带有一堆状态监控的 zsh 配置,那个时候每次打开终端就像个 HUD 一样,满屏的参数;

后来看腻了,于是自己做了个简约一点,颜色清爽一点的主题 jovial

https://github.com/zthxxx/jovial

没有 powerline 字体,没有复杂的监控显示,

powerline 看多了,觉得那种色块对比度太厚重了,现在喜欢偏线条的一点的,感觉优雅一些;

只有最简单的几个状态展示:项目依赖语言git 状态当前时间

自定义插件 里还添加了一些有用的特性,比如长时间的命令执行成功或失败时都发送一条系统推送、比如给 less 添加代码高亮支持等。

# 上图

jovial-theme

# 安装

手动安装的话,就是直接下载 jovial.zsh-theme 这个文件到 oh-my-zsh 主题目录,

然后再改 ~/.zshrc 中的主题名为 jovial

当然,我这么懒的人肯定是提供了自动化的一句话安装嘛:

curl -sSL git.io/jovial | sudo bash -s $USER
1

会自动下载主题文件、安装 git autojump urltools 插件,并自动修改 .zshrc 中的主题名和插件名配置。

如果没有 zshoh-my-zsh 的话,也会默认尝试自动安装并修改默认 shell (所以才需要 root 权限)~

支持 MacOS、Debian / Ubuntu、CentOS、Arch,

所以也可以在服务器上这样一句话安装

比如把上面那句话加入到服务器初始化脚本中,方便的多,简直不要太爽!