Chapter 1. Asterisk ,The Architecture of Open Source Applications

chapter 1.Asterisk by Russell Bryant http://www.aosabook.org/en/asterisk.html 这章主要介绍了“电话交换机”asterisk的设计,虽然这个项目的历史悠久,Mark Spencer于1999,因为自己开的公司(Linux Support Services)刚好有这个需求–一个电话系统,但是有没有钱买,于是就自己弄了一个,后面发现该系统很受欢迎,他的公司便专心负责asterisk上来,并改名为Digium。   Asterisk的英文意思是指字符“*",Mark想通配所有的电话技术,包括模拟信号啦,数字信号啦,神马PSTN啦(public switched telephone network),voip啦,统统都可以接入到asterisk中。   一旦电话是通过asterisk系统进行拨打或者接听的,那么在这里就可以做很多事情了,比如电话录音,回放,10086里面烦人的语言系统,电话录音,语言邮件,语言识别,甚至实时翻译(老毛子打过来,听不懂怎么办,业务还得继续做啊)   系统架构比较简单清晰,有几个概念: channel,每一个呼叫相当于是一个connection,一个连接,呼叫方是一个channel,接听方是一个channel,asterisk在中间负责调度(channel bridging)。 frame,通讯的数据以”帧"来传递,帧有不同的数据类型,Voice、Video、Modem、Control等等, channel driver,很显然asterisk支持如此多的通讯协议,那就需要相对应的驱动来支持,扩展驱动只需用asterisk定义的抽象接口即可。 Dialplan Applications,主要是负责处理channel的,这里面就可以做很多事情,可以灵活组合多个应用来对一个channel进行处理。 后面还介绍了语音邮件是怎么收取的,网络监控,多线程处理,电话桥接等内容, 感兴趣的自己去看看吧,地址:http://www.aosabook.org/en/asterisk.html

Diving Into ElasticSearch (4) 安装配置

系列文章拖了几天思路全无,哎,先来个基础的吧。。。【安装配置】 其实ElasticSearch安装没啥好说的,因为ElasticSearch完全是零配置和“拆箱即用”,这对第一次上手ElasticSearch人来说绝对是福音,对于熟悉了ElasticSearch的人来说也可以省却很多多余的操作,总之一个字:帅。 首先,当然是下载,地址如下:http://www.elasticsearch.org/download/ 打开网页你可以看到长长的发布的版本号(我应该是从Version 0.5开始我的ES之旅的),ES的版本更新很频繁,作者kimchy根据社区的反馈会不断添加新的feature,bugfix也是神速,在irc里面提出之后,基本上马上就会有修复,实在是给力啊。BTW,现在最新版本又到了0.17.4,前几天又发布了几个版本,修复了一些bug。

php mysql bit类型处理

http://codeigniter.com/forums/viewthread/157028/#758143 http://www.dotcoo.com/post-101.html

php读取mysql列bit(1)列时获得的是一个二进制的数据,不是布尔值不是字符串也不是数字,所以不能正常使用也不能正常显示,可以使用ord函数把二进制数据转换为数字。 ord函数的作用就是将ASCII的字符转换为他们的字面值,对于二进制数字也有效。 ord函数能转换出来的最大的值是255,也就是一个字节,对于bit(8)以上的列不能正常转换。

安装NginxHttpAccessKeyModule

下载:http://wiki.nginx.org/NginxHttpAccessKeyModule#accesskey

vi nginx下面站点配置

重启nginx 站点下放置php文件测试一下是否正常工作。

nginx server status monitor

弄了个小东西来监控站点nginx status信息,没有找到现成的(轻量级的),需要的点击这里下载:NginxStatusMonitor 有简单的配置文件,两个参数:status地址,刷新时间。

至于nginx怎么开启status,看这里: http://wiki.nginx.org/HttpStubStatusModule 状态信息简单说明: active connections — number of all open connections including connections to backends server accepts handled requests — nginx accepted 16630948 connections, handled 16630948 connections (no one was closed just it was accepted), and […]

log4net udpappender 广播设置

配置文件里面添加:

如果要广播到局域网,你的ip段是192.168.1.X,则设置 为 文档说明在这里:http://logging.apache.org/log4net/release/sdk/log4net.Appender.UdpAppender.RemoteAddress.html 另外在windows7下,还因为ipv6的关系,如果使用localhost,可能得到的ip不是127.0.0.1而是::1,并且log4net目前貌似不支持ipv6的神址,所以必须host里面去掉ipv6的映射。

jps&jstack&jmap

jps: List your java processes jstack: Get the call stack for a given Java process jmap: Show Memory Map jinfo jps -mlvV jps -l -m

Diving Into ElasticSearch (3) 编写自定义分词插件

今天介绍下怎么样编写一个自己的分词插件,开始之前,先介绍下ES的项目结构: 分别介绍下吧: .idea:IDEA的项目配置文件 bin:可执行脚本文件 config:配置文件 gradle:精简版的gradle lib:里面主要放了sigar用来做资源监控 modules:ES主要模块在这里了 plugins:插件都放这里啦 plugins里面按类型分了好多目录,今天我们来看怎么自定义一个分词插件,所以放analysis目录里面。 我们先移植一个开源的IKAnalyzer到ES里面吧。 第一步,先在plugins下建立目录ik 完整路径如下:elasticsearch\plugins\analysis\ik 下面建立src目录和build目录、并建立文件build.gradle(内容从icu里面的build.gradle拷贝出来,然后做相应的调整,如下图所示) 第二步,新建目录src/main/java/org 第三步,在java下新建配置文件es-plugin.properities,里面一行指定当前插件的入口类(实现ES插件接口的类),如下图所示   第四步,在.idea目录里面,找到modules.xml,将我们自定义的module添加到工程中,注意路径,完了之后,会发现plugin下面的ik目录会变粗,说明该目录已经成为了项目中的一个module了。 第五步,在.idea/modules目录里面新建插件的配置文件如plugin-analysis-ik.iml,内容有下图所示 第六步,右键点击项目,选择Open Module Setting 应该会看到ik的模块配置,选中,然后分别设置目录的属性(有排除、源代码、测试三种),设置好之后如下图所示 第七步,在.idea/modules/里面的elasticsearch-root.iml加上一句,将我们的自定义module添加进去,如下图所示 最后一步,在elasticsearch根目录的setting.gradle文件里,添加一行来打包ik,如下图所示 配置的工作基本上到此结束,接着就是实现自己的AnalyzerProvider和AbstractPlugin了,具体代码可以看这里https://github.com/medcl/elasticsearch/commit/21abad12a0096173e8836dd042ca403751ab7ad1,就不一一列举了。 开始试验一下吧,默认bootstrap模式会加载所有插件,所有可以直接使用ik-analysis的插件。 curl –XGET http://localhost:9200/index/_analyze?text=%e8%84%91%e6%ae%8b%e7%89%87%e8%ae%a9%e4%bd%a0%e8%84%91%e6%ae%8b%ef%bc%8c%e7%a5%9e%e5%a5%87%e7%9a%84%e5%b0%8f%e8%8d%af%e4%b8%b8%e5%95%8a&analyzer=ik 通过服务端的日志,可以看到正确加载词库了。 刚刚分词的结果页出来了,ik正确加载了我自定义的词组“脑残片”,分词的结果也是正确的