August 15th, 2010 :: jackyz
官方的 Erlang-Question Maillist 确实是个值得“长期潜水”的地方——因为,这里时常会有“水怪”出没,比方,象火爆的 Joe Armstrong 爷爷和热辣的 Ulf Wiger 大叔之类。比方说,讨论象“争论 Erlang 到底 OO 不 OO”这样的“诱饵话题”,通常会比较容易吸引到“大水怪”们跑过来……,然后就有好戏看了。就算话题本身的乐趣有限,争论本身也不会让人失望。通过争论,我们能够看到各种各样的背景、引用、推论、思维方式乃至文化……,这些可都是人类精神世界多样性的珍贵样本,比起技术本身也毫不逊色。
看戏点[这里],推荐[订阅]此邮件列表。
以下为 BLAH,没时间的同学自行跳过。
Read more…
misc
April 24th, 2010 :: jackyz
在程序设计语言的圈子里,有关 OO 的争辩,几乎是各大社区每过一阵就会又发生一次的“风景”。单就辩论本身而言,对于一部分同学来说,因为围观的次数实在太多,无论是辩论的过程还是结论,其实大都已经不再新鲜。
但,从另外一个角度来说,每次这样的辩论,几乎总是能给我们带来一些新鲜的“猛料”。他们在辩论之中的引用、类比、或是提及,就像是一本好书末尾的“引用来源”列表(这个东西我们历来都不重视啊)。我们所要做的只是轻点鼠标按图索骥而已。这样的阅读通常都很让人愉快,因为它们每每都能给我带来“新鲜的空气”。不知其他人是否也有同感,或许是因为国外的治学风气更好(注明引用来源的好习惯),又也许是语言的隔阂(这些好东西都是英文的),再不就是我个人的理论基础太薄弱(太不喜欢读论文),原因不太可考;反正单就我自己而言,每次阅读这些东西都能让我在受益匪浅(长见识啊)的同时又切身体会到与其他科技“发达国家”之间学术水平的遥远差距(人家几十年前的论文,对我来说根本就是闻所未闻)。
这一次,激烈的辩论发生在 Clojure 社区。大家可以点下面的链接围观(也可以当作提高英语水平的好“毒物”):
照例,提醒一句,总是有些好东西在墙外,请自备工具。
misc
February 3rd, 2010 :: jackyz
Kresten Krab Thorup 是一位有着 20 多年程序设计语言实现经验的大牛。
I have been doing language implementation for 20 years. I was at NeXT doing the Objective-C compiler for some years in early-mid 90’s. I have worked on severa rounds of gcc, the GNU Objective-C, the palmos-m68k port, the JVM interpreter inside GNU Compiled Java. I have also contributed little pieces to JRuby, and a ton of other language stuff.
貌似是一位靠谱程度相当之高的同学。他在 GitHub 上设立了一个 Running Erlang On JVM 的项目 —— Erjang,到目前为止,已经达到可以顺畅运行 RingTest 的完成度,有兴趣的同学可以 git clone git://github.com/krestenkrab/erjang.git 弄回来玩一玩。Erjang 的大致设计思路是:
It loads Erlang’s binary .beam file format, converts it into Java’s .class file format, and loads it into the JVM. It will eventually have it’s own implementation of all Erlang’s BIFs (built-in-functions) written in Java. Those are being implemented as I stumble upon them in testing.
当然了,这是“终极目标”,当前实现版本的状况是:
Right now Erjang relies on an external Erlang process to utilize some of the beam handling code in the standard library (e.g., so I don’t have to parse .beam files), but Erjang would eventually be able to self-host the required modules. Right now, Erjang also uses jinterface to talk to other Erlang nodes, but that will needs porting/rewriting, I think.
稍有常识的技术人员都知道,如果不是过过嘴瘾的话,这样的“终极目标”将会意味着多大的工作量,但是有 20年+ 专业经验值的牛人通常都是非常 unpredictable 的物种。因而,这些工作对他而言到底需要多少时间,确实也很难说。
我知道,看到这样的项目,和我一样,第一反应,你肯定也会产生这样的疑问 —— Erlang 的 BEAM 已经是一个有着相当长时间历史的成熟 VM ,在很多方面都已经做了高度优化,为其他 VM 所不及;而 Erlang 在 Language 和 VM 的配合上也颇多好评,为人称道。那么,Kresten 这么做又有什么必要呢?
实际上,这个问题在 Reddit 上确实也引来了一大堆激烈的争论。Kresten 本人为此单独写了一篇 Erjang, Why? 来讲述自己的观点,有兴趣了解的朋友可以点[这里]延伸阅读。以下是我的 blah ,不喜欢 blah 的同学可以直接略过。
对于我个人而言,似乎还看不见 Erjang 的实用意义(说不定是因为我短视呢)。
但,无论如何,人家牛人 Kresten 同学既然都已经做出来了,总归也不会是一件坏事。 JVM Team 好歹也是 20年+ 以上大量开发团队的智慧结晶,必有过人之处,两相对照,肯定能发现一些 BEAM 团队没有考虑到的地方。通常而言,一个语言出现多个实现,彼此互相对照和竞争,绝对是一件好事。比如说,在 Kresten 的 blog 中就已经提到,它在 fib 的测试上发现 BEAM 在 bignum 的运算表现上不如 JVM 的好。
除了这些“整体上”的好处,Erlang 在 JVM 的实现,想必会也受到 JVM 体系固有的限制,如果因而破坏语言本事的一些核心特性,比如,进程的独立性,GC的独立性之类的,那么在具体选择时,就值得我们这些使用者再三斟酌了。
———-我是分隔线————-
顺便要抱怨一下。今天点 Firefox 地址栏里的 RSS 图标想要直接订阅 Kresten 的 blog ,发现 fusion.google.com 居然也被该死的功夫网给墙了,纯粹一个工具,能颠覆什么?这帮魑魅魍魉怎么就怕成这样了?
大家大多都有翻墙经验,随便设置一下就好了。但是,其他人怎么办?一个这么好的功能,就这样被这些破玩意给糟蹋了,凭什么?想来都让人上火。希望大家和我一样,多向身边的人传播翻墙技巧。日拆一砖,就不信丫能在世界的东方永远屹立不倒。
misc
December 11th, 2009 :: jackyz
好久没有露面的 Joe 大爷又在 Maillist 里出现了。这一次,他老人家在自己的 Google Chrome 浏览器上体验了一把 HTML5 的核心特性 —— 顺手用寥寥数十行的 Erlang 代码捣鼓出来了一个 WebSocket 服务器的参考实现(围观群众起哄:胜之不武,这本来就是 Erlang 的拿手好戏嘛)。咱还是照旧,废话少说,先上代码:
- <body>
- <script>
- alert("hello");
- if ("WebSocket" in window) {
- var ws = new WebSocket("ws://localhost:1234");
- ws.onopen = function() {
- // Web Socket is connected. You can send data by send() method.
- ws.send("hello from the browser");
- };
- ws.onmessage = function (evt) {
- var data = evt.data; alert(data);
- };
- ws.onclose = function() {
- alert("closed");
- };
- } else {
- alert("sad");
- };
- </script>
- </body>
- -module(local_server).
- -compile(export_all).
-
- start() ->
- {ok, Listen} = gen_tcp:listen(1234, [{packet,0},
- {reuseaddr,true},
- {active, true}]),
- spawn(fun() -> par_connect(Listen) end).
-
- par_connect(Listen) ->
- {ok, Socket} = gen_tcp:accept(Listen),
- spawn(fun() -> par_connect(Listen) end),
- wait(Socket).
-
- wait(Socket) ->
- receive
- {tcp, Socket, Data} ->
- io:format("received:~p~n",[Data]),
- Msg = prefix() ++
- "WebSocket-Origin: http://localhost:2246\r\n" ++
- "WebSocket-Location: ws://localhost:1234/\r\n\r\n",
- gen_tcp:send(Socket, Msg),
- loop(Socket);
- Any ->
- io:format("Received:~p~n",[Any]),
- wait(Socket)
- end.
-
- prefix() ->
- "HTTP/1.1 101 Web Socket Protocol Handshake\r\nUpgrade:
- WebSocket\r\nConnection: Upgrade\r\n".
-
- loop(Socket) ->
- receive
- {tcp, Socket, Data} ->
- Data1 = unframe(Data),
- io:format("received:~p~n",[Data1]),
- gen_tcp:send(Socket, [0] ++ "hello from erlang" ++ [255]),
- loop(Socket);
- Any ->
- io:format("Received:~p~n",[Any]),
- loop(Socket)
- end.
-
- unframe([0|T]) -> unframe1(T).
-
- unframe1([255]) -> [];
- unframe1([H|T]) -> [H|unframe1(T)].
技术的部分已经说完了,就象 Joe 老头的那 48 行代码那样——简单明了,连注释都不需要。下面借 Joe 老头的光,顺便 Blah 一下。
Joe 老头说:
But I think it will kill ajax and comet and all that crap. Ajax is painful if you only want to send very small amounts of data, you still have to spend all your time parsing the http headers. Comet and long-poll etc will die since they are totally unecessary.
What I hope will happen that Google will pre-empt some action in firefox and this will push Microsoft into action – I can’t understand why this has taken so long after all it’s merely a question of *removing* code from the browser and giving access to the low-level socket interface.
It will make applications symmetric – anything that involved pushing data to the client was tricky hence the horrific workarounds that comet and long-poll involved – now things like chat in the browser become symmetric push/pull applications.
About time say I – I’ve waited years for this.
见过我的同学都知道,我关注这个领域(Ajax -> Erlang)有日子了,一直都在各种场合大肆吹嘘 Erlang 和 Ajax 是“天生的一对”。因此,大概也可以冒充半块砖(家)吧,老实说,对于 WebSocket 我也很兴奋,但对于它的前景我却不象 Joe 老头一样乐观。
从技术角度,不难预见 WebSocket 的普及将会带来 Web 应用领域的另外一场巨变。为了适应这一“气候变化”,现有的“技术物种”(框架怪兽和模式恐龙)必将再次剧烈进化,灭绝掉其中的几种也大有可能(其中之一就是现在的 OS 将会被“边缘化”)。然后,当当当,新的 Web 和一大堆新名词又将“横空出世”。但,就目前而言,这场变革还没有大幕拉开的迹象(至少远比我们这些观察家期望的要慢得多)。这无关技术,听起来好像很阴谋论,但这确实更像是一场智谋的较量。
多年以来,邪恶的 M$ 先通过免费和 OS 绑定来占领市场,然后通过有预谋的 IE 不作为,使得浏览器市场出现了畸形的“安定团结”局面。这些长期“被河蟹”的绑定用户,他们开始觉得浏览器就应该是这样缓慢、不安全、而且功能受限的。他们这群人,既是变革的最大受益者,但与此同时,却也正是这一变革当前最大的障碍,具有讽刺意味吧(历史何其相似)。
然而,第一个可以体验 WebSocket 的 Google Chrome 却并非第一个实现这一特性的浏览器。FireFox 早就已经实现了,然而这个特性却一直停留在 trunk 之中(有好奇心的童鞋可以看这里顺便练练英文),尘封已久。作为旗手兼宣传队和播种机的 Google Chrome 是第一个把 WebSocket 拿出来 show 的。记得当初 Google Chrome 计划推出时不少人还有疑惑——“为什么不直接加入OpenSource 的 Firefox 项目呢?”,现在回想起来,是不是有点豁然开朗的意思?
窑洞的墙壁上挂着一张巨大的世界地图,Google 主教和 M$ 长老分别站在地图前的左右两侧,叉着腰、拿着红蓝铅笔,做沉思装……。
又到了万众期待的押宝时刻,想冒一把险,给自己整个“xx框架创始人”头衔的同学,赶紧了。
misc
November 17th, 2009 :: jackyz
Erlang 中文社区的朋友们,大家又有福了(呵呵,为什么要说“又”呢)!
这一次,“法无定法”同学给大家带来了他翻译的《Mnesia 用户手册》。这是一份多达 95 页的“重量级”文档(无论是从其大小还是 Mnesia 在 Erlang 中的位置而言),翻译任务之艰巨,大家可以自己想象。
不知大家是否有同感,我们很少能在 Erlang 项目之中见到连接传统关系型数据库的例子(虽说相关的库和例程很早就有了)。或许,这是因为,传统关系型数据和 Erlang 的软件哲学在某种程度上是彼此冲突的,况且,“Erlang 也已经有了 Mnesia”。从这个角度而言, Mnesia 对于 Erlang 的重要程度,应该就好比 MySQL 之于 PHP 一样才对。
然而,在我们所能见到的大量实践中,很多 Mnesia 早已提供的特性却在被一批又一批的程序员们“重新发明”——它似乎从来就没有获得过它应该得到的重视。出现这种状况,文档的匮乏(一方面是专注于此的文档本来就不多,另一方面 Ericsson 暧昧的开放态度又使得 Mnesia 还有一些“从未被写进文档”的神奇特性),不能不说是其中的一个重要原因。
对 Erlang 的中文用户而言,问题则更为突出。Joe Armstrong 的“那本书”,对于 Mnesia 只有一章相当简短的介绍,末了,限于篇幅也只能说“关于 Mnesia 的更多内容,恐怕得另外再写一本书才行”。现在好了,有了“法无定法”带给我们的中文译本,这一空白已经在很大程度得到了填补。
现在,单就文档而言,我们虽然还不能说已经“走在世界前列”,但至少可以说“跟上世界的脚步”。让我们严重感谢“法无定法”为 Erlang 中文社区所作的贡献!
Mnesia用户手册 [pdf][docx]
misc
November 12th, 2009 :: jackyz
CN-Erlounge IV 圆满结束,各路英豪流出宝藏一大堆。经四处放狗,收刮如下:
0. 各位演讲者帅锅精心准备的演讲 slide
2. 由方块帅锅和莫帅锅 “以某种说不清楚的方式合作” 的 现场剧照
update: 对了,还有 zq 同学的 腐败前哨战实录
3. cn-erlounge-iv 现场抢到了 wifi 的幸运星们联袂演出的华丽 推推乐(请自备工具,以翻墙行动纪念柏林20年前那堵同样“伟大”的墙)
4. ZoomQueit 帅锅整理的 现场原声
5. 同样是由 ZoomQueit 从会场第一线发回的 “现场文字报导”(内容太长,放到后面了,点击 more 展开阅读)
6. yufeng 帅锅言简意赅的总结
7. litaocheng 帅锅同样言简意赅的总结
8. 一位我还没有和真人对上号的帅锅的围观观后感
update: 围观观后感下
Read more…
misc
October 10th, 2009 :: jackyz
InfoQ 又为我们带来了新的访谈!感谢 InfoQ 的编辑们。
这次记者在 Erlang Factory 上逮到了 Joe Armstrong 和 Simon Peyton Jones 这两头大猛人,一起抓来做了一个 Interview 。众所周知,这两人分别在 Erlang 和 Haskell 语言中都是的大神级的人物,此番聚首实在是难得的机缘。
这次在 Erlang Factory 上的会面,两人大聊 Erlang 和 Haskell 在并发方面的特性,从技术角度而言,含金量颇高。当 Programmer 界两个脾气火爆的老头碰到一起,各位 IT 八卦爱好者同样也很好奇,他们究竟会冒出怎样火花呢?请移步 [这里] 观看。
misc
erlang, haskell, interview, joe_armstrong
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
Recent Comments