总算有了个初步的原创主题

标题这个话说得有点儿太满了,首先这个主题的创意来自于我的好朋友丁宇的个人网站。我想,如果他是用WordPress作为网站后端的话,我大概就会直接向他索要主题和插件了。但是,我想大概肯定是WordPress的架构对于他的创作来说有些缚手缚脚了,所以他采用的是基于Ruby on Rails的、纯手工打造的后台程序。我印象很深刻的是他的一句话:“我正在形成我自己的风格,晚了点,不过这一天终于来了。”我认为,对于设计师或是用村上春树的话说,任何“从零开始鼓捣一些什么”的人来说,形成自己的风格,把“自己这一个”从无数的“一个”中区别出来,可能是无上重要的事。理所当然。 然而,活过了这么些岁月,自知之明恐怕是最重要的收获。自己能做到什么样的程度,多少是心里有数的。从零开始做原创主题,内容部分不是问题,问题在于编排。换言之就是PHP部分不是问题,问题在于CSS。不可能有时间去一点点研究,借力是必须的。去花钱找外面做“高仿主题”的工作室也许可以,但是其实也不靠谱,因为我要做的主题毕竟有我的要求:正如考试作弊时虽说要抄别人的答案,但不能把名字也抄了。 还是顾国海同志帮我解决了头疼问题,我给他稍微解释了一下WordPress主循环,以及WordPress的各个页面的含义以后,他几乎立刻理解了所有的技术。一两天之内,他就在本地搭建了非常完备的测试环境,并且很熟练地从WordPress标准主题中拿来各种模块为其所用。这一点,实际上是任何一个程序员极其核心的能力:程序员的学习实际上从来不是一个先理解基本概念、再从基本概念开始自己构建一切的学院派过程(A过程);而是先囫囵地把别人的代码拿过来呈现出自己想要的结果,并在修正偏差的过程中一点点地理解别人的代码,最终能够以需要的精度来使用代码表达自己意图的驯兽师过程(B过程)。这也是为什么现在市面上大多数的程序设计教材不能够圆满地达到教学目的的缘故,因为它们几乎完全忽视了B过程(或者不如说绝大多数的作者都实际上写不出漂亮的、能够实现复杂功能的代码,从而他们只能以展示幼儿园水平的代码为限,并声称复杂代码是由这些代码发展而来的,事实情况当然与此大相径庭),而通过实实在在的、言简意赅的代码或者说案例来进行指导学生的经典教材,当然是Brian W. Kernighan和Rob Pike合著的《程序设计实践》。A过程和B过程这样的说法,是参考了Felix Klein的名著《高观点下的初等数学》第一卷第四章附注“关于数学的现代发展和一般结构”,当然含义有很大区别,但是基本的想法上契合的部分在于不是割裂地学习各个知识点再把它们串起来,而是从一开始就从知识点之间的深刻联系,以及知识在解决问题时的效用入手(比如在学习数学时,先了解数学知识的物理背景)来符合人类的认知规律,从而优化学习的效果。所以,很多程序员只会啃书,不晓得该怎么做事;还有很多程序员只会拾人牙慧,却不知道怎么把别人的成果化成自己的本事。这两类程序员注定是搞不出像样成果,也培养不了过硬能力的。而顾国海则显然是不仅十分有天资,而且学习方法很对路的程序员,所以他掌握技术的效率很高。仅仅利用了数天的下班时间,他已经交付了成果,而且连WordPress页面的模板继承这样的高级技巧都会了,他还创造性地用了与标准教程不同但是也很有效的办法来实现导航菜单高亮。 在顾国海的工作基础上,我再做一些优化就容易了。首先使用PHP来生成JavaScript,这样就可以把PHP的逻辑分支映射到JavaScript中去,为JavaScript注入原先不可能直接获得的判断能力(所以原来的判断就只能通过迂回的、强加的逻辑来实现)。其次,发现archive.php页面的生成性能极有问题,检查了代码发现多了一行the_content()函数调用,虽然注释掉了没有显示出来,但是在加载页面的时候却要消耗大量的流量了。当然,对别人辛辛苦苦做出来工作成果说三道四是不太好啦——尤其是后一项,虽然说有着“需要花费额外流量”的缺点,但同时还有一个“更好地支持SEO”的优点嘛。 那么就需要说说SEO的事,这个新的主题在SEO方面是做了不少考虑的。但是,当然一贯的传统仍然要坚持,那就是绝不通过作弊或扯一些不相关的关键字的办法来做SEO,而是坚持通过在呈现良好的原创内容的基础上,尽可能地增加内容组织的曝光率来优化SEO。高博的世界里面,除了有大量的原创博客以外,还有几个很重要的原创内容来源:相册、维基和微博。相册和微博的内容来源于第三方网站,但是都已经采用了二次包装的方法将内容做了内部化处理。以相册为例,虽然说内容都来自于flickr,但是由于使用了改造后的flogr框架,不仅能针对每一张flickr图片都生成一张gao.bo域内的页面,而且我又加了不少页面静态化的逻辑,这样对于抓取程序来说,它可以很容易地读取各个照片页面之间的逻辑关系,比如照片的先后次序,以及每张照片属于哪些相片集等等。 但是还不够。搜索引擎抓取程序对于小站点的内容是缺乏耐心去做关联分析的,所以做好页面关联虽然重要,可是这只是把饭菜做好的第一步,如果想要把抓取程序伺候得更好些,还是要学学号称学不会的海底捞,把饭菜切好喂到它嘴里去。那末,要怎么喂呢?想来想去,最好的办法是它能够在首页上直接看到每一张照片、维基和微博的URL!这怎么可能?其实是可能的。办法就是随机加载资源,使得抓取程序每次到访的时候,看到的总是不同的生成内容。这样的做法会引起两种效应,一种是抓取程序会因为看到站点总是在更新内容,所以会提高抓取频率,这种抓取程序是比较优质的;还有一种是,即使抓取程序品质不够,仍然慢条斯理地来抓取,我每次喂你一条,长年累月,总给你喂得足够多了。基于这样的想法,在首页的部分我使用了随机函数来控制显示随机的一篇随笔,这个是老传统了。不过,我还增加了两个原先没有栏目,就是调用flickr和MediaWiki的JavaScript API来读取一条资源并显示出来,而且生成了相对应的站内链接。准确地说,我利用了WordPress默认加载的jQuery库来实现了这一切。当然,后来还是麻烦了顾国海同学把生成的显示层配置了相应的CSS样式,对他来说这属于风卷残云般就完成的工作了,端的是厉害。 那么这里又想再在自己评价搜索引擎的维度上再加一条了:一个优秀的——在现今的前端技术发展到现在的今天,我甚至可以说,一个合格的搜索引擎的抓取程序,应该是支持解析JavaScript所生成页面之结果的,更有甚者,应该是支持解析jQuery的。一言以蔽之,用户最终用眼睛看到的页面是什么样子,抓取程序的“眼睛”里面应该看到同样的东西。举个例子来说,如果在某个页面里,使用JavaScript来设置DOM对象document的title属性的话,那末搜索引擎就应该能够按照这个结果来读取页面标题并作为链接文本(当然我是很反对滥用这种方法来设置土鳖到极点的所谓“动态标题”的)。我承认,这项要求有点儿苛刻,可是这反过来也是对前端技术应该用来做什么的一种反思。我个人认为,“动态生成伪静态内容”应该算是一项合理而且客观上需要的功能。当然更好的做法应该是使用后台技术,比如PHP接口来直接生成静态内容是更好的做法,可能未来我也会采用,但是现在我打算先暂停在这里。一来是因为实在没空,二来也是因为我看到比较优秀的搜索引擎的确是支持直接解析jQuery的,那末我也就乐得享用这个成果。至于进一步地去讨那些不甚合格的搜索引擎的欢心,那是需要投入时间,调整心情的事情。 最后,还是要再次感谢顾国海同志帮我做了网站的favicon。谢谢你的努力和付出! Read More »

虚拟主机服务器迁移工作基本完成

本月初,从北京石景山区回到市区的路上,遭遇了在上海也难得一见的雷暴雨,遂决定在北京饭店吃饭:这并不是逻辑混乱,也不是语无伦次,而是想说,天有不测风云,服务器也一样。遇到此类突发的事件,往往意味着要付出时间和金钱上的代价。虚拟主机供应商,对我来说是非常重要的基础服务提供者,没想到这次问题就出在这儿。7月20号早上收到一封邮件,大致意思是由于服务协议需要单方面做出调整,如果我不同意再付近100美元的话,就要在页面里放入各种“营销内容”。我当即骂了回去,于是那边翻脸,说要让我搬走,并且马上修改了所有托管在我主机上的网站的.htaccess文件——无耻之至——这样所有的网站都不能访问了,只要一访问就会出现“网站被暂停”的错误页面。 事情闹到这个地步,另外找地儿是不能避免的了。而且经过这次教训,了解到新的虚拟主机供应商须得经得起考验才是。旧的供应商做的最后两件还算得上是有点儿人性的事,一件是把我原来的内容打了个包让我下载,另一件是同意将我尚未到期的租金退款。旧的供应商是Byet Internet Services,无论如何,把它拉黑是肯定了。 麻烦的事儿非常多,首先,原先托管在我主机上的,有至少二十个朋友的网站。其中,还有日流量巨大的极点五笔网站,真心感觉对不起杜志民老师,因为这件莫名其妙的事儿,使他的服务中断了好多天。选择新的虚拟主机供应商本身就是头疼的事儿,其次,原先的内容打包倒是挺全的,但是数据库要重建的话,肯定很多原先的参数都不一样了,比如数据库的名字和管理员信息。这么一来,数据库相关的配置文件全部都要做相应的改动,工作量非常大。 用了一周左右的时间,才最终选定了新的虚拟主机供应商——IX Web Hosting。主要是从两个方面来考虑的,一是性价比挺高的,每个月4美元不到,价格几乎是过去的一半,但服务内容丝毫没有减少,反而多了固定IP地址可用;二是它提供全天候的在线聊天支持服务,这个显然比过去只提供异步的、不知道什么时候才会回复的电子邮件支持服务要靠谱多了。在售前咨询的阶段,工程师的回答就显示出很不错的专业性,因此,下定决心:就是它了!付款时发现,竟然支持支付宝,这对于中国用户来说自然感觉十分贴心了。 这个虚拟主机服务用到现在,感觉还是比过去有很大的优越性的。这主要体现在下面几点: 没有“主域名”的概念,主机就是主机,域名就是域名。一切的域名一律平等,一个域名对应一个虚拟目录(包括子域名)。不像过去的主机,有一个域名是主域名,将根目录占据,而其它的域名则沦为二等公民,只能绑定到根目录下面的一个子目录。并且,FTP服务都必须带有一个子域名形式作为用户名,而新主机则完全避免了这些问题。 可以做的Web配置非常精细,谁用谁知道。相对于基于CPanel的粗粒度管理,新主机提供的控制面板用起来更加舒心。 可以直接采用A记录指向的方法把域名绑定到主机,而不必强制把解析托管过来。但是如果把解析托管过来,则可以实现泛域名解析等强大功能。 有24×7的在线服务,而且技术水平还是很令人满意的。比如我提出要把几个数据库帮我导入,都很耐心地一个个地帮做,做完还在线等我确认。我有一次出去了半个小时,回来还在等着。这种服务态度,让客户觉得很可靠。 当然也有一些不尽如人意之处,比如不能单独购买独立IP、PostgreSQL数据库的版本太旧、有时在某些线路会出现访问比较慢的情形等等。但是,总体来说,服务还是达到了及格线的。毕竟花的钱也不算十分多,所以暂时就继续用它了罢。 将原先的客户数据导入的过程一开始是很痛苦的,后来也就程式化了。这么着,我基本上将过去在我的主机上托管服务并且仍然还活跃着的用户统统迁移到新主机上去了,整个过程耗时三四天,但这是必须做的事,因为事关诚信。值得一提的是,仍然有一两位同志失去了耐心,迁移到了其它主机上。对此我只能再说一声抱歉,没能服务好你们,希望你们在新的主机上使用愉快,并且有朝一日可以回来。 Read More »

真正的服务器上线

请不要误会,高博的世界的全部内容暂时还是租用虚拟主机进行服务的。不过,承祝继武同志慷慨捐献,总算在家里部署了一台私有云服务器,使用了1U的机箱,而不再用PC来充数了。这当然不啻为一大进步,再加上部署了4TB的硬盘空间,短时期内,应该可以指望不会再有存储告急的状况出现。当然,多年的运营经验告诉我,使用家里的网络对外提供任何稳定的服务都是不现实的,因为带宽的问题无法得到解决。安全性也会有问题,所以现在我只能设定一台运行在服务器上的虚拟机作为局域网的DMZ主机,并且不能对它提供的任何服务——包括但不限于文件下载——作出任何保证。如果真的需要文件共享,我自然会强烈地推荐大家使用盛大创新院出品的Everbox软件,那才是真正安全、稳定、便捷的云存储,实现同步和共享可谓是举手之劳。 如果只是唠叨家里的局域网的情况,就没必要写一篇博客了:那么肯定还是要写一些有关高博的世界站点的计划。首先有一点很大的变化就是,Google Apps的主域名已经从GAOBO.ORG转换到GAO.BO了,所有曾经是我的GTalk上的好友们应该会发现这个变化。尽管这个变化的象征意义可能大于其实际意义,但是可以肯定的是,今后有更多的服务,包括这个建站手记以及博仁客栈,都将确定无疑地归并到GAO.BO这个域名下去。其它的所有原先基于GAOBO.ORG域名的博客和维基,内容都已经完全地迁移过去了。GAOBO.ORG将不会消失,这个是确信无疑的,但是它的用途将大大地受限:它将仍然长期作为邮箱后缀和订阅链接的基础域名,除此以外,除非有特别需要,基本上不再作其它用途。这同时也意味着,与3.0版本之前的WordPress的最后一点关系也即将结束:以后不再可能使用admin这个用户名作为管理员帐户来登录了。 同时,高博的世界拥有的另一域名资产CPLUSPLUS.CN,可能会拿来建设基于WordPress多站点技术的开放式博客服务,并有限地为其中的一些用户提供基于此域名的邮箱。这当然是C/C++世界珍贵的域名资产,所以现在也是时候为它的新标准出台做一些准备性的工作了。 Read More »

及格2010,新年迈步从头越

开门见山,GAOBO.ORG从2011年1月1日开始更名为高博的世界。GAOBO.ORG的首页将直接跳转到gao.bo域名指向的首页,原域名gaobo.org的公开内容将仅保留作官方博客、官方论坛及订阅链接之用。高博的世界既指原先的GAOBO.ORG所拥有的一切域名和分站内容资产(如豆瓣提供的译者小站等),也指以gao.bo域名指向的WordPress博客、Flogr相册和MediaWiki维基等构成的原创内容王国。 一切都仍然是基于NOTEPAD技术构建,老老实实地继续学习最原始的文本、超文本、结构化文本和JavaScript——JavaScript即文本处理,文本处理即图灵机。一切都仍然是原创,微博原创,博客原创,随笔原创,翻译原创,摄影原创。文本和原创是高博的世界的核心,也就是高博的世界本身。这个世界里有生死大义,有战争和平,有大浪淘沙,有风花雪月。但是你能看到的永远是另一个世界——我真正生活的一个极小的断面,我是一个忠实记录者,也是一个理想演绎者。一个人构建一个世界,这决非易事,然而却是强烈的使命召唤,教我欲罢不能。 高博的世界首页重新加上了搜索,搜索结果经过了精心设计,该有的都有,不该有的都去掉了。你会发现不少惊喜,也是这个世界的重要入口。高博的世界自行托管的所有页面全面部署了由ZOPIM提供的嵌入网页型即时通讯工具解决方案,它能够很完美地在网页切换时保持对话session不致中断。因此,与我联系将变得十分容易——直接从高博的世界的任何一个自行托管的网页中出发都可以直接与我本人聊天——只要我有空的话。 另一个十分重要的变化的,所有由Google托管的内容——自定义搜索、Google Analytics、站长管理工具等,其控制权全面托管给了Google Apps的私有域帐号——Google在2010年的最后一两天宣布公有域帐号和私有域帐号互通。高博的世界私有域帐号取得一等公民身份以后,我可以名正言顺地把它用作一切服务的拥有者,并将原有资产或弃置或转移到它的名下了。 好了,我又是跑了好远的题,现在才拉回来。2010年12月31日这个时间点上,高博的世界订阅数是61,这个分数算是及格了吧。2011年1月1日,订阅按扭重新出现在高博的世界首页,并更名为“高博的世界精华内容”。由于订阅源已经转移到新的资产拥有者名下,所以正是一个万象更新的局面。2011年,高博的世界将不断地提供更好的新内容,请订阅,希望今年大家能给予我更多支持和关注,让我取得更大、更好的成绩! Read More »

要有微博

我从4月份开始写微博,当时出于一些个人的考虑,选择了使用腾讯微博。然而截止昨天,我在微博上发表了下面一条消息: 只能在某个特定的圈子里公开的微博,不是合格的微博,无论如何都应该把想说的让世界都听见才是微博之所以成为微博的真谛。所以,如果以后想看我的微博,请直接访问我的网站“高博的世界”首页:http://url.cn/2InDW1 ,谢谢大家给我的支持。请退订我这里的微博并在Twitter上follow gaodaniel,那里见!(今天 01:00 来自 网页) 发表时间很准确地定位在凌晨1点,虽然并不是故意的。在这里,我完全说的是实话:如果真的只是想找个地方发发牢骚什么的,我何必不找个日记本用钢笔记日记呢?——一茶一坐是提供了一本很好的笔记本的,更不必提里面众多的优惠券了。既然我把这些絮叨的话放上了网,我就肯定不是只想让腾讯好友看到,而是想让全世界都看到。但是,竟然没有什么办法可以将我在腾讯微博上写的东西设置向世界公开的权限!我以为这样画地为牢来“圈住”用户的做法是愚蠢的,因为用户绝对有用脚投票的权利,绝对没有必要来坐任何公司画出来的牢。 更何况,即使有某个微博可以设置成完全公开模式,它也仍然无法完全满足我的需求:用户若需要访问那个微博,就只能去高博的世界之外的站点,从而不能完成与本站点的品牌融合。那么,当然解决方案就需要做出决策,从两种技术中选择其一:或者,自己使用某些微博程序在自己的服务器上搭建微博应用并集成入WordPress;或者,采用某些办法将时下流行的微博网站服务的内容读取出来,并集成入WordPress。但是无论如何,要有微博这一点已经看来是无可逆转的趋势了。如同朱自清在其传世名作《荷塘月色》中写道的那样:“酣眠固不可少,小睡也别有风味的。”140字,是一种可贵的限制,仿佛诗的格律和对仗。若按布莱兹·帕斯卡的名言:“无奈我只能将这封信写得比平常更长,那是因为我没有时间将它写得更短些”来说的话,微博其实反而对撰写者的要求更高了,并且很明显地,除非是名人微博之外,微博这种创作形式有效地增加了原创的比例。一种再自然不过的想法是:长篇大论我写不来,只写一两句话我还写不来吗?但其实把所见所闻用一两句话概括,也是需要一个适应的过程的,我想这对于练笔也可以从另一个角度带来益处。撇开这个不谈,我想无论如何也应该在首页上放一些个性化的、和时事相关或与自己一时想法相关的动态内容——说实在的,一方面现在手头的工作也已经不允许像先前那样对于任何事都写成一篇完整的博客,另一方面的确觉得有些事物用微博来表达是它最适合的形式,为了写成完整博客而做的填充我写得累读者看着也烦,不如直接以原始的形式投递到首页让读者一望即知,事半功倍。 想来想去,还是选择后一种技术解决方案相对靠谱一点。自己搭建微博的话,耗费服务器资源和大量的精力不说,还缺少了微博的社区化功能。换言之,你自己搭的微博,谁会去和你互动呢?就算互动并不多,参与到社区中去的动作如回复和跟推仍然是微博的重要功能。既然是这样的话,那就索性选取全球最大的微博系统好了。由于众所周知的原因,如果选取这个系统,对于中国大陆的用户来说显然就有些为难。不过那也是没有办法的事,我仅仅使用它的内容罢了。并且,我相信有很多的朋友已经采用了各种他们认为比较方便的方式加入了这个系统并能够与我加以互动。我需要的是这样一个工具:它能够正确地读取我最新的微博内容,并原样地显示在首页,以让全世界的访问者——包括中国大陆的访问者,都能够实时地看到在微博上的最近更新。这个工具最终找到了——这里感谢一下凌杰同学的推荐——这就是Twitter Tools。通过使用这个工具,我既可以在WordPress中就发微博而不用借助任何额外的互联网访问限制解除工具,又能够很简单地利用现成的PHP基础设施读取和显示最新一条微博的内容了——并且,在CSS大牛同事周裕波的帮助下,呈现形式得到了根本的改进——并且全站的CSS都被优化了,在此对他表示感谢。 下面就把这几个月来的微博放在下面,一方面是归档,另一方面也看一下发表源的分布: 现在真的花钱习惯和以前完全不同了:本来想买个无线键鼠套装,想了想还是花了10元左右买了个USB转双PS/2接口;本来想买个新无线路由,想了想还是动手把固件降了级再忍一段时间;本来想买台Dell台式机当服务器,想了想还是继续用兼容机撑着……哎,任何改变都不是一天发生的,努力加油吧。(12/13 00:08 来自 QQ) 经过一番努力总算把服务器中已经出现坏道的80G硬盘换成了一块无问题的160G硬盘,并把Windows Server 2003 R2企业版换成了Windows Server 2008 R2数据中心版。然后在阳台的柜子上想出了办法在保证电力供应和有线网络连接的前提下把服务器架上去,这样的话就不会吵到房间里:有台家庭服务器还是很爽的。(12/11 23:38 来自 QQ) 买了一个小巧的“水星”网络交换机,型号是Mercury S105M。真便宜,只要不到40元(过去这个价格只能买到集线器)。用它来连接EeePC和工作机,用到现在还未发生任何问题,看来小品牌也有靠谱的时候呀!喜滋滋的。(12/09 15:07 来自 TM) 到底舍不得把新分配的工作用的配有3.0 GHz的CPU、4GB内存和500GB硬盘台式机只用来装Windows XP……还是装了VMware vSphere Hypervisor让它同时跑Windows XP、Windows Server 2008 R2和Ubuntu Linux了,对小内核的虚拟机服务器真的是大爱。那台大大的SAMSUNG显示器就插EeePC用了——远程桌面就是好!(12/09 01:29 来自 TM) 成就伟大人生的唯一途径是投身伟大的事业;成就伟大事业的唯一途径是参与伟大的项目,而伟大的项目要靠自己去发现和识别,这就是眼界为什么很重要。(11/29 14:28 来自 TM) 上班路上看新闻,说是菜价降了。我不禁想到,销售环节和渠道这么广的农产品价格也这么容易地就说控制就控制住了,但为什么房价总是居高不下呢?房价如果能降哪怕一点点,能买多少菜啊!可能是谷贱伤农,而农民是可以随便伤的。但房贱的话,伤的是谁呢?可能是国家舍不得伤的一群人吧。(11/24 08:49 来自 TM) 已经不记得再上一次买《科幻世界》和《大众软件》是什么时候了,前者应该还是在大学里,后者居然完全记不清楚是否还是高中时买过的了。总之,这两份杂志都仍然以一种我倍感亲切的方式土鳖着,尽管似乎都受了不少苹果的影响——苹果的影响委实是太无孔不入了。(11/22 00:32 来自… Read More »

新年,新搜索

转眼间,所谓的新世纪也已经过去了整整10年,换言之,也不那么新了。但是每个新年都让人觉得有必要凭空地创造出一些旧年所无的,来证明自己的新年的确是与往年不同的时节。放在GAOBO.ORG首页上的搜索是个极少改动的部件,但是最近我感觉它确实是需要更新一下了。如您所见,它是一个Google自定义搜索引擎。之前我很傻很天真地把GAOBO.ORG的每一个子域名认真地添加到这个自定义搜索引擎的搜索网站列表中去,但是其实用一个网址格式就可以完全把GAOBO.ORG的全部子域名网站信息都概括了。这么一来,我自然也就产生了这样的想法:为什么只能选择搜索GAOBO.ORG内部的内容呢?我为何不能指定将亲人和朋友的内容全部纳入搜索范围,甚至将自己的搜索引擎当作Internet搜索引擎来用?这么一想,设计的思路就成为了划分为三个层级的搜索:只有GAOBO.ORG内容,只有GAOBO.ORG和我的亲人和朋友的网站内容,以及Internet搜索。 Google自定义搜索引擎的设计选项是十分有张力的,可以同时适应非常理解脚本的人和完全不懂脚本的人,也可以同时适应对脚本要求很严格的浏览器环境和对脚本支持非常到位的浏览器环境。 Google自定义搜索引擎选项要求一览表 搜索引擎类型 要求开发人员脚本能力 要求浏览器脚本支持 Google托管页面 低 低 提交页面 + 结果页面 高 低 单页面(Ajax) 中 高 Google自定义搜索引擎选项优缺点一览表 搜索引擎类型 优点 缺点 Google托管页面 无须开发人员有HTML知识,由Google处理搜索结果显示的一切问题,对浏览器的脚本支持要求也很低。 结果页面不可定制、失去了控制,而且搜索结果页面成了“google.com”域内的页面,不专业。 提交页面 + 结果页面 开发人员能够精准地定制提交页面和结果页面的全部内容,并且对于浏览器的脚本支持的要求也很低。 开发人员必须非常了解HTML,并且对于提交页面和结果页面都需要有管理权限。 单页面(Ajax) 对开发人员的要求不算高,而且在同一个页面里就可以在指定的层中即时显示结果。 对于浏览器的脚本支持要求比较苛刻,并且用户会不太习惯“如此美妙”的搜索体验。 之前,我使用的是第二种选项,原因是我需要对结果页面的控制权。现在看来,要求更多的控制权总是正确的。不过,还是可以从代码的变迁中看出Google对于服务的持续改进。对于开发者社群的友好是软件和互联网企业成功的不二法门,毕竟,如果有大量的开发者开始使用一个服务集成到他自己的解决方案中去,它会不成功吗?但是,什么样的服务会有很多开发者应用呢?显然是那些给他们的开发带来方便、让他们写代码的体验更加美好的服务。 下面是改进前的搜索提交代码模板: 下面是改进以后的: 一个重大的改变是:提交表格的id从带有自定义引擎唯一ID的形式(“searchbox_015090948855443073860:numm_anlqns”)改成了不带这个ID的形式(“cse-search-box”)。其它的不一致,比如cof的值,比如搜索的控件加上了层的包装,都是小节。这个改变的意义在于:欲提交的form的id统一化了,否则如果需要以同一的文本框输入搜索关键字,但是提交到不同的自定义搜索引擎的话,会极为麻烦。因为这么一个就要改变整个的form结构,要采用非常迂回的手段来使得“看起来提交给同一form的字段”实际上被提交给了不同的数个form,这样一来就不得不根据选择来临时决定调用哪个form的submit方法,而不能用最干净、最简练、最跨平台的submit按钮来实现。并且,这样会造成显示水印的Javascript语句不一致(它是根据form的id来绑定的)。最重要的是,原先的设计会造成结果页面的不一致,这样就需要为不同的自定义搜索引擎制作不同的结果页面——这样的设计显然是太笨拙了。实际上,有什么必要让提交form的id不一致呢?这个id难道不是只要通过一个控件来标识就可以了吗?为什么要用冗余的方式来表示同一个信息呢?显然,Google的复审机制发现了这个问题,现在,无论使用哪一个自定义搜索引擎,所有的结果页面都是完全同一的了。至于需要用同一控件的名字来提交不同的自定义搜索引擎的唯一ID这件事,解决起来就易如反掌了:只需要把hidden控件换成单选框控件,并保持名字不变即可。反正在提交form的时候,是只认控件的名字,而不管控件的类型的。Google简直就是为了解决我手头的问题而更改了自己的设计的,你说说我能不喜欢这样的技术吗? 于是,创建了三个不同的自定义搜索引擎(以后还可以创建更多),满足了我的需求。欢迎写信给support@gaobo.org,把你的博客也加入我的朋友圈子的搜索范围哟!总之,对我个人来说,不用再切到Google首页就可以搜索Internet,这实在是好事一件。 Read More »

去掉计数器,增加留言簿

由于未发通知就中断服务,51.la的所有服务被彻底地从GAOBO.ORG中清除了,当然,也包括计数器。想来想去,计数器真是一种很神奇的服务。供应商成千上万,靠谱的居然一个也没有。而反过来想,对于GAOBO.ORG而言,计数器也并非很要紧的服务。订阅数是很要紧的,这意味着每次GAOBO.ORG更新以后,有多少人会在第一时间里关注它,而计数器却只能说过有多少人曾经路过。如果把GAOBO.ORG比作一个客栈,那末有多少人经过显然不如有多少人入住来得重要。更何况,Google Analytics会很好地完成详细的访问统计,而且比51.la更科学些。 而另一方面,留言功能却是GAOBO.ORG一直都需要的,但却始终没有能加上去。倒不是说一个留言簿用PHP和MySQL写出来有多么难,但是我一直觉得像这样的程序是不应该由我匆匆写一个就拿出来充数的。留言簿应该写得又简洁又专业,支持某种标准,并且能够长期保存。我不想参与任何有关美工设计的事,因为我坚持界面和实现分离的原则。这么一来,首页的留言簿就一直未能落实。不过,这个问题在今天算是有了解决方案:量子恒道提供了留言簿功能,并且完全符合我对于留言簿的质量要求。这么着,我把所有的51.la的统计代码全部换成了量子恒道代码,并在首页增加了留言功能。与此同时,我调整了首页项目的上下顺序,使之更显得平衡和美观。想了想,我把Google PR值功能的服务商也换掉了。中国的站长服务的确时时都有被封掉的危险,我决定不再冒这个险了。 欢迎留下您的宝贵意见,GAOBO.ORG会持续改进! Read More »

小改版,大动作

时隔近半年,才再次对GAOBO.ORG首页作了一次改版。但为这次改版,准备工作其实是很大量的。它包括了一个近1TB的存储资源和各种各样的原创内容,这些资源和内容有一大部分是通过首页的链接不曾展示过的。并且,在相当长的时期之内,这些资源和内容仍然不会在首页占据一个固定位置,因为对于未建设完全的内容是不宜以一种整体的方式呈现给网站访问者的。但如果非要一切完美才开放出来,内容可能会过时不说,而且似乎也缺少在建设过程中反馈的声音了。所以,我选择了一些内容,以“推荐资源”的名义加在了首页内容里。这样,GAOBO.ORG的内容就通过两种方式推送了:初来的朋友可以先看看推荐资源中的内容,“看看是否对胃口”,如果感觉满意再行订阅也可。 网站的建设主要地不是一种技术,而是一种用心。我这样说的同时绝对不是在贬低技术的重要性,而是在说在技术已经搞得比较好时才知道怎么把心力精细地用到该用的地方去。否则,事情将会比较难办。我对于技术可以说是相当不精了,本来写静态脚本就常常会遭遇困难,现在要实现推荐资源这个功能看来如果不想把资源列表用本地数组写就的话,那非用动态脚本和数据库不可,自然更是难上加难。虽说数据库这种东西实在叫人头疼,然而“表现和数据耦合”这是更加不良的实践。而解决这个层面上的问题如果不能利用我已经相对比较熟悉的技术,而要采用XML相关的新技术的话,就别想动手了——我的的确确是个不善于接受未有足够简单表现新技术的人,并且实在地也已经是很久不写代码了。 总之,把能遇到的问题都遇到了。比如把PHP代码写入扩展名为js的文件,不行。后来听范德成兄的意见,知道要使用扩展名为php的文件才可以。又企图在一个js文件里引用另一个js文件的内容(就像C++里面的#include指令一样),不行。用了好几种变通办法仍然不行,只能放弃——js能靠谱,母猪能上树了都。后来发现原来的js脚本里也有大量的过期和冗余代码,索性重写了一个(Kernighan有言,“Don't comment, rewrite it.”)。好在思路比较清楚,真正写代码的时间倒不长。 现在,诸位看官,你们会发现很多很多的东西将会被随机地推送出来了。顺便说一句,那个搜索框后面的“手气不错”和Google同样名字的按钮实际上有着不同的功能,但具体是什么功能,请动手一试! Read More »

搜索和推送的改进

首页的搜索引擎一直是比较令我头大的一个问题,这件事也是有它的历史渊源的。当然我自己是不愿意去费心不讨好地开发一个自用引擎的,因为a) 我很忙;(Daniel is always on the run.)b) 这件事不好做;(用字符串匹配难以提高效率,更高级的算法又懒得去想。)c) 自己做出来的结果对搜索结果优化没有好处。(外包给Google的话,每一次点击都为自己的网站在Google的PageRank中加分。) 但Google在某个时候突然中止了它的公共服务搜索服务,这使我原来的那个页面一下子陷入了尴尬之境。简单地说,公共服务搜索其实是向一个Google托管的页面发送关键字和一些附加的参数。这些附加的参数中,有一个参数是每个不同网站的标识(唯一ID),这样的话托管页面就知道是哪个客户向它发送了关键字,从而根据这个客户的定制返回不同的页面样式。可是,现在这个服务一中止,我就不能再修改我做过的那些定制了,这样就会使得搜索结果页面和首页显得不太协调(主要是右上方的功能条在搜索结果页面中消失了)。 当然Google总是在改进的,它推出了一个称为Customized Search的替代产品,是和Google帐号绑定的一个产品。一开始,它没有推出中文版,而我并不肯把网站做成一个语言杂烩式的东西,所以我暂时没有去用它,也没有研究它,而是先继续沿用虽然没有优化但是可用的公共服务搜索接口。 不过,最近这个功能终于完成了汉化,中文名字叫做自定义搜索。所以我就小小研究了一把,发现确实是个不错的东西(当然,Google出品必属精品)。它不再是Google托管的一个东西,而是分成了提交代码块和结果呈现代码块两部分,提交代码块所在的页面(提交页面)插入一个form和一段Javascript,并把结果提交给插入了结果呈现代码块的那个页面(呈现页面),并在呈现页面中以iframe的形式插入搜索结果文本(也提供了提交页面和呈现页面合一的层呈现技术,但那个走得太远,而且呈现的结果不太美观,作罢)。现在,我做了一些修改后正式在首页应用了,有意见请反馈哟! 由于众所周知的原因,Google的自定义域名服务器(ghs.google.com)在中国大陆境内不能访问了。这使得将*.gaobo.org托管给Google变得异常困难。尤其大的打击在于,随笔文章现在中国大陆境内不能以博客页面形式访问了(没问题,可以评论),建站手记也是。但是,推送机制起了很大的作用,我采用了谷歌阅读器来先合烧,这里就把内容也抓取了,于是再通过Feedsky输出,问题就解决了。虽然如此,对于需要如此迂回才能做到美国公民看来是直截了当、理所当然之事,我心中仍然愤愤不平。 说到域名托管,我这里就又要夸奖一下微软公司。Windows Live Domains最近做了一次更新,允许托管域名而不托管邮件服务,如此一来,"@GAOBO.ORG”就得以同时能够作为Google帐号和Windows Live ID存在了。作为Windows Live ID存在的一个好处在于,它可以用来登录Windows Live Messenger或开设Windows Live Spaces却无需管理一个额外的邮箱(你可以使用相同的用户名来开设一个Google Apps托管的Gmail,这样就可以统一管理自己的所有邮件。这种感觉非常奇妙,是取了Google和微软各自的长处——而这一切都是免费的——这难道不是你喜欢GAOBO.ORG的一个理由?)。 最后,要表扬一下Feedsky,经过我在旧历年附近批评了一次他们的服务以后,现在抓取我的Feed以及呈现变得很正常了。不过,还有一个Internet Explorer浏览器的兼容问题提了好多次都没解决,看来还是须努力才是。 当然,日志频道的开通也是GAOBO.ORG的重大改进之一,请使用: http://space.gaobo.org 访问它。 Read More »