COS史上有几位不为人知的幕后英雄,而我从没认真记载过这些事情,时间一长,各种事情堆满了脑子,也不会再去回顾。如今,我必须记下颜林林。以下截图部分反映了他在迁移论坛过程中的贡献:

这事情起源于去年暑假,当时我提出了更换PHPWind系统到bbPress的想法,这位颜小侠很快就研究了PW和bb的数据库结构并写了一个初步的MySQL脚本发给我,而我处理邮件的速度各位客官可能也有所耳闻……过了半年,我测试了这个脚本,发现并不顺利,于是颜林林重新开始修改脚本。众IT民工都知道,即使是自己写的程序,过三个月不看,感觉也像是别人写的。不过颜林林的计算机水平在我看来已经有天外飞仙的感觉了,三下五除二,又发回了修改的版本,然后就是我无休止的改进建议以及Bug修正。截止到记者发稿为止,新的论坛已经克服了我所能想象到的主要障碍(用户名密码顺利迁移、用户权限顺利迁移、帖子id保持不变顺利同步、数据库编码从GB2312顺利转为UTF8、bbcode算是顺利转换……)。每个问题我看着都觉得头皮发麻,但他的每一种解决方案都聪明得“令人发指”。
如果没有这样一位天才存在,换系统这件事我也只能在脑子里冒泡想想而已。
既然已经剧透了这么多,现在可以给个网址开始小范围公测了:http://cos.name/cn/。注意,暂时不能注册,不能发帖。欢迎提供反馈意见。其实这系统也没什么好看的,确实没什么可看的,它只能用来看帖发帖,版主只能删帖修改移动或举报垃圾广告。换句话说,它真的是个论坛了。
COS能有发展的动力,靠的就是这样的奉献精神。而我也诚惶诚恐,怕浪费了大家的时间精力。前几天,科学松鼠会采访一位伯克利统计学博士海龟,他竟然提到了统计之都网站,此事反映出COS在民间的影响力已经有一定厚度了(尽管一直采取不主动宣传的策略)。如小邱所说,“有点意思了”。诸位老大加油吧!
你要是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个域名)所以才需要域名这么个东西。这就意味着,你有换空间的自由。哪天对空间服务商不高兴了,可以直接把他踹了,把域名解析到别家去,用另一家空间。哎哎,等会儿,啥叫域名解析?
学习最好的方法莫过于实践,最快的途径莫过于示例,这段时间网站搬家,迫使我不断去看一些SQL操作方法,最终记载于此,以便将来参考。
1、时间操作
例:将GMT时间更改为GMT+8,可用INTERVAL把一段时间加到一个字段上。
UPDATE `wpcn_posts` SET `post_date` = `post_date_gmt` + INTERVAL 8 HOUR WHERE `post_date_gmt` = `post_date`
本例是为了对付Bo-Blog搬家到WP时大部分时间记录都没有被正确转换到GMT+8时区的问题。
2、字符查找替换
例:将某个图片的错误文件名更改为正确文件名。
UPDATE `wpcn_comments` SET `comment_content` = REPLACE ( `comment_content`, 'emot/ok', 'emot/pig' ) WHERE `comment_content` LIKE '%emot/ok%'
本例是为了对付Bo-Blog的pig.gif图片文件名被错误替换为ok.gif的问题,用到了REPLACE函数和LIKE操作符,注意LIKE后面的字段用%%匹配,而非*。
3、用R帮忙
例:批量更新日志的永久链接。
cat(sprintf("UPDATE `wpen_posts` SET post_name = '%s' WHERE ID =%d;",
x[, 3], x[, 1]), sep = "\n")
由于我不知道SQL里面如何用数组或向量,因此在批量处理的时候就用笨办法执行了,即:写n条SQL语句一起执行。R一向都是向量化操作,因此只需要把日志的ID和post_name准备好,然后用一个sprintf()就生成所有的SQL语句了,扔到phpMyAdmin中执行一下,所有的日志链接就更新了,省得把每一篇日志打开依次修改。
以上R语句生成如下结果:
UPDATE `wpen_posts` SET post_name = 'tidy-up-your-r-code' WHERE ID =1; UPDATE `wpen_posts` SET post_name = 'dare-be-defeated' WHERE ID =2; ....
插一句,对于英文日志,永久链接就是把空格替换为-,用正则表达式删掉不是[:alnum:]的字符即可。
4、用mysqldump备份数据库
这个命令可以以多种形式备份MySQL数据库,这里举例将数据库备份为*.sql的SQL语句脚本:
mysqldump -u db_user -p -r result_filename.sql database_name
由于mysqldump命令是独立的程序,所以不要先登录进mysql界面,直接在终端或command窗口运行即可。这样的备份文件可以在将来在mysql中用source命令导入:
source result_filename.sql
这样看来备份数据库也是很容易的事情,不过导入导出的时候可能会遇到编码问题。
就服务器的操作系统选择来说,Windows Server根本就不在考虑之列。今天拿一台机器试装了Ubuntun 7.10的Server系统,那只能用两眼一摸黑来形容:对着Command Line Interface(没有GUI,服务器也没有必要用GUI),完全找不着北。装了LAMP,基本的静态网页服务应该是能跑了。而对于昏天黑地的MySQL命令、Apache设置和PHP设置,还在继续眩晕中。
刚刚才知道怎样看自己的IP地址:ifconfig命令。ft。
作为Linux世界中的幼儿园级小盆友,只能继续自学了……
很简单,RENAME一下就好了。语法:
RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
这次一边做网页,也算是一边学习MySQL了。其实到现在为止基本上还是一个糊涂蛋。
近期评论