随笔:399 文章:391 评论:2726 引用:77

随笔分类 - Erlang

From Sharp to Erlang 
[Erlang 0129] Erlang 杂记 VI
摘要: 把之前阅读资料的时候记下的东西,整理了一下.Adding special-purpose processor support to the Erlang VMP23简单介绍了Erlang Compiler和Beam文件格式;The Erlang Compiler in short 章节提到了 Cor...阅读全文
posted @ 2014-10-28 20:28 坚强2002 阅读(3460) | 评论 (1) 编辑
[Erlang 0128] Term sharing in Erlang/OTP 下篇
摘要: 继续昨天的话题,昨天提到io:format对数据共享的间接影响,如果是下面两种情况恐怕更容易成为"坑", 呃,恰好我都遇到过; 如果是测试代码是下面这样,得到的结果会是怎样?猜!s2()-> L=[1,2,3,4,5,6], L2=[L,L,L,L],erlang:display( {{ert...阅读全文
posted @ 2014-10-24 08:45 坚强2002 阅读(1607) | 评论 (3) 编辑
[Erlang 0127] Term sharing in Erlang/OTP 上篇
摘要: 之前,在 [Erlang 0126] 我们读过的Erlang论文提到过下面这篇论文:On Preserving Term Sharing in the Erlang Virtual Machine地址:http://user.it.uu.se/~kostis/Papers/erlang12_shar...阅读全文
posted @ 2014-10-23 19:32 坚强2002 阅读(1696) | 评论 (0) 编辑
Elixir 1.0 Release
摘要: Erlang的强大,Ruby的语法,Elixr 1.0 bigger than bigger,要不要试一下?阅读全文
posted @ 2014-09-10 22:36 坚强2002 阅读(1568) | 评论 (0) 编辑
[Erlang 0126] 我们读过的Erlang论文
摘要: 我在Erlang Resources 豆瓣小站上发起了一个征集活动 [链接] ,"[征集] 我们读过的Erlang论文",希望大家来参加.发起这样一个活动的目的是因为Erlang相关的出版物很少,很多时候都是从学术论文中寻找答案,而发现合适的论文是第一步,这个活动就是为了解决这个问题. 在一个极小的知识点可能都会有一篇精彩的论文为你条分缕析,抽丝剥茧,甚至可以拼凑起来一个完整的Erlang知识系统,我们开始吧...阅读全文
posted @ 2014-09-05 12:29 坚强2002 阅读(2785) | 评论 (5) 编辑
[Erlang 0125] Know a little Erlang opcode
摘要: Erlang源代码编译为beam文件,代码要经过一系列的过程(见下面的简图),Core Erlang之前已经简单介绍过了Core Erlang,代码转换为Core Erlang,就容易拨开一些语法糖的真面目了.下一阶段就是将Core Erlang转换为opcode,使用c(m,'S')生成的是.S文件可以看到反编译的代码.编译器最终输出的是Virtual Beam Code 但这还不是最终VM执行的代码,在erts\emulator\beam\beam_load.c执行的过程中会完成指令优化,优化之后的代码可以通过erts_debug:df(m)生成.dis文件查看,换句话说,这个方法执行成功必须要要求模块已经加载.阅读全文
posted @ 2014-08-28 16:03 坚强2002 阅读(2422) | 评论 (2) 编辑
[Erlang 0124] Erlang Unicode 两三事 - 补遗
摘要: 最近看了Erlang User Conference 2013上patrik分享的BRING UNICODE TO ERLANG!视频,这个分享很好的梳理了Erlang Unicode相关的问题,基本上把 Using Unicode in Erlang 讲解了一遍.再次学习了一下,整理成文字,补充一些 [Erlang 0062] Erlang Unicode 两三事 遗漏掉的内容.阅读全文
posted @ 2014-08-01 16:50 坚强2002 阅读(4122) | 评论 (2) 编辑
[Erlang 0123] Erlang EPMD
摘要: epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相当多的内容讲epmd,epmd是什么呢? epmd 是Erlang Port Mapper Daemon的缩写,全称足够明确表达它的功能了(相比之下,OTP就是一个难以从字面理解的名字);epmd完成Erlang节点和IP,端口的映射关系,比如在我的测试机上,阅读全文
posted @ 2014-07-03 22:34 坚强2002 阅读(9061) | 评论 (2) 编辑
[Erlang 0122] Erlang Resources 2014年1月~6月资讯合集
摘要: 项目太忙,很多事情一直没有抽出时间做,最近稍微轻松点,调整一下再次开始,就从Erlang Resources小站的上半年盘点开始吧.阅读全文
posted @ 2014-07-02 22:09 坚强2002 阅读(1812) | 评论 (0) 编辑
[Erlang 0121] 当我们谈论Erlang Maps时,我们谈论什么 Part 3
摘要: Erlang/OTP 17.0发布了,不过Maps相关的设计还没有尘埃落定.阅读全文
posted @ 2014-04-10 10:50 坚强2002 阅读(1378) | 评论 (0) 编辑
[Erlang 0120] Know a little Core Erlang
摘要: Core Erlang 是Erlang的一种中间表现形式,Erlang在语法层面一直在演变,越发复杂,一些代码分析工具或者调试工具解读代码就不方便了.Core Erlang就是因此而生,它尽可能的保持语法简单,稳定以方便工具解析,同时具备代码可读性以方便手工修改代码.十段代码,不同角度,不同收获!阅读全文
posted @ 2014-04-05 00:30 坚强2002 阅读(2173) | 评论 (0) 编辑
[Erlang 0119] Erlang OTP 源码阅读指引
摘要: 上周Erlang讨论群里面提到lists的++实现,争论大多基于猜测,其实打开代码看一下就都明了.贴出代码截图后有同学问这代码是哪里找的? "代码去哪里找?",关于Erlang源码阅读的路线图江湖上只有一份残卷了.我觉得"代码在哪儿?"这类问题是信息不对称造成的,本身难度不大,就像<贫民窟的百万富翁>里面的情节:贾马尔知道市井生活中的零零碎碎却说不出国徽上的文字,我们就从电影中的这一幕开始本文的探索吧阅读全文
posted @ 2014-04-02 12:26 坚强2002 阅读(7980) | 评论 (2) 编辑
[Erlang 0118] Erlang 杂记 V
摘要: 我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下. 做笔记 一开始笔记软件做的不好的时候就发邮件给自己,然后不断的回顾更新笔记; 后来用OneNote,由于这玩意当时不是云同步的,硬盘坏掉的时候丢了一些数据,打击还是挺大,好多事情要从头开始 再后来用过一段时间Google Wave,还以和朋友分享讨论笔记,结果,你们知道关闭服务了,费力导出来 现在转战Evernote和思维导图Conceptdraw 记忆是靠不住的,会自然淘汰长时间不用的数据,一旦需要重新加载,如果从0开始那成本就太高了,而笔记和思维导图是自己思考方式的组织的,可以快速加载;阅读全文
posted @ 2014-03-06 22:57 坚强2002 阅读(3144) | 评论 (4) 编辑
[Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2
摘要: 继续昨天的话题,在Erlang Factory SF Bay Area 2013有一个议题:"Where are we on the Map?" [PDF ],这个Talk基本上就是选取了EEP43的要点,有兴趣的同学可以翻墙观看视频 Where are We on the Map? - Kenneth Lundin - YouTube 如果是腿脚不利索的,可以看墙内的.仔细阅读EEP43,其信息量巨大,包括Maps的设计演变来龙去脉,各种取舍,也是我们学习设计的极佳范例.下面我将按照自己的逻辑顺序重新解读EEP43,先从如何使用开始,直观上感受一下区别,然后再回答"何必有我"的问题.阅读全文
posted @ 2014-03-05 20:31 坚强2002 阅读(2660) | 评论 (7) 编辑
[Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1
摘要: Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风浪.这篇文章用了比较夸张的说法:"Records are dead - long live maps !",紧接着在国内国外社区这句话就传遍了.马上就有开发者忧心忡忡的在Stackoverflow上提问:Will Erlang R17 still have records? 套用一句文艺的话,当我们谈论Maps时,实际上是表达我们对record的不满,这些不满/痛点恰好就是我们寄希望于Maps能够提供给我们的.本文将尽可能的逐一列出这些点,并尝试分析原因,下篇文章将深入分析Maps的一些细节.阅读全文
posted @ 2014-03-03 23:25 坚强2002 阅读(2700) | 评论 (3) 编辑
致鸡鸣狗盗
摘要: 最近有朋友反映我写的Erlang文章被改头换面发布到某网站,改头换面的意思是换个标题,增加几个换行什么的,比如我的标题是Erlang杂记,他给改成"76个值得你注意的erlang编程习惯",我能猜到这是出于SEO的考虑;而你这样改完全曲解了我的意思,估计你连正文都没有好好看吧,所有标记Erlang杂记的文章都是我记录的零碎技巧和心得,和编程习惯什么的没有半毛钱关系;网络转载的基本底线是保留内容的原始链接,为什么?因为内容还有可能更新,补充或修订,而你这种行为更为恶劣,让回溯到源头难度都大大增加,请停止这种上不了台面的行为;阅读全文
posted @ 2014-02-28 01:05 坚强2002 阅读(1205) | 评论 (1) 编辑
[Erlang 0115] 2014值得期待的Erlang两本新书
摘要: 2014年Erlang方面有两本让我非常期待的书要出版.一本探究底层机制,一本分享实战经验,满怀期待.阅读全文
posted @ 2014-01-05 11:32 坚强2002 阅读(6346) | 评论 (3) 编辑
[Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集
摘要: 按照惯例, Erlang Resources 小站半年盘点一次,这里是2013年7月~12月资讯合集.喜欢Erlang,Elixir,Clojure,Lisp的同学强力关注啊阅读全文
posted @ 2014-01-01 17:54 坚强2002 阅读(2297) | 评论 (0) 编辑
Elixir - Hey, two great tastes that go great together!
摘要: I found this the other day. Erlang’s Actor Model gives it the distinction of being the only language that claims not to support object-orientation while actually providing full support for it. Languages that claim to support object-orientation but don’t, are far more common.阅读全文
posted @ 2013-12-31 11:41 坚强2002 阅读(1127) | 评论 (0) 编辑
[Erlang 0113] Elixir 编译流程梳理
摘要: 之前简单演示过如何从elixir ex代码生成并运行Erlang代码,下面仔细梳理一遍elixir文件的编译过程,书接上文,从elixir的代码切入,这一次我们主要关注编译流程,一些细节暂时不展开.阅读全文
posted @ 2013-12-30 11:38 坚强2002 阅读(2653) | 评论 (0) 编辑
[Erlang 0112] Elixir Protocols
摘要: C#中的Extension Methods,Clojure的Protocol,以及Elixir Protocols阅读全文
posted @ 2013-12-18 17:12 坚强2002 阅读(1747) | 评论 (0) 编辑
[Erlang 0111] Erlang Abstract Format , Part 2
摘要: 上回书,我们说到飞天玉虎蒋伯芳来到蜈蚣岭,不是,不是,上回咱们说到可以在Erlang Shell里面手工构造,加载并调用一个模块.在那个demo里面,我把多个Form单独生成出来,最后放在一起做compile:forms,是不是可以简单点?我们先看完整的module代码,erl_scan:string之后是什么样子的:阅读全文
posted @ 2013-12-10 17:22 坚强2002 阅读(1959) | 评论 (2) 编辑
[Erlang 0110] Erlang Abstract Format , Part 1
摘要: Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract Format实际上是用Erlang代码的AST,下面通过一些真切的实例代码了解一下它的一些细节.本文略长.阅读全文
posted @ 2013-12-10 10:54 坚强2002 阅读(1780) | 评论 (1) 编辑
[Erlang 0109] From Elixir to Erlang Code
摘要: Elixir代码最终编译成为erlang代码,这个过程是怎样的?本文通过一个小测试做下探索.阅读全文
posted @ 2013-11-25 16:53 坚强2002 阅读(2072) | 评论 (0) 编辑
[Erlang 0108] Elixir 入门
摘要: 如果你想用Erlang但是不喜欢它的语法,Elixir可能是一个新的机会.阅读全文
posted @ 2013-11-07 12:51 坚强2002 阅读(7309) | 评论 (1) 编辑
[Erlang 0107] Erlang实现文本截断
摘要: 文本截断很简单,但是要是文本中有中文呢? 前段时间有网友 @稻草人 问字符串截断的问题"各位大侠erlang截取字符串一般用哪个函数啊",有人支招用string:substr/3,紧接着他补充了一下"大侠们 一个字符串有汉字和字母组合我想截取 但是不管用什么方法每个汉字的长度都是3 字母是1 截取出来总是有乱码 还望高手们赐教",我们一步步看看这个问题.阅读全文
posted @ 2013-10-11 08:42 坚强2002 阅读(3952) | 评论 (3) 编辑
[Erlang 0106] Erlang实现Apple Push Notifications消息推送
摘要: 我们的IOS移动应用要实现消息推送,告诉用户有多少条消息未读,类似下图的效果(笑果),特把APNS和Erlang相关解决方案笔记于此备忘.阅读全文
posted @ 2013-10-09 13:18 坚强2002 阅读(4206) | 评论 (2) 编辑
[Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
摘要: 很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.阅读全文
posted @ 2013-07-24 18:14 坚强2002 阅读(3763) | 评论 (0) 编辑
[Erlang 0104] 当Erlang遇到Solr
摘要: Joe Armstrong的访谈中有一段关于"打开黑盒子"的阐述,给我留下很深的印象:Joe Armstrong在做XWindows开发时没有使用对应的类库,而是在了解XWindows底层实现后选择了直接和套接字通信,"把这20条消息映射到Erlang术语上,变个小魔术,然后可以向窗口直接发送消息,它们就开始执行动作了". [访谈全文] 回到今天的任务:Erlang使用Solr服务?当问题落实到数据通信协议的时候,就豁然开朗了,转换为我们熟悉的技术方案组合.阅读全文
posted @ 2013-07-23 17:07 坚强2002 阅读(2556) | 评论 (3) 编辑
[Erlang 0103] Erlang Resources 资讯小站
摘要: 好久没有写博客,是懒了吗?不是;前面两个月在紧张地推进一个项目,中间积累了一些RabbitMQ和Erlang的东西;本打算在项目结束之后赶紧总结一下,结果老婆怀孕之后生活节奏大乱:早起做饭,晚上回去做饭,洗刷碗筷,衣服,等忙完了也就精疲力尽了...阅读全文
posted @ 2013-07-01 21:20 坚强2002 阅读(1984) | 评论 (7) 编辑
[Erlang 0102] 愚人节消息 too_big_to_fail_process
摘要: Joe Armstrong 在愚人节介绍了too_big_to_fail flag,这个东西真是好多疑问啊,希望不是愚人节的一个玩笑.阅读全文
posted @ 2013-04-02 12:06 坚强2002 阅读(1486) | 评论 (0) 编辑
[Erlang 0101] Gproc:扩展进程注册机制
摘要: Erlang 进程字典(process dictionary)目前的限制是:names只能是atom,一个进程只能注册一个name,不能进行高效的搜索和遍历,进程信息的检索是通过遍历检查进程的元数据完成的. Ulf T. Wiger的开源项目 Gproc 就是解决上面问题的,难得的是这个项目的文档,范例,测试代码相当完整,还有专门的论文讲述整个项目的来龙去脉,设计取舍.阅读全文
posted @ 2013-03-25 21:14 坚强2002 阅读(3294) | 评论 (8) 编辑
[Erlang 0100] make_ref 与 Selective Receive
摘要: 春节前后出于对STM和Lisp宏的好奇一直在关注Clojure,新年过后对于Erlang开发者还是有不少好消息,有两本Erlang的新书出版:第一本是O'Reilly公司的小册子"Introducing Erlang";一本是著名的LYSE,这本书终于从有了正式出版的版本,在此之前有热心的网友编译成电子书,印刷版排版精美保持了原站图文并茂的风格.目前这两本电子书都很容易下载到电子版,请自行搜索.阅读全文
posted @ 2013-03-06 12:12 坚强2002 阅读(2397) | 评论 (0) 编辑
[Erlang 0099] Reduction 一点细节
摘要: 公平调度实际上有3部分: erlang函数调用,由于erlang的代码翻译成opcode,由虚拟机执行,所以一次完整的函数调用为一个reduction. 因为erlang的函数通常都是递归执行的,所以函数体一般很小。 bif的trap机制。简单的说就是bif会执行到大概几个reduction这样的时间片后放弃执行,把当前的执行情况记录下来,然后退出。等下次调度再执行的时候,会继续之前的位置往下。 IO的调度。 IO也是公平调度的,把IO的处理量换算成reduction,算在宿主进程的时间片里面。阅读全文
posted @ 2013-01-08 12:52 坚强2002 阅读(1707) | 评论 (0) 编辑
[Erlang 0098] net_kernel与节点互连,断开,监控
摘要: 之前记录过 net_kernel:monitor_nodes订阅node连接\断开消息,魔鬼在于细节(Devils are in the details),这个模块还是有一些细节要注意,特别是官方文档上语焉不详的问题.本文关注net_kernel在节点互连,断开,状态监控的一些功能细节.阅读全文
posted @ 2012-12-27 21:24 坚强2002 阅读(4823) | 评论 (0) 编辑
[Erlang 0097] TCP半开的几个小测试
摘要: TCP半开的几个测试,比较简单都在Erlang Shell中完成.立此存照,备忘.阅读全文
posted @ 2012-12-26 16:34 坚强2002 阅读(3107) | 评论 (0) 编辑
我的2012
摘要: 这是今年的第91篇博文,又到岁末年初,总结一下过去一年,赶在所谓"末日"之前发出去.这一年,仿佛又只是隔了几篇随笔.阅读全文
posted @ 2012-12-20 11:34 坚强2002 阅读(2039) | 评论 (6) 编辑
[Erlang 0096] RabbitMQ Boot Step
摘要: RabbitMQ启动过程中复杂的依赖关系,以及灵活扩展的要求,不可能随机顺序启动或者硬编码启动顺序. 之前提到RabbitMQ会把启动过程分成若干阶段,按照依赖关系进行启动.rabbit_boot_step里面的requires 和 enables配置节是描述这种依赖关系的关键.require约定了该项目启动所依赖的前置条件,enables 表示当前项目启动之后可以启动什么;如果有多个项目enable一个项目(比如:external_infrastructure),要等这些项目都启动了external_infrastructure 才可以启动.阅读全文
posted @ 2012-12-14 18:00 坚强2002 阅读(2314) | 评论 (0) 编辑
[Erlang 0095] 善用 Erlang module_info
摘要: 在.net里面我们可以使用Attribute和反射在运行时完成对程序集元数据的解析; 在Erlang中,也可以做类似的事情,我们可以通过module_info获取模块的元数据;RabbitMQ的启动过程就是一个绝佳的范例.阅读全文
posted @ 2012-12-12 20:33 坚强2002 阅读(4221) | 评论 (1) 编辑
[Erlang 0094] Erlang 杂记 VI
摘要: 最近一直忙Storm相关的东西,今天抽时间整理一下Erlang笔记,这一次的内容主要是一些开源项目:Mock ,worker pool......阅读全文
posted @ 2012-12-11 21:31 坚强2002 阅读(3296) | 评论 (2) 编辑
[Erlang 0093] RabbitMQ 3.0的一些变化
摘要: 还记得之前是怎样创建镜像队列的么?x-ha-policy [Link]在新版本,使用这个参数不会报错但是已经镜像不会再生效.替换方案是使用policies.这样修改的动因是:无法在运行时状态判断哪些队列是镜像队列,新方案是把镜像队列也做到配置里面.同样支持运行时管理. 还记得如何创建RabbitMQ集群么?这些在RabbitMQ3.0版本都有变化.阅读全文
posted @ 2012-12-04 14:44 坚强2002 阅读(2920) | 评论 (1) 编辑
[Erlang 0092] Erlang 命令行监控工具
摘要: 程序部署在了生产环境,要像魔术师手中的飞刀,出手但是没有脱手,我们需要一些工具来了解程序在运行时的状况.之前介绍过一个Erlang的Web监控工具,如果在字符终端界面呢?本文介绍几个阅读全文
posted @ 2012-11-22 20:39 坚强2002 阅读(10481) | 评论 (1) 编辑
[Erlang 0091] 另辟蹊径构建RabbitMQ集群
摘要: 除了内置的RabbitMQ集群方案,还可以通过其它一些软件或者插件来构建RabbitMQ集群.这些方案可以解决一些让我们头痛不已的问题,当然它们也不是银弹,也有使用场景的限制.事实上,对于各种集群方案我们都不能假设太多,每当连入一个节点,我们都要把这个节点当成一个全新的节点来处理,首先要完成各种声明工作.阅读全文
posted @ 2012-11-19 12:55 坚强2002 阅读(3586) | 评论 (1) 编辑
[Erlang 0090] RabbitMQ 集群: Mirrored Queue
摘要: 之前提到过在集群环境中,队列只有元数据会在集群的所有节点同步,但是队列中的数据只会存在于一个节点;这不免让人失望:数据没有冗余容易丢数据甚至在durable的情况下,如果所在的节点当掉就要等待节点恢复.那么是不是有消息冗余的解决方案呢?是的,RabbitMQ自2.6.0开始就开始支持镜像队列(Mirrored Queue).消息会在节点之间复制,和其它的主从设计一样,它也有master和slave的概念;一旦某个节点当掉,会在其余的节点中选举一个slave作为master.要注意Mirrored Queue 也不是银弹,后面会提到它的局限.阅读全文
posted @ 2012-11-15 20:01 坚强2002 阅读(4205) | 评论 (1) 编辑
[Erlang 0089] RabbitMQ Exchange
摘要: 之前提到了RabbitMQ是怎样维护Queue的data和metadata的.我们知道Queue在RabbitMQ对应Erlang的进程,那么Exchane是不是也是独立的Erlang进程呢?它的信息是如何维护的呢?阅读全文
posted @ 2012-11-15 09:05 坚强2002 阅读(2757) | 评论 (0) 编辑
[Erlang 0088] RabbitMQ 集群 Disc Node 一点实现细节
摘要: 刚开始使用rabbitmqctl 创建集群的时候会有一个问题,怎么控制节点是disk node还是ram node?翻看了rabbitmq2.8.7的代码看了一下才知道原委,记录一下阅读全文
posted @ 2012-11-13 12:41 坚强2002 阅读(4605) | 评论 (0) 编辑
[Erlang 0087] RabbitMQ 集群: RAM or Disk node
摘要: 上一篇文章提到,节点按照metadata的存储方式在集群中可以是RAM node 或者 disc node.这两种node有什么差别?在实际操作的时候又如何选择呢?本文回答这一问题.阅读全文
posted @ 2012-11-12 21:19 坚强2002 阅读(4898) | 评论 (2) 编辑
[Erlang 0086] RabbitMQ 集群: 从零开始
摘要: RabbitMQ集群搭建是比较简单的,中间可能遇到的障碍往往是因为不熟悉Erlang造成的.本文从零开始搭建RabbitMQ集群,细数中间若干陷阱,我们开始(本文略长)...之前文章介绍了RabbitMQ的metadata, 元数据可以持久化在RAM或Disc.从这个角度可以把RabbitMQ集群中的节点分成两种:RAM Node 和 Disk Node. RAM Node只会将元数据存放在RAM,Disc node 会将元数据持久化到磁盘.单节点系统就没有什么选择了,只允许disk node,否则由于没有数据冗余一旦重启就会丢掉所有的配置信息.但在节点环境中可以选择哪些节点是RAM node.阅读全文
posted @ 2012-11-12 17:29 坚强2002 阅读(10254) | 评论 (2) 编辑
[Erlang 0085] RabbitMQ 集群: data and metadata
摘要: 我们希望 RabbitMQ的集群能够解决单点故障,一旦节点异常自动重连到正常的节点;希望RabbitMQ 集群可以完成负载均衡,可以保证消息不丢失,希望可以快速增加节点到集群,单个节点当掉不会给集群带来灾难影响..... 哦,停下来,我们似乎把构建健壮地可扩展系统的所有梦想都寄托在RabbitMQ之上了.事实又是怎样呢?我们不能臆测软件对一个功能的实现,最好的办法就是用一下;我们近距离看一下.阅读全文
posted @ 2012-11-11 22:29 坚强2002 阅读(2619) | 评论 (1) 编辑
[Erlang 0084] RabbitMQ: fire-and-forget and RPC
摘要: 在项目中引入RabbitMQ通常会考虑它会带来的好处:解耦应用程序,实现不同编程语言之间的互通,解除对特定通信协议的依赖,解除应用程序在时序上执行的依赖(异步).落实到代码层面就是两种常用应用模式:"发后即忘"(fire-and-forget)和RPC.阅读全文
posted @ 2012-11-10 19:47 坚强2002 阅读(2821) | 评论 (0) 编辑
[Erlang 0083] All about Erlang Shell
摘要: Erlang Shell是一个强大的工具,几乎只要我的电脑开着,就会有一个Erlang Shell开着,随时验证想法.就是因为是常用武器,也会有一些常见问题,今天做下回顾,顺便解决两个新问题.算是Erlang shell常见问题的不完全合集了吧.阅读全文
posted @ 2012-11-01 21:34 坚强2002 阅读(3261) | 评论 (6) 编辑
[Erlang 0082] Erlang Web Servers & Frameworks
摘要: Erlang也可以开发Web应用程序?? 是的! 除了Asp.net MVC,RoR,Django,Tornado之外,其实还有很多选择,看看Erlang世界中有哪些解决方案吧阅读全文
posted @ 2012-10-27 22:52 坚强2002 阅读(5278) | 评论 (12) 编辑
[Erlang 0081] RabbitMQ Topic Exchanges Routing Rules
摘要: RabbitMQ Topic Exchange 按照规则进行消息路由,注意这里使用的Topic表达方式并不是正则表达式.在入门教程[点击链接]里面,简单描述了一下如何编写规则: * (star) can substitute for exactly one word. # (hash) can substitute for zero or more words.阅读全文
posted @ 2012-10-24 21:11 坚强2002 阅读(1362) | 评论 (1) 编辑
[Erlang 0080] RabbitMQ :VHost,Exchanges, Queues,Bindings and Channels
摘要: 和RabbitMQ这个项目的缘分好奇怪,很长一段时间内是只关注源代码,真的是Erlang开源项目中的典范;现在要在项目中应用RabbitMQ,从新的视角切入,全新的感觉.仿佛旧情人换了新衣,虽是熟稔却有不曾领略的风情. RabbitMQ提供了一整套机制来处理消息的发送,接收,容错,管理,上一篇文章中我提到了一篇Rabbits and warrens的文章,是一篇非常棒的入门文章,但是里面忽略了不少细节,我沿着RabbitMQ in Action重新梳理了一遍,笔记于此,备忘.(本文略长,慎入)阅读全文
posted @ 2012-10-20 23:44 坚强2002 阅读(6979) | 评论 (1) 编辑
[Erlang 0079] RabbitMQ 初探
摘要: 最近在项目中实践RabbitMQ,比较幸运现在除了官方网站,还有一本非常棒的书可以读:RabbitMQ in Action;这本书目前还没有中文版或者影印版,但是从网上很容易找到PDF版本和epub mobi的版本.RabbitMQ上有关于这本书的介绍文章.从本文开始我会陆续把学习实践过程中的收获记录分享出来.阅读全文
posted @ 2012-10-17 22:22 坚强2002 阅读(6503) | 评论 (6) 编辑
[Erlang 0078] Erlang HiPE 二三事
摘要: HiPE(High Performance Erlang) 霸爷有一个一语中的的描述"erlang的hipe相当于jit, 根据语言评测有hipe支持在纯erlang的运算上会快2-3倍,这个性能的提升对于计算密集型的应用还是比较可观的。"阅读全文
posted @ 2012-10-09 21:44 坚强2002 阅读(5706) | 评论 (4) 编辑
[Erlang 0077] Erlang 杂记 V
摘要: 最近一直在读书,学习几个Erlang开源项目的源码,深入其中乐趣无穷,只是偶尔会更新以前文章的内容,9月马上过去,按照惯例先把Evernote里面一些比较零散的东西整理出来.阅读全文
posted @ 2012-09-25 20:05 坚强2002 阅读(1874) | 评论 (4) 编辑
[Erlang 0076] Erlang Shell一个怪问题
摘要: 最近一直在忙,偶尔有点时间在读书,补充一下能量;最近在学习 程序设计语言-实践之路 非常感慨,之前误打误撞的一点所得原来有一个更系统,完整的知识体系;于是沉下心来,慢慢吸收.像北上广这样的城市快速的代谢着我们的精力和知识,不容懈怠,不过倒也不必急躁,如果心浮气躁,效果必然大打折扣;抽时间整理一下最近的笔记,先从一个怪异的问题开始吧!阅读全文
posted @ 2012-09-25 15:47 坚强2002 阅读(1150) | 评论 (2) 编辑
[Erlang 0075] Bad value on output port 'tcp_inet'
摘要: 小超同学遇到一个问题:gen_tcp:send方法报错,Bad value on output port 'tcp_inet';按照字面意思是发往port的数据值是bad value;打开erl5.9\lib\kernel-2.15\src\gen_tcp.erl看一下gen_tcp的源码,从函数接口说明可以看出数据要求是iodata,估计出现'bad value'很有可能数据不是iodata,做个实验看看阅读全文
posted @ 2012-08-23 17:23 坚强2002 阅读(2882) | 评论 (0) 编辑
[Erlang 0074] Erlang 杂记 IV
摘要: 休假回来,调整一下状态,先把Evernote里面一些比较零散的东西整理出来;过去一个月对于Erlang开发者还是有些惊喜的,比如《Erlang/OTP并发编程实战》终于出版了;比如Building Web Applications with Erlang也可以看到英文版了.下面第一条消息就是关于Erlang的另外一本好书:《Learn You Some Erlang》阅读全文
posted @ 2012-08-22 22:57 坚强2002 阅读(5774) | 评论 (10) 编辑
[Erlang 0073] Erlang Event Tracer 图形化展示
摘要: Event Tracer (ET) 是Erlang类库里面比较有趣的一个东西,可以使用它进行事件数据收集并进行图形化展示.它可以收集事件数据并进行图形化展示.我觉得在初学阶段用这种方式获得更为直观的印象.官方文档地址:http://www.erlang.org/doc/apps/et/et_intro.html阅读全文
posted @ 2012-08-01 22:26 坚强2002 阅读(1324) | 评论 (0) 编辑
[Erlang 0072] Erlang XML处理解决方案
摘要: XML以及相关的XSLT,XPath,XSD工具在数据层面为我们提供了极大的灵活性和便利.我们游戏协议的代码自动生成就是首先使用XSD工具设计了协议的Schema,然后使用.net的xsd工具直接生成实体类,然后就直接在工具中操作对象就可以了,协议的XML文件也可以通过事先的Schema检查来校验数据规范性;Erlang类库提供了对于XML的支持,可能你在STDLIB中并没有找到,这是因为这部分被独立在:http://www.erlang.org/doc/apps/xmerl/index.html阅读全文
posted @ 2012-07-20 07:28 坚强2002 阅读(6071) | 评论 (3) 编辑
[Erlang 0071] Erlang STDLIB 中文注释版
摘要: 学习Erlang第一个痛是IDE支持,第二个痛就是中文资料太少;初学Erlang受惠于余锋,立涛等人贡献的中文资料,回报Erlang中文社区,这里是Erlang STDLIB的中文注释版;阅读全文
posted @ 2012-07-10 17:01 坚强2002 阅读(3183) | 评论 (3) 编辑
[Erlang 0070] Erlang Queue
摘要: Queue 是Erlang的队列,它的内部实现充分考虑到了效率,值得学习.估计"如何用链表高效实现Queue"这个也会在面试题目中频繁出现吧阅读全文
posted @ 2012-07-10 11:08 坚强2002 阅读(4246) | 评论 (4) 编辑
[Erlang 0069] Erlang ordsets
摘要: ordsets是lists实现的有序集合.由于数据元素的变动都会触发重新排序,所以ordsets效率不高,只适用于数据量比较小的场景.ordsets中包含了常见的集合操作:求交集,并集,是否为子集,是否存在交集阅读全文
posted @ 2012-07-06 23:06 坚强2002 阅读(2656) | 评论 (1) 编辑
[Erlang 0068] Erlang dict
摘要: dict是动态哈希表实现的字典.在接口上和orddict保持一致,在实现上和array动态扩展的思路类似.dict使用的是动态哈希技术实现,理论依据是论文: "The Design and Implementation of Dynamic Hashing for Sets and Tables in Icon" .阅读全文
posted @ 2012-06-24 22:30 坚强2002 阅读(5710) | 评论 (1) 编辑
[Erlang 0067] Erlang gb_trees
摘要: gb_trees (General Balanced Trees) 通用二叉查找树,通常被用作有序字典.阅读全文
posted @ 2012-06-23 00:37 坚强2002 阅读(4039) | 评论 (1) 编辑
[Erlang 0066] Erlang orddict
摘要: orddict 是用List实现的有序Dictionary. orddict按照Key进行排序,Key值不重复.每一次增加新数据项都会进行重新排序.由于也是List和tuple实现,所以和proplists一样orddict也不适合大数据量的情况.注意orddict进行Key比较使用的是相等(==).阅读全文
posted @ 2012-06-17 21:50 坚强2002 阅读(1711) | 评论 (0) 编辑
[Erlang 0065] Erlang proplists
摘要: Erlang proplists 模块适用数据量较少的场景,处理配置文件和函数选项时常用.阅读全文
posted @ 2012-06-15 12:46 坚强2002 阅读(5627) | 评论 (2) 编辑
[Erlang 0064] Erlang Array
摘要: 从开始学习编程的时候Array就是基础数据结构,也是被使用最频繁的,但是在Erlang中一等公民是List和tuple,在项目中到处都是List的各种处理,但是Array却少见踪迹.好奇心驱使,最近了翻看了一下Array的代码实现.阅读全文
posted @ 2012-06-14 09:56 坚强2002 阅读(5147) | 评论 (1) 编辑
[Erlang 0063] Joe Armstrong 《A Few Improvements to Erlang》EUC 2012
摘要: EUC(Erlang User Conference)2012上Joe Armstrong的演讲主题是: 《A Few Improvements to Erlang》,很惊喜!!!因为Joe Armstrong提到的问题,我一直保持关注,而且他提到的前面两种方法我都实践过, : )阅读全文
posted @ 2012-06-06 22:54 坚强2002 阅读(1575) | 评论 (1) 编辑
[Erlang 0062] Erlang Unicode 两三事
摘要: 不少人和我一样在Erlang实践过程中都会遇到中文的问题,其中有中文显示的问题有正则表达式匹配的问题等等;今天请教立涛之后梳理了一下,整理于此.阅读全文
posted @ 2012-05-31 22:55 坚强2002 阅读(13866) | 评论 (12) 编辑
[Erlang 0061] Erlang Code Snippet Ⅱ
摘要: 整理了最近一段时间记录的Erlang代码片段,还有大量简短的代码都已经整理在官方文档的PDF中.从开始学习Erlang,写的测试代码都会整理到PDF中,从这个习惯中得益匪浅.阅读全文
posted @ 2012-05-22 22:05 坚强2002 阅读(3131) | 评论 (1) 编辑
[Erlang 0060] Joe Armstrong 论文《面向软件错误构建可靠的分布式系统》笔记
摘要: 周末读了两篇论文"On Designing and Deploying Internet-Scale Services"和Joe Armstrong的论文"面对软件错误构建可靠的分布式系统",这两篇论文实战内容相当多,整理笔记于此,备忘.阅读全文
posted @ 2012-05-20 15:14 坚强2002 阅读(2397) | 评论 (2) 编辑
[Erlang 0059] Erlang日期与时间处理
摘要: 软件开发有两个概念是和地区区域相关的:字符编码和时间;编码和时间的规范演变过程中有文化的冲突有历史的遗留,是软件开发中充满人文气息的一角;关于字符编码我之前整理过一篇文章,这部分知识很有意思,特别是格列佛游记所引出的大端小端概念,妙趣横生;平时笔记中也零零散散记录了一些和时间处理相关的内容,今天按图索骥把相关的资料整理汇集于此.阅读全文
posted @ 2012-05-17 22:49 坚强2002 阅读(13640) | 评论 (4) 编辑
[Erlang 0058] Erlang Function调用效率
摘要: Erlang方法调用有m:f(a),M:F(a),fun,f(),apply/3几种方法,调用效率如何呢?《Erlang/OTP in Action》和官方文档中都有相关的总结一起看下.阅读全文
posted @ 2012-05-06 08:51 坚强2002 阅读(3838) | 评论 (1) 编辑
[Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer
摘要: Erlang Crash Dump Viewer真的是排错的天兵神器,还记得我们之前曾经讨论过[Erlang 0013]抓取Erlang进程运行时信息 [Erlang 0012]Erlang Process input queue ,下面是我梳理的"How to interpret the Erlang crash dumps"的文档;阅读全文
posted @ 2012-04-28 18:02 坚强2002 阅读(6211) | 评论 (0) 编辑
[Erlang 0056] 用fun在Erlang Shell中编写尾递归 Ⅱ
摘要: 之前研究了一个问题"[Erlang 0050]用fun在Erlang Shell中编写尾递归",一直对这个问题保持着关注;最近在搜索引擎里找到同一个问题,题目足够清晰calling fun() from fun() 它提供了另外一种解决解决方案:Y-combinator!阅读全文
posted @ 2012-04-28 12:08 坚强2002 阅读(2436) | 评论 (3) 编辑
[Erlang 0055] Erlang Shared Data using mochiglobal
摘要: Erlang 进程之间的消息发送都是通过数据拷贝实现的,只有一个例外就是同一个Erlang节点内的 refc binaries.关于Erlang二进制相关的内容可以参看[Erlang 0024]Erlang二进制数据处理 和 [Erlang 0032] Erlang Binary的内部实现 .消息向另外一个Erlang节点发送,首先会编码成Erlang外部数据格式(Erlang External Format)然后通过TCP/IP Socket 发送.接收到消息的节点进行消息解码然后派发到具体的进程.Erlang中就没有全局变量,像这位老兄遇到的问题,我们怎么办? Erlang中想要共享数据怎么办?阅读全文
posted @ 2012-04-19 18:19 坚强2002 阅读(3079) | 评论 (3) 编辑
[Erlang 0054] Erlang Web 监控工具
摘要: Erlang已经提供了一系列工具查看运行时状态查看的工具,有没有web的监控工具可用呢?下面介绍一个很棒的工具:BigWig阅读全文
posted @ 2012-04-17 11:06 坚强2002 阅读(4157) | 评论 (15) 编辑
[Erlang 0053] fun & Code replacement
摘要: 查看了fun的内部表达方式,并做了代码热更新的小demo.阅读全文
posted @ 2012-04-05 17:58 坚强2002 阅读(1881) | 评论 (0) 编辑
[Erlang 0052] Erlang otp_src_R15B01 Released
摘要: This is R15B01, the first maintenance release for the R15B major release.阅读全文
posted @ 2012-04-04 21:55 坚强2002 阅读(1631) | 评论 (3) 编辑
[Erlang 0051] Using ETS in Erlang Shell
摘要: 在Erlang Shell中调试的时候经常会遇到的一个问题就是在Shell中遇到异常会导致ETS表丢失,需要反复去创建ETS表,调试比较麻烦.这是由于Erlang Shell在遇到异常之后会重建,ETS表依赖于创建它的进程,如果创建它的进程崩溃了ETS表也就销毁了(不是绝对的,后面可以看到);阅读全文
posted @ 2012-04-01 16:11 坚强2002 阅读(2875) | 评论 (3) 编辑
[Erlang 0050]用fun在Erlang Shell中编写尾递归
摘要: 平时在Erlang Shell中写demo的时候,经常会用到fun , List Comprehensions 快速构造测试条件,能不创建代码文件就不创建.那么在Shell中怎么构造一个尾递归程序呢?阅读全文
posted @ 2012-03-24 22:08 坚强2002 阅读(2162) | 评论 (2) 编辑
[Erlang 0049] 哈哈,一起来打印三角形
摘要: 刚刚看到微博上有朋友说"哎~连个for循环都没有的erlang我真想不出该怎么去打印星号三角形了。。。",哈哈,一起来Happy一下吧,一起来打印三角形!阅读全文
posted @ 2012-03-22 23:00 坚强2002 阅读(1584) | 评论 (0) 编辑
[Erlang 0048] Erlang Guard
摘要: 梳理了一下有关Erlang Guard相关的知识,纠正了Learn you some erlang 作者的一个理解上的小偏差.阅读全文
posted @ 2012-03-22 00:08 坚强2002 阅读(2287) | 评论 (1) 编辑
[Erlang 0047] Erlang 进制转换
摘要: 如果人类像卡通人物那样,每只手上只有 4个手指会怎样呢?我们可能永远都不会想到要发明一种以10为基础的数字系统的问题, 取而代之的是我们可能会认为数字系统基于 8是正常、自然、合理、必然的,是毫无疑问的,是非常合适的。这时,就不能称之为十进制了,得将它称作为以8为基础的数字系统或八进制。 ... ... 龙虾根本没有手指,但它两只前爪的末端都有螯。适合于龙虾的数字系统是四进制数字系统或称为基于4的数字系统.阅读全文
posted @ 2012-03-20 21:30 坚强2002 阅读(10503) | 评论 (1) 编辑
[Erlang 0046] Erlang Timer
摘要: Some notes on Erlang timer.阅读全文
posted @ 2012-03-16 15:17 坚强2002 阅读(5421) | 评论 (0) 编辑
[Erlang 0045] Erlang 杂记 Ⅲ
摘要: 学习Erlang有点滴收获就会记录到Evernote,今天又整理出来了一部分,分享一下.阅读全文
posted @ 2012-03-11 13:11 坚强2002 阅读(4004) | 评论 (2) 编辑
[Erlang 0044] Erlang Shell History
摘要: 平时调试代码最比较郁闷的一个问题就是Erlang Shell一旦关闭刚刚输入过的命令历史就丢失了,如果能像维护一个输入命令的历史就方便了,rlwrap项目就可以.阅读全文
posted @ 2012-03-06 14:22 坚强2002 阅读(1099) | 评论 (2) 编辑
[Erlang 0043] Erlang Code Snippet
摘要: 在使用Erlang开发过程中我们会积累一些常用的util方法,同时会把一些方便编译调试的方法放在Erlang的user_default模块.今天翻阅Evernote发现两段非常实用的代码片段,由于google codesearch服务已经关闭,源头不可追溯,好东西不可独享,和大家分享. 本文会持续更新补充内容.阅读全文
posted @ 2012-03-04 23:24 坚强2002 阅读(3226) | 评论 (2) 编辑
[Erlang 0042] Erlang 动态执行
摘要: 之前遇到过把字符串解析成为Erlang数据项的问题, 现在我们继续上文的话题,看看如何动态执行Erlang表达式.阅读全文
posted @ 2012-02-29 23:31 坚强2002 阅读(5175) | 评论 (2) 编辑
[Erlang 0041] 详解io:format
摘要: 最近遇到几个问题,都是和Erlang Shell输出有关,问题解决了但是追问还要继续下去,后面几篇文章都将围绕这一话题展开;那我们就从io:format("hello world!")开始说起吧.阅读全文
posted @ 2012-02-26 21:29 坚强2002 阅读(8858) | 评论 (4) 编辑
[Erlang 0040] Hidden Features of Erlang
摘要: Hidden Features of C#这个帖子大家不陌生吧,有人也在stackoverflow上提出了类似的问题:Hidden Features of Erlang,不过运气不佳的是,这个帖子并没有火爆起来而且现在已经关帖了;已经回复的内容其中大部分内容我在之前的博文里面已经覆盖了,下面逐楼梳理一遍,大家查缺补漏吧;阅读全文
posted @ 2012-02-17 16:23 坚强2002 阅读(2395) | 评论 (0) 编辑
[Erlang 0039] Erlang Inheritance
摘要: 和Parameterized Module一样的态度:把extend当作Erlang语言特性,当作代码复用的一种手段,不扯OOP,可能更好理解: ) 本文回答Erlang Inheritance 怎么用?如果是Parameterized Module呢? 什么时候使用?阅读全文
posted @ 2012-02-17 13:15 坚强2002 阅读(2396) | 评论 (1) 编辑
[Erlang 0038] Node.js & Erlang
摘要: 没有应用场景上下文做编程语言的比较就是一场关公战秦琼的乱斗而已,而语言的比较一次又一次的比较,并非开发者无聊,而是这的确关乎开发者时间精力的投入和未来可能的回报.现在估计问的最多的就是做Android开发还是iOS开发,仅次于它的就是选Node.js还是Erlang?众说纷纭,自己看吧,甚至Joe Armstrong,Felix Geisendörfer,等牛人也也加入了讨论!阅读全文
posted @ 2012-02-16 22:01 坚强2002 阅读(5016) | 评论 (2) 编辑
[Erlang 0037] Erlang Parameterized Module
摘要: 把Parameterized Module作为一个Erlang的语法特性而不扯到OOP上去,可能更好理解: ) 本文回答Erlang Parameterized Module是什么?有什么用?怎么实现的?我们能不能用?什么时候使用?阅读全文
posted @ 2012-02-16 16:31 坚强2002 阅读(3205) | 评论 (4) 编辑
[Erlang 0036] "HOW TO"不创建崩溃报告主动销毁gen_server进程
摘要: 创建一个gen_server的时候会在init方法中检查依赖的外部服务是否可用;如果不可用的话他就直接返回{stop,Reason},gen_server进程创建失败;这个目标他很容易就达到了,但是进程启动失败之后却创建了Crash Report,这种异常情况是可以预料的并不需要创建崩溃报告Crash Report;为什么会产生崩溃报告Crash Report?如何消除呢?阅读全文
posted @ 2012-02-16 11:32 坚强2002 阅读(2111) | 评论 (1) 编辑
[Erlang 0035] Erlang SMP
摘要: Erlang SMP使用操作系统线程实现多个调度器,利用了多核多CPU的优势并把实现细节对开发者隐藏起来, 可以不修改代码甚至不用重新编译就可以使用;使用SMP可以有非常灵活的启动选择和运行时调整的方法入口;阅读全文
posted @ 2012-02-01 12:36 坚强2002 阅读(4111) | 评论 (1) 编辑
[Erlang 0034] Erlang iolist
摘要: 既然Erlang中有List,那iolist又是为了解决什么问题而设计的呢?阅读全文
posted @ 2012-01-31 17:58 坚强2002 阅读(5890) | 评论 (2) 编辑
[Erlang 0033] 接入Erlang控制台的几种方法
摘要: Erlang服务部署在生产环境也需要一些方式进入到Erlang控制台来做一些工作,"就像魔术师的飞刀,出手但并没有脱手".阅读全文
posted @ 2012-01-18 15:03 坚强2002 阅读(13934) | 评论 (5) 编辑
[Erlang 0032] Erlang Binary的内部实现
摘要: The binary object can be referenced by any number of ProcBins from any number of processes; the object contains a reference counter to keep track of the number of references, so that it can be removed when the last reference disappears.阅读全文
posted @ 2012-01-12 00:13 坚强2002 阅读(2869) | 评论 (0) 编辑
[Erlang 0031] Erlang Shell中的输出完整数据
摘要: 标准的解决方案是使用shell中的rp方法格式化输出结果 比如 rp(os:getenv()).阅读全文
posted @ 2012-01-10 22:28 坚强2002 阅读(3080) | 评论 (0) 编辑
[Erlang 0030] 理解Erlang/OTP Supervisor
摘要: Supervisor的基本思想就是通过建立层级结构实现错误隔离和管理,具体方法是通过重启的方式保持子进程一直活着.阅读全文
posted @ 2012-01-10 14:17 坚强2002 阅读(12666) | 评论 (0) 编辑
[Erlang 0029] Erlang Inline编译
摘要: Erlang的编译器可以将Erlang模块中的函数进行内联编译,内联(inlining)的含义是把一个方法的调用替换成函数体并把参数替换成实际值.阅读全文
posted @ 2012-01-09 13:40 坚强2002 阅读(3209) | 评论 (1) 编辑
[Erlang 0028] Erlang atom
摘要: Erlang中atom数据类型能够做的唯一的运算就是比较,它不参与垃圾回收,因而在搞崩Erlang的各种方法中无节制使用原子名列前茅.阅读全文
posted @ 2012-01-04 15:57 坚强2002 阅读(5777) | 评论 (2) 编辑
[Erlang 0027] Using Record in Erlang Shell
摘要: 《[Erlang 0006] Erlang中的record与宏》一文中我们提到过Record是一个编译时的功能,在Erlang VM中并没有专门的数据类型.如何在Erlang Shell中使用Record呢?本文给出了五种方法.阅读全文
posted @ 2011-12-31 13:34 坚强2002 阅读(5776) | 评论 (3) 编辑
[Erlang 0026] 目前最优的Erlang IDE
摘要: 作为少数几个还在持续改进的Erlang IDE插件,erlide现在的版本已经堪称是目前最好用的Erlang IDE.阅读全文
posted @ 2011-12-28 17:19 坚强2002 阅读(13899) | 评论 (7) 编辑
[Erlang 0025]理解Erlang/OTP - Application
摘要: log4erl是Erlang的日志项目,我们可以通过阅读log4erl源代码来了解Erlang/OTP,我们先从log4erl应用程序启动开始说起......阅读全文
posted @ 2011-12-27 21:30 坚强2002 阅读(10456) | 评论 (0) 编辑
[Erlang 0024]Erlang二进制数据处理
摘要: 在Erlang中写处理二进制数据的代码是洋溢着幸福感的,它对于二进制数据强大的表现力甚至能让你忘掉了它种种不便,今天我们说说Erlang的二进制数据处理。阅读全文
posted @ 2011-12-25 23:12 坚强2002 阅读(14628) | 评论 (4) 编辑
[Erlang 0023] 理解Erlang/OTP gen_server
摘要: Erlang/OTP behaviour是对一些通用编程模式的抽象,在用Erlang 语言做开发时可以在behavior基础上快速构建出可用且可靠的功能.OTP behaviour包含gen_server gen_event gen_fsm supervisor.其中绝大多数情况下都是在使用gen_server,supervisor本身也是使用gen_server实现的.我们就以gen_server做为起点,逐步学习Erlang/ OTP.阅读全文
posted @ 2011-12-20 23:19 坚强2002 阅读(18998) | 评论 (9) 编辑
[Erlang 0022] It solves the right problems in the right way at the right time
摘要: "很少有像Erlang这样神奇的语言,作为一种面向并发的语言它把困难的事情变得如此容易,把容易的事情变得如此困难."《Seven Languages in Seven Weeks》的作者这样描述对Erlang的印象;《Seven Languages in Seven Weeks》这本小册子浮光掠影地介绍了7种语言,其中介绍Erlang的章节中,比较有料的是Joe Armstrong的访谈,和另外一篇访谈一起摘录于此,在这些访谈里面,我们不仅仅能读到技术阅读全文
posted @ 2011-12-17 12:04 坚强2002 阅读(1139) | 评论 (0) 编辑
[Erlang 0021] From String To Erlang Code
摘要: 在Erlang里面动态解释字符串并执行,实现类似Python.CreateEngine().Execute("12*(1+2)");的功能.阅读全文
posted @ 2011-12-15 14:10 坚强2002 阅读(4507) | 评论 (1) 编辑
[Erlang 0020]网页游戏分线到不分线
摘要: 这一年来可以明显看到一个变化:网页游戏分线从标配逐渐变成了可选,越来越多的游戏开始不分线;当初为什么要分线?现在为什么又不分线?技术上面临着什么挑战?仅仅是技术问题么?阅读全文
posted @ 2011-12-10 08:37 坚强2002 阅读(4403) | 评论 (0) 编辑
[Erlang 0019]Redis协议解读与实现(.Net & Erlang)
摘要: 本文简单解读了Redis的协议规范,并介绍了.net版本和Erlang版本Redis客户端的开源项目,分别是booksleeve和erl-redis.阅读全文
posted @ 2011-12-06 22:04 坚强2002 阅读(6745) | 评论 (0) 编辑
[Erlang 0018]Erlang为何对List情有独钟?
摘要: Erlang编程实践中绝大多数时候是在和List打交道:取头元素,遍历,匹配...为什么Erlang和其它函数式编程的语言都对对List情有独钟呢?《Erlang and OTP in Action》一书的附录B中提到了这个问题,其背后的思想就是引用透明(Referential transparency).阅读全文
posted @ 2011-12-04 20:33 坚强2002 阅读(3142) | 评论 (2) 编辑
[Erlang 0017]Erlang/OTP基础模块 proc_lib
摘要: 在梳理Erlang/OTP相关的内容时,我发现无论如何都无法避开proc_lib模块,说它是OTP的基础模块一点不为过.阅读全文
posted @ 2011-11-22 23:07 坚强2002 阅读(8609) | 评论 (0) 编辑
[Erlang 0016]Erlang三则之 HIPE SASL Monitor
摘要: Erlang 使用HIPE SASL Monitor常用的一些参数和命令,记录于此备忘.阅读全文
posted @ 2011-11-20 22:30 坚强2002 阅读(3494) | 评论 (0) 编辑
[Erlang 0015]Erlang OTP设计原则
摘要: OTP设计原则是如何按照进程,模块,文件夹的概念来组织代码的一系列原则.阅读全文
posted @ 2011-11-20 22:23 坚强2002 阅读(8523) | 评论 (1) 编辑
[Erlang 0014]Erlang垃圾回收机制
摘要: Erlang用VM做到了软实时,那它的垃圾回收的机制是怎样的呢?性能优化往往是从了解语言的垃圾回收机制开始的,Erlang也不例外,了解了垃圾回收机制,我们又可以做些什么呢?阅读全文
posted @ 2011-11-13 05:22 坚强2002 阅读(8233) | 评论 (2) 编辑
[Erlang 0013]抓取Erlang进程运行时信息
摘要: [Erlang 0012]Erlang Process input queue 一文我们提到使用erlang:process_info/1抓取进程运行时状态信息,有时我们需要把节点内所有的进程的信息都抓取下来,便于分析整个节点内进程的运行状态,特别是挑出一些异常的进程:比如有些进程的reduction值和其它进程相比大出好几个数量级,那这个进程需要好好检查一下了。阅读全文
posted @ 2011-11-06 10:48 坚强2002 阅读(8692) | 评论 (0) 编辑
[Erlang 0012]Erlang Process input queue
摘要: Erlang进程有自己的消息队列来保存接收到的消息,新接收到的消息放在队列的尾部。Erlang的接收原语receive就是用来从消息队列中选择性提取消息的。我们通过几个demo来了解这一过程阅读全文
posted @ 2011-11-05 22:34 坚强2002 阅读(5211) | 评论 (2) 编辑
[Erlang 0011] Erlang 杂记Ⅱ
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天又整理出来了一部分,分享一下. 上一次的地址:[Erlang 0009] Erlang 杂记阅读全文
posted @ 2011-10-30 18:18 坚强2002 阅读(5454) | 评论 (2) 编辑
[Erlang 0010] Erlang 热更新
摘要: Erlang脱胎于电信业,Joe Armstrong在描述Erlang的设计要求时其中就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停服务的热更新获益良多,终于不再用等到半夜没有人的时候再做更新了.那么如何进行热更新?Erlang又是如何做到热更新的呢?这就是我们本文要回答的问题.阅读全文
posted @ 2011-10-29 19:11 坚强2002 阅读(9944) | 评论 (6) 编辑
[Erlang 0009] Erlang 杂记
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分,分享一下.阅读全文
posted @ 2011-10-23 17:02 坚强2002 阅读(10154) | 评论 (6) 编辑
[Erlang 0008] Erlang的Match specifications
摘要: 在Erlang的ETS中进行比较复杂的查询,Match Specification是一个利器;match_spec的文档是ERTS中独立的章节,容易被忽略,使用中也容易出现迷惑,比如今天要说的这个ets:select_count阅读全文
posted @ 2011-10-22 21:33 坚强2002 阅读(5404) | 评论 (2) 编辑
[Erlang 0007] Erlang ETS Table 二三事
摘要: 不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table.阅读全文
posted @ 2011-08-11 12:15 坚强2002 阅读(24695) | 评论 (6) 编辑
[Erlang 0006] Erlang中的record与宏
摘要: 很难想象如果没有宏,没有record,我们的Erlang代码要多么的难读,难以扩展,到处都是Magic Number;嗯哼,总还是有一扇窗是打开的阅读全文
posted @ 2011-07-20 21:42 坚强2002 阅读(13849) | 评论 (11) 编辑
[Erlang 0005] net_kernel:monitor_nodes 订阅node连接\断开消息
摘要: Erlang中节点之间建立链接我们可以使用net_adm:ping(),连接成功返回pong,失败返回pang;实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一 些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息;Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag);调用这个方法来订阅节点状态变 动的消息.一个节点加入的时候会向所有的订阅进程发送一个nodeup消息,一个节点断开的时候会发送nodedown消息.阅读全文
posted @ 2011-07-12 21:52 坚强2002 阅读(5259) | 评论 (3) 编辑
[Erlang 0004] Centos 源代码编译 安装 Erlang
摘要: 我需要在Centos中安装Erlang B13R04 ,第一次做这件事情破费周折,主要是对Erlang依赖的库不熟悉,总是编译不过;这里梳理一下安装过程中的细节阅读全文
posted @ 2011-07-09 05:43 坚强2002 阅读(8277) | 评论 (4) 编辑
[回头再说] 国内网页游戏背景音乐
摘要: 首先,一大批网页游戏用的是中国武侠背景,大量的电视武侠电影为此提供了丰富的素材阅读全文
posted @ 2011-07-06 22:21 坚强2002 阅读(7812) | 评论 (4) 编辑
[Erlang 0003] 编译Erlang程序
摘要: 如果语言学习也做一个"流失率统计",那么有多少人是在编译环节放弃的呢?按下F6就完成编译,F5就可以运行,这样的好日子不再了,你能接受么? 我们今天要说的就是Erlang的编译.阅读全文
posted @ 2011-07-05 01:01 坚强2002 阅读(12889) | 评论 (8) 编辑
[Erlang 0002] Erlang IDE
摘要: 当我和我的团队决定技术转型到Erlang的时候,一连串的问题就冒出来了:就是Erlang用什么IDE啊?Erlang怎么编译啊?Erlang编写的程序怎么运行啊? Erlang编写的程序怎么调试啊?其实这些问题具有普适性,在学习一门新语言的时候,我们往往首先提出的就是这几个问题.我个人认为程序员的基本技能 包括:代码编写,代码重构,调试,性能优化;而这四项基本技能都或多或少的需要对应工具的支持.工欲善其事必先利其器,工具,如江湖人的刀剑,必须首先解决阅读全文
posted @ 2011-07-03 16:56 坚强2002 阅读(16409) | 评论 (24) 编辑
[Erlang 0001] 我们为什么选择Erlang
摘要: 一款多人在线游戏,一个玩家走一步都要把消息广播给同屏的玩家,玩家聊天,战斗更涉及到大量的消息广播;如何应对?再有一个及其普通 却不太容易搞定的的需求:在线玩家列表怎么实现?是啊,你是不是在想用哪种锁合适?提到的两个场景的关键词是:高并发,大量广播;可能 你还会想到"锁".阅读全文
posted @ 2011-07-03 15:48 坚强2002 阅读(8757) | 评论 (21) 编辑

  我,技术人,身体变胖,头脑依然灵活,喜欢Erlang .net,非著名技术博客,翻译过大师经典文章,也原创了不少.在技术之路上沉思,不断重构着不太优秀的自己.爱生活,爱Erlang!