新帖子

冒个泡:这个博客还没死 😛

系统也已经升级到 WordPress 4.4.2-ja,嗯。

君望汉化 木之发布

kiminozo

详见 http://kiminozo.thisillusion.org

君望汉化是个大坑,一个人兼任程序,初翻,校对,润色,实在是非常困难的一件事情。由此可见木之大人的毅力和对君望的大爱。总之,尽力支持一个,做个广告。

(以上文本转自 this Illusion

给 Microsoft Account 跪了

今日,为了赶时髦,入手了一套 Office 2013 Home Premium 版。在 office.com 输入序列号之后,需要登录 Microsoft Account 来继续安装过程(下载 Office 2013 等)。

我之前没有 Microsoft Account,所以必须当场注册一个。在注册过程中,我犯了一个“无可挽回”的错误——输错了用于登录账户的 e-mail 地址!完成注册并成功登录之后,系统提示已经发送验证邮件,要求通过邮件里的信息完成验证(如下图)。

pic1_2

由于 e-mail 地址输入错误,我无法收到验证邮件,因此无法完成验证。于是我点击“修改 e-mail”链接……

pic2

结果系统提示“e-mail 地址无法更改”(如上图)!之后我尝试了各种方法,都没能完成帐号验证。于是 Office 的安装也就没法继续了…… 更坑爹的是,购买的序列号已经被绑定到了这个帐号上,重新注册也不行了。

真心给 Microsoft Account 跪了 🙁

2011 年度总结

去年年底忙于 SIGGRAPH project 而没空写流水帐总结,现在补上。

转眼已经来到 PhD 的第四年,不知不觉成为“senior PhD student”了 orz。2011 年终于有了一篇一作的 paper,从而摆脱了“万年 co-author”的尴尬处境——不过同时也还是 co-author 了另一篇 SIGGRAPH Asia paper…… 回顾这一年:上半年在 MIT 合作了几个项目;暑假在第一次(待考证)美国之外的 SIGGRAPH 作了一个 presentation;之后回到 Cornell 经历了一个忙碌的学期:给老板的本科生 graphics 课作 TA、take 了 Charles Van Loan 的 data-sparse matrix computation 课、当然还有自己的 research projects。最终我自己的 paper 和从 MIT 带回的一个合作项目都成功投了出去,也使得 2011 成为我拥有超过一篇 SIGGRAPH submission 的第一年。当然,最后还要看有多少能被接收——SIGGRAPH 战场凶险啊。

娱乐方面,由于工作较忙,放弃了 WoW,星际2也主要是以看 GSL 比赛为主,成为了彻底的“理论派”。本年 galgame 方面很不给力,不过在 PS3 game 方面,年初花了近百小时拿到了 FF13 的白金奖杯;之后在 PS3 上完成了《428 〜封鎖された渋谷で〜》(fami 通满分游戏)以及《Tales of Graces f》;年终入手 FF13-2(又一款 fami 通满分游戏),SIGGRAPH season 之后也入手了白金奖杯。

此外,我花了不少时间折腾虚拟主机(VPS),并把个人主页和博客都从 godaddy 的 shared hosting 移到了 ramhost 的 VPS 上。

最后,领导来 Cornell 读 master,暂时不用两地啦 😀

Lowend VPS 试用报告

最近在折腾这个博客的同时,也试过好几个 virtual private server provider。下面作一个简要的整理:

1. QuickWeb

QuickWeb 是一家新西兰的 VPS provider。他们只提供 premium VPS 服务,因此价格偏高。相应的,他们的口碑极佳:无论是硬件,up-time,还是客服都非常出色。他们能够在 30 分钟内处理任何的 ticket,这对于一个 unmanaged VPS provider 算是非常难得的了。此外,他们时常会在 WHT 放出一些性价比很高的 deal。

地理位置: 美国西岸、美国东岸、欧洲、新西兰。

Pros: 服务和硬件性能均非常出色。

Cons: 价格较高,不允许 torrents。

Smallest box:
OpenVZ
256/384M dedicated/burstable memory
10GB storage
1TB monthly data transfer (over 1Tb port)
$9.95/mo

Xen PV
128/256M main/swap memory
5GB storage
130GB monthly data transfer (over 100Mb port)
$9.95/mo

2. BuyVM

和 QuickWeb 相反,buyvm 只提供 budget VPS。与 QuickWeb 类似的则是他们也有非常不错的口碑。BuyVM $15/yr 的 plan 也成为了众多 geeks 争抢的目标。总体上,buyvm 的服务非常稳定,在 budget VPS provider 中算是出类拔萃了。不过偶尔会有一些由 planned maintenance 导致的 downtime(一般 <15 min):BuyVM 似乎没有在用 Ksplice。对于新用户而言,BuyVM 最大的问题是常年 out of stock(这也是他们不 oversell 的证明)。甚至有热心的用户写了一个网站:http://doesbuyvmhavestock.com 来监控 BuyVM 的库存 🙂

更新:现在 BuyVM 似乎已经开始使用 Ksplice。今后应该不会再出现因为 kernel update 导致的 downtime 了 🙂

地理位置: 美国西岸。

Pros: 非常便宜的价格以及不错的服务质量;对 VPN 支持好(支持 mppe 加密的 PPTP,这在 OpenVZ based VPS 里是很少见的,因为需要 customize OpenVZ-ized Linux kernel)。

Cons: out of stock 🙁

Smallest box:
OpenVZ
128/256M dedicated/burstable memory
15GB storage
500GB monthly data transfer (over 1Tb port)
$15/yr

3. RamHost

和 BuyVM 类似,RamHost 也是一个口碑很好的 provider。RamHost 的使用的 Linux kernel 很新——相比大多数 OpenVZ provider 提供的 2.6.18,他们用的是 2.6.27,并将于近期升级到 32。RamHost 同时提供 budget 和 premium VPS 服务。他们 undersold 的 premium VPS 非常稳定,性能也很不错(最小的 box 都可以 access 2+ 个 cpu cores),强烈推荐。此外,他们正在开发新的 backup 系统(完成之后应该是免费提供的)。

PS. RamHost 一般在周末放出新的 stock。

地理位置: 美国东岸、美国中部。

Pros: 便宜的价格,出色的性能、稳定性。

Cons: Setup time 稍长(3 business days),out of stock 🙁

Smallest box (budget):
OpenVZ
128M dedicated memory
15GB storage
500GB monthly data transfer (over 100Mb port)
$2.99/mo (billed quarterly)

Smallest box (premium):
OpenVZ
192/256M dedicated/burstable memory
10GB storage
200GB monthly data transfer (over 1Gb port)
$3.99/mo (billed quarterly)

4. Burst.Net

很多主机商的都是很小的公司。而这些公司的一个问题,就是没准哪天就突然倒掉了。Burst.Net 原本是 ISP,拥有大量的相关资源(server, ip, 等等)。因此选择 Burst 的一大好处,就是相对其他小公司而言倒掉的概率要小得多。我试用过 Burst 的 $5.95/mo 的 linux budget VPS,感觉中规中矩:大多数时候速度正常,但是在高峰期(每天下午3点左右)网络会比较卡。另外,Burst 也提供 premium VPS。这类 plan 下面共享一个物理 server 的用户比 budget plan 少很多(<50%),加之使用的是 1Gbps 的 port(budget 是 100M),各项性能应该都好不少,不过价格也相应高一些。值得注意的是,用户无法从 budget plan 升级到 premium plan,只能另外购买,并手工转移数据。

地理位置: 美国西岸、美国东岸。

Pros: 价格适中,速度较快,提供免费的 central backup,免费提供两个 ip。

Cons: 高峰期网络较卡,up time 一般。

Smallest box:
OpenVZ
512M dedicated memory
20GB storage
1TB monthly data transfer (over 100Mb port)
$5.95/mo

5. VolumeDrive

和 Burst 一样的大公司。他们提供 $4.95/mo 的 1G mem plan。尽管看上去很美,但是因为 oversell 等原因,性能并不太理想——但是作一个 backup box 或者 seedbox 还是不错的。

地理位置: 美国中部。

Pros: 价格低。

Cons: performance 较差。

Smallest box:
OpenVZ
1024M guaranteed memory
50GB storage
2TB monthly data transfer (over 100Mb port)
$4.95/mo

6. Up2VPS

Up2VPS 是一家以 Xen-based VPS 为主的主机商(他们之前实验过 OpenVZ-based VPS,不过搞得非常失败,最后不得不把所有用户换到 Xen nodes 上)。在 Xen-based VPS 中,他们家的价格几乎是最低的。他们的 VPS 性能和 uptime 均尚可,客服总体也还过得去——就是英语是在差得发指,很难见到他们写出一个没有语法错误的句子 >_<。 更新: Up2VPS 最近恢复了 OpenVZ VPS 的业务。希望不要再 fail 了……

地理位置: 美国西岸、美国中部。

Pros: 性价比较高的 Xen VPS,answer ticket 速度较快。

Cons: 客服英语实在太差。

Smallest box:
Xen PV
128/512M main/swap memory
10GB storage
300GB monthly data transfer (over 100Mb port)
$25/yr

7. AlienVPS

AlienVPS 是一家较新的主机商,并且在去年转手过。自去年转手之后,他们的发展似乎还不错。目前我用他们最小的 OpenVZ box 作 Mercurial web server,感觉各方面都比较稳定,值得推荐。不过近期他们的 performance 有 downgrade 的迹象,继续观察中……

地理位置: 美国西岸、美国东岸。

Pros: 价格便宜,性能和稳定性都还不错,默认提供的 OS template 非常丰富。

Cons: 公司还很新,未来形式还不明朗。

Smallest box:
OpenVZ
190M dedicated memory
19GB storage
190GB monthly data transfer (over 100Mb port)
$19/yr

Xen PV
190M dedicated memory
19GB storage
190GB monthly data transfer (over 100Mb port)
$29/yr

8. Kazila

Kazila 是一家 Xen-base VPS provider。严格说来,他们的主机算不上 lowend——因为最便宜的 box 每月收费也在 10 刀以上。不过由于他们经常放出不错的 deal,所以也列在这里。毕竟一分价钱一分货,他们的主机性能十分优秀,稳定性也不错。

地理位置: 美国中部。

Pros: 性能和服务都相当不错,提供 14-day money back。

Cons: 价格较高,网站功能太简单(没有 announcement page,需要自己交 ticket 去问)。

Recommended box:
Xen PV
384MB main memory
8G storage
450GB monthly data transfer (over 100Mb port)
$6.95/mo

9. HostFailRail

HostFailRail 是另一家较大的主机商。与其他 provider 不同,他们的 VPS plan 提供很大的存储空间以及很弱的 CPU;此外,他们对 torrent 也很 friendly。因此,他们的 VPS 很适合作 backup server 或 seedbox。值得注意的是,他们会定期放出 65% off 的 coupon。这个 discount 使得他们的很多 VPS plan 性价比相当高。

更新:HostFailRail 于美国时间 2011 年 6 月 28 日正式关闭——因为亏欠他们的 upstream 很多钱……

地理位置: 美国东岸、欧洲。

Pros: 存储空间大,价格低,torrent friendly。

Cons: performance 较差,不合适作 web server。

Smallest box:
OpenVZ
256M guaranteed memory
30GB storage
200G monthly data transfer (over 100Mb port)
$1.40/mo (discounted)

Recommended box:
OpenVZ
384M guaranteed memory
90GB storage
600G monthly data transfer (over 100Mb port)
$3.50/mo (discounted)

面向新手的 WordPress 优化指南

写在前面

近期由于原先的 shared hosting plan 到期,将这个博客移动到了一个 virtual private server 上。选择 virtual private server 的原因主要有两个:一个是之前的 shared hosting 速度实在不敢恭维,另一个则是 virtual server 提供更大的自由度(毕竟是独立主机——尽管是虚拟的)。由于 WordPress 本身相当耗费资源,蜗牛一般的页面读取速度成为了困扰很多用户(尤其是使用 shared environment 的用户)的一大难题。

在移动这个博客的时候,我花了一些时间研究了优化 WordPress 效率的方法。整个优化过程比较琐碎,涉及到的 components 比较多。于是我决定利用这篇博文,对这个优化过程作一个比较详细的梳理。

Disclaimer: 以下的内容主要基于个人经验,并不保证适用于任何硬件/软件环境。在调整系统参数的时候,请作好相应的备份工作。

1. 优化 WordPress

我们先讨论一下在没有 root 权限、无法直接修改 web server 设置的情况下,如何利用插件使 WordPress 运行得更流畅。

1.1 基本优化

  1. 关闭无用的插件:多使用一个插件往往意味着多执行一些 php 代码。所以尽可能减少插件的使用对性能是有帮助的——当然,也有能够大大提高性能的插件。后面我们会提到。
  2. 关闭 Post Revision:在开启 Post Revision 的时候,每次更新一个 post,系统并不会覆盖以前的版本,而是会新增一个 revision。尽管这样大大降低了误操作的风险,但是也带来了不小的 overhead。要关闭这个功能,可以在 wp-config.php 中加入:define('WP_POST_REVISIONS', false);

1.2 优化数据库

推荐插件 WP-DBManager。该插件支持定期对 WordPress 的数据库进行优化和备份,也能手动 empty/drop tables,或是执行给定的 SQL 指令。总之是很省心的一款插件。

1.3 Caching

一般而言,一个博客网站大多数时候都是静态的,只有在新的博文/回复出现的时候,才会动态的改变出现。因此,用静态页面对博客进行缓存、仅在博客内容更新的时候对缓存进行相应的更新,能够大大减轻服务器的负担,提高页面读取速度。

推荐插件 WP Total Cache (或者类似的 WP Super Cache)。这款插件功能相当强大,下面作一个简要的说明。

  1. 安装 WP Total Cache 之后,Wordpress 的 dashboard 菜单中会多出“performance”这一项。点击进入之后,可能会看到若干个 warning。这些 warning 说的基本都是某些目录/文件的权限不正确,并且附有相当详细的解决方法。按部就班地修改若干设置即可。值得一提的是,WP Total Cache 会自动生成(或修改) /.htaccess 文件。如果博客使用的 web server 不支持 Override,WP Total Cache 依然能够运行,但是某些缓存可能无法起到作用。
  2. 解决所有 warning 之后,可以进行 compatibility check。WP Total Cache 会检查 web server 上各类 module/extension 的安装情况,从而决定哪些优化是可能的。

接下来简单介绍一下 WP Total Cache 支持的几种优化:

  1. Page Cache: 对博客各页面进行缓存。支持不同的缓存方式,在 shared web hosting 下建议使用 disk (enhanced),在 private server 上可以使用 Opcode cache (例如我使用的 APC,后文会提到),或者 memcache extension。速度提升最为明显,强烈推荐使用
  2. Minify: 简化 html/css/javascript 代码(例如移除注释、空白符等)。并能通过合并多个脚本文件来减少 HTTP request 的数量。推荐使用
  3. Database Cache: 缓存 database objects。很多 shared hosting (例如 godaddy)的一大软肋便是数据库服务器响应缓慢。因此这个优化还是非常有用的(同样可以使用 disk,Opcode cache 或者 memcache),推荐使用
  4. Object Cache: 对内存对象进行进一步的缓存。不过似乎只有对于使用了 Object Cache API 的页面才会有比较明显的效果。在 shared hosting 环境下尝试使用 disk cache,结果速度不升反降,不推荐;使用 Opcode cache 时速度似乎略有提升,可以保留
  5. Content Delivery Network: 将静态数据的多个拷贝保存在一个网络上(例如 Amazon S3),降低 web server 的带宽压力(同时提高数据的 availability),加快页面读取速度。没有尝试过,感觉在没有大量静态数据(例如图片)的情况下,用处不大
  6. Browser Cache: 通过合理设置 HTTP header 中的 expire time 来利用用户浏览器自身的缓存功能,降低服务器负担。同时可以通过 HTTP compression 降低对带宽的消耗。不错的功能,对提高低带宽用户的体验很有帮助,推荐使用

此外,WP Total Cache 还提供了一个 preview mode 来测试上述各项功能。不过我没有用过(偷懒 :P)。

2. 优化 server

下面的内容主要面向可以对 server 进行直接设置(最好是拥有 root 权限)的用户。另外,我用的 virtual private server 配置是 1G cpu, 512M memory。操作系统是 ubuntu 10.04,使用 web server: Apache2,以及 database server: mysql。下面列出的具体方案是针对以上配置进行优化的。

2.1 优化 Apache 配置

Apache 是很耗内存的(更准确地说使用 prefork multi-processing module 时占用内存较多。但是 php5 module 和更省内存的 worker module 并不兼容,因此 prefork 是大多数人的选择),而其默认设置并不太适合内存较小的 virtual private servers。把以下内容加入 Apache 的配置文件(ubuntu 下默认是 /etc/apache2/apache2.conf)可以更好地适应 512M 内存的服务器。

KeepAliveTimeout 1
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 1000

此外,为了确保 WP Total Cache 能够正常工作,需要将 WordPress 所在目录设置为 AllowOverride all,还需要 enable 几个 module:header, expires(需要的 module 列表在 compatibility check 里面可以看到)。

2.2 APC 的安装和配置

Alternative PHP Cache (APC) 是一个相当不错的 opcode cache。为了在 debian/ubuntu 下安装 APC,需要用 apt-get install 安装以下几个 packages: php-pear, php5-dev, apache2-dev。完成之后,输入
pecl install apc
即可完成 APC 的安装。安装完成之后,还需要添加一个配置文件(在 ubuntu 下默认是 /etc/php5/apache2/conf.d/apc.ini),内容为:

extension=apc.so
apc.enabled=1
apc.ttl=7200
apc.user_ttl=7200
apc.shm_segments=1
apc.shm_size="32M"

为了测试 APC 是否已经正常运行,可将 APC 安装时附带的 apc.php 放到某个 virtual host 上,之后访问这个页面就可以查看内存占用,cache hit rate 等信息。

2.3 优化 mysql 配置

除了 web server,优化 database server 配置也是很重要的。把以下的内容加入配置文件(在 ubuntu 中是 /etc/mysql/my.cnf)可以优化 mysql 在 VPS 上的性能。

[mysqld]
max_connections = 300
key_buffer = 32M
myisam_sort_buffer_size = 32M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 4000
thread_cache_size = 286
interactive_timeout = 25
wait_timeout = 7000
connect_timeout = 10
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 2M
query_cache_size = 12M
query_cache_type = 1
tmp_table_size = 16M
skip-innodb
[mysqld_safe]
open_files_limit = 8192
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M
[mysqlhotcopy]
interactive-timeout

3. 其他

3.1 性能测试

如果想了解各种优化/配置的实际效果,性能测试是一种很直观的办法。在 ubuntu 下可以使用 ab 工具(需安装 package apache2-utils):ab -t30 -c5 http://myblog.com/。这个命令会在 30 秒内用 5 个线程不断连接给定的地址,并会生成一个很详细的统计报告,相当好用。

Bibliography

  1. VPS Optimization Guide: http://www.earnersblog.com/vps-optimization-guide
  2. WordPress Optimization Bible: http://www.prelovac.com/vladimir/wordpress-optimization-guide

中了篇 SIGGRAPH

去年年底到今年年初忙活了好几个月,总算是修成了正果,我也终于不是万年二作了 😉 上个周末老板从 committee meeting 上发来了文章被接收的消息,今天则是收到了官方的 notification e-mail。我们的文章得分并不算高,能最终被接受,还是挺不容易的。

接下来要对文章进行最后的修改,video 的一部分也需要重做——估计又要用 Amazon EC2 了。不知道这次要花掉几百刀呢 😛

决定将合并两个 blog

现在流水帐多用微博,写博客机会减少了。加上这几天花了不少功夫整理这个博客,遂决定将我的 life blog 并入这里。以后就只需要更新一个博客了~

域名,rss feed 等问题过两天再弄……

换了个主题

最近闲来无事(其实是有事不想干 -_-),把 wordpress 升级到了 3.1,并且换了一个非默认的 theme。很久没有更新这个博客了,过段时间把近期玩过的几个游戏的感想放上来……

另外,pray for Japan.

2010 年总结

总算忙完了 SIGGRAPH project,有空写写流水帐了 😛

2010 是我 phd 的第三年。年初,合作的项目没有赶上 deadline,导致没有 submission to SIGGRAPH 🙁 之后经历了一个忙碌的 Spring Semester:尽管只修了一门 Programming Language 课,但由于这个方向我之前没有接触过,再加上没有和其他学生“组队”,导致这个学期的大部分时间都花在这么课的作业上了。不过这样一来,我也学到了不少新的知识,还是颇有收获的。暑假,我回到 MSRA 打了打酱油,接触了一些 infoViz 方面的东西。回到美国之后就和老板一起来到 Boston,开始了在 MIT 为期一年的访问。8月底飞往 Portland, OR 参加了 Intel PhD Fellowship Forum,9月中又参加了 MIT CG group 的 annual retreat。之后的 Fall Semester,应老板要求远程 take 了著名的 Prof. Gun 开的 operating system 的课,并回 Cornell 参加了 2 次期中和 1 次期末考试,为美国石油(汽油?)公司作了不少贡献。这学期里我开始了一个新的 SIGGRAPH project,并和 MIT Camera Culture Group 的人合作了另一个 SIGGRAPH project (这个主要是打酱油)。最后我自己的项目总算成功投了出去——从而避免了连续两年无 submission 的窘境,而另一个项目则没能赶上 deadline。这是后话了。

娱乐方面,由于所在的工会不给力,我在 WoW 中由一个 hardcore raider 转职成为了一个奸商,并且实现了单帐号 reach gold limit。暑假里 Starcraft II 发布,完成了单人战役。之后由于比较忙碌,打游戏的时间少了,不过还是通关了「Steins; Gate」。这个游戏的确是款佳作,强烈推荐~另外,2010 年里我把相机从 Canon 400D 升级到了 5D mark ii。

本年的另一件大事是有了领导。希望能尽快结束 long distance 的状态 🙂