网站和网页

老本行:网站建设

242010

WordPress的都知道,Akismet是个不错的防垃圾评论的插件,判断的准确率还比较高,但长期以来我一直很恼火一件事,就是Akismet把那些判为垃圾评论的评论都放在垃圾队列中,最快也要一个月才自动删除,这样如果偶尔出现误判,我就得从几百条垃圾评论中眼巴巴去把误判的评论恢复过来。这些广告机器人每天都不厌其烦地发呀发,一天就是两三百条广告,我大多数时候都懒得看垃圾队列中有没有误判的,直接一键清空,所以有时候可能会殃及无辜。

昨天终于厌倦了,心想算了,还是去找个插件吧,肯定存在解决办法的。于是乎找到了一个叫Conditional CAPTCHA的插件,这个插件是Akismet之后的第二道防线:如果Akismet放行,它就不再过问,如果Akismet判为垃圾评论,它就继续弹出一个reCAPTCHA框让评论者输入验证码,这样的话,那些垃圾机器人压根儿就无法把评论发到我的数据库中,直接被删除了。

这下整个世界清净了。

192009

要是Google这个话题,得到的结果八成都是广告——他们都会告诉你,“嘿,我(或某公司)这里可以建网站,傻瓜式的哟,快来投奔我吧!”新手一般都觉得建网站是一件超级复杂的事情,于是很天真很无邪地进了圈套,到最后还乐呵呵帮人数钱。傻瓜式的东西就如它的名字一样,只是为傻瓜准备的,要格外小心。

我正式接触计算机在2002年,接触网站建设在2003年,想想时日也不短了,虽然不是什么高手,但还是有一定发言权滴。数月前,鼓动江堂兄从Live Space逃脱、建立了自己的窝,而近日又把自己的网站和“统计之都”网站都搬了家,然后也帮“贝吉塔行星”逃离了那抽风的Live Space,后来有朋友问起关于如何建立个人网站的事情,所以干脆写篇教程,把这建网站的来龙去脉讲清楚。

一、建网站的准备材料:域名和空间

一个网站通常由域名和一堆网页文件构成:

  • 域名:就是“三达不溜什么什么点坑”这样的东西(如www.yihui.name,不严格,见后话),它由一家非营利组织ICANN管理,但它授权给了若干注册商(registrar)去卖域名,你可以在这些域名经销商那里注册顶级域名,所谓顶级域名就是“字母或数字组合+顶级域名后缀”,这些后缀包括常见的com/org/net,也包括不常见的name/info/biz等,各家允许注册的域名后缀可能有所不同,这就看个人喜好了;关于域名后缀,本来它是有含义的,比如com是company,org是organization,name是个人域名,等等,但我个人觉得这些东西已经没太大意义了,域名只要好记、看着像模像样就可以了,管它是公司还是组织呢(有例外:如gov等特殊后缀一般人不能注册),那著名的del.icio.us网站就是个很好的例子,它不一定非得是美国网站,但这个域名就是注册得很巧妙。顶级域名下面可以设置子域名,如二级三级域名,严格来说,www.yihui.name只是yihui.name的二级子域名,只是www太盛行,以至于人们干脆把www.***.***当作顶级域名了。animation.yihui.name就是本站的一个子域名/子站。说了半天,域名怎么注册啊?你Google一下“域名注册”或“domain name registration”,顶上的Sponsored link中都是有实力的注册商,但我作为过来人要严重提醒的是,尽量不要在国内注册(尤其不要相信那个万网的鬼话)。据说GoDaddy还可以,我没试过,只知道它似乎不能注册.name域名,我自己是在name.com注册的域名(需要付美元,我用的PayPal,双币种的信用卡也可以)。
  • 网站空间:想得简单一些,空间和你的硬盘没啥区别,只不过是空间服务商卖给你的一块服务器硬盘位置而已,性能可能比你的PC机好一点,网站空间就是放网页文件的地方,网页文件你可以简单想象为你硬盘里的文件,它们也是按路径访问的,网址的路径就对应着硬盘里的文件夹。网页文件通常分为:
    • 静态网页:其内容是固定不变的,里面放着HTML代码(网页的一种语言),不管谁、不管什么时间访问,内容都一样,通常以.html/.htm为文件名
    • 动态网页:我估计现在大多数网站都是动态的了,所谓动态就是网页文件会根据不同的条件解析生成不同的HTML代码,例如:某动态页面根据时间和用户ID向访问者问好,早上访问就说早上好,晚上访问就说晚上好,路人甲来了就说路人甲你好……动态页面通常和数据库挂钩,用户在访问网页的时候,网页程序就存取数据库,所以页面内容会不断更新。动态页面可能采取不同的语言编写,如古老的微软的ASP、盛行的开源的PHP。现在网络上有无数的网站系统,我当然推崇PHP+MySQL的系统了,目前尤其看好WordPress系统。
  • 注意有些国外空间是几乎可以当做自己的电脑使用的,包括编译安装程序(如Python),SSH登录,MySQL可以在命令行中执行,等等,国内似乎没见过能给空间这么大自由的

域名和空间没有必然联系,域名的作用就是作为一个字符串映射到一个IP地址上,因为(1)IP地址太难记了(2)IP地址数目有限(同一个IP上可以放N个域名)所以才需要域名这么个东西。这就意味着,你有换空间的自由。哪天对空间服务商不高兴了,可以直接把他踹了,把域名解析到别家去,用另一家空间。哎哎,等会儿,啥叫域名解析

102009

些日子有位童鞋在R-help邮件列表里问如何生成那种单词大小与其出现频率成比例的图,这玩意儿也就是通常所说的标签云(Tag Cloud)。我琢磨了一下WordPress的插件wp-cumulus,发现其原理很简单,不过就是将标签信息以XML形式通过JavaScript传递给一个Flash文件,所以也很容易用R去实现这个传递过程,即:将文本、超级链接以及频数写成XML,然后嵌入到HTML文件中。整个过程参见Creating Tag Cloud Using R and Flash / JavaScript (SWFObject)这篇日志,函数源代码和示例数据都可以从那里下载。

效果是这样的:

Your browser does not support Flash or Javascript!

(通过RSS阅读的童鞋们请打开原文链接在浏览器中观看,否则啥都看不到)

302009

Venn Diagram by Google Chart APIGoogle Chart API是很老的产品了(下文简称GCA),以前隐约听说过这么个东西,只是没觉得什么地方能用上,如果仅仅是单幅图形,还不如自己用软件画出来,而且自己画图比用GCA要方便灵活许多。这两天琢磨着网页里面有些简单的数字该如何显示给读者,比如几乎所有人的博客上都会显示阅读次数、评论条数等数据,这些数据是动态的,所以不适合静态图形展示,因此又想起GCA。简单来说,GCA就是用网址传递数据给Google的某个画图程序,Google画完之后把图形以PNG形式返回给你,你可以在网页中尽情使用。由于数据包含在网址中,因此很容易通过动态网页程序(如PHP)生成数据并写出网址。

1、从访问数和评论数生成Venn图

作为一个简单应用,我把原本枯燥的三个数字“用户(user)阅读次数”、“机器人(bot,网络爬虫)浏览次数”和“评论(comment)条数”用Venn图展示在每个条标题下的信息栏中了。对于学过与集合有关的课程(如概率论)的人来说,Venn图几乎是第一节课就会接触到的东西,它直观表明了几个集合之间的关系,如交集与并集。前面的三个数字中,user和bot交集为空,而user与comment的交集为comment,因为凡是发表评论的人必然要打开页面阅读。

Venn图的主要参数是7个数字,依次说明各个集合的大小:A, B, C, A∩B, A∩C, B∩C, A∩B∩C。这7个数字传给数据参数chd即可,如:

http://chart.apis.google.com/chart?cht=v&chs=300x300&chd=t:100,80,60,30,25,20,10
242009
客搬家之后不可避免会产生一大堆404错误,绝大部分原链接都失效了,不过好在动态网站系统的网址都是有规律的,因此把原来的网址重新定向也很容易,这里简单记录从Bo-Blog搬家到Wordpress的一些301重定向工作。PHP代码写得非常拙劣,各位看官见笑了,写出来为了将来要用到PHP的时候能找找自己以前写的例子。

1、RSS Feed:feed.php

对现代网民来说,RSS阅读器已经是看网页的必备工具,因此RSS种子的地址几乎是众多网址中最重要的一个。

插播不重要的通知:
1、本站的RSS地址已经更改为:http://yihui.name/cn/feed/,评论RSS为:http://yihui.name/cn/comments/feed/,请Google Reader中的读者即时更换。英文博客也类似,把cn改成en就可以了。
2、如果你懒得换也行,反正我已经重定向了。 :grin:

Bo-Blog的feed.php文件在不带参数的时候是博客正文的RSS,带参数go的时候可能是评论,也可能是分类目录的RSS,因此需要在WP根目录下建一个feed.php文件,里面对参数作简单的判断,把原来的RSS重定向到WP的RSS中。以下代码只是本博客的转向,具体怎么写要根据具体搬家结果分析。

我的博客搬家过程中,分类数字2不知为何被搬家程序略过了,因此当分类数字为2的时候特殊处理,否则从原来的go参数中提取分类数字,传给WP的cat参数。
<?php
header("HTTP/1.1 301 Moved Permanently");

if(!isset($_REQUEST["go"])){
	header("Location: http://$_SERVER[HTTP_HOST]/cn/?feed=rss2");
} else {
	$tmp = $_REQUEST["go"];
	if ($tmp == 'comment') {
		header("Location: http://$_SERVER[HTTP_HOST]/cn/?feed=comments-rss2");
	} else if (stripos($tmp, '_')) {
		$tmp = end(explode('_', $tmp));
		if ($tmp == '2') {
			header("Location: http://$_SERVER[HTTP_HOST]/cn/?feed=rss2");
		} else {
			header("Location: http://$_SERVER[HTTP_HOST]/cn/?feed=rss2&cat=".$tmp);
		}
	}
}
?>
152009
2009-06-14更新:自从WordPress 2.8开始,这里的正则表达式又变了,经本人测试,'(.?)\[('.$tagregexp.')\b([^\[\]\r\n]*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)'是有效的。

两天捣鼓Wordpress,遇到了无数的问题,估计Google不下百次,有些问题实在诡异,不过幸好都让我找到了答案。例如,昨天被这个问题搞得几乎崩溃:有的帖子在更新发布之后就变成空白了,刚开始我以为是数据库连接问题,后来在phpMyAdmin中检查了一遍又一遍,甚至直接更改数据库,都没法让文章显示出来,于是又去查codex,看the_content()等函数,依旧无果。最后在千般尝试下,发现把文章删除一部分文字之后就可以显示出来了,于是我意识到这与被删的文字有关,但从未听说Wordpress系统对文章内容有审查啊,所以应该不是关键词过滤的问题,我于是一句一句话地删除,看删到哪里之后文章就发不出了,最后统计了一下字节数,但这个数字对解决问题根本没用,因为不能因此就避免长文章。

我想来想去,想到了可能是插件的问题,由于需要“头文字”效果,我安装了TinyCode插件,它的内部用到了WP的shortcode。在将TinyCode禁用的情况下,长文章可以显示,问题便找到了:出在shortcode上。继续Google,发现几个月前有人出现了类似的问题,一位德国高手提供了解决方案,修改/wp-includes/shortcodes.php文件。找到:

function get_shortcode_regex() {
	global $shortcode_tags;
	$tagnames = array_keys($shortcode_tags);
	$tagregexp = join( '|', array_map('preg_quote', $tagnames) );

	return '\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?';
}

将正则表达式替换为:

	return '\[('.$tagregexp.')\b([^\]]*?)(\/)?\](?:(.+?)\[\/\1\])?';

这样问题便解决了。Wordpress这么完善的系统也会有Bug……

102009

说我也早就想用WP了,只是嫌换系统麻烦。今日遇见一位女博主,着实吓了我一跳。网上溜达这些年,还真没见过哪位lady会自个儿捣鼓PHP+MySQL之类的东西。溜了一圈,发现这位大人也是从别的博客系统转入Wordpress的,继而发现已经有从Bo-blog转到WP的教程了。于是乎,还看什么看?搬!

232009

新版COS论坛简直太它NND复杂了,把老夫折腾得晕头转向!……

082009

其实并不太关心金融,我对股市一窍不通。不过我非常喜欢这篇报告:华尔街的终结,终于等到这一天。它告诉我们,金钱是拼不过道德的,而且那些显贵达人们也许一个个都是蠢货。

我是一个倾向于用把大系统映射到小系统中用小思维考虑问题的人,这场风暴经常让我联想到学术界的发展,担心哪一天学术会如同股市一样崩盘(如果我们昧着良心行事、不懂装懂、牵强附会……),或许是我小人长戚戚罢了。但当我阅读这篇报告的时候,我会无数次类比起自己的所见所闻。

……Eisman 开始寻找和自己志同道合(对一切阴暗面持抵制态度)的人组建团队。他找到了Vincent Daniel。Daniel 曾经负责审计Salomon Brothers 的账目,但是他发现“竟然没有一个人能把账目解释清楚”,于是他转行做分析师,专门研究次级贷款(他自认为是当时 分析师中唯一意识到这个行业的所有公司都会倒闭)……

……时间来到了 2007 年5 月,Eisman 一直弄不明白为什么大家都没有看出金融市场这台机器运转已经很不正常,甚至马上就要报废。市场还是有些有识之士的,Grant 就是其中之一。Eisman 一直订阅由Grant 主编的《利率观察》,这是一份在圈内非常有名、但外界鲜 有人知的内参。从20世纪80年代中期贷款大周期一开始,Grant 便预言华尔街的末日即将 到来。2006 年底,他决定把这些被称作CDO 的证券产品调查清楚。他把这项任务交给他年轻的助理Dan Gertner,Gertner 有化工工程和MBA 双重背景。可怜的他搜集了CDO 的 所有相关资料,却不得不垂头丧气地告诉Grant 还是没看懂CDO 是怎么回事。Grant 当时 就意识到,CDO 将成为今后最重要的题材。Eisman 也是在阅读Grant的稿件后,认定了做空CDO 这座巨大的“金矿”……

042009

写完那个引用自己硬盘图片地址的,突然想起两张陈年老图:

停止战争

比萨斜塔

它们深刻说明了:作为现代人,不懂HTML是不行滴。

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie