2007年1月30日星期二

Google Dance?

从开始写文章起,就一直不停地在google搜索自己,估计用的最多、频繁的搜索就是site:behindgfw.blogspot.com了,慢慢看着被索引的页面逐渐增多。但今天我急了:中午搜索在google的索引有190多项,下午6点时候就48项了,这还没完晚上7点左右就只剩2项了。换个google服务器重新搜下,在http://72.14.203.104上还有131个页面。难道这就是Google Dance?!





update:

2007.2.7 19:06 搜索出来的条目是回去了,但是底下多了四个字“补充材料”,晕倒!
在英文语言下搜索出现类似内容,不过这好象是google第一次直接给出那些页面是补充材料哦。

2007年1月29日星期一

简述JavaScript历史

当1995年JavaScript第一次出现在Netscape Navigator 2.0中的时候,它的主要目的还只是为处理一些输入的有效性验证。试想一下用户提交一个表单给服务器之后,返回的却是因为少填一个字段返回的错误,在刚开始普及28.8kb/s速率的电话线调制解调器时代,以如此慢速率和服务器交换数据对耐心是一个巨大的考验。因此当时处于技术最前沿的网景公司Netscape开始考虑开发一种客户端脚本语言来对用户输入数据进行校验。现在JavaScript已经是每一个主流Web浏览器都具备的重要特性,随着Web 2.0和Ajax(最成功的Ajax应用当数Gmail一个)进入主流,JavaScript更始是被推到了舞台的中心。

1995年,当时工作于Netscape的Brendan Eich开始为同年发行的Netscape Navigator 2.0准备一个称之为LiveScipt(先前还有个名字叫LiveWire)的脚本语言,在和SUN的连手下,总算及时完成。正式发布的时候,Netscape将它改名为JavaScript(为沾点当时如日中天的Java语言的光),Netscape的付出和赌注最终有了回报,从此揭开了互联网的又一个新的篇章。

因为JavaScript 1.0的成功,随后的Navigator 3.0发布了JavaScript 1.1,同时微软开始进军浏览器市场并发布IE3.0并发布了另一个类JavaScript实现JScript。虽然微软进军浏览器市场的决定为其带来了旷日持久的官司和狼籍声名,但是这也是JavaScript发展历史上的重要一环。当时市场上有3个JavaScript版本,Netscape的JavaScript、IE的JScript、CEnvi的SciptEase,因此制定一个标准势在必行,1997年JavaScript 1.1作为一个草案被提交给欧洲计算机制造商协会(ECMA),最终来自Netscape、微软、SUN、Borland及其他一些公司的程序员组成的TC39委员会拿出了 ECMA-262标准,标准定义了叫做ECMAScript的脚本语言,接下来的几年里,ISO/IEC(国际标准化组织和国际电工委员会)接纳ECMAScript为标准(ISO/IEC-1626 )。

目前ECMA-262最新版为3th Edition。符合该标准的实现有:
* Microsoft公司的JScript.
* Mozilla的Javascript-C(C语言实现),现名Spidermonkey
* Mozilla的Rhino(Java实现)
* Digital Mars公司的DMDScript。
据测试,Spidermonkey的性能最好。 目前ECMA-262 4th Edition正在开发的过程中,与其对应的JavaScript的版本为JavaScript 2.0,目前也正在开发过程中。
ECMA 各版本说明、实现
ECMA v1:标准化了JavaScript1.1的基本特性,并添加了一些新特性,没有标准化switch语句和正则表达式。 由Netscape 4.5 和IE 4 实现。
ECMA v2:ECMA v1的维护版本,只添加了说明。 由Netscape 4.5 和IE 4 实现。
ECMA v3:标准化了switch语句、异常处理和正则表达式。 由Mozilla、Netscape 6 和 IE 5.5 实现。

(本段节选自wikwpedia

一个完整的JavaScript实现包括:核心(ECMAScipt)、文档对象模型(DOM)、浏览器对象模型(BOM)。提一下DOM,因为从Navigator 4.0和IE 4.0开始支持不同形式的动态网页(DHTML),为避免WEB开发者为不同的浏览器编写不同版本的页面,W3C 1998年制定了DOM,DOM包含两个部分:DOM Core、DOM HTML。前者制定了基于XML的文档结构图,以供访问文档内各对象,后者定义了一些HTML专用对象和方法。目前DOM最高版本为Level 3

2007年1月24日星期三

今日Google新闻

现在Google个性化主页上添加RSS Feed,在帖子前面会出现"+",点击就可以预览内容,比较贴心方便的功能。不过个性化主页或者Gmail也好,不断添加诸多不忍舍弃之功能,必然带来速度的下降、代码的庞大,何时才是终了呢?跑不动为止?!
Google maps消息,1月26日是澳大利亚日,google为了纪念(营销)这一天,会派飞机航拍Sydney港,并邀请人们在这一天去悉尼港以便Google的飞机可以拍下他们,Google会将此次拍摄的照片更新进Google maps。在此次的专题页面上,还列出了飞机经过的详细时间,如果你刚好后天中午在悉尼的话,不妨去秀一下。
微软听说Google要去澳大利亚拍照片,于是在悉尼百年世纪公园组织集会于之对抗,征集人们拍出好的照片并传到这个网站,同时有高达$100,000美刀的大礼包奉送。砸票吧!
Google.cn推出"搜索提示"功能,在你输入关键字的同时Google会给你关键字提示,还可以看见他们的查询次数。"谷歌"终于推出本地化产品了并领先英文版网站,英文版Suggest还在 实验室里呢。
说了Google再讲下Baidu,今天Baidu首页页有更新,个人空间的链接被添加到首页,右上角同时出现了"登陆"字样,看来个人空间在Baiu的份量将有所提高,不过功能比起 Blogger还有段距离。

2007年1月18日星期四

GoogleMAPs Hack

问题的提出:在google map api下写程序的时候,在地图的最下会显示google log和Terms of Use,但是有一个问题如果你点击google log或者Terms of Use,将会跳出你的页面,打断程序显示。如何让链接新开一页面显示呢?

Terms of Use比较好办:
可以使用类似如下代码查找替代


var ANode = document.getElementsByTagName("A");
for (var i = 0; i < ANode.length; i++) {
if (ANode[i].innerHTML = "Terms of Use") {
ANode[i].target="_top";
};};

但是logo图象对应的链接就比较麻烦了,logo图象在"DOM"里显示为"IMG"标签而"A"标签被google故意隐藏了,你点击的时候会将你带到google maps自己的网站上,显示你刚才指定的区域。如何修改target还得废点大脑。无巧不成书,晚上在调试的时候,突然发现logo被替换为文字了,而下午还显示正常,期间并未修改代码。重新回到原来的地方检查,才知道原来晚上google升级api了,logo链接对应的"A"标签不再被隐藏了,haha,顺应民意啊!那下面就简单了,你可以在下面测试地图,链接会在新窗口打开。

var ANode = document.getElementsByTagName("A");
for (var i = 0; i < ANode.length; i++) {
ANode[i].target="_blank";} ;
map.openInfoWindow(map.getCenter(),document.createTextNode("Tag('A').length="+ANode.length));
};

GoogleMAPs TEST


update:
今天下午缺省版本又退回到v2.70a了,本文以上特性在v2.71中可以获得支持。
现在v2.73已经建立而v2.70a还是缺省的版本,所以现在的api一共有四个版本,而不是通常的三个。
可以通过以下方法获得新版本api:
&v=2 gives v2.70a "default"
&v=2.x gives v2.71 "current"
v2.72 next
v2.73 latest

2007年1月17日星期三

用FeedFlare定制你的Feed

在Rss feed烧制上可能要数Feedburner功能最强大了,花了好几个小时才把Feedburner所有的功能菜单大致浏览了遍。今天讲一下我们经常在用的FeedFlare功能。FeedFlare在每个帖子的下方添加一些脚标,方便订阅者对内容进行散发、通知、为内容建立社区,基本上有email、打标签、分享等其他诸多功能。效果如下图所示:
但是internet上网站多如牛毛功能纷烦复杂,虽然FeedFlare有个长长的支持列表,甚至还在征集代码,也不可能全部支持,因此需要定制自己的FeedFlare。
FeedFlare实际上是被FeedFlare Unit封装的XML数据文件。上个月我的blog搬了家,更换了rss feed,因此我自己写了两小断代码,做了两个标签挂在老的feed下面:

<feedflareunit>
<catalog>
<title>Thanks</title>
<description>A blog about "Blog Behind GFW"</description>
</catalog>
<feedflare>
<text>Thanks reading "Blog Behind GFW"</text>
</feedflare>
</feedflareunit>

<feedflareunit>
<catalog>
<title>Update Blog BehindGFW Address</title>
<description>My blog has been move to blogspot,and the feed was changed too,please update it.</description>
</catalog>
<feedflare>
<text>RSS address changed,please update it!</text>
<link href="http://behindgfw.blogspot.com/2006/12/blog.html">
</feedflare>
</feedflareunit>

显示效果如下:

其中最主要的 <text>域为显示内容, <link href="......">为链接地址,应该比较简单明了,如果你要写一些复杂的应用,还是看下FeedFlare的文档为好。将你写好的XML文件保存在web上(Google Pages是个不错的选择),在Feedburner的Optimize选项下,FeedFlare子项中找到Personal FeedFlare,填入你的XML文件地址点击"Add New Flare"就OK了。

update:在FeedFlare的XML文件中不可以有中文,否则会报错。Feedburner的中文支持一直不是很好,不过总算rss阅读没有什么影响,记得以前email阅读feed是,如果标题有中文,则肯定显示为乱码,现在好了点显示为“?”。我去除了blog标题里的中文其实和这个也有一定的联系。
不知道文心是不是还经常有机会和Feedburner沟通

-原发 behindgfw.blogspot.com

2007年1月16日星期二

HTML标准验证

记得以前做网页时候,直接写上<html>...</html>就完事了,在blogger模板的头部一般都有这么几行:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>

Template of the New Blogger这篇文章里也提过一句,后来看到台湾Tsung的文章才算了解了点皮毛。这不仅仅是把文档宣告为 XML, XHTML,HTML那么简单,DOCTYPE(document type declaration的缩写)定义了文档遵照(X)HTML的哪个版本,并且此标志一定出现在web页面的最头部。DOCTYPEs是一个web页面的关键组成部分,缺少它你的css定义和标记将不被承认有效。
DOCTYPE s对于诸如 Mozilla、IE5/Mac、IE6/Win等浏览器恰当地解释web文档页是很必要的,一般不同的浏览器对(X)HTML都有自己的解释,为了兼容各种浏览器DOCTYPE包含了一个URI地址,告诉浏览器如何渲染(X)HTML、CSS、DOM。使用过期的 DOCTYPE 或者不用,浏览器会假定你是在用旧模式下写的网页,为了向后兼容,将会使你的web文档显示如在90年代的IE4下一样。这当然不是你所期望的。
W3C网站上现在有一个标准DOCTYPE 格式的示例,实际上不用这么罗嗦(其实我自己也云里雾里),直接从W3C把他们拷贝下来就结了:

HTML 4.01 Strict, Transitional, Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 Strict, Transitional, Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.1 DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

参考网址:
HTML建议格式
HTML 4 DTD:HTML 4 Document Type Definition
W3C标准格式验证服务:看是否有html错误。我试着输入http://behindgfw.blogspot.com/,Oh MYGOD,数百条......
DTD教学

-原发 behindgfw.blogspot.com

2007年1月15日星期一

如果Google做恶

Google的信条一直是“永不做恶”,Philipp Lenssen说如果Google做恶的话,他会:

偷偷阅读你的邮件去获得产品创意;
减少你的AdSense 广告收入;
在你的搜索中插入一个笑话;
过滤你的搜索;
接受贿赂提高排名;
频繁地用AdSense索引站点;
提高投放AdSense广告站点的排名;
捆绑你不需要的桌面软件;
在搜索结果中加入自家产品推荐;
给某些政府机构通过特定API或其他机制使其可以直接使用Google数据;
不再明显地区分AdSense 广告和内容;
降低对Google持批评态度的文章排名;
对友邦人士制造的spam视而不见;
积极地压制人权组织论坛;
随意将你的数据分享给第三方组织;
将批评Google的Blogger帖子删除;
不接受或者直接去除批评Google的新闻源;
目光短浅;
对道德准则妥协;
允许政府对他们的新闻消息源指手画脚;
将特定记者或者杂志列入黑名单因为不喜欢他们的报道;
垄断市场;
因为隐私协议没有提及就私自处理你的数据;
当他们说删除你的数据的时候,其实没有;
不遵守他们的承诺;
因为年龄、性别、种族解雇员工;
买断web application开发竞争对手以阻止他们的开发;
在竞争对手的排名数据上动手脚;
在不通知任何人的情况下更改用户使用协议;
将你的数据分享给政府;
对公众撒谎。

如果Google诚实地遵守不做恶的承诺:
在搜索结果中推广竞争对手的链接;
对任何事情都很透明;
通过一些开源项目分享他们的代码;
为开源项目提供免费服务器;
提供免费、高效工具来提高生产力;
目光长远;
尊重版权作者;
从来不说竞争对手一句坏话;
给AdSense派发礼品;
给非营利组织捐赠AdSense广告;
诚实地说明他们为何关闭服务器;
用户要更换邮件客户端时允许转移他们的邮件;
为网络陷阱开发检查工具或服务;
邀请人们去参观公司总部;
用户要转换他们的Blog服务视允许转移他们的帖子;
因为意识到自己的角色,始终保持最佳中立;
为盲人或装置视障人士作出了各种服务工作;
除虫(bugs)快速严格;
尽可能遵守web标准;
如果有本地搜索服务进行推介;
倾向于服务用户而不是赚钱;
公开承认错误;
对自己的道德原则不妥协;
在潜在的政府干预下,保护你的数据;
对潜在的钓鱼网站等进行警告;
提供语音的搜索引擎;
将卑劣的广告从AdSense中剔除;
为雇员提供免费食物;
允许员工捐出20%智力来改善世界环境,例如:全球变暖问题;
根据创作公用协议来发布他们所有的内容(如博客帖子);
如果要求的话,给每个国家机会获得同样地搜索结果;
积极设法让用户尽快离开网站;
坚信Web的民主
积极支持人权团体;
对慈善机构捐赠颇多;
营造壮大慈善组织自身;
允许第三方组织使用服务器资源,尤其是非营利组织。

作者在这里不做评论,至于Google是善是恶则留给你从上面对照参考。

-原发 behindgfw.blogspot.com