-
中文URL编码
URL编码是一个比较麻烦的事情,RFC 3986是关于URI的一个标准,在它的第2节定义了字符如何在URI中进行表示,而第3节把一个URI区分为scheme, hier-part, query, fragment几个component。根据这个RFC,A URI is composed from a limited set of characters consisting of digits, letters, and a few graphic symbols. 附录A中给出了ABNF定义。 比如URL,/blog/post139.html#comments,就包含了上述的全部四个components。这个URL不需要进行百分号编码,因为每个component中都没有保留字,全部为字母、数字或者非保留的ASCII可见字符(见RFC 3986第2.3节)。 假设我们在Firefox中打开了这个URL,并且想通过del.icio.us的插件按钮把它收藏起来。del.icio.us插件打开一个新窗口,并通过GET方法向服务器发出请求,将这个URL和它对应的title作为query的参数传递给服务器,服务器就把这两个值填充到对应的input value属性中。 假如不经过编码,这个GET请求中的URL就是”http://del.icio.us/flimsy?url=/blog/post139.html#comments&title=星月轮转 » Blog Archive » Blog换了个样子&noui&jump=close&v=4″。问题就出来了,#号后面的是什么呢?按理说应该解释为页面中的一个anchor,然而#comments只是url这个参数的一部分。另外,URL中含有汉字,也不符合标准。所以编码是必须的,要针对各个component,以及query中的每个参数值做percent encoding. 注意不是对整个URL(指del.icio.us的GET请求中的长URL)做,如果flimsy后面的问号被编码,服务器便不知道它后面是query部分了。正确编码后的链接应该是这样,很长,就不显示了,你可以复制链接地址来看看(似乎显示的时候浏览器又自动decode了,点击即可在地址栏看到编码后结果)。 URL编码要求先将URL转换为一个UTF-8的字节序列,然后再做percent encoding, 这在RFC 3986和W3C的网站上都有介绍。在为Firefox做插件时,主要用Javascript实现程序逻辑,而Javascript中的字符串是UTF-8编码,且有一个方便的encodeURIComponent函数可以做URL编码。除此之外,还有escape/encodeURI两个函数。关于它们三个的比较,可参考这篇文章。 如果没有现成的函数,对UTF-8字节序列进行percent encoding也是比较方便的。对于unreserved character值,不需要做转换,其它的字节全部用% HEXDIG HEXDIG来表示。另外空格除”%20″外,也可以转为”+”,节省空间。 一个非常重要的问题就是如何把字符(ASCII字符除外,主要是中文等)转换为UTF-8的字节序列。并不是每种语言都像Javascript那样方便,比如在C++中,你得到了一个含有中文的宽字符串,怎么处理呢?Win32 API中是有一个InternetCanonicalizeUrl函数,但它只针对一个字节序列,不会考虑中文的编码转换。在MSDN“规范的URL”定义中,”Characters that must be encoded”并没有提到宽字符的处理,甚至没有提到UTF-8. 它还要求字符串中必须包含一个scheme. 有时间的时候我会再写一篇关于怎么在Windows中把中文转换为UTF-8字节序列的文章,对进行中文URL编码的朋友也许会有帮助。见“GBK(GB2312)向UTF-8的编码转换”一文。 PS. 网上文章一大抄,这几天体会深刻,中文文章尤甚。许多误导的文章被当作经典转来转去,充斥着搜索引擎。网上信息越来越多,有用的信息有时候却越来越难找。本文参考网上一些较为权威的资料,但仍有可能理解不对,欢迎指正。
-
James Gosling 也玩点名游戏
近期国内的Blogger玩点名游戏比较多,我个人是对这东西不感兴趣。 没想到James Gosling还这么有兴趣,回应别人的点名: Five things you probably don’t know about me
-
穷人的生活
前天晚上到火车站送人,看到所有的候车室都挤得满满的,却见到有一个候车室不仅人少,沙发也很舒服,门口还有一个“总服务台”。正要进去却被人拦住要钱,才知道这就是传说中的提前上车。 问了一下五块一个人,就进去了。除了座位舒服,还有一个好处就是提前上车有地方放行李。想想那些回家过年的农民,肯定很多连五块钱都舍不得花,这种候车室才人少,要不早就涨价了。我爸就不会花这个钱,前阵子坐火车回来就跟我们说被骗了,花了五块钱。 里面的工作人员心情也好,因为人少。他们在那里聊天说笑,还一个一个乘客地问上哪个车,看有没有已经检票还在做梦的。一个民工的小孩跑进来捡瓶子,一个工作人员就过去逗他。我们开始还以为那小孩是来玩的,后来他抱着一堆瓶子跑了,那人说,瞧这速度,从小就练出来了。这才明白是帮父母捡瓶子卖钱的。那人又说,把老杨的财产全给弄走了。想必老杨是这里捡瓶子的专业户吧。我又想起有一次坐火车停在某一站,有人就飞快地从走廊上穿过,把桌子上有水没水的瓶子全部装到编织袋里跑了。 送走之后回家,路上又看到两个人在人行道旁边铺了一张毯子,冻得抱在一起,大概是要过夜。
-
Akismet是不是挂了?
这些天Akismet一直很无用,Spam全跑掉了。觉得有点异常,在设置页里点Update,果然,无法连接服务器。 Akismet插件要连接的地址是key.rest.akismet.com,把key替换成你的akismet key。我(IP:210.77.14.*)直接打开这个地址,连接超时。通过Anonymouse代理却可以正常连接,返回一个数字。 我blog所在的主机在杭州。akismet.com还是可以访问,但blog.akismet.com就不能访问了。真不明白。 各位用Akismet的,帮忙看一下它是不是真的挂了。 我无语,暂时把Akismet禁用了,很影响留言的速度。用了一个trackback validator,因为Spam全是trackback. 还是希望能用Akismet. 为什么好的东西都挂掉?好人该死。
-
Blog换了个样子
那个blue-tech主题虽然刚用时感觉清爽,过了一段时间还是有点疲劳了,于是自己动手,多方参考,做了个新主题。 几乎就在同时,Google Groups的新面孔推出,与我的blog主题惊人的雷同,这绝对不是巧合。 设计网站还要考虑IE这样老掉牙的浏览器,真是一件痛苦的事。麻烦各位给看看,怎么让IE显示导航条跟Firefox的效果一样,谢谢了。Opera我看了一下也正常,不知道IE7正常不。如果只是IE6,就不管它了。 有空再往好弄。
-
升级到WordPress 2.1
今天考完最后一门课回来发现WordPress 2.1终于发布了。看了一下马上就升级了,备份都懒得做。结果出人意料的顺利,什么问题都没有,我都感觉很奇怪,因为所有插件我都没照升级说明指示的禁用掉。 尤其是Brian’s latest comments刚刚发布了1.5.8,以解决与2.1的兼容问题。这说明2.1正式发布时又保持了对以前插件的兼容性。不过还是挨个把各个插件换到了最新的版本。 这个版本最好的最实在的功能就是加上了自动保存功能,太爽了(可惜的是Trackback框不会被保存,是这样吗?)。另外也有其它一些改动,详见WordPress 2.1的发布日志。 也就这些。它已经够成熟了,就像Blizzard要出TFT1.21补丁,也没多少激动人心的东西一样。 由于日志和链接的种类被合并,所以链接原来的link_id很可能变了,这一点在自己调用函数的时候要注意。
-
OpenDNS
我这边的本地DNS服务器很垃圾,有的时候一次dns lookup要花一分钟,查到后网页打开倒是不慢,真能把人郁闷死。 上网去骂,有人推荐用OpenDNS,真是个好东西: What is OpenDNS? OpenDNS is a better DNS, free to all. OpenDNS uses its distributed network of DNS servers to speed up your Internet experience, increase reliability, improve security and make DNS smarter for users all over the world. 如果你的DNS查找很慢,不妨也试试OpenDNS。
-
try ruby! (in your browser)
我觉得学习一门脚本语言是非常有必要的。前几天有人在试用RoR,极力推荐我学习Ruby。RoR那个比较酷的做blog的视频倒是看过,不过看完觉得,这样做网站,对程序逻辑的可控制性一定很差,但他说没有这个问题。今天浏览Ruby主页时正好看到那个try ruby!的链接,就上去玩了一遍。 Ruby很酷,这个hands-on tutorial更酷。在同一个页面上就可以把现看来的东西实践,很方便,这种方式是做教程的最好方式。其间遇到一个问题,用它给的Popup类的时候,我把第一个弹出的窗口关了,然后再输入什么都不行了,那个命令行坏了。我以为是关掉弹出窗口的原因,当时已经过了大半,我坚持又来了一遍。再到弹出窗口,发现把输入区都遮住了,不关怎么行,才想起是刚才把Popup小写了:smile. 又发现可以用reset(Ctrl+D)来从错误中恢复这个模拟的命令行。 想学脚本语言的,可以考虑下ruby,如果要了解ruby,先玩玩这个。
-
BBS, sign in, log out.
高三时就在书上看见中山大学有个电子公告牌,BBS,于是到网吧看了一下,不爽。不用。 刚到科大的时候,看见教学楼、图书馆有许多“信息快车”,跟电子游戏厅的街机差不多,课间的时候一堆学生挤在那里排队。后来知道他们是在上BBS。我之前没怎么接触过电脑,看见那黑底白字的屏幕更是恐怖,所以最初上BBS是在机房里用 IE浏览。还记得发现了BBS有讯息功能后,疯狂地发信息给一起上网的室友,效果呢?自那以后就没用过Web的讯息,已经忘记了,或许有声音?反正搞得室友很烦。 后来终于大胆地摸到快车上,加入了站长一族──在快车上灌水的人只能站着,被人尊称为站长。开始的时候不会用,进去之后就在SYSOP版灌了一篇,被封了7天。每次登录后不知道怎么退出,怕别人盗用帐号,就重启机器。隔几天不见,发文的时候又问旁边的人:“同学,我写好文章了,怎么发表啊?”在快车上灌水不用付网费,我们当时就在上面收发邮件。不过后来为了避免某些站长站得太久累坏,学校限制每位站长只能站30分钟,于是就有人开始做抢劫帐号的生意。有时候看见有的同学听见上课铃声顾不得退出就跑进教室,就像捡到几块钱一样,上去把他的时间用完再说──我这么做过一次。等我离开科大时,计算机业发达的西区已经基本把快车淘汰,只能到东区去怀旧了。 那个时候BBS的环境比现在好些,至少我这么觉得,可能是我当时见识得太少了吧。我真想让所有不知道BBS的朋友都来了解它喜欢它,于是给我最要好的正在复读的朋友注册了一个。他凭借自己的诗词在poem版上混得很滋润,后来在同舟共济混进了站务组。我虽然当时喜欢,但也没现在不喜欢的时候灌水厉害,因为那个时候我主要是Web用户,每天发不了几篇帖子。 后来自己有了电脑可以在宿舍上网,才明白做站长比做Web用户要牛。尽管站长们的武器很简陋,只是一台终端,但这才是BBS。于是开始用STerm,后来转向 CTerm,现在用QTerm,这些才是专业水虫的装备,跟Web比起来,是全自动与半自动的区别。我的战场也不再限于瀚海星云,水木的人气更旺,我去那里的时间渐渐多了。我春节不回家的时候在BBS上结识过朋友,深夜在水木的技术版面上他乡遇故人,版聊许多屏后删除说再见。但是我没有刻意追求过文章数,有人说这是浮云,它不是,它是null,浮云也稍微有点内涵。在这个过程中,我看到了 YTHT的倒掉,SMTH的涅磐与重生,明白了许多道理。 随着BBS上的发文数越来越多,我对它的一些现状越来越反感。当然在BBS上互相帮助还是很好的,一些技术方面的问题在BBS上很容易得到解答。关键是不是少数的一部分人,把这个环境给污染了。比方说有人诚恳地在NewSoftware上问一个问题,回复的水虫们,有的敲三个点──表示不可思议,有的说楼主是火星人,鉴定完毕──表示讽刺,也有人说楼主在挖坑灌水,很久之后才终于有人愤愤不平,跳出来把问题回答一下。也有在BBS上肆无忌惮地谩骂和人身攻击的,往往他们在现实中是懦夫,这是虚拟世界的规律。 这年头能去的也就几个技术版面。其实我一直都是上技术版面的多,不过现在的趋势是其它的版面越来越多越来越热闹,技术版面只是一个冷清的角落,一定程度上,也反映了国内年轻人的心理(我old了)。想到这,不禁感叹一下中国的苍蝇真是多,要不千橡这个厕所也没这么大嗡嗡声了。在厕所里嗡嗡倒没什么,但总会有几只乱飞的跑到BBS上来。Joke版上固然有Joke的高手,经常抓住一个主题发挥到极致,在全国娱乐界造成影响。不过我们的Joke高手有点太多了,而且把不好的风气传到技术版面上。你们就TMD不能干点更有意义的事么?要是中国有这么多的人这么热心地专注于科技(当然不是专注于学术腐败),和发达国家的差距很快可以缩小了。我越来越多地跟别人说,BBS就是个垃圾坑。 现在还经常看见有的人以自己数以万计的文章数为荣,或者以登上十大为荣。 Too young. Too simple, sometimes naive. 在虚拟世界中的成功,往往暗示着现实世界中的失败。当然大部分人把BBS当作一个玩具,这是好的,不要太投入。那么,技术版面就要划清界限了。服务器90%的存储是被垃圾填充。 从最初在BBS上的快乐,到现在快乐中夹杂着厌恶。也许它并没有变,只是我的认识在变。
-
kompare
在Linux下工作,可能希望找一个像beyond compare一样强大的比较工具,毕竟字符界面的diff用来作复杂的目录树比较还是不大方便。 今天在SMTH看到doser推荐kompare,说它比BC只好不差,有机会一定试试。KDE的优秀程序越来越多了,是个好事。 点击这里看图片。