十倍索引

2017年10月到现在,仅仅一年的时间,但是本网站在Google的索引量提高了一个数量级。从不到2000个网页,到现在的12000余个。这个改进,还是相当喜人的。 这其中也没有什么秘诀,原因就是我做了一些脚本,把Flickr相册中的照片和影集做成了站内页面。目前,我一共上传了差不多4500张照片,分属于上百个影集。而且,有两套系统同时用以展示这些照片和影集,这样就差不多有万余页面了。然后,再把这些页面都做到一个站点地图中去然后提交给Google管理员后台,稍等几日,爬虫就会欣然受邀前来,并根据囫囵吞下的内容,慢慢地将消化后的结果加入到索引中去了。 当然,提交的站点地图也非止一个。博客和维基的内容,本来也有一些,所以也分别提交了。这些内容构成了前面不少年的索引量基础,不过这一部分的增量就不可能非常快地积累了。 同样,这些所有的站点地图也不是只提交给Google,也提交给了其他一些搜索引擎。不过,和几年前相比,现在还能称得上是搜索引擎的也确实已经不多了。雅虎几乎已经完全阵亡,Bing也只能说是半死不活。百度从技术上说确实还是非常活跃的,而搜狗和360的技术差得就比较远了。新出现的、还能够提交站点地图的,是Yandex,但是效果并不彰显,至少没看出来和站点地图有什么关系。DuckDuckGo的搜索结果很不错,但它不允许提交站点地图。 搜索技术永远都是计算科学研究的最核心主题之一,数据就在那里,但是如果不能及时地把数据定位和调出,数据就无法发挥作用。或者说,数据是死的,必须经由搜索才能把它激活并派上用场。像Google这样的通用搜索引擎,已经难以触及很多领域的数据,比如社交网络——在中国像是微信,在中国之外像是Facebook和Instagram,这些数据都要么对通用搜索引擎完全不开放、要么就是对它们完全不友好——更不用说即时通信了。就算对于其他一些结构化数据,很多公司在做所谓的垂直搜索,但是现在令人印象深刻的却是一个也没有,不过它们当然对于通用搜索的态度也同样是不开放和不友好的。 所以,Google这样的公司也必须除了做数据的加工者之外,向数据的原产者转型。因为像我的网站这样愿意主动把数据提供给它的,从数量上来说当然还是会持续增加,但是如果从数据增量的比例来看却无疑是会下降的。只有Google自己推出产生原始数据的平台,并有足够多的用户使用,它才能继续保持活力。从这个意义上,Android操作系统当然是Google的一大成功,但是从传统的Web世界看,它的很多尝试都归于失败了,比如最近它关闭了的Google+服务。看来,Google确实在计算基础服务和系统平台方面有相当的实力,但是应用平台却并不是它最擅长的。所以,Google可能需要进一步在系统软件,甚至硬件设备上发力,才能得到足够的生产原料——原始数据供其加工。 Read More »

劫后重生

苦难来袭时,从来不会发出预警。但苦难不应该简单地接受,因为它反应出之前肯定有什么地方做得不好。而做得不好,不是仅仅承认就可以的,要检讨和改正才行。所谓人的软肋,无非就是辛苦经营了很久很久,投入大量的心血培育之物。这样的事物,没有人会坦然接受被难以抗拒的力量毁于一旦,甚至有些人会在遭受这样的打击以后一蹶不振。可是话说回来,这样的事情毕竟是难以避免。面对此类事情,只能说:在能够承受的条件下,再度想法重新去培育新的;如果条件已不具备,那也只能求助于回忆了。 新年伊始,VPS服务商就给我来了这么一次。由于把主机放到美国、加拿大和欧洲都试了一遍以后,从中国大陆访问速度颇成问题。所以,决定从亚洲找一个替代的服务商。我这个人有个习惯,说是毛病也行:对于需要周期性付款的产品和服务,我总是倾向于找性价比最高的,VPS显然属于此类产品。经过了长达两个月左右的研究和比较,找到了一家叫做主机分享组织的服务商。测试了他们家的香港线路以后,感觉在可接受的范围内,而且确实价格很实惠。于是租了一年,然后把美国主机的内容迁了过来。迁过来以后,差一点点我就决定不再续租美国主机了,结果多了个心眼——这又是我的一个习惯,说是毛病也行:在新的服务上线以后,我总是要把旧的服务再续租一个或若干个时段备,以便在新的服务万一挂掉的时候可以作为灾备上线顶着,也可以作为一个过时数据源把系统恢复到至少到迁出的那个时刻。事实证明,有些习惯是可以救命的。1月10日左右,网站突然无法访问了,去询问客服,完全没有用处。这里就不详述客服的态度之恶劣了,反正也是司空见惯的事情。反倒是它还算是在登录管理系统以后在明显的位置上发布了免责声明,不能说是未作到承诺——人家根本就没承诺,或者说是根本就是承诺了不给你服务。对此我其实并无意见,其实数据丢了,找不回来了,服务态度再好又有何用呢?相比起来,大大方方地承认“我是流氓,爱用不用”,反倒是一种光明磊落。我唯一不爽的地方是:这条免责声明的上线时间是2018年1月1日,而且并没有通知我们这些已经注册的用户。不过,还是那句话,就算得到了通知,事情也不会有什么变化。这么一来,与其和风车作斗争,不如干脆认怂,想办法重来。 性价比最高的方案看来是不可靠了,那么就找第二高的方案:飞碟云。这个名字很讨喜,适合我这样喜欢科幻的人。但在科幻之余,我还是仔细看了一下产品规格。这么一看,就发现了两个关键字:KVM和RAID10。行,多花20%的钱算是有了实际理由。 数据,这是最让人心烦的部分。损失了两篇博客,还有两个月的维基,这很要命。因为现在我都基本上没有什么完整的时间来写博客和维基,都是几个月时间跨度里一边写、一边改,存成草稿然后才发表的。这么一丢根本就难以回忆起全稿,更难以再把它写成原来的样子。已经发表了的部分倒不是非常怕,去Google网页快照里查看,果然一下子就基本上找全了。当然,也只能说是基本上,并不能100%地找全,但是又有什么办法呢!另外比较恼火的丢失部分,是几个nginx配置文件,这也是没办法通过任何办法找回来的,只能一点点重写。我其实不是没有备份的习惯,相当多的东西都留了本地备份。但是这次确实是劫数来得太快,还没来得及动手就发生了糟糕的事情。不过,从另一个方面来看,也是因为没经过太久的时间,所以损失还算有限。唯一在时间方面的遗憾是错过了今年的生日,可以说是悄无声息地渡过了生命的彼岸。转念一想,这可能也未尝不是一件好事,所以也就不再难过个没完了。 总算到了快过春节的时候,有了一点点时间,于是开始动手恢复数据、配置文件和脚本等等。由于第一次迁移时已经踩过了一些坑,所以这次基本上没有遇到太多的意外。另一方面,这次也把配置做得更加扎实了,发现了上次写配置文件时的一些没有注意的细节,这些细节会造成某些网址重写时的错误从而导致某些资源不能加载或是301跳转时网址不正确。脚本也作了一些调整,使得现在全部数据都采用RESTful的方式获取,并以JSON格式响应,而不再在任何地方使用硬编码了。 这次主机迁移,除了改进性能这个主要目的以外,另一个比较大的调整就是将所有的资源集中到单一域名,即根域名下,包括原来的维基。当然,我也在nginx里写了大量的重写规则,保证几乎所有的旧网址中的页面都可以正确地跳转到新网址中的对应页面。这么一来,过了一段时间以后,搜索引擎中的索引就也会逐渐地更新到新网址上去了。Google提供了极好的站内数据提交的体验,相比之下,其他所有的搜索引擎在搜索基础这一方面就相差得太远了。整个的行业形态显然也不是我一己之力能作出任何改变的事情,但我能做的就是把自己的网站结构规划做好然后以站点地图的方式提交,并把网页的结构标记好——当然只有Google能够很好地识别和支持这些数据,甚至还提供强有力的工具,并以快速的爬虫扫描和索引更新,辅以精准多维的统计分析作为回报。 目前本站基本上恢复了运转,但还没有最终完成。在完成本站的所有基础建设以后,今年总算可以写一些有意思的东西了。当然,吃一堑长一智,这回会仔细地规划和实施可靠的备份方案! Read More »

挪威的森林

整整三年,简直不太敢相信。一个三年没有更新的博客还会有谁看呢?一个三年没有更新的网站还会有谁访问呢?其实并不需要这样悲观的,三年的时间说到底也不过就是历史的一瞬罢了。从另一个角度来想,三年的时间即使每天都更新这个建站手记,又会有多少人看、多少人关注呢?说到底不过是一个个人站点,而如果这个个人并不是名流,那么任凭你如何努力地发声,这声音也不会受到太多关注的。所以,是否受人关注这件事,可能根本就不应该构成是否应该维护这个站点的理由吧。 本站曾经在2015年的时候,尝试过把整站迁移到VPS上,可是由于两个原因失败了。一个原因是当时的VPS服务不够稳定,迁移上去以后不久就遇到了比较严重的硬件问题,差点把所有的内容都搞没了。第二个原因也是自己的技术不过关,想部署SSL证书,却不太会弄,结果也造成了整站一段时间内不能访问的严重故障。以上的两个原因,加上本人又忙到不行,遂退回了虚拟主机方案。幸亏还有备份——备份实在太重要了。 可是虚拟主机方案实在是问题太多了,居然在21世纪已经过去近四分之一的今天还需要通过一个Web UI来上传文件——这对于号称计算机专业科班出身之人来说,不能不说是一种羞辱。只是,概念性地说这样的方案好或是那样的方案好,其实本身并不科学。到底虚拟主机方案和VPS方案相比,优缺点各是什么?其实一言以蔽之:虚拟主机方案没有服务器管理成本,但是相应地没有可以对服务器进行管理的灵活性——软件组件不能升级、文件和数据库无法以灵活方式管理且有数量和容量限制、SSL证书无法部署等,而VPS方案则在拥有如此灵活性的同时,必须负担服务器的管理成本——需要保证服务器的服务不中断,需要保证性能在可接受范围,需要处理各种妖蛾子问题。这也是做任何事情都需要做的权衡,就譬如做软件开发,如果你选择使用标准库中的智能指针,你自然不用自己管理内存,但这么一来也就(基本上)无法确切地了解内存运作的所有细节(尽管标准库声称你仍然可以);可是如果你的好奇心或实际的工程需求促使或迫使你下定决心非要去了解内存运作的所有细节不可,那当然可以直接使用裸指针或自定义的“智能指针”,但那样一来就如同Herb Sutter所言:“你要自行管理内存,就意味着你要负责管理内存。” 负担服务器的管理成本需要很多前提条件,首要的是软硬件基础设施环境需要达到相当的稳定程度。这小小的一句话,内涵可太丰富了。硬件方面,VPS无疑是开销最小的方式,但是当然选择起来需要考虑的因素也比较多。国内的供应商需要备案,这个我比较抵触。但国外的供应商访问起来也有很多有中国特色的问题,而且越知名的供应商,这些问题就越严重。比如Amazon Web Services当然是服务最好的,但是就因为它太好了,所以在中国大陆的运营就有各种问题。而且,把服务器放到国外去这个决定就意味着肯定需要配置比较高、性能比较好的服务器才能满足需求,因为本来物理距离远,自然延迟就会比较大一些。可是这么一来,费用就会上去了。 不言而喻,这样的供应商会非常难找。国内的有问题,国外的大厂有问题,那就只能找国外的小厂。但国外的小厂,配置和性能先不说它,费用首先就不会低,服务更是不可预测。这么一来,唯一的办法就是不停地交学费去试。交过了大概五六千美元的学费,尝试了各种各样的供应商以后,终于大致学到了一些经验: 服务比配置还要重要,因为供应商在国外,又是VPS,因此必须要有个能及时响应的专业服务作支撑。只有在线工单是不够的,必须至少要有即时通讯和电话这两个选项之一。 配置稍高的VPS,价格就会超过每月五十美元。因此,有可能的话,应该选择收取一次性费用的供应商。这样的供应商极少,如果加上服务要求就更少,但还是有的。 未来应该尽可能地选择无服务器型解决方案,即利用Lamba计算辅以低价存储来托管自己的应用,但是无疑地现在这样的解决方案还远不是主流。 软件方面,相对来说确定性反而高一些。这就是计算机的美妙之处——无论硬件外观看上去如何奇形怪状,它们运行的软件都大同小异。有的时候,我们会在一些貌似是“专用型”机器,如户外广告显示屏、值机电脑或是ATM机,只有在看到它们弹出错误窗口,或是自动重启时,才发现原来它们在运行的是通用操作系统:大多数是Windows,以及桌面或嵌入式Linux发行版,如今也开始有一些Android了。这也难怪,有实力研发定制的操作系统的厂家实在不多,而且这样研发出来的操作系统,很可能对于一些极其基础的应用场景都需要大费周章才能完成,所以如果没有意外的情况下,绝大多数应用开发商都会采用通用操作系统作为基础软件,更不用说没有研发实力甚至研发能力的内容厂商了。 如果有任何可能,都应该选择至少Ubuntu 16.04 LTS作为VPS的基础操作系统,不为别的,就是为了它自带openssl 1.0.2,从而能够使用默认源的nginx服务器即可轻松开启HTTP2,而不必大费周章地采用编译安装的方式升级openssl然后再使用非默认源的nginx服务器与之配合才能达到同一目的。这样的操作虽说也不能说非常难,但显然小白系统管理员是很难一次做对的,更不用说遇到错误时的故障排除了。如果只是为了在应用层上工作,就千万不要无谓地折腾基础设施层,而要尽可能地使用基础设施层的默认配置。因为这样的配置是经过了最充分的专业测试才交付的,也是经过了最苛刻的实际应用之考验,才保留和进化而成的。这个看似并不过分,甚至并不很高的操作系统选项,很多号称主流的VPS供应商,在2016年年底的今天,都没有提供。 说起nginx服务器,它实在是让人一用就放不下——真的不可能用过了nginx还会回头再用Apache,更不用说Tomcat之流了。速度快、配置省心这些都不说了,它最大的优点是真的不挂。真的,也许是我水平不够,反正我用Apache的时候,它总是过一段时间就会挂,然后就要重启服务或是重启服务器。我研究过这个问题,发现如果nginx服务挂了,那么肯定是数据库或文件系统挂了,而Apache却可以在数据库和文件系统没任何问题的时候挂掉。所以尽管Ubuntu自10.04版本开始就自带了一个tasksel,能够以单条命令来安装整个LAMP服务软件栈,但对于LEMP服务软件栈却并不存在这样方便快捷的途径,我们还是值得为了nginx放弃前者的这一点点方便。毕竟,Ubuntu 16.04默认安装源里面各个软件的版本已经很新,从而不需要为了更高的版本而去编译安装,只须使用apt命令即可,这真的足够方便了。 其他的基础和应用服务器及其插件,按需安装即可,也没有什么需要特别注意的。如果一定要说些什么的话,那就是不要矫情,不要为了某些执念去安装什么或去不安装什么,尤其是前者——毕竟软件装上去就要占用宝贵的存储资源。 在软件方面,唯一需要再重点说一下的就是证书了。证书必将在2017年得到全面普及,未来的一切连接皆将以HTTPS而非HTTP为基础。但是,今年在证书领域发生了比较大的一次震动:签发免费证书的本来有两大主力厂商沃通和StartCom,但主流浏览器突然宣布自2016年10月21日后,这两家厂商签发的证书将不再被信任。理由当然是很站得住脚的,罪状一是沃通收购StartCom但没有披露信息,这是CA厂商政策所禁止的;罪状二更要命,是发现了这两家公司为欺瞒在规定时间点以后不得再采用的、不安全的SHA1加密算法的事实而倒签的证书,这是真的作死了。但是从结果上说, 现在硕果仅存的还在签发免费证书的厂商就只有一个名头和来头都很大的所谓Internet安全研究集团(Internet Security Research Group,ISRG)所管理和运营的Let's Encrypt了。值得注意的有几点:第一,这个ISRG似乎顶着一个这么大的名头,好像唯一做的事就是管理和运营Let's Encrypt;第二,和一般的厂商不一样的是,Let's Encrypt并不提供收费证书的选项,也不提供通配符证书或是高级的、带有额外验证的组织验证型(organizational validation,OV)和扩展验证型(extended validation,EV)证书的选项。它唯一做的事情就是签发免费证书,连所有权验证的过程都可以自动化。但也正是由于这个原因,Let's Encrypt自身使用的却是由IdenTrust公司提供的OV证书,而绝大部分CA厂商使用的都是自家出品的证书;第三,Let's Encrypt签发的证书,有效期很短,只有90天,而一般的证书却有至少1年。很有意思的是,Let's Encrypt允许,或者说强制用户采用自动化脚本来在证书到期之前更新它,换言之,它对于证书的使用提出了额外的技术要求,并且对于访问证书服务器的频率也提出了额外的要求。综合以上的这些信息,我们不能不产生这样的联想:急急地把沃通和StartCom这样没有额外技术要求,时长也一次签发3年的竞争对手干掉,到底这里面除了表面上的技术理由,是不是还另有隐情?无论如何,现在市场上只有一个厂商在签发免费证书,这真的好吗?难道就没有人感觉这里面会有垄断的隐患吗?目前在网上寻找相关的信息,所有人都众口一辞地说Let's Encrypt的优点,比如免费,比如支持签发ECC证书等等,可是对它的缺点,好像没有人大声指出来。当然,我可以理解,讨论这些事情的人大多数有着不错的技术背景,但是也正因为如此,有一些重要的事情可能就被忽略了。总之,我对于无论什么原因造成的市场垄断都是不赞成的。听说StartCom正在准备新的根证书,希望它早日回来! 我为本网站购买了有效期为3年的AlphaSSL品牌的通配符证书,所以其实刚才的那部分讨论对本站的直接影响并不十分大。那为什么要讨论呢?原因有二:第一,虽然我在本网站上使用了通配符证书,但是在为托管网站在我的服务器上的朋友们,我却使用了沃通和StartCom的证书。由于上面说的这个消息,我现在手里为朋友们申请的证书几乎成了绝版,有一张证书甚至是2016年10月15日申请的,离消息发布只差了一星期。第二,我在一些其他的用途上也使用了沃通和StartCom的证书,比如Windows远程桌面的连接,以及VMware vSphere Hypervisor的连接。一个拥有可信根证书的CA厂商签发的证书,用途是很多的,决不仅仅限于HTTP连接的加密。而我也非常提倡一不做二不休的精神,要跟上时代就彻底地和过去的不良做法告别,不要粘粘糊糊的。 关于证书还有一些话说,比如购买的价格,我其实很可能买得有点贵了:我花了114美元在SSL2buy这个网站上买的,平均一年38美元。但好像在淘宝上竟然能找到32元人民币一年的价格!不过,SSL2buy的服务很好,对于刚上手证书的我来说,付点学费也没有太大的问题。三年以后,肯定整个市场都会不一样了,那个时候再去选择最适合自己的性价比的供应商吧。还有一个就是证书品牌选择的问题,在使用上,差异其实不是那么大的。而且也不是每个品牌都提供了所有的证书选项,有些没有提供通配符证书,有些没有提供OV/EV证书。最昂贵的证书,当然同时也是最有逼格的证书,毫无疑问是Symantec直接签发的。而提供了比较亲民价格的证书品牌,单域名的版本来自COMODO旗下的GGSSL或PositiveSSL,通配符的版本就是本站使用的、来自GlobalSign旗下的AlphaSSL了。如果是企业使用,需要使用OV/EV,而预算又不很充足的话,则应该考虑GeoTrust的TrueBusiness品牌,尤其是非英语国家的用户,因为只有这个品牌才支持显示在组织名字里显示非ASCII字符。当然如果本来就打算使用全ASCII字符,那么当然是COMODO及其子品牌更省钱。土豪没话说,一定是Symantec。关于证书的讨论如果全部展开,那么可以再写很多很多,此处就先收住吧。 回到VPS软硬件选择的话题,综合一下所有的要求,硬性要求基本如下: 至少要有即时通讯和电话这两个选项之一的服务和支持选项; 知名度不可太高,否则被连坐的风险太高; 至少配置2GB内存和30GB SSD; 有Ubuntu 16.04 LTS的操作系统选项; 月均摊成本需要低于10美元。 除此之外,还有一些软性要求,即“如有更好”的要求: 与中国大陆的网络连接平均时间不超过500ms,丢包率不超过20%; 付费周期最好至少支持年付,理想情况下可以一次付费终身使用。不要以为这不可能,比如主机屋就提供了一次付费终身使用的虚拟主机。 同时满足所有以上这些要求的服务商简直太难找了。尤其是满足所有硬性要求的服务商,实在是大海捞针。非常接近的选项有Cloudatcost,它满足硬性要求的2、3和5,和所有的软性要求。但是它没有Ubuntu 16.04 LTS的选项,而且机器挂得有点儿频繁了,这种情况下它的服务就显得极其不到位,所以让它出局是很不舍但也是很坚决的。还有就是Linode,它满足硬性要求的1、3和4,和所有的软性要求。但是它的预算还是超了一倍多,可话说回来,钱归根结底还是小事,它不满足硬性要求2才是大问题。 最后非常艰难地发现了两个选项:位于挪威的Theforevercloud,和位于美国的AlphaRacks。前者是非常非常小众的一个VPS供应商,提供了一次付费终身使用的选项;后者从反查运营IP记录的结果来看,应该是背靠SYN数据中心的资源分销商,属于三线左右的VPS供应商。而在这两个选项中选择,实际上更加艰难。不过最终我还是做出了决定:我购买了前者的服务,用来作为一切托管站点的VPS主机;同时,也购买了后者的服务,用来作为高博的世界所需要的VPS主机。前者,我的开支是大约2500挪威克朗的一次性成本。由于这个费用可以均摊到很长的时间,所以可以认为是近乎免费的。而后者,我的开支是大约每年20美元,想想连域名的费用一年都是200多美元,这个开支可以认为性价比相当不错了。其实运维成本是任何一个需要长期进行的项目的主要成本,所以一定要想方设法地把运维成本降下来。那么,如果说维持一个网站本身的开支一年可以控制在300美元以下(域名、主机和证书费用之和),也就是一个月在25美元以下的话,那么作为一个个人网站来说,已经是控制得还不错的一个成本了——当然换言之,也差不多接近一个没有盈利目标的个人网站的成本上限了。支持有写作热情的朋友们在我的主机上托管个人网站或博客,这件事是永远值得做的,也是永远值得投入成本的。认识我的人都知道,我是村上春树的超级粉丝,所以这台位于挪威的服务器,被我命名为“挪威的森林”。这个森林,是由很多个托管网站组成的,每一个网站都像是一棵充满希望的树,我希望能看到所有的朋友的写作内容总在积淀,而他们自身也总在成长。当然,我会为每个在我这里托管网站的朋友,都准备好足量的资源、配置好证书并开启HTTP2、配置好CDN——而托管在我这里就意味着你只需要潜心写作即可,我来办妥“让您的网站跟上时代步伐”的其余事项,并且永远免费。免费不意味着任何人都可以托管在我这里,而是只有愿意写作的朋友,在我们协商一致的情况下才可以。当然,任何人都可以申请托管。 时间过得好快好快!转眼间,从我第一次拥有域名并开办网站的2004年到现在,时间已经过去了12年。12进制对于中国人来说,是挺熟悉的。而过了这些年以后,我仍然在坚持着一些想法和行动,并且在学到很多的同时也理顺了很多。这一切都离不开所有朋友和比朋友更亲密的人们的支持,我希望你们所有人都能够幸福,并且希望这幸福的哪怕一小部分是来源于我的努力。 Read More »

响应新年需求

陈思侃这个人,我一向觉得很矛盾,不知道该怎么说他。此人有些真才实学,也有俩糟钱儿,并且有一个贤惠且漂亮到很让人羡慕的媳妇。不过说话办事总让人觉得哪里有点儿不对劲,貌似在坚持什么,但又说不出来(非我瞎吹,可能他自己也说不出来)。必须要和他相处得久了才能知道,此人到底是个心地善良且充满恻隐之辈,只是表达正确建议的时候,经常让人由于表面上抓不住要领而不能从中受益。比如,他去年针对我的网站只说过一句评论:“你那网站,到现在还不能在手机上看得舒服,在想什么?”单从这句话来说,自然很难把握其中的奥妙所在——谁知道谁看到怎么样的形式和内容会感觉舒服呢?但转念一想,其实颇有道理的。说到底,这是一个网站是否支持响应式设计的问题,只有这样的前端框架,才能够让所有人在任意使用的设备上能够有比较好的阅读体验。 其实,建站手记反而早已经是响应式的了,这有赖于WordPress官方主题Twenty Thirteen的响应式设计。而WordPress也已经把旧有的官方主题全部做了响应式的改造,更不必说之后新发布的主题了。响应式设计迟早会成为一切前端作品的标准配置,甚至到如果不采用的话会令人感觉不可理喻的程度。 若只是找个响应式的主题,倒也不难,选择很多。方才也已经说了,官方主题已经可以满足需要。可是如此一来的话,之前辛苦做了的主题,变得全无价值。这并不是我想要的,因为我觉得任何事情都要在求进步时也讲延续性,不能在倒洗澡水时,把孩子也一起倒掉了。比如前一版本的主题,它的CMS风格,就是我十分喜欢的。而且,几个好容易写了不少JavaScript做成的Widget也希望在新主题中复用起来。 挑来挑去,发现Responsive这个主题,很中我意。它简洁大方,但是很多元素的风格又十分具有适配性,在移动设备上的呈现也很好看,并且能够在各种分辨率下自动将相应的菜单项缩起或展现。不过,这个主题的免费版本似乎还不够灵活,所以我就花了40美元向其开发商CyberChimps购买了它的收费版本。果然,一切都立马OK了。很妙的是,和一般的国外主题不同,它自带很多语言版本的翻译。所以直接就有中文管理界面来的(当然,翻译有多处不甚靠谱,我自己还动手修改了它的mo和po文件),这还有个好处,就是这么一来它也考虑了中文字体的问题,这和很多国外主题一换用中文就显得异常突兀相比,自然是好很多了。 然后花了一些时间来把旧有的Widgets迁移过来,并在首页上添加了一些过去没有的内容。比如把朋友们的链接放上来了。同时,把所有的博客分类也放了上来,这样对SEO的好处是显而易见的。由于这个主题支持4个菜单,我就另外设计了两个小区域:出版作品和旗下站点。这么一来,和高博的世界相关的内容,都在首页的适当位置得到了展示。信不信由你,这个主题的功能还没有充分发挥哩!然而,“不是等到完美了才上线,而是只要充分可用了就立刻上线,并从那一刻起虚心接受用户的反馈和批评”应该是现代软件开发的基本原则,于是我也遵循了这一原则。 Read More »

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

标题这个话说得有点儿太满了,首先这个主题的创意来自于我的好朋友丁宇的个人网站。我想,如果他是用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 »

搬家、整合、进一步社会化

又换主机了。 主机比手机换得要快得多,或者说买手机的钱被我拿来租主机了。但是,我觉得值。换手机,换一万部,也就是你自己对于打电话和发短信的体验好了那么一点。但是换主机,意味着你的用户可以享受到实实在在的服务提升。当然,之所以需要服务的提升,说明之前的服务做得不够。IX Webhosting在中国大陆的访问速度的确不够快,尤其在北方地区就更慢,这当然会影响本站的浏览体验,于是决定换了。 换哪家的呢?如果要国内访问速度快,自然的想法是选择国内主机。但是要备案——这也不是大问题,非经营性的备案并不是难事。但是服务实在是不行——虚拟主机域名绑定功能是没有人做的,多少年了一点儿长进也没有,当然也可以说是因为做这么一件造福用户的事有可能会反而给自己带来不必要的成本和麻烦罢;而且,另一个重要的劣势是价格贵得吓人:万网就不用多说了,名字听也没听说过的小网站都能开出一个数据库、200MB空间,支持LAMP架构的服务器一年要1200元以上的价格。并非我出不起这个钱,而是这实在不够用,并且如果把所有的数据全写到一个数据库里的话,今后的维护会十分十分地麻烦。 那末,只能从国外的主机想办法了。美国的主机,访问被阻塞的风险太大,而且上次的性能教训也已经够深的了。所以,只能从香港或日本的主机想办法了。找来找去,找到了WOPUS,租用了它的日本VPS合租业务,采用DirectAdmin做后台管理。虽然访问速度不能说是极速,但是比起原来,提升的比例已经是非常非常明显了。旧的主机,仍然继续为原先的网友们提供服务。直至服务期到期,再想办法重新安置。 这样看来,今年在购买软件和服务上的开支还是有一定数量的。旧主机购买了两年服务,花了100美元左右。新主机花了大约200元人民币……真的是应了我以前下过的一个论断了。另外,购买了三个WordPress主题,花了大约90美元。还通过Adobe创意大学学生软件计划购买了Acrobat X专业版,花了199元。这么一加起来,花了就将近1600元了。不过再一算,这个钱也就是相当于我今年买的一部Nokia E5-00的价格。结果买来用了几天以后,去移动营业厅一问,竟然不支持手机钱包,立马送给不使用这个业务的老妈用了。然后,买了一部199元的Nokia C1-02,不仅轻松解决那个所谓智能机的傻问题,并且带有蓝牙功能、支持扩展的16GB TF卡、能够播放MP3、能够运行Java程序(所以可以运行飞信、QQ手机令牌、新浪微博等),最重要的是它没有我从来不用但是很多手机都强迫我随着机身一起购买的集成摄像头,可能唯一能够指摘的就是它没有手电筒功能了,这个……可以忍。 建站手记也被整合到高博的世界的主域名下了,现在唯一没有整合的就是论坛了。下一步,也必将要整合的。方案当然仍采用bbPress,新版的已经集成到WordPress而成为了它的一个插件。 一个重大的改变是给博客、维基和摄影的所有页面加上了微博转发功能和Google +1按钮。所以,高博的世界将坚定不移地继续社会化。原创内容,仍然会源源不断。2012年,会是高博的世界的营销年,请期待强力内容! 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 »

做足一百

今天是个很重要的日子,高博的世界订阅数首次超过了100——在历史上曾经有过达到100的情形,但是次日又落了回去。这么一来,超过100还是首次。对于订阅数在5位数以上的诸位看客来说,自然会觉得如此的成就不值一提——也的确不值一提。可谁又能说,一切能够量化的东西,从存款的数量,到子女的成长,能够一蹴而就呢?快速、意外、不请自来地急剧膨胀的,唯有肿瘤而已。健康的东西,成长的方式并不是那样的。这么多年来坚持拒绝横财、拒绝虚名的努力,应该说还是很好地做到了让我拥有一个相对愉悦的精神世界,而这个世界中很重要的一个部分,正是诸位在看的这些由细细的、一个字一个字地敲打输入而累积成的篇章。需要抱歉的是,最近忙于很多具体的工作,写得不多,但是坚持是一直在继续的。 谈三个问题。一个是高博的世界官方论坛正式得名博仁客栈,这个名字不用说当然是来自论语。一个是有关高博的世界进一步将建站手记和博仁客栈融入高博的世界品牌的计划,这意味着它们将转入gao.bo域名,并迁入新的主机。这么一来,域名gaobo.org将仅用于作为邮箱后缀及订阅网址的根域之用。当然,后者将在可控的前提下一直租用下去。 最后一个问题是有关垃圾评论的。惭愧地说,我现在的博客还处于任何评论都比较少的阶段。然而我对于垃圾评论却是一直坚持零容忍的原则,并且这个原则将继续沿用下去。要在我的博客上留言其实并不难:首次发言是要经过审核的,但是只要有一次审核通过,以后再无须审核。但是,只要有一次发表了垃圾评论,则将遭到永久的评论封禁。我发现,有些垃圾评论现在会发送一些友善的话,但是留下来的网址却是指向某个欺诈网站的。无论如何,垃圾评论不会有见天日的机会,发送者也不会再得到另一次尝试成功的机会——即使同一个人下次发送的不是垃圾评论。事实上我也在策划一些营销的努力来让更多的人认识高博的世界,并能够以各种形式留言。但是对于垃圾评论和僵尸粉这样的东西,我是向来毫无兴趣并坚决打缶的。一个人,或一个网站,如果连不去饮鸩止渴的这么点儿耐性都练不出来,我也不知道说什么好了。同时,这也是在切切实实地为互联网的整洁做了贡献:少一个指向欺诈网站的公开页面,就少一场或远或近的人间悲剧。 总而言之,我会用在创作并充实高博的世界内容的方面做足一百。同时也小小地希望更多的朋友能够保持对它的订阅,让它早日突破4位、5位的订阅数,到时候,一定会有更加精彩的内容带给大家的。 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 »