<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feedtech.windia.net/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><atom:link href="http://feedtech.windia.net" type="application/rss+xml" ref="self"></atom:link><fs:self_link href="http://feed.feedsky.com/gregtech" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 30 May 2008 17:07:14 GMT</lastBuildDate><title>月蝎研究</title><description>Gregory 发布的有关技术的文章</description><link atom:type="text/html">http://blog.windia.net/tech/</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002</id><link xmlns="http://www.w3.org/2005/Atom" rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/18923002/posts/default?start-index=11&amp;max-results=10"></link><link xmlns="http://www.w3.org/2005/Atom" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://feedtech.windia.net"></link><link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18923002/posts/default?max-results=10"></link><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><generator xmlns="http://www.w3.org/2005/Atom" version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><pubDate>Fri, 30 May 2008 17:10:19 GMT</pubDate><managingEditor>Gregory</managingEditor><dc:date>2008-05-30T17:10:19Z</dc:date><item><title>更换服务器</title><link atom:title="更换服务器" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954598/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-800834618693188917</id><content xmlns="http://www.w3.org/2005/Atom" type="html">前段时间 blog 一直挂在朋友公司的服务器那里，不知道怎么可能中了病毒，会给网站内的网页和 JavaScript 脚本加尾巴以传播恶意软件，连 Google 也给这个域名下的搜索结果加上了“传播恶意软件”的警告信息。虽然一再通知朋友，但是似乎病毒很顽固，即使手工把“尾巴”去掉了，每次更新又会被加上。这段时间给大家造成了困扰，在这里表示诚挚的歉意。&lt;br /&gt;&lt;br /&gt;在网上了解到现在有服务器合租这种服务器的租赁模式，5-30 人共享一台服务器，费用比自己租赁托管服务器要便宜很多，贷款和资源又比虚拟空间模式更能得到保障。有些比较好的合租服务商还有良好的服务器控制面板，可以自行控制域名绑定、FTP / 数据库帐号、网络邮局等，因此特地选了一个基于 Linux 的 64 位 PHP 服务器，并且已经开通了常用的 PHP 扩展库，6G 的空间，一共可以开 4 个独立的站点，非常的方便。关键是有专业的队伍维护，至少不会再有病毒干扰了。目前已经通过 Google 的 Webmaster 工具提交 Google 重新审核过，Google 已经去掉了“传播恶意软件”的警告，朋友们以后可以放心访问这个 blog。 ;-)&lt;br /&gt;&lt;br /&gt;另外，目前自己只用得到 1-2 个独立站，还可以开 2 个，如果有朋友有需要用 PHP + MySQL 空间，可以联系我，大家充分利用资源！</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>前段时间 blog 一直挂在朋友公司的服务器那里，不知道怎么可能中了病毒，会给网站内的网页和 JavaScript 脚本加尾巴以传播恶意软件，连 Google 也给这个域名下的搜索结果加上了“传播恶意软件”的警告信息。虽然一再通知朋友，但是似乎病毒很顽固，即使手工把“尾巴”去掉了，每次更新又会被加上。这段时间给大家造成了困扰，在这里表示诚挚的歉意。&lt;br /&gt;&lt;br /&gt;在网上了解到现在有服务器合租这种服务器的租赁模式，5-30 人共享一台服务器，费用比自己租赁托管服务器要便宜很多，贷款和资源又比虚拟空间模式更能得到保障。有些比较好的合租服务商还有良好的服务器控制面板，可以自行控制域名绑定、FTP / 数据库帐号、网络邮局等，因此特地选了一个基于 Linux 的 64 位 PHP 服务器，并且已经开通了常用的 PHP 扩展库，6G 的空间，一共可以开 4 个独立的站点，非常的方便。关键是有专业的队伍维护，至少不会再有病毒干扰了。目前已经通过 Google 的 Webmaster 工具提交 Google 重新审核过，Google 已经去掉了“传播恶意软件”的警告，朋友们以后可以放心访问这个 blog。 ;-)&lt;br /&gt;&lt;br /&gt;另外，目前自己只用得到 1-2 个独立站，还可以开 2 个，如果有朋友有需要用 PHP + MySQL 空间，可以联系我，大家充分利用资源！</content:encoded><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">Blog Maintenance</category><pubDate>Sat, 31 May 2008 01:07:14 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-800834618693188917</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2008/05/blog-post.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954598/4180159</fs:itemid></item><item><title>用 AJAX 实现 Blogger 页内评论</title><link atom:title="用 AJAX 实现 Blogger 页内评论" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954597/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-7593460351886191103</id><content xmlns="http://www.w3.org/2005/Atom" type="html">之前服务器上有 Java 环境时，一直用一个&lt;a href=&quot;http://blog.windia.net/tech/2006/11/blog-post.html&quot;&gt;自己写的 Servlet&lt;/a&gt; 作为中间代理来向 Blogger 的评论页面 POST 表单数据，实现页面内的评论操作，后来转挂在朋友的 IIS 服务器下，由于对 ASP 不熟，这一功能就一度取消了。现在&lt;a href=&quot;http://blog.windia.net/2008/05/blog-post_24.html&quot;&gt;购买了新的 Linux PHP 服务器&lt;/a&gt;，因此用 PHP 重新写了一个同样功能的中间代理来实现这一功能，并且实现成了 AJAX 的模式。评论内容的读取也一样通过 &lt;a href=&quot;http://blog.windia.net/tech/2007/01/json.html&quot;&gt;Blogger Feed 的 JSON 模式&lt;/a&gt;读取，因此提交评论后可以立即显示出来，而不用再等待 Blogger 重新生成 HTML 页面并通过 FTP 上传这一漫长的过程。（虽然实际上后台它还是不可避免的执行了这个过程。）&lt;br /&gt;&lt;br /&gt;经过多次测试，应该可以用了。&lt;a href=&quot;http://blog.windia.net/2006/10/blog-post.html&quot;&gt;关于 Spam 的问题&lt;/a&gt;，以前的验证码是直接读取的 Blogger 页面的 Captcha 图片，现在 Google 改变了表单结构以至于程序已经无法自动做这个动作。所以我取消了 Blogger 自己的 Captcha 验证，自己写了个简单的加减法验证，虽然仍然不能完全杜绝 Spam，但已经比几天前测试时裸奔的情况好多了。当时夸张到一个下午一张帖子被贴了 50 多条 Spam 评论。毕竟传说 Google 的 Captcha 也已经被破解了么，同样不能完全杜绝 Spam。 ;-)&lt;br /&gt;&lt;br /&gt;另外，Backlink 不显示的问题也修正了。不过，经过前端时间页面恶意代码事件的影响，目前似乎已经没什么 Backlink 了…… :-(</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>之前服务器上有 Java 环境时，一直用一个&lt;a href=&quot;http://blog.windia.net/tech/2006/11/blog-post.html&quot;&gt;自己写的 Servlet&lt;/a&gt; 作为中间代理来向 Blogger 的评论页面 POST 表单数据，实现页面内的评论操作，后来转挂在朋友的 IIS 服务器下，由于对 ASP 不熟，这一功能就一度取消了。现在&lt;a href=&quot;http://blog.windia.net/2008/05/blog-post_24.html&quot;&gt;购买了新的 Linux PHP 服务器&lt;/a&gt;，因此用 PHP 重新写了一个同样功能的中间代理来实现这一功能，并且实现成了 AJAX 的模式。评论内容的读取也一样通过 &lt;a href=&quot;http://blog.windia.net/tech/2007/01/json.html&quot;&gt;Blogger Feed 的 JSON 模式&lt;/a&gt;读取，因此提交评论后可以立即显示出来，而不用再等待 Blogger 重新生成 HTML 页面并通过 FTP 上传这一漫长的过程。（虽然实际上后台它还是不可避免的执行了这个过程。）&lt;br /&gt;&lt;br /&gt;经过多次测试，应该可以用了。&lt;a href=&quot;http://blog.windia.net/2006/10/blog-post.html&quot;&gt;关于 Spam 的问题&lt;/a&gt;，以前的验证码是直接读取的 Blogger 页面的 Captcha 图片，现在 Google 改变了表单结构以至于程序已经无法自动做这个动作。所以我取消了 Blogger 自己的 Captcha 验证，自己写了个简单的加减法验证，虽然仍然不能完全杜绝 Spam，但已经比几天前测试时裸奔的情况好多了。当时夸张到一个下午一张帖子被贴了 50 多条 Spam 评论。毕竟传说 Google 的 Captcha 也已经被破解了么，同样不能完全杜绝 Spam。 ;-)&lt;br /&gt;&lt;br /&gt;另外，Backlink 不显示的问题也修正了。不过，经过前端时间页面恶意代码事件的影响，目前似乎已经没什么 Backlink 了…… :-(</content:encoded><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">JSON</category><category domain="http://www.blogger.com/atom/ns#">Comment</category><category domain="http://www.blogger.com/atom/ns#">AJAX</category><category domain="http://www.blogger.com/atom/ns#">Blog Maintenance</category><category domain="http://www.blogger.com/atom/ns#">Blogger Hack</category><category domain="http://www.blogger.com/atom/ns#">Feed</category><pubDate>Sat, 31 May 2008 00:54:15 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-7593460351886191103</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2008/05/ajax-blogger.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954597/4180159</fs:itemid></item><item><title>Google 的新 Favicon</title><link atom:title="Google 的新 Favicon" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954596/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-5888143076036584768</id><content xmlns="http://www.w3.org/2005/Atom" type="html">刚刚发现，Google 似乎更换了网站的 favicon：&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://blog.windia.net/tech/imgs/article/2008-05-30/google-new-favicon.png&quot; width=&quot;108&quot; height=&quot;42&quot; border=&quot;0&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;和以前旧的纯色边框比起来，现在的浅色渐变和四周的圆角显得更时尚！如果你看到的还是旧的图标，可能是因为缓存的原因。打开 &lt;a href=&quot;http://www.google.com/favicon.ico&quot;&gt;http://www.google.com/favicon.ico&lt;/a&gt; 应该可以看到新的图标。另外，Gmail 和 Blogger 的图标还暂时没有发现有变化。</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>刚刚发现，Google 似乎更换了网站的 favicon：&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://blog.windia.net/tech/imgs/article/2008-05-30/google-new-favicon.png&quot; width=&quot;108&quot; height=&quot;42&quot; border=&quot;0&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;和以前旧的纯色边框比起来，现在的浅色渐变和四周的圆角显得更时尚！如果你看到的还是旧的图标，可能是因为缓存的原因。打开 &lt;a href=&quot;http://www.google.com/favicon.ico&quot;&gt;http://www.google.com/favicon.ico&lt;/a&gt; 应该可以看到新的图标。另外，Gmail 和 Blogger 的图标还暂时没有发现有变化。</content:encoded><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">Google</category><pubDate>Sat, 31 May 2008 00:28:06 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-5888143076036584768</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2008/05/google-favicon.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954596/4180159</fs:itemid></item><item><title>微软将强制将浏览器升级到 IE7</title><link atom:title="微软将强制将浏览器升级到 IE7" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954599/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-409144774792446114</id><content xmlns="http://www.w3.org/2005/Atom" type="html">&lt;a href=&quot;http://it.solidot.org/article.pl?sid=08/01/22/0347240&amp;from=rss&quot;&gt;在 Solidot 上看到&lt;/a&gt;，&lt;a href=&quot;http://www.infoworld.com/archives/emailPrint.jsp?R=printThis&amp;A=/article/08/01/17/Microsoft-warns-businesses-of-autoupdate-to-IE7_1.html&quot;&gt;InfoWorld 的报道&lt;/a&gt;称，微软将在 2 月 12 日通 Windows Server Update Services 把所有 Windows 系统的浏览器强制升级到 IE7，不会像以前那样要经过用户的许可。微软给出的理由是“安全原因”。&lt;br /&gt;&lt;br /&gt;Solidot 上还调侃说，对 WEB 开发者来说这是个好消息；对以前只支持 IE6 的网站来说，这是场灾难。&lt;br /&gt;&lt;br /&gt;此话不假。以前做 WEB 界面，在所有为浏览器兼容性付出的工作中，50% 的时间花在让 IE 和 FireFox 兼容，另外 50% 的时间花在让 IE 的不同版本之间兼容。作为同一个公司推出的同一系列产品，对一种有标准的文档的理解会有如此大的差异，真的可以说是一件让人费解的事情。不过现在微软终于醒悟了，既然事实已经造成，那就让糟糕的过去都消失掉吧……</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>&lt;a href=&quot;http://it.solidot.org/article.pl?sid=08/01/22/0347240&amp;from=rss&quot;&gt;在 Solidot 上看到&lt;/a&gt;，&lt;a href=&quot;http://www.infoworld.com/archives/emailPrint.jsp?R=printThis&amp;A=/article/08/01/17/Microsoft-warns-businesses-of-autoupdate-to-IE7_1.html&quot;&gt;InfoWorld 的报道&lt;/a&gt;称，微软将在 2 月 12 日通 Windows Server Update Services 把所有 Windows 系统的浏览器强制升级到 IE7，不会像以前那样要经过用户的许可。微软给出的理由是“安全原因”。&lt;br /&gt;&lt;br /&gt;Solidot 上还调侃说，对 WEB 开发者来说这是个好消息；对以前只支持 IE6 的网站来说，这是场灾难。&lt;br /&gt;&lt;br /&gt;此话不假。以前做 WEB 界面，在所有为浏览器兼容性付出的工作中，50% 的时间花在让 IE 和 FireFox 兼容，另外 50% 的时间花在让 IE 的不同版本之间兼容。作为同一个公司推出的同一系列产品，对一种有标准的文档的理解会有如此大的差异，真的可以说是一件让人费解的事情。不过现在微软终于醒悟了，既然事实已经造成，那就让糟糕的过去都消失掉吧……</content:encoded><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">CSS</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">HTML</category><category domain="http://www.blogger.com/atom/ns#">Browser</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><pubDate>Thu, 29 May 2008 12:47:19 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-409144774792446114</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2008/01/ie7.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954599/4180159</fs:itemid></item><item><title>用 JSON 实现侧边栏的最新评论列表</title><link atom:title="用 JSON 实现侧边栏的最新评论列表" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954604/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-3671786912578345376</id><content xmlns="http://www.w3.org/2005/Atom" type="html">上个月 21 号 Google &lt;a href=&quot;http://googledataapis.blogspot.com/2006/11/calling-all-web-hackers-json-support.html&quot;&gt;发出消息&lt;/a&gt;，声称 GData API 开始支持以 &lt;a href=&quot;http://www.json.org/&quot;&gt;JSON&lt;/a&gt; (JavaScript Object Notation，&lt;a href=&quot;http://json.org/json-zh.html&quot;&gt;中文介绍&lt;/a&gt;) 的形式提供数据，并且给出了对应的 &lt;a href=&quot;http://code.google.com/apis/gdata/json.html&quot;&gt;API 文档&lt;/a&gt;，同时 Blogger Buzz 网站也&lt;a href=&quot;http://buzz.blogger.com/2006/11/json-on-new-blogger.html&quot;&gt;告知广大用户&lt;/a&gt;，JSON 支持的 GData API 中同样也包括 Blogger。&lt;br /&gt;&lt;br /&gt;在这之前，由于 JavaScript 先天的限制，我们不能通过 JavaScript 代码打开当前域以外的远程文件，这也就限制了我们通过传统的 AJAX 技术利用 GData API 的 Atom Feed 来实现 Blogger 页面上最新帖子、评论列表的即使更新，因为我们无法在某个 *.blogspot.com 域名下打开 www.blogger.com 下的 XML 文档。当然，新的 Blogger 支持在自己的域名下，也就是以 yourname.blogspot.com/feeds/ 的形式访问 Atom Feed 解决了这个问题，但是对于通过 FTP/sFTP 发布的非 blogspot 用户，还是无法绕过这个问题。&lt;br /&gt;&lt;br /&gt;现在，Google GData API 除了可以在原来的地址后面加 &lt;code&gt;alt=json&lt;/code&gt; 参数来以 JSON 的格式组织数据以外，还可以用 &lt;code&gt;alt=json-in-script&amp;callback=&lt;span style=&quot;font-style:italic;&quot;&gt;myFunction&lt;/span&gt;&lt;/code&gt; (其中 &lt;code&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;myFunction&lt;/span&gt;&lt;/code&gt; 是自己用来处理 JSON 数据的函数) 的方式使得 Feed 返回的 JS 代码内容直接是对 myFunction 函数的调用，这样就绕过了以上 JavaScript 不能远程调用本域以外资源的限制。&lt;br /&gt;&lt;br /&gt;通过这个办法，我修改了自己 Blogger 侧边栏的最新评论列表。虽然原来有一个，不过只是根据 &lt;a href=&quot;http://help.blogger.com/bin/answer.py?answer=42522&amp;topic=8932&quot;&gt;Blogger Help 上的这篇介绍&lt;/a&gt;开启的，原理还是利用 &amp;lt;Blogger&amp;gt; 标签的循环，只输出评论的部分，也就是说，原来的方法输出的只是当前页面最新评论列表，没有在首页列出的文章，其评论是不会出现的。而且，在默认情况下，评论的排序方式是先按帖子先后顺序，再按时间顺序。我自己另外写了一个 JavaScript 函数来对它们重新排序，并只保留最新的 10 条。&lt;br /&gt;&lt;br /&gt;现在，通过 GData API 的 JSON 回调支持，我写了一个真正意义上的最新评论列表。看到&lt;a href=&quot;http://abinlee.blogspot.com/2006/11/json-blog.html&quot;&gt;这位网友&lt;/a&gt;提供了一个 blogspot 用户适用的办法，对于非 blogspot 发布，特别是 FTP/sFTP 发布的用户，可以用我的办法：&lt;div class=&quot;postfull&quot;&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;div id=&quot;sidebar-recent-comments&quot;&amp;gt;&lt;br /&gt;  &amp;lt;p id=&quot;comment-loading&quot;&amp;gt;Loading Data...&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;dl id=&quot;comments-block&quot;&amp;gt;&lt;br /&gt;  &amp;lt;dt class=&quot;comment-data&quot; name=&quot;comment-data&quot;&amp;gt;&lt;br /&gt;    &amp;lt;a href=&quot;&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span&amp;gt;, &amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;lt;span class=&quot;comment-poster&quot;&amp;gt;&lt;br /&gt;      &amp;lt;a href=&quot;&quot; rel=&quot;nofollow&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;lt;span&amp;gt;&amp;nbsp;said...&amp;lt;/span&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;  &amp;lt;dd class=&quot;comment-body&quot; name=&quot;comment-body&quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/dd&amp;gt;       &lt;br /&gt;&amp;lt;/dl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt; &lt;br /&gt;&lt;br /&gt;// Fetch the recent comments from Blogger Feed with JSON code and &lt;br /&gt;// the callback func is &quot;dispComments&quot;.&lt;br /&gt;function getComments(blogId, counts) {&lt;br /&gt;   &lt;br /&gt;  // Temporarily hide it&lt;br /&gt;  var dl = document.getElementById(&quot;comments-block&quot;);&lt;br /&gt;  dl.style.display = &quot;none&quot;;&lt;br /&gt;&lt;br /&gt;  // Retrieve the JSON feed.&lt;br /&gt;  var script = document.createElement('script');&lt;br /&gt;  script.setAttribute('src', 'http://www2.blogger.com/feeds/' + blogId +&lt;br /&gt;                      '/comments/default?alt=json-in-script&amp;callback=' + &lt;br /&gt;        'dispComments&amp;start-index=1&amp;max-results=' + counts);&lt;br /&gt;  script.setAttribute('id', 'jsonScript-recent-comments');&lt;br /&gt;  script.setAttribute('type', 'text/javascript');&lt;br /&gt;  document.documentElement.firstChild.appendChild(script);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Translate the date&lt;br /&gt;function transDate(dateStr) {&lt;br /&gt;    dateStr = dateStr.substring(0, dateStr.indexOf(&quot;.&quot;));&lt;br /&gt;    dateStr = dateStr.replace(&quot;T&quot;, &quot; &quot;);&lt;br /&gt;    dateStr = dateStr.replace(/\-/g, &quot;/&quot;);&lt;br /&gt;    return dateStr;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Display the comment entries onto the web page.&lt;br /&gt;function dispComments(json) {&lt;br /&gt;  var dl = document.getElementById(&quot;comments-block&quot;);&lt;br /&gt;&lt;br /&gt;  // get entry template&lt;br /&gt;  var dt = dl.getElementsByTagName(&quot;dt&quot;)[0];&lt;br /&gt;  var dd = dl.getElementsByTagName(&quot;dd&quot;)[0];&lt;br /&gt;&lt;br /&gt;  dl.removeChild(dt);&lt;br /&gt;  dl.removeChild(dd);&lt;br /&gt;&lt;br /&gt;  for (var i = 0; i &amp;lt; json.feed.entry.length; i++) {&lt;br /&gt;    var entry = json.feed.entry[i];&lt;br /&gt;    var curDt = dt.cloneNode(true);&lt;br /&gt;    var curDd = dd.cloneNode(true);&lt;br /&gt;&lt;br /&gt;    // Time&lt;br /&gt;    curDt.childNodes[0].href = entry.link[0].href;&lt;br /&gt;    curDt.childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(transDate(entry.published.$t)));&lt;br /&gt;&lt;br /&gt;    // Author&lt;br /&gt;    curDt.childNodes[2].childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(entry.author[0].name.$t));&lt;br /&gt;    if (entry.author[0].uri) {&lt;br /&gt;      curDt.childNodes[2].childNodes[0].href = entry.author[0].uri.$t;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      curDt.childNodes[2].childNodes[0].removeAttribute(&quot;href&quot;);&lt;br /&gt;    }&lt;br /&gt;    dl.appendChild(curDt);&lt;br /&gt;    dl.appendChild(curDd);&lt;br /&gt;&lt;br /&gt;    //Content&lt;br /&gt;    curDd.childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(entry.&lt;span style=&quot;color: blue&quot;&gt;title&lt;/span&gt;.$t));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  dl.style.display = &quot;block&quot;;&lt;br /&gt;  var commentLoading = document.getElementById(&quot;comment-loading&quot;);&lt;br /&gt;  commentLoading.style.display = &quot;none&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getComments('&lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;yourBlogId&lt;/span&gt;', &lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;entryCount&lt;/span&gt;);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;注意最后一行调用的 getComments 函数的两个参数，&lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;&lt;code&gt;yourBlogId&lt;/code&gt;&lt;/span&gt; 是你当前这个 Blog 的 blogId，每个 Blog 都是不同的。打开自己帖子的评论页面，从 URL 上就可以找到自己的 blogId。第二个参数 &lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;&lt;code&gt;entryCount&lt;/code&gt;&lt;/span&gt; 是要显示的评论条数，例如 10。&lt;br /&gt;&lt;br /&gt;另外，为了保持页面整洁，我只使用了评论的第一行，也就是 title 部分的内容。如果需要显示完整，将以上代码中蓝色的 &lt;span style=&quot;color: blue;&quot;&gt;&lt;code&gt;title&lt;/code&gt;&lt;/span&gt; 改成 &lt;code&gt;content&lt;/code&gt; 即可。&lt;br /&gt;&lt;br /&gt;为了简洁起见，也可以把 getComments 和 dispComments 两个函数放到外部的 .js 文件中去定义，页面只用引入这个 .js 文件，然后调用 getComments 即可。&lt;/div&gt;</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>上个月 21 号 Google &lt;a href=&quot;http://googledataapis.blogspot.com/2006/11/calling-all-web-hackers-json-support.html&quot;&gt;发出消息&lt;/a&gt;，声称 GData API 开始支持以 &lt;a href=&quot;http://www.json.org/&quot;&gt;JSON&lt;/a&gt; (JavaScript Object Notation，&lt;a href=&quot;http://json.org/json-zh.html&quot;&gt;中文介绍&lt;/a&gt;) 的形式提供数据，并且给出了对应的 &lt;a href=&quot;http://code.google.com/apis/gdata/json.html&quot;&gt;API 文档&lt;/a&gt;，同时 Blogger Buzz 网站也&lt;a href=&quot;http://buzz.blogger.com/2006/11/json-on-new-blogger.html&quot;&gt;告知广大用户&lt;/a&gt;，JSON 支持的 GData API 中同样也包括 Blogger。&lt;br /&gt;&lt;br /&gt;在这之前，由于 JavaScript 先天的限制，我们不能通过 JavaScript 代码打开当前域以外的远程文件，这也就限制了我们通过传统的 AJAX 技术利用 GData API 的 Atom Feed 来实现 Blogger 页面上最新帖子、评论列表的即使更新，因为我们无法在某个 *.blogspot.com 域名下打开 www.blogger.com 下的 XML 文档。当然，新的 Blogger 支持在自己的域名下，也就是以 yourname.blogspot.com/feeds/ 的形式访问 Atom Feed 解决了这个问题，但是对于通过 FTP/sFTP 发布的非 blogspot 用户，还是无法绕过这个问题。&lt;br /&gt;&lt;br /&gt;现在，Google GData API 除了可以在原来的地址后面加 &lt;code&gt;alt=json&lt;/code&gt; 参数来以 JSON 的格式组织数据以外，还可以用 &lt;code&gt;alt=json-in-script&amp;callback=&lt;span style=&quot;font-style:italic;&quot;&gt;myFunction&lt;/span&gt;&lt;/code&gt; (其中 &lt;code&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;myFunction&lt;/span&gt;&lt;/code&gt; 是自己用来处理 JSON 数据的函数) 的方式使得 Feed 返回的 JS 代码内容直接是对 myFunction 函数的调用，这样就绕过了以上 JavaScript 不能远程调用本域以外资源的限制。&lt;br /&gt;&lt;br /&gt;通过这个办法，我修改了自己 Blogger 侧边栏的最新评论列表。虽然原来有一个，不过只是根据 &lt;a href=&quot;http://help.blogger.com/bin/answer.py?answer=42522&amp;topic=8932&quot;&gt;Blogger Help 上的这篇介绍&lt;/a&gt;开启的，原理还是利用 &amp;lt;Blogger&amp;gt; 标签的循环，只输出评论的部分，也就是说，原来的方法输出的只是当前页面最新评论列表，没有在首页列出的文章，其评论是不会出现的。而且，在默认情况下，评论的排序方式是先按帖子先后顺序，再按时间顺序。我自己另外写了一个 JavaScript 函数来对它们重新排序，并只保留最新的 10 条。&lt;br /&gt;&lt;br /&gt;现在，通过 GData API 的 JSON 回调支持，我写了一个真正意义上的最新评论列表。看到&lt;a href=&quot;http://abinlee.blogspot.com/2006/11/json-blog.html&quot;&gt;这位网友&lt;/a&gt;提供了一个 blogspot 用户适用的办法，对于非 blogspot 发布，特别是 FTP/sFTP 发布的用户，可以用我的办法：&lt;div class=&quot;postfull&quot;&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;div id=&quot;sidebar-recent-comments&quot;&amp;gt;&lt;br /&gt;  &amp;lt;p id=&quot;comment-loading&quot;&amp;gt;Loading Data...&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;dl id=&quot;comments-block&quot;&amp;gt;&lt;br /&gt;  &amp;lt;dt class=&quot;comment-data&quot; name=&quot;comment-data&quot;&amp;gt;&lt;br /&gt;    &amp;lt;a href=&quot;&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span&amp;gt;, &amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;lt;span class=&quot;comment-poster&quot;&amp;gt;&lt;br /&gt;      &amp;lt;a href=&quot;&quot; rel=&quot;nofollow&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;lt;span&amp;gt;&amp;nbsp;said...&amp;lt;/span&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;  &amp;lt;dd class=&quot;comment-body&quot; name=&quot;comment-body&quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/dd&amp;gt;       &lt;br /&gt;&amp;lt;/dl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt; &lt;br /&gt;&lt;br /&gt;// Fetch the recent comments from Blogger Feed with JSON code and &lt;br /&gt;// the callback func is &quot;dispComments&quot;.&lt;br /&gt;function getComments(blogId, counts) {&lt;br /&gt;   &lt;br /&gt;  // Temporarily hide it&lt;br /&gt;  var dl = document.getElementById(&quot;comments-block&quot;);&lt;br /&gt;  dl.style.display = &quot;none&quot;;&lt;br /&gt;&lt;br /&gt;  // Retrieve the JSON feed.&lt;br /&gt;  var script = document.createElement('script');&lt;br /&gt;  script.setAttribute('src', 'http://www2.blogger.com/feeds/' + blogId +&lt;br /&gt;                      '/comments/default?alt=json-in-script&amp;callback=' + &lt;br /&gt;        'dispComments&amp;start-index=1&amp;max-results=' + counts);&lt;br /&gt;  script.setAttribute('id', 'jsonScript-recent-comments');&lt;br /&gt;  script.setAttribute('type', 'text/javascript');&lt;br /&gt;  document.documentElement.firstChild.appendChild(script);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Translate the date&lt;br /&gt;function transDate(dateStr) {&lt;br /&gt;    dateStr = dateStr.substring(0, dateStr.indexOf(&quot;.&quot;));&lt;br /&gt;    dateStr = dateStr.replace(&quot;T&quot;, &quot; &quot;);&lt;br /&gt;    dateStr = dateStr.replace(/\-/g, &quot;/&quot;);&lt;br /&gt;    return dateStr;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Display the comment entries onto the web page.&lt;br /&gt;function dispComments(json) {&lt;br /&gt;  var dl = document.getElementById(&quot;comments-block&quot;);&lt;br /&gt;&lt;br /&gt;  // get entry template&lt;br /&gt;  var dt = dl.getElementsByTagName(&quot;dt&quot;)[0];&lt;br /&gt;  var dd = dl.getElementsByTagName(&quot;dd&quot;)[0];&lt;br /&gt;&lt;br /&gt;  dl.removeChild(dt);&lt;br /&gt;  dl.removeChild(dd);&lt;br /&gt;&lt;br /&gt;  for (var i = 0; i &amp;lt; json.feed.entry.length; i++) {&lt;br /&gt;    var entry = json.feed.entry[i];&lt;br /&gt;    var curDt = dt.cloneNode(true);&lt;br /&gt;    var curDd = dd.cloneNode(true);&lt;br /&gt;&lt;br /&gt;    // Time&lt;br /&gt;    curDt.childNodes[0].href = entry.link[0].href;&lt;br /&gt;    curDt.childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(transDate(entry.published.$t)));&lt;br /&gt;&lt;br /&gt;    // Author&lt;br /&gt;    curDt.childNodes[2].childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(entry.author[0].name.$t));&lt;br /&gt;    if (entry.author[0].uri) {&lt;br /&gt;      curDt.childNodes[2].childNodes[0].href = entry.author[0].uri.$t;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      curDt.childNodes[2].childNodes[0].removeAttribute(&quot;href&quot;);&lt;br /&gt;    }&lt;br /&gt;    dl.appendChild(curDt);&lt;br /&gt;    dl.appendChild(curDd);&lt;br /&gt;&lt;br /&gt;    //Content&lt;br /&gt;    curDd.childNodes[0].appendChild(&lt;br /&gt;      document.createTextNode(entry.&lt;span style=&quot;color: blue&quot;&gt;title&lt;/span&gt;.$t));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  dl.style.display = &quot;block&quot;;&lt;br /&gt;  var commentLoading = document.getElementById(&quot;comment-loading&quot;);&lt;br /&gt;  commentLoading.style.display = &quot;none&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getComments('&lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;yourBlogId&lt;/span&gt;', &lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;entryCount&lt;/span&gt;);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;注意最后一行调用的 getComments 函数的两个参数，&lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;&lt;code&gt;yourBlogId&lt;/code&gt;&lt;/span&gt; 是你当前这个 Blog 的 blogId，每个 Blog 都是不同的。打开自己帖子的评论页面，从 URL 上就可以找到自己的 blogId。第二个参数 &lt;span style=&quot;font-style:italic; font-weight: bold; color: #cc0000;&quot;&gt;&lt;code&gt;entryCount&lt;/code&gt;&lt;/span&gt; 是要显示的评论条数，例如 10。&lt;br /&gt;&lt;br /&gt;另外，为了保持页面整洁，我只使用了评论的第一行，也就是 title 部分的内容。如果需要显示完整，将以上代码中蓝色的 &lt;span style=&quot;color: blue;&quot;&gt;&lt;code&gt;title&lt;/code&gt;&lt;/span&gt; 改成 &lt;code&gt;content&lt;/code&gt; 即可。&lt;br /&gt;&lt;br /&gt;为了简洁起见，也可以把 getComments 和 dispComments 两个函数放到外部的 .js 文件中去定义，页面只用引入这个 .js 文件，然后调用 getComments 即可。&lt;/div&gt;</content:encoded><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">JSON</category><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">Comment</category><category domain="http://www.blogger.com/atom/ns#">Blogger Hack</category><pubDate>Thu, 28 Jun 2007 10:49:03 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-3671786912578345376</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2007/01/json.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954604/4180159</fs:itemid></item><item><title>无法访问 Flickr</title><link atom:title="无法访问 Flickr" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954600/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-3223357047411462542</id><content xmlns="http://www.w3.org/2005/Atom" type="html">朋友告诉我 Blog 上的照片很多都看不到，开始很奇怪，以为是 Flickr 服务器出了问题，深究之下，怀疑是被 G-F-W 了…… 通过 &lt;a href=&quot;http://internet.solidot.org/article.pl?sid=07/06/07/0348231&amp;from=rss&quot;&gt;Solidot 证实&lt;/a&gt;，真的是这样……&lt;br /&gt;&lt;br /&gt;具体情况好像是，如果访问了厦门 PX 事件某敏感照片，则会有一段时间访问不了。但据我自己和朋友的情况看，Flickr 网站可以访问，但是照片无论如何都是红叉叉，因此推测被封的应该是 *.static.flickr.com。&lt;br /&gt;&lt;br /&gt;唉，这年头，要用点网络服务还真难，我可是上个月刚刚付费成为 Flickr 的 Pro 用户啊！去欧洲 6G 多的照片正在准备整理上传呢！真的是很无言……&lt;br /&gt;&lt;br /&gt;套用 Solidot 的话；到底做错了什么……？</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>朋友告诉我 Blog 上的照片很多都看不到，开始很奇怪，以为是 Flickr 服务器出了问题，深究之下，怀疑是被 G-F-W 了…… 通过 &lt;a href=&quot;http://internet.solidot.org/article.pl?sid=07/06/07/0348231&amp;from=rss&quot;&gt;Solidot 证实&lt;/a&gt;，真的是这样……&lt;br /&gt;&lt;br /&gt;具体情况好像是，如果访问了厦门 PX 事件某敏感照片，则会有一段时间访问不了。但据我自己和朋友的情况看，Flickr 网站可以访问，但是照片无论如何都是红叉叉，因此推测被封的应该是 *.static.flickr.com。&lt;br /&gt;&lt;br /&gt;唉，这年头，要用点网络服务还真难，我可是上个月刚刚付费成为 Flickr 的 Pro 用户啊！去欧洲 6G 多的照片正在准备整理上传呢！真的是很无言……&lt;br /&gt;&lt;br /&gt;套用 Solidot 的话；到底做错了什么……？</content:encoded><category domain="http://www.blogger.com/atom/ns#">Flickr</category><pubDate>Thu, 07 Jun 2007 15:31:27 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-3223357047411462542</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2007/06/flickr.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954600/4180159</fs:itemid></item><item><title>MySQL 的自动断开连接问题</title><link atom:title="MySQL 的自动断开连接问题" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954601/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-475808845269373330</id><content xmlns="http://www.w3.org/2005/Atom" type="html">最近发现 MySQL 会自动断开 IDLE 时间超过 8 小时的数据库连接，从而导致一些基于数据库连接的应用程序，特别是 WEB 应用程序出错。&lt;br /&gt;&lt;br /&gt;有两个办法可以解决这个问题：&lt;br /&gt;&lt;br /&gt;第一个办法是修改 MySQL 的配置参数。这个参数的名称是 &lt;i&gt;wait_timeout&lt;/i&gt;，其默认值为 28800(单位秒)，刚好就是 8 小时。其意义为关闭一个连接之前在这个连接上等到行动的秒数，也就是说，如果一个连接闲置超过这个选项所设置的秒数，MySQL 会主动断开这个连接。&lt;br /&gt;&lt;br /&gt;有实践表明，没有办法把这个值设置成无限大，即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作，那么最好用第二个方法解决这个问题。&lt;br /&gt;&lt;br /&gt;第二个办法是如下修改 JDBC 连接的 URL：&lt;blockquote&gt;&lt;code&gt;jdbc:mysql://&lt;i&gt;hostaddress&lt;/i&gt;:3306/&lt;i&gt;schemaname&lt;/i&gt;&lt;b&gt;?autoReconnect=true&lt;/b&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;添加 &lt;code&gt;&lt;b&gt;autoReconnect=true&lt;/b&gt;&lt;/code&gt; 这个参数，即能解决这个问题。&lt;br /&gt;&lt;br /&gt;另外，对于 Java 的应用程序，据说第三方的数据库连接池应用 &lt;a href=&quot;http://proxool.sourceforge.net/&quot;&gt;Proxool&lt;/a&gt; 能够对断开的数据库连接发起自动重连，不过我没有用过，有兴趣的朋友可以尝试一下。</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>最近发现 MySQL 会自动断开 IDLE 时间超过 8 小时的数据库连接，从而导致一些基于数据库连接的应用程序，特别是 WEB 应用程序出错。&lt;br /&gt;&lt;br /&gt;有两个办法可以解决这个问题：&lt;br /&gt;&lt;br /&gt;第一个办法是修改 MySQL 的配置参数。这个参数的名称是 &lt;i&gt;wait_timeout&lt;/i&gt;，其默认值为 28800(单位秒)，刚好就是 8 小时。其意义为关闭一个连接之前在这个连接上等到行动的秒数，也就是说，如果一个连接闲置超过这个选项所设置的秒数，MySQL 会主动断开这个连接。&lt;br /&gt;&lt;br /&gt;有实践表明，没有办法把这个值设置成无限大，即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作，那么最好用第二个方法解决这个问题。&lt;br /&gt;&lt;br /&gt;第二个办法是如下修改 JDBC 连接的 URL：&lt;blockquote&gt;&lt;code&gt;jdbc:mysql://&lt;i&gt;hostaddress&lt;/i&gt;:3306/&lt;i&gt;schemaname&lt;/i&gt;&lt;b&gt;?autoReconnect=true&lt;/b&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;添加 &lt;code&gt;&lt;b&gt;autoReconnect=true&lt;/b&gt;&lt;/code&gt; 这个参数，即能解决这个问题。&lt;br /&gt;&lt;br /&gt;另外，对于 Java 的应用程序，据说第三方的数据库连接池应用 &lt;a href=&quot;http://proxool.sourceforge.net/&quot;&gt;Proxool&lt;/a&gt; 能够对断开的数据库连接发起自动重连，不过我没有用过，有兴趣的朋友可以尝试一下。</content:encoded><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Knowledge Base</category><pubDate>Tue, 27 Feb 2007 15:05:07 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-475808845269373330</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2007/02/mysql.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954601/4180159</fs:itemid></item><item><title>不再厌恶中文版 Windows XP</title><link atom:title="不再厌恶中文版 Windows XP" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954602/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-6666436329862284924</id><content xmlns="http://www.w3.org/2005/Atom" type="html">一直很厌恶简体中文版的 Windows XP，而尽可能的用英文版，不是我为了炫耀英文——其实刚开始使用英文版的时候真的有种找不到北的感觉——之所以会厌恶，完全是因为字体！&lt;br /&gt;&lt;br /&gt;厌恶 Windows 系统“宋体”的默认西文字体已经有年头了，我是不会在任何场合下使用其对应的西文字体的，只要有可能我就会用 Tahoma 或者 Verdana 来替代。诚然，宋体在 12px 以及 14px 下作为正文字体是非常合适的，也很入眼，但是在比 12px 更小或者比 14px 更大的场合，这款字体就不那么好看了，加上它没有很好的支持 Anti-Aliasing 和 ClearType，因此在 Windows Vista 中才会替换成了以前说过的“&lt;a href=&quot;http://blog.windia.net/tech/2006/12/cleartype-ui.html&quot;&gt;微软雅黑&lt;/a&gt;”。&lt;br /&gt;&lt;br /&gt;通常中文版的 Windows XP 装好后，大部分的字体都可以通过“显示属性”对话框中“外观”选项卡下的“高级”选项对话框来设置。然而，登录界面以及登录后屏幕左下角“开始”按钮上偌大的“开始”两个字，可以说要多难看有多难看。经过一番 Google 和琢磨，现在终于找到办法来将这两处的字体换掉。这样一来，我就可以比价舒服的用中文版的 Windows XP了。以下是修改方法：&lt;br /&gt;&lt;div class=&quot;postfull&quot;&gt;&lt;br /&gt;&lt;strong&gt;修改登录界面字体&lt;/strong&gt;&lt;br /&gt;登录界面是由 C:\Windows\System32\logonui.exe 来控制的，其所有的内容和资源都被编译打包到这个可执行文件里头。为了能够改变它，我们需要用到 ResHacker 这款小工具（&lt;a href=&quot;http://blog.windia.net/res/software/ResHack.zip&quot;&gt;点击这里下载&lt;/a&gt;，版本 3.4.0.79，若需更新版本请自行 Google）。&lt;br /&gt;&lt;br /&gt;先将 C:\Windows\System32\logonui.exe 文件备份，然后用 ResHacker 打开这个文件，可以看到左边列出了一些可展开的树状目录。打开“String Table”，这个目录下为程序需要用到的字符串。打开第一个名字为“1”的目录，再点击“2052”项，会发现右边的窗口列出了一些字符串，注意到标号为 1, 2 和 3 的文字即是“宋体”，这就是控制字体的地方了。将这三项改成你要设置的字体的名称就可以了，比如“微软雅黑”。注意设置之前一定要确保目标字体存在，建议先到“控制面板”的“字体”管理中确认。设置完了以后，要点击一下右边窗口上访的“Compile Script”按钮。&lt;br /&gt;&lt;br /&gt;另外，和“1”目录并列的“4”目录下还有一个“宋体”字符串项，也改成你要的字体吧。修改完成后，选择菜单中“File -&gt; Save”保存，然后退出即可。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;注意&lt;/strong&gt;，通常修改 Windows 的系统文件，人们一般都会建议到安全模式的 DOS 命令方式下去替换，这样可以避免因为文件正在被使用而无法写入，或者修改后导致正在运行的系统出现问题。不过这个 logonui.exe 可以无须这么做，在 Windows 正常运行过程中是可以被写入的，只是被写入后，Windows 会立即报告发现文件被修改为不可识别的版本，并建议用 Windows 安装盘修复。这时取消掉这个建议，并确认使用目前的无法识别版本就可以了。&lt;br /&gt;&lt;br /&gt;修改并保存后，立即注销一下，或者用切换用户的命令（快捷键 Win＋L）回到登录界面，发现修改已经生效了。以下是我修改后的截图（点击可查看大图）。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-logonui-msyh.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 480px;&quot; src=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-logonui-msyh_thumbnail.jpg&quot; border=&quot;0&quot; alt=&quot;修改过字体后的登录界面&quot; /&gt;&lt;/a&gt;&lt;br /&gt;ResHacker 不但可以修改 exe 文件中的字符串，还可以修改 Bitmap 图片以及程序中各元素出现的位置坐标等，通过这一点完全可以自定义出截然不同的登录界面来。各位有兴趣可以自行研究。注销和关闭 Windows 的对话框也可以修改，分别对应 Shell32.dll 和 msgina.dll。修改之前记得一定要先把原来的文件备份好，以防出现不测。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;修改“开始”按钮字体&lt;/strong&gt;&lt;br /&gt;“开始”菜单和任务栏所对应的应用程序为 C:\Windows\Explorer.exe，如果要将“开始”这两个字替换成别的内容或者修改别的相关的字符串，可以用上面的办法通过 ResHacker 打开这个文件（记得做好备份）。不过，控制字体的地方却不在这个文件中。要修改“开始”按钮这两个字的字体，需要修改注册表。&lt;br /&gt;&lt;br /&gt;打开注册表的&lt;blockquote style=&quot;word-break: break-all; word-wrap: break-word;&quot;&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FontAssoc\Associated DefaultFonts&lt;/blockquote&gt;&lt;br /&gt;将 AssocSystemSwiss 改成你需要的字体名称即可。然后退出重新启动系统使得改动生效。&lt;br /&gt;&lt;br /&gt;以下是我修改后“开始”按钮的效果：&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-startbttn-msyh.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 361px;&quot; src=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-startbttn-msyh.png&quot; border=&quot;0&quot; alt=&quot;更改过字体的“开始”按钮&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>一直很厌恶简体中文版的 Windows XP，而尽可能的用英文版，不是我为了炫耀英文——其实刚开始使用英文版的时候真的有种找不到北的感觉——之所以会厌恶，完全是因为字体！&lt;br /&gt;&lt;br /&gt;厌恶 Windows 系统“宋体”的默认西文字体已经有年头了，我是不会在任何场合下使用其对应的西文字体的，只要有可能我就会用 Tahoma 或者 Verdana 来替代。诚然，宋体在 12px 以及 14px 下作为正文字体是非常合适的，也很入眼，但是在比 12px 更小或者比 14px 更大的场合，这款字体就不那么好看了，加上它没有很好的支持 Anti-Aliasing 和 ClearType，因此在 Windows Vista 中才会替换成了以前说过的“&lt;a href=&quot;http://blog.windia.net/tech/2006/12/cleartype-ui.html&quot;&gt;微软雅黑&lt;/a&gt;”。&lt;br /&gt;&lt;br /&gt;通常中文版的 Windows XP 装好后，大部分的字体都可以通过“显示属性”对话框中“外观”选项卡下的“高级”选项对话框来设置。然而，登录界面以及登录后屏幕左下角“开始”按钮上偌大的“开始”两个字，可以说要多难看有多难看。经过一番 Google 和琢磨，现在终于找到办法来将这两处的字体换掉。这样一来，我就可以比价舒服的用中文版的 Windows XP了。以下是修改方法：&lt;br /&gt;&lt;div class=&quot;postfull&quot;&gt;&lt;br /&gt;&lt;strong&gt;修改登录界面字体&lt;/strong&gt;&lt;br /&gt;登录界面是由 C:\Windows\System32\logonui.exe 来控制的，其所有的内容和资源都被编译打包到这个可执行文件里头。为了能够改变它，我们需要用到 ResHacker 这款小工具（&lt;a href=&quot;http://blog.windia.net/res/software/ResHack.zip&quot;&gt;点击这里下载&lt;/a&gt;，版本 3.4.0.79，若需更新版本请自行 Google）。&lt;br /&gt;&lt;br /&gt;先将 C:\Windows\System32\logonui.exe 文件备份，然后用 ResHacker 打开这个文件，可以看到左边列出了一些可展开的树状目录。打开“String Table”，这个目录下为程序需要用到的字符串。打开第一个名字为“1”的目录，再点击“2052”项，会发现右边的窗口列出了一些字符串，注意到标号为 1, 2 和 3 的文字即是“宋体”，这就是控制字体的地方了。将这三项改成你要设置的字体的名称就可以了，比如“微软雅黑”。注意设置之前一定要确保目标字体存在，建议先到“控制面板”的“字体”管理中确认。设置完了以后，要点击一下右边窗口上访的“Compile Script”按钮。&lt;br /&gt;&lt;br /&gt;另外，和“1”目录并列的“4”目录下还有一个“宋体”字符串项，也改成你要的字体吧。修改完成后，选择菜单中“File -&gt; Save”保存，然后退出即可。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;注意&lt;/strong&gt;，通常修改 Windows 的系统文件，人们一般都会建议到安全模式的 DOS 命令方式下去替换，这样可以避免因为文件正在被使用而无法写入，或者修改后导致正在运行的系统出现问题。不过这个 logonui.exe 可以无须这么做，在 Windows 正常运行过程中是可以被写入的，只是被写入后，Windows 会立即报告发现文件被修改为不可识别的版本，并建议用 Windows 安装盘修复。这时取消掉这个建议，并确认使用目前的无法识别版本就可以了。&lt;br /&gt;&lt;br /&gt;修改并保存后，立即注销一下，或者用切换用户的命令（快捷键 Win＋L）回到登录界面，发现修改已经生效了。以下是我修改后的截图（点击可查看大图）。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-logonui-msyh.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 480px;&quot; src=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-logonui-msyh_thumbnail.jpg&quot; border=&quot;0&quot; alt=&quot;修改过字体后的登录界面&quot; /&gt;&lt;/a&gt;&lt;br /&gt;ResHacker 不但可以修改 exe 文件中的字符串，还可以修改 Bitmap 图片以及程序中各元素出现的位置坐标等，通过这一点完全可以自定义出截然不同的登录界面来。各位有兴趣可以自行研究。注销和关闭 Windows 的对话框也可以修改，分别对应 Shell32.dll 和 msgina.dll。修改之前记得一定要先把原来的文件备份好，以防出现不测。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;修改“开始”按钮字体&lt;/strong&gt;&lt;br /&gt;“开始”菜单和任务栏所对应的应用程序为 C:\Windows\Explorer.exe，如果要将“开始”这两个字替换成别的内容或者修改别的相关的字符串，可以用上面的办法通过 ResHacker 打开这个文件（记得做好备份）。不过，控制字体的地方却不在这个文件中。要修改“开始”按钮这两个字的字体，需要修改注册表。&lt;br /&gt;&lt;br /&gt;打开注册表的&lt;blockquote style=&quot;word-break: break-all; word-wrap: break-word;&quot;&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FontAssoc\Associated DefaultFonts&lt;/blockquote&gt;&lt;br /&gt;将 AssocSystemSwiss 改成你需要的字体名称即可。然后退出重新启动系统使得改动生效。&lt;br /&gt;&lt;br /&gt;以下是我修改后“开始”按钮的效果：&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-startbttn-msyh.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 361px;&quot; src=&quot;http://blog.windia.net/tech/imgs/article/2007-01-08/winxp-startbttn-msyh.png&quot; border=&quot;0&quot; alt=&quot;更改过字体的“开始”按钮&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content:encoded><category domain="http://www.blogger.com/atom/ns#">微软雅黑</category><category domain="http://www.blogger.com/atom/ns#">Font</category><category domain="http://www.blogger.com/atom/ns#">Knowledge Base</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">GUI</category><category domain="http://www.blogger.com/atom/ns#">ClearType</category><pubDate>Fri, 12 Jan 2007 17:51:25 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-6666436329862284924</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2007/01/windows-xp.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954602/4180159</fs:itemid></item><item><title>Blogger 自定义域名</title><link atom:title="Blogger 自定义域名" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954603/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-7192349716985215236</id><content xmlns="http://www.w3.org/2005/Atom" type="html">昨天 Blogger Buzz 放出消息，声称 Blogger 现在可以支持&lt;a href=&quot;http://buzz.blogger.com/2007/01/blogger-custom-domains.html&quot;&gt;自定义域名&lt;/a&gt;。对于自己喜欢的 *.blogspot.com 域名已经被注册，或者难以使用 FTP 发布的国内 Blogger 用户来讲，这是个好消息。根据&lt;a href=&quot;http://help.blogger.com/bin/answer.py?answer=55373&quot;&gt;这篇帮助&lt;/a&gt;的提示，只需注册一个域名，简单的设置一个 CNAME 记录，就可以用 BlogSpot 托管空间而使用自己的域名。&lt;br /&gt;&lt;br /&gt;我新建了一个域名来发布上次测试用的 Blog，地址是：&lt;a href=&quot;http://blogtest.windia.net&quot;&gt;http://blogtest.windia.net&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;Blogger 提供的新的模版编辑体系还是很实用的，关键是相对传统的模版，新模版加入了很多新的功能和特性，这些对于 FTP 发布使用传统模版的用户是无法使用的。&lt;br /&gt;&lt;br /&gt;不过，值得担心的是，如果 Blogger 和其托管站点 *.blogspot.com 一旦再被封，自定义的域名是否也会同样失效？目前 Blogger 要求自定域名的 CNAME 记录指向 ghs.google.com，这个域名和 *.blogspot.com 的 IP 地址是不相同的，希望能够在 *.blogspot.com 万一再次遭殃的时候能够幸免于难。</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>昨天 Blogger Buzz 放出消息，声称 Blogger 现在可以支持&lt;a href=&quot;http://buzz.blogger.com/2007/01/blogger-custom-domains.html&quot;&gt;自定义域名&lt;/a&gt;。对于自己喜欢的 *.blogspot.com 域名已经被注册，或者难以使用 FTP 发布的国内 Blogger 用户来讲，这是个好消息。根据&lt;a href=&quot;http://help.blogger.com/bin/answer.py?answer=55373&quot;&gt;这篇帮助&lt;/a&gt;的提示，只需注册一个域名，简单的设置一个 CNAME 记录，就可以用 BlogSpot 托管空间而使用自己的域名。&lt;br /&gt;&lt;br /&gt;我新建了一个域名来发布上次测试用的 Blog，地址是：&lt;a href=&quot;http://blogtest.windia.net&quot;&gt;http://blogtest.windia.net&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;Blogger 提供的新的模版编辑体系还是很实用的，关键是相对传统的模版，新模版加入了很多新的功能和特性，这些对于 FTP 发布使用传统模版的用户是无法使用的。&lt;br /&gt;&lt;br /&gt;不过，值得担心的是，如果 Blogger 和其托管站点 *.blogspot.com 一旦再被封，自定义的域名是否也会同样失效？目前 Blogger 要求自定域名的 CNAME 记录指向 ghs.google.com，这个域名和 *.blogspot.com 的 IP 地址是不相同的，希望能够在 *.blogspot.com 万一再次遭殃的时候能够幸免于难。</content:encoded><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">模版</category><pubDate>Mon, 08 Jan 2007 15:56:01 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-7192349716985215236</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2007/01/blogger.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954603/4180159</fs:itemid></item><item><title>Blogger 不再 Beta</title><link atom:title="Blogger 不再 Beta" atom:type="text/html">http://item.feedsky.com/~feedsky/gregtech/~6072356/79954605/4180159/1/item.html</link><id xmlns="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-18923002.post-8943576990045390670</id><content xmlns="http://www.w3.org/2005/Atom" type="html">昨天 Blogger Buzz 更新&lt;a href=&quot;http://buzz.blogger.com/2006/12/new-version-of-blogger.html&quot;&gt;消息&lt;/a&gt;说 Blogger 推出了正式版本，不再是 beta 状态了。&lt;br /&gt;&lt;br /&gt;看了下更新列表，没什么特别的新东西。都是最近长期 beta 以来一步步更新的内容。只是发现新版本 Blogger 的域名从 beta.blogger.com 变成了 www2.blogger.com，不过这个并不影响原来 blog 的网页。访问任何 beta.blogger.com 下的页面，会直接跳转到 www2.blogger.com。&lt;br /&gt;&lt;br /&gt;趁着这次更新发布，又修改了一下我的模版。主要是把 Calendar 部分换成了可以在一个页面上来回翻月份，而不会在翻动的时候跳动到对应的存档页，这样可以提高 Calendar 导航的效率。&lt;br /&gt;&lt;br /&gt;另外，把树状 Archive 目录提前了一些，并在存档页和帖子页会自动展开对应的月份，这同样也是为了加强导航的作用。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/2006/11/blog-post.html&quot;&gt;之前发现&lt;/a&gt;在页内的评论表单上提交评论后，HTML 页面不会被 Blogger 重建，现在欣喜的发现，这个问题 Blogger 似乎已经在最近的某次更新中修正过了。目前直接在页内提交评论，页面会马上开始重建了。只不过由于新 Blogger 每次要更新的页面比较多(包含所有的 Label 页面)，因此和以往老的 Blogger 页面重建相比，速度还是要稍慢点，通常 5 分钟之内应该是可以完成的。&lt;br /&gt;&lt;br /&gt;接下来打算在有时间的时候把页面左栏的最新评论改成用 JSON 实现，这样就成了真正意义上的“最新评论列表”，而不是目前的“出现在引导页上的帖子相关评论列表”。本来是想把页面上所有可以由 Bogger 的 Feed 实现的数据都用 JSON 来提供，但是每次请求返回的内容多的时候高达 60 多 K，可能会导致页面变慢，而访问上，不会感觉到太大的改变，因此决定先放一放再说。目前还是通过一个 JS 文件来静态存储所有帖子的时间和标题等信息。只不过这个文件仍然可以写服务端程序通过调用 Blogger 的 GData API 来自动更新。</content><author xmlns="http://www.w3.org/2005/Atom"><name>Gregory</name><uri>http://www.blogger.com/profile/06414658053253316047</uri><email>noreply@blogger.com</email></author><content:encoded>昨天 Blogger Buzz 更新&lt;a href=&quot;http://buzz.blogger.com/2006/12/new-version-of-blogger.html&quot;&gt;消息&lt;/a&gt;说 Blogger 推出了正式版本，不再是 beta 状态了。&lt;br /&gt;&lt;br /&gt;看了下更新列表，没什么特别的新东西。都是最近长期 beta 以来一步步更新的内容。只是发现新版本 Blogger 的域名从 beta.blogger.com 变成了 www2.blogger.com，不过这个并不影响原来 blog 的网页。访问任何 beta.blogger.com 下的页面，会直接跳转到 www2.blogger.com。&lt;br /&gt;&lt;br /&gt;趁着这次更新发布，又修改了一下我的模版。主要是把 Calendar 部分换成了可以在一个页面上来回翻月份，而不会在翻动的时候跳动到对应的存档页，这样可以提高 Calendar 导航的效率。&lt;br /&gt;&lt;br /&gt;另外，把树状 Archive 目录提前了一些，并在存档页和帖子页会自动展开对应的月份，这同样也是为了加强导航的作用。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.windia.net/tech/2006/11/blog-post.html&quot;&gt;之前发现&lt;/a&gt;在页内的评论表单上提交评论后，HTML 页面不会被 Blogger 重建，现在欣喜的发现，这个问题 Blogger 似乎已经在最近的某次更新中修正过了。目前直接在页内提交评论，页面会马上开始重建了。只不过由于新 Blogger 每次要更新的页面比较多(包含所有的 Label 页面)，因此和以往老的 Blogger 页面重建相比，速度还是要稍慢点，通常 5 分钟之内应该是可以完成的。&lt;br /&gt;&lt;br /&gt;接下来打算在有时间的时候把页面左栏的最新评论改成用 JSON 实现，这样就成了真正意义上的“最新评论列表”，而不是目前的“出现在引导页上的帖子相关评论列表”。本来是想把页面上所有可以由 Bogger 的 Feed 实现的数据都用 JSON 来提供，但是每次请求返回的内容多的时候高达 60 多 K，可能会导致页面变慢，而访问上，不会感觉到太大的改变，因此决定先放一放再说。目前还是通过一个 JS 文件来静态存储所有帖子的时间和标题等信息。只不过这个文件仍然可以写服务端程序通过调用 Blogger 的 GData API 来自动更新。</content:encoded><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Blogger</category><category domain="http://www.blogger.com/atom/ns#">Calendar</category><category domain="http://www.blogger.com/atom/ns#">Blog Maintenance</category><pubDate>Fri, 05 Jan 2007 13:52:47 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-18923002.post-8943576990045390670</guid><dc:creator>Gregory</dc:creator><fs:srclink>http://blog.windia.net/tech/2006/12/blogger-beta.html</fs:srclink><fs:srcfeed>http://beta.blogger.com/feeds/18923002/posts/default?max-results=10</fs:srcfeed><fs:itemid>feedsky/gregtech/~6072356/79954605/4180159</fs:itemid></item></channel></rss>