2017年3、4月参加的几个Meetup记录

每次参加完Meetup之后我都会记录下当天对这个活动的印象以及了解到的新知识。其诉求是对自己记忆能力的练习以及一种“记录下来的知识就会长久记住”的自我安慰。时间久了之后觉得记录下来的内容没有被分享出来也不算物尽其用。所以开始把参加活动/记录内容/发布出来作为一个正向循环来督促/激励自己。

需要说明的是在我记录下的内容中,技术相关的内容大都是我不甚了解,只是在现场用最大限度的努力消化和记录的内容。在对相关领域了解的人看来应该漏洞濒多甚至错误百出。所以欢迎大家用辩证的方式来阅读,并请在评论中纠正我的错误。感谢。

Python Meetup March 16, 2017

去的时候第一个话题已经开始了。首个话题是场地赞助Unada在讲他们的架构。说实话不是特别明白,主要问题在于代码实例都是它们自己的业务抽象:支付系统和CRM,在不太了解他们业务的前提下有些对不上号。现场展示的代码看起来就是简单的Python OO被包装成了“service”(一个例子,他们号称的SQL“服务”看起来就是一个Dependency Injection 用法的sqlstore)。另外一个例子是说系统是如何使用“服务”做到优雅降级的,但代码怎么看都只是try/except。另外还有一个值得吐槽的是演讲风格不友好:讲代码的时候他们的业务逻辑本来就不好理解,演讲者还反复在不同slide间跳来跳去(默认大家一定明白他的思路)但一会儿我就失去了焦点,从而更难理解。

第二个话题是一家用机器学习和Bot作为底层技术,为其它公司提供客户服务的公司来讲他们的架构变化。具体架构是用Flask起手,用机器学习来学习用户(客户的客服部门)提供的数据,并且通过用户的在网页上“此信息对您是否有用”提供的反馈来帮助学习。底层用的是wat.ai的免费学习服务,数据库用Mongo。起先是所有东西都是同步的,随后为了提升效率用RabbitMQ改成了异步。这样发消息,和更新反馈的学习都是异步的了。然后的问题是wat.ai的服务很容易挂。这时就找朋友搭了自己的机器学习平台,比较了大多数方案之后,发现scikit的SVM配合调参数最合适他们的应用场景(有不少问题都发生在这里,但限于知识有限并不十分明白,最后提到不同的用户还需要不同的参数)。然后Redis抗不住了,因为学习要存的Matrix数据特别大(以及后来有客户提供的数据文字量非常大,加重了学习负担),都是几百兆的样子,在没有已知的优秀存储选项的情况下用了Redis,但最终还是负担不了。目前的方案用了S3和很多辅助,比如Zlib压缩,CPickle等。现场有人提到你们是不是不应该存这个数据,只存概率数据(我不明白,可能是这样)就行了。关于这个业务我的第一反应是很奇怪,隐约觉得可能很难服务好客户。但实际上是人家似乎活得不错,业务从每天几个请求到每秒几个请求,很厉害。

最后是David讲了他做的两个小东西,一个是ezABC,是一个metaClass,可以在程序运行前自动检测子类是否继承了所有raise NotImplementedError的方法,如果没有就报错。实现里用了inspector,原类是在创建对象的时候执行。另外一个东西是autorepr,也是用metaclass实现的,简单帮助你处理Class里面repr, str, unicode的东西。看起来确实方便一些。

ProductTank Toronto March 24, 2017

尝鲜参加了一个产品经理的Meetup,由于演讲者的经验确实丰富,内容干货也很多,并且还特意调动大家讨论和交流,配合不错的活动环境,算是不到两年里参加的可算Top3的活动了。

演讲者在8,9个公司工作过,是Girl Learning Code活动的发起者。做产品不少年了,现在在League工作。总结了自己所有的失败经验供大家分享。(不记得所有了,尽力回忆)首先是不能假设自己了解用户。举的例子是在Wattpad , 该公司的典型用户是14岁喜欢fan fiction的女孩子。她理解为自己也曾经是14岁女孩子,自己喜欢纽约时报畅销书,所以假定用户也喜欢。她手工挑选了类似的文章推荐给用户。发现首先就被算法毙掉了。才意识到用户是不想看到这些东西的。第二是不能什么都听用户的,例子是在公司负责改版,找用户来看效果不错,于是就上线了。结果看数据Retention Rate都见底了,才意识到选取用户有问题,必须要做A/B测试才行。第三点:不是什么都能上A/B测试,这个测试很贵,只有影响留存和关键问题的时候才能上(另外不要用A/B测试的结果做讨论的依据,如果你不想要那个结果,测试都不要测试)。第四点:不要觉得Google或其它大公司做得对的东西就一定适合你。Sprint这本书的做法可能并不适合你。例子说大家看Instagram的注册引导,先只输入邮箱,然后下一步引导用户设置密码的流程怎么看都很不错,结果用在自己的产品以后转化率超低(因为还在线所以没有透露具体低到多少)。第五点:Don't trash sales team,他们最理解客户,最理解竞争对手,忽视他们的代价很大。定期和他们沟通了解信息非常重要。其余还有几点记得不太清楚了,最后两点我记得的是不要过于依赖数据,如果你从大到小所有的决策都需要看数据的话会发现是应付不过来的,要相信自己的知识储备,相信自己的guts来做一些决定。还有就是产品经理也会有的 Imposter Symtom 可以找Developer做针对自己的反馈来给自己打气。

虽然听起来都很常规甚至有点水,但对于有产品经验的人来说,很多难以言传的东西就是实在的经验,不犯这个错误的话你可能永远都不会有切身的体会。对我来说这个演讲简直接近洪教授在QCon/OpenParty上面的豆瓣架构演讲一样干货了。

然后到了分享时间,有两个例子很有趣:Freshbook的产品经理分享的,上线新产品,找工程师做Analytics搭建花了一周的时间,结果上线后只有俩用户,早知道还不如做用户访谈。另外有个人说当工程师说“做完了”的时候,可能并不是你想的“做完了”。(大家笑)。还有一个做修车创业公司的,在做用户调查时发现用户痛点是用户担心会被Dealer rip off,所以就根据这个开发了“你出价”洗车网站,所有一切都是按照这个方案来做,最后平台上的洗车厂商都不愿意用:“都是1刀包洗车全套你让我们生意怎么做?”,才发现用户需要的其实只要确保能预知价格就行。这时很尴尬,因为做宣传已经花了所有钱,连买另一个域名的钱都没有。

Data Science Meetup April 5, 2017

这个Meetup的第一次活动。Slides设计得不算好,内容也不太和我的胃口。主要是因为面向的受众是完全不了解此领域,很多是来自其它行业(从别的行业进入IT)的初学者,所以介绍中把“用数据”做事情的历史,从孙子兵法到二战的破解Engma密码的故事都讲了。然后再讲现代的Data Science是怎么回事,但其中又夹杂了属于IT行业基本概念的内容,比如DB, IT, 项目管理和流程管理,这些都被放在“数据产品/项目如何deliver”这里,对非行业的人应该很有意义,但对从业者意义不大。唯一对我有用的是数据集要怎么split (训练数据和验证数据)。观众的问题也有点五花八门:学历有没有用?你做过多少项目?一个DBA 问大家都用什么数据库,基本都不太问到点上。最后总结的东西是说,自己找兴趣点,自己找开放的数据,然后自己通过练习学习。提到了一个网站 Kaggle 总之不好推测受众的水平也就没做太多交流。

Python Meetup April @ Wave Accounting

第一个话题是Wave CTO 对自己公司的 Introduction,其内容蛮翔实,介绍技术的时候也没什么玄学,很诚恳地说虽然在进行服务化但不是“微服务”。这点让我对他们的感觉不错,比很多张口就是“Microservice”但一问技术团队只有十几个人的很多公司强不少。随后的话题是关于 Python Logging,没什么新鲜的,就是导出JSON格式自己以前没用到过,之后可以试试。后来咨询了他们的工程师,他们用一个叫Data Dog的产品做日志分析。

接下来的话题是 Wave 如何将数据库用户权限管理自动化的的。开始觉得奇怪为什么公司的每个用户都要有独立的帐号权限,还要频繁更换。随后想到他们有支付系统等业务,对安全确实是另一个级别的要求(比如只有少数人才有信用卡号码的权限)。这个系统的第一个版本用Ansible实现,步骤包括生成密码,改RDS的主密码(说即使失败也不影响使用,没太明白),然后输出新用户的密码,还能清除没用的账户。但Ansible配置逻辑一多就很不好维护,所以用Python重写。新版本仍兼有Ansible的特性(多次执行也没问题),还推荐了click 这个Python 库。

中途和他们的工程师聊了一下。他们提到整套系统大体都基于Django,就好奇问了他们一下Scaling上有没有遇到什么坑。得到的回答是不太清楚内部细节(是位略初级的工程师)但知道用了Sharding。我回来搜了一下,还真发现了他们工程师开发的方案django-sharding

接下来的话题讲了graphene,Python的GraphQL解决方案。虽然我以前知道这个,但是看了互动讲解之后觉得对于Wave这种业务数据结构复杂,又希望给客户足够自由的开发平台的情况而言是个好的选择。演讲者Ryan讲得很不错,内容虽然只是带领大家了解这个技术,但是交互讲解生动翔实,语言也很有感染力。演讲者的水平差异,很多时候几句话就能体现出来。顺便还提到了不少东西,PipenvTalk Python to me podcastHttpie

最后一个话题是个人项目,Learn vocabulary from movies 在电影字幕中利用NLP来找到其中生僻的单词(通过难易程度来识别,数据源基于一个开放的词库)。NLP library用了 Nltk。测试用到了Docker和 Selenium。后面提到的如何判断单词合法性比较有趣,其实就是怎样洗数据,要考虑过滤字幕作者和一些typo,同时使用了一个词典的API来帮助过滤/识别合法的单词。

April 25, Big Data Meetup - Data Science University

这其实不是个Meetup而更像是去上了一节入门课。来自IBM的两个讲师用尽可能通俗易懂的方式,讲述了K-Nearest,Logistic Regression,Support Vector Machines 三种算法的基本概念,以及如何使用它们(通过scikit-learn)来进行分类。里面的“动手训练”部分也可算是简单到极致,基本是手把手教你运行一遍一个 Jupyter Notebook。不过令我高兴的是该活动粗浅的定位对我相当受用,以前的工作中一直有用到这样的算法结果,终于有机会简略地了解其实现。我形容为大概相当于产品经理了解了基本的HTML, Python和SQL知识(或至少说从概念上了解了),尽管不太有机会在这样具体的领域走得深入,但这种理解对于开阔视野是非常有必要的。唯一的缺点是在现场LR和SVM的适用场景描述得不太清晰,不过搜相关内容发现这本身就是个信息量很大的话题,所以也可以理解。后面如果有类似的活动应该也会继续去看看。

Posted 2017.05.13
Category: Event

Comments