月度归档:2009年03月

Install subversion-1.5.2 on Linux

1,Install Apache,APR and APR-util(http://apr.apache.org/)

#tar -zxf apr-1.3.3.tar.gz
#cd apr-1.3.3
#./configure
#make
#make install

#tar -zxf apr-util-1.3.4.tar.gz
#cd apr-util-1.3.4
#./configure –with-apr=/usr/local/apr/
#make
#make install

编译apache,加如下参数

–enable-dav –with-apr=/usr/local/apr/bin/apr-1-config –with-apr-util=/usr/local/apr/bin/apu-1-config

2. Install Neon(http://www.webdav.org/neon/)
neon is an HTTP and WebDAV client library, with a C interface.

#tar -zxf neon-0.28.3.tar.gz
#cd neon-0.28.3
#./configure –prefix=/usr/local/neon
#make
#make install

3. Install Subversion (http://subversion.tigris.org/)

#tar -zxf subversion-1.5.2.tar.gz
#cd subversion-1.5.2
#./configure –prefix=/usr/local/subversion –with-apxs=/usr/local/apache2/bin/apxs –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr –with-neon=/usr/local/neon
#make
#make install

编译过程中,发生如下错误

/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status

确认libexpat已经被载入

# ldconfig -p|grep expat
libexpat.so.0 (libc6) => /usr/lib/libexpat.so.0

做个链接,并重载libs,最后检查一下

#cd /usr/lib
#ln -s libexpat.so.0.5.0 libexpat.so
#ldconfig
#ldconfig -p|grep expat
libexpat.so.0 (libc6) => /usr/lib/libexpat.so.0
libexpat.so (libc6) => /usr/lib/libexpat.so

继续编译,通过,OY
4. 配置
打开apache的httpd.conf文件,查找下面两行内容,如果存在,则表示subversion已经安装成功

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

建立代码仓库及配置文件

#cd /usr/local/subversion/
#mkdir repos
#mkdir www
#touch auth
#cd repos
#svnadmin create myproject

通过apache的htpasswd工具创建用户,并按提示输入密码

#cd ..
#/usr/local/apache2/bin/htpasswd -c /usr/local/subversion/passwd kevin

编辑auth文件,写入以下内容,赋予此用户对于myproject的读写权限(例子很简单,更复杂的权限配置,请自己去查官方文档或google搜索“SVN权限”)

[/]
* = rw

[/svn]
* = rw

[/svn/myproject]
lirui=rw

配置apache,设置svn的工作目录

<Location /svn>
DAV svn
SVNParentPath /usr/local/subversion/repos
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /usr/local/subversion/passwd
AuthzSVNAccessFile /usr/local/subversion/auth
Require valid-user
</Location>

重启apache

总结:ldconfig及 LD_LIBRARY_PATH

为了装个nginx,在一个裸机上折腾了一宿。

也不知道是机器慢,还是的确如此,编译gcc花了快一个小时。。。很是吐血。

结果编译安装完成后,去编译其他东西,结果发现了找不到编译器的提示。。。

东查西找,左蒙右猜,终于把问题搞定了,问题就出在这个 LD_LIBRARY_PATH 上面

从别处摘抄总结一下。

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。

3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

LD_LIBRARY_PATH 的意思:告诉loader在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。在linux下,还提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,或则在/etc/ld.so.conf.d里创建一个文件,把目录加到这个文件里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。按照惯例,除非你用上述方式指明,loader是不会在当前目录下去找共享库的,正如shell不会在当前目前找可执行文件一样。

开始跟nusoap死磕并告一段落

 断断续续看了一下午nusoap的代码,晚上决把他生成wsdl格式文档的部分完善一下以适合自己使用
一晚上的努力,目前types部分已经完成了。。。明天继续

modify class.soap_server.php

add function addSchema()

modify class.wsdl.php

mod function addComplexType()

博士后和民工的区别

联合利华引进了一条香皂包装生产线,结果发现这条生产线有个缺陷:常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊,他们只得请了一个学自动化的博士后设计一个方案来分拣空的香皂盒。博士后拉起了一个十几人的科研攻关小组,综合采用了机械、微电子、自动化、X射线探测等技术,花了几十万,成功解决了问题。每当生产线上有空香皂盒通过,两旁的探测器会检测到,并且驱动一只机械手把空皂盒推走。
中国南方有个乡镇企业也买了同样的生产线,老板发现这个问题后大为发火,找了个小工来说:你他妈给老子把这个搞定,不然你给老子爬走。小工很快想出了办法:他花了90块钱在生产线旁边放了台风扇猛吹,于是空皂盒都被吹走了。

[转载]Mysql 数据库字符集

MySQL 4.1开始,对多语言的支持有了很大变化 (这导致了问题的出现)。尽管大部分的地方 (包括个人使用和主机提供商),MySQL 3、4.0 仍然占主导地位;但 MySQL 4.1 乃至5.0是 MySQL 官方推荐的数据库,已经有主机提供商开始提供并将会越来越多;因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题。

MySQL 4.1开始把多国语言字符集分的更加详细,所以导致数据库迁移,或则dz论坛升级到4.0后(dz4.0开始使用gbk或utf-8编码)出现乱码问题。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:
QUOTE:
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)

MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;
当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的;
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。
想要进行“正确”的存储和得到“正确”的结果,最方便的是在所有query开始之前执行一下:

SET NAMES ‘gbk’;
其中gbk是数据库字符集。

它相当于下面的三句指令:
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;

4.1和5.0默认使用的是latin1字符集(木头:妈的,老外真霸道,妄想让全世界都是使用瑞典字符集吗)
如果我们只想使用gbk字符集存储和获取数据,
我们在编译mysql 4.1和 5.0的时候,需要注意在my.ini或者my.cnf中添加两处参数
[mysqld]
default-character-set=utf8

#settings for clients (connection, results, clients)
[mysql]
default-character-set=utf8

下面我们来说主题,如何转换数据库字符集

更改存储字符集
主要的思想就是把数据库的字符集有latin1改为gbk,big5,或者utf8; 以下操作必须拥有主机权限。假设当前操作的数据库名为:database

导出
首先需要把数据导为mysql4.0的格式,具体的命令如下:
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt databse > d4.sql

–default-characte-set 以前数据库的字符集,这个一般情况下都是latin1的,
–set-charset 导出的数据的字符集,这个可以设置为gbk,utf8,或者big5
导入
首先使用下面语句新建一个GBK字符集的数据库(test)

CREATE DATABASE `d4` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
然后把刚才导出的数据导入到当前的数据库中就ok了。

mysql -uroot -p –default-character-set=gbk -f d4<d4.sql
通过以上的导出和导入就把数据库的字符集改为正确的存储方式了。

其中d4为新建库的名称,d4.sql为导出文件的名字

但是这种方法,发现数据库数据存储量无端变大30%,真是郁闷

来西安一周了

不知不觉,来西安已经一个星期了,时间是真快啊

这一周,是忙碌的一周,是战斗的一周

忙里偷闲,不停的四处品尝西安的各种美味,给我的感觉,西安的好吃的东西太多了~

各种“皮”不说,单是肉夹馍,我就连续三天拿来当午餐,而且居然顿顿吃的津津有味,满嘴流油。

周末本来是去一个不远的地方吃水盆羊肉的,可在一个西安的哥的忽悠下,改去了城里的“同盛祥” 品尝了所谓正宗的“羊肉泡馍”,其实说实话,感觉跟在路边吃的没什么不一样…… 回到家感觉有点添堵,来回打车的钱都快赶上这顿泡馍了。

记得刚下飞机的时候,拉我进城的司机刚把车开出机场驶上高速,就指着高速旁边的一个一个小土山说,这是谁谁的陵,那是谁谁的陵。西安给我第一个感觉就是,周边是个山丘土坡,就埋葬着几百上千年前的某个皇帝或者皇亲国戚。

来西安一个星期了,吃的也都差不多了,下一个目标,就准备各个著名景点四处逛逛了。

西安真是个好地方。