Erlang
[Erlang 0062] Erlang Unicode 两三事
摘要: 不少人和我一样在Erlang实践过程中都会遇到中文的问题,其中有中文显示的问题有正则表达式匹配的问题等等;今天请教立涛之后梳理了一下,整理于此. 阅读全文
[Erlang 0061] Erlang Code Snippet Ⅱ
摘要: 整理了最近一段时间记录的Erlang代码片段,还有大量简短的代码都已经整理在官方文档的PDF中.从开始学习Erlang,写的测试代码都会整理到PDF中,从这个习惯中得益匪浅. 阅读全文
[Erlang 0060] Joe Armstrong 论文《面向软件错误构建可靠的分布式系统》笔记
摘要: 周末读了两篇论文"On Designing and Deploying Internet-Scale Services"和Joe Armstrong的论文"面对软件错误构建可靠的分布式系统",这两篇论文实战内容相当多,整理笔记于此,备忘. 阅读全文
[Erlang 0059] Erlang日期与时间处理
摘要: 软件开发有两个概念是和地区区域相关的:字符编码和时间;编码和时间的规范演变过程中有文化的冲突有历史的遗留,是软件开发中充满人文气息的一角;关于字符编码我之前整理过一篇文章,这部分知识很有意思,特别是格列佛游记所引出的大端小端概念,妙趣横生;平时笔记中也零零散散记录了一些和时间处理相关的内容,今天按图索骥把相关的资料整理汇集于此. 阅读全文
[Erlang 0058] Erlang Function调用效率
摘要: Erlang方法调用有m:f(a),M:F(a),fun,f(),apply/3几种方法,调用效率如何呢?《Erlang/OTP in Action》和官方文档中都有相关的总结一起看下. 阅读全文
[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"的文档; 阅读全文
[Erlang 0056] 用fun在Erlang Shell中编写尾递归 Ⅱ
摘要: 之前研究了一个问题"[Erlang 0050]用fun在Erlang Shell中编写尾递归",一直对这个问题保持着关注;最近在搜索引擎里找到同一个问题,题目足够清晰calling fun() from fun() 它提供了另外一种解决解决方案:Y-combinator! 阅读全文
[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中想要共享数据怎么办? 阅读全文
[Erlang 0054] Erlang Web 监控工具
摘要: Erlang已经提供了一系列工具查看运行时状态查看的工具,有没有web的监控工具可用呢?下面介绍一个很棒的工具:BigWig 阅读全文
[Erlang 0052] Erlang otp_src_R15B01 Released
摘要: This is R15B01, the first maintenance release for the R15B major release. 阅读全文
[Erlang 0051] Using ETS in Erlang Shell
摘要: 在Erlang Shell中调试的时候经常会遇到的一个问题就是在Shell中遇到异常会导致ETS表丢失,需要反复去创建ETS表,调试比较麻烦.这是由于Erlang Shell在遇到异常之后会重建,ETS表依赖于创建它的进程,如果创建它的进程崩溃了ETS表也就销毁了(不是绝对的,后面可以看到); 阅读全文
[Erlang 0050]用fun在Erlang Shell中编写尾递归
摘要: 平时在Erlang Shell中写demo的时候,经常会用到fun , List Comprehensions 快速构造测试条件,能不创建代码文件就不创建.那么在Shell中怎么构造一个尾递归程序呢? 阅读全文
[Erlang 0049] 哈哈,一起来打印三角形
摘要: 刚刚看到微博上有朋友说"哎~连个for循环都没有的erlang我真想不出该怎么去打印星号三角形了。。。",哈哈,一起来Happy一下吧,一起来打印三角形! 阅读全文
[Erlang 0048] Erlang Guard
摘要: 梳理了一下有关Erlang Guard相关的知识,纠正了Learn you some erlang 作者的一个理解上的小偏差. 阅读全文
[Erlang 0047] Erlang 进制转换
摘要: 如果人类像卡通人物那样,每只手上只有 4个手指会怎样呢?我们可能永远都不会想到要发明一种以10为基础的数字系统的问题, 取而代之的是我们可能会认为数字系统基于 8是正常、自然、合理、必然的,是毫无疑问的,是非常合适的。这时,就不能称之为十进制了,得将它称作为以8为基础的数字系统或八进制。
... ...
龙虾根本没有手指,但它两只前爪的末端都有螯。适合于龙虾的数字系统是四进制数字系统或称为基于4的数字系统. 阅读全文
[Erlang 0046] Erlang Timer
摘要: Some notes on Erlang timer. 阅读全文
[Erlang 0045] Erlang 杂记 Ⅲ
摘要: 学习Erlang有点滴收获就会记录到Evernote,今天又整理出来了一部分,分享一下. 阅读全文
[Erlang 0044] Erlang Shell History
摘要: 平时调试代码最比较郁闷的一个问题就是Erlang Shell一旦关闭刚刚输入过的命令历史就丢失了,如果能像维护一个输入命令的历史就方便了,rlwrap项目就可以. 阅读全文
[Erlang 0043] Erlang Code Snippet
摘要: 在使用Erlang开发过程中我们会积累一些常用的util方法,同时会把一些方便编译调试的方法放在Erlang的user_default模块.今天翻阅Evernote发现两段非常实用的代码片段,由于google codesearch服务已经关闭,源头不可追溯,好东西不可独享,和大家分享.
本文会持续更新补充内容. 阅读全文
[Erlang 0042] Erlang 动态执行
摘要: 之前遇到过把字符串解析成为Erlang数据项的问题, 现在我们继续上文的话题,看看如何动态执行Erlang表达式. 阅读全文
[Erlang 0041] 详解io:format
摘要: 最近遇到几个问题,都是和Erlang Shell输出有关,问题解决了但是追问还要继续下去,后面几篇文章都将围绕这一话题展开;那我们就从io:format("hello world!")开始说起吧. 阅读全文
[Erlang 0040] Hidden Features of Erlang
摘要: Hidden Features of C#这个帖子大家不陌生吧,有人也在stackoverflow上提出了类似的问题:Hidden Features of Erlang,不过运气不佳的是,这个帖子并没有火爆起来而且现在已经关帖了;已经回复的内容其中大部分内容我在之前的博文里面已经覆盖了,下面逐楼梳理一遍,大家查缺补漏吧; 阅读全文
[Erlang 0039] Erlang Inheritance
摘要: 和Parameterized Module一样的态度:把extend当作Erlang语言特性,当作代码复用的一种手段,不扯OOP,可能更好理解: )
本文回答Erlang Inheritance 怎么用?如果是Parameterized Module呢? 什么时候使用? 阅读全文
[Erlang 0038] Node.js & Erlang
摘要: 没有应用场景上下文做编程语言的比较就是一场关公战秦琼的乱斗而已,而语言的比较一次又一次的比较,并非开发者无聊,而是这的确关乎开发者时间精力的投入和未来可能的回报.现在估计问的最多的就是做Android开发还是iOS开发,仅次于它的就是选Node.js还是Erlang?众说纷纭,自己看吧,甚至Joe Armstrong,Felix Geisendörfer,等牛人也也加入了讨论! 阅读全文
[Erlang 0037] Erlang Parameterized Module
摘要: 把Parameterized Module作为一个Erlang的语法特性而不扯到OOP上去,可能更好理解: ) 本文回答Erlang Parameterized Module是什么?有什么用?怎么实现的?我们能不能用?什么时候使用? 阅读全文
[Erlang 0036] "HOW TO"不创建崩溃报告主动销毁gen_server进程
摘要: 创建一个gen_server的时候会在init方法中检查依赖的外部服务是否可用;如果不可用的话他就直接返回{stop,Reason},gen_server进程创建失败;这个目标他很容易就达到了,但是进程启动失败之后却创建了Crash Report,这种异常情况是可以预料的并不需要创建崩溃报告Crash Report;为什么会产生崩溃报告Crash Report?如何消除呢? 阅读全文
[Erlang 0035] Erlang SMP
摘要: Erlang SMP使用操作系统线程实现多个调度器,利用了多核多CPU的优势并把实现细节对开发者隐藏起来, 可以不修改代码甚至不用重新编译就可以使用;使用SMP可以有非常灵活的启动选择和运行时调整的方法入口; 阅读全文
[Erlang 0034] Erlang iolist
摘要: 既然Erlang中有List,那iolist又是为了解决什么问题而设计的呢? 阅读全文
[Erlang 0033] 接入Erlang控制台的几种方法
摘要: Erlang服务部署在生产环境也需要一些方式进入到Erlang控制台来做一些工作,"就像魔术师的飞刀,出手但并没有脱手". 阅读全文
[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. 阅读全文
[Erlang 0031] Erlang Shell中的输出完整数据
摘要: 标准的解决方案是使用shell中的rp方法格式化输出结果 比如 rp(os:getenv()). 阅读全文
[Erlang 0030] 理解Erlang/OTP Supervisor
摘要: Supervisor的基本思想就是通过建立层级结构实现错误隔离和管理,具体方法是通过重启的方式保持子进程一直活着. 阅读全文
[Erlang 0029] Erlang Inline编译
摘要: Erlang的编译器可以将Erlang模块中的函数进行内联编译,内联(inlining)的含义是把一个方法的调用替换成函数体并把参数替换成实际值. 阅读全文
[Erlang 0028] Erlang atom
摘要: Erlang中atom数据类型能够做的唯一的运算就是比较,它不参与垃圾回收,因而在搞崩Erlang的各种方法中无节制使用原子名列前茅. 阅读全文
[Erlang 0027] Using Record in Erlang Shell
摘要:  《[Erlang 0006] Erlang中的record与宏》一文中我们提到过Record是一个编译时的功能,在Erlang VM中并没有专门的数据类型.如何在Erlang Shell中使用Record呢?本文给出了五种方法. 阅读全文
[Erlang 0026] 目前最优的Erlang IDE - erlIDE
摘要: 作为少数几个还在持续改进的Erlang IDE插件,erlide现在的版本已经堪称是目前最好用的Erlang IDE. 阅读全文
[Erlang 0025]理解Erlang/OTP - Application
摘要: log4erl是Erlang的日志项目,我们可以通过阅读log4erl源代码来了解Erlang/OTP,我们先从log4erl应用程序启动开始说起...... 阅读全文
[Erlang 0024]Erlang二进制数据处理
摘要: 在Erlang中写处理二进制数据的代码是洋溢着幸福感的,它对于二进制数据强大的表现力甚至能让你忘掉了它种种不便,今天我们说说Erlang的二进制数据处理。 阅读全文
[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. 阅读全文
[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的访谈,和另外一篇访谈一起摘录于此,在这些访谈里面,我们不仅仅能读到技术 阅读全文
[Erlang 0021] From String To Erlang Code
摘要: 在Erlang里面动态解释字符串并执行,实现类似Python.CreateEngine().Execute("12*(1+2)");的功能. 阅读全文
[Erlang 0020]网页游戏分线到不分线
摘要: 这一年来可以明显看到一个变化:网页游戏分线从标配逐渐变成了可选,越来越多的游戏开始不分线;当初为什么要分线?现在为什么又不分线?技术上面临着什么挑战?仅仅是技术问题么? 阅读全文
[Erlang 0019]Redis协议解读与实现(.Net & Erlang)
摘要:  本文简单解读了Redis的协议规范,并介绍了.net版本和Erlang版本Redis客户端的开源项目,分别是booksleeve和erl-redis. 阅读全文
[Erlang 0018]Erlang为何对List情有独钟?
摘要: Erlang编程实践中绝大多数时候是在和List打交道:取头元素,遍历,匹配...为什么Erlang和其它函数式编程的语言都对对List情有独钟呢?《Erlang and OTP in Action》一书的附录B中提到了这个问题,其背后的思想就是引用透明(Referential transparency). 阅读全文
[Erlang 0017]Erlang/OTP基础模块 proc_lib
摘要: 在梳理Erlang/OTP相关的内容时,我发现无论如何都无法避开proc_lib模块,说它是OTP的基础模块一点不为过. 阅读全文
[Erlang 0016]Erlang三则之 HIPE SASL Monitor
摘要: Erlang 使用HIPE SASL Monitor常用的一些参数和命令,记录于此备忘. 阅读全文
[Erlang 0015]Erlang OTP设计原则
摘要: OTP设计原则是如何按照进程,模块,文件夹的概念来组织代码的一系列原则. 阅读全文
[Erlang 0014]Erlang垃圾回收机制
摘要: Erlang用VM做到了软实时,那它的垃圾回收的机制是怎样的呢?性能优化往往是从了解语言的垃圾回收机制开始的,Erlang也不例外,了解了垃圾回收机制,我们又可以做些什么呢? 阅读全文
[Erlang 0013]抓取Erlang进程运行时信息
摘要: [Erlang 0012]Erlang Process input queue 一文我们提到使用erlang:process_info/1抓取进程运行时状态信息,有时我们需要把节点内所有的进程的信息都抓取下来,便于分析整个节点内进程的运行状态,特别是挑出一些异常的进程:比如有些进程的reduction值和其它进程相比大出好几个数量级,那这个进程需要好好检查一下了。 阅读全文
[Erlang 0012]Erlang Process input queue
摘要: Erlang进程有自己的消息队列来保存接收到的消息,新接收到的消息放在队列的尾部。Erlang的接收原语receive就是用来从消息队列中选择性提取消息的。我们通过几个demo来了解这一过程 阅读全文
[Erlang 0011] Erlang 杂记Ⅱ
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天又整理出来了一部分,分享一下. 上一次的地址:[Erlang 0009] Erlang 杂记 阅读全文
[Erlang 0010] Erlang 热更新
摘要: Erlang脱胎于电信业,Joe Armstrong在描述Erlang的设计要求时其中就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停服务的热更新获益良多,终于不再用等到半夜没有人的时候再做更新了.那么如何进行热更新?Erlang又是如何做到热更新的呢?这就是我们本文要回答的问题. 阅读全文
[Erlang 0009] Erlang 杂记
摘要: 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分,分享一下. 阅读全文
[Erlang 0008] Erlang的Match specifications
摘要: 在Erlang的ETS中进行比较复杂的查询,Match Specification是一个利器;match_spec的文档是ERTS中独立的章节,容易被忽略,使用中也容易出现迷惑,比如今天要说的这个ets:select_count 阅读全文
[Erlang 0007] Erlang ETS Table 二三事
摘要: 不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table. 阅读全文
[Erlang 0006] Erlang中的record与宏
摘要: 很难想象如果没有宏,没有record,我们的Erlang代码要多么的难读,难以扩展,到处都是Magic Number;嗯哼,总还是有一扇窗是打开的 阅读全文
[Erlang 0005] net_kernel:monitor_nodes 订阅node连接\断开消息
摘要: Erlang中节点之间建立链接我们可以使用net_adm:ping(),连接成功返回pong,失败返回pang;实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一
些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息;Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag);调用这个方法来订阅节点状态变
动的消息.一个节点加入的时候会向所有的订阅进程发送一个nodeup消息,一个节点断开的时候会发送nodedown消息. 阅读全文
[Erlang 0004] Centos 源代码编译 安装 Erlang
摘要: 我需要在Centos中安装Erlang B13R04 ,第一次做这件事情破费周折,主要是对Erlang依赖的库不熟悉,总是编译不过;这里梳理一下安装过程中的细节 阅读全文
[回头再说] 国内网页游戏背景音乐
摘要: 首先,一大批网页游戏用的是中国武侠背景,大量的电视武侠电影为此提供了丰富的素材 阅读全文
[Erlang 0003] 编译Erlang程序
摘要: 如果语言学习也做一个"流失率统计",那么有多少人是在编译环节放弃的呢?按下F6就完成编译,F5就可以运行,这样的好日子不再了,你能接受么?
我们今天要说的就是Erlang的编译. 阅读全文
[Erlang 0002] Erlang IDE
摘要: 当我和我的团队决定技术转型到Erlang的时候,一连串的问题就冒出来了:就是Erlang用什么IDE啊?Erlang怎么编译啊?Erlang编写的程序怎么运行啊?
Erlang编写的程序怎么调试啊?其实这些问题具有普适性,在学习一门新语言的时候,我们往往首先提出的就是这几个问题.我个人认为程序员的基本技能
包括:代码编写,代码重构,调试,性能优化;而这四项基本技能都或多或少的需要对应工具的支持.工欲善其事必先利其器,工具,如江湖人的刀剑,必须首先解决 阅读全文
[Erlang 0001] 我们为什么选择Erlang
摘要: 一款多人在线游戏,一个玩家走一步都要把消息广播给同屏的玩家,玩家聊天,战斗更涉及到大量的消息广播;如何应对?再有一个及其普通
却不太容易搞定的的需求:在线玩家列表怎么实现?是啊,你是不是在想用哪种锁合适?提到的两个场景的关键词是:高并发,大量广播;可能
你还会想到"锁". 阅读全文
|
|
公告
Powered By: 博客园 模板提供:沪江博客
|