2017年1、2月参加的几个Meetup记录

做2016年度总结的时候,发现相较15年有一方面做得不够好:参加的社区交流活动不够多。同时之前比较喜欢的几个活动也不经常去了。虽说那时参加活动还有找工作的压力下产生的动力。但找到工作之后较长时间发现,不接触外界社区吸收到的只是公司/工作内部得到的知识,让我总有一种空荡荡的感觉。于是觉得17年要更积极地参与社区活动,希望要像08/09年的自己那样。

16年参加的活动虽然不多,但其实每次参加完活动之后我都会花时间专门记录下当天对这个活动的印象以及了解到的新知识。其目的无非源于对自己记忆能力的练习,和一种“记录下来的知识就会长久记住”的自我安慰。时间久了之后觉得记录下来的内容没有分享出来也不能算物尽其用。所以这次也借这个机会,把参加活动/记录内容/发布出来作为一个正向循环来督促/激励自己。

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

January 12, 2017 - Toronto Python Meetup

活动位于 King Street 的VM Farm公司。开场见了工作人员的Paul,聊了下VM Farm做什么。我的理解简单说就是SA/Ops的深度外包,再加上基础设施和选型/Scale的咨询。有它们自己的云基础设施,Paul说他是15年左右经验的SA,日常工作就是Puppet之类的。和 AWS 的不同之处就是他们弄所有东西(基本就是卖人力了我觉得)。我问那也要很明白客户的代码才行,他说是这样的,合作很久的客户基本上代码都非常熟了。总之我是不知道这个模式是否能Scale啦。

第一个话题是VM Farm CEO讲的一个Bug排解。简单说就是一个Python程序出错,但间隔很久,发现是struct.unpack的参数问题。(加了很多logging发现的),但虽然发现from future import unicode_literal 会产生这个问题,但是不绝对。也就是说尝试了用unicode和str发现都能通过,只有第一次会失败(所以感觉像是某种cache问题)。最后在Python changlog里面找到,发现是Python的Bug。中间排除故障的时候还使用了gunicore的post hook(post_request),发现pid是一致的。不过这个线索没太大用,因为理论上是所有 worker都应该出错的,但确实只在一个worker上持续发生(就是出现过后就会再出现),这是“完美风暴”似的巧合。

第二个是Telegram Bot没有太多新鲜的,不过他工作要用telegram+facebook并且unittest有一个解决方案。还有就是polling并发非常差,还是要用webhook。

第三个是david讲postgreSql为什么count(*)慢。主要是讲postgre是如何在表中存储transaction的情况的。简单说就是维护一个transaction integer里面,通过表中的隐藏字段tmin, tmax来存储transaction中间的情况。当这个integrer太大的时候数据库就会提示需要 vacuum。期间提到了postgreSql 做写就会慢一些,但比较严谨。(似乎维护起来略麻烦一些)

后面就是回答了一些问题+刷脸。没有太多特别新的东西了。

January 27, 2017 - Toronto JavaScript Meetup

两个话题,第一个是Shopify原工程总监讲的Elm入门。Elm像是一个集大成者,而且之前就知道Dan是参考了Elm的设计来设计Redux的。

Elm是一个独立的语言,编译成为JS。目前适用的场景就是Webapp。虽然有别的人在研究别的场景,但目前还之限于这个。具有完全的静态类型检查。一个显著的特性就是,号称100%不会有运行时错误,虽然这个在实际场景中不绝对,但是基本可以达到。取而代之的是,在编译阶段就可以检查到的类型错误。同时这里做了非常多的工作,Github上有单独的一个库就是为了有更好的出错信息的。John Carmack也Retweet过一条盛赞Elm的出错提示设计,非常人性化。另外一点,就是静态类型检查和semvar是在一起的,如果你有接口类型的变化,那么发布Elm package的时候会强制让你发major change. 当然如果有小change想要称为major change是可以的。

忘了说Elm完全Functional。

还有就是介绍了启发了Redux的Elm结构设计。简单说就是一组三个东西Model(原始State), View(不太记得了), 然后一个Update方法描述状态是怎么被更新的。比Redux简洁,也是因为Redux借鉴Flux的东西的缘故。然后render HTML的部分有自己的语法,也还好,底层也是用了 virtualDOM

看起来不错,如果对应别的技术栈的话,我感觉像是TypeScript(Flow) + React + Redux + Babel 应该可以玩一下。

回答问题的部分没有印象特别深的了。简单说觉得演讲者没太能讲出这个东西确实好在哪里,总体效果不太好,不知是不是演讲水平的关系。回答问题的时候有人提到有个公司(听不懂名字),用Elm写业务逻辑(因为还可以挺好地和JS共存,而且overhead只有20k,大约是React的一半),但用其它的东西搞界面。另外一个问题是Elm能不能写JS通用库,答案是不太行。

第二个是Taz的一个Codebase适应6种平台。果不其然讲的是React Native。开始说了其它平台大一统框架的不足,都非常明显是想自己创建一个层(他用的例子是大而无用的奇怪的车),但最后在小的地方都不灵光。而React Native针对各个平台的策略显然实际的多。

代码上,各个Component可以有自己的override方案。比如BigButton.ios.js Bigbutton.js ,那么ios的版本会在iOSshang执行。

至于说为什么是6个平台,他继续讲用了React Native Web来支持Web, Windows, Mac, Linux平台。这个其实挺有意思的。用Electron把它们用起来。React Native Web目前还不是100%兼容,但不兼容的部分就自己Override,用HTML实现,很实用所以也就不那么在意了。我本来想问为什么不用微软针对Windows的插件,但听到最后觉得都用Web来支持桌面蛮聪明的,很明显这样更省力。

观众问的问题都不错,问有多少精力花在平台特别支持上,答只有约5%。我觉得这很棒了,因为我的预设是哪怕有30%那么这个东西也是值得做的。如果只有这么少投入的话,非常经济。

Taz的演讲水平还是非常好的,突出的部分就是节奏好,也尽量用详述的语言来描述简单的东西。比如开场的比喻,比较详细的图片。节奏把握非常好,虽然说话着急的时候会结巴,但完全不是问题,只是因为思维快导致的。

大概就这样了,长时间的Host Taz要离开多伦多了。其它人会接手活动。但总体来说,JS的活动形式上比 Python的要好一点点。屏幕布置,AV设置什么的都更专业。要硬说的话这次的人少一点,沟通氛围少了一点。不过这天工作比较累,我也有点懒得沟通了。

February 15, 2017 - Toronto Python Meetup

地点在InterXon, 公司是之前找工作的时候见过的MUSE,做感应脑电波的头带的。现场说有了新产品,是一个墨镜,功能和头带一模一样。今天去看发现他们主打的功能是帮助人们冥想。虽然这个市场应该在上升中,但我觉得还是太小众了。除非他们收集的数据可以有更多的作用,否则我对其前景不是特别地看好。

说回话题,第一个话题是MUSE的数据科学家讲的。是讲他们如何将数据处理成一个图的(这个是内容,但不是他要讲的目的,我不认为自己听懂了他所有的结论,在这个记录里尽力而为)。首先他展示了一个Cluster图,是根据他们头带检测到的数据绘制出来的,冥想中四种冥想类型的(发生频率近似?)图。然后整个slide就是一个做成Slide形式的Jupyter Notebook (这个不错,可以看一下怎么实现的)。封面的图是用R做的,接下来讲的是用Python/Pandas做这个的过程。然后讲了采集这个数据的EEG技术是怎么回事,简单说就是四个电极在脑上取头皮上的电波,但可以是其它有频率的东西,比如房间有噪音会有影响,眨眼等肌肉运动会有影响等。他比喻了一下取这个数据是怎么回事,19世纪的时候就可以拿这个数据了,那时是把大脑打开来取(他说这样简单多了)。拿到的数据是四个一组的时间轴数据。做了一个处理,似乎是把数据切成段,然后用什么方法,把这个轴弄成基于频率的数据(我并没有懂)。然后这么做之后数据的维度就突然增加,大概有几百维。这时要用一个降维的方法,看例子是用LargeVis(http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis)来做的。总之最后的结果就是一个矩阵Cluster图。这个图上显示的结果是,四个颜色的矩阵相对清晰地各自分离。说这个是从著名的冥想高手采集的数据。又让公司CTO实验了一下,也是非常清晰的。然后Data Scienetist自己实验了一下,结果一团浆糊。然后尝试了在降维的时候过滤最高和最低的频率,发现在过滤一个频率的时候(忘记是哪个了),冥想高手的图表也可以和普通人类似,而普通人在一个频率下也可以各自分离。然后又讲了综合所有数据来看的图片中,如果只看一个人的模式的话,基本是固定的。也就是说冥想模式在数据上可以是每个人有自己的特征的。最后的结论说到,高低频差异很可能是肌肉运动导致,也就是说冥想高手们并不绝对是脑电波异常,而是他们的冥想过程可能无意识中有一种面部肌肉运动模式,让其和普通人区别开来。

对了Muse的产品就是可以看你冥想的情况,用他们 CEO 的话说,冥想的时候就是会跑偏的,他们的产品可以提醒你跑偏了然后再回来。

第二个话题,是Martin(一个Data Scentist)讲的,如何然Pandas在处理信息的时候更快的话题。提到了FastPurquet(https://github.com/dask/fastparquet) ,以及一个针对Pandas的改进(一个单独的函数好像),就是通过预先建立DataFrame再填充,来提高大数据的处理性能。因为 Pandas 的内部处理用numpy,某个机制会导致始终在clone,效率上不够优秀。最终结果是一个8G的数据集,从140秒减少到了60秒

第三个和第四个话题分别是讲GAE和Splunk,对于现在的我来说意义不大了。

幸好今天工作的时候的数据统计工作,自己突发奇想忙里偷闲用了下Jupyter/Pandas,算是快速了解了一下最基本的概念。否则前两个话题能听懂的部分就更少了。Python的聚会中 Web 已经只是其中的一个小部分了,数据分析以及各行各业的人员越来越多,成为了很好的开阔眼界的机会。

February 23, 2017 - Open DataSet Meetup

因为工作的缘故晚了半个小时到的,到的时候在讲https://gist.github.com/rhydomako/43355f8060286422f998cb3ea4e23dc9,一个针对  mydem0cracy.ca 网站上的结果的聚类分析。

在场的人大都提了不少问题,并没有全部听懂。但大都可归类于从“问卷设计”到“最终结果”之间的影响。比如,如果有更多的问题,那么可能的影响是什么。答可能是更难聚类。还有问如何确定问卷设计不会影响结果,以及如果有奖励机制可能对于问卷结果的影响。还谈到了人与人之间沟通交流中达成共识的微妙过程。但这部分太发散了有点难跟上。

直到最后总结的时候又介绍了一些工具,才又对在讨论的问题大体有了一些了解。(本周工作比较忙,之前没做好功课)

mydem0cracy.ca 是两个人做的工具(为便于记录我简称其为0.ca)。我的理解是尝试用一种极为简单的形式,来尝试收集公众对于民主制度改革的意见。这个工具恰好和政府前一段时间的网站mydemocracy.ca异曲同工。看Twiter上还有人说0.ca的问题明显要好一些。好像是在这个网站上大家可以留下自己的问题,同时参与的形式也是回答别人留下的简单问题。这次Meetup主体讨论的数据集,就是来自这里。

我没能从聚类结果中看出明显的结论。现场有学Political Science的朋友也提到他想要看到更多人口学的数据以便于决策。觉得现在的问题都过于两极化,回答的动机各自不同,很多有用的信息可能被埋没了。我理解做网站的人回答:这是一个权衡,纵然针对结果的分析,可能反推出问卷设计的形式可以更有针对性,通过设计一些限制(比如把提问题和投票再分成两个时间段,这样就减少了早期提出的问题因为数量多而权重更高的缺点),但这本质上又会影响参与度和总数量。

然后做这个网站的两个人又提到了 https://pol.is/gov 这个网站,其中提到了vTaiwan,在用这个工具作为拉近公民与政策制定之间关系的工具。(需要了解下pol.is和0.ca的关系),在帮助台湾确定针对Uber和AirBnB的政策上,起到了重要的作用。

然后主持人又讲了一个有趣的网站。http://cityblocs.ca/ 这个是一个在卡尔加里的人做的,用公共数据,来发现每个城市议会中议员潜在的政策投票间关联性的。很有趣地比较了多伦多在13年5月之前和之后的对比,简单说之前大体议员们分成两个群落(大于85%的投票结果相似),同时有若干较为独立的议员。5月之后变成一个群落(即大家都相似了),因为这个时间出了R.Ford抽大麻的视频(需要了解下背景消息)。接着看了卡尔加里的议员,基本都各自独立,没有明显的相似性,即使把Threshold降低到65%也不明显。然后展示了魁北克蒙特利尔的图。明显分成三个巨大的团体。说因为一些历史原因/行政地理分布原因,蒙特利尔的市政厅选举时有政党的,也就是说投票要考虑政党(不确定是否理解正确,需要查资料)。所以大家猜猜有几个政党?另外还有一个人游离于三个政党之外,主持人又说了一个多伦多当年著名的议员因为不满党内的政策出来做独立议员。也很有意思。

然后主持人开始讲和Open Data 相关的其它活动信息。接下来有一个和多伦多市政府的数据开放日活动,希望能大家一起参与,政府还有一个办公室专门帮助推进数据开放之类的活动。同时如果展示的项目够好的话还有一些经费支持来完成项目。主持人说一年多以前就是和安省政府合作,做了第一份省内的Affordable House的Open Data.不过在记录时我完全混掉了他说的第二件事情是什么,似乎是帮助确立一个开源的开放数据制定标准。

另外就是0.ca的人倡导政府已经在开放数据了,很希望一些第三方社会机构可以开放更多的数据。希望有关系有兴趣的朋友可以帮忙联系一下。

另外就是在场的其他人提到的最近的各种开放数据的活动,比如关于健康主题的,大体都是 Hackathon的形式。

大体就记录这么多了。自己的感受是,这首先是一个玩Open Data的组织,主题倒不一定是和政策密切相关的改革。但换一个角度来看,开放数据又和民主决策方式抛不开关系,政府相信也从开放数据,吸引人力智力参与,帮助决策这上面尝到了甜头,所以在比较用力地推进这个。现场有一位市政府这个部门的促进人员。而开放数据的跨度还蛮大的,今天讲的是选举制度的改革。其它的开放数据集可能就是完全不同的问题了。主持人懂得蛮多的(议会议员逸事娓娓道来)不过似乎不是特别懂技术。所以蛮有意思的。

另外就是图书馆的工作人员谈到了图书馆内部也在做开放数据的培训,未来要达到的目标是,当一个人来图书馆咨询工作人员相关信息的时候,他们能不只带你走到书架前,还可以直接帮你找到相关领域的开放数据。这个很酷。同时图书馆之后也会有open data 101的课程,来帮助不了解,没怎么入门的人来了解Open data

另外提到的一些资源:

https://twitter.com/vkanata 好像是做网站两个人的Twitter

http://ncase.me/ballot/ 他俩在Twitter中提到的一个倡议选票设计的系统

https://www.gitbook.com/ 前面提到的OpenData规范会用这个来协作

Posted 2017.02.26
Category: Event

Comments