<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dongsheng&#039;s thoughts</title>
	<atom:link href="http://log.dongsheng.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://log.dongsheng.org</link>
	<description></description>
	<lastBuildDate>Sat, 19 May 2012 13:25:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Move on</title>
		<link>http://log.dongsheng.org/2012/05/18/move-on/</link>
		<comments>http://log.dongsheng.org/2012/05/18/move-on/#comments</comments>
		<pubDate>Fri, 18 May 2012 12:58:05 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[perth]]></category>
		<category><![CDATA[sydney]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=137</guid>
		<description><![CDATA[四月中旬决定开始找工作，心里早做好了打持久战的准备。昏天暗地的找了两周，本来还有点忐忑，到后来发现澳洲真的是缺人，工作机会很多。最后小小的纠结了下最后两个Offer就拍板决定去悉尼了。五月初至今，处理掉了我的大部分家当，下周五，我就真的Move on了。 佩斯这个城市，我曾一度想也许我就属于这里了，有个稳定的工作过过舒适安定的生活，但这样的计划在哪里不能实现？为什么一定要是这里？想看世界的眼才刚刚张开，绝不要被软弱打败。 跟朋友谈起，说你也太洒脱了吧，不到一个月就做了个重大决定？其实从来没觉得离开这个城市去另一个会是很难的事，我在这里没有什么牵挂（不知算不算可悲？），其它的东西都是身外物，我早就想Living with less了。唯一不安的是心里软弱的一面：未来会是怎样？新的工作，完全不同的生活方式，能承受的了吗？想下以前的日子就没什么顾虑了，怎样也不会比四年前我一菜鸟提着两个行李包刚来澳洲还要难吧？那条路都走下了，我不会越走越难的。重要的是我一定要成长下去，我要发挥更大的价值，绝不要满足现状。 以后还会怀念这里的人和这段时光吧，现在，还要义无反顾的走下去。]]></description>
			<content:encoded><![CDATA[<p>四月中旬决定开始找工作，心里早做好了打持久战的准备。昏天暗地的找了两周，本来还有点忐忑，到后来发现澳洲真的是缺人，工作机会很多。最后小小的纠结了下最后两个Offer就拍板决定去悉尼了。五月初至今，处理掉了我的大部分家当，下周五，我就真的Move on了。</p>
<p>佩斯这个城市，我曾一度想也许我就属于这里了，有个稳定的工作过过舒适安定的生活，但这样的计划在哪里不能实现？为什么一定要是这里？想看世界的眼才刚刚张开，绝不要被软弱打败。</p>
<p>跟朋友谈起，说你也太洒脱了吧，不到一个月就做了个重大决定？其实从来没觉得离开这个城市去另一个会是很难的事，我在这里没有什么牵挂（不知算不算可悲？），其它的东西都是身外物，我早就想<a href="http://log.dongsheng.org/2011/09/27/living-with-less-1/">Living with less</a>了。唯一不安的是心里软弱的一面：未来会是怎样？新的工作，完全不同的生活方式，能承受的了吗？想下以前的日子就没什么顾虑了，怎样也不会比四年前我一菜鸟提着两个行李包刚来澳洲还要难吧？那条路都走下了，我不会越走越难的。重要的是我一定要成长下去，我要发挥更大的价值，绝不要满足现状。</p>
<p>以后还会怀念这里的人和这段时光吧，现在，还要义无反顾的走下去。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/05/18/move-on/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>永居准签</title>
		<link>http://log.dongsheng.org/2012/04/14/pr-granted/</link>
		<comments>http://log.dongsheng.org/2012/04/14/pr-granted/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 19:48:26 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=116</guid>
		<description><![CDATA[四月十日，梦寐以求的永居签证终于获批了，由于我的雇主提名和签证申请是分开做的，加在一起，整整等了九个月，这期间的焦虑和不安，终于清算了。 早上九点中介打来电话说分到CO了，问我补中国的无犯罪证明，可我是在申请交上以后才回国的，这还算？心里隐约觉得碰上个麻烦的CO了，忙催我爸去办无刑然后DHL过来，另一方面，中介发邮件向CO解释了情况，看CO怎么回应，然后……下午四点，中介电话打来：准了……这就批下来了？！老子都准备好打持久战了。三千多的申请费，他们就干了一天的活，移民局真是个好生意。 这张红卡，给了我四年来一直得不到的真正自由，如今，我终于可以去我想去的城市，选择我热爱的工作，重新开始在这片土地上寻找我的归属，如今，自己的未来终于回到自己手里，生活又翻开了新的一页。]]></description>
			<content:encoded><![CDATA[<p>四月十日，梦寐以求的永居签证终于获批了，由于我的雇主提名和签证申请是分开做的，加在一起，整整等了九个月，这期间的焦虑和不安，终于清算了。</p>
<p>早上九点中介打来电话说分到CO了，问我补中国的无犯罪证明，可我是在申请交上以后才回国的，这还算？心里隐约觉得碰上个麻烦的CO了，忙催我爸去办无刑然后DHL过来，另一方面，中介发邮件向CO解释了情况，看CO怎么回应，然后……下午四点，中介电话打来：准了……这就批下来了？！老子都准备好打持久战了。三千多的申请费，他们就干了一天的活，移民局真是个好生意。</p>
<p>这张红卡，给了我四年来一直得不到的真正自由，如今，我终于可以去我想去的城市，选择我热爱的工作，重新开始在这片土地上寻找我的归属，如今，自己的未来终于回到自己手里，生活又翻开了新的一页。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/04/14/pr-granted/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Understanding blocks in C</title>
		<link>http://log.dongsheng.org/2012/04/07/understanding-blocks-in-c/</link>
		<comments>http://log.dongsheng.org/2012/04/07/understanding-blocks-in-c/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 17:19:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[blocks]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[objc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=142</guid>
		<description><![CDATA[Blocks was introduced with grand central dispatch threading in iOS and Mac OS X, it&#8217;s like lambda in Python or [...]]]></description>
			<content:encoded><![CDATA[<p>Blocks was introduced with grand central dispatch threading in iOS and Mac OS X, it&#8217;s like lambda in Python or closure in JavaScript, it greatly improved the flexibility of objc. However, it&#8217;s not in C standard, Apple implemented it in clang compiler.</p>
<p>With blocks, developers can do some interesting stuffs in C, such as:</p>
<h4>Anonymous function</h4>
<pre>
^(void) {
    printf("This is a anonymous function call");
}();
</pre>
<p>We often see the technique in JavaScript framework or bookmarklet, to avoid return value or namespace collision, but not in C <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<h4>Nested function and inline function</h4>
<p>You can actually define a function in a function:</p>
<pre>
typedef int (^Block)(int);

Block block_generator() {
    return ^(int a) {
        return a;
    };
}

Block bb = block_generator();
bb(121);
</pre>
<p>This technique is quite useful to provide callback function, take qsort for example, on Mac, there are two qsort functions allowing devs to provide a compare callback:</p>
<pre>
void qsort_b(void *base, size_t nel, size_t width, int (^compar)(const void *, const void *));
void qsort_r(void *base, size_t nel, size_t width, void *thunk, int (*compar)(void *, const void *, const void *));
</pre>
<p>qsort_r takes a function pointer, so you have to create a function then assign the pointer here, but with blocks, developers can create compare callback inline. It&#8217;s more straight forward.</p>
<p>In Cocoa framework, blocks are being widely used in GCD, animation, error handing, enumeration, we will see more APIs make use of this powerful features soon, such as NSURLConnection, so we don&#8217;t need to use delegate methods any more, blocks are much better. (cannot wait? try <a href="https://github.com/zwaldowski/BlocksKit">this</a>)</p>
<h4>Blocks has access to other scope</h4>
<p>By adding __block to variable declaration, blocks will be able to change variables.</p>
<pre>
__block int statusCode = 0;
int anotherCode = 9;
^(void) {
    printf("Status code %d", statusCode);
    // Change variable in bock context
    statusCode = 10;
    // Cannot do this
    // anotherCode = 999;
    // but...
    printf("another code %d", anotherCode);
}();
printf("Changed status code %d", statusCode);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/04/07/understanding-blocks-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick start: TTPhotoViewController (three20)</title>
		<link>http://log.dongsheng.org/2012/04/06/quick-start-ttphotoviewcontroller-three20/</link>
		<comments>http://log.dongsheng.org/2012/04/06/quick-start-ttphotoviewcontroller-three20/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 05:02:21 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[three20]]></category>
		<category><![CDATA[tornado]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=140</guid>
		<description><![CDATA[It&#8217;s hard to develop an iOS app quickly, so many details to be taken care of even a very simple [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s hard to develop an iOS app quickly, so many details to be taken care of even a very simple UITableView based app, for example: variable table height, asynchronous loading, model reloading&#8230;</p>
<p>Three20 is one of the answers to these problems, it has a lot of useful components: enhanced table view, text fields, labels, buttons, photo browsers and a lot helper classes, on the other hand it has some major cons, such as difficult to integrate and customise, tight couple&#8230;the worst one would be lacking documentations, a project like this without official documentation and tutorials is often a deal breaker. The samples comes with three20 is your best bet to understand how to use the components, but there is no inline comments, you have to figure out what are the classes by looking in to the source code&#8230;</p>
<p>Having said all the cons, it&#8217;s great time saver once you get to know it, lately, I decided to build an album app for iPad, so I can easily browse my family photos remotely, I quickly wrote a python script imported all photo path names in MongoDB, organised by directory names, then I created a simple <a href="http://www.tornadoweb.org/">tornado</a> application, which could list all photos in certain directory in JSON, it has other handlers to process thumbnails/file serving etc. This only took me an hour or so (thanks to Python). But when comes to develop an app to consume the contents, it&#8217;s not easy. Firstly, I need to write a class to fetch and parse photo list, easy, NSURLRequest and NSJSONSerialization can do the job, then I need to create a thumbnail browser and photo browser view, I will need to a high customised UITableView to display thumbnails in grid view, table cell has to be internet aware, it has to download images asynchronously. A customised UIScrollView to display large size photos and download them asynchronously, and data source must be easy to reload, so photo viewer and thumbnails browser can reflect the changes instantly. These requirements could easily consume me a week if only use native components, but come on, it&#8217;s just a small app I wouldn&#8217;t submit to apple store!</p>
<p>I remember there is a photo album view in TTCatalog project from three20, I probably should give it a try.</p>
<ol>
<li>I created an app called &#8220;AlbumHD&#8221;, to integrate with three20, I have to run &#8220;ttmodule.py&#8221; on my project file:
<pre>
three20/src/scripts/ttmodule.py -p AlbumHD/AlbumHD.xcodeproj:build_target_name Three20 --xcode-version=4
</pre>
<p>You will have to change build_target_name to the real project name
</li>
<li>
In AppDelegate.m, add three20 navigator after [self.window makeKeyAndVisible]; it should look like this:</p>
<pre>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    TTNavigator *navigator = [TTNavigator navigator];
    navigator.persistenceMode = TTNavigatorPersistenceModeNone;
    [navigator.URLMap from:@"tt://album/"     toViewController:[AlbumViewController class]];
    [navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://album/"]];
    return YES;
}
</pre>
<p>navigator is a three20 module to help easily switch between view controllers without push/pop from navigation controller, so you register your view controller to navigator.URLMap, then you can access it by a short url alike identifier.
</li>
<li>
The AlbumViewController class we referred above hasn&#8217;t been defined yet, now we create one:</p>
<pre>
@interface AlbumViewController : TTPhotoViewController <TTURLRequestDelegate>
@end
</pre>
<p>So this will be the main view controller in this app, TTPhotoViewController is the three20 photo browser components, it has all the UI elements and default actions we need, we just need to feed it with the photo list.
</li>
<li>
In AlbumViewController.m, we override -(void)viewDidLoad:</p>
<pre>
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.photoSource = [[PhotoSource alloc] init];
}
</pre>
<p>PhotoSource is a subclass of TTURLRequestModel, it takes of loading photo list and response request from TTPhotoViewController, TTPhotoViewController may asks questions like: how many photos in this data source? what&#8217;s the max index? what&#8217;s the photo in index X? These questions are defined in TTPhotoSource protocol. By subclass TTURLRequestModel, PhotoSource has ability to load remote resource, and it knows if the resource is being loaded or already loaded.</p>
<p>Here is list of PhotoSource implmentation code:</p>
<pre>
@implementation PhotoSource
@synthesize title = _title;
#pragma mark init
- (id)init {
    if (self = [super init]) {
        _type = PhotoSourceNormal;
        _title = @"";
        _photos = [NSMutableArray array];
    }
    return self;
}
- (void)loadPhotos {
    [_delegates perform:@selector(modelDidStartLoad:) withObject:self];
    _loadingRequest = [TTURLRequest requestWithURL: @"http://10.1.1.100/album/trip" delegate: self];
    _loadingRequest.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    TTURLJSONResponse* response = [[TTURLJSONResponse alloc] init];
    _loadingRequest.response = response;
    [_loadingRequest send];
}
#pragma mark TTModel
- (void)load:(TTURLRequestCachePolicy)cachePolicy more:(BOOL)more {
    if (cachePolicy &#038; TTURLRequestCachePolicyNetwork) {
        [self loadPhotos];
    }
}
- (void)requestDidFinishLoad:(TTURLRequest*)request {
    TTURLJSONResponse* response = request.response;
    [_photos removeAllObjects];
    NSArray *list = response.rootObject;
    Photo *p;
    int i = 0;
    for (NSString *url in list) {
        p = [[Photo alloc] initWithURL:url];
        p.index = i;
        p.photoSource = self;
        [_photos addObject:p];
        i++;
    }
    [super requestDidFinishLoad:request];
    [_delegates perform:@selector(modelDidFinishLoad:) withObject:self];
}
#pragma mark TTPhotoSource
- (NSInteger)numberOfPhotos {
    return _photos.count;
}
- (NSInteger)maxPhotoIndex {
    return _photos.count-1;
}
- (id<TTPhoto>)photoAtIndex:(NSInteger)photoIndex {
    if (photoIndex < _photos.count) {
        id photo = [_photos objectAtIndex:photoIndex];
        if (photo == [NSNull null]) {
            return nil;
        } else {
            return photo;
        }
    } else {
        return nil;
    }
}
@end
</pre>
<p>Note, Photo class is conforming TTPhoto protocol.
</li>
<li>This is pretty much how to build a photo album app using Three20, the code is based on TTCatalog example, I made necessary changes to allow it reload list from my tornado app.</li>
</ol>
<p>There are other changes and tips, I listed a few here:</p>
<ul>
<li>For large photos, TTPhotoView uses UIViewContentModeScaleAspectFill contentMode, so photos are overlapped, by avoiding hacking three20 code, I cloned TTPhotoViewController to use my customised TTPhotoView, that's the problem of tight couple</li>
<li>To load another photo set, assign a new loading url to PhotoSource, and call [TTPhotoViewController reload]</li>
<li>There is a slide show button defined in TTPhotoViewController but not added to UIToolBar, don't why, in my cloned TTPhotoViewController, I added there, I added another button to choose album.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/04/06/quick-start-ttphotoviewcontroller-three20/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP 5.4 released</title>
		<link>http://log.dongsheng.org/2012/03/06/php-5-4-released/</link>
		<comments>http://log.dongsheng.org/2012/03/06/php-5-4-released/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 16:00:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=136</guid>
		<description><![CDATA[PHP 5.4 just released a few days ago, it introduced new features I quite like: Short array syntax $langs = [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 5.4 just released a few days ago, it introduced new features I quite like:</p>
<ol>
<li>Short array syntax
<pre>
$langs = ["php", "python", "lua"];
$person = ["firstname" => "Dongsheng", "lastname" => "Cai"];
</pre>
<p>I wish to see short class syntax, not sure how it will look like.
</li>
<li>&#8220;&lt;?=&#8221; is officially available all the time, there was an argument wether or not it should be used in project due to the short tag option in php.ini, now it&#8217;s out of question.</li>
<li><a href="http://www.php.net/manual/en/session.upload-progress.php">Session upload progress</a>, I will give it a try later</li>
<li><a href="http://au.php.net/traits">Traits</a> to ease the limitations of single-inheritance</li>
<li>Build-in web server! Start it using `php -S localhost:8080` command, this makes testing/debugging easier&#8230;a little bit</li>
<li>Massive performance improvement</li>
<li>No more safe mode, magic quotes, register_globals and allow call time pass reference</li>
</ol>
<p>I compiled it on Lion 10.7, my configure is here: <a href="https://gist.github.com/1978565">https://gist.github.com/1978565</a></p>
<p>Notes</p>
<p>- pcre library must be update-to-date, otherwise, some pattern modifiers won&#8217;t be available in php.<br />
- libjpeg isn&#8217;t installed on OS X, I installed it by <a href="https://github.com/mxcl/homebrew">homebrew</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/03/06/php-5-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS工程文件里的的Localizable.strings</title>
		<link>http://log.dongsheng.org/2012/01/19/localizable-strings/</link>
		<comments>http://log.dongsheng.org/2012/01/19/localizable-strings/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 08:39:25 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=131</guid>
		<description><![CDATA[要写个自动化生成iOS语言文件的PHP脚本，用vim打开Localizable.strings发现全是乱码，还怀疑是苹果搞出来的特殊二进制文件，没想到用TextWrangler打开完全没有问题，这个文件是小头的UTF-16文件，带BOM头。这样问题就好解决了，用PHP生成文件内容，然后用mbstring转换成UTF-16加上个BOM头就成，但实验了一上午，生出来的文件总是乱码，怀疑是mbstring的问题，然后换成用iconv转码竟然就没问题了，上一小段代码： $bom = chr(255) . chr(254); $string = "\"" . $key . "\"" . " = \"" . $value . [...]]]></description>
			<content:encoded><![CDATA[<p>要写个自动化生成iOS语言文件的PHP脚本，用vim打开Localizable.strings发现全是乱码，还怀疑是苹果搞出来的特殊二进制文件，没想到用TextWrangler打开完全没有问题，这个文件是小头的UTF-16文件，带BOM头。这样问题就好解决了，用PHP生成文件内容，然后用mbstring转换成UTF-16加上个BOM头就成，但实验了一上午，生出来的文件总是乱码，怀疑是mbstring的问题，然后换成用iconv转码竟然就没问题了，上一小段代码：</p>
<pre>
    $bom = chr(255) . chr(254);
    $string = "\"" . $key . "\"" . " = \"" . $value . "\";\n";
    $text = iconv('UTF-8', 'UTF-16', $string);
    file_put_contents('Localizable.strings', $text);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2012/01/19/localizable-strings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 4S升级记</title>
		<link>http://log.dongsheng.org/2011/10/19/upgrade-to-iphone-4s/</link>
		<comments>http://log.dongsheng.org/2011/10/19/upgrade-to-iphone-4s/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 14:42:51 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone4s]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=129</guid>
		<description><![CDATA[之前跟朋友讲以后再也不签手机合约了，一方面要锁两年，中间想升级一下麻烦，另一方面是算算两年下来的花费并不少，只不过分散到24个月里看起来比直接买便宜很多，其实是相当于分期付款，比单买手机还是贵。所以决定以后有喜欢的手机就直接买了，然后买个便宜的预付费卡（比如Live connected）就成。 但苹果店火爆的销售情况严重打击了我的决心，网上预订更是拖到一到两周才能发货，然后到Whirlpool看到不少人分享从Vodafone，Three，Telstra签下的相当诱人的计划，足迹上更是有人整理出了机经。我算了下，要是签个$29+$5的计划，两年下来，相当于消费$816，还是带话费的，直接买iPhone则是$799，显然签约更划算。 于是打了第一个电话，热线等了整整四十分钟终于通了，惊奇的发现接电话的不是三哥了，澳洲口音，侃了半天这哥们就是不肯松口，说4S非常火爆，不能给折扣，最多一个月免费，这就是最大让步了。看来多说无益，于是说谢谢挂了电话，想改天再试，这是周六的事。 周日打了第二个电话，这次整整等了一个小时，一边上网一边等电话接通。这次还是澳洲口音，这哥们很牛逼，一上来就跟我说签4S完全没有折扣，我说那昨天怎么给我折扣了，还有这么多人拿到更好的deal，我问他难道是我在撒谎？哥们牛逼的说没有，但4S太畅销就是不能给你折扣，我很忙没空跟你讨论这个，我说我tmd更忙，这电话让我等了一个小时！说完挂了，这么牛逼的客服还第一次遇到，周一一定投诉这货。然后跑到Whirlpool看了一下，发现不少人遇到这情况了，看来Three那边是统一口径了。 今天打了第三个电话，打算干两件事，一是投诉，二是停掉合约，然后签Telstra的4S计划，电话过去这次变成了“熟悉”的印度口音，听说我要退网，三哥问我为什么，就把前面提到那货骂的狗血淋头，这个三哥人品明显很好，马上offer我每月$10的credit，这样算下来相当于$29 cap的加$5的handset fee，或者$49 cap无handset fee，终于要到了自己满意的折扣。可能再过一周4S就到手了]]></description>
			<content:encoded><![CDATA[<p>之前跟朋友讲以后再也不签手机合约了，一方面要锁两年，中间想升级一下麻烦，另一方面是算算两年下来的花费并不少，只不过分散到24个月里看起来比直接买便宜很多，其实是相当于分期付款，比单买手机还是贵。所以决定以后有喜欢的手机就直接买了，然后买个便宜的预付费卡（比如<a href="http://liveconnected.com.au/">Live connected</a>）就成。</p>
<p>但苹果店火爆的销售情况严重打击了我的决心，网上预订更是拖到一到两周才能发货，然后到<a href="http://forums.whirlpool.net.au/forum/128">Whirlpool</a>看到不少人分享从Vodafone，Three，Telstra签下的相当诱人的计划，足迹上更是有人整理出了<a href="http://www.oursteps.com.au/bbs/viewthread.php?tid=407805">机经</a>。我算了下，要是签个$29+$5的计划，两年下来，相当于消费$816，还是带话费的，直接买iPhone则是$799，显然签约更划算。</p>
<p>于是打了第一个电话，热线等了整整四十分钟终于通了，惊奇的发现接电话的不是三哥了，澳洲口音，侃了半天这哥们就是不肯松口，说4S非常火爆，不能给折扣，最多一个月免费，这就是最大让步了。看来多说无益，于是说谢谢挂了电话，想改天再试，这是周六的事。</p>
<p>周日打了第二个电话，这次整整等了<strong>一个小时</strong>，一边上网一边等电话接通。这次还是澳洲口音，这哥们很牛逼，一上来就跟我说签4S完全没有折扣，我说那昨天怎么给我折扣了，还有这么多人拿到更好的deal，我问他难道是我在撒谎？哥们牛逼的说没有，但4S太畅销就是不能给你折扣，我很忙没空跟你讨论这个，我说我tmd更忙，这电话让我等了一个小时！说完挂了，这么牛逼的客服还第一次遇到，周一一定投诉这货。然后跑到Whirlpool看了一下，发现不少人遇到这情况了，看来Three那边是统一口径了。</p>
<p>今天打了第三个电话，打算干两件事，一是投诉，二是停掉合约，然后签Telstra的4S计划，电话过去这次变成了“熟悉”的印度口音，听说我要退网，三哥问我为什么，就把前面提到那货骂的狗血淋头，这个三哥人品明显很好，马上offer我每月$10的credit，这样算下来相当于$29 cap的加$5的handset fee，或者$49 cap无handset fee，终于要到了自己满意的折扣。可能再过一周4S就到手了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/10/19/upgrade-to-iphone-4s/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Steve Jobs</title>
		<link>http://log.dongsheng.org/2011/10/07/steve-jobs/</link>
		<comments>http://log.dongsheng.org/2011/10/07/steve-jobs/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 16:34:06 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=126</guid>
		<description><![CDATA[早上打开Flipboard，第一页就有人说乔布斯登船，以为是个玩笑，再翻几页下去竟全是乔布斯去世的消息，又打开Hacker news，满屏都是乔布斯的消息，心道这次是真的，然后就想起来了他辞职信里的那句话：that day has come。 并不是因为我对苹果产品有特殊的感情，让我感到震惊和难过的是，从2009年一月起他体重巨减到现在这长达两年半的时间里，尽管一直处于死亡的威胁下，但他未停止推动苹果这艘大船的脚步，他实实在在得为事业奋战到灯枯油尽。一个已经获得人世所有荣耀的人，一个被绝症耗尽生命力的人，是什么在驱动着他？我想起了他在斯坦福演讲时说过的两段话： &#8230;and since then, for the past 33 years, I have looked in the mirror [...]]]></description>
			<content:encoded><![CDATA[<p>早上打开<a href="http://flipboard.com/">Flipboard</a>，第一页就有人说乔布斯登船，以为是个玩笑，再翻几页下去竟全是乔布斯去世的消息，又打开<a href="http://hackerne.ws/">Hacker news</a>，<a href="http://d.pr/K6kT">满屏</a>都是乔布斯的消息，心道这次是真的，然后就想起来了他辞职信里的那句话：<a href="http://www.apple.com/pr/library/2011/08/24Letter-from-Steve-Jobs.html">that day has come</a>。</p>
<p>并不是因为我对苹果产品有特殊的感情，让我感到震惊和难过的是，从2009年一月起他体重巨减到现在这长达两年半的时间里，尽管一直处于死亡的威胁下，但他未停止推动苹果这艘大船的脚步，他实实在在得为事业奋战到灯枯油尽。一个已经获得人世所有荣耀的人，一个被绝症耗尽生命力的人，是什么在驱动着他？我想起了他在斯坦福演讲时说过的两段话：</p>
<blockquote><p>
&#8230;and since then, for the past 33 years, I have looked in the mirror every morning and asked myself: &#8220;If today were the last day of my life, would I want to do what I am about to do today?&#8221; And whenever the answer has been &#8220;No&#8221; for too many days in a row, I know I need to change something.
</p></blockquote>
<blockquote><p>
Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.
</p></blockquote>
<div style="text-align:center"><img src="http://www.wetfrogstudios.com/bling/jobs.jpg" alt="keynote at 2011 WWDC" /></div>
<div style="text-align:center"><a href="http://www.aaronmahnke.com/post/11082113453">Steve, after his keynote at the 2011 WWDC</a></div>
<p>八月底读了乔布斯的辞职信，我想，他终该获得了身体和精神上的宁静吧，我甚至没有怀疑过他会战胜绝症，作为一个传奇人物，传奇还会延续，下一个传奇是乔布斯再次站在苹果发布会上……可惜这并未发生。</p>
<p>谢谢乔布斯，比起你创造的精密绝伦的科技产品更重要的是你身体力行的告诉世人去追随梦想，不对糟透的现实妥协。也许无人能复制你的成功，但你留下的这笔精神财富却能激励更多人做更好的自己。</p>
<p> Rest in peace, <i>Steve Jobs</i>.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/10/07/steve-jobs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Living with less [Part 1]</title>
		<link>http://log.dongsheng.org/2011/09/27/living-with-less-1/</link>
		<comments>http://log.dongsheng.org/2011/09/27/living-with-less-1/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 14:00:35 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=121</guid>
		<description><![CDATA[I had a pretty tough week, a thief broke into my place last Monday, luckily my room has a lock, [...]]]></description>
			<content:encoded><![CDATA[<p>I had a pretty tough week, a thief broke into my place last Monday, luckily my room has a lock, he couldn&#8217;t get much then escaped. It&#8217;s quite scary that a stranger sneaked into the house when I was sleeping. For the record, this is the first time I got stolen.</p>
<p>I thought it would be a very bad idea to stay in this property any longer since the recent murder case and bomb threat (rumor) happened in my neighborhood, this is another sign to urge me leave this suburb <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  . After numerous communications with rental agent, they agreed I could move out ASAP. I did ask them to renew my lease before, and they told me new lease had been posted, but until then I still haven&#8217;t seen <strong>anything</strong>, but when came to moving out, they started to talk about 21 days notice, I don&#8217;t like the people who have double standard.</p>
<p>Looking for new place, moving, cleaning etc.. plus I have to work (btw, we released moodle for iPhone 1.0.2 last Friday),  I even feel exhausted when typing these words, I am really upset at the moment, I asked myself what makes me unhappy?</p>
<p>No, it&#8217;s not the agent, not even the thief, it&#8217;s all about the stuff I own. I spent more than two days to move them, I am sure there will be more days wasted on placing them in the right place until I move again. I realized I didn&#8217;t need most of them. That&#8217;s stupid, I bought all those to entertain me, now I became a slave of them, I maintain them, protect them and upgrade them, afraid of losing them, but they don&#8217;t give me happiness, only burdens. That reminds me that every time I think of making changes to my life, the first thing jumps into my mind is: how would I deal with my stuff?? I am jailed.</p>
<p>Here comes to the point to ease the stress from consumerist, time to practice <a href="http://www.everydayminimalist.com/">MINIMALIST</a>, what I will do from today:</p>
<ol>
<li>Sell or donate <strong>ALL</strong> my furnitures except a chair and workstation</li>
<li>Get rid of paper-based books, it&#8217;s the era of ebook! With iPad and kindle, I can get nearly all information I possibly need, for the books aren&#8217;t available in digital format, they might be not good enough to be digitalized</li>
<li>Sell my Xbox 360 console, TV and games (I cannot believe I bought a TV just for gaming)</li>
<li>Sell spare PCs, laptops and computer accessories, A macbook certainly can serve my needs</li>
<li>Donate my clothes, I got way too many</li>
<li>STOP using unlimited ADSL broadband, unlimited broadband leads to abusing, I spent whole lot of time on downloading movies &#038; TVs I will never watch, surfing on the web without actually doing anything useful. I will sign up a mobile broadband plan which only allowing me to do essential tasks only.</li>
<li> Addition to previous point, be careful with contract, it&#8217;s easy to sign, but difficult to terminate! <a href="http://www.tpg.com.au/products_services/adsl2plus_pricing.php?/pricing/homephone">To save $20</a>, I signed a 18 month contract with TPG for ADSL instead of 6 month, I terminated 7 month earlier, that incurred $200 termination fee! That&#8217;s the worst $20 I saved. To terminate a connection might cost TPG $0, but&#8230; anyway, deal is deal. NO more contract if possible, use pay as you go plan instead.</li>
</ol>
<p>That&#8217;s it for now, I will write follow up post regarding minimalist practice. I want my life simplified, dynamic, not binding with the bulk of crap I had.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/09/27/living-with-less-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perth被联邦政府划为偏远地区以解决就业问题</title>
		<link>http://log.dongsheng.org/2011/07/24/perth-added-to-regional-sponsored-migration-scheme/</link>
		<comments>http://log.dongsheng.org/2011/07/24/perth-added-to-regional-sponsored-migration-scheme/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 18:55:37 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[ens]]></category>
		<category><![CDATA[immigration]]></category>
		<category><![CDATA[rsms]]></category>
		<category><![CDATA[visa]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=125</guid>
		<description><![CDATA[Foreign worker solution for Perth Bowen opens WA door to migrant workers 最早在ABC的中文Twitter上看到这条消息，六月底把我永居签证的提名信交上去了，至今还杳无音信，之前一直很担心ENS的提名会通不过。看到这个消息以后查了下移民局网站，把Perth划到偏远地区以后我多了个选择，可以申请更宽松的857 VISA：Regional Sponsored Migration Scheme，提名要求比856 VISA还要低，这样我基本就没啥好担心的了 现在移民局网站上还没有把Perth列到偏远地区上，希望宝文不要食言。过去两年移民政策已经让太多人心灰意冷，在砍掉很多水货的同时也误伤了不少勤劳能干的人。但愿今年年底前能把这个事办完，让生活安定下来。 Update [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>
<a href="http://au.news.yahoo.com/thewest/a/-/wa/9869105/foreign-worker-solution-for-perth">Foreign worker solution for Perth</a>
</li>
<li>
<a href="http://bigpondnews.com/articles/National-Regional/2011/07/19/Bowen_opens_WA_door_to_migrant_workers_640109.html">Bowen opens WA door to migrant workers</a>
</li>
</ul>
<p>最早在<a href="https://twitter.com/ABCChinese/status/93476128920043520">ABC的中文Twitter</a>上看到这条消息，六月底把我永居签证的提名信交上去了，至今还杳无音信，之前一直很担心<a href="http://www.immi.gov.au/skilled/skilled-workers/ens/">ENS</a>的提名会通不过。看到这个消息以后查了下移民局网站，把Perth划到偏远地区以后我多了个选择，可以申请更宽松的<a href="http://www.immi.gov.au/skilled/skilled-workers/rsms/">857 VISA</a>：Regional Sponsored Migration Scheme，提名要求比856 VISA还要低，这样我基本就没啥好担心的了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>现在移民局网站上还没有把Perth列到偏远地区上，希望宝文不要食言。过去两年移民政策已经让太多人心灰意冷，在砍掉很多水货的同时也误伤了不少勤劳能干的人。但愿今年年底前能把这个事办完，让生活安定下来。</p>
<p>Update on 27, Sep, 2011:<br />
Perth已经正式划入偏远地区了：http://skilledmigration.govspace.gov.au/2011/09/13/regional-classification-for-perth/</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/07/24/perth-added-to-regional-sponsored-migration-scheme/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tomcat6的PermGen space错误</title>
		<link>http://log.dongsheng.org/2011/07/22/tomcat6-outofmemoryerror-permgen-space/</link>
		<comments>http://log.dongsheng.org/2011/07/22/tomcat6-outofmemoryerror-permgen-space/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 07:59:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=123</guid>
		<description><![CDATA[最近又要折腾Alfresco，我真服了这一坨坨Java软件了，一个安装包400M，核心包也100M，里面引用的jar就有将近200个，Java就是全球变暖的罪魁祸首。 每次安装Java软件必然要碰到各种各样麻烦问题，这次是4G内存也装不了Alfresco，反复报错：java.lang.OutOfMemoryError: PermGen space，我在终端翻了四五页才看到这个关键错误，前面报的全是反人类的不相关内容。解决办法是给tomcat传个参数进去，我得记下来，下次它肯定还得给我脸色看。 我的tomcat是用jsvc启动的加如下参数： -Xmx1024m \ -Xms1024m \ -XX:MaxPermSize=128M \ 感谢Java，你又浪费了我一个下午。]]></description>
			<content:encoded><![CDATA[<p>最近又要折腾Alfresco，我真服了这一坨坨Java软件了，一个安装包400M，核心包也100M，里面引用的jar就有将近200个，Java就是全球变暖的罪魁祸首。</p>
<p>每次安装Java软件必然要碰到各种各样麻烦问题，这次是4G内存也装不了Alfresco，反复报错：java.lang.OutOfMemoryError: PermGen space，我在终端翻了四五页才看到这个关键错误，前面报的全是反人类的不相关内容。解决办法是给tomcat传个参数进去，我得记下来，下次它肯定还得给我脸色看。</p>
<p>我的tomcat是用jsvc启动的加如下参数：</p>
<pre>
-Xmx1024m \
-Xms1024m \
-XX:MaxPermSize=128M \
</pre>
<p>感谢Java，你又浪费了我一个下午。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/07/22/tomcat6-outofmemoryerror-permgen-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moodle Moot 2011</title>
		<link>http://log.dongsheng.org/2011/07/19/mootau11/</link>
		<comments>http://log.dongsheng.org/2011/07/19/mootau11/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 04:56:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[moodle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=96</guid>
		<description><![CDATA[这个博克存在很久了，但很少涉及跟我工作相关的东西：我为一个叫Moodle的开源课程管理软件工作，可能很多人不知道Moodle是干什么的，跟我两年前参加布里斯班Moodle moot时的反应类似，当看到几百号人从世界各地赶到布里斯班参加会议，我非常惊讶，也挺自豪：我写的代码竟然有这么多人在使用，还是世界各地的。 两年后的今天再来悉尼Convention Center参加会议，发现使用Moodle的学校又大大壮大了，澳洲八大名校已有一半迁移到了Moodle（澳洲国立大学，新南威尔士大学，西澳大学和莫纳什大学），使用Moodle的TAFE和中小学更是不计其数，大约40%的学校是Moodle用户，还有个好消息是有更多的学校已经升级到2.0。比较有意思的是在会场还看到一个BlackBoard的展台，不过看上去不是很受欢迎 我来的一个目的是介绍正在开发中的Moodle for iPhone，这一个多月写的我死去活来的程序基本成型了，这个版本的功能不多，主要是Moodle端需要提供更多WebService，这个会在Moodle2.2发布的时候获得改善，做完Presentaion以后反响很热烈，有几个机构询问能否给大学提供定制版本，这对推销学校形象很有力。还有几家关心android版本的开发，可哥近期内可能不会碰android开发，cocoa touch够我喝一壶了。 还有件有意思的事，昨天参加一个session时presenter在facebook里搜索moodle，找到一本书讲解我去年写的一个核心组件 Moodle 2 The File Picker]]></description>
			<content:encoded><![CDATA[<p>这个博克存在很久了，但很少涉及跟我工作相关的东西：我为一个叫Moodle的开源课程管理软件工作，可能很多人不知道Moodle是干什么的，跟我两年前参加布里斯班Moodle moot时的反应类似，当看到几百号人从世界各地赶到布里斯班参加会议，我非常惊讶，也挺自豪：我写的代码竟然有这么多人在使用，还是世界各地的。</p>
<p>两年后的今天再来悉尼Convention Center参加会议，发现使用Moodle的学校又大大壮大了，澳洲八大名校已有一半迁移到了Moodle（澳洲国立大学，新南威尔士大学，西澳大学和莫纳什大学），使用Moodle的TAFE和中小学更是不计其数，大约40%的学校是Moodle用户，还有个好消息是有更多的学校已经升级到2.0。比较有意思的是在会场还看到一个BlackBoard的展台，不过看上去<a href="https://twitter.com/#!/dcai/status/92514578046533632" target="_blank">不是很受欢迎</a> <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  </p>
<p>我来的一个目的是介绍正在开发中的Moodle for iPhone，这一个多月写的我死去活来的程序基本成型了，这个版本的功能不多，主要是Moodle端需要提供更多WebService，这个会在Moodle2.2发布的时候获得改善，做完Presentaion以后反响很热烈，有几个机构询问能否给大学提供定制版本，这对推销学校形象很有力。还有几家关心android版本的开发，可哥近期内可能不会碰android开发，cocoa touch够我喝一壶了。</p>
<p>还有件有意思的事，昨天参加一个session时presenter在facebook里搜索moodle，找到一本书讲解我去年写的一个核心组件 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <a href="http://www.lulu.com/product/paperback/moodle-2-the-file-picker/16060624" target="_blank">Moodle 2 The File Picker</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/07/19/mootau11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>tig真好用</title>
		<link>http://log.dongsheng.org/2011/05/02/tig%e7%9c%9f%e5%a5%bd%e7%94%a8/</link>
		<comments>http://log.dongsheng.org/2011/05/02/tig%e7%9c%9f%e5%a5%bd%e7%94%a8/#comments</comments>
		<pubDate>Mon, 02 May 2011 07:20:47 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tig]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=120</guid>
		<description><![CDATA[tig是git的浏览器，我一直用来看代码库的commits历史，今天仔细看了下manual发现很多有意思的功能， 视图切换： 在主界面按大写S可以察看当前分支的状态，按t打开文件树，在文件树上按B可以察看blame界面，按H显示本地分支，按l显示log summery，在commit上按d显示commit内容。 显示选项： 在察看commit的界面里按.可以切换行号。 在主界面按大写D可以调整commit日期显示。 主界面按A选择显示committer的方式 其他： 方便的cherry-pick，用H切换到别的分支，选中commit然后按大写C就能完成cherry-pick了！]]></description>
			<content:encoded><![CDATA[<p><a href="http://jonas.nitro.dk/tig/">tig</a>是git的浏览器，我一直用来看代码库的commits历史，今天仔细看了下manual发现很多有意思的功能，</p>
<p>视图切换：<br />
在主界面按大写S可以察看当前分支的状态，按t打开文件树，在文件树上按B可以察看blame界面，按H显示本地分支，按l显示log summery，在commit上按d显示commit内容。</p>
<p>显示选项：<br />
在察看commit的界面里按.可以切换行号。<br />
在主界面按大写D可以调整commit日期显示。<br />
主界面按A选择显示committer的方式</p>
<p>其他：<br />
方便的cherry-pick，用H切换到别的分支，选中commit然后按大写C就能完成cherry-pick了！</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/05/02/tig%e7%9c%9f%e5%a5%bd%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>玩转Galaxy Tab</title>
		<link>http://log.dongsheng.org/2011/04/20/playing-galaxy-tab/</link>
		<comments>http://log.dongsheng.org/2011/04/20/playing-galaxy-tab/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 14:50:27 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[galaxy]]></category>
		<category><![CDATA[samsung]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=118</guid>
		<description><![CDATA[今天Telstra（澳洲最大的电信公司）推出$299的Samsung Galaxy Tab，无锁无合约。降价的前一天晚上我还看到卖$408，同样的机器在Optus卖$839，如果三星能早早把价格降到这个程度，说自己是iPad杀手时脸可能就不会那么红了。这周末就到了复活节长假，严重担心快递没法在节前送到，就选了自己到店里取货，没想到这就引起一个倒霉事，出了停车场就丢了停车卡，对着付款机上的电话怒吼了半天，接线员让我交五十刀然后放行，我草，真是一帮拦路抢劫的强盗啊！ 到手以后相当喜欢，手感很好，比Telstra和Optus销售的其他几款天朝货要好很多（当然价格差距也大），屏幕分辨率与iPad相当，由于是七寸所以显得相当细腻，反应速度很快，秒杀我对之前用过的Android手机的恶劣印象，另支持3G，可以当个大号电话用，但千万别像这个视频里用，过于拉风了。个人感觉Android上的软件大多不如iPhone的精致，不少iPhone上流行的软件能找到Android上的兄弟，看上去却都有点缺乏父爱。把玩这段时间感觉Android跟iPhone最大的差距是Market里软件质量不如App store，造成这种差距可能是两个系统生态系统的差距，还有Android各种机型分辨率差异大造成很多app难以兼顾，网易新闻app设计精良但也没处理好分辨率的问题。虽然不大喜欢腾讯，但不得不说它在Android上做的几款软件品质都相当高，不比它iPhone上的兄弟差。 选择平板是为了给爷爷奶奶用，前年回家给他们配了台电脑，从了我走了以后基本就是接灰状态，桌面操作系统对老人都是相当不友好，这不仅仅是软件可用性问题，是输入输出设备天生的复杂性，即使是设计如此细腻的Mac OS X也相当难用。平板电脑就不一样，视频语音/看新闻天气基本都是点两下的事，对老人来说，用的最多的也就是这两项了。比较失望的是Skype for Android尚不支持视频，Fring能支持，但界面实在太糟糕了点，且没有桌面软件。最令人兴奋的一点是照相机程序，一打开就把平板变成一个巨大的取景窗，视觉效果相当好，对大多不懂相机的人，就误以为这台机器自带的相机相当顶级。 晚上回家以后就动手开干，机器自带的ROM是Telstra的，不光满屏垃圾软件，还不带中文，所以必须刷中文，开root。 重刷ROM 放狗瞬间找到了机锋论坛里有个Galaxy Tab的分版，非常感谢原贴楼主的刷机指南，但国内论坛帖子常常存在严重的阅读问题。一方面排版乱，另一方面是概括的相当不概括，常常要看很多遍才明白怎么回事，这可能跟帖子编辑次数过多有关？所以我重新表述一下，方便下次使用： 下载三个程序，Kies，这个是三星的手机管理软件，内置了设备的Windows驱动，刷机软件odin3，还有国内行货的ROM 把机器切换带调试状态，因为这个状态显示的是一个android挖煤，所以也叫挖煤状态，进入此状态的方法是彻底关机，然后先按音量向下，然后按开机键，然后就应该看到挖煤界面了 进入挖煤状态后，把Galaxy tab连到PC，然后启动odin，在选项中选中re-partition，然后按载入rom里的pit文件，点start 刷完以后，Galaxy会停在三星的logo界面，按住电源键十秒强制重启 再回到Odin，在Odin的Option中取消re-partition选项，然后在Odin的Files部分，添加pda，phone和csc相应的rom文件，pda对应P1000开头的tar.md5文件，phone对应moderm开头的tar.md5文件，csc对应GT开头的tar.md5文件，完了点start，等着刷机完成 [...]]]></description>
			<content:encoded><![CDATA[<p>今天<a href="http://www.telstra.com.au/">Telstra</a>（澳洲最大的电信公司）推出<a href="http://www.telstra.com.au/bigpond-internet/mobile-broadband/mobile-tablets/samsung-galaxy-tab/ ">$299的Samsung Galaxy Tab</a>，无锁无合约。降价的前一天晚上我还看到卖$408，同样的机器在Optus卖<a href="http://www.ozbargain.com.au/node/43324?page=1#comment-449217">$839</a>，如果三星能早早把价格降到这个程度，说自己是iPad杀手时脸可能就不会那么红了。这周末就到了复活节长假，严重担心快递没法在节前送到，就选了自己到店里取货，没想到这就引起一个倒霉事，出了停车场就丢了停车卡，对着付款机上的电话怒吼了半天，接线员让我交五十刀然后放行，我草，真是一帮拦路抢劫的强盗啊！</p>
<p>到手以后相当喜欢，手感很好，比Telstra和Optus销售的其他几款天朝货要好很多（当然价格差距也大），屏幕分辨率与iPad相当，由于是七寸所以显得相当细腻，反应速度很快，秒杀我对之前用过的Android手机的恶劣印象，另支持3G，可以当个大号电话用，但千万别像<a href="http://www.youtube.com/watch?v=dhk_OL-5aVo&#038;feature=share">这个视频</a>里用，过于拉风了。个人感觉Android上的软件大多不如iPhone的精致，不少iPhone上流行的软件能找到Android上的兄弟，看上去却都有点缺乏父爱。把玩这段时间感觉Android跟iPhone最大的差距是Market里软件质量不如App store，造成这种差距可能是两个系统生态系统的差距，还有Android各种机型分辨率差异大造成很多app难以兼顾，网易新闻app设计精良但也没处理好分辨率的问题。虽然不大喜欢腾讯，但不得不说它在Android上做的几款软件品质都相当高，不比它iPhone上的兄弟差。</p>
<p>选择平板是为了给爷爷奶奶用，前年回家给他们配了台电脑，从了我走了以后基本就是接灰状态，桌面操作系统对老人都是相当不友好，这不仅仅是软件可用性问题，是输入输出设备天生的复杂性，即使是设计如此细腻的Mac OS X也相当难用。平板电脑就不一样，视频语音/看新闻天气基本都是点两下的事，对老人来说，用的最多的也就是这两项了。比较失望的是Skype for Android尚不支持视频，Fring能支持，但界面实在太糟糕了点，且没有桌面软件。最令人兴奋的一点是照相机程序，一打开就把平板变成一个巨大的取景窗，视觉效果相当好，对大多不懂相机的人，就误以为这台机器自带的相机相当顶级。</p>
<p>晚上回家以后就动手开干，机器自带的ROM是Telstra的，不光满屏垃圾软件，还不带中文，所以必须刷中文，开root。</p>
<h4>重刷ROM</h4>
<p>放狗瞬间找到了<a href="http://bbs.gfan.com/">机锋论坛</a>里有个<a href="http://bbs.gfan.com/android-640115-1-1.html">Galaxy Tab的分版</a>，非常感谢原贴楼主的刷机指南，但国内论坛帖子常常存在严重的阅读问题。一方面排版乱，另一方面是概括的相当不概括，常常要看很多遍才明白怎么回事，这可能跟帖子编辑次数过多有关？所以我重新表述一下，方便下次使用：</p>
<ul>
<li>下载三个程序，<a href="http://www.samsung.com/au/smartphone/wave/software-updates.html">Kies</a>，这个是三星的手机管理软件，内置了设备的Windows驱动，刷机软件<a href="http://u.115.com/file/f5e5e0fece">odin3</a>，还有<a href="http://u.115.com/file/f58c6b654b">国内行货的ROM</a></li>
<li>把机器切换带调试状态，因为这个状态显示的是一个android挖煤，所以也叫挖煤状态，进入此状态的方法是彻底关机，然后先按音量向下，然后按开机键，然后就应该看到挖煤界面了</li>
<li>进入挖煤状态后，把Galaxy tab连到PC，然后启动odin，在选项中选中re-partition，然后按载入rom里的pit文件，点start</li>
<li>刷完以后，Galaxy会停在三星的logo界面，按住电源键十秒强制重启</li>
<li>再回到Odin，在Odin的Option中取消re-partition选项，然后在Odin的Files部分，添加pda，phone和csc相应的rom文件，pda对应P1000开头的tar.md5文件，phone对应moderm开头的tar.md5文件，csc对应GT开头的tar.md5文件，完了点start，等着刷机完成</li>
</ul>
<h4>破解root</h4>
<p>刷完之后我傻眼了，这个国行的ROM太监了，所有的google软件都消失了，最无耻的是连market都阉了。解决办法，拿到android的root权限，把google软件写到/system/app里，顺手还得把开心网，新浪微博之流的货色给灭了。</p>
<ul>
<li>先启用USB调试模式，设置->应用程序->开发->USB调试，如果是英文版：Settings->Applications->Development->USB debugging</li>
<li>把Galaxy tab连到电脑上</li>
<li>下载<a href="http://forum.xda-developers.com/showthread.php?t=803682">SuperOneClick</a>，启动以后选择那个root按钮就搞定了</li>
</ul>
<h4>加入Google的软件套装</h4>
<p>这个原理简单，就是把Google套装拷贝到/system/app，但这个是挂载成readonly的分区，所以要下载个app重新挂载。<br />
因为变态的国行没有market，只能去找下载拷贝到sd卡然后用系统自带文件管理器（My files）打开安装，这两个软件是root explorer（这个是第三方软件，能操作系统文件，可以用来拷贝文件）和mount /system，可以在《<a href="http://bbs.gfan.com/android-586002-1-1.html">获取ROOT与 DATA TO 2G教程+失败原因释义</a>》找到。下载<a href="http://u.115.com/file/f5d6693df">Google软件包</a>，然后用root explorer拷贝到对应的/system/app目录下，最后重启就能用Google的服务了。</p>
<p>几个Tips：</p>
<ul>
<li>*2767*3855# 恢复出厂设置</li>
<li>*#197328640# 工程模式</li>
<li>*#7780# 删除个人数据和已经安装程序</li>
<li>*#*#3214789650#*#* GPS选项调整</li>
<li>必须干掉国行ROM里的QQ，流氓会随系统启动，那些顽固的垃圾软件都存在/system/app目录里</li>
</ul>
<p>推荐几个软件：</p>
<ul>
<li>QQ阅读，QQ新闻，QQ订阅，微信，甚至QQ输入法</li>
<li>网易新闻（存在显示问题）</li>
<li>Skype</li>
<li>Kik messenger，Whatsapp（竟然免费）</li>
<li>GO 天气</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/04/20/playing-galaxy-tab/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Mac OS X extended file attributes</title>
		<link>http://log.dongsheng.org/2011/03/31/extended-fileattributes/</link>
		<comments>http://log.dongsheng.org/2011/03/31/extended-fileattributes/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 15:09:11 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[nfs]]></category>
		<category><![CDATA[ntfs]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=117</guid>
		<description><![CDATA[今天从NTFS分区上拷贝分区刀HFS+分区，用ls -l列表出现这样奇怪的权限位： drwxr-xr-x@ 我知道@跟文件名是软链接，跟权限位后面倒是第一次看到，查了下找个是extended file attributes，可以用xattr清除，亦可用cp -X避免拷贝EFA。详见：OS X Extended Attributes and xattr]]></description>
			<content:encoded><![CDATA[<p>今天从NTFS分区上拷贝分区刀HFS+分区，用ls -l列表出现这样奇怪的权限位：</p>
<pre>
drwxr-xr-x@
</pre>
<p>我知道@跟文件名是软链接，跟权限位后面倒是第一次看到，查了下找个是extended file attributes，可以用xattr清除，亦可用cp -X避免拷贝EFA。详见：<a href="http://xahlee.org/comp/OS_X_extended_attributes_xattr.html">OS X Extended Attributes and xattr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/03/31/extended-fileattributes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>乏善可陈的2010</title>
		<link>http://log.dongsheng.org/2011/01/04/events-of-2010/</link>
		<comments>http://log.dongsheng.org/2011/01/04/events-of-2010/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 03:45:12 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=105</guid>
		<description><![CDATA[去年是真正乏善可陈的一年，到澳洲的第三年终于被这片土地熏陶成了一个懒虫，回想这一年竟没有特别值得纪念的事，这是很悲哀。 最悲剧的事：不能在2011前申请PR了，材料准备了大半才发现移民局要求三年工作经验才能申请856签证，还得再忍六个月。 年度玩具：去年最好玩的数码产品是NAS，满足了我24&#215;7下载的需求还给了我很多折腾的机会，关于NAS的选购，在资金允许的范围内，能选QNAP就不要选LinkStation，前者的软件和稳定性都比LinkStation好。Kinect也是很好玩的东西，但现在还没有出现杀手级游戏。 学到新技能：终于会开手动挡的车了，一个不大不小的进步，意味着以后再搬家就可以开卡车了 九月买了我的第一辆新车 Ford Focus，买了之后有点后悔，其实二手车便宜开着也不错，新车买的是个放心，至少五六年内不用为车操心了（纪念一下之前的老将：Toyota Avalon 2003，Toyota Camry Sportivo 2005，Nissan X-Trail 2002）。 过去的一年没读几本书，看了无数的电影，美剧，玩了十几款xbox360和pc games，这些东西基本上是让人活的更麻木，新的一年要把读书和娱乐的时间倒过来，前面的路还长，不能这么快就被精神鸦片给毒害了 另外要多在这里做点记录，感觉twitter不是个很好的记录生活的地方。 对2011满怀期待，希望将是充满积极变化的一年。]]></description>
			<content:encoded><![CDATA[<p>去年是真正乏善可陈的一年，到澳洲的第三年终于被这片土地熏陶成了一个懒虫，回想这一年竟没有特别值得纪念的事，这是很悲哀。</p>
<p>最悲剧的事：不能在2011前申请PR了，材料准备了大半才发现移民局要求三年工作经验才能申请856签证，还得再忍六个月。</p>
<p>年度玩具：去年最好玩的数码产品是NAS，满足了我24&#215;7下载的需求还给了我很多折腾的机会，关于NAS的选购，在资金允许的范围内，能选QNAP就不要选LinkStation，前者的软件和稳定性都比LinkStation好。Kinect也是很好玩的东西，但现在还没有出现杀手级游戏。</p>
<p>学到新技能：终于会开手动挡的车了，一个不大不小的进步，意味着以后再搬家就可以开卡车了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  九月买了我的第一辆新车 Ford Focus，买了之后有点后悔，其实二手车便宜开着也不错，新车买的是个放心，至少五六年内不用为车操心了（纪念一下之前的老将：Toyota Avalon 2003，Toyota Camry Sportivo 2005，Nissan X-Trail 2002）。</p>
<p>过去的一年没读几本书，看了无数的电影，美剧，玩了十几款xbox360和pc games，这些东西基本上是让人活的更麻木，新的一年要把读书和娱乐的时间倒过来，前面的路还长，不能这么快就被精神鸦片给毒害了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  另外要多在这里做点记录，感觉twitter不是个很好的记录生活的地方。</p>
<p>对2011满怀期待，希望将是充满积极变化的一年。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/01/04/events-of-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>雕虫小技：ssh端口转发</title>
		<link>http://log.dongsheng.org/2011/01/04/ssh-port-forwarding/</link>
		<comments>http://log.dongsheng.org/2011/01/04/ssh-port-forwarding/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 02:00:34 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/95</guid>
		<description><![CDATA[公司的防火墙只定义了80，8080等http端口，比较另类的如9091就过不去了，这种问题用端口转发就能解决： ssh -N -L 9091:200.200.200.200:9091 myssh.host.name 200.200.200.200:9091是要访问的远程主机和端口 9091是要映射的本地端口 myssh.host.name是要使用端口转发的ssh服务器 -N，表示本连接不执行任何命令 -L，表示设置端口转发 -v，加上这个选项可以察看详细的连接信息 还有一种情况是我在家里想访问办公室的电脑，因为电脑在防火墙后面，所以不可能直接访问，但可以把我本地的ssh端口映射到myssh.host.name的某个端口上，这样我在家也能访问公司电脑了，这里要用-R选项 ssh -N -R 2222:127.0.0.1:22 myssh.host.name 2222是映射到外网的端口 127.0.0.1:22表示2222要映射到本地的22端口]]></description>
			<content:encoded><![CDATA[<p>公司的防火墙只定义了80，8080等http端口，比较另类的如9091就过不去了，这种问题用端口转发就能解决：</p>
<pre>
ssh -N -L 9091:200.200.200.200:9091 myssh.host.name
</pre>
<p>200.200.200.200:9091是要访问的远程主机和端口<br />
9091是要映射的本地端口<br />
myssh.host.name是要使用端口转发的ssh服务器<br />
-N，表示本连接不执行任何命令<br />
-L，表示设置端口转发<br />
-v，加上这个选项可以察看详细的连接信息</p>
<p>还有一种情况是我在家里想访问办公室的电脑，因为电脑在防火墙后面，所以不可能直接访问，但可以把我本地的ssh端口映射到myssh.host.name的某个端口上，这样我在家也能访问公司电脑了，这里要用-R选项</p>
<pre>
ssh -N -R 2222:127.0.0.1:22 myssh.host.name
</pre>
<p>2222是映射到外网的端口<br />
127.0.0.1:22表示2222要映射到本地的22端口</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2011/01/04/ssh-port-forwarding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>终于拿到了LinkStation Pro Duo LS-WVL的root</title>
		<link>http://log.dongsheng.org/2010/12/14/open-link-station-pro-duo-wvl-firmware/</link>
		<comments>http://log.dongsheng.org/2010/12/14/open-link-station-pro-duo-wvl-firmware/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:00:55 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[buffalo]]></category>
		<category><![CDATA[linkstation]]></category>
		<category><![CDATA[nas]]></category>
		<category><![CDATA[qnap]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/88</guid>
		<description><![CDATA[在QNAP TS-119和LinkStation Pro Duo WVL之间纠结很久，最终整了个LinkStation，不是因为LinkStation比QNAP强多少，主要是因为LinkStation是澳洲能买到最实惠的的NAS了，买QNAP还得等着ebay卖家漂洋过海送过来，不知圣诞前能不能拿到，所以还是算了吧。 之前最担心的是LinkStation拿不到root权限，只能锁死在buffalo的功能上，那我还真不如弄个QNAP了，功能和界面都比Buffalo强太多。经过一番折腾，打消了这个疑虑。 下载acp_commander.jar，没想到固件都升级到1.37了这个破解工具竟然还能用 先测试一下能不能用： java -jar acp_commander.jar -t 192.168.1.65 -ip 192.168.1.65 -pw password -c "ls /" [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.qnap.com/pro_detail_feature.asp?p_id=112">QNAP TS-119</a>和<a href="http://www.buffalotech.com/products/network-storage/home-and-small-office/linkstation-pro-duo-ls-wvlr1/">LinkStation Pro Duo WVL</a>之间纠结很久，最终整了个LinkStation，不是因为LinkStation比QNAP强多少，主要是因为LinkStation是澳洲能买到最实惠的的NAS了，买QNAP还得等着ebay卖家漂洋过海送过来，不知圣诞前能不能拿到，所以还是算了吧。</p>
<p>之前最担心的是LinkStation拿不到root权限，只能锁死在buffalo的功能上，那我还真不如弄个QNAP了，功能和界面都比Buffalo强太多。经过一番折腾，打消了这个疑虑。</p>
<ul>
<li>下载<a href="http://downloads.nas-central.org/TOOLS/ALL_LS_KB_ARM9/ACP_COMMANDER/acp_commander.jar">acp_commander.jar</a>，没想到固件都升级到1.37了这个破解工具竟然还能用</li>
<li>先测试一下能不能用：
<pre>java -jar acp_commander.jar -t 192.168.1.65 -ip 192.168.1.65 -pw password -c "ls /"</pre>
<p>注意-pw后的参数是web界面登录密码，如果成功的话就能看到输出的根目录列表了</li>
<li>改root密码：
<pre>java -jar acp_commander.jar -t 192.168.1.65 -ip 192.168.1.65 -pw password -c "(echo 123456;echo 123456)|passwd"</pre>
</li>
<li>改sshd设置以允许root登录：
<pre>java -jar acp_commander.jar -t 192.168.1.65 -ip 192.168.1.65 -pw password -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config"</pre>
</li>
<li>关掉pam：
<pre>java -jar acp_commander.jar -t 192.168.1.65 -ip 192.168.1.65 -pw password -c "sed -i 's/UsePAM yes/UsePAM no/g' /etc/sshd_config"</pre>
</li>
<li>重启sshd：
<pre>java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw password -c "/etc/init.d/sshd.sh restart"</pre>
</li>
</ul>
<p>然后就能用ssh登录nas了，LinkStation Pro Duo WVL里面的东西还挺新的，vim是7.2，php是5.2.10，内核是2.6.31（我的CentOS才2.16.18啊！），CPU是<del>格格巫</del>Kirkwood 1.6G，内存小了点，只有256M DDR3。</p>
<p>这个破解办法来自<a href="http://forum.buffalo.nas-central.org/viewtopic.php?f=69&amp;t=22137">easier way to get ssh on XHL</a>，看这帖子的时候太自信，没有仔细看作者的描述的步骤，我自作聪明用acp_commander.jar改了/etc/sshd_config和/root/.ssh写权限，然后用php把我的id_rsa.pub传了进去，但sshd死活不允许我用公钥登录（我确实改了sshd_config里的相关设置），最后老老实实按步骤做了一遍就成功了，走了不少弯路。所以说做人还得谦虚啊！</p>
<p>Updated: 25/12/2010</p>
<p>用了将近半个月，总结一下遇到的一些问题和解决办法</p>
<ul>
<li>LinkStation内置的bt是定制的µTorrent，这个linux版的素质明显不如它windows和mac的兄弟，常常就把CPU用到100%，更恼人的其实是很多PT站不认这个版本的uTorrent，果断的禁掉它然后用<a href="http://buffalo.nas-central.org/wiki/Ipkg_on_the_Linkstation_(for_end-users)">ipkg</a>装个Transmission，各个平台都有远程控制客户端，对CPU也是相当友好</li>
<li>LinkStation的web服务器相当古怪，在/etc/init.d下有httpd.sh和lighttpd.sh，让我一度以为它内置了apache和lighttpd，读了一下启动脚本发现httpd.sh也是用的lighttpd，读的是/etc/lighttpd/buffalo-web.conf配置文件，用来启动LinkStation的web管理界面，另一个lighttpd.sh读的是/etc/lighttpd/lighttpd.conf，如果在管理界面设置使用php的话就会启动这个服务，这个配置文件莫名其妙的把运行用户设置成了apache。感觉两个进程太浪费资源于是在buffalo-web.conf里设置了虚拟主机，buffalo的程序员太没诚意了，这么简单的东西搞的这么粗糙，可能是考虑管理界面要用root权限，而普通的php程序只给个低点的apache用户权限吧</li>
<li>twonky的web界面无法使用，一度以为是我改某个配置文件把twonky搞次了，最后在<a href="http://forums.buffalotech.com/buffalo/board/message?board.id=0101&#038;message.id=23791#M23791">论坛里发现是buffalo的升级升坏了</a>，这是个从1.2x就一直存在的老bug，把/usr/local/twonky-alt重命名就好了</li>
</ul>
<p>总之，bufflo的软件做的太粗糙的，好像是找了一帮新手做的，我上面提到的几点问题，如果没有root权限的话根本无法修复。下次买NAS不会再考虑Bufflo了，QNAP的软件更有诚意。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/12/14/open-link-station-pro-duo-wvl-firmware/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>换了个kinect</title>
		<link>http://log.dongsheng.org/2010/11/27/got-my-kinect/</link>
		<comments>http://log.dongsheng.org/2010/11/27/got-my-kinect/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 06:33:24 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=108</guid>
		<description><![CDATA[最近EBGAMES搞活动，可以用旧的iPod换store credit，我恰好有个iPod Touch 2nd 8G放在车抽屉里接灰（接了快半年了，连电都没了），拿到EBGAMES能换170刀，在ebay上搜了下，运气好到家也就卖这个钱了，于是再加29块换了个很火的kinect。 这真是个让人惊讶的产品，可以非常精确地识别我的动作，跳，推，蹲，伸展……且不需要依赖像wii那样别扭的遥控器。澳洲版的kinect带了“Kinect Adventures”游戏，玩了一会就累的浑身大汗，然后xbox告诉我这还刚刚是warm up而已，对我这样搞IT的宅男，这种设备对身体健康绝对有积极意义的 Kinect最大的限制应该是对空间的要求太高，需要1.2到3米的距离，我不得不把房间重新布置了一下才能玩，可以想象可能不少公寓没有足够的空间满足kinect的要求。 目前kinect的游戏很少，且非常昂贵，但kinect的发展空间是无穷的，射击游戏？格斗游戏？如果kinect的精度和反应能进一步提高的话，我们就能完全扔掉xbox手柄了，想象一下用kinect玩gears of war，halo或者街霸，口水都要流出来了。 如果你还在准备圣诞礼物，我强烈推荐你去弄一套Kinect！]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm6.static.flickr.com/5127/5210473065_b4d676cf86.jpg" alt="kinect" /></p>
<p>最近<a href="http://www.ebgames.com.au/news-809-Insane-iPod-Trade-Values-From-2011-to-2811">EBGAMES</a>搞活动，可以用旧的iPod换store credit，我恰好有个iPod Touch 2nd 8G放在车抽屉里接灰（接了快半年了，连电都没了），拿到<a href="http://www.ebgames.com.au/">EBGAMES</a>能换170刀，在ebay上搜了下，运气好到家也就卖这个钱了，于是再加29块换了个很火的<a href="http://www.xbox.com/en-au/kinect">kinect</a>。</p>
<p>这真是个让人惊讶的产品，可以非常精确地识别我的动作，跳，推，蹲，伸展……且不需要依赖像wii那样别扭的遥控器。澳洲版的kinect带了“<a href="http://marketplace.xbox.com/en-US/Product/Kinect-Adventures/66acd000-77fe-1000-9115-d8024d5308ed">Kinect Adventures</a>”游戏，玩了一会就累的浑身大汗，然后xbox告诉我这还刚刚是warm up而已，对我这样搞IT的宅男，这种设备对身体健康绝对有积极意义的 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Kinect最大的限制应该是对空间的要求太高，需要1.2到3米的距离，我不得不把房间重新布置了一下才能玩，可以想象可能不少公寓没有足够的空间满足kinect的要求。</p>
<p>目前kinect的游戏很少，且非常昂贵，但kinect的发展空间是无穷的，射击游戏？格斗游戏？如果kinect的精度和反应能进一步提高的话，我们就能完全扔掉xbox手柄了，想象一下用kinect玩gears of war，halo或者街霸，口水都要流出来了。</p>
<p>如果你还在准备圣诞礼物，我强烈推荐你去弄一套Kinect！</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/27/got-my-kinect/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>加入Usenet的最好机会</title>
		<link>http://log.dongsheng.org/2010/11/26/usenet-black-friday-deal/</link>
		<comments>http://log.dongsheng.org/2010/11/26/usenet-black-friday-deal/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 06:45:53 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[usenet]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/106</guid>
		<description><![CDATA[自从看了阮一峰的这篇《Usenet：P2P下载的替代方法》就一直打算弄个Usenet用，但澳洲的土网一直都限制流量，所以这事拖着拖着就忘了。澳洲土网实在是流毒无穷，连上传都算在流量里面，所以用P2P下载的时候根本就不愿意共享，要分享最起码也得不影响自己使用吧？ 最近换了TPG的无限流量宽带，再加上ThunderNews推出的这个黑色星期五促销计划，终于有了使用Usenet的机会，终身每月五美元的无限量下载，该计划详情： Premium SSL Servers 711+ Days Binary Retention 1265+ Days Text Retention 50 Simultaneous Connections 256 bit SSL Encryption [...]]]></description>
			<content:encoded><![CDATA[<p>自从看了阮一峰的这篇《<a href="http://www.ruanyifeng.com/blog/2008/02/usenet_download_tutorial_part_ii.html">Usenet：P2P下载的替代方法</a>》就一直打算弄个Usenet用，但澳洲的土网一直都限制流量，所以这事拖着拖着就忘了。澳洲土网实在是流毒无穷，连上传都算在流量里面，所以用P2P下载的时候根本就不愿意共享，要分享最起码也得不影响自己使用吧？</p>
<p>最近换了TPG的无限流量宽带，再加上ThunderNews推出的这个<a href="http://www.thundernews.com/thundernews_blackfriday_deal.php">黑色星期五促销计划</a>，终于有了使用Usenet的机会，终身每月五美元的无限量下载，该计划详情：</p>
<ul>
<li>Premium SSL Servers</li>
<li><strong>711+ Days</strong> Binary Retention</li>
<li>1265+ Days Text Retention</li>
<li>50 Simultaneous Connections</li>
<li>256 bit SSL Encryption Included</li>
<li>2 US Servers</li>
<li>2 EU Servers</li>
<li>99% Article Completion</li>
<li>Free News Reader Software</li>
<li>24/7 Chat &#038; e-mail Support</li>
<li>Unlimited Message Uploads</li>
<li>Broadband Speed</li>
<li>Multiple Access Ports</li>
</ul>
<p>看到有人怀疑该计划是否只三个月有效，可以看看官方的blog：<a href="http://www.thundernews.com/blog/2010/11/25/thundernews-black-friday-special-update/">Thundernews Black Friday Special Update</a>和<a href="http://forums.whirlpool.net.au/forum-replies.cfm?t=1584143">Whirlpool的讨论</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/26/usenet-black-friday-deal/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>修改Ｗordpress的Permalinks</title>
		<link>http://log.dongsheng.org/2010/11/25/change-wordpress-permalinks/</link>
		<comments>http://log.dongsheng.org/2010/11/25/change-wordpress-permalinks/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 04:06:54 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Permalinks]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/103</guid>
		<description><![CDATA[不知道有多少人跟我一样讨厌Wordpress的Revision和auto-save，这两个功能在Wordpress的posts表里创建大量垃圾记录，即使我在wp-config.php里设置了： define('WP_POST_REVISIONS', false); define('AUTOSAVE_INTERVAL', 60000); 还是无法彻底消灭垃圾记录。其实这对性能啥的没什么影响，主要是种程序员的洁癖，本来我的posts表是整整齐齐按ID排序的，但Wordpress这么整以后，本来连续的ID全打乱了，我的Permalinks就是依赖ID的。 所以我决定把Permalinks改成年月日+postname的形式，这样看起来就没那么乱了。在这么做之前最好设置301转向，不然apache的记录里就全是404了。这个可以用.htaccess来实现，在Wordpress目录的.htaccess里加上： RewriteEngine On RewriteBase / RewriteRule ^archives/([0-9]+)$ \?p=$1 [R] 这样原来http://log.dongsheng.org/archives/2重定向到http://log.dongsheng.org/?p=2，然后wordpress会把这个地址换成新的年月日形式。 更新：29/11/2010 还要再加一条规则重定向trackback： RewriteRule ^archives/([0-9]+)/trackback$ [...]]]></description>
			<content:encoded><![CDATA[<p>不知道有多少人跟我一样讨厌Wordpress的Revision和auto-save，这两个功能在Wordpress的posts表里创建大量垃圾记录，即使我在wp-config.php里设置了：</p>
<pre>define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', 60000);</pre>
<p>还是无法彻底消灭垃圾记录。其实这对性能啥的没什么影响，主要是种程序员的洁癖，本来我的posts表是整整齐齐按ID排序的，但Wordpress这么整以后，本来连续的ID全打乱了，我的Permalinks就是依赖ID的。</p>
<p>所以我决定把Permalinks改成年月日+postname的形式，这样看起来就没那么乱了。在这么做之前最好设置301转向，不然apache的记录里就全是404了。这个可以用.htaccess来实现，在Wordpress目录的.htaccess里加上：</p>
<pre>RewriteEngine On
RewriteBase /
RewriteRule ^archives/([0-9]+)$ \?p=$1 [R]</pre>
<p>这样原来http://log.dongsheng.org/archives/2重定向到http://log.dongsheng.org/?p=2，然后wordpress会把这个地址换成新的年月日形式。</p>
<h4>更新：29/11/2010</h4>
<p>还要再加一条规则重定向trackback：</p>
<pre>RewriteRule ^archives/([0-9]+)/trackback$ wp_trackback.php\?p=$1 [R]</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/25/change-wordpress-permalinks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3-Day Perth to Albany</title>
		<link>http://log.dongsheng.org/2010/11/23/3-day-perth-to-albany/</link>
		<comments>http://log.dongsheng.org/2010/11/23/3-day-perth-to-albany/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 11:49:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=111</guid>
		<description><![CDATA[（很久之前写的，一直未完成，发成来仅供参考了） 圣诞去Albany玩，历时三天，总结一下行程，给以后留个参考。 Perth 出发点，行程将近两千公里，不舍的开自己的车了，就去m2000租了一辆2009 Camry，圣诞期间是高峰期比较贵，三天要310刀。其实应该租辆4WD，路上虽然都是公路，但这要进国家公园玩轿车明显不行啊。从Perth去Albany可以直接走Albany hwy，但一路全是荒地，所以去的路上还是沿着海边走好，有很多可以逛一逛的小镇。 Mandurah 很漂亮的小城市，还能抓抓螃蟹，因为经常去，所以这里直接跳过了。 Bunbury 没什么好玩的，也可以直接跳过，离Perth两百多公里吧，可以在这里增加一下补给，这是到Albany前最后一个城市了。 Busselton 比较有名的是Busselton Jetty，这是西澳最长的Jetty，不过我们去的时候关闭了，说是在修整，到2011年二月才会重新开放。很值得看看。 Margaret River WA的比较著名的旅游点了，在进小镇前有个Information bay，它后面就是Margaret River，我比较惊讶的发现这条合理有很多很多超大的黑色龙虾，可惜不让抓 Margaret River最著名的就是几家酒厂了，我们只去了一个Xanadu [...]]]></description>
			<content:encoded><![CDATA[<p>（很久之前写的，一直未完成，发成来仅供参考了）</p>
<p>圣诞去Albany玩，历时三天，总结一下行程，给以后留个参考。</p>
<h4>Perth</h4>
<p>出发点，行程将近两千公里，不舍的开自己的车了，就去m2000租了一辆2009 Camry，圣诞期间是高峰期比较贵，三天要310刀。其实应该租辆4WD，路上虽然都是公路，但这要进国家公园玩轿车明显不行啊。从Perth去Albany可以直接走Albany hwy，但一路全是荒地，所以去的路上还是沿着海边走好，有很多可以逛一逛的小镇。</p>
<h4>Mandurah</h4>
<p>很漂亮的小城市，还能抓抓螃蟹，因为经常去，所以这里直接跳过了。</p>
<h4>Bunbury</h4>
<p>没什么好玩的，也可以直接跳过，离Perth两百多公里吧，可以在这里增加一下补给，这是到Albany前最后一个城市了。</p>
<h4>Busselton</h4>
<p>比较有名的是Busselton Jetty，这是西澳最长的Jetty，不过我们去的时候关闭了，说是在修整，到2011年二月才会重新开放。很值得看看。</p>
<h4>Margaret River</h4>
<p>WA的比较著名的旅游点了，在进小镇前有个Information bay，它后面就是Margaret River，我比较惊讶的发现这条合理有很多很多超大的黑色龙虾，可惜不让抓 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Margaret River最著名的就是几家酒厂了，我们只去了一个Xanadu Winery，有个Eagles Heritage Raptor Wildlife也可以逛逛，其实Margaret River东西蛮多的，应该在这里过上一夜。</p>
<h4>Augusta</h4>
<p>一个很小很小的小镇，在澳洲的西南角上，我印象最深的就是这里的风非常大。<br />
没有太多可以玩的地方，可以看看augusta jewel cave和cape leeuwin lighthouse，我们到这里主要是过夜＋增加补给。</p>
<h4>Pemberton</h4>
<p>这里主要就是国家公园了，但我们没开4WD，只能跳过了  <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<h4>Walpole</h4>
<p>时间不太够，所以没有在这里停留，详情可以参见<a href="http://svc021.bookeasy.com/images/walpole/VisitorGuide2011.pdf">本文档</a>。</p>
<h4>Valley of the Giants</h4>
<p>绝对不能错过的Tree top walk，不过我这样恐高的人还是免了吧</p>
<h4>Denmark</h4>
<p>这里也跳过了，详情参见<a href="http://www.denmarkwa.asn.au/">该网站</a>。</p>
<h4>Albany</h4>
<p>目的地，不能错过的景点包括：<br />
The Gap &#038; natural bridge (Torndirrup National Park)<br />
Wind farm<br />
Mt Clarence</p>
<p>回程直接走albany hwy，回程就相当乏善可陈了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/23/3-day-perth-to-albany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving to Git</title>
		<link>http://log.dongsheng.org/2010/11/23/moving-to-git/</link>
		<comments>http://log.dongsheng.org/2010/11/23/moving-to-git/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 11:00:31 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[moodle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/86</guid>
		<description><![CDATA[如果一切顺利的话，Moodle会在这周把主代码库从cvs换到git，之前已经有几个子项目在用git协作了，这次迁移之后，标志着核心开发团队彻底抛弃了cvs。换版本管理工具绝对不是闲的蛋疼才干的事，工作将近三年实在是吃够了cvs的苦，缓慢的diff，古怪的$id:$，作为协作工具却没有解决团队开发的协作问题。 今天我们团队花了一整天研究git，发现迁移到git最大的难度是图形化工具的匮乏，Netbeans和Eclipse还没有正式发布的git插件，SmartGit算是最好的图形化工具的，但竟然不支持添加远程代码库（git remote），最后还是不得不通过命令行完成。对于初学者来说git那一大坨命令有点吓人，所以当我说用命令行做更快时，被人狠狠鄙视了，然后我用git命令，另一个同事用netbeans+smartgit比了下，任务是创建原始项目的clone，添加远程代码库，合并并推送。结果在他研究Netbeans测试版蹦出的那一坨Java异常的时候，命令行就搞定了，超级简单。虽然命令行的学习曲线比较陡，但利于开发人员彻底理解Git的工作方式，且不会被锁定到某个特定的GUI工具。]]></description>
			<content:encoded><![CDATA[<p>如果一切顺利的话，Moodle会在这周把主代码库从cvs换到git，<a href="http://log.dongsheng.org/archives/92">之前已经有几个子项目在用git协作了</a>，这次迁移之后，标志着核心开发团队彻底抛弃了cvs。换版本管理工具绝对不是闲的蛋疼才干的事，工作将近三年实在是吃够了cvs的苦，缓慢的diff，古怪的$id:$，作为协作工具却没有解决团队开发的协作问题。</p>
<p>今天我们团队花了一整天研究git，发现迁移到git最大的难度是图形化工具的匮乏，Netbeans和Eclipse还没有正式发布的git插件，SmartGit算是最好的图形化工具的，但竟然不支持添加远程代码库（git remote），最后还是不得不通过命令行完成。对于初学者来说git那一大坨命令有点吓人，所以当我说用命令行做更快时，被人狠狠鄙视了，然后我用git命令，另一个同事用netbeans+smartgit比了下，任务是创建原始项目的clone，添加远程代码库，合并并推送。结果在他研究Netbeans测试版蹦出的那一坨Java异常的时候，命令行就搞定了，超级简单。虽然命令行的学习曲线比较陡，但利于开发人员彻底理解Git的工作方式，且不会被锁定到某个特定的GUI工具。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/23/moving-to-git/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>追不动</title>
		<link>http://log.dongsheng.org/2010/11/19/out-of-date/</link>
		<comments>http://log.dongsheng.org/2010/11/19/out-of-date/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 05:52:35 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=110</guid>
		<description><![CDATA[两年前买了好多根DVI线取代模拟的VGA，心想，这些线够用一辈子了吧。后来用了苹果，说是Display Port比DVI更优越，于是又一番升级，转接卡，延长线。那时候想HDMI有啥用啊？又不能更清晰。到了今年，发现所有的新显示器，入门显卡都带HDMI了，DVI和Display Port都成了明日黄花，又买了几根HDMI线。另外，HDMI也是有版本的，1.4的还支持网络数据，这次我不忙着说这功能无聊了，说不定哪天我所有的设备都是用一根HDMI了。 下了很多标清（SD）电影，觉得下高清的人很傻，有意思吗，看电影不就看个剧情？一个电影7G，真是有钱又有时间烧的。再后来我也开始下高清了，接在大电视上看实在是很震撼，不比影院差（3D除外）。 一年半前买了个1T硬盘，算了一下很惊人，整整1024G啊，够用一辈子了吧？但现实是残酷的，外加两个月前买的1.5T硬盘，都将用尽了。寻思着最近还得再买个2T的，这次降低了期望，够我一年用了吧？据说4T的硬盘也快上市了。 觉得iPhone 3GS很酷了，看到同事开短信都要半分钟的3G，心里很是爽。然后最近有很多朋友都弄上iPhone 4了，金属外壳，加无敌屏幕，3GS简直就是一个玩具，跟不上苹果的更新速度，到我合同到期，iPhone 5就该上市了，到时候让你感受一下我现在的感受 可能真是年纪越长越跟不上时代了。]]></description>
			<content:encoded><![CDATA[<ul>
<li>
两年前买了好多根DVI线取代模拟的VGA，心想，这些线够用一辈子了吧。后来用了苹果，说是Display Port比DVI更优越，于是又一番升级，转接卡，延长线。那时候想HDMI有啥用啊？又不能更清晰。到了今年，发现所有的新显示器，入门显卡都带HDMI了，DVI和Display Port都成了明日黄花，又买了几根HDMI线。另外，HDMI也是有版本的，1.4的还支持网络数据，这次我不忙着说这功能无聊了，说不定哪天我所有的设备都是用一根HDMI了。
        </li>
<li>
下了很多标清（SD）电影，觉得下高清的人很傻，有意思吗，看电影不就看个剧情？一个电影7G，真是有钱又有时间烧的。再后来我也开始下高清了，接在大电视上看实在是很震撼，不比影院差（3D除外）。</li>
<li>
一年半前买了个1T硬盘，算了一下很惊人，整整1024G啊，够用一辈子了吧？但现实是残酷的，外加两个月前买的1.5T硬盘，都将用尽了。寻思着最近还得再买个2T的，这次降低了期望，够我一年用了吧？据说4T的硬盘也快上市了。
        </li>
<li>
觉得iPhone 3GS很酷了，看到同事开短信都要半分钟的3G，心里很是爽。然后最近有很多朋友都弄上iPhone 4了，金属外壳，加无敌屏幕，3GS简直就是一个玩具，跟不上苹果的更新速度，到我合同到期，iPhone 5就该上市了，到时候让你感受一下我现在的感受 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
        </li>
</ul>
<p>可能真是年纪越长越跟不上时代了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/19/out-of-date/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon EC2</title>
		<link>http://log.dongsheng.org/2010/11/18/amazon-ec2/</link>
		<comments>http://log.dongsheng.org/2010/11/18/amazon-ec2/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 05:46:59 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=109</guid>
		<description><![CDATA[十一月初，Amazon搞了云计算产品免费试用一年的活动，之前只用过S3，EC2是一直有耳闻却没机会使用。用了下发现EC2就是个定制性很强的VPS，用户到AWS上创建服务器实例，配置服务，部署，用完了terminate掉，按小时收费。Amazon提供CentOS，Suse Linux和Windows，还有一个Amazon自己的发行版，用也是yum包管理器。创建的服务实例默认是不带公网IP的，需要一个绑定Elastic IP，每小时收费0.01美元。 我创建实例的时候犯了一个严重错误，选了CentOS以后没有发现这个操作系统只能用4xlarge类型的实例，即硬件配置很高的那种，而免费试用仅仅是对micro规模的实例试用，结果短短一个周末charge了我224多美元，而这过程也没有任何提示已经开始收费了，心理非常不平衡，忙联系Amazon的客服要求取消收费，强调我是在试用，而不是用在生产线上，结果客服很好，很快就给我的帐号冲进224美元，抵消掉之前的花费，事实证明，云计算也不一定便宜]]></description>
			<content:encoded><![CDATA[<p>十一月初，Amazon搞了云计算产品<a href="http://aws.amazon.com/free/">免费试用一年的活动</a>，之前只用过S3，EC2是一直有耳闻却没机会使用。用了下发现EC2就是个定制性很强的VPS，用户到AWS上创建服务器实例，配置服务，部署，用完了terminate掉，按小时收费。Amazon提供CentOS，Suse Linux和Windows，还有一个Amazon自己的发行版，用也是yum包管理器。创建的服务实例默认是不带公网IP的，需要一个绑定Elastic IP，每小时收费0.01美元。</p>
<p>我创建实例的时候犯了一个严重错误，选了CentOS以后没有发现这个操作系统只能用4xlarge类型的实例，即硬件配置很高的那种，而免费试用仅仅是对micro规模的实例试用，结果短短一个周末charge了我224多美元，而这过程也没有任何提示已经开始收费了，心理非常不平衡，忙联系Amazon的客服要求取消收费，强调我是在试用，而不是用在生产线上，结果客服很好，很快就给我的帐号冲进224美元，抵消掉之前的花费，事实证明，云计算也不一定便宜 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/18/amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>终于开通了无限流量的宽带</title>
		<link>http://log.dongsheng.org/2010/11/12/unlimited-broadband/</link>
		<comments>http://log.dongsheng.org/2010/11/12/unlimited-broadband/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 06:20:25 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[adsl]]></category>
		<category><![CDATA[telstra]]></category>
		<category><![CDATA[tpg]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=107</guid>
		<description><![CDATA[在Down under之外的地方，无限流量的宽带是个很奇怪的词，宽带本来不就该是无限的吗？在大岛上是完全不一样的故事。 花了三年去习惯掐着点下载的生活，TPG终于祭出了无限流量的ADSL2+宽带，历时半个月，TPG激活了ADSL服务，我的宽带算是进入人类社会了。 顺便贴一下TPG网站上的安装历史，其实中国电信，移动算个屁，要垄断还得学习Telstra： Installation History 17:12, 01 Nov 2010 Wait for Telstra to activate service 14:40, 03 Nov 2010 [...]]]></description>
			<content:encoded><![CDATA[<p>在Down under之外的地方，无限流量的宽带是个很奇怪的词，宽带本来不就该是无限的吗？在大岛上是完全不一样的故事。</p>
<p>花了三年去习惯掐着点下载的生活，TPG终于祭出了无限流量的ADSL2+宽带，历时半个月，TPG激活了ADSL服务，我的宽带算是进入人类社会了。</p>
<p>顺便贴一下TPG网站上的安装历史，其实中国电信，移动算个屁，要垄断还得学习Telstra：</p>
<pre>
Installation History
17:12, 01 Nov 2010 	Wait for Telstra to activate service
14:40, 03 Nov 2010 	Telstra unable to provide service
14:40, 03 Nov 2010 	Wait for failure response from customer
14:44, 03 Nov 2010 	Retry with new parameters
16:02, 03 Nov 2010 	Wait for Telstra to activate service
09:15, 12 Nov 2010 	ADSL has been installed
09:15, 12 Nov 2010 	Changed ADSL parameters
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/11/12/unlimited-broadband/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>消灭Linux桌面的黑框</title>
		<link>http://log.dongsheng.org/2010/10/21/eliminate-unfreshed-frame-linux/</link>
		<comments>http://log.dongsheng.org/2010/10/21/eliminate-unfreshed-frame-linux/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 02:33:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=104</guid>
		<description><![CDATA[上一次升级了X11以后，桌面上就出现很多黑框，常常发生在调整窗口大小的时候，尤其是最小化Chromium的时候，杀掉Chromium进程却问题依旧。有怀疑是显卡驱动问题，给X11的设备参数加了TripleBuffer，RenderAccel，还是无法解决问题。 最后改到屏幕刷新频率才发现罪魁祸首： Section "Monitor" Identifier "Monitor0" VendorName "BENQ" ModelName "G2420HD" HorizSync 30.0 - 70.0 VertRefresh 50.0 - 85.0 Option "DPMS" [...]]]></description>
			<content:encoded><![CDATA[<p>上一次升级了X11以后，桌面上就出现很多黑框，常常发生在调整窗口大小的时候，尤其是最小化Chromium的时候，杀掉Chromium进程却问题依旧。有怀疑是显卡驱动问题，给X11的设备参数加了TripleBuffer，RenderAccel，还是无法解决问题。</p>
<p>最后改到屏幕刷新频率才发现罪魁祸首：</p>
<pre>
Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "BENQ"
    ModelName      "G2420HD"
    HorizSync       30.0 - 70.0
    VertRefresh     50.0 - 85.0
    Option         "DPMS"
EndSection
</pre>
<p>黑框全部消失。VertRefreshg改到50-85是安全的，但不要设的太高，不然X就起不来了。</p>
<p><strong>修正 （19th，Nov，2010）</strong></p>
<p>这样设置之后还是有问题，最后我把xcompmgr关掉就好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/10/21/eliminate-unfreshed-frame-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS</title>
		<link>http://log.dongsheng.org/2010/10/17/centos-notes/</link>
		<comments>http://log.dongsheng.org/2010/10/17/centos-notes/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 08:41:51 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[centos]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=101</guid>
		<description><![CDATA[最近工作要用Oracle数据库，在Archlinux上用的太折腾人，Oracle只提供了RPM和DEB两种安装包，按照AUR里的脚本装上了，但还得配置环境变量，内核参数等等才最终跑起来，麻烦无比，以后维护也是问题，所以决定再装个“企业级”Linux：CentOS，虽然各个发行版操作类似，但配置都略有差别，也是学习红帽系Linux的机会。 记录一下安装过程中遇到的问题： CentOS的livecd是不能用来安装的！我傻乎乎的下下来才发现不能用。但这并非不可能，需要自己定制 管理系统服务是用service和chkconfig命令的，还挺方便，就是bash completion不够聪明，不会在service后面直接追加服务名 IP要在/etc/sysconfig/network-scripts/ifcfg-eth0里改，CentOS各种配置挺分散的，不像Archlinux都在/etc/rc.conf里改，one file to rule them all. 装完发现很多软件找不到，比如Git，查了下原来需要配置EPEL（Extra Packages for Enterprise Linux） rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm yum [...]]]></description>
			<content:encoded><![CDATA[<p>最近工作要用Oracle数据库，在Archlinux上用的太折腾人，Oracle只提供了RPM和DEB两种安装包，按照<a href="http://aur.archlinux.org/packages.php?ID=12643">AUR里的脚本</a>装上了，但还得配置环境变量，内核参数等等才最终跑起来，麻烦无比，以后维护也是问题，所以决定再装个“企业级”Linux：CentOS，虽然各个发行版操作类似，但配置都略有差别，也是学习红帽系Linux的机会。</p>
<p>记录一下安装过程中遇到的问题：</p>
<ul>
<li>CentOS的livecd是不能用来安装的！我傻乎乎的下下来才发现不能用。但这并非不可能，需要自己<a href="https://projects.centos.org/trac/livecd/wiki/InstallToHardDrive">定制</a></li>
<li>管理系统服务是用service和chkconfig命令的，还挺方便，就是bash completion不够聪明，不会在service后面直接追加服务名</li>
<li>IP要在/etc/sysconfig/network-scripts/ifcfg-eth0里改，CentOS各种配置挺分散的，不像Archlinux都在/etc/rc.conf里改，one file to rule them all.</li>
<li>装完发现很多软件找不到，比如Git，查了下原来需要配置EPEL（Extra Packages for Enterprise Linux）
<pre>
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
yum update
</pre>
<p>然后就能安装Git了</p>
</li>
<li>PHP版本过低，这个需要加testing repo，参见：<a href="http://wiki.centos.org/HowTos/PHP_5.1_To_5.2">PHP 5.1 To 5.2</a>
<pre>sudo vim /etc/yum.repos.d/CentOS-Testing.repo</pre>
<pre>
[c5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
includepkgs=php*
</pre>
<p>然后PHP就可以升级的5.2.10了</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/10/17/centos-notes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Evo vs Lamborghini</title>
		<link>http://log.dongsheng.org/2010/09/30/evo-vs-lamborghini/</link>
		<comments>http://log.dongsheng.org/2010/09/30/evo-vs-lamborghini/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 07:00:37 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[evo]]></category>
		<category><![CDATA[lamborghini]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=100</guid>
		<description><![CDATA[很老的一期TopGear了，这两个身价相差悬殊的车的对比结果还是挺惊人的： 不要错过这期节目的第二部分，这么悍的Evo的某些问题也能让人笑掉大牙：Top Gear &#8211; Evo vs Lamborghini part 2- BBC 国内看不了，可以到VeryCD下载TopGear第五季第七集。]]></description>
			<content:encoded><![CDATA[<p>很老的一期TopGear了，这两个身价相差悬殊的车的对比结果还是挺惊人的：</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Ees2aZcDUn8?fs=1&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/Ees2aZcDUn8?fs=1&amp;hl=en_US" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>不要错过这期节目的第二部分，这么悍的Evo的某些问题也能让人笑掉大牙：<a href="http://www.youtube.com/watch?v=VVt1IjIdLxY">Top Gear &#8211; Evo vs Lamborghini part 2- BBC</a></p>
<p>国内看不了，可以到VeryCD下载<a href="http://www.verycd.com/topics/67922/">TopGear第五季第七集</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/09/30/evo-vs-lamborghini/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux从NTP更新系统时间</title>
		<link>http://log.dongsheng.org/2010/09/07/ntp-linux/</link>
		<comments>http://log.dongsheng.org/2010/09/07/ntp-linux/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 09:20:56 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ntp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/76</guid>
		<description><![CDATA[每次改时间都忘记怎么弄，不是忘了命令就是忘了ntp服务器地址，记录一下： sudo ntpdate ntp.iinet.net.au 写入CMOS： sudo hwclock -w --localtime]]></description>
			<content:encoded><![CDATA[<p>每次改时间都忘记怎么弄，不是忘了命令就是忘了ntp服务器地址，记录一下：</p>
<pre>
sudo ntpdate ntp.iinet.net.au
</pre>
<p>写入CMOS：</p>
<pre>
sudo hwclock -w --localtime
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/09/07/ntp-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单总结一下 Git 的使用</title>
		<link>http://log.dongsheng.org/2010/08/25/git-in-actoin/</link>
		<comments>http://log.dongsheng.org/2010/08/25/git-in-actoin/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:14:44 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=92</guid>
		<description><![CDATA[前段时间折腾Moodle的Quesion/Quiz模块，最大的难点不是开发，而是怎么跟另一个维护该模块的同事讨论，这哥们远在大不列颠，每次在tracker上留言都不得不等到第二天起床才能看到他的回复，更烦的是要review一个个patch，小点还好说，这动辄一万多行的大patch真不好一行行的解释。 然后决定把战线延伸到GitHub。对小项目来说Git相对CVS的优势不明显，徒增学习曲线，但对于Moodle这种庞大的开源软件，Git却是大大降低复杂程度，最重要的一点是创建分支的成本为零，我可以单独创建新分支以开发某特性，开发过程中可以方便的与上游代码合并，之前的cvs是无法享受这种便利的，我们不得不checkout多份拷贝进行测试。另一个很重要的特点是Git在本地保存全部改动历史，这样可以极其快捷的进行diff和blame 再说说GitHub，对于项目管理来说，GitHub肯定是不如Jira，但细化到编码这个层次，GitHub比Jira好很多，首先Jira没有官方的Git支持，无法追踪相关的Git提交，然后Jira不便于Code review（可能有好的插件会支持，说错了请指正）。GitHub在这方面做的很好，可以在git commit做inline note，代码浏览比viewvc强出一个世纪。 转到GitHub后，工作效率提高了很多，我白天把改动push到我的在GitHub的分支上，然后同事做Code review，提交改动，第二天我把他的改动合并到我的分支上，然后继续昨天的工作…… Git实际上是个新的开发模型，从编码到项目管理都不同于cvs时代。 简单总结一下Git的使用以 Moodle在GitHub的mirror为例。 打开 http://github.com/moodle/moodle，然后Fork，这个并不是必须的，之后可以通过git remote添加新的上游代码库 git clone 我自己的代码库 我不喜欢origin这个默认远程代码库名，所以重命名一下：git remote rename [...]]]></description>
			<content:encoded><![CDATA[<p>前段时间折腾Moodle的Quesion/Quiz模块，最大的难点不是开发，而是怎么跟另一个维护该模块的同事讨论，这哥们远在大不列颠，每次在tracker上留言都不得不等到第二天起床才能看到他的回复，更烦的是要review一个个patch，小点还好说，这动辄一万多行的大patch真不好一行行的解释。</p>
<p>然后决定把战线延伸到GitHub。对小项目来说Git相对CVS的优势不明显，徒增学习曲线，但对于Moodle这种庞大的开源软件，Git却是大大降低复杂程度，最重要的一点是创建分支的成本为零，我可以单独创建新分支以开发某特性，开发过程中可以方便的与上游代码合并，之前的cvs是无法享受这种便利的，我们不得不checkout多份拷贝进行测试。另一个很重要的特点是Git在本地保存全部改动历史，这样可以极其快捷的进行diff和blame <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>再说说GitHub，对于项目管理来说，GitHub肯定是不如<a href="http://www.atlassian.com/software/jira/">Jira</a>，但细化到编码这个层次，GitHub比Jira好很多，首先Jira没有官方的Git支持，无法追踪相关的Git提交，然后Jira不便于Code review（可能有好的插件会支持，说错了请指正）。GitHub在这方面做的很好，可以在git commit做inline note，代码浏览比<a href="http://www.viewvc.org/">viewvc</a>强出一个世纪。</p>
<p>转到GitHub后，工作效率提高了很多，我白天把改动push到我的在GitHub的分支上，然后同事做Code review，提交改动，第二天我把他的改动合并到我的分支上，然后继续昨天的工作……</p>
<p>Git实际上是个新的开发模型，从编码到项目管理都不同于cvs时代。</p>
<p>简单总结一下Git的使用以 Moodle在GitHub的mirror为例。</p>
<ol>
<li> 打开 http://github.com/moodle/moodle，然后Fork，这个并不是必须的，之后可以通过git remote添加新的上游代码库</li>
<li> git clone 我自己的代码库</li>
<li> 我不喜欢origin这个默认远程代码库名，所以重命名一下：git remote rename origin github，运行一下 git branch -r 发现远程名字变了</li>
<li> 我之前fork的Moodle并不是官方的，换成官方的git源：git remote add upstream git://git.moodle.org/moodle.git，然后：git fetch upstream</li>
<li>  我要创建一个我自己的分支newfeature：git branch newfeature，切换到这个分支需运行：git checkout newfeature</li>
<li>这个时候newfeature是个本地分支，在github上是不存在的，我得把这个分支push到github上，同事才能看到我的改动，运行：git push github，打开.git/config
<pre>
[branch "newfeature"]
remote = github
merge = refs/heads/newfeature
</pre>
<p>如果没有就加上这段，有了这段，就可以git pull直接获取并合并，有个命令可以设置git checkout &#8211;track github/newfeature，但我觉的用配置文件更直观</p>
</li>
<li>如果上游更新了，我就需要合并：git merge upstream/cvshead</li>
<li>删除本地分支：git branch -d newfeature，删除远程分支：git push :newfeature</li>
<li>一般的提交就不多说了，跟cvs之流一样，不同的是提交完了要git push才能把你的改动推送到远程服务器上</li>
<li>git可以比较分支，这样你可以比较你的当前分支和主干，生成一个patch提交到cvs里</li>
</ol>
<p>在 ~/.gitconfig 上下点功夫，能提高工作效率，Stack overflow上有个讨论不错：<a href="http://stackoverflow.com/questions/267761/what-does-your-gitconfig-contain">What does your ~/.gitconfig contain?</a></p>
<p>最后推荐两个软件，GitX和tig，两个都是Git浏览器，前者是Mac的，后者是终端上的，对于常用ssh的人，后者有用，有效率的多。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/08/25/git-in-actoin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>免费DNS Hosting</title>
		<link>http://log.dongsheng.org/2010/08/24/free-dns-hosting/</link>
		<comments>http://log.dongsheng.org/2010/08/24/free-dns-hosting/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 03:23:18 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[afraid]]></category>
		<category><![CDATA[dns]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=93</guid>
		<description><![CDATA[买了一个 com.au 的域名，登入一看，竟然连CNAME和MX记录都不能创建，非用不可的话就得买他的 web hosting 服务，然后“免费”提供。这好像去饭店吃饭不给你筷子，问他要说您必须再点一盘菜，然后我们送你一套餐具，这不就是敲诈吗？ 还好能改DNS服务器地址，心想自己搭一个Bind吧，看了下那砣另类的zone文件，改主意了，弄不好就得折腾上一天。 想起DNSPod好像是干这事的，但注册一下又是邀请码又是 VIP的，还是算了吧，找到其它两个免费DNS hosting网站分享一下： http://freedns.afraid.org/（推荐） http://www.zoneedit.com/ 配置很简单，在你域名供应商的网站里把DNS服务器改成新的DNS服务器地址，然后再做域名记录添改即可。]]></description>
			<content:encoded><![CDATA[<p>买了一个 com.au 的域名，登入一看，竟然连CNAME和MX记录都不能创建，非用不可的话就得买他的 web hosting 服务，然后“免费”提供。这好像去饭店吃饭不给你筷子，问他要说您必须再点一盘菜，然后我们送你一套餐具，这不就是敲诈吗？</p>
<p>还好能改DNS服务器地址，心想自己搭一个Bind吧，看了下那砣另类的zone文件，改主意了，弄不好就得折腾上一天。</p>
<p>想起DNSPod好像是干这事的，但注册一下又是邀请码又是<br />
VIP的，还是算了吧，找到其它两个免费DNS hosting网站分享一下：</p>
<ul>
<li><a href="http://freedns.afraid.org/">http://freedns.afraid.org/</a>（推荐）</li>
<li><a href="http://www.zoneedit.com/">http://www.zoneedit.com/</a></li>
</ul>
<p>配置很简单，在你域名供应商的网站里把DNS服务器改成新的DNS服务器地址，然后再做域名记录添改即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/08/24/free-dns-hosting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用bash批量重命名</title>
		<link>http://log.dongsheng.org/2010/07/02/bash-bulk-renaming/</link>
		<comments>http://log.dongsheng.org/2010/07/02/bash-bulk-renaming/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 09:33:25 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/75</guid>
		<description><![CDATA[某人让我把某系统插件的主文件名由repository.class.php改成lib.php（真闲的蛋痛），一个个改也行，但之后还可能让我干把icon.png改成pix/icon.png之类的事，所以弄个脚本吧： for i in ./*/repository.class.php; do newpath=`echo $i&#124;sed 's/repository.class.php/lib.php/g'`; mv $i $newpath; done 单行： for i in ./*/repository.class.php; do newpath=`echo [...]]]></description>
			<content:encoded><![CDATA[<p>某人让我把某系统插件的主文件名由repository.class.php改成lib.php（真闲的蛋痛），一个个改也行，但之后还可能让我干把icon.png改成pix/icon.png之类的事，所以弄个脚本吧：</p>
<pre>
for i in ./*/repository.class.php;
do
    newpath=`echo $i|sed 's/repository.class.php/lib.php/g'`;
    mv $i $newpath;
done
</pre>
<p>单行：</p>
<pre>
for i in ./*/repository.class.php; do newpath=`echo $i|sed 's/repository.class.php/lib.php/g'`; mv $i $newpath; done
</pre>
<p>不知道还有没有更好的办法？欢迎指教。</p>
<p>Reference: <a href="http://snipplr.com/view/2736/rename-multiple-files-in-bash-using-regular-expressions/">RENAME MULTIPLE FILES IN BASH USING REGULAR EXPRESSIONS</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/07/02/bash-bulk-renaming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Putty的UTF-8问题</title>
		<link>http://log.dongsheng.org/2010/06/27/putty-trick-of-utf8/</link>
		<comments>http://log.dongsheng.org/2010/06/27/putty-trick-of-utf8/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 11:00:00 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/74</guid>
		<description><![CDATA[Putty有个非常恼人的UTF8问题，比如你用wget下载文件，包括文件名的双引号是显示成乱码的（奇怪这双引号是全角的），有个Trick可以修复这个问题，在.bashrc里加上 echo -ne '\e%G\e[?47h\e%G\e[?47l' 参考：9300i Putty UTF-8 Trick]]></description>
			<content:encoded><![CDATA[<p>Putty有个非常恼人的UTF8问题，比如你用wget下载文件，包括文件名的双引号是显示成乱码的（奇怪这双引号是全角的），有个Trick可以修复这个问题，在.bashrc里加上</p>
<pre>
echo -ne '\e%G\e[?47h\e%G\e[?47l'
</pre>
<p>参考：<a href="http://www.earth.li/~huggie/blog/tech/mobile/putty-utf-8-trick.html">9300i Putty UTF-8 Trick</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/06/27/putty-trick-of-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>陆克文下台了</title>
		<link>http://log.dongsheng.org/2010/06/24/rudd-stepped-down/</link>
		<comments>http://log.dongsheng.org/2010/06/24/rudd-stepped-down/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 04:00:20 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[rudd]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=82</guid>
		<description><![CDATA[党的发炎人总是教育我们，“不能干涉他国内政“，但我只议论议论应该是无妨吧？ 老陆今天下台了，某党自己内部内讧，党魁换成了史上首个女总理（虽然有人不同意，因为不是选出来的）。搞到现在这步，跟大闹移民政策没关系，说实在的，这政策大多数人根本不关心，留学生市场萎缩又能怎样？也不是对澳洲经济伤筋动骨的损失，受损失最大的也仅仅是开私校的而已，真正的大财主/某党代表的普通工人阶级根本不关心。最主要还是征收资源暴利税，加上船民/环保/医疗改革等等政策执行不力，近几个月，陆克文支持率暴跌，眼看着就要大选了……资源税该不该收？我觉得该（不懂经济政治，无责任评论）：资源不可再生就不说了，大家都懂。另外，这些矿业公司都不是纯澳资，政府用这种方式强行入股，也算是为了国家利益的考虑了。再一个，这个国家的经济支柱是矿业，资本都投矿业上了，导致其它行业都萎缩掉了，等资源采光了该怎么办？ 只是始终想不通的是为什么老陆要这么坚决的执行暴利税，坚决到连总理宝座都拱手让人。刚看他离职的发言，觉得他也挺可怜的。 前段时间twitter上有个女人喷，某党就是好啊就是好，因为它跟穷人站在一起的，x党不好，x党是代表富人的……有想法是好事，太自以为是就不好了。这就像你爸妈当然是向着你了，一直惯你宠你，你过的貌似舒坦，但最后离了你爸妈，你就什么也不是了。这里是类似道理，某党宣称移民政策过松导致失业率太高人口激增，所以得改。大爷们怎么不去调查一下，移民都干的什么活？失业的又是怎样的人？通过降低竞争提高一般民众的竞争力，这不跟惯孩子差不多的道理？最后的结果就是穷人还是穷，还造成劳动力成本高居不下，做事效率低。总之，富不富起来，跟谁执政无关，这是个人努力和机遇的问题。还有虽然某些组织纲领是为人民服务，但其实人家只是说着玩玩，您可千万别当真了。 我高中班主任常说一句话“这世界总不能令人满意”，说得太多，慢慢成了坊间流传的笑谈，今天把这话送给老陆，送给不幸坠机的矿产大亨和生活在水深火热中的劳动人民。]]></description>
			<content:encoded><![CDATA[<p>党的发炎人总是教育我们，“不能干涉他国内政“，但我只议论议论应该是无妨吧？</p>
<p>老陆今天下台了，某党自己内部内讧，党魁换成了史上首个女总理（虽然有人不同意，因为不是选出来的）。搞到现在这步，跟大闹移民政策没关系，说实在的，这政策大多数人根本不关心，留学生市场萎缩又能怎样？也不是对澳洲经济伤筋动骨的损失，受损失最大的也仅仅是开私校的而已，真正的大财主/某党代表的普通工人阶级根本不关心。最主要还是征收资源暴利税，加上船民/环保/医疗改革等等政策执行不力，近几个月，陆克文支持率暴跌，眼看着就要大选了……资源税该不该收？我觉得该（不懂经济政治，无责任评论）：资源不可再生就不说了，大家都懂。另外，这些矿业公司都不是纯澳资，政府用这种方式强行入股，也算是为了国家利益的考虑了。再一个，这个国家的经济支柱是矿业，资本都投矿业上了，导致其它行业都萎缩掉了，等资源采光了该怎么办？</p>
<p>只是始终想不通的是为什么老陆要这么坚决的执行暴利税，坚决到连总理宝座都拱手让人。刚看他离职的发言，觉得他也挺可怜的。</p>
<p>前段时间twitter上有个女人喷，某党就是好啊就是好，因为它跟穷人站在一起的，x党不好，x党是代表富人的……有想法是好事，太自以为是就不好了。这就像你爸妈当然是向着你了，一直惯你宠你，你过的貌似舒坦，但最后离了你爸妈，你就什么也不是了。这里是类似道理，某党宣称移民政策过松导致失业率太高人口激增，所以得改。大爷们怎么不去调查一下，移民都干的什么活？失业的又是怎样的人？通过降低竞争提高一般民众的竞争力，这不跟惯孩子差不多的道理？最后的结果就是穷人还是穷，还造成劳动力成本高居不下，做事效率低。总之，富不富起来，跟谁执政无关，这是个人努力和机遇的问题。还有虽然某些组织纲领是为人民服务，但其实人家只是说着玩玩，您可千万别当真了。</p>
<p>我高中班主任常说一句话“这世界总不能令人满意”，说得太多，慢慢成了坊间流传的笑谈，今天把这话送给老陆，送给不幸坠机的矿产大亨和生活在水深火热中的劳动人民。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/06/24/rudd-stepped-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3</title>
		<link>http://log.dongsheng.org/2010/06/18/wordpress3/</link>
		<comments>http://log.dongsheng.org/2010/06/18/wordpress3/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 09:00:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/73</guid>
		<description><![CDATA[WordPress的SVN更新够快的，3.0刚刚发布，TRUNK的版本号就变成了3.1-ALPHA]]></description>
			<content:encoded><![CDATA[<p>WordPress的SVN更新够快的，3.0刚刚发布，TRUNK的版本号就变成了3.1-ALPHA</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/06/18/wordpress3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Busybox for android</title>
		<link>http://log.dongsheng.org/2010/04/15/busybox-for-android/</link>
		<comments>http://log.dongsheng.org/2010/04/15/busybox-for-android/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 08:30:51 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[busybox]]></category>
		<category><![CDATA[Forensics]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/56</guid>
		<description><![CDATA[前几天有个朋友问我怎么搞Android Forensics，说了半天我也不明白Forensics是干什么，然后他拿出作业，其实很简单，就是从Android的文件系统里面拷贝出通话记录/联系人记录 etc，ssh进去不就得了，我马上说，iPhone思维惯式很严重……不知道Android能不能越狱，在adb shell进去的那个shell里找不到ssh相关的东西，毕竟是个极精简的Linux，据说现在还跟Linux分道扬镳了。 然后找到了Busybox，这个东西以前登录路由器的时候常见到，总以为是个嵌入式Linux发行版，其实是一坨打包的GNU工具集，比如想用tar： /bin/busybox tar cjvf archive.tar.bz2 folder 参数可能少一点，但少的那些也很少用到。 有了这个东西就好办了，找到一个预编译的Busybox for Android，就不用自己交叉编译了，然后用adb push到模拟器里，打开adb shell，假设Busybox装到了/data/busybox，就可以用/data/busybox tar把/system和/data打包，存到/sdcard，这样隐私文件都保存到一个img镜像文件里了，在Linux上用mount -o loop加载，Android的文件系统就一览无遗啦。 简单看了以下，Android的用户数据都是存成了SQLite文件，比如联系人是存在/data/data/com.google.android.providers.contacts/databases/contacts.db，Firefox用SQLite [...]]]></description>
			<content:encoded><![CDATA[<p>前几天有个朋友问我怎么搞Android Forensics，说了半天我也不明白Forensics是干什么，然后他拿出作业，其实很简单，就是从Android的文件系统里面拷贝出通话记录/联系人记录 etc，ssh进去不就得了，我马上说，iPhone思维惯式很严重……不知道Android能不能越狱，在adb shell进去的那个shell里找不到ssh相关的东西，毕竟是个极精简的Linux，据说现在还<a href="http://www.kroah.com/log/linux/android-kernel-problems.html">跟Linux分道扬镳了</a>。</p>
<p>然后找到了<a href="http://www.busybox.net/about.html">Busybox</a>，这个东西以前登录路由器的时候常见到，总以为是个嵌入式Linux发行版，其实是一坨打包的GNU工具集，比如想用tar：</p>
<pre>
/bin/busybox tar cjvf archive.tar.bz2 folder
</pre>
<p>参数可能少一点，但少的那些也很少用到。</p>
<p>有了这个东西就好办了，找到一个预编译的<a href="http://benno.id.au/blog/2007/11/14/android-busybox">Busybox for Android</a>，就不用自己交叉编译了，然后用adb push到模拟器里，打开adb shell，假设Busybox装到了/data/busybox，就可以用/data/busybox tar把/system和/data打包，存到/sdcard，这样隐私文件都保存到一个img镜像文件里了，在Linux上用mount -o loop加载，Android的文件系统就一览无遗啦。</p>
<p>简单看了以下，Android的用户数据都是存成了SQLite文件，比如联系人是存在/data/data/com.google.android.providers.contacts/databases/contacts.db，Firefox用<a href="https://addons.mozilla.org/en-US/firefox/addon/5817">SQLite Manager</a>就能打开，用户信息一览无余。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/04/15/busybox-for-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMPP客户端</title>
		<link>http://log.dongsheng.org/2010/04/09/xmpp-clients/</link>
		<comments>http://log.dongsheng.org/2010/04/09/xmpp-clients/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 05:29:28 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/85</guid>
		<description><![CDATA[平日工作是用Jabber跟同事联系，有人笑说，xmpp其实就是开发了一个复杂难懂的IRC协议，功能貌似多了，但我们就是用它当聊天室，Jabber最大的好处就是开放所以在各种平台上都能找到相当不错的客户端软件。 Miranda IM Windows上最好的客户端，没有之一，很喜欢GTalk的界面，可惜它不是标准XMPP客户端，不能进聊天室。 Pidgin 各种平台通吃，没什么缺点，就是群聊的时候不能设置昵称显示格式，某些的昵称很长很长，影响阅读。胜在有大量有用的扩展，比如自动纠错，关键字高亮提醒，别的软件不是缺这就是缺那，Pidgin是唯一集大成的。 Gajim PyGTK写的，很简洁，问题是它的用户列表设计的比较失败，用户组缩进感觉乱七八糟的。 Psi Qt写的，跨平台，非常非常简单，连个群聊书签功能都没有，但也不是说干不了，得打开xmpp console自己输指令，它的显示界面是我最喜欢的，简单清晰，没有多余的东西，缺点是无法用tab组织聊天窗口。 iChat 我最喜欢的，不过只能在苹果上用，装上个chax可以锦上添花。 Empathy 因为Pidgin开发太慢等等问题，Gnome自己弄了一个Empathy，第一次用是在Ubuntu 10.4上，优化的很漂亮，就是没Pidgin那么多功能。]]></description>
			<content:encoded><![CDATA[<p>平日工作是用Jabber跟同事联系，有人笑说，xmpp其实就是开发了一个复杂难懂的IRC协议，功能貌似多了，但我们就是用它当聊天室，Jabber最大的好处就是开放所以在各种平台上都能找到相当不错的客户端软件。</p>
<p><a href="http://www.miranda-im.org/">Miranda IM</a><br />
Windows上最好的客户端，没有之一，很喜欢GTalk的界面，可惜它不是标准XMPP客户端，不能进聊天室。</p>
<p><a href="http://www.pidgin.im/">Pidgin</a><br />
各种平台通吃，没什么缺点，就是群聊的时候不能设置昵称显示格式，某些的昵称很长很长，影响阅读。胜在有大量有用的扩展，比如自动纠错，关键字高亮提醒，别的软件不是缺这就是缺那，Pidgin是唯一集大成的。</p>
<p><a href="http://www.gajim.org/">Gajim</a><br />
PyGTK写的，很简洁，问题是它的用户列表设计的比较失败，用户组缩进感觉乱七八糟的。</p>
<p><a href="http://psi-im.org/">Psi</a><br />
Qt写的，跨平台，非常非常简单，连个群聊书签功能都没有，但也不是说干不了，得打开xmpp console自己输指令，它的显示界面是我最喜欢的，简单清晰，没有多余的东西，缺点是无法用tab组织聊天窗口。</p>
<p><a href="http://www.apple.com/macosx/what-is-macosx/ichat.html">iChat</a><br />
我最喜欢的，不过只能在苹果上用，装上个<a href="http://www.ksuther.com/chax/">chax</a>可以锦上添花。</p>
<p><a href="http://live.gnome.org/Empathy">Empathy</a><br />
因为Pidgin开发太慢等等问题，Gnome自己弄了一个Empathy，第一次用是在Ubuntu 10.4上，优化的很漂亮，就是没Pidgin那么多功能。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/04/09/xmpp-clients/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP成员函数中竟然也能用static声明变量</title>
		<link>http://log.dongsheng.org/2010/04/07/using-static-variable-in-class-method/</link>
		<comments>http://log.dongsheng.org/2010/04/07/using-static-variable-in-class-method/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 02:08:57 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=84</guid>
		<description><![CDATA[又发现一个PHP Feature，PHP成员函数中竟然也能用static声明变量。怎么想怎么奇怪，你都创建新实例了，怎么static还是有效？不过有时候还蛮有用的。 class static_var { function __construct($name) { $this->name = $name; } function output() { static $counter; $counter++; echo $counter.'&#124;'.$this->name.'&#124;'; [...]]]></description>
			<content:encoded><![CDATA[<p>又发现一个PHP Feature，PHP成员函数中竟然也能用static声明变量。怎么想怎么奇怪，你都创建新实例了，怎么static还是有效？不过有时候还蛮有用的。</p>
<pre>
class static_var {
    function __construct($name) {
        $this->name = $name;
    }
    function output() {
        static $counter;
        $counter++;
        echo $counter.'|'.$this->name.'|';
    }
}
$t1 = new static_var('take 1');
$t1->output();
$t2 = new static_var('take 2');
$t2->output();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/04/07/using-static-variable-in-class-method/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>把车卖了</title>
		<link>http://log.dongsheng.org/2010/04/04/sold-my-car/</link>
		<comments>http://log.dongsheng.org/2010/04/04/sold-my-car/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:00:40 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[carsale]]></category>
		<category><![CDATA[vehicle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/80</guid>
		<description><![CDATA[托三月二十二号大冰雹的福，这周五终于把我的第一辆车卖掉了，买家是个刚拿到保险公司赔款的女士，试了两次车，连价都不讲就买下了车，一方面有保险公司赔钱，另一方面如果她再办保险，申请赔付的金额也高，所以干脆就不讲价。我也挺赚，卖出价只比我买入价低500块，按照每年的折旧率，算是个不错的价格了。当初买车的时候不懂，还花钱办了一个dealer的有限质保，事实证明这个完全没用，几乎可以说是dealer骗钱的利器，还好我不厌其烦的磨回一半，算算还不亏多少。 卖车其实很简单，到license center拿一张transfer form（免费），还得要一张包含车基本信息的Vehicle license paper（很黑，打印这张纸要$8），然后和买家添添表核对一下信息就行了。支付最好是用支票，那个买车的女士没听明白我的话，最后给的我现金 -_-，不得不跑了趟银行存钱，好久没见过真钱了。没了车还是很麻烦的，四天的假期都没法出去玩了，购物/吃东西都有问题。不过也少了很多麻烦，不用关心油价/找停车位/保养。 之前一直打算卖了这车然后换辆新车，但看到二手车这么保值有点犹豫了，新车买了是100%没法原价卖出的，买个好的二手车开起来也很爽，运气好了还能原价卖出去，相当于白开了几年。另一方面，不想在汽车上投资太多，还是攒钱买房最保值。 Anyway，先过几天没车的生活吧，不知道我能坚持多久]]></description>
			<content:encoded><![CDATA[<p>托三月二十二号大冰雹的福，这周五终于把我的第一辆车卖掉了，买家是个刚拿到保险公司赔款的女士，试了两次车，连价都不讲就买下了车，一方面有保险公司赔钱，另一方面如果她再办保险，申请赔付的金额也高，所以干脆就不讲价。我也挺赚，卖出价只比我买入价低500块，按照每年的折旧率，算是个不错的价格了。当初买车的时候不懂，还花钱办了一个dealer的有限质保，事实证明这个完全没用，几乎可以说是dealer骗钱的利器，还好我不厌其烦的磨回一半，算算还不亏多少。</p>
<p>卖车其实很简单，到license center拿一张transfer form（免费），还得要一张包含车基本信息的Vehicle license paper（很黑，打印这张纸要$8），然后和买家添添表核对一下信息就行了。支付最好是用支票，那个买车的女士没听明白我的话，最后给的我现金 -_-，不得不跑了趟银行存钱，好久没见过真钱了。没了车还是很麻烦的，四天的假期都没法出去玩了，购物/吃东西都有问题。不过也少了很多麻烦，不用关心油价/找停车位/保养。</p>
<p>之前一直打算卖了这车然后换辆新车，但看到二手车这么保值有点犹豫了，新车买了是100%没法原价卖出的，买个好的二手车开起来也很爽，运气好了还能原价卖出去，相当于白开了几年。另一方面，不想在汽车上投资太多，还是攒钱买房最保值。</p>
<p>Anyway，先过几天没车的生活吧，不知道我能坚持多久 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/04/04/sold-my-car/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>山寨 CGVG</title>
		<link>http://log.dongsheng.org/2010/03/28/homemade-cgvg/</link>
		<comments>http://log.dongsheng.org/2010/03/28/homemade-cgvg/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 20:32:07 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[cgvg]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=81</guid>
		<description><![CDATA[CGVG是08年时同事推荐我的搜索工具，查找速度很快，分为cg和vg两个命令，cg查找关键字，vg可以快速打开cg的搜索结果（通过搜索结果里的序号）。 这个东西完全可以装在Mac上，但macport里却没有，我不想在系统里装一堆没法控制的文件，所以就用BASH函数山寨了一个，最基本的： cg (){ grep $1 -rn . } 这个完全没问题，就是生成的格式难看了了点，所以又用awk完善了一下： cg () { grep "$1" -rn . &#124; awk 'BEGIN [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.uzix.net/cgvg.html">CGVG</a>是08年时同事推荐我的搜索工具，查找速度很快，分为cg和vg两个命令，cg查找关键字，vg可以快速打开cg的搜索结果（通过搜索结果里的序号）。</p>
<p>这个东西完全可以装在Mac上，但macport里却没有，我不想在系统里装一堆没法控制的文件，所以就用BASH函数山寨了一个，最基本的：</p>
<pre>
cg (){
    grep $1 -rn .
}
</pre>
<p>这个完全没问题，就是生成的格式难看了了点，所以又用awk完善了一下：</p>
<pre>
cg () {
    grep "$1" -rn . | awk 'BEGIN {FS=":"};{print "\033[1;31mPath:\033[0;0m "$1     " \033[0;31m"  $2 "\033[0;0m\n=> " $3}'
}
</pre>
<p>其实完全可以用awk加上trim和关键字高亮的效果，但把这个脚本变得太长就失去我本意了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/03/28/homemade-cgvg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>微软 Dynamics AX</title>
		<link>http://log.dongsheng.org/2010/03/20/dynamics-ax/</link>
		<comments>http://log.dongsheng.org/2010/03/20/dynamics-ax/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 16:04:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[dynmics]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/79</guid>
		<description><![CDATA[整整熬了五天夜，我终于成功的安装了 Microsoft Dynamics AX 2009(帮别人装的，我对ERP是一点兴趣也没有)。 这之前我干过的很折腾的事是给诺基亚刷机配机器和手动挡安装Gentoo Linux。前者让我恶心透了诺基亚，后者虽然折腾但学到不少东西。而折腾微软的ERP，痛苦且毫无乐趣可言，且不论这个产品怎样，我只说微软的服务器解决方案真是垃圾中的战斗机。 并非是对微软的偏见，年轻时候确实讨厌微软，主要是因为自己愤青，慢慢的也想明白了，作为一个 OS，Windows 还不算太差，微软公司也算是个值得尊敬的企业，我还始终留着个装XP的电脑，玩玩游戏、上QQ、开网银、跑电驴……干这些事，Windows 比 Linux、Mac 强得多了。有人说微软搞垄断把产品价格弄的很高，那就大错特错了，其实微软现在已经够开放了，还把某些入门级产品免费提供给学生，见：http://dreamspark.com，不是开玩笑的，Windows 2008，2003，VS 2010 Ultimate都是正版免费，获取正版序列号的唯一要求就是你有个大学的edu邮箱。 好话说差不多了，言归正传。微软服务器方案相当的臃肿和难用。最搞笑的是，微软推销自己服务器的卖点竟然是易用！有个人人都熟悉的界面可以戳戳点点可不能与易用划等号！ 装这个系统的原因本身就是一个悲剧，因为某大学使用微软的活动目录技术，要通过 VPN 连到学校里访问 [...]]]></description>
			<content:encoded><![CDATA[<p>整整熬了五天夜，我终于成功的安装了 Microsoft Dynamics AX 2009(帮别人装的，我对ERP是一点兴趣也没有)。</p>
<p>这之前我干过的很折腾的事是给诺基亚刷机配机器和手动挡安装Gentoo Linux。前者让我恶心透了诺基亚，后者虽然折腾但学到不少东西。而折腾微软的ERP，痛苦且毫无乐趣可言，且不论这个产品怎样，我只说微软的服务器解决方案真是垃圾中的战斗机。</p>
<p>并非是对微软的偏见，年轻时候确实讨厌微软，主要是因为自己愤青，慢慢的也想明白了，作为一个 OS，Windows 还不算太差，微软公司也算是个值得尊敬的企业，我还始终留着个装XP的电脑，玩玩游戏、上QQ、开网银、跑电驴……干这些事，Windows 比 Linux、Mac 强得多了。有人说微软搞垄断把产品价格弄的很高，那就大错特错了，其实微软现在已经够开放了，还把某些入门级产品免费提供给学生，见：http://dreamspark.com，不是开玩笑的，Windows 2008，2003，VS 2010 Ultimate都是正版免费，获取正版序列号的唯一要求就是你有个大学的edu邮箱。</p>
<p>好话说差不多了，言归正传。微软服务器方案相当的臃肿和难用。最搞笑的是，微软推销自己服务器的卖点竟然是易用！有个人人都熟悉的界面可以戳戳点点可不能与易用划等号！</p>
<p>装这个系统的原因本身就是一个悲剧，因为某大学使用微软的活动目录技术，要通过 VPN 连到学校里访问 Dynamics 服务器，这当然要走防火墙了，但据老师说这个活动目录和防火墙相处的不太和谐，莫名其妙的挡下了 Dynamics 客户端和服务器的通信，老师让我从4.0降级到3.0，还是无法正常连接。邮件来来往往二十余封，依然原地踏步走。</p>
<p>我想这有何难，我在虚拟机里装个 Dynamics 服务器不就行了，谁知这是灾难的开始。</p>
<p>到 <a href="http://www.dreamspark.com">DreamSpark </a>下载了 SQL Server Express (好像就是2008的简化版）Windows 2003和久违的 Virtual PC。在 Virtual PC 中装上 win2003 以后，发现严重的拖影，基本无法正常使用（已经安装了VPC的客户端驱动），于是就在 VMware server 上重新再来，这次没问题了，插上老师给我的 Dynamics 安装盘，启动，然后告诉我必须在一个有域控制器的网络里才能使用，就是说要运行这玩意还得配上活动目录，那就装吧，Easy，2003点几下就给我弄好了 DNS，DHCP 和活动目录，到这里是实实在在的比 Linux 容易，烦人的就是得重启。然后开始装 SQL Server，安装程序开始吵着嚷着让我装 Windows installer 和.Net framework 2.x，装完以后不让我继续装 SQL Server，说必须重启。</p>
<p>好吧……</p>
<p>重启完了，让我装 .Net framework 3.x……难道这两个版本还不兼容？再重启……</p>
<p>好……</p>
<p>终于装上了 SQL Server，发现连个控制台都没有，原来还得装个 xx Studio。</p>
<p>好……</p>
<p>下了一个三百多M的大家伙，启动，不让我装了，说必须装了 Power shell……</p>
<p>微软增强 Shell 了！？好事，所以我忍了！下载、安装……</p>
<p>思维定势了，重启……</p>
<p>装上了，继续装那个 XX Studio</p>
<p>然后开始装 Dynamics AX，算是顺利吧……</p>
<p>装上了……</p>
<p>但是连不上……</p>
<p>到服务里查，服务进程毫无征兆的死掉了，看错误日志，告诉我错误代码100……</p>
<p>妈的，我知道什么是错误代码100！！！谁知道？！连个文档都没有！</p>
<p>问 Google，说是数据库权限设置错误，于是我把 dbadmin 都加个了某用户，得到的还是冰冷冷的错误100。</p>
<p>于是开始了我的微软数据库之旅，装上 SQL Server 2000，告我这个版本太老了。</p>
<p>我想了想也是，都十年了，当年用这数据库的时候，叔我还年轻呢，伤感了一会儿，还是喝酒睡觉吧，明天再折腾……</p>
<p>去下盗版 SQL Server 2005，迅雷是个好地方，即使我从上面下载一千部盗版电影软件，它也能顺利拿到一个视听许可证，并且告诉大家，迅雷的正版率是99.9%，想到这我心里就一点也不别扭了，看看人家的脸皮，我用盗版又算什么？何况叔也只是试用一下而已。可能 13 亿中国人只下 0.1% 的盗版，迅雷就是这么圣洁。</p>
<p>我猜得到这开头，却猜不中这结局，我装上了，却还是连不上，而错误日志没有告诉我一点点有用信息。</p>
<p>怎么办？我开始到国内的几个 ERP 论坛研究，下载了详细到连安装 Windows 2003 都教的教程，跟我完完全全一样的环境，别人没问题，但我的就是连不上！</p>
<p>崩溃了……</p>
<p>万般无奈，又找到迅雷，下载了另一个 Dynamics AX 2009，把上面的步骤又重新做了一遍……然后，又好了……</p>
<p>感谢国家培养了迅雷，感谢迅雷友情提供 Dynamics AX 2009，感谢微软让我测试了如此“强大的” ERP 系统，这果然是个专家才能干的工作，我显然只是个用 XP 打游戏的水平。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/03/20/dynamics-ax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PTY allocation request failed on channel 0</title>
		<link>http://log.dongsheng.org/2010/03/13/pty-allocation-request-failed-on-channel-0/</link>
		<comments>http://log.dongsheng.org/2010/03/13/pty-allocation-request-failed-on-channel-0/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 00:23:33 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[openvz]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=78</guid>
		<description><![CDATA[Archlinux 真是不能做服务器，升一次级就要死一次，你们三天两头倒腾包的布局/命名有啥意思呢？ 这次OpenVZ的用户倒了大霉，升级 udev 以后，ssh 进不去，提示：PTY allocation request failed on channel 0。 这下傻眼了，ssh 进不去这不完了蛋了，修都没法修。 Google 了一下，有个大叔已经研究出了怎么修复，用 `ssh user@dongsheng.org &#8216;/bin/bash -i&#8217;` [...]]]></description>
			<content:encoded><![CDATA[<p>Archlinux 真是不能做服务器，升一次级就要死一次，你们三天两头倒腾包的布局/命名有啥意思呢？</p>
<p>这次OpenVZ的用户倒了大霉，升级 udev 以后，ssh 进不去，提示：PTY allocation request failed on channel 0。</p>
<p>这下傻眼了，ssh 进不去这不完了蛋了，修都没法修。</p>
<p>Google 了一下，有个大叔已经研究出了<a href="http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-248">怎么修复</a>，用 `ssh user@dongsheng.org &#8216;/bin/bash -i&#8217;` 进去，重新挂载 /dev/pts 即可，但这个办法治标不治本，系统重启就又回到原点。在 /etc/rc.d 里放个脚本就行了：</p>
<pre>
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts
</pre>
<p>文件名存为 /etc/rc.d/udevfix，然后在 /etc/rc.conf 的 DEAMON 中加入 udevfix 即可。</p>
<p><a href="http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048">据悉</a>，这个问题是由于 OpenVZ 的模板与 udev 不兼容导致的。</p>
<p>升级 Archlinux 要谨慎啊！！</p>
<p>Credits：<br />
<a href="http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/">http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/</a><br />
<a href="http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048">http://platonic.techfiz.info/2008/10/13/pty-allocation-request-failed-on-channel-0/comment-page-1/#comment-11048</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/03/13/pty-allocation-request-failed-on-channel-0/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>流水账</title>
		<link>http://log.dongsheng.org/2010/03/11/random-note-1/</link>
		<comments>http://log.dongsheng.org/2010/03/11/random-note-1/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:40:42 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/77</guid>
		<description><![CDATA[我网站更新频率已经降到将近两个月一次了，要不是打算试试 MacJournal 好不好用，怕用不了多久就会降到三个月一次了。 上次更新之后，我回国过年了，起飞前一度兴奋的睡不着，心里也明白，回国的生活还是乏善可陈，无非是吃喝玩乐，朋友聚会和父母亲人的唠叨，但家就是个让人一直惦记着的地方，我出国两年多了，其实在国外也慢慢有了自己的生活，但找不到归属感，因为在外国，没有一个叫家的地方。 回国，其实还挺不适用的，不敢上路开车，国人开车之凶悍是我开了一年多车之后才感觉出来的，在澳洲开车得规矩，换道打灯，严控车速，拐弯进转盘都得让路，停车也得规矩，不然难免被罚……回国发现要是这么开车基本上是寸步难行。可是没有车，更是寸步难行，还好国内出租算是便宜，才不至于让自己在家里憋上一个月。 见了一些朋友，但毕业三年以来，见的人其实越来越少，共同话题也是越来越少，工作的那帮人在关注跳槽、加班，上学的那帮人快毕业了关心的是找工作或者是不是应该接着读圣斗士，无论哪一种都被挤压的焦躁不堪，希望明年再见你们的时候都能轻松一些。 回去三个周自己的生活作息被彻底打乱，在东八区过西八区的时间，搞的我到现在都没有恢复过来，生活浑浑噩噩，做事也是乱七八糟，明天改整理一下近期的工作计划，不能庸庸碌碌下去了。 哎，该睡了。]]></description>
			<content:encoded><![CDATA[<p>我网站更新频率已经降到将近两个月一次了，要不是打算试试 <a href="http://www.marinersoftware.com/sitepage.php?page=85">MacJournal</a> 好不好用，怕用不了多久就会降到三个月一次了。</p>
<p>上次更新之后，我回国过年了，起飞前一度兴奋的睡不着，心里也明白，回国的生活还是乏善可陈，无非是吃喝玩乐，朋友聚会和父母亲人的唠叨，但家就是个让人一直惦记着的地方，我出国两年多了，其实在国外也慢慢有了自己的生活，但找不到归属感，因为在外国，没有一个叫家的地方。</p>
<p>回国，其实还挺不适用的，不敢上路开车，国人开车之凶悍是我开了一年多车之后才感觉出来的，在澳洲开车得规矩，换道打灯，严控车速，拐弯进转盘都得让路，停车也得规矩，不然难免被罚……回国发现要是这么开车基本上是寸步难行。可是没有车，更是寸步难行，还好国内出租算是便宜，才不至于让自己在家里憋上一个月。</p>
<p>见了一些朋友，但毕业三年以来，见的人其实越来越少，共同话题也是越来越少，工作的那帮人在关注跳槽、加班，上学的那帮人快毕业了关心的是找工作或者是不是应该接着读圣斗士，无论哪一种都被挤压的焦躁不堪，希望明年再见你们的时候都能轻松一些。</p>
<p>回去三个周自己的生活作息被彻底打乱，在东八区过西八区的时间，搞的我到现在都没有恢复过来，生活浑浑噩噩，做事也是乱七八糟，明天改整理一下近期的工作计划，不能庸庸碌碌下去了。</p>
<p>哎，该睡了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/03/11/random-note-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>网站搬到 ramhost.us 了</title>
		<link>http://log.dongsheng.org/2010/01/29/hosted-on-ramhost/</link>
		<comments>http://log.dongsheng.org/2010/01/29/hosted-on-ramhost/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 04:17:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[ramhost]]></category>
		<category><![CDATA[vps]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/72</guid>
		<description><![CDATA[跟现实搬家一样麻烦，琐碎的小问题不断。OpenVZ 打出来的信息： Result: Starting VE ... VE is unmounted VE is mounted Adding IP address(es): xxx.xxx.xxx.xxx Setting CPU limit: 100 [...]]]></description>
			<content:encoded><![CDATA[<p>跟现实搬家一样麻烦，琐碎的小问题不断。OpenVZ 打出来的信息：</p>
<pre>
Result: Starting VE ...
VE is unmounted
VE is mounted
Adding IP address(es): xxx.xxx.xxx.xxx
Setting CPU limit: 100
Setting CPU units: 1000
Setting devices
Configure meminfo: 98304
Set hostname: vzxxx.ramhost.us
File resolv.conf was modified
Setting quota ugidlimit: 1000
VE start in progress...
VE is already running
</pre>
<p>我先试用一个月，有兴趣入伙的，给我发个消息要“钥匙” <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2010/01/29/hosted-on-ramhost/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Mac 转移用户文件夹</title>
		<link>http://log.dongsheng.org/2009/11/16/mac-migrate-user-dir/</link>
		<comments>http://log.dongsheng.org/2009/11/16/mac-migrate-user-dir/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 03:40:47 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[ditto]]></category>
		<category><![CDATA[dscl]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=71</guid>
		<description><![CDATA[笔记本的开关机速度已经慢到无法忍受，昨天就重装了，这还是我第一次重装 Mac 操作系统，安装过程轻松愉快，一点也不折腾。 但由于要重新分区，所以得备份所有数据，我 iTunes 里的音乐已经多达 35G，备份相当费时。反过来讲，这也是我要重分区的主要目的，把用户目录转移到一个新分区，以后重装就不用重复备份数据的痛苦了。 转移目录其实很简单，在图形界面就可以做：在系统设置->用户帐号->右键点击用户名->在高级设置里就可以更改。 但我转移的时候还不知道有这么简单的办法，是在终端上改的： 1. 把当前用户目录同步到目标卷标： sudo ditto -rsrc /Users/dongsheng /Volumes/storage/Users/dongsheng 2. 然后用 dscl 更改用户目录设置： [...]]]></description>
			<content:encoded><![CDATA[<p>笔记本的开关机速度已经慢到无法忍受，昨天就重装了，这还是我第一次重装 Mac 操作系统，安装过程轻松愉快，一点也不折腾。</p>
<p>但由于要重新分区，所以得备份所有数据，我 iTunes 里的音乐已经多达 35G，备份相当费时。反过来讲，这也是我要重分区的主要目的，把用户目录转移到一个新分区，以后重装就不用重复备份数据的痛苦了。</p>
<p>转移目录其实很简单，在图形界面就可以做：在系统设置->用户帐号->右键点击用户名->在高级设置里就可以更改。</p>
<p>但我转移的时候还不知道有这么简单的办法，是在终端上改的：</p>
<p>1. 把当前用户目录同步到目标卷标：</p>
<pre>
sudo ditto -rsrc /Users/dongsheng /Volumes/storage/Users/dongsheng
</pre>
<p>2. 然后用 dscl 更改用户目录设置：</p>
<pre>
sudo dscl . -change /Users/dongsheng NFSHomeDirectory /Volumes/storage/Users/dongsheng
</pre>
<p>3. 删掉旧的用户目录，然后做个符号链接</p>
<pre>
sudo rm -rf /Users/dongsheng
sudo ln -s /Volumes/storage/Users/dongsheng /Users/dongsheng
</pre>
<p>注意，有的文章说要用 niutil 重新设置用户目录，但这个命令在 10.5 以后的操作系统中不存在，需要用 dscl 处理。</p>
<p>比 Linux 麻烦的多，Linux 只用 usermod -m 即可搞定，可能 Mac 的设计目标是鼓励用户使用 GUI 而忽略了优化终端吧。</p>
<p>参考文章：</p>
<ul>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/dscl.1.html">dscl manpage</a></li>
<li><a href="http://www.macosxhints.com/article.php?story=20071025175202466">10.5: Move a user&#8217;s home directory via the command line System 10.5</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/11/16/mac-migrate-user-dir/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Xmarks 使用自建服务器</title>
		<link>http://log.dongsheng.org/2009/10/20/xmarks-webdav-server/</link>
		<comments>http://log.dongsheng.org/2009/10/20/xmarks-webdav-server/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 05:39:02 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[webdav]]></category>
		<category><![CDATA[xmarks]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=70</guid>
		<description><![CDATA[听说天朝把 Xmarks 也封了，真卄了。这样下去今年过年回家只能喝西北风了，我看 Dropbox 也快了，党国是一定要赶尽杀绝的。 读了下 Xmarks 的文档，原来 Xmarks 是支持自建服务器的，只要给 WebDAV 和 FTP 写权限就行了，弄起来很简单，这样的另一个好处的是可以放心大胆的把密码也给同步了，记录一下启用的步骤： 1. 启用 Apache 的 WebDav 模块，Arch [...]]]></description>
			<content:encoded><![CDATA[<p>听说天朝把 Xmarks 也封了，真卄了。这样下去今年过年回家只能喝西北风了，我看 Dropbox 也快了，党国是一定要赶尽杀绝的。</p>
<p>读了下 Xmarks 的文档，原来 Xmarks 是支持自建服务器的，只要给 WebDAV 和 FTP 写权限就行了，弄起来很简单，这样的另一个好处的是可以放心大胆的把密码也给同步了，记录一下启用的步骤：</p>
<p>1. 启用 Apache 的 WebDav 模块，Arch Linux 默认把 WebDav 设置放到 extra/httpd-dav.conf 了，在 /etc/httpd/conf/httpd.conf 中反注释掉好了，我的配置如下：</p>
<pre>
DavLockDB "/var/log/httpd/DavLock/DavLockDB"
Alias /xmarks "/srv/webdav/xmarks"
&lt;Directory "/srv/webdav/xmarks"&gt;
    Dav On
    Order Allow,Deny
    Allow from all
    AuthType Digest
    AuthName xmarks-rule
    AuthUserFile "/etc/httpd/user.passwd"
    AuthDigestProvider file
    &lt;LimitExcept GET OPTIONS&gt;
        require user xmarks
    &lt;/LimitExcept&gt;
&lt;/Directory&gt;
</pre>
<p>2. 创建 //var/log/httpd/DavLock/ 和 /srv/webdav/xmarks 目录，设置写权限<br />
3. 创建用户</p>
<pre>
htdigest -c "/etc/httpd/user.passwd" xmarks-rule xmarks
</pre>
<p>xmarks-rule 对应 AuthName， xmarks 对应 require user xmarks<br />
4. 在 Xmarks 里勾上 Use own server，Bookmark URL 设置成 http://localhost/xmarks/xmarks.json，注意 xmarks.json 是创建在 /src/webdav/xmarks/ 目录下。</p>
<p>然后同步一下试试吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/10/20/xmarks-webdav-server/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>又一篇 Archlinux 安装笔记</title>
		<link>http://log.dongsheng.org/2009/10/01/archlinux-installation-2/</link>
		<comments>http://log.dongsheng.org/2009/10/01/archlinux-installation-2/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 04:10:21 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[openbox]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=68</guid>
		<description><![CDATA[这次重装主要是为了把系统整到 lvm 上，曾很痛苦的给 home 换过分区，用上 lvm 就终结痛苦了，安装过程遇到的一些小问题总结一下 应用 lvm 是照着 Installing Arch Linux on LVM 来的，我的分区方案是：128M 的 ext3 分区挂到 /boot，剩下的所有空间加入到 [...]]]></description>
			<content:encoded><![CDATA[<p>这次重装主要是为了把系统整到 lvm 上，曾很痛苦的给 home 换过分区，用上 lvm 就终结痛苦了，安装过程遇到的一些小问题总结一下</p>
<ol>
<li>应用 lvm 是照着 <a href="http://wiki.archlinux.org/index.php/LVM#Installing_Arch_Linux_on_LVM">Installing Arch Linux on LVM</a> 来的，我的分区方案是：128M 的 ext3 分区挂到 /boot，剩下的所有空间加入到 lvm 中，/var, /home, / 等使用 lvm 分区，我曾把 /etc 也弄成 lvm 分区，但启动过程中，系统找不到 /etc 里配置文件（比如 initlevel），所以慎用</li>
<li>grub 2 改了磁盘命名方式，以前的 (hd0,0) 现在要写成 (hd0,1) 了，也不算坏，终于跟 /dev 里的命名方式一致了 (hd0, 1) == /dev/sda1</li>
<li>grub 中镜像路径的问题，如果 /boot 是独立分区的话，kernel 路径是 /kernel26，如果不是就得写成 /boot/kernel26</li>
<li>桌面换成 slim+openbox，进入 slim 以后键盘鼠标全部无效，经查是 archlinux 没有装上 xf86-input-mouse 和 xf86-input-keyboard，我真。。。把 hal 和这两个包都装上，并在 rc.conf 的 DAEMONS 里加上 hal，重启就好了，还有要 .xinitrc 中加上 exec openbox-session</li>
<li>openbox 的自动启动是通过脚本实现的，详见：<a href="http://icculus.org/openbox/index.php/Help:Autostart">Help:Autostart</a></li>
<li>ibus 虽然要你把几个环境变量加到 .bashrc，但不要这么干，最好放到 /etc/profile 里</li>
<li>界面透明，在 autostart.sh 中加上
<pre>
<del datetime="2009-10-02T18:09:25+00:00">xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &#038;</del>
</pre>
<pre>
xcompmgr ＆
</pre>
<blockquote><p>经实验，阴影效果极差，常在桌面上拖影，所以去掉</p></blockquote>
<p>然后 tilda 就能透明啦，用 transset 让没有内置透明的实现透明</li>
<li>还有 archlinux 那帮偏执狂把 php 的 apache 模块分离出来了，叫做 php-apache</li>
<li>不喜欢 openbox 的 gtk 风格，装上了 <del datetime="2009-10-02T18:06:17+00:00">gtk-theme-switch2</del> gtk-chtheme 和 clearlooks-bluecurve-gtk-theme &#038; gtk-aurora-engine</li>
<li>今天折腾一下午，终于把系统字体改的满意了：<a href="http://github.com/dongsheng/config/raw/archlinux/.fonts.conf">.fonts.conf</a></li>
</ol>
<p>最后，找到一篇 <a href="http://urukrama.wordpress.com/openbox-guide">openbox 配置指南</a>，慢慢研究吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/10/01/archlinux-installation-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>申请 US B1 签证 DIY</title>
		<link>http://log.dongsheng.org/2009/09/14/us-b1-visa/</link>
		<comments>http://log.dongsheng.org/2009/09/14/us-b1-visa/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 05:47:38 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[b-1]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[us]]></category>
		<category><![CDATA[visa]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=69</guid>
		<description><![CDATA[今年作为 mentor 参加了 Google summer of code 2009，上个月项目顺利结束，Google 邀请我们 Moodle 的两个 Mentor 去山景城一游，我的同事是法国人，法国加入了 Visa Waiver Program，所以根本不用申请签证，问公司其他人（都是澳洲人新西兰人，还有个美国人）也对此一无所知，传说中的澳洲护照是算的上旅游最佳护照了，去大多数国家都不用签证，只好自己 DIY 了。说起我签证的问题，我老板还讲了去年去中国申请中国签证的故事，去趟中国光有一般材料（护照，bank statement之类）是远远不够的，还得准备出生证，结婚证，他跑了三趟中国大使馆才申请下来，所以想想别的国家对中国护照如此苛责，也不算过分，谁让中国也对人家这么严格呢？话说中国在世界上也有了不小的影响力（常参加个鸡八，鸡土会议），一本中国护照却在世界上基本没有影响力，怎么在开放的问题上就这么跟不上时代？ 这是我第三次申请签证了，第一次是办澳洲的学生签证，表格之多令人发指，这也可以理解，毕竟是个长达四年的签证，澳洲又不是慈善机构。这些都不算啥，最让我恶心和难忘的是某些政府部门的办事态度，花了一整天去办无婚姻证明，为了一个狗屎文件，就是不给我开证明，我打车在烈日炎炎的济南来回跑了两趟……不想提了，快三年前的事了，想起来还是很窝火。第二次是申请 [...]]]></description>
			<content:encoded><![CDATA[<p>今年作为 mentor 参加了 Google summer of code 2009，上个月项目顺利结束，Google 邀请我们 Moodle 的两个 Mentor 去山景城一游，我的同事是法国人，法国加入了 <a href="http://en.wikipedia.org/wiki/Visa_Waiver_Program">Visa Waiver Program</a>，所以根本不用申请签证，问公司其他人（都是澳洲人新西兰人，还有个美国人）也对此一无所知，传说中的澳洲护照是算的上旅游最佳护照了，去大多数国家都不用签证，只好自己 DIY 了。说起我签证的问题，我老板还讲了去年去中国申请中国签证的故事，去趟中国光有一般材料（护照，bank statement之类）是远远不够的，还得准备出生证，结婚证，他跑了三趟中国大使馆才申请下来，所以想想别的国家对中国护照如此苛责，也不算过分，谁让中国也对人家这么严格呢？话说中国在世界上也有了不小的影响力（常参加个鸡八，鸡土会议），一本中国护照却在世界上基本没有影响力，怎么在开放的问题上就这么跟不上时代？</p>
<p>这是我第三次申请签证了，第一次是办澳洲的学生签证，表格之多令人发指，这也可以理解，毕竟是个长达四年的签证，澳洲又不是慈善机构。这些都不算啥，最让我恶心和难忘的是某些政府部门的办事态度，花了一整天去办无婚姻证明，为了一个狗屎文件，就是不给我开证明，我打车在烈日炎炎的济南来回跑了两趟……不想提了，快三年前的事了，想起来还是很窝火。第二次是申请 457 签证，这次是简单的令人发指，公司给我提交了 <a href="http://www.immi.gov.au/skilled/skilled-workers/sbs/step-2.htm">Nomination</a> 申请，我添了<a href="http://www.immi.gov.au/e_visa/employer-sponsored.htm">一个表</a>，然后到移民局补充了一下材料，不到一周就批下来了，可能 onshore 申请更容易吧。这是第三次了，情况变得有点特别，在澳洲作为一个中国人申请美国签证，找到美国大使馆在澳洲的网站，发现申请也没什么区别。本来还担心得跑到堪培拉大使馆面试，翻了翻网站发现原来在<a href="http://maps.google.com.au/maps?hl=en&#038;safe=off&#038;client=firefox-a&#038;q=16+St+Georges+Terrace,+Perth+WA+6000&#038;ie=UTF8&#038;f=q&#038;sll=-25.335448,135.745076&#038;sspn=38.161973,47.373047&#038;ll=-31.954383,115.869884&#038;spn=0.011852,0.027874&#038;t=h&#038;z=16&#038;iwloc=A">珀斯有个办公室</a>，网站：http://perth.usconsulate.gov/consular/visas/niv/</p>
<p>我简述一下申请的步骤：</p>
<ol>
<li>
去美国政府网站填写 <a href="https://ceac.state.gov/genniv/">DS-160</a> 申请表，在这一步里要上传一张个人照片，照片的要求：<a href="http://travel.state.gov/visa/frvi/frvi_3877.html">Guidelines for Producing High Quality Photographs for U.S. Travel Documents &#8211; for Visa Online Applications</a>，添完以后，要把确认页面打印出来，最好把整个申请表也打印出来，备份用。</li>
<li>定一个面试时间，使用 <a href="https://aus.us-visaservices.com/Forms/DetermineTCN.aspx">VisaPoint service</a> 网站，定时间要花 14 澳元拿一个 PIN，申请完以后，打印出出确认页</li>
<li>去邮局交 170 澳元的 VISA 申请费，不用带任何资料，跟邮局的人说我要交美国签证申请费就搞定了</li>
<li>准备材料，<a href="http://hubpages.com/hub/Documents-Checklist-for-non-immigrant-VISA-interview-L1-H1B-B1-B2-F1-M1-Visas">Documents Checklist for non-immigrant VISA interview (L1, H1B, B1, B2, F1, M1 Visas)</a>
<ul>
<li>各种申请表，包括之前填写的 DS-160 表，Visa point 确认信，邮局的收条</li>
<li>商务旅游需要来自美国公司的邀请信，我把 Google 的邀请信打印出来了</li>
<li>护照照片（两寸的方形照片）</li>
<li>一个挂号信，给你把护照寄回去用</li>
<li>护照</li>
<li><del datetime="2009-09-16T03:44:42+00:00">旅游行程，我打印出机票了</del></li>
<li><del datetime="2009-09-16T03:44:42+00:00">税单</del></li>
<li><del datetime="2009-09-16T03:44:42+00:00">Bank statement，证明自己有财力在美国呆着</del></li>
</ul>
</li>
</ol>
<p>还有个官方的网站详细介绍申请签证的步骤：<a href="http://perth.usconsulate.gov/consular/visas/niv/">How to apply</a></p>
<p>然后……我周三去面试，Good luck！</p>
<blockquote><p>Last edited 14th, Sep, 2009</p>
<p>今天签证批准了，明后天贴签寄给我，文档列表里的删除掉的项目的表示实际不用出示。</p>
<p>Perth 的领事馆搞得很防恐，先在四楼 security check，不准带手机，钥匙，搞得跟登飞机一样，搞完了让我说十三楼，真的办公室在十三楼，进去的时候又过了一个 Gate 才见到领事馆真容，找地方坐下见到一个亚洲人，我一看就是个中国来的博士，从着装（就是好学生那种打扮），举止（坐立不安），口音（坚定了我的判断）种种方面说明了自己博士的身份，跟签证官对答时说自己是 UWA 的 PhD，是到美国大学访问的，解释访美原因的时候满嘴量子物理，牛死了。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/09/14/us-b1-visa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTTPS 自签证书</title>
		<link>http://log.dongsheng.org/2009/09/07/https-certificate/</link>
		<comments>http://log.dongsheng.org/2009/09/07/https-certificate/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 07:45:09 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[https]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=66</guid>
		<description><![CDATA[关于 SSL 的 CA 签名和用户加密过程，有篇简要介绍。 要自签证书自然需要自建的 CA 证书和你服务器的证书。 首先创建 CA 证书 创建 CA 的 rsa 私钥，私钥 4096 位： openssl genrsa [...]]]></description>
			<content:encoded><![CDATA[<p>关于 SSL 的 CA 签名和用户加密过程，有篇<a href="https://ssl.trustwave.com/support/support-how-ssl-works.php">简要介绍</a>。</p>
<p>要自签证书自然需要自建的 CA 证书和你服务器的证书。</p>
<p><strong>首先创建 CA 证书</strong></p>
<ol>
<li>创建 CA 的 rsa 私钥，私钥 4096 位：
<pre>
openssl genrsa -out ca.key 4096
</pre>
<p>如果要加密私钥，可以加上 -des3 参数，给私钥加上 pass phrase</li>
<li>
创建 x509 证书</p>
<pre>openssl req -new -x509 -days 3650 -key ca.key -out ca.crt</pre>
</li>
</ol>
<p><strong>服务器证书</strong></p>
<ol>
<li>创建私钥
<pre>openssl genrsa -out server.key 4096</pre>
</li>
<li>
创建<a href="http://en.wikipedia.org/wiki/Certificate_signing_request">签名请求</a></p>
<pre>openssl req -new -key server.key -out server.csr</pre>
</li>
<li>
用 CA 证书给 csr 签名，然后生成服务器证书（既公钥）</p>
<pre>openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>
</li>
</ol>
<p><strong>修改 Apache，把下面的配置放到虚拟机配置段里</strong></p>
<pre>SSLEngine on
SSLCertificateFile /etc/httpd/ssl/dongsheng.moodle.local/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/dongsheng.moodle.local/server.key</pre>
<p>为了让浏览器更好的支持自建证书最好把该证书加到系统里，参见：<a href="http://code.google.com/p/chromium/wiki/LinuxCertManagement">Configuring SSL certificates on Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/09/07/https-certificate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[LCOTW] chmod 的两个特殊权限位</title>
		<link>http://log.dongsheng.org/2009/08/18/sticybit-setuidbit/</link>
		<comments>http://log.dongsheng.org/2009/08/18/sticybit-setuidbit/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 08:20:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[permission]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/67</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week)，我打算改改名，叫 Linux commands Of The Quarter 把，人越来越懒了，学到的新东西懒得记下来，等忘了的时候又重新找重新学，太傻了。 执行 ls -l /bin 会发现除了熟悉的 r w x [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (Linux Commands Of The Week)，我打算改改名，叫 Linux commands Of The Quarter 把，人越来越懒了，学到的新东西懒得记下来，等忘了的时候又重新找重新学，太傻了。</p>
<p>执行 ls -l /bin 会发现除了熟悉的 r w x 权限外，还有一些可执行文件有一个 s 权限位（setuid bit），这是啥意思呢？<br />
这个 s 权限可以让文件以文件 owner 的权限运行，做个实验：</p>
<pre>
sudo touch /test
rm /test #failed! You don't have permission
sudo chmod u+s `which rm`
rm /test #worked!
</pre>
<p>可以看出这个权限位是很危险的，它可以让一个普通用户以 root 权限运行程序，所以慎用。</p>
<p>还有一个叫 Sticky bit，这个权限只对目录有效 chmod +t /dir（为什么不叫 s？因为已经被 setuid bit 枪了，只好用第二个字符了），一个典型例子是 /tmp，这个目录是全局可写的，sticky bit 可以让文件只能被文件 owner 删除。</p>
<p>这两个权限位的数字表示方法：</p>
<pre>
4000 setuid bit
2000 setgid bit
1000 sticky bit
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/08/18/sticybit-setuidbit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hands on Kindle 2</title>
		<link>http://log.dongsheng.org/2009/07/30/hands-on-kindle/</link>
		<comments>http://log.dongsheng.org/2009/07/30/hands-on-kindle/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:26:19 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=65</guid>
		<description><![CDATA[Kindle 飘洋过海终于到了我的手上，穿过太平洋和大洋洲来到澳洲西岸之用了六天，世界真小。 拿到手之后终于不纠结于 Kindle DX 了，DX 可以直接读 PDF 还有一个更大的屏幕，但价格太贵，思量再三还是买了 Kindle，心想如果以后真的需要再整个大的吧。Kindle 其实大小挺合适了，我也只是打算来读读小说，并不打算读什么技术书籍。 屏幕 前面说了，屏幕不大，但读一般的书绝对够了，除非你要看 A4 大小的 PDF。Kindle 2 实际的显示效果没有在网上看到的惊艳，但确实很像一本真正的书了，翻页比较慢，会闪动一下，不太爽 键盘 很生硬，反正很少用，无所谓了 [...]]]></description>
			<content:encoded><![CDATA[<p>Kindle 飘洋过海终于到了我的手上，穿过太平洋和大洋洲来到澳洲西岸之用了六天，世界真小。</p>
<p>拿到手之后终于不纠结于 Kindle DX 了，DX 可以直接读 PDF 还有一个更大的屏幕，但价格太贵，思量再三还是买了 Kindle，心想如果以后真的需要再整个大的吧。Kindle 其实大小挺合适了，我也只是打算来读读小说，并不打算读什么技术书籍。</p>
<p>屏幕<br />
前面说了，屏幕不大，但读一般的书绝对够了，除非你要看 A4 大小的 PDF。Kindle 2 实际的显示效果没有在网上看到的惊艳，但确实很像一本真正的书了，翻页比较慢，会闪动一下，不太爽</p>
<p>键盘<br />
很生硬，反正很少用，无所谓了</p>
<p>网络<br />
本以为是内置 WIFI 网络，买了之后看网上评测才知道是 3G 网络，US only，在网上找到《<a href="http://hutuworm.blogspot.com/2009/03/kindle-2.html">Kindle 2 上手记</a>》，就在 Archlinux 上试了一下联网，可能是内核被我编译次了，怎么也找不到 Kindle 这个 USB 设备，回家再试试吧，现在上班不好折腾</p>
<p>文件转换<br />
在 amazon 注册 kindle 时可以指定一个邮箱用以转换电子书，我的地址是 dongsheng@free.kindle.com，试着转化了一下 <a href="http://tldp.org/LDP/abs/html/">Advanced Bash-Scripting Guide</a>，速度还蛮快，还有一个叫 <a href="http://www.mobipocket.com/en/downloadSoft/ProductDetailsCreator.asp">MobiPocket</a> 的转换工具，现在没有 Windows 机器，回家再试试吧。</p>
<p>字典<br />
这是我选择 Kindle 的一个重要原因，方便看英文书，用五向按钮选择文字，然后 Kindle 最下面就会显示出单词释义，不错……但还是远远不如 Treo 650 上的 vbook……</p>
<p>汉化和文本阅读还没法试（在办公室朗读有点猖狂），回家补上。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/07/30/hands-on-kindle/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mercurial for Google Code 的几个小技巧</title>
		<link>http://log.dongsheng.org/2009/07/24/mercurial-for-google-code-tips/</link>
		<comments>http://log.dongsheng.org/2009/07/24/mercurial-for-google-code-tips/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:31:22 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/64</guid>
		<description><![CDATA[为了方便改本站主题，我把代码放在了 Google Code 上，一冲动把代码管理工具选成了 Mercurial 而不是熟悉的 SVN，Mercurial 操作起来跟 Git 差不多，但配置碰到一些小问题。 1. 无法象 SVN 一样记住登录密码 解决办法：打开 .hg/hgrc ，默认是这样的： [paths] default = [...]]]></description>
			<content:encoded><![CDATA[<p>为了方便改本站主题，我把代码放在了 Google Code 上，一冲动把代码管理工具选成了 Mercurial 而不是熟悉的 SVN，Mercurial 操作起来跟 Git 差不多，但配置碰到一些小问题。<br />
1. 无法象 SVN 一样记住登录密码<br />
解决办法：打开 .hg/hgrc ，默认是这样的：</p>
<pre>
[paths]
default = https://projectname.googlecode.com/hg
</pre>
<p>把密码和用户名填到 URL 里就行啦</p>
<pre>
[paths]
default = https://accountname:password@projectname.googlecode.com/hg
</pre>
<p>2. 提示没有设置用户名<br />
解决办法：在 .hg/hgrc 中添加</p>
<pre>
[ui]
username = Dongsheng Cai
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/07/24/mercurial-for-google-code-tips/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>原来我也有 PageRank</title>
		<link>http://log.dongsheng.org/2009/07/24/my-pagerank/</link>
		<comments>http://log.dongsheng.org/2009/07/24/my-pagerank/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 18:40:52 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[pagerank]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=53</guid>
		<description><![CDATA[用 prchecker 查了一下，原来我的网站 PageRank == 2 Updated 24th, July, 2009 现在涨到 3 啦，好玩]]></description>
			<content:encoded><![CDATA[<p>用 <a href="http://prchecker.info/">prchecker</a> 查了一下，原来我的网站 PageRank == 2 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>Updated 24th, July, 2009<br />
现在涨到 3 啦，好玩</p></blockquote>
<div>
<img src="http://pr.prchecker.info/getpr.php?codex=aHR0cDovL2RvbmdzaGVuZy5vcmc=&#038;tag=3" title="Pagerank" alt="Free Page Rank Tool" height="15px" width="80px" /></div>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/07/24/my-pagerank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>书和 Kindle 2</title>
		<link>http://log.dongsheng.org/2009/07/24/waiting-kindle-2/</link>
		<comments>http://log.dongsheng.org/2009/07/24/waiting-kindle-2/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:27:56 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/59</guid>
		<description><![CDATA[早在上大学的时候就动过买电子阅读器的野心，但动辄几千块的 iRex iLiad 和 Sony Reader PRS-XXX 是穷学生无福消受的，另一个没有购买的原因是手上有一台 Treo 650，vbook + zdic_da 给了我难以忘怀的阅读体验，除了屏幕太小，怕是找不到比他更好的读书机了。那时候每天都要到 hi-pda 的 geek talks 版流流口水，但有 Treo 在手，心里还是有几分自得。 [...]]]></description>
			<content:encoded><![CDATA[<p>早在上大学的时候就动过买电子阅读器的野心，但动辄几千块的 iRex iLiad 和 Sony Reader PRS-XXX 是穷学生无福消受的，另一个没有购买的原因是手上有一台 Treo 650，vbook + zdic_da 给了我难以忘怀的阅读体验，除了屏幕太小，怕是找不到比他更好的读书机了。那时候每天都要到 <a href="http://www.hi-pda.com/forum/">hi-pda</a> 的 <a href="http://www.hi-pda.com/forum/forumdisplay.php?fid=7">geek talks</a> 版流流口水，但有 Treo 在手，心里还是有几分自得。</p>
<p>2007 年底出国，这之后的每天都在奔波，上学、打工，几乎没再读过一本书。再后来工作了，以为属于自己的时间更多了，有时间读几本书了，事实是心都野了，每天不是抱着电脑上网就是往床上一躺。电脑上的电子书一坨，但坐在电脑前，想完完整整看本书真是太难了，信息干扰太大。于是开始买实体书，常去的两个网站是 <a href="http://fishpond.com.au">fishpond.com.au</a> 和 <a href="http://www.bookdepository.co.uk">www.bookdepository.co.uk</a>，前者是澳洲本地网站，所以送货速度快一点，消费五十以上免邮费，后者是个英国网站，全球免费送货，而且价格通常是最便宜的，买书前可以从 <a href="http://www.booko.com.au">www.booko.com.au</a> 对比一下书的价格，通常 Book depository 就是最便宜的，比亚马逊还便宜。</p>
<p>最近关于 <a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Generation/dp/B00154JDAI">kindle 2</a> 的信息越来越多了，早已是心痒难耐，尚犹豫花近 300 多美刀买这么个 gadget 是否值得？前几天发生的事坚定了购买决心：拿回借出的几本实体书，书已经破旧的让人心疼了，想来电子书是摆脱这种痛苦的最佳办法。于是第二天就在 ebay 上买下了 kindle 2，DX 很诱人，但我想 kindle 2 暂时肯定够我用了，要是以后有这需求再买吧。</p>
<p>希望 kindle 2 能让我再找回阅读的乐趣。</p>
<p>BTW，找到一个可以追踪包裹的网站：<a href="http://boxoh.com/">boxoh.com</a>，可以将包裹状态显示在 Google maps。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/07/24/waiting-kindle-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Patch 中添加新文件</title>
		<link>http://log.dongsheng.org/2009/07/06/including-new-files-in-a-patch/</link>
		<comments>http://log.dongsheng.org/2009/07/06/including-new-files-in-a-patch/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 08:10:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[cvsdo]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/49</guid>
		<description><![CDATA[我们的项目使用 CVS 托管代码，在把提交代码前，我们通常会创建一个 Patch，然后放到 Tracker 上做质量检查。 作为一个不会用 IDE 的程序员，Patch 一般是这样创建的： cvs diff file1.php > file1.patch 问题是，这个命令无法处理 CVS 中不存在的文件，即新文件，诸如 Netbeans 和 [...]]]></description>
			<content:encoded><![CDATA[<p>我们的项目使用 CVS 托管代码，在把提交代码前，我们通常会创建一个 Patch，然后放到 Tracker 上做质量检查。<br />
作为一个不会用 IDE 的程序员，Patch 一般是这样创建的：</p>
<pre>cvs diff file1.php > file1.patch</pre>
<p>问题是，这个命令无法处理 CVS 中不存在的文件，即新文件，诸如 Netbeans 和 Eclipse 等 IDE 都有办法为新建文件创建 Patch（因为我看到同事发的 Patch 里有 Eclipse 的标示），其实用命令行也是能实现这个功能的。</p>
<p>首先要下载一个叫 <a href="http://viper.haque.net/~timeless/redbean/cvsdo">cvsdo</a> 的工具，这是个 Perl 文件，下载到 /usr/bin/ 下，然后加上可执行权限就完事了。回到代码目录，执行 cvsdo add newfile.php，然后 cvs diff -uN newfile.php > newfile.patch，这样就能可以对新文件做 cvs diff 了。这个脚本的原理就是修改了 CVS/Entries，让 cvs 以为这个文件已经在 cvs 仓库里了。注意，要给 cvs diff 使用 -N 参数，这样才能输出新文件。如果嫌 cvs diff 后面跟参数麻烦，可以创建 ~/.cvsrc</p>
<pre>
cvs -q
update -dPA
diff -uN
</pre>
<p>这样每次执行 cvs diff 就会默认加上这些参数的。</p>
<p>参考：</p>
<ol>
<li><a href="http://http://viper.haque.net/~timeless/redbean/">CVSdo</a></li>
<li><a href="https://developer.mozilla.org/En/Creating_a_patch">Creating a patch</a></li>
</ol>
<p>Updated on 7th, July, 2009<br />
补充在 Netbeans 中创建 Patch 的方法，在左边的文件树中选中修改了的文件，然后 Team -> CVS -> Export Diff Patch</p>
<p>Updated on 16th, July, 2009<br />
做了一个 Archlinux 上的 PKGBUILD，名字 cvsutils，直接装上就都有啦</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/07/06/including-new-files-in-a-patch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>一团乱麻</title>
		<link>http://log.dongsheng.org/2009/06/23/messy-june/</link>
		<comments>http://log.dongsheng.org/2009/06/23/messy-june/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:40:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/47</guid>
		<description><![CDATA[最近乱七八糟的事一坨一坨的都挤到一起了，零零散散解决了一些，依然是理不清。 上次被追尾，车刚刚送修，幸运的是这次没有多大波折，人家痛痛快快答应修好车，修完之后还得把我划的车门修好，另外还得抽时间把那个没用的 warranty cancel 掉，等搞定了我就可以卖车换车了 考驾照，我已经念叨了很久要做的事，没个澳洲驾照，要是出了点事，即使不是自己的责任，也感觉虚的很，驾照是非考不可了，不能再拖了 表弟在这周回国（上周刚把堂弟送到机场），不但把他东西临时转移到我的住处，而且还得给他安排新的 home stay，他在这里待的一个学期惹得麻烦不断，这周得去趟学校给老师解释一下 学校，他妈的 ECU 给我办转学分已经进行整整两个月，发了三次 email 每次都是说让我等，严重影响我下学期的选课计划，一个月要是还搞不出来，爷就不跟你们玩了，转回 Murdoch，谁是谁大爷啊？ 工作，最近的生产率很低，一方面是身体原因，整天对着电脑，弄得眼睛特别疲劳，看上一阵就眼睛流泪，抽时间得看看医生了，另一方面是感觉自己的工作越来越陷入重复，工作一年多了，始终是 PHP JS 的圈子里转来转去，工作忙里偷闲学了不少 Linux [...]]]></description>
			<content:encoded><![CDATA[<p>最近乱七八糟的事一坨一坨的都挤到一起了，零零散散解决了一些，依然是理不清。</p>
<ul>
<li>上次被追尾，车刚刚送修，幸运的是这次没有多大波折，人家痛痛快快答应修好车，修完之后还得把我划的车门修好，另外还得抽时间把那个没用的 warranty cancel 掉，等搞定了我就可以卖车换车了</li>
<li>考驾照，我已经念叨了很久要做的事，没个澳洲驾照，要是出了点事，即使不是自己的责任，也感觉虚的很，驾照是非考不可了，不能再拖了</li>
<li>表弟在这周回国（上周刚把堂弟送到机场），不但把他东西临时转移到我的住处，而且还得给他安排新的 home stay，他在这里待的一个学期惹得麻烦不断，这周得去趟学校给老师解释一下</li>
<li>学校，他妈的 ECU 给我办转学分已经进行整整两个月，发了三次  email 每次都是说让我等，严重影响我下学期的选课计划，一个月要是还搞不出来，爷就不跟你们玩了，转回 Murdoch，谁是谁大爷啊？</li>
<li>工作，最近的生产率很低，一方面是身体原因，整天对着电脑，弄得眼睛特别疲劳，看上一阵就眼睛流泪，抽时间得看看医生了，另一方面是感觉自己的工作越来越陷入重复，工作一年多了，始终是 PHP JS 的圈子里转来转去，工作忙里偷闲学了不少 Linux 的东西，但现在的职业方向非常混乱，这也是在小公司做事的弊端吧</li>
</ul>
<p>这周尽量把乱七八糟的事都搞完，周末得给下半年做个打算了。<br />
国外的生活是很单调，也没有多少选择的自由，但现在任何积极的改变都是再为以后的我创造更多的选项。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/06/23/messy-june/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archlinux 的 Flash player 无法显示部分汉字</title>
		<link>http://log.dongsheng.org/2009/05/29/archlinux-flashplayer-fonts/</link>
		<comments>http://log.dongsheng.org/2009/05/29/archlinux-flashplayer-fonts/#comments</comments>
		<pubDate>Fri, 29 May 2009 08:15:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[archlinux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/58</guid>
		<description><![CDATA[这个问题存在很久了，由于工作电脑用中文不是很多，所以一直忍着。这几天一直用亦歌听歌，那些被截了一半的歌名看着太别扭了，受不了了，得想办法解决。 先试着把 /etc/fonts/conf.d/49-sansserif.conf 中的字体都换成了文泉驿，问题依旧，到 LinuxSir 上问了一下，据说使用 nightly-build 的文泉驿就没问题了，安装以后果然问题解决。 PS，写这篇文章的时候，又搜索了一下，发现亦歌已经贴出了一个解决办法：linux,ubuntu,flash中文汉字显示方块乱码的问题。 还找到一篇文章解释了为什么会发生这个问题：FlashPlayer 9 for Linux中文显示问题的一些临时解决办法。]]></description>
			<content:encoded><![CDATA[<p>这个问题存在很久了，由于工作电脑用中文不是很多，所以一直忍着。这几天一直用<a href="http://www.1g1g.com/">亦歌</a>听歌，那些被截了一半的歌名看着太别扭了，受不了了，得想办法解决。</p>
<p>先试着把 /etc/fonts/conf.d/49-sansserif.conf 中的字体都换成了文泉驿，问题依旧，到 LinuxSir 上问了一下，据说使用 nightly-build 的文泉驿就没问题了，安装以后果然问题解决。</p>
<p>PS，写这篇文章的时候，又搜索了一下，发现亦歌已经贴出了一个解决办法：<a href="http://blog.1g1g.com/2009/02/05/linux-ubuntu-flash-problem/">linux,ubuntu,flash中文汉字显示方块乱码的问题</a>。<br />
还找到一篇文章解释了为什么会发生这个问题：<a href="http://blog.eshangrao.com/2007/02/15/348/">FlashPlayer 9 for Linux中文显示问题的一些临时解决办法</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/05/29/archlinux-flashplayer-fonts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Palm Pre Mojo early access</title>
		<link>http://log.dongsheng.org/2009/05/07/mojo-early-access/</link>
		<comments>http://log.dongsheng.org/2009/05/07/mojo-early-access/#comments</comments>
		<pubDate>Thu, 07 May 2009 02:50:33 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[mojo]]></category>
		<category><![CDATA[palm]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[webos]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/55</guid>
		<description><![CDATA[今天 Mojo SDK 终于可以访问了，上几张模拟器的图： 模拟器是基于 VirtualBox 的 拨号界面 Kernal panic，好久没见过这场面了 纯种 Linux 血统，连 Grub 都有。]]></description>
			<content:encoded><![CDATA[<p>今天 Mojo SDK 终于可以访问了，上几张模拟器的图：<br />
<img class="picasa" src="http://lh3.ggpht.com/_ItjVZAOwvt8/SgJMDp1mp-I/AAAAAAAAADY/K-X-nrg4_Iw/s512/Screenshot-2.png" alt="" /><br />
模拟器是基于 VirtualBox 的<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJNEyCEw5I/AAAAAAAAADc/867jkZmlbFU/s512/Screenshot-4.png" alt="" /><br />
拨号界面<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJMDSYetAI/AAAAAAAAADQ/zyi8EZsnfMc/s512/Screenshot.png" alt="" /><br />
Kernal panic，好久没见过这场面了<br />
<img class="picasa" src="http://lh6.ggpht.com/_ItjVZAOwvt8/SgJMDsCxWkI/AAAAAAAAADU/fawCL08oQXw/s512/Screenshot-1.png" alt="" /><br />
纯种 Linux 血统，连 Grub 都有。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/05/07/mojo-early-access/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>糟透的澳洲经济</title>
		<link>http://log.dongsheng.org/2009/05/02/australian-economic/</link>
		<comments>http://log.dongsheng.org/2009/05/02/australian-economic/#comments</comments>
		<pubDate>Sat, 02 May 2009 04:20:04 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/46</guid>
		<description><![CDATA[去年中国对原材料近乎饥渴的需求，使得西澳经济一路飘红，经济增长率达到连发展中国家都咂舌的 6.3%，钱哪来的？都是压榨中国老百姓的。 今年形势逆转，一方面中国对资源需求降低，另一方面是席卷全球的金融危机，西澳的金融、IT、矿业公司都风光不在，最近不断听到有人失业的消息，听起来让人很沮丧，澳洲经济这样下去，不知何年何月才能走出低谷。 我们公司还好，最近贴出招聘两个程序员的广告，短短一周，就有收到十几个应聘申请，看来最近失业的人太多了，要知道当初我找工作的时候，招聘广告贴了半年才有人应聘。 公司的人越来越多了，我的交流水平依然低下，问题的根源还是英语，主要体现在有想法表达不好，听不懂同事开得小玩笑……要求得良好发展，最关键的还是英语，得加把劲了。]]></description>
			<content:encoded><![CDATA[<p>去年中国对原材料近乎饥渴的需求，使得西澳经济一路飘红，经济增长率达到连发展中国家都咂舌的 6.3%，钱哪来的？都是压榨中国老百姓的。</p>
<p>今年形势逆转，一方面中国对资源需求降低，另一方面是席卷全球的金融危机，西澳的金融、IT、矿业公司都风光不在，最近不断听到有人失业的消息，听起来让人很沮丧，澳洲经济这样下去，不知何年何月才能走出低谷。</p>
<p>我们公司还好，最近贴出招聘两个程序员的广告，短短一周，就有收到十几个应聘申请，看来最近失业的人太多了，要知道当初我找工作的时候，招聘广告贴了半年才有人应聘。</p>
<p>公司的人越来越多了，我的交流水平依然低下，问题的根源还是英语，主要体现在有想法表达不好，听不懂同事开得小玩笑……要求得良好发展，最关键的还是英语，得加把劲了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/05/02/australian-economic/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在提交源码前检测调试代码</title>
		<link>http://log.dongsheng.org/2009/04/29/code-review-before-commit/</link>
		<comments>http://log.dongsheng.org/2009/04/29/code-review-before-commit/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 08:37:01 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[firephp]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/archives/57</guid>
		<description><![CDATA[做 Ajax 开发最大的痛苦就是调试不易，尤其是 PHP 脚本跟远程服务器交互中的调试更是不易，还好有 FirePHP，有热心人做了 FirePHP 的 Moodle 绑定，目前这个补丁还没有提交到 CVS，所以一不小心我就把调式代码放在源码里忘了去掉，然后别的开发者 update 以后就会得到一个未定义函数错误，必须想办法避免这个错误了。 首先在 vim 配置文件中加入 match ErrorMsg /echo_fb/ 这将 [...]]]></description>
			<content:encoded><![CDATA[<p>做 Ajax 开发最大的痛苦就是调试不易，尤其是 PHP 脚本跟远程服务器交互中的调试更是不易，还好有 <a href="http://www.firephp.org/">FirePHP</a>，有热心人做了 FirePHP 的<a href="http://tracker.moodle.org/browse/MDL-16371"> Moodle 绑定</a>，目前这个补丁还没有提交到 CVS，所以一不小心我就把调式代码放在源码里忘了去掉，然后别的开发者 update 以后就会得到一个未定义函数错误，必须想办法避免这个错误了。</p>
<p>首先在 vim 配置文件中加入</p>
<pre>
match ErrorMsg /echo_fb/
</pre>
<p>这将 echo_fb 函数标记为错误，警醒我提交前要去掉。这招显然不够狠，我要是连看都不看就把 vim 关了怎么办？最有效的办法还是在提交前用 grep 搜索文件，所有有了这个 shell 脚本：</p>
<pre>
ci (){
    if [ $# -eq 0 ]; then
        echo "CVS CHECKIN: No arguments entered.";
        return 1
    else
        echo "Checking in file(s): ${@:2}";
        echo "Working ...";
        if [ "$(grep "echo_fb" ${@:2})" ]; then
            echo 'Remove debug code firstly';
        else
            cvs ci -m "\"$1\"" ${@:2}
        fi

    fi
}
</pre>
<p>这样基本就没问题了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/29/code-review-before-commit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>换了 Gmail 帐户</title>
		<link>http://log.dongsheng.org/2009/04/18/migrate-gmail/</link>
		<comments>http://log.dongsheng.org/2009/04/18/migrate-gmail/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 17:03:21 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=18</guid>
		<description><![CDATA[以前用的 Gmail 邮箱已经垃圾泛滥，因为曾经用来接收 CVS 更新，邮件列表，所以邮箱容量到了百分之三十多，最麻烦的是别人问完我邮箱地址还总要带上一句“这名啥意思啊”，算了，还是换个自己名字的邮箱吧，dongsheng@gmail.com 当然被无情的注册掉了，于是我用这个：，在 Google 注册用户名我就从来没顺心过。 Gmail 邮箱对我来说最有价值的功能是无敌的全文检索，我常用来搜索代码段来快速定位 Issue number（或者反过来），屡试不爽，所以把以前的邮件倒到新邮箱就是必须的任务。另外，我用以前邮箱注册了太多太多网络服务，所以得把没来得及修改联系邮箱的邮件转发到新邮箱： 1. 在 Accounts 标签里找 Get mail from other [...]]]></description>
			<content:encoded><![CDATA[<p>以前用的 Gmail 邮箱已经垃圾泛滥，因为曾经用来接收 CVS 更新，邮件列表，所以邮箱容量到了百分之三十多，最麻烦的是别人问完我邮箱地址还总要带上一句“这名啥意思啊”，算了，还是换个自己名字的邮箱吧，dongsheng@gmail.com 当然被无情的注册掉了，于是我用这个：<img class="picasa" src="http://lh4.ggpht.com/_ItjVZAOwvt8/SehEQbc-8eI/AAAAAAAAABM/ny8ayta9jIo/s512/image.png" alt="email logo" />，在 Google 注册用户名我就从来没顺心过。</p>
<p>Gmail 邮箱对我来说最有价值的功能是无敌的全文检索，我常用来搜索代码段来快速定位 Issue number（或者反过来），屡试不爽，所以把以前的邮件倒到新邮箱就是必须的任务。另外，我用以前邮箱注册了太多太多网络服务，所以得把没来得及修改联系邮箱的邮件转发到新邮箱：<br />
1. 在 Accounts 标签里找 Get mail from other accounts，然后把前 Gmail 帐号加上，这个收取挺慢的，一次收 200 封，我从下午一直收到现在还差四千多封。<br />
在我做这件变态的事的时候，我发现自己一点也不孤单：<a href="http://lifehacker.com/352401/migrate-all-your-old-gmail-to-a-new-gmail-address">Migrate All Your Old Gmail to a New Gmail Address</a>，还有 <a href="http://lifehacker.com/376367/consolidate-multiple-email-addresses-with-gmail">Consolidate Multiple Email Addresses with Gmail</a>。<br />
2. 在 Forwarding and POP/IMAP 中设置新的邮件转发地址。<br />
3. 最后还要设置一下自己的马甲：<br />
<img class="picasa" src="http://lh3.ggpht.com/_hFhhiuJJ9FU/SejAuv9oaFI/AAAAAAAAAVE/bJLOTXocWk0/s512/Chromium-gmail.jpg" alt="undefined" /><br />
4. 启用 Gmail labs 里的 Filter import/export，把过滤器都导入到新邮箱。</p>
<p>这还只是个开始，我还得处理 Google Picasa，Google Reader，Google Maps（我存了大量地址）还有我所有的联系人资料，还好，这里的数据都可以导入导出。</p>
<p>我非常沮丧的发现，Google 已经无情的渗入到我生活中的每个部分，我的帐单，好友，工作，住址等等私密信息全部存储在 Google 这张网中，Google 的用户粘度比 Windows 强太多，没有 Windows，我用 Linux 或者 Mac 都能过得更好，但如果没有 Google 该怎么办？我有点忧虑了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/18/migrate-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] netstat</title>
		<link>http://log.dongsheng.org/2009/04/16/lcotw-netstat/</link>
		<comments>http://log.dongsheng.org/2009/04/16/lcotw-netstat/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 03:51:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[LCOTW]]></category>
		<category><![CDATA[netstat]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=52</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是总结 Linux 常用命令的文章。 netstat 是用来检测网络信息的工具。 当直接在终端输入 netsate，可以看到两部分输出 Active Internet connections 和 Active UNIX [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是总结 Linux 常用命令的文章。</p>
<p>netstat 是用来检测网络信息的工具。<br />
当直接在终端输入 netsate，可以看到两部分输出 Active Internet connections 和 Active UNIX domain sockets，其中 Proto 栏表示所使用的协议 RefCnt 引用计数使用本连接的进程数，State 表示接口状态。</p>
<p>显示已经建立的端口：</p>
<pre>netstat -n</pre>
<p>显示所有端口：</p>
<pre>netstat -a</pre>
<p>显示正在监听的端口：</p>
<pre>netstat -lnep</pre>
<p>p 选项表示显示 PID/Program<br />
n 选项强制表示用数字显示地址，不进行解析<br />
e 选项表示显示扩展信息，比不加 e 多了 user 和 inode 信息</p>
<p>显示本机路由表：</p>
<pre>netstat -nr</pre>
<p>显示接口信息：</p>
<pre>netstat -i</pre>
<p>netstat 常和 awk 结合来统计连接数：</p>
<pre>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</pre>
<p>[via <a href="http://blog.s135.com/post/269/"> Nginx 0.5.31 + PHP 5.2.4（FastCGI）搭建可承受3万以上并发连接数，胜过Apache 10倍的Web服务器</a>]</p>
<pre>netstat -an |awk '/LISTEN/{next};/^tcp/{s=split($5, N,":"); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}'</pre>
<p>[via <a href="http://www.hiadmin.com/%E7%AE%80%E5%8D%95%E7%BB%84%E5%90%88%E7%94%A8awk%E8%BF%87%E6%BB%A4%E6%9F%A5%E7%9C%8Bnetstat-%E8%BF%9E%E6%8E%A5%E6%95%B0/">用awk过滤查看netstat 连接数</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/16/lcotw-netstat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>快速锁定 Mac</title>
		<link>http://log.dongsheng.org/2009/04/16/lock-mac/</link>
		<comments>http://log.dongsheng.org/2009/04/16/lock-mac/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 03:07:55 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[lock]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=54</guid>
		<description><![CDATA[有时候我要离开 Mac，但不想别人乱动我电脑，用 Shift-Command-Option-Q 注销的话成本太高，Mac 上需要设置一下才有象 Windows Win+L 锁定屏幕的功能。 第一种方法是安装 Locker，这是一个 Dashboard widget，要锁定的时候，进入 Dashboard，然后点 Locker 的图标就可以快速锁定 第二种方法是使用 keychain 的 menubar 图标，首先打开 [...]]]></description>
			<content:encoded><![CDATA[<p>有时候我要离开 Mac，但不想别人乱动我电脑，用 Shift-Command-Option-Q 注销的话成本太高，Mac 上需要设置一下才有象 Windows Win+L 锁定屏幕的功能。<br />
第一种方法是安装 Locker，这是一个 Dashboard widget，要锁定的时候，进入 Dashboard，然后点 Locker 的图标就可以快速锁定<br />
第二种方法是使用 keychain 的 menubar 图标，首先打开 Utilities 中的 Keychain access<br />
<div class="wp-caption aligncenter" style="width: 819px"><a href="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKyNgLHGI/AAAAAAAAAR0/ObKJ6lGrHLo/Utilities.jpg"><img alt="Keychain access.app" src="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKyNgLHGI/AAAAAAAAAR0/ObKJ6lGrHLo/Utilities.jpg?imgmax=800" title="Utilities" width="809" height="488" /></a><p class="wp-caption-text">Keychain access.app</p></div><br />
然后用 cmd+, 打开属性设置，勾选 Show status in menu bar，<br />
<div class="wp-caption aligncenter" style="width: 606px"><a href="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKynr5ZJI/AAAAAAAAASA/bbaKlTwVXQo/Preferences.jpg"><img alt="Preferences" src="http://lh6.ggpht.com/_hFhhiuJJ9FU/SeYKynr5ZJI/AAAAAAAAASA/bbaKlTwVXQo/Preferences.jpg?imgmax=800" title="Preferences" width="596" height="341" /></a><p class="wp-caption-text">Preferences</p></div><br />
然后就可以在 menubar 中快速锁定了，<br />
<div class="wp-caption aligncenter" style="width: 418px"><a href="http://lh5.ggpht.com/_hFhhiuJJ9FU/SeYKzNmOcyI/AAAAAAAAASI/5e93H8JmKuk/Keychains.jpg"><img alt="Menu bar" src="http://lh5.ggpht.com/_hFhhiuJJ9FU/SeYKzNmOcyI/AAAAAAAAASI/5e93H8JmKuk/Keychains.jpg?imgmax=800" title="menubar" width="408" height="261" /></a><p class="wp-caption-text">Menu bar</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/16/lock-mac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fcitx 和 dropbox 双双崩溃</title>
		<link>http://log.dongsheng.org/2009/04/07/fcitx-dropbox-crash/</link>
		<comments>http://log.dongsheng.org/2009/04/07/fcitx-dropbox-crash/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:16:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[fcitx]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=51</guid>
		<description><![CDATA[昨天 ArchLinux 更新了，好像 xorg 和 gnome 都升级了小数点后的若干位，更新完以后忘了重启。 今天上班开机，发现 dropbox 不工作了，以前也出过这种毛病，我把 $HOME/.dropbox 和 $HOME/.dropbox-dist 删除以后重装就没事了，这次是连图形界面都起不来，运行 $HOME/.dropbox-dist/dropboxd，报了一个符号未定义错误： ImportError: /usr/lib/libgdk-x11-2.0.so.0: undefined symbol: XRRGetScreenResourcesCurrent [...]]]></description>
			<content:encoded><![CDATA[<p>昨天 ArchLinux 更新了，好像 xorg 和 gnome 都升级了小数点后的若干位，更新完以后忘了重启。</p>
<p>今天上班开机，发现 dropbox 不工作了，以前也出过这种毛病，我把 $HOME/.dropbox 和 $HOME/.dropbox-dist 删除以后重装就没事了，这次是连图形界面都起不来，运行 $HOME/.dropbox-dist/dropboxd，报了一个符号未定义错误：</p>
<pre>
ImportError: /usr/lib/libgdk-x11-2.0.so.0: undefined symbol: XRRGetScreenResourcesCurrent
</pre>
<p>怀疑是 API 变了，到 dropbox 官网论坛报告，找到一个 <a href="http://dl.getdropbox.com/u/17/dropbox-lnx.x86-0.6.504.tar.gz">0.6.504</a> 的 RC 版，下载安装一试，问题竟然解决了。</p>
<p>然后 Fcitx 也罢工了，这次报了一个段错误就直接死翘翘了，我猜又是 API 的问题，于是到 <a href="http://code.google.com/p/fcitx/source/checkout">Google Code</a> 上下载最新源码， 编译安装，问题消失。</p>
<p>最后得赞一下 <a href="https://www.getdropbox.com/referrals/NTE4MjUwMDk">Dropbox</a>，实在太方便了，已经成了 vim 之后第二个我在 Windows，MAC，Linux 都必装的软件。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/07/fcitx-dropbox-crash/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Taskbar stuck in classic mode (Windows XP SP3)</title>
		<link>http://log.dongsheng.org/2009/04/07/taskbar-stuck-in-classic-mode-windows-xp-sp3/</link>
		<comments>http://log.dongsheng.org/2009/04/07/taskbar-stuck-in-classic-mode-windows-xp-sp3/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 02:53:20 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[uxtheme]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=50</guid>
		<description><![CDATA[昨天给朋友装 Windows 发生一件匪夷所思的事，我替换了 c:\windows\system32\uxtheme.dll 为破解版本以使用第三方主题，但不幸弄错了破解文件的版本，连官方主题都失效了，这个容易，我到 XP 安装盘里找到 uxtheme.dl_，改名为 uxtheme.cab，解压得到原版 uxtheme.dll的，到 DOS 下替换以后重新登入 XP 发现窗口样式正常。 但任务栏却变成了经典样式，不管怎样都改不过来，怀疑是 c:\windows\system32\dllcache 的问题，把文件夹清空，问题依旧，把我弄的抓狂了，在网上狂搜，终于找到这个帖子：Taskbar &#038; Start Menu [...]]]></description>
			<content:encoded><![CDATA[<p>昨天给朋友装 Windows 发生一件匪夷所思的事，我替换了 c:\windows\system32\uxtheme.dll 为破解版本以使用第三方主题，但不幸弄错了破解文件的版本，连官方主题都失效了，这个容易，我到 XP 安装盘里找到 uxtheme.dl_，改名为 uxtheme.cab，解压得到原版 uxtheme.dll的，到 DOS 下替换以后重新登入 XP 发现窗口样式正常。</p>
<p>但任务栏却变成了经典样式，不管怎样都改不过来，怀疑是 c:\windows\system32\dllcache 的问题，把文件夹清空，问题依旧，把我弄的抓狂了，在网上狂搜，终于找到这个帖子：<a href="http://www.anetforums.com/posts.aspx?ThreadIndex=40096">Taskbar &#038; Start Menu Refuse to theme &#8211; stuck in classic mode</a>。四楼的就是正解，我在 DOS 下操作的时候，不小心在 c:\windows 下放了个重复的 uxtheme.dll，造成任务栏无法使用主题。删除这个文件以后问题解决。</p>
<p>希望本文对遇到同样问题的朋友有用。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/07/taskbar-stuck-in-classic-mode-windows-xp-sp3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL notes</title>
		<link>http://log.dongsheng.org/2009/04/03/postgresql-notes/</link>
		<comments>http://log.dongsheng.org/2009/04/03/postgresql-notes/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 06:48:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=48</guid>
		<description><![CDATA[在 Tracker 上有人报告 Moodle 的一个模块在 PostgreSQL 会报错，以前装 DSpace 时用过一次 PostgreSQL，现在全忘光了，所以这次得记下来。 # Create postgres user sudo adduser postgres # Create data [...]]]></description>
			<content:encoded><![CDATA[<p>在 Tracker 上有人报告 Moodle 的一个模块在 PostgreSQL 会报错，以前装 DSpace 时用过一次 PostgreSQL，现在全忘光了，所以这次得记下来。</p>
<pre>
# Create postgres user
sudo adduser postgres
# Create data directory
sudo mkdir /usr/share/pgsql/data
sudo chown -R postgres /usr/share/pgsql/data
su - postgres
# create initial databases
initdb -D /usr/local/pgsql/data
# launch server
postgres -D /usr/local/pgsql/data >logfile 2>&#038;1 &#038;
# create a database, or create it by SQL
createdb moodle -E UNICODE -e
# create a super user with password
createuser dongsheng -s -d -r -P
psql moodle
# change user password
>alter role dongsheng set password="123456"
# create a database with utf-8 charset
>create database moodle_head WITH ENCODING 'UNICODE'
# create a database for a specfic role
>create database moodle_head OWNER root
# list all roles
>\du
# or
>SELECT rolname FROM pg_roles;
# list all databases
>\l
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/03/postgresql-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] luit &amp; iconv</title>
		<link>http://log.dongsheng.org/2009/04/02/lcotw-luit/</link>
		<comments>http://log.dongsheng.org/2009/04/02/lcotw-luit/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 04:21:39 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[LCOTW]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=45</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。 今天突发奇想用 ssh 登录水木论坛，问题是 Linux 的终端是 UTF-8 的，而水木是 GBK 编码，所以登进去以后全变成乱码了，在网上搜索了一下得知可以用 luit [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是每周总结 Linux 命令用法的活动。<br />
今天突发奇想用 ssh 登录水木论坛，问题是 Linux 的终端是 UTF-8 的，而水木是 GBK 编码，所以登进去以后全变成乱码了，在网上搜索了一下得知可以用 luit 在终端中实时转换编码到 UTF-8，比如登录水木的命令应该这么写：</p>
<pre>
luit -encoding gbk ssh username@newsmth.net
</pre>
<p>另一个很有用的跟编码有关的命令是 iconv，典型的用法是：</p>
<pre>
iconv -f cp936 -t UTF-8 -o file_utf8.txt file.txt
</pre>
<p>这个命令可以将 cp936（既 gb2312）编码的文件 file.txt 转换为 UTF-8 编码的 file_utf8.txt<br />
不过我还找到给这个文件自动添加 BOM 的办法，所以通常是用 Python 做批量转换，代码为：</p>
<pre>
    import codecs
    filein = open(filename, 'r')
    string = ''
    for line in filein:
        string += line.decode('cp936').encode('utf-8')
    out = open(filename+'_utf8', 'w')
    out.write(codecs.BOM_UTF8)
    out.write(string)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/02/lcotw-luit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在 Gajim 上用 HTTPS 登录 Jabber</title>
		<link>http://log.dongsheng.org/2009/04/02/gajim-uses-https/</link>
		<comments>http://log.dongsheng.org/2009/04/02/gajim-uses-https/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 03:55:43 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[gajim]]></category>
		<category><![CDATA[openssl]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=40</guid>
		<description><![CDATA[Pidgin 挂了，我既没用它登录非法网站，也没有通过它跟境外间谍组织联络，反正它是挂了，本来对它也没有好感，所以换成了 Gajim。 打算用 HTTPS 是因为前几天在 Twitter 上看到一个耸人听闻的消息：党国最新研发的 GFW 有了重置 HTTPS 连接的神力，这个难以置信的消息增强了我保护网络隐私的决心，以后聊天要用 HTTPS 加密，发邮件上 PGP，发文件用 SCP，QQ 聊天用 3DES 加密再发送，整死这帮整天偷看别人隐私的王八蛋。 问题是我把 [...]]]></description>
			<content:encoded><![CDATA[<p>Pidgin 挂了，我既没用它登录非法网站，也没有通过它跟境外间谍组织联络，反正它是挂了，本来对它也没有好感，所以换成了 Gajim。<br />
打算用 HTTPS 是因为前几天在 Twitter 上看到一个耸人听闻的消息：党国最新研发的 GFW 有了重置 HTTPS 连接的神力，这个难以置信的消息增强了我保护网络隐私的决心，以后聊天要用 HTTPS 加密，发邮件上 PGP，发文件用 SCP，QQ 聊天用 3DES 加密再发送，整死这帮整天偷看别人隐私的王八蛋。<br />
问题是我把 Gtalk 登录设置成了 talk.google.com:5223 以后，显示无法连接，猜测是编译时候没加上绑定 SSL 的选项，于是从 SVN 上抓下最新的源码，看了一下 ./configure &#8211;help 的输出里根本就没有 SSL 的选项，到源码里搜了一通找到一个 pyopenssl_available 的函数，原来我没有装一个叫 pyOpenSSL 的库，从 SourceForge 上下载了这个库编译并安装，然后 Gajim 中就能使用 HTTPS 连接登录 Jabber 了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/04/02/gajim-uses-https/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LCOTW] Netcat notes</title>
		<link>http://log.dongsheng.org/2009/03/17/netcat-notes/</link>
		<comments>http://log.dongsheng.org/2009/03/17/netcat-notes/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 01:38:48 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[LCOTW]]></category>
		<category><![CDATA[mldonkey]]></category>
		<category><![CDATA[netcat]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=39</guid>
		<description><![CDATA[LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。 本文内容是 netcat tutorial 的简化中文版。 1. 端口扫描 netcat -v -w 2 [...]]]></description>
			<content:encoded><![CDATA[<p>LCOTW (<strong>L</strong>inux <strong>C</strong>ommands <strong>O</strong>f <strong>T</strong>he <strong>W</strong>eek) Tag 下是每周总结 Linux 命令用法的活动。<br />
本文内容是<a href="http://www.ol-service.com/sikurezza/doc/netcat_eng.pdf"> netcat tutorial</a> 的简化中文版。</p>
<p><strong>1. 端口扫描</strong><br />
netcat -v -w 2 -z localhost 20-80<br />
-v 是 verbose 模式<br />
-w 设置超时时间<br />
-z 设置 Zero IO，在监听模式下，会拒绝所有连接，在访问模式下会在建立连接后马上断开</p>
<p><strong>2. 踩点</strong><br />
netcat -v localhost 80<br />
用这个命令可以查看 HTTP 连接的信息，输入 GET HTTP 构造一个非法请求以刺探服务器信息，我通常用 curl 来作这件事：</p>
<pre>curl -I localhost</pre>
<p><strong>3. 用 netcat 作后门</strong><br />
服务端（即被入侵端）</p>
<pre>netcat -l -p 10001 -e bash</pre>
<p>如果服务端是 windows 就输入：</p>
<pre>netcat -l -p 10001 -e cmd</pre>
<p>在 GNU netcat 0.7.1 里面 -d 是开启 debug 模式的选项，但旧版里是 Tells Netcat to detach from the process we want it to run<br />
从客户端连接：</p>
<pre>netcat -v localhost 10001</pre>
<p><strong>4. 文件传输</strong><br />
在服务端：</p>
<pre>netcat -l -p 10001 > file.dat</pre>
<p>在客户端：</p>
<pre>netcat localhost 10001 < file_to_be_transfered.dat</pre>
<p>记住按 ctrl+c 终止传输，检查文件的 md5 是否一致。</p>
<p>补充一个关于 Mldonkey 的技巧，Mldonkey 支持 telnet 方式检查下载状态，但登入登出 telnet 太麻烦，用 netcat 可以简化这个过程：</p>
<pre> echo -e 'vd\nexit' | netcat localhost 4000</pre>
<p>谢谢 chroot 提供这个<a href="http://linuxtoy.org/archives/view-download-status-of-mldonkey.html#comment-106856">方法</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/03/17/netcat-notes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Movable Type 4 installation notes</title>
		<link>http://log.dongsheng.org/2009/03/17/movable-type-4-installation-notes/</link>
		<comments>http://log.dongsheng.org/2009/03/17/movable-type-4-installation-notes/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 00:55:30 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[movabletype]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=37</guid>
		<description><![CDATA[Installation 1. Uncompress movable type package, move mt-static folder to htdocs/ 2. Modify mt-config.cgi, choose your prefered DBI and remove [...]]]></description>
			<content:encoded><![CDATA[<p>Installation<br />
1. Uncompress movable type package, move mt-static folder to htdocs/<br />
2. Modify mt-config.cgi, choose your prefered DBI and remove the other chunk of code, add</p>
<pre>MailEncoding UTF-8</pre>
<p> to mt-config.pl<br />
3. Move all the other files to cgi-bin/mt/, assign executive right to cgi scripts<br />
4. Access http://localhost/cgi-bin/mt/mt.cgi</p>
<p>Theming<br />
1. Modify the css file which can be located at static/themes-base/blog.css<br />
2. Remove &#8220;powered by&#8221; widget<br />
3. Modify template in admin page<br />
4. To backup templates, every template should be linked with a local file, then you can modify the files on disk to customize looking.</p>
<p>Plugins<br />
Comming soon</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/03/17/movable-type-4-installation-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 的地址栏检索功能</title>
		<link>http://log.dongsheng.org/2009/03/16/firefox-urlbar-search/</link>
		<comments>http://log.dongsheng.org/2009/03/16/firefox-urlbar-search/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 07:17:49 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=38</guid>
		<description><![CDATA[以前开会发现老板总是在地址栏输入 php function_name 来查找 PHP 函数，还以为他用了 Firefox 扩展，今天突然想起来问问他原来通过书签就能实现。 在书签中加入 http://php.net/%s，然后给这个书签设置一个叫 php 的关键字，这样在地址栏输入 php preg_match 就直接跳到 PHP 的文档页了，非常方便。 如法炮制出下面的书签： http://dict.cn/search.php?q=%s http://www.baidu.com/s?wd=%s [...]]]></description>
			<content:encoded><![CDATA[<p>以前开会发现老板总是在地址栏输入 php function_name 来查找 PHP 函数，还以为他用了 Firefox 扩展，今天突然想起来问问他原来通过书签就能实现。</p>
<p>在书签中加入 http://php.net/%s，然后给这个书签设置一个叫 php 的关键字，这样在地址栏输入 php preg_match 就直接跳到 PHP 的文档页了，非常方便。</p>
<p>如法炮制出下面的书签：</p>
<p>http://dict.cn/search.php?q=%s</p>
<p>http://www.baidu.com/s?wd=%s</p>
<p>http://docs.python.org/search.html?q=%s</p>
<p>/** python 的搜索结果是 ajax 载入的，不过连个载入进度条都没有，老让我以为没有找到结果 */</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/03/16/firefox-urlbar-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X 上构建 PHP5</title>
		<link>http://log.dongsheng.org/2009/02/28/build-php5-on-mac/</link>
		<comments>http://log.dongsheng.org/2009/02/28/build-php5-on-mac/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 04:47:44 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=36</guid>
		<description><![CDATA[在安装 PHP 前先安装 Mysql，Apache2 我用的是 Mac 内置的那个。下载 PHP 5.2.9 源码，然后执行： ./configure &#8211;prefix=/usr/local &#8211;with-iconv &#8211;with-gd &#8211;with-xmlrpc &#8211;enable-zip &#8211;with-openssl=/usr &#8211;enable-ftp &#8211;enable-sockets &#8211;enable-mbstring [...]]]></description>
			<content:encoded><![CDATA[<p>在安装 PHP 前先安装 Mysql，Apache2 我用的是 Mac 内置的那个。下载 PHP 5.2.9 源码，然后执行：<br />
./configure &#8211;prefix=/usr/local &#8211;with-iconv &#8211;with-gd<br />
&#8211;with-xmlrpc &#8211;enable-zip &#8211;with-openssl=/usr &#8211;enable-ftp &#8211;enable-sockets<br />
&#8211;enable-mbstring &#8211;enable-bcmath &#8211;with-curl &#8211;with-zlib-dir=/usr<br />
&#8211;with-mysqli=/usr/local/mysql/bin/mysql_config<br />
&#8211;with-mysql=/usr/local/mysql<br />
&#8211;with-config-file-path=/etc/php.ini &#8211;with-apxs2=/usr/sbin/apxs<br />
配置过程中会因为缺少某些开发包而出错，用 Mac port 安装一下就可以了</p>
<p>make &#038;&#038; sudo make install</p>
<p>这样创建的 libphp5.so 是无法被 Apache 载入的，需要用 lipo 处理一下 Apache 的二进制程序</p>
<p>/usr/sbin$ sudo cp httpd httpd-fat<br />
/usr/sbin$ sudo lipo httpd -thin i386 -output httpd</p>
<p>完了重启 Apache 就可以使用了：<br />
sudo apachectl restart</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/02/28/build-php5-on-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闹心的 iPod Touch 坏点</title>
		<link>http://log.dongsheng.org/2009/02/19/dead-pixel-on-ipod-touch/</link>
		<comments>http://log.dongsheng.org/2009/02/19/dead-pixel-on-ipod-touch/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 04:57:15 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[warranty]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=35</guid>
		<description><![CDATA[周日回澳洲，在机场免税店看到 iPod Touch 一台，仅售 299 澳元（合人民币 1350 左右），价格比较令人心动，马上买了一台出关，回家把玩几个小时，非常满意上网的效果，但不幸的是发现 App Store 图标下面有个坏点，看起来非常不爽，给免税店发了个邮件要求换机，但他们回复说必须找苹果换，到这里我就开始后悔了，如果在 JBHIFI 或者 DickSmith 买的话当场就换了，这免税店怎么这么麻烦呢。 于是找到苹果主页的 the Online Service Assistant，然后选 [...]]]></description>
			<content:encoded><![CDATA[<p>周日回澳洲，在机场免税店看到 iPod Touch 一台，仅售 299 澳元（合人民币 1350 左右），价格比较令人心动，马上买了一台出关，回家把玩几个小时，非常满意上网的效果，但不幸的是发现 App Store 图标下面有个坏点，看起来非常不爽，给免税店发了个邮件要求换机，但他们回复说必须找苹果换，到这里我就开始后悔了，如果在 JBHIFI 或者 DickSmith 买的话当场就换了，这免税店怎么这么麻烦呢。</p>
<p>于是找到苹果主页的 the Online Service Assistant，然后选 Set up online service or find other available options for your product，添了一通信息以后提交，没一会儿苹果给我回信答应给我换机，接着问题就来了，苹果给我一个打印邮递信息的页面，说是有个 label 在页面里，但我怎么找也找不到，难不成 label 指的就是这张页面，于是我带上这张页面和 iPod 去了邮局，但邮局工作员说不对，这个东西一点没用，于是给苹果打电话，接电话的又是该死的印度口音，叨叨半天就是说 label 就在那个页面啊。我想算了，周六去授权苹果店看看，让他们帮我寄吧。</p>
<p>打开 Google，搜了一下 &#8220;Dead pixel fixer&#8221; 找到一个说法，说死点也分两种一种是黑的，这种完全没救，另一种是白的，英文叫 struck pixel，运气好的话，可以通过快速变化屏幕颜色把死点冲开，我下载了那个快速闪动的视频文件，果然。。。没有效果。但也有人成功过：<a href="http://forums.ilounge.com/showthread.php?t=148919">iPod stuck pixel fixer?</a></p>
<p>抱着最后希望打开那个邮递信息的页面，把页面一拖到底竟然发现了那个传说中的 label！原来这个 label 是个很大的图片文件，苹果傻了叭叽的把它放在页面最底部，在网速慢的情况下，根本意识不到下面还有一张图片，而且这图离上面的说明文字有很大一块空白，让我以为网页就那么多了。</p>
<p>今早带着那张显示地址信息的 label 去了 Australia Post，终于成功寄出 iPod（记住只把主机寄出去，耳机数据线之类的自己留着），希望能尽快拿到一个无缺陷的新机器 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&#8211;<br />
更新：</p>
<p>今天收到苹果给换的新 iPod Touch，这次没有坏点了，从上周三从悉尼发货，到珀斯共费了五个工作日，整个过程苹果做得还算贴心，给出一个网页追踪产品的维修状态，货寄出以后也给了 Australia Post 的追踪号码。但愿不要再出啥问题，换来换去半个月就进去了。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/02/19/dead-pixel-on-ipod-touch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用 SSH Tunnel 翻墙 SSH/MyEnTunnel/Putty</title>
		<link>http://log.dongsheng.org/2009/02/16/ssh-tunnel-on-hostmonster/</link>
		<comments>http://log.dongsheng.org/2009/02/16/ssh-tunnel-on-hostmonster/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 04:23:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[hostmonster]]></category>
		<category><![CDATA[MyEnTunnel]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=34</guid>
		<description><![CDATA[回国一个月，受尽了 GFW 的折磨，装了个 Gladder 聊以度日，但限制也很多，比如担心自己的隐私安全，下载不方便，速度缓慢等等，更坏的消息是澳洲也要开始搞网络过滤了，所以得未雨绸缪设置一个 SSH Tunnel。 在虚拟主机端的配置 刚买的 Hostmonster 虚拟主机就派上了用场，默认情况下 SSH Access 是不开启的，于是跟在线客服联系，让他开通 SSH 支持，并把护照复印件或其它有效证件发给他，然后 SSH 就激活了。 在 Hostmonster [...]]]></description>
			<content:encoded><![CDATA[<p>回国一个月，受尽了 GFW 的折磨，装了个 Gladder 聊以度日，但限制也很多，比如担心自己的隐私安全，下载不方便，速度缓慢等等，更坏的消息是<a href="http://nocleanfeed.com/learn.html">澳洲也要开始搞网络过滤了</a>，所以得未雨绸缪设置一个 SSH Tunnel。</p>
<h3>在虚拟主机端的配置</h3>
<p>刚买的 Hostmonster 虚拟主机就派上了用场，默认情况下 SSH Access 是不开启的，于是跟在线客服联系，让他开通 SSH 支持，并把护照复印件或其它有效证件发给他，然后 SSH 就激活了。</p>
<p>在 Hostmonster 的 cPanel 中导入自己的公钥，到本地电脑把私钥存在 ~/.ssh/id_rsa 中，就可以实现无密码登录了。</p>
<p>对于一般的 sshd 公钥登陆配置是在 /etc/ssh/sshd_config 中添加</p>
<pre>
AuthorizedKeysFile %h/.ssh/authorized_keys
</pre>
<p>然后在 ~/.ssh/authorized_keys 中添加公钥，Hostmonster 是自动处理了。</p>
<h3>本地设置</h3>
<p>本地要做两件事，建立 SSH Tunnel 通道和设置浏览器使用 SOCKS v5 代理。</p>
<h4>Windows 系统</h4>
<p>如果是用 <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">putty</a>，用如下命令即可建立 ssh tunnel：</p>
<pre>
plink -N -D 8080 -l dongsheng -pw thepassword -v dongsheng.org
</pre>
<p>然后在火狐或者 IE 中设置 SOCKS v5 代理为 127.0.0.1:8080。</p>
<p>Windows 上最简单的办法是使用 <a href="http://nemesis2.qx.net/pages/MyEnTunnel">MyEnTunnel</a>，直接在图形界面中添上 ssh 服务器地址，用户名密码，然后点连接就轻松创建了 ssh tunnel。</p>
<p>对于 Firefox 来说有不少很棒的代理扩展，我觉得最棒的是 <a href="https://addons.mozilla.org/en-US/firefox/addon/11009">AutoProxy</a>，它维护了一个黑名单列表（对GFW来说是黑名单），只有在列表里的网站才会使用代理访问，一般的网站都是直接访问。</p>
<p>还要有注意的一点是在 Firefox 的 about:config 里要把 network.proxy.socks_remote_dns  设置为 true，不然会遭遇 DNS 劫持。</p>
<h4>Linux</h4>
<p>在终端里输入：</p>
<pre>
ssh -N -D 8080 -l dongsheng dongsheng.org
# -v 可以输出更多连接信息
#ssh -N -v -D 8080 -l dongsheng dongsheng.org
</pre>
<p>这就建立了一个本地 SOCKS v5 代理，在火狐中设置 SOCKS v5 类代理为 127.0.0.1:8080 就可以使用了。</p>
<ul>
<li>-N 是禁止执行远程命令</li>
<li>-v 是输出调试信息，用于测试结果</li>
<li>-D 设置转发端口</li>
<li>-l 是自己的登录名</li>
</ul>
<p>补充：</p>
<ul>
<li>在远程主机上运行一个命令并退出：
<pre>
plink -l root -pw thepassword -v dongsheng.org "/etc/rc.d/fastcgi restart"
</pre>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/02/16/ssh-tunnel-on-hostmonster/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>遇见山寨机</title>
		<link>http://log.dongsheng.org/2009/02/09/china-copy-phone/</link>
		<comments>http://log.dongsheng.org/2009/02/09/china-copy-phone/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 03:58:54 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=42</guid>
		<description><![CDATA[在网上搜了一下“老人手机”，得到的结果令人沮丧，无非是些早就退市的破机器，还美其名曰“经济、实用”。猪头也该知道，对于老人来说，手机最重要的是清晰的大字，洪亮的铃声和尽量简单的功能，但看看现在市场上的手机，能满足这些条件的机器还真罕见，可能老人手机市场实在太小，这些大厂也就忘了“以人为本”的台词。 在我陷入绝望的时候，我想到了传说中著名的富有中国特色的山寨机，为什么选山寨机？ 第一，牛逼无敌的大屏幕，人年纪大了，视力普遍下降，大屏幕绝对不是装饰，话说山寨机的屏幕精细度没法和 N 记手机比，但你也受够了 N 记小气的屏幕尺寸了吧，何况对于老人来说，还是看得清楚最实在。 第二，君不见山寨机惊天地泣鬼神的喇叭输出功率，莫说当铃声，动不动三声道恐怕当扩音喇叭也能胜任，轻松应付任何嘈杂环境。但切记，别用“月亮之上”当铃声（http://zn.sj.91.com/content/2009-01-22/20090122183956516.shtml）。 第三，无敌电量，虽说电池容量虚标（要是真的，两块就能当汽车电瓶了），但事实是，山寨机普遍拥有超人的待机时间，我的 E71 号称 N 记的无敌待机时间，但也不过区区二三天耳，面对山寨机毫无竞争力。老人普遍对电气产品缺乏认识，也没法总记得给手机充电，在这种情况下，待机时间就是很重要的指标了。 第四，功能，尽管 MTK 平台比较低俗，但大多功能非常实用，比如拨号语音提示、短信真人发音、收音机、电视……那些要靠第三方软件才能支持这些功能的所谓智能机还是留给 Geek 用吧，此“智能”真非彼智能。 第五，价格便宜，再牛逼的山寨机也不过区区千元，一下买两个，一年坏一个或丢一个也能用两年啊。 唯一不确定的是电池安全问题，这几天搞搞极限“测试”。]]></description>
			<content:encoded><![CDATA[<p>在网上搜了一下“老人手机”，得到的结果令人沮丧，无非是些早就退市的破机器，还美其名曰“经济、实用”。猪头也该知道，对于老人来说，手机最重要的是清晰的大字，洪亮的铃声和尽量简单的功能，但看看现在市场上的手机，能满足这些条件的机器还真罕见，可能老人手机市场实在太小，这些大厂也就忘了“以人为本”的台词。</p>
<p>在我陷入绝望的时候，我想到了传说中著名的富有中国特色的山寨机，为什么选山寨机？</p>
<p>第一，牛逼无敌的大屏幕，人年纪大了，视力普遍下降，大屏幕绝对不是装饰，话说山寨机的屏幕精细度没法和 N 记手机比，但你也受够了 N 记小气的屏幕尺寸了吧，何况对于老人来说，还是看得清楚最实在。</p>
<p>第二，君不见山寨机惊天地泣鬼神的喇叭输出功率，莫说当铃声，动不动三声道恐怕当扩音喇叭也能胜任，轻松应付任何嘈杂环境。但切记，别用“月亮之上”当铃声（http://zn.sj.91.com/content/2009-01-22/20090122183956516.shtml）。</p>
<p>第三，无敌电量，虽说电池容量虚标（要是真的，两块就能当汽车电瓶了），但事实是，山寨机普遍拥有超人的待机时间，我的 E71 号称 N 记的无敌待机时间，但也不过区区二三天耳，面对山寨机毫无竞争力。老人普遍对电气产品缺乏认识，也没法总记得给手机充电，在这种情况下，待机时间就是很重要的指标了。</p>
<p>第四，功能，尽管 MTK 平台比较低俗，但大多功能非常实用，比如拨号语音提示、短信真人发音、收音机、电视……那些要靠第三方软件才能支持这些功能的所谓智能机还是留给 Geek 用吧，此“智能”真非彼智能。</p>
<p>第五，价格便宜，再牛逼的山寨机也不过区区千元，一下买两个，一年坏一个或丢一个也能用两年啊。</p>
<p>唯一不确定的是电池安全问题，这几天搞搞极限“测试”。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/02/09/china-copy-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Mac OS X 用 OpenSSL 加密文件</title>
		<link>http://log.dongsheng.org/2009/02/03/openssl-on-mac/</link>
		<comments>http://log.dongsheng.org/2009/02/03/openssl-on-mac/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:46:48 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=33</guid>
		<description><![CDATA[OpenSSL 是个非常有用的 Unix 工具，即可以用来生成 DSA 和 RSA 公私钥对，也可以用来生成消息摘要。 当我们需要保存某些机密信息的时候，OpenSSL 可以用来充当有用的加密工具。比如需要加密 readme.txt 中的机要信息，可以用 3-DES 进行加密： openssl des3 -in readme.txt -out readme.des [...]]]></description>
			<content:encoded><![CDATA[<p>OpenSSL 是个非常有用的 Unix 工具，即可以用来生成 DSA 和 RSA 公私钥对，也可以用来生成消息摘要。</p>
<p>当我们需要保存某些机密信息的时候，OpenSSL 可以用来充当有用的加密工具。比如需要加密 readme.txt 中的机要信息，可以用 3-DES 进行加密：</p>
<pre>
openssl des3 -in readme.txt -out readme.des
</pre>
<p>解密时使用命令：</p>
<pre>
openssl des3 -d -in readme.des -out readme.plain
</pre>
<p>其它加密算法也可以使用，详表见：<a href="http://www.openssl.org/docs/apps/openssl.html">OpenSSL Manual</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/02/03/openssl-on-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第一次自己装机</title>
		<link>http://log.dongsheng.org/2009/01/17/build-pc-by-myself/</link>
		<comments>http://log.dongsheng.org/2009/01/17/build-pc-by-myself/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 09:32:05 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[pc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=32</guid>
		<description><![CDATA[在国内习惯于在装机店让老板装，国外的服务费是很高的，装一台电脑收费一百五十澳元，还是自己动手，丰衣足食（感谢大帅同学的电脑成为我的实验品），简略记一下安装步骤。 1. 把 CPU 和内存插在主板上，CPU 是夹在主板上的（我对 CPU 的安装还停在奔腾时代），然后风扇固定在主板上，并把电源接在主板上。 2. 除掉机器上的接口隔板，换上主板自带的。 3. 把主板固定在机箱上，这里可能要用到两个支撑柱。 4. 把电源接到主板上，包括主板电源和 CPU 电源。 5. 装上硬盘和光驱。 6. 独立显卡，现在的独立显卡一般需要独立电源，别忘了装上 [...]]]></description>
			<content:encoded><![CDATA[<p>在国内习惯于在装机店让老板装，国外的服务费是很高的，装一台电脑收费一百五十澳元，还是自己动手，丰衣足食（感谢大帅同学的电脑成为我的实验品），简略记一下安装步骤。<br />
1. 把 CPU 和内存插在主板上，CPU 是夹在主板上的（我对 CPU 的安装还停在奔腾时代），然后风扇固定在主板上，并把电源接在主板上。<br />
2. 除掉机器上的接口隔板，换上主板自带的。<br />
3. 把主板固定在机箱上，这里可能要用到两个支撑柱。<br />
4. 把电源接到主板上，包括主板电源和 CPU 电源。<br />
5. 装上硬盘和光驱。<br />
6. 独立显卡，现在的独立显卡一般需要独立电源，别忘了装上<br />
7. 最麻烦的是安装乱七八糟的面板接口线，前面板耳机接口，USB 接口，大多数都可以说明书中找到，前面板耳机接口可能会显示不匹配：<br />
我这里的对应关系是：<br />
01:port1L &#8212; MIC2<br />
02:aud_gnd &#8212; AGND<br />
03:port1R &#8212; MIC_PWR<br />
04:presence#<br />
05:port2R &#8212; BLINE.out.R<br />
06:sense1_return &#8212; LINE.OUT.R<br />
07:sense_send<br />
08:key<br />
09:port2L &#8212; BLINE.OUT.L<br />
10:sense2_return &#8212; LINE.OUT.L</p>
<p>参考：<br />
1. <a href="http://diy.yesky.com/cpu/330/2521830.shtml">菜鸟晋级必修功课！图解Intel电脑组装全过程</a><br />
2. <a href="http://bbs.e-lsw.com/showtopic-6901.aspx">常用主板前置音频接法详细设置</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/01/17/build-pc-by-myself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>原来 Mac 自带了 PHP</title>
		<link>http://log.dongsheng.org/2009/01/11/buildin-php-on-mac/</link>
		<comments>http://log.dongsheng.org/2009/01/11/buildin-php-on-mac/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 09:30:47 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=31</guid>
		<description><![CDATA[1. 启用 Apache，System Preferences -> Sharing -> Web Sharing 2. 编辑 /etc/apache2/httpd.conf，把启用 php5 的那一行，反注释掉，然后修改 DirectoryIndex，加上 index.php，然后创建 php 配置文件： mv /etc/php.ini.default [...]]]></description>
			<content:encoded><![CDATA[<p>1. 启用 Apache，System Preferences -> Sharing -> Web Sharing<br />
2. 编辑 /etc/apache2/httpd.conf，把启用 php5 的那一行，反注释掉，然后修改 DirectoryIndex，加上 index.php，然后创建 php 配置文件：</p>
<pre>
mv /etc/php.ini.default /etc/php.ini
</pre>
<p>重启 apache：</p>
<pre>
apachectl restart
</pre>
<p>3. 文档根目录在 /Library/WebServer/Documents，看了看 phpninfo 发现支持的扩展还不算太少 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/01/11/buildin-php-on-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac 不支持 seq</title>
		<link>http://log.dongsheng.org/2009/01/11/jot-for-mac/</link>
		<comments>http://log.dongsheng.org/2009/01/11/jot-for-mac/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 09:29:59 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=30</guid>
		<description><![CDATA[以前在 Linux 上用这样一个脚本： str='..' level='./../' for i in `seq 5 1`; do eval "alias '$str=cd $level'" level=$level'../' str=$str'.' done 可以方便的点几个点就蹦到上面的 [...]]]></description>
			<content:encoded><![CDATA[<p>以前在 Linux 上用这样一个脚本：</p>
<pre>
str='..'
level='./../'
for i in `seq 5 1`;
do
    eval "alias '$str=cd $level'"
    level=$level'../'
    str=$str'.'
done
</pre>
<p>可以方便的点几个点就蹦到上面的 n 层目录，但 MAC 上没有 seq 这个 shell 命令（确切的说是 FreeBSD 没这个命令），问了管理 FreeBSD 包的朋友才知道，可以使用 <a href="http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man1/jot.1.html">jot</a> 代替 seq，问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/01/11/jot-for-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Console Versus the Terminal</title>
		<link>http://log.dongsheng.org/2009/01/07/console-versus-the-terminal/</link>
		<comments>http://log.dongsheng.org/2009/01/07/console-versus-the-terminal/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 09:28:19 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=29</guid>
		<description><![CDATA[一直搞不清 Terminal 和 Console 的区别，今天在 Learning Cocoa with Objective-C 中看到这样一段终于搞明白了。 The Terminal application is the command-line interface to Mac OS [...]]]></description>
			<content:encoded><![CDATA[<p>一直搞不清 Terminal 和 Console 的区别，今天在 <a href="http://oreilly.com/catalog/9780596003012/">Learning Cocoa with Objective-C</a> 中看到这样一段终于搞明白了。</p>
<blockquote><p>
The Terminal application is the command-line interface to Mac OS X. It presents an interface to what old-school Unix users call the &#8220;shell.&#8221; In a shell, you can issue any command line you want and see it executed. In contrast, the Console is a simple log of messages printed to STDOUT by various programs, which do not end up anywhere else. In the Console, you will typically see messages from various background processes and, sometimes, debug statements from GUI programs.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/01/07/console-versus-the-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这过去的一年</title>
		<link>http://log.dongsheng.org/2009/01/05/last-year-summary/</link>
		<comments>http://log.dongsheng.org/2009/01/05/last-year-summary/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 03:57:16 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=41</guid>
		<description><![CDATA[2008 过得非常缓慢，这一年生活发生了很多变化，在 2009 的边上，简单的流水账一下。 1. 出国 我从没一个人出过远门，这是第一次到坐十小时飞机才能抵达的地方，常回家看看成了一个物理上都极困难的事情。这是好事，我学会了出国的第一课：没有后路，只能往前走。国外的消费是高昂的，我得学着在这里生存下去。刚开始有点令人沮丧，大部分时间，我都在等待，等待开学等待成绩等待工作等待机会，后来证明—— 等待也是一种学习。 不久就开始了打工和上学。上课第一天就得到一个令人沮丧消息，我上的这是个语言学校是个黑校，会毫无理由的推迟学生的毕业时间以赚取学费，碰到一个山东老乡告诉我，学校无故给他延长了半年的学期，不但耽误了大学入学还要交付七千多澳币的学费，所以他决定回国了……另外一个坏消息是我要到 Fremantal 市校区上课，每天来回三小时，我不得不每天7点起床…… 就这样开始了在这个学校战战兢兢的两个月的学习生涯。这两个月里我只相信一个道理：只要自己做的尽善尽美，学校没理由给我延期。结果是，我按时毕业了，还要回了学校多收我的一个月学费，两个月的学习对我的语言没有显著提高，比这重要的是，我明白了这样的道理：在国外，别指望别人能帮到自己，任何事都要靠自己去抗争去改变，简单的讲只是两个字——自强，不错，我们的生活中充满令人沮丧的事实，束手无策是件很痛苦的事情，但我有个信念，世上没有无法改变的东西，认真的去想对策，积极的行动必然会让现状朝好的方面转变，这个道理谁都懂，但我是从那时候才真的开始实践的，信则成。 关于打工，我曾经写过一篇长文，现在看来还是有点触动。 2008 年二月，我正式进入大学开始研究生课程，澳洲的计算机课程极其无聊，第一学期的三门课分别是：专家实践（讲狗屁的计算机专家职业道德，花近三千澳币学这个？）、项目管理（背了几百页项目管理的过程和理论，完全 bullshit）、局域网设计（我不是大二就学过了吗？）。我很郁闷，光上课就能培养出硕士吗？澳大利亚怎么还能搞出个只上课就能拿学位的研究生？扯淡。说露骨点，到澳洲读研究生，就是花钱换绿卡，绿卡能否到手还得看澳洲政府的脸色，目前的政策是再交了两年高昂学费后，你还得考出雅思四个七或者有一年相关工作经验才能顺利移民（这两个条件都不是一般的难）。 我决定走别的路，投了大量简历，涵盖了软件开发、网络管理、系统管理，运气不错，零八年三月我就找到一份兼职PHP开发的职位。我热爱这份工作，原因在于，我既可以实践我已有的知识并能学到新的技术，在与别人的交流中还能有效的提供英语水平。但在学校，我得不到提高的满足感——一周只在学校呆三个上午，你觉得能学到什么？学校声称把更多时间给学生去研究，但那些弱智的作业啊，我看不到任何的创新和研究的元素在里面。于是矛盾激发，发生了下面的事。 2. 退学 学生签证当然是不可能退学的，一旦中断课程我就必须回国，但我还不打算在一事无成的情况下回国，所以我找老板谈：我想全职工作，老板很高兴，非常欢迎你全职工作，但我们没有处理签证的经验，你需要自己完成所有的 [...]]]></description>
			<content:encoded><![CDATA[<p>2008 过得非常缓慢，这一年生活发生了很多变化，在 2009 的边上，简单的流水账一下。</p>
<p>1. 出国</p>
<p>我从没一个人出过远门，这是第一次到坐十小时飞机才能抵达的地方，常回家看看成了一个物理上都极困难的事情。这是好事，我学会了出国的第一课：没有后路，只能往前走。国外的消费是高昂的，我得学着在这里生存下去。刚开始有点令人沮丧，大部分时间，我都在等待，等待开学等待成绩等待工作等待机会，后来证明—— 等待也是一种学习。</p>
<p>不久就开始了打工和上学。上课第一天就得到一个令人沮丧消息，我上的这是个语言学校是个黑校，会毫无理由的推迟学生的毕业时间以赚取学费，碰到一个山东老乡告诉我，学校无故给他延长了半年的学期，不但耽误了大学入学还要交付七千多澳币的学费，所以他决定回国了……另外一个坏消息是我要到 Fremantal 市校区上课，每天来回三小时，我不得不每天7点起床……</p>
<p>就这样开始了在这个学校战战兢兢的两个月的学习生涯。这两个月里我只相信一个道理：只要自己做的尽善尽美，学校没理由给我延期。结果是，我按时毕业了，还要回了学校多收我的一个月学费，两个月的学习对我的语言没有显著提高，比这重要的是，我明白了这样的道理：在国外，别指望别人能帮到自己，任何事都要靠自己去抗争去改变，简单的讲只是两个字——自强，不错，我们的生活中充满令人沮丧的事实，束手无策是件很痛苦的事情，但我有个信念，世上没有无法改变的东西，认真的去想对策，积极的行动必然会让现状朝好的方面转变，这个道理谁都懂，但我是从那时候才真的开始实践的，信则成。</p>
<p>关于打工，我曾经写过一篇<a href="http://log.dongsheng.org/archives/3">长文</a>，现在看来还是有点触动。</p>
<p>2008 年二月，我正式进入大学开始研究生课程，澳洲的计算机课程极其无聊，第一学期的三门课分别是：专家实践（讲狗屁的计算机专家职业道德，花近三千澳币学这个？）、项目管理（背了几百页项目管理的过程和理论，完全 bullshit）、局域网设计（我不是大二就学过了吗？）。我很郁闷，光上课就能培养出硕士吗？澳大利亚怎么还能搞出个只上课就能拿学位的研究生？扯淡。说露骨点，到澳洲读研究生，就是花钱换绿卡，绿卡能否到手还得看澳洲政府的脸色，目前的政策是再交了两年高昂学费后，你还得考出雅思四个七或者有一年相关工作经验才能顺利移民（这两个条件都不是一般的难）。</p>
<p>我决定走别的路，投了大量简历，涵盖了软件开发、网络管理、系统管理，运气不错，零八年三月我就<a href="http://log.dongsheng.org/archives/4">找到一份兼职PHP开发的职位</a>。我热爱这份工作，原因在于，我既可以实践我已有的知识并能学到新的技术，在与别人的交流中还能有效的提供英语水平。但在学校，我得不到提高的满足感——一周只在学校呆三个上午，你觉得能学到什么？学校声称把更多时间给学生去研究，但那些弱智的作业啊，<a href="http://log.dongsheng.org/archives/5">我看不到任何的创新和研究的元素在里面</a>。于是矛盾激发，发生了下面的事。</p>
<p>2. 退学</p>
<p>学生签证当然是不可能退学的，一旦中断课程我就必须回国，但我还不打算在一事无成的情况下回国，所以我找老板谈：我想全职工作，老板很高兴，非常欢迎你全职工作，但我们没有处理签证的经验，你需要自己完成所有的 Paperwork，我提供一切支持。花了不少时间查学生签证转工作签证的信息，但没有找到有用的信息，我决定带上所有的支持材料去移民局咨询，interview 时发生一件很传奇的事，接待我的老外竟然精通汉语，拿着我的毕业证书看了一会，问我济南是不是山东的？然后说他没去过济南，但在青岛呆过几天，我听的目瞪口呆，半天才反应出应该怎么回答……总之很顺利，我递交材料不到一周就收到了移民局通知——我的临时居民签证顺利签发了！真没想到移民局工作效率竟然这么高。</p>
<p>关于中断学业是否值得的问题，我曾跟父母解释过很多遍，我可以在任何适当的时机回学校办理重新入学手续，我以前修完的课程依然有效。并且，澳洲的高等教育与中国有很大差异，在职教育和普通全日制教育在本质上完全相同，我可以在 2009 年重新入学，事实上，这也我正打算做的事，毕竟，这张文凭还是很有分量的。一边工作一边上学要更辛苦一点，但解决了工作经验和物质生活等等问题，显然利远大于弊。</p>
<p>3. 学开车</p>
<p>自此在国内学开车险些把车开到墙上以后我就再没动过学开车的年头，但在澳洲，没车实在太痛苦了，这里没有中国那样满大街跑的出租车（必须打电话预约），地广人稀所以工作的地方离住的地方也非常远。</p>
<p>所以决定买车，买回车后的第一件事竟然是：我还不会开呢！我堂弟的房东是个驾车教练，我就开始跟他学，一次还不到小时，收费五十澳币，真是贵。</p>
<p>我的技术非常糟糕，学开车的第一个月就撞坏了路灯，倒车时蹭到一辆马六，还在十字路口熄火+倒车……险象环生，可没有出大问题。2009 年我一定要把开车技术练好，拿到正式驾照就去换个新四驱车，要是拿不到，就还开现在这个好了 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>4. Roadtrip</p>
<p>零八年底跟两个朋友开车去了 Broome，西澳洲最北部，行程三千多公里，路上看尽了西澳洲的繁华和荒凉，这是我经历的最有价值的一次旅行，路上看到了粉色的天然湖，热带的对流雨还有一个非常难以发现的地中海，拍了四五百张照片，改天整理一下传上来。</p>
<p>零九年我还要来一次 Roadtrip，这次可能要开到墨尔本 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>5. 告别 PC</p>
<p>圣诞前我买了一台 Macbook，准备淘汰掉我用了近两年的 DELL XPS，吸引我的不仅是新 Macbook 精湛的做工（整个机身没有一道缝），还有基于 UNIX 的 Mac OS X，昨天买了 displayport 2 dvi 的转接口（荒唐！一根线四十五澳币），把 Macbook 接到了我的大显示器上，告别 PC 的工作算是圆满完成了。</p>
<p>这差不多就是零八年对我影响较大的一些事，先写这么多吧，有时间可能还要再修改一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2009/01/05/last-year-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>出游</title>
		<link>http://log.dongsheng.org/2008/12/23/north-road-trip/</link>
		<comments>http://log.dongsheng.org/2008/12/23/north-road-trip/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 03:59:40 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=43</guid>
		<description><![CDATA[明天跟朋友驾车出游，Perth 向北。 我其实一点也不热衷旅游，比起在路上颠簸疲顿，我心里更希望躺在床上懒懒度过十几天的圣诞假日，花与平日同样多的时间在电脑上，幻想这样就能驰骋世界，神游四方。但事实是，我很悲哀，科技让生活越来越多的电子化，我们用 Google Earth 周游世界，通过 Flickr 看别人的生活，用 iPod 听场音乐会或者在聊天室里和素未谋面的人倾谈，当感激科技带来的便利时，我们真的更幸福了吗？ 别忘了，外面有色彩真实的世界，有能拂过我脸的大沙漠的风，有可触摸的湿软沙滩、有可倾听的鸟语虫鸣还有一直延伸到蔚蓝天边的大马路。所以我得走出去，尝试逐步改变现在的生活。 叔本华说过这样一段让人触动的话： 一种平静欢愉的气质，快快乐乐的享受非常健全的体格，理知清明，生命活泼，洞彻事理，意欲温和，心地善良，这些都不是身份与财富所能促成或代替的。因为人最重要的在于他自己是什么。当我们独处的时候，也还是自己伴随自己，上面这些美好的性质既没有人能给你，也没有人能拿走，这些性质比我们所能占有的任何其他事物重要，甚至比别人看我们如何来得重要。]]></description>
			<content:encoded><![CDATA[<p>明天跟朋友驾车出游，Perth 向北。</p>
<p>我其实一点也不热衷旅游，比起在路上颠簸疲顿，我心里更希望躺在床上懒懒度过十几天的圣诞假日，花与平日同样多的时间在电脑上，幻想这样就能驰骋世界，神游四方。但事实是，我很悲哀，科技让生活越来越多的电子化，我们用 Google Earth 周游世界，通过 Flickr 看别人的生活，用 iPod 听场音乐会或者在聊天室里和素未谋面的人倾谈，当感激科技带来的便利时，我们真的更幸福了吗？</p>
<p>别忘了，外面有色彩真实的世界，有能拂过我脸的大沙漠的风，有可触摸的湿软沙滩、有可倾听的鸟语虫鸣还有一直延伸到蔚蓝天边的大马路。所以我得走出去，尝试逐步改变现在的生活。</p>
<p>叔本华说过这样一段让人触动的话：</p>
<p><strong>一种平静欢愉的气质，快快乐乐的享受非常健全的体格，理知清明，生命活泼，洞彻事理，意欲温和，心地善良，这些都不是身份与财富所能促成或代替的。因为人最重要的在于他自己是什么。当我们独处的时候，也还是自己伴随自己，上面这些美好的性质既没有人能给你，也没有人能拿走，这些性质比我们所能占有的任何其他事物重要，甚至比别人看我们如何来得重要。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/23/north-road-trip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编译 PHP GD 模块</title>
		<link>http://log.dongsheng.org/2008/12/16/build-gd-extension-for-php/</link>
		<comments>http://log.dongsheng.org/2008/12/16/build-gd-extension-for-php/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 09:20:31 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=27</guid>
		<description><![CDATA[在编译 PHP 使用 &#8211;with-gd 选项无法正常将 GD 编译进 PHP，所以我尝试将 GD 编译成一个 PHP 扩展，方法如下： 1. 进入 PHP 源码 ./ext/gd 2. 运行 phpize [...]]]></description>
			<content:encoded><![CDATA[<p>在编译 PHP 使用 &#8211;with-gd 选项无法正常将 GD 编译进 PHP，所以我尝试将 GD 编译成一个 PHP 扩展，方法如下：<br />
1. 进入 PHP 源码 ./ext/gd<br />
2. 运行 phpize<br />
3. 进行 ./configure &#038;&#038; make &#038;&#038; make install<br />
编译完成后修改 PHP 配置文件，设置本扩展的路径。<br />
重启 Apache 问题依旧，查看 Apache 的错误日志，显示该模块无效，猜想可能是没有正确链接 GD 的支持库，看了一下 configure 的选项，意识到 libjpeg 和 libpgn 库没有安装，用 pacman 安装这两个库以后，重新编译 GD 库，问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/16/build-gd-extension-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows NTFS 权限设置</title>
		<link>http://log.dongsheng.org/2008/12/10/ntfs-permission-windows/</link>
		<comments>http://log.dongsheng.org/2008/12/10/ntfs-permission-windows/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 10:21:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[ntfs]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=28</guid>
		<description><![CDATA[今天不得不用一个 ASP 程序，折腾半天，ACCESS 总提示无法写入数据，猜想是 NTFS 分区上没有写权限，点右键找属性，却发现根本没有“安全”标签页，这可怎么办啊！在网上搜了半天终于搞明白，原来需要在文件管理器里关掉“使用简单共享”！]]></description>
			<content:encoded><![CDATA[<p>今天不得不用一个 ASP 程序，折腾半天，ACCESS 总提示无法写入数据，猜想是 NTFS 分区上没有写权限，点右键找属性，却发现根本没有“安全”标签页，这可怎么办啊！在网上搜了半天终于搞明白，原来需要在文件管理器里关掉“使用简单共享”！</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/10/ntfs-permission-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSpace 安装笔记</title>
		<link>http://log.dongsheng.org/2008/12/10/dspace-installation-notes/</link>
		<comments>http://log.dongsheng.org/2008/12/10/dspace-installation-notes/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 09:18:08 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dspace]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=26</guid>
		<description><![CDATA[DSpace 是被学术，非盈利，商业组织广泛应用的数字仓库管理软件，它可以管理包括文本，图片，动画，视频等各种数据文件，它是 BSD 协议下的开源软件。 DSpace 可以从源码或二进制包安装，我选择下载了一个 1.9 M 的二进制包，心里挺高兴，心想 Java 软件怎么做的这么小了？ 但一解压就看到一个 pom.xml，心里一凉，说完了，这个包是想用 maven 下载第三方库啊！进到根目录下的 [dspace] 目录，然后运行 mvn install，这会自动下载运行 dspace [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dspace.org/index.php/Introducing-DSpace/">DSpace</a> 是被学术，非盈利，商业组织广泛应用的数字仓库管理软件，它可以管理包括文本，图片，动画，视频等各种数据文件，它是 BSD 协议下的开源软件。</p>
<p>DSpace 可以从源码或二进制包安装，我选择下载了一个 1.9 M 的二进制包，心里挺高兴，心想 Java 软件怎么做的这么小了？<br />
但一解压就看到一个 pom.xml，心里一凉，说完了，这个包是想用 <a href="http://maven.apache.org/">maven</a> 下载第三方库啊！进到根目录下的 [dspace] 目录，然后运行 mvn install，这会自动下载运行 dspace 所需要的所有包，下载了半天，这个只有 1.9M 的安装包变成了近 400M 的庞然大物。在上面的步骤里 maven 只负责包依赖关系，然后要用 ant 把 dspace 安装到适当的位置，进入 [dspace]/target/dspace-{$version}-build.dir/，编辑 config/dspace.cfg，把 dspace.dir 设置成 /usr/share/dspace，其他选项都很简单，看看就明白了。<br />
运行 ant fresh_install 把 dspace 安装到目标位置，在我的例子里 /usr/share/dspace/webapps 是相关 web 文件。<br />
最后设置 [tomcat]/conf/server.xml 在 host 段中加入：</p>
<pre>
      &lt;Context path="/jspui" docBase="/usr/share/dspace/webapps/jspui" debug="1"
          reloadable="true" cachingAllowed="false"
          allowLinking="true"/&gt;
      &lt;!-- DEFINE A CONTEXT PATH FOR DSpace OAI User Interface --&gt;
      &lt;Context path="/oai" docBase="/usr/share/dspace/webapps/oai" debug="1"
          reloadable="true" cachingAllowed="false"
          allowLinking="true"/&gt;
</pre>
<p>启动 tomcat，然后浏览 http://localhost:8080/jspui。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/10/dspace-installation-notes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>编写 Nginx 启动脚本</title>
		<link>http://log.dongsheng.org/2008/12/07/nginx-boot-script/</link>
		<comments>http://log.dongsheng.org/2008/12/07/nginx-boot-script/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 09:10:45 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=25</guid>
		<description><![CDATA[今天试了一下直接使用 php-cgi 启用 fastcgi 的脚本竟然又可以使用了，真奇怪。 写了一个自动启动脚本，放到这里做个备份： #!/sbin/runscript # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU [...]]]></description>
			<content:encoded><![CDATA[<p>今天试了一下直接使用 php-cgi 启用 fastcgi 的脚本竟然又可以使用了，真奇怪。<br />
写了一个自动启动脚本，放到这里做个备份：</p>
<pre>
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or
# later
# $Header:$

NGINX_EXEC=/usr/sbin/nginx
PHP_EXEC=/usr/bin/php-cgi

depend() {
need logger net
}

start () {
ebegin "Starting FCGI Service"
spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi
eend $?
ebegin "Starting Nginx"
start-stop-daemon --start --exec ${NGINX_EXEC}
eend $?
}

stop() {
ebegin "Stopping FCGI Service"
killall php-cgi
eend $?
ebegin "Stopping Nginx"
killall nginx
start-stop-daemon --stop --quiet --pidfile /var/run/nginx.pid
--exec $NGINX_EXEC
eend $?
}
</pre>
<p>然后把这个文件保存为 /etc/init.d/httpd 并加上执行权限。<br />
然后运行 rc-config add httpd default</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/07/nginx-boot-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用公私钥实现无密码登录</title>
		<link>http://log.dongsheng.org/2008/12/07/login-without-password-by-private-key/</link>
		<comments>http://log.dongsheng.org/2008/12/07/login-without-password-by-private-key/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 09:09:42 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=24</guid>
		<description><![CDATA[1. 先用 SecureCRT 创建 Openssl 格式的 公私钥 2. 上传公钥到 $HOME/.ssh/authorized_keys 3. 修改 /etc/ssh/sshd_config PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys #这里是到用户根目录的相对路径 重启 sshd [...]]]></description>
			<content:encoded><![CDATA[<p>1. 先用 SecureCRT 创建 Openssl 格式的 公私钥<br />
2. 上传公钥到 $HOME/.ssh/authorized_keys<br />
3. 修改 /etc/ssh/sshd_config</p>
<p>PubkeyAuthentication yes<br />
AuthorizedKeysFile .ssh/authorized_keys #这里是到用户根目录的相对路径</p>
<p>重启 sshd 服务<br />
4. 在 SecureCRT 中设置使用密钥登录</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/07/login-without-password-by-private-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Gentoo 上安装 Nginx + php</title>
		<link>http://log.dongsheng.org/2008/12/06/nginx-php-gentoo/</link>
		<comments>http://log.dongsheng.org/2008/12/06/nginx-php-gentoo/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 09:06:29 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=23</guid>
		<description><![CDATA[从源码安装 Nginx ./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx_error.log --http-log-path=/var/log/nginx_access.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx_client_body.tmp --http-proxy-temp-path=/var/tmp/nginx_proxy.tmp --http-fastcgi-temp-path=/var/tmp/nginx_fastcgi.tmp --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/src/openssl （启用了监控和ssl模块，重新设置文件路径） make make install 注意，&#8211;with-openssl 指向的是 [...]]]></description>
			<content:encoded><![CDATA[<h4>从源码安装 Nginx</h4>
<pre>./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx_error.log --http-log-path=/var/log/nginx_access.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx_client_body.tmp --http-proxy-temp-path=/var/tmp/nginx_proxy.tmp  --http-fastcgi-temp-path=/var/tmp/nginx_fastcgi.tmp --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/src/openssl</pre>
<p>（启用了监控和ssl模块，重新设置文件路径）<br />
<code>make<br />
make install</code><br />
注意，&#8211;with-openssl 指向的是 openssl 的完整源码树。</p>
<h4>Nginx 的配置</h4>
<p>在 server 段中加入 root 指令，指向网站根目录，然后把 location / 段改为：</p>
<pre>location / {
  stub_status on;
  access_log off;
}</pre>
<p>这样就能在首页显示状态信息了，在这里用作测试。</p>
<h4>从源码安装 PHP 5.2.7</h4>
<pre>./configure --prefix=/usr --with-config-file-path=/etc/php --with-curl=shared --with-curlwrappers --enable-fastcgi --enable-force-cgi-redirect --with-openssl=shared --with-mysql=shared --with-mysqli=shared --enable-zip=shared --with-xmlrpc=shared --enable-mbstring --enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared --with-gd=shared --with-zlib
make
make install
cp php.ini-dist /etc/php/php.ini</pre>
<p>在这种情况下，模块会编译进 PHP 而不是作为模块动态加载，如果想要创建模块需要设置 shared 选项，比如我要把 PDO 作为模块加载：</p>
<pre>./configure --enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared</pre>
<p>如果是 apache 的话要加上  &#8211;with-apxs2 项以创建模块。</p>
<h4>设置 FASTCGI</h4>
<p>我尝试用 <a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">php-cgi 直接创建 FCGI 服务</a>，但无法成功，只好使用 lighttpd 的 spawn-fcgi 程序创建 FCGI 服务（这里偷懒用 emerge 装的 lighttpd）：</p>
<pre>spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi</pre>
<p>最后修改 nginx 的配置文件使之调用 php FCGI 服务：</p>
<pre>location / {
 index index.php index.htm index.html;
}
location ~ .php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
}</pre>
<p>创建一个 phpinfo 页面测试一下吧！</p>
<h4>参考</h4>
<p><a href="http://wiki.codemongers.com/NginxInstallOptions">Nginx 编译参数说明</a><br />
<a href="http://php.mirrors.ilisys.com.au/manual/en/configure.php">PHP 编译参数说明</a><br />
<a href="http://blog.s135.com/post/366.htm">Nginx 0.7.x + PHP 5.2.6（FastCGI）搭建胜过Apache十倍的Web服务器（第4版）</a><br />
<a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">Nginx With PHP As FastCGI Howto</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/06/nginx-php-gentoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux Installation</title>
		<link>http://log.dongsheng.org/2008/12/02/arch-linux-installation/</link>
		<comments>http://log.dongsheng.org/2008/12/02/arch-linux-installation/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 09:01:38 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=22</guid>
		<description><![CDATA[通过 SSH 远程安装提示： ssh_exchange_identification 需要在 /etc/hosts.allows 中添加： ALL: 0.0.0.0/0.0.0.0 : allow 关于这个文件的详细配置，参见：http://linux.die.net/man/5/hosts.allow 键盘鼠标无法使用 Arch 的 xorg 升级出了不少问题，我用 hwd -xa 生成 [...]]]></description>
			<content:encoded><![CDATA[<h4>通过 SSH 远程安装提示： ssh_exchange_identification</h4>
<p>需要在 /etc/hosts.allows 中添加：<br />
ALL: 0.0.0.0/0.0.0.0 : allow<br />
关于这个文件的详细配置，参见：<a href="http://linux.die.net/man/5/hosts.allow">http://linux.die.net/man/5/hosts.allow</a></p>
<h4>键盘鼠标无法使用</h4>
<p>Arch 的 xorg 升级出了不少问题，我用 hwd -xa 生成 xorg.conf 以后无法使用键盘鼠标，问题的关键是 hal 服务没有启动，以下是 LinuxSir 网友总结的<a href="http://www.linuxsir.org/bbs/thread339907.html">修复办法</a>：</p>
<blockquote><p>
1、注释掉Section &#8220;Files&#8221;中的RgbPath项<br />
2、修改i810为intel（我原先用i810,现在只能用intel，根据你的自己设置）<br />
3、注释掉Section &#8220;ServerLayout&#8221;中inputdevice项和所有Section “InputDevice”<br />
4. rc.conf中的daemons添加hal<br />
5 使用以上方法仍有问题的，请不要使用方法3，并将ServerFlags中的AutoAddDevices设为false<br />
Section &#8220;ServerFlags&#8221;<br />
Option &#8220;AutoAddDevices&#8221; &#8220;False&#8221;<br />
EndSection
</p></blockquote>
<h4>vim</h4>
<p>Arch 自带的 vi 不好使，我最需要的 clientserver feature 没有打开，所以只能下载源码自己编译。<br />
vim 的 features 可以通过编辑 src/feature.h 删改，记得一定要开启双字节支持！<br />
vim 的 <a href="http://www.vim.org/htmldoc/various.html#+feature-list">feature list</a>。<br />
vim 的 <a href="http://www.vim.org/htmldoc/usr_90.html">编译说明</a>。</p>
<h4>Bitlbee</h4>
<p>装了默认的 bitlbee 竟然不支持 join_chat，无奈只能下载源码编译。<br />
安装的时候使用 ./configure &#8211;help 看看协议的默认值，用不到的禁用。 Arch 把 xinetd 的配置文件放在 /etc/xinetd.d/ 下，建一个 bitlbee 的服务描述文件：</p>
<pre>
service bitlbee
{
       type = UNLISTED
       socket_type = stream
       protocol = tcp
       wait = no
       user = bitlbee
       group = bitlbee
       server = /usr/sbin/bitlbee
       port = 6667
       disable = no
}
</pre>
<h4>LAMP</h4>
<p>在 /etc/httpd/conf/httpd.conf 中加入：</p>
<pre>
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
Include conf/extra/php5_module.conf
</pre>
<p>然后修改 http 服务器根目录。<br />
还有个小问题是发现 php 无法读写一个 777 的文件夹，折腾了半天才想起 php 有个 open_basedir 选项，把要读写的文件路径加入，问题解决。<br />
对于 mysql：</p>
<pre>
mysql_ininstall_db
/usr/bin/mysqladmin -u root password 'new-password'
</pre>
<p>暂时就这些。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/12/02/arch-linux-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware server 1.0.* 在 2.6.27 内核上运行的问题</title>
		<link>http://log.dongsheng.org/2008/11/17/vmware-server-1-linux/</link>
		<comments>http://log.dongsheng.org/2008/11/17/vmware-server-1-linux/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 08:58:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=21</guid>
		<description><![CDATA[每次升级 Linux 内核，VMware 一定要闹出点事来无法运行，今天卸载了 2.0 安装 1.0.* 版本，连安装都没法进行了。 在网上搜索一下找到了 http://www.insecure.ws/2008/10/20/vmware-specific-specific-55x-and-kernel-2627，这个补丁包解决了 api 的不兼容问题。 用法： 安装 vmware 的时候会问你是否要运行 vmware-config.pl，选 no，然后运行补丁包里的 runme.pl。]]></description>
			<content:encoded><![CDATA[<p>每次升级 Linux 内核，VMware 一定要闹出点事来无法运行，今天卸载了 2.0 安装 1.0.* 版本，连安装都没法进行了。</p>
<p>在网上搜索一下找到了 http://www.insecure.ws/2008/10/20/vmware-specific-specific-55x-and-kernel-2627，这个补丁包解决了 api 的不兼容问题。</p>
<p>用法：<br />
安装 vmware 的时候会问你是否要运行 vmware-config.pl，选 no，然后运行补丁包里的 runme.pl。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/11/17/vmware-server-1-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 中启用 Apache Rewrite 模块</title>
		<link>http://log.dongsheng.org/2008/10/19/ubuntu-apache-rewrite/</link>
		<comments>http://log.dongsheng.org/2008/10/19/ubuntu-apache-rewrite/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 08:57:36 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[rewrite_mod]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=20</guid>
		<description><![CDATA[1. sudo a2enmod rewrite 2. sudo vi /etc/apache2/sites-available/default 3. 修改 AllowOverride none 为 AllowOverride all 4. sudo /etc/init.d/apache2 restart 5. [...]]]></description>
			<content:encoded><![CDATA[<p>1. sudo a2enmod rewrite<br />
2. sudo vi /etc/apache2/sites-available/default<br />
3. 修改 AllowOverride none 为 AllowOverride all<br />
4. sudo /etc/init.d/apache2 restart<br />
5. 编辑 .htaccess 启用重写规则</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/10/19/ubuntu-apache-rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>长假</title>
		<link>http://log.dongsheng.org/2008/10/04/sweet-holiday/</link>
		<comments>http://log.dongsheng.org/2008/10/04/sweet-holiday/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 08:56:22 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[holiday]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=19</guid>
		<description><![CDATA[从上周五一直玩到现在，放松了很多，脑子里面很多乱七八糟的东西整理的差不多了。在布里斯班呆了三天，参加了今年的 Moodle Moot AU，发生了一些事，零散的记一下。 1) 尴尬的 周四晚去参加宴会，进去发现所有人都穿的很正式，还有不少穿的礼服，只有我是披着一件破 T-Shirt 就进去了，还是唯一的亚洲人，太显眼了，丢大了。后来陆陆续续才来了几个跟我一样的“随意”的人，有图为证： 这件事的教训是我得赶紧买套西装了，虽然来了快一年了，但参加这种大的社交活动还是第一次，我完全不懂在这种场合应该干什么怎么办。西方礼仪跟中国差异太大，这个我得好好学习。 2) 郁闷的 有种广泛接受的偏见：在国外生活英语就会短时间提高。但现实是难以令人满意的，回到前面那个宴会，西方的人的习惯是在正式开饭前，端杯酒自由交流，话题无非是恭维、客气（有时候我觉得西方人比中国人还要虚伪），但信息量大环境嘈杂，远不同于我已经习惯的工作环境的语言交流，我完全没法融入到话题中。我同事说，不要沮丧，你刚来不到一年，而语言的提高是需要时间和精力投入的。如果你想快速提高，还是来杯白兰地吧 它会让你“觉得”英语提高了。 未来几年我没有太担心的东西，最难的关卡过得差不多了，把英语提高到 local 的水平或至少能提高到能跟 local 自由交流的水平是我得下大功夫办的事。 3) [...]]]></description>
			<content:encoded><![CDATA[<p>从上周五一直玩到现在，放松了很多，脑子里面很多乱七八糟的东西整理的差不多了。在布里斯班呆了三天，参加了今年的 Moodle Moot AU，发生了一些事，零散的记一下。</p>
<p>1) 尴尬的<br />
周四晚去参加宴会，进去发现所有人都穿的很正式，还有不少穿的礼服，只有我是披着一件破 T-Shirt 就进去了，还是唯一的亚洲人，太显眼了，丢大了。后来陆陆续续才来了几个跟我一样的“随意”的人，有图为证：<br />
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3225/2911687082_4fbfcbda69.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://farm4.static.flickr.com/3225/2911687082_4fbfcbda69.jpg" alt="" border="0" /></a><br />
这件事的教训是我得赶紧买套西装了，虽然来了快一年了，但参加这种大的社交活动还是第一次，我完全不懂在这种场合应该干什么怎么办。西方礼仪跟中国差异太大，这个我得好好学习。</p>
<p>2) 郁闷的<br />
有种广泛接受的偏见：在国外生活英语就会短时间提高。但现实是难以令人满意的，回到前面那个宴会，西方的人的习惯是在正式开饭前，端杯酒自由交流，话题无非是恭维、客气（有时候我觉得西方人比中国人还要虚伪），但信息量大环境嘈杂，远不同于我已经习惯的工作环境的语言交流，我完全没法融入到话题中。我同事说，不要沮丧，你刚来不到一年，而语言的提高是需要时间和精力投入的。如果你想快速提高，还是来杯白兰地吧 <img src='http://log.dongsheng.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  它会让你“<span style="font-weight: bold;">觉得</span>”英语提高了。<br />
未来几年我没有太担心的东西，最难的关卡过得差不多了，把英语提高到 local 的水平或至少能提高到能跟 local 自由交流的水平是我得下大功夫办的事。</p>
<p>3) 开心的<br />
看到这么多人来参加 Moodle Moot，我很惊讶，没想到会有这么多人使用我们开发的软件（不少与会者还是从新西兰来），我突然有了要把现在的工作长期做下去的决心。刚开始工作的时候，我很不喜欢 Moodle 的代码库，代码风格不一致，庞大，甚至杂乱，到现在看法改变了很多，不能老拿理想说事（有些问题是社区开发的硬伤），一方面 Moodle 的功能很强大，它是实现了一些我以前没想过 WEB 能做好的功能，比如 Comunity Hub，Repository，Portfolio，另一方面它的历史很久远，大量的历史遗留代码和早期设计问题对新功能的开发造成限制，开发过程实际上也是一个不断折中的过程，有些问题已是积重难返。在未来的一两年，我们会开发一个完全重写的版本 —— Moodle 3.0，或许它将不再是一个产品还是一个像 Facebook 的网络平台，可能现在考虑这些有点早了，我很期待这个充分发挥想象力的机会。</p>
<p>最后一天的中午有个 Session 还专门讲了我开发的 Repository API（我做了约百分之八十），我很高兴这个模块解决了不少人的难题，听到的一些好的意见我下周就会写到代码里。</p>
<p>4) OLPC<br />
第一次把 OLPC 拿在手上，它硬件平平，只有 1G 硬盘（可能是固态硬盘），AMD CPU，有趣的是它的软件，一个基于 Linux 的操作系统，窗口管理器是叫做 Sugar（专用于 OLPC），上面带了很多有趣的聚合学习软件，我们带回 Perth 两台 OLPC，以后要在上面做测试开发。</p>
<p>5) Ubuntu<br />
Ubuntu 的流行程度超出了我的想象，与会的<span style="font-weight: bold;">开发者</span>，除了用 Mac 的就是 Ubuntu 了（没见有程序员用 Windows），我还发现一个家伙用的是 awesome 窗口管理器，Mac 和 Linux 的流行跟澳洲教育有关系，很多孩子从小就开始用 Linux 或者 Mac 学习甚至编程，在大学，你也可以发现运行着各种操作系统的机器，这点中国做的太差了。</p>
<p>6) 旅行<br />
我有点喜欢上澳大利亚了，打算明年中旬再到东岸玩一玩。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/10/04/sweet-holiday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 的 OpenSSL 库</title>
		<link>http://log.dongsheng.org/2008/09/27/php-openssl/</link>
		<comments>http://log.dongsheng.org/2008/09/27/php-openssl/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 03:23:02 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cryptography]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=17</guid>
		<description><![CDATA[书接上回，在研究 XML 签名之前先研究一下 OpenSSL 库。 签名和原理 PHP 签名的函数原型是： bool openssl_sign ( string $data , string &#038;$signature , mixed $priv_key_id [, [...]]]></description>
			<content:encoded><![CDATA[<p>书接<a href="http://log.dongsheng.org/archives/16">上回</a>，在研究 XML 签名之前先研究一下 OpenSSL 库。</p>
<h3>签名和原理</h3>
<p>PHP 签名的函数原型是：</p>
<pre>
bool openssl_sign ( string $data , string &#038;$signature , mixed $priv_key_id [, int $signature_alg ] )
</pre>
<p>大四时学的密码学全忘光了，用 Google CodeSearch 搜了一气 OpenSSL 的源代码才搞明白了签名的原理。</p>
<p>生成签名：</p>
<ol>
<li>对 $data 按照 $signature_alg 设置的算法（默认是OPENSSL_ALGO_SHA1）进行 hash 运算</li>
<li>用私钥加密（$priv_key_id）</li>
<li>$signature 就是产生的签名数据，连同 $data 发送给接收方</li>
</ol>
<p>可用的 hash 算法包括：</p>
<ul>
<li>OPENSSL_ALGO_SHA1</li>
<li>OPENSSL_ALGO_MD5</li>
<li>OPENSSL_ALGO_MD4</li>
<li>OPENSSL_ALGO_MD2</li>
</ul>
<p>验证：</p>
<ol>
<li>用公钥解密签名数据</li>
<li>解密后的结果是 $data 的 hash 值，接受方再生成 $data 的 hash 值与之对比</li>
</ol>
<h3>签名验证算法</h3>
<p>最常见的有两种：基于大数因子分解问题的数字签名（RSA），基于离散对数问题的数字签名（DSA），公私钥分别对应 ~/.ssh/id_rsa &#038; ~/.ssh/id_rsa.pub 和 ~/.ssh/id_dsa &#038; ~/.ssh/id_dsa.pub<br />
二者区别在于 RSA 还可以用于加密，而 DSA 只能用于签名验证，二者签名效率相近，但 RSA 的验证要远快于 DSA。</p>
<p>所以 PHP 中使用 RSA，公私钥可以用 OpenSSL 工具包生成：</p>
<pre>
openssl genrsa 512 >id_rsa
openssl rsa -pubout <id_rsa >id_rsa.pub
</pre>
<p>我在 .ssh 目录下的 RSA 公私钥是用 ssh-keygen 生成的，但在在这里做试验失败，可能于密钥长度有关系。</p>
<p>验证函数原型：</p>
<pre>
int openssl_verify  (  string $data  ,  string $signature  ,  mixed $pub_key_id  [,  int $signature_alg = OPENSSL_ALGO_SHA1  ] )
</pre>
<p>很好理解，$data 是接受方获取的数据，$signature 是一起发过来的签名，$pub_key_id 是校验用的公钥，$signature_alg 就是前面制定的 hash 算法了。</p>
<h3>加密</h3>
<p>函数原型：</p>
<pre>
int openssl_seal  ( string $data  , string &#038;$sealed_data  , array &#038;$env_keys  , array $pub_key_ids  )
</pre>
<ol>
<li>用随机字符串加密 data （ <a href="http://www.rsa.com/rsalabs/node.asp?id=2250">RC4</a> 加密算法）</li>
<li>用 pub_key_ids 里的公钥对共享密钥进行加密，将结果保存在 env_keys</li>
<li>将 env_keys 和 sealed_data 发送给接收方</li>
</ol>
<h3>解密</h3>
<p>函数原型：</p>
<pre>
bool openssl_open  ( string $sealed_data  , string &#038;$open_data  , string $env_key  , mixed $priv_key_id  )
</pre>
<ol>
<li>私钥揭开 env_key</li>
<li>用 env_key 打开加密消息</li>
</ol>
<h3>用 PHP 创建公私钥</h3>
<pre>
function get_key_pair() {
    $ret = array();
    $res = openssl_pkey_new();
    openssl_pkey_export($res, $ret['private_key']);
    $pub_key = openssl_pkey_get_details($res);
    $ret['public_key'] = $pub_key['key'];
    return $ret;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/27/php-openssl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在 PHP 中使用 XMLRPC</title>
		<link>http://log.dongsheng.org/2008/09/25/xmlrpc-php/</link>
		<comments>http://log.dongsheng.org/2008/09/25/xmlrpc-php/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 13:22:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=16</guid>
		<description><![CDATA[这几天在研究 Moodle Network 组件，通过这个模块，各个孤立的系统被连接到了一起，实现了单点登录和资源共享（对于 e-learning 有很大的意义），通信协议是 XML-RPC，信息安全不是依赖 SSL 的方案，而是在采用了 XML 签名（不对称加密算法），想法非常好，但实现的不太完整，因为这个模块的原作者离开了在新西兰的公司，整得像个半完成作品。 今天看了一下代码，打算在这上面解决多 Moodle 系统的资源共享问题（包含点对点和 HUB 模式），之前没用过 XMLRPC，所以现在开始学一下，我用的是 PHP 的 XMLRPC [...]]]></description>
			<content:encoded><![CDATA[<p>这几天在研究 Moodle Network 组件，通过这个模块，各个孤立的系统被连接到了一起，实现了单点登录和资源共享（对于 e-learning 有很大的意义），通信协议是 XML-RPC，信息安全不是依赖 SSL 的方案，而是在采用了 XML 签名（不对称加密算法），想法非常好，但实现的不太完整，因为这个模块的原作者离开了在新西兰的公司，整得像个半完成作品。</p>
<p>今天看了一下代码，打算在这上面解决多 Moodle 系统的资源共享问题（包含点对点和 HUB 模式），之前没用过 XMLRPC，所以现在开始学一下，我用的是 PHP 的 XMLRPC 模块（比纯 PHP 实现快了不少）。</p>
<p>首先实现一个 XMLRPC 服务，我封装了一个简单的类：</p>
<pre>
class xmlrpc_server {
    private $server;
    public function __construct() {
        $this->server = xmlrpc_server_create();
    }
    public function add($name, $func) {
        xmlrpc_server_register_method($this->server, $name, $func);
    }
    public function run() {
        $req = file_get_contents('php://input');
        $response = xmlrpc_server_call_method($this->server, $req, null);
        echo $response;
        xmlrpc_server_destroy($this->server);
    }
}
</pre>
<p>调用这个类创建一个服务：</p>
<pre>
header('Content-Type: text/xml');
function func_add($method, $params) {
    return $params[0]+$params[1];
}
$xmlrpc = new xmlrpc_server;
$xmlrpc->add('add', 'func_add');
$xmlrpc->run();
</pre>
<p>PHP 客户端的调用是通过 HTTP 的 POST 方法，我用的是 <a href="http://code.anbutu.com/n-342">cURL</a> 扩展：</p>
<pre>
require_once('curl.class.php');
class xmlrpc_client {
    public function __construct($url, $autoload = false) {
        $this->connection = null;
        $this->url = $url;
        $this->connection = new curl;
        $this->methods = array();
        if ($autoload) {
            $resp = $this->call('system.listMethods', null);
            $this->methods = $resp;
        }
    }
    public function call($method, $params = null) {
        $post = xmlrpc_encode_request($method, $params);
        return xmlrpc_decode($this->connection->post($this->url, $post));
    }
}
header('Content-Type: text/plain');
$rpc = "http://10.0.0.10/api.php";
$client = new xmlrpc_client($rpc, true);
print_r($client->call('add', array(199,2)));
</pre>
<p>待续，下一步优化代码并实现 XML 签名技术。</p>
<p>资料：</p>
<p><a href="http://www.w3.org/TR/xmldsig-core/">XML Signature Syntax and Processing</a><br />
<a href="http://au2.php.net/manual/en/book.openssl.php">OpenSSH</a><br />
<a href="http://www.w3.org/TR/xmlenc-core/">XML Encryption Syntax and Processing</a></p>
<p>== TO BE CONTINUED ==</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/25/xmlrpc-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gentoo 上的 Python 没有 sqlite 支持</title>
		<link>http://log.dongsheng.org/2008/09/24/gentoo-python-sqlite/</link>
		<comments>http://log.dongsheng.org/2008/09/24/gentoo-python-sqlite/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 12:20:00 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=15</guid>
		<description><![CDATA[Sqlite 从 Python 2.5 以后就是标准模块了，但 Gentoo 上的 Python 竟然没有这个模块，开始以为需要一个额外的包，但安装 pysqlite 以后问题依旧（过后才想起来是没进入标准前的一个模块），于是使用 USE 标签重新编译 Python： USE="sqlite" emerge python 问题解决]]></description>
			<content:encoded><![CDATA[<p>Sqlite 从 Python 2.5 以后就是标准模块了，但 Gentoo 上的 Python 竟然没有这个模块，开始以为需要一个额外的包，但安装 pysqlite 以后问题依旧（过后才想起来是没进入标准前的一个模块），于是使用 USE 标签重新编译 Python：</p>
<pre>
USE="sqlite" emerge python
</pre>
<p>问题解决</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/24/gentoo-python-sqlite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近的我有点焦虑</title>
		<link>http://log.dongsheng.org/2008/09/02/anxiety/</link>
		<comments>http://log.dongsheng.org/2008/09/02/anxiety/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 14:00:50 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=44</guid>
		<description><![CDATA[焦虑与我亦敌亦友，它无处不在，周期性爆发，时常伴随——坐立不安、脾气暴躁、心态失衡等不良症状。 引起焦虑的原因是多方面的，且在不能年龄段呈现不同形态，譬如，备考一门很难很无聊的课、寻思是不是挂了、闯祸了等着挨揍、大学第一天、毕业了、考雅斯、被自杀了、雷蒙倒闭了、去没去过的地方、用“重口味”英语问路、跟 MM 搭讪、喝喝奶粉进了医院（俺是血管里流着三聚氰胺的中国人）…… 老蔡第四定律推论四十二中赫然写着：焦虑源自对答案的渴望和对未知的恐惧，往往答案揭开后（无论是喜悦的或是惶恐的），焦虑就荡然无存……焦虑无法避免，它与寻求答案的过程相伴相生，无论答案带来的是片刻欢愉或长久遗憾……回想从前的经历，最难忘的不是一个个里程碑，而是在焦虑中度过的日日夜夜……消灭焦虑就是消灭生活的乐趣…… 快要奔向二十五的我给焦虑赋予了新的意义，在这个尴尬的年龄，一方面野心勃勃，另一方面我是如此的缺乏经验以至于未来充满变数。有人曾说过：人生就像倒车，你不会知道什么时候会撞上路灯（老蔡列传第十一）。坐在电脑前自寻烦恼的我给自己列出了一串问题： 1) 我的生活是否暗涌重重？或者相反，接下来的五六年我会不会两点一线日趋平淡的过下去？ 2) 我的下一个拐点在哪里？ 3) 昨天天做的牛肉是不是过期了？ 在百分之八十的情况下，我都能列出种种条件然后告诉自己最佳和最糟结果，但再缜密的分析也不及现实的权威性（比如问题三被证实不容乐观的），我们能做的就是在焦虑中准备和等待。 今天站在厨房里想做饭，掐指一算发现自己竟然连续做了一周饭了，突然把自己吓了一跳，我什么时候开始这么关心油盐酱醋柴米油盐了？！从小伙变成了大叔就在一念之间啊，所以我决定不吃了，回屋挨饿。 焦虑毫无悬念的继续着，因为答案啊，在风中飘。]]></description>
			<content:encoded><![CDATA[<p>焦虑与我亦敌亦友，它无处不在，周期性爆发，时常伴随——坐立不安、脾气暴躁、心态失衡等不良症状。</p>
<p>引起焦虑的原因是多方面的，且在不能年龄段呈现不同形态，譬如，备考一门很难很无聊的课、寻思是不是挂了、闯祸了等着挨揍、大学第一天、毕业了、考雅斯、被自杀了、雷蒙倒闭了、去没去过的地方、用“重口味”英语问路、跟 MM 搭讪、喝喝奶粉进了医院（俺是血管里流着三聚氰胺的中国人）……</p>
<p>老蔡第四定律推论四十二中赫然写着：焦虑源自对答案的渴望和对未知的恐惧，往往答案揭开后（无论是喜悦的或是惶恐的），焦虑就荡然无存……焦虑无法避免，它与寻求答案的过程相伴相生，无论答案带来的是片刻欢愉或长久遗憾……回想从前的经历，最难忘的不是一个个里程碑，而是在焦虑中度过的日日夜夜……消灭焦虑就是消灭生活的乐趣……</p>
<p>快要奔向二十五的我给焦虑赋予了新的意义，在这个尴尬的年龄，一方面野心勃勃，另一方面我是如此的缺乏经验以至于未来充满变数。有人曾说过：人生就像倒车，你不会知道什么时候会撞上路灯（老蔡列传第十一）。坐在电脑前自寻烦恼的我给自己列出了一串问题：</p>
<p>1) 我的生活是否暗涌重重？或者相反，接下来的五六年我会不会两点一线日趋平淡的过下去？<br />
2) 我的下一个拐点在哪里？<br />
3) 昨天天做的牛肉是不是过期了？</p>
<p>在百分之八十的情况下，我都能列出种种条件然后告诉自己最佳和最糟结果，但再缜密的分析也不及现实的权威性（比如问题三被证实不容乐观的），我们能做的就是在焦虑中准备和等待。</p>
<p>今天站在厨房里想做饭，掐指一算发现自己竟然连续做了一周饭了，突然把自己吓了一跳，我什么时候开始这么关心油盐酱醋柴米油盐了？！从小伙变成了大叔就在一念之间啊，所以我决定不吃了，回屋挨饿。</p>
<p>焦虑毫无悬念的继续着，因为答案啊，在风中飘。</p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/02/anxiety/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox 内核模块升级</title>
		<link>http://log.dongsheng.org/2008/09/02/virtualbox-kernel-module-upgrade/</link>
		<comments>http://log.dongsheng.org/2008/09/02/virtualbox-kernel-module-upgrade/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 07:18:41 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=14</guid>
		<description><![CDATA[Ubuntu 的内核升级到 2.6.24-21 以后，软件源里就找不到匹配模块了，这就需要下载 VirtualBox 的源码自行编译： sudo apt-get install virtualbox-ose-source sudo m-a update sudo m-a prepare sudo m-a a-i virtualbox-ose [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 的内核升级到 2.6.24-21 以后，软件源里就找不到匹配模块了，这就需要下载 VirtualBox 的源码自行编译：<br />
<code><br />
sudo apt-get install virtualbox-ose-source<br />
sudo m-a update<br />
sudo m-a prepare<br />
sudo m-a a-i virtualbox-ose<br />
sudo /etc/init.d/vboxdrv restart<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/02/virtualbox-kernel-module-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xbindkeys + xmms2</title>
		<link>http://log.dongsheng.org/2008/09/02/xbindkeys-xmms2/</link>
		<comments>http://log.dongsheng.org/2008/09/02/xbindkeys-xmms2/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 04:17:03 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[xbindkeys]]></category>
		<category><![CDATA[xmms2]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=13</guid>
		<description><![CDATA[昨天跟 Songbird 拜拜了，开始用 xmms2 听音乐，但想切换音轨都得到终端里输入 xmms2 next/prev，这就有点猥亵了，要解决这个问题还得要 xbindkeys 的一臂之力。 xbindkeys 是 X 下一个抓取键盘动作的工具，它可以将按键动作映射到一个 shell 命令上。 使用方法： 安装了这个软件以后，要从 /usr/share/doc/xbindkeys/examples/ 中拷贝一个配置文件到 ~/.xbindkeysrc。 [...]]]></description>
			<content:encoded><![CDATA[<p>昨天跟 Songbird 拜拜了，开始用 xmms2 听音乐，但想切换音轨都得到终端里输入 xmms2 next/prev，这就有点猥亵了，要解决这个问题还得要 xbindkeys 的一臂之力。</p>
<p>xbindkeys 是 X 下一个抓取键盘动作的工具，它可以将按键动作映射到一个 shell 命令上。</p>
<p><span style="font-weight:bold;">使用方法：</span><br />
安装了这个软件以后，要从 /usr/share/doc/xbindkeys/examples/ 中拷贝一个配置文件到 ~/.xbindkeysrc。<br />
通过<code>xbindkeys --key</code>可以获取按键信息。<br />
<code>xbindkeys -v</code>可以显示运行时信息。</p>
<p><span style="font-weight:bold;">我的 .xbindkeysrc 文件：</span><br />
<code><br />
"xmms2 next"<br />
  m:0x14 + c:102<br />
"xmms2 prev"<br />
  m:0x14 + c:100<br />
"xmms2 toggleplay"<br />
  m:0x50 + c:65<br />
"amixer sset PCM 5%+"<br />
  m:0x14 + c:98<br />
"amixer sset PCM 5%-"<br />
  m:0x14 + c:104<br />
</code><br />
<strike><br />
<span style="font-weight:bold;">把 xbindkeys 加到启动里：</span><br />
在 /etc/init.d/ 里创建一个 shell 脚本，<br />
<code><br />
#!/bin/bash<br />
/usr/bin/xbindkeys<br />
exit 0<br />
</code><br />
给这个脚本加上可执行权限以后，执行<br />
<code><br />
update-rc.d xbindkeys defaults<br />
</code><br />
</strike></p>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/09/02/xbindkeys-xmms2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSA 与 RSA 的区别</title>
		<link>http://log.dongsheng.org/2008/08/30/dsa-rsa/</link>
		<comments>http://log.dongsheng.org/2008/08/30/dsa-rsa/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 03:16:05 +0000</pubDate>
		<dc:creator>Dongsheng Cai</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[cryptography]]></category>

		<guid isPermaLink="false">http://log.dongsheng.org/?p=12</guid>
		<description><![CDATA[DSA 用于签名，而 RSA 可用于签名和加密。 DSA is faster in *signing*, but slower in *verifying*. A DSA key of the same strength [...]]]></description>
			<content:encoded><![CDATA[<p>DSA 用于签名，而 RSA 可用于签名和加密。</p>
<blockquote><p>DSA is faster in *signing*, but slower in *verifying*.<br />
A DSA key of the same strength as RSA (1024 bits) generates a smaller signature.<br />
An RSA 512 bit key has been cracked, but only a 280 DSA key.<br />
It doesn&#8217;t matter because with Ssh only authentication is done using RSA or DSA algorithm, and then the &#8220;rest&#8221; is encoded using a (uh, was it block?) cipher like IDEA, DES, Blowfish, etc, etc after the authentication is done.<br />
While SSH2 can use either DSA or RSA keys, SSH1 cannot. Ssh2 will also not use patented cypers like IDEA.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://log.dongsheng.org/2008/08/30/dsa-rsa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching using apc
Object Caching 3731/4793 objects using apc

Served from: log.dongsheng.org @ 2012-05-20 15:00:18 -->
