2006/12/31

影评:空战英豪 (The Flyboys)

今天是本年度最后一天,如果今天的 blog 不说上这么一句,似乎有些说不过去 :-p。想想以后写日期的时候就要用 2007 了,也许以后很长一段时间都不会写 2006 这 4 个数字,不免唏嘘……

我喜欢看两类战争片,一类是潜艇题材的,另一类是空战题材的。一个发生在氧气至关重要的高压环境中,一个冲上了云霄却仍然受到危险的万有引力的作用。呵呵,有意思么:)

今天要说的是空战英豪 (The Flyboys),上一次看空战题材的片子已经是一年多之前了。当时看的是飞行者 (The Aviator), 那部片子完全改变了我对 Leonardo DiCaprio 的印象,他的演技很出色。马上就要观看血钻 (Blood Diamond), 期待他能有更精彩的表现:)

还是回到主题。The Flyboys 在 IMDB 上平均得分是 7.8 分(见上文链接),人数不够多,得分不足以反映真实情况。如果我来打分的话,我会给 6.8 分:)

影片的剧情我就不再 ICP (Internet Copy & Paste) 了,网上很多。唯一印象比较深刻的是,空战英豪有几处似曾相识。回忆一下,没错,珍珠港 (Pearl Harbor)! 下面列举我发现的几处雷同情节。

  1. Jason 驾驶战机,带着他心爱的姑娘鸟瞰大地, vs 珍珠港中 Danny 驾机带着 Evelyn 去看云海奇观评价:显然后者在艺术上更胜一筹。
  2. 驾驶“小鹰号”战机的那位大哥牺牲前撞上敌机(敌舰?),vs 珍珠港中日本“神风”队员中弹后冲向地面上的停着的美军战机评价:分别是正反面的舍生取义,前者电脑特技略有不实之感。
  3. 驾驶“双刀号”的大反派在被 Jason 追击时使了一招行飞技巧:持续低空飞行,在快撞上建筑物时突然上升,意在使追赶者躲避不及撞上建筑物, vs 珍珠港中众飞行员通力合作引诱日本战机撞上高塔评价:前者通篇强调个人英雄主义,后者着墨于美军团队协作,后者在视觉上更具冲击力。

综述:空战英豪中的男女爱情部分和墨攻一样,基本上是画蛇添足,但是主题还是比较突出的;艺术成就虽然不及珍珠港,可还是值得一看的。

2006/12/29

严重谴责杭州电信、网通宽带联合涨价的无耻行径

两家宽带接入服务商在未向用户作出任何解释的情况下,悍然宣布从明年起宽带“执行新的优惠资费”: 杭州电信: http://www.hz.zj.cn/dxgg/dxgg86.html 杭州网通: http://www.hzcnc.com/ad/200612_zftz/index.htm 其中,杭州电信 1M ADSL 上涨 200 元,涨幅超过 25%.

两家服务商都允许老用户在 2007/1/16 前,按原来的资费标准续费,显示它们希望用户在年前主动续费。原来年末捞一票的办法,不仅可以抢银行,还可以设期限涨价。

两家平日里水火不容的竞争对手,而今在涨价问题上,所选择的涨价时机、价位、“优惠”续费终止时间那是相当的默契

2006/12/26

“同步”和“异步” (Sync and async)

在日常生活中,我们经常听到说“两件事同步进行”,意思是说,这两件事同时进行,这里强调的是同时、独立的概念。

在程序开发过程中,也会遇到“线程同步” (Thread Synchronization) 这种说法,是说防止两线程争用同一个共享资源,线程对共享资源的使用有先后之分。而另一种说法——“线程异步”——是说两线程同时运行,其中一个往往会在结束后以“异步回调” (Asynchronous Callback) 的方式通知宿主线程。

发现问题了吗?程序开发中的“同步”和日常生活中的“同步”,表达的概念相反,而“异步”则与日常生活中的“同步”相近。也许你会认为这是当初翻译时用词的问题,但事实上这是英语的问题,synchronize 本身就有“同进发生”的意思。synchronization 作为一个技术名词,含义发生了变化,强调一致性 (Babylon English-Simplified-Chinese dictionary). 巧合的是,即使有变化,仍然能继续用“同步”也能表达其意义,我的理解是“在同一基准上的步骤” :-p

语言是个奇妙的东西,不是么?

2006/12/22

Chosun Chinese version is GFWed?

今天打开朝鲜日报中文版网站,却突然“该页无法显示”,而官方韩文版和英文版日文版则没问题。用 tracert 一探究竟:

C:\Documents and Settings\Administrator>tracert -d chn.chosun.com

Tracing route to chn.chosun.com [218.145.28.34]
over a maximum of 30 hops:

  1     1 ms    <1 ms    <1 ms  192.168.0.189
  2    <1 ms    <1 ms    <1 ms  218.108.25.105
  3    <1 ms     *       <1 ms  218.108.253.93
  4     *        *        *     Request timed out.
  5     1 ms    <1 ms    <1 ms  218.108.253.81
  6     1 ms     1 ms     1 ms  219.158.32.129
  7     3 ms     4 ms     3 ms  219.158.9.25
  8    29 ms    29 ms    31 ms  219.158.4.105
  9  219.158.3.114  reports: Destination host unreachable.

Trace complete.

很明显,219.158.3.114 阻止了对 218.145.28.34 的访问。IP 所在地为北京网通(纯真 IP 数据库),莫非又是拜“伟大的墙”所赐?

这种做法,只会促使人们学会使用代理服务器,何必呢?

12/29 Update: 最近几天中文版已经可以访问了。

2006/12/21

IE外壳浏览器横向比较(一):中键点击与引用页

第一篇:中键点击与引用页

本次测试这 4 种浏览器软件在点击中键时是否能正确发送引用页。众所周知,现在大部分多页面浏览器 (Tabbed browser) 都支持在链接上点中键 (滚轮) ,从新的 tab 中打开这个链接的目标页面。

但是,在实际使用中会发现,有些下载链接如果用中键打开,可能会说你“没有权限”,或是“从外部访问”云云。为什么呢?这些页面的后台程序会检查你所请求页面的引用页是不是来自本站,用通俗的话说,就是检查你是不是从本站“点过来”的。如果它检测不到,就会认为你是从外部访问过来的。没有先访问本站,会降低它的流量,或是页面上广告的显示次数,等等其他让站长不爽的问题。

这当然是网站的一种自我保护行为,无可厚非。但问题是,你在用某些浏览器时,明明引用页和新打开页面是同一网站,可有时候还会有前面说的这种现象。这说明,那个浏览器没有正确发送引用页。

要测试页面的引用页,可以很简单地在地址栏运行这行代码:

javascript:alert(document.referrer);

弹出 messagebox 会告诉你当前页的引用页地址。如果什么都没有显示,则说明引用页为空,服务端程序会认为这个页面是直接输入地址或从收藏夹访问过来。

测试结果

在参与比较的 4 种浏览器中,能正确发送引用页的有:
IE 和 Sleipnir,掌声鼓励一下。
Maxthon 和 TheWorld 显然还没意识到这个问题。

本次横向比较到此结束。下期预告:正确获取收藏夹图标(favicon), 敬请留意。

IE外壳浏览器横向比较专题

从今天开始,我会不定期地写这个专题。参与比较的浏览器都使用最新公开发布的版本,包括:

  • Internet Explorer 7.0.5730.11
  • Maxthon 2.0.1.4986
  • TheWorld 2.0.1.0
  • Sleipnir 2.49

关于重要特性的比较,其他的大型 IT 网站已经发过很多,我只写一些平时不太常见的细节比较。

索引:
  1. 中键点击与引用页
  2. 正确获取收藏夹图标

2006/12/19

blog升级体会

Blog 升到 beta 后,顺便更换了模板,现在应该清爽一点了:-P

官方的 What's New 就不说了,说一下我的体会:

  1. 内容撰写模块对 HTML 转义字符的处理略有加强。只是略有而已,我发现它有时候会转过头,比如对 & 和 & 的处理。
  2. <$BlogSiteFeedLink$>莫名其妙输出为空。
  3. 根据自定义的 Feed Url 自作主张生成 RSS 2.0 的地址。比如我的订阅地址在 http://feeds.feedburner.com/janlay,它自动生成的 Atom 是这个地址,但 RSS 地址出错。
  4. 不知道为什么我的模板链接没有变成“布局”T_T,level 不够?内置模板似乎也没有使用布局代码。
  5. blog 的国际化处理得很好。它尽量把随语言变化的字面内容放在模板标记中,这样,用户可以在后台自行决定 blog 使用什么语言。
  6. 发布时间的格式必须按照显示的格式。显示的时间是 12 小时制,而且不是 AM/PM, 很不爽。我试了其他格式,结果都被复位成当前时间。
  7. 生成的 Atom 日志排序是按 update time, 而不是 create time, 结果导致日志一修改就被提到最前面去了,很郁闷。

12/20 update: 今天上午,beta.blogger.com 域名转向到 www2.blogger.com, 且 logo 处说"We're out of beta!" 嗯,beta 结束了。

2006/12/18

IE7pro Updated (v0.9.7)

简介

你紧跟微软的步伐,正在使用 Internet Explorer 7 (IE7)? 你不想看到正在使用功能更强大的 Google Toolbar, 而不想看到 IE7 的 Search Bar? 页面上恶心的广告越来越多?经常由于某些原因要切换代理服务器?像其他基于 IE 的浏览器那样随心所欲地使用“超级拖拽”? 那么,IE7pro 正好迎合了您的需求。

国人作品?

安装好 IE7pro 后,在 Tools 菜单可以看到它加入了一个命令,点击即可进入它的设置窗口。在 Super Drap Drop 设置中,居然发现了它内置了 Baidu 的搜索。很奇怪,IE7pro 没有读取 IE 自己的 Search Providers. 但是从这个选项隐约可以看到,IE7pro 可能是国人的作品。

很容易从网址知道,它的官方网站服务器在美国或加拿大。检索 whois 信息,可以发现注册商是 Godaddy; 注册人是 tao han, 韩涛?OK,本次八卦到此为止:)

2007/01/13 Update: 更新到 0.9.6 版本,增加鼠标手势支持。 2007/01/17 Update: 更新到 0.9.7 版本,修正若干问题。

2006/12/15

Visual Studio 2005 Service Pack 1 正式版发布

cnBeta 上看到这则消息。从下载页面来看,这次并没有出现 Beta 字样,因此,我暂时认为这个 release 是正式版本;另外,Microsoft 已经把 VS2005 SP1 的大多数语言 (包括简体中文,虽然我一概无视中文的开发软件) 版本准备好了。 从下载的文件名来看,相关的 KB 号是 926601. 但是,到本文写稿为止, http://support.microsoft.com/kb/926601 还不能访问,显示出 Microsoft 还没有准备好正式发个这个大型补丁包 (440M, 超过了 win2003 SP1) 。

2006/12/14

计划近几天把 blog 升级到 beta

上次提到过 blogger beta 解封,经过几天的观察,这个情况正在好转。现在这个 blog 编辑器对 HTML 转义字符的处理实在不敢恭维,有辱 Google 的名声。 最近几天会把 blog 升级过去,打算先用缺省模板,等熟悉了,有时间再改。原来 blog 上的日志也会逐步转移过来。 12/19 update: 今天完成 Blog 站点升级,但原来的日志尚未转过来。顺便检查了页面在 IE 6 中显示不正常原因,发现有一篇日志代码过长(其实也就是长那么一点点)。现在这个模板内容区域稍窄,等有空再整吧。

2006/12/12

Swapping tabs bug of TC7 beta2

昨天发现了最新版 Total Commander (TC, 当前最新版为 7.0 public beta 2) 的 cm_Exchange (Swap tabs, Ctrl+U) 命令存在一个 bug. 当左右两边要交换的 tab, 一个是 "locked, but directory changed allowed", 另一个是普通 tab 时,按两次 Ctrl+U, 会发现那个普通 tab 的标题并没有显示成当前目录名,而还显示为 locked tab 的标题。 附上两张 screenshots, 分别为交换前和交换后的状态。 TC tabs before swapping TC tabs after swap twice.png 我已将此问题反馈到 TC 官方论坛

2006/12/10

beta.blogger.com解封?

众所周知,blogger 的新版站点 beta.blogger.com (以下简称 beta) 由于 DNS 解析“出现故障”而无法使用,所以之前访问 beta 都是通过手动修改 hosts 来实现的 (之前曾经有过短暂的“恢复”)。昨天访问的时间还在提示 https 证书不被信任,今天就没见提示了。于是,我试着注释掉 hosts 中 beta 的解析,竟然奇迹般地可以访问了,而且浏览器不再提示证书的问题。不知道这次的恢复会不会像 11 月底那样只是昙花一现,今天特地记录一下 tracert 的结果:

C:\Documents and Settings\Administrator>tracert beta.blogger.com

Tracing route to beta.blogger.com [72.14.219.191]
over a maximum of 30 hops:

1 29 ms 30 ms 30 ms 220.191.128.139
2 30 ms 14 ms 30 ms host89-97.hz.zj.cn [202.96.97.89]
3 46 ms 30 ms 30 ms 220.191.132.249
4 45 ms 30 ms 30 ms 220.191.128.117
5 46 ms 61 ms 61 ms 202.97.43.181
6 61 ms 62 ms 62 ms 202.97.35.49
7 62 ms 62 ms 62 ms 202.97.33.38
8 62 ms 62 ms 62 ms 202.97.60.38
9 93 ms 93 ms 107 ms 202.97.4.46
10 187 ms 187 ms 187 ms 216.239.47.237
11 187 ms 187 ms 187 ms 72.14.239.13
12 * 233 ms 234 ms 72.14.233.117
13 265 ms 249 ms 249 ms 72.14.236.26
14 249 ms 265 ms 265 ms 72.14.236.173
15 249 ms 249 ms 249 ms 72.14.238.71
16 265 ms 249 ms 265 ms 216.239.43.182
17 249 ms 249 ms 249 ms ed-in-f191.google.com [72.14.219.191]

Trace complete.

2006/12/08

Customize Maxthon Search List

这次介绍如何自定义 Maxthon 的搜索下拉框,此文仅适用于 Maxthon 2.0 以上版本。 如果 Maxthon 正在运行,则关闭它。打开 Maxthon 安装目录下的{email_account}\Config\ui.xml, 查找包含有 "update.maxthon.com/client/m2/default/searchbar" 的 Parameter 值,复制这个完整的URL. 将复制的值在浏览器中打开,就会发现它其实是个 XML 文件。显然,只要我们自行修改这个文件和 ui.xml 中的地址,并把它传到网上去,就可以在其他地方使用自定义的搜索。 制作好自己的 XML 文件,并上传它,然后将前面所有找到的 Parameter 值都换成自己的 XML URL, 即可让 Maxthon 自行加载它。 FAQ Q: 为什么 Maxthon 没有加载自定义的下拉框? A: 首先,确保选中了 傲游设置中心 > 搜索 >“使用服务器提供的搜索引擎列表”。其次,确保自定义的 XML 文档语法正确(可以在 IE 中打开进行验证)。 Q: 修改了 XML 文件,但 Maxthon 并有重新加载它? A: 为了减轻服务器压力,貌似 Maxthon 过一段时间(具体多长不得而知)才会重新加载它。如果想要它立即重新加载,可以系统时间改到一年后,然后运行 Maxthon, 点搜索下拉框让它重新加载,加载完毕再把时间改回来。 Q: 可以创建子菜单吗? A: 根据测试,Maxthon 的地址栏 XML 和 搜索栏 XML 使用了相同的模式 (Schema), 且两者都可以根据 XML 渲染子菜单。但是到目前版本(2.0.1.3018) 为止,Maxthon 尚未实现搜索子菜单的鼠标响应(仅仅只是显示出子菜单),估计以后会有改进。 Q: 有现在可用的第三方 XML 吗? A: 是的,我制作了一份自定义的搜索引擎列表,地址在:http://janlay.com/public/Maxthon-Search-Bar.xml, 你可以将前面查找到的 URL 换成这个地址,它的效果如下: Customized Maxthon search providers

2006/12/05

Prevent New Context Menu by Permission

有些顽固的软件喜欢强行占领用户的浏览器,比如 QQ, Flashget, 一运行就会给你的右键菜单增加几个“功能”。

通过修改注册表键 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt 的权限,拒绝当前登录用户在这个键下创建子键,可以有效阻止软件添加 IE 的右键菜单,如图所示:
change permission in tc

2006/12/04

制作了两段铃声:说唱脸谱和 Moto (ogg格式)

今天为我的 Nokia 6600 制作了两段 ogg 铃声:

A couple of ring tones

感兴趣的话,可以从这里下载

2006/11/30

对招行网上银行系统很失望

昨天在淘宝上买书,顺便打开招商银行网上银行客户端设置一下。客户端一运行,立即出现 liveupdate (在线升级)窗口,并自动开始下载程序 (5.1.3.8版本),安装完成后,看上去一切如常。买完书后,去某论坛软件版闲逛,发现有人热烈讨论招行网银的问题,大惊失色,问题大概描述如下:

最新的招行网银客户端安装后,在 %systemroot%\system32 目录下生成如下 3 个文件: sbmc32.dll sbmc32.sys sbmc32.vxd 并在 %systemroot%\system32\drivers 目录下生成 kbwatch.sys 文件。 同时,运行客户端会导致 Windows Firewall 自动启用,并关闭远程桌面功能。 后一个问题还好理解,毕竟它的出发点是让系统更安全 (但是不应像流氓软件一样悄悄更改系统设置,通知用户是有必要的)。前面关于那 4 个文件,则有问题。sbmc32.dll 其实就是大名鼎鼎的 WinIO.dll 改名而来 (改名之后看上去很像招行自行开发的软件),网银客户端启动需要调用这 3 个文件,并且将其中任何一个改名都会导致网银客户端启动失败。 那么 kbwatch 呢?似乎客户端已经不需要它了,网上也有人说这个文件已经不需要了,可以安全删除。因为它的名字实在太诡异——keyboard watch, 不放心,就把它删除了,并删除注册表中一切与之相关的键值。谁知,后面的事情差点让人崩溃! 今天回家打开电脑,进入系统后发现键盘无法输入任何字符,已经排除连接问题——键盘指示灯亮。进入 Device Manager, 现在键盘设备上居然出现感叹号,显然 Windows 认为键盘设置有问题。 这时候已经无法用键盘输入字符,连输入法都自动关闭了。联想到 kbwatch.sys 与招行网银有关,通过收藏夹进入招行网站,重新下载客户端程序,安装完成后重启,键盘居然神奇地恢复工作了! 我想看一下是否这次新的安装自动添加了 kbwatch.sys, 结果让人感到意外,不仅 %systemroot%\system32\drivers 目录下没有这个文件,连 %systemroot%\system32 下也没有 sbmc.* 的那 3 个文件! 现在分析一下,情况可能有两种,招行遭到铺天盖地的口水讨伐之后,(1) 悄悄修改了安装程序,使之自动删除这几个可疑文件,或 (2) 将这几个文件重新打包或换马甲,以平息民愤。 今天安装这个版本后,同时解决了另一个困扰已久的问题:如果在 QQ 登录时密码输入稍快,就会返回密码错误的提示(必须以很慢的速度输入密码,才能正常登录)。猜想可能是网银和 QQ 的两个驱动级(现在“流氓软件”普遍使用的伎俩)软件互相打架所致。 经过今天这次事件,我决定不再信任招行网上银行,等我再买完一本书,就会去营业厅注销网上银行业务。唉,招行这个证书我可是连续用了 4 年啊 T_T, 不过保住血汗钱最重要,以后还是不要碰网上银行这个烫手的山芋好了。

12/01/2006 补充:经过多人证实,昨天招行确实悄悄更新了安装程序,并将几个有争议的文件重新“处理”过,不再使用驱动级组件。

2 Steps to Create Search Provider

如果你正在浏览我的网站,而不是通过 RSS 订阅;如果你正在使用 Internet Explorer 7 (IE 7), 而不是基于 IE 7 的外壳浏览器 (TheWorld, Maxthon, NetCaptor, etc.), 你会发现 IE 7 右上角的搜索框发生了微小的变化——它的下拉按钮显示为橙色:

IE 7 found new search provider

New search providerAdd search provider

很明显,变化的颜色激发了用户进一步探索的欲望,而又不至于影响当前的浏览。点开它,如上图所示,IE 7 发现这页面可以提供 Search Provider (以下简称 SP). 这是个很吸引人的特性,能帮助用户快速添加特定的搜索引擎。IE 7 官方网站已经有一些可用的 SP, 但显然不能满足用户的个性需求。

现在,我们用两步创建自己的 SP.

1. 向内添加这样的 <link> 标签:

<link title="NAME-OF-THE-MENU-ITEM" href="YOUR-XML-URL" type = "application/opensearchdescription+xml" rel="search">

这里输入你要显示在菜单上的名字和 XML 配置文件的地址。

2. 创建自己的 XML. XML 格式参考:

<?xml version="1.0" encoding="UTF-8" ?>
<opensearchdescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<shortname>janlay's blog Search</shortname>
<description>Search janlay's blog.</description>
<tags>janlay's blog Search</tags> <contact>janlay</contact> <img height="16" src="" width="16" type="image/png" />http://janlay.com/favicon.ico</img> <url type="text/html" template="http://search.blogger.com/?as_q={searchTerms}&amp;ie=UTF-8&ui=blg&bl_url=janlay.com"> </opensearchdescription>

这里各元素所表示的意义都很直观,不必赘述。值得注意的是,template URL 如果包含 &, 则应写成 &amp;amp; 用以将 XML 的 & 转义。

创建自己的 SP 就这么简单:)

补充:IE 7 菜单项是 Add Search Providers, 注意到这里的 provider 是复数。由此可推知 IE 7 应该支持多个 SPs, 方法就是多写几个 <link> 标签

2006/11/29

Microsoft Bluetooth Driver for Windows Server 2003

Microsoft 在 Windows XP 中内置了蓝牙 (bluetooth) 支持,而使用 Windows Server 2003 的用户就无福享受了,是否有人提取过 XP 的内置驱动程序呢?经过一番搜索,有人提取了 XP 中文版的驱动程序,虽然可以直接安装在英文版 Win2003,但总觉有一点点缺憾(部分设备名称和帮助文档是中文)。改装之后,现在可以完美地安装在英文版的 Win2003 系统中:)

Device Manager with bluetooth

Bluetooth CP & System info

需要英文版驱动程序的朋友可以从这里下载: Download Microsoft Bluetooth Driver for Windows Server 2003

2006/08/23

Remove NB46 manually

转载自精品论坛,原作者:foxzhang

  最近好像中这个的很多,今天一个朋友也中了这个,上午琢磨了一个小时,手工给它清除了,现在把我清除的方法给大家参考一下

  1、用dos启动盘进入纯dos,进系统的system32目录,删除smflash.ocx、sql32.dll、group.dll、tasklist.dll这几个文件

  2、然后进入安全模式,打开注册表(regedit)查找{14A21378-5BB1-4BC4-95D5-5D3F51527F6F}有关的项目,全部删除;查找NB46,相关项全部删除

  3、然后,手工改注册表中IE首页或者用其他工具修正IE首页都可以

  4、看看program file目录中是否有NB46的目录,有就删除,没有就算了。

  5、重启,搞定。

  这个破玩意是利用svchost启动时动态加载dll的,比较隐蔽,很多程序都无法发现根源,这可能是以后垃圾软件的发展趋势了,要查杀难度都大了很多。国内的这些开发者都把脑筋用到歪门邪道上了。

2006/08/15

Get rid of the SQL-Server-2005-error in ASP.NET 2.0

ASP.NET 2.0 开发者经常会遇到这么一个奇怪的问题:明明没有安装 SQL Server 2005, 却在应用程序启动时得到错误信息,说连不上 SQL Server 2005, 提示如下:

An error has occurred while establishing a connection to the server. Whenconnecting to SQL Server 2005, this failure may be caused by the fact that underthe default settings SQL Server does not allow remote connections.

这个现象仅出现在通过 IIS 访问的情况下,而通过 File System 方式启动却没问题。

我的办法是,在 [connectionstrings] 后面紧接着加上 [clear], 删除所有内置的连接串,然后写上自己的 connectionstring.

另外,有时候远程 SQL Server 机器如果无法获取 IP 地址,也可能会出现这个问题,在使用 VPN Connection 无法解析计算机名时比较多见。解决办法是 Data Source 的值使用 IP 地址,或者在 hosts 中强制解析计算机。