博文

通过Proxy连接Github

最近连接Github一直处于半死不活的诡异状态,速度是不快不慢的 于是今天这次要把整个项目都clone下来的时候就是真的卡到半残了…… 平均的下载速度降低到了20K作于的诡异速度……剩余时间成为了不可计算 于是没办法只能想办法走代理服务器 但是我手头只有erlang的一个socket代理,而很明显这个是无法让git支持的,于是先下载一个CCProxy做一个二级代理转发,把本地的Socket代理转换为HTTP代理,注意一下 我的git本身配置过了用ssh登陆,那么我必须要走ssh通道,也就必须要修改ssh通道的代理服务器设置 于是,打开git的Bash,运行 vim ~/.ssh/config 建立一个ssh的config文件,内容为: Host github.com ProxyCommand ~/.ssh/ssh-https-tunnel %h %p Port 443 Hostname ssh.github.com 然后下载:http://zwitterion.org/software/ssh-https-tunnel/ssh-https-tunnel 这个文件保存到 C:\Users\【你的用户名】\.ssh 然后 vim ~/.ssh/ssh-https-tunnel 修改: my $host = "127.0.0.1"; my $port = 【你的HTTP代理端口】; 然后就可以顺利的进行git clone了,通过ccproxy的监视器可以看到 CONNECT github.com:443 HTTP/1.1 HTTPS 就说明已经正确的通过代理了…… 我这边的表现是速度一下子从20K飙升到了250K+

ejabberd安装及与Flash客户端的通讯

首先去Github上把Ejabberd的代码clone下来: git clone git://github.com/processone/ejabberd.git 然后进入src文件夹 cd src 下载与flash通讯的补丁文件 https://support.process-one.net/browse/EJAB-960 下载对应的Diff文件并修改ejabberd_c2s.erl文件,然后编译安装即可 需要修改对应的Crossdomain.xml的内容可以自行修改这个diff文件

Linux下添加Service并自动启动设置

添加服务的主要命令是chkconfig 可以先在系统中庸chkconfig命令列出所有的当前自动启动的项目 添加的方法为(以redis为例): vim /etc/init.d/redis 内容为: #!/bin/sh # # redis        Startup script for redis # # chkconfig: - 85 15 # processname: redis cd "/home/worker/redis-db/" case "$1" in     start)         /usr/local/bin/redis-server redis.conf         ;;     stop)         /usr/local/bin/redis-cli -p 1500 shutdown         ;;     *)         /usr/local/bin/redis-server redis.conf         ;; esac 几个注意的地方: chkconfig: - 85 15 这句 后面的85是启动优先级,15是关闭优先级,我没有在这里设置启动级别,所以打了- 后面的命令是解析参数值,我只增加了对start和stop命令的解析,如果没有参数,那么默认是start,这个其实是没有仔细的去写的,理论上还可以添加restart命令之类的,可以按照格式随意添加。 然后保存此命令文本,设置它为可运行: chmod +x redis 然后设置它为自动启动 chkconfig --level 3 redis on chkconfig --level 4 redis on chkconfig --level 5 redis on 启动等级的解释如下: 0 为停机,机器关闭。 1...

Windows上的Erlang命令行快速启动

Erlang程序设计中文版中提到过,如果你把erlang的代码放在一个别的地方,那么你每次启动可能都需要运行 cd("c:/your_code_path")。 每次都需要运行一次,这无疑是很麻烦的一个事情。 于是作者也提出一个好办法,那就是在建立一个名为.erlang文件放在erlang的安装目录: 文件内容如下: io:format("consulting .erlang in ~p~n",           [element(2, file:get_cwd())]). c:cd("E:/WorkSpace/erlang"). io:format("Now in:~p~n", [element(2, file:get_cwd())]). 原书上说的是直接放在erlagn的安装目录就可以了,但是可能是erlang一直伴随着升级而书不可能跟着升级得那么快的缘故,现在把这么个文件放在形如:“D:\Dev\erl5.10.1”这样的安装目录下已经不起作用了。 真正的解决方法是放在安装目录下的/usr/文件夹下,形如:“D:\Dev\erl5.10.1\usr” 至于Windows下无法让你创建形如.erlang这样的文件的问题,直接找个Editplus之类的第三方编辑器然后用另存为的方式就可以了。

在CentOS上安装和启动Erlang

首先保证自己的系统中起码有GCC和GCC-C++吧 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 然后到这里去下载最新的源码包吧: http://www.erlang.org/download.html 解包编译安装: wget http://www.erlang.org/download/otp_src_R16B.tar.gz tar -xvf otp_src_R16B.tar.gz cd otp_src_R16B ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll make && make install 拷贝可执行文件到 /user/bin/ cd /usr/bin/ ln -s /usr/local/erlang/lib/erlang/bin/erl erl ln -s /usr/local/erlang/lib/erlang/bin/erlc erlc 这就完结了.. 启动的时候使用 erl +K true 这样就会打开核心的epoll模式了,否则会大幅度降低性能 没有打开epoll模式时: Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] Eshell V5.10.1  (abort with ^G) 打开epoll之后: Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:true] Eshell V5.10.1  (abort with ^G) 简单的方法是直接修改~/.bashrc 添加一行: alias erl='...

Ternado,同步与异步

图片
总所周知,Ternado是一个非阻塞的Web服务器,很多人因为它的高效性,因为它的短小精悍而选择使用它。同样的理由,我们也选择了使用它。但是在用了它快一年后的今天,我才发现我根本就没有使用到它真正的异步特性。 首先,什么是阻塞?什么是非阻塞?以下两张图就应该能够解释一切了: 阻塞(同步)模型 非阻塞(异步)模型 两个模型从图形上理解起来都很容易。一个是顺序执行,另外一个则是打乱顺序执行。 理论上讲,非阻塞的模型并不一定绝对拥有最佳的效率,但是它在外部调用频繁、涉及到多处IO请求的状况下,它理论上拥有更高的执行效率,因为它在同步处于等待状态下的时间段内它也依然在尽力的压榨着CPU的运算能力。而异步模型最大的问题就是频繁的在多个进程(线程)中调度过程中的CPU消耗。 那么按照Ternado中给出的示例代码的执行结果是什么? 你会惊讶的发现,它官网给出的所有代码执行出来的结果都是同步的。也就是说你根本无法真正的启用它的异步特性。 import time import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class BlockHandler(tornado.web.RequestHandler): def get(self): time.sleep(10) self.write("Final Over") application = tornado.web.Application([ (r"/", MainHandler), (r"/test/", BlockHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start() 做一个简单的试验,运行这个程序,...

Python中为什么要用is None来代替== None?

一直以来,我对于Pycharm提示我让我用is None来替代 == None这个判断表达式表示不是很理解。 直到我看到了《Python3程序开发指南》中的一句话: “身份比较的一个好处是速度非常快, 这是因为,并不必须对进行比较的对象本身进行检查,is操作符只需要对对对象所在的内存地址进行比较——同样的地址存储的是同样的对象。” 因为None是一个特殊的内置的空对象,所以所有的为None的对象都是指向的同一个内存地址的。所以用is None的速度也应该超过== None。 简单的试验一下: __author__ = 'Siglud' import time def testIsNone(): now = time.time() a = None i = 0 while i < 100000: if a is None: i += 1 return time.time() - now def testEqualNone(): now = time.time() a = None i = 0 while i < 100000: if a == None: i += 1 return time.time() - now if __name__ == '__main__': totalTime_isNone = 0 totalTime_equalNone = 0 for i in range(10): useTime = testIsNone() print 'TYPE:UseIS TestNum: %s, Time consumed: %s' % (i, useTime) totalTime_isNone += testIsNone() for i in range(10): useTime = testEqualNone() print 'TYPE:UseEqual TestNum: %s, Tim...