svn working copy 版本

目前svn客户端已经升级到1.6,1.6版本库的文件结构已经做了调整。但一些ide集成的svn仍旧使用1.5,当再次用svn更新时候就会提示 This client is too old to work with working copy。
这个时候只要把svn working copy 降级即可。
d:\change-svn-wc-format.py E:\work\ 1.4 –force
第一个change-svn-wc-format.py是执行脚本
第二个E:\work\sadapter是工程路径
第三个1.4是要修改到的版本
第四个–force不是必须的,在执行失败的情况下可以加入此参数。
change-svn-wc-format.py 下载地址:http://dl.javaeye.com/topics/download/f3d6910a-2493-3682-bd66-9fa059a033f5

python pdb 基础调试

首先你选择运行的 py
python -m pdb myscript.py
(Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助
(Pdb) h
说明下这几个关键 命令

>断点设置
(Pdb)b 10 #断点设置在本py的第10行
或(Pdb)b ots.py:20 #断点设置到 ots.py第20行
删除断点(Pdb)b #查看断点编号
(Pdb)cl 2 #删除第2个断点
禁用断点(Pdb)disable 2 #禁用第2个断点
设置某个断点的count,当count为0的时候断点状态为active,count不为0的时候每一次进入断点时候count自减
(Pdb) condition 2 10 #当运行10次后激活断点2

>运行
(Pdb)n #单步运行
(Pdb)s #细点运行 也就是会下到,方法
(Pdb)c #跳到下个断点
(Pdb)l(ist) [first [,last]] #列出代码
(Pdb)a(rgs) #打印出当前函数的参数
>查看
(Pdb)p param #查看当前 变量值
(Pdb)l #查看运行到某处代码
(Pdb)a #查看全部栈内变量
(Pdb)(!) statement #执行代码
(Pdb) q(uit) #退出

php 二维数组排序

直接上代码

python 多进程的服务端

直接贴代码了。

将金士顿8GU盘制作为xp启动盘

  1. 下载UltraISOhttp://www.xdowns.com/soft/softdown.asp?softid=54865
  2. 下载xp iso安装文件
  3. 用UltraISO 打开 xp 镜像
  4. 选择 启动 -> 写入硬盘镜像
  5. 选择U盘,点击写入即可

搭建mysql master-slave replication

转载:http://www.sou5.cn/archives/606.html

本篇文章记录了如何搭建一个master-slave架 构的mysql数据库服务器,一般用于读写分离的场景下:master for INSERT/UPDATE/DELETE,slave for SELECT。
根据实战结果,在master-connect-retry=5的情况下,基本可以做到读写同步(可以打开slave的log文件来观察同步结果:tail -f /var/run/mysql/mysql.log)

基本信息

主库:192.168.1.1
从库:192.168.1.2
数据文件存放位置:/data/mysql
待同步数据库:除了mysql、test库以外的所有数据库

一、设置MASTER

1、修改my.cnf

#vi /etc/my.cnf
server-id=1
log-bin
binlog-ignore-db=mysql
binlog-ignore-db=test

2、赋予SLAVE权限帐号,允许用户在 MASTER上LOAD TABLE和LOAD DATA

mysql> GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO slave@192.168.1.2 IDENTIFIED BY ‘password’;

3、锁主库表

mysql> FLUSH TABLES WITH READ LOCK;

4、显示主库信息

记录File和Position,从库设置将会用到

mysql> SHOW MASTER STATUS;
+—————+———-+————–+——————+
| File          | Position | Binlog_do_db | Binlog_ignore_db |
+—————+———-+————–+——————+
| hathor-bin.001 | 79   |              | mysql,test         |
+—————+———-+————–+——————+

5、打包主库

# cd /data
# tar cvfz db.tar.gz db/

二、设置SLAVE

1、把数据库文件部署到slave服务器

# cd /data
# scp 192.168.1.1:/data/db.tar.gz
# tar xvfz db.tar.gz

2、解锁主库表

mysql> UNLOCK TABLES;

3、查看修改数据库文件夹权限

# chown mysql:mysql syncdb -R

4、修改my.cnf

# vi /etc/my.cnf
server-id=2
master-host=192.168.1.1
master-user=slave
master-password=password
master-port=3306
#Controls the retry interval. The default is 60 seconds.
master-connect-retry=5

Trouble Shoot

Mysql 5到这一步一般就ok了,如果遇到问题再看下面的

如果报错跟Position相关的错误,再手动设置一下File/Position信息
设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.1′,
MASTER_USER=’slave’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’mysql-bin.001′,
MASTER_LOG_POS=79;

启动SLAVE服务

mysql> slave start;

查看SLAVE状态

mysql> SHOW SLAVE STATUS;

Q:为何找不到binlog文件?
A:mysql会把binlog、log、errorlog放在与–pid-file相同的目录

Python-字符串操作方法

转载:http://www.sou5.cn/archives/636.html

字符串中字符大小写的变换:

* S.lower()   #小写
* S.upper()   #大写
* S.swapcase()   #大小写互换
* S.capitalize()   #首字母大写
* String.capwords(S)
#这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
* S.title()    #只有首字母大写,其余为小写,模块中没有这个方法

字符串在输出时的对齐:

* S.ljust(width,[fillchar])
#输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
* S.rjust(width,[fillchar])    #右对齐
* S.center(width, [fillchar])    #中间对齐
* S.zfill(width)   #把S变成width长,并在右对齐,不足部分用0补足

字符串中的搜索和替换:

* S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
* S.index(substr, [start, [end]])
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
* S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
* S.rindex(substr, [start, [end]])
* S.count(substr, [start, [end]])    #计算substr在S中出现的次数
* S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
* S.strip([chars])
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
* S.lstrip([chars])
* S.rstrip([chars])
* S.expandtabs([tabsize])
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

字符串的分割和组合:

* S.split([sep, [maxsplit]])
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
* S.rsplit([sep, [maxsplit]])
* S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
* S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

字符串的mapping,这一功能包含两个函数:

* String.maketrans(from, to)
#返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
* S.translate(table[,deletechars])
#使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译 表。

字符串还有一对编码和解码的函数:

* S.encode([encoding,[errors]])
#其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为”strict”,意思是UnicodeError。可能的值还有’ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
* S.decode([encoding,[errors]])

字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:

* S.startwith(prefix[,start[,end]])
#是否以prefix开头
* S.endwith(suffix[,start[,end]])
#以suffix结尾
* S.isalnum()
#是否全是字母和数字,并至少有一个字符
* S.isalpha()  #是否全是字母,并至少有一个字符
* S.isdigit()  #是否全是数字,并至少有一个字符
* S.isspace() #是否全是空白字符,并至少有一个字符
* S.islower() #S中的字母是否全是小写
* S.isupper() #S中的字母是否便是大写
* S.istitle() #S是否是首字母大写的

字符串类型转换函数,这几个函数只在string模块中有:

* string.atoi(s[,base])
#base默认为10,如果为0,那么s就可以是012或0×23这种形式的字符串,如果是16那么s就只能是0×23或0X12这种形式的字符串
* string.atol(s[,base])  #转成long
* string.atof(s[,base])  #转成float

用Python编写WEB服务器压力测试工具

别人写的,看着不错就引用。原文地址:http://www.xinqdian.com/index.php/archives/125/
自己也写过类似的。不过代码太丑陋了,就不贴出来了。大致思想一样,把压力最大的一些链接挑出来,一个劲的加线程数量,每台机器要加500线程以上都没问题。mac os 注意看下ulimit 是否有限制。

mysql MERGE Storage Engine

mysql Merge 引擎只能用于myISAM表的合并。它能把几个相同结构的表合并成一个表来查询。而数据和索引都还在原表中储存。
假设需要记录视频每天的播放数量,但由于记录数太大,只能一天一张表来记录,如果需要查询一个月播放次数最多的10个视频。这个时候就可以创建一个merge表把一个中的30表联合成一张表,然后一条语句就能查询出来。
例子:
在mysql执行以下sql:
CREATE TABLE EXISTS `t1` (
`id` int(11) default NULL,
`value` int(11) default NULL
) ENGINE=MyISAM;

INSERT INTO `t1` (`id`, `value`) VALUES
(1, 2),
(2, 3);

CREATE TABLE `t2` (
`id` int(11) default NULL,
`value` int(11) default NULL
) ENGINE=MyISAM;

INSERT INTO `t2` (`id`, `value`) VALUES
(1, 3),
(2, 5);

CREATE TABLE IF NOT EXISTS `t` (
`id` int(11) default NULL,
`value` int(11) default NULL
) ENGINE=MRG_MyISAM UNION=(`t1`,`t2`) INSERT_METHOD=no;

然后执行
SELECT * FROM t;
SELECT id, COUNT(*) FROM t order by id;

ssh -R 反向隧道

使用ssh -R 8022:localhost:22 -N username@server.com 就能在远程服务器打开一个端口8022,发送给这个端口数据将转发给本机22端口。
默认情况下远程服务器端口绑定在lo网卡上,所以只有远程服务自己可以使用8022端口。
如果需要其他机器也能访问服务器8022端口,需要这样写:ssh -R *:8022:localhost:22 -N username@server.com, 要开启这个选项需要服务器sshd config :GatewayPorts option is enabled(我自己没有成功)
我自己的使用情况:

  • 自己家里的电脑A和公司测试服务器B 都处于内网,正常时访问不到的。
  • 国外服务器C(server.com)
  • 电脑A 执行 ssh -R 8022:localhost:22 -N username@server.com
  • 电脑B 执行 ssh -R 8023:localhost:22 -N username@server.com

这样我在任何地方都能通过服务器C去访问电脑A或者电脑B