Friday, December 05, 2008

Google Friend Connect 开放注册

前天 Google 官方 Blog 报道,发布了其 SNS 项目 Google Friend Connect大笨熊的 blog 也提到这条消息。今天收到了 woainiuniu 的邀请,在这里谢过了。现在似乎已经开发注册了。

Google Friend Connect 可以让网站管理员在他们的网站增加一些社会性的功能,允许访客注册并加入到网站,显示自己的头像图标,查看其他已经加入的访客以及他们在 Friend Connect 上的活动。全部工作只需要简单复制粘贴几段代码即可,不需要复杂的编程技术。网站应用了 Friend Connect 以后,可以给网站添加各种 Widgets 实现评论、留言、投票等功能,这种类似的小工具也在不断的增加中。

本站已经注册并添加了 Friend Connect 功能,左边栏较下方的“Friends”便是,欢迎各位朋友加入本站。如果您自己也有一个 blog 或者网站的话,也可以加上这个简单易用的 Friend 功能。

在左边栏较下方的“Friends”区域点击 'Join This Site' 按钮即可通过 Google Friend Connect 加入本站
在左边栏较下方的“Friends”区域点击 'Join This Site' 按钮即可通过 Friend Connect 加入本站

Blogger 用户如何安装 Friend Connect?

如果你用的刚好是 Google 的 Blogger 而且是 Blogspot 或者 Custom Domain 用户,那要如何安装 Friend Connect 呢?这看起来是不可能的。因为安装过程要求用户上传两个 html 文件到网站根目录下,而我们显然不可能直接上传文件到 blogspot 服务器。

但事实比我们想象的简单,会有这个疑问是因为 Friend Connect 那个安装界面解释的不够清楚。事实上,当你在注册并安装 Friend Connect 时,如果提供的网站地址是一个 BlogSpot 网站,或者其 Custom Domain 的网站,那么这两个文件就会被自动上传。也就是说你可以直接跳过这一步,什么都不用做,在 finalize 的时候直接就通过验证了。

什么?你问这么隐秘的事情我是怎么发现的?呵呵,好吧,其实我是 Google 到了这篇文章:How to install Google Friend Connect on Blogger

Labels: ,

Saturday, November 15, 2008

你博客的 ping 列表真的全在工作吗?

我们知道在博客发表文章时,可以利用 XML-RPC 技术将更新通知到各种 Blog 的服务商、搜索引擎等,好让它们主动来抓取,从而提高博客文章被收录的速度和范围。

Google 的 Blogger 不像 WordPress,后者提供了一个方便的 Update Service,只要将 Blog 服务商公布的 XML-RPC 接口地址填进去就可以方便的在发布的时候 ping 这些地址。Blogger 只是在 Settings » Basic 有一个“Add your blog to our listings?”的选项,解释说选择了“Yes”,Google Blog Search 以及 Weblogs.com 就会来收录,除此之外并没有一个可以设置 ping 接口地址列表的地方。

我强烈怀疑 Blogger 这个选项的作用,因为曾经有很长一段时间 Google Blog Search 都没有收录我的文章,后来为了确保收录效果,每次发布文章后我都手工 ping,于是通常 5 分钟内文章就会被收录,而 10 分钟左右,Google 的网页搜索也会收录这篇文章(观察到的最快纪录为 8 分钟)。但是每次都要手工去 ping 确实很麻烦,于是今天就琢磨着自己用 PHP 写一个简单的 XML-RPC 客户端来做这个工作,顺便还可以把其它主流的 ping 服务地址加进去,批量执行。

结果是不试不要紧,一试吓一跳。我参考 Weblogs.comGoogle Blog Search 提供的标准 ping 操作 API 文档写了一个 XML-RPC 的客户端,测试了一下主流的 ping 服务地址列表,发现其中有很大一部分都不能正常工作。
http://blogsearch.google.com/ping/RPC2
http://rpc.pingomatic.com/
http://api.my.yahoo.com/RPC2
http://api.moreover.com/RPC2
http://rpc.newsgator.com/
http://rpc.weblogs.com/RPC2
http://www.feedsky.com/api/RPC2
http://ping.feedburner.com/
http://rpc.technorati.com/rpc/ping
http://ping.blog.qikoo.com/rpc2.php
http://blog.iask.com/RPC2
http://www.xianguo.com/xmlrpc/ping.php
http://www.zhuaxia.com/rpc/server.php
以下就来一一看一下 ping 这些地址得到的具体结果。
以上这些地址中,能够完全按照标准 API 正常工作的有:
http://blogsearch.google.com/ping/RPC2
http://api.my.yahoo.com/RPC2
http://api.moreover.com/RPC2
http://rpc.weblogs.com/RPC2
http://rpc.technorati.com/rpc/ping
以下是其它有问题的 ping 接口的具体情况。
http://rpc.pingomatic.com/
这是一个十分有名,被博客界所有人争相 ping 之的地址,但是,真的有人见过它返回正确的结果吗?我试了很多次,无论是请求 weblogUpdates.extendedPing 方法,还是weblogUpdates.ping 方法,无论是提供两个参数还是三个、四个参数,它返回的 HTTP 头永远只会是“501 Not Implemented”,正文部分没有任何内容。我另外还试了 http://rpc.pingomatic.com/RPC2http://pingomatic.com/ 两个地址,得到的结果一样。
http://rpc.newsgator.com/
这个地址存在大家的列表中,我感到非常诧异,因为这个域名都已经不存在了,我换了很多个 DNS 服务器都不能解析出它的 IP 地址。后来发现了 NewsGator 的另一个 ping 接口:
http://services.newsgator.com/ngws/xmlrpcping.aspx
经过测试,这个是可以正常工作的。
http://ping.feedburner.com/
起先 FeedBurner 的接口很长时间都不返回,纳闷了很久;细查之下,发现 ping.feedburner.com 这个域名做成了 feeds.feedburner.com 的 CNAME 纪录,而众所周知后者已经被墙,所以实际上这个 ping 接口是没有办法直接通知到的,除非发起 ping 动作的客户端在国外运行。
http://www.feedsky.com/api/RPC2
Feedsky 趁着 FeedBurner 被封在国内很是火了一把,可是做事情的态度和质量还是和人家有差距。首先是没有实现 weblogUpdates.extendedPing 方法,而在请求 weblogUpdates.ping 方法时,返回的结果也很不稳定。有时是正常的结果,有时会以错误码 304 将整个 Feed 的内容放在 message 字段中返回,有时又干脆什么都不返回。
http://ping.blog.qikoo.com/rpc2.php
这个似乎是奇虎官方给出的地址,而几乎网上搜到的所有 ping 列表中都有它。奇怪的是,这个地址根本打不开,HTTP 状态码为 404。我曾经猜测是不是大家在传抄过程中不小心弄错了大小写,于是也试了 RPC2.php, RPC.php, rpc.php,结果都是 404。
http://blog.iask.com/RPC2
新浪这个表面看起来很不错,相应速度很快,返回的 XML 格式也很标准。可是无论怎么提交,返回结果都是 flerror: 1; message: sorry,failing。以至于让我怀疑,这个接口背后的后台程序真的有在运作吗?
http://www.xianguo.com/xmlrpc/ping.php
发出请求大约 5 秒钟后,返回如下内容:
Fatal error: Call to undefined function xmlrpc_server_create() in /opt/lamp/code/common/rssreader-common-2008-11-12-14-31-18/topgene/feed/xmlrpc/server.php on line 15
怎么?PHP 的扩展库都还没配置好就当公共运营的服务器了?而且还直接把错误信息输出到页面上,服务器路径信息一览无余。鲜果啊鲜果,让我说你什么好哇!
http://www.zhuaxia.com/rpc/server.php
抓虾比鲜果好点,至少还返回了,只不过不知道返回的是啥。返回结果如下:
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
 <param>
  <value>
   <boolean>0</boolean>
  </value>
 </param>
</params>
</methodResponse>
如果说你看不懂 Weblogs.com 的英文文档倒也情有可原,但是照着 Google 的中文文档依葫芦画瓢总会吧?自己想当然的随便弄一下就完事了?
由以上可以看出,大公司终究还是大公司。令人深思的是,这些不能正常工作的接口中,几乎全是国内的服务商,其中有些暴露出来的问题,更是令人汗颜。

Labels: , , , , ,

Tuesday, October 28, 2008

向微软 Live Search 提交 Sitemap

作为 Webmaster,您一定知道 sitemap;您应该也知道使用 Google 的网站管理员工具来提交 sitemap 让 Google 收录您的网页;您或许还知道 Yahoo! 具有同样的站长工具(及其英文版)。

最近发现微软还在 beta 测试中的 Live Search 也推出了这样方便站长的工具 Webmaster Center


和 Google 及 Yahoo! 的类似,以上 Webmaster Center 工具会让您提供网站的入口地址和 sitemap 地址,然后 Live Search 会提示您下载一个 LiveSearchSiteAuth.xml (文件名真是个微软特色十足啊)文件,其中含有和网站对应的校验码。上传至您网站的根目录,使其能够用
http://www.mysite.com/LiveSearchSiteAuth.xml
这样的形式访问到即可。过一段时间 Webmaster Center 就会自动处理您提交的 sitemap 了。

对于已经录入过的网站,可以在 Site List 页面上的站点列表中点击网站地址的链接进入每个网站查看具体信息,包括摘要、属性、抓取问题、反向链接、链出链接、关键字和网站地图等信息。当网站地图发生改变时,可以通过 Ping 地址
http://webmaster.live.com/webmaster/ping.aspx?siteMap=[your sitemap web address]
来主动通知 MSNBot。

相信有了这个工具后,我们的网站就更容易被 MSN 和 Live Search 收录了。如果您的网站有 sitemap 而还没有提交给 MSN,不妨试一下这个办法。

Labels: , ,

Friday, October 24, 2008

挑战 XHTML 的 Strict 标准

我的 Blog 网页在 Doctype 声明上一直使用的是 XHTML 的 Strict 标准,当初在模板制作完成时是校验过的,可是随着后来无数次的修改、内容添加,现在已经不能通过 W3C 的语法校验了,加上 Google Blogger 在发布页面的时候似乎也并没有考虑目标模板的 Doctype 标准,也部分导致校验的失败。

经过一个下午的努力,终于基本上解决了所有 XHTML 的语法问题,总结如下。
<a> 标签没有 target 属性
在 Strict DTD 里面,超链接 <a> 标签 没有 target 属性,因此不能利用 target="_blank" 这样的代码来达到新开页面打开链接的目的。为了实现同样的功能,通常的办法是用 rel="external" 来替代 target="_blank",然后用如下 JavaScript 代码来处理链接:
function externalLinks() {
var linkArray = document.getElementsByTagName('a');
for (var i = 0; i < linkArray.length; i++) {
var link = linkArray[i];
if (link.getAttribute('rel') == 'external') {
link.target = '_blank';
}
}
}
然后将该 externalLinks() 函数添加到页面的 onLoad 事件中。如:
<body onload="externalLinks();">
<img> 标签必须添加 alt 属性
对于 <img> 标签来讲,alt 属性是必须的。给图片添加 alt,一方面当图片因为各种原因无法显示的时候,能给访问者以提示;另一方面也便于搜索引擎判断图片的内容,以及更准确的建立索引。
<img> 标签没有 border 属性
<img> 标签是没有 border 这个属性的。我们通常会加上 border="0",主要是因为把图片放在链接标签 <a> 里时,浏览器会加上一个链接默认颜色的边框,而这通常是多余的。在 Strict 标准中,不能用 border 属性来去掉边框,而只能使用 CSS 控制。同样 align 属性也是不存在的,要实现 absmiddle 这样的目的,也只能用 CSS 代替。
<blockquote> 标签内必须使用 block 级别的标签
<blockquote> 标签用来在页面上表示引用的内容,例如,最常见的,引用代码。我通常习惯将代码的内容放在 <code> 标签中,而这个标签是 inline 级的,不符合 Strict DTD 的要求。<strong>、<b> 等同样会导致问题。符合要求的 block 级标签包括:<address>, <blockquote>, <del>, <div>, <dl>, <fieldset>, <form>, <h>, <h2>, <h4>, <h5>, <h6>, <hr>, <ins>, <noscript>, <ol>, <p>, <pre>, <script>, <table>, <ul>。
不能使用 <embed> 标签
这个问题最容易出现在引用外部媒体文件时,例如 MP3 音乐、视频等。很多资料推荐同时使用 <object> 和 <embed> 来增强媒体引用元素的浏览器兼容性,但是很不幸的,Strict DTD 并未定义 <embed>。其实我们完全可以不使用 <embed> 一样能够兼容浏览器。例如 Youtube 给的代码一般是这样的:
<object width="425" height="344">
<param name="movie"
value="http://www.youtube.com/v/uhsjNTEJD3c"></param>
<param name="allowFullScreen" value="true"></param>
<embed src="http://www.youtube.com/v/uhsjNTEJD3c"
type="application/x-shockwave-flash"
allowfullscreen="true"
width="425" height="344"></embed>
</object>
这样无法通过校验。我们可以改成:
<object type="application/x-shockwave-flash"
width="425" height="344">
<param name="movie"
value="http://www.youtube.com/v/uhsjNTEJD3c"/>
<param name="allowFullScreen" value="true"/>
</object>
实体用法问题
在 XML 中,实体的写法是 &entity;,以一个 & 符号开头,一个分号结束。因此,Strict 标准的 XHTML 里面不允许出现任何单独的 & 符号,即使是在 URL 中用来分隔查询参数。需要用到这个符号的时候,要用 &amp; 来表示。通常一个实体用法的错误会同时导致 5 个校验时的错误,当解决以后,这 5 个错误会同时消失。由于 Blogger 在发布页面时 URL 直接使用了 & 符号,因此会直接导致 Strict 标准的 XHTML 校验失败。
重复的 id 值
对于 XHTML 标签来讲,id 属性的值必须唯一,如果一个文档中出项重复的 id 就会导致问题。出现这种问题,通常是把 id 属性放在了 Blogger 模板会循环输出的部分。
另外,Blogger 提供的模板中,backlinks 那一部分会导致 4 个不同类别的问题。凭心而论,Blogger 模板在 backlinks 这一块的代码实在写的很烂,用了三个不同的 js 文件,用 JavaScript 输出 CSS,不但使得不同模板之间难以更改这一部分显示的样式,也导致了很多 XHTML 的语法校验问题。例如 Blogger 自己的 Buzz,打开任一个文章的独立页面的源代码,Doctype 声明赫然是 XHTML 1.0 Strict,然而 backlink 那一块的代码不用校验也能看出漏洞百出。

Blogger 目前版本的网站出自著名设计师 Douglas Bowman 之手,其本人对 XHTML 以及 CSS 有着非常深刻的研究。在设计之初,Blogger 还没有 Backlinks 的功能,显然这个蹩脚的 Backlinks 是后来由其他人加上去的。不知道 Bowman 先生在看到这一幕后会做何感想。

Google 黑板报用的是同样的 backlink 代码,不过比 Buzz 知趣的是它的模板干脆去掉了 Doctype 声明。只不过作为 Google 旗下的网站,页面连 Doctype 声明都没有,也是一件汗颜的事情。

言归正传,以下列出 backlink 这部分代码导致的问题以及解决方法。
<div> 和 <dl> 之间的嵌套问题
在 Blogger 给出的默认模板代码中,是用 <dl> 来实现反向链接列表的;可问题在于,他们将 <BlogItemBacklinks> 放在了 <dl> 之内,而在生成页面时,会将 <BlogItemBacklinks> 这一对模板标签替换成一对 <div> 标签,从而导致 <div> 被嵌套在 <dl> 内。在 Strict DTD 里,<dl> 标签内只允许出现 <dt> 和 <dd> 两个子标签。解决办法是把 <BlogItemBacklinks> 放到 <dl> 外面,当然这样虽然让 XHTML 语法通过校验,但实际的运行结果,会导致每个反向链接条目会占用一个 <dl> 块,而不是预期的放在循环的若干个 <dt> 和 <dd> 中。通过 CSS 可以解决条目之间间距的问题。如果要完美解决这个问题的话,就只有自己重写 Blogger 提供的 JavaScript 函数来改变这一行为了。
<script> 标签的 defer 属性
在 Blogger 用模板生成页面时,除了将 <BlogItemBacklinks> 替换成一对 <div> 以外,还会在开标签的 <div> 之前加上一个 <script;> 用来引入相关的 JavaScript,同时给出了一个 defer="true" 属性,然而,根据 Strict DTD,defer 属性只能有一个值,只能是 defer="defer"。
<noscript> 内只能用 block 级别标签
在生成以上 <script> 标签的同时,Blogger 给出了一个 <noscript>,用来当浏览器不支持脚本的时候显示一个 Blog Search 的链接。可是 <noscript> 标签内只能用 block 级别的标签,直接用 <a> 这样的 inline 标签是不行的。
模板占位符问题
在模板中这段关于 backlink 的代码中,Blogger 用了一些模板标签作为占位符。通常模板标签会在生成具体网页时替换掉,但这里的占位符不会,它们要在实际生成 backlink 条目时被 JavaScript 程序换掉。但是在做 XHTML 语法校验时,这些占位符以 HTML 标签的形式存在于代码中,而又显然不属于 XHTML 定义的范围,从而导致校验失败。解决办法是将它们的尖括号转移,写成诸如 &lt;$BlogBacklinkTitle$&gt; 的形式,这样既能够被 JavaScript 成功识别,保证功能正常,又能通过 Strict 语法校验。要特别注意,其中 <$BlogBacklinkDeleteIcon$> 不要转义,这个模板标签是在页面生成时被替换的,而不是 JavaScript 的数据占位符。
最后,Google 黑板报最近也发布了一篇关于互联网标准性的文章,这篇文章也提供了很多关于改进网站 HTML 代码的参考信息。

Labels: , , , , , , , , ,

Friday, October 17, 2008

Blogger 的相关文章和热门文章

看到很多别人的 Blog 在文章页面下方都有“相关文章”和“热门文章”的列表,无疑能够增加访问者继续阅读文章的兴趣。可是 Google 的 Blogger 没有这样的功能,于是自己想办法也添加了一个。

由于 Blogger 并没有提供相关的模板标签(Tags)来支持这样的功能,因此自己只好用 PHP 和 MySQL 建立了一个简单的数据维护和查询系统,然后用 AJAX 的方式在页面上显示出来。具体来讲有以下内容:
  • 利用 Google Blogger 的 Feed 接口将文章的 ID、标题、标签、URL、发布及修改时间等内容用程序导入到数据库。
  • Google Analytics 的页面浏览数统计(统计报告 » 内容 » 最常见内容)数据导出成文本文件,再通过程序导入到数据库。
  • 用 PHP 建立一个“相关文章”的查询接口。输入参数为文章的 ID,输出为指定数量的相关文章列表。具体算法上,先用 ID 查出基准文章的标签,然后在数据库中文章中比对标签匹配的数量,按照标签匹配数量从多到少找出相关的文章。
  • 对于热门文章,有两种计算方法。一种是按有史以来所有文章的浏览量来排序,但是用这种方法得到的结果,基本上都是 2005 年很老的文章,而很多有意义的新文章却很难出现。于是我采用了另一种算法,即按照每日平均浏览量来排序,这样比较新的浏览量比较大的文章也能出现了。

修改好模板以后,将整个 Blog 重新发布,现在这些功能已经调试好并上线了。顺便抱怨一下,对于用 FTP 发布的 Blogger 来讲,帖子多了以后,整站重新发布,真是一个漫长的过程啊。

在修改模板的同时,也顺便改了一下首页上提示阅读全文的方式,将原来的“点击这里阅读全文”的文字链接改成了图标,希望这样看起来更醒目一些,在我另一个非技术的 Blog 上可以看到效果。

另外,最初做的模板的 PSD 文件找不到了,也忘了当时在标题部分用的哪种字体。这给后面添加新的标题带来很多麻烦。于是趁这次修改模板,一并将标题的图片都修改了。找了很多字体,也研究了很久,挑了 10 种非衬线(Sans Serif)字体出来,最后选中的竟然是 Windows XP 自带的 Lucida Sans Unicode。

Labels: , , , , , ,

Sunday, September 28, 2008

让 Google Blog Search 收录文章

Google 除了网页搜索外,还有个专门搜索博客文章的引擎,叫做 Blogsearch。基于 Google Blogger 构建的博客里面,反向链接的数据就来源于此。每次打开 Blogger 文章页面,实际上都会通过 JavaScript 作一次 Blogsearch 搜索,并把返回结果作为反向链接显示。

你可能觉得既然 Google 网页搜索都收录了,那同是一家的 Blogsearch 一定也收录了。事实并非如此。

通过 Google 的 Webmaster 管理工具 向 Google 提交自己的 Sitemap,有利于让 Google 在第一时间收录网站更新的页面,但是,这仅限于网页搜索。

最近发现 Blogsearch 似乎没有收录我的文章,仔细查看发现居然已经有两个月之久了,而这些文章通常在发布后快则数小时慢则最多一天内就被网页搜索收录,很是诧异。Google 了一把,找到这篇文章分析原因,说是因为 Blogsearch 和 Feedsky 的自定义域名不兼容有关。

我确实是在 FeedBurner 被封后改在页面上使用 Feedsky 的服务,但对于 Google 的 Blogsearch,向来是由 FeedBurner 自动去 Ping 的,就算 FeedBurner 被封但这个机制应该是仍然在工作的。而且要出问题早该出了,也不至于是在最近这两个月发生吧。百思不得其解,打开 FeedBurner 仔细查看了一下设置,发现设置中“Publicize » PingShot » Google Blog Search Pinging Service”前面的复选框没有勾上!难怪 Blogsearch 不收录文章了,都没人通知它了啊…… 至于为什么 FeedBurner 上这个选项是关闭就不得而知了。如果你也使用 FeedBurner 的服务,也发现 Blogsearch 收录有问题,那么最好也去检查一下。

把这个选项打开后,为了以防万一,又到 Blogsearch 的网址提交页面重新提交了一下网站的 feed 地址。大约过了一小时后,最近两个月没有被收录的文章就立即能够被搜索到了。注意这是一次性的通知服务,如果没有自动 Ping 的机制,则每次网站更新后都要手动执行这个操作。

如果使用其它支持自动 Ping 的 BSP 的话,可以添加 Blogsearch 的 Ping 服务 API 地址:
http://blogsearch.google.com/ping/RPC2
如使用 WordPress 的话,在 Update Services 里面添加这个地址就可以了。更多详细内容可以参考 Blogsearch 的常见问题API 接口文档

Updated on 2008/10/29:

实践证明,使用 Google Blog Search 对 Google 文章的收录是有显著成效的。如下图,在文章发布后,立即 Ping 了 Google Blog Search,不多久就被收录;9 分钟后,Google 的网页搜索便也收录了这篇文章。

Google 网页搜索在 9 分钟内久收录了新文章

Labels: , , ,

Thursday, May 29, 2008

用 AJAX 实现 Blogger 页内评论

之前服务器上有 Java 环境时,一直用一个自己写的 Servlet 作为中间代理来向 Blogger 的评论页面 POST 表单数据,实现页面内的评论操作,后来转挂在朋友的 IIS 服务器下,由于对 ASP 不熟,这一功能就一度取消了。现在购买了新的 Linux PHP 服务器,因此用 PHP 重新写了一个同样功能的中间代理来实现这一功能,并且实现成了 AJAX 的模式。评论内容的读取也一样通过 Blogger Feed 的 JSON 模式读取,因此提交评论后可以立即显示出来,而不用再等待 Blogger 重新生成 HTML 页面并通过 FTP 上传这一漫长的过程。(虽然实际上后台它还是不可避免的执行了这个过程。)

经过多次测试,应该可以用了。关于 Spam 的问题,以前的验证码是直接读取的 Blogger 页面的 Captcha 图片,现在 Google 改变了表单结构以至于程序已经无法自动做这个动作。所以我取消了 Blogger 自己的 Captcha 验证,自己写了个简单的加减法验证,虽然仍然不能完全杜绝 Spam,但已经比几天前测试时裸奔的情况好多了。当时夸张到一个下午一张帖子被贴了 50 多条 Spam 评论。毕竟传说 Google 的 Captcha 也已经被破解了么,同样不能完全杜绝 Spam。 ;-)

另外,Backlink 不显示的问题也修正了。不过,经过前端时间页面恶意代码事件的影响,目前似乎已经没什么 Backlink 了…… :-(

Labels: , , , , , , ,

Wednesday, May 28, 2008

更换服务器

前段时间 blog 一直挂在朋友公司的服务器那里,不知道怎么可能中了病毒,会给网站内的网页和 JavaScript 脚本加尾巴以传播恶意软件,连 Google 也给这个域名下的搜索结果加上了“传播恶意软件”的警告信息。虽然一再通知朋友,但是似乎病毒很顽固,即使手工把“尾巴”去掉了,每次更新又会被加上。这段时间给大家造成了困扰,在这里表示诚挚的歉意。

在网上了解到现在有服务器合租这种服务器的租赁模式,5-30 人共享一台服务器,费用比自己租赁托管服务器要便宜很多,贷款和资源又比虚拟空间模式更能得到保障。有些比较好的合租服务商还有良好的服务器控制面板,可以自行控制域名绑定、FTP / 数据库帐号、网络邮局等,因此特地选了一个基于 Linux 的 64 位 PHP 服务器,并且已经开通了常用的 PHP 扩展库,6G 的空间,一共可以开 4 个独立的站点,非常的方便。关键是有专业的队伍维护,至少不会再有病毒干扰了。目前已经通过 Google 的 Webmaster 工具提交 Google 重新审核过,Google 已经去掉了“传播恶意软件”的警告,朋友们以后可以放心访问这个 blog。 ;-)

另外,目前自己只用得到 1-2 个独立站,还可以开 2 个,如果有朋友有需要用 PHP + MySQL 空间,可以联系我,大家充分利用资源!

Labels: ,

Thursday, December 21, 2006

Blogger 不再 Beta

昨天 Blogger Buzz 更新消息说 Blogger 推出了正式版本,不再是 beta 状态了。

看了下更新列表,没什么特别的新东西。都是最近长期 beta 以来一步步更新的内容。只是发现新版本 Blogger 的域名从 beta.blogger.com 变成了 www2.blogger.com,不过这个并不影响原来 blog 的网页。访问任何 beta.blogger.com 下的页面,会直接跳转到 www2.blogger.com。

趁着这次更新发布,又修改了一下我的模版。主要是把 Calendar 部分换成了可以在一个页面上来回翻月份,而不会在翻动的时候跳动到对应的存档页,这样可以提高 Calendar 导航的效率。

另外,把树状 Archive 目录提前了一些,并在存档页和帖子页会自动展开对应的月份,这同样也是为了加强导航的作用。

之前发现在页内的评论表单上提交评论后,HTML 页面不会被 Blogger 重建,现在欣喜的发现,这个问题 Blogger 似乎已经在最近的某次更新中修正过了。目前直接在页内提交评论,页面会马上开始重建了。只不过由于新 Blogger 每次要更新的页面比较多(包含所有的 Label 页面),因此和以往老的 Blogger 页面重建相比,速度还是要稍慢点,通常 5 分钟之内应该是可以完成的。

接下来打算在有时间的时候把页面左栏的最新评论改成用 JSON 实现,这样就成了真正意义上的“最新评论列表”,而不是目前的“出现在引导页上的帖子相关评论列表”。本来是想把页面上所有可以由 Bogger 的 Feed 实现的数据都用 JSON 来提供,但是每次请求返回的内容多的时候高达 60 多 K,可能会导致页面变慢,而访问上,不会感觉到太大的改变,因此决定先放一放再说。目前还是通过一个 JS 文件来静态存储所有帖子的时间和标题等信息。只不过这个文件仍然可以写服务端程序通过调用 Blogger 的 GData API 来自动更新。

Labels: , ,

Monday, November 13, 2006

升级后如何才能方便的发布评论?

升级到 Blogger Beta后,由于大家无法访问 beta.blogger.com 域名,因此出现了无法发布评论的问题,在上次的帖子中有所讨论。

为了解决这个问题,我自己写了个简单的 Servlet,来接受来自页面上的评论发布,并将这个请求转到 Blogger Beta 上处理评论发布的地址 https://beta.blogger.com/comment.do,因为我可以修改服务器上的 host 文件使其可以访问 beta.blogger.com,这样可以起到一个类似代理的作用,代替需要发布评论的朋友们访问这个不能直接访问的域名。

理论上是没有问题的,实践上我也几乎取得了成功。出现的问题是:评论被正常发布后,和评论相关的帖子页面没有重建!

我们知道,用 FTP 的方式发布 Blogger,任何对帖子的更改,都会导致 Blogger 自动重建页面并自动发布到 FTP 相关的目录下,以使得 blog 网站上的页面能够反应出最近的信息,这些操作包括新增/修改/删除帖子,以及添加/删除评论。正常情况下,一旦有评论发布,这个重建的过程就会发生,这样评论能够在最多几分钟的时间内出现在页面上。

可是现在,评论的内容都出现在 Blogger Beta 自己的评论页面上了,但是却没有触发页面重建。不过,如果直接把页面上评论表单的内容提交到 https://beta.blogger.com/comment.do,则一切正确;但是当然这样做没有意义,因为这要求发布评论的朋友能够直接访问 beta.blogger.com 域名。

现在出现的现象会是,大家发布的评论不会立即显示在帖子页面上,但是实际上是已经被正确的保存了。我看到电子邮件的提示后,就会尽快重建页面使得这些评论能够被显示出来。相信这个问题只是暂时的,总归是应该得到解决的。

这个问题琢磨了一晚上也没有得到结果,Google 上也搜不出什么有用的东西来。已经把这个问题发布到了 Google 上的 Blogger Data API 讨论组求助,希望有人遇到过类似的问题从而给我一些提示。

Updated on 2006/11/17:
有一个更科学的方法来提交评论,那就是用 GData API 向单贴评论的 Feed 地址提交,不过仍然有些问题。详见“通过 GData API 提交评论”。

Updated on 2006/12/21:
Blogger 的某次更新似乎已经解决了评论提交后页面不会重建的问题。现在在页内的评论表单中提交评论,页面会被立即重建,只是由于需要重建的页面和以往的老 Blogger 比起来要多一些,因此会慢一点。一般 5 分钟之内评论就会出现在页面上了。

Labels: , , , , ,

Friday, November 10, 2006

升级到 Blogger Beta 后的问题

昨天收到 Blogger 的升级邀请,将我的 Blogger 帐号升级为了新推出的 Blogger Beta。由于升级的过程中,没有对原有模版中的内容进行更新,也没有自动重新重建页面,因此今天在重新修正了模版文件并将整个站点重建。在这个过程中还是发现了一些问题:
  • 模版中的中文内容变成了乱码
  • 在转换到 Blogger Beta 过后,发现原模版中所有的中文内容全部变成了乱码。看来正如 Blogger Beta 的 Known Issues 所说,Blogger Beta 目前仅支持英文

    幸亏模版有备份,阿门……

  • 模版标签 <$BlogOwnerAboutMe$> 失效
  • 发现原有模版中的 <$BlogOwnerAboutMe$> 在构建页面时被替换成了空字符串,也就是说现在在模版上使用这个标签显示不出任何内容。

    不过与此同时,<<$BlogMemberProfile$> 标签输出的内容中仍然正确包含了 About Me 的信息。我想这应该是个 bug,而且已经通过 Blogger 的反馈系统提交了。只是没有回应…… 没有办反,暂时只有用这个标签代替。其输出的内容与我自己写的几乎完全相同,我之所以原来没有用,是因为我不需要 About Me 这几个字,而是用图片替换掉了。现在只好在页面上用 JavaScript 来取掉这几个字。

  • 发布时不再提供 rss.xml 文件
  • 老版本的 Blogger 支持 Atom 0.3 和 RSS 2.0 两种格式的 Feed,在发布时分别对应 FTP 发布根目录下的 atom.xml 和 rss.xml,现在看来仅发布了 atom.xml 而没了 rss.xml。

    与此同时,Atom Feed 的版本升级为 1.0。我是通过 FeedBurner 来发布我的 Feed 地址的。不过,升级过后,通过 Maxthon 无论直接通过 atom.xml 还是 FeedBurner 的地址,都会发生“无法解析 Feed 的格式”错误。除此之外,Google Reader、FireFox 2.0 的订阅都没有问题。看样子这个只能怪 Maxthon 了。
    关于新版的 Site Feed 设置,比较奇怪的一点是 Blogger 除了提供对 Post 的订阅以外,还提供了对所有 Comments 以及单篇 Post 的 Comments 的订阅,然而发布到 FTP 上的所有文件中,和 Site Feed 相关的只有 atom.xml 这么一个文件,所以无从得知如何实现对 Comments 的订阅。或许是要使用 BlogSpot 的用户才有这个功能?

    Update on 2006/11/14:
    Blogger Help 上的一个条目说:RSS 格式的 Feed 只在 Blogger Pro 提供,如果非 Pro 用户想要使用 RSS 格式的 Feed,请使用 FeedBurner

    另外,现在知道了订阅整站 Comment 和分单帖子 Comment 的地址,它们分别是
    http://beta.blogger.com/feeds/blogID/comments/default

    http://beta.blogger.com/feeds/blogID/postID/comments/default

    Update on 2006/11/16:
    似乎 rss.xml 的发布又恢复了。现在发布新帖的时候,发布文件列表中有这个文件。Known Issues for New Bloggers 上面说明了该问题的情况。

  • 无法特别为标签页面定制模版内容
  • 老版本的 Blogger 模版标签中有几个条件标签可以分别对 IndexPage、ItemPage 和 ArchivePage 进行内容的定制,因为这几个页面的元素显然是不同的。现在多了个 Label 页面,不过却没有特别提供一个 LabelPage 的标签来方便模版条件输出。

    之所以提这个功能,是因为它最大的好处是可以在 Label Page 上显示当前这个页面的内容属于哪个 Label,这样不致于让读者产生困惑。现在的 Label Page 和 Index Page 除了帖子不同外,其它格式基本上完全一样。

  • 可能出现读者访问速度非常缓慢且无法发表评论
  • 当然这个不能怪 Blogger。不过最近大多数人都无法访问 beta.blogger.com 这个域名,对升级后的 Blogger 确实会产生很大的影响。

    首先模版中有多处需要引用 beta.blogger.com 站点上的资源,而且这些资源通常写在网页头中。读者必须要等待浏览器判断这些资源访问超时后才会继续显示后面正常的网页内容,看到的现象就是,网页除了窗口标题出现以外,内容全白,大约等半分钟后网页内容出现。即使 CSS 和模版图片全部用自己的,也无法避免需要引用 beta.blogger.com 上的 JavaScript 来实现 Backlinks 以及一些 Post Control 的功能。除非你完全不用这两个功能,则可以基本上避免引用 beta.blogger.com 站点而导致页面打开缓慢。

    另外,众所周知对 Blogger 的帖子发表评论需要连接到 Blogger 站点上发布。这个过程实际上是 Blogger 在收到新的内容后对相关页面的重建过程。Blogger Beta 的 Blog 站点,读者自然要到 beta.blogger.com 上去发表评论,这个站点打不开,所以不能评论。

    虽然我们可以通过在 C:\Windows\System32\Drivers\etc\host 文件中添加
    72.14.219.190 beta.blogger.com

    这样一行内容来实现访问该站点,但是这仅能方便自己而已,你无法要求自己 blog 所有的读者在发表评论之前都这么做。因此,请所有 Blogger 的用户在升级之前三思!

Labels: , , ,

Thursday, November 09, 2006

转到 Blogger Beta

前几天 Blogger Beta 终于支持了发布到 S/FTP,今天我的帐号终于收到了转到 Blogger Beta 的邀请,这一历史性的时刻终于来到了。这里是 Blogger Buzz 上的公示消息


兴冲冲的赶快按下了“Switch to the new version”,才发现后面的过程需要输入 Google Account 并且到 beta.blogger.com 验证。由于目前公司的网络访问不了 www.google.com,而 beta.blogger.com 目前也无法访问,因此第一次失败……

开了 Tor,用 FireFox 重新打开页面,并且修改了 host 文件以便能够访问 beta.blogger.com,这次所有验证都对了,最后显示了一个“Switching to the new Blogger”,大意是说我的 blogger 正在转移到新的 Blogger Beta,有些 blog 根据情况可能需要时间比较久,因此请耐心等待。等转移完成以后,将会往我的 Gmail 邮箱发邮件通知。

从上午开始申请转移,到午后一直是这个样子。我严重怀疑是不是由于第一次操作失败导致了什么问题,因为我觉得我那两个 blog 150 来篇帖子不至于需要这么久。不放心之下,Google 上查了一下,发现其他人也遇到过类似的问题,说大概是遇到了 IRoC (Initial Rush of Connection)。嗯,也难怪,Google 一开放个服务,开始几天总是要出现点负荷问题。

大概下午三点钟的时候,情况终于发生了变化。Blogger Beta 登录后,显示的内容变为:


看来是 Blogger 正在做转移操作,为了避免这个过程中发生问题,已经屏蔽了用户对帐号进行操作。不过这个过程仍然很久,一直到下午下班前都没有完成。

大约晚上八点,再上线时,发现 Blogger 转移终于完成。Gmail 也收到了 Blogger 的通知邮件。

登录到 Blogger Beta,发现罗列了三个blog,有两个是从先前老版本 Blogger 上转来的,另一个则是上次为了测试创建的。登录老版本的 Blogger,发现已经无法回头了:


不管怎么说,等了好几个月的升级终于完成了。即使是这个转移本身,也花了一天的时间,对人的耐心真是一个不小的考验啊。

Labels: ,

Friday, August 18, 2006

模版更新

看了 Blogger Beta 新的 Archive 树状的列表方式,非常喜欢,于是花了点时间,把自己现在的模版也改成了这个样子。刚好做 Calender 的时候,已经有一份完整的时间、帖子标题和地址的对应数据,所以做这个树状的 Archive 列表,只是表现的问题而已。不过,尽管如此,还是花了我好几个小时的时间。

另外,打开了 Blogger 的 Backlink 功能。由于要改模版,Blogger 提供这个功能以后一直没有动,嫌麻烦。不过,把这个功能打开容易,要把样式调整的和整体一致,还是花了不少功夫。

弄好后,把自己比较得意的帖子都看了一下,除了 Throwing Tables Out the Window 那篇以外,别的帖子几乎没什么 backlinks,可能还是因为我写的东西都比较私人吧。

Labels: , , ,

Wednesday, August 16, 2006

Blogger 新动向

这两天,久经抱怨的 Google Blogger 服务终于有了新动静。从一年多以前开始,Blogger 就承诺对其提供的 Blog 服务进行改进,但除了新增了评论发布的校验码以及评论内容评审以外,未见有什么大的动作。前天,Blogger Buzz 发布了最新推出的 Blogger in beta,针对长期以来用户的抱怨提供了很多新功能,具体包括:
  • 可使用标签对文章进行分类
  • 对 Blog 的访问进行权限控制
  • 用鼠标拖拽即可完成对 Blog 模版的修改和设定,无须进行 HTML 编辑

然而,该项服务目前仅对一部分老用户开放,Blogger 声称会对所有逐步开放。如果你登录后 Dashboard 上有相关连接,那就说明你的帐号已经支持新功能;否则,就要再耐心地等上一段时间。

如果等不急,也可以立即注册一个新的 Beta 帐号,或者用 Google 的帐号,或者原来的 Blogger 帐号登录后创建一个新的 Blog 即可。Blogger 稍后会提供功能,让用户把原来的 Blog 和 Beta 帐号下的新 Blog 合并起来,方便管理。

Blogger 还提供了一个 Tour 来介绍新的功能,包括灵活定制模版、对访问进行权限控制、更多的 Feed 选项、更快捷的发布等。

我也创建了一个新的 Blog 来测试 Blogger Beta 的新功能。前前后后把它的控制面板翻了一遍,发现功能并没开发完全,有些地方还是不尽如人意:
  • 发布选项中,目前仅支持发布到 *.blogspot.com,尚未提供对 FTP 和 SFTP 发布的支持。
  • 创建帖子的时候,表单下面多了一个地方可以设置标签,用来对帖子进行分类。分类的内容会自动发布到帖子后面,而连接指向 http://*.blogspot.com/search?label=label,而并非静态的 HTML 支持。当然,对于分类和标签支持,如何访问指定标签相关的文章,这是最麻烦的一部分,但如果对某一个标签的访问是通过 CGI 程序动态支持的话,不知道对于通过 FTP 发布到指定 host 的用户,Blogger 将如何提供这一功能。
  • 对帖子进行回复仍然要访问 Blogger,表单完全脱离模版。自定义 HTML 提供回复表单,仍然无法使用 Word Verification 功能。
  • 还不支持对模板直接进行 HTML 编辑,也无法去掉页面顶上的 Navbar;仅能够把目前的模板降级为旧版本的模版进行编辑。

不过,我上周才决定要自己对 Blogger 进行 DIY,Blogger 这周就给出升级的消息,同时还包括标签和分类的功能,让我着实很郁闷。Blogger 马上就要自己支持的功能,我就完全没有必要自己 DIY 了阿。虽说是自己写点东西来玩,但也总要有用才有成就感啊。

在放出 Blogger 功能全面升级的消息后,昨天 Blogger Buzz 又放出了 Blogger API 更新的消息,这意味着:
  • Blogger/GData 文档中能够找到很多范例代码。
  • 提供 C# 和 Java 版本的客户端类库下载。
  • 对于账户校验,分别提供了针对桌面程序和 WEB 应用程序的详细文档。
  • GData 相关的代码将能够被很容易的重用于其它 GData 应用程序,如 Google 的 Calendar。

总的来说,这次 Blogger 算是给了支持者们一个值得期待的回应,虽然有很多地方还可以更好,不过也总比什么动静都没有好多了。

与此同时,Blogger 的默认托管站点域名 *.blogspot.com 最近可以在国内自由访问了。以上我建立的测试 Blog 就是用的这个域名。Google 上可以搜索到很多关于 Blogger 解封的信息,不过大家对 Blogger 是否真的解封众说纷纭,并没有确切的消息。这个域名被封锁长达三年之久,如今如果真的被解封了,当然是值得高兴,或许广大的 Google 和 Blogger 们暂时还无法相信这突如其来的幸福吧。

或许是 Google 为了在国内大力推广其 Blogger 服务,在着手升级 Blogger 功能的同时也大力加强公关工作让 *.blogspot.com 在国内真的解封;也有可能是 Blogger 升级让 *.blogspot.com 域名换了 IP 地址,从而暂时绕过了 GFW 的封锁,因为现在 *.blogspot.com 的域名和以前不同了。之前也发生过 Blogger 临时更换 IP 地址导致 Blogger 下站点在短时间内可以访问的事件。

虽然我自己没有用 *.blogspot.com,不会受封锁的影响,但是,解封也意味着可以看到更多 Blogger 上优秀的 blog。希望这次真的是解封了……

Labels: ,

Sunday, November 13, 2005

建立“月蝎研究”分舵

上上个星期起心思想改版,今天终于抽空将技术方面的文章独立出来单独开了一个 Blog,名字暂且就叫“月蝎研究”,以后有灵感了再改。模板风格也没有换,现暂且这样吧,和“今日无大事”保持风格统一,也挺好的。

如果算上兼职的话,工作也有五、六年了,从一开始做纯静态 WEB,到后来研究 PHP (也做过一点 ASP,但不熟),到改行做 Java,同时分管配置管理 (SCM),到后来做系统设计,慢慢地还是积累了不少东西,也得到了不少同事朋友的帮助。做这个 Blog,一方面是想把平时觉得重要的东西总结出来和大家分享讨论,算是一个学习笔记;另一方面,也会摘抄一些相关的好的文章,以使得更多的人受益。

现在 blog.windia.net 这个域名在 Google 的 PageRank 已经达到了 5,很多关键词的搜索都非常靠前,从流量分析上来看,像“青城后山”、“石象湖”、“document.write()”、“月亮落在天蝎座”这些关键词的搜索结果都在第一页甚至第一位,因此为了巩固这个效果,让更多的人能够找到这里,让流量更加集中,所以没有单独开另外的二级域名,而是只开了一个子目录,用 http://blog.windia.net/tech/ 来访问,同时,RSS Feed 订阅的地址为 http://feeds.feedburner.com/gregtech,仍然是 Blogger 一贯的 ATOM 格式,新老朋友们多多支持哦…… ^_^

Labels: