Feed on Posts or Comments

Erlang 资讯 jackyz 发表于 2008年06月30日 9:27

上干货 slides on Erlang-Exchange-2008

Erlang-Exchange-2008(别点了,超流量被关啦)刚刚结束,对于我们这些无法亲临现场的“干粉”(干粉==只能干瞪眼的粉丝)而言,等的就是会议结束,各路 slide 纷纷出炉的这一刻。这个场景多少让我想起小时候,看着别人放完炮,一大堆小屁孩就一拥而上,吸溜着鼻涕猛捡那些还没炸完的零碎小鞭炮的岁月。所不同的是,数字时代,每个人都可以捡到“第一手”的干货,不会为了分赃不均而打上一架。不过,任何一个时代,找到干货或者捡到鞭炮的快乐都是相同的,简单而纯粹。下面就是快乐的“干货大放送”(远未集齐,所缺部分希望各位能继续跟帖完善)。

Armstrong on Software: Erlang & SMP,
Joe Armstrong

Introducing Erlang to Motorola: The Journey to Success,
Nicholas Gunder & Torben Hoffman

Erlang- D-Trace,
Garry Bulmer

Erlang & Robotics: The ROSEN Framework at the Eurobot 2008 Competion,
Corrado Santoro

Erlang/OTP Vs Google App Engine, The CEO View,
Gordon Guthrie

Building Web Applications in Erlang,
Xingdong Bian & Michal Slaski

Erlang in Financial Applications,
Dr. Erik Stenman

Erlang and Ajax Web Applications,
Roberto Saccon

Quick Check for Erlang,
John Hughes

Introduction using Faxien & Sinan: Erlang Project Build & Packaging Systems,
Eric Merrit & Martin Logan

Roktalk, Erlang Powered Mobile Conferencing,
Jay Fenton

Wrangerl, The Erlang Refactoring Tool,
Simon Thompson


Enterprise Integration,
Steve Vinoski

Erlang & Tail-F,
Klacke Wikström

Presenting RabbitMQ: An Erlang Based Implementation of AMQP,
Matthias Radestock

EUnit – Lightweight Unit Testing for Erlang,
Richard Carlsson,

ejabberd for web 2.0 development,
Mickael Remond

Load Testing of Web Applications,
Karthik Ramachandra,

Using Jinterface to Bridge Erlang and Java,
Dennis Byrne

Quick Check Tutorial: Using QuickCheck to Test Erlang Programs,
John Hughes & Thomas Arts,

Using Faxien and Sinan, A Hands-on Approach,
Martin Logan & Eric Merrit

Couch DB at 10,000 feet,
Jan Lehnardt

Building a transactional distributed data store with Erlang,
Alexander Reinefeld

Tsung Tutorial,
Mickael Remond,

Erlang Enterprise Integration Panel Discussion,
Garry Bulmer

Erlang 资讯 jackyz 发表于 2008年06月23日 22:31

Good News — Mnesia Unlimited!

我们知道 mnesia 为很多人诟病的一个问题是——它有着诸多让人费解的限制。比如说,在 32 位的系统上,你最多只能存储 4G 的数据。又比如传说中磁盘表让人胆战心惊的修复过程。这些缺陷常常让人在试图推广 erlang 时,总觉得有些底气不足。虽然说,在实用的角度, 4G 其实也够用了,况且还可以分块。但无论怎么说,这种限制毕竟让人不爽。但其实,这些让人尴尬的限制其实并不是 mnesia 代码的问题(冤枉 mnesia 同学了),而是由它底层的存储机制 ets 和 dets 的特性所决定的(好比 mysql 之于 myisam / innodb 的关系)。现在好了,我们可以说,这些让人不快的限制已经可以被抛在脑后了。

Joel Reymont 就是那位在 05 年写出惊到大家的《Writing Low-Pain Massively Scalable Multiplayer Servers》一文的作者。(此文本站亦有中文翻译《轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统》,感谢译者“神宗冥浩”)。他这次带给大家的是一个让人惊叹的大礼包——超乎想象的 mnesia 补丁包 mnesiaex 。这个东西解除了加在 mnesia 数据库系统上所有的限制(虽说上面已经提到,实际上 mnesia 代码本身没有什么真正的限制)——你现在可以用 SleepyCat/BerkeleyDB/MySQL/Amazon S3/Tokyo Cabinet/… 甚至是你自己喜欢的某种东西来当作 mnesia 的后端,就像 ets/dets 一样。而访问的接口仍保持不变——继续沿用 mnesia 的接口,一行也不用改。 DIY 这种扩展也变得相当容易,写一个 behavior 就成了。

感谢 Joel Reymont 将这些工作回馈到开源社区。让我们一起祈祷 OTP Team 将这堆 patch 合并到 Erlang 的下一个发布版本中去吧。

顺便 blah 一下:

关于 Erlang

Erlang 就好像是 Ericsson 的私生子,从出生之日起就一直不得宠。在 AXD301 中的耀眼光芒,还是逃脱不了被弃用的命运(Ericsson 又转回去用 C 写交换机了,别让我猜中是因为公司政治)。失败了的 Joe 一伙人被迫离开自组 BlueTail 公司,绝望之中以 Open Source 协议公布了 Erlang 的代码,这个挫折使得它在编程语言的坟场寂寞的躺了多年,但仍然保留着翻盘的火种。默默无闻的完善了多年(加入SMP支持之类),一直不为人所知。直到碰上 CPU 多核变革的机遇,这才重新捡回半条命,并渐渐被人提起。但别忘了,Erlang 直到现在仍然都是由 Ericsson 所拥有(整个的 OTP Team 都是他的员工)和操纵的(你能看到 Erlang 的 souce code 但能访问 Erlang source code 的 SVN 么?)。而比 Sun 的 Java 更加糟糕的是老态龙钟的 Ericsson 从来也没有意识到 Erlang 这个私生子身上所蕴含的潜力。麻烦哪位消息人士请一定转告 Ericsson 的老爷爷们,现在连 Sun 都已经完全开源了 Java ,请抓紧赶上吧,把那些没用的遮遮掩掩全都扔掉。因为对于一个程序设计语言而言,只有 Open Source Community 的程序员们,只有这些人,才是它生命力的真正源泉。在此祈祷 Open Source Erlang 项目朝着更 Open Source Way 的方向前进。

关于 Mnesia

因为工作关系,最近又有机会再来近距离审视 mnesia 这坨神奇的东西。Joe 老头在他的书中说:“关于 Mnesia 的更多内容,恐怕还要再写一本书才能讲得清楚”,现在我(部分地)知道这句话的分量了——我发现自己之前对于 Mnesia 的认识完全错了,而基于新的认识,好多东西都要推翻了重来(害我多做了那么多蹩脚的实现,写了那么多苍白的代码)。我的感觉(现在的)是—— mnesia 根本就不是什么数据库,这只是一个善意的谎言(以它出现的时代来说,太激进,会把人都吓跑了)。实际上,它根本就是一个 Erlang 的 hibernate 。换句话说,这个东西就不应该被拿来当作“数据库”用,而是应该拿来当作“数据层”用。一字之差,谬以千里,熟悉 Java/SSH 编程的同学们相信都能明白我在说什么。实际上,我私下里在怀疑这是 mnesia 最初的设计目的之一,但为了某种原因而故意不去点破这一层。但愿在这个问题上我只是个可耻的阴谋论者。

未分类 jackyz 发表于 2008年06月22日 20:26

[荐]《对“A History of Erlang”的评论》

原文在这里。貌似“功夫网”并未“河蟹”——既然能访问,俺就不盗版了。

这篇文章是 Robert Zubek 对 Joe Armstrong 在 07 年某个会上 show 的 “A History of Erlang” PDF 的评论(更象是写了一个“注”)。基本上,相比著名的 “Joe Thesis 2003” (本站提供了中文翻译,感谢段先德同学)而言,这篇 PDF 中并没有太多的新内容,只能算是一个精编浓缩 remix 版而已。

但对 Joe Thesis 2003 这篇略嫌艰深的博士论文来说, Robert Zubek 的文章提供了很好的“补充视角”。也就是说,从 Joe Thesis 中我们能看到 Erlang 在“一系列问题”上做出了与众不同的选择。但如果没有一定的背景知识,我们或许没怎么觉得这“一系列问题”又有什么大不了的。而这一篇正好(部分地)补充了这些背景知识。

照例,对于这篇文章的干货,还是打捞一下。

But this paper really conveys the feel for what that means: huge collections of loosely coupled finite-state machines, all running in parallel, doing little bits of protocol validation here and there, but mostly staying dormant.

英文的描述,如果写得好了,会有一种准确精妙难以言表的感觉,通常很难原汁原味的译为相对应的中文。不过,这句太经典,我还是想翻来看看。

这篇文档所传达的要义(用 Erlang 构造系统的感觉)是:一大堆并行运行着的有限状态机,各处做一做协议验证,彼此松散耦合,通常大部分的有限状态机都处在休眠状态。

作者提到他对这篇 “A History of Erlang” 中“有感觉”的几点是:

  • First, there’s strong emphasis on easily tracking and manipulating the flow of control, rather than data.
  • Second, I enjoyed the explanation of one particular detail of Erlang: in the message-passing implementation, individual processes don’t handle messages immediately.
  • Third, Erlang is somewhat infamous for its distributed error handling mechanism.
  • 这只是起头,精妙在于剖析。任何一个设计决策都是有 trade off 的,对这些设计决策正反两面的分析,或许能够部分解释“为什么 Erlang 会这么怪异”,相当值得一读。

    顺便说一句,我“有感觉”的一点是 “Erlang 天生就是以消息驱动模型来架构的系统” 而 “消息驱动的编程模型” 如何应用于互联网编程环境,正是值得我们深思的问题。

    Erlang 学习 jackyz 发表于 2008年06月06日 9:34

    用 SSH 来连接 Erlang Shell

    Erlang 的 SSH 支持 “很好很强大” ——可以让 Erlang 在 22 (或其他指定的)端口启动 Erlang 自己的 sshd ,然后,当你通过 Putty 之类的 ssh 客户端连上去时,就能直接得到 Erlang Shell 。很酷吧,更酷的是,这个功能完备的 Erlang Shell 已经支持了 Public-Key Authorization 以及 “One Password Rule Them All” 的 “超级密码” Authorization 。尤其对于那些需要伺候集群中 N 多台 Erlang 服务器的 “ IT 农场工人” ,这会是一个极度 “系统管理员友好” 的功能。那么,具体来说,整个步骤又是怎么样的呢?

    下面是我们的前方记者从 “不明地带” 发回的 —— 现场 “流水帐” :D

    继续阅读 »

    未分类 jackyz 发表于 2008年05月27日 10:30

    [荐] “RPC is bad” 续篇 —— joe 老爷爷如是说

    继 Steve 大叔的 “RPC is bad” 开腔惊起娃声一片之后,Joe 老爷爷抓当前的大好形势又写了一篇“大字报”,“掀起了Erlang主义建设的新高潮”(第二声部唱:新高潮,新高潮)。不过,Joe 老爷爷的 Blog 建在 BlogSpot ,有“伟大的火墙”“护着”,我们可以免受这些“不良内容”的毒害,为方便大家学习,特将这篇文章盗版如下,供大家批判。(召唤翻译达人):

    未分类 jackyz 发表于 2008年05月24日 8:54

    [荐]RPC is bad?

    偶像 Steve Vinoski 在 maillist 的回帖中一不留神就泄漏了他为 ErlangeXchange 准备的 session ,我们可以先一睹为快。Steve 大拿是 CORBA 界的牛人,对 RPC 是 bad 很有发言权地。这篇文章也写得很漂亮,水分相当少,我就不干“损失味道”的事情了。

    为方便阅读,将 mail 内容盗版如下:

    继续阅读 »

    未分类 jackyz 发表于 2008年05月16日 8:19

    Facebook chat 跟踪报导 —— comet with mochiweb

    话说 facebook 推出了支持高并发的 web im 引起众“hacker”(与 linux hacker 中的 hacker 相同的那个词)的一片哗然,纷纷出手研究其秘密。互联网上迅速的出现了一批“拆解 facebook webim”的文章。这里就是其中相当有意思的一篇。其中的干货如下:

    1 作者放出 firebug 发现,http header 的 server 字段赫然写着 MochiWeb/1.0 的字样。

    2 作者开动脑筋,在 mochiweb 基础之上,写了一个“最简单”的 facebook webim 概念模型,mochi loop 的核心代码如下:

    ...
    'GET' ->
     
    case Path of
        
    "chat" ->
          
    % 1) subscribing
          
    Room ! {self(), subscribe},
          
    % 2) waiting
          
    receive
            
    Message ->
              
    % 3) everything went right
              
    Req:ok({"text/plain", Message})
          
    after 10000
            
    % 4) oOops, too long buddy.
            
    room ! {self(), unsubscribe},
            
    Req:not_found()
        
    end;
    ...

    简而言之就是:在 browser 和 mochiweb 之间保持 10 秒的长连接,这(10s的)期间收到的任何消息都会即时发送给 browser ,然后再由 browser 内的代码再次发起下一个连接。作者提供了完整例子代码的下载。PS.关于这一实现方式的更多说明也可以参考拙作“the google way”。

    当然这只是一个“概念模型”,距离“实用价值”仍有一段距离。比如:这个 web 层如何与 ejabberd 接起来,如何识别同一个用户,如何增加更多的“聊天逻辑”。

    有兴趣(有时间)深入研究的读者可以移步阅读原文。如果看不到原文,请留言,以便“进行盗版”。

    未分类 jackyz 发表于 2008年05月15日 9:54

    Facebook 的 Erlang 加持

    这篇消息的两个要点是:

    1. Facebook 总算推出了 developer’s blog,在大家都推出自己的“开发者博”之后。
    2. 这个“facebook 开发者博”透出来的第一条消息是——纯正 PHP/LAMP 血统的 Facebook 在高度 realtime 的 Chat 应用中,终于用了 Erlang 来提高性能( ejarbberd backend? 估计是 process-one 的那帮法国人最近一直都在搞的定制项目 ),我知道他迟早都会要用的。

    如果觉得“干货”不过瘾,时间充裕的朋友可以移步阅读更“ juicy ”的原文—— 《Real-World Erlang Applications - Scaling Facebook Chat to 70 Million Active Users Almost Overnight》。

    PS. 这篇 blog 亦可看作是《challenges of scaling up a realtime application》,所以,如果有人花时间将其 i8n 一下,那将会非常棒。

    update 20080516:有人说打不开,那就“被迫盗版”一下吧。[节约版面起见,请点“继续阅读”]

    继续阅读 »

    Erlang 学习 jackyz 发表于 2008年05月13日 9:25

    来点压力——tsung

    昨日四川发生7.8级大地震,灾情陆续传来,在此,先向死难的同胞们默哀。。。。

    最近用上了 Tsung ,传说中“压垮了N台服务器”的 download midi ringtones nickelback ringtones cell phone ringtones virgin mobile usa ringtones download nokia ringtones samsung polyphonic ringtones ericsson polyphonic ringtones sony free real tone ringtones free nextel ringtones ringtones composer free ringtones and wallpaper for cell phone download free ringtones virgin mobile 1600 nokia ringtones cell cingular free phone ringtones christian download free ringtones free real ringtones sprint free nokia mp3 ringtones cingular free phone ringtones sony ericsson ringtones download free ringtones t mobile Erlang 压力测试工具啊。在这里记一下流水帐。

    安装

    获取tsung 的源码

    wget http://www.process-one.net/downloads/tsung/1.2.2/tsung-1.2.2.tar.gz; tar -zxvf tsung-1.2.2.tar.gz

    svn co http://svn.process-one.net/tsung/trunk

    确保依赖关系
    tsung 依赖了这些东西 erlang(废话,从源码编译 erlang 写的程序,能不装么) gnuplot perl5(如果想看 report 中的图形,就要装这个),将其一一装上。

    apt-get install erlang erlang-src gnuplot perl5

    编译安装

    ./configure
    make
    sudo make install

    安装完成之后的 tsung 运行脚本在 /usr/bin/tsung ,在系统 path 之中,可以直接运行。

    设置

    从 /usr/share/doc/tsung/examples 中挑一两个例子拷贝到 ~/.tsung/tsung.xml 作为配置文件。我只需要 http 测试,所以:

    cp /usr/share/doc/tsung/examples/http_simple.xml ~/.tsung/tsung.xml

    tsung 采用了巧妙的 proxy 方式来“录制”测试脚本。具体来说,就是建立一个本机的 http proxy 默认使用 8090 端口,在配好 firefox 使用 localhost 8090 作为代理之后(推荐 foxyproxy 插件),所有“流经”这个 proxy 的 http 动作都会被记录下来,测试时可以“回放”这些步骤来产生请求。

    tsung rocorder
    tsung stop_recorder

    “录制”完了,会得到一个 ~/.tsung/tsung_recorderXXXXXXXXXX.xml 文件,这就是测试时回回放的脚本。

    将这个脚本加到 tsung.xml 之中

    gedit ~/.tsung/tsung.xml

    就像这样

    <!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd" [
     <!
    ENTITY mysession1 SYSTEM "/home/yourname/.tsung/tsung_recorderXXXXXXXXXX.xml">
    ]>
    ...
    <sessions>
     
    &mysession1;
    </sessions>

    对配置稍作调整

    <monitoring>
        
    <monitor host="localhost" type="erlang"></monitor>
     
    </monitoring>
     
    <!-- 需要配置到 localhost 无须密码的 ssh 登录(ssh via rsa_key),开启了这个配置可以,获得目标机器的 cpu 和 ram 消耗情况 -->
     
    <load>
      
    <arrivalphase phase="1" duration="1" unit="minute">
        
    <users interarrival="2" unit="second"></users>
      
    </arrivalphase>
     
    </load>
     
    <!-- 第1阶段1分钟(你可以自己多搞几个阶段),其中每2秒新建一个用户,每个用户都会完整执行 session 的测试脚本,最高并发约为 30 个,个人认为这个“逐渐加压”的方法比 ab xxxx 的“突然加压”要慢一些,但更科学一点 -->

    运行

    准备好了,加压运行。

    tsung start

    运行完,在 ~/.tsung/log 目录会生成一个以时间命名的目录,进入这个目录

    cd ~/.tsung/log/xxxxx
    /usr/lib/tsung/bin/tsung_stats.pl

    生成 html 的压力测试报告

    firefox report.html

    慢慢欣赏吧。

    除了 http 以外 tsung 还可以压很多东西,比如:jabber, postgreSQL 还可以写插件来给任何你想要测试的东西加压,配置文件也很“丰富多彩”,更多的内容情看文档。

    注,以上内容在 ubuntu 8 下整理,其他平台,请自行探索。

    未分类 jackyz 发表于 2008年05月10日 9:43

    运行Processing代码——在Javascript里

    mebeliProcessing是一门为视觉艺术家们设计的程序设计语言。尤其是对我们中国的程序员来说,恐怕是极度的冷门。怎么说呢,因为,这个语言“既不能挣钱,又不能出名”,不过就是“画画图”,“没啥技术含量”,简直具备“一无是处”的所有特质。

    早在 Turbo Pascal 的时代(199x年),我就曾因为”不慎”买了一本《分形艺术程序设计》,而掉到“用程序画图”的大窟窿里,不可自拔。确实是不慎,就因为这本书,在毕业之前耗费掉了我了大量“大脑CPU”以及“昂贵的机时”来调试和运行那些“除了好看之外,对于求职根本一无是处”的程序。当时可没想过,竟然有人会了这么“不靠谱的事情”而专门设计一个“视觉艺术程序设计语言”。后来才明白,除了写程序卖钱之外,还有很多其他的赚钱方法,只不过,我卖的是程序(工具),而人家卖的是程序的运行结果(用工具做出来的产品),这就叫做艺术(品),这也确实是艺术(商业模式)。是的,用程序来画图,将其画成一件艺术品——站在程序员(特指卖程序为生的人)的角度,这确实还是一件理解起来有点困难的事。

    第一次听说这个名词,是在首图的艺术阅览室,随手拿起来的一本香港艺术杂志(名字不记得了)用了很多页的彩图来展示这门语言所创造的艺术。当时的感觉是——相当精美,回忆起了那段“掉到窟窿里的时光”,不过和我已经没啥关系。

    再次听到 Processing 的名字,是从 Joho Resig 的 Blog 上看到的,这位大神的 JQuery 事关吃饭,乃是“教主宝训,时刻在心,建功克敌,无事不成”级的东西。所以,当我看到这位大神竟然花了 7 个月的时间用 5000 多行的代码将 Processing 语言请到了 JavaScript + Canvas 环境中,可以说是相当的惊讶(不好好的花精力提升吃饭用的 JQuery ,跑去搞什么不务正业的 Processing 嘛)。莫非,人吃饱了饭都会开始追求艺术么?

    anyway, 从纯技术的角度来说,Web确实是“艺术最广泛的平台”,最近还看到另外一个 JavaScript Information Visualization(一个动态的六度空间图,让人印象深刻),再加上这个 Processing in JavaScript。让人被 canvas 标准喷出的炽热气息灼伤,而 web 视觉艺术的春天也正在凶猛来袭。

    Javascript 的未来会很精彩。

    Next Page »