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

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

总算有了个初步的原创主题》有2个想法

  1. 程序员的学习实际上从来不是一个先理解基本概念、再从基本概念开始自己构建一切的学院派过程(A过程);而是先囫囵地把别人的代码拿过来呈现出自己想要的结果,并在修正偏差的过程中一点点地理解别人的代码,最终能够以需要的精度来使用代码表达自己意图的驯兽师过程(B过程)。

    Yeah, the A process was what I learnt in SJTU. But the B process has only been learnt gradually during work in Chinasoft, and in Microsoft, and in SAP. It’s a painfully slow start…
    That’s what Maodei is over me.

  2. 恭喜你有了原创主题!这个风格我很喜欢,很轻量,很简洁。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据