window下通过colinux安装linux环境

colinux安装linux资源占用非常少,比起虚拟机来强大不少。colinux与windows交替使用CPU,这样运行模拟环境就像运行本地系统一样,速度非常快,稳定性好。
colinux只能32位系统, win7 32位系统也能支持4G内存。所以windows 安装32位的比较合适。
到http://www.colinux.org 下载最新colinux和最新fedora镜像
1.安装colinux
2.解压fedora压缩包
3.修正fedora.conf文件(改为正确路径,网络使用tap,这个比较靠谱)
4. 将fedora.conf 拷贝到colinux安装目录
5. 再win7下设置网络共享,共享网卡选colinux的虚拟网卡就行
6. 运行colinux-daemon.ext -t nt @fedora.conf
7. 这样虚拟机就能正常运行了。进入虚拟机需要运行/etc/network restart 来获取新ip
8. 修改rc.loacl文件,加入:
/etc/init.d/newwork restart
mount -t cofs cofs0 /media/data

riak 安装

Riak是由技术公司basho开发的一个类Dynamo的分布式Key-Value系统。其以分布式,水平扩展性,高容错性等特点著称。
Riak的代码使用了一个叫做rebar(钢筋)的erlang构建工具,所以安装riak前需要先安装erlang. erlang最好自己编译,我用erlang rpm安装,最后riak无法启动。
erlang 安装:
1. 到http://www.erlang.org/download.html 下载erlang源代码
2. 编译安装
git 安装:
yum install git

riak 安装
1. git clone git://github.com/basho/riak.git
2. make rel
3. 将ip设置为正确ip etc目录下app.config vm.args
4. 将ring ip 修改为正确ip bin/riak-admin reip riak@127.0.0.1 riak@10.10.221.113
5. bin/riak start
6. 将新服务器加入到集群 bin/riak-admin join riak@10.10.221.114
7. 查看集群状态 bin/riak-admin member_status

erlang 学习

1. 变量不可变, 大写字母开头为变量, 如果X = 4, 那么X = 7 将报错, X=4才是对的
2. 原子,小写字母开头或者双引号开始的字串或者数值为原子, “a” = a
3. 元组和列表, 元组: {person, {name,{first,joe}, {last,armst}}} 列表:[{apple,10}, {milk,30}]
4. $s 可获取字母s的数值115, [107 -3, $e, $l, $l, $o] 代表 “hello”
5. f() 会在shell中释放所有绑定变量
6. c:cd(“/home”) 或者 c:ls() 可直接执行shell命令
7. lists:map() 或者 lists:filter() 或者 lists:member()
8. ex>Fruit = [apple, pear,orange].
ex>MakeTest = fun(L)-> (fun(X)->lists:member(X, L) end) end.
ex>IsFruit = MakeTest(Fruit).
9. 列表提炼 [2 *X || X <- L].
10. Erlang中只有8种基本的数据类型:
Integer、float、atom、reference、fun、port、pid、bitstring
同时提供2种复合结构:tuple,list,这就是Erlang的所有数据类型
11. Vim,加入vim-erlang 和 taglist 插件后就是一个不错的IDE
12. try 表达式
try Expr
catch
throw:Term -> Term;
exit:Reason -> {‘EXIT’,Reason}
error:Reason -> {‘EXIT’,{Reason,erlang:get_stacktrace()}}
end.
13. 在Erlang中小于等于是用=<表示,而不是一般语言中的<=语法
14. and or 和andalso orelse的区别
and和or会计算两边的表达式,而andalso和orelse的求值采用短路机制,比如exp1 andalso exp2,当exp1返回false之后,就不会去求值
exp2,而是直接返回false,而exp1 and exp2会对exp1和exp2都进行求值,or与orelse也类似
15. length([1,2,3,4,5).
16. size({a,bc)
17. atom_to_list(atom).
18. list_to_tuple([1,2,3,4]).

undefined reference to ‘pthread_create’问题解决


$gcc pth2.c
>/tmp/ccSgsXbF.o: In function `main':
>pth2.c:(.text+0x7f): undefined reference to `pthread_create'
>collect2: ld returned 1 exit status

pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程时候需要连接该库

$gcc pth1.c -o pth1 -lpthread

linux 文本处理杂记

很久都没更新博客了。最近一直忙于工作。总算有个时间间隔了。
grep -E 模式:
1. ^ 匹配行首的位置 ^Content匹配位于一行开头的Content
2. $ 匹配行末的位置 ;$匹配位于一行结尾的;号,^$匹配空行
3. < 匹配单词开头的位置 4. > 匹配单词结尾的位置 p>匹配leap …,但不匹配parent、sleepy
5. b 匹配单词开头或结尾的位置 batb匹配… at …,但不匹配cat、atexit、batch
6. B 匹配非单词开头和结尾的位置 BatB匹配battery,但不匹配… attend、hat …

常用的sed -n 命令
1. /pattern/p 打印匹配pattern的行
2. /pattern/d 删除匹配pattern的行
3. /pattern/s/pattern1/pattern2/ 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
4. /pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2

使用查找替换命令时,可以把匹配pattern1的字符串复制到pattern2中,比如:
$sed 's/bc/-&-/' testfile //pattern2中的&表示原文件的当前行中与pattern1相匹配的字符串

$sed 's/([0-9])([0-9])/-1-~2~/' testfile //pattern2中的1表示与pattern1的第一个()括号相匹配的内容,2表示与pattern1的第二个()括号相匹配的内容。sed默认使用Basic正则表达式规范,如果指定了-r选项则使用Extended规范,那么()括号就不必转义了。

awk
/pattern/{actions}
condition{actions}
$awk '$2<75 {printf "%st%sn", $0, "REORDER";} $2>=75 {print $0;}' testfile

some php tip

1.

<?php
list(,,$mid) = explode(',', 'a,b,c,d');
var_dump($mid);
?>

2.

<?php
$a = 0;
$b = 1;
 
switch(True){
	case $a:
		echo 'a';
		break;
	case $b:
		echo 'b';
		break;
}
?>

3. 变量交换

<?php
$a = 1;
$b = 2;
list($a, $b) = array($b, $a);
?>

4.

<?php
do{
     if(true) {
          break;
     }
     if(true) {
          break;
     }
} while(false);
?>

5.

<?php
 
$text = 'This is a Simple text.';
 
// 输出 "is is a Simple text.",因为 'i' 先被匹配
echo strpbrk($text, 'mi');
 
// 输出 "Simple text.",因为字符区分大小写
echo strpbrk($text, 'S');
?>

ssh 会话复制

通过ssh 已经登录服务器,如果再新开一个窗口,就还得再次输入密码. 对于linux和mac os用户有更好的处理方法,就是ssh会话复制,避免再次输入密码.
方法:
在~/.ssh/config 文件中加入:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

然后登录10.10.220.11,发现~/.ssh/目录中多了master-zhangwenjin@10.10.220.11:22文件,新开一个窗口登录10.10.220.11时候,发现不用再输入登录密码.

MongoDB Tailable Cursors 特性

MongoDB Tailable Cursors 可以让Cursors读取到末尾时候继续存在, 当有新数据插入时候,再读取数据. 这个特性跟tail -f很相似.

<?php
$mongo = new Mongo();
$db = $mongo->selectDB('my_db')
$coll = $db->selectCollection('my_collection');
$cursor = $coll->find()->tailable(true);
while (true) {
    if ($cursor->hasNext()) {
        $doc = $cursor->getNext();
        print_r($doc);
    } else {
        sleep(1);
    }
}
?>

php 迭代的一个源代码

直接上代码吧.

还可参考python的写法:http://blog.zhangwenjin.com/?p=196

python yield 学习

自己很喜欢的一种用法,直接上代码吧。

以下是用yield协程的一种用法:http://www.mikespook.com/index.php/archives/514