Category: 未分类

  • 推荐CSSVista

    CSSVista是一个免费软件,用它编辑CSS或inline style时,可以即时地看到在IE和Firefox中的实际效果:

    CSSVista

    安装它首先需要安装 .NET Framework,但是这是值得的。经常一些时候你在一种浏览器里面调试界面,终于好了,然而拿到另一种浏览器中,啊,一团糟!如果用CSSVista来编辑CSS,哪个改动引起了浏览器不同的render行为,你都可以及时地知道。

    它还有一些handy的小功能如语法高亮、自动补全等,绝对值得一试。

    CSSVista的主页不如一个开发者的blog文章详细。

  • 用Firebug加速Web前端开发

    工欲善其事,必先利其器。

    Firebug是在Firefox中调试HTML、JavaScript、CSS的工具。它的发布可以用“横空出世”来形容,对于Web开发者来说,针对Firefox的开发成本大大降低。我现在开发都是先在Firefox上,然后为兼容IE给代码“打补丁”,而这打补丁花费的时间,有时会超过在Firefox上开发所用的时间,甚至数倍、数十倍!

    IE deverloper toolbar,是IE开发组自己做的,按理说应该更强大才对,然而实际上它根本无法跟Firebug这个第三方插件相比,简直就是鸡肋。拥有如此优秀的插件,一定程度上也反映了Firefox的良好基础架构。

    了解Firebug,首先要上它的主页。插件的作者首先是位优秀的Web开发者,Firebug的主页是做得非常好的。注意页顶的图片,它不仅仅是一幅截图,Console, HTML, CSS, …那排Tab,都是可以点击的!图片的切割和JavaScript的应用,构成了一个交互式的预览。先不用安装,点一点那些tab,你就会大致了解Firebug的界面和功用。

    这个预览的下面是它的各种功能的简介。我最近才发现简介的链接是到更详细的介绍,以前都是自己摸索,看到那些激动人心的功能,忍不住有写出来分享的冲动。既然人家本来就有这么好的介绍,我再做这件事就是费力不讨好了:) 如果你确实需要Firebug,那你一定要从头到尾一字不拉地把它的介绍看完,不然说不定会遗漏一些贴心的功能!

    这里还有一篇Firebug作者写的文章,可以看看:

    AJAX Debugging with Firebug

  • Firefox的一个小bug

    这两天网络不好,发现了Firefox的一个小问题。

    假设你现在网络出了问题,虽然不显示网络连接断开,但连接任何网站都会超时。打开一个新标签,输入一个网址,回车,过一会,出现了超时的提示。在同一标签页中,重新连接另一个网址,同样是超时。

    这时就可以发现问题了。点击“刷新”图标,刷新的是第二个网址。点击重试图标,重试的是第一个网址!

    谁把它提交到Firefox的Tracker吧。Firefox 2.0.0.6, Windows XP SP2.

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

    垃圾留言真是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个邀请,想试试的说话:)