必也正名乎

名字非常重要,无论是从技术意义还是社会意义上讲。一个网站的名字,说微不足道也微不足道,但是既然存在了,那么到底还是希望籍着这个名字让所有可能会对其内容发生些许兴趣的朋友产生一些印象。至少,应该在尽可能多的地方展示这个名字。 就是这么一点点想法,背后却涉及很大的坚持。尤其是:如果你想把这个网站的名字显示在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开始经营的小站,名字能为更多朋友所知,无论经由任何的触点。 Read More »

自家用云之原则

作为一个大学一毕业就上手做Exchange Server技术支持工程师的人,我对于应用服务器软件的认识是受过系统化训练的。在我大学刚毕业的时代,还远没有像“云计算”这么时髦的概念,而Exchange Server的授权费用也决不是普通人甚至普通企业所能负担得起的。如果切换到云计算时代的术语来说,当时的私有云服务选项可以说是极其昂贵的。想拥有一个以自有域名为后缀的邮箱,几乎唯一的选项使用公有云服务。好在公有云服务商早在十年前左右,也是2006年左右,就提供了近乎免费的选项给个人站长和小微企业来运行一些“准私有”的云服务,其中最常用的当然就是以自有域名为后缀的邮箱。部署过程中,需要用户执行的全部都是域名操作:只须把域名的MX记录解析到指定服务器,最多再加一个防垃圾邮件的TXT记录和一个用于网页登录的CName记录即可。所有其他的服务部署是完全透明的,根本不需要用户多操任何心。 话又说回来,免费最贵,这句话是非常普适的真理。凡是不要钱的服务,几乎总有伴随而来的两大问题:第一,它随时可能中止。这个很好理解,并且它在中止服务时并不一定会提前通知,而且你在这个服务上累积的任何数据都将随之而去——没有任何保证会提供任何工具供你导出数据。第二,它往往按原样提供(as is),而不会为你定制。这不是说“它不会给你提供任何配置选项”,而是说“它不会提供本来并未提供而你又恰好需要的任何配置选项”。如果它有99%都很符合你的需要,而只有1%你的需要不能被满足而这又属于无法妥协的部分,显然就得作出很痛苦的决定了。 最近这五年左右,IT业态发生了很重要的变化,这变化对于非技术人员来说可能并没有很明显的感知。但是,不在这样的时刻感知,却是非常可惜的。太多人把目光投射到所谓的人工智能或区块链等领域,可是我却认为最重要的变化来自于开源社区在这五年左右的时间内在基础软件的可用性方面下的功夫。应用软件的关注点是千变万化的,但是几乎所有的应用软件都建立在相似的基础软件之上。基础软件也没有太多神秘之处,它们无非是对一些基础协议的实现。事实上,应用软件也应该是对于一些应用协议的实现。如果软件不是对于协议的实现,而是对所谓“需求”的实现,那么这样的软件不仅是可悲的,而且几乎注定是一文不值的——即使不是一开始就一文不值,也会随着时间的推移迅速变得一文不值。而可用性,具体来说应该包括以下的几个方面: 协议的完整实现。比如,如果实现的是一个DNS服务,那么应该可以添加所有类型的记录,包括少见的SRV记录和胶合记录。而DNSSEC和CAA记录这样的高级特性,涉及到了协议扩展部分或是其他协议,如果没有提供实现,还情有可原。协议的正确实现。必须以符合协议定义的过程取得符合协议定义的结果,而不能只看输入和输出是否匹配。比如,如果实现的是数据存取,那么不能只校验读写结果的正确性,还要看是否在读写过程中留下的内存和外存足迹以保证达到协议规定的安全性,还要看读写的性能指标是否在协议规定的阈值范围内,等等。协议实现基础上的交互优化。在完整和正确的实现这个基础上,谈需求才有意义。无论面对的是下游开发者,还是最终用户,对于完整性和正确性的需求都是第一位的,但是同时他们又会认为这是不言而喻的——但实际上当然不是。有90%到95%的需求都可以归结为完整性和正确性的分类中,但确实也是有5%到10%的需求可以看作是在此基础上加以进一步在交互上进行优化的。但是,能够开始在这个部分满足用户需求的都是顶尖的、一流的产品团队和开发团队了。业界需要花很多年才能建立完整性和正确性的基线,并最终将产品按照这样的基线实现出来。在此之前用户只会感觉到产品不可用,无论在无关紧要之处做得多么花哨、多么用力都毫无用处,就是因为可用性不过关。而一旦可用性达到了基线标准,精彩的产品就会如雨后春笋般冒出来了。这充分地说明:达成貌似简单可用性基线是多么的困难,而貌似困难的在此基线之上的锦上添花是多么的简单。在消息队列达到可用性之前,别说即时通讯,就连任务式操作系统的实现都注定是弱不禁风、漏洞百出的。一句话,下层的技术达不到可用性之前,上层的应用是不可能达到可用性的。今天互联网的通信可靠性,很大程度来源于TCP协议的三次握手。而一旦这个协议有了可用实现,上层的大量应用,包括现在使用得最广泛的应用层协议HTTP也就顺理成章了。 所以,毫不意外地,我们看到的成功产品无一例外地是在他们产品基础部分的可用性方面做到极致:谷歌的搜索算法、Youtube的视频播放和分发、WordPress的Web图文编辑排版插件……我们看一个网站,即使不知道它背后的工程团队实力如何,只要看一下用户注册流程,就可以有个大致判断了。一个由实力强大的工程团队建立和运维的网站,一般都支持用户注册时的身份验证、支持个人信息维护、会对输入的合法性作各种校验并协助用户输入以避免出错、在用户中断输入后可以从中断处继续输入而保存中断之前的输入、可以自动读取Gravatar、修改信息时会确保这种修改来自本人但一旦确定了本人身份就畅通无阻……凡此种种,都是可用性的重要组成部分。 回到最开始的主题,我们现在显然不可能不使用云,但是如何选择云服务才能够尽可能地避免前面提到的问题,即对于个人数据甚至服务本身缺乏掌控,以及对于服务不能很好地为自己的个性化需求而定制呢?答案从一般道理的角度来说,当然是显明的,那就是尽可能地更高程度地自行掌控所使用的云服务。可是,如果要从落地的现实性角度来说,一个更好的答案是,尽可能地自行掌控所使用的云服务到已经具备了可用性的程度为界限。说句掏心窝子的话,我们购买或租赁一种云服务或是计算设备,是为了让自己的生活更美好更轻松,而不是为了给自己添堵或是增加劳动和思想负担的。这个也当然取决于用户本身的专业能力,譬如,如果自己根本不知道怎么安装和配置Web服务器,那么显然使用虚拟主机就好过使用VPS;但如果连编译安装都可以自己搞定,那么显然使用虚拟主机就不如使用VPS。这里面起到支配作用的是木桶原理:客观的可用性,和你自己的专业能力所能掌握的可用性中,只能取较低的那个。 这么一来,选择或是自己打造日常生活和工作所使用的云服务,就有了可以依循的原则。 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作为网站后端的话,我大概就会直接向他索要主题和插件了。但是,我想大概肯定是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 »

及格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 »