<?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>码农笔记</title>
	<atom:link href="http://ranjiao.com/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://ranjiao.com/blog</link>
	<description>记录技术</description>
	<lastBuildDate>Wed, 22 Feb 2012 04:01:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Linux下Nvidia显卡双屏设置</title>
		<link>http://ranjiao.com/blog/index.php/2012/nvidia-dual-monitor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nvidia-dual-monitor</link>
		<comments>http://ranjiao.com/blog/index.php/2012/nvidia-dual-monitor/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 03:57:04 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[nvidia]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37559</guid>
		<description><![CDATA[这两天给实验室的电脑加了一个显示器，发现装好gnome的archlinux不能自动识别，因此折腾了一下双显示器的配置问题。对于Archlinux下的Xorg的双屏设置，默认情况下只会使用第一个显示器。如果想要使用双屏，最直接的办法是使用Xorg的Xinerama扩展： ?View Code BASH1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2012/nvidia-dual-monitor/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">这两天给实验室的电脑加了一个显示器，发现装好gnome的archlinux不能自动识别，因此折腾了一下双显示器的配置问题。对于Archlinux下的Xorg的双屏设置，默认情况下只会使用第一个显示器。如果想要使用双屏，最直接的办法是使用Xorg的<a href="https://wiki.archlinux.org/index.php/Nvidia#Multiple_monitors" target="_blank">Xinerama扩展</a>：</div>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37559code4'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p375594"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
</pre></td><td class="code" id="p37559code4"><pre class="bash" style="font-family:monospace;">Section <span style="color: #ff0000;">&quot;ServerLayout&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;DualSreen&quot;</span>
    Screen       <span style="color: #000000;">0</span> <span style="color: #ff0000;">&quot;Screen0&quot;</span>
    Screen       <span style="color: #000000;">1</span> <span style="color: #ff0000;">&quot;Screen1&quot;</span> RightOf <span style="color: #ff0000;">&quot;Screen0&quot;</span> <span style="color: #666666; font-style: italic;">#Screen1 at the right of Screen0</span>
    Option         <span style="color: #ff0000;">&quot;&lt;span class=&quot;</span>zem_slink<span style="color: #ff0000;">&quot;&gt;Xinerama&lt;/span&gt;&quot;</span> <span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #666666; font-style: italic;">#To move windows between screens</span>
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Monitor&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Monitor0&quot;</span>
    Option         <span style="color: #ff0000;">&quot;Enable&quot;</span> <span style="color: #ff0000;">&quot;true&quot;</span>
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Monitor&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Monitor1&quot;</span>
    Option         <span style="color: #ff0000;">&quot;Enable&quot;</span> <span style="color: #ff0000;">&quot;true&quot;</span>
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Device&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Device0&quot;</span>
    Driver         <span style="color: #ff0000;">&quot;nvidia&quot;</span>
    Screen         <span style="color: #000000;">0</span>
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Device&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Device1&quot;</span>
    Driver         <span style="color: #ff0000;">&quot;nvidia&quot;</span>
    Screen         <span style="color: #000000;">1</span>
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Screen&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Screen0&quot;</span>
    Device         <span style="color: #ff0000;">&quot;Device0&quot;</span>
    Monitor        <span style="color: #ff0000;">&quot;Monitor0&quot;</span>
    DefaultDepth    <span style="color: #000000;">24</span>
    Option         <span style="color: #ff0000;">&quot;TwinView&quot;</span> <span style="color: #ff0000;">&quot;0&quot;</span>
    SubSection <span style="color: #ff0000;">&quot;Display&quot;</span>
        Depth          <span style="color: #000000;">24</span>
        Modes          <span style="color: #ff0000;">&quot;1280x800_75.00&quot;</span>
    EndSubSection
EndSection
&nbsp;
Section <span style="color: #ff0000;">&quot;Screen&quot;</span>
    Identifier     <span style="color: #ff0000;">&quot;Screen1&quot;</span>
    Device         <span style="color: #ff0000;">&quot;Device1&quot;</span>
    Monitor        <span style="color: #ff0000;">&quot;Monitor1&quot;</span>
    DefaultDepth   <span style="color: #000000;">24</span>
    Option         <span style="color: #ff0000;">&quot;TwinView&quot;</span> <span style="color: #ff0000;">&quot;0&quot;</span>
    SubSection <span style="color: #ff0000;">&quot;Display&quot;</span>
        Depth          <span style="color: #000000;">24</span>
    EndSubSection
EndSection</pre></td></tr></table></div>

<p>只需要把上述内容保存在/etc/X11/xorg.rc.d/10-monitor.conf就可以开启双屏输出了。但是不知道为什么我使用这个方法配置的时候两个屏幕的内容会出现重叠，屏幕分辨率也有问题，尝试了各种配置都没有完全解决。使用Xinerama扩展来双屏输出还有一个问题就是不能支持composition。</p>
<p>因此我转向使用nvidia提供的另外一个方法：使用nvdia显卡驱动的twinview扩展，最简单的方法就是运行</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37559code5'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p375595"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p37559code5"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> nvidia-xconfig <span style="color: #660033;">--twinview</span></pre></td></tr></table></div>

<p>这会生成一个/etc/X11/xorg.conf，并且会忽略/etx/X11/xorg.rc.d/10-monitor.conf中的设置。使用twinview方式显卡驱动会将两个显示器拼成一个显示器&#8211;这意味着你在gnome, kde的显示器设置中只会看到一个显示器，它的分辨率是两个显示器之和。因此在xorg.conf中也只需要配置一个显示器，具体配置文件的用法可以<a href="http://en.wikibooks.org/wiki/NVidia/Twin_View">参考这里</a>，你可以在配置文件里面手动指定两个屏幕的分辨率等等。用这个方法的好处是可以有桌面特效加速，但是用ATI显卡的同学就不能这么用了。</p>
<p>自动生成的配置有一个问题：显卡的第二个接口连接的显示器分辨率最多只能上到640X400，解决的方法也很简单，只需要把Monitor中的HorizSync和VertRefresh注释掉就可以了：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37559code6'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p375596"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p37559code6"><pre class="bash" style="font-family:monospace;">Section <span style="color: #ff0000;">&quot;Monitor&quot;</span>
        Identifier      <span style="color: #ff0000;">&quot;Monitor0&quot;</span>
        Option          <span style="color: #ff0000;">&quot;Enable&quot;</span>   <span style="color: #ff0000;">&quot;True&quot;</span>
        VendorName      <span style="color: #ff0000;">&quot;Unknown&quot;</span>
        ModelName       <span style="color: #ff0000;">&quot;Unknown&quot;</span>
        <span style="color: #666666; font-style: italic;">#HorizSync      28.0 - 33.0</span>
        <span style="color: #666666; font-style: italic;">#VertRefresh    43.0 - 72.0</span>
        Option          <span style="color: #ff0000;">&quot;DPMS&quot;</span>
EndSection</pre></td></tr></table></div>

<p>如果你已经可以启动图形界面的话，可以用管理员权限运行nvidia-settings来用nvidia驱动自带的GUI程序对双屏幕进行设置，设置会自动保存到xorg.conf中。</p>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/88983255@N00/6316917402"><img class="zemanta-img-inserted zemanta-img-configured" title="Multi-Monitor Unity Demo" src="http://farm7.static.flickr.com/6238/6316917402_f87f791ca8_m.jpg" alt="Multi-Monitor Unity Demo" width="240" height="180" /></a><p class="wp-caption-text">Multi-Monitor</p></div>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=8548986a-e306-4c13-9d01-a60b277243df" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2012/nvidia-dual-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenVPN配置</title>
		<link>http://ranjiao.com/blog/index.php/2012/openvpn%e9%85%8d%e7%bd%ae/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=openvpn%25e9%2585%258d%25e7%25bd%25ae</link>
		<comments>http://ranjiao.com/blog/index.php/2012/openvpn%e9%85%8d%e7%bd%ae/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 02:47:39 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37546</guid>
		<description><![CDATA[最近一直用的OpenVPN服务到期了，然后自己在VPS上面搭建了一个OpenVPN服务，发现速度还不错。看Youtube HD毫无压力。将配置记录如下。 首先需要的是制作证书。服务器端必须生成证书和密钥，而客户端可以选择使用证书或者是密码验证的方式。这里给出的配置是使用证书验证的方法。 生成证书 ?View Code BASH1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2012/openvpn%e9%85%8d%e7%bd%ae/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>最近一直用的OpenVPN服务到期了，然后自己在VPS上面搭建了一个OpenVPN服务，发现速度还不错。看Youtube HD毫无压力。将配置记录如下。</p>
<p>首先需要的是制作证书。服务器端必须生成证书和密钥，而客户端可以选择使用证书或者是密码验证的方式。这里给出的配置是使用证书验证的方法。</p>
<h1>生成证书</h1>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37546code12'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3754612"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code" id="p37546code12"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 这里使用easy-rsa工具来生成证书</span>
<span style="color: #007800;">$cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>openvpn<span style="color: #000000; font-weight: bold;">/</span>easy-rsa<span style="color: #000000; font-weight: bold;">/</span> ~<span style="color: #000000; font-weight: bold;">/</span>easy-rsa
<span style="color: #007800;">$cd</span> <span style="color: #007800;">$_</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#修改vars文件中的下面那几个变量，这些都会显示到证书里面的，建议还是修改下</span>
<span style="color: #666666; font-style: italic;"># export KEY_COUNTRY=&quot;CN&quot;</span>
<span style="color: #666666; font-style: italic;"># export KEY_PROVINCE=&quot;&quot;</span>
<span style="color: #666666; font-style: italic;"># export KEY_CITY=&quot;&quot;</span>
<span style="color: #666666; font-style: italic;"># export KEY_ORG=&quot;&quot;</span>
<span style="color: #666666; font-style: italic;"># export KEY_EMAIL=&quot;&quot;</span>
$ <span style="color: #c20cb9; font-weight: bold;">vim</span> vars
&nbsp;
<span style="color: #666666; font-style: italic;">#初始化变量</span>
$ <span style="color: #7a0874; font-weight: bold;">source</span> .<span style="color: #000000; font-weight: bold;">/</span>vars
&nbsp;
<span style="color: #666666; font-style: italic;">#初始化</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>clean-all
&nbsp;
<span style="color: #666666; font-style: italic;">#制作CA证书</span>
<span style="color: #666666; font-style: italic;">#最后会在keys目录下生成 ca.crt（根证书文件） 和 ca.key（根证书私钥文件）</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>build-ca
&nbsp;
<span style="color: #666666; font-style: italic;">#制作服务器端证书</span>
<span style="color: #666666; font-style: italic;">#最后会在keys目录下生成 server.crt（证书文件） 和 server.key（私钥文件）、server.csr（证书请求文件）</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>build-key-server server
&nbsp;
<span style="color: #666666; font-style: italic;">#制作客户端证书</span>
<span style="color: #666666; font-style: italic;">#最后会生成客户端使用的证书</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>build-key client1
&nbsp;
<span style="color: #666666; font-style: italic;">#如果某个客户端证书不需要用了，可以注销客户端证书</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>revoke-full client1
&nbsp;
<span style="color: #666666; font-style: italic;">#创建Diffie Hellman参数</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>build-dh</pre></td></tr></table></div>

<p>然后将服务器的证书拷贝到/etc/openvpn下面，客户端证书拷贝到客户端配置文件同一个目录下。</p>
<h1>OpenVPN配置</h1>
<h2>服务器端配置文件：</h2>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37546code13'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3754613"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code" id="p37546code13"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 服务器的端口</span>
port <span style="color: #000000;">1194</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># 使用udp还是tcp协议，选啥都一样</span>
proto tcp
;proto udp
&nbsp;
<span style="color: #666666; font-style: italic;"># tap和tun二选一，没有特殊需求不用变</span>
;dev tap
dev tun
&nbsp;
<span style="color: #666666; font-style: italic;"># 指定证书、密钥</span>
ca ca.crt
cert server.crt
key server.key  
dh dh1024.pem
&nbsp;
<span style="color: #666666; font-style: italic;"># 服务器在vpn连接中的地址</span>
server 10.8.0.0 255.255.255.0
&nbsp;
ifconfig-pool-persist ipp.txt
&nbsp;
<span style="color: #666666; font-style: italic;"># 转发客户端的数据</span>
push <span style="color: #ff0000;">&quot;redirect-gateway def1 bypass-dhcp&quot;</span>
<span style="color: #666666; font-style: italic;"># 告诉客户端换成8.8.8.8的dns服务器</span>
push <span style="color: #ff0000;">&quot;dhcp-option DNS 8.8.8.8&quot;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;"># 是否允许同一个证书的多个客户端登陆，注释掉的话后登陆的客户端会把前面一个挤掉</span>
duplicate-cn
&nbsp;
keepalive <span style="color: #000000;">10</span> <span style="color: #000000;">120</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># 使用数据压缩</span>
comp-lzo
&nbsp;
persist-key
persist-tun
status openvpn-status.log
verb <span style="color: #000000;">3</span></pre></td></tr></table></div>

<p>将该配置文件保存为/etc/openvpn/server.conf，然后再重启openvpn服务就可以了：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37546code14'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3754614"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p37546code14"><pre class="bash" style="font-family:monospace;"> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>openvpn restart</pre></td></tr></table></div>

<p>&nbsp;</p>
<h2>客户端配置文件：</h2>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37546code15'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3754615"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code" id="p37546code15"><pre class="bash" style="font-family:monospace;">client
&nbsp;
;dev tap
dev tun
&nbsp;
proto tcp
;proto udp
&nbsp;
<span style="color: #666666; font-style: italic;"># 指定服务器地址</span>
remote server.com <span style="color: #000000;">1194</span>
&nbsp;
resolv-retry infinite
&nbsp;
nobind
&nbsp;
persist-key
persist-tun
&nbsp;
;mute-replay-warnings
&nbsp;
<span style="color: #666666; font-style: italic;"># 指定客户端使用的证书和密钥</span>
ca ca.crt
cert client1.crt
key client1.key
&nbsp;
ns-cert-type server
&nbsp;
comp-lzo
&nbsp;
verb <span style="color: #000000;">3</span>
&nbsp;
;mute <span style="color: #000000;">20</span>
&nbsp;
redirect-gateway
route-method exe
route-delay <span style="color: #000000;">2</span>
route-up <span style="color: #ff0000;">&quot;net stop dnscache&quot;</span>
route-up <span style="color: #ff0000;">&quot;net start dnscache&quot;</span>
route-up <span style="color: #ff0000;">&quot;ipconfig /flushdns&quot;</span>
route-up <span style="color: #ff0000;">&quot;ipconfig /registerdns&quot;</span></pre></td></tr></table></div>

<h1>配置数据转发</h1>
<p>为了能够让服务器真正将数据转发出去，还需要一点点配置：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37546code16'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3754616"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p37546code16"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> iptables <span style="color: #660033;">-t</span> <span style="color: #660033;">-nat</span> <span style="color: #660033;">-A</span> POSTROUTING <span style="color: #660033;">-s</span> <span style="color: #007800;">$LOCAL_NETWORK</span> <span style="color: #660033;">-o</span> eth0 <span style="color: #660033;">-j</span> MASQUERADE
$ <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>ip_forward</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2012/openvpn%e9%85%8d%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Touch破解、更换字体</title>
		<link>http://ranjiao.com/blog/index.php/2011/kindle-touch-crac/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kindle-touch-crac</link>
		<comments>http://ranjiao.com/blog/index.php/2011/kindle-touch-crac/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 06:58:37 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37537</guid>
		<description><![CDATA[UPDATE: 豆瓣上现在有人放出了自动更换字体和汉化的破解脚本，可以移步这里下载。如果想要看看如何用ssh进kindle内部偷窥的话可以接着往下看。 前段时间从米国通过转运公司买了一个Kindle touch，拿到手里面以后发现中文显示非常蛋疼，会出现中文笔画粗细不一的问题。买Eink图的就是显示效果好，字体有问题自然是不能忍的。多看不知道什么时候才会出Kindle touch的版本。不过对于看书而言换多看的意义也不是太大。在网上搜索了一下更换字体的流程，将整个过程整理如下： 破解 下载kindle-touch-jailbreak-1.0，里面有一个jailbreak.mp3。连上KT以后将KT中的Music目录清空，把jaillbreak.mp3拷贝进去。弹出KT以后在KT的menu-&#62;Experimental-&#62;Music Player。然后在屏幕下方会看到“Press to Jailbreak”，点击这个按钮，重启以后就破解完成了 安装ssh 下载simple_usbnet_1.1，将解压出来的update_simple_usbnet_1.1_install.bin放到KT根目录下。弹出KT以后选择menu-&#62;Settings-&#62;menu-&#62;Update your kindle。这时候KT上就安装好ssh服务了。 在KT的搜索框里面输入”;un”（不包含引号）就可以启动或者停止KT的ssh服务。在搜索栏中输入”;un password PASSWORD“来设置root的初始密码，PASSWORD替换成你的密码。 PC端安装驱动 如果你是Linux系统可以直接跳过这一步，如果是win7连上电脑以后应该会出现一个找不到驱动的设备。在设备管理器中找到这个设备，手动选择驱动程序。在选择驱动程序的时候选择 网络适配器-&#62; Microsoft Copration-&#62; Remove NDIS Compatible Device就可以了。Win7会提示不推荐安装这个驱动，但是其实是没问题的。 更换字体 ssh用root用户远程登录到 192.168.15.244。运行mntroot rw来去掉文件系统的只读限制。这样你就可以用WinSCP之类的软件来把字体文件上传到KT中了（你要是嫌麻烦也可以直接把字体拷贝到KT中，然后从ssh替换掉原来的文件）。你只需要把你想要的字体替换掉 /usr/java/lib/fonts下面的MHeiM18030_E.ttf ，MHeiM18030_E_Bold.ttf和code2000.ttf这三个字体就可以了，正文貌似是用的code2000.ttf，推荐使用黑体。更换完了以后记得看一眼字体的权限，必须是644权限才可以。 然后就是下载这个local文件，解压以后放到/etc/fonts下替换原来的文件。 重启 大功告成]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE:</strong><br />
豆瓣上现在有人放出了自动更换字体和汉化的破解脚本，可以<a href="http://www.douban.com/note/192208212/?start=100&amp;post=ok#last">移步这里</a>下载。如果想要看看如何用ssh进kindle内部偷窥的话可以接着往下看。</p>
<p>前段时间从米国通过转运公司买了一个Kindle touch，拿到手里面以后发现中文显示非常蛋疼，会出现中文笔画粗细不一的问题。买Eink图的就是显示效果好，字体有问题自然是不能忍的。多看不知道什么时候才会出Kindle touch的版本。不过对于看书而言换多看的意义也不是太大。在网上搜索了一下更换字体的流程，将整个过程整理如下：</p>
<ol>
<li>破解<br />
下载<a href="http://ranjiao.com/blog/wp-content/uploads/2011/12/kindle-touch-jailbreak-1.0.zip">kindle-touch-jailbreak-1.0</a>，里面有一个jailbreak.mp3。连上KT以后将KT中的Music目录清空，把jaillbreak.mp3拷贝进去。弹出KT以后在KT的menu-&gt;Experimental-&gt;Music Player。然后在屏幕下方会看到“Press to Jailbreak”，点击这个按钮，重启以后就破解完成了</li>
<li>安装ssh<br />
下载<a href="http://ranjiao.com/blog/wp-content/uploads/2011/12/simple_usbnet_1.1.zip">simple_usbnet_1.1</a>，将解压出来的update_simple_usbnet_1.1_install.bin放到KT根目录下。弹出KT以后选择menu-&gt;Settings-&gt;menu-&gt;Update your kindle。这时候KT上就安装好ssh服务了。<br />
在KT的搜索框里面输入”;un”（不包含引号）就可以启动或者停止KT的ssh服务。在搜索栏中输入”;un password PASSWORD“来设置root的初始密码，PASSWORD替换成你的密码。</li>
<li>PC端安装驱动<br />
如果你是Linux系统可以直接跳过这一步，如果是win7连上电脑以后应该会出现一个找不到驱动的设备。在设备管理器中找到这个设备，手动选择驱动程序。在选择驱动程序的时候选择 网络适配器-&gt; Microsoft Copration-&gt; Remove NDIS Compatible Device就可以了。Win7会提示不推荐安装这个驱动，但是其实是没问题的。</li>
<li>更换字体<br />
ssh用root用户远程登录到 192.168.15.244。运行mntroot rw来去掉文件系统的只读限制。这样你就可以用WinSCP之类的软件来把字体文件上传到KT中了（你要是嫌麻烦也可以直接把字体拷贝到KT中，然后从ssh替换掉原来的文件）。你只需要把你想要的字体替换掉 /usr/java/lib/fonts下面的MHeiM18030_E.ttf ，MHeiM18030_E_Bold.ttf和code2000.ttf这三个字体就可以了，正文貌似是用的code2000.ttf，推荐使用黑体。更换完了以后记得看一眼字体的权限，必须是644权限才可以。<br />
然后就是下载这个<a href="http://ranjiao.com/blog/wp-content/uploads/2011/12/local.7z">local</a>文件，解压以后放到/etc/fonts下替换原来的文件。</li>
<li>重启<br />
大功告成</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/kindle-touch-crac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx配置备忘</title>
		<link>http://ranjiao.com/blog/index.php/2011/nginx%e9%85%8d%e7%bd%ae%e5%a4%87%e5%bf%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nginx%25e9%2585%258d%25e7%25bd%25ae%25e5%25a4%2587%25e5%25bf%2598</link>
		<comments>http://ranjiao.com/blog/index.php/2011/nginx%e9%85%8d%e7%bd%ae%e5%a4%87%e5%bf%98/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 06:32:33 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[VPS]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37528</guid>
		<description><![CDATA[安装 在ubuntu 10.10里面还没有专门的fastcgi包，必须通过lighttp里面附带的fastcgi加上自定义的脚本来启动fastcgi进程。但是在ubuntu 11.10里面有了一个php5-fpm的包专门用来处理fastcgi，免去了自己倒腾脚本的麻烦。把这一堆包装上安装就算是完事了： ?View Code BASH1 sudo apt-get install nginx php5 php5-fpm mysql-server mysql-client 配置 配置也很简单，直接在/etc/nginx/sites-avalable里面添加一个自己的配置文件，然后创建一个到/etc/nginx/sites-enabled/的软链接即可： ?View Code BASH1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2011/nginx%e9%85%8d%e7%bd%ae%e5%a4%87%e5%bf%98/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h1>安装</h1>
<p>在ubuntu 10.10里面还没有专门的fastcgi包，必须通过lighttp里面附带的fastcgi加上自定义的脚本来启动fastcgi进程。但是在ubuntu 11.10里面有了一个php5-fpm的包专门用来处理fastcgi，免去了自己倒腾脚本的麻烦。把这一堆包装上安装就算是完事了：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37528code19'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3752819"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p37528code19"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> nginx php5 php5-fpm mysql-server mysql-client</pre></td></tr></table></div>

<h1>配置</h1>
<p>配置也很简单，直接在/etc/nginx/sites-avalable里面添加一个自己的配置文件，然后创建一个到/etc/nginx/sites-enabled/的软链接即可：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37528code20'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3752820"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p37528code20"><pre class="bash" style="font-family:monospace;">server <span style="color: #7a0874; font-weight: bold;">&#123;</span>
        listen   <span style="color: #000000;">80</span>; <span style="color: #666666; font-style: italic;">## listen for ipv4; this line is default and implied</span>
        root <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>;
        index index.php index.html index.htm;
&nbsp;
        <span style="color: #666666; font-style: italic;"># Make site accessible from http://localhost/</span>
        server_name _;
&nbsp;
        location <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
                <span style="color: #666666; font-style: italic;"># 找不到页面的时候返回到index.html</span>
                try_files <span style="color: #007800;">$uri</span> <span style="color: #007800;">$uri</span><span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>index.html;
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># 将错误页面重定向到制定的文件</span>
        error_page <span style="color: #000000;">500</span> <span style="color: #000000;">502</span> <span style="color: #000000;">503</span> <span style="color: #000000;">504</span> <span style="color: #000000; font-weight: bold;">/</span>50x.html;
        location = <span style="color: #000000; font-weight: bold;">/</span>50x.html <span style="color: #7a0874; font-weight: bold;">&#123;</span>
                root <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>www;
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># 处理php文件</span>
        location ~ \.php$ <span style="color: #7a0874; font-weight: bold;">&#123;</span>
                fastcgi_pass 127.0.0.1:<span style="color: #000000;">9000</span>;
                fastcgi_index index.php;
                include fastcgi_params;
&nbsp;
                <span style="color: #666666; font-style: italic;"># 在使用wordpress必须要有这个rewrite，否则访问rss的时候会出现404错误</span>
                <span style="color: #000000; font-weight: bold;">if</span><span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #000000; font-weight: bold;">!</span>-e <span style="color: #007800;">$request_filename</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
                <span style="color: #7a0874; font-weight: bold;">&#123;</span>
                        rewrite ^<span style="color: #000000; font-weight: bold;">/</span>wordpress<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.+<span style="color: #7a0874; font-weight: bold;">&#41;</span>$ <span style="color: #000000; font-weight: bold;">/</span>wordpress<span style="color: #000000; font-weight: bold;">/</span>index.php?<span style="color: #007800;">q</span>=<span style="color: #007800;">$1</span> <span style="color: #c20cb9; font-weight: bold;">last</span>;
                <span style="color: #7a0874; font-weight: bold;">&#125;</span>                        
        <span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/nginx%e9%85%8d%e7%bd%ae%e5%a4%87%e5%bf%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>北航毕业论文latex模板</title>
		<link>http://ranjiao.com/blog/index.php/2011/buaa-latex/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=buaa-latex</link>
		<comments>http://ranjiao.com/blog/index.php/2011/buaa-latex/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 01:43:39 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[BUAA]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37501</guid>
		<description><![CDATA[最近更新了一下北航的硕士毕业论文latex模板，在texlive的xelatex下面编译。整个项目放在了这里： http://code.google.com/p/buaalatex/ 在Google里面搜索了一下发现居然根本搜索不到这个项目页面，大班群里面还好多人在找模板找不到，因此决定放上来说一下。 另外这个项目里面还还有Grissom做的本科毕设xelatex模板，以及Philips Bai做的ctex版硕士模板。需要的童鞋可以关注下。]]></description>
			<content:encoded><![CDATA[<p>最近更新了一下北航的硕士毕业论文latex模板，在texlive的xelatex下面编译。整个项目放在了这里：</p>
<p><a href="http://code.google.com/p/buaalatex/">http://code.google.com/p/buaalatex/</a></p>
<p>在Google里面搜索了一下发现居然根本搜索不到这个项目页面，大班群里面还好多人在找模板找不到，因此决定放上来说一下。</p>
<p>另外这个项目里面还还有<a title="Grissom" href="http://grissiom.blogspot.com/2010/04/latex.html">Grissom</a>做的本科毕设xelatex模板，以及Philips Bai做的ctex版硕士模板。需要的童鞋可以关注下。</p>
<p style="text-align: center;"><a href="http://ranjiao.com/blog/wp-content/uploads/2011/11/buaathesis.jpg"><img class="aligncenter size-full wp-image-37504" title="buaathesis" src="http://ranjiao.com/blog/wp-content/uploads/2011/11/buaathesis.jpg" alt="" width="382" height="499" /></a></p>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/buaa-latex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>喜添新丁</title>
		<link>http://ranjiao.com/blog/index.php/2011/%e5%96%9c%e6%b7%bb%e6%96%b0%e4%b8%81/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2596%259c%25e6%25b7%25bb%25e6%2596%25b0%25e4%25b8%2581</link>
		<comments>http://ranjiao.com/blog/index.php/2011/%e5%96%9c%e6%b7%bb%e6%96%b0%e4%b8%81/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 08:46:36 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37495</guid>
		<description><![CDATA[家中喜添新丁，两个多月大。长的倒是很讨人喜欢，眼神忧郁，发型拉轰。只是体毛太重，小小年纪就浑身是毛~]]></description>
			<content:encoded><![CDATA[<p>家中喜添新丁，两个多月大。长的倒是很讨人喜欢，眼神忧郁，发型拉轰。只是体毛太重，小小年纪就浑身是毛~</p>

<div class="ngg-galleryoverview" id="ngg-gallery-2-37495">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://ranjiao.com/blog/index.php/2011/%e5%96%9c%e6%b7%bb%e6%96%b0%e4%b8%81/?show=slide">
			[Show as slideshow]		</a>
	</div>

	
	<!-- Thumbnails -->
		
	<div id="ngg-image-4" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://ranjiao.com/blog/wp-content/gallery/puppy/puppy1.jpg" title=" " class="shutterset_set_2" >
								<img title="puppy1" alt="puppy1" src="http://ranjiao.com/blog/wp-content/gallery/puppy/thumbs/thumbs_puppy1.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-5" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://ranjiao.com/blog/wp-content/gallery/puppy/puppy2.jpg" title=" " class="shutterset_set_2" >
								<img title="puppy2" alt="puppy2" src="http://ranjiao.com/blog/wp-content/gallery/puppy/thumbs/thumbs_puppy2.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/%e5%96%9c%e6%b7%bb%e6%96%b0%e4%b8%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>veer上手玩</title>
		<link>http://ranjiao.com/blog/index.php/2011/veer-hands-on/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=veer-hands-on</link>
		<comments>http://ranjiao.com/blog/index.php/2011/veer-hands-on/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 03:50:31 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[webos]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37485</guid>
		<description><![CDATA[前两天twitter上面不断听说有人在买veer来玩，去淘宝上看了一下价格发现只有650块。加上我已经被手上的HTC Magic卡到天荒地老的状态折腾的不行，于是乎当即决定跑到淘宝上面去入了一个。用了将近一周，算是有点发言权。 从外形和尺寸上说veer应该是很精致很讨女生喜欢的类型，从图里面可以看到veer基本上就和我的手掌差不多大。如果不推开键盘的话打电话都感觉不是很握的住。原本以为这么小巧的手机单手玩会很轻松，结果发现在输入的时候一只手是完全没办法按键盘的，还是得两只手操作。整个手机的边缘都是圆圆的，加上外壳又是有点滑的材质，让人感觉很容易这个小不点儿很容易就会从手里面非出去的样子（事实上昨天晚上就把它扔出去两米远，不过居然一点伤痕都没有）。手机的滑盖还比较紧，如果是尝试一只手推开的话会容易拿不住手机往外滑，结果还是得两个手。当然如果你不用输入仅仅是触屏操作看看网页的话一个手还是没问题的。 在这么小的机身上生生的塞进去一个全键盘，手指粗大的同学肯定会痛苦的要死，平时用肯定得用手指甲来点，否则很容易误操作。不过用了一段时间以后感觉这个键盘输入虽然不算是很快，但是肯定是比触屏的全键盘输入要快的。考虑到平时触屏平时都使用九宫格输入法打字，veer输入中文肯定会慢一些，但是输入英文就肯定是占优的。 系统的话是传说中的WebOS 2.1.2。见识过了这个评价颇高的系统之后感觉果然还是很不错的，除了基本没有应用。卡片式的多任务管理很方便好用，开很多个程序也没出过什么问题，仍然运行的很流畅（不过也得考虑到现在WebOS上面也只有一些简单应用）。很有意思的是整个系统可以下载到很多的补丁来改变系统的行为，比如说可以在屏幕右上角的菜单里面添加3G的开关等等。稍微研究了一下发现居然连系统界面都是用html+javascript的方式来做的，居然能够做到这么流畅你让Android那卡卡的java情何以堪啊。系统的手势区很好用，直接点手势区切换多任务比android的长按home键好太多了。另外滑动删除信息、通知的功能也很好使。在功能手机上你可能需要进选项，删除，确认这好几步操作，android上面也得用那个蛋疼的长按操作。WebOS上面只用潇洒的一滑就好了。 应用程序有国内第三方开发的QQ，网易新闻，街旁等不超过10个软件。而HP官方的商店里面的东西基本上都是没啥用的垃圾软件。比较意外的是居然有愤怒的小鸟，不知道是不是第三方移植的。不过WebOS有一个有意思的功能就是能把一个网站作为一个应用保存起来，这类似与Chrome的应用的概念。本质上就是一个书签，不过如果对于专门对手机优化过的网站而言体验并不差。我一直习惯在公交上读Google Reader，这段时间一直用网页版，发现并不比Android原生的应用差多少。 逛了逛WebOS的论坛，国内有一两个论坛上面研究WebOS，会有很少的几个自制软件、ROM。发现一个有意思的现象就是，因为WebOS的中文软件真的很少，因此论坛里面仅有的几个中文软件基本上都是收费的。虽然价格都不贵，但是估计因为最近HP的大甩卖行为这些开发者也应该挣了些零花钱。 总体而言这个手机做工精致，如果能够体积放大一半儿，待机时间能再长一些就很不错了。不过鉴于它目前的价位，还是非常适合买一个用来哄妹子的，妹子们对这个造型的手机都比较没有防御力。]]></description>
			<content:encoded><![CDATA[<p>前两天twitter上面不断听说有人在买veer来玩，去淘宝上看了一下价格发现只有650块。加上我已经被手上的HTC Magic卡到天荒地老的状态折腾的不行，于是乎当即决定跑到淘宝上面去入了一个。用了将近一周，算是有点发言权。</p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-37485">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://ranjiao.com/blog/index.php/2011/veer-hands-on/?show=slide">
			[Show as slideshow]		</a>
	</div>

	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://ranjiao.com/blog/wp-content/gallery/veer/img_20111028_120014.jpg" title=" " class="shutterset_set_1" >
								<img title="img_20111028_120014" alt="img_20111028_120014" src="http://ranjiao.com/blog/wp-content/gallery/veer/thumbs/thumbs_img_20111028_120014.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://ranjiao.com/blog/wp-content/gallery/veer/img_20111028_120037.jpg" title=" " class="shutterset_set_1" >
								<img title="img_20111028_120037" alt="img_20111028_120037" src="http://ranjiao.com/blog/wp-content/gallery/veer/thumbs/thumbs_img_20111028_120037.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://ranjiao.com/blog/wp-content/gallery/veer/img_20111028_120047.jpg" title=" " class="shutterset_set_1" >
								<img title="img_20111028_120047" alt="img_20111028_120047" src="http://ranjiao.com/blog/wp-content/gallery/veer/thumbs/thumbs_img_20111028_120047.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>从外形和尺寸上说veer应该是很精致很讨女生喜欢的类型，从图里面可以看到veer基本上就和我的手掌差不多大。如果不推开键盘的话打电话都感觉不是很握的住。原本以为这么小巧的手机单手玩会很轻松，结果发现在输入的时候一只手是完全没办法按键盘的，还是得两只手操作。整个手机的边缘都是圆圆的，加上外壳又是有点滑的材质，让人感觉很容易这个小不点儿很容易就会从手里面非出去的样子（事实上昨天晚上就把它扔出去两米远，不过居然一点伤痕都没有）。手机的滑盖还比较紧，如果是尝试一只手推开的话会容易拿不住手机往外滑，结果还是得两个手。当然如果你不用输入仅仅是触屏操作看看网页的话一个手还是没问题的。</p>
<p>在这么小的机身上生生的塞进去一个全键盘，手指粗大的同学肯定会痛苦的要死，平时用肯定得用手指甲来点，否则很容易误操作。不过用了一段时间以后感觉这个键盘输入虽然不算是很快，但是肯定是比触屏的全键盘输入要快的。考虑到平时触屏平时都使用九宫格输入法打字，veer输入中文肯定会慢一些，但是输入英文就肯定是占优的。</p>
<p>系统的话是传说中的WebOS 2.1.2。见识过了这个评价颇高的系统之后感觉果然还是很不错的，除了基本没有应用。卡片式的多任务管理很方便好用，开很多个程序也没出过什么问题，仍然运行的很流畅（不过也得考虑到现在WebOS上面也只有一些简单应用）。很有意思的是整个系统可以下载到很多的补丁来改变系统的行为，比如说可以在屏幕右上角的菜单里面添加3G的开关等等。稍微研究了一下发现居然连系统界面都是用html+javascript的方式来做的，居然能够做到这么流畅你让Android那卡卡的java情何以堪啊。系统的手势区很好用，直接点手势区切换多任务比android的长按home键好太多了。另外滑动删除信息、通知的功能也很好使。在功能手机上你可能需要进选项，删除，确认这好几步操作，android上面也得用那个蛋疼的长按操作。WebOS上面只用潇洒的一滑就好了。</p>
<p>应用程序有国内第三方开发的QQ，网易新闻，街旁等不超过10个软件。而HP官方的商店里面的东西基本上都是没啥用的垃圾软件。比较意外的是居然有愤怒的小鸟，不知道是不是第三方移植的。不过WebOS有一个有意思的功能就是能把一个网站作为一个应用保存起来，这类似与Chrome的应用的概念。本质上就是一个书签，不过如果对于专门对手机优化过的网站而言体验并不差。我一直习惯在公交上读Google Reader，这段时间一直用网页版，发现并不比Android原生的应用差多少。</p>
<p>逛了逛WebOS的论坛，国内有一两个论坛上面研究WebOS，会有很少的几个自制软件、ROM。发现一个有意思的现象就是，因为WebOS的中文软件真的很少，因此论坛里面仅有的几个中文软件基本上都是收费的。虽然价格都不贵，但是估计因为最近HP的大甩卖行为这些开发者也应该挣了些零花钱。</p>
<p>总体而言这个手机做工精致，如果能够体积放大一半儿，待机时间能再长一些就很不错了。不过鉴于它目前的价位，还是非常适合买一个用来哄妹子的，妹子们对这个造型的手机都比较没有防御力。</p>
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/veer-hands-on/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>处理Emacs中的行号和空白字符</title>
		<link>http://ranjiao.com/blog/index.php/2011/whitespace/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whitespace</link>
		<comments>http://ranjiao.com/blog/index.php/2011/whitespace/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 04:40:05 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37471</guid>
		<description><![CDATA[做过开源项目的童鞋可能会知道，在很多开源项目中会有专门的脚本来检查代码风格。其中包括行尾是否有多余的空白字符，是否使用使用tab，每一行是否超过了指定的宽度等等。这些问题通常在敲代码的时候并不容易看出来，等到要提交代码的时候才发现问题。稍微搜索了一下发现在emacs中有一个很有用的whitespace插件可以解决这个问题。 whitespace可以针对设置的规则对上面提到的问题进行高亮显示，效果如下： whitespace具体可以找到的问题包括tab, 空格混用；行尾多余的空白字符；文件结束前的空白字符；超过指定长度的行等等。可以通过设置whitespace-style来指定需要提示哪些问题。在我的配置中使用了如下配置： ?View Code LISP1 2 3 4 5 6 7 ;; deal with white spaces &#40;require 'whitespace&#41; &#40;global-whitespace-mode&#41; &#40;setq whitespace-style '&#40;face trailing tabs lines lines-tail empty space-after-tab space-before-tab&#41;&#41; &#40;add-hook 'before-save-hook 'delete-trailing-whitespace&#41; 默认的whitespace-style把整个buffer被搞得有点乱糟糟的，因此我把不是很需要的部分都去掉了，只剩下检测行尾空白、tab等少数几个问题。对于行尾的多余字符而言，一个个删除也是很麻烦的事情。所以我直接用delete-trailing-whitespace在保存的时候把它们都干掉了。 不过在这里whitespace会和行号有一点点冲突。通常为了显示行号都会打开linum-mode，行号会是右边对其的数字。whitespace会认为行号前面的空白字符是问题字符而高亮显示，搞得非常难看。为了解决这个问题可以用下面代码对linum进行设置： ?View Code LISP1 2 &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2011/whitespace/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>做过开源项目的童鞋可能会知道，在很多开源项目中会有专门的脚本来检查代码风格。其中包括行尾是否有多余的空白字符，是否使用使用tab，每一行是否超过了指定的宽度等等。这些问题通常在敲代码的时候并不容易看出来，等到要提交代码的时候才发现问题。稍微搜索了一下发现在emacs中有一个很有用的<a title="white space" href="http://www.emacswiki.org/emacs/WhiteSpace">whitespace</a>插件可以解决这个问题。</p>
<p>whitespace可以针对设置的规则对上面提到的问题进行高亮显示，效果如下：</p>
<p style="text-align: center;"><a href="http://ranjiao.com/blog/wp-content/uploads/2011/10/WhiteSpaceOnLight.png"><img class="aligncenter size-medium wp-image-37508" title="WhiteSpaceOnLight" src="http://ranjiao.com/blog/wp-content/uploads/2011/10/WhiteSpaceOnLight-300x219.png" alt="WhiteSpaceOnLight" width="500" height="430" /></a></p>
<p>whitespace具体可以找到的问题包括tab, 空格混用；行尾多余的空白字符；文件结束前的空白字符；超过指定长度的行等等。可以通过设置whitespace-style来指定需要提示哪些问题。在我的配置中使用了如下配置：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37471code23'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3747123"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p37471code23"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; deal with white spaces</span>
<span style="color: #66cc66;">&#40;</span>require 'whitespace<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>global-whitespace-mode<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> whitespace-style
      '<span style="color: #66cc66;">&#40;</span>face trailing tabs lines lines-tail empty
        space-after-tab space-before-tab<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>add-hook 'before-save-hook 'delete-trailing-whitespace<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>默认的whitespace-style把整个buffer被搞得有点乱糟糟的，因此我把不是很需要的部分都去掉了，只剩下检测行尾空白、tab等少数几个问题。对于行尾的多余字符而言，一个个删除也是很麻烦的事情。所以我直接用delete-trailing-whitespace在保存的时候把它们都干掉了。</p>
<p>不过在这里whitespace会和行号有一点点冲突。通常为了显示行号都会打开linum-mode，行号会是右边对其的数字。whitespace会认为行号前面的空白字符是问题字符而高亮显示，搞得非常难看。为了解决这个问题可以用下面代码对linum进行设置：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37471code24'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3747124"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code" id="p37471code24"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; Show line number</span>
<span style="color: #66cc66;">&#40;</span>require 'linum<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>global-linum-mode t<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> column-number-mode t<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> line-number-node t<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> linum-format <span style="color: #ff0000;">&quot;%5d &quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>add-hook 'linum-before-numbering-hook
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>w <span style="color: #66cc66;">&#40;</span>+
                      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span>
                       <span style="color: #66cc66;">&#40;</span>number-to-string
                        <span style="color: #66cc66;">&#40;</span>count-lines <span style="color: #66cc66;">&#40;</span>point-<span style="color: #b1b100;">min</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>point-<span style="color: #b1b100;">max</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                      <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> linum-format
                    `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>line<span style="color: #66cc66;">&#41;</span>
                       <span style="color: #66cc66;">&#40;</span>propertize <span style="color: #66cc66;">&#40;</span>concat
                                    <span style="color: #66cc66;">&#40;</span>truncate-string-to-width
                                     <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#40;</span>- <span style="color: #66cc66;">,</span>w <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #66cc66;">&#40;</span>number-to-string line<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                                     <span style="color: #b1b100;">nil</span> ?x2007<span style="color: #66cc66;">&#41;</span>
                                    <span style="color: #66cc66;">&#40;</span>number-to-string line<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                                   'face 'linum<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>这是从emacs wiki上面抄过来的一段代码，用了一个特殊的unicode字符x2007来设置行号的格式，既能达到右端对其的效果又不会被whitespace误杀。</p>
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/whitespace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs中处理日志文件</title>
		<link>http://ranjiao.com/blog/index.php/2011/emacs%e4%b8%ad%e5%a4%84%e7%90%86%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=emacs%25e4%25b8%25ad%25e5%25a4%2584%25e7%2590%2586%25e6%2597%25a5%25e5%25bf%2597%25e6%2596%2587%25e4%25bb%25b6</link>
		<comments>http://ranjiao.com/blog/index.php/2011/emacs%e4%b8%ad%e5%a4%84%e7%90%86%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 05:31:26 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37461</guid>
		<description><![CDATA[最近写的东西会将信息输出到一个日志文件中去，每次调试的时候log文件内容都会刷新。每次都手动revert-buffer比较烦人，查了一下发现有一个auto-revert-mode可以自动刷新。下面的配置可以实现对于.log文件调用auto-revert-mode： ?View Code LISP1 2 3 4 5 6 7 8 9 10 11 ;; auto revert log files &#40;add-hook 'find-file-hook &#40;lambda &#40;&#41; &#40;if &#40;string-equal &#34;.log&#34; &#40;substring &#40;buffer-file-name&#41; &#40;search &#34;.&#34; &#40;buffer-file-name&#41;&#41;&#41;&#41; &#40;progn &#40;setq auto-revert-mode t&#41; &#40;message &#34;Enabling auto-revert-mode for log &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2011/emacs%e4%b8%ad%e5%a4%84%e7%90%86%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>最近写的东西会将信息输出到一个日志文件中去，每次调试的时候log文件内容都会刷新。每次都手动revert-buffer比较烦人，查了一下发现有一个auto-revert-mode可以自动刷新。下面的配置可以实现对于.log文件调用auto-revert-mode：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37461code26'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3746126"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p37461code26"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; auto revert log files</span>
<span style="color: #66cc66;">&#40;</span>add-hook 'find-file-hook
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>string-<span style="color: #b1b100;">equal</span>
                 <span style="color: #ff0000;">&quot;.log&quot;</span>
                 <span style="color: #66cc66;">&#40;</span>substring <span style="color: #66cc66;">&#40;</span>buffer-file-<span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span>
                            <span style="color: #66cc66;">&#40;</span>search <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #66cc66;">&#40;</span>buffer-file-<span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span>
                  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> auto-revert-mode t<span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span>message <span style="color: #ff0000;">&quot;Enabling auto-revert-mode for log file&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>如果是比较长的日志文件，并且日志使用追加内容的方式添加上去的话，可以将上面的(setq auto-revert-mode t)换成(setq auto-revert-tail-mode t)以提高效率。</p>
]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2011/emacs%e4%b8%ad%e5%a4%84%e7%90%86%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>STL中的红黑树</title>
		<link>http://ranjiao.com/blog/index.php/2009/rb_tree_in_stl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rb_tree_in_stl</link>
		<comments>http://ranjiao.com/blog/index.php/2009/rb_tree_in_stl/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 13:50:07 +0000</pubDate>
		<dc:creator>raymond</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cpp]]></category>

		<guid isPermaLink="false">http://ranjiao.com/blog/?p=37449</guid>
		<description><![CDATA[平时用STL通常只是顺手把vector, map之类常用的类拿来用用就完了，也没有想到去仔细研究里面都有些什么东西。这两天有一个算法程序需要将一堆对象排序，并且会非常频繁的插入删除，对效率的要求极高。原本想用priority queue，但是发现它是对一个数组进行堆排序的方式来操作，效率并不高。在STL的文档里面找了找发现居然没有红黑树，google了一下才知道set, map底层都是用红黑树实现的，只是这个红黑树没有暴露出来给人用。 也不知道是出于什么考虑，性能优秀的红黑树虽然标准库里面有，但是却遮遮掩掩不直接提供给大家用。值得注意的是，因为红黑树是内部使用的类，各个STL实现中的红黑树还不一样。 在VC的实现中红黑树是在xtree文件中的_Tree类，用法如下： ?View Code CPP1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include #include #include &#160; using namespace std; &#160; typedef _Tree&#38;lt; _Tset_traits, allocator, false &#38;gt; &#38;gt; rb_tree; &#160; &#8230;<p class="read-more"><a href="http://ranjiao.com/blog/index.php/2009/rb_tree_in_stl/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>平时用STL通常只是顺手把vector, map之类常用的类拿来用用就完了，也没有想到去仔细研究里面都有些什么东西。这两天有一个算法程序需要将一堆对象排序，并且会非常频繁的插入删除，对效率的要求极高。原本想用priority queue，但是发现它是对一个数组进行堆排序的方式来操作，效率并不高。在STL的文档里面找了找发现居然没有红黑树，google了一下才知道set, map底层都是用红黑树实现的，只是这个红黑树没有暴露出来给人用。</p>
<p>也不知道是出于什么考虑，性能优秀的红黑树虽然标准库里面有，但是却遮遮掩掩不直接提供给大家用。值得注意的是，因为红黑树是内部使用的类，各个STL实现中的红黑树还不一样。</p>
<p>在VC的实现中红黑树是在xtree文件中的_Tree类，用法如下：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37449code29'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3744929"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p37449code29"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include </span>
<span style="color: #339900;">#include </span>
<span style="color: #339900;">#include </span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">typedef</span> _Tree<span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> _Tset_traits, allocator, <span style="color: #0000ff;">false</span> <span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span> <span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span> rb_tree<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    rb_tree<span style="color: #000040;">*</span> tree <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> rb_tree<span style="color: #008000;">&#40;</span> less<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, allocator<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">35</span><span style="color: #008080;">;</span> iinsert<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span>quot<span style="color: #008080;">;</span>output<span style="color: #008080;">:</span> <span style="color: #000040;">%</span>d <span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span>quot<span style="color: #008080;">;</span>, <span style="color: #000040;">*</span>tree<span style="color: #000040;">-</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span>begin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>gcc中的实现则是在bits/stl_tree.h文件中，而且类的名字和用法都不一样：</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37449code30'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3744930"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p37449code30"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #993333;">typedef</span> _Rb_tree<span style="color: #339933;">,</span>
                 less <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> rb_tree<span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> rb_tree<span style="color: #339933;">::</span><span style="color: #202020;">iterator</span> rb_tree_iter<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    rb_tree queue<span style="color: #339933;">;</span>
    queue._M_insert_unique<span style="color: #009900;">&#40;</span> <span style="color: #993333;">int</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;size: %d&quot;</span><span style="color: #339933;">,</span> queue.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://ranjiao.com/blog/index.php/2009/rb_tree_in_stl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

