Author: qingbo

  • 对付垃圾留言的较好方案

    垃圾留言真是blogger们心中永远的痛。

    在Akismet被封后,我一度不知道如何应对蜂拥而至的spam. 后来我关闭了Pingback和Trackback,然后把spam中常用的词写进了黑名单。黑名单有些效果,大部分的spam都没了,可是还是有不少漏网之鱼,例如有个垃圾就天天写ro***ck,邮箱是随机的,IP不固定,中间那几个星号也是随机。我就是拿它没办法。另外也造成了留言者的不便,因为黑名单中的词也很可能被正常的留言使用,例如我当时就把“…”放进了黑名单。

    最近一次误删了blog,我又开始寻找对付spam的好方法。

    首先,对付comment spam,我认为最好的是WP-Hashcash,不需验证码(额外的输入使留言者感到繁琐而且影响注意力),留言者只要启用了JavaScript就可以成功留言,而spam bot一般难以模拟这种行为。

    你也看到了WP-Hashcash那里也写出了Limitations,除了需要启用Javascript(现在哪个网站不需要Javascript?),还有不能阻止Trackback/Pingback spam。

    对付trackback/pingback spam,可以用Simple Trackback Validation Plugin。之前我用过RICE大学的人搞的Trackback Validator Plugin,效果不好。这个新的插件就是基于RICE的插件改进的,我打开trackback好多天了,收到一些正常的trackback/pingback,还没有发现spam。很好!

    这两个插件的组合,我认为比Akismet强多了。Akismet会放过一些spam bot,还会误杀一些非spam的留言,这两种情况都被解决了,而且数据库空间没有浪费。什么Spam Kama,什么bad behaviour,都回误杀无辜,误杀率比Akismet大得多,通通不可取。

    当然对于人工spammer,我们还是束手无策。前几日有人在我站上发了一个留言,我看到了,比较正常。过一会又发一条,哇,竟然是那传说中的人肉spammer!二话不说,连同那个正常的留言一起删了,妈的!这位仁兄,你还会来看我blog吗?骂的就是你!

    spam几乎绝迹,用一个时下流行的词说,叫和谐。用原始社会的话说,叫清净。

  • 世界观?

    近日laozhou在友贴上写了篇日记,讲他奇怪的想法,部分摘录:

    看了亚瑟合和他的mini王国,感叹这部电影的浪漫与现实的完美结合,感叹作者的丰富的想像力和那轻松幽默诙谐的风格。

    我们这个地球很大啊,很大吗?从宇宙的观点是不是很小的一颗呢?“一沙一世界”,漂浮在我们身边的那些尘埃,上面是不是也类似一个星球呢?在不同的尘埃之间穿行,会不会也是星际旅行了呢?那些尘埃上面是不是也生活着一些“人”类呢?他们是不是也要吃喝拉撒睡,也有白天和黑夜,也有感情有苦恼呢?它们那个世界也有互联网么?或许是更先进的信息传递技术?它们那些或者很小或者很大的世界里面,也有计算机,有汽车,有自然灾害,有空气污染什么的么?它们会不会看着我们就如同我们用电子显微镜来观看细菌一样,觉得我们很小很小?我们的暴雨雨是不是它们洒水的结果呢?我们打雷是不是它们拍桌子的结果呢?我们地震是不是它们跺脚的结果呢?我们的火山爆发是不是它们扔了火柴棍(如果它们有火柴的话)的结果呢?或者,它们看着我们,我们用肉眼根本看不到它们,它们觉得我们很大很大呢?我们随便一个小动作,它们的世界就会天翻地覆了呢?那么它们也结婚么?它们也购物么?

    嗯,我有时候也有这种想法,在人类看来,自己生活的地球很大,处于浩瀚无边的宇宙中。说不定地球就是一颗小灰尘飘来飘去,漫长的几百万年对于更宏观的世界来说只是微不足道的一瞬间,等到灰尘落到地上,或被雨打下的时候,人们就认为,啊,世界末日来了。可怜的生物经历了这么复杂的进化,人类出了这么复杂的文明和技术,全部成了虚无,唉,我们为什么奋斗,活着有什么意义呢?

    人类总是自以为是的,或者想像力不够,描述外星人的时候,总是以自己为模板,复制一下,改改体形五官。我的胡思乱想中,也是把我们的世界放大了一下。谁知道宏观的世界里,“生命”是如何延续的呢?如同我们所发现的微观世界里,生命体是和人类很不同的。

    dandan的一段回复:

    至于生活的意义,我问过自己和别人同样的问题,别人给的答案是马斯洛的自我实现理论,我自己呢,觉得生活是一种历程,大家的终点一样,因此享受这个过程是重要的~

    自我实现,还是为了一些牵挂而活着?如果没有亲人朋友,活着还有意义吗?唉,太哲学了,不想了。

  • 将文章同步到Live Space中去

    MSN上的朋友们,现在你们可以及时看到我的Blog更新了 🙂

    许多人还是不大喜欢用RSS订阅,而Live Space的更新会及时地在MSN联系人前面显示一个小星星。

    我用了Live Space Sync这个插件来把我的Live Space与这个blog同步。至少从已经转过去的文章看,效果是很不错的。

    不过那边基本就是一个通知,我只管把文章推过去,评论还是来这边好了,呵呵。那边的评论我关闭了。

    可能还有很多朋友、同学不知道我在写blog吧,哈哈,欢迎大家以后多来看看 🙂 从生活到技术,什么都乱扯。从体系结构到编译器到高级语言到Web前端,知道什么写什么。

  • script.aculo.us实现Gmail联系人自动补全

    摘自script.aculo.us首页:

    script.aculo.us provides you with easy-to-use, cross-browser user interface JavaScript libraries to make your web sites and web applications fly.

    What’s inside? animation framework, drag and drop, Ajax controls DOM utilities, and unit testing.

    It’s an add-on to the fantastic Prototype framework.

    用script.aculo.us有一段时间了,它实现的效果很美观实用,用起来又非常简单,非常舒服。最初的时候我为一个drag drop的任务头疼,后来发现了它,一句代码搞定,真是太爽了。

    如果让你现在做一个像Gmail写邮件时自动补全地址的功能,一定会觉得无从下手。是啊,动态创建提示列表,方向键处理,回车,Tab,还不知道在各种浏览器中调试多少次才可以,好麻烦!

    别急,有script.aculo.us,这个工作简单了很多。我们用Autocompleter.Local来实现这个效果。先给个效果看看:




    我不想为它专门改一下blog模板加个CSS,所以候选项的样式不是很好,分不清哪个被选中了。你可以在上面输入字幕”b”,然后用鼠标点击一个选项。实际使用的时候一定是需要样式的,这样方便用上下方向键选择(现在也可以按上下键然后回车,只是没有表现)。javascipt我也是引用的script.aculo.us的,如果是自己用,可以下载一份到自己的服务器上。

    代码我就不再写一遍了,你可以自己查看本页面的源代码。关键就是一句代码:

    new Autocompleter.Local(”autocompleter”, “popup-options”, [“aaa”, “abc”, “bbb”, “bbc”, “bcd”, “cdd”],
    {frequency: 0.1, tokens: “,”, afterUpdateElement: function(element) {element.value+=”, “;}}
    );

    第一个参数是那个input的id,第二个参数是显示後选项的元素的id,第三个参数是候选项数组。第四个参数是选项。tokens指定分隔符,我这里指定了逗号,那么它就会对最后一个逗号后面的内容进行补全操作。afterUpdateElement我定义了一个函数,在输入框中加上一个”, “,这样就可以输入多个项了。

    和Gmail的差距?你可以把input换成textarea,加上CSS试一下。我觉得不比Gmail差。

    除了可以根据参数中的数组进行补全,script.aculo.us还提供了更多的功能,如通过Ajax请求从服务器取得补全列表。

    script.aculo.us的文档其实还不是特别完善。如果你有这样的需求,建议你阅读这几个页面:

    其中Ajax.Autocompleter的介绍最为详尽,其中的许多选项是Autocompleter.Local也接受的。有必要的时候可以看script.aculo.us的源代码,它是最权威的文档。

  • form的onsubmit属性

    在对一个表单(form)进行客户端检验的时候,我们已经习惯了<form onsubmit=”return
    check()”>这样的形式,如果表单没有通过验证,在check函数中return false就会阻止表单的提交了。

    然而,如果要动态地为一个表单添加验证,即HTML代码中没有写onsubmit,而在页面加载后用javascript给这个form加一个handler,问题就
    来了。

    假设我们已经得到了表单的DOM节点,保存在变量form中,一般这样来给它加上handler:

    if (form.addEventListener) {
    form.addEventListener(“submit”, check, false);
    } else if (form.attachEvent) {
    form.attachEvent(“onsubmit”, check);

    但是这个check函数现在应该怎么写呢?验证失败时,仅仅写一个”return
    false;”在Firefox中是不能阻止表单的提交的(在IE中可以),这就是为什么大家在onsubmit属性中要写”return
    check()”,而不仅仅是”check()”。

    请看ECMAScript Language Binding,其中明确地写着,event
    listener没有返回值。其实一切的根本都因为IE不支持DOM Level 2,大家都习惯了IE的return
    false,到了Firefox中也只是一个ugly的变通,而很少去注意正确的做法。

    下面是一个可以被动态地attach(见上面的代码)的check函数:

    function check() {
    if (e && e.preventDefault) e.preventDefault();
    return false;
    }

    在IE和Firefox中,它都可以被动态挂载为onsubmit的handler而且正常工作。

    万恶的IE!

  • 在Flash中如何弹出链接

    在AS2中,一般用getURL函数来打开链接:

    getURL(”http://www.qingbo.org/”, “_blank”);

    在AS3中,用navigateToURL函数:

    navigateToURL(new URLRequest(”http://www.qingbo.org/”), “_blank”);

    但它们都回被Firefox的ad blocker阻止并出现一个警告条(甚至是一个随机事件!)。我Google了好久,大部分都没有给出好的办法。

    其实Google的第二条结果是blogspot的,因它被封我就懒得打开了。最后不得已用代理上去,发现解决办法就在那里,用ExternalInterface调用Javascript打开新窗口就可以了。简单的就是:

    ExternalInterface.call(“window.open”, “http://www.qingbo.org/”, “_blank”, “”);

    原文链接(链接加了代理,直接点击可访问):

    http://skovalyov.blogspot.com/2007/01/how-to-prevent-pop-up-blocking-in.html

  • Pownce不好玩

    PownceDigg的创始人的又一个产品。

    首先不支持中文,现在做宽字符的支持不很简单吗?它页面编码是UTF-8的,肯定是数据库或者后台没有处理好。

    客户端软件,可以发消息,可以发链接,加Event,但上传不了文件。选择文件后什么反应都没有,点“post”就提示我没有选择文件。也许是我的人品问题。

    在客户端软件想Reply,又跑到网页上去了,不爽。为了流量?这不客户端上也有广告么。。

    AIR是刚出的技术,Pownce的软件还是Alpha 2,也许以后会有惊喜吧,呵呵,我现在是对它没什么兴趣。不明白为什么造了这么大的势,病毒营销这么成功,可能跟digg有关系吧!

    有6个邀请,想试试的说话:)

  • Nokia删除SIM卡通讯录需要保密码

    前几天试用一个新手机,把通讯录复制到了SIM卡上。换回原手机后,通讯录里全是重复的联系人,因为手机上也有个备份。但选择全部删除SIM卡上的联系人时,却提示输
    入保密码。

    我上网找啊找啊,找到一个试一个,1234, 123456, 0000, 手机号后四位,都不行。后来搜到一个比较像的,说是Nokia的保密码是12345,跟SIM卡没关系。但我输入后还是不对!再搜,有人说连续输入5次错误后,会有一段时间连正确密码都不接受。嗯,等它休息了一会,我再试,终于成功了。

  • Google 拼音导致程序崩溃

    Google拼音导致程序崩溃的事情听说好多了,不过今天是自己亲身遇到了。

    昨天还是今天我看见输入法自动更新到了1.0.20.0,Google输入法的版本历史里还写着“修正了在部分游戏和应用程序中的兼容性问题”。

    可是在Flash CS3中切换到Google拼音,一打字就挂了。

    难道找一个编辑器写好再往里复制?麻烦不说,总有忘记的时候,一切换输入法,按个键就挂,说不定有重要的工作就丢失了。

    绝对不可用。

  • Blog坏了几天

    前几天有门课程让做一个简单的mashup,我就准备在自己这个网站上搞,结果不小心把WordPress的文件全删除了,所以挂了好几天。

    今天恢复了,不知道有什么问题没有。顺便用上了最新的WordPress 2.2.1,现在没有加任何插件,主题也很干净。

    对了,那个简单的Mashup,在地图上显示你IP的对应位置:http://www.qingbo.org/map/。非常简单,其实是受别人的启发:)