2008-12
30

在抓虾上看到一篇Web开发分析工具的文章(链接就免了),怎么远没有我用的东西好用呢? 还是介绍介绍我用的吧。由于平常开发只用FireFox,完成后再去调试IE, 所以这些工具绝大部分是针对FireFox的。

如果把Web通信从上到下分为许多层——XMLHttpRequest层,HTTP层,TCP层, 那么这些工具可以分别抓取每个层的通信数据进行分析,结合使用极其强大。

2008/12/31:另外可以参考daniel同学的Web开发常用工具一文,相信会大有帮助哦。

阅读全文 »

2008-12
19

经过两个多月的努力,这本名为《Web开发修炼之道——创建高可用性的Web内容》的书终于要与大家见面了。 这恐怕是国内第一本讨论可用性(Accessibility)的中文书籍——在豆瓣上搜索“可用性”, 找到的都是usability、availability等,没发现 accessibility。 可能这也是中国的网站在可用性方面做得很差的原因之一吧。

design-accessible-web-sites-cn.jpg

原书名为《Design Accessible Web Sites》(豆瓣链接), 书很不错,刚刚开始翻译时fcicq还在豆瓣上推荐了一把。不过我现在还没拿到书的ISBN, 所以暂时没法将中文版放到豆瓣上,抱歉。拿到时再补上吧。

简单介绍一下书的内容吧。可用性(Accessibility)就是说让网站能在任何平台、任何浏览器上运行, 并且残障人士也能毫无障碍地使用网站。这就要求开发网站时必须做到:

  • 符合标准(以便跨浏览器跨平台)
  • 为图片、视频等加上文字描述(供不支持图片的浏览器使用,同时考虑盲人所用的屏幕阅读器)
  • 使用易于阅读的字体和颜色(考虑弱视、色盲)
  • 使用简洁易懂的语言(考虑理解能力弱的用户)
  • 足够大的导航和链接(让运动不方便的用户容易点击)
  • 避免使用闪烁效果(防止诱发癫痫症)

不幸的是,国内的网站在这些方面做得极其差劲(原谅我用极其这个词), 特别是本该为残障人士周全地考虑的政府网站,在这方面简直是一片空白。 希望这本书能为国内的网站设计提供参考。

下面是本书的内容简介,请点开阅读。

阅读全文 »

2008-09
01

应该很多人都在为mod_perl的调试方法发愁吧。通常只能使用print,或者输出到syslog中, 但都需要猜测错误位置并添加相应的日志输出,然后重启服务器,刷新,看结果…… 虽然使用Apache::Reload能减少重启服务器的麻烦,但Apache::Reload用多了就会出错,而必须重启, 何况打日志总不像交互式调试器方便。

mod_perl的官方文档中写明了如何使用调试器来调试, 不过这个方法在RHEL4下似乎不太好用(自己编译mod_perl的同学就应该没这个问题)。 查看了一下,原来RHEL4自带的mod_perl是 mod_perl-1.99_16-4, 而在官方的mod_perl的下载页面上最高版本只有 1 系的 1.30 和2系的2.0.4,并没有所谓的1.99版。 看这个mod_perl-1.99的内容,应该是1系和2系的混合体吧。 Apache::DB这个包与mod_perl-1.99不兼容,于是就无法正常调试了。

阅读全文 »

2008-08
25

这篇文章,对于能看懂的同学是非常非常重要的资料,对于看不懂的同学就一点用处都没有啦。

调查一下mod_perl下BEGIN/INIT/CHECK/END等块的行为如何?

测试程序,保存为life.cgi:

#!/usr/bin/perl

print "pid = $$\n";
print "Start main running here\n";

BEGIN   { print "BEGIN\n"; }
INIT    { print "INIT\n";  }
CHECK   { print "CHECK\n"; }
END     { print "END\n";   }

如果直接执行就是这样的:

$ ./life.cgi
BEGIN
CHECK
INIT
pid = 4610
Start main running here
END

不论执行多少次,结果都相同(除了每次的pid不同之外)。但如果放到mod_perl下,结果就完全不一样了。 先单进程启动(httpd -X),再从浏览器中访问,结果如下:

BEGIN
pid = 4557
Start main running here
END

刷新一次,结果是:

pid = 4557
Start main running here
END

可见,mod_perl下没有INIT和CHECK过程,只有BEGIN和END。其中END在每次请求时必然执行, 但BEGIN只有在进程刚创建后的第一次请求时才执行,以后的请求就不执行了。

如果你用了 Apache::Reload,那么可以修改一下life.cgi试试看,哪怕是一点小小的改动也行。 修改之后刷新,可以看到BEGIN又回来了,不过再刷一次就没有了。 所以Apache::Reload会在重新加载程序后再执行一遍BEGIN。

根据上述结论再引申一下,use = BEGIN { requre + import }, 可以推断,在同一进程下两次加载执行了use的页面,那么第二次的use是不起作用的。



2008-08
17

memcached全面剖析的连载已经结束,翻译工作也已经全部完成了。 为了方便阅读,现将原来的翻译结果打包成PDF文档。可在本文末尾处下载。

原来的各篇翻译的地址如下:



2008-08
16

感光症癫痫(Photosensitive Epilepsy) 是一种罕见的癫痫症。高速闪烁的灯光、连续出现的图案、闪烁的视频,甚至树叶被风吹动时摇曳的影子都有可能会引起感光症发作。

感光症引起各国的重视,是由于1997年的口袋妖怪事件。 1997年12月16日,《口袋妖怪》第38话《电脑战士3D龙》在日本播出。该片为了表现电脑内部的爆炸效果, 而多次使用了红->蓝->红->蓝的高速颜色切换,导致日本全国约750名儿童被送往医院,其中150人需要住院治疗。 因此导致《口袋妖怪》被停播数月,恢复后,导致事故发生的主角“3D龙”也没能在电视中继续出现。

所以现在日本的动画片开头都会添加字幕,请观众在观看时远离屏幕,并打开室内灯光,以减少感光症发作的可能性。

而在2007年播放的一段2012年伦敦奥运会宣传片上,由于使用了闪烁效果,也导致了英国数人感光症发作。

下面这段视频就是被禁播的《电脑战士3D龙》。大家可以注意10:13、11:48、14:56、15:54和17:39的闪烁镜头。 不过,有感光症的读者还是不要看的好。

警告:以下视频包含强烈的闪烁,请在观看时自行承担一切责任。特别是有感光症癫痫史的读者请不要观看。

WARNING: The following video contains flicker effects. Please take responsibility yourself while watching. DO NOT watch if you have photosensitive epliepsy.

警告:下記のビデオに激しい光の点滅が含まれています。視聴は自己責任でお願いします。特に光過敏性症候群の方はプレイしないでください。

阅读全文 »

2008-08
15

今天在开发时突然apache无法启动了。表现为,输入 httpd -X 后片刻自动退出, 同时在error_log中有如下内容:

[Fri Aug 15 10:54:31 2008] [emerg] (28)No space left on device: Couldn't create accept lock

df一下发现不是磁盘空间的问题。Google了一下就找到了解决方案,原来是系统的信号量(?)不够用了。 用以下命令可以查看所有的信号量:

# ipcs -s
------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x00000000 19234816   nobody    600        1
0x00000000 19267585   nobody    600        1
0x00000000 19300354   nobody    600        1
0x00000000 19398659   nobody    600        1
0x00000000 19431428   nobody    600        1
0x00000000 19464197   nobody    600        1
0x00000000 19562502   nobody    600        1

然后用这行命令删除所有的信号量即可:

ipcs -s | grep nobody | perl -lane 'print `ipcrm sem $F[1]`'


2008-08
02

在写CGI时,有时需要检测当前的连接是否是https的,比如设置cookie时。 可以通过HTTPS环境变量来检测,在http下该环境变量不存在,https下该环境变量值为 on。

my $https = (defined $ENV{HTTPS}) ? lc($ENV{HTTPS}) : 'off';

然后在设置cookie时即可这样做:

my $cookie = new CGI::Cookie( -name   => 'foo',
                              -value  => 'bar',
                              -secure => ($https eq 'on') ? 1 : 0
                             );


2008-07
31

发表日:2008/7/30
作者:长野雅广(Masahiro Nagano)
原文链接:http://gihyo.jp/dev/feature/01/memcached/0005

前几次的文章在这里:

我是Mixi的长野。memcached的连载终于要结束了。 到上次为止, 我们介绍了与memcached直接相关的话题,本次介绍一些mixi的案例和 实际应用上的话题,并介绍一些与memcached兼容的程序。

阅读全文 »

2008-07
25

新版的MediaWiki(1.11.1)默认情况下文件上传是关闭的,不过打开它非常容易。

编辑LocalSettings.php,修改下面这一行为true即可。

$wgEnableUploads       = true;

之后页面左侧的“工具箱”中会多出一项“上传文件”,单击它即可上传文件。

但如果你要上传png格式的图片,就会发现,系统禁止了png类型的文件。调查includes/DefaultSettings.php的 $wgFileExtensions 变量, 可以看到png格式是允许的。但为什么无法上传呢?JPG和GIF都可以正常上传啊。

原因是MediaWiki会判断上传文件的MIME Type,并禁止某些类型的MIME Type上传。 而文件的MIME Type获取是通过php的mime_magic模块进行的, 默认情况下这个模块无法正确识别png格式,所以png图像就无法得到正确的MIME Type,于是上传失败。

在phpinfo()中可以看到这样几行文字:

mime_magic supportenabled
DirectiveLocal ValueMaster Value
mime_magic.debugOffOff
mime_magic.magicfile/etc/httpd/conf/magic/etc/httpd/conf/magic

得知mime_magic的配置文件是 /etc/httpd/conf/magic。打开此文件就可以发现其中并没有PNG格式。

在GIF和JPG文件的附近添加这样一行:

# PNG
1       string          PNG             image/png

然后重新启动httpd。这样PNG文件就可以正常上传了。