摘要: 我们公司的产品使用了erlang开发,可以在大多数的Linux发行版安装使用,我个人就在Ubuntu、Debian、SUSE等安装过。但客户使用的Linux发行版各种各样,网上环境也总是很诡异,期望一上线就可以使用那是妄想。这2天客户就整了个很久没用的服务器给我们安装,这次情况真的是很不一样,我觉得有必要记录一下。1. 系统是centos 4.4,已经停止了技术支持。这个系统版本太低,导致了后面的一系列问题。可能是因为当时的管理员不熟悉Linux,设置的分区更离谱,是我见过的最奇葩的分区方案。整个/分区就给了1G的空间,注意,这还是包括了/home目录在内的分区。反正我在使用过程中,经常报错。 阅读全文
posted @ 2014-03-21 11:57 格通 阅读(1376) 评论(6) 推荐(1) 编辑
摘要: 早前,在我的博文thrift多平台安装介绍了如何在debian/ubuntu下面安装thrift,并支持erlang开发的。而在CentOS平台下,并没有成功安装。经过不断摸索,终于成功了,这篇博文就是介绍如何在CentOS下编译安装thrift,并提供erlang开发支持。1.失败原因及解决方法我遇到的主要问题是,erlang的crypto模块在调用openssl的共享库的时候失败,从而导致编译thrift的erlang类库失败,整个编译过程无法继续下去。在erl终端输入crypto:start()就可以看到下面的情况[root@localhost 6]# /usr/local/bin/er 阅读全文
posted @ 2014-01-12 09:32 格通 阅读(2581) 评论(2) 推荐(1) 编辑
摘要: I think, thrift is a tcp/ip based Client-Server architecture multi-languages supported RPC framework.要使用thrift+erlang开发,要经过下面几个步骤。1.对thrift了解。thrift的功能的确是强劲,不过thrift缺少文档的确是它的硬伤,尤其是具体的语言的API文档更是缺少,网上基本上是java api的文档。下面是我收集的一些文档,对thrift的定义和使用都有具体的介绍,可以说是thrift的入门必备资料。Thrift: The Missing Guide有pdf文档可以下载 阅读全文
posted @ 2014-01-07 22:45 格通 阅读(2764) 评论(0) 推荐(0) 编辑
摘要: thrift支持多语言的RPC,一直都想深入学习了解thrift,最近有空,就上网查了些资料,学习了一下,对它的使用有了一些了解。本篇是写thrift的安装,使用方法会另起一篇来写。本文使用thrift的版本是0.9.1。1.windows平台安装直接下载编译好的exe文件,就可以使用了。下载链接在这里新建目录,C:\Program Files\thrift,把下载好的thrift-0.9.1.exe文件放在里面。把C:\Program Files\thrift添加到windows下面的环境变量,如下图现在使用thrift官网的例子来试试thrift是否正确安装。example.thrift文 阅读全文
posted @ 2014-01-07 11:48 格通 阅读(3926) 评论(2) 推荐(1) 编辑
摘要: 1.安装vagrant旧版本的vagrant可以在http://downloads.vagrantup.com/下载,支持的系统平台有mac,debian/ubuntu, centos,windows。如果要下载最新版本的vagrant,需要FQ。大家各自找FQ工具。2.下载已有的vagrant虚拟机。Vagrantbox.es: A list of base boxes for Vagrant网站有大家已经安装好的虚拟机。下载好了以后,添加虚拟机比使用vagrant联网下载虚拟机要简单很多,尤其在网络不好的情况下比较好。我选择Provider都是virtualbox系统的。3.安装virtu 阅读全文
posted @ 2013-12-28 20:25 格通 阅读(4798) 评论(3) 推荐(1) 编辑
摘要: erlang连接SQL Server使用ODBC方法,但在网络上还是缺少资料,自己折腾了2天才成功。现在特记录下来,以供大家借鉴。基本思路是erlang odbcserver + unixodbc + freetds,本文完全参考了Install ODBC and MS SQL Server Client for Erlang,大家可以移步看看。1.SQL Server 2008安装网上安装SQL Server 2008很多,我参考的是Win7 系统上安装SQL Server 2008一步一步图解教程2.使用用户密码登陆SQL Server 2008安装完成后,只能通过安装电脑上面的用户登陆, 阅读全文
posted @ 2013-12-14 17:50 格通 阅读(1420) 评论(0) 推荐(1) 编辑
摘要: erlang-db-driver是北京融易通公司开源的一个erlang支持众多数据库的一个驱动类库,据其wiki介绍,其支持MySQL, Oracle, Sybase, DB2 and Informix,功能不可不说强劲。公司的业务支持oracle,使用的是odbc方法,为了提高性能,特转换为使用erlang-db-driver。在使用的过程中,遇到了很多问题,不过通过邮件跟融易通公司的工程师联系,得到了他们的快速回复,解决了不少问题。本文是集合了我们联系的邮件而形成的一个概括文档。如果你们在使用erlang-db-driver有问题,不妨给他们发邮件,他们是很乐意解决你们的问题的。1.安装O 阅读全文
posted @ 2013-12-12 21:54 格通 阅读(1440) 评论(0) 推荐(0) 编辑
摘要: 前段时间,显示器出了问题,导致Debian下只有终端显示正常,桌面显示效果很是摇晃模糊.遂起了念头,能不能在终端下就能完成日常的工作.google了很久,终于知道fbterm可以在终端下显示中文,加上ucimf就可以输入中文了,效果还不错.这是使用了tmux,然后在vim里面编辑文字.使用截图工具是fbgrab.linux下就是工具多,功能强大.安装参考:Arch linux使用fbterm,ucimf作为中文终端linux文本模式下显示/输入中文Arch linux使用fbterm,ucimf作为中文终端问题解决:使用fbterm+ucimf导致alt+ctrl+f1(f2,f3...)使用 阅读全文
posted @ 2013-12-07 20:42 格通 阅读(1109) 评论(0) 推荐(0) 编辑
摘要: 1.克隆Debian系统 如果使用的Debian系统只有使用apt安装的软件包,可以使用下面的脚本来安装一个完全一样的新系统。#在源主机上dpkg --get-selections > selectfile#在另一台使用相同source.list的计算机上dpkg --set-selections < selectfileapt-get dselect-upgrade原文在P85.大家可以看看。2.使用rcconf配置启动脚本。 CentOS有setup工具配置启动服务,使用相当方便。在Debian中,rcconf就相当于setup。 rcconf没有预装到系统中,先安装:apt- 阅读全文
posted @ 2013-09-29 11:23 格通 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 1.在ubuntu下面安装mysql。apt-get install mysql-server mysql-client -y2.修改/etc/mysql/my.cnf文件。#bind-address = 127.0.0.1把127.0.0.1给注释掉。3.参考Mysql初始化root密码和允许远程访问,执行命令。mysql>use mysql;mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;mysql&g 阅读全文
posted @ 2013-09-26 15:30 格通 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 在使用Debian和Ubuntu时,经常为了软件源烦恼,最近发现了一个网页,可以根据国家来设置源的地址,效果还不错。Debian:http://debgen.simplylinux.ch/Ubuntu:http://repogen.simplylinux.ch/打开就可以看见,有国家、版本、系统架构等选项,还有一些第三方软件的地址。大家可以试试。以下是china wheezy 64bit的sourcelist:deb http://ftp.cn.debian.org/debian stable main contrib non-freedeb-src http://ftp.cn.debian. 阅读全文
posted @ 2013-09-24 11:01 格通 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 1.ejabberd监听多个端口每个网络连接进来,ejabberd都会使用一个进程来负责这个连接的数据处理。原理跟Joe Armstrong的《Erlang程序设计》中的并行服务器一样,就在P196,大家可以看看。相比于Joe的例子,ejabberd的代码更具有扩展性。在ejabberd_listener.erl文件中,start/3函数会根据要调用的模块的socket_type来启动相关的必备资源。在这个文件里面,假设是tcp连接,调用过程是,start/3 ->start_dependent/3 ->init/3 ->init_tcp/6 ->accept/3 ,最 阅读全文
posted @ 2013-09-17 22:47 格通 阅读(510) 评论(0) 推荐(1) 编辑
摘要: ejabberd是XMPP协议的一个实现,对大家的另一个意义就是,可以通过ejabberd来学习erlang。1.从源码安装ejabberd。可以参考ejabberd简明配置。这个博文包括了安装、配置以及其他的一些修改,大家可以去看看。2.ejabberd的配置文件ejabberd默认安装在根目录下面。/etc/ejabberd/ejabberd.cfg就是它的配置文件。里面的所有选项都是以erlang term的形式记录。这些选项会在启动的时候,读到local_config的mnesia数据库里面,然后在 ejabberd_config.erl里面,使用ets:lookup来读出。3.eja 阅读全文
posted @ 2013-09-16 22:09 格通 阅读(569) 评论(0) 推荐(1) 编辑
摘要: 租房用的是无线网络,在新安装的Debian 7 amd64使用的无线网卡型号是TP-LINK TL-WN725N 2.0,发现驱动安装还是有些问题,折腾了很久,特意在此记录一下。TL-WN725N 2.0是升级版,在网上搜索了很久,还是没有发现2.0的产品照。所有的包装盒使用的是1.0版本的相片,特意照了个2.0版本的相片放上来。 1.0版本谍照2.0版本谍照。自己照的相片不是很好,勉强能够看到网卡上面的数字。TP-LINK在推出这款升级版的时候,估计十分匆忙,随驱动的网络工具很不稳定,而且2.0的产品居然用1.0的包装,果断货不对版。几乎所有网店都是用1.0版本的相片,最近还有折扣,很容易. 阅读全文
posted @ 2013-08-13 12:03 格通 阅读(2584) 评论(0) 推荐(0) 编辑
摘要: Debian 7 发布了有1段时间,最近才在自己的电脑硬盘安装,用户体验还算可以。在安装Debian的过程中,有问题还是要记录一下的。注意:遇到的问题跟硬件体系相关,可能在个别电脑没法重现。1.默认安装的Debian桌面是DNOME 3,不过缺少firmware-linux-nonfree文件,导致桌面只能使用GNOME classic。没安装前,桌面是这样子的:通过dmesg程序可以知道firmware-linux-nonfree没有安装。安装后,重启机器后的桌面是这样子的:可以看出GNOME 3 有了很大的改变。刚开始接触的时候,发现不好用,改装了KDE,发现KDE也不够好。说起来,Ope 阅读全文
posted @ 2013-08-08 22:46 格通 阅读(1786) 评论(4) 推荐(0) 编辑
摘要: 以前在XP下使用virtualbox安装ubuntu虚拟机,配置网络连接很容易的。使用nat上网;使用桥接,主机能访问虚拟机。也就是配置2张网卡就可以了。在win7下面,完全不是一回事。使用nat能上网,不过桥接的网卡,配置就麻烦了很多。桥接使用静态地址,主机能访问虚拟机,不过会导致虚拟机访问不了网络,ping百度都没反应;桥接使用动态地址,虚拟机能访问外网,不过主机访问不了虚拟机。捣腾的过程,遇到了不少的麻烦。后来到网上放狗,找到了解决方法,在这里标记一下。简单的来说,使用host only + 桥接网卡。主机使用的是wifi连接,这个会导致你的问题和我的不同。打开控制面板 -> 网络 阅读全文
posted @ 2013-04-23 10:46 格通 阅读(6027) 评论(8) 推荐(1) 编辑
摘要: erlang会自动回收内存,不过有时候我们希望能够手动回收内存。在rabbitmq里面就提供了这样的代码,记录一下。gc() -> [garbage_collect(P) || P <- processes(), {status, waiting} == process_info(P, status)], garbage_collect(), %% since we will never be waiting... ok.这段代码在background_gc.erl文件里面。在erlang里面,xxx_info()函数几乎都... 阅读全文
posted @ 2013-04-17 18:27 格通 阅读(531) 评论(4) 推荐(0) 编辑
摘要: 标题完全是翻译,gorilla/mux is a powerful URL router and dispatcher,不过个人觉得翻译不到位,望指正。gorilla/mux包是加一层结构,在这个结构里面配置客户端访问时需要的各种参数,然后传给http.Handle()函数。如果各位有看我的博客,就会了解它的结构组成。先看一个它的例子:func main() { r := mux.NewRouter() r.HandleFunc("/", HomeHandler) r.HandleFunc("/products", ProductsHandler) r. 阅读全文
posted @ 2013-04-17 15:05 格通 阅读(6632) 评论(0) 推荐(0) 编辑
摘要: gorilla是用golang写的web工具箱,里面提供了一系列的工具。在用golang开发web中,搭配gorilla可以加快整个开发的进程。gorilla的官网在这里,代码托管在github,这里要看的是gorilla/context。在context文件夹里面,有个context.go文件,里面就是context包主要的代码。在context.go的开始部分,声明了几个全局变量,var (mutex sync.Mutexdata = make(map[*http.Request]map[interface{}]interface{})datat = make(map[*http.Requ 阅读全文
posted @ 2013-04-17 08:15 格通 阅读(2929) 评论(0) 推荐(2) 编辑
摘要: uniqush是一款用golang写的推送服务工具,它的介绍在这里。官网在这里,源码托管在github。uniqush现在的版本是1.4.2, 在我们国人用golang写的代码中,这个应该算是出类拔萃的。在main.go文件里面的main()函数,直接就运行Run()函数,它会返回一个error值。在configparser.go里面找到Run()函数的定义,里面运行了2个goroutine。1个goroutine是rest.signalSetup()函数,在类unix平台下,它会监控syscall.SIGTERM, os.Kill信号;在windows下,它会监控os.Kill信号。监控到信 阅读全文
posted @ 2013-04-16 18:22 格通 阅读(2495) 评论(0) 推荐(0) 编辑
摘要: Redis可以缓存数据,这使得操作数据可以达到一个较快的速度,在一些需要数据较快存储的场合,例如微博,redis发挥着不可替代的作用。在redis的官网,golang驱动有几个,忽然来了兴致,那个才是redis最佳的Go语言驱动?这些驱动都处于开发的前期,还没有发行正式版,有些已经很久没更新了。从更新日期来看,Gary Burd的radigo和gosexy的redis最近有更新,而且从他们的README文件来看,他们对redis的支持还不错。很有可能,他们两者会有1个胜出。但到底谁才是最佳的,这个现在还是不能判断。在gosexy的redis源码库中的有个_benchmarks文件,里面就是一些 阅读全文
posted @ 2013-04-01 13:24 格通 阅读(15710) 评论(6) 推荐(3) 编辑
摘要: 刚开始接触golang,可能对interface的使用有些迷惑,尤其在有些资料里,介绍得更是云里雾里,让人搞不清楚。本文尝试从类型转换的角度来解析interface,希望对大家能有所帮助。不多说,先上代码。package mainimport ( "fmt")func main() { var general interface{} general = 6.6 type_cast(general) general = 2 type_cast(general)}func type_cast(general interface{}) { switch ge... 阅读全文
posted @ 2013-03-30 17:45 格通 阅读(10349) 评论(0) 推荐(0) 编辑
摘要: golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。使用channel的案例可以参考我的博客:golang--使用channel来同步goroutine,这里要涉及的是锁机制,更具体的是sync.WaitGroup,一种较为简单的同步方法集。sync.WaitGroup只有3个方法,Add(),Done(),Wait()。其中Done()是Add(-1)的别名。简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。要注意的有一点。sync文档已经说明了的,The main goroutine calls Add to set 阅读全文
posted @ 2013-03-29 14:12 格通 阅读(16537) 评论(0) 推荐(2) 编辑
摘要: 在golang中,我们可以很轻易产生数以万计的goroutine,不过这也带来了麻烦:在运行中某一个goroutine异常退出,怎么办?在erlang中,有link原语,2个进程可以链接在一起,一个在异常退出的时候,向另一个进程呼喊崩溃的原因,然后由另一个进程处理这些信号,包括是否重启这个进程。在这方面,erlang的确做得很好,估计以后这个特性会在golang中得到实现。由此得到启发,我写了一个简单的程序,监控goroutine异常退出。package mainimport ( "log" "runtime" "math/rand" 阅读全文
posted @ 2013-03-29 13:23 格通 阅读(4023) 评论(0) 推荐(0) 编辑
摘要: 在Hacker News看到用Go达到Zero-downtime restarts,意思大概为零下线时间式重启,很早就知道nginx可以轻松做到平滑重启,一直都想用go来实现这样的功能。看了一下它的代码实现,所以有了这篇博文。项目名字叫goagain,地址在:https://github.com/rcrowley/goagain。该项目是一个类库,也就是package,在go开发的程序中添加这个package就可以轻松地重启程序。goagain会监控2个系统信号,一个为SIGTERM,接收到这个信号,程序就停止运行。另一个信号为SIGUSR2,接收到这个信号的行为是,当前进程,也就是父进程会新 阅读全文
posted @ 2013-03-26 17:52 格通 阅读(1569) 评论(0) 推荐(0) 编辑
摘要: 早就听说redis性能卓越,不过难以使用,但看了Hacker News的报道后,还是被它的难度吓倒了。原文标题:From 1.5 GB to 50 MB: The Story of My Redis Database,链接在这里:http://davidcel.is/blog/2013/03/20/the-story-of-my-redis-database/文章的内容简单的来说(英文水平不够,有错莫怪),刚开始,由于设计不好,redis的内存使用达到了1.5GB,服务器出现崩溃的问题。开始优化,把类似recommendable:users:1234:liked_beers这样的长组合健简化为 阅读全文
posted @ 2013-03-22 08:14 格通 阅读(1322) 评论(0) 推荐(0) 编辑
摘要: 用Erlang开发web,很可能就会使用到mochiweb。mochiweb使用16个Erlang式的进程来监听tcp链接,使得任何链接进来都会很快得到处理。Golang跟Erlang很像,在这里实现了一个类似mochiweb的tcp监控链接,一个简单的echo服务器。先看代码。 1 package main 2 3 import ( 4 "log" 5 "runtime" 6 "net" 7 ) 8 9 func main() {10 11 tcpAddr, err := net.ResolveTCPAddr("tcp&q 阅读全文
posted @ 2013-03-20 09:07 格通 阅读(2176) 评论(0) 推荐(0) 编辑
摘要: 在golang中同步goroutine有2种方法,要么使用channel,要么使用sync.WaitGroup,本文就是介绍如何通过channel来同步goroutine。先看代码。 1 package main 2 3 import ( 4 "os" 5 "os/signal" 6 "runtime" 7 "log" 8 "syscall" 9 )10 11 const NUM_OF_QUIT int = 10012 13 func main() {14 runtime.GOMAXPROCS( 阅读全文
posted @ 2013-03-19 21:41 格通 阅读(5684) 评论(0) 推荐(0) 编辑