代码高亮 - 续

上次说用vim来解决post里代码高亮的问题, 然后收到了来自发芽网推荐

写博客时,没有代码高亮?
发邮件时,代码格式很乱?
有好代码,保存后很难找?

来看下效果:

C++代码, 代码高亮@代码发芽网
1 #include <stdio.h>2 int main()3 {4     printf("Hello world!");5 6     return 0;7 }

发芽网还支持code snippet的存储和搜索, 也就是类似代码snippet仓库的功能, 而事实上代码高亮也似乎只是这个功能的副产品.
不过个人不太喜欢在html里嵌入style, 所以暂时还是用vim来搞定. 不在意这个又喜欢方便的, 发芽网的确是个不错的选择

Movable Type + Lighttpd + SSI

SSI (Server Side Includes), 简单讲就是可以在一个文件里包含另一个文件, 而这个过程是在客户端进行请求是由服务器来自动完成.

利用SSI, 我们可以将页面中多变的部分和不经常变换的或者是多个页面共通的部分分离开来, 从而加快重建速度. 例如, 我们可以将页面的header部分分离出来, 这样即使在修改了header之后, 也只需要重建header的文件就可以保证全站页面的sidebar保持统一

在Movable Type里启用SSI很简单

  1. 首先启用MT的SSI发布功能, 进入Publish属性设置, 找到Module Options下的Service Side Includes, 设置为Apache Sever-Side Includes, lighttpd? 没关系, 也是这个
    Publish Preference
    愿意的话也可以把File Extension从html改成shtml, 便于http server区分, 不过并不是必要的
  2. 然后在Design里编辑想要分离出来的Template或者Widget, 在Template Options里选中Process as SHTML include
    Template Options

接着是lighttpd端的设置, 编辑lighttpd.conf (/etc/lighttpd/), 在server.modules里加入mod_ssi, 如 :

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_rewrite",
"mod_redirect",
"mod_ssi",
"mod_fastcgi",
)

在后面加入ssi module的设置

#ssi
ssi.extension= ( ".html" )

然后去MT的后台重新发布全站即可

Migrate to Movable Type

前些天换去vps玩, 本来配的nginx + php + fastcgi的搭配跑了几天后突然罢工, 无论如何也无法正常工作, 不得已放弃fastcgi而使用cgi, 本来资源就不宽裕的vps上性能更是急转直下, 不得已而转向静态发布的Movable Type

如何从habari导出数据是个问题, 导出wordpress的WXR格式的文件是个不错的主意, 能导入wp就基本上随便换哪里了, 况且MT自身也支持WXR的导入. 反正都是要写代码的, 于是决定索性写成插件, 顺便造福一下大众. 于是花了两个多小时调试完, 试着导入wp和mt都正常, 正式换到mt

损失是很惨重的:

  1. tags全部丢失, MT的导入脚本不支持tag 囧...于是300多篇post手工一篇一篇修改tag...用过habari的都知道habari是没有category概念的, 所以导入的post自然也就没有category, 加tag的时候一并加上去了
  2. permlink全部改变, 之前从wp开始的习惯, permlink保持着 /year/month/day/slug 的格式, 换到静态html页面的话, 所有的slug后面都会加html后缀. 刚才又忽然发现, mt的permlink是 /year/month/slug.html 的格式, 没有细分到每一天. 反正permlink都变了, 也就懒得再改了. permlink导致的直接问题是, 搜索引擎要重新收了. 另外, 原本post里引用了其他本章链接的现在链接也失效了...实在很难挑出来这些文章, 也就不改了.
  3. 成功换到mt后便毫不犹豫的删掉了habari的目录, 所以本想造福大众的 WXRExporter for habari 0.1-beta 还没有release就over了...而之前做的些个habari的主题及css也一并没有了, 哭~

这次真得是不得已才换的, 很遗憾没有在habari阵营里坚持的持久一点, 尽管habari还远不够成熟, 但是个人还是很看好habari, 一个很有发展前途的blog程序, 也一定会成为wp的有力的竞争对手

回头说说mt. mt的强大已经是公认的了, 用了一天, 最大的感受是对多blog, 以及多domain的发布支持很好. 只要安装一个mt便可以支持发布多个站点, 很适合在同一个主机上host多个site的站长.

当然静态空间也有缺点, 就是稍微改动模板就要全站重新发布, 这个可以通过SSI来弥补, apache和lighttpd对ssi支持都不错. 配置也很简单. 具体的以后再说吧.

不幸被dimlau拉进了mt阵营, 暂时落脚于此吧

借助vim高亮代码

起因还是这几天折腾vps, 为了最大限度节约资源, 决定停用之前的syntaxhighlighter插件, 而采用静态的高亮代码. 好处嘛:
一来省掉server端每次输出content的过滤过程
二来可以减少浏览器载入并执行js的压力
三来以后再换其他blog平台, 之前的代码片段依然可以很好的展现, 而不像现在. 检查了一下发现以前的post里残留着wp的coolcode的tag, textpattern的txp_batCode的tag, 还有habari的syntqxhighlighter的tag. 除了后者, 其他的都已经不像code了
找来找去发现解决方案其实一直都在我的硬盘里 -- 借助vim的syntax脚本高亮代码, 然后通过vim的2html.vim脚本生成html代码, 然后写css就ok. 至于好处嘛, 其一可以稍微减轻server和client的压力, 第二可以不依赖于任何blog平台和插件, 能输出html就成, 第三是可以借用vim的上百个语法脚本库, 这个数量绝对是geshi, syntaxhighlighter所望尘莫及的
步骤如下:
1. 编辑 ~/.vimrc , 添加以下代码, 当然css这个随便想怎么改怎么改:

syntax onlet html_use_css = 1let html_use_encoding = "utf8"let use_xhtml = 1

2. 添加css到现有的style里:

pre.code {    overflow: auto;margin-left: 1pt;padding: 5pt 10px;color: #000;background-color: #f8f8f8;border-left: 4pt solid #6ce26c;}pre.code .Constant {    color: #000;}pre.code .Comment {    color: #008200;}pre.code .Identifier {    color: #000000;}pre.code .Label {    color: #ff0;}pre.code .Operator {    color: #ff0;font-weight: bold;}pre.code .PreProc {    color: #ff1493;}pre.code .Special {    color: #008200;}pre.code .Statement {    color: #006699;}pre.code .Title {    color: #000000;font-weight: bold;}pre.code .Type {    color: #069;text-decoration: underline;}pre.code .Underlined {    color: #208aff;text-decoration: underline;}

3. 高亮代码, 最方便的是在vim新建文件的时候就指定对应语言的扩展名, 比如.php, .c等, 可以自动高亮代码. 如果没有指定, 可以在vim手动执行高亮脚本, 例如php:

:runtime syntax/php.vim

具体的.vim脚本名可参考syntax目录
4. 生成html, 执行如下命令

:runtime syntax/2html.vim

或者

:TOhtml

5. 把生成的html里pre包含的部分copy出来, 指定pre的class为code:

<pre class="code"><!-- CODE HERE --></pre>

-----------
稍微整理了一下之前有code的post, 所以被dimlau发现07年的post又"诡异"的出现在feed里...

Transfer域名

近期不停折腾主机, 换了两个VPS, 之间少不了修改域名指向. 可惜Netfirms实在不尽人意, 每次修改都要耗足了24小时才见生效. 于是在某人的撺掇下决定transfer到godaddy来.

因为在前不久刚刚在netfirms里renew了一下, 但是transfer过去又要花钱买一年, 所以对有效期什么的有些迷惑. 同时发信问Godaddy和Netfirms的客服, 但是回复让我更迷惑了:

Godaddy讲, 新renew一年的钱会退还给netfirms而netfirms的回复却是有效期会在新的reigstar那里延长. 顺便, 从来没见过netfirms的客服反应这么快的, 每次有什么问题都要20个小时才有回信, 这次听说我要transfer out了, 没出三个小时就回信...真不知道怎么想的

由于两者的回复截然相反, 于是继续问Godaddy, 这次说的比较明白, 新renew的一年有可能在transfer中丢失, 但是这个超出了他们的控制范围, 需要联系先前的主册商, 也就是netfirms. 既然netfirms承诺有效期延长那我也就不多问了, 直接去transfer, 过程如下:

1. 去Godaddy主页, 找到Transfer Domain, 输入要transfer的域名, 然后一路继续, 中间Godaddy会不断的竭尽所能的推荐你注册很多附加服务, 看清楚些比较好 :D

2. Check out

3. 紧接着Godaddy会给发一封带有Transaction ID和Security Code信息的邮件到你域名的联系邮箱里, 这个信息很重要, 所以确保域名的who.is信息正确 (在Dreamhost注册的话不修改到自己邮箱也没关系, dh在收到邮件后会自动转发到dh帐户的邮箱)

4. 进入Godaddy后台, 选择My Products -> Manage Domains, 在Domains菜单里选择Pending Transfers. 点击Authorization, 选择Begin Transfer Authorization. 紧接着会要求你输入Transaction IDSecurity Code. 填入刚才邮件中的信息并继续.

5. 接下来为了确认你是domain的主人, 会需要你提供一个Authorization Code.这个code需要你在原注册商那里取得. Netfirms的在后来域名控制的DNS Admin里可以找到. Dreamhost的话在Manage Domain -> Transfer Domain里. Godaddy的话在后台里在Authorization Code后面有个Send by Email的链接.

6. 输入Authorization Code后选择Finsih

7. 至此transfer的请求已经提交完成. 之后等待几个小时, 会收到来自当前域名注册商的通知邮件, 一般会有一个链接可以确认transfer或者拒绝transfer. 如果在一定时间内用户没有手工确认transfer的话会自动确认并完成transfer. 这是最后一步, 确认之后一般在1-3个小时就会收到新注册商的邮件通知, transfer完成.

先后transfer了两个域名,从netfirms的用了2天, 从dh的只用了12小时左右

以后不用忍受netfirms了.

PS: 其实我用过感觉生效最快的是dreamhost, 更改dns到日本这边生效最快的一次只用了10分钟