Category: 小小草

IT 技术领域学海无涯。其实任何领域都学海无涯,无非 IT 发展太快了,让我有更多嘘唏。希望我掌握的技术有如小小草,虽然渺小,却有旺盛的生命力。

  • favicon.ico in IE

    IE is a nightmare – 我对此体会越来越深刻。

    想让自己的网站容易识别,就得从很多方面下功夫。个性化的,或与logo相配的favicon.ico就是要做的一件事情。如何让自己制作的favicon.ico在地址栏里显示出来,这点小事在Firefox下就是a piece of cake,在IE里我一直是忽视的,当我想起要重视的时候,为此整整折腾了一个晚上。所以我说IE is a nightmare。

    首先,favicon.ico必须是标准的icon文件。之所以这么说,是因为有人说把favicon.bmp,或favicon.gif,或favicon.jpg格式保存的文件改名成favicon.ico就可以了,其实这样改名来的favicon.ico在Firefox下是能显示的,如果有人喜欢看重结果,不追求过程的话,Firefox下让favicon.ico出现的结果已经达到。但改名来的favicon.ico并不是真正的ico格式,IE是不认可的。对于这一点,错不在IE。我是追求完美的,要做就做一个正宗格式的favicon.ico,32 x 32 或 16 x 16都可以,我喜欢32 x 32,因为我没有ebay那么高水平,16 x 16还能尽显细节。

    尽管有了标准格式的favicon.ico,能否在IE下显示还受很多因素制约。总的来说,我的感觉是,我按W3C标准出牌,但IE不按标准接牌,为兼顾到IE用户,我要付出成倍的时间。当然,我以外还有很多人,IE浪费了很多人宝贵的时间。好了,不发牢骚,让我总结一下IE下的制约因素。

    1. 虽说把favicon.ico放在网站的document root下就可以,但html里要有
      <link rel=“shortcut icon” type=“image/x-icon” href=“/favicon.ico” />
      更保险。我发现google等几个站点都没有这一条语句,但它们的favicon.ico在IE里的显示成功率还是很高,对此我百思不得其解。
    2. href绝对不能带域名,例如,不能写成
      <link rel=“shortcut icon” type=“image/x-icon” href=“http://example.com/favicon.ico” />
    3. 如果更新了favicon.ico,一定要清除cache才能看到更新,否则,无论怎么刷新都是不会更新的favicon.ico。
    4. 清除了cache,还得关闭IE,否则,你还是看不到更新。
    5. IE在清空cache后第一次运行,访问任何网站,你都无法看到它们的favicon.ico。
    6. 清空cache后,让IE运行一次,随便访问一个网站,让cache里留下点东西,关闭IE,再打开IE,然后你才可以看到更新后的favicon.ico。

    复杂吧,我搞得头都大了,才总结出这么点经验,不保证在你的机子上IE也是按这个“规律”运行的。因为,你知道的,IE是反常规出牌的。

    以上说的还是较新版本IE7,至于IE6,我劝你还是断了让favicon.ico在IE6的地址栏出现的念头。因为,你不光要符合以上条件,你还得让你的用户把你的网站收藏为favorite,IE6在访问被收藏的网站时,才会显示favicon.ico (这大概是favicon的由来?)。我很少收藏别人的网站,所以我就没指望别人来收藏我的网站。

  • Block Ad By Hosts

    Internet上充满了垃圾广告,更有一些phishing广告。今天我发现有个细心的人整理了一份广告商所使用的域名清单,把它添加到hosts文件里,就不怕来自这些域名的广告在你屏幕上蹦出来了。只是:

    • Google Adsense 的广告也在打击范围之内,而我对Google的文字广告并不反感;
    • 我浏览的网站中,中文广告占很大比例,质量普遍不高,这份清单便宜了中文的广告商,对中文用户有欠照顾。

    这个方法很简单,难得的是有心人在整理,大家就坐享其成了。因为全部是指向localhost,所以就算有心人判断失误,也不会有什么危害,更不会有DNS劫持发生。

    # This Hosts file has been altered to block ad servers.
    # To restore the file just
    # delete everything below the first entry or rename hosts.nbk
    # to hosts and move it to the proper directory.
    # Updated: scroll down for date stamp
    # This is an ad blocking hosts file compiled by
    # Mike Skallas (user245 (at) hotmail.com)
    # Available at http://everythingisnt.com/hosts.html
    # Copyright 1999-2007. Please do not redistribute, use above link.
    # Free only for Residential/Non-Profit use.
    # Just add ‘127.0.0.1 ADSERVER’ to the bottom to continue the list.

    因为列表很长,竟然超过WordPress Post字数限制,直接post需要修改”wp-includes/default-filters.php” file,

    commenting

    //add_filter(‘the_content’, ‘wpautop’);

    这么做还不知道对WordPress有什么副作用。还是做一个单独的文件让大家下载吧,hosts.

  • Magento修改了ZF源码

    Magento出了1.1,看上去好多了(之所以这么说,是因为我还没怎么用)。但有一点不值得赞赏:Magento更正了Zend Framework Currency的一个bug,是直接改了Currency.php。但是我的ZF外挂在Magento外面跟其他应用共享,Magento自带的ZF被我删掉了。我看了看ZF最新版,并未涉及Currency.php的改动,可能这个fix不重要吧。

  • Gmail的思维

    早在Gmail还需要邀请才能加入那年代,我认为Gmail在hype,没去用。后来,Google App方式的Gmail才让人觉得实在,用到现在满意度99.99%,尽管Gmail的行为比较怪,邮件往往出现在未曾预期的地方。比如,发出去的邮件不在Sent Mail里,反而在Inbox。但Gmail对邮件位置的调整99%以上都是更合理的调整,所以我一直也没关心Gmail到底是怎么组织我的邮件的。

    最近读到Hacking Gmail,所以,我回头仔细阅读了Gmail的帮助文档。有一大发现是Gmail里没有文件夹,而是使用labels系统来tag邮件。Google认为labels有三个优势:

    • A conversation can have more than one label.
    • A conversation can be in several locations (Inbox, All Mail, Sent Mail, etc.) at once, making it easier to find later.
    • You can search conversations by label.

    这一说就让我跟上Gmail的思维了。Labels系统也是管理conversations必然的要求。在Sent Mail里找不到已发送邮件也变得可以理解。

    Gmail的Imap也是很独特,Google自称Gimap;Gmail的删除分两种 – delete 和 archive。当Gimap和删除结合在一起时,初看会很怪,慢慢地我才看懂Gmail的思维。

    在Gmail 的web interface里,我们会看到两种删除模式,delete把邮件移到Trash (或者说打上Trash标签) ,邮件可以在Trash里暂留30天;archive把邮件打上“空白”标签,邮件只能在All Mail里找到,在邮箱系统的某个地方还可以暂留6年。

    通 过Gimap访问Gmail,imap delete并不是google delete,而是google特有的archive。所以,要在imap里删除邮件,邮件立马从当前文件夹消失了,而不是打上删除线。同理,要在 imap里彻底删除邮件(purge)也是不可能的。要用imap实现google delete,只能用拖动邮件到Trash的办法。

    Archived 邮件现在只能通过All Mail访问,我还未找到专门显示archived邮件的办法,这使得一次性彻底删除所有archived邮件变得非常麻烦。考虑到archived邮件 没有标签,我尝试过用“-label:label1 -label:label2 -label:label3 … -in:inbox -in:trash -in:spam” search mail,但不成功。

  • 用Gmail做企业级的Contact Share Management

    我用Gmail里的Google Contact作个人级的Contact Management,迄今感觉很好。

    如果是企业级的Contact Management,其中一个关键性的要求是Contact Share。我们公司用Act!,Act!在我眼里一无是处,又贵又慢又不好用。升级版的Act!可能会好一些,但实在没必要做这个投资。老板的想法基本跟我保持一致,不过他主要是从省钱的角度考虑。

    想在企业级的Contact Management软件投资方面省钱到底?关于轻量级的企业Contact Share Management,我有个不是很成熟的想法:利用架构在Google App上的Gmail来做。

    我们来看看Gmail是否能达到Contact Share的要求:

    首先是联系人信息共享,这个Google App已经考虑到了,只要在Manage this domain的User accounts里Enable contact sharing即可。

    其次是联系人活动共享,也就是查询联系人的来信和去信,不管哪个同事是联系人的客户经理。Gmail有个独到之处——按Conversation归类email(还有chat,如果有的话)。这使得按联系人进行活动查询变得可能。至于同事之间的来信和去信共享的问题,可以通过设立一个公共邮箱,配合pop from other account (maximum 5) 和send mail as功能,各位同事仍可个性化的收发邮件,但只要大家遵守一定的规则,共享邮件也不是问题。当然,活动不仅是邮件往来。Hacking Gmail一书里讲到可以用Gmail来make note, record to-do, etc. I think those workarounds can basically cover activities.

    但,Gmail无法设置在个别同事之间Share Contact,留给我的升级余地很小。同事间的共享活动应该遵守一套什么规则才能保证信息共享?我还没静下心来想。如何跟ERP集成?我也没底。所以以上命题只是我不成熟的想法。

  • 轻松解决无法删除邮件的问题

    今天同事又报告说,Outlook Express无法把几封发件箱里的邮件删除。

    有了上次解决发信后邮件滞留发件箱的经验以后,这个问题对我来说就很简单,我不再徒劳地在发件箱里找原因。我首先看了一下已删除邮件文件夹,好几千封信,这些同事都把垃圾邮件仍当宝贝一样收藏着。已删除邮件.dbx已有2Gb,看来到了不稳定的临界点。

    我说,既然是已删除邮件,就定期清空嘛。

    同事说,好。

    我说,那现在我帮你清啦?

    同事又说,好。

    于是,彻底清空已删除邮件。无法删除邮件的问题立马解决。

  • Unlock Orange SPV M600

    前不久想Unlock Orange Livebox,方法已经找到,但过程太麻烦,暂时没有去试。

    前天又Hack了My Book World,一时兴起,想想我的Orange SPV M600手机还未Unlock,就顺手找了资料把它解锁了。网络锁实在是烦人,多年前我签第一个Orange手机后,立马想尽办法解锁;多年后我的脾气也磨没了,Orange SPV M600用了一年多也没想着去解锁,合同是18个月,早解了也仍是用Orange的SIM。

    最近Hack上瘾,花了十多分钟就把Orange SPV M600解锁了。感慨于关于 “Unlock Orange SPV M600”搜索排在google第一位的竟然不是免费方案,我特意写一篇(其实基本是翻译) Orange SPV M600免费解锁方案。

    1. 去网上找一个叫lokiwiz03的压缩包,解压。
    2. 把手机和电脑ActiveSync。
    3. 把lokiwiz03压缩包中的EnableRapi.cab拷贝到手机任何地方,运行之(需要忽略一些安全提示)。
    4. 在电脑上运行lokiwiz03压缩包中的Lokiwiz03.bat,在一个DOS窗口你会看到一串SIM解码。
    5. 这时手机可以和电脑断开了,放入一张其他网络的SIM,会提示输入SIM unlock code,把刚才的SIM解码输入既可。(某些情况下还会再次提示输入Service Provider unlock code,把SIM解码再输一遍即可。)
  • 琢磨不透的.iso

    我下载了一个.iso光盘镜像文件。光盘虚拟技术这么发达,我很少刻盘,使用时只要用虚拟光驱加载这个.iso就可以用了。

    今天有个同事拿来一张空白CDR,让我把这个文件拷贝给他。本来我以为不是什么难事。

    首先我看了一下.iso的大小为917M,就算把CDR超量刻录也不可能超刻到970M。所以,我用ultraISO删掉了.iso里用不到组件,然后保存,结果删除部分内容的.iso体积不但没有缩小,反而激增到2.4G。即使用.isz镜像压缩格式保存,仍有1.2G。

    而且,用虚拟光驱加载原.iso文件,在虚拟光驱上右击,查看属性,该虚拟光盘的大小只有917M;如果选中虚拟光盘根目录下所有文件夹和文件,再右击查看属性, 发现选中的所有文件夹(含子文件夹)和文件的总大小为2.4G。

    我百思不得其解,也未能帮同事刻成一张CD。

  • Where to Set $xoops_charset

    I prefer UTF-8, always.

    I am sorry to see Xoops new release is by default still ISO-8859-1 encoded. Unfortunately, Xoops have not provided a complete reference book for all smarty tags. I struggled to change the charset.

    First, I looked at theme.html, and found it is

    <meta http-equiv="content-type" content="text/html; charset=<{$xoops_charset}>" />

    instread of

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

    Although I could erase “<{$xoops_charset}>” and put in “UTF-8”, I knew it was not the best way to change the default encoding.

    So I began to search for where the smarty tag $xoops_charset is saved. I thought Xoops the adminstration interface had a place to change the charset. I went through each field in Site Preferences and found nowhere to set the charset.

    It becomes a guess work for me where which value was stored. I searched the database but I could not find any value is “ISO-8859-1”.

    Last method I used was a global search for the string “ISO-8859-1” in all Xoops source files. 16 hits. “/language/english/global.php” was likely to affect $xoops_charset. I opened it and changed a line from

    define('_CHARSET', 'UTF-8');

    to

    define('_CHARSET', 'UTF-8');

    Then, UTF-8 encoding is successfully changed.

  • 制作.ico文件

    最简单的办法就是把16 x 16或32 x 32的.bmp或.gif文件改名为.ico。

    有人说这么做并没有得到真正图标格式的.ico,无法导入到.exe文件作为.exe的图标。可是,如果只是想做一个favicon.ico,作为网站的icon,那么改名的办法足以解决问题。 只要浏览器能正确显示出favicon.ico,还有必要去关心这个图标是否符合.ico标准吗?

    通过改名得来的.ico通常比真正的.ico文件要小一倍,更加体现改名.ico的优势。