by kevin
11.
十二月 2012 21:19
>
图书 《erlang程序设计》 已经绝版,去淘宝买印刷版的吧。 本书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统,免去锁与互斥技术的羁绊,使程序在多核CPU 上高效运行。本书讲述的各种设计方法和行为将成为设计容错与分布式系统中的利器。 Joe Armstrong,Erlang最初的设计者和实现者,也是Erlang OTP系统项目的首席架构师。他拥有瑞典皇家理工学院博士学位,是容错系统开发领域的世界级专家。此外,他还在开发旨在替代XML的标记语言ML9。现任职于爱立信公司。 电子档:http://wenku.baidu.com/view/6ec2a984e53a580216fcfee0.html 《erlang编程指南》 《erlang编程指南》是对erlang语言的深入介绍。erlang是任何必须并发、容错和快速响应的环境的理想编程语言。随着多核处理器及其针对并发的新的可扩展方式的发展,erlang得到了广泛的使用。通过本书,你将学会如何使用erlang编写复杂的并发程序,不管你是否有编程背景和经验。 本书由国际知名的erlang社区领导者根据他们的培训材料编写而成。本书的重点集中在解释erlang的语法和语义,并且介绍了其模式匹配、规范列表、递归、调试、网络和并发性等内容。 《Erlang/OTP并发编程实战》 本书侧重生产环境下的Erlang 开发,主要讲解如何构建稳定、版本控制良好、可维护的产品级代码,凝聚了三位Erlang 大师多年的实战经验。本书主要分为三大部分:第一部分讲解Erlang 编程及OTP 基础;第二部分讲解如何在实际开发中逐一添加OTP 高级特性,从而完善应用,作者通过贯穿本书的主项目——加速Web 访问的分布式缓存应用,深入浅出地阐明了实践中的各种技巧;第三部分讨论如何将代码与其他系统和用户集成,以及如何进行性能调优。本书面向Erlang 程序员,以及对Erlang/OTP 感兴趣的开发人员。 电子书 《erlang入门手册》 http://wenku.baidu.com/view/e2f76bc4bb4cf7ec4afed0c0.html 《erlang OTP设计原理文档》 http://erlang.shiningray.cn/otp-design-principles/index.html erlang中文基础资料 http://wenku.baidu.com/view/bf40f42cb4daa58da0114a63.html 在线资料 Erlang问答 http://erlangqa.com/ Erlang非业余研究 http://blog.yufeng.info/ 和 http://mryufeng.iteye.com/ iteye的erlang群组 http://erlang.group.iteye.com/group/wiki 和 http://www.iteye.com/forums/tag/Erlang 另外,这两个 http://www.erlang-cn.org/ 和 http://erlang-china.org/ 已经好久不更新了。
by kevin
9.
十二月 2012 23:54
>
Erlang的构建工具,创建新项目,编译,发布等 rebar https://github.com/basho/rebar Chicago Boss is a server framework inspired by Rails and written in Erlang. chicagoboss http://www.chicagoboss.org/ Erlyvideo is a flash streaming server, written in erlang。 erlyvideo https://github.com/erlyvideo/erlyvideo 如何使用rebar进行erlang/OTP升级 elevators https://github.com/extend/elevators mysql 连接库 mysql https://code.google.com/p/erlang-mysql-driver/ 日期运算利器 edate https://github.com/dweldon/edate 类似linux下cron的计划任务框架 erlcron https://github.com/erlware/erlcron 一个用来构建Web应用的轻便,高效的HTTP应用框架的Erlang库 MochiWeb https://code.google.com/p/mochiweb/ 彪悍的日志框架log4系列的erlang版本 log4erl https://code.google.com/p/log4erl/ 压力测试工具,非常强大,支持自定义协议,配置压力访问流程 tsung http://tsung.erlang-projects.org/ 消息队列框架 rabbitmq http://www.rabbitmq.com/ Jabber / XMPP协议的即时通讯服务器 ejabberd http://www.ejabberd.im/ Ranch is a socket acceptor pool for TCP protocols. Ranch https://github.com/extend/ranch erlang-hotswap-example 是一个热更新的示例 erlang-hotswap-example https://github.com/hoterran/erlang-hotswap-example
by kevin
5.
十二月 2012 00:22
>
将浮点数转换成固定小数位字符串,不使用float_to_list,使用io_lib:format("~.2f",[F])。io_lib:format的返回只是[string()]。 lists:flatten(io_lib:format(Pattern, Args)),实现string_format功能。 生成随机数时,使用当前的timestamp作为种子,避免每个进程重开后生成的随机数是一样的。 erlang上要进行日期运算,使用edate 日期格式化利器erlydtl项目中的dateformat 小数取整通过trunc实现floor(X) ->
T = erlang:trunc(X),
case (X - T) of
Neg when Neg < 0 -> T - 1;
Pos when Pos > 0 -> T;
_ -> T
end.
ceiling(X) ->
T = erlang:trunc(X),
case (X - T) of
Neg when Neg < 0 -> T;
Pos when Pos > 0 -> T + 1;
_ -> T
end.
by kevin
4.
十二月 2012 00:12
>
chicagoboss默认的使用poolboy实现mysql连接池,但是连接池的最大连接数只有10,这个可以需要通过修改源代码boss_db_sup.erl(line:19)中的max_overflow。 使用连接池连接mysql,如果服务器设置了tcp_keepalive_time,那么如果一段时间后,如果了某个连接没有数据交互,相应的socket端口会被关闭,更糟糕的是无论是mysql的服务端,还是应用客户端,都不知道该socket已经关闭,下次请求是会提示"socket is closed",而且无法重新打开。解决的办法是修改mysql_recv.erl(line:98),添加tcp连接选项{keepalive, true},显式要求连接不断开。 chicagoboss支持在每个action执行之前,执行before_{action},执行之后,执行after_{action}。before_{action}还是比较好用的,after_{action}就很鸡肋了,因为你能处理的只有html,而不是一个action result,所以这个需要自己修改boss_web_controller.erl去扩展。 mysql中的date类型,无法被chicagoboss转换成有效的数据类型,使用datetime类型或者可以尝试修改boss_record_lib.erl的convert_value_to_type方法。 chicagoboss使用Django模板引擎,所以无法调用带参数的服务端方法。但也有个好处,支持模板继承。 boss_rebar.erl存在bug,boss.config中配置vm_name,如果是dev启动vm_name,则添加为启动参数-name,如果是正常启动,则为-sname。可以修改start_cmd方法和stop_cmd方法解决。 利用view生成html。 创建一个view,会生成一个{project}_view_{folder}_{filename}_html.beam文件 调用{project}_view_{folder}_{filename}_html:render(Vars)方法,返回{ok,[Binary]} 其中Vars=[{key, Value}], Binary=<<Html>>,需要生成html的时候可以这样使用。 mochiweb中的处理进程数,可以在mochiweb_socket_server.erl中修改参数acceptor_pool_size,默认为16。
by kevin
11.
十一月 2012 05:07
>
公司新项目,使用基于erlang的mvc框架chicagoboss,数据库选择mysql。写了一个月的代码,记录些细节的东西。
将mysql表映射成model的功能,在boos_db_adapter_mysql这个模块中实现。
数据库的每张表,都需要id字段,而且字段类型必须是整形。当然,可以通过修改源码去掉这个约束(研究中)。
表名必须是严格复数格式,例如:order->orders, man->men。(ps:inflector:pluralize方法存在bug)
数据库中的外键字段,要命名成{talbe_name}_id,table_name为主表名字。
实体属性的定义遵循Pascal命名(Word1Word2),同时对应数据库字段名word1_word2