Erlang R16+ Crypto模块与最新Openssl不兼容问题

服务器上新安装了R1601版本后,启动crypto模块 时出现下面的错误:
The on_load function for module crypto returned {error,
{load_failed,
“Failed to load NIF library: ‘/usr/local/lib/erlang/lib/crypto-3.2/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'”}}

因R16+版本和最新的openssl不兼容所至,服务器上的openssl版本是OpenSSL 1.0.1e-fips 11 Feb 2013。网上说可通过下载openssl源码,修改编译参数即可解决。但修改openssl编译后,问题并没解决。

最后,在erlagn.org中找到的解决方法。

修改crypto源码包中的lib/crypto/c_src/crypto.c文件,把原有定义

修改为

重新编译安装Erlang即可。

具体见: http://erlang.org/pipermail/erlang-questions/2013-December/076327.html

发表在 Erlang | 标签为 , | 留下评论

PHP32位机器处理大整数

要在32位的机器上,整形只能表示-2147483648到2147483647之前的数值范围。如果需要处理更大的数,如64位整数,则需要用BC Math函数库。它支持用字符串表示的任意大小和精度的数字的二进制计算。

继续阅读

发表在 PHP | 留下评论

dailyzer工具

本文主要介绍dialyzer工具的使用。
Dialyzer 是一个静态分析工具,可以帮忙我们分析出代码中潜在的类型错误、函数、if case分支是否可达 等问题。我们可以在开发价段就检测出潜在错误,减少运行时错误。

运行dialyzer时,需先构建好dialyzer模板。linux下,直接执行下面语句即可生成 .dialyzer_plt

1_dialyzer

继续阅读

发表在 Erlang | 标签为 | 留下评论

gen_event 行为模式

Erlang OTP包括4个行为模式: gen_server,gen_event,gen_fsm,supervisor。

gen_event作为事件处理的通用模块,多用于事件跟踪和错误报告中,如日志记录。gen_event由事件管理进程和多个回调模块组成。可通过start或start_link方式启动,再动态地添加或删除事件处理模块。

回调函数需要实现init/1,handle_event/2,handle_info/2,handle_call/2,terminate/2 等接口。gen_event比其它行为模式更能容错。如果一个回调查模块出错或返回值不对,事件管理进程不会关闭,只会把出错模块删除,其他模块将不受影响。

继续阅读

发表在 Erlang | 标签为 , , | 一条评论

Erlang的SMP支持

Erlang从R11开始开始支持SMP(Symmetrical Multi Processor),之后不断优化完善对SMP的支持。Erlang对SMP的开发策略是
First,”make it work”
Second,”mesaure” and find bottlenecks
Third “optimize” by removing bottlenecks

在没有SMP时,ErlangVM只在一个主线程单个调度器,所以IO和共享数据访问都不需要加锁保护。
1_Non_Smp

继续阅读

发表在 Erlang | 标签为 | 留下评论

Escript工具

Erlang下的escript工具为我们提供了类似shell脚本的功能,Erlang代码不需要编译即可执行,我们可以方便地写测试代码或维护脚本。

先看下面的例子,计算所有输入整数的和

调用”./example.erl 10 20 100″ 即可得到
The sum is:130

escript会调用脚本中的main函数作为函数入口,Args作为参数列表,列表中的元素均为字符串。

继续阅读

发表在 Erlang | 标签为 | 留下评论

PHP网络字节序与主机字节序

不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序这个叫做主机序
最常见的有两种
1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址

LE little-endian
地址低位存储值的低位
地址高位存储值的高位

BE big-endian
地址低位存储值的高位
地址高位存储值的低位

继续阅读

发表在 PHP | 标签为 , | 留下评论

Des加密码解密算法

Erlang R16B01版本对crypto模块修改较大,有多个函数都被废弃掉,统一到通用的接口中。如DES加密码算法crypto:des_ecb_encrypt/2被归并到crypto:block_encrypt/2中。

R16B01 之前版本des加解密算法

R16B01版本则改到 block_encrypt/4, block_decrypt/4 中,

继续阅读

发表在 Erlang | 标签为 | 留下评论