2006-08-28

Picasa Web Alibums支持RSS



今天才发现,原来Picasa Web Alibums是支持RSS的,因为IE7的RSS按钮变亮了。
虽然没有给出地址,但是在页面代码中可以找到如下片断:


<link
rel="alternate"
type="application/rss+xml"
title="RSS Gallery Feed."
href="http://picasaweb.google.com/lh/rssUser?uname=xxx" />

其中uname="你的Google账户名"。

这样,我们就得到了RSS的地址:
“http://picasaweb.google.com/lh/rssUser?uname=xxx”

强加于人的烦人站点

 
您是否注意到一些网站曾强行闯入您的视线?是的,本文要讨论的就是这类站点。当您在页面之间导航时,这类站点会悄悄打开其它浏览器窗口。通常情况下,这些意外的窗口仅显示一些在线广告之类的无用内容。这些窗口通常称为弹出式窗口,一般是通过页面的脚本调用 window.open 方法来实现。(有关详细信息,请参见 open 方法(英文)。)尽管 window.open 方法有时会给人带来一些烦恼,但是如果使用得当,完全可以通过该方法构建功能强大的应用程序。

Internet Explorer 开发小组经常收到有关希望禁止弹出式窗口出现的用户请求。这使他们面临两难的选择:是允许开发人员自由使用这一孕育巨大潜能的工具为客户提供完美的解决方案,还是应该对平台进行限制以使开发人员不致于滥用这一功能?Internet Explorer 小组的最终意见是:除了导致安全隐患的情况之外,应尽可能允许开发人员灵活使用这一工具来构建功能强大的应用程序,而不要强加一些不适当的限制。

下面我想说明一下为什么弹出式窗口功能是必不可少的,还将就站点如何留住访问者(或至少消除他们的不满情绪)提出一些建议。

必不可少的弹出功能

显示其它窗口的功能非常有用,它能使用户在保留上下文的情况下查看相关的内容,这一功能在 Web 的很多地方都得到了利用。用户通常很难意识到自己使用了另一个窗口,他们在执行任务的过程中非常自然地就打开了这个窗口。

MSDN 使用 Internet Explorer 提供的在线参考资料就是成功使用 window.open 功能的一个示例。在浏览器中打开 onblur 事件(英文)网页。如果向下滚动,将会看到一段示例代码和"Show Me"按钮,单击此按钮就可以看到示例代码的效果。单击此按钮后,示例代码的运行结果将显示在一个单独的新窗口中。在这种情况下,弹出功能是必不可少的,因为它为用户保留了上下文,使用户能同时查看示例和引用的页面。

如果浏览器限制 window.open 功能,当前 Web 上的很多站点就无法正常工作。尽管我们不关心那些仅仅创建弹出式广告的站点是否崩溃,但是很多合理使用这一功能的站点也会遭殃。

使用不当的情况

我们来看一下滥用这一功能的情况,我故意提到了"淫秽"一词,因为滥用这一功能通常都与淫秽站点有关。我将以下现象称为"俘获用户":每当您单击到另一页面的链接时,或尝试关闭浏览器窗口时,该页面的一些脚本将俘获这一事件,然后强行打开另一个浏览器窗口。似乎色情站点使用这一技术的频率最高。

这种情况最令人恼火。特别是当您在 Web 上无意之中进行了一次搜索,意外地闯入这类站点时更是如此。设想一下突然发现自己不知不觉打开了五个或六个窗口,每个窗口充斥着淫秽的图像时,您有什么样的感受;更糟的是,当您试图关闭其中一个窗口时,反而弹出了另外两个类似的窗口!这不仅令人恼火,简直是对人的无理侵犯。无辜的用户要想逃离这源源不断的图像流,唯一的方法就是使用计算机上的"重置"按钮。

这类站点之所以这样做,无非是为了引诱用户去浏览从而增加广告收入,因此它们不大可能听取我提出的有关如何合理使用弹出功能的建议。尽管如此,我还是要呼吁这类站点不要玩俘获用户的把戏,重新为自己的内容确定等级(请参见为 Internet 内容划分等级(英文)),以使用户能正确设置浏览器,避开这类站点。

合理使用的情况

以下我总结了合理使用这一技术应注意的几个问题。如何使用这一功能,最后的决定权在您。但是请记住,如果滥用了这一技术,就会激怒访问您站点的用户,他们很可能就再也不会访问它了。

  1. 仔细考虑站点面向的用户群。他们是否真正理解多个窗口的概念?
    本专栏的读者当然了解如何同时运行多个应用程序以及如何在它们之间切换。但是,也要考虑缺乏经验的计算机用户的处境,对他们来说,管理多个窗口可能是一项艰巨的任务。如果希望毫无经验的用户经常访问您的站点,那么在单个窗口中提供站点的整个用户界面可能更合适,这样用户就不会丢失上下文,也不会对窗口切换感到无所适从。

  2. 直接响应用户操作时只打开一个新窗口,并考虑如何使用户明确这一点,即他们的操作将打开一个独立窗口。
    在我看来,最令人恼火的事之一就是:计算机程序在用户没有执行任何操作的情况下就打开一个新窗口。如果您使用 window.open 只是为了直接响应用户操作,则用户就会将该操作与结果联系起来。如果在用户操作与结果之间存在较长的延迟时间,则用户很难会想到这两者之间存在的联系。

  3. 如果只是为了显示一个广告,请不要使用弹出功能。
    如果广告不是用户访问的主站点的一部分,将不可能真正引起用户的关注。

  4. 不要在您的站点上玩俘获用户的把戏。
    当用户离开您的站点时应及时提示用户,询问他们是否希望保存特定状态。用打开另一个窗口来俘获用户是十分无礼的,很难吸引用户再次光临您的站点。

使用动态 HTML 代替弹出式窗口

动态 HTML 的功能非常强大,可以构建出灵活的应用程序。几年以前,整个 Web 都是静态的;每当用户单击某个链接时,服务器都会给他发送全新的页面。随着 Java、插件和 ActiveX 控件的引入,大大提高了用户交互性,但是它们不能与页面的 HTML 内容很好地集成。Microsoft 在 Internet Explorer 4.0 中首次加入动态内容支持功能,这一功能在 5.0、5.5 中不断得到加强。在现在的 6.0 预发布版中,提供了一系列更加丰富的功能。

有了这些功能后,就可以将所有用户界面纳入一个浏览器窗口中,使用户感到自己正在运行一个完整的应用程序。这里举出一个我喜爱的示例,blox.com(英文)。这个公司提供一个在线电子表格和演示软件,该软件在 Internet Explorer 浏览器中运行,不需要安装任何其它组件。该解决方案仅限于使用 Internet Explorer 来访问此站点和运行应用程序。尽管如此,它还是表明借助动态 HTML 完全可以获得丰富的 Web 体验,而不必使用给人带来烦恼的附加窗口。

有一种技术可以将独立内容作为页面的一部分来提供,这就是"内部帧",即通常所说的 IFrame(由于使用了 <IFRAME> 标记)。IFrame 使得独立的 HTML 文档可显示为父文档的一部分。(请参见 IFRAME 元素 | iframe 对象(英文)。)

现在 Netscape 6 已支持该功能,而 Internet Explorer 从版本 3 开始就支持该功能了,因此这一技术在 Web 上的应用将会越来越广泛。使用这一方法后,就能避免与帧集有关的开销和布局限制,更有效地管理站点上的内容。

要避免使用多个浏览器窗口,也可以在用户的浏览器窗口上下文中使用 HTML 对话框与用户交互。请参见"好的对话框的重要性"(英文)一文,这篇文章是我去年写的,其中涉及到这方面的内容。

最后提示

由于本专栏是围绕新窗口展开论述的,因此在本文即将结束之际,我想提醒 Internet Explorer 超级用户对可能被忽略的一个问题加以注意。当您单击以电子邮件方式发送给您的超级链接时,可能会发现引用的页面显示在已打开的浏览器窗口中。这种行为的原因只是为了最有效地使用您计算机的资源。尽管如此,我们也认识到对于超级用户来说,可能并不希望这样做。因此,您可以选择是否希望总打开新的浏览器窗口。

要做到这点,请转到"工具"菜单,选择"Internet 选项..."对话框。在"高级"选项卡下,确保"重新使用启动快捷方式的窗口"选项不被选中。由于我经常要打开多个浏览器窗口并链接到以电子邮件发送给我的超级链接,因此我没有选中该选项。这样我可以对打开的所有浏览器窗口进行更精确的控制。
 
 
David Massy 偶尔会戴上太阳镜扮酷,不过摘下墨镜的他是 Windows 和 Internet Explorer 技术的宣传人,也就是说,他负责向 Microsoft 的客户们介绍如何能够将各种技术发挥至极致。在成为技术宣传人之前,Dave 是 Internet Explorer 小组的项目经理。因为 Dave 来自英国,他总是在不懈地教导美国同事们如何正确地读"tomato"这个词。
 
 
 

2006-08-27

Windows XP Easter Eggs

 
在"纸牌"游戏(sol.exe)中,按下"Shift + Alt + 2",会看到赢得游戏后指派散落的画面。
Solitaire:
Secret - Instant Win
Instructions - Press Alt + Shift + 2 during game play to instantly win.
Secret - Draw single cards in a Draw Three game
Instructions - Hold down CTRL + ALT + SHIFT while drawing a new card. Instead of drawing three cards you will only draw one.
 
新建一个空白的文本文档,输入"Bush hid the facts"(布什隐藏了真相?),保存后重新打开,会发现"Bush hid the facts"变成了乱码(布什隐藏了什么真相?)。
 
在"空当接龙"游戏(freecell.exe)中,开局之后按下"Ctrl + Shift + F10",然后在任意一张纸牌上点击鼠标2次,你会赢得本局游戏。如果在"选局"的时候输入"-1"或者"-2",你会进入隐藏的牌局。
FreeCell:
Secret - Instant Win
Instructions - Hold down Ctrl + Shift + F10 during game play. Then you will be asked if you want to Abort, Retry or Ignore. Choose Abort, then move any card to instantly win.
Secret - Hidden Game Modes
Instructions - In the "Game" menu choose "Select Game". Enter -1 or -2 to activate the hidden game modes.
 
这个"扫雷"的彩蛋,我没有试验成功......
Minesweeper:
Secret - Reveal Mines
Instructions - Minimize or close all running applications. Launch Minesweeper, then type xyzzy. Next hold down either shift key for one second. Now when you move the mouse cursor over a Minesweeper square you will see a tiny white pixel in the top left corner of your desktop screen. This pixel will change to black when your mouse moves over a mine. You may need to change you desktop background to a solid color other then white or black to see the pixel.
 
这个"三维弹球"的彩蛋,我没有试验......
Pinball:
Secret - Extra Balls
Instructions - Type 1max at the start of a new ball to get extra balls.
Secret - Gravity Well
Instructions - Type gmax at the start of a new game to activate the Gravity Well.
Secret - Instant Promotion
Instructions - Type rmax at the start of a new game to go up in ranks.
Secret - Skill Shot
Instructions - Launch the ball partially up the chute past the third yellow light bar so it falls back down to get 75,000 points. There are six yellow light bars that are worth a varying amount of points:

First: 15,000 points
Second: 30,000 points
Third: 75,000 points
Fourth: 30,000 points
Fifth: 15,000 points
Sixth: 7,500 points

Secret - Test Mode
Instructions - Type hidden test at the start of a new ball to activate Test Mode. No notification will be given that this is activated but you can now left-click the mouse button and drag the ball around.
Secret - Unlimited Balls
Instructions - Type bmax at the start of a new ball. No notification will be given that this is activated but when a ball is lost a new ball will appear from the yellow wormhole indefinitely. Once this is activated you will be unable to activate other secrets without restarting the game.


 

Windows Vista the Last of its Kind

 

Vista will be the last version of Windows that exists in its current, monolithic form, according to Gartner. Instead, the research firm predicts, Microsoft will be forced to migrate Windows to a modular architecture tied together through hardware-supported virtualisation. "The current, integrated architecture of Microsoft Windows is unsustainable - for enterprises and for Microsoft," wrote Gartner analysts Brian Gammage, Michael Silver and David Mitchell Smith.

Windows Media DRM遭破解

一个名为FairUse4WM的新软件近日成功破解Windows Media DRM 10/11,能够将原本版权保护的音乐文件和DRM版权保护信息剥离开,直接获得音乐文件。

目前已经测试证明,这款新软件能够迅速将Napster To Go等在线音乐付费服务的音乐文件DRM部分剥离,使用户可以在任何其他播放器中播放获得的新音乐文件。

目前,微软已经强行关闭了FairUse4WM的开发者论坛,并且启动损失补救措施,以防止整个DRM基础的在线音乐业遭受剧烈冲击。

2006-08-26

site feed does not validate



SpoonDrift的Feed始终无法通过W3C的 FEED Validation,每次都提示这样的错误:

This feed uses an obsolete namespace

<feed xmlns="http://purl.org/atom/ns#" version=" 0.3" xml:lang="en-US">

This feed is using an obsolete namespace used by an obsolete snapshot of Atom, which is not supported by this validator.

FEED Validation Service提供了解决这一问题的方法:

Blogger users with access to PHP can use these instructions.

圆珠笔是如何发明的:改变问题本身的艺术

 

Hornbill Literary Essay:在十九世纪三十年代的欧洲大陆,一种方便,价廉的圆珠笔开始在书记员,银行职员甚至是富商中流行起来。制笔工厂开始大量的生产圆珠笔。不久却发现圆珠笔市场严重萎缩。原因是圆珠笔前端的钢珠在长时间的书写后,因摩擦而变小继而脱落导致笔筒内的油泄露出来。弄的满纸油啧,给书写工作带来了极大的不便。人们开始厌烦圆珠笔,从而不在用它了。

一些科学家和工厂的设计师们开始为了改变"笔筒漏油"这种状况进行了大量的工作。其中一个科学家做了大量的实验。他实验了上千种不同的材料来做笔 前端的哪个"圆珠",以求找到寿命最长的"圆珠"。但结果却不很理想。 这时一个叫马塞尔 比希的人却很好的将圆珠笔做了改善,解决了"漏油"的问 题。他的成功是得益于他的一个想法。"既然不能将圆珠笔的寿命很好的延长,那为什么不主动的控制圆珠笔的寿命呢?他所做的工作只是在实验中找到一颗"钢珠"所能完成书写的"最大用油量"。然后每支笔所装的""油"都不超过这个"最大用油量"。 这样,方便,价廉又"卫生"的圆珠笔有成了人们最喜爱的书写工具之一。

2006-08-25

Windows Live Gallery Beta

Free content to personalize your Windows Live sites and software—choose from many useful and fun choices - Try it






What it is
A site where you can download free add-ons and extensions to personalize your Windows Live and PC experiences
What it gives you
• Quick and easy browsing so you can zero in on what interests you • Fast and simple installations
• Ratings and reviews from other users to help you find the best, newest stuff
• A way to share and upload your own content and creations for others to use
• A single place to find all kinds of Gadgets, macros, add-ons, extensions, and other mini-applications for Windows Live and Windows Vista
• Quick and easy browsing so you can zero in on what interests you
• Fast and simple installations
• Ratings and reviews from other users to help you find the best, newest stuff
• A way to share and upload your own content and creations for others to use

Drop Pluto or add Xena as planet


By ALICIA CHANG
THE ASSOCIATED PRESS
LOS ANGELES - Our solar system is suffering an identity crisis.

For decades, it has consisted of nine planets, even as scientists debated whether Pluto really belonged. Then the recent discovery of an object larger and farther away than Pluto threatened cosmic chaos.

Should this newly found icy rock known as "2003 UB313" become the 10th planet? Should Pluto be demoted? And what is a planet, anyway?

Ancient cultures regularly revised their answer to the last question and present-day scientists aren't much better off: There still is no universal definition of "planet."

That all could soon change, and with it science textbooks.

At a 12-day conference beginning today, scientists will conduct a galactic census of sorts. Among the possibilities at the meeting of the International Astronomical Union in the Czech Republic capital of Prague: Subtract Pluto or christen one more planet, and possibly dozens more.

"It's time we have a definition," said Alan Stern, who heads the Colorado-based space science division of the Southwest Research Institute of San Antonio. "It's embarrassing to the public that we as astronomers don't have one."

The debate intensified last summer when astronomer Michael Brown of the California Institute of Technology announced the discovery of a celestial object larger than Pluto. Like Pluto, it is a member of the Kuiper Belt, a mysterious disc-shaped zone beyond Neptune containing thousands of comets and planetary objects. (Brown nicknamed his find Xena after the TV warrior heroine; pending a formal name, it remains 2003 UB313.)

The Hubble Space Telescope measured the bright, rocky object at about 1,490 miles in diameter, roughly 70 miles longer than Pluto. At 9 billion miles from the sun, it is the farthest known object in the solar system.

The discovery stoked the planet debate that had been simmering since Pluto was spotted in 1930.

Some argue that if Pluto kept its crown, Xena should be the 10th planet by default. Purists maintain that there are only eight traditional planets, and they insist that Pluto and Xena are poseurs.

"Life would be simpler if we went back to eight planets," said Brian Marsden, director of the astronomical union's Minor Planet Center in Cambridge, Mass.

Still others suggest a compromise that would divide planets into categories based on composition, similar to the way stars and galaxies are classified. Jupiter could be labeled a "gas giant planet," while Pluto and Xena could be "ice dwarf planets."

"Pluto is not worthy of being called just a plain planet," said Alan Boss, an astrophysicist at the Carnegie Institution in Washington, D.C.

"But it's perfectly fine as an ice dwarf planet or a historical planet."

The number of recognized planets in the solar system has seesawed based on new findings. Ceres was initially classified as a planet in the 1800s, but was demoted to an asteroid when similar objects were found nearby.

Despite the lack of scientific consensus on what makes a planet, the current nine -- and Xena -- share common traits: They orbit the sun. Gravity is responsible for their round shape. And they were not formed by the same process that created stars.

Brown, Xena's discoverer, admits to being "agnostic" about what the international conference decides. He said he could live with eight planets but is against sticking with the status quo and would feel a little guilty if Xena gained planethood because of the controversy surrounding Pluto.

"If UB313 is declared to be the 10th planet, I will always feel like it was a little bit of a fraud," Brown said.

International Astronomical Union, http://www.iau.org/

Internet Explorer 7 RC 1



在发布IE7 beta3版将近两个月后,微软刚刚正式发布了IE7的重大升级版本:RC1(发行候选版)。根据IEBlog的更新,IE7 RC1版相比之前的beta3版有了较大的改进,包括运行性能、稳定性、安全性和兼容性的提高。更明显的改进如下:

1.IE7 RC1版在安装时会自动检测电脑上所安装的IE7旧版本,并且会自动将它删除,省却了用户手动删除的步骤;
2.IE7 RC1版在安装时会像FireFox那样,自动检测之前所安装的Add-on(附件或插件)的兼容性,让用户可以选择升级Add-on或者手动将它关闭;
微软终于开始听取用户意见,并且把这种改变反映在IE7的改进当中,在出乎意料之余,实在也值得一赞。这也是我一直以来在期待IE7正式版的原因之一。

Yahoo!将Flickr图片集成至搜索结果里

 
Flickr自从于2005年3月份被Yahoo!收购后,一直以来基本上都是保持独立运作的方式,以致有些网友误以为它与Yahoo!无关。
在我看来其实除了速度外,Flickr的确是个非常优秀的图片共享网站,上面的图片资源极其丰富。
不过现在根据Yahoo! Search blog上的更新,Yahoo!已经把Flickr上面的图片集成至搜索结果里,这样就能充分利用Flickr的图片资源了。因此如果你玩腻了Yahoo!主页上的彩蛋,现在可以开始玩一下它的搜索。

Non-spam review and verification

前几天在使用Windows Live Writer的时候,这个软件一下子发布了5遍~!

造成Blogspot要对我进行Spam审查,没办法......
提交了申请表单之后,今天终于有了结果:

Non-spam review and verification request: http://spoondrift.blogspot.com
Your blog has been reviewed, verified, and cleared for regular use so that
it will no longer appear as potential spam. If you sign out of Blogger and
sign back in again, you should be able to post as normal. Thanks for your
patience, and we apologize for any inconvenience this has caused.

Sincerely,
The Blogger Team

: )

2006-08-24

电子邮件的故事:令人吃惊的预测

 
在《意林》上看到这个故事,很惊叹。我感觉,只有聪明的人会在互联网上赚到钱。下面是故事的全文。

  有一天,乔治在删除垃圾电子邮件的时候,看到这样一个标题:令人吃惊的足总杯比赛预报。他好奇地点开了它,里边写着:

  亲爱的球迷,我们知道你是个怀疑论者,凡事不会轻易想念,可我们确定已经设计出了绝对准确的预报足球比赛结果的奇妙方法。今天下午,英国足总杯将进行和第三轮比赛,对垒的是考文垂队和谢菲欠德联队,我们预报考文垂队将会取得胜利。

  乔治看过后,轻蔑地一笑,没有当回事。晚上,他收看电视里的比赛结果,考文垂队果然势如破竹地赢了。

  三个星期后,乔治又收到了那个人的一封电子邮件:

  亲爱的球迷,你是否还记得,在上一轮足总杯比赛中,我们曾事先想念准确地预报了考文垂队获胜?今天考文垂队要和密德斯堡队交手了,我们的预测是密德斯堡队获胜。同时我们强烈地奉劝你不要和别人去赌输赢,但请你密切关注比赛结果,看看我们的预测结果是否准确。

  那天下午,双方打成1比1平局。考文垂队本来很强,却完全没有发挥出来。而在下个星期二加赛时,密德斯堡队却以2比0的比分胜出。这回乔治有点惊讶了。

  过了几天,那个人的电子邮件又来了,预测密德斯堡队将在第五轮比赛中失利,特伦密尔队将会打败它,结果果然如此。

  而在四分之一决赛之前,那封电子邮件又告诉乔治:特伦密尔队将老老实实地输给陶顿亨队。事实果然如此。

  四次预报,四次全部都说中了!

  接着,那个人在电子邮件中对乔治说:

  我们买断了一个数学家最新的研究成果。现在你大概相信,我们确实很有把握,能够料事如神。在半决赛中,阿森纳队将会打败伊普斯维奇队。

  乔治是个不服气的人,他通知了许多朋友,下午一起看球赛直播,并且计划在阿森纳输掉后,大肆羞辱那个信口开河的家伙。但是在落后的情况下,阿森纳队奋起直追,最后竟以2比1获得胜利。太不可思议了!

  第二天,那个不可思议的邮件又来了,这回它说:

  亲爱的球迷,你已经体验了我们神奇的足球预报,现在你信服了吧?我们已经做出了五次正确的预报,五发五中,你一定会同意它绝非运气,尤其是所有冷门我们都猜中了。现在我们和你做一笔特殊的交易:在一个月的时间内,我们向你提供比赛预报,你只需支付200英镑的定金。然后,发一封电子邮件,把参赛的两个队告诉我们,我们就会将预报结果通知你。

  我们殷切地盼望收到你的订单。

  200英镑的要价确实不低,但如果事先能知道哪一个队会嬴,就完全可以从彩票商的手中赢来20万英镑。

  当然,乔治也怀疑过,他们是暗地里操控球赛的财团,或者是黑社会,但是这一切都与乔治没关系,只要预报结果准确就行了。于是,他掏出了200英镑。

  事实上,这些人不过是一群骗子。里边或许会有几个数学家。

  一开始,他们向球迷发了8000封邮件,一半是预报甲队获胜,另一半是预报乙队获胜,于是就有4000人得到的预报是准确的,另一半人则会把它当一个笑话忘掉。

  下一次,他们只给得到"正确预报"的4000人发送邮件,一半是预报丙方获胜……以此类推,所谓的预测者总是给得到"正确预报"的一部分人发送新邮件,最后,剩下250人收到的预报便全部是正确的,他们当然会认为这个预报绝对灵验。其中假如有50人掏出200英镑来,对于骗局的策划者来说,就是一笔很可观的收入了。因为他们除了发送电子邮件外,不需要任何本钱。(文/罗勃.伊斯特威)

On Mobile Web

 
Mobile上面的Web应该是什么样子?
应该怎么表现?
 
  1. 界面应该尽可能不要依赖图片和 CSS,一些 plaintext HTML 就足够了。出于下载速度及资费原因,大部分 nerd 使用 portable device 访问 Web 的时候都会禁止这些功能。
  2. 彻底不能使用任何 JavaScript,即使在 Desktop PC 上,JavaScript 也足够折磨人了,而到了 portable device 上,就彻底是地狱。
  3. 单个页面的大小控制在 10K 以内,8~9K 是最佳尺寸,从心理学及技术角度而言都是如此。
  4. 没有太大的必要在 Mobile Web 上提供登录功能,大部分内容 read-only 就足够好了。大部分人没有耐心在 Mobile Web 上登录的。
  5. 应该维护一个足够详尽的能够支持或者测试过的 portable device 的 HCL,这样你就可以知道事情究竟进展到哪一步了。这部分的工作可以使用 Google Spreadsheet 来完成,其协作功能在这种场合尤其有用。
  6. 针对设备的优化的重点是所有的 Nokia 的设备及 Windows Mobile 系统的设备,这些设备是目前访问 Mobile Web 的主力,另外需要注意的是,记得经常在 Opera 的 SSR (Small Screen Rendering)模式下进行尽可能多的测试。
  7. UTF-8,GB18030 及 GB2312 等编码的支持是必要的。
  8. WAP、WML 等协议已经过时了,现在大部分设备都能够支持 XHTML 及 CSS 的一个子集,所以没有必要花费时间在那些古老的协议上了,尤其是在中国这样的一个手机更新换代非常频繁的国家。

De Vinci Code


达芬奇密码的中文译本小说以及电影已经都看过。
今天突然对其中的第一个谜题产生了浓厚的兴趣......

13 - 3 - 2 - 21 - 1 - 1 - 8 - 5
O, Draconian devil!
Oh, Lame Saint!

小说和电影都这样描述:
"由第一行是一个打乱顺序的斐波那契(Fibonacci)数列,推断出第二行以及第三行同样是由错位的单词(或者字母)组成的句子。"
通过这样的结论,主人公重新排列了第二行以及第三行的字母,得到了答案:
 
Leonardo da Vinci!
The Mona Lisa!
 
我的问题是,它是如何(依据什么)进行重新排列的?
 
13 - 3 - 2 - 21 - 1 - 1 - 8 - 5 只有8组数字
  1   2   3    4    5   6   7   8
O, D  r  a  c  o  n  i  a  n    d   e    v    i     l! 有15个字母(","和"!"除外)
1   2  3  4 5  6  7  8 9 10   11 12  13  14  15
 
如何根据正确的斐波那契数列进行移位呢?
1 - 1 - 2 - 3 - 5 - 8 - 13 - 21
 
这个Leonardo da Vinci!是怎么排列得到的呢?
 
在我将小说的前90页,看过第5遍之后,得到这样一个结论:
 
13 - 3 - 2 - 21 - 1 - 1 - 8 - 5,这个错误的斐波那契数列有(且只有)2个作用。
1)用作银行保险箱密码的密文(明文是"1123581321")。
2)提示"O, Draconian devil!" 和"Oh, Lame Saint!"是错误的(被打乱顺序的)字母组合。
也就是说,无论错误的还是正确的数列,都没有提示如何得到正确的字母组合("Leonardo da Vinci!"和"The Mona Lisa!")
 
这样一来,正确的字母组合是什么,就需要我们的主人公去猜想了......
 
出乎意料的是,主人公似乎没用多少时间就找到了正确的答案......

2006-08-22

Microsoft的25位CDKey里有什么

 
从Win98起,Microsoft的产品安装Key从原来的10位数字改为25位字符,这一改动,代表着Microsoft告别了简单的校验和,从此投入了椭圆曲线法的怀抱。从密码学的角度来看,这绝对是一个里程碑,因为当时椭圆曲线法仍在研究论证阶段,Microsoft是第一个将之实用以商业产品的厂家。

  那么在这25个字符里到底有什么呢?

  1.Base24
  这25个字符实际是114bits的数据用Base24进行UUCode后的结果,做为安装Key,这个Base必须绝对避免误认,所以Microsoft选择了以下这24个字符做为UUCode的Base:
  BCDFGHJKMPQRTVWXY2346789
  所以,如果你的安装Key 有这24个字符以外的字符的话,你完全可以把它丢到垃圾筒里去了━━不用试就知道它根本通不过了。

  2.114 bits
  UUDecode后得到的114位按Intel高位在后的格式表示如下:
   [ X XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXXXX ] Total 114 Bits
    |   |    |       \ 55 Bits Sign
    |   |    \ 28 Bits Hash
    |   \ 30 Bits Serial \ 31 Bits Data
     \ 1 Bits Flag /
  Flag: 不明标志,目前所见的各类Key中这一位总是为0。
  Serial:用户序列号,转成十进制表示为AAAABBBBBB,对应显示为:
      零售版:xxxxx-AAA-BBBBBBx-xxxxx
      OEM版: xxxxx-OEM-0AAAABx-BBBBB
  以上31bits总称为Data,是CDKey中的基本部分。
  Hash:Data经特定处理得到的结果,见后文。
  Sign:Hash值的椭圆曲线签名,见后文。

  3.椭圆曲线签名算法
  要说明椭圆曲线签名算法可不是一件容易的事,有兴趣的可以自己用"椭圆曲线"或是"elliptic curve"在搜索引擎找相关的资料来看吧,这里只简单介绍Microsoft的用法。
  所谓椭圆曲线是指这样一类曲线方程:
  y^2 + a1*xy + a3*y = x^3 + a2*x^2 + a4*x + a6
  在密码学里用的是它的两个特例,而Microsoft用的更是这两个特例中的特例:
  y^2 = x^3 + a*x + b ( mod p )
  当a、b、p选定后,就可以确定一个椭圆曲线,再选择一个生成点 G(gx,gy),
于是,存在一个最小的整数q使得q*G=O,然后,再任意选择一个整数 k<q,求出点
K(kx,ky)=k*G,这样椭圆曲线签名算法的Key就全生成了:
  公开密钥为:a,b,p,G(gx,gy),K(kx,ky)
  私有密钥为:a,b,p,G(gx,gy),q,k
  要对Data签名时:
  A.先任意选择一个整数r<q,求点R(rx,ry)=r*G;
  B.将Data、rx、ry共100个字节求SHA-1,取结果中的28位得到Hash;
  C.求Sign = r - Hash * k ( mod q );
  D.把Data、Hash、Sign三个数组合后UUCode得到25位CDKey。
  验证CDKey时:
  A.把25位CDKey先UUDecode再拆分后提到Data 、Hash、Sign;
  B.求点R( rx, ry ) = Sing * G + Hash * K ( mod p );
  C.将Data、rx、ry共100个字节求SHA-1,取结果中的28位得到Hash|*|;
  D.如果Hash = Hash|*|,则该CDKey为有效Key。

  4.BINK
  从前面的说明可以看出,为了验证CDKey,Microsoft 必须公开椭圆曲线签名算法中的公开密钥,那么这个公开密钥放在哪里呢?答案是在pidgen.dll里的BINK资源里(其他产品如Office则被包在*.MSI),而且一共有两组,从目前已知的Key组合来看,第一组密钥是用以零售版本的,第二组则用于OEM版本。两个产品的Key能否通用就在于对应的密钥是否相同,比如中文版的Windows 2000的Pro/Srv/AdvSrv的第二组密钥也是相同的,即一个PWindows 2000 Pro的OEM版的Key,可同时供 PWindows 2000 Srv/Adv的OEM版使用。

  5.破解及其难度
  要破解CDKey的生成算法,必须从Microsoft 公开的密钥中求出对应的私有密钥,即只要求出q和k即可。从BINK中公开的密钥来看,p 是一个384 bits的质数,看起来计算量好象至少要O(2^168)才行,但Microsoft设计中一个缺陷(?)使实际工作量降低到只有O(2^28)就可以了。
  为什么相差这么远?
  回头看看3.C中的式子: Sign = r - Hash * k ( mod q )
  通常情况下q可以是很大的值,因此Sign应该也很大,但Microsoft 为了减少用户输入的CDKey的数量,把Sign的值限死在55 bits,因此,自然也限定了q最多也不能超过56 bits。依此类推,由于k<q,所以k也不能超过56 bits,也就是说我们面对的只是两个最多2^56的数据而已,用目前最普通的算法也只有O(2^28)的工作量。
  以目前的电脑运算速度,在一台赛扬II 800的机器上只用6个小时就可以解出某组密钥的q值,最多时在一台雷鸟1G上用了28个小时才算出另一组密钥的k值,其他平均大约都在十个小时左右就可以求出。

Mail Post Test

测试一下使用E-Mail发布Blog.

Tomcat中文乱码的原理和解决方法


网上能找到不少的解决方法,但是你应该看看下面的文章:
转载自:月光博客
URL:http://www.williamlong.info/archives/469.html



一、Java中文问题的由来

  Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

  首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

  本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,例如从页面提交表单中提交的数据在Java程序里显示乱码等情况。

  如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

  二、解决方法

  对于流行的Tomcat来说,有以下两种解决方法:

  1. 更改 D:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:

  方法是找到 server.xml 中的

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />

  标记,粗体字是我添加的。

  可以这样验证你的更改是否成功:在更改前,在你出现乱码的页面的IE浏览器,点击菜单“查看|编码”,会发现“西欧(ISO)”处于选中状态。而更改后,点击菜单“查看|编码”,会发现“简体中文(GB2312)”处于选中状态。

  2. 更该 Java 程序,我的程序是这样的:

public class ThreeParams extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
      ...
  } 
}

  粗体字是必需要有的,它的作用是让浏览器把Unicode字符转换为GBK字符。这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了。

 

2006-08-20

ImageSniffer_Part 3

 

刚刚测试了一下程序,在Yahoo的首页上面(http://www.yahoo.com)仅仅探测到了2个图像文件......
http://us.a1.yimg.com/us.yimg.com/i/ww/beta/y3.gif
http://us.i1.yimg.com/us.yimg.com/i/ww/tbl/allys.gif

这显然不对,什么原因呢?
猛然间想到,可能是RequestHeader里面那个User-Agent的问题......
马上Google来了IE 7的
User-Agent:Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)

代码稍作修改
HttpClient.GetMethod.setsetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)")

再运行一下子,已经可以探测到20个图像文件,这是不是全部呢?我不敢肯定,先进行保存图像部分的代码,然后再验证是否探测到了全部的图像吧。

2006-08-19

Dash's Blog

 

这个Blog出现在Google AdSense里面,



当时真是好奇,某人的Blog可以出现在Google AdSense里面?是商业行为;还是因为其内容被Gogle收录?

点进去一看,第一篇是关于这次DonkeyServer事件,我马上意识到前几天使用eMule无法登陆主要的ED2K服务器,这下可能会找到答案了......

果然,Dash对这一事件作了说明。

唉,看过无语......

相关连接:Dash's Blog

ImageSniffer_Part 2

 

直到昨天,才继续这个小程序。
到目前为止,完成了HTML代码分析部分,已经可以从HttpClient.HttpClient.getResponseBodyAsString()方法中筛选出所有的Image Link,并且算法效率经过改进,有了一定的提高,但仍然不够优雅。

算法的核心使用了org.w3c.dom.Document、org.w3c.dom.Element,以及org.w3c.dom.NodeList

具体的代码,会做另外的相关讨论。
在这里感谢Jaly给我的关于SwingUtilities.invokeLater()方法的提示。

关于UI,感谢给我的一些很好的建议,我会继续改进。

相关连接:ImageSniffer_Part 1

2006-08-17

2006-08-15

慢的几乎什么也干不了


Celeron 1.3M,256 RAM
老婆开了两个MSN,一个QQ,系统运行着Symantec AntiVirnus和Windows Defender,我开一个IE 7(装它就是应为较低的内存占用),再打开Eclipse的话,系统就慢的几乎动不了了,CPU资源到还好(不到3%),内存已经是451260K/755260K,我算知道为什么那些本机都有2G的内存了......

题外话,2G的内存,对于WorkStaton来说,在里面盖楼房都够用了......

再看看我的:
WindowsLiveWriter.exe    38228K    (正在写你看到的这个帖子)
iexplorer.exe                   33540K    (只打开SpoonDrift一个页面)
.
.
.
.
.
.
有这个必要吗?

2006-08-14

今天,你用什么Blog ?

鉴于当前博客风潮的兴旺,考虑到全球诸多博客们的需求,微软为我们带来了这样一款所见即所得(WYSIWYG)博客文章编辑发布工具,微软将它命名为Windows Live Writer。


Windows Live Writer目前支持以下类型的博客系统:
- Windows Live Spaces
- Blogger
- LiveJournal
- TypePad
- Wordpress
- All blogs that support RSD (Really Simple Discoverability)
- Metaweblog API
- Moveable Type API

Download:

http://download.microsoft.com/download/f/9/a/f9a19f2d-cec4-4a25-9b0b-eb9655ea7561/Writer.msi



实际使用中发现,这个工具并不能上传PNG或者JPG格式的图片。

方法的困惑,问题的核心

问题的关键应该是"Swing中使用线程控制界面操作的方法",而不是类和类的关系。
当然,维持程序正常的继承关系除外。

我们尝试一下这样修改代码:

main.java保持不变,将sniffer.java改写为如下

package ImageSniffer;

public class sniffer extends main implements Runnable
{
main mainClass = new main();

Thread snifferThread = new Thread(this);

public void star()
{
snifferThread.start();
}

public void newTest()
{
mainClass.setStusText("New Test......");
}

public void run()
{
newTest();
}
}

这样,当按下"开始"按钮的时候,执行main这个类中的starSniffer()方法,starSniffer()的代码是
public void starSniffer()
{
sniffer theSniffer = new sniffer();
theSniffer.star();
}
这里出现了第一个问题:
这样控制snifferThread启动是否是正确的方法?

通过调试发现,snifferThread确实启动了,并且执行了sniffer类中的newTest()方法
public void newTest()
{
mainClass.setStusText("New Test......");
}

但是程序在这里就停住了,并且在main类的
public void setStusText(String stusText)
{
stusTextLabel.setText(stusText);
}
方法中stusTextLabel.setText(stusText)发现了NullPointerException异常
线程 [Thread-2](已暂挂(异常 NullPointerException))
-->main.setStusText(String) 行: 195
sniffer.newTest() 行: 16
sniffer.run() 行: 21
Thread.run() 行: 595

这就出现了第二个问题:
sniffer类的newTest()方法应该如何重载main类的setStusText(String stusText)方法?

还有一个问题,要在sniffer类中实现对main类中setStusText(String
stusText)方法的覆盖,sniffer类和main类应该是怎样的关系;声明sniffer extends main是否正确?

相关连接:方法的困惑,如何重载怎么覆盖

2006-08-12

Google主页使用弹出式菜单

其实很早以前就遇上了,当时并没有在意。
今天在网上看到了一些讨论,决定把截图放上来。

Over There

中文名称:那个地方-伊拉克




美国FX有线电视片集《Over There》
第一部有关伊拉克战争的电视片集《Over There》将在美国FX有线电视播出,这是美国电视史上首次在还未撤军的同时,播出相关内容的战争剧集。FX有线电视隶属澳洲传媒大亨梅?旗下的霍士电视集团,霍士集团向来公开支持美国总统布殊出兵伊拉克,但FX有线电视否认播出这部剧集是为攻伊宣传及争取支持.

From producer Steven Bochco ("NYPD Blue," "L.A. Law," "Hill Street Blues") comes the first scripted television series set in a current, ongoing war involving the United States. Gritty, intense, evocative and emotional, "Over There" takes you to the front lines of battle and explores the effects of war on a U.S. Army unit sent to Iraq on their first tour of duty, as well as the equally powerful effects felt at home by their families and loved ones.
Unlike any number of movies and TV shows starring middle-age actors portraying American fighting forces in past wars, Over There's combat soldiers look and act like the barely-out-of-high-school young adults (many of whom, in Over There, joined the military out of economic necessity) most of our real-life troops actually are.

Whatever one's feelings about the Iraq war, Bochco and co-writer and director Chris Gerolmo (Citizen X) cut through the politics to get to the individuals whose lives are on the line, who left behind families to find themselves in a most alien environment, fired upon for reasons they may not fully understand. Gerolmo does a superb job of showing us combat conditions in desert sandstorms, with rookie soldiers hanging tough under intense heat while insurgents fire from a distance at anything that moves. This is a new kind of war show, yet in many ways Over There embraces a few sentimental conventions, notably scenes in which the unit's members explain the origins of their nicknames ("Angel," "Dim," "Doublewide," "Mrs. B," and more). In the Bochco tradition, when violence comes, it comes as a grievous surprise.

2006-08-11

方法的困惑,如何重载怎么覆盖

有如下代码:
class A
{
static B bClass = new B();

static String setString(String str)
{
return str;
}
public static void main(String[] args)
{
System.out.println(setString("TEST......"));

System.out.println(bClass.printStr("B TEST......"));
}
}

class B extends A
{
static A classA = new A();

String printStr(String s)
{
return s;
}
}

控制台会这样输出:
TEST......
B TEST......

这是另外一段代码:
public class MainFrame
{
SetLabelTest newLabelText = new SetLabelTest();

public void buildMainFrame()
{
//实现一个JFrame,并且加入一个JLable
}
public void setLabelText(String text)
{
//使用JLabel的setText()方法令JLabel显示字符串
}
}

public class SetLabelTest extends MainFrame
{
MainFrame theFrame = new MainFrame();

public void labelText()
{
theFrame.setLabelText("New Text......");
}
}

当在MainFrame这个类中实现newLabelText.labelText()的时候,程序报告如下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

这是怎么回事呢?
为什么setText()方法不能被重载?

相关连接:方法的困惑,问题的核心

2006-08-10

Blogspot的Blog居然可以直接访问了

今天突然发现,位于Blogger.com的SpoonDrift居然可以不使用代理而直接访问了!

在这里,Blogger的Blog已经被GFW封锁了好几年了,这次是真的解禁了吗?

这真是一件可笑的事情,让我不禁想起了这么一句经典“人如果没有思想,和咸鱼有什么分别......?”
是的,GFW封锁了太多的东西,它以为可以封锁人们的思想吗?

“游戏引发暴力倾向......”、“中文版的维基百科”、“电视台禁播游戏类节目”,甚至是FreeBSD.org和SourceForge.net,真是可笑,封锁,就看不到吗?不过是自欺欺人罢了。

还是要庆祝一下,思想是不能够被禁锢的。

2006-08-10 22:00

2006-08-07

ImageSniffer_Part 1

老婆问我,如何才能把网页上的图片全部保存下来?呵呵,随便哪个下载工具都可以...... 老婆说,太麻烦,能不能简单一些? 可以吗?不可以吗?研究一下吧...... 需求很明确,网页中的所有图片,各种各式的,并且URL各种各样,但是对于客户端来说,应该都是可以GET到的,先不想那么多,今天正好点有时间,先弄一个UI出来吧! 这其中遇到一个奇怪的问题,显示Debug信息的TextArea在默认情况下不能最大化显示,就好像frame.pack()的效果一样......半天也没弄明白,最后只好new JTextArea(15, 45)硬性规定一下。 看来有必要恶补一下Swing了...... 写到这里的时候,还有一个OptionPanel没有加进去。 UI暂时就这样了,Http的Get方法准备用HttpClient来实现,今天没时间了,明天继续。

相关连接:ImageSniffer_Part 2