`
AvinDev
  • 浏览: 113324 次
社区版块
存档分类
最新评论
文章列表
应ZDNet的邀请,《Erlang程序设计》的译者赵东炜老师和这本书的策划编辑刘江老师针对《Erlang程序设计》这本书和Erlang技术做了一期视频访谈节目。
这是火星旧闻了,在若干天之前,有位大佬在maillist宣告了一个新的Erlang Web Framwork - Nitrogen,代码尚在整理中,未开源,只有一个演示视频。 视频被gfw了,我将它上传到Youtube,因为刚上传,稍后才可以访问。 比较有意思的是这个框架并不是ROR的跟风,与Erlyweb不一样,它是仿ASP.NET的,属于事件驱动模型,看了下视频,比较有意思 p.s. 视频质量相当糟糕,童鞋们可以到 http://stitcho.com/nitrogen_erlang/FlickrOnNitrogen.html 下载,24MB的mov视频。
Manning 出版社发布了最新的Erlang书籍《Concurrent Programming with Erlang/OTP》,目前是Early Access Edition,售价如下: 引用  MEAP + Ebook only - $27.50   MEAP + Print book + Ebook Combo - $49.99   Print book only - $44.99 (Not yet available for order) 目录: 引用Table of Contents         Resources  Part I 1. Why Erlang ...
09.3.18更新: 随着R13A release,我也重新查了一下这个问题,首先这份代码在编译的时候,会提示 引用Warning: NOT OPTIMIZED: different control paths use different positions in the binary litaocheng同学提醒,只要将代码修改为 dame_shit(Bin) -> dame_shit(Bin, <<"\r\n">>, not_found). dame_shit(<<Tag:2/bytes, T/binary>&g ...
在Erlang的 DOC erl5.6.3/doc/efficiency_guide/binaryhandling.html#4 中,第四章提到了Binary的优化。由于虚拟机经过了改良,一些在R11B使用的Binary优化技巧,在R12B就不推荐使用了。 特别注意的是sub binary的使用。举个例子,从一个大的Binary中取出以某个字节结束的一句: extract_str_end_with_tag(Data, Tag) -> extract_str_end_with_tag2(Data, <<>>, Tag). extract_str_e ...
maillist有人提供了一种简单的UUID生成方法: 引用1> crypto:start(). ok 2> <<I:160/integer>> = crypto:sha(term_to_binary({make_ref(), now()})). <<41,73,124,217,87,62,82,238,224,153,122,195,244,246,157,   142,88,71,76,61>> 3> lists:flatten(io_lib:fwrite("~40..0s", [erlang:integ ...
最近有些空,继续捣鼓consisten hash的简单实现。先前修改gb_trees,加入了lookup_nearest(Key, Tree) 函数,通过二叉查找和回朔,来查找最接近Key的项。昨天看了下xbaytable的DHT实现,发觉其实用ets会更快捷: ets:prev(Table, Key) 和 ets:next(Table, Key) 函数,可以返回Table中Key的上一个或下一个存在的键,无论这个Key是否存在于Table中。再加上 ets:first/1、ets:last/1、ets:lookup/2,就可以实现了。 实践过程中发现了个问题,需要定义这个哈希范围的最大值, ...
突然想做IP库的解析,用Erlang,自然就碰到了Big Endian & Little Endian的事 IP在DB文件中是以little endian存储的,跟搜索的IP比较时需要转换为一个Int值,Python代码可以这样: ip = unpack('I', buf)[0] 将一个IP串转换为Int值,则是 ip = unpack('!I', socket.inet_aton(ip))[0] 两者都转换为int之后就可以直接比较了 Erlang里面可以用Binary进行匹配,非常方便。 Little Endian 存储的Binary转Int: 1> << ...
先推荐两篇文章: http://www.wagerlabs.com/blog/2008/02/parsing-text-an.html http://ppolv.wordpress.com/2008/02/25/parsing-csv-in-erlang/ (都需要爬墙访问,该死的‘功夫网’) Erlang中解析文本协议,使用Binary无疑是高效的选择,但是我发现,文章中,对Binary中各个字节组合为字符串,都是使用list的: NewList = lists:reverse([Char|OldList]) 而不是 NewList = binary_to_list(<<OldB ...
以前不是很了解Erlang网络编程中流量控制,现在做一下笔记。 Erlang中Socket设置了{active, true}之后,接收到的网络消息会通过{tcp, Socket, Data}的格式主动发送给进程,这样做有个弊处就是没有做流量控制。要是有个客户端疯狂发包过来,服务器不做处理就等着堆溢出。 在《Programming Erlang》的14.2里面,介绍可以使用 {active, once} 来做控制。 {ok, Listen} = gen_tcp:listen(Port, [..,{active, once}...]), {ok, Socket} = gen_tcp:acc ...
一直一来没有留意到这个问题,今天偶尔在blog上看到,就标记一下,别让自己忘记了。 文章在 http://easyerl.blogspot.com/2007/10/high-order-functions-must-be-tested.html 测试代码如下: 1> Filter = fun(Elem) -> fun({Elem, _, _}) -> true; (_) -> false end end. #Fun<erl_eval.6.49591080> 2> C = Filter(cpu). #Fun<erl_eval.6.4959 ...
maillist上面对 “VM & BEAM Specs : idea for improving, the lists support”的争论很有意思,我也随手测一把看看 JDK 1.5.0_11 Erlang/OTP R11B-5 $ javac ListAppend.java $ /home/jdk/bin/java -server ListAppend Total time:3439ms $ erlc list_append.erl $ erl -noshell -noinput -s list_append main -s init stop Total time:4408 ...
http://www.trapexit.org/index.php/Distributed_erlang_using_ssl_through_firewalls 这篇文章提供了一种使用ssl连接来实现Erlang各节点间通信的方法。 但是我的同事经过试验,两个节点是ping不同的,这几天有人在网上提供了一个patch来解决这事情,但是patch有点问题,需要对源文件进行修改之后才能使用patch,这里提供一下patch后的文件和源文件。
《Programming Erlang》Joe的新书,买了个电子版,在花了一些时间读了一下之后,发发牢骚,写写读后感。 书不太厚,也不薄,500多页,但是单纯附录就占了100+,Appendix F Module and Function Reference,有凑页面的嫌疑。有仁兄打印了整本书,叠起来转头那么厚,其实后面那一部分没有什么必要去打印。 此书中规中矩,跟n年前的《Concurrent Programming in ERLANG》的构造比较相像,先是顺序化编程,然后异常处理,并发编程,分布式编程。新内容有文件编程,网络编程,ETS,DETS,Mnesia,OTP,外部接口(Port ...
拿到了Programming Erlang的电子书,研究一下Potian先前跟俺说的“Socket Base Distribution”部分代码,结果发现chat_client.erl(对应书上的Chapter 11 IRC Lite),运行出错,提示 引用lib_chan_mm: protocol error:{login,"general","joe"} 查看lib_chan_mm.erl,可见如下代码: loop1(Socket, Pid, Trace) -> receive {tcp, Socket, Bin} -> ...
Global site tag (gtag.js) - Google Analytics