很荣幸,接到了QCon BeiJing的邀请,去当讲师,去讲一个有关于python的topic。

一周准备

在确定了 Topic 的主题后,开始了为期一周的准备时间。这是忙碌的一周,本以为准备PPT会很简单的,但写的时候,才发现很多东西都需要完善和准备,确实不简单。但既然参加 QCon 的讲演,既然去分享,那么就一定要做好它,一定要讲好它。不管怎么说,断断续续,磨磨蹭蹭,总算是写完了。

技巧

参加了qcon的讲师培训,收获颇多。

演讲和阅读

演讲不是阅读,不要在演讲中去阅读那些本来应该由资料传达的信息。演讲应该承担书面资料解决不好的问题。『演讲陈述』与『资料阅读』有着不同的特点。否则,直接把讲演的资料打印好发给听讲者回去阅读好了。

准备内容 - 先准备内容,后进行排版(左右脑不同,混杂进行眼中降低效率) - 用手绘思维导图进行内容整理(手绘的印象会比用软件强很多倍) - 产品的FAB(Feature, Advantage, Benefit),聚焦对听众的Benifit。 - 内容萃取漏斗,化繁为简, 信息由混乱复杂变为简洁有力的过程。(通过ticker note能够做到这些) - 传递信心比传递信息更重要(二者会表现出截然不同的思路和做法。不要试图把自己在演讲领域中知道的东西全盘托出,以显干货十足。一次最糟糕的演讲陈述,可能就是因为负载了过多的信息造成的。) - 让你的演讲有合适的『粒度』,不要用逐字逐句的演讲稿,保持粒度最佳工具“sticker-note” - 不要用层级结构,用线性结构来组织slides

现场表现 - 克服紧张:转移观众注意力,刻意演练(自我录像5分钟),现场考察(重要) - 手势:万能切西瓜,双手切,左手切,右手切,切向观众。

忌讳:揣兜,扶臂

视觉力 slides 信息应该具备三个层次: 1. 幻灯片:要点、图片、表格,辅助进行视觉传达 2. 注释:辅助进行语言传达 3. 资料讲义:辅助传递无法细致展开的内容。可以附在最后几页,也可以打印出来,然后发给听讲者。

手段

利用“演讲者视图”,在切换到下一页ppt之前,先通过演讲者试图中的内容,讲述下一页ppt的内容,然后再自然切换,凸显熟练与从容。此手法再电影中的学名:shock cutting。

作为讲师

4月,QCon终于开始了。26号上午的企业级第2场是我的slides。主题是:SOHU邮箱在Python中的经验,感觉不错,有可以提高的地方。 - 但是讲的时候过于来回走动了 - 没有在停在一个地方让焦点都集中过来 - 超时7分钟,预期40分钟,讲了47分钟

这个是我infoq演讲的内容 这个是slides

作为听众

Erlang开发实践

QCon北京,我除了是讲师,也听了几场不错的演讲。尤其是对于淘宝 余锋 的 《erlang开发实践》映像还是蛮深刻的。除了开始关于erlang的哲学和世界观,基本上就没有和erlang相关的东西了,都是再讲一些系统设计相关的。

erlang的世界观 - 世界是并行的 - 外物皆独善其身 - 万事皆通讯

世界观很新颖,但是却是很正确。正是这种简单直接的世界观,使得erlang的世界非常的直观和简单

大型系统具有的共通性 - 高响应 - 高性能 - 高一致性

对于这个,我觉得,余锋的意思是指各个系统应该保证在分布式环境下面是一致的,而不是出现多个不同的版本。当然,高一致性还可以指数据上的高一致性。不过大型系统不一定要求高一致性,这个是由具体的业务决定的。而且在很多时候,高性能,高响应 和 数据高一致性很难达到同时满足

大型系统设计 - 复杂性管理

系统肯定具有复杂性,尤其是大型系统。既然存在复杂性,那么通常要做的事情是把复杂性集中到一个点上,而不要分散到各个地方,只有这样,才能容易管理,容易差错,容易设计,容易实现

  • 警告零容忍

    我非常的赞成这个观点。对于看似平常的warning千万不要不在乎,反而,你应该重视起来。因为,这个看似无所谓的warning极有可能是导致你系统崩溃的最亏祸首。这个在我做Postfix MTA 和 Milter 交互时候出现的warning就能开出来。

  • 捣乱系统

    余锋提出了一个有意思的观点,就是自己写一个捣乱系统用来模拟各种真实发生的不可预知的异常,例如:网络故障,第3方依赖服务奔溃,硬件损坏,数据库错误。从而破坏生产环境中各种服务的正常运行。用来检测程序的鲁棒性。

大型服务部署

  • 不停机热更新

    这个和erlang有关系,因为erlang是支持热更新代码的。对于其它语言,例如python,那么可能没有这种方式,能做的事情可能就是 restart service gracefully。

  • 系统监控

    各种监控,磁盘,IO,网络,响应等等

  • 支持随时更新,删除,添加,停止,启动节点

  • 对集群的安全,进行审计:1) 完善的日志;2) 完整的history;

    很容易的查找到误操作的步骤(当然,对于操作的history可能和一些业务相关)

推荐引擎

听了推荐引擎的专场。感觉总体将来,新意不高。基本上都差不多。关于推荐引擎做一下总结。

推荐引擎的本质

在用户和商品之间通过一种合理的方式找到一种联系 - 把具有和当前用户喜欢的商品相同的特征的商品推荐出来 - 类似用户喜欢的,但是当前用户还没有买,推荐出来 - 把和用户喜欢的商品相似的商品进行推荐

冷启动

所谓冷启动就是说,当一个用户刚刚注册,或者一个用户初次登陆,那么他的历史数据为0,或者很少,所以,很难分析他的购买意图 - 通过商品热点来推荐 - 通过地域特点来推荐 - 通过用户信息来推荐 - 实时的捕获用户的浏览行为,进行实时分析,去连线商品数据进行推荐(这个是一个有难度的实时或者准实时系统)

算法 - 协同过滤可以说是所有推荐引擎的第一步。任何一个推荐引擎一开始一定得用协同过滤来实现一遍 - jaccard 算法公式:买过两个产品的交集/买过两个产品的并集 - 推荐引擎往往是多个算法结合和配合使用,而不是单一的某种算法 - 算法的关注点 - ctr: 点击率,用户是否喜欢推荐结果 - cvr: 转化率,从推荐到付钱 - pcvr: ctr * cvr 这个值越高越好,但是ctr和cvr基本上是一个反比趋势 - 算法重要性:算法很重要,但是不是最重要。工程和系统的实现能力才是最重要的,甚至高于算法。 - eg. 一淘的 两个产品之间的相似度: - hadoop,每天需要计算 4个小时,后来的优化 用了2个小时,最后只需要24min - 20% improve in CTR

电商推荐引擎的数据 - 数据模型: - 宝贝metadata,title,attributes - 人群属性:年纪,性别,购买力 等等 - 性别预测:物理性别(男/女),购买性别(账号可能家庭公用,又可以分成长期和短期性别) - 对于长期:广告主有用 - 短期:推荐系统有用 - 浏览数据:时长,点击,购买 等等

  • 数据形式
  • input: > 通常就是日志log
    • 通常具有稀疏性,但是也不是完全想象中那样子稀疏,公式定义: 活跃用户数量/活跃产品数
    • 被点过1次,或者被看过1次的商品才能有推荐价值
  • output:

搜索结果页面推荐 - 相关推荐,搜索结果从文本相似度,推荐结果从图片相似度 - 基于query做惊喜性的推荐,婴儿床->床单->衣服

注意点 - 业内一般认为:user相似度作为推荐理由可能不会得到对方的认可 - 对领域和对数据的理解比算法要重要 - 算法很重要,但是不是最重要。工程和系统的实现能力才是最重要的,甚至高于算法 - 购买贵重物品的用户购买意图一般会很明确