Monday, May 05, 2008

perl 调用 localtime 的时区问题

测试用例:
{
local $ENV{TZ} = 'UTC+0';
print scalar localtime, "\n";
}
print scalar localtime, "\n";

@CentOS 4.2
Mon Sep 24 01:05:52 2007
Mon Sep 24 01:05:52 2007

@CentOS 4.4
Mon Sep 24 01:05:52 2007
Mon Sep 24 09:05:52 2007

Bug 的详情可以参考
http://rt.perl.org/rt3/Public/Bug/Display.html?id=26136
摘要:
* threaded perl calls localtime_r(3) instead of localtime(3)
* localtime(3) calls tzset(3), but localtime_r(3) does not

一些时间类的模块受此影响,比如 Date::Simple。

CentOS 4.4/ Red Hat Enterprise Linux 4 Update 4 已解决此问题,详情见 perl 的 changelog:
$ rpm -q --changelog perl
* Thu May 11 2006 Jason Vas Dias <jvdias@redhat.com> - 3:5.8.5-30.RHEL4

- fix errata testing issues:
o bug 161305 localtime_r_needs_tzset incorrectly not set on 64-bit arches
o generate perl headers correctly to avoid missing / unresolved headers

* Thu Apr 06 2006 Jason Vas Dias <jvdias@redhat.com> - 3:5.8.5-28.RHEL4

- fix bug 161305: call tzset() before localtime_r

而 perl 的 community patch 应用于 perl 5.8.8 发布之后,此后发布的新版本目前只有 perl 5.10.0。

综上,有以下数种对应解决办法:
1、如果 OS 为 CentOS 4.4 以下,使用 yum 直接升级 perl 即可。
2、其他 OS 可以查找是否有相应的 vendor patch。
3、自行编译安装禁用线程(-Uusethreads)的 perl。
4、自行编译安装 perl 5.10.0。
5、给受影响的模块打补丁,Date::Simple 的补丁这里有。

相关链接:
小心时区陷阱(一)
小心时区陷阱(二)

Sunday, May 04, 2008

Apacheのログに携帯のユーザIDを記録する

iモードIDの登場に伴って、三キャリアのユーザIDはすべてHTTPリクエストヘッダから取れるようになった。Apacheの場合、下記ような設定でユーザIDはログに記録される。
SetEnvIf X-DCMGUID    ^(.+)$ User-ID=$1
SetEnvIf X-UP-SUBNO ^(.+)$ User-ID=$1
SetEnvIf X-JPHONE-UID ^(.+)$ User-ID=$1
CustomLog "logs/access_log" "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{User-ID}e\""

Monday, November 19, 2007

Cygwin 环境下安装 Gtk2

这里的 Gtk2 是指 Perl 的 Gtk2 模块,Cygwin 环境下通过 CPAN 是无法直接安装的,需要修改了 Makefile.PL 之后手动安装。
--- Makefile.PL 2006/11/06 00:35:44 1.1
+++ Makefile.PL 2006/11/06 10:24:38
@@ -331,10 +331,6 @@

# this probably needs to go into ExtUtils::Depends.
sub find_extra_libs {
- # right now we need this terrible hack only for windows.
- # unfortunately, this code doesn't work on cygwin. :-/
- return "" unless $^O eq "MSWin32";
-
# win32 does not allow unresolved symbols in libraries, but
# Gtk2 uses on symbols in the dll created for Glib.
# so, we have to break all this nice abstraction and encapsulation
@@ -346,10 +342,19 @@
my $retstring = "";

use File::Find;
- find (sub {
- $retstring .= " ".$File::Find::name
- if /Glib.lib/i;
- }, @INC);
+
+ if ($^O eq "MSWin32") {
+ find (sub {
+ $retstring .= " ".$File::Find::name
+ if /Glib\.lib/i;
+ }, @INC);
+ } elsif ($^O eq "cygwin") {
+ find (sub {
+ $retstring .= " -L".$File::Find::dir
+ if /libGlib\.dll\.a/i;
+ }, @INC);
+ $retstring .= " -lGlib.dll" if ($retstring ne "");
+ }

return $retstring;
}

这是 Dirk Froemberg 向 Torsten Schoenfeld 提交的 patch,到现在为止还没有被合并进 source。

参考链接:
http://bugzilla.gnome.org

Friday, November 09, 2007

寻找被占用的硬盘空间

收到系统邮件报警,有个分区的空间使用率已经超过90%
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda7 4.9G 4.3G 267M 94% /
/dev/sda1 99M 17M 77M 18% /boot
/dev/sda2 43G 8.8G 32G 22% /data
none 1.9G 0 1.9G 0% /dev/shm
/dev/sda6 4.9G 43M 4.6G 1% /home
/dev/sda5 4.9G 1.8G 2.8G 39% /usr
/dev/sda3 4.9G 1.5G 3.2G 31% /var

[root@localhost ~]# du -h -x --max-depth=1 /
8.0K /opt
2.0K /boot
5.7M /bin
4.0K /data
0 /proc
144M /lib
8.0K /initrd
11M /etc
8.0K /mnt
0 /sys
8.0K /selinux
2.2M /tmp
42M /root
8.0K /var
8.0K /srv
16K /lost+found
17M /sbin
16K /media
8.0K /usr
0 /dev
8.0K /misc
8.0K /home
4.2G /

[root@localhost ~]# ls -al /
total 174
drwxr-xr-x 24 root root 4096 Aug 16 01:23 .
drwxr-xr-x 24 root root 4096 Aug 16 01:23 ..
-rw-r--r-- 1 root root 0 Aug 16 01:23 .autofsck
drwxr-xr-x 2 root root 4096 Aug 23 04:02 bin
drwxr-xr-x 4 root root 1024 Aug 15 19:12 boot
drwxr-xr-x 5 root root 4096 Sep 20 16:41 data
drwxr-xr-x 9 root root 6540 Aug 16 01:23 dev
drwxr-xr-x 67 root root 4096 Nov 9 14:42 etc
drwxr-xr-x 9 root root 4096 Nov 9 14:42 home
drwxr-xr-x 2 root root 4096 Feb 22 2005 initrd
drwxr-xr-x 12 root root 4096 Oct 26 04:03 lib
drwx------ 2 root root 16384 Aug 16 03:43 lost+found
drwxr-xr-x 4 root root 4096 Aug 16 01:23 media
drwxr-xr-x 2 root root 4096 May 3 2007 misc
drwxr-xr-x 2 root root 4096 Aug 15 18:48 mnt
drwxr-xr-x 2 root root 4096 Sep 20 17:07 opt
dr-xr-xr-x 420 root root 0 Aug 16 10:22 proc
drwxr-x--- 6 root root 4096 Nov 9 14:42 root
drwxr-xr-x 2 root root 12288 Aug 23 04:02 sbin
drwxr-xr-x 2 root root 4096 Aug 15 18:43 selinux
drwxr-xr-x 2 root root 4096 Feb 22 2005 srv
drwxr-xr-x 9 root root 0 Aug 16 10:22 sys
drwxrwxrwt 4 root root 4096 Nov 9 22:36 tmp
drwxr-xr-x 16 root root 4096 Aug 15 18:45 usr
drwxr-xr-x 22 root root 4096 Aug 21 16:32 var

找来找去,找不到吃掉空间的文件,还是经过好友指点,学到了这个命令:
[root@localhost~]# lsof | grep deleted
logswatch 14767 zimbra 1w REG 8,7 1830440 384006 /tmp/logswatch.out (deleted)
logswatch 14767 zimbra 2w REG 8,7 1830440 384006 /tmp/logswatch.out (deleted)
......

意为列出已被删除,但仍被进程占用中的文件。然后就是处理(杀掉?)掉相关进程,释放文件,空间就回来了。

Thursday, September 27, 2007

MySQL Users Conference Japan 2007 講演資料公開

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

MySQL Users Conference Japan 2007 参加登録者の方へ

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

この度は、悪天候の中、MySQL Users Conference Japan 2007にたくさんの方にお越しいただき、誠にありがとうございました。カンファレンス資料を公開致しました。
http://www.mysql-ucj2007.jp/session/index.html

見逃してしまったセッション、もう一度見たいセッションがございましたら、ぜひお早めにダウンロードをお勧めいたします。10月31日まで公開しております。なお、都合により非公開の資料もございます。予めご了承ください。

次回 MySQL カンファレンスに対するご要望をお持ちの方は、ucj@mysql.com までお知らせください。


MySQL Enterprise にご興味のある方は、下記サイトでご紹介しております。
http://www-jp.mysql.com/products/enterprise/
MySQL Enterprise 30日トライアルも実施中です。

購入に関するお問い合わせは、03-5918-7507 までご連絡ください。

この度は、MySQL カンファレンスへのご登録およびご来場、ありがどうございました。

MySQL 株式会社

Thursday, September 20, 2007

Update your HTML::Parser

An example of using HTML::FillInForm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
...

after fill the form...
<!--DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
...

The declaration was changed which could cause problem in IE. It was fixed in 3.56 released in 2007.01.12.

Tuesday, September 11, 2007

MySQL Users Conference Japan 2007 - 1

今天是大会第一天,由于路线选择错误,我花了近两小时才抵达会场,台场真的是好远啊。

迟到了一小时,所以错过了 E11(MySQL 高可用性解决方案简介 by Jimmy Guerrero)。

所以就从 J12(使用 DRBD 和 heartbeat 搭建高可用性 MySQL by Patrick Bolduan of MTV Japan)开始了。介绍了一个的案例,2 个 MySQL Master 节点,heartbeat 管理共享的 Virtual IP 以及 MySQL 实例,DRBD 实现数据同步。
这个方案的优点在于不需要人工干预就能实现 failover,M/S Replication 架构如果不考虑事后重建 Slave 这档子事儿的话也算是可以自动化的。缺点是,2 个数据库节点只能用其中 1 个,稍微有些浪费资源。关于 DRBD,一个问题是它本身有开销,会导致 MySQL 性能有一定程度的下降,另一个问题是在数据量大到某种程度后,安全性并不是非常可靠,Patrick 介绍他们测试下来,50GB 左右还是安全的。我对 DRBD 几乎没什么了解,找时间看看。

接下来是 E13(MySQL Performance Tuning and Benckmark by Colin Charles of MySQL AB)。介绍了一下 Tuning 和 Benckmark 的方向和若干工具,因为多数内容都有所了解,基本没有留下笔记。Peter 的 mysqlperformanceblog 大家都说不错,值得常去逛逛。

最后是 E14(面向 Web 2.0 的 MySQL 架构 by Brian Aker)。讲的内容面比较广,这里就略了,有时间以后再补上。Brian 重点推荐了一下 EC2,记一下。

参考链接:MySQL Users Conference Japan 2007

Friday, September 07, 2007

Debug JavaScript in Internet Explorer

经常被提到的一个话题,才知道还有这些东西。

Microsoft Script Debugger
非常、非常弱的一个工具,只是聊胜于无。安装之后,要改一下 IE 的设置
unchecking Tools / Internet Options... / Advanced / Disable script debugging (Internet Explorer).

然后重启 IE 就可以在 View->Script Debugger 就可以调用了。在中断处呼出窗口后,能做的事情非常有限,还算有用的是 View->Command Window,输入变量或者表达式可以得到值。

Microsoft Script Editor
一个很像 Visual Studio 的脚本调试工具,但却是 Microsoft Office 的组件,如果你已安装,那么其路径应该是 %ProgramFiles%/Microsoft Office/OFFICE11/MSE7.exe。
它可以单独启动去绑定指定进程,也可以从 IE 呼出,不过这个需要安装 Microsoft Script Debugger,然后在调试窗口打开前有个弹窗可以选 Debugger 还是 Editor。
界面友好,功能也还可以,大家不妨试试。

其他还有重型武器 Visual Studio,好像是有组件调试 JavaScript 的,我没玩过,就不乱说了。

参考链接:
http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html
http://erik.eae.net/archives/2005/07/04/21.49.50/

Sunday, September 02, 2007

Patch for Jcode-2.06

Bug report: http://rt.cpan.org/Public/Bug/Display.html?id=29049

Bug detail:
1. According to RFC1522 as the document mentioned, I'm afraid it would be better to set $lf as \r\n instead of \n, which could cause some MTA like qmail working improperly.

2. The optional parameter $lf is not used in the function, although the document says it is.

Archive patched: Jcode-2.06-patched.tar.gz

Tuesday, August 28, 2007

不好用的 Cygwin 的 vi

一直以为 Cygwin 的 vi 特别不好用,特别是在输入模式(i)下,小键盘的表现很奇怪。
其实,是自己太菜了,在主目录下建一个 vi 的配置文件就万事OK了。
islue@localhost ~
$ locate vimrc
/usr/share/vim/vim71/vimrc_example.vim

islue@localhost ~
$ cp /usr/share/vim/vim71/vimrc_example.vim .vimrc