'计算机' 分类的存档

Snap Shots——网页预览服务

今天收到snap.com网站的通知邮件,说Snap Preview Anywhere服务已经不再提供使用了,取而代之的是新的Snap ShotsSnap Shots

我从2006年12月27日开始使用snap.com提供的Snap Preview Anywhere这个服务。这个服务用起来很简单,只要在网站上注册就可以获得一段代码,粘贴到Blog模板里就可以了。当浏览者把鼠标移动到某个链接上时,旁边将弹出一个气泡显示该网址的预览。从2007年2月17日Snap Preview Anywhere新增了一些选项用于配置显示效果,到2007年4月6日增加了包括简体中文在内的7种界面语言,这个服务变得越来越好用了。

新的Snap Shots服务会对一些特殊的URL地址显示一些特殊的预览。比如Wikipedia,可以显示条目的摘要,而不再是以前小的看不清字的预览图片。snap.com网站和这些内容提供商进行合作,使得浏览者可以获得更多的信息。能被特别处理的地址大多是一些知名网站的页面,下面一一介绍:

  • Wikipedia的条目地址,比如en.wikipedia.org/wiki/WordPress,将会显示WordPress条目开头的部分文字。不过,现在好像还不能支持非英文Wikipedia的内容,我用中文Wikipedia中的WordPress条目zh.wikipedia.org/wiki/WordPress测试,显示的仍然是英文Wikipedia中WordPress条目的内容。这个功能在中国大陆无法使用,因为预览帧的网址内包含Wikipedia的网址字样,会被GFW掉。
  • imdb中的条目,比如imdb.com/title/tt0376994/,将会显示影片的导演、演员、剧情、影片分类等信息。还有演员的条目,比如Nicole Kidman的条目,将会显示演员的生日、传记、主演影片等信息。
  • 一些股票网站的股票页面地址,比如finance.yahoo.com/q?s=goog,将会显示出该股票的即时信息。
  • YouTube视频地址,将会直接显示播放界面,点击一下就可以播放了。比如蜘蛛侠3的预告片、获得2006 YouTube视频奖Here It Goes AgainFree Hugs Campaign
  • Amazon网络书店的产品页面,比如C++ Primer (4th Edition),将会显示图书的一些相关信息。
  • flickr网站的图片页面,比如flickr.com/photos/pieper/131850425/flickr.com/photos/yggg/466212711/。这个功能现在好像还不怎么稳定,有时会显示原来的网站截图,有时会显示该地址的图片,有时会出现三张图片,分别是该地址的图片以及它前后的两张图片,这样用户可以直接在Snap Shots的小框框里浏览整个专辑里的图片。
  • 公司的最新新闻,比如苹果公司,可以显示该公司的最新的相关新闻。
  • MP3文件,比如Nine Million Bicycles,会弹出一个类似YouTube flv播放器的界面播放该MP3文件。Snap Shots会读取MP3中的tag,在预览框中显示该MP3的歌手名、歌曲名和专辑名称,还会根据专辑名称去Amazon网站读取专辑图片,确实是很方便。前面的示例MP3文件包含ID3v1标签和APEv2标签,而且各项信息都填写的很完整。我想,如果tag没填写专辑信息,Snap Shots应该无法找到专辑图片的。另外,点击预览框上方歌曲名称即可直接下载该MP3文件。这个功能很好用,完全可以替换掉Audio playerAudio player插件。不过,和Audio player一样,因为使用的是基于Flash的播放器,所以不能支持MP3以外的其他格式,比如WMA等,孙浩-燕子飞了秋风凉这首歌就是WMA的。没办法,Flash只支持MP3文件的播放,Adobe和MicroSoft关系不好呵。

其他一些设置可以参考snap.com Blog中的说明文章(这个Blog的feed里显示它使用的是WordPress 2.0.2,它咋就不怕被黑呢?还是有意这样写来迷惑黑客的?)。另外Snap Shots现在有中文界面,连帮助什么的都是中文的。虽然翻译的不怎么好,但是也并不难理解,毕竟我们都学了二十年中文了嘛,哈哈。

另外,Snap Shots还提供了一个了Snap Shots Markup Language Technical Specification(这个pdf文件的预览图片上方显示着Adobe Reader 7.0的标记,Snap Shots服务是使用IE自动截图的,可以保证预览图片和最终用户看到的页面基本接近。),可以用一些span标签来写一段代码,Snap Shots的JavaScript会自动读取这段代码并生成一个图标链接。大致看了一下,大多数都只有一个参数,只有MP3文件可以自行设置歌手名、歌曲名和专辑名称,不过我们完全可以在MP3文件的标签里添加这些信息,Snap Shots会自动读取的。而且在增加图标后,原来的代码好像不能自动隐藏掉,还要求使用者自己添加style="display:none"这样的代码。我觉得还不如自己写链接呢,起码可以保证feed中的正常显示。

其他的选项都继承自旧的Snap Preview Anywhere。你可以设置弹出框框的颜色、语言、尺寸、是否显示搜索框、是否预览外部链接、是否预览内部链接。一般可以把预览内部链接的选项关掉,这样只有外部链接才会弹出预览。另外还可以给链接后面加上个小图标,并可以设置鼠标移到图标上显示预览还是图标和链接上都显示预览。由于JavaScript的执行会影响页面的显示速度,所以你可以设置这段JavaScript延后执行,使得页面可以在显示完毕后再慢慢执行Snap Shots的JavaScript代码。

这个服务的速度很不错,网址预览图片的获取和显示都很快。不过,毕竟它的服务器在国外,象我这样空间在国内,而且又用了K2这样庞大的模板,有时截到的图会缺少背景图片。当第一次显示某个链接的截图的时候,会提示“该地址已经进入待处理队列,请待会回来检查”。一般不到半分钟再把鼠标移到这个链接上就可以看到截图了。

虽然邮件里说旧的Snap Preview Anywhere的代码不必替换,但是我看了一下,JavaScript脚本的网址好像改了。另外,我也想看看新的Snap Shots有什么新选项可以调整,所以我又到网站重新设置了一遍,然后把新的代码添加到了模板的footer.php文件里。

Snap Shots这个服务还是挺好的,不仅样子酷酷的,而且确实方便了Blog访客,值得使用。

Unix体验中心——免费的Unix/Linux体验和测试环境

今天才看见一封Sun邮件列表3月25日发来的邮件,介绍了一项新服务:Unix体验中心。这个网站提供免费的UNIX/Linux体验和测试环境,

进去注册了一下,然后用PieTTY登录了上去。连接的速度非常快,看资料说是双网接入,教育网5M带宽,公网5M带宽。运行速度也不错,“2颗双核单线程的AMD Opteron 280芯片,CPU主频为2.4GHz,配置4GB内存”,确实是厉害。

操作系统是Solaris 10 Update 3 for x86/x64,带有Sun Studio 11集成开发环境和Java SE 5.0软件开发包,另外还带有C/C++编译器(cc和gcc),Fortran语言编译器(f95)。当然,还有Python,不过版本有点低,Python 2.3.3。

目前只有Solaris操作系统,但是四月五月内将会增加FreeBSD、Fedora和Ubuntu操作系统。这个服务对UNIX/Linux初学者很有帮助,对在UNIX/Linux下开发程序的程序员也很有用。以后学Linux、gcc、Python,不用再忍受DreamHost的低速了。

目前服务器不提供网络服务,但是wget下载、ftp登录其他服务器和telnet/ssh连接其他服务器都没问题。不过现在空间限制为20M,不能下太大的东西。另外,车东提到的使用ssh服务器做加密代理的方法在这里好像没法使用。不过也没什么,这个服务器在国内,一样要受GFW影响。另外,不知道这个公网教育网双线服务器,用于下载教育网资源如何?

服务器支持sftp,不过我的LeapFTP不支持sftp。网站介绍说可以用Core FTP和psftp。我想一些著名的ftp客户端,比如FlashFXP和CuteFTP应该都支持sftp登录吧。没办法,只好下载了和PuTTY配套的PSFTP,命令行的,用起来好不方便,而且还不能弹出右键菜单,导致我没法粘贴。

"ps -e"看了一下,看到好多的sshd、bash和screen,还有java和python,以及一些奇怪的程序,比如"a.out"。另外,好像有很多vi,但是只有很少几个vim,奇怪,不是说vim比vi好用吗?

DreamHost的shell还有这个免费服务,都很有用处。Linux初学者,除了可以在上面做测试以外,还可以参考人家的配置文件。就算有了自己的UNIX/Linux操作系统,也可以用这个免费服务看看别的操作系统是什么样子嘛。另外,做一些测试时,比如科学计算之类的,也可以用这个,毕竟人家的配置比普通PC高得多嘛。

P.S. 网站主页是用WordPress 2.1.2架设的,英文原版,没用中文包和中文版。而且,很多目录都可以显示列表,比如可以到这个地址看到网站安装的WordPress插件,这安全性实在是让人Orz。

4月5日,CSS裸体日

刚被肚破惊天提醒,今天是CSS Naked Day。按照网站的说明:"April 5th, simply remove all CSS from your website, stripping it entirely of its design."这项活动要求大家在4月5日这一天撤下网站的CSS文件,旨在宣传Web标准。

CSS对于一个网站的重要性,写Blog的人应该都清楚。K2的style都是一些CSS和图片文件,不同的style可以让K2呈现出完全不同的显示效果。最近我发现其他一些Blog平台的模板,全是一些CSS和图片文件,哪里配的上theme这个词,只能算是style。看过那些Blog平台,再看WordPress,唉,简直不是一个档次的。

依稀记得去年第一届CSS裸体日的时候我看到过关于这个活动的报道,当时刚把这个Blog架起来才几天,可惜我知道这个事的时候已经过了4月5日,所以也就没撤CSS。今年还好有肚破惊天的提醒,不然我又错过了。

我刚把Blog的CSS撤掉了。WordPress会通过检测模板目录下是否存在style.css来验证模板的正确性,所以直接将K2的style.css文件改名将会使Blog自动恢复默认模板。所以,我通过修改.htaccess文件,屏蔽掉对所有CSS文件的访问。嗯,裸奔的感觉还不错。

IE里behavior属性的一个小bug

我用的百优空间没有访问日志,所以我在K2模板的footer.php里加了一段代码,将每次访问的相关信息记录进一个文本文件里。这种方法的缺点是只能记录Blog页面的访问,其他的文件比如图片、js、CSS文件就没办法了。

这两天我的空间经常会提示数据库连接过多,而且垃圾评论也变得狂多。昨天修改了下这个插件,直接屏蔽所有全是英文并包含链接的评论。平常我很少看这个访问日志,只是每个月清理一下,以免影响速度。今天因为空间有问题,就去检查了一下,发现有很多对pngbehavior.htc文件的访问,有根目录下的/pngbehavior.htc,也有各个月份目录下的/2006/07/pngbehavior.htc,也有page下的/kfc/pngbehavior.htc。用WinRAR在我的网站备份文件里搜索了一下,发现CoolPlayer插件CoolPlayer插件的coolplayer.css文件里有"pngbehavior.htc"字样,具体的代码是:

img {
	behavior: url( pngbehavior.htc );
}

我对CSS了解不多,只记得CSS里background里会用到url,一般写成url(abc.png)表示和当前CSS文件同目录下的abc.png文件。而写成url(/abc.png)则表示网站根目录下的abc.png文件。写了个小html文件做测试,1.html文件里引用"/tmp/t.css"这个CSS文件,并加上一个div标签和一个img标签,img标签的src为"/mm.png",而CSS文件里写上:

img {
	behavior: url( pngbehavior.htc );
}
div{
	background: #FFF6BF url(haha.png) 8px 6px no-repeat;
}

把文件上传到网站上,开上IRIS嗅探器,在IE浏览器里输入这个html文件的地址。嗅探结果显示IE依次读取的是/1.html、/tmp/t.css、/pngbehavior.htc、/mm.png、/tmp/haha.png这几个地址。

也就是说,behavior里的url和background里的url还是有区别地,behavior的url不支持相对路径。写错了,behavior里的url不是不支持相对路径,是我的例子特殊了。behavior里的url的当前路径不是CSS文件的目录,而是当前页面的目录。也就是说,"/"目录下的html文件,"/tmp"目录下的CSS文件,background里的url使用的是CSS文件的当前路径"域名/tmp",而behavior里的url使用的是当前访问页面的当前路径"域名/"。bahavior属性好像只有IE支持,或许这是IE的bug?看访问日志里pngbehavior.htc文件的访问记录,User-Agent里有MSIE 6.0的,也有MSIE 7.0的,也就是说IE6和IE7里都有这个问题。

WordPress通过.htaccess文件接管访问,除了服务器上实际存在的文件外,其他的访问都被重定向到WordPress的index.php文件上。所以,这些对pngbehavior.htc文件的访问最终都会被WordPress处理,也就是说都会走一遍WordPress的整套程序,包括连接MySQL数据库、载入WordPress核心文件、载入插件、分析访问地址,最后给出HTTP 404。因为现在使用IE浏览器的人还是比较多的,所以对网站的性能还是有很大影响的,不仅占用了CPU资源,还增加MySQL连接数。而这个pngbehavior.htc文件,估计应该是为了解决IE无法处理png的alpha通道的问题吧,反正我也很少用Coolplayer,直接把这条CSS代码注释了事。

呃,目前CoolPlayer的最新版9.3版同样有这个问题。跟andot大大报bug去,啦啦~~

Update:最近接触到不少bug,包括IE的bug,Firefox 2.0里开发组非要在显示feed时只显示摘要,WordPress 2.1里开发组非要把以前feed里more标签无效改为有效。唉,这些关系民生,影响很多用户的事,怎么就没人管呢?IE也就算了,微软牛气嘛,这么多版本以来,哪个版本不能通过网页执行程序啊。Firefox和WordPress这样的开源软件也有这些问题,感觉开发组里没人为普通用户代言的,爱变成什么样就变成什么样。我越来越觉得WordPress不是我们普通WP用户的WordPress了,而是开发组的WordPress。

IE图片缓存bug

今天花了点时间调Blog的CSS。算起来,也有两个多月没怎么动过CSS了。

这次主要想解决下IE下显示的问题。因为我从去年3月以来一直用着Firefox,呃,上次开Maxthon是去年4月,所以没怎么在IE下检查过我的Blog。现在机器里没有Maxthon,想在IE环境下查看Blog就要开我的IE 6 SP2。可是,我的Firefox里设置了屏蔽51yes的统计代码,所以我每天在Firefox下看查看Blog不用担心51yes的统计数虚增。但是IE里没有屏蔽广告功能,所以,每次用IE进我的Blog时,我的内心都很挣扎。

文章内容部分的字体我又换回Verdana了。去年6月时详细地考虑了一下字体的问题,当时觉得宋体好点,尤其是标点符号的显示。比如“……”省略号,在宋体下显示在中间,而其他英文字体下只能显示在靠下的位置,类似六个点“......”这样。另外,引号和外国人名中间的间隔号也是宋体下好看一些。而字号,我用的是12px,觉得足够了。用了这么半年多,觉得宋体里英文的显示太不好了,显示的很小,不清楚,而粗体的英文,比如"W",简直就是一团黑。换回Verdana,则文章里的英文部分用Verdana显示。听说Verdana是微软特别找人为英文制作的,用来显示英文正文是最好的。而文章的中文部分则使用宋体。这里有点浏览器差异,在下一段介绍。整个CSS写成font: 12px/16px Verdana, 宋体, Sans-Serif;,显示效果还行。

浏览器的问题,Firefox是在字体列表中一次寻找,比如一个汉字,Verdana字体里没有,就往后找后面的字体,如果后面有一个楷体,就用楷体显示这个字。而IE和Opera,则是寻找一个有效自己,比如字体列表里第一个当前系统有装的字体是Verdana,就用Verdana显示文字,当遇到汉字Verdana里没有的时候,就使用系统默认的字体,而汉字的默认字体一般是宋体,所以汉字就被用宋体来显示。听说Vista里汉字的默认字体是微软雅黑,那么IE里我的Blog的文章正文部分应该就是以微软雅黑字体显示。不过我觉得微软雅黑不太好看,或许是不习惯吧。浏览器差异啊,真是个麻烦。

评论部分调整了一下,以前没注意CSS的匹配程度,导致custom.css里的评论CSS代码无法覆盖True Blue的CSS。现在评论部分好看多了。

True Blue 1.3.4是去年10月的事了,1.3.4_svn则是去年12月发布的,只是增加了在K2去年年底新增的TextTrimmer部分的CSS代码。这样算来,True Blue已经有4个月没什么变动了。到True Blue主页看了下,作者在Google Code建立了项目页面,1.4版已经在筹划中,现在已经beta 1了。1.4里做了不少改动,标题图片的显示方式换了,到时要重新用Photoshop制作我自己的标题图片了。

True Blue是用:before选择符对侧边栏里的每一个列表项进行处理的。在Firefox和Opera下可以看到效果,但是IE6里却没有效果,列表项前光秃秃的。原因当然是很简单,IE6不支持before选择符。我想在IE6下模仿Firefox下的效果,把Firefox下的页面截图,截取列表项前的标记保存成图片文件,然后通过CSS控制在IE下用该图片做列表项的标记。

很容易就做好了这件事,但是做好后却发现一个问题:侧边栏那么多列表项,每一个都要读一次图片,结果IE的状态栏上从“还剩160项”开始显示,半天才把这160多个图片下完。

在网上搜了一下,发现这是个很有名的IE的bug,叫做“IE图片缓存bug”。据这篇《IE缓存策略的BUG》里介绍,在使用innerHTML一次性添加多个相同图片的时候,IE不会使用图片缓存而重复多次读取图片。而且,微软网站也有一篇文章提到了这个bug,而这篇文章里则提到使用background-image一样会造成问题。唉,IE可真麻烦啊。

解决办法倒是有,通过JavaScript就可以。参考人家的代码写了一段js放在header.php里,刷新页面,却发现不起作用。或许,innerHTML里的图片和CSS里的图片还是有区别的吧。用IRIS嗅探发现,IE会先执行开头的js代码读取图片,然后再执行body里的js代码,最后再解析CSS,再读取160次那个小图片。

最终,没办法了,只有不用这个图片了。可恶的IE,○○××

DreamHost的down掉

昨晚7点半多一点,收到WatchThatPage的报告,我的一个位于DreamHost主机的网站无法访问。当即打开pietty,连接超时。Ping一下,超时。开代理连,超时。

WatchThatPage位于国外,它报告连不上就应该不关GFW的事。上DreamHost主页,也打不开。再开Google翻译连DreamHost主页,也打不开。瀑布汗,连DreamHost主页都down掉了。想了一下,记得桑葚的Blog用的是DreamHost,连了下yanfeng.org,发现也连不上。

这时,我已经确定是DreamHost服务器整体出问题了。当时在想,估计是网络出了问题,空间上的文件应该没事吧。到Gmail里一看,只有海豚在线。问了他一下,他说他哪里也上不去。又上cnBeta查看消息,结果没找到,于是,算了,反正数据应该没事。

今天上午和中午调了一下CSS,还到WordPress网站操着蹩脚的英语报bug。下午突然想起DreamHost的事。上cnBeta,还是没消息。灵机一动,打开Google Blog Search,直接搜索"DreamHost",然后按日期排序,发现最近几个小时的文章有很多讲这件事。digg.com的这篇文章发表于中午12点,说DreamHost坏了23小时,超过35万网站的管理员正在担忧网站的访客。月光博客的《Dreamhost主机大规模无法访问》说是DreamHost机房停电,而停完电后又发现核心路由器故障,导致所有服务器无法连接互联网。还有一篇英文的《Downtime with Dreamhost》,指向DreamHost网站的关于此次事件的两篇说明文章。从这个页面学到了一个新句子,"Not to be rude, but I probably know more about this than you!",嘻嘻。

现在DreamHost已经可以连上了,只是以前刚连上会显示欢迎信息,现在没了,直接显示命令行提示符。

现在是反思时间。以前遇到突发事件时找消息都是通过搜索引擎,一般来说,百度会比Google更新得更快些,所以都去百度搜。后来,有计算机方面的事情就去keso啊,月光博客啊这些知名Blog网站上去看,一般都会有消息。06年年底台湾地震的时候,懂得了可以去cnBeta看消息。现在才发现,Blog搜索才是获取新消息的最好办法。世界上那么多blogger,一旦有事情发生,肯定有人利马写出文章来发布到Blog上,而Blog搜索引擎,比如Google Blog SearchTechnorati,会在几分钟内索引到这篇Blog文章。所以,从Blog搜索引擎里可以很快得到最新消息。怪不得那么多人说离不开Technorati呢,嘿嘿。现在我终于理解“Blog就是媒体”这句话了。

当然,作为blogger,也应该在最短的时间内把自己得到的消息发布到Blog上,以方便别人搜索。自己得到的新消息post一下就好,抄文章就算了,嘿嘿。

Update:今早起床时,突然想起在西安看到过的发电机。我在西安住的地方,按照深圳、上海、北京这些大城市的话来说,就是个城中村。村里电线密布,线路严重老化,再加上村民们靠出租房子都富裕了,空调越来越多,一到夏天就经常因为超负荷用电把变压器烧了。因为一年总是会烧几次,而且变压器一烧就是一天没电用,而且夏天高峰期时还会临时停一天的电以保证其他地区电力的供应。所以,沿街的餐馆和银行等都自备了发电机。发电机的样子和拖拉机的机头一样,应该是经过改装专门用来发电的,烧的是柴油,开起来声音比拖拉机还大。每到停电的时候,满大街都是突突突的声音,吵死人了。

呃,假如DreamHost也自备一些这样的发电机,就不用为停电而烦恼了,嘿嘿。不过声音是大了点,而且高楼大厦都是密封的,少有窗户,通过中央空调来使空气流通。如果用上很多发电机,不知道会不会使大厦里遍布二氧化碳。

为自己的想法小寒一个。

rm文件的弹出窗口广告

一直没太注意rm文件的弹出窗口广告问题,平常下载的大多是冰鱼和伊甸园的我猜还有韩娱论坛的X-Man,都比较正规一点,不会带弹出窗口广告。偶尔下到一些有广告的电影,窗口一弹出来我就会立刻关上,所以少有中招。

最近偶然发现在使用暴风影音播放rm文件时也会弹出窗口,所以抽了点时间研究了下这个问题。原以为rm文件是通过在文件tag里设置一个属性,如果播放的rm文件的该属性值被设置成一个URL地址就在浏览器里打开这个URL。研究后我才发现,比我想象的要复杂点,rm文件可以内嵌一些很简单的小脚本,RealPlayer播放器读取rm文件时会执行这些脚本,从而在播放到某个时间时打开一个URL。

RealProducer Plus和Helix Producer Plus都自带一个rmevents.exe程序,可以修改rm文件的event部分。rm文件的event部分是纯文本的,只要按照固定的格式写好,RealPlayer播放器在播放的时候就会照着执行了。具体的event格式在Real网站的Helix Producer教程里有详细说明,只要用u 00:01:00.0 00:01:00.0 http://www.example.com/这样的代码就可以让这个rm文件在播放到1分钟时自动打开后面的URL。按照event的格式一条一行地写入一个文本文件内,然后用rmevents -i film.rm -e test.txt -o film2.rm命令即可把这些event信息加入rm文件,一个内嵌弹出窗口广告的rm文件就此诞生。如果浏览者的IE浏览器安全性不高,而rm文件内嵌的URL里又有病毒的话,很容易就可以让浏览者中招。

而清除弹出窗口广告的方法,和加入的方法一样,只有建一个空的event文件,然后写入rm文件就可以了。目前网络上好像有很多这样的程序,全部都是软件自带了rmevents.exe程序和它需要的/tools/rmto3260.dll文件,然后做一个GUI界面,让用户选择文件后调用rmevents程序将空的event文件合并到rm文件中。最近常看到一些电影在播放时显示出来的信息带有"RM去广告专家"字样,估计是一些人在下载了电影后用了这样的软件去处理过。下了个RM去广告专家 v2.10批量处理版,在安装目录里找到blank.txt文件,文件里放着如下代码。这样处理后的rm文件弹出窗口广告是没了,可是多了去广告软件的信息,够无耻。i命令是设置标题,a是作者名,c是copyright。a和c命令没有在Real网站的教程里提及,只有u和i被提及过,这个软件作者也算够强的。

i 00:00:00.0 00:00:10.0 RM去广告专家
a 00:00:00.0 00:00:10.0 www.591dir.com
c 00:00:00.0 00:00:10.0 用《RM去广告专家》清除RM恶意弹出广告

另外还有从RealPlayer播放软件入手的方法,只要删除RealPlayer目录下的/rpplugins/rpwe3260.dll文件,就可以把整个RealPlayer软件的浏览器部分禁用了,这样也不会再弹出窗口了。另外,在这里看到,有人写了一个小软件rpnopop,只要执行软件,点击“屏蔽弹窗”按钮,软件就会修改注册表,使得RealPlayer不再执行event脚本。不过作者说了,这个方法只在安装了RealPlayer软件的环境下有效,只安装了Real解码器的环境下依然无效。唉,Real公司咋就不紧张这个问题捏?

rmevents.exe程序有一个"-d"选项,可以把rm文件中的event给dump出来。这个命令可以用来分析rm文件的event代码,做成程序放到rm文件的右键菜单里最好了。

Update:昨天刚写了这篇文章,今天就中招了。已经用了rpnopop修改了注册表,但是对网页中的rm文件播放弹出的窗口无效。无奈啊,还是Firefox安全些。

Update2:关于暴风影音里rm弹出广告的问题,我昨晚又做了下测试。其实也不只针对暴风影音,因为所有的MPC播放器应该都是一样的。

在暴风影音里,如果设置rm文件的播放方式为DirectShow,则不会弹出窗口;如果设置为RealMedia,则依然会弹出窗口。而且,和RealPlayer稍有不同的是,如果脚本代码设置的是在RealPlayer自带的浏览器里打开URL,那么在RealPlayer播放会在自带的浏览器里打开,但是MyMPC里会调用IE浏览器打开。记忆中,这些年,大多数rm文件都可以正常在DirectShow方式下播放,只是偶尔有一些rm文件必须切换到RealMedia方式才能正常播放。(关于DirectShow和RealMedia两种方式,可以参考风雷影音中的RealMedia专题。)所以平常还是把暴风影音切换到DirectShow方式,如果遇到一些不规范的rm文件再使用rpnopop软件配合RealPlayer播放器或者使用rmevents程序吧。
暴风影音rm播放模式设置

另外我发现,网页中播放的rm文件好像也不受限制,所以还是不要在网页里看视频的好。Real公司还真麻烦...

给URL中的数字加1的JavaScript

一直都在想,如果有一个Firefox扩展,可以在工具栏增加一个按钮,点击一下就可以把当前页面的URL中的数字加1,自动打开下一个页面,那该是多好呀。不过,一直忙,没有抽空去找这样的Firefox扩展。

今天突发奇想,觉得可以用JavaScript做这件事情。没研究过JavaScript,靠着一点C++的底子写了一小段JavaScript代码。这段js可以放进Firefox的书签或者IE的收藏夹,点击它一下就可以打开当前URL的下一个地址。(也就是把URL中的数字加一)比如,当前页面的地址是"http://yskin.net/1.html",则点击页面后自动打开"http://yskin.net/2.html"。哈哈,我也会写JavaScript啦,bingo

所有WordPress架设的Blog,不论是否使用了永久链接,都可以通过"http://yskin.net/?p=1"这样的方式进行访问。另外,如果想一页一页的看,可以使用"http://yskin.net/?paged=1"这样的地址,依次加下去,就可以10篇10篇地看完所有文章了。所以,如果想遍历一个Blog的所有文件,用这个JavaScript最合适了。

随手打开抓虾,找了里面添加链接的代码,弄了下面这个东西,很方便吧。

如果你的浏览器是IE,右键点击下面的按钮,选择“添加到收藏夹”,忽略弹出的安全提示,接着选择存到“链接”目录,点击确定。
如果你的浏览器是FireFox(握手握手),把这个按钮拖到浏览器的工具栏中即可。
Next

Firefox 1.5.0.6和IE6 SP2下测试通过。

Update:升级,1.1,现在可以正确处理数字前面包含"0"的URL。

Update2:希望各位使用者到网站来右键添加链接,而不要直接在feed里添加。我倒不是为了访问量,只是刚刚发现在Bloglines里这篇文章的JavaScript代码都给过滤掉了。

有趣的Unicode的BOM

《有趣的Unicode的BOM》,这个文章标题抄自周曙光的网络日志这篇同名文章。抄标题的原因,详见文章末尾。呃,看到这里,你的手动了没?动了就是好奇心很强的人。如果是用鼠标拖动滚动条,电脑白痴;按PageDown键或者End键,电脑菜鸟;按Space键或者滚动鼠标滚轮,电脑高手。因为,“不知道IE工具栏第一个按钮的功能的,是普通用户;知道的,是高端用户。”

今天偶然看到那篇文章。(没有订feed看的习惯,555~~)Unicode这玩意很简单,又很复杂,值得好好研究。BOM这东西,有人说它是好东西,有人说它是罪魁祸首,反正说什么的都有。

文章提到3个问题,前两个是我所熟知的,最后一个我是第一次听说,而且在Google搜索一下,只有两个网站提到,自然,一个是我看的这篇文章,一个就是该问题的出处咯。

用Windows记事本写txt文件,在文件开头加入".LOG"字样,那么在每次打开文件时,记事本会自动在文件最后加上当前日期。这个是N久以前的,在Windows 98的时代就有的一个特性。我还记得当时Windows 98发布时,报纸上经常提到这个技巧,说是Windows 98的新功能。另外,微软网站的文档《How to Use Notepad to Create a Log File》里也介绍了这一技巧。(当年Windows 98发布时,我是多么的激动啊,现在的Vista已经没感觉了,唉,年轻不再)这个小技巧好像直到现在还是经常被提起,比如在各大电脑杂志上。而且,经常有人说这是复活节彩蛋。拜托,按下Ctrl+R,输入winrar,回车,点帮助,关于,点一下上面的图片和左边的图标,那个叫复活节彩蛋。隐藏在你身边,在某个值得纪念的日子,比如复活节,被开发商公布看到的办法,或者是你偶然发现,得到的一个惊喜,那个才叫复活节彩蛋。

联通的问题。“联通”二字的编码是"C1AACDA8",当记事本读取的时候会出现判断错误,认为这是一个UTF-8编码文件,以UTF-8编码方式打开,所以出现错误。虽然显示出来的是一个黑块,不过可并不是只有一个字符哦。C1AA的二进制是1100000110101010,按照UTF-8两字节来拆开,Unicode编码是1101010,也就是6A,而两字节的UTF-8要在80以上才能使用,所以这个UTF-8编码是不存在的,所以记事本不显示。而CDA8,二进制1100110110101000,拆开的Unicode编码是1101101000,也就是368。在宋体字符里查了一下,查不到,不知道是那个国家的编码,反正是显示不出来就是了,只能显示一个黑块。所以,文章最后给出的答案,“第一种情况是将联通的Unicode编码54801A90当成ASCII编码解析,所以出现一些方块乱码”,乱讲。还有xfocus论坛2004年1月的这个帖子,说4个字节中,前3个字节被当作BOM,只有第四个字节显示出来,乱讲 too. 不过,能知道UTF-8的BOM是3个字节,已经很高手了。

第三个问题,在记事本中输入"this sentences are notreadable",保存后再打开时变成中文乱码。这个事也是编码判断错误。其实想看记事本把它错误判断成什么编码是很简单的,在打开文件后,点文件->另存为,下面的编码一项就是记事本所认为的文本的编码方式。另外,在文件->打开里,选中一个文本文件,记事本也会立即进行识别,并把认为的编码方式显示在对话框下面的编码项中。(起码在我的Windows XP SP2里是这样的)这个字符写入文件后会被记事本认为是所谓的"Unicode"编码,也就是UTF-16编码。这也是记事本对编码判断的错误。xfocus论坛的那个帖子,说是什么Unicode头,乱讲 too.

联通的问题和第三个问题,都是记事本编码判断错误的问题。这显然不是复活节菜单,也算不上bug。你不告诉软件所打开的文件的编码方式,他当然只能猜咯。猜总是会猜错的嘛。比如行尾符的问题,假如你的文件里就没有换行符,软件又怎么能给你判断呢?不止记事本,就是UEStudio,在打开有“联通”那两个字的文件时,也是认为是UTF-8编码,而且它还把C1AA这个编码给解析出来了,6A对应的字符的小写字母"j",它给显示出来了。不过,经常在网上或者电脑杂志看到这个火星贴被翻出来,还大都加上什么“已经打了最新的SP2”补丁之类的。唉,就知道SP2,SP2出来很久了,那么多Hotfix打了没啊?

最后,该点题了。“有趣的Unicode的BOM”,其实是最可怜的BOM。上述三个问题,和BOM一点关系都没有,可是后两个所谓的“Windows的bug”却被硬赖在BOM身上。我们的BOM,我们的Byte Order Mark,是多么的可怜啊。其实记事本在UTF-8和UTF-16编码的文件开头写入BOM并没有错,因为下次再用记事本打开的时候它就好识别了呀。那么多电脑菜鸟,有谁会在发现乱码之后,在打开对话框里调一下,选择一个正确的编码啊?只会脱口而出:“Windows的bug,Windows真难用。”

P.S. 后两个问题可以作为测试题。当别人回答你“不知道”的时候,电脑白痴;回来“是编码的问题”,电脑菜鸟;提到"Unicode",电脑高手;要是提到BOM,这个人你一定要抓住啊,他就是所谓的牛人啊。在这个知道IE工具栏第一个按钮的功能就是高手的年代,能吐出"BOM"三个字,那是多么牛的人啊,虽然,虽然BOM和这两个问题一点关系都没有。

PS2 找到新浪的一篇报道《微软记事本“闹鬼” 常用汉字输入变黑点》,2003年的,或许联通的问题就是2003年才出现的吧。还有这篇《关于“微软/联通”记事本问题的解释》,介绍的也很详细。“当文档中所有字符都在C0≤AA≤DF,80≤BB≤BF这个范围的时候,notepad都无法确认文档的格式,没有自动按照UTF-8格式来"Display"。”这话好像说反了,如果所有字符都在(C0-DF, 80-BF)这个范围内,文件就会被以UTF-8编码解析。至于原因嘛,嘿嘿,这个范围正好是UTF-8两字节编码的范围:110xxxxx 10xxxxxx (c0-df)(80-bf)。而我觉得,事实上Windows记事本所采用的判断编码的策略,其实就是以UTF-8编码方式解码,如果解码过程没有出现错误,也就是说这个文件按UTF-8编码方式解码没有问题,没有不符合UTF-8编码的字节,那么,记事本就认为他就是一个UTF-8文件。这也是没办法,对于没有BOM的文件来说,只有这个办法。而且,在PHP里判断编码方式也是用的这种办法,我写的程序也是用的这种办法,想要更好的办法?更好的办法就涉及到解析字符串,分析出里面句子的意思,判断是否是符合逻辑的句子了。

html里title属性换行的方法

今天在写插件时,需要在一段字符的title属性里加入一大段文字。字符串本身用UNIX行尾符LF换行。我直接输出字符串,发现在IE和Firefox下都可以显示出断行。

<div title="123
456">text</div>

不过,Firefox的Html Validator扩展报了错。在网上搜了一圈,这里提到:

The (X)HTML DTDs define the contents of the title attribute as CDATA for which the W3C states:
User agents should interpret attribute values as follows:

  • Replace character entities with characters,
  • Ignore line feeds,
  • Replace each carriage return or tab with a single space.

大概的意思是,XHTML DTD定义title属性为一个CDATA,而根据SGML里CDATA的定义,浏览器应该:替换所有html实体;忽略LF字符;替换所有CR字符和tab字符为一个空格。

按照W3C的说法,执行这3步后,所有的CR和LF字符已经他们的html实体都已消失或变成空格了。看起来在title里换行变成不可能的事了。不过,Firefox好像并没有转换CR字符为空格,而是把CR给忽略了。而LF字符倒是没有被处理,直接换行了。上面的代码,不用UNIX行尾符LF,而是用Mac行尾符CR,在IE下还能换行,但是在Firefox下,CR字符直接被忽略了。我还是很想通过W3C的验证,所以做了一下测试,使用LF字符或者LF的html实体& #10;都是可以的。网上流传说可以用CR的html实体& #13;,其实只是IE中可以,Firefox下一样不行。如果不追求符合W3C,那还不如直接把字符串转成UNIX行尾符输出呢。

<div title="123& #10;456">text</div>

还有,title里有小于号和单引号好像并不要紧,但是有双引号就不行了。这么说来,把字符串里的换行和双引号给替换一下输出就行了?唉,复杂复杂,晕了。这里有一个介绍这方面问题的页面,不过没太看懂。

发现CR的全称是Carriage Return,Carriage是字车的意思,Carriage Return意思是字车复位。LF的全称是Line Feed,喂进一行,就是新起一行的意思。这起源于打字机时代,每打到一行的末尾,打字员要手工把字车推回第一列,字车复位后,纸会上升一行。所以就有了ASCII码值为13的CR和ASCII码值为10的LF两个字符。而DOS和Windows下文本文件的新行用CR和LF两个字符表示,UNIX下用LF,Mac下用CR。呼,这些资料大概在上个世纪我就知道了,不过一直记不住两个字符的ASCII码是多少,现在复习一遍,这下我应该能记住了。[via]

P.S. 好像C++里"\n"在Windows下输出CRLF,在UNIX下输出LF,而"\r"输出CR。PHP里是"\n"输出的是LF,"\r"输出的是CR。[via]