Contents
  1. 1. 杂谈
  2. 2. 第一天
  3. 3. 第二天
  4. 4. 建议和总结

杂谈

HangJS Badge

在6.21号这个特殊的一天,我的生日,献给了今年的杭JS而不是家人。

路程还是挺周折的。周五下午 3:15 的飞机晚点到 3:45 后,6 点就到了杭州了。然后再花了两小时坐机场大巴,再转地铁到了酒店附近。不知道搞什么,每次找 JSConf 所在的地方,都要花我不少时间,但其实它已经在我面前。回来的时候飞机从晚上 8 点多推到 10:45,到珠海家里已经 1:30 了,直接 verify production cutover 后才睡,累死了。

话说回来,21号到了酒店已经在附近找不到东西吃了,见到上海小朋友@Yinkan_Li后,从他那贪污过一瓶八宝粥干掉,再吃了些从珠海带给他尝尝的桂味荔枝,澳门猪肉干和杏仁饼,也总算饱了。他竟然还送了本 @司徒正美 的书给我。虽然觉得可能是他看完了不想要了,但是还是很感动的,特别为我这老人家写上那些肉麻的祝福语。

好了,不说废话了,流水记录一下会议两天的情况和感受。

第一天

一开始是@严清JS异步处理的几种做法。幻灯片内容很丰富,callback, promise, co的比较都有。然后介绍了他的 Then.js 和比较了一下其它的 Promise 库。一开始就黑了我选用的 bluebird,体积过大。 Yinkan 马上拍了一下我的肩膀,嘲笑了我一下。当时我选库的时候,是被 bluebird 的API, Error handling 吸引,再加上当时它是最快的。
杭JS前在微博上其实看到严清说 Then.js 已经比 bluebird 快时和他聊了几句,说目前我粗浅上看,觉得它比不上 bluebird 的就是文档和 Error handling 方面,然后就没有然后了,呵呵。后面严清说了一下他新写的 Thunk,也说这比 promise 和 co 要好。我没看过 co,之前瞄了一下 Thunk,被那些 () 吓坏了。虽然我之前一开始看 Scheme 的时候,也很不习惯,但是那边的括号风格还算是比较统一的。但是 Thunk 里面用的方式,我觉得在 JS 里面把同步的和异步的写成那样,还是不容易接受。可能我的功力还是差太多吧。个人觉得 Promise 的方式和语法,看起来还是比较符合一般写同步代码的风格,还好些。顺便广告一下去年翻译的一篇我觉得讲 Promise 挺好的文章

然后是 Atom 编辑器的作者赵成讲 Atom-Shell 的实践 和 Node-webkit 的不同之处和在 Atom-Shell 里面怎么处理多个 Environment 的问题,比较高深。但还是基本可以理解。中间还穿插 Github 里围绕这个的各种八卦。

第三讲是赫门的淘宝前后端分离实践,他的辫子,胡子,和演讲风格还是很拉风和活跃全场气氛的。前后端的分离实践,他讲的多数可以说是工程问题。但整个下来,里面要处理的问题,其实我并没有感受到多少是一定要用 Node.js 来做的,他们的分离是为了什么。作为一名长时间的后端混搭前端的企业开发者,我觉得开发中最大的问题是业务逻辑共享,所以我才觉得用 Node.js 是优势,为一套代码两用提供可能性。Slide 69 页说的用 Node.js 可以做的一些事情,我觉得后端 JAVA 做也没什么不可以,只是因为很多前端不会 JAVA,然后想把浏览器上的页面一些优化搬到 server 上来提高性能,没有熟悉的 JS 的话,就不好动手了。如果交给一些纯后端来做又增加沟通成本,或因为没前端概念而做不好。所以现在有了 Node.js,可以把以前浏览器上的 JS 逻辑,拆一些到 server,就爽多了。其实前后端分离,有一部分是前端逻辑后移,不知道我是不是没有 get 到重点。我知道说到这里肯定拉不少仇恨,其实我目前是喜欢 JS 多于 Java,而且什么都用 Node.js 先写写,但我也不想让语言绑住自己。

下午是苏培欣的Google BigQuery API Node.js实践,其实主要是讲怎么用 OAuth 和 Google API 打交道,他写了个库来方便使用。

然后就到了顶顶大名的 @substack 神了。其实他还是和上次京JS一样,在布道模块化的好处和如何同其它人用无数小的模块来拼成一个系统。个人对这些观点还是认同的,再看到大神飘忽的打字速度,反正就是叹为观止了。但是宣讲的内容价值并不高。

后面到了 Belleve Invis 讲他的 Patrisika,说实在话,虽然之前看过了一些 CPS 和 Scheme,但是他里面讲的一些推导和原理,和飞快的语速,实在有不少地方还是 lost 了。级别差太多。

再后面到了芋头的如何快速构建MVC应用,按他的意思就是一个遵循他的编程风格和习惯包装了一下 Express 和一些常用框架的框架(有点拗口了)。当然每个程序员都有自己喜爱的风格,所以就看多不多人买账了。

最后是 Berg 的 BlendUI,一个轻应用框架。按照我的理解就是一套统一了上层接口,让里面可以轻松调用 Webview 或者 Native 的代码。在一个页面里,有性能问题的时候,通过组合多个 Webview 和 Native 组件的方式,实现组件最小化,性能可控。
像 Yinkan 说的,这种方式其实就是在机器性能跟不上的时候,做的一种补尝。其实我们也在想,如果这样一有性能问题就混搭,那最后会不会整个东西就变成 Native App 了呢?呵呵。没做过移动开发,所以不好评论。

第一天就这样结束了,因为下雨,After Party 所在的小酒吧几乎挤满了,吃的东西和去年一样,一上就差不多被抢光。我们的策略就是站在门边附近,吃饱了再找人聊天。个人认为今年的 After Party 找的地方格调不对。虽然中间什么唱歌表演的很 High,但是完全无法在酒吧里和其它人好好聊天。所以我们之后都拉了 substack 出去了。我觉得去年京JS的地方就很不错,聊天可以很尽兴。

不过今年没聊的太尽兴,也是因为自己没准备好什么话题找大神。自己去年总结的经验都没用上,唉,打脸。去年的 H 神原来就是 EF 的架构师 Michael,不过我们没和他聊上。晚上我和 Yinkan 的主要目的都是找 substack 闲聊。今年好像他在做 P2P 相关的东西,聊天的很多内容都是这样。中间调侃性的问了他对使用了 Stream 的 Gulp 怎么看,因为去年问过 Grunt 了。他还是说用 bash 就好了。但是个人认为 Gulp 对组织大型项目还是很有帮助的,不是每个人都是神和那么熟悉 bash。对于工程管理来说,我认为 bash 太乱了。最后我认为自己问了他一个对我来说最有价值的问题,就是“一般来说,普通人都是做一个可以看到有具体功能的一个 App 或者应用。为什么你可以或者会想到做那么多底层的模块呢?” 神是这样答复我的:“当你要做一个大的应用出来的时候,需要花的时间比较长,如果进展不顺利,可能会灰心。或者说本来想分享一下,但久久不能实现,就心累了。而我想东西是从底层开始构建起来的,做好了一个小模块就可以分享了。” 其实这就体现大神和我的差别,别人一看东西,都到底层的,把整个系统分解的很好。这个答案确实让我展开了思路,日后努力实践。

晚上在雨中走回酒店,洗澡后就累趴了,一觉睡到 6:30。本打算像去年那样当早鸟和抢书,7 点就到了会场,但是发现因为前一天主持已经泄漏天机,会场已经有 10 个人左右了。就不想像傻 B 那样守在书摊前了。又不是买不起,也不想增加自己行李负担,还要回去叫醒那个 Yinkan。所以还是溜了。

第二天

一开场是 @Sofish优化你的Angular Web App。内容基本之前都知道,网上其实说 AngularJS 优化的也是差不多了。但是 Sofish 的语速,难易程度和幻灯片内容的组织,觉得在这种大型会议上做得很好。不太深,也能引起一定的思考。

然后就郭宇的开源项目的管理与维护,其实是他的开源心路历程,中间穿插一个很冷的 callback 笑话。他中间对选什么开源来做提的几点建议,我觉得还是挺有用的:有趣的,成长中的 (Node.js),爆发的(像近期的 Bitcoin, Swift 教程翻译)等。

接着就是 @MichaelMassive Javascript Development,一开始幻灯没准备好的时候,主持人叫他讲讲笑话,他说他只会 dirty joke。果然是 H 神,去年和他聊天的时候就知道他擅长这个。这个演讲个人认为是最有价值,可能也是深有感触吧。Yinkan 和我想问他的问题不谋而合。其实他在里面说到这样的大型系统,每个组件都要足够小。组件间的通信,可以用类似 Event 通知机制来做,再有一个 Root App 从中做管理。这个我们都认同。只是在实际操作中,怎么能做到 Event Subscriber 和 Publisher 之间的关系能管理好,并不是那么容易。就像 SOA WS 架构里面的 WS Registration 一样,做的不好的话,很容易导致 Event 有多少 Consumer 并不清楚。上下游关系不清的话,上游有改动,下游容易出问题。下游不再监听了,上游也不知道是否可以移除。所以,会上我们提了这个问题,他初步也以下建议:1. Event 一但发布,不再改动。或者加新的,或者加版本号。 2. 通过监控手段,了解各个监听情况。这个就要在 Root App 上做的比较好了。3. 文档。因为文档容易过时,他说他们用 JsDoc/JsDuck 来生成。

紧接着 Garry Yao 的 Scalable Web Application with TroopJS 其实就是 Michael 他们做出来的,就是说他们用这个框架来解决他说的问题。具体细节没有听到多少,因为一边听,我们一边直接去官方网站研究了。初步印象不是太震撼,就是他们自己也说了有和 AngularJS 很像的 data-binding,但是其实他们在知道 AngularJS 之前已经做了。他们的还可以移除绑定来着,有点意思。有时间再看看。

后面到了 @玉伯也叫射雕如何持续技术学习。其实我和 Yinkan 的想法基本一致是不打算听的。这里没有看不起的意思。主要是因为我们两个也算是可以持续学习的人吧,另一方面是想抽时间去找 Michael 继续探讨那个 Massive Javascript Development 的问题。后来发现 Michael 不见了,只好听了。印象中有些槽点,现在不记得了。但是玉伯说的有一点是挺赞同的。就是学习时,生怕什么都漏了,什么都订阅或者 Mark 再看等等,其实对自己的进步并不大。最主要是要 Output。

然后特意去找 @民工精髓V 聊了一下,中途很傻B的找错了人。问了他一个 AngularJS View 改了值,Model 迟了半拍才改过来,要改用 $watch 才行。他说没碰过这情况,可以试着绑定一个 Promise。后来 Yinkan 来了我们又向他了解了一下他目前在苏宁的状况。

突然看到有个样子好,身材突出的国外女讲师说的什么 Edge.js 是可以在 Node.js 里面用 .Net,然后还可以在 Linux 上玩。我都不知道这有什么用,真是不忍吐槽,为了结合而结合。我之前想要在 Node.js 调用 Java 也只是觉得 Node.js 缺乏成熟的库才有这样跨语言的需求。后来想想调用的方法不如用 Web Service 做成 SOA 好了。

再之后就是 Twitter 美女的讲的 Storm,也听懂了,大概了解到它的工作原理。陈本峰 的 Web Components 也是基本概念。

建议和总结

对于这种宣讲会,其实很同意@游戏阿柴 流水帐的一些观点的。宣讲会里,我觉得最重要的是说一些能引起别人思考的东西。这说起来简单,但我觉得做起来很难,而且还要照顾听众的水平。

宣讲会里的主题,基本上是自己做了个什么东西出来,发明了一个轮子。其实这很值得讲,但是我觉得重点要讲这个东西和同类的有什么不同。我为什么要做个新的轮子,好在哪。其实点不用太多,能有一两个方面吸引人去了解你的轮子就够了,因为时间不够,而且也没有提问和思考时间。具体一些代码怎么写,大概有个样子看看就知道了,不用每个功能都讲。就像阿柴讲的 @严清 老师的分享那样。

另一类就是纯粹理论的东西,像赫门的《淘宝前后端分离实践》,没有具体例子,很难脑补具体场景。虽然一些大概念知道,但是不同公司和系统,实现和出现的问题都不同。如果可以抽样例出来说,就知道分和不分的差别。

其实像这样的大会,高手一般不需要从中再获得什么,而是要带领新人了解什么。当然如果高手有什么新技术出来,同理也是带领不了解的人,对它感兴趣。我觉得这种宣讲,就是要带人入门,提起兴趣和思考。然后 After Party 的任务,就可以分开各个阵营或者会场,人们再去和嘉宾深入聊那些感兴趣的话题了。

最后,希望明年有机会能站在上面和大家分享,而不只是听,不知道可否像上次 珠海 GDG 那样说着就成真了。呵呵。

没去过 京JS 的同学,有兴趣的话,也可以看看去年我总结的帖子

Contents
  1. 1. 杂谈
  2. 2. 第一天
  3. 3. 第二天
  4. 4. 建议和总结