建站手记

高博的世界唯一官方博客

  • 必也正名乎


    名字非常重要,无论是从技术意义还是社会意义上讲。一个网站的名字,说微不足道也微不足道,但是既然存在了,那么到底还是希望籍着这个名字让所有可能会对其内容发生些许兴趣的朋友产生一些印象。至少,应该在尽可能多的地方展示这个名字。

    就是这么一点点想法,背后却涉及很大的坚持。尤其是:如果你想把这个网站的名字显示在SSL证书上的话。

    如果恰好读过我关于SSL证书的技术文章,就肯定知道,域名验证(DV)和组织验证(OV)这两种类型的证书是无法在证书上显示名字的,只有扩展验证(EV)这种类型的证书才可以做到这一点。然而,EV证书对于显示出来的名字要求是非常严格的,一般情况下只能显示出来企业或组织的名字,多一个字少一个字都不可以。而企业或组织的名字,是需要出示法律实体注册证明的,证明上写的是怎样,显示出来的也只能是怎样。

    换言之,如果想在EV证书上显示“高博的世界”这一名字并且只显示构成该名字的这五个字,就需要想办法在某个国家或地区注册一个叫这个名字的企业或组织。这件事的难度很高,因为首先很少有国家或地区可以注册中文名字的企业或组织,其次,能够注册中文名字企业或组织的国家或地区往往对于企业或组织的名字有相应的规范,比如必须带有“有限公司”或“基金会”等后缀,在这一点上目前还没有看到有例外情形。有实例显示,如果不要求中文的话,倒是可能注册出不带有后缀的组织名字,并用它申请EV证书。这是由英文的特殊国际和科技地位决定的事情,非人力可改变。所以,基本上可以肯定此路不通。

    那么,退而求其次的做法,就是只要能做到在EV证书上显示的字样包含构成该名字的这五个字就行了,同时可以显示一些其他字样,只要不影响名字的独立性。要做到这一点,难度就比刚才要低一些。具体的做法有两种:第一种,注册一个以该名字为商号或主体名称的企业或组织,比如“高博的世界有限公司”或“高博的世界研究所”之类的。如果这样做,可以在EV证书上直接显示这个企业或组织的全名。第二种,把该名字注册成一个商标或营业名称(doing-business-as name,简称DBA,呃,不是数据库管理员的意思),然后把这个商标归属到一个企业或组织里。采取这种做法,就可以在EV证书上显示形如“高博的世界(归属的企业或组织的名字)”的字样。

    仅仅为了在EV证书上显示这个名字而注册一个企业或组织,似乎意思不是太大,更何况这样做了以后还是不能实现“只显示构成该名字的五个字”。毕竟,注册一个企业或组织以后,是每年都有维护费用的,而且注销也要有另外一笔费用。在计划支出的时候,如果会发生为了一个特定目的却要启动持久支出的情况,就要特别谨慎。而注册商标,基本上可以看作是一次性的开支,因为商标的有效期是一二十年,远远长于EV证书的有效期。至于DBA怎么弄,看了一下好像有点模糊,尤其在亚洲不太有人知道如何去登记。考虑了一下,还是决定走注册商标这条路。

    注册商标的代理商很好找,即使是在2016年也是一找一大把。等等,为什么是2016年?难道现在不已经是2019年年底,眼瞅着要到2020年了吗?事实就是如此。注册商标这件事从开始启动,到注册成功,用了整整一年的时间。很多事情就是这样,仅仅由于旷日持久,就会有99.9%的人从一开始就放弃或是半途而忘(意思是说,其实并不想半途而“废”,只是由于没有很好的跟进机制,就忘记了)。而我,恰恰属于另外那0.1%的人。

    商标在2017年年底注册好以后,就可以开始申请EV证书了,但我并没有马上做这件事情。因为首先,EV证书很贵,我想多比较一些供应商。另外,我当时正在使用的证书还有比较多的可用时长,没有必要非常着急地做这件事情。所以,整个2018年我都没有在这件事情上采取行动,而是在观察。但是,2018年我并非什么事情都没做,商标注册给我带来了另一项福利,就是把“高博的世界”注册成了微信认证帐号的名字。

    没有运营过微信公众号的朋友大抵会觉得,微信公众号取什么名字都可以。实际上,是有很多限制的。含有人名的名字,一般不能够认证成为微信公众号的名称。在题为微信认证帐号命名规则说明的文档中,腾讯公司详细地说明了关于什么样的名字可以通过认证。也是在这篇文档中,明确地说明了,注册商标可以作为认证的依据,使得认证得以通过。在实际的操作中,除了提交商标注册证书以外,我也是数次致电认证专员确认,才最终得以通过。这么一来,“ 高博的世界”这个微信公众号的资料中就多了一行,表明它是经由注册商标认证通过的。当然,根据腾讯公司的规定,小程序可以复用微信公众号的认证信息,并取同名。所以,同名的小程序认证通过就没有遇到任何阻力。换言之,在申请EV证书之前,注册商标这一行为已经为这个名字在至少两处取得了一席之地。关于微信生态的建设,另文专讲。

    经由注册商标认证的微信帐号

    到了2019年,我当时正在使用的SSL证书的有效期就进入倒计时了。与此同时,我也终于找着了性价比非常满意的证书供应商——TrustOcean。我和他们的相识,源于2016年在v2ex上的一篇帖子。当时他们还只是一个想法要做SSL证书的生意。经过三年左右的发展,他们已经成为了正式的CA中间证书服务商,根证书由Sectigo签发,并且拥有一个叫做CrazySSL的知名品牌,可以说成就斐然——我非常喜欢看到商业上买家和卖家共同成长的过程。他们在2019年5月搞了一次EV证书的促销活动,两年期的证书只要价不到1000元。当然,我很开心地付了款。但是,好事多磨,由于当中企业资料提交和电话验证的环节出了一些小的状况,新的EV证书一直拖到了北美时间(搞不清楚具体哪个时区)2019年9月17日才终于签发下来,而我之前的那个证书则是在北京时间2019年9月18日过期,当中还是有几个小时的空档,网站差点就没有证书用了——但当然这种情况有备案,用了一个临时的证书顶上。

    花了三年左右的时间,折腾出来一个结果。在看到结果的时候,还是心情有点激动的:这就是传说中的“EV证书绿条”。

    成功在SSL证书上显示了网站名字

    即使是一个小型网站,也是大有机会做一些正儿八经的运营和传播的。而且在这个过程中,能够学习和经历的着实不少。有目标,有行动,还要有投入,这些都少不得,但最关键的还是要有兴趣、肯折腾、能坚持。毕竟,能写下来的东西,都是能复制但很难粘贴的。希望我从2004开始经营的小站,名字能为更多朋友所知,无论经由任何的触点。

  • 自家用云之原则


    作为一个大学一毕业就上手做Exchange Server技术支持工程师的人,我对于应用服务器软件的认识是受过系统化训练的。在我大学刚毕业的时代,还远没有像“云计算”这么时髦的概念,而Exchange Server的授权费用也决不是普通人甚至普通企业所能负担得起的。如果切换到云计算时代的术语来说,当时的私有云服务选项可以说是极其昂贵的。想拥有一个以自有域名为后缀的邮箱,几乎唯一的选项使用公有云服务。好在公有云服务商早在十年前左右,也是2006年左右,就提供了近乎免费的选项给个人站长和小微企业来运行一些“准私有”的云服务,其中最常用的当然就是以自有域名为后缀的邮箱。部署过程中,需要用户执行的全部都是域名操作:只须把域名的MX记录解析到指定服务器,最多再加一个防垃圾邮件的TXT记录和一个用于网页登录的CName记录即可。所有其他的服务部署是完全透明的,根本不需要用户多操任何心。

    话又说回来,免费最贵,这句话是非常普适的真理。凡是不要钱的服务,几乎总有伴随而来的两大问题:第一,它随时可能中止。这个很好理解,并且它在中止服务时并不一定会提前通知,而且你在这个服务上累积的任何数据都将随之而去——没有任何保证会提供任何工具供你导出数据。第二,它往往按原样提供(as is),而不会为你定制。这不是说“它不会给你提供任何配置选项”,而是说“它不会提供本来并未提供而你又恰好需要的任何配置选项”。如果它有99%都很符合你的需要,而只有1%你的需要不能被满足而这又属于无法妥协的部分,显然就得作出很痛苦的决定了。

    最近这五年左右,IT业态发生了很重要的变化,这变化对于非技术人员来说可能并没有很明显的感知。但是,不在这样的时刻感知,却是非常可惜的。太多人把目光投射到所谓的人工智能或区块链等领域,可是我却认为最重要的变化来自于开源社区在这五年左右的时间内在基础软件的可用性方面下的功夫。应用软件的关注点是千变万化的,但是几乎所有的应用软件都建立在相似的基础软件之上。基础软件也没有太多神秘之处,它们无非是对一些基础协议的实现。事实上,应用软件也应该是对于一些应用协议的实现。如果软件不是对于协议的实现,而是对所谓“需求”的实现,那么这样的软件不仅是可悲的,而且几乎注定是一文不值的——即使不是一开始就一文不值,也会随着时间的推移迅速变得一文不值。而可用性,具体来说应该包括以下的几个方面:

    1. 协议的完整实现。比如,如果实现的是一个DNS服务,那么应该可以添加所有类型的记录,包括少见的SRV记录胶合记录。而DNSSECCAA记录这样的高级特性,涉及到了协议扩展部分或是其他协议,如果没有提供实现,还情有可原。
    2. 协议的正确实现。必须以符合协议定义的过程取得符合协议定义的结果,而不能只看输入和输出是否匹配。比如,如果实现的是数据存取,那么不能只校验读写结果的正确性,还要看是否在读写过程中留下的内存和外存足迹以保证达到协议规定的安全性,还要看读写的性能指标是否在协议规定的阈值范围内,等等。
    3. 协议实现基础上的交互优化。在完整和正确的实现这个基础上,谈需求才有意义。无论面对的是下游开发者,还是最终用户,对于完整性和正确性的需求都是第一位的,但是同时他们又会认为这是不言而喻的——但实际上当然不是。有90%到95%的需求都可以归结为完整性和正确性的分类中,但确实也是有5%到10%的需求可以看作是在此基础上加以进一步在交互上进行优化的。但是,能够开始在这个部分满足用户需求的都是顶尖的、一流的产品团队和开发团队了。业界需要花很多年才能建立完整性和正确性的基线,并最终将产品按照这样的基线实现出来。在此之前用户只会感觉到产品不可用,无论在无关紧要之处做得多么花哨、多么用力都毫无用处,就是因为可用性不过关。而一旦可用性达到了基线标准,精彩的产品就会如雨后春笋般冒出来了。这充分地说明:达成貌似简单可用性基线是多么的困难,而貌似困难的在此基线之上的锦上添花是多么的简单。在消息队列达到可用性之前,别说即时通讯,就连任务式操作系统的实现都注定是弱不禁风、漏洞百出的。一句话,下层的技术达不到可用性之前,上层的应用是不可能达到可用性的。今天互联网的通信可靠性,很大程度来源于TCP协议的三次握手。而一旦这个协议有了可用实现,上层的大量应用,包括现在使用得最广泛的应用层协议HTTP也就顺理成章了。

    所以,毫不意外地,我们看到的成功产品无一例外地是在他们产品基础部分的可用性方面做到极致:谷歌的搜索算法、Youtube的视频播放和分发、WordPress的Web图文编辑排版插件……我们看一个网站,即使不知道它背后的工程团队实力如何,只要看一下用户注册流程,就可以有个大致判断了。一个由实力强大的工程团队建立和运维的网站,一般都支持用户注册时的身份验证、支持个人信息维护、会对输入的合法性作各种校验并协助用户输入以避免出错、在用户中断输入后可以从中断处继续输入而保存中断之前的输入、可以自动读取Gravatar、修改信息时会确保这种修改来自本人但一旦确定了本人身份就畅通无阻……凡此种种,都是可用性的重要组成部分。

    回到最开始的主题,我们现在显然不可能不使用云,但是如何选择云服务才能够尽可能地避免前面提到的问题,即对于个人数据甚至服务本身缺乏掌控,以及对于服务不能很好地为自己的个性化需求而定制呢?答案从一般道理的角度来说,当然是显明的,那就是尽可能地更高程度地自行掌控所使用的云服务。可是,如果要从落地的现实性角度来说,一个更好的答案是,尽可能地自行掌控所使用的云服务到已经具备了可用性的程度为界限。说句掏心窝子的话,我们购买或租赁一种云服务或是计算设备,是为了让自己的生活更美好更轻松,而不是为了给自己添堵或是增加劳动和思想负担的。这个也当然取决于用户本身的专业能力,譬如,如果自己根本不知道怎么安装和配置Web服务器,那么显然使用虚拟主机就好过使用VPS;但如果连编译安装都可以自己搞定,那么显然使用虚拟主机就不如使用VPS。这里面起到支配作用的是木桶原理:客观的可用性,和你自己的专业能力所能掌握的可用性中,只能取较低的那个。

    这么一来,选择或是自己打造日常生活和工作所使用的云服务,就有了可以依循的原则。

  • 跨年整顿


    运营是一件苦差事,这一点我想凡是抱着认真的态度做过哪怕不长时间运营的人,都会举双手同意我的判断。原因不是别的,就在于这个世界唯一可以确定的就是它在不断变化。机房位置会变、IP地址会变、应用层软件要求的基础服务层软件的多寡和版本号会变,等等不一而足。而变化总是会引发连带效应,IP地址变了?是不是相关的所有域名都重新解析正确了呢?迁移主机从来都不仅仅是大工程,而且必须要求工程师粗中有细,配置如果没有详细的变更日志,那么迁移的过程就会不断地遭遇déjà vu的故障。它们会唤醒你记忆深处的一些东西,但却是一地鸡毛,要命的是这些鸡毛究竟是哪些鸡身上的还必须要一根一根地找准了,这样的操作很容易就可以耗费人生难得的几小时甚至十几小时。

    当然,这样的假设在今年并没有发生。前几年被坑到鼻青脸肿的教训,让我已经多少养成了凡事记一笔的习惯。此外,对于Linux操作系统,至少是几种比较常见的多用于服务器的发行版本,以及在其之上运行的成套工具,我也开始多少熟悉一些了。因此,若是要从Ubuntu上的Apache迁移到CentOS上的nginx,并提供对用户透明的Web服务,对我来说并不会成为特别困难的挑战——敢于这样大言不惭,也许是因为我世面见得不多的缘故。可是,我也并不觉得在某个领域掌握的知识和技能比别人少是一件值得感觉羞耻或可怕的事情,或者不如说任何人都在绝大多数的领域并无长处可言才是常态。既然如此,爽性就把学习这件事范围限定在能够满足自己当下的需要、并沿着未来的一个可预见会需要或个人感觉有一定兴趣深究的邻域,才比较落地而且实用,并且也有助于长久地保持学习的兴趣。在任何情况下,都没有必要和顶级的高手纠缠细节,而高手之间在细节方面也必然是大相径庭,只要坚持认真学习研究,即使没有见过高手,也应该知道高手是肯定存在的。因为关于学习研究这件事,本身几乎唯一可以确定的就是,它让人不断地认识到自己越来越大的无知。无论如何,Linux发展到现在,比起前面哪怕是五年前,也已经在逻辑方面理顺了太多,并且在趁手的工具方面发展了太多。我想,哪怕现在是非计算机科班出身者,也应该在方便的时候尝试一下。当然真的要不要试,还是悉听尊便罢。

    今年在运营方面的主要目标,其中一个毋庸讳言,是最大化性价比。积累数年的经验,现在已经比较明确各种物料的供应商的特点,当然也更加明白自己要什么。提高性价比当然不光是追求省钱,就算是在省钱的方面也不光是要考虑节省直接的经济成本,有的时候没有考虑到的维护成本可以轻易地把计算和比较了半天才省下来的采购成本抵消得干干净净不说还再赔上几倍。免费永远是最好的,这不仅仅是因为不需要付钱,更重要的是可以永远不用为此操心。续费是一件需要操心的事,而忘记续费更是可能带来始料未及的额外损失。所以,寻找免费方案,尤其是有可信的供应商背书的免费方案,而投入一定的时间精力,是值得的。而次等的方案,则是买断。尤其是带有软件升级保障的买断服务,哪怕贵一点,均摊到一个长期的时间范围,就会越来越大地显示出在性价比方面的优势。而省钱另外一面则是在不可妥协之处保证资金到位,而且要扩大为了更好地完成运营目标或是完成更高的运营目标而进行投资。从根本上说,性价比的目标永远应该是提高性能而非降低价格,否则就是本末倒置,即使是专职的财务人员也不应该设定舍本逐末的目标,如果一切都是自己安排就更应该如此了。

    另一个目标就是运营的自动化,这一运营目标主要是通过技术实现。自动化的好处当然最直观就是可以降低不必要的时间投入,但它不那么明显的好处其实相当多维。 ⑴ 自动化意味着操作可以在任何时间进行; ⑵ 随着自动化脚本的维护,它出错的概率会越来越小。而手工的话每次出错的概率却是基本上相同的,尤其是时间间隔较长的维护,每次操作都要从头回忆,出错概率反而变大;⑶自动化意味着有着确定性的步骤,因此进行故障排除的难度就是可控的,而发生意外故障的可能性也会降低。一件事情可以自动化,往往意味着对它的理解变得更加深入和有条理了。比如说,要为泛域名申请SSL证书,乍看之下似乎难以自动化。因为它需要一个为基础域名添加TXT记录并验证随机字符串的步骤,这一步好像只能手工完成。可是,如果了解到,添加域名记录能够使用域名供应商的API进行,那么自动化就变得可以实现了。当然,这个步骤可能需要自己写脚本,也可能需要对管理软件做一些了解,或是对如何把不在提供了API的域名供应商处注册的域名强制使用提供了API的域名供应商来解析做一些研究。为了自动化所带来的一劳永逸,而投入一些一次性研究的时间精力,很是值得,当然这些研究最好也能做好笔记收藏,以在未来情况发生变化时,可以在此基础上发展新的研究,而不是从头来过一遍。

    而实际上这看似分离的目标却又是统一的,所以称之为整顿,就是说要把之前零碎地获取的知识和信息,用于指导各种资源的未来分配,以获得更高的效率。再富有的人也不可能拥有无限的财富,想把事情做好就需要有点四两拨千斤的本事和能够耐得住性子应对具有四位甚至五位数细节数量的事务才行。从这个意义上说,运营确实对这两方面都颇有要求。如果不知道应该怎么才能训练自己在效率和耐心之间的平衡,那么就从建设和运营一个自己的网站做起吧!

  • 十倍索引


    2017年10月到现在,仅仅一年的时间,但是本网站在Google的索引量提高了一个数量级。从不到2000个网页,到现在的12000余个。这个改进,还是相当喜人的。

    这其中也没有什么秘诀,原因就是我做了一些脚本,把Flickr相册中的照片和影集做成了站内页面。目前,我一共上传了差不多4500张照片,分属于上百个影集。而且,有两套系统同时用以展示这些照片和影集,这样就差不多有万余页面了。然后,再把这些页面都做到一个站点地图中去然后提交给Google管理员后台,稍等几日,爬虫就会欣然受邀前来,并根据囫囵吞下的内容,慢慢地将消化后的结果加入到索引中去了。

    当然,提交的站点地图也非止一个。博客和维基的内容,本来也有一些,所以也分别提交了。这些内容构成了前面不少年的索引量基础,不过这一部分的增量就不可能非常快地积累了。

    同样,这些所有的站点地图也不是只提交给Google,也提交给了其他一些搜索引擎。不过,和几年前相比,现在还能称得上是搜索引擎的也确实已经不多了。雅虎几乎已经完全阵亡,Bing也只能说是半死不活。百度从技术上说确实还是非常活跃的,而搜狗和360的技术差得就比较远了。新出现的、还能够提交站点地图的,是Yandex,但是效果并不彰显,至少没看出来和站点地图有什么关系。DuckDuckGo的搜索结果很不错,但它不允许提交站点地图。

    搜索技术永远都是计算科学研究的最核心主题之一,数据就在那里,但是如果不能及时地把数据定位和调出,数据就无法发挥作用。或者说,数据是死的,必须经由搜索才能把它激活并派上用场。像Google这样的通用搜索引擎,已经难以触及很多领域的数据,比如社交网络——在中国像是微信,在中国之外像是Facebook和Instagram,这些数据都要么对通用搜索引擎完全不开放、要么就是对它们完全不友好——更不用说即时通信了。就算对于其他一些结构化数据,很多公司在做所谓的垂直搜索,但是现在令人印象深刻的却是一个也没有,不过它们当然对于通用搜索的态度也同样是不开放和不友好的。

    所以,Google这样的公司也必须除了做数据的加工者之外,向数据的原产者转型。因为像我的网站这样愿意主动把数据提供给它的,从数量上来说当然还是会持续增加,但是如果从数据增量的比例来看却无疑是会下降的。只有Google自己推出产生原始数据的平台,并有足够多的用户使用,它才能继续保持活力。从这个意义上,Android操作系统当然是Google的一大成功,但是从传统的Web世界看,它的很多尝试都归于失败了,比如最近它关闭了的Google+服务。看来,Google确实在计算基础服务和系统平台方面有相当的实力,但是应用平台却并不是它最擅长的。所以,Google可能需要进一步在系统软件,甚至硬件设备上发力,才能得到足够的生产原料——原始数据供其加工。

  • 劫后重生


    苦难来袭时,从来不会发出预警。但苦难不应该简单地接受,因为它反应出之前肯定有什么地方做得不好。而做得不好,不是仅仅承认就可以的,要检讨和改正才行。所谓人的软肋,无非就是辛苦经营了很久很久,投入大量的心血培育之物。这样的事物,没有人会坦然接受被难以抗拒的力量毁于一旦,甚至有些人会在遭受这样的打击以后一蹶不振。可是话说回来,这样的事情毕竟是难以避免。面对此类事情,只能说:在能够承受的条件下,再度想法重新去培育新的;如果条件已不具备,那也只能求助于回忆了。

    新年伊始,VPS服务商就给我来了这么一次。由于把主机放到美国、加拿大和欧洲都试了一遍以后,从中国大陆访问速度颇成问题。所以,决定从亚洲找一个替代的服务商。我这个人有个习惯,说是毛病也行:对于需要周期性付款的产品和服务,我总是倾向于找性价比最高的,VPS显然属于此类产品。经过了长达两个月左右的研究和比较,找到了一家叫做主机分享组织的服务商。测试了他们家的香港线路以后,感觉在可接受的范围内,而且确实价格很实惠。于是租了一年,然后把美国主机的内容迁了过来。迁过来以后,差一点点我就决定不再续租美国主机了,结果多了个心眼——这又是我的一个习惯,说是毛病也行:在新的服务上线以后,我总是要把旧的服务再续租一个或若干个时段备,以便在新的服务万一挂掉的时候可以作为灾备上线顶着,也可以作为一个过时数据源把系统恢复到至少到迁出的那个时刻。事实证明,有些习惯是可以救命的。1月10日左右,网站突然无法访问了,去询问客服,完全没有用处。这里就不详述客服的态度之恶劣了,反正也是司空见惯的事情。反倒是它还算是在登录管理系统以后在明显的位置上发布了免责声明,不能说是未作到承诺——人家根本就没承诺,或者说是根本就是承诺了不给你服务。对此我其实并无意见,其实数据丢了,找不回来了,服务态度再好又有何用呢?相比起来,大大方方地承认“我是流氓,爱用不用”,反倒是一种光明磊落。我唯一不爽的地方是:这条免责声明的上线时间是2018年1月1日,而且并没有通知我们这些已经注册的用户。不过,还是那句话,就算得到了通知,事情也不会有什么变化。这么一来,与其和风车作斗争,不如干脆认怂,想办法重来。

    性价比最高的方案看来是不可靠了,那么就找第二高的方案:飞碟云。这个名字很讨喜,适合我这样喜欢科幻的人。但在科幻之余,我还是仔细看了一下产品规格。这么一看,就发现了两个关键字:KVMRAID10。行,多花20%的钱算是有了实际理由。

    数据,这是最让人心烦的部分。损失了两篇博客,还有两个月的维基,这很要命。因为现在我都基本上没有什么完整的时间来写博客和维基,都是几个月时间跨度里一边写、一边改,存成草稿然后才发表的。这么一丢根本就难以回忆起全稿,更难以再把它写成原来的样子。已经发表了的部分倒不是非常怕,去Google网页快照里查看,果然一下子就基本上找全了。当然,也只能说是基本上,并不能100%地找全,但是又有什么办法呢!另外比较恼火的丢失部分,是几个nginx配置文件,这也是没办法通过任何办法找回来的,只能一点点重写。我其实不是没有备份的习惯,相当多的东西都留了本地备份。但是这次确实是劫数来得太快,还没来得及动手就发生了糟糕的事情。不过,从另一个方面来看,也是因为没经过太久的时间,所以损失还算有限。唯一在时间方面的遗憾是错过了今年的生日,可以说是悄无声息地渡过了生命的彼岸。转念一想,这可能也未尝不是一件好事,所以也就不再难过个没完了。

    总算到了快过春节的时候,有了一点点时间,于是开始动手恢复数据、配置文件和脚本等等。由于第一次迁移时已经踩过了一些坑,所以这次基本上没有遇到太多的意外。另一方面,这次也把配置做得更加扎实了,发现了上次写配置文件时的一些没有注意的细节,这些细节会造成某些网址重写时的错误从而导致某些资源不能加载或是301跳转时网址不正确。脚本也作了一些调整,使得现在全部数据都采用RESTful的方式获取,并以JSON格式响应,而不再在任何地方使用硬编码了。

    这次主机迁移,除了改进性能这个主要目的以外,另一个比较大的调整就是将所有的资源集中到单一域名,即根域名下,包括原来的维基。当然,我也在nginx里写了大量的重写规则,保证几乎所有的旧网址中的页面都可以正确地跳转到新网址中的对应页面。这么一来,过了一段时间以后,搜索引擎中的索引就也会逐渐地更新到新网址上去了。Google提供了极好的站内数据提交的体验,相比之下,其他所有的搜索引擎在搜索基础这一方面就相差得太远了。整个的行业形态显然也不是我一己之力能作出任何改变的事情,但我能做的就是把自己的网站结构规划做好然后以站点地图的方式提交,并把网页的结构标记好——当然只有Google能够很好地识别和支持这些数据,甚至还提供强有力的工具,并以快速的爬虫扫描和索引更新,辅以精准多维的统计分析作为回报。

    目前本站基本上恢复了运转,但还没有最终完成。在完成本站的所有基础建设以后,今年总算可以写一些有意思的东西了。当然,吃一堑长一智,这回会仔细地规划和实施可靠的备份方案!

  • 挪威的森林


    整整三年,简直不太敢相信。一个三年没有更新的博客还会有谁看呢?一个三年没有更新的网站还会有谁访问呢?其实并不需要这样悲观的,三年的时间说到底也不过就是历史的一瞬罢了。从另一个角度来想,三年的时间即使每天都更新这个建站手记,又会有多少人看、多少人关注呢?说到底不过是一个个人站点,而如果这个个人并不是名流,那么任凭你如何努力地发声,这声音也不会受到太多关注的。所以,是否受人关注这件事,可能根本就不应该构成是否应该维护这个站点的理由吧。

    本站曾经在2015年的时候,尝试过把整站迁移到VPS上,可是由于两个原因失败了。一个原因是当时的VPS服务不够稳定,迁移上去以后不久就遇到了比较严重的硬件问题,差点把所有的内容都搞没了。第二个原因也是自己的技术不过关,想部署SSL证书,却不太会弄,结果也造成了整站一段时间内不能访问的严重故障。以上的两个原因,加上本人又忙到不行,遂退回了虚拟主机方案。幸亏还有备份——备份实在太重要了。

    可是虚拟主机方案实在是问题太多了,居然在21世纪已经过去近四分之一的今天还需要通过一个Web UI来上传文件——这对于号称计算机专业科班出身之人来说,不能不说是一种羞辱。只是,概念性地说这样的方案好或是那样的方案好,其实本身并不科学。到底虚拟主机方案和VPS方案相比,优缺点各是什么?其实一言以蔽之:虚拟主机方案没有服务器管理成本,但是相应地没有可以对服务器进行管理的灵活性——软件组件不能升级、文件和数据库无法以灵活方式管理且有数量和容量限制、SSL证书无法部署等,而VPS方案则在拥有如此灵活性的同时,必须负担服务器的管理成本——需要保证服务器的服务不中断,需要保证性能在可接受范围,需要处理各种妖蛾子问题。这也是做任何事情都需要做的权衡,就譬如做软件开发,如果你选择使用标准库中的智能指针,你自然不用自己管理内存,但这么一来也就(基本上)无法确切地了解内存运作的所有细节(尽管标准库声称你仍然可以);可是如果你的好奇心或实际的工程需求促使或迫使你下定决心非要去了解内存运作的所有细节不可,那当然可以直接使用裸指针或自定义的“智能指针”,但那样一来就如同Herb Sutter所言:“你要自行管理内存,就意味着你要负责管理内存。”

    负担服务器的管理成本需要很多前提条件,首要的是软硬件基础设施环境需要达到相当的稳定程度。这小小的一句话,内涵可太丰富了。硬件方面,VPS无疑是开销最小的方式,但是当然选择起来需要考虑的因素也比较多。国内的供应商需要备案,这个我比较抵触。但国外的供应商访问起来也有很多有中国特色的问题,而且越知名的供应商,这些问题就越严重。比如Amazon Web Services当然是服务最好的,但是就因为它太好了,所以在中国大陆的运营就有各种问题。而且,把服务器放到国外去这个决定就意味着肯定需要配置比较高、性能比较好的服务器才能满足需求,因为本来物理距离远,自然延迟就会比较大一些。可是这么一来,费用就会上去了。

    不言而喻,这样的供应商会非常难找。国内的有问题,国外的大厂有问题,那就只能找国外的小厂。但国外的小厂,配置和性能先不说它,费用首先就不会低,服务更是不可预测。这么一来,唯一的办法就是不停地交学费去试。交过了大概五六千美元的学费,尝试了各种各样的供应商以后,终于大致学到了一些经验:

    1. 服务比配置还要重要,因为供应商在国外,又是VPS,因此必须要有个能及时响应的专业服务作支撑。只有在线工单是不够的,必须至少要有即时通讯和电话这两个选项之一。
    2. 配置稍高的VPS,价格就会超过每月五十美元。因此,有可能的话,应该选择收取一次性费用的供应商。这样的供应商极少,如果加上服务要求就更少,但还是有的。
    3. 未来应该尽可能地选择无服务器型解决方案,即利用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软硬件选择的话题,综合一下所有的要求,硬性要求基本如下:

    1. 至少要有即时通讯和电话这两个选项之一的服务和支持选项;
    2. 知名度不可太高,否则被连坐的风险太高;
    3. 至少配置2GB内存和30GB SSD;
    4. 有Ubuntu 16.04 LTS的操作系统选项;
    5. 月均摊成本需要低于10美元。

    除此之外,还有一些软性要求,即“如有更好”的要求:

    1. 与中国大陆的网络连接平均时间不超过500ms,丢包率不超过20%;
    2. 付费周期最好至少支持年付,理想情况下可以一次付费终身使用。不要以为这不可能,比如主机屋就提供了一次付费终身使用的虚拟主机。

    同时满足所有以上这些要求的服务商简直太难找了。尤其是满足所有硬性要求的服务商,实在是大海捞针。非常接近的选项有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进制对于中国人来说,是挺熟悉的。而过了这些年以后,我仍然在坚持着一些想法和行动,并且在学到很多的同时也理顺了很多。这一切都离不开所有朋友和比朋友更亲密的人们的支持,我希望你们所有人都能够幸福,并且希望这幸福的哪怕一小部分是来源于我的努力。

  • 响应新年需求


    陈思侃这个人,我一向觉得很矛盾,不知道该怎么说他。此人有些真才实学,也有俩糟钱儿,并且有一个贤惠且漂亮到很让人羡慕的媳妇。不过说话办事总让人觉得哪里有点儿不对劲,貌似在坚持什么,但又说不出来(非我瞎吹,可能他自己也说不出来)。必须要和他相处得久了才能知道,此人到底是个心地善良且充满恻隐之辈,只是表达正确建议的时候,经常让人由于表面上抓不住要领而不能从中受益。比如,他去年针对我的网站只说过一句评论:“你那网站,到现在还不能在手机上看得舒服,在想什么?”单从这句话来说,自然很难把握其中的奥妙所在——谁知道谁看到怎么样的形式和内容会感觉舒服呢?但转念一想,其实颇有道理的。说到底,这是一个网站是否支持响应式设计的问题,只有这样的前端框架,才能够让所有人在任意使用的设备上能够有比较好的阅读体验。

    其实,建站手记反而早已经是响应式的了,这有赖于WordPress官方主题Twenty Thirteen的响应式设计。而WordPress也已经把旧有的官方主题全部做了响应式的改造,更不必说之后新发布的主题了。响应式设计迟早会成为一切前端作品的标准配置,甚至到如果不采用的话会令人感觉不可理喻的程度。

    若只是找个响应式的主题,倒也不难,选择很多。方才也已经说了,官方主题已经可以满足需要。可是如此一来的话,之前辛苦做了的主题,变得全无价值。这并不是我想要的,因为我觉得任何事情都要在求进步时也讲延续性,不能在倒洗澡水时,把孩子也一起倒掉了。比如前一版本的主题,它的CMS风格,就是我十分喜欢的。而且,几个好容易写了不少JavaScript做成的Widget也希望在新主题中复用起来。

    挑来挑去,发现Responsive这个主题,很中我意。它简洁大方,但是很多元素的风格又十分具有适配性,在移动设备上的呈现也很好看,并且能够在各种分辨率下自动将相应的菜单项缩起或展现。不过,这个主题的免费版本似乎还不够灵活,所以我就花了40美元向其开发商CyberChimps购买了它的收费版本。果然,一切都立马OK了。很妙的是,和一般的国外主题不同,它自带很多语言版本的翻译。所以直接就有中文管理界面来的(当然,翻译有多处不甚靠谱,我自己还动手修改了它的mo和po文件),这还有个好处,就是这么一来它也考虑了中文字体的问题,这和很多国外主题一换用中文就显得异常突兀相比,自然是好很多了。

    然后花了一些时间来把旧有的Widgets迁移过来,并在首页上添加了一些过去没有的内容。比如把朋友们的链接放上来了。同时,把所有的博客分类也放了上来,这样对SEO的好处是显而易见的。由于这个主题支持4个菜单,我就另外设计了两个小区域:出版作品和旗下站点。这么一来,和高博的世界相关的内容,都在首页的适当位置得到了展示。信不信由你,这个主题的功能还没有充分发挥哩!然而,“不是等到完美了才上线,而是只要充分可用了就立刻上线,并从那一刻起虚心接受用户的反馈和批评”应该是现代软件开发的基本原则,于是我也遵循了这一原则。

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

    ,

    标题这个话说得有点儿太满了,首先这个主题的创意来自于我的好朋友丁宇的个人网站。我想,如果他是用WordPress作为网站后端的话,我大概就会直接向他索要主题和插件了。但是,我想大概肯定是WordPress的架构对于他的创作来说有些缚手缚脚了,所以他采用的是基于Ruby on Rails的、纯手工打造的后台程序。我印象很深刻的是他的一句话:“我正在形成我自己的风格,晚了点,不过这一天终于来了。”我认为,对于设计师或是用村上春树的话说,任何“从零开始鼓捣一些什么”的人来说,形成自己的风格,把“自己这一个”从无数的“一个”中区别出来,可能是无上重要的事。理所当然。

    然而,活过了这么些岁月,自知之明恐怕是最重要的收获。自己能做到什么样的程度,多少是心里有数的。从零开始做原创主题,内容部分不是问题,问题在于编排。换言之就是PHP部分不是问题,问题在于CSS。不可能有时间去一点点研究,借力是必须的。去花钱找外面做“高仿主题”的工作室也许可以,但是其实也不靠谱,因为我要做的主题毕竟有我的要求:正如考试作弊时虽说要抄别人的答案,但不能把名字也抄了。

    还是顾国海同志帮我解决了头疼问题,我给他稍微解释了一下WordPress主循环,以及WordPress的各个页面的含义以后,他几乎立刻理解了所有的技术。一两天之内,他就在本地搭建了非常完备的测试环境,并且很熟练地从WordPress标准主题中拿来各种模块为其所用。这一点,实际上是任何一个程序员极其核心的能力:程序员的学习实际上从来不是一个先理解基本概念、再从基本概念开始自己构建一切的学院派过程(A过程);而是先囫囵地把别人的代码拿过来呈现出自己想要的结果,并在修正偏差的过程中一点点地理解别人的代码,最终能够以需要的精度来使用代码表达自己意图的驯兽师过程(B过程)。这也是为什么现在市面上大多数的程序设计教材不能够圆满地达到教学目的的缘故,因为它们几乎完全忽视了B过程(或者不如说绝大多数的作者都实际上写不出漂亮的、能够实现复杂功能的代码,从而他们只能以展示幼儿园水平的代码为限,并声称复杂代码是由这些代码发展而来的,事实情况当然与此大相径庭),而通过实实在在的、言简意赅的代码或者说案例来进行指导学生的经典教材,当然是Brian W. KernighanRob 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。谢谢你的努力和付出!

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


    又换主机了。

    主机比手机换得要快得多,或者说买手机的钱被我拿来租主机了。但是,我觉得值。换手机,换一万部,也就是你自己对于打电话和发短信的体验好了那么一点。但是换主机,意味着你的用户可以享受到实实在在的服务提升。当然,之所以需要服务的提升,说明之前的服务做得不够。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年,会是高博的世界的营销年,请期待强力内容!

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

    ,

    本月初,从北京石景山区回到市区的路上,遭遇了在上海也难得一见的雷暴雨,遂决定在北京饭店吃饭:这并不是逻辑混乱,也不是语无伦次,而是想说,天有不测风云,服务器也一样。遇到此类突发的事件,往往意味着要付出时间和金钱上的代价。虚拟主机供应商,对我来说是非常重要的基础服务提供者,没想到这次问题就出在这儿。7月20号早上收到一封邮件,大致意思是由于服务协议需要单方面做出调整,如果我不同意再付近100美元的话,就要在页面里放入各种“营销内容”。我当即骂了回去,于是那边翻脸,说要让我搬走,并且马上修改了所有托管在我主机上的网站的.htaccess文件——无耻之至——这样所有的网站都不能访问了,只要一访问就会出现“网站被暂停”的错误页面。

    事情闹到这个地步,另外找地儿是不能避免的了。而且经过这次教训,了解到新的虚拟主机供应商须得经得起考验才是。旧的供应商做的最后两件还算得上是有点儿人性的事,一件是把我原来的内容打了个包让我下载,另一件是同意将我尚未到期的租金退款。旧的供应商是Byet Internet Services,无论如何,把它拉黑是肯定了。

    麻烦的事儿非常多,首先,原先托管在我主机上的,有至少二十个朋友的网站。其中,还有日流量巨大的极点五笔网站,真心感觉对不起杜志民老师,因为这件莫名其妙的事儿,使他的服务中断了好多天。选择新的虚拟主机供应商本身就是头疼的事儿,其次,原先的内容打包倒是挺全的,但是数据库要重建的话,肯定很多原先的参数都不一样了,比如数据库的名字和管理员信息。这么一来,数据库相关的配置文件全部都要做相应的改动,工作量非常大。

    用了一周左右的时间,才最终选定了新的虚拟主机供应商——IX Web Hosting。主要是从两个方面来考虑的,一是性价比挺高的,每个月4美元不到,价格几乎是过去的一半,但服务内容丝毫没有减少,反而多了固定IP地址可用;二是它提供全天候的在线聊天支持服务,这个显然比过去只提供异步的、不知道什么时候才会回复的电子邮件支持服务要靠谱多了。在售前咨询的阶段,工程师的回答就显示出很不错的专业性,因此,下定决心:就是它了!付款时发现,竟然支持支付宝,这对于中国用户来说自然感觉十分贴心了。

    这个虚拟主机服务用到现在,感觉还是比过去有很大的优越性的。这主要体现在下面几点:

    1. 没有“主域名”的概念,主机就是主机,域名就是域名。一切的域名一律平等,一个域名对应一个虚拟目录(包括子域名)。不像过去的主机,有一个域名是主域名,将根目录占据,而其它的域名则沦为二等公民,只能绑定到根目录下面的一个子目录。并且,FTP服务都必须带有一个子域名形式作为用户名,而新主机则完全避免了这些问题。
    2. 可以做的Web配置非常精细,谁用谁知道。相对于基于CPanel的粗粒度管理,新主机提供的控制面板用起来更加舒心。
    3. 可以直接采用A记录指向的方法把域名绑定到主机,而不必强制把解析托管过来。但是如果把解析托管过来,则可以实现泛域名解析等强大功能。
    4. 有24×7的在线服务,而且技术水平还是很令人满意的。比如我提出要把几个数据库帮我导入,都很耐心地一个个地帮做,做完还在线等我确认。我有一次出去了半个小时,回来还在等着。这种服务态度,让客户觉得很可靠。

    当然也有一些不尽如人意之处,比如不能单独购买独立IP、PostgreSQL数据库的版本太旧、有时在某些线路会出现访问比较慢的情形等等。但是,总体来说,服务还是达到了及格线的。毕竟花的钱也不算十分多,所以暂时就继续用它了罢。

    将原先的客户数据导入的过程一开始是很痛苦的,后来也就程式化了。这么着,我基本上将过去在我的主机上托管服务并且仍然还活跃着的用户统统迁移到新主机上去了,整个过程耗时三四天,但这是必须做的事,因为事关诚信。值得一提的是,仍然有一两位同志失去了耐心,迁移到了其它主机上。对此我只能再说一声抱歉,没能服务好你们,希望你们在新的主机上使用愉快,并且有朝一日可以回来