write down,forget
adidas eqt support ultra primeknit vintage white coming soon adidas eqt support ultra boost primeknit adidas eqt support ultra pk vintage white available now adidas eqt support ultra primeknit vintage white sz adidas eqt support ultra boost primeknit adidas eqt adv support primeknit adidas eqt support ultra boost turbo red white adidas eqt support ultra boost turbo red white adidas eqt support ultra boost turbo red adidas eqt support ultra whiteturbo adidas eqt support ultra boost off white more images adidas eqt support ultra boost white tactile green adidas eqt support ultra boost beige adidas eqt support ultra boost beige adidas eqt support refined camo drop adidas eqt support refined camo drop adidas eqt support refined running whitecamo adidas eqt support 93 primeknit og colorway ba7506 adidas eqt running support 93 adidas eqt support 93

Graphite修改默认端口

<Category: DevOPS>

graphite默认使用8080端口,被占了,如何修改呢?

vi /opt/graphite/bin/run-graphite-devel-server.py

修改8080为你的端口就行了。

启动graphite-web

django修改方法
python manage.py runserver 80
python manage.py runserver 0.0.0.0:80

本文来自: Graphite修改默认端口

ESCC#1 ElasticSearch国内开发者线下交流活动

<Category: Diving Into ElasticSearch, 小道消息>

第一届elasticsearch国内开发者线下交流活动圆满结束了,尽管当天外面下着小雪,还是到场了30几位童鞋,甚至有不远从天津远道而来的,感谢大家的捧场,另外还要大力感谢人人网的饶兄,是他提供的场地。
这次线下交流吧,说是线下交流,其实主要是我给大家做培训,希望下次再搞线下交流,一定要多一点人分享,好东西,要分享。
下面是培训的内容,第一部分是基础的关于ES的介绍,后面的部分是ES分布式架构设计和调优的一些东西。
以前是参加过各种交流活动,但是组织这个线下交流活动还是头一次,哈哈,最后应该合影留念的,哎,搞忘记了。

示例程序及fiddler调试记录下载:
misc




Elastic Search Training#1 (Brief Tutorial)-ESCC#1

ElasticSearch Training#2 (Advanced Concepts)-ESCC#1

本文来自: ESCC#1 ElasticSearch国内开发者线下交流活动

FreeSwitch工作的3种模式

<Category: FreeSwitch>

阅读这篇文章的其余部分

本文来自: FreeSwitch工作的3种模式

Multi Field Type 介绍及使用方法

<Category: Diving Into ElasticSearch>

洋洋洒洒写了几千字,结果发布提交丢了,很郁闷。
捡起来重新写吧,尼玛。

翻译了一下multi-field,在线在这里http://www.elasticsearch.cn/guide/reference/mapping/multi-field-type.html
以后翻译的文章都贴到博客里面吧,省的藏得太深,大家都找不到。
博客里面会补充详细的使用方法。
下面是multi-field的介绍:

阅读这篇文章的其余部分

本文来自: Multi Field Type 介绍及使用方法

freeswitch&ESL事件处理

<Category: FreeSwitch>

FreeSwitch里面有一系列的事件,有通道级别的,如channel的创建、销毁、挂断、接听,又或者freeswitch系统级别的事件,如重新加载xml配置文件,freeswitch服务关闭等等,都有相应的事件发出,你使用mod_event模块,并订阅相应事件。
完整的事件列表:http://wiki.freeswitch.org/wiki/Event_List

有了这些事件之后,你就可以灵活控制freeswitch了,非常灵活,在通话的每个阶段,处理相应的业务逻辑,想实现什么功能都没有问题了,比如计费、入库、定时提醒、强插、转移,各种复杂的业务逻辑基本上都能实现,哈哈,嗷嗷强悍。
阅读这篇文章的其余部分

本文来自: freeswitch&ESL事件处理

freeswitch桥接

<Category: FreeSwitch>

话务落地之后的号码桥接,实现软电话号码之间,传统电话之间,软电话与传统电话之间的桥接,ESL命令如下:

ref:http://wiki.freeswitch.org/wiki/Freeswitch_IVR_Originate

本文来自: freeswitch桥接

freeswitch对接sip trunk实现话务落地

<Category: FreeSwitch>

下午尝试了下对freeswitch的话务落地,在网友的帮助下终于对接成功,期间遇到不少问题,注意是端口不一致的问题。
一般sip trunk服务提供商会提供有需要密码和不需要密码两种,对方都会询问你的ip和端口来进行绑定,并提供一个ip给你。
下面是不需要密码的配置方法。

1.添加sip 代理网关,注意是external下面:
/usr/local/freeswitch/conf/sip_profiles/external/gw1.xml

2.添加一个dialplan:
/usr/local/freeswitch/conf/dialplan/default/call_out.xml

3.使用sip账号登陆,呼叫以0开头的手机号码就可以拨通了。
注意服务端必须打开对应端口的权限。
对接的过程中如果不能确定到底是那方出现了问题,可以在fs端抓包进行分析,看往来请求,sip协议类似http,很好分析。
使用tcpdump来抓,然后wireshark看就行了。

本文来自: freeswitch对接sip trunk实现话务落地

发布俩elasticsearch插件

<Category: Diving Into ElasticSearch>

中文简繁体转换:
https://github.com/medcl/elasticsearch-analysis-stconvert
简体和繁体互相转换,比如可以通过简体来查找繁体的文档内容,或者通过繁体来在简体文档里面查找,或者不区分简繁体实现查询功能。

字符转数字:
https://github.com/medcl/elasticsearch-analysis-string2int
思路很简单,如果你的term或者field都是中文的短语,并且唯一的term很多,在做facet的时候,内存占用将会非常高,一般来说,做facet的字段的值,都是不经常变的,可以理解为常量,或者理解为实体(entity),当内存不够的情况下,会大大影响查询的效率,另外集群内带宽开销也是大大的,但是如果转换成数字来存储,即把相同的词语或者短语,通过词典,映射为唯一的数字id,然后使用数字来做标示,内存使用量会急剧下降,在客户实际的使用中,使用string2int之前,做facet查询,需要耗费10G+以上的filedcache,使用string2int之后,内存可在100M内,效果非常明显,另外查询速度也是从几十秒甚至几分钟或者直接出不来,直接变成到ms级别,效果很不错。

本文来自: 发布俩elasticsearch插件

lua-resty-weedfs 1.0

<Category: lua>

号外:weedfs小文件后处理服务程序发布鸟。。

github地址:https://github.com/medcl/lua-resty-weedfs

最近研究了下resty,发现lua和resty使用起来真是简单粗暴啊,简单的写了一个用来后处理weedfs小文件的服务,目前提供了图片的缩放和语音的转换。
缩略图和语音都是在线实时转换,速度很快。

小文件存储使用weefs,简单方便,性能不错,适合存放图片文件和语音文件,
图片请求一般还需要缩略图处理,使用graphicsmagick.org,语音一般还需要格式转换,那就用ffmpeg,这些都集成到了一起就是 lua-resty-weedfs了。
服务端使用openresty,简单介绍就是基于nginx的集成了lua脚本运行环境的的功能完整的版本。

相关程序附链接:
weedfs(http://code.google.com/p/weed-fs/)是一个小文件服务器,最近支持了副本功能,很不错,然后resty(http://github.com/lzyy/resty)是一个基于nginx,封装了lua语言引擎及一系列常用包的nginx发行版。
graphicsmagick(http://graphicsmagick.org)是一个图片缩放程序,支持各种图片格式,ffmpeg(http://ffmpeg.org)是一个语音视频转换程序,也是支持多种格式。

使用方式:
1.上传图片文件
2.返回图片地址
3.访问图片
原始图片:http://192.168.1.1/img/orig/3,2711f0c5341e.png
80×80格式:http://192.168.1.1/img/80×80/3,2711f0c5341e.png
100×100格式:http://192.168.1.1/img/100×100/3,2711f0c5341e.png
500×400格式:http://192.168.1.1/img/500×400/3,2711f0c5341e.png
等等,格式自定义,或者固定限制为几种。

语音文件类似,访问地址有点变化
原始文件:http://192.168.1.1/audio/orig/3,2711f0c5341e
mp3格式文件:http://192.168.1.1/audio/mp3/3,2711f0c5341e

视频在线转换,理论上也是可以做的,只是目前没有实现。
转换需要临时目录来存放文件,可以是系统的shm内存盘来提高速度,定期进行清理即可

附内存盘操作方法,内存盘可用来存放临时文件,提升速度,处理完原始文件之后,可以直接删掉,处理之后的小文件,可以缓存起来,另外建议在前端再加一层通用的静态文件缓存层,如varnish。

本文来自: lua-resty-weedfs 1.0

zabbix agent自动部署

<Category: DevOPS>

使用方式:
#./zabbixagent.sh 10.112.1.1 10.112.1.2
第一个参数为zabbix服务器地址,第二个为本机zabbix agent监听ip
建议替换脚本中zabbix agent安装包围内网自己的下载服务器地址,提升安装速度
验证测试通过:zabbix-2.0.2

本文来自: zabbix agent自动部署