标签归档:社区交流

华东地区scala爱好者聚会(2015上海)

昨天下午在上海陆家嘴软件园组织了2015华东地区scala爱好者聚会,原本有6个topic,不巧老高和Intel的钟翔时间冲突没有参与。

报名人数有40人,到场的30人左右。4个topic分别是:

《scala配置与宏》
《scala大数据处理》
《某金融公司的scala使用经验》
《中等创业公司的后端技术选型》

聚会上有几个杭州的创业公司专门赶去的,他们比较进取,产品完全采用scala开发,甚至App端也采用scala。

分享的PPT除了某公司一篇不便公开的,其他都已经放在github上了。

华东地区scala爱好者聚会(2014上海)

感谢看处方汪院长烨明,为这次活动提供了场地和零食,去年在上海的scala聚会也是看处方的汪院长发起的。这次聚会人比上次略微多一些了,而且整体水平是不断提升的。

聚石分享了来往使用scala构建通讯的一些经验,来往的IM部分采用自己的协议(有些类似spdy,要简单很多),在协议网关的实现上主要使用scala、akka,他主要分享了这个过程中踩过的一些坑。

诺铁的分享是scala集合部分,这部分内容是小中见大的,有部分内容来自《scala in depth》(顺便提一下他翻译的这本书快要出版了)。整个ppt很清晰,把Vector的细节讲的比较透,另外还提到Set的一个细节是继承自(T)=>Boolean这个函数类型,也就是contains方法,比如Set(1,2,3)(1)将返回true,这种设计确实怪异,容易误解。

烨明讲的是《play中的Iteratee》,理论结合实践,内容很不错,可惜我对play没怎么玩过,有些东西不太了解。

Max lv分享的《基于 Scala 进行 Android 开发的报告》ppt本身并没有太大亮点,不过吕超本人倒是挺有料的,在NVIDIA研究GPU高性能计算,业余喜欢搞搞android开发,他也是唐茶字节社这款app的开发者,和goagent的主要维护者。他不怎么用微博,相互交换了一下twitter。

这次聚会还有一些创业团队或其他IT公司,大众点评和唯品会以及其他很多公司也在尝试scala/spark,目前来看spark已经成为了scala领域最有影响力的产品。

从报名表上看到有好几个乔布堂的人,去年在杭州聚会的时候他们也来过,跟他们聊了一下他们创业的技术经验:服务器搭建在阿里云上,比托管在机房靠谱。阿里云服务器的稳定性他们还是比较满意的(看处方的服务器使用的是腾讯云,这跟创始人之前在腾讯工作有关)。乔布堂后端使用nginx+jetty+mongodb的架构,当前还没有使用cache,他们比较特殊的一点是web框架采用的lift,估计算是比较小众的(去年的时候诺铁分享过一次lift)。

回去的路上还碰到一个在银联做Jboss相关开发的哥们,从他那儿了解到了银联正准备从weblogic切换到jboss上;银联也是Tuxedo中间件产品的大客户。

补充,ppt的下载地址:https://github.com/CSUG/csug/tree/master/shanghai-2014-5-31

GreenTea JUG的交流

周六下午参加了在支付宝举办的GreenTea JUG交流

Oracle的Simon是这次的主要嘉宾,他分享的主题是《JAVA8:Create The Future》,我下午有些事情到达的时候他已经快讲完了,之后Simon因为要赶飞机,没有太多交流。

有人提到Java8里Optional类型的意义,这点的确是java程序员难以一下子体会的,Java8里的Stream, Optional都是从函数式风格语言里借鉴过来的,有些monad的味道

空冥分享了《HSF2.0》,外部可能对阿里开源的Dubbo更熟悉,实际内部使用HSF更多一些,当然现在HSF1.x和Dubbo都融合成了 HSF2.0

我这次分享了《Ali-Tomcat》,一半内容是apache-tomcat的基本架构和运行方式,另一半内容是阿里内部如何使用,以及我们增加和裁剪掉的功能。ppt可以从slideshareweibo下载。

3.29号的技术沙龙

上周六在北京主持了一场阿里技术沙龙,主题是“中间件与后端技术”,邀请了Redhat的张建锋和搜狐的秦启东分别分享了《Wildfly的新特性以及规划》,《搜狐新闻客户端的push技术》以及中间件团队的封仲淹分享了《JStorm》

相对于Wildfly,我更关注它所用的Undertow的情况,从这里看到一些对比,在纯文本和JSON情况下undertow的性能在netty之上(三轮里有两轮),尽管对这个测试持有一些怀疑,但了解到undertow是jboss团队里核心程序员DavidStuart Douglas在主导的,也是XNIO框架的作者。分享结束后,跟jboss和weblogic的几个开发聊了聊,我们与他们关注的领域有一些差别,主要在解决自己的痛处,偏向运维层面。

搜狐客户端的后台长连接是基于Go语言实现的,最初他们基于MQTT协议实现的Java(Netty)版发现GC引起的抖动没能很好的解决,后来切换到了Go,改写了MQTT,基于goroutine机制实现单机百万的长连接。这与之前淘宝实现web旺旺时的经历有些类似,web旺旺的长连接也是经历了jetty,netty,erlang的过程,也是因为jvm full gc的抖动导致改用了erlang(基于erlang的长连接确实很稳定,但也带来了cpu利用率较高以及不好找人维护的问题)。对GC的调优是门艺术,设置的好的话,基于jvm实现的长连接也是可以达到百万级的。

封仲淹/纪君祥的JStorm分享也有很多干货,他们相当于用java重写了storm,增加了一些特性并做了优化。细节可以看他的ppt,当前内部很多日志处理都是用jstorm在做的。

之前也和邓草原沟通过,希望能交流一下他在豌豆荚怎么用scala构建后端服务的,不过时间上不凑巧,希望下次有机会再切磋。老邓是国内erlang/scala圈子里超级大牛,最早也是用他开发的netbeans插件写scala的。

这些资料可以在: http://club.alibabatech.org/resources.htm 获取,稍后组织方应该会把ppt放上去。也可以关注阿里技术嘉年华的微博

// 补充
建锋写了一些《Undertow服务器基础分析》的博客,很值得参考: 1.概述 2.XNIO 3.Undertow

2013华东scala爱好者聚会(杭州)

上周六下午在西溪园区组织了一次华东地区scala爱好者交流,上海也来了6,7个人,总共有6个分享,议题如下。

《scala类型系统》
《类型驱动的函数式编程》
《actor与akka》
《spray初探》
《spark:基于Scala的大数据处理》
《sbt made simple》

这次参与的大约30人,杭州几家使用scala开发的都来了,就是时间上有点挤,没留足交流的时间。
所有PPT都已上传到:https://github.com/CSUG/csug/tree/master/slide/2013_10_19_scala_meetup

阿里技术嘉年华2013

这次阿里技术嘉年华上分享了《Scala中的函数式特征》与之前分享过的一篇ppt部分内容重合,不过也介绍了一下scala类型系统中的函数式特征。正是因为scala的类型系统支持高阶的概念,使得它也具备了部分解决问题的能力。type lambda 这个概念是从《Scala in depth》这本书里看到的。ppt可以从这里下载。

再说说这次嘉年华上的一些体会和收获。我是在周六上午10点的后端技术-编程语言专场的一个workshop上做的分享。开始担心关注scala的人很小众,并且又是上午最开始,来的人会很少,不过情况还好。CrazyJVM等scala粉丝都过来了,结束之后有两个从西安thoughtworks来的哥们儿跟我了解了一下阿里目前对scala使用的情况,以及不够普及的原因。

周六一天逛了几个主会场以及workshop,完整听了的有2个,一个是云OS的一个分享jvm指令及优化的,还有tinyfool讲述他创业经历的。有部分感受很认同,就是有时候你费劲力气做某事却总也无法做的很顺心,或达到预期的满意度;这可能就是天性,每个人都有自己擅长的领域也有不擅长的领域,尽可能符合自己的本性,会容易快乐一点。

还略微听了会儿一些开源项目的分享,tsar与nginx的配合,或许值得容器这边借鉴。还有天猫的一个对协程使用的分享,可惜没听到正题,有事先回家了。周日也有几场是我想听的,不过也有事没能去听。

二月份杭州GreenTea JUG的收获

5.25号的greentea活动有事没去参加,这是2月份那次greentea杭州的活动记录,当时有两个会场,只听了一个会场的。

昨天下午去华星时代广场参加了greentea java用户组,听了周忱的《java程序员也要懂cpu》
莫枢的《Intrinsic Methods in Hotspot VM》,以及王铮的《有关jvm profile的工作》还是很有收获的。
因为相对偏底层,平时不太涉及,尤其王铮的分享,传递了一个观念,硬件的设计与软件是很有差异的;在软件中的性能问题在硬件中或许根本不存在,硬件天生是并行的,软件则是串行的。

Intrinsic方法简单的说就是jvm对某些声明为了intrinsic的方法进行特殊的处理,不按照java里提供的代码逻辑或者jni里的实现,而是按照特定平台优化后的指令来处理,比如System.arraycopy 虽然声明为native(让人误以为可能比java实现更慢),但实际它是一个intrinsic的方法,它实际比你自己在java中来实现数组拷贝要更高效的。甚至在vm里用同样的实现逻辑,被标记为intrinsic的也依然可能比未标记intrinsic的要高效。

jdk中有哪些Intrinsic方法,可以在vmSymbols文件里找到,但温绍说他测试某些intrinsic的方法反而慢了
这个需要在特定的平台,特定的cpu,需要几个条件都符合,而目前并没有每个版本的jdk中哪些intrinsic的详尽描述的文档。

莫枢除了对Intrinsic方法的介绍,还回答了一下避免让两个数据在同一个cache line在java8里的实现:采用
@Contented 注释来避免false sharing的问题,不必在程序中写丑陋的padding 变量来实现了。

另外对Hotspot去除permgen的进度,需要到java8才会去除了。还纠正了我对hotspot jdk7中String.intern一个误区;String.intern 并不是直接存放在老生代,是在heap中,依然会经过新生代到老生代的过程,在young gc后才移到老生代。这也是对permgen移除的一部分工作,在jdk7里先release了这部分。

莫枢还演示了一个工具CLHSDB,除了普通的定位内存地址,还可以采用js来实现扩展它的命令。

与19楼的交流

起因是微博上福强转了csdn的总编刘江发的一条信息说19楼已经全面采用scala了,因为就在杭州,大家很有兴趣去了解一下他们用的怎么样,于是阿干联系到了之前在阿里巴巴中文站现在19楼的汤汤,在汤汤的安排下,有了今天的这次交流。

感谢汤汤和19楼的热情接待,技术总监王治和另外几位开发负责人,跟我们分享了一下他们对scala的使用情况。先是分享了一个ppt介绍了一些scala的特点,他们碰到的一些问题等。然后大家交流了一下具体的东西,大致了解了一下19楼的网站技术架构:

前端的负载均衡是F5,静态服务器使用 Nginx,后边 Tomcat,虽然使用scala,但并未选用lift或play框架(只有个别项目尝试过lift,风格差异太大没有在全站采用),仍使用的springMVC,数据库使用mysql,sharding的方式是每次做运算来确定的,持久层框架采用的ibatis,缓存使用的memcached,目前的整个集群大约二三十台。

构建工具仍采用maven没有使用sbt,单元测试用的scala-test框架。最早期19楼是是php,后迁移到java,在09年时就开始尝试scala,他们算是在技术上很敢于尝鲜的,那时scala的版本还是2.7,后来升级到2.8因为不兼容,折腾了一番,当前使用的scala2.9.3,jvm版本是1.6

在soa方面,19楼也对部分业务做了切分,比如user模块,但在调用上,大多在前端js就调用了不同的服务,后端服务之间的相互调用不是很多,rpc基于http/json,我们还问了一些其它关注的问题,重要的一个问题是当初怎么决定采用scala的,这是由他们的技术总监决策的。在人才招聘和培养方面,招进来的时候只要求懂java就可以,后续个学习和培养的过程,这中间也有一些程序员不习惯scala而走掉的,但是留下的都是对新技术有学习热情的;并且他们目前的开发团队规模和流动情况都比较小,能够保持一个比较稳定且好学的团队,这也是他们可以选择新技术的一个优势。

后续,文波 介绍了一下阿里巴巴的一个sns产品来往使用scala的情况。与19楼相似的一点是,也是用scala实现业务层(service)逻辑的,框架上也没有改动现已稳定成熟的 webx3+spring+ibatis,只是把service和dao的实现用scala来做,然后通过spring与现有框架无缝集成。构建工具也使用maven,单元测试有junit和scala-test。

最后聚石 分享了一下HouseMD这个诊断工具的使用和开发。这个工具是他用scala实现的,类似btrace的功能,但在交互上只需要attach一次,然后在prompt下用一些命令来操作。推荐大家在诊断问题时使用这个工具,有问题在github上反馈他会比较及时。

以后的活动和交流,仍会先在CSUG上通过发起issue来确定,CSUG并不只是阿里内部的一个组织,也不局限在杭州,欢迎更多scala爱好者们加入。

上海scala爱好者聚会

上周日(5.12号),和王福强一同去上海参加了上海scala爱好者的聚会。11点坐动车过去,到达时正好中午,本想通过大众点评找到附近的馆子吃点东西,过去一看居然很多人外边排队,没耐心等待,先走到聚点昌平路的”联合创业办公社”附近再说。然后在路上福强看到诺铁在前边背着包也往那个地方走去,他的面相比较好认,我们过去打了个招呼,这哥们儿较早之前也在阿里(支付宝)待过,后来离开现在上海thoughtworks。现在带着一些项目在使用lift框架开发,这也是他这次分享的议题;问他上海的scala开发是否常聚会,他说这是第一次。

我和福强在附近的小饭馆随便吃了点,然后过去时时间正好。第一场是老猪分享的《scala与设计模式》,老猪是个比较细且讲话节奏有点慢的人,内容准备的很充实,虽然大部分模式都是比较熟悉的,但也有些细节从他的分享中了解到,比如说适配器模式时提到java8中也增加了virtual extension method用于在接口中提供默认方法。还有虚拟代理与lazy,以及type classes(类型类),我之前有知道scala里通过隐式转换来实现这个功能,但未曾把它当作一种模式,通过他这么讲也算是更明确了;简单的说这个模式有两个特点:1)定义类型约束;2)通过隐式参数自动实现类型转换(比如很多的)。同时老猪还提到相关的Magnet模式,在spray.io中有用到。

在中间休息时,我代同事聚石问候了一下老猪,他们公司翻译了akka2.0文档,还有一些公益项目,对scala社区很有益。

第二场分享是诺铁的《Lift实战》,诺铁的ppt很简单,主要是通过一个基本功能的demo来说明了一些lift中的使用方法和注意事项,因为对lift框架不了解,细节的东西基本都没有记住,只通过他的ppt大致了解了view first的设计风格与mvc框架的区别,还有一些orm框架的情况。

最后一场分享是汪院长的《Play2的苦与乐》,汪院长是个年轻的创业者,他们正在开发的 看处方 正是用play2实现的,他讲了一些play2的开发情况,一些爽的地方与不爽的地方。同样也因为不太了解这个框架不记得细节了。他们目前大概写了9000多行scala代码,按诺铁的经验有点多了。

这次聚点“联合创业办公社”就是汪院长团队所在的地方,属于创业孵化器这样的环境,同他们一起在那个地方办公的还有另外一些创业公司。

最后因为要赶火车,在结束后没有跟大家交流,这次老高还有其他一些scala-cn邮件列表里的人都去了,约20人的规模。很遗憾没怎么跟大家聊。在回去的火车上跟福强交流,他说想看看《scala for the impatient》这本书,里面讲到了continuations,他想看看能否用来改造目前天猫的一套基于kilim coroutine的框架,我正好带了这边书的中文版,借给他了。他更偏向阅读英文版的,老高翻译这本书比较仓促,有个别细节不到位。scala里delimited continuations理解起来并不复杂,但除了在jetty中看到过有continuations的概念,其他应用和框架中还没有看到过,所以对它的场景不够了解。福强说coroutine的实现也可以基于continuations,我不是太了解这块。

照片是老猪在分享