Entries Tagged as ''

Linux下的打字软件

昨晚上把以前的那台hp t308cn换了块硬盘
重装了个ubuntu7.04,又在线升级成了7.10
想让我老妈在家没事儿的时候用
可老妈没碰电脑1年多了,又得重新熟悉键盘
于是我就装了(英文)打字软件
看到网上说有ktouchtuxtyping
我就都装上了
使用起来发现
还是ktouch好用些
说好用些的意思就是说比起tuxtyping来讲还能用
而tuxtyping,也许是我不会用的原因
根本就用不下去
lesson1.xml(应该是lesson1的意思吧)还能选
lesson2.xml根本就选不了,直接跳出了

改php.ini使得php5兼容php4

今天
公司一同事告诉我需要把某两台机器的php换成php4
因为要在上面跑的某种软件是用php4写的
而且用了n多php5不支持的php4独特的写法
//咣当
我马上就有“以头抢地”的冲动了
这台机器可是我辛辛苦苦从fc3在线upgrade到fc4
再从fc4在线upgrade到fc5的呀!
5555555555555555
要php4的话为什么当时需求里没明确呢
唉,估计他们当时也不知道一定要php4
其实重编个php4也不难
只是,……
以后维护起来会相对会比较麻烦
其实最主要的还是我自己有倒坎坎:尽量使用官方发布的rpm包
于是我给了他2条建议:
1,下单让运维部门的人重装成fc3
2,内部找fc3的机器换一下
其实我的建议也是行得通的(当时我也不知道其实有更简单的解决方法)
重装也就20分钟左右的事情;而且内部也还是有很多的fc3的机器的
但别人马上就否了
说没法换,也不能重装
理由是烤了好多的软件上去了
我晕,不是都还没上线吗?没上线自己把服务再倒一倒也不是什么大事儿呀
……:(
扯远了
扯得跟技术没什么关系了
写这么多废话在这里只是想说明做support工作是多么的……
我这还是内部的support呢
如果是对外的话
nnd那可更难以想象咯

言归正传
后来一看php.ini文件,里面有一段是这么说的:

; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
zend.ze1_compatibility_mode = Off

于是
我们就打开zend.ze1_compatibility_mode,像这样:

zend.ze1_compatibility_mode = On

重起apache
居然就搞定了

MySQL配置文件my.cnf中的”init_connect”的用法

这两天折腾把一台机器的mysql(3.23.58)库倒到另外一台机器的mysql(5.0.27)库里的工作
而且最要命的是原来的库里的数据中有中文字符!
倒数据的时候倒还顺利
先在原来的库里mysqldump出来数据
然后在新的机器上用iconv转下编码(如果需要的话)
我的情况不需要,因为我的新环境差不多都已经设好了的gbk的编码
在mycnf中设置的有:

[client]
default-character-set=gbk

[mysqld]
default-character-set=gbk

然后用mysql dbname < filename.sql
这样倒入新的库里
数据成功的倒过来了
但是php程序挪过来后还有问题
因为php连mysql数据库,如果不显示的指明用什么编码来设置connection、results的话
缺省用latin1编码来设置其connection和results的属性
每个程序都改,都在连上mysql首先执行一句:

SET NAMES ‘gbk’

?
当然最好的办法是不用动程序咯
于是我找了找
发现从mysql4.1.2开始
配置文件my.cnf里开始支持参数:init_connect
比如:

[mysqld]
init_connect=’SET NAMES gbk’

这样每次连接过来的时候,首先就会去执行”SET NAMES gbk“了
这样就能避免每个php程序都要改
但是这种做法也不是完美无缺的
当拥有SUPER权限的用户连上来的时候,init_connect设定的sql语句是不会被执行的
用户”root”自然拥有SUPER权限
这里的权威文档来自官方
而我们的程序就有是用root连过来的!!!

最后只能想个折衷方案
让用root用户直接连的都改用普通用户连

pre-compress static content in apache2.x by using mod_header + mod_rewrite

以下内容放到httpd.conf文件的合适位置

RewriteEngine on
RewriteLog “logs/modrewrite.log”
RewriteLogLevel 9
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME}.gz -f
# send .html.gz instead of .html
RewriteRule ^(.+)\.(html|xml|css)$ $1.$2.gz [T=text/$2,E=GZIP:gzip,L]
# notice: the line above is used in httpd 2.2.x, not in the httpd2.0.x
# RewriteRule ^(.+\.xml)$ $1.gz [T=text/xml,E=GZIP:gzip,L]
# RewriteRule ^(.+\.css)$ $1.gz [T=text/css,E=GZIP:gzip,L]
# RewriteRule ^(.+\.js)$ $1.gz [T=application/x-javascript,E=GZIP:gzip,L]
Header set Content-Encoding gzip env=GZIP

再贴一个用yum升级fedora core的文档(fc5->fc6)

官方关于Fedora Core用yum升级的文档在这里
以下过程也是参照这个文档
然后在自己机器上的实际升级步骤(”xxx.xxx.xxx.xxx”是内网上的一台install server的ip地址)
yum clean all
cd /tmp
wget http://xxx.xxx.xxx.xxx/pub/os/Linux/Fedora/i386/6/RPMS.os/fedora-release-6-4.noarch.rpm
wget http://xxx.xxx.xxx.xxx/pub/os/Linux/Fedora/i386/6/RPMS.os/fedora-release-notes-6-3.noarch.rpm
rpm -Uvh fedora-release-6-4.noarch.rpm fedora-release-notes-6-3.noarch.rpm
yum update rpm\* yum\*

rpm -e kernel-*-6.15…….(将6.17以下的kernel的rpm都干掉)
rpm -e libgnome-java libglade-java glib-java libvte-java cairo-java libgtk-java frysk bind caching-nameserver NetworkManager(这里是解决upgrade的时候有可能会出现的Missing Dependency的情况的)
yum upgrade
reboot

That’s OK!

How do you pre-compress content(in apache)?

公司手头有几台apache(httpd2.x)的机器
主要是往外吐一堆的xml
其中最主要是一个300多k的大xml
原来为了节省流量
在服务器上打开了mod_deflate
但后来发现机器负载巨重(load>100甚至于更多)
于是就把mod_deflate关掉(mod_deflate的缺点导致的)
但是显然一把mod_deflate关掉,流量又得猛涨
难道就没有一种折衷的方案吗?
记得在n年前,sina的同学们说发布的内容页都是提供2个版本对外服务(一个压缩过的,一个未压缩的)
于是我就想能不能把这些巨大的xml文件预先压缩一下
来请求了局让apache直接取这个压过的版本呢?
于是就开始想办法
最后发现有n种方式可以实现

  1. Enable pre-compression with mod_gzip;http://schroepl.net/projekte/mod_gzip/config.htm#precompressed
  2. Use Apache rewrite rules to redirect requests (index.html) to the pre-compressed version (index.html.gz):http://www.webmasterworld.com/apache/3387947.htm
  3. Use PHP to redirect to the pre-compressed version;http://www.phpbuilder.com/tips/item.php?id=1128
  4. Use Apache feature MultiViews and apache module mod_negotiation

怎样改变ppc上跟pc用activesync同步的文件的确省目录

我的qtek s200(dopod 830),刷的wm6系统
跟pc同步的时候
pc上同步目录的东西总是同步到设备的\Storage Card\My Documents目录下
而不是确省的\My Documents
搞得我很郁闷:
本来跟pc同步一些files的内容,一个是在pc上能更好的编辑,
另一方面也算是在pc上对这些重要文件也算是有个备份
结果同步对应的设备目录居然在SD卡上!卡上的东西本身就是意味着一种备份
还需要频繁的跟pc同步吗?
于是把activesync翻遍了也不知道怎么办
后来偶然间在设备上打开注册表看的时候发现一个键值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows CE Services\FileSyncPath
当前是设的:\Storage Card\My Documents
于是我把其改为\My Documents
然后接上数据线
同步
居然就搞定了

Writing UNION statements in MySQL 3.x

mysql里,从4.0开始支持UNION语句
用来把不同的结果集合成一个
今天需要写个SQL语句
用UNION会非常简单,但是数据库是3.23的
于是就想3.x的mysql怎样替代union呢
于是去网上搜,还真找到了
Writing UNION statements in MySQL 3.x
这里,有点拿不准的就是表_dummy
直接用会发现说_dummy这个表找不到的错误
最后手工建了个表_dummy
还添加了2条记录:“0”、“1”
然后就搞定了

SELECT DISTINCT
IFNULL(d1.t1.ip, d2.t2.tsip) AS ip,
IFNULL(d1.t1.port, d2.t2.tsport) AS port,
IFNULL(d1.t1.cguid, d2.t2.channelid) AS cguid
FROM _dummy AS d
LEFT JOIN  d1.t1
ON (d.num = 0
AND d1.t1.ip is not null
AND d1.t1.port > 0
AND d1.t1.tport > 0)
LEFT JOIN d2.t2
ON (d.num = 1
AND d2.t2.tsport > 0
AND d2.t2.tsip != ”
AND d2.t2.tsip is not null
AND d2.t2.channelid != ”
AND d2.t2.channelid is not null)
WHERE d.num < 2
ORDER BY ip, port

Ctrl + Alt跳出vmware的虚拟机环境

在桌面机上也装了个vmware,用来跑ubuntu
点进去后,想把ubuntu升级一把
当其升级的时候
我想退出来到windows下做点别的
却怎么也退不出来
想上网去查
ubuntu还在升级
浏览器都没装
没法看
最后,问了个玩儿过vmware的同事
知道是按Ctrl + Alt两个键就退出来了

mysql的一个”bug”?

昨天帮忙解决了一台机器后台数据库连接问题
当时现象是这样的
正常连接连不上去
打开mysql控制台
show processlist一看
发现一堆的”unauthenticated user“在”login
重起mysql不多久
1000个链接马上就撑满了
当时怀疑是不是在被人尝试账号、密码来连数据库呀
会不会是sql注入呀
当时的想法现在想起来好天真哟
如果机器被别人搞了
数据库的账号密码都写在程序里的,一看就知道了,还需要这么去尝试取得?
后来搜了一下
发现有n多前辈也遇到过这种问题
他们称之为这是mysql的一个”bug”
是说当mysql的client连过来的时候,服务器会主动去查client的域名
要知道,我国域名反查工作做的非常之……落后
所以最终结果只是timeout而已
因此就会有大量的连接长时间的状态是login
用户名是“unauthenticated user

我昨天碰到的问题显然也是典型的这种问题
我们的机器是内网来连mysql数据库的
我们内网ip也没有做过ip->dns的反查
所以也会查不到而timeout咯

了解了问题发生的缘由解决起来就容易了很多
我把client的ip写在mysql服务器的/etc/hosts文件里
然后随便给他一个名字跟他的ip对应
show processlist
连接数一下子就下来了
而且用户名也不是”unauthenticated user“了,都是真实连接数据库的用户名
页面访问也都正常了

这里其实还有中解决方法
就是在启动mysql的时候加入参数:–skip-name-resolve
写在my.cnf[mysqld]段也可以