<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-1441867072196612775</id><updated>2010-01-11T17:54:30.313-08:00</updated><title type='text'>Terrible Box - 令人发指.com</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.lrfz.com/atom.xml'/><author><name>Yale Huang</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>116</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-8742819339458617619</id><published>2009-12-04T08:37:00.000-08:00</published><updated>2009-12-04T08:38:20.614-08:00</updated><title type='text'>让老虎回家</title><content type='html'>&lt;a href="http://stickeraction.com/fengzhenghu/go" title="不让冯正虎回国是中国人的耻辱！"&gt;&lt;img src="http://stickeraction.com/fengzhenghu/sticker" alt="不让冯正虎回国是中国人的耻辱！" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-8742819339458617619?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/8742819339458617619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=8742819339458617619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8742819339458617619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8742819339458617619'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/12/blog-post.html' title='让老虎回家'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-6219244037108389239</id><published>2009-11-25T09:36:00.000-08:00</published><updated>2009-11-25T09:58:09.065-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gfw'/><category scheme='http://www.blogger.com/atom/ns#' term='operamini'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><title type='text'>Symbian S60 Opera Mini 复活指南</title><content type='html'>最近有不少介绍&lt;a href="http://www.kenengba.com/post/2021.html"&gt;复活 Opera Mini 的文章&lt;/a&gt; ， &lt;a href="http://code.google.com/p/opm-server-mirror/"&gt;OPM Server Mirror 项目&lt;/a&gt; 也给出了 JAR 包，但不幸的是我没能在其中找到适合我的 Nokia E61 用的版本。JAR 包安装时总是出现 "Authorization error" 或 "Certification error" 等警告并失败，我把能用上的解权限的的招都用上也都不行。我懒得再去签名啥的，幸运的是终于 Google 到了一个&lt;a href="http://mannuforall.blogspot.com/2009/10/download-handler-mod-bolt-15-final.html"&gt;能用的 Opera Mini Mod&lt;/a&gt; (直接&lt;a href="http://www.uploadthis.co.uk/uploads/mannuforall/Opera%20Mini%204.2%20Handler%20Mod.jar"&gt;下载 Opera Mini 4.2 Mod&lt;/a&gt;)。&lt;br /&gt;&lt;br /&gt;上面的那个 4.2 mod JAR 包在我的 E61 上安装顺利。装好运行后需要配置一下 Opera Mini Server:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在 Tools -&gt; Settings -&gt; Handler Menu 中设 HTTP Server，具体值见&lt;a href="http://www.bbercn.com/opera-mini-proxy-server-address-released.html"&gt;这里&lt;/a&gt;，当然自己用 OPM Server Mirror 给的脚本搭个 proxy 更好&lt;/li&gt;&lt;li&gt;Socket Server 也建议改一下，不然还是会见到 Opera 主动和谐的那个页面，设成 socket://127.0.0.1:1080 即可&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;到这里 Opera Mini 已经复活了。不过在每次进 Opera Mini 时可能还是需要重新 test connection .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;附加题&lt;/span&gt;：有兴趣的小朋友可能会想打 Socket Server 的主意。其实很简单，在你墙外的服务器上跑个 iprelay 即可:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;iprelay -d 10080:64.255.180.253:1080&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-6219244037108389239?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/6219244037108389239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=6219244037108389239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6219244037108389239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6219244037108389239'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/11/symbian-s60-opera-mini.html' title='Symbian S60 Opera Mini 复活指南'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-8655406469634539989</id><published>2009-10-14T09:10:00.001-07:00</published><updated>2009-11-05T06:31:48.634-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenWRT'/><title type='text'>令人发指.com 的宕机</title><content type='html'>这个 Blog 最近经常宕机，请不必太担忧。不是被墙了，我也还没有机会去喝茶。只是我爹妈家的猫很喜欢我放那儿的路由器，经常在上面爬来爬去；俺娘又怕电着了猫（解释电压之类是没用的），经常把电源断了。我整天天涯海角的乱跑，也实在鞭长莫及。几个月不 update 的 blog 还老宕机，实在不好意思，撰文以纪念。&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Best Regards&lt;br&gt;Yale Huang &amp;lt;mailto: &lt;a href="mailto:calvino.huang@gmail.com"&gt;calvino.huang@gmail.com&lt;/a&gt;&amp;gt;&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-8655406469634539989?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/8655406469634539989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=8655406469634539989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8655406469634539989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8655406469634539989'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/10/com.html' title='令人发指.com 的宕机'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-7347216178741024716</id><published>2009-09-22T10:44:00.000-07:00</published><updated>2009-11-05T06:31:35.525-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Twitter 帐号被封</title><content type='html'>"Twitter 帐号被封，在用 FF。考虑把 Google Reader 当 Twitter 用。"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-7347216178741024716?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.google.com/reader/item/tag:google.com,2005:reader/item/c6da059c620f11f2' title='Twitter 帐号被封'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/7347216178741024716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=7347216178741024716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/7347216178741024716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/7347216178741024716'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/09/twitter.html' title='Twitter 帐号被封'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-519173562939541636</id><published>2009-05-10T08:53:00.000-07:00</published><updated>2009-05-10T10:06:39.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='popmusic'/><category scheme='http://www.blogger.com/atom/ns#' term='黄舒骏'/><title type='text'>昨个看了黄舒骏</title><content type='html'>不想用什么煽情的标题，诸如“祭奠我们的青春”啥的。客观的描述就是我昨天带老婆去看了黄舒骏在上海的演唱会。&lt;br /&gt;&lt;br /&gt;我们到的比较早，进去大概估了一下，也就 2000 个座吧。座位不好就不多说了，反正教训是如果还想看啥演唱会的话，买票一定要趁早。我买的是 380 的票，准确地说在 380 里也是靠后的。坐我那片的，还有后面 180 的，都是我们这样年纪大些的大叔和御姐（要照顾我老婆的情绪）们。一帮拿着专业的道具的小粉丝有组织地冲到了最前面。后来才知道，那些是在某个 BBS 某个讨论版里看某个选秀节目的。为此老婆还嘲笑了我，因为在很多年前，互联网泡沫破灭之前，我也是混那个 BBS 的。&lt;br /&gt;&lt;br /&gt;原定 19:30 开始的演唱会拖了十几分钟才开始。黄舒骏上来就把我们定性为“坐在后面的”“年纪比较大的”朋友，还说他非常为那些年纪比他还大却自称听他的歌长大的人担心。我跟老婆说，我们周围的这些人不光是大叔，估计还多是宅大叔。的的确确，我们这些宅大叔们就是来听在我们（更）年轻时打动我们的那些歌曲。今天还看见有进步后生写 Blog ，说去看演唱会的宅大叔就是有钱，个个都攥着大炮筒，让他一个器材控很是眼红。&lt;br /&gt;&lt;br /&gt;每个宅大叔都有自己心中盼望着的那几首歌吧，我左后方的一个宅大叔就一直念叨《那一年那一夜》。其实我也很想听到这首歌，不过的确不指望黄舒骏会在这场演唱会上唱别人的歌。毫无疑问，《改变1995》一定是很多人期待的，现场也在这首歌中到了第一次高潮。歌词改了，老实说，大叔们期待更犀利些的。好吧，告诉你们一个小秘密，我一直期望在我的葬礼上放这首歌。&lt;br /&gt;&lt;br /&gt;江苏卫视的那两个姑娘实在让人不敢恭维。要说带徒弟，还是应该看看陈升带来的。不过没办法，这么场不赚钱的演唱会，要不是那几个黄舒骏混评委的电视台帮忙，还真办不成。大叔们很有礼貌，没把小姑娘轰下去。前面有组织的萝莉也挺招人烦，荧光棒、LED 板、横幅一样不拉，可总得考虑一下这些玩意和“你走以后没几天，邓丽君也跟我们说再见”很不搭吧。&lt;br /&gt;&lt;br /&gt;黄舒骏自爆《两岸》中的人物乃是虚构，颇让我吃惊：这都是有名有姓的呢。唱完这首，他就谢幕退场了。&lt;br /&gt;&lt;br /&gt;要说大叔御姐们就是太 nice ，居然有人就往外走了。（有个小插曲，我前面的御姐，估计是有事提前走了，走之前还小心地把座位后面贴的号取下带走了。）我那个急啊，就带头喊起了 Encore 。大叔御姐们就是 nice ，虽然一直在鼓掌，但喊 Encore 的还是不多。过了几分钟，估计黄舒骏对大叔们的耐心也没有太大把握，就上来了，说：其实我也有准备，如果没人喊 encore ，大家就这么安静的走了。还说：其实，我真的没有准备 ...... 太多的 encore 曲。&lt;br /&gt;&lt;br /&gt;Encore 第一首是献给他的父母的。第二首，是大家盼望的《恋爱症候群》。黄舒骏说唱这首歌不能分心，戴上墨镜，说：“你们开心你们的，我唱我的。” 800 多字，一气唱下来，没错！副歌是大家一起和着的。唱到结尾，黄舒骏摘下墨镜；大家起立鼓掌，看他走到后场，继续 encore ！&lt;br /&gt;&lt;br /&gt;大叔们还是不习惯喊 encore ，最后还是喊黄舒骏的名字比较有气势。喊了几分钟，黄舒骏跑上来说，这次是真的没有准备了。后来还是唱了《听不懂的话》。我们这些 nice 的大叔看准备没准备的 encore 都上了，也终于可以满意地回家了。&lt;br /&gt;&lt;br /&gt;PS: 为了诸位大叔们心中的小小幻想，俺就不透露那个 BBS 那个版了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-519173562939541636?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/519173562939541636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=519173562939541636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/519173562939541636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/519173562939541636'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/05/blog-post.html' title='昨个看了黄舒骏'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-1626727811110490945</id><published>2009-03-12T06:53:00.000-07:00</published><updated>2009-04-26T13:31:38.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='greasemonkey'/><title type='text'>令人发指视频搜索 for Greasemonkey</title><content type='html'>&lt;a href="http://userscripts.org/scripts/show/44089"&gt;令人发指视频搜索 for Greasemonkey&lt;/a&gt;: "令人发指视频搜索"&lt;br /&gt;&lt;br /&gt;把我原来豆瓣和MDBChina的两个视频搜索 user scripts 合并了，并且用我的动态 GM JS 调用改造了一下。现在只要我在数据库里加记录，安装了 user script 的 Firefox 就可以在新影评站点进行搜索了。&lt;br /&gt;&lt;br /&gt;已支持的影评网站:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.douban.com/movie/"&gt;豆瓣&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mdbchina.cn/"&gt;MDBChina&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mtime.com/"&gt;时光网&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;更多的影评和视频分享网站添加中...&lt;br /&gt;&lt;br /&gt;Update(Apr 27, 2009):&lt;br /&gt;&lt;br /&gt;支持的视频搜索和分享网站：&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gougou&lt;/li&gt;&lt;li&gt;Youku video&lt;/li&gt;&lt;li&gt;Youku playlist&lt;/li&gt;&lt;li&gt;Ku6 Video Search&lt;/li&gt;&lt;li&gt;56 Video&lt;/li&gt;&lt;li&gt;Youtube Video&lt;/li&gt;&lt;li&gt;Google CN video&lt;/li&gt;&lt;li&gt;Tudou video&lt;/li&gt;&lt;li&gt;Tudou playlist&lt;/li&gt;&lt;li&gt;Gougou BT&lt;/li&gt;&lt;li&gt;Ku6 Playlist&lt;/li&gt;&lt;li&gt;56 Playlist&lt;/li&gt;&lt;li&gt;Youtube Channel&lt;/li&gt;&lt;li&gt;Youtube Playlist&lt;/li&gt;&lt;li&gt;VeryCD&lt;/li&gt;&lt;li&gt;isoHunt&lt;/li&gt;&lt;li&gt;OpenV&lt;/li&gt;&lt;li&gt;The Pirate Bay&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-1626727811110490945?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/1626727811110490945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=1626727811110490945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/1626727811110490945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/1626727811110490945'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/03/for-greasemonkey.html' title='令人发指视频搜索 for Greasemonkey'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-6010664544774252665</id><published>2009-03-09T20:07:00.000-07:00</published><updated>2009-03-11T05:25:07.620-07:00</updated><title type='text'>Online Backup, Data Backup, &amp; Online Storage Service for Windows, Mac, and Linux from Spideroak.com</title><content type='html'>&lt;a href="https://spideroak.com/"&gt;Online Backup, Data Backup, &amp;amp; Online Storage Service for Windows, Mac, and Linux from Spideroak.com&lt;/a&gt;: &amp;quot;SpiderOak provides an easy, secure and consolidated free online backup, storage, access, sharing &amp;amp; sync* tool for Windows, Mac OS X, and Linux (Ubuntu &amp;amp; Debian)&amp;quot;&lt;br /&gt;&lt;br /&gt;I'm using SpiderOak for backing up my CVS root now. It's the simplest way I can find for online Linux desktop backup. Ubuntu Hardy AMD64 is well supported. But it requires a property client, which make it hard to use with server or low-end devices.&lt;br /&gt;&lt;br /&gt;I registered &lt;a href="http://ftp.drivehq.com"&gt;drivehq.com&lt;/a&gt; also, which supports FTP. But I'm still looking for tools or scripts which can keep versions of backups with FTP: I don't want to program it by myself.&lt;br /&gt;&lt;br /&gt;Update(3/11/09): the latest news, SpiderOak hung up hours after it was installed. Now, there are lot of files with status &lt;i&gt;0.00%&lt;/i&gt; and &lt;i&gt;queued&lt;/i&gt;, but no change anymore. So, shall I switch back to backupninja, and programing a script for FTP?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-6010664544774252665?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/6010664544774252665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=6010664544774252665' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6010664544774252665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6010664544774252665'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/03/online-backup-data-backup-online.html' title='Online Backup, Data Backup, &amp; Online Storage Service for Windows, Mac, and Linux from Spideroak.com'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-2531011773157800754</id><published>2009-03-09T18:08:00.000-07:00</published><updated>2009-03-11T05:20:52.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Notebook: Still Available For New Users?</title><content type='html'>&lt;a href="http://googlenotebookblog.blogspot.com/2009/01/stopping-development-on-google-notebook.html"&gt;Official Google Notebook Blog: Stopping development on Google Notebook&lt;/a&gt;: "Starting next week, we plan to stop active development on Google Notebook. This means we'll no longer be adding features or offer Notebook for new users."&lt;br /&gt;&lt;br /&gt;I signed up a new Google account with a domain of my own (secutum.com), and accessed Google notebook successfully. It's a good news. I do take a lot of notes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-2531011773157800754?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://googlenotebookblog.blogspot.com/2009/01/stopping-development-on-google-notebook.html' title='Google Notebook: Still Available For New Users?'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/2531011773157800754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=2531011773157800754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/2531011773157800754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/2531011773157800754'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/03/google-notebook-still-available-for-new.html' title='Google Notebook: Still Available For New Users?'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5946222593838755933</id><published>2009-03-08T06:01:00.000-07:00</published><updated>2009-03-11T05:21:08.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>CeBIT 2009 : 宏碁两款改版 easyStore NAS 亲眼看</title><content type='html'>&lt;a href="http://cn.engadget.com/2009/03/07/cebit-2009-easystore-nas-eyes-on/"&gt;CeBIT 2009 : 宏碁两款改版 easyStore NAS 亲眼看&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;很象我计划中的 NAS. 就差几点:&lt;br /&gt;&lt;br /&gt;* 再多个 5 寸仓位装DVD-RW driver&lt;br /&gt;* OS 改 Linux, 不过这不是大问题, 自己能搞定&lt;br /&gt;* 价格?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5946222593838755933?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cn.engadget.com/2009/03/07/cebit-2009-easystore-nas-eyes-on/' title='CeBIT 2009 : 宏碁两款改版 easyStore NAS 亲眼看'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5946222593838755933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5946222593838755933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5946222593838755933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5946222593838755933'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/03/cebit-2009-easystore-nas.html' title='CeBIT 2009 : 宏碁两款改版 easyStore NAS 亲眼看'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5779566425897386820</id><published>2009-03-05T22:24:00.001-08:00</published><updated>2009-03-05T22:41:20.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Django-wiki For AppEngine</title><content type='html'>Django-wiki is a very basic Wiki based on Django. It costed me a few minutes to port it to AppEngine. The patch against http://github.com/sneeu/django-wiki/tree/master current repository:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;diff -ruN wiki/admin.py appengine-wiki/admin.py&lt;br /&gt;--- wiki/admin.py 2008-12-08 10:58:24.000000000 +0800&lt;br /&gt;+++ appengine-wiki/admin.py 2009-03-06 14:24:06.000000000 +0800&lt;br /&gt;@@ -2,5 +2,10 @@&lt;br /&gt; &lt;br /&gt; from models import Page&lt;br /&gt; &lt;br /&gt;+#admin.site.register(Page)&lt;br /&gt;+&lt;br /&gt;+class PageAdmin(admin.ModelAdmin):&lt;br /&gt;+    model = Page&lt;br /&gt;+    &lt;br /&gt;+admin.site.register(Page, PageAdmin)&lt;br /&gt; &lt;br /&gt;-admin.site.register(Page)&lt;br /&gt;diff -ruN wiki/models.py appengine-wiki/models.py&lt;br /&gt;--- wiki/models.py 2008-12-08 10:58:24.000000000 +0800&lt;br /&gt;+++ appengine-wiki/models.py 2009-03-06 14:16:21.000000000 +0800&lt;br /&gt;@@ -1,18 +1,22 @@&lt;br /&gt; from django.db import models&lt;br /&gt;+from google.appengine.ext import db&lt;br /&gt; &lt;br /&gt; from templatetags.wiki import wikify&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;-class Page(models.Model):&lt;br /&gt;-    name = models.CharField(max_length=255, unique=True)&lt;br /&gt;-    content = models.TextField()&lt;br /&gt;-    rendered = models.TextField()&lt;br /&gt;+class Page(db.Model):&lt;br /&gt;+#    name = models.CharField(max_length=255, unique=True)&lt;br /&gt;+#    content = models.TextField()&lt;br /&gt;+#    rendered = models.TextField()&lt;br /&gt;+    name = db.StringProperty(required=True)&lt;br /&gt;+    content = db.TextProperty(default='')&lt;br /&gt;+    rendered = db.TextProperty(default='')&lt;br /&gt; &lt;br /&gt;-    class Meta:&lt;br /&gt;-        ordering = ('name', )&lt;br /&gt;+#    class Meta:&lt;br /&gt;+#        ordering = ('name', )&lt;br /&gt; &lt;br /&gt;     def __unicode__(self):&lt;br /&gt;-        return self.name&lt;br /&gt;+        return u'%s' % self.name&lt;br /&gt; &lt;br /&gt;     def save(self, *args, **kwargs):&lt;br /&gt;         self.rendered = wikify(self.content)&lt;br /&gt;diff -ruN wiki/views.py appengine-wiki/views.py&lt;br /&gt;--- wiki/views.py 2008-12-08 10:58:24.000000000 +0800&lt;br /&gt;+++ appengine-wiki/views.py 2009-03-06 14:17:55.000000000 +0800&lt;br /&gt;@@ -8,14 +8,16 @@&lt;br /&gt; &lt;br /&gt; def index(request):&lt;br /&gt;     """Lists all pages stored in the wiki."""&lt;br /&gt;-    pages = Page.objects.all()&lt;br /&gt;+#    pages = Page.objects.all()&lt;br /&gt;+    pages = Page.all()&lt;br /&gt;     return render_to_response('wiki/index.html', {'pages': pages})&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; def view(request, name):&lt;br /&gt;     """Shows a single wiki page."""&lt;br /&gt;     try:&lt;br /&gt;-        page = Page.objects.get(name=name)&lt;br /&gt;+#        page = Page.objects.get(name=name)&lt;br /&gt;+        page = Page.gql("WHERE name = :1", name).get()&lt;br /&gt;     except Page.DoesNotExist:&lt;br /&gt;         page = Page(name=name)&lt;br /&gt; &lt;br /&gt;@@ -25,7 +27,8 @@&lt;br /&gt; def edit(request, name):&lt;br /&gt;     """Allows users to edit wiki pages."""&lt;br /&gt;     try:&lt;br /&gt;-        page = Page.objects.get(name=name)&lt;br /&gt;+#        page = Page.objects.get(name=name)&lt;br /&gt;+        page = Page.gql("WHERE name = :1", name).get()&lt;br /&gt;     except Page.DoesNotExist:&lt;br /&gt;         page = None&lt;br /&gt; &lt;br /&gt;@@ -33,9 +36,8 @@&lt;br /&gt;         form = PageForm(request.POST)&lt;br /&gt;         if form.is_valid():&lt;br /&gt;             if not page:&lt;br /&gt;-                page = Page()&lt;br /&gt;-            page.name = form.cleaned_data['name']&lt;br /&gt;-            page.content = form.cleaned_data['content']&lt;br /&gt;+                page = Page(name = form.cleaned_data['name'],&lt;br /&gt;+                            content = form.cleaned_data['content'])&lt;br /&gt; &lt;br /&gt;             page.save()&lt;br /&gt;             return HttpResponseRedirect('../../%s/' % page.name)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5779566425897386820?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5779566425897386820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5779566425897386820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5779566425897386820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5779566425897386820'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/03/django-wiki-for-appengine.html' title='Django-wiki For AppEngine'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-6401897381402420235</id><published>2009-02-24T04:44:00.000-08:00</published><updated>2009-02-25T00:22:26.798-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zoho'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Zoho Creator AppEngine Extension</title><content type='html'>&lt;a href="http://creator.zoho.com/"&gt;Zoho Creator&lt;/a&gt; is a powerful Web application development tool. It can export project to Google AppEngine also. But you will be disappointed if you want to do any real task with the exported code, because there are some IMPORTANT LIMITS besides the &lt;a href="http://blogs.zoho.com/general/zoho-creator-deploys-to-google-app-engine"&gt;ones mentioned officially&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;* Some important actions against records are removed, including DELETE, UPDATE and SEARCH&lt;br /&gt;* Data access is executed in a very expensive way, and has a limitation of 1000 record for each table&lt;br /&gt;* No support for 1:N mapping between tables&lt;br /&gt;&lt;br /&gt;There are some minor issues also:&lt;br /&gt;&lt;br /&gt;* Values of input fields are not escaped&lt;br /&gt;&lt;br /&gt;But as a developer without good skill of UI, I still prefer to create prototypes with Zoho Creator for RAD. It's not difficult to hack the exported code with Python, HTML and Javascript. But, the interacted development with Zoho Creator and local development tools is still a big challenge. So I started to develop a toolkit with can be used with this type of project:&lt;br /&gt;&lt;br /&gt;* One-way update from Zoho Creator to local project&lt;br /&gt;* Minimized changes to code generated by Zoho Creator&lt;br /&gt;* Implementations of the missed features and fixes of known bugs of generated code&lt;br /&gt;* A framework for further development&lt;br /&gt;&lt;br /&gt;Following are some tools and skills I will use:&lt;br /&gt;&lt;br /&gt;* jQuery powered JS library for Web page hack(minimizing the changes to generated source code)&lt;br /&gt;* Regexp based code converting tools to apply changes to the generated code&lt;br /&gt;* Diff for one-way update&lt;br /&gt;&lt;br /&gt;Of cause, Zoho won't like my hacks, they want to keep user playing with their hosting service rather than exporting projects to Google AppEngine. But, we all know there will be some RAD tools for AppEngine soon or later. So, why don't Zoho take the chances of becoming a leader of this trend?&lt;br /&gt;&lt;br /&gt;Update: Now, I don't think the AppEngine code generated with Zoho Creator is a serious implementation. I prefer to hang it up before it can handle a real task.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-6401897381402420235?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/6401897381402420235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=6401897381402420235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6401897381402420235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/6401897381402420235'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/02/zoho-creator-appengine-extension.html' title='Zoho Creator AppEngine Extension'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-3071976335854818052</id><published>2009-02-22T00:43:00.000-08:00</published><updated>2009-02-22T01:28:10.018-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fileserver'/><title type='text'>家用文件服务器</title><content type='html'>这两天开始考虑攒个文件服务器了。总的来说作了以下几个方面权衡：&lt;br /&gt;&lt;br /&gt;* 备选功能&lt;br /&gt;** 文件服务&lt;br /&gt;** 网络应用服务&lt;br /&gt;** VM Host&lt;br /&gt;** 视频播放，不要求支持 HD&lt;br /&gt;** DVD Burning&lt;br /&gt;* 系统架构&lt;br /&gt;** Atom&lt;br /&gt;** Athlon BE，据说(http://www.pcpop.com/doc/0/373/373434_4.shtml) AMD 功耗更低&lt;br /&gt;* FS, RAID 策略, 有同学(http://www.tummy.com/journals/entries/jafo_20080705_130814)报告说 FUSE ZFS 能用，还说 RAID-Z 好&lt;br /&gt;* 功耗和噪音，貌似(http://bbs.pcpop.com/070101/781254-1.html)硬盘(3到5块)将是大头&lt;br /&gt;* 机箱，要够大&lt;br /&gt;* 电源，为了硬盘，需要提供至少 200W 的电源&lt;br /&gt;* HDD, 初期至少 SATA x 2 + IDE x 1 (我那闲置了大半年的 600G), 还得要个硬盘架&lt;br /&gt;* DVD-RW，要光雕的&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;配置   品牌型号   数量   单价   选用&lt;br /&gt;*CPU  &lt;br /&gt;AMD Athlon64 X2 BE-2300（散）  1  ￥ 260  &lt;br /&gt;*主板  &lt;br /&gt;梅捷 SY-N73V-RL  1  ￥ 280  &lt;br /&gt;*内存  &lt;br /&gt;金士顿 2GB DDR2 800(窄板)   ￥ 120  &lt;br /&gt;*硬盘  &lt;br /&gt;日立 1TB 7200转 7K1000   ￥ 650  &lt;br /&gt;  显卡  &lt;br /&gt;  ￥  &lt;br /&gt;  声卡  &lt;br /&gt; 1  ￥  &lt;br /&gt;  光驱  &lt;br /&gt;LG 22速光雕锁码刻GH22LP20  1  ￥ 195  &lt;br /&gt;  网卡  &lt;br /&gt; 1  ￥  &lt;br /&gt;  CRT  &lt;br /&gt; 1  ￥  &lt;br /&gt;  LCD  &lt;br /&gt; 1  ￥  &lt;br /&gt;*机箱  &lt;br /&gt;技展 9011  1  ￥ 398  &lt;br /&gt;  电源  &lt;br /&gt;先马 腾雾辉煌版（静音型）ATX-325-6  1  ￥ 148  &lt;br /&gt;  鼠标  &lt;br /&gt; 1  ￥  &lt;br /&gt;  键盘  &lt;br /&gt; 1  ￥  &lt;br /&gt;  键鼠装  &lt;br /&gt; 1  ￥  &lt;br /&gt;  音箱  &lt;br /&gt; 1  ￥  &lt;br /&gt;  散热器  &lt;br /&gt; 1  ￥  &lt;br /&gt;  操作系统  &lt;br /&gt; 1  ￥  &lt;br /&gt;  办公软件  &lt;br /&gt; 1  ￥  &lt;br /&gt;合计金额：2701 元&lt;br /&gt;&lt;br /&gt;硬盘架，&lt;a href="http://item.taobao.com/auction/item_detail-db2-983a0bc3fe00ce99eb86ad49de8a48e3.jhtml"&gt;带热插拔的&lt;/a&gt; 400+，&lt;a href="http://item.taobao.com/auction/item_detail-db2-86d6c69bfabcb33eafdc8ffe4b3e8a79.jhtml"&gt;不带的&lt;/a&gt; 100+。&lt;br /&gt;&lt;br /&gt;看来钱都是花在存储上了。机箱电源还要好好学习一下，据说单相电源省电，但那彪悍的硬盘组恐怕是要三相伺候的。&lt;br /&gt;&lt;br /&gt;3000 RMB 的 File Server ，算是够有诚意了吧。要是放办公室，我就弄个 4U 的机箱，管他多大声呢。&lt;br /&gt;&lt;br /&gt;Update: &lt;br /&gt;* &lt;a href="http://diy.pconline.com.cn/cpu/hq/sz/0902/1558628.html"&gt;有人&lt;/a&gt;说日立那块硬盘功率才 9W，那么我用 100W 的电源就够了？&lt;br /&gt;* 有小朋友在讨论双路电源&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-3071976335854818052?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/3071976335854818052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=3071976335854818052' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3071976335854818052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3071976335854818052'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/02/blog-post.html' title='家用文件服务器'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5892347479669157131</id><published>2009-01-19T07:50:00.000-08:00</published><updated>2009-01-19T09:31:19.409-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='disk'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><title type='text'>Shrinking and Compressing Linux Virtual Image with Linux Host</title><content type='html'>I was always short of disk, because I have several virtual machines with my laptop. The virtual disk sizes grows fast, even the actual disk sizes I saw in the guest machine are much smaller. So, it's really necessary to shrink the disks from time to time. And, I also need a good compressor which can provide better compressing rate.&lt;br /&gt;&lt;br /&gt;Since I run Linux guests in Linux host, it's a little tricky to shrink the disks. After googling and trying several approaches, I got following solutions:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Shrinking with X Based vmware-toolbox&lt;/h3&gt;&lt;br /&gt;vmware-toolbox is easy to use, but it requires X. Of cause, for most of my vms, I don't want a X server in them. So, remote X server helps now. With xauth (Debian package xbase-clients, or Yum package xorg-x11-auth), X forwarding works with SSH:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ssh -X user@vm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then vmware-toolbox can be called, and the window will be forwarded to your desktop.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notice:&lt;/b&gt; vmware-toolbox doesn't support logical volume. Please see the following section for shrinking virtual disk with logical volume.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Shrinking with Command Line&lt;/h3&gt;&lt;br /&gt;If there's no X forwarding for the guest machine, the virtual image can be shrinked with command line also. The brief steps are:&lt;br /&gt;&lt;br /&gt;* Download VMWare Server 2 package and unpack vmware-vdiskmanager from it. I'm still using VMWare Server 1 now, since the browser based client doesn't work well with my Linux. But the vmware-vdiskmanager doesn't provide the feature of disk shrinking.&lt;br /&gt;* Create symbol links for libcrypto.so.0.9.8 and libssl.so.0.9.8 . Assuming the vmware-vdiskmanager is placed in folder /usr/local/bin, then the symbol links are:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo mkdir -p /usr/local/bin/libdir/lib/libcrypto.so.0.9.8/&lt;br /&gt;sudo ln -s /usr/lib/libcrypto.so.0.9.8 /usr/local/bin/libdir/lib/libcrypto.so.0.9.8/libcrypto.so.0.9.8&lt;br /&gt;sudo mkdir -p /usr/local/bin/libdir/lib/libssl.so.0.9.8/&lt;br /&gt;sudo ln -s /usr/lib/libssl.so.0.9.8 /usr/local/bin/libdir/lib/libssl.so.0.9.8/libssl.so.0.9.8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, the new vmware-vdiskmanager with disk shrinking (-p and -k) works.&lt;br /&gt;&lt;br /&gt;Then, shrink the disk:&lt;br /&gt;(Following content are based on http://communities.vmware.com/message/257602 .)&lt;br /&gt;* Power on the guest machine, fill the file system with zero:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;dd if=/dev/zero of=zerofile bs=1024k count=2048&lt;br /&gt;rm zerofile&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And swap partition also (assuming /dev/sda5 is the swap partition):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo swapoff&lt;br /&gt;sudo if=/dev/zero of=/dev/sda5 bs=1024k count=2048&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* Shutdown the virtual machine.&lt;br /&gt;* Mount the virtual drive using the vmware-mount command; e.g.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo vmware-mount.pl debian40server.vmdk 1 -t ext3 /tmp/debian40/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* Using the vmware-vdiskmanager prepare disk for shrinking; e.g. using v: as mounted drive:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo /usr/local/bin/vmware-vdiskmanager -p /tmp/debian40/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* Unmount the drive.&lt;br /&gt;* Shrink the disk (it's recommended to execute the following command with common user, instead of root):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/usr/local/bin/vmware-vdiskmanager -k debian40server.vmdk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, the disk is shrinked.&lt;br /&gt;&lt;br /&gt;If there file system is in a logical volume of the virtual disk, manual operations of LVM are required for the shrinking (based on information available at http://seattlecentral.edu/cgi-bin/cgiwrap/dmartin/moin.cgi/VMware#head-b6e75c6b7ea67c9dd57b2adb91c9367ccaa24bcd and http://www.debuntu.org/how-to-install-ubuntu-over-lvm-filesystem):&lt;br /&gt;&lt;br /&gt;# Make sure the VG in your VM is not the same as any VGs you have anywhere on your host box.&lt;br /&gt;# Stop the VM&lt;br /&gt;# load the nbd (Network Block Device) module into the running kernel&lt;br /&gt;# Make sure you have /dev/nb* (use "MAKEDEV nb" if you don't)&lt;br /&gt;# run "vmware-loop -p filename.vmdk" and note which partition you have your LVM on&lt;br /&gt;# run "vmware-loop filename.vmdk partition-number /dev/nb*" to attach the file to the network block device&lt;br /&gt;# run "lvmdiskscan" to make it re-scan the disks&lt;br /&gt;# run lvscan to see the nice list&lt;br /&gt;# run 'lvchange -ay volgroup' where volgroup is the volume group on your VM (Please try &lt;i&gt;sudo modprobe dm-mod&lt;/i&gt; on "Incompatible libdevmapper" error.)&lt;br /&gt;# run lvscan to see the nice list, this time with your VM's LVs listed as ACTIVE&lt;br /&gt;# Mount and play with LVs&lt;br /&gt;# Then jump to the step of &lt;i&gt;vmware-vdiskmanager -p&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Shrinking with Command Line&lt;/h3&gt;&lt;br /&gt;Then, comes to the second goal: a compressor with better compressing rate. I archived a virtual machine folder with GZIP, BZIP2 and 7Z. Following are the archive files I got:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-rwxrwx---  1 root plugdev 195722873 2009-01-19 20:28 debian40server.7z&lt;br /&gt;-rwxrwx---  1 root plugdev 262460006 2009-01-19 20:29 debian40server.tar.gz&lt;br /&gt;-rwxrwx---  1 root plugdev 229599667 2009-01-19 20:34 debian40server.tar.bz2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Of cause, 7Z provides better compressing rate (and requires much longer compressing time). But, for me, it's worthy when comparing to the disk usage of versions of VM backups and transferring time cost over the network.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5892347479669157131?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5892347479669157131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5892347479669157131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5892347479669157131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5892347479669157131'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/01/shrinking-and-compressing-linux-virtual.html' title='Shrinking and Compressing Linux Virtual Image with Linux Host'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-1423373357689179501</id><published>2009-01-17T11:36:00.000-08:00</published><updated>2009-01-17T11:44:05.806-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='geotag'/><category scheme='http://www.blogger.com/atom/ns#' term='locating'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Web API for Getting Latitude &amp; Longitude with Address or GSM Cell ID</title><content type='html'>I developed a small web application, which provide a Web API for geting latitude and longitude with address or GSM cell ID.&lt;br /&gt;&lt;br /&gt;To use it, just access it with the address or GSM cell ID/lac as parameters in URL:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://marklet.appspot.com/geolocator/cellid?cellid=30559&amp;lac=4471&lt;br /&gt;http://marklet.appspot.com/geolocator/address?addr=北京王府井&amp;of=xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;UTF-8 is supported for parameter &lt;i&gt;addr&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Accepted &lt;i&gt;of&lt;/i&gt;(output format) values:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;text&lt;br /&gt;&lt;li&gt;xml&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This Web API is implemented based on Google Maps service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-1423373357689179501?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/1423373357689179501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=1423373357689179501' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/1423373357689179501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/1423373357689179501'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/01/web-api-for-getting-latitude-longitude.html' title='Web API for Getting Latitude &amp; Longitude with Address or GSM Cell ID'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-501601482877574919</id><published>2009-01-07T23:28:00.000-08:00</published><updated>2009-01-08T00:36:01.275-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><title type='text'>Ubuntu IEs4Linux Installation</title><content type='html'>IEs4Linux is good. I used to access OWA(outlook web access) with Firefox, but OWA provides a very poor UI for browsers other than IE. I tried to provide a faked Agent field, but the page is incompatible with Firefox.&lt;br /&gt;&lt;br /&gt;So, I tried IEs4Linux, and got IE 6 works with Ubuntu and OWA now. But I did found some issues during the installation.&lt;br /&gt;&lt;br /&gt;* Corrupted DCOM98.EXE. Solution:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;./ies4linux --no-gui&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* swflash.cab: no valid cabinets found. Solution: download &lt;a href="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"&gt;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0&lt;/a&gt; manually, place the file in ~/.ies4linux/downloads, and install it again.&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://forum.ubuntu.org.cn/viewtopic.php?f=121&amp;t=178734&amp;start=0"&gt;Beautifying Chinese fonts for Wine.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-501601482877574919?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/501601482877574919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=501601482877574919' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/501601482877574919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/501601482877574919'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/01/ubuntu-ies4linux-installation.html' title='Ubuntu IEs4Linux Installation'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-7483629541040164050</id><published>2009-01-07T01:38:00.000-08:00</published><updated>2009-01-07T03:00:27.954-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='map'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>地图偏移真和谐</title><content type='html'>自己随便拿 GSM Cell ID 做了个 Google Map 跟踪玩，赫然发现地图都便得厉害，差不多800米吧。查了一下，&lt;a href="http://www.williamlong.info/archives/1437.html"&gt;据说&lt;/a&gt;是：“这是国际惯例。大多数政府都规定航拍图必须人工加入位置偏移，不能给真实的GPS信息。这都有算法。”当然，看看后面，不明真相的群众们不会这么接受有XX特色的国际惯例的。&lt;br /&gt;&lt;br /&gt;虽然&lt;a href="http://fisio.cn/google-maps-inaccuracy-fixed.html"&gt;有人&lt;/a&gt;说：“Google 地图手机版图层误差消失。“我试了一下，一般的搜索是没有偏了，可当我查询经纬度(如 39.974496,116.301469)时，还是有的。&lt;br /&gt;&lt;br /&gt;很好，很和谐。广大不明真相的群众都在踊跃修正地图。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-7483629541040164050?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/7483629541040164050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=7483629541040164050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/7483629541040164050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/7483629541040164050'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/01/blog-post.html' title='地图偏移真和谐'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5705005374224985645</id><published>2009-01-03T00:55:00.000-08:00</published><updated>2009-01-07T03:01:11.800-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xwindow'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><title type='text'>Multiple Keys Wireless Mouse for X Windows</title><content type='html'>I bought a Rapoo 7100 wireless mouse weeks ago. It works with Ubuntu without changes of settings. But the multiple keys at left side act as right key and middle key. I tried &lt;a href="http://linuxreviews.org/howtos/xfree/mouse/"&gt;ZAxisMapping of xorg.conf and xmodmap&lt;/a&gt; but it doesn't help. So, I found &lt;a href="http://fedoraproject.org/wiki/Features/EvdevInputDriver"&gt;evdev&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Following are some configuration files I used:&lt;br /&gt;&lt;br /&gt;/etc/hal/fdi/policy/10-x11-input.fdi for enabling hal for evdev:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;device&amp;gt;&lt;br /&gt;    &amp;lt;!-- FIXME: Support tablets too. --&amp;gt;&lt;br /&gt;    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.mouse&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;mouse&amp;lt;/merge&amp;gt;&lt;br /&gt;      &amp;lt;match key=&amp;quot;/org/freedesktop/Hal/devices/computer:system.kernel.name&amp;quot;&lt;br /&gt;             string=&amp;quot;Linux&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;evdev&amp;lt;/merge&amp;gt;&lt;br /&gt;      &amp;lt;/match&amp;gt;&lt;br /&gt;    &amp;lt;/match&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.keys&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;!-- If we're using Linux, we use evdev by default (falling back to&lt;br /&gt;           keyboard otherwise). --&amp;gt;&lt;br /&gt;      &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;keyboard&amp;lt;/merge&amp;gt;&lt;br /&gt;      &amp;lt;match key=&amp;quot;/org/freedesktop/Hal/devices/computer:system.kernel.name&amp;quot;&lt;br /&gt;             string=&amp;quot;Linux&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;evdev&amp;lt;/merge&amp;gt;&lt;br /&gt;      &amp;lt;/match&amp;gt;&lt;br /&gt;    &amp;lt;/match&amp;gt;&lt;br /&gt;  &amp;lt;/device&amp;gt;&lt;br /&gt;&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Disable other input devices for xorg in xorg.conf:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# nvidia-xconfig: X configuration file generated by nvidia-xconfig&lt;br /&gt;# nvidia-xconfig:  version 1.0  (buildmeister@builder26)  Thu Feb 14 18:13:41 PST 2008&lt;br /&gt;&lt;br /&gt;# nvidia-settings: X configuration file generated by nvidia-settings&lt;br /&gt;# nvidia-settings:  version 1.0  (buildmeister@builder26)  Wed Sep 12 14:29:53 PDT 2007&lt;br /&gt;# xorg.conf (xorg X Window System server configuration file)&lt;br /&gt;#&lt;br /&gt;# This file was generated by failsafeDexconf, using&lt;br /&gt;# values from the debconf database and some overrides to use vesa mode.&lt;br /&gt;#&lt;br /&gt;# You should use dexconf or another such tool for creating a "real" xorg.conf&lt;br /&gt;# For example:&lt;br /&gt;#   sudo dpkg-reconfigure -phigh xserver-xorg&lt;br /&gt;&lt;br /&gt;Section "ServerLayout"&lt;br /&gt; Identifier     "Default Layout"&lt;br /&gt; Screen      0  "Screen0" 0 0&lt;br /&gt;#    InputDevice    "Generic Keyboard"&lt;br /&gt;#    InputDevice    "Configured Mouse"&lt;br /&gt;#    InputDevice    "Synaptics Touchpad"&lt;br /&gt; Option  "AutoAddDevices" "off"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Files"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Module"&lt;br /&gt; Load           "glx"&lt;br /&gt; Load           "v4l"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "ServerFlags"&lt;br /&gt; Option         "Xinerama" "0"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;#Section "InputDevice"&lt;br /&gt;#    Identifier     "Generic Keyboard"&lt;br /&gt;#    Driver         "kbd"&lt;br /&gt;#    Option         "CoreKeyboard"&lt;br /&gt;#    Option         "XkbRules" "xorg"&lt;br /&gt;#    Option         "XkbModel" "pc105"&lt;br /&gt;#    Option         "XkbLayout" "us"&lt;br /&gt;#EndSection&lt;br /&gt;&lt;br /&gt;#Section "InputDevice"&lt;br /&gt;#    Identifier     "Configured Mouse"&lt;br /&gt;#    Driver         "mouse"&lt;br /&gt;#    Option         "CorePointer"&lt;br /&gt;#    Option         "Device" "/dev/input/mice"&lt;br /&gt;#    Option         "Protocol" "ImPS/2"&lt;br /&gt;#    Option         "ZAxisMapping" "4 5"&lt;br /&gt;&lt;br /&gt;#    Option         "ZAxisMapping" "6 7"&lt;br /&gt;#    Option "Buttons" "7"&lt;br /&gt;#    Option "ButtonMapping" "1 2 3 6 7 8 9 10 11"&lt;br /&gt;&lt;br /&gt;#    Option         "Emulate3Buttons" "true"&lt;br /&gt;#EndSection&lt;br /&gt;&lt;br /&gt;#Section "InputDevice"&lt;br /&gt;#    Identifier     "Synaptics Touchpad"&lt;br /&gt;#    Driver         "synaptics"&lt;br /&gt;#    Option         "SendCoreEvents" "true"&lt;br /&gt;#    Option         "Device" "/dev/psaux"&lt;br /&gt;#    Option         "Protocol" "auto-dev"&lt;br /&gt;#    Option         "HorizScrollDelta" "0"&lt;br /&gt;#EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt; Identifier     "Failsafe Monitor"&lt;br /&gt; VendorName     "Generic LCD Display"&lt;br /&gt; ModelName      "LCD Panel 1280x800"&lt;br /&gt; HorizSync       31.5 - 50.0&lt;br /&gt; VertRefresh     56.0 - 65.0&lt;br /&gt; Gamma           1&lt;br /&gt; ModeLine       "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync&lt;br /&gt; ModeLine       "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync&lt;br /&gt; ModeLine       "1280x768@60" 80.1 1280 1344 1480 1680 768 769 772 795 -hsync +vsync&lt;br /&gt; ModeLine       "1280x720@60" 74.5 1280 1336 1472 1664 720 721 724 746 -hsync +vsync&lt;br /&gt; ModeLine       "1280x800@60" 83.5 1280 1344 1480 1680 800 801 804 828 -hsync +vsync&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&lt;br /&gt;#     &lt;br /&gt; Identifier     "monitor1"&lt;br /&gt; VendorName     "Plug 'n' Play"&lt;br /&gt; ModelName      "Plug 'n' Play"&lt;br /&gt; Gamma           1&lt;br /&gt; ModeLine       "640x480@60" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt; Identifier     "Monitor0"&lt;br /&gt; VendorName     "Unknown"&lt;br /&gt; ModelName      "Seiko"&lt;br /&gt; HorizSync       30.0 - 75.0&lt;br /&gt; VertRefresh     60.0&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt; Identifier     "Failsafe Device"&lt;br /&gt; Driver         "nvidia"&lt;br /&gt; BoardName      "vesa"&lt;br /&gt; Option         "NoLogo" "true"&lt;br /&gt; BusID          "PCI:1:0:0"&lt;br /&gt; Screen          0&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&lt;br /&gt;#     &lt;br /&gt; Identifier     "device1"&lt;br /&gt; Driver         "nvidia"&lt;br /&gt; BoardName      "vesa"&lt;br /&gt; Option         "NoLogo" "true"&lt;br /&gt; BusID          "PCI:1:0:0"&lt;br /&gt; Screen          1&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt; Identifier     "Videocard0"&lt;br /&gt; Driver         "nvidia"&lt;br /&gt; VendorName     "NVIDIA Corporation"&lt;br /&gt; BoardName      "Quadro NVS 135M"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt; Identifier     "Default Screen"&lt;br /&gt; Device         "Failsafe Device"&lt;br /&gt; Monitor        "Failsafe Monitor"&lt;br /&gt; DefaultDepth    24&lt;br /&gt; SubSection     "Display"&lt;br /&gt;     Virtual     1280 800&lt;br /&gt;     Depth       24&lt;br /&gt;     Modes      "1280x800@60" "1280x720@60" "1280x768@60" "800x600@60" "800x600@56"&lt;br /&gt; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&lt;br /&gt;#     &lt;br /&gt; Identifier     "screen1"&lt;br /&gt; Device         "device1"&lt;br /&gt; Monitor        "monitor1"&lt;br /&gt; DefaultDepth    24&lt;br /&gt; SubSection     "Display"&lt;br /&gt;     Depth       24&lt;br /&gt;     Modes      "640x480@60"&lt;br /&gt; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt; Identifier     "Screen0"&lt;br /&gt; Device         "Videocard0"&lt;br /&gt; Monitor        "Monitor0"&lt;br /&gt; DefaultDepth    24&lt;br /&gt; Option         "TwinView" "0"&lt;br /&gt; Option         "metamodes" "1280x800_60 +0+0; 800x600@60 +0+0"&lt;br /&gt; Option         "NoLogo" "true"&lt;br /&gt; Option         "RenderAccel" "True"&lt;br /&gt; Option         "AddARGBGLXVisuals" "True"&lt;br /&gt; SubSection     "Display"&lt;br /&gt;     Depth       24&lt;br /&gt;     Modes      "nvidia-auto-select"&lt;br /&gt; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Extensions"&lt;br /&gt; Option         "Composite" "Enable"&lt;br /&gt;EndSection&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5705005374224985645?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5705005374224985645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5705005374224985645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5705005374224985645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5705005374224985645'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2009/01/multiple-keys-wireless-mouse-for-x.html' title='Multiple Keys Wireless Mouse for X Windows'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-4166608618387032840</id><published>2008-12-28T18:47:00.000-08:00</published><updated>2009-01-07T03:02:00.253-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='greasemonkey'/><title type='text'>Dynamical Loading Remote Javascript With Greasemonkey</title><content type='html'>&lt;a href="http://userscripts.org/scripts/show/39388"&gt;Kaixin Toolkit for Greasemonkey&lt;/a&gt; is a Greasemonkey user script developed by me. Take a look at the script, you will find it does nothing but loading a remote script.&lt;br /&gt;&lt;br /&gt;Yes. All the real tasks are implemented with the remote script. It means that the feature can be upgraded without reinstall the user script. The dynamic loading feature is provided by GMJSLoader. Actually, it did a little more than that. It exports Greasemnkey API the remote script also.&lt;br /&gt;&lt;br /&gt;Yes. There are some security issue with this feature. Actually, I think the securer way for this feature is to provide a native interface of loading remote script in Greasemonkey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-4166608618387032840?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://userscripts.org/scripts/show/39388' title='Dynamical Loading Remote Javascript With Greasemonkey'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/4166608618387032840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=4166608618387032840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/4166608618387032840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/4166608618387032840'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/12/dynamical-loading-remote-javascript.html' title='Dynamical Loading Remote Javascript With Greasemonkey'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-4303933132202565129</id><published>2008-12-22T01:01:00.000-08:00</published><updated>2009-11-05T06:32:14.228-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>陈升 - 牡丹亭外 歌词</title><content type='html'>&lt;a href="http://www.ting520.com.cn/Word/332095.Html"&gt;陈升 - 牡丹亭外 歌词&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;为救李郎离家园&lt;br /&gt;谁料皇榜中状元&lt;br /&gt;中状元着红袍&lt;br /&gt;帽插宫花好啊好新鲜&lt;br /&gt;李郎一梦已过往&lt;br /&gt;风流人儿如今在何方&lt;br /&gt;从古到今呀说来话&lt;br /&gt;不过是情而已&lt;br /&gt;这人间苦什么&lt;br /&gt;怕不能遇见你&lt;br /&gt;这世界有点假&lt;br /&gt;可我莫名爱上她&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人假正经啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;牡丹亭外雨紛紛&lt;br /&gt;谁是归人说不准&lt;br /&gt;是归人啊你说分明&lt;br /&gt;你把我心放哪儿&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人假正经啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;可我最爱是天然&lt;br /&gt;风流人儿如今在何方&lt;br /&gt;不管是谁啊躲不过&lt;br /&gt;还是情而已&lt;br /&gt;你问我怕什么&lt;br /&gt;怕不能遇见你&lt;br /&gt;是否你走过了我身边&lt;br /&gt;恍恍惚惚一瞬間&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人断了魂啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;为救李郎离家园&lt;br /&gt;谁料皇榜中状元&lt;br /&gt;中状元着红袍&lt;br /&gt;帽插宫花好啊……&lt;br /&gt;好新鲜&lt;br /&gt;为救李郎离家园&lt;br /&gt;谁料皇榜中状元&lt;br /&gt;中状元着红袍&lt;br /&gt;帽插宫花好啊好新鲜&lt;br /&gt;李郎一梦已过往&lt;br /&gt;风流人儿如今在何方&lt;br /&gt;从古到今呀说来话&lt;br /&gt;不过是情而已&lt;br /&gt;这人间苦什么&lt;br /&gt;怕不能遇见你&lt;br /&gt;这世界有点假&lt;br /&gt;可我莫名爱上她&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人假正经啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;牡丹亭外雨紛紛&lt;br /&gt;谁是归人说不准&lt;br /&gt;是归人啊你说分明&lt;br /&gt;你把我心放哪儿&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人假正经啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;可我最爱是天然&lt;br /&gt;风流人儿如今在何方&lt;br /&gt;不管是谁啊躲不过&lt;br /&gt;还是情而已&lt;br /&gt;你问我怕什么&lt;br /&gt;怕不能遇见你&lt;br /&gt;是否你走过了我身边&lt;br /&gt;恍恍惚惚一瞬間&lt;br /&gt;黄粱一梦20年啊&lt;br /&gt;依旧是不懂爱也不懂情&lt;br /&gt;写歌的人断了魂啊&lt;br /&gt;听歌的人最无情&lt;br /&gt;为救李郎离家园&lt;br /&gt;谁料皇榜中状元&lt;br /&gt;中状元着红袍&lt;br /&gt;帽插宫花好啊……&lt;br /&gt;好新鲜&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-4303933132202565129?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ting520.com.cn/Word/332095.Html' title='陈升 - 牡丹亭外 歌词'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/4303933132202565129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=4303933132202565129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/4303933132202565129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/4303933132202565129'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/12/blog-post.html' title='陈升 - 牡丹亭外 歌词'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-3380938128835293502</id><published>2008-11-17T16:51:00.000-08:00</published><updated>2008-11-17T17:57:01.327-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dnshijack'/><category scheme='http://www.blogger.com/atom/ns#' term='telecom'/><category scheme='http://www.blogger.com/atom/ns#' term='hijack'/><title type='text'>南京电信的 DNS 劫持是在路由做的</title><content type='html'>本以为电信是在 DNS Server 动的手脚。可测了一下才发现，南京电信的 DNS Hijack 是在路由做的，53 的 DNS Response 包如果是 NXDOMAIN 就会被换掉。真正的令人发指啊:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# nslookup non-exist.lrfz.com 211.93.80.129&lt;br /&gt;Server:     dns.lnsy.cnuninet.net&lt;br /&gt;Address:    211.93.80.129&lt;br /&gt;&lt;br /&gt;Name:       A.test.test&lt;br /&gt;Addresses:  202.102.113.182, 202.102.113.179, 202.102.113.180, 202.102.113.181&lt;br /&gt;&lt;br /&gt;# nslookup jaisdjfaf.lrfz.com 202.112.20.131&lt;br /&gt;Server:     dns.whnet.edu.cn&lt;br /&gt;Address:    202.112.20.131&lt;br /&gt;&lt;br /&gt;Name:       A.test.test&lt;br /&gt;Addresses:  202.102.113.180, 202.102.113.181, 202.102.113.182, 202.102.113.179&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;也就是说，换 DNS 服务器都不行了，躲都躲不起啊。所以现在技术上可行的 walk around 办法只有用 dnsmasq 了，不过会用这玩意的用户恐怕连万分之一都没有。&lt;br /&gt;&lt;br /&gt;又查了一下上海的(公司光纤接入，ADSL接入还待验证)，发现居然还有点不一样——这是在 DNS 服务器劫持的：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# nslookup non-exist.keotag.com 202.27.184.3 &lt;br /&gt;Server:  202.27.184.3&lt;br /&gt;Address: 202.27.184.3#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;*** Can't find non-exist.keotag.com: No answer&lt;br /&gt;&lt;br /&gt;# nslookup -type=PTR 202.27.184.3 &lt;br /&gt;Server:  192.168.1.11&lt;br /&gt;Address: 192.168.1.11#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;3.184.27.202.in-addr.arpa name = alien.xtra.co.nz.&lt;br /&gt;&lt;br /&gt;Authoritative answers can be found from:&lt;br /&gt;&lt;br /&gt;# nslookup non-exist.keotag.com 202.96.199.132&lt;br /&gt;Server:  202.96.199.132&lt;br /&gt;Address: 202.96.199.132#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;*** Can't find non-exist.keotag.com: No answer&lt;br /&gt;&lt;br /&gt;# nslookup -type=PTR 202.96.199.132&lt;br /&gt;Server:  192.168.1.11&lt;br /&gt;Address: 192.168.1.11#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;132.199.96.202.in-addr.arpa name = nm.sta.net.cn.&lt;br /&gt;&lt;br /&gt;Authoritative answers can be found from:&lt;br /&gt;&lt;br /&gt;# nslookup non-exist.keotag.com 202.96.209.5&lt;br /&gt;Server:  202.96.209.5&lt;br /&gt;Address: 202.96.209.5#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;Name: non-exist.keotag.com&lt;br /&gt;Address: 218.83.175.154&lt;br /&gt;&lt;br /&gt;# nslookup -type=PTR 202.96.209.5&lt;br /&gt;Server:  192.168.1.11&lt;br /&gt;Address: 192.168.1.11#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;5.209.96.202.in-addr.arpa name = ns-px.online.sh.cn.&lt;br /&gt;&lt;br /&gt;Authoritative answers can be found from:&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;果然戏法人人会变，巧妙各有不同。可不管怎么变，都是 DNS 劫持，都是侵害公民的通信自由和安全。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-3380938128835293502?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/3380938128835293502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=3380938128835293502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3380938128835293502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3380938128835293502'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/dns.html' title='南京电信的 DNS 劫持是在路由做的'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-3236383554952210136</id><published>2008-11-15T11:20:00.000-08:00</published><updated>2008-11-15T11:50:42.931-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dnshijack'/><category scheme='http://www.blogger.com/atom/ns#' term='telecom'/><category scheme='http://www.blogger.com/atom/ns#' term='httphijack'/><category scheme='http://www.blogger.com/atom/ns#' term='hijack'/><title type='text'>中国电信 DNS、HTTP 劫持相关链接</title><content type='html'>以下为不完整列表，包括各地消费者对中国电信近几年在中国大陆各省市进行 DNS 和 HTTP 的反应和相应维权文章。本列表将不定期维护。&lt;br /&gt;&lt;br /&gt;我的诉求是，中国电信停止对中国大陆境内 Internet 业务用户的 DNS 和 HTTP 劫持行为，公开道歉和赔偿。由于个人的精力所限，我很可能无法在将这一维权行动独立进行到底。希望我最近所做的工作和提供的信息对其他同样受到中国电信非法侵害的朋友有所帮助。欢迎引用本 Blog 相关文章和提供各地的相关情况。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;yanlb2000与电信114搜索过招，上海市，2007年7月&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://yanlb2000.blogcn.com/diary,8263235.shtml"&gt;1, 缘起&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://yanlb2000.blogcn.com/diary,8319641.shtml"&gt;2, 投诉，投诉，再投诉&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/yanlb2000.blogcn.com/diary,8458433.shtml"&gt;3, 电信的改进&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.west263.com/info/html/fuwuqijishu/anquanfanghu/20080224/26191.html"&gt;中国电信劫持http访问 ADSL强推广告，四川省成都市，2008年2月&lt;/a&gt;？&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.wodidai.com/post/Great-China-Telecom.html"&gt;噢！伟大的中国电信，广东省中山市，2008年5月&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.315ts.net/ts/viewtousu.asp?id=231379"&gt;杭州电信为什么一些域名进行恶意劫持转向互联星空，浙江省杭州市，2008年5月&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dawnh.net/networking/154/shanghai-dns-hijack/"&gt;上海电信DNS劫持事件，上海市，2007年3月&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-3236383554952210136?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/3236383554952210136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=3236383554952210136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3236383554952210136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/3236383554952210136'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/dnshttp_15.html' title='中国电信 DNS、HTTP 劫持相关链接'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-8201697399281409842</id><published>2008-11-14T19:33:00.000-08:00</published><updated>2008-11-14T19:44:51.315-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenWRT'/><title type='text'>OpenWRT NAS Watchdog</title><content type='html'>I set up a WDS network with two OpenWRT powered Wifi routers in my apartment. It was found soon that the client router, which has less memory and less services, breaks several time every day. Today, I found that the nas process crashed. Without check the patches I found at OpenWRT dev web (https://dev.openwrt.org/ticket/164, https://dev.openwrt.org/browser/trunk/package/madwifi/patches/111-wds_fix_PR_914.patch?rev=5903), which are quite old (I'm using the last version WhiteRussian), I just implemented a cron job watchdog with shell:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# /usr/local/bin/nas_watchdog&lt;br /&gt;&lt;br /&gt;pid="$(cat /var/run/nas.lan.pid 2&amp;gt;&amp;amp;-)"&lt;br /&gt;[ -n "$pid" -a -d "/proc/$pid" ] &amp;amp;&amp;amp; exit 0&lt;br /&gt;&lt;br /&gt;echo "Restarting WPA ..."&lt;br /&gt;/etc/init.d/S41wpa&lt;br /&gt;exit 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And my crontab:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;*/2 * * * * /usr/local/bin/nas_watchdog&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-8201697399281409842?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/8201697399281409842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=8201697399281409842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8201697399281409842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/8201697399281409842'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/openwrt-nas-watchdog.html' title='OpenWRT NAS Watchdog'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5429121852017956406</id><published>2008-11-14T18:37:00.000-08:00</published><updated>2008-11-14T19:45:54.339-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dnshijack'/><category scheme='http://www.blogger.com/atom/ns#' term='telecom'/><category scheme='http://www.blogger.com/atom/ns#' term='httphijack'/><category scheme='http://www.blogger.com/atom/ns#' term='hijack'/><title type='text'>中国电信 DNS、HTTP 劫持投诉摘要</title><content type='html'>中国电信 DNS、HTTP 劫持越来越猖獗。对于这一破坏公民通信自由和安全的行为，我正在投诉。以下为最近的相关记录，并将持续更新。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;GET / HTTP/1.1&lt;br /&gt;Host: www.scriblnotes.com&lt;br /&gt;User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3&lt;br /&gt;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;Accept-Language: zh-cn,zh-tw;q=0.8,en-us;q=0.5,en;q=0.3&lt;br /&gt;Accept-Encoding: gzip,deflate&lt;br /&gt;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;Keep-Alive: 300&lt;br /&gt;Connection: keep-alive&lt;br /&gt;&lt;br /&gt;HTTP/1.1 302 Object moved&lt;br /&gt;Location: http://221.231.148.194/proxy.html?e=201eb54898bc6406OxhdeCjBoCkw_T7gZm3IwrYlOB3v6e1loxkWgx7nOe3WB36lPv0wfijr7vrvG0HLOe0WgbHgb0kJGi66m3pt_8DBmP3~RCHnFprvrrH6sTUJySOlbMkNqBOg0S3CH01R0Pzx&lt;br /&gt;Content-Length: 20&lt;br /&gt;Content-Type: text/html&lt;br /&gt;Connection: close&lt;br /&gt;Expires: 0&lt;br /&gt;Cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt; ... &amp;lt;/body&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# nslookup jaidfjiadsf.com&lt;br /&gt;Server:  218.2.135.1&lt;br /&gt;Address: 218.2.135.1#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;Name: A.test.test&lt;br /&gt;Address: 202.102.113.181&lt;br /&gt;Name: A.test.test&lt;br /&gt;Address: 202.102.113.182&lt;br /&gt;Name: A.test.test&lt;br /&gt;Address: 202.102.113.179&lt;br /&gt;Name: A.test.test&lt;br /&gt;Address: 202.102.113.180&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#nslookup&lt;br /&gt;&amp;gt; set type=PTR&lt;br /&gt;&amp;gt; 218.2.135.1&lt;br /&gt;Server:  218.2.135.1&lt;br /&gt;Address: 218.2.135.1#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;1.135.2.218.in-addr.arpa name = a.center-dns.jsinfo.net.&lt;br /&gt;&lt;br /&gt;Authoritative answers can be found from:&lt;br /&gt;2.218.in-addr.arpa nameserver = ns.ptt.js.cn.&lt;br /&gt;2.218.in-addr.arpa nameserver = ns.jsinfo.net.&lt;br /&gt;ns.jsinfo.net internet address = 221.228.255.2&lt;br /&gt;ns.ptt.js.cn internet address = 218.2.135.2&lt;br /&gt;&amp;gt; 61.147.37.1&lt;br /&gt;Server:  218.2.135.1&lt;br /&gt;Address: 218.2.135.1#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;1.37.147.61.in-addr.arpa name = d.center-dns.jsinfo.net.&lt;br /&gt;&lt;br /&gt;Authoritative answers can be found from:&lt;br /&gt;147.61.in-addr.arpa nameserver = ns.jsinfo.net.&lt;br /&gt;147.61.in-addr.arpa nameserver = ns.ptt.js.cn.&lt;br /&gt;ns.jsinfo.net internet address = 221.228.255.2&lt;br /&gt;ns.ptt.js.cn internet address = 218.2.135.2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;11月14日，我打南京 10000 投诉了 DNS 劫持问题。一位男性工作人员很耐心地询问了具体情况(我当时提供的例子为 www.keotag.com)，并表示将向上级反应情况。随后他打电话给我并建议我使用 61.147.37.1 做 DNS 服务器，但并未解释 在 218.2.135.1 进行的 DNS 劫持行为。&lt;br /&gt;&lt;br /&gt;11月15日，我再次拨打南京 10000 投诉了 HTTP 劫持问题。一位女性工作人员接了电话，未询问具体情况，仅表示将安排相关人员与我联系。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5429121852017956406?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5429121852017956406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5429121852017956406' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5429121852017956406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5429121852017956406'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/dnshttp.html' title='中国电信 DNS、HTTP 劫持投诉摘要'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-2244182603595111713</id><published>2008-11-06T09:44:00.000-08:00</published><updated>2008-11-06T11:48:36.636-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html5lib'/><category scheme='http://www.blogger.com/atom/ns#' term='lxml'/><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>HTML XPath/XSLT Access Example</title><content type='html'>In the comments to &lt;a href="http://www.lrfz.com/2008/08/html-parser.html"&gt;a previous post of mine&lt;/a&gt;, Uche Ogbuji mentioned that there's an implementation of robust XPath and XSLT solution for HTML with html5lib + amara2. I tried &lt;a href="http://wiki.xml3k.org/Amara2/Seven_days/2"&gt;the sample he provided&lt;/a&gt;. With a quick bug fix, it works.&lt;br /&gt;&lt;br /&gt;Amara is based on 4suite, which is not supported by Google App Engine now. So, I turned to look for a pure Python solution, and found lxml + html5lib. Following is a simple example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import lxml.etree&lt;br /&gt;import html5lib&lt;br /&gt;import urllib&lt;br /&gt;&lt;br /&gt;p = html5lib.HTMLParser(tree=html5lib.treebuilders.getTreeBuilder("etree",&lt;br /&gt;                                                                 lxml.etree, fullTree=True))&lt;br /&gt;f=urllib.urlopen('http://www.tudou.com/playlist/id/4527368/')&lt;br /&gt;t=p.parse(f)&lt;br /&gt;f.close()&lt;br /&gt;&lt;br /&gt;container=t.xpath("//div[@class='programs fix']/ancestor::*[1]")[0]&lt;br /&gt;lxml.etree.tostring(container)&lt;br /&gt;programs=t.xpath("//div[@class='programs fix']")[0]&lt;br /&gt;&lt;br /&gt;fxsl=open('tudou.xsl')&lt;br /&gt;xslt_doc = lxml.etree.parse(fxsl)&lt;br /&gt;fxsl.close()&lt;br /&gt;transform = lxml.etree.XSLT(xslt_doc)&lt;br /&gt;lxml.etree.tostring(transform(programs))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tudou.com/playlist/id/4527368/"&gt;HTML file&lt;/a&gt; used in above example.&lt;br /&gt;&lt;br /&gt;XSL file used in above example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0"&lt;br /&gt;  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;&lt;br /&gt;  &amp;lt;xsl:template match='div'&amp;gt;&lt;br /&gt;    &amp;lt;html&amp;gt;&lt;br /&gt;      &amp;lt;body&amp;gt;&lt;br /&gt;        &amp;lt;h1&amp;gt;&amp;lt;xsl:value-of select="h2" /&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;        &amp;lt;ul&amp;gt;&lt;br /&gt;          &amp;lt;xsl:for-each select='div/div[@class="pack pack_clip"]'&amp;gt;&lt;br /&gt;            &amp;lt;li&amp;gt;&lt;br /&gt;              &amp;lt;xsl:value-of select="ul/li[1]/a/@title" /&amp;gt;&lt;br /&gt;            &amp;lt;/li&amp;gt;   &lt;br /&gt;          &amp;lt;/xsl:for-each&amp;gt; &lt;br /&gt;        &amp;lt;/ul&amp;gt;&lt;br /&gt;      &amp;lt;/body&amp;gt;&lt;br /&gt;    &amp;lt;/html&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-2244182603595111713?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/2244182603595111713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=2244182603595111713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/2244182603595111713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/2244182603595111713'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/html-xpath-access-example.html' title='HTML XPath/XSLT Access Example'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1441867072196612775.post-5318821665213376016</id><published>2008-11-05T07:47:00.000-08:00</published><updated>2008-11-13T13:21:17.829-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>RFC 1123 Datetime Parsing with Google App Engine</title><content type='html'>Since datetime.datetime.strptime() support RFC 1123 datetime format, which is used in MIME headers for mail protocols and HTTP, with limited timezones (i.e. UTC, GMT, and local timezone of the host). With the following code, ValueError will be raised on time strings of any other timezones.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def _pdatetime(s):&lt;br /&gt;    return datetime.strptime(s, '%a, %d %b %Y %H:%M:%S %Z')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;With the help of module email and time, this issue was walked around:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import datetime, email, time&lt;br /&gt;&lt;br /&gt;def _pdatetime(s):&lt;br /&gt;    return datetime.strptime(&lt;br /&gt;        time.strftime('%a, %d %b %Y %H:%M:%S %Z',&lt;br /&gt;                      time.gmtime(email.Utils.mktime_tz(email.Utils.parsedate_tz( s )))),&lt;br /&gt;        '%a, %d %b %Y %H:%M:%S %Z')&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1441867072196612775-5318821665213376016?l=www.lrfz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/5318821665213376016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1441867072196612775&amp;postID=5318821665213376016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5318821665213376016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1441867072196612775/posts/default/5318821665213376016'/><link rel='alternate' type='text/html' href='http://www.lrfz.com/2008/11/rfc-1123-datetime-parsing-with-google.html' title='RFC 1123 Datetime Parsing with Google App Engine'/><author><name>Yale Huang</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14545690113333410676'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>