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

29日更新

想飞之心,永远不死!

29日更新

“低调,低调”是《武林外传》里面的李大嘴的名言,把“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执行顺序是什么了,假设我的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了两遍才认识到,记下来免得以后犯同样的错误。
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是我最喜欢的编辑器,我非常喜欢在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一窍不通,没法调试,不过似乎影响不大。
以上是我做得一点最最基本的测试,以后在工作中边用边学吧,有好的技巧我会写下来。
今天gentoo的内核升级到了2.6.18-r3,刚好前两天zhllg在gentoo中文wiki上发了一篇编译内核的指南,经过尝试,除了那个通用的grub配置没有成功,别的都很顺利,甚至出乎我的意料。
最有用的一条命令就是make oldconfig,这个命令会根据旧的配置生成新的配置文件,如果新内核有新的选项,会给你提示,像从r2到r3这样的升级,根本不需要再从头配置,执行一遍make oldconfig,新的.config文件就生成好了,接下来就可以做 make && make modules_install了。
那个号称一劳永逸的grub配置在我这里没有成功,以后有时间要研究一下wildcard的写法。
这次安装gentoo 2006.1,遇到一个奇怪的问题,就是我在/额头擦/resolv.conf中设置了nameserver 192.168.0.1,但是每次重启,这一行都没有了,不得不再次手动设置一遍,让我很是郁闷,明明照着handbook上来得,以前的版本都好好的,不知道为什么现在会这样?
查了一下论坛,结果真有人问同样的问题,解决办法是在/etc/conf.d/net中加一行
dns_servers_lo=”192.168.0.1″
就好了,又查了一下安装手册,确实没有提到这一点,记下来免得以后再遇到同样的问题。
firefox 2正式版明天发布,值得记下来。不过我现在已经在用RC3了,而且irc上的人说,应该和正式版没什么区别。可惜有些插件还不兼容,像我常用到的tab mix plug、del.icio.us和fastfox都不能用了,不过我想很快就会有版本更新吧。
其实对我来说,IE7的发布更应该记录吧?不过我没有正版的windows,不能更新(而且我现在也不怎么用windows了),所以一直没有看到最新的IE,不过对于作web开发的人来说,也许预示一场灾难的来临吧?我还是期待微软更严厉的反盗版,这样IE7在中国的普及速度就会慢下来,而用firefox的人逐渐多起来,那就好啦!
gconf-editor可以修改桌面的图标,在app->nautilus->desktop中,可以设置是否显示Trash、Home等默认图标等选项。