今天早上登录雅虎邮箱看到的提示

28 十二月, 2006 (09:41) | Uncategorized

Screenshot-The page at http:--cn.mail.yahoo.com says:.png

29日更新
Screenshot-The page at http:--cn.mail.yahoo.com says:-1.png

低调,低调──Unobtrusive Javascript

30 十一月, 2006 (00:47) | Web Design, javascript

“低调,低调”是《武林外传》里面的李大嘴的名言,把“Unobtrusive”这个词翻译成低调,有点草根味道吧,嘿嘿。

今天从Realazy大侠的一篇blog上看到“Unobtrusive Javascript”这个概念,上google搜了一把,查到这个非常好的讲解“低调javascript”的网页,粗略看过之后,感觉受益不浅。

Javascript绝对是网站开发必不可少的利器,尤其是在ajax大行其道的今天,但是由于很多原因(比方说,安全原因,浏览器对 javascript的支持原因,对我自己而言更多的是缺乏经验的原因,等等),有时候反而会影响用户的体验(accessbility和 usibility),甚至使影响开发和重构,所以在使用javascript技术的时候要千万小心。

以我的理解,低调,就意味着不在非必要的时候使用,好钢用在刀刃上,用正确的技术解决正确的问题,一般可以用xhtml和css解决的问题,没有必要用javascript去做。

Unobtrustive Javascript非常明显的一个特征就是,即使你的Javascript代码失效了(比如用户禁用了javascript),而你的网站仍然是可以访问的,最简单的例子就是我们常在前台对用户输入的信息进行检查,即使这些检查非常严格(或者说精确),我们依然要在后台进行检测。前台的检测是为了减少和后台交互的时间,但却不是可以完全依赖的(not rely on)。

在http://www.onlinetools.org/articles/unobtrusivejavascript/ 的网站上还介绍了不少有效的方法,比方说:

除非非常特殊的情况,否则不要将javascript代码嵌到html代码中,这点的好处应该非常明显。

Javascript是一种“可无”但绝不是“可有可无”的技术,有效地使用javascrit可以增强用户体验,但是滥用会适得其反(这句是对所有技术都有用的废话)。

尽量使用浏览器都支持的w3c标准方法(这句也是废话)。IE7的出世意味着标准之战将会是一场持久战,收集一些必要的hack技术还是很有必要的:(

Using JavaScript for good, not evil这篇文章还举了个例子,如果点击一个link需要弹出一个窗口,怎么样才是Unobtrusive的呢?
答案是给这个link定义一个class,在js里面用dom去找到这个link,添加onclick方法,而这个方法在页面加载的时候被调用。如果你有1000个link分布在500个页面里面,需要相同或者类似的方法,这样做的效果是不是很明显?

django的middleware执行顺序

28 十一月, 2006 (13:22) | django

今天总算弄清了django中的middleware执行顺序是什么了,假设我的settings.py中设置的middleware顺序如下:

MIDDLEWARE_CLASSES = (
    "django.middleware.common.CommonMiddleware",
    "django.contrib.csrf.middleware.CsrfMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.transaction.TransactionMiddleware",
 )

那么,在处理request的时候顺序是从上往下的,即CommonMiddleware的process_request方法最先执行,最后执行的是TransactionMiddleware的process_request。
但是处理response的顺序正相反,TransactionMiddleware的process_response方法先被调用,最后被调用的是CommonMiddleware的process_response方法,类似后进先出的堆栈。

还有一点要注意的是,CommonMiddleware的process_request方法里面有对url进行处理,处理之后就redirect了,那么之后下面的middleware的process_request就不会再执行了,而是调用process_response方法(顺序是从下往上)

在写middleware的时候犯了很多错误,这个middleware的执行顺序问题被review了两遍才认识到,记下来免得以后犯同样的错误。

Move a directory out of svn control

25 十一月, 2006 (23:05) | subversion

To move a directory out of svn control, you can use svn:ignore property, just like move a file out of svn control, for example, if I want to move meta directory out of svn control:

cp -r meta meta.back
svn propedit svn:ignore meta .
svn ci -m "move meta dir out of svn control"
mv meta.back meta

And next time you using “svn st”, you will not see the meta dir with “?”.

emacs & svn

24 十一月, 2006 (00:50) | subversion, emacs

Emacs是我最喜欢的编辑器,我非常喜欢在emacs下做所有的工作。由于Emacs强大的可扩展性,有很多插件可以帮助实现各种各样的功能,比方说在emacs中操作svn。

过去我一直使用emacs的shell mode作为我的terminal,如果提交代码的话,一般是执行

emacs -ci xxx.py -m “comment…”

不过这样有个缺陷,就是我的comment必须是一行,有时候要想写的详细一些,加分段、结构什么的,就没有办法了。这样对别人review我的代码很不利,而我又不想再开一个终端去提交,终于让我找到psvn这个插件,可以很方便地执行svn命令,而不用离开emacs了。

最新的psvn.el可以从这里下载(用svn:))

http://svn.collab.net/repos/svn/trunk/contrib/client-side/psvn/psvn.el

我放到了~/.emacs.d/site-lisp/psvn目录下,既方便管理,又利于更新。然后配置你的.emacs文件,添加下面两句:

(add-to-list ‘load-path “~/.emacs.d/site-lisp/psvn/psvn.el”)
(require ‘psvn)

这样每次启动emacs的时候都会自动载入psvn插件。

psvn使用也很简单,M+x svn-status,会提示你选择svn-status的目录,然后emacs会打开一个buffer,显示目录下所有的目录和文件。

这时候可以用光标选择要编辑的文件,按回车进入编辑状态,编辑完之后,M+x svn-status-commit,会有buffer提示你写comment,你可以详细地写你的修改,就像编辑普通文件一样,编辑完后,按C-c C-c,进行提交。

有时候提交会报错,

error in process sentinel: Unknown action ‘unknown for emacs

但是并不影响提交,我发现如果一开始设置svn-status的目录是你svn的根目录的话,就不会出现这个错误;如果在子目录下,就会出现这个错误,可惜我lisp一窍不通,没法调试,不过似乎影响不大。

以上是我做得一点最最基本的测试,以后在工作中边用边学吧,有好的技巧我会写下来。

移动硬盘和SCSI device support

23 十一月, 2006 (00:32) | gentoo, linux

今天发现我的gentoo系统不能挂载移动硬盘了,怀疑是编译的内核出了问题,查了一下,果然在”Device Drivers”->”SCSI device support”中有一项”SCSI disk support”没有选上,选上了之后,重启用新的内核,就能够顺利挂载了,截了两幅图,说明一下,以后编译内核的时候一定要记得将”SCSI disk support”编译到内核当中。

第一幅图片是”SCSI disk support”的说明:

Screenshot-wangbin@wangbin:~-1.png

第二幅图片是这个选项的位置:

Screenshot-wangbin@wangbin:~.png

Gentoo下简单地升级内核

22 十一月, 2006 (00:02) | gentoo, linux

今天gentoo的内核升级到了2.6.18-r3,刚好前两天zhllggentoo中文wiki上发了一篇编译内核的指南,经过尝试,除了那个通用的grub配置没有成功,别的都很顺利,甚至出乎我的意料。

最有用的一条命令就是make oldconfig,这个命令会根据旧的配置生成新的配置文件,如果新内核有新的选项,会给你提示,像从r2到r3这样的升级,根本不需要再从头配置,执行一遍make oldconfig,新的.config文件就生成好了,接下来就可以做 make && make modules_install了。

那个号称一劳永逸的grub配置在我这里没有成功,以后有时间要研究一下wildcard的写法。

gentoo 2006.1下设置nameserver

10 十一月, 2006 (00:33) | gentoo, linux

这次安装gentoo 2006.1,遇到一个奇怪的问题,就是我在/额头擦/resolv.conf中设置了nameserver 192.168.0.1,但是每次重启,这一行都没有了,不得不再次手动设置一遍,让我很是郁闷,明明照着handbook上来得,以前的版本都好好的,不知道为什么现在会这样?

查了一下论坛,结果真有人问同样的问题,解决办法是在/etc/conf.d/net中加一行

dns_servers_lo=”192.168.0.1″

就好了,又查了一下安装手册,确实没有提到这一点,记下来免得以后再遇到同样的问题。

firefox2明天发布

23 十月, 2006 (15:47) | news, Uncategorized

firefox 2正式版明天发布,值得记下来。不过我现在已经在用RC3了,而且irc上的人说,应该和正式版没什么区别。可惜有些插件还不兼容,像我常用到的tab mix plug、del.icio.us和fastfox都不能用了,不过我想很快就会有版本更新吧。

其实对我来说,IE7的发布更应该记录吧?不过我没有正版的windows,不能更新(而且我现在也不怎么用windows了),所以一直没有看到最新的IE,不过对于作web开发的人来说,也许预示一场灾难的来临吧?我还是期待微软更严厉的反盗版,这样IE7在中国的普及速度就会慢下来,而用firefox的人逐渐多起来,那就好啦!

修改gnome桌面的图标

15 九月, 2006 (13:14) | linux

gconf-editor可以修改桌面的图标,在app->nautilus->desktop中,可以设置是否显示Trash、Home等默认图标等选项。