All posts by SillySnail

blog暂时换域名(已改回原域名)

因为某些尚不清楚的原因,这个blog遭到spamhaus投诉,被空间服务商给关了。最近没时间打理这事儿,暂时先用着blog.sillysnail.cn。各位朋友不用急着修改链接,估计过不了多久就能恢复,先将就着看吧。RSS订阅不受影响,仍然是http://feeds.feedburner.com/sillysnail(这会儿终于显出feedburner的好处来了)

Update 2007-03-06:问题已解决,域名换回主域名http://www.sillysnail.cn/,请大家继续使用主域名访问,谢谢

好久没弹钢琴了

前天在蜗牛mm家偶然看到有一架钢琴,一时心痒就试着弹了一小曲。曲子是《云水谣》里的One Day When We Were Young,自己胡乱配了个和弦,居然凑合着弹出来了。蜗牛mm在旁高兴地伴唱,好一幅小妹妹唱歌狼奏琴的动人图景。

回想起来十多年没弹琴了,没想到还能找着键位,不错不错。

五岁开始学琴,每天在家被老妈逼着弹两个小时。那时候觉得痛苦无比,现在想想真是悠闲日子,沉浸在美妙的音乐之中,而不必理会烦琐的薛定谔方程和blog上层出不穷的垃圾评论,逍遥乐无边。

我和楼上的globefish差不多同时开始学琴,他拉小提琴,我弹电子琴(那会儿人太小弹不动钢琴)。每天他在楼上吱吱喳喳地拉,我在楼下叮叮咚咚地敲,果然是丝竹乱耳。互相骚扰了两三年,他还来不及等到我弹出像样的调子,我就不小心搬走了。从此听不到他吱吱喳喳,我自己也不再弹琴了,荒废至今。

当年那架比我还高的琴,早已送给了不知那家亲戚。当年一起学琴的故人,也在多年前去了大洋彼岸。惟有globefish和我一路同学十六年,可算得一个不大不小的奇迹。听说他明年将要飞越重洋,谨祝一路平安。

向大家致歉

SK2杀气太盛,不但如数拦下每天300+条垃圾评论,连正常的评论也全给挡了下来。我离开这一周多没有一位朋友留言成功,罪过罪过。今晚批阅积攒了两千多条评论的垃圾箱,恢复了zw、hub、暴暴蓝、Climber以及书海醉儒/anthea贤伉俪的10条评论,如有遗漏还请各位见谅

换了个思路对付垃圾评论

用WordPress搭建blog的朋友几乎人人都受到过垃圾评论的骚扰。垃圾评论机器人在全世界各个blog上面以评论的形式发小广告,让人不胜其烦。

以前我用WordPress自带的Akismet反垃圾插件,效果不错,能拦截绝大部分的垃圾评论。但最近垃圾评论忽然猖獗了起来,每天都有几十条上百条的垃圾评论从Akismet眼皮底下漏了过去,我每隔几个小时就得手动清理一次,累得快抽筋了。

今天决定认真研究一下垃圾评论的机理,考虑怎么样从根源上阻拦。WordPress默认的留言设置是要求访客填写姓名、邮箱和网址才能发表评论,我嫌麻烦就把填邮箱的部分给去掉了,网页中只显示填写姓名和网址的空格。但是机器人的垃圾评论中有很大一部分是姓名、邮箱、网址三项齐全。我没太明白这些机器人是怎么留言的。估计它们已经吃透了WordPress系统的留言系统,不需要通过网页,直接调用系统后台的php文件留言,所以邮箱地址也预填好了。

于是我打算将计就计,除了Akismet的智能识别或者BadBehavior(另一个反垃圾插件,因为常常误杀而被我禁用)的主动阻拦,还利用垃圾评论的小聪明识别它们。既然我已经在网页上关掉了填写邮件的空格,那么留言中包含邮件地址项的一定是垃圾评论。我在wp-comments-post.php中添加了一行判断语句,把这样的留言统统扔掉。

预计这招能减少一大半的垃圾评论。明天去三亚玩,估计好多天都上不了网,回来之后看看效果。

发现一个有趣的事情

周二下午去打篮球,回家后的第一次。手感不好,不知道怎么的总是用力过大,不是砸在篮板上就是砸在篮筐后沿。
好像每次回家都有这个感觉,投篮的时候出手过重,准头倒还是有。回到学校则恰好相反,每学期刚开学的时候,打篮球常常用力不足,投出“三不沾”之类的业余球。
莫非四川的篮球普遍比北京的轻?

学着自己修改了一下WordPress

前几天换服务器的时候顺手把blog后台程序WordPress升级到了最新版2.1。升级前就听网友说2.1是一次主要升级,改动不小,升级之后果然发现了一堆问题。最郁闷的就是侧边栏里的友情链接坏掉了。

以前为了让每一个分类单独用一个div块,没有像默认模版那样简单地写一句wp_list_bookmarks(),而是采用WordPress官网的写法,把链接的category和name分别读取显示。

<?php $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM $wpdb->linkcategories");
foreach ($link_cats as $link_cat)
{ ?>
<div class=panel id="linkcat-<?php echo $link_cat->cat_id; ?>">
<h5><?php echo $link_cat->cat_name; ?></h5>
<DIV class=panel-content>
<UL><?php wp_get_links($link_cat->cat_id); ?></UL>
<BG>
</DIV>
</div>
<?php
}?>

WordPress升级到2.1之后这一块就坏掉了,提示说数据库错误。没办法,不知道该问谁,只好学着自己读一下WP。反正早晚得学。升级前的数据库幸好保留了一份,对照着看了一下,发现数据库有两点改动。

一是cat_id改成了cat_ID。盘古是对大小写敏感的虚拟主机,这会导致找不到get_results函数cat_id项。解决办法是把代码中cat_id统统改成cat_ID。

二是数据库的linkcategories(链接分类)表合并进了categories(文章分类)表,链接分类放在了文章分类之后。这导致get_results(“SELECT cat_id, cat_name FROM $wpdb->linkcategories”)这一句失效,因为不存在linkcategories表。我首先试着把调用get_results函数时的linkcategories改成categories,但是这样不但输出了链接分类,同时还输出了文章分类,这显然不是我想要的。再观察发现categories表中增加了一项link_count,应该是WordPress 2.1新增加的,用于记录该分类下有多少个链接。因此我在每一个foreach的循环中根据link_count是否为零来判断是否为链接分类,从而正确地输出。
修改后的代码为

<?php $link_cats = $wpdb->get_results(“SELECT cat_ID, cat_name, link_count FROM $wpdb->categories“);
foreach ($link_cats as $link_cat)
{
if ( $link_cat->link_count )
{ ?>
<div class=panel id=”linkcat-<?php echo $link_cat->cat_ID; ?>”>
<h5><?php echo $link_cat->cat_name; ?></h5>
<DIV class=panel-content>
<UL><?php wp_get_links($link_cat->cat_ID); ?></UL>
<BG>
</DIV>
</div>
<?php
}
}
?>

这是我第一次自己动手阅读并修改WordPress代码。虽然为了这么点小事前后折腾了一个多小时,还是觉得很高兴的。毕竟一个对php语法和WordPress函数数据结构一无所知的菜鸟,现在知道了<?php和?>得配对但是不必在同一个花括号{}里面,知道了简单的php判断语句,连蒙带猜地知道了wp_get_links和wpdb->get_results两个函数的用法,并且最终凭借这些东拼西凑的三脚猫功夫发现并解决了实际问题。

换了新服务器

今天把服务器换到了盘古空间。谢谢JJason的帮助,新空间感觉很不错。
顺手把WordPress升级到了2.1版。现在有些插件和数据库的调用还有些问题,例如左侧的友情链接部分。
估计是因为我在WordPress上套用LBS主题的缘故,有些自定义函数和WordPres 2.1不太兼容。期待布罗特的新版本。我自己也要试着学习一下php代码。

睡觉去,明天回南充,有空慢慢收拾。