September 28th, 2009 :: jackyz
CN-Erlounge-IV 会议时间调整,转发一下:
经过慎重考虑,并经过会务组和讲师们的协商讨论,特将CN-Erlounge-IV会议的时间延期到11月7日~8日。
理由如下:
与 CSDN SD2、哲思峰会时间冲突。有一些 Erlounge 的讲师同时也是 CSDN SD2、哲思的讲师。尽管讲师都表示会赶过来,但是出于讲师身体状况的考虑,我觉得不太合适。
投稿截稿日期与会议日期之间周期过短,不方便会务组给各位讲师订机票。本次延期后仍然有些仓促,以后在 Erlounge 时间安排上会尽量加长这段时间(至少1个月)。
关于更多本次大会的信息,请访问官网:http://ecug.org/
为了确保所有人都得知本次延期的通告,欢迎您通过各种途径传播此消息,为此我们非常感谢您的支持与帮助!
news
September 2nd, 2009 :: jackyz
陈皓同学的博客建在 ZDNet 上,他最近正在研究 Erlang ,在官方文档上花了 24 个小时的研读之后,终于调通了 Erlang 通过 Port 机制调用 Python 的代码。或许,他的文章和代码能帮助更多的朋友节约更多的 24 个小时,尤其是对于那些想要写 Port 或正在用 Python 的朋友。故,在此推荐之。地址在[这里]。
其实 Port 对 Erlang 而言是一个很重要的扩展设施。在 Disco,在 CouchDB,在很多重量级的 Erlang 项目中,我们都能看到 Port 的使用。在大量的 Erlang 项目实战中,最初的快速原型开发确定之后,再将发现的瓶颈部分改为更加高效的本地 Port 来实现(如果能够确认这样的实现真的更加高效的话),这似乎也是比较通行的做法。放在这样的应用场景下考虑,此时的 Port 其实充当着“ Worker 调用者”的角色,而 Erlang 自身则变成了动态机器集群的“粘合系统”。与“将一个机房/一堆机器当作一台机器来使用”的架构目标达成了极佳的重合。
对于大多数的 Erlanger 而言,在实际的工程实践中,对“效率”和“适用性”上的考量应该被放在第一位,对“是否纯粹”的执着则应该被看得更淡一些。
study
August 20th, 2009 :: jackyz
Erlang-Web 并不是一个“新”项目,它的出现已经有一阵子了(第一次的公布是在 2008 年的 11 月)。一直以来,因为并没有太多的机会去实际使用 Erlang 来写“传统” MVC 的 Web 程序(了解我的人都知道,我一直在鼓吹采用激进的纯客户端的 JavaScript 的 MVC 来做 Web 开发),所以并没有去真正了解它的特性。这种状况一直持续到最近,一个偶然的原因,需要做一点传统的 Web 开发,这才有机会回头再来审视众多的服务端 MVC Web 开发技术,并有机会认识 Erlang-Web 的强大。
对于一个全新的传统 Web 项目而言(通常这意味着内容要对搜索引擎友好、URL Friendly、有节制的使用 Ajax 等等需求),对于服务端开发框架的考察无非就是需要关注如下这么几个方面:
首要考虑的是编码的“效率”,在这个坐标上,通常都是认为 Ruby On Rails 和 Python Django 之类的“Full Stack Web Framework”具有较高的得分。大量的默认习惯性配置,代码模版,等等,借助这些设施,通常较少的实际编码就能得到相当不错的成果。
然而,这类 Full Stack 框架通常“水比较深”,也就是说,它什么都提供了,但是有点“过了头”。稍微有点“另类”的想法通常容易导致痛苦。在这个坐标上,反而会希望框架再“谦逊一点”,毕竟只是一个 MVC 设施,简洁明了和可裁减也很重要。越简单的越好改,对熟手而言,用起来更能随心所欲。
再然后就是省时省力上的考量,和美工的流程配合、上传下载、URL Mapping、拦截设施、Email模块、与其他系统的接口,等等,该有的都要有,不该有的有了也好,不强买强卖就行。简而言之,能用较少的“脑力”来完成任务,就是上上大吉。
于是,我惊讶的发现自己在越来越多的关注 PHP 之类的技术(其中的一些确实是很不错的选择)。但要知道,对我个人而言,使用这门语言大约是在 9 年以前。这时我才想起曾经听过 Erlang-Web 的大名。没准怎么样呢,大不了回去再用 PHP ,先看看再说。我们了解一下它的特性:
- Annotations —— 支持“区分主要任务和外围事务”的设施,帮助清晰和重用代码。
- Architecture of types —— 类型系统,并用这一类型系统来对应界面。
- Dispatching and Reverse dispatching —— 从 Friendly URL 映射到程序,及其反向功能——生成 Friendly URL。
- Validation —— 校验用户输入。
- Internationalization —— 传说中的 i18n 支持。
- Request dictionary —— 在其他 MVC 中被传来传去的,什么都往里扔的 Request Object 的对应物。
- DBMS —— 数据库支持,目前只支持 Mnesia 和 CouchDB (太 Erlang 了一点,要是能支持 MySQL ,就算是做做样子也好,胜在够有亲和力呀)。
- Project configuration file —— 组织配置文件的设施。
- Data flow —— 处理默认值,格式化参数等等的设施。
- Template engines —— 模版引擎,目前支持 wtpl 和 Django 的 dtl 模版语言。
- 其他 —— 一些有意思的组件,如 twitterl, wpart_rss, ew_backup, wpart_erlsyntax, e_auth, e_auth_dets 名字都很简约,可以直接望文生意。
配上 Erlang 内置的分布式和高并发特性,再加上 Mnesia 的诸多优势,看起来还是有一些亮点吧。当然了,特性并不完美,而且学习曲线很可能还有一点“陡峭”。但对于一个处于活跃开发周期中的项目而言,这应该不是什么大问题。长久以来流行在 Erlang 社区的这个说法——“Erlang 并不适合开发 Web 项目”——现在是不是时候改变了呢?
misc
August 11th, 2009 :: jackyz
Call for CN Erlounge IV !
“Erlounge”是国外 Erlanger 对聚会的特定称谓,而“CN Erlounge”这一名称则是从 2007 年珠海的第二次会议开始,一直沿用至今。在 2008 年致力于 CN Erlounge 会务召集与组织的官方网站 ECUG.org 开通,并成功组织了精彩纷呈的 CN Erlounge III 上海站会议。如今,保持着一贯的热情与高效的 ECUG 会务组又在为我们忙碌的准备着今年的盛会 —— CN Erlounge IV 。让我们感谢他们的辛勤付出,也感谢会议历届的赞助商们。
去年 CN Erlounge III 的内容让人印象深刻,而今年 Erlang 的世界又格外精彩,不知不觉间,已经让人对于此次盛会内容又有了更高的期待。
ECUG 成立于 2007-10-14 日的 CN Erlounge II。全称为 Erlang China User Group(Erlang中国用户组)。它是一个民间团体,致力于促进 Erlang 中文社区的交流,以发展和壮大 Erlang 中国社区(了解 “Erlang 中国社区的发展历程”)。
按照 ECUG 的计划,预计每年我们都会举行一次全国性的Erlang开发者大会。这个会议我们简称为 CN Erlounge。下面是历届的 CN Erlang 大会资料:
1. 2007年9月8日,CN Erlounge I,珠三角Erlang爱好者小聚。无会议资料,但酝酿了之后具有里程碑意义的CN Erlounge II。
2. 2007年10月13~14日,CN Erlounge II 在珠海召开。金山为大会主要赞助方。
3. 2008年12月20~21日,CN Erlounge III 在上海召开。盛大网络为大会主要赞助方。
今年 Erlang 中国社区人气有了明显的提高,也陆陆续续有互联网公司使用 Erlang 到他们的产品中。也有很多人开始用 Erlang 风格的并发模型(Erlang Style Concurrency)在自己熟悉的语言(如 C/C++、Java 等)中做事情,一些语言更号称自己已经实现 Erlang Style Concurrency 模型。另外,也踊跃出一批基于 Erlang Style Concurrency 模型的新语言(比如Scala)。在我们看来,Erlang是否会最终非常成功,目前言之过早,但是 Erlang 风格的并发模型(Erlang Style Concurrency)的成功,却是已经不容置疑的事实。
今年将于10月24~25日举行的 Erlang 开发者大会属于第四次 Erlang 开发者大会,简称 CN Erlounge IV。
CN Erlounge 的官方支持站点:ECUG.ORG。
CN Erlounge IV – 发起
1. 时间:2009-10-24 ~ 2008-10-25,为期2天
2. 地点:杭州(详细待定)
3. 议题: 研究、探讨、关注Erlang风格的并发模型(Erlang Style Concurrency)的技术及最新进展(不局限于Erlang语言)
4. 面向人群:对Erlang风格的并发模型有一定了解并有兴趣应用于实际工程的人。
5. 会议主持:ECUG 会务组
会议形式
1. 多数时间由交流会讲师针对某个 Topic 进行论述,其他人提问(Q&A)方式交流。
2. 留出一小段时间,安排沙龙式的对等交流机会。
会议规则
1. 会议的讲师报销来回路费和住宿(申请成为讲师)。点击这里可以查看已经确定的讲师名单。
2. 任何人可报名免费参与听讲(注册并申请参加本会议)。
注:由于场地限制,我们可能没法接受所有的与会申请,请谅解。如果名额已满,我们会回信说明。
重要时间点
1. 讲师注册及Topic征集截止日期:2009-9-15
2. 普通参会者报名截止日期: 2009-10-1
3. 讲师投稿截止日期:2009-10-10
4. 详细会议议程安排公布:2009-10-15
5. 会议日期:2009-10-24 ~ 2009-10-25
CN Erlounge IV – Topic征集
Topic范围
讲师的议题是否必须限定和 Erlang 相关呢?答案是否定的。我们需要Focus的是我们的问题域:如何高效地(包括性能和开发效率)进行分布式编程。我们都关注 Erlang 在这个方向上取得的成就,但不能也不想限制自己的眼界,Erlang 决不是我们唯一。只要你的议题和 Erlang 关注的问题域相关,和分布式、和多核时代面临的挑战相关,就没有“跑题”。Erlang 社区应该是睿智的、包容的。
投稿请发往 ECUG 会务组。
讲稿建议
1. 内容有深度,而不是泛泛而谈。忌局限于一个事实或者一个实践,但是没有任何结论。
2. 内容有一个Focus的问题域。告诉大家你要解决什么问题,它又是如何被解决的。
3. 如果能够结合一个实际的应用实践,那是最棒不过了。
misc
July 28th, 2009 :: jackyz
Joel Raymond 最近搞了一个“悬赏”,看[这里]——如果能在1秒钟以内完成对20K客户端的广播(包含网络通讯,当然,为了排除网络速度的影响,是在本机做的测试),那么就能得到 $1000 。
Joel Raymond 是一个富有经验的 Erlang 开发者,连他都搞不定的问题,可以想象,应该简单不了。但这的确是个有趣的问题,虽说咱没想拿奖金,但这个有趣的题目,不拿来做个山寨测试,岂不可惜?
咱们就从这个很简单的测试程序开始。(注意,相当之初级,高手请闭眼,哈哈)
Read more…
misc
July 10th, 2009 :: jackyz
活跃在博客园的“老赵”,是一位研究 .NET 非常深入的同学(因为我本人也是老赵——jackyz.zhao,所以,特地加了引号)。他最近很关注“在 .NET 下实现 Erlang 语言特性”的课题,并为此写了一系列的技术文章,相当不错,我一直都在关注。他自己写了一个名为 ActorLite 的小东西,此前做过介绍,是个不错的尝试。
最近“老赵”同学写了一篇《一种适合C# Actor的消息执行方式(上)》,其中提到“(在消息执行上) Erlang 中最大的问题”。这是一个很有意思的观点,而且因为富于代表性因而显得很有价值,很有必要拿出来和大家探讨。
Read more…
study best_practise, language, pattern_match
伦敦的 Benjamin Nortier 最近在他的博客上贴了一篇 《Erlang Factory 2009 – New Kids on the Erlang Block》(原文在这里,位于“伟大”的那堵墙外,浏览请自备溃坝/翻墙工具,或,看后面的原贴照转) ,在这篇博文中,他历数了 Erlang Factory 2009 上见到的几个有趣的新 Erlang 项目,其中的一些本站此前已有关注,另外一些则相当有新意。
另外,在这里喊一嗓子《Erlang Programming》(另外一本)的英文 PDF 已经全文流出,有人贴出了全本下载的链接,大家有兴趣的,可自行 Google 之。
翻墙辛苦,为方便大家,以下原贴照转,并非蓄意盗版。
Read more…
misc

软件开发的奥义就是:分而治之。
代码世界从来都是一个充斥着耦合的世界,在这个世界里有着各种各样的耦合:静态耦合,动态耦合,类型耦合,逻辑耦合,空间耦合,时间耦合……。可以说,通常而言,一个良好的软件开发,最重要的一个步骤就是使用各种各样的工具来解耦目标系统,使其变成更小,更简单,更易于理解,更便于测试,更……的逻辑单元。完成这一阶段之后,剩下来的,差不多就都是体力活了。
然而,需要强调的一点是,我们要追求的绝对不是一个没有耦合的系统(我很怀疑,可能存在这样的系统么?)。实际上,一些耦合正是业务逻辑的表达,无法去除。我的意思是,或许我们致力于去除的,只是一部分“实现层面的耦合”。话说到这个分上,已经有点 “as simple as possible but not simpler” 的味道,赶紧打住了。
为了解耦系统,我们发展出了种种工具:接口、代理、设计模式……。在所有这些解耦工具之中,最为强悍的恐怕就是消息系统,它的解耦效果,不仅仅体现在概念维度上(接口的使用者和实现者),而且也体现在空间维度上(分布式消息)时间维度上(异步消息)。关于这一点,我这里推荐的这本书,讲得比较清楚。
我们很幸运 Apress 在 2006 年推出的《Event-based programming: taking events to the limit》现在已经可以在 Google Book 上全文读到。而相应的豆瓣页面也正等着大家去丰富。
这里需要强调的一点是:解耦从来都是有代价的,更为彻底的解耦通常就意味着更难把握。对于广大 Erlangor 来说,这本书中的代码和实例,可能不是那么有参考价值,但我们使用的语言正是完全建立在“基于消息编程的架构”之上的,多读一点参考资料,至少是第一章,当然也是很有必要的。
感谢 Jeffry Zhao 在 Twitter 上的投递。
misc Book, event_based
June 11th, 2009 :: jackyz
InfoQ 英文站放出了6月8日在 QCon 上 Joe Armstrong 老头的演讲视频 —— 《Functions + Messages + Concurrency = Erlang》各位粉丝,请点[这里]组团前往围观。
misc
June 11th, 2009 :: jackyz
Erlang 的编译检查相当宽松,有时候,会让人觉得宽松得过了头。比如说,在一个模块中调用另外一个模块的函数,如果被调用的函数还没有定义(比如说,忘了写或者拼写有误),编译器是不会给出任何警告的。如果你看编译没有错误就冒冒失失地运行的话,得到一堆莫名其妙的错误。这通常会搞的人很挫折,而检查这种问题也要浪费不少时间。下面这个脚本是解决这种烦恼的最简陋形式。
#!/bin/bash
erl -pz ebin deps/*/ebin -noshell \
-eval "io:format(\"~p~n\", [xref:d(\"ebin\")]), c:q()."
需要说明的是,未对输出进行任何处理,能看,好懂,但是相当之简陋,有兴趣的同学,可以自己动手美化之。
misc
Recent Comments