Gothamgo 2015 Recap

昨天冒着纽约今秋的第一场凄风冷雨跑去老地方听了今年的GothamGo。 因为去年的良好印象,加上今年公司几个人一起组团去刷,本来还挺期待,但是到后来却小有失望。 因为在我看来,Go本身足够简单,但是也足够年轻,所以对于这样的一门技术的会议,我其实最期待的是两种类型的内容: 生产环境里的最佳实践,比如持续集成,性能测试,依赖管理等等 新的工具或实用的package 遗憾的是,这次的议程12个演讲,给人感觉是: 一部分是极易辨识的赞助商session以及公司产品炫耀贴,基本没什么营养 一部分是方法论和哲学论述,听起来很爽,然并卵 最后少数几个演讲有点有意思的内容。但能把它讲得有意思的,我觉得只有那么两个。 第一个演讲按照大会惯例还是女生讲解怎么学习Go,是来自赞助商的人,而且又是从ruby社区里转过来的,用比较欢乐的形式讲解了她们学习Go的各种基本概念的历程。 所以倒还算是个很有意思的开场。 第二个演讲是我认为今年最好的一个。演讲者Filippo来自CloudFlare,有着安全背景以及浓重的意大利口音。 主要的内容是利用go-fuzz这个package来发现程序的潜在bug,有些类似于网络安全人员拿nmap扫自己的网络。 因为前不久刚在Go1.5的release note里面读到过Golang team的人用go-fuzz发现了不少标准库的bug,所以也听得格外认真。 go-fuzz的主要用法是测试者给定一个函数的输入样本(必须是string,内部使用的是[]byte类型),利用go-fuzz生成各种变形, 然后在code coverage统计的辅助下,更有效率生成不同的随机测试用例,用来发现潜在的bug。 这个方法对于正在探索如何提高代码测试覆盖率的我来说,是很开眼界的。 第一节过后马上去找他聊了聊具体的实践,虽然Filippo本人觉得开着go-fuzz在CI instance里面跑等程序crash就好了,但是我倒是觉得利用它来辅助单元测试的设计可能会让测试结果更可控更有效率。 而Fuzzing的过程可能在每个版本想要更新单元测试集的时候跑一跑就好了。 第三个演讲是来自Google的Alan Donovan讲go/types。跟去年他在gothamgo的kick off meetup上讲的oracle一样,依然是Go的code静态分析工具。 演讲的套路也一样,讲两句就开始在台上用emacs demo。 其实这个话题我是很感兴趣的,特别是怎么用Go自带的go/parser, go/printer, go/ast生成Go代码。可惜也不知道是他觉得大家听不懂还是就是没兴趣讲,在表面上挠了两下就自顾自的去demo了。 而在大屏幕上demo 命令行工具的效果是可想而知的…… 也难怪oracle到现在都还没有被广泛用起来。 第四个演讲的人JP Robinson来自纽约时报,听起来不是个很technical的公司,这人还确实讲的是他的一个side project,听过之后发现他还是花了不少功夫,也是一个很有技术热情的人。 不过因为对我感兴趣的东西涉及太少,也就没有做任何的记录。 上午剩下的两个演讲都没有什么值得回味的东西了,东西都很软,一个在博存在感,一个在吹嘘自己的influxDB,感觉都是跟Go这个主题在强拉关系。 特别是其中那个Verónica López,貌似是个培训机构推过来的人。临阵换演讲题目不说,最后讲的东西还是copy paste了一大堆之前其他人的slides然后毫无章法地乱侃了一通。 到最后还甚至没能回答上任何一个问题。 一想自己几个月前还愣愣地在他们的网站上提交了两个演讲题目地想要在这个会上分享一下我们自己的实践,现在想来真是呵呵了。 果然到最后看的还是名和利,要么演讲者有名,要么组织者得利,哪儿的技术圈都不例外…… 中午冒着雨实在是没心思好好找吃的,随便吃了个美式Diner就回来了。 下午的开场演讲我很喜欢,虽然是讲哲学的,却是深入我心那种。 我一直认为Go是一门聪明人写的很蠢的语言,它的关键字极少,程序结构也很简单。 每次在golang-nuts讨论群里有人提需求,官方的回复总是说这样会带来什么样的复杂性,这样的功能不具有普遍适用性,十之八九就拒了。 甚至Go标准库的各种代码在我看来,也没什么技术含量。唯一的特点就是很容易看懂。 以至于习惯了之后看身边的新人拿Go写出各种花来内心居然还有些内心抗拒。 现在终于有人敢在所有人面前表达出对这一现实的欣赏了,我忍不住会心一笑。 随后又有一个人的演讲表达了类似的观点,这个人因为是顶了sqlx作者Jason Moiron因病缺席的空,所以我连名字都没注意,但是他的演讲实际上也很有趣。 他是一个只有两人的创业公司的CTO,他说的一句话跟上面这个Kyle很神似,那就是编程语言乏味一点是好的,乏味说明你不需要动脑子就能驾驭他,因而能让你有更多时间腾出来解决真正的问题。 然而紧接着又是两个节奏拖沓不知所云的演讲,拖沓到我总觉得他们超时了…… 直到Nick Sullivan开始讲Go的crypto包的一些进展,他又是从CloudFlare来的,主要介绍了CloudFlare用Go做的几个产品,例如DNSSEC。然后列举了他们对Go标准库的贡献。 其中他反复提到他们公司一哥们把某某某加密算法用汇编写了一遍,于是把运算的速度提高了十几倍然后merge进Go标准库之类的,也是够神的。 不知道他们是不是有意的,不过今天之后,我的直观感觉还真是觉得CloudFlare这个公司既重视安全又拥抱开源,做东西还细致,值得一夸。 当天的压轴演讲是著名的澳洲Go blogger Dave Cheney。我觉得应该算是当天最重头的演讲者了。 估计也是知道自己是压轴的,他没有介绍自己新做的构建工具gb,而是非要高屋建瓴地谈论Go的非物质遗产…… 讲得挺好,值得一听,但是也就听听了事了。 最后还有一个小插曲,中午的时候跟Google的一个人聊天,我问他们是怎么做依赖管理的,我说我被go get坑了很久,他说:“哦我们从来不用那个,我们自己用bazel然后所有code都在一个tree里……”。 怪不得Go的团队在面对“go

Docker open-source-a-thon小记

周四的晚上,去时代广场微软的纽约总部参加了一个Meetup,跟不少技术宅聊了聊天,也亲见了外国人是怎么做开源的,觉得觉得还蛮值得一书的。 当天的主题是庆祝Docker的两岁生日的系列活动之一。名字叫做open-source-a-thon,因为活动形式跟Hackthon很像。 组织者设立了一个网站:docker.party。号召大家为Docker贡献代码和文档。有意思的是,因为Docker的Logo是一个鲸鱼,于是他们决定跟某个保护海洋动物的慈善机构合作,在活动期间参加活动的人每成功为Docker相关的项目提交一次代码或文档,活动赞助商就向该慈善机构捐助50美元。 不得不说这个点子还蛮赞的。因为当天吸引到的都是对Golang或者Docker有兴趣的人,不说免费的披萨和啤酒,能在github上成为Docker的contributor其实还挺诱人的。而Docker则不但推广了项目本身,还突然多了一大批人来帮忙改进一些大牛们懒得去看的细枝末节(比如出错信息,指引文档之类的)。当然,对应的慈善机构也乐得多筹一些款项。所以说算是三赢。 开场前,有个叫Steve的人在会场内问,谁会Go,谁知道open source,出乎我意料,举手的人其实并不多,而我因为两次都举了手,也被招募为当晚的Mentor之一,被发了一件紫色的T恤。 当然,后来我才发现这个Steve自己其实是github上的spf13,本博客所使用的网站生成系统Hugo的作者。能目击大牛,也算是当晚收获之一了。 然后随着大家吃完披萨陆陆续续地回到会议厅,Steve把活动的流程和规则简单讲了讲,大家就开始分组开始干活了。组织者很贴心地给Docker项目在github上的700多个issue中很多都打上了标签,标明了难度和类别。有代码相关的,也有文档相关,所以即使你不会写代码,也可以参与进来。而且他们设计了一个小机器人GordonTheTurtle,自动分析issue页面的评论,来给当前issue打标签 开始之后,我跟附近的人聊了聊天,各自自我介绍了一下,发现完全不懂Docker或者Golang的也还挺多的。导致一时间我也不知道怎么去Mentor人家了,因为我觉得虽然Golang很容易,但也不是几分钟能讲完的。 后来Steve过来给了个很好的建议,说如果之前有编程经验,那么学习Golang的一个很好的办法是看代码写注释,因为Golang的文档都是自动生成的,所以了解了注释的格式之后,写注释就相当于写文档了。 于是几位小伙伴立马就挑代码开始看了起来。不得不说这是个好主意。我们一直说学习一门语言最好的方式是读开源的代码,平时也会去读读Docker的代码,但是一直没有想到这其实也是个入门的好方法,而且还能够从一开始就给开源代码做贡献。看起来一开始我举手说懂open source是大误了,其实我还真的不怎么懂open source。我一直认为做开源首先你自己得是相关领域的大牛,而且我之前狭隘的理解给开源项目做贡献就是帮人家实现新的功能或者改bug,无一不需要大量的时间和对相关技术的精通。 而谁知道真正做起来,其实门槛要低得多,当晚我看了一会儿issue列表,就尝试着自己claim了一个小的输出信息的issue,直接改了然后提交了pull requset了。当时我就想,要是我们自己的产品代码也能请用户帮忙完善细节该多好。 第二天,我就发现自己的pull request已经被并入Docker的代码主分支,在开心自己为开源和慈善都做了一些贡献的同时,还发现有人给我发了一点叫做PrimeCoin的电子货币。 谁知道做开源这么好玩呢? 另外,当场还跟另一位Mentor聊了聊天,感觉这娃对Go和开源项目都很有研究,自己平时也做很多好玩的工具,一听说他再给一个加拿大的公司远程打工,就觉得放着大好的纽约机会舍近求远太浪费了,于是塞给他我的名片一张,看看能不能赚点推荐费,哈哈。