2006年12月 的存档

Language Switcher——在后台切换WordPress语言

2006年12月27日,突发奇想,觉得可以写一个在后台就可以很方便切换WordPress语言的插件。WordPress通过gettext支持语言包,而语言包有3种:WordPress本身的语言包、模版语言包、插件语言包。我觉得插件可以检索所有已安装的语言包(也就是mo文件),并在WordPress后台显示出来。另外,gettext的语言包总是用空字符串对应的翻译字符串来存储语言包的信息,这些信息可以显示出来供使用者参考。

这个插件花了3个下午。根据我的Google Calendar的记录:12月27日下午,5个半小时;12月28日下午,4个半小时;12月31日下午,3个半小时。12月28号晚上,写了两天,觉得差不多完成了,本来准备发布出来,但是肚子饿,跑去吃饭了,就没发。29、30号忙,又拖了两天,今天又仔细看了一下,发现还有很多或大或小的问题,比如在没修改过wp-config.php里的WPLANG常量定义时没法工作。呼,还好28号没发布出来,要不然就丢人丢大发了。又花了点时间解决了一下,现在发布出来。

插件的原理是设置$locale变量。WordPress的get_locale()函数会先读取这个变量,如果不存在才会去检查常量WPLANG。所以,本插件只要设置一下全局变量$locale,就可以绕过常量WPLANG,控制WordPress的语言。不过,当有插件使用load_plugin_textdomain()函数载入自己的语言包的时候,就会调用get_locale()函数。所以,我们的插件需要成为第一个载入的插件。这个问题在这里有过讨论,有人提出给插件添加等级,高等级的插件先载入;有人说语言包应该在插件都载入完以后再统一载入。最后,markjaquith以一句"Shouldn't plugins be able to manipulate the active plugins array to 'shuffle' themselves to the front if need be?"来结束讨论。所以,没办法,只有从插件调用顺序上想办法。查了下ASCII码表,选中了"$"符号。把插件的名字起成"$language-switcher.php",因为WordPress会按照ASCII码顺序调用插件,而大多数插件的文件名都是以英文字母开头的,所以这个插件将在其他插件之前被执行。

在后台里添加一个选项页。选项页代码里,在/wp-includes/languages/目录里查找*.mo文件,此为WordPress的语言包;在当前模版的目录里查找*.mo文件,此为模版的语言包;在/wp-content/plugins/目录里递归查找*.mo文件,此为插件的语言包。用gettext依次读取各个mo文件,把空字符串的翻译读出来,解析出各项信息,包括名称、修订日期、译者、国家、语言、编码、翻译字符串数,然后显示出来。另外,在当前正在被使用的语言包后面显示一个红色的"(active)"字样。

在选择新的语言,并点更新选项后,新的选项页面还是原来的语言。没办法,设置的更新是在代码执行到很靠后的地方才被完成的。所以,我想加一个自动刷新页面的js,在网上查了些自动刷新页面的JavaScript代码,都说可以用window.location.reload()这个函数。我试了一下,好像有点问题。因为在点“更新选项”后,浏览器是以POST方式把数据发回服务器的。所以在刷新页面时,Firefox会提示“要查看的页面含有过期数据。”,IE也有类似的提示,这样不爽啊。想了一下,用了window.location.href = window.location.href;这句代码,那个提示就没了。然后用setTimeout()函数设置让它在页面载入5秒之后执行,OK了。

拿我写的WordPress简体中文包,还有Kirin Lin的WordPress繁体中文包,还有我的K2模版中文包以及我装的3个插件的中文包做了测试。因为台湾地震的原因,点点游的中文版下不下来,要不然也应该拿来看一下。插件后台截图在这里。那个Dagon Design Sitemap Generator插件的简体中文包,明显是拿Kirin Lin大大的繁体中文包改的,连"Country: TAIWAN"都没改过来,嘻嘻。

Language Switcher插件的简体中文包也写好,一起发布啦。

请移步到“Language Switcher”主页下载软件并查看更多信息。

电信114为何能进入IE

偶然间看到月光博客的这篇《断网后的互联星空的浏览器挟持》。文章说在2006年12月26日台湾地震导致海缆中断事件后,访问www.bloglines.com时,会进入电信114的搜索页面。我最近在我所用的站点统计网站——51yes里看到,来自电信114的搜索有很多,仅次于Google和百度。(2006年12月,百度:8715、Google:4831、电信114:1691、Google.cn:1639)我觉得,电信114肯定早已存在,只是51yes最近来开始统计来自电信114的搜索而已。鉴于我从2006年3月已经很少使用Maxthon,更不用说IE了,所以我一直没有注意到这个情况。一时兴起,打开IRIS,想看一下电信114是怎样进入每个人的IE的。

打开IRIS,开始sniff;打开IE,输入"asdfghjkl",回车。到IRIS里停止sniff,查看IRIS的Decode项。很明显,在IE地址栏输入"asdfghjkl"回车后,IE首先尝试把它当作URL进行连接,在发现地址有错误的时候,比如不是合法的URL,或者域名解析不到IP,IE将转入搜索状态,去msn网站搜索这个字符串。IE首先连接"http://auto.search.msn.com/response.asp?MT=asdfghjkl&srch=4&prov=&utf8"这个地址,显然这是MSN搜索网站。返回的结果是:"HTTP 302, http://keyword.vnet.cn/kw?k=asdfghjkl"。然后,IE再连接"http://keyword.vnet.cn/kw?k=asdfghjkl",返回:"HTTP 302, http://search.114.vnet.cn/search_web.html?kw=asdfghjkl&fm=kw"。然后IE再连接这个电信114的搜索地址,显示搜索页面。(意外发现,居然存在www.asdfghjkl.com这样一个网站)

当输入的是一个域名的时候,比如"www.bloglines1.com","http://auto.search.msn.com/response.asp?MT=www.bloglines1.com&srch=4&prov=&utf8"返回的是:"HTTP 302, http://keyword.vnet.cn/errhint.html?kw=www.bloglines1.com",这样就会进入提示域名输入错误的页面。

显然,电信114之所以能进入IE,不是因为中文版Windows里带的,也不是因为安装了电信的ADSL带的,也不是因为安装电信ADSL时装的电信的星空极速拨号软件带的,而是电信和微软进行的合作。电信114搜索页面上写的也很明显,“技术提供:Windows Live”,而且缓存页面的链接也指向MSN的缓存页面。

再来看看DNS查询的结果,深圳电信DNS服务器:ns.szptt.net.cn上,auto.search.msn.com:218.30.64.194;keyword.vnet.cn:218.30.64.194;search.114.vnet.cn:218.30.64.193。香港DNS服务器ns1.netvigator.com上,auto.search.msn.com:63.150.131.16, 63.150.131.43。IP地址都一样,呵呵,这说明,只要你的IE的地址栏搜索没有关闭,而且你用的电信的DNS服务器,就跑不了会连上电信114网站。

防止进入电信114网站的方法嘛,正如月光博客所说,在Internet选项中选择“不从地址栏中搜索”即可。或者,来用Firefox吧,hoho

台湾地震震断了海底光缆

早上上网发现国外的网站都上不去了,包括DreamHost,Bloglineswordpress.orgwordpress.org.cn(位于BlueHost)。Firefox状态栏的气象信息总是提示连接超时。位于国外的WatchThatPage报告我的Blog无法访问。看来出国和进来都有问题。

现在知道出了问题要上cnBeta看消息了。cnBeta上说,昨晚台湾地震震断了海底光缆,中国的出国光缆都断掉了。早上《南方都市报》说台湾7.2级地震震中位于海上靠近台湾岛的位置,福建广东有震感,佛山中山一带都有强烈震感。唔,8点26分,我正在超市买菜呢,一点感觉都没有,失落。

OK,紧急预案启动,停用FeedBurner转向插件,http://yskin.net/feed/不再返回HTTP 307转向,起码抓虾,狗狗和国内的GreatNews可以正常读取feed。

不知道海底光缆有紧急预案没有?走韩国、日本、新马泰、俄罗斯、欧洲,都可以呀。还有,台湾地震影响台湾和香港,可是上海出去的光缆影响不到啊,怎么会台湾一地震,整个国内都不能访问出国呢?光缆一断,大陆和台湾的出国访问都断掉了,我这里只有Google的几个服务,包括Gmail和Google Calendar访问不受影响,其他的要么超时,要么几分钟都打不开。这事大了啊,不知道光缆要多久才能修好,要是停几天,那可怎么受得了。

互联网,就互联的这么脆弱?

Update:看cnBeta上说,5次地震,8条光缆中断,光缆修复可能需要一个月。[via,via2]另外,Google因为在国内有服务器,所以影响不大,而Yahoo经过调整,在中国大陆访问已经正常了。还有最重要的MSN,这个N多人用的IM工具,它不能登陆会影响不少人。大家都来用Google Talk吧,哈哈。另外,估计上海那边还有一些出国线路是好的,不过现在估计也被挤爆了。各大骨干路由器的路由表可能还没来得及调整,我tracert www.ibm.com,到202.97.61.50就断了,这是一个上海的IP啊。前几天说要弄一台全球域名根服务器放在中国,现在,恐怕DNS解析要受一些影响,特别是DNS服务器在国外的域名。

这下爽了,我们就这么被彻底的GFW了。脆弱呀,一个7.2级地震就可以让我们不互联了,电信真该多拿点钱投在硬件建设上啊。

Yskin's Kill Spam Comments——直接删除匹配黑名单的评论

这两天垃圾评论越来越多了,以前一天20封,现在一天没上网,垃圾评论100多。每次临近过年的时候都会收到好多人的告诫,“快过年了,注意提防小偷啊,因为小偷也要抓紧干活准备过年嘛。”今天是圣诞节,过两天就是元旦了,国外的spammer是不是也在准备过年啊?

以前用的是重量级插件Spam Karma 2,不过已经停用好久了,SK2太重量级了,我的小Blog还用不上。这几个月一直用着WordPress自带的评论审查功能,在WordPress后台->选项->评论选项里可以找到。WordPress提供了两个功能,一个是“评论审查”,将符合审查关键词的评论的comment_approved值设为0,这样评论被缓冲,并不显示出来,等待管理员来处理。另一个是“评论黑名单”,将符合黑名单里的关键词的评论的comment_approved值设为"spam",这样评论不会显示,也不会在后台->管理->等待审查列表里显示出来。

用黑名单固然好,不用管理员处理,不过可能会误封一些正常评论,而且评论仍然在数据库里,还占用一个ID号。用评论审查呢,可以随时到等待审查列表里检查截获的垃圾评论,看一下,把误封的挑出来,其他的全部删除,这样不占用数据库空间。缺点是,还是被占掉一个ID号,而且垃圾评论会同时出现在管理->等待审查和管理->评论两个列表里,每次去看评论都要先去等待审查列表里清一下垃圾评论,也不是很方便。

于是就写了个小插件,解决一下这个问题。在"pre_comment_approved"那里hook一下,检测到评论被设置为spam就直接die(),hoho。

我的Blog只需要设置两个关键词:"...</strong>"和"[/url]",就可以屏蔽掉几乎全部垃圾评论了。

P.S. Merry Christmas. 昨晚平安夜,有没有放袜子在床尾啊?一定要白色棉袜子才行的哦。

Update:修改了一下,添加了一个功能,可以过滤所有包含"...</strong>"字样并且一个汉字都没有的评论。基本上带"[/url]"字样的评论都是针对那些使用UBB之类代码的Blog,可是WordPress本身不支持。带有"...</strong>"字样的,一般都是Trackback。好像有一些系统,甚至有些WordPress发送的Trackback的内容是以"<strong>...</strong>"开头的,不过我的Blog里目前只有7条是这样的。没仔细看WordPress源代码,好像大多数WordPress发送的Trackback不是这样的啊。黑名单只能过滤字符,不能做进一步的判断,所以我给插件加上一个功能,可以判断评论里是否有这样的字样,并且在评论不包含汉字的时候直接清除。这样基本上不会误删了。

写这个插件耗了不少时间,我也学到一些PHP知识。比如,表达式'spam'==true的结果是true,'spam'==0的结果是true。所以要用三个等号===进行判断才准确。还有WP的add_action()函数的用法,唉,复杂复杂。

Update2:到今天为止,这个插件用了整整半个月了。现在垃圾评论平均每天一条吧,插件的效果还算不错。

请移步到“Yskin's Kill Spam Comments”主页下载软件并查看更多信息。

开始使用K2模版自带的SBM

2006年7月低,K2 r16版里加入了SBM,从此以后,K2模版用户可以很方便地控制自己的sidebar,而不用再辛苦地修改sidebar.php文件了。

一直没研究SBM,这两天抽空研究了一下,发现还是蛮好玩的。

继续阅读《开始使用K2模版自带的SBM》

Yskin's Latest Posts——WordPress最新文章插件

昨天和今天研究了一下K2自带的SBM,把我的sidebar改用SBM来控制。改到最新文章时,发现K2自带的latest posts模块和K2的sidebar.php文件里的代码不一样。sidebar.php里只有一条语句:wp_get_archives('type=postbypost&limit=10');,latest posts模块里却用了

$latest = new WP_Query($query);
foreach ($latest->posts as $post)
{setup_postdata($post); echo ...}

联想到几天前alonefly大大提到的模板中的判定问题,去查了一下hoofei4模版。hoofei4用的是:

<?php query_posts('showposts=10');
if (have_posts()) : while (have_posts()) : the_post();
echo ...
endwhile; endif; ?>

hoofei4模版里这样用显然会导致之后的代码无法判断当前页面类型,is_home()之类的函数返回值已经不正确了,无论什么页面,在此代码之后的is_home()函数都会返回true。别的不说,hoofei4模版sidebar里定义链接列表和meta为只在首页和page页显示,可是http://www.hoofei.com/网站里所有的页面,包括文章页存档页都会显示这两样。

我特意在我的Blog上做了测试,hoofei4模版的用法会影响is_home()等函数的判断,而latest posts模块的用法却不会,可能是因为新建了一个WP_Query对象的缘故吧。不过,setup_postdata()函数还是会影响几个全局变量,而且执行速度也较慢。

不知道这样的代码是从哪里来的,谁最先想出来的。可以肯定的是,他是一个高手,懂得用query_posts()函数,但是,他却不知道WordPress提供了最新文章功能,只要调用一个函数即可。呃,我推测,可能是以前WP 1.5或者1.2的时代里,WordPress还没有提供这个函数,所以有人写了这样的代码,后来被人抄来抄去,就流传到了现在。

不过,WordPress自带的还是不能满足我的要求,我想显示的不是最新发布的文章,而是最新修改的文章。7月12号,我从wp-includes\template-functions-general.php中的wp_get_archives()函数里抄了一段代码,修改为显示最新修改的10篇文章,放在sidebar.php里。现在,我又把它改了一下,做成最新文章插件,并提供对SBM的支持。

这年头是不是每个WordPress插件作者都要写一个自己的最新文章插件和最新评论插件啊?嘿嘿。

请移步到“Yskin's Latest Post”主页下载软件并查看更多信息。

Feed Control Plus——为WordPress提供更多feed控制选项

11月17号开始写这个插件,现在事12月16号晚上8点整。哈哈,这个插件花了不少时间,现在回过头来看,倒是有点怀疑我是否该把插件写得那么复杂。

本插件的葫芦是Feed ControlFeed Control

今天先release着,明天再详细的写,嘿嘿。

抓虾在以前一直都是不读取文章的更新,一篇文章读进来什么样子就是什么样子,文章更新了抓虾也不更新,前段时间开始读了,后来又停了,真是○○××。唉,Bloglines又慢,或许,要是Google收购了Bloglines,速度应该能快起来。

汗了,好像没放上page的链接。我要feedback啊feedback。

请到Feed Control Plus插件主页查看更多信息以及下载插件。

金立鑫《龙不是什么好东西》

12月14日,南方都市报A32版,《上外教授:龙不是什么好东西》

大概的意思是,上外教授金立鑫在博客里列了一些理由,力挺上外党委书记吴友富。ensun在天涯论坛开了个帖子,里面附上金教授的原文的5条理由,一一予以驳斥。

南都的这篇报道里最后的一句话很让人火大:“我不喜欢也没妨碍你把它作为图腾。说服我才是你的本事。”不过查了天涯的原帖,好像有断章取义的嫌疑,金教授的原话说得还是很委婉的。这年头,媒体的文章写得真是强,把人家的文字提炼一下,出来得就是另外一个效果。

在帖子里有很多人对金教授那5条理由都进行了反驳,比如龙的出现比皇帝早得多,俄罗斯的国徽还是双头鹰,也是不存在的。在整个帖子里,还有好多人打着“龙=皇帝”的旗号,说凡是称自己是“龙的传人”的人是保皇派。非要说中国现在的“图腾”是龙,说中国人都崇拜龙,说崇拜龙就是崇拜皇权,不知道这些人怎么想的。

更搞笑的是金教授后来的留言,

  1. 因为龙凶猛,残暴,因为龙象征皇权,专制,所以我不喜欢龙。这是我的喜好。你喜欢不喜欢,跟你没关系。
  2. 龙不是个好东西,这是我的个人感受,我没有把我的感受强加给你们,这是我个人的自由,跟你们没关有关系。
  3. 龙不是个好东西,有N条理由。最简单的理由便是‘叶公好龙’,如果真有一条龙到你家,看你害怕不害怕,别说龙了,哪怕是一条鳄鱼,我想你恐怕也不敢摸一下。”

比较搞笑,呵呵,象小孩子一样,争不过人家了,就说人家骂人,说我爱怎么说是我的自由,说你们说我不对就是妨碍我的自由。即便是有很多人在那儿谩骂,但是还有那么多人写了大段的反驳证据,金教授就拿一个“如果有一条龙到你家,看你怕不怕”来反驳,不知道龙是不存在的和是否拿龙做中国标志有什么关系呢?

最后,金教授于14号晚关了博客,还建议大家去看新浪网的《文化学者谈龙图腾:挖掘中国龙的和谐元素》。哈哈,又会有人说,某人不堪网络的谩骂而关了博客了,网络真不是个好东西。而那篇文章,我看来看去,好像都是说的要改龙的英文译名,就像韩国修改汉城的翻译一样,没人说不再崇拜龙啊。

在网上找到一篇金立鑫的文章《“文革”语言的社会文化心理分析》。看完这篇文章,再回头来看看金教授的那些个逻辑,我说什么,你反驳我就是妨碍我说话的自由。这种逻辑倒是比较搞笑,不愧是研究语言学的专家,玩起诡辩来得心应手啊。

我个人认为,龙作为中国的一种特有的东西,不同于西方的dragon。想到龙,就像想到中国的熊猫,日本的樱花一样,是个象征性的东西,而不是什么图腾或者崇拜。象征着中国特有的,就像说起火锅,都会想到四川一样,不是说中国人就像龙,就像不是说四川人都像火锅一样。而且,选北京奥运会会徽的时候,更多人想起的是熊猫和孙悟空,而不是龙吧,干嘛非要说中国人崇拜龙呢?在现在的中国,宫廷剧泛滥,大家看到龙的图案更多想到的是皇帝吧。不过在海外,如果看到龙的标志,就应该知道是到了和中国有关的地方了。

很好奇,和龙相对,凤是怎么来的呢?国外的phoenix表示的是不死鸟,中国以前也没有皇后是不死鸟的说法吧?

Admin Drop Menus——为WordPress后台增加下拉菜单

AIP评论里说,Admin Drop Down MenuAdmin Drop Down Menu插件在IE下不好用。

这个插件我是6月份才开始用的,而Firefox我从3月就开始用,并在此后很少再碰Maxthon了,所以我并没有注意到这个问题。在插件源代码里转了一圈,改了一通CSS也没解决这个问题。后来想了想,还是Edward说的对,换个插件就是了。

在Google里找到Admin Drop MenusAdmin Drop Menus插件。这个插件确实可以把WordPress后台装扮的很漂亮,比起Admin Drop Down Menu好看得多。并且,插件只修改了menu部分,不像WP Tiger AdministrationWP Tiger Administration那样修改了后台页面的整体布局。
Admin Drop Menus

不过这个插件有一个缺点,我的后台的字体显示成繁体的样子。看了一下CSS,里面定义了很多字体,包括日文等等。我在里面加了宋体,显示出来的效果还可以。

这个插件的作者写了好几个Admin Drop Menus插件,代码大体一样,只是样式不一样,分别取名叫Native、SpotMilk、Autumn风格。有一个特殊点的叫Admin ‘Advanced’ Drop MenusAdmin ‘Advanced’ Drop Menus,既然写明是‘Advanced’高级的,那么我就试试。看起来这个插件把menu修改得更面目全非,不过也更漂亮。不过还是有一个缺点,一级菜单已经不能点击了,只能点击二级菜单,这下写新文章要点两下了,不爽啊。
Admin ‘Advanced’ Drop Menus

Admin Drop Menus这个系列的插件适合喜欢漂亮的人,还有使用IE的人。我还是用回Admin Drop Down Menu,它在我的Firefox下工作的很好。

小小Flash作品

今天无意中看到一个人收集了全套的小小Flash。记得2003年看过一些小小的Flash,当时小小已经成名已久了。当年好像只看了小小的第2、3、4号Flash,并没有找到其他的几部。今天在第5号里看到了小小的网站:http://www.xiaoxiaomovie.com/。网站里有小小的8部作品,不过主页和作品页面的最后更新日期分别是2004年6月和2003年3月。小小作品是刚有Flash这个东西的年代的经典作品,当时Flash刚刚兴起,刚有“闪客”这个词,网上大多Flash都是Flash MTV,比较好的Flash则是小小的几个Flash,还有台湾的阿贵系列,showgood的大话三国系列,还有讦谯龙唱的那些歌,以及后来韩国的Flash,比如流氓兔,Mr Boombastick。

00年以前,上学放学的路上,路过一些音像店(更准确的说,磁带店),听上一两句歌。再加上春晚,那是当时接触新歌的主要方式。01开始买《网友世界》,当时是从第一期开始买的,以后每个月都有买。每期的光盘里都会有很多Flash MTV,这是我当时接触新歌的一个主要方式。02年开始上网,不过时间被网游占去不少。04年不再买《网友世界》了,深圳音乐电台变成了一个主要方式。而现在,也不常听广播了,又回到了以前,走在街上偶尔听到的一两句。不过现在先进了,可以拿歌词上网Google,哈哈。当然,还有一个好办法,那就是在Kugoo里,抓几个人来,查看他们的所有歌曲,依次虑一遍,能得到不少好歌。

遗憾的是,到现在我还没研究过Flash,一次也没玩过。不过也没什么,我还不会Word和PowerPoint呢,哈哈。