<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>我有分寸</title>
	
	<link>http://wangxu.me/blog</link>
	<description>王旭的新闻中心</description>
	<lastBuildDate>Tue, 22 May 2012 01:40:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wangxu/JLYQ" /><feedburner:info uri="wangxu/jlyq" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>整了个 hostapd 搭的 AP</title>
		<link>http://wangxu.me/blog/p/709</link>
		<comments>http://wangxu.me/blog/p/709#comments</comments>
		<pubDate>Mon, 21 May 2012 15:14:48 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[b43]]></category>
		<category><![CDATA[bcm4318]]></category>
		<category><![CDATA[hostapd]]></category>
		<category><![CDATA[ipw2100]]></category>
		<category><![CDATA[mac80211]]></category>
		<category><![CDATA[nl80211]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[拆机]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=709</guid>
		<description><![CDATA[唉，现在居民楼里无线环境太复杂，缺乏规划，干扰源太多，在一个屋子里的低干扰频点到别的屋子里可能就状况很差了，即使在不到70平米的家里都是如此，只好找来老笔记本，用 hostapd 搭了一个 AP，弥补覆盖的不足…… 本来没想写的，不过还是记记吧，省得荒废了 blog，其实内容不值一提，都是很简单的设置，网上资料很多，这里就是日记一下哈，不算教程。 先是找来了弃之不用很久的老笔记本——04年的华硕 M2Ne，一代迅驰平台配二代迅驰的CPU（Dophin内核），这个不知道还有多少同学对它有印象啊，呵呵 gnawux@case:~$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : Intel(R) Pentium(R) M processor 1.50GHz stepping : 6 microcode : 0x17 cpu MHz : 600.000 cache size : 2048 KB fdiv_bug : no hlt_bug : no f00f_bug : [...]]]></description>
			<content:encoded><![CDATA[<p>唉，现在居民楼里无线环境太复杂，缺乏规划，干扰源太多，在一个屋子里的低干扰频点到别的屋子里可能就状况很差了，即使在不到70平米的家里都是如此，只好找来老笔记本，用 hostapd 搭了一个 AP，弥补覆盖的不足……</p>
<p>本来没想写的，不过还是记记吧，省得荒废了 blog，其实内容不值一提，都是很简单的设置，网上资料很多，这里就是日记一下哈，不算教程。</p>
<p>先是找来了弃之不用很久的老笔记本——04年的华硕 M2Ne，一代迅驰平台配二代迅驰的CPU（Dophin内核），这个不知道还有多少同学对它有印象啊，呵呵</p>
<pre class="brush: bash; gutter: true">gnawux@case:~$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 13
model name	: Intel(R) Pentium(R) M processor 1.50GHz
stepping	: 6
microcode	: 0x17
cpu MHz		: 600.000
cache size	: 2048 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss tm pbe up bts est tm2
bogomips	: 1199.98
clflush size	: 64
cache_alignment	: 64
address sizes	: 32 bits physical, 32 bits virtual
power management:</pre>
<p>嗯，拿来之后看了看手头的东西，装了个 Ubuntu 12.04，本来想装 Debian Sid 的，没想到 Unetbootin 做的 Debian USB 启动盘，居然没 boot，Ubuntu 倒是 boot 了，当然，不是同一个 U 盘，不知道是盘的事还是镜像的事，嗯，无所谓了。装起来之后，果断起不来 hostapd，果不出我所料，Intel IPW2100 网卡是进不了 AP mode 的，3945 以后的使用 mac80211 的才可以。</p>
<blockquote><p>嗯，这里插一句，我凭印象说了，不一定对啊。大约在早几年，那会我还没毕业，天天折腾 Linux，知道最早的 ipw 无线网卡的 mac 层驱动是 softmac，后来移植到的 mac80211，这倒不是说后者是 hardmac 哈，实际上都是软件实现 MAC 层，嗯，这是网络第二层的一个子层，不是水果家的东西哈。softmac 写得比较乱，而 mac80211 是一次重构，而且更彻底的把控制挪到软件层来做了，对AP模式之类的模式也支持的更好。</p></blockquote>
<p>嗯，大概就是上面的意思，不是很准确，不要拿去引用就好。还好哥翻箱倒柜找到了一块当年二手收的 BCM4318 （bg 双模的，比 ipw2100 强），嗯，当年收来给 linux 玩没问题，不过这个本后来给老婆装 windows 了，居然 windows 一起来只认 intel 的无线网卡，只好换回去，我这次找到这块 BCM4318 的时候，在一个破箱子里，用破纸包着……唉，苦了你苦守寒窑这么多年啊，终于又要发挥余热了。</p>
<p>BCM43xx 无线网卡目前的驱动模块是 b43，需要 broadcom 家的 firmware，可以用这两个包，自动安装：</p>
<pre class="brush: bash; gutter: true">ii  b43-fwcutter                     1:015-9                                  Utility for extracting Broadcom 43xx firmware
ii  firmware-b43-installer           1:015-9                                  Installer package for firmware for the b43 driver</pre>
<p>和大部分略新的无线网卡驱动一样，b43 也是使用 mac80211 的，这东东对 hostapd 来说，用 nl80211 驱动就可以了，嗯，拆机换网卡，给几张照片哈：</p>
<div id="attachment_710" class="wp-caption aligncenter" style="width: 310px"><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.22.jpg"><img class="size-medium wp-image-710" title="2012-05-20 15.31.22" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.22-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">打开电源面板，卸下键盘，下面的电路板就是插在 minipci 口上的无线网卡</p></div>
<p>嗯，在这篇平淡无奇的blog里面，拆机照片也算是个特色吧，呵呵，miniPCI 口边上有卡子，一按，卡会自动翘起来，然后一拔就下来了，装的时候，插进去一按就行了，和笔记本内存很类似。来两张二次出山（二手的，应该是三次出山了）的BCM4318的照片：</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.58.jpg"><img class="size-medium wp-image-711" title="2012-05-20 15.31.58" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.58-300x225.jpg" alt="" width="300" height="225" /> </a><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.42.jpg"><img class="size-medium wp-image-712" title="2012-05-20 15.31.42" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.31.42-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>嗯，注意正面(左边那张)的右上角，有两个天线插口，写着main 和 aux 呢，忘了插天线可不行哈。嗯，再来两张刚刚结束半退休，正式退休的 Intel Pro Wireless 2100 (ipw2100) 的照片哈：</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.49.09.jpg"><img class="alignnone size-medium wp-image-713" title="2012-05-20 15.49.09" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.49.09-300x225.jpg" alt="" width="300" height="225" /></a>  <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.40.15.jpg"><img class="alignnone size-medium wp-image-714" title="2012-05-20 15.40.15" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-20-15.40.15-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>嗯，好了，图片到此为止，下面给一个配置，先是 hostapd 的，包自己 apt 装就行了，配置文件这么写就可以：</p>
<pre class="brush: bash; gutter: true">gnawux@case:~$ cat /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
ssid=confusion
channel=11
hw_mode=g
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=jumpover</pre>
<p>嗯，这是一个使用 wlan0 做 AP，接入到网桥（br0）（直接桥到以太网，通过以太网那边的路由器分配地址啥的），占用11号频点，802.11g，WPA2认证，SSID是confusion，密码是 jumpover 的配置，当然，我实际的密码肯定不是这个了，嘿嘿。其实呢，我觉得自己做 DHCP，然后配 NAT 路由，甚至是选择缺省翻墙都是可以的，我这次懒得配了，留给下次了，桥着最省事，只要再配好，让 eth0 也在桥里就行了。</p>
<p>嗯，网桥直接配到 /etc/network/interfaces 里就行，这是 Debian 系的配法，嗯，RH 和 SuSE 之类的自己研究哈，Debian/Ubuntu 的就这么简单：</p>
<pre class="brush: bash; gutter: true">gnawux@case:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet dhcp
	bridge_ports eth0</pre>
<p>嗯，关于桥的就是后三行。呃，好了，到此为止，我现在就是接在这个 AP 上写的 Blog，信号满格，哈哈。</p>
<p>这个周末好充实啊 —— 冲击钻+电锤在墙上打洞，换无线网卡DIY AP，刷手机 ROM 玩应用写 Blog，去公司写程序外加带儿子学英语…… 嗯，期待下个周末哈</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/709/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个 ROM 和几个 APP[多图杀猫]</title>
		<link>http://wangxu.me/blog/p/691</link>
		<comments>http://wangxu.me/blog/p/691#comments</comments>
		<pubDate>Sun, 20 May 2012 14:06:26 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[FreeNote]]></category>
		<category><![CDATA[galaxy note]]></category>
		<category><![CDATA[ics]]></category>
		<category><![CDATA[LectureNotes]]></category>
		<category><![CDATA[rom]]></category>
		<category><![CDATA[stylus]]></category>
		<category><![CDATA[TouchRetouch]]></category>
		<category><![CDATA[应用]]></category>
		<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=691</guid>
		<description><![CDATA[前几天，把我的 Galaxy Note 刷到 CyanogenMod 9 (CM9) Nightly build 了，之前没有刷上来过，主要是想尝试一下，而且，这个 ICS 的 kernel 没有三星的 Kernel 的硬砖问题。经过几天试用之后，有一个感觉 —— 纯粹的 CM 给了一个很好的可定制平台，但却没有提供很方便的用户定制工具，其他开发者基于这个来开发更好用的 ROM 应该不错，但它本身似乎还没有什么很容易摆弄的地方。 于是，转来转去，今天发现了一个值得关注的 ROM—— PARANOIDANDROID，链接在这里： http://forum.xda-developers.com/showthread.php?t=1662802 这个ROM才刚刚发布，就显得很吸引人，由于作者之前成绩不错，我也第一时间刷上了 0.1 来玩。这个 ROM 是基于 CM9 的，从 CM9 过来不需要 wipe，所以很容易就刷上了，它吸引人的地方在于： Tablet 模式与 Phone 模式的混合体——系统以 Tablet 模式为主，但可以为每个程序指定 DPI 是这样的，对于 CM9/AOSP 的 GN Rom 来说，DPI 决定了是平板还是手机，（大约）216 以下是平板，以上是手机，得益于高分辨率 Super HD AMOLED 屏，Galaxy Note [...]]]></description>
			<content:encoded><![CDATA[<p>前几天，把我的 Galaxy Note 刷到 CyanogenMod 9 (CM9) Nightly build 了，之前没有刷上来过，主要是想尝试一下，而且，这个 ICS 的 kernel 没有三星的 Kernel 的硬砖问题。经过几天试用之后，有一个感觉 —— 纯粹的 CM 给了一个很好的可定制平台，但却没有提供很方便的用户定制工具，其他开发者基于这个来开发更好用的 ROM 应该不错，但它本身似乎还没有什么很容易摆弄的地方。</p>
<p>于是，转来转去，今天发现了一个值得关注的 ROM——<strong> PARANOIDANDROID</strong>，链接在这里：</p>
<blockquote><p><a href="http://forum.xda-developers.com/showthread.php?t=1662802" target="_blank">http://forum.xda-developers.com/showthread.php?t=1662802</a></p></blockquote>
<p>这个ROM才刚刚发布，就显得很吸引人，由于作者之前成绩不错，我也第一时间刷上了 0.1 来玩。这个 ROM 是基于 CM9 的，从 CM9 过来不需要 wipe，所以很容易就刷上了，它吸引人的地方在于：</p>
<ul>
<li>Tablet 模式与 Phone 模式的混合体——系统以 Tablet 模式为主，但可以为每个程序指定 DPI</li>
</ul>
<p>是这样的，对于 CM9/AOSP 的 GN Rom 来说，DPI 决定了是平板还是手机，（大约）216 以下是平板，以上是手机，得益于高分辨率 Super HD AMOLED 屏，Galaxy Note 的实际 DPI 值是 320。平板模式时，因为把 DPI 值设得很低，字和按钮都会很小，有些应用字都看不清了（其他一些变小倒是很好看），而且，平板模式下，很多 Launcher，比如 Apex，都没有 dock，布置的桌面也不好看；一般切换平板和手机模式需要重启，很不方便，而且对Market还有些影响。总的说，一般的 ROM 的平板模式都是好看，但很难日常用的。</p>
<p>但是这个ROM是平板模式和手机模式结合起来的，Launcher 是修改过的 Trebuchet，用起来和手机模式很接近，很方便，更重要的是，每个应用可以指定自己的 DPI，需要有很多字的就指定高分辨率，比如，短信、电话…… 都可以设成 220，字更多的，看书应用、Facebook，可以设到真实值 320，而缺省值是 192，使用平板模式，很漂亮。后面以图为主了。介绍下这个 ROM 和这几天玩/买的有意思的 App（推荐：LectureNotes, FreeNote, Touch Retouch）。</p>
<p>开始推荐之前插一句，可调分辨率对某些程序是有问题的，这些程序可能对DPI处理不好，但是要插入到别的程序里面显示的程序（输入法、widget），墨迹天气的 widget 根本就无法显示，只好用 Go Weather，百度输入法插到DPI不同的程序里，或是自己设不同的DPI，就时而空出一大块，时而显示不全，只好用Google拼音输入法，不过所幸都有得替代，也没有其他应用有问题。嗯，下面正式开始：</p>
<h2>总体观感与Google Apps</h2>
<p>先来两张总体感觉：</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-12-34.png"><img class="size-medium wp-image-692" title="Screenshot_2012-05-20-14-12-34" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-12-34-187x300.png" alt="" width="187" height="300" /></a> <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-04-13.png"><img class="size-medium wp-image-693" title="Screenshot_2012-05-20-13-04-13" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-04-13-187x300.png" alt="" width="187" height="300" /></a></p>
<p>还算舒服吧，嗯，那个画图的widget，帆船画得不好看是我的责任哈。再来看看设置界面——</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-25-27.png"><img class="size-medium wp-image-695" title="Screenshot_2012-05-20-14-25-27" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-25-27-187x300.png" alt="" width="187" height="300" /></a> <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-23-40.png"><img class="alignnone size-medium wp-image-696" title="Screenshot_2012-05-20-14-23-40" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-23-40-187x300.png" alt="" width="187" height="300" /></a></p>
<p>可以看到咱们的新鲜出炉的 ROM 版本和 kernel build 的时间，以及为每个程序设置 DPI 值的界面。下面看看 GMail 和 Market，给两张横屏的视图：</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-05-54.png"><img class="alignnone size-medium wp-image-698" title="Screenshot_2012-05-20-13-05-54" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-05-54-300x187.png" alt="" width="300" height="187" /></a></p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-19-46.png"><img class="alignnone size-medium wp-image-699" title="Screenshot_2012-05-20-14-19-46" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-14-19-46-300x187.png" alt="" width="300" height="187" /></a></p>
<p>接下来来几个好玩的 APP：</p>
<h2>Lecture Notes</h2>
<p>$3.84 收的，嗯，很适合随意写写画画，随便记笔记，没什么限制。支持电磁笔（看stylus配置），而且支持笔上的按钮，用笔画的时候，可以按下按钮，就变成橡皮擦了。可以用小刀工具，选定一块，复制到别的地方，或是移动到别的地方，非常好用。而且可以设置为只有笔能写上，手指写不上，这样可以手指控制缩放移动、笔写字画画，很方便。</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-11-39.png"><img class="alignnone size-medium wp-image-700" title="Screenshot_2012-05-20-13-11-39" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-11-39-187x300.png" alt="" width="187" height="300" /></a>  <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-12-09.png"><img class="alignnone size-medium wp-image-701" title="Screenshot_2012-05-20-13-12-09" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-12-09-187x300.png" alt="" width="187" height="300" /></a></p>
<h2>FreeNote</h2>
<p>这个是免费的，收费版叫 FreeNote+，$5.99，但免费版已经很好用了。虽然名字叫Free，但用法没有Lecture Notes 那么 Free，有一个功能是画画，上面那个主屏的帆船就是这么画出来的，但更主要的功能是手写输入，又一个基线，写在里面就可以输入进去，然后还可以弄出来画重点啥的，功能也非常强大，界面我还是更喜欢一些 Lecture Notes。同样支持电磁笔，可以只有笔写入，手指不写</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-19-18.png"><img class="alignnone size-medium wp-image-702" title="Screenshot_2012-05-20-13-19-18" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-19-18-187x300.png" alt="" width="187" height="300" /></a>  <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-18-20.png"><img class="alignnone size-medium wp-image-703" title="Screenshot_2012-05-20-13-18-20" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-18-20-187x300.png" alt="" width="187" height="300" /></a></p>
<h2>Touch Retouch</h2>
<p>这不是一个笔记工具，而是一个修图工具，给张对比图哈</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-18-09.19.17.jpg"><img class="alignnone size-medium wp-image-704" title="2012-05-18 09.19.17" src="http://wangxu.me/blog/wp-content/uploads/2012/05/2012-05-18-09.19.17-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/IMG_20120518_091918x.jpg"><img class="alignnone size-medium wp-image-705" title="IMG_20120518_091918x" src="http://wangxu.me/blog/wp-content/uploads/2012/05/IMG_20120518_091918x-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>看到左侧的鼠标垫了没，用 Touch Retouch 只要用笔把小修掉的地方涂上，然后“start”，就消失了，超好玩，这个应用 $0.99，买来玩玩挺好哈 <img src='http://wangxu.me/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Evernote/Sketch</h2>
<p>都提到笔记了，不能不说大名鼎鼎的 Evernote 和它收购的 Sketch，嗯，Sketch 也可以写写画画：</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-16-23.png"><img class="alignnone size-medium wp-image-706" title="Screenshot_2012-05-20-13-16-23" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-16-23-187x300.png" alt="" width="187" height="300" /></a>  <a href="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-17-20.png"><img class="alignnone size-medium wp-image-707" title="Screenshot_2012-05-20-13-17-20" src="http://wangxu.me/blog/wp-content/uploads/2012/05/Screenshot_2012-05-20-13-17-20-187x300.png" alt="" width="187" height="300" /></a></p>
<p>但是，Sketch 似乎没有对笔的优化，而且，放在 Evernote 里也只是附件，还是留着用来勾照片吧。不过 Sketch 有个好处，会对画上的线条自动进行平滑，会更“好看”一点。</p>
<h2>Papyrus 和 FlipaClip</h2>
<p>这两个看起来很好玩，一个写起来特别舒服，一个写写画画自动生成动画，可惜了，在我的 ICS Rom 上全跑步起来，嗯，CM9, AOSP, Stock 都跑不起来，遗憾啊，这里就不贴图了。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/691/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>那些天一起刷过的Galaxy Note ICS ROM</title>
		<link>http://wangxu.me/blog/p/687</link>
		<comments>http://wangxu.me/blog/p/687#comments</comments>
		<pubDate>Wed, 16 May 2012 03:36:33 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[galaxy note]]></category>
		<category><![CDATA[ics]]></category>
		<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=687</guid>
		<description><![CDATA[似乎我用Milestone那么久都没有心思写篇关于手机的blog，用GN没几天就第二次想写了，我得说，这会儿总算对Android有些好感了，使用体验、界面流畅程度啥的都没什么问题了，也没什么冲动想换个个头那么小的 iPhone 了。我不是说 Android 比 iPhone 好了，只是，这些手机已经是各有特色了，iPhone 可能不再是每个人的理想智能手机了（对很多人从来没是过哈，对某些人永远都是）。 本文所指的ROM和内核，都来自 XDA（ http://forum.xda-developers.com ），由于个人装逼需要，不喜欢安装国内论坛上的“大牛”们做的，比如机锋什么的下 ROM，如果能在官方市场找到的软件也不喜欢用其它来源的，如果是付费软件，又很想要，就想办法伪装成米国用户买下来，偶们码农，得带头尊重软件版权、反对盗版，这个不是因为我们工资已经高到每月能买得起一两刀、三五刀的软件了，而是因为我们自己就是这么活的，我们不能自己偷自己的钱，是吧。 目前的Galaxy Note ICS ROM和内核 Galaxy Note 目前的两大 ICS ROM 分支是：基于三星官方修订的，以及基于纯开源项目构建的；内核也有两类：三星放出来的和基于纯开源构建的。开源的ROM也可能会用三星放出来的内核，反之大概亦然。 5月10号，三星欧洲在德国放出了他们的第一个官方的Note ICS ROM，版本号为 LPY，之前，中国泄漏过 LP1, LP5, LP6 三个 ICS ROM（这些似乎最早都是在机锋泄漏的），下面称呼的时候，官方版本的ROM和内核都直接称为LPY，泄漏版的三个，如果不特殊指某一个的话，直接说中国泄漏版。 在出现这些三星ROM之后，有几个 Team 都对官方版本的ROM做出了自己的 MOD，主要包括： 换用ApexLauncher 或 NovaLauncher，很多人都不喜欢三星的 TouchWiz ，呵呵 删掉一些应用，换上另一些（中国泄漏版里有人人、新浪微博之类的一大堆，我看着都想删掉，老外们更不例外了） 加一些启动的init脚本来做优化 换主题 增加一些通知栏 toggle 之类的功能（替换 SystemUI） 随后或同时，有一些人开始直接从开源的 AOSP （Android Open Source Project，这个是 [...]]]></description>
			<content:encoded><![CDATA[<p>似乎我用Milestone那么久都没有心思写篇关于手机的blog，用GN没几天就第二次想写了，我得说，这会儿总算对Android有些好感了，使用体验、界面流畅程度啥的都没什么问题了，也没什么冲动想换个个头那么小的 iPhone 了。我不是说 Android 比 iPhone 好了，只是，这些手机已经是各有特色了，iPhone 可能不再是每个人的理想智能手机了（对很多人从来没是过哈，对某些人永远都是）。</p>
<p>本文所指的ROM和内核，都来自 XDA（ http://forum.xda-developers.com ），由于个人装逼需要，不喜欢安装国内论坛上的“大牛”们做的，比如机锋什么的下 ROM，如果能在官方市场找到的软件也不喜欢用其它来源的，如果是付费软件，又很想要，就想办法伪装成米国用户买下来，偶们码农，得带头尊重软件版权、反对盗版，这个不是因为我们工资已经高到每月能买得起一两刀、三五刀的软件了，而是因为我们自己就是这么活的，我们不能自己偷自己的钱，是吧。</p>
<h2>目前的Galaxy Note ICS ROM和内核</h2>
<p>Galaxy Note 目前的两大 ICS ROM 分支是：基于三星官方修订的，以及基于纯开源项目构建的；内核也有两类：三星放出来的和基于纯开源构建的。开源的ROM也可能会用三星放出来的内核，反之大概亦然。</p>
<p>5月10号，三星欧洲在德国放出了他们的第一个官方的Note ICS ROM，版本号为 LPY，之前，中国泄漏过 LP1, LP5, LP6 三个 ICS ROM（这些似乎最早都是在机锋泄漏的），下面称呼的时候，官方版本的ROM和内核都直接称为LPY，泄漏版的三个，如果不特殊指某一个的话，直接说中国泄漏版。</p>
<p>在出现这些三星ROM之后，有几个 Team 都对官方版本的ROM做出了自己的 MOD，主要包括：</p>
<ul>
<li>换用ApexLauncher 或 NovaLauncher，很多人都不喜欢三星的 TouchWiz ，呵呵</li>
<li>删掉一些应用，换上另一些（中国泄漏版里有人人、新浪微博之类的一大堆，我看着都想删掉，老外们更不例外了）</li>
<li>加一些启动的init脚本来做优化</li>
<li>换主题</li>
<li>增加一些通知栏 toggle 之类的功能（替换 SystemUI）</li>
</ul>
<p>随后或同时，有一些人开始直接从开源的 AOSP （Android Open Source Project，这个是 google 直接放出的），以及在上面进行了一些修订的 AOKP 项目，这其中比较成熟的一般都使用了三星放出的内核——中国泄漏的或是更新的 LPY，它们的主要特点是：</p>
<ul>
<li>应用精简了不少，三星的一个都没有了，当然 S-Pen 应用也没有了（笔还能用，笔的按键不好用了，截屏之类的就不能用笔了）</li>
<li>一般用 ApexLauncher 或 NovaLauncher，优化、toggle、主题之类的也是有的</li>
<li>更多的可定制配置，包括锁屏</li>
<li>可以修改为平板模式，安装平板才可以用的软件，比如 Papyrus 之类的</li>
<li>早期AOSP官方有录像无法保存之类的 Bug，但后来已经修复了。</li>
</ul>
<p>除了AOSP/AOKP之外，还有著名的CM9系列ROM，它们的mod更多，甚至使用了基于 i9100 内核源代码构建的纯开源内核，这个内核目前只是可用，还缺少一些功能（这个变化很快，可能blog发出来的时候已经修复了呢）</p>
<ul>
<li>拍照的预览是黑的</li>
<li>Speaker还有部分问题，这个似乎是有人的内核解决了，有人的没有，不同的修复</li>
<li>其他不确定的问题</li>
</ul>
<p>嗯，好了，总结就到这里，下面是重要的安全提示——</p>
<h2>安全提示</h2>
<p>根据XDA总结的用户的报告，所有三星放出的内核，LPY或是中国泄漏的，都存在一定的 eMMC IO 缺陷，有可能在大 IO 时导致硬变砖，也就是 hard brick，这对于我们这些质保比较差用户来说更严重一些哈。发生这种情况的风险依次为：</p>
<ul>
<li>使用Chainfire 打包的基于三星内核的 CF-root kernel 时，在 Recovery 下进行 Wipe 和 Flash，这种风险是最高的，当然，实际我也在没得到这个安全提示的时候 wipe 过好几次，很多其他人也是，大部分都没变砖，变砖这个事，概率不高，但是风险高就很吓人，是吧</li>
<li>不使用 CF-Root的时候，也有可能 wipe 的时候出事</li>
<li>删除大文件的时候据认为也有可能有风险</li>
</ul>
<p>这个，说的是个可能性，但有很多用户不以为然，认为变砖不是这会才开始的，历史上也不是没出现过，不用看得这么重，那些手机可能是硬件本身有问题的，有很多变砖和新 kernel 根本没关系。不论如何，鉴于存在有问题的可能，因此XDA的开发者们给出了一个解决方案：</p>
<h3>安全操作方法与免责声明</h3>
<p>鉴于 2.3.6 的内核没有问题，于是建议这么操作：</p>
<ul>
<li>下 Abyss Kernel 4.2 （点这里: <a href="http://www.mediafire.com/?c65mndvpk6ocbaa" rel="nofollow" target="_blank">http://www.mediafire.com/?c65mndvpk6ocbaa</a> ），放到手机里</li>
<li>进 recovery 刷 Abyss 内核</li>
<li>在 advanced 里选择重启到recovery</li>
<li>如果想 wipe就wipe，想刷新 Rom 就刷新 Rom</li>
<li>重启，搞定</li>
</ul>
<p>当然，重复一下，刷机怎么都是有风险的，所以，即使你这么做了，赶上天灾人祸的可能性仍然是存在的，但是，要是啥风险都不承担，就表玩手机了，是吧。</p>
<h2> ICS使用体验</h2>
<p>用ICS时间久了，2.3.6 的啥体验记不清了，嗯，总体评价一下ICS吧</p>
<ul>
<li>设置界面的流量显示、电量显示都不错，wifi、蓝牙的设置也更方便了，打开设置就有开关，也可以点进去设置</li>
<li>流畅度没什么问题，原来有问题么，我不记得了啊，我觉得一直挺流畅的吧，当然，我毕竟是用老 milestone 过来的，对流畅啥的期待本来就不高，说实话，我承认我土鳖，玩 iPhone 4S 和 iPad、iPad 2 的时候也没觉得惊艳的流畅啊……</li>
<li>电池啥的，跟 Coly 显摆过好几次，我觉得正常情况下，原电坚持一天应该没问题，我的坚持的意思是不以影响使用体验为代价的，不关 wifi、不关背景数据传输，该拍照拍照，该上传上传，该微博微博，该看 RSS 看 RSS……</li>
<li>人脸解锁说起来拉风，但用一下就知道了，这东西对长得像我这么丑的屌丝完全是自取其辱啊，如果当天没刮胡子，或者干了一天活一脸油光的话，每次解锁都让你感到一阵恶心，嗯，当然了，对改善个人卫生有好处，用人脸解锁的几天，我会一天洗几次脸、刮胡子间隔绝对不会超过两天，嗯，即使这样，后来还是关掉人脸解锁了</li>
<li>只要有 root，就可以安装 busy box 和 openvpn，你懂的，这个没有任何使用问题</li>
</ul>
<p>嗯，再来说下基于三星ROM做的东西</p>
<ul>
<li>用 LPY 吧，毕竟是官方的，没有中文界面，也就是菜单啥的是英文的，中文程序没有任何问题</li>
<li>如果觉得 instagram 之类的开的时候有点卡的话，disable 掉一片三星自带的程序，什么 weather、news、软件更新啥的，有 root 的话，可以直接移除 /system/app/ 下不需要的程序，当然，有些是不能拿走的，这个见仁见智吧，我移走了50多个，看起来没什么问题</li>
<li>mod啥的都可以手动做，比如 mod 个主题、装个软件啥的，有 root 都可以手工做了，基本不需要装个特殊的ROM版本了。</li>
</ul>
<p>然后是 AOKP 的 ROM，我用 stunner 比较多，从 Beta4.1 一直用到 1.4.26.1，说说感受：</p>
<ul>
<li>流畅度没问题，内存占用少很多。当然，要我说，内存剩余 200MB 还是 500MB 都是浮云，只要应用不卡，内存不就是用来用的么；</li>
<li>面板啥的可定制性更强，我喜欢这个，相机有全景相机功能，比免费应用的全景相机功能好用</li>
<li>平板模式基本不用，字小啊，但支持 Papyrus 和其他一些 Note 软件，还是挺有吸引力的</li>
<li>没有 S-Pen 按键的功能，心里小不爽，似乎笔的定位比三星 ROM 有偏移，这个是感觉，不是确实量出来的，但心情上确实是这样的</li>
</ul>
<p>总结一下：</p>
<ul>
<li>只要有 root，流畅度不是问题，电池也没问题</li>
<li>应用各有特色，我更倾向于官方的 S-Pen，虽然常常留恋 AOKP 的 ROM</li>
<li>仅供参考，不承担责任哈</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/687/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>创建 Debian/Ubuntu 风格的内核模块包</title>
		<link>http://wangxu.me/blog/p/682</link>
		<comments>http://wangxu.me/blog/p/682#comments</comments>
		<pubDate>Mon, 14 May 2012 10:26:52 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[module-assistant]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unleashed]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=682</guid>
		<description><![CDATA[很久不深入玩Debian系的东西了，最近，乘着工作之便，又打了个deb包，而且是我之前没干过的内核模块的deb包，恩，记一下吧。 Debian内核模块的一般构建方法 和 RHEL 不同，Debian 很少提供内核匹配的模块的二进制 deb 包，相反，一般会提供一些比较长用的模块的源码包，并配合 module-assistant 工具，生成与用户使用的内核版本一致的内核模块。 module-assistant 是一个菜单界面的CLI工具，用户可以在这里选择源码包，当然，也可以用 apt 安装 xxx-source 的源码包（也是deb包），然后，用命令 m-a a-i module-name-here 来自动生成模块的二进制 deb 包并安装。 打包模块源码 如果源里没有这个模块的话，就只能自己打包内核模块了。这个工作实际和一般软件的 deb 打包非常相似，可以借助 debhelper 的 dh_make(8) 命令。 生成 Debianize 文件 dh_make 实际上有一个专门的选项/参数 (k)，可以用来制作模块的 deb 包，现在，在源码的顶层目录（目录的命名方式是 package-name-x.x.x）运行 dh_make 命令： # dh_make -e account@examplel.com -k --createorig # 恩，为了方便，我实际在源码的顶层目录里放了一个叫 driver 的目录，内核模块代码就在里面，这样复制的时候可以直接复制整个目录了。 执行玩上面的命令之后，你就可以看到，多了一个 debian 目录，这个目录里有很多文件，它们遵循 debian [...]]]></description>
			<content:encoded><![CDATA[<p>很久不深入玩Debian系的东西了，最近，乘着工作之便，又打了个deb包，而且是我之前没干过的内核模块的deb包，恩，记一下吧。</p>
<h2>Debian内核模块的一般构建方法</h2>
<p>和 RHEL 不同，Debian 很少提供内核匹配的模块的二进制 deb 包，相反，一般会提供一些比较长用的模块的源码包，并配合 module-assistant 工具，生成与用户使用的内核版本一致的内核模块。</p>
<p>module-assistant 是一个菜单界面的CLI工具，用户可以在这里选择源码包，当然，也可以用 apt 安装 xxx-source 的源码包（也是deb包），然后，用命令</p>
<pre class="brush: bash; gutter: true">m-a a-i module-name-here</pre>
<p>来自动生成模块的二进制 deb 包并安装。</p>
<h2>打包模块源码</h2>
<p>如果源里没有这个模块的话，就只能自己打包内核模块了。这个工作实际和一般软件的 deb 打包非常相似，可以借助 debhelper 的 dh_make(8) 命令。</p>
<h3>生成 Debianize 文件</h3>
<p>dh_make 实际上有一个专门的选项/参数 (k)，可以用来制作模块的 deb 包，现在，在源码的顶层目录（目录的命名方式是 package-name-x.x.x）运行 dh_make 命令：</p>
<pre class="brush: bash; gutter: true"># dh_make -e account@examplel.com -k --createorig
#</pre>
<p>恩，为了方便，我实际在源码的顶层目录里放了一个叫 driver 的目录，内核模块代码就在里面，这样复制的时候可以直接复制整个目录了。</p>
<p>执行玩上面的命令之后，你就可以看到，多了一个 debian 目录，这个目录里有很多文件，它们遵循 debian 的一般打包原则，简单介绍几个重要的，具体的参考《Debian新维护人员手册》吧：</p>
<ul>
<li>rule：这个最重要，实际是个Makefile，后面具体介绍；</li>
<li>control：这个是软件包的描述，照着内容敲吧，section 之要遵循 debian 的约定，比如 kernel 就是一个 section，其他自便吧；</li>
<li>changelog：这个是打包版本的变更，每个版本开头里，目标distro一般写 unstable，urgency 一般是 low ；</li>
<li>README.Debian：是对这个包的说明，给人看的；</li>
<li>可执行脚本：postinst 和 prerm 比较常用，分别是在安装之后进行配置和卸载之前进行清理的，preinst 和 postrm 一般用的不多。其他文件各有各的用处，.ex 结尾的都是例子，如果用的上就用，用不上的可以考虑删除。</li>
</ul>
<h3>内核模块包的特殊文件</h3>
<p>恩，因为这 kernel module 包的做法是先做 source 的 deb 包，用户用 m-a 根据这个 deb包的内容再做一个二进制的 deb 包，所以需要为他们准备一些配置文件，一般用得上的是这两个：</p>
<ul>
<li>control.modules.in  这个用作模块包的 control 文件；</li>
<li>ebs-driver1-modules-_KVERS_.postinst.modules.in 这个用作模块包的 postinst 脚本，比如要插模块、调整 daemon 什么的。</li>
</ul>
<h3>写内核模块包的 rules</h3>
<p>这是关键折腾的一步，我也是头一次写，没找到什么现成的文档，自己琢磨的，有什么不对的地方还请指出来啊。</p>
<p>规则里面 kdist_clean, kdist_config, binary-modules 是用来编译内核的，编译内核时，有些规则是从 module-assistant 里导入进来的</p>
<pre class="brush: bash; gutter: true"># modifieable for experiments or debugging m-a
MA_DIR ?= /usr/share/modass
# load generic variable handling
-include $(MA_DIR)/include/generic.make
# load default rules, including kdist, kdist_image, ...
-include $(MA_DIR)/include/common-rules.make
</pre>
<p>这些会帮助我们在正式打包之前，在上面那几个给模块准备的配置文件里，加入内核版本号信息，并用正式的文件名。当然，在一开始 make kdist_clean 规则的时候，这些文件还没生成，所以应该把 dh_testdir 和 dh_clean 注掉，否则做不成的，如：</p>
<pre class="brush: bash; gutter: true">kdist_clean:
        #dh_testdir
        rm -f build-arch-stamp build-indep-stamp configure-stamp
        #dh_clean
        rm -f driver/*.o driver/*.ko
</pre>
<p>这里可以根据尝试的情况调整内容，稍稍注意一下即可。正式的 binary-module 目标倒是没什么特殊的，简单根据自己需求调整就行了，这里的安装过程会把模块放到</p>
<pre class="brush: bash; gutter: true">debian/$(PKGNAME)/lib/modules/$(KVERS)
</pre>
<p>目录里，如果有配置文件，也可以相应的放进去，debian 在安装包的时候，如果有配置文件的更改，是会提示用户的。</p>
<p>如果制作模块包的时候只要做源码包，不用做用户空间工具包的话，binary 目标只要依赖 binary-indep 就可以了，不需要依赖 binary-arch 了。</p>
<h3>打包</h3>
<p>写完配置文件之后，在源码顶级目录里，也就是有 debian 目录的目录里，运行</p>
<pre class="brush: bash; gutter: true">dpkg-buildpackage -uc -us -rfakeroot
</pre>
<p>就可以生成源码包了，安装之后，就可以像开头那样用 module-assistant 制作安装二进制模块了。</p>
<h2>小结</h2>
<p>实际上做内核模块的 deb 包并不难，只要有点 debian/ubuntu 经验，细心一点就可以做好里。估计短时间内我是不会更新 unleashed 了，就这篇 blog 供大家参考吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/682/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用 iproute2 进行 MultiHoming 设置</title>
		<link>http://wangxu.me/blog/p/675</link>
		<comments>http://wangxu.me/blog/p/675#comments</comments>
		<pubDate>Sat, 21 Apr 2012 09:52:45 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[iproute2]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[route]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=675</guid>
		<description><![CDATA[iproute2，也就是ip(8)这个命令的功能是非常强大的，之前就曾经用它建隧道之类的，但从来没涉及过路由，毕竟找不到什么不用 route(8) 命令的理由。不过，这次我们找到了一个——当你需要两个缺省路由的时候，该怎么配置？ 按：这个是新研究出来的，有什么不对的地方敬请指出哈 iproute2 iproute2 是一整套网络设置工具，涵盖从网口（link, address）、ARP（neigh）、路由（rule, route）、隧道（tunnel）等各个方面，是 Linux 2.2 （如果没记错的话，应该有十三四年了吧）以来的网络“新”特性的用户态工具，可以替代 arp、ifconfig、route 这些经典但不够完善的工具。 如果你要搭 ipip 或 gre 隧道，无疑要使用 iproute2 的 ip tunnel 命令了，除此之外，你还能想到第二个用 iproute2 的场景么？我就遇到了一个—— 问题背景：两张路由表 如果你有一台服务器，有两张网卡，对应了两个网络出口，都能连到目标网络，这时，怎么设置下一跳路由呢？经典的 route 设置，只有一个缺省路由条目可以生效的。你当然可以设置，让一部分目标地址走一个路由，另一部分目标地址走另一个路由，但是有两个问题： 这样，流量很难均衡使用两个路由 包从哪个网口进来是无法通过自己的路由表选择的，所以，如果按照上面那种划分方法，只要进入的包没有按照我们的期待分区划分，那么就无法正确地回复，也可能会被 rp_filter 直接过滤掉。 嗯，那么，怎么同时用上两块网卡呢—— 我们需要按照出发 IP 划分，使用源 IP1 的包，走第一块网卡，使用 IP2 的包，走第二块网卡。（先不考虑未指定的） 但是，IP路由的基本哲学是——按照目的地址，从路由表里查询，不可能按照源地址来整路由表，于是，问题就变成了这样—— 我们需要为每个 src IP 建立一张路由表：从第一个IP出来的包，进第一张路由表，出第一块网卡；从第二个IP出来的包，进第二张路由表，出第二块网卡。 思路很简单，但是 route(8) 命令在这里就束手无策了，嗯，看 iproute2 的： 多张路由表（rule） 好了，不卖关子了，iproute2 本来就支持多张路由表，配置文件位于这里： [...]]]></description>
			<content:encoded><![CDATA[<p>iproute2，也就是ip(8)这个命令的功能是非常强大的，之前就曾经用它建隧道之类的，但从来没涉及过路由，毕竟找不到什么不用 route(8) 命令的理由。不过，这次我们找到了一个——当你需要两个缺省路由的时候，该怎么配置？</p>
<blockquote><p>按：这个是新研究出来的，有什么不对的地方敬请指出哈</p></blockquote>
<h2>iproute2</h2>
<p>iproute2 是一整套网络设置工具，涵盖从网口（link, address）、ARP（neigh）、路由（rule, route）、隧道（tunnel）等各个方面，是 Linux 2.2 （如果没记错的话，应该有十三四年了吧）以来的网络“新”特性的用户态工具，可以替代 arp、ifconfig、route 这些经典但不够完善的工具。</p>
<p>如果你要搭 ipip 或 gre 隧道，无疑要使用 iproute2 的 ip tunnel 命令了，除此之外，你还能想到第二个用 iproute2 的场景么？我就遇到了一个——</p>
<h2>问题背景：两张路由表</h2>
<p>如果你有一台服务器，有两张网卡，对应了两个网络出口，都能连到目标网络，这时，怎么设置下一跳路由呢？经典的 route 设置，只有一个缺省路由条目可以生效的。你当然可以设置，让一部分目标地址走一个路由，另一部分目标地址走另一个路由，但是有两个问题：</p>
<ul>
<li>这样，流量很难均衡使用两个路由</li>
<li>包从哪个网口进来是无法通过自己的路由表选择的，所以，如果按照上面那种划分方法，只要进入的包没有按照我们的期待分区划分，那么就无法正确地回复，也可能会被 rp_filter 直接过滤掉。</li>
</ul>
<p>嗯，那么，怎么同时用上两块网卡呢——</p>
<blockquote><p>我们需要按照出发 IP 划分，使用源 IP1 的包，走第一块网卡，使用 IP2 的包，走第二块网卡。（先不考虑未指定的）</p></blockquote>
<p>但是，IP路由的基本哲学是——按照目的地址，从路由表里查询，不可能按照源地址来整路由表，于是，问题就变成了这样——</p>
<blockquote><p>我们需要为每个 src IP 建立一张路由表：从第一个IP出来的包，进第一张路由表，出第一块网卡；从第二个IP出来的包，进第二张路由表，出第二块网卡。</p></blockquote>
<p>思路很简单，但是 route(8) 命令在这里就束手无策了，嗯，看 iproute2 的：</p>
<h2>多张路由表（rule）</h2>
<p>好了，不卖关子了，iproute2 本来就支持多张路由表，配置文件位于这里：</p>
<pre class="brush: bash; gutter: true">root@swipe:~# cat /etc/iproute2/rt_tables
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep</pre>
<p>已经有三张表了：</p>
<pre class="brush: bash; gutter: true">root@swipe:~# ip rule ls
0:	from all lookup local
32766:	from all lookup main
32767:	from all lookup default</pre>
<p>这三张表都对所有的IP来源生效（from all），这其中，main 就是我们通常设置的路由规则，</p>
<pre class="brush: bash; gutter: true">root@swipe:~# ip route ls table main
default via 192.168.12.1 dev eth0  proto static
169.254.0.0/16 dev eth0  scope link  metric 1000
192.168.12.0/24 dev eth0  proto kernel  scope link  src 192.168.12.104  metric 1
root@swipe:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         localhost       0.0.0.0         UG    0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
192.168.12.0    *               255.255.255.0   U     1      0        0 eth0</pre>
<p>default表是空的，而local表则是本机链路的设置。如果我们需要，可以人为加入新规则（路由表）</p>
<pre class="brush: bash; gutter: true">root@swipe:~# echo &quot;200 rt2&quot; &gt;&gt; /etc/iproute2/rt_tables
root@swipe:~# ip rule add from 192.168.12.111 table rt2
root@swipe:~# ip rule ls
0:	from all lookup local
32765:	from 192.168.12.111 lookup rt2
32766:	from all lookup main
32767:	from all lookup default</pre>
<p>这样，来自 192.168.12.111 的包就可以先进入 rt2 这张表了</p>
<h2>路由设置</h2>
<p>现在要做的是为每张表设置路由</p>
<pre class="brush: bash; gutter: true">root@swipe:~# ip route add 192.168.12.0/24 dev eth1 table rt2
root@swipe:~# ip route add default via 192.168.12.254 dev eth1 table rt2
root@swipe:~# ip route flush cache</pre>
<p>对于本机发出的包，应该可以以某种机会，比较均衡地选择任意路由出去</p>
<pre class="brush: bash; gutter: true">root@swipe:~# ip route add default scope global nexthop via XX.XX.XX.XX dev eth0 weight 1 \
 nexthop via XX.XX.XX.XX dev eth1 weight 1</pre>
<p>当然，这种基于路由表的负载均衡并不能做到完全均匀，毕竟路由表是可以被缓存的。</p>
<p>说明：上面的设置例子是在一台只有一块网卡的机器上码的，不过在写blog之前是在有两块网卡的机器上操作的，就是那个机器不方便写blog，所以看着细节上可能有点味道不太对，没关系哈</p>
<h2>参考</h2>
<p>下面是一些参考文献：</p>
<ol>
<li>Linux Advanced Routing &amp; Traffic Control HOWTO ： http://lartc.org/howto/index.html</li>
<li>ip-cref ： http://users.cis.fiu.edu/~esj/cnt4504/reading/ip-cref.pdf</li>
</ol>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/675/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>清明假期北海游</title>
		<link>http://wangxu.me/blog/p/657</link>
		<comments>http://wangxu.me/blog/p/657#comments</comments>
		<pubDate>Wed, 18 Apr 2012 16:59:45 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[beach]]></category>
		<category><![CDATA[beihai]]></category>
		<category><![CDATA[family]]></category>
		<category><![CDATA[i海边]]></category>
		<category><![CDATA[sea]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[北海]]></category>
		<category><![CDATA[家庭]]></category>
		<category><![CDATA[斯屹]]></category>
		<category><![CDATA[旅游]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=657</guid>
		<description><![CDATA[今年清明假期，连上请的年假，全家一起去了广西北海，延续了去年开始的每年春天，全家带儿子去南方海边吹海风的活动。我们全家对这次北海之行相当满意，由于去年的武夷山游记（http://wangxu.me/blog/p/555）受到好友的欢迎，在这里也把这次北海之行分享给大家，没准谁能用到呢。 实际上，路线的勘定，住宿的选择，机票的预定全是老婆（@跳舞的金子）完成的，攻略也是她查的。也就是说，她先分析学习，然后指导我执行，最后我输出新的游记——这是个很经典的反向工程案例啊。 行程概述 我们的行程是这样的： 4月1日搭乘CA1881飞到北海， 当日到达市区北部湾广场，并在旁边住下 4月2日乘船登上涠洲岛，之后的时间主要在涠洲岛渡过 4月5日下午乘船返回北海 当日住在银滩 4月6日下午搭乘CA1882回到北京 主要行程标在Google Earth上是这样的，嗯，直接用了foursquare的签到记录，它的那个feed是可以输出KML的，直接用Google Earth打开即可，嗯，当然了，会有些偏移，你懂的，我修正了下位置。这个是北海的全部经停地点： 嗯，可以看到，银滩离市中心还是比较近的，码头就在银滩边上，从码头到涠洲岛的距离大概是40公里，必须乘船前往，蹚水是过不去的。银滩上的主要景点概览如下： 我们用了一天时间游览小岛的大部分景点，其他时间主要就在住处附近的沙滩活动了，很舒服。 下面这个是北海市区和银滩的示意，实际银滩也是很不错的： 海滩，各种海滩 当我们从涠洲岛回到北海市，到了银滩之后，我在4sq签到的时候写到“对海滩都审美疲劳了⋯⋯”，不过，第二天在银滩的海滩上抓小螃蟹仍然让我们和斯屹兴致勃勃，每处海滩都有它的特点，总的讲，我觉得北海的海滩质量不错，没有三亚那么多的商业开发，没有亚龙湾住宿成本那么高，还是很舒服的度假地点的。 贝壳沙滩与渔家 我们提前联系了渔民林大哥家里，他们接待还是很热情的。住处在后背塘村，这里距离贝壳沙滩走路三分钟的样子（参见上面的卫星图，嗯，不过具体地点我不太确定哈）。我们用了两天多的时间，陪儿子在这里挖沙子、捡贝壳、蹚水⋯⋯，还搞了烧烤活动 我得说，即使你在亚龙湾，也没有这么大的人均海滩面积。有些贝壳的地方有点扎脚，但大部分地方的沙子还是很细的，接近白色的海滩和清澈的海水让人想起蜈支洲岛，但这里的最大好处是人少，即使在清明假期，仍然很难看到很多人出现在这里，拍到安静的、没有人的海滩易如反掌。而且，这里有很多海螺壳、贝壳之类的，在中午退潮的时候，一些礁石都露出水面，在沙滩上可以很容易地捡到很多海螺壳。 涠洲岛的景区 涠洲岛上有挺多景区，对于非教徒，天主教堂的意义也并不大，掠过之后，我们依次造访了五彩滩、鳄鱼山、滴水丹屏和石螺口。各有特点。 五彩滩（右上角图）是一片石头海滩，据说早上有太阳的话会有五彩，嗯，我们去的时候阴天，没看到，不过这里有很多小螃蟹、寄居蟹啥的，小朋友很喜欢，就是石头滩比较塥脚； 鳄鱼山是涠洲岛作为国家地质公园的主景区（右下角三张照片和左下角寄居蟹都是在这里拍的），是一个小半岛，需要走上或坐车上山，然后在爬下海边，然后爬上来，再下山去，有一点累，不过我驮着儿子都做到了，应该不算太累；下到海边，可以看到火山口标识，海边有很多活泼的寄居蟹，石头上还有些活的，可能是珊瑚的东西； 滴水丹屏（背景图，还有“王旭斯屹爱海娟”的沙子组字都是在这里拍的）是涠洲岛上最细腻的沙滩，个人感觉细腻程度绝对不亚于亚龙湾； 石螺口海滩是和滴水丹屏比较接近的一块海滩，有些水上和沙滩摩托车之类的项目，老婆在这里开了一段摩托车兜风 这几个景点大概是岛上仅有的商业旅游开发吧，嗯，似乎还有个看日出的地方，整个岛上的商业开发程度不高，还算自然吧。 银滩 银滩应该是北海大陆上最好的海滩了，这块海滩同样细腻、平坦、开阔，而且——小螃蟹太多了 我们在这里停留了一个下午和一个上午，我们住的地方类似亚龙湾的二线海景，和海滩隔着一条马路，不过这里也没有一线海景，呵呵。第二天上午的时候我们才注意到，这里到处都是小螃蟹的巢穴，小螃蟹很类似泥土里的蚯蚓啊，都是一个小洞，外面很多小土粒。我和儿子转了一圈，儿子动不动就能抓到来不及从外面跑回洞里的小螃蟹，而且——有活物的海滩都是小朋友喜欢的海滩。 当然，这里沙滩也很好，也有摩托车之类的项目，不过，我们就是来吹吹海风、玩玩沙子、抓抓小螃蟹的，这里也很适合我们。 小结 整个北海的海滩质量都不错，而且各有特点，贝壳、寄居蟹、小螃蟹都有不少 涠洲岛上住在渔家，然后到贝壳沙滩上休闲、BBQ，还有北海银滩，都是不错的休闲场景 潜水之类的项目都有，不过我们没尝试 衣食住行及其他 衣没什么可说的了，先说吃住：   北海和涠洲岛渔家的吃东西价格都比较公道，尤其是我们住的涠洲岛渔家，螃蟹、扇贝、生蚝、皮皮虾都物美价廉，吃得我们浑身痒痒⋯⋯ 涠洲岛鳄鱼山顶上的吃饭的地方比较坑爹，价格贵、服务能力差、东西不全，而且不好吃 渔家住宿很便宜，市内酒店也不贵，用去哪、携程之类的查到酒店价格如何，直接去前台订就可以，基本不需要预定酒店 然后说说出行： 北海的交通费算比较贵的，过路过桥上岛费用都不低，机场到市区的出租车要价100块，不讲价，我们就坐机场大巴进城了，直接到了北部湾广场，不过去机场的大巴并不方便，我们还是打车了 这里黑车比较猖狂，而且还威胁正规的出租车司机，抢客人 涠洲岛的游船，B舱120/人，船是小水线面双体船型，属于快速船型，实际航速大约是20节，速度不错，就是比较贵，而且航行中不能上甲板；上岛费（国家地质公园门票）90块/人，这个比较黑 岛上的载客三轮摩托车，环岛一天游100块、接送码头20，如果会开摩托车的话，可以考虑租摩托车转全岛；岛上没有正规渠道的加油站，所以汽油很贵，嗯，没办法。 总的说，北海的吃住都比较实惠，出行比较贵，综合考虑海滩很不错，嗯，趁着开发还不算过度，推荐一下，如果不想出国游，就北海吧，比三亚强。 &#160;]]></description>
			<content:encoded><![CDATA[<p>今年清明假期，连上请的年假，全家一起去了广西北海，延续了去年开始的每年春天，全家带儿子去南方海边吹海风的活动。我们全家对这次北海之行相当满意，由于去年的武夷山游记（<a title="武夷山游记" href="http://wangxu.me/blog/p/555" target="_blank">http://wangxu.me/blog/p/555</a>）受到好友的欢迎，在这里也把这次北海之行分享给大家，没准谁能用到呢。</p>
<p>实际上，路线的勘定，住宿的选择，机票的预定全是老婆（<a title="跳舞的金子" href="http://weibo.com/u/2153748074" target="_blank">@跳舞的金子</a>）完成的，攻略也是她查的。也就是说，她先分析学习，然后指导我执行，最后我输出新的游记——这是个很经典的反向工程案例啊。</p>
<h2>行程概述</h2>
<p>我们的行程是这样的：</p>
<ul>
<li>4月1日搭乘CA1881飞到北海，</li>
<li>当日到达市区北部湾广场，并在旁边住下</li>
<li>4月2日乘船登上涠洲岛，之后的时间主要在涠洲岛渡过</li>
<li>4月5日下午乘船返回北海</li>
<li>当日住在银滩</li>
<li>4月6日下午搭乘CA1882回到北京</li>
</ul>
<div>主要行程标在Google Earth上是这样的，嗯，直接用了foursquare的签到记录，它的那个feed是可以输出KML的，直接用Google Earth打开即可，嗯，当然了，会有些偏移，你懂的，我修正了下位置。这个是北海的全部经停地点：</div>
<div><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.16.53.jpg"><img class="aligncenter size-medium wp-image-658" title="北海游概览" src="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.16.53-296x300.jpg" alt="" width="296" height="300" /></a>嗯，可以看到，银滩离市中心还是比较近的，码头就在银滩边上，从码头到涠洲岛的距离大概是40公里，必须乘船前往，蹚水是过不去的。银滩上的主要景点概览如下：</div>
<div><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.09.46-1.jpg"><img class="aligncenter size-medium wp-image-660" title="涠洲岛主要景点" src="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.09.46-1-300x236.jpg" alt="" width="300" height="236" /></a>我们用了一天时间游览小岛的大部分景点，其他时间主要就在住处附近的沙滩活动了，很舒服。 下面这个是北海市区和银滩的示意，实际银滩也是很不错的：</div>
<div><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.19.17.jpg"><img class="aligncenter size-medium wp-image-661" title="北海市区" src="http://wangxu.me/blog/wp-content/uploads/2012/04/屏幕快照-2012-04-18-下午2.19.17-300x267.jpg" alt="" width="300" height="267" /></a></div>
<h2>海滩，各种海滩</h2>
<p>当我们从涠洲岛回到北海市，到了银滩之后，我在4sq签到的时候写到“对海滩都审美疲劳了⋯⋯”，不过，第二天在银滩的海滩上抓小螃蟹仍然让我们和斯屹兴致勃勃，每处海滩都有它的特点，总的讲，我觉得北海的海滩质量不错，没有三亚那么多的商业开发，没有亚龙湾住宿成本那么高，还是很舒服的度假地点的。</p>
<h3>贝壳沙滩与渔家</h3>
<p>我们提前联系了渔民林大哥家里，他们接待还是很热情的。住处在后背塘村，这里距离贝壳沙滩走路三分钟的样子（参见上面的卫星图，嗯，不过具体地点我不太确定哈）。我们用了两天多的时间，陪儿子在这里挖沙子、捡贝壳、蹚水⋯⋯，还搞了烧烤活动</p>
<div id="attachment_666" class="wp-caption aligncenter" style="width: 310px"><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/ShellBeach.jpg"><img class="size-medium wp-image-666" title="贝壳沙滩" src="http://wangxu.me/blog/wp-content/uploads/2012/04/ShellBeach-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">“私家”海滩</p></div>
<p>我得说，即使你在亚龙湾，也没有这么大的人均海滩面积。有些贝壳的地方有点扎脚，但大部分地方的沙子还是很细的，接近白色的海滩和清澈的海水让人想起蜈支洲岛，但这里的最大好处是人少，即使在清明假期，仍然很难看到很多人出现在这里，拍到安静的、没有人的海滩易如反掌。而且，这里有很多海螺壳、贝壳之类的，在中午退潮的时候，一些礁石都露出水面，在沙滩上可以很容易地捡到很多海螺壳。</p>
<h3>涠洲岛的景区</h3>
<p>涠洲岛上有挺多景区，对于非教徒，天主教堂的意义也并不大，掠过之后，我们依次造访了五彩滩、鳄鱼山、滴水丹屏和石螺口。各有特点。</p>
<div id="attachment_667" class="wp-caption aligncenter" style="width: 310px"><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/WeizhouIsland.jpg"><img class="size-medium wp-image-667" title="涠洲岛诸景点" src="http://wangxu.me/blog/wp-content/uploads/2012/04/WeizhouIsland-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">岛上风光</p></div>
<ul>
<li>五彩滩（右上角图）是一片石头海滩，据说早上有太阳的话会有五彩，嗯，我们去的时候阴天，没看到，不过这里有很多小螃蟹、寄居蟹啥的，小朋友很喜欢，就是石头滩比较塥脚；</li>
<li>鳄鱼山是涠洲岛作为国家地质公园的主景区（右下角三张照片和左下角寄居蟹都是在这里拍的），是一个小半岛，需要走上或坐车上山，然后在爬下海边，然后爬上来，再下山去，有一点累，不过我驮着儿子都做到了，应该不算太累；下到海边，可以看到火山口标识，海边有很多活泼的寄居蟹，石头上还有些活的，可能是珊瑚的东西；</li>
<li>滴水丹屏（背景图，还有“王旭斯屹爱海娟”的沙子组字都是在这里拍的）是涠洲岛上最细腻的沙滩，个人感觉细腻程度绝对不亚于亚龙湾；</li>
<li>石螺口海滩是和滴水丹屏比较接近的一块海滩，有些水上和沙滩摩托车之类的项目，老婆在这里开了一段摩托车兜风</li>
</ul>
<div>这几个景点大概是岛上仅有的商业旅游开发吧，嗯，似乎还有个看日出的地方，整个岛上的商业开发程度不高，还算自然吧。</div>
<h3>银滩</h3>
<p>银滩应该是北海大陆上最好的海滩了，这块海滩同样细腻、平坦、开阔，而且——小螃蟹太多了</p>
<div id="attachment_669" class="wp-caption aligncenter" style="width: 310px"><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/SilverBeach.jpg"><img class="size-medium wp-image-669" title="银滩" src="http://wangxu.me/blog/wp-content/uploads/2012/04/SilverBeach-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">到处都有小螃蟹</p></div>
<p>我们在这里停留了一个下午和一个上午，我们住的地方类似亚龙湾的二线海景，和海滩隔着一条马路，不过这里也没有一线海景，呵呵。第二天上午的时候我们才注意到，这里到处都是小螃蟹的巢穴，小螃蟹很类似泥土里的蚯蚓啊，都是一个小洞，外面很多小土粒。我和儿子转了一圈，儿子动不动就能抓到来不及从外面跑回洞里的小螃蟹，而且——有活物的海滩都是小朋友喜欢的海滩。</p>
<p>当然，这里沙滩也很好，也有摩托车之类的项目，不过，我们就是来吹吹海风、玩玩沙子、抓抓小螃蟹的，这里也很适合我们。</p>
<h3>小结</h3>
<blockquote>
<ul>
<li>整个北海的海滩质量都不错，而且各有特点，贝壳、寄居蟹、小螃蟹都有不少</li>
<li>涠洲岛上住在渔家，然后到贝壳沙滩上休闲、BBQ，还有北海银滩，都是不错的休闲场景</li>
<li>潜水之类的项目都有，不过我们没尝试</li>
</ul>
</blockquote>
<h2>衣食住行及其他</h2>
<p>衣没什么可说的了，先说吃住：</p>
<p style="text-align: center;"><a href="http://wangxu.me/blog/wp-content/uploads/2012/04/IMG_20120405_135550.jpg"><img class="alignnone size-medium wp-image-672" title="IMG_20120405_135550" src="http://wangxu.me/blog/wp-content/uploads/2012/04/IMG_20120405_135550-225x300.jpg" alt="" width="225" height="300" /></a> <a href="http://wangxu.me/blog/wp-content/uploads/2012/04/IMG_0451.jpg"><img class="alignnone size-medium wp-image-671" title="IMG_0451" src="http://wangxu.me/blog/wp-content/uploads/2012/04/IMG_0451-225x300.jpg" alt="" width="225" height="300" /></a></p>
<ul>
<li>北海和涠洲岛渔家的吃东西价格都比较公道，尤其是我们住的涠洲岛渔家，螃蟹、扇贝、生蚝、皮皮虾都物美价廉，吃得我们浑身痒痒⋯⋯</li>
<li>涠洲岛鳄鱼山顶上的吃饭的地方比较坑爹，价格贵、服务能力差、东西不全，而且不好吃</li>
<li>渔家住宿很便宜，市内酒店也不贵，用去哪、携程之类的查到酒店价格如何，直接去前台订就可以，基本不需要预定酒店</li>
</ul>
<p>然后说说出行：</p>
<ul>
<li>北海的交通费算比较贵的，过路过桥上岛费用都不低，机场到市区的出租车要价100块，不讲价，我们就坐机场大巴进城了，直接到了北部湾广场，不过去机场的大巴并不方便，我们还是打车了</li>
<li>这里黑车比较猖狂，而且还威胁正规的出租车司机，抢客人</li>
<li>涠洲岛的游船，B舱120/人，船是小水线面双体船型，属于快速船型，实际航速大约是20节，速度不错，就是比较贵，而且航行中不能上甲板；上岛费（国家地质公园门票）90块/人，这个比较黑</li>
<li>岛上的载客三轮摩托车，环岛一天游100块、接送码头20，如果会开摩托车的话，可以考虑租摩托车转全岛；岛上没有正规渠道的加油站，所以汽油很贵，嗯，没办法。</li>
</ul>
<div>总的说，北海的吃住都比较实惠，出行比较贵，综合考虑海滩很不错，嗯，趁着开发还不算过度，推荐一下，如果不想出国游，就北海吧，比三亚强。</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/657/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>版聚的另一话题——你是如何退出Emacs的</title>
		<link>http://wangxu.me/blog/p/654</link>
		<comments>http://wangxu.me/blog/p/654#comments</comments>
		<pubDate>Mon, 26 Mar 2012 15:31:02 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[linuxfb]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=654</guid>
		<description><![CDATA[版聚也讨论一些不太严肃的话题（严肃的请进上一篇: http://wangxu.me/blog/p/648）。 不知怎的，忽然间话题跑到了 Vim 上，是的，在场的卢瑟们不会用 Emacs，只能勉强学会 Vim。李凯童鞋表示—— 一种产生随机字符的方法是，请一位新手退出Vim。 于是，话题被正式岔到在场童鞋们都不会的 Emacs 上了。 李凯说 我退出Emacs的方式是，且到另一个终端，然后 kill 那个 Emacs 进程。 好吧，他确实比较狠，我当场表示，当年我的操作比这个善良一些—— 我是用的 Ctrl-z，放到后台，然后干掉的。 Colyli 童鞋不甘寂寞，问 Ctrl-d 行不行？ 但这个方法当场被其他童鞋否定了。 各位，你们还有什么更2B一些的方法么。]]></description>
			<content:encoded><![CDATA[<p>版聚也讨论一些不太严肃的话题（严肃的请进上一篇: <a href="http://wangxu.me/blog/p/648">http://wangxu.me/blog/p/648</a>）。</p>
<p>不知怎的，忽然间话题跑到了 Vim 上，是的，在场的卢瑟们不会用 Emacs，只能勉强学会 Vim。李凯童鞋表示——</p>
<blockquote><p>一种产生随机字符的方法是，请一位新手退出Vim。</p></blockquote>
<p>于是，话题被正式岔到在场童鞋们都不会的 Emacs 上了。</p>
<p>李凯说</p>
<blockquote><p>我退出Emacs的方式是，且到另一个终端，然后 kill 那个 Emacs 进程。</p></blockquote>
<p>好吧，他确实比较狠，我当场表示，当年我的操作比这个善良一些——</p>
<blockquote><p>我是用的 Ctrl-z，放到后台，然后干掉的。</p></blockquote>
<p>Colyli 童鞋不甘寂寞，问</p>
<blockquote><p>Ctrl-d 行不行？</p></blockquote>
<p>但这个方法当场被其他童鞋否定了。</p>
<p>各位，你们还有什么更2B一些的方法么。</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/654/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>mmap()和read()哪个快——linuxfb版聚上谈论的开发中的常见误解与陷阱</title>
		<link>http://wangxu.me/blog/p/648</link>
		<comments>http://wangxu.me/blog/p/648#comments</comments>
		<pubDate>Mon, 26 Mar 2012 03:28:30 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linuxfb]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=648</guid>
		<description><![CDATA[本月版聚的规格最后是8人座谈 + 晚饭欢送 hzmangel （@hzmangel, @古月圣）同学南下，座谈比讲幻灯片更轻松了一点，不过，还是讨论了一些严肃问题，很多都是开发中的常见误解和误用。废话少说，一一列出，没列的出是我忘了，各位在场同学请补充。 mmap() 与 read() 哪个快 当Coly（@colyli, @淘泊松）抛出这个问题的时候，我们已经猜到 read() 快了，毕竟我们相信他会说些颠覆理解的东西，而且李凯（@leekayak）童鞋表示，他也听朱延海（@2002年一本漫画闯天涯）说过此事。那么，我们来听听 Coly 的解释： 大家关于“mmap()”更快的认识来自于 read() 是需要内存拷贝的； 当今硬件技术的发展，使得内存拷贝消耗的时间已经极大降低了； 但“mmap()”的开销在于一次  pagefault，这个开销相比而言已经更高了，而且 pagefault 的处理任务现在比以前还更多了； 而且，mmap之后，再有读操作不会经过系统调用，在 LRU 比较最近使用的页的时候不占优势； 于是，普通读情况下（排除反复读之类的文艺与2B读操作），read() 通常会比 mmap() 来得更快。 mmap() 与 brk() 是否都会给分配的内存填0 这来自于李凯同学的一次提问，Coly同学断然否认了在这方面两者的不同，表示，自 kernel 0.9 以来，所有的分给用户的页全是初始化过的，没有用户数据的页一定会给0，这是一个安全问题，内核不会把不属于用户的内容给用户看的。而且，文件系统也是如此，空洞文件在读取未初始化过的文件内容时，返回的也一定是0。 当然，对于用户应用来说，C库提供的 malloc() 有可能会复用内存，而不是每次都从内核取，所以，有可能有未初始化内容。 sprintf() 的误用 提到初始化的时候，Coly 愤愤不平地表示，有童鞋居然这样初始化内存区域： sprintf(buf,&#34;&#34;); 并表示，这一操作的行为是未知、未定义的。我和Bergwolf（@oatgnep, @Bergwolf）、李凯现场测试了一下，在使用 -Wall 开关编译的时候，会报出 WARN，提示使用了空的格式字符串。这是 C 库标准未定义行为的情况，这样使用会导致不可预期的情况出现，为什么不直接给 buf[0] [...]]]></description>
			<content:encoded><![CDATA[<p>本月版聚的规格最后是8人座谈 + 晚饭欢送 hzmangel （@hzmangel, @古月圣）同学南下，座谈比讲幻灯片更轻松了一点，不过，还是讨论了一些严肃问题，很多都是开发中的常见误解和误用。废话少说，一一列出，没列的出是我忘了，各位在场同学请补充。</p>
<h3>mmap() 与 read() 哪个快</h3>
<p>当Coly（@colyli, @淘泊松）抛出这个问题的时候，我们已经猜到 read() 快了，毕竟我们相信他会说些颠覆理解的东西，而且李凯（<a href="http://weibo.com/11803445" target="_blank">@leekayak</a>）童鞋表示，他也听朱延海（@2002年一本漫画闯天涯）说过此事。那么，我们来听听 Coly 的解释：</p>
<ul>
<li>大家关于“mmap()”更快的认识来自于 read() 是需要内存拷贝的；</li>
<li>当今硬件技术的发展，使得内存拷贝消耗的时间已经极大降低了；</li>
<li>但“mmap()”的开销在于一次  pagefault，这个开销相比而言已经更高了，而且 pagefault 的处理任务现在比以前还更多了；</li>
<li>而且，mmap之后，再有读操作不会经过系统调用，在 LRU 比较最近使用的页的时候不占优势；</li>
<li>于是，普通读情况下（排除反复读之类的文艺与2B读操作），read() 通常会比 mmap() 来得更快。</li>
</ul>
<h3>mmap() 与 brk() 是否都会给分配的内存填0</h3>
<p>这来自于李凯同学的一次提问，Coly同学断然否认了在这方面两者的不同，表示，自 kernel 0.9 以来，所有的分给用户的页全是初始化过的，没有用户数据的页一定会给0，这是一个安全问题，内核不会把不属于用户的内容给用户看的。而且，文件系统也是如此，空洞文件在读取未初始化过的文件内容时，返回的也一定是0。</p>
<p>当然，对于用户应用来说，C库提供的 malloc() 有可能会复用内存，而不是每次都从内核取，所以，有可能有未初始化内容。</p>
<h3>sprintf() 的误用</h3>
<p>提到初始化的时候，Coly 愤愤不平地表示，有童鞋居然这样初始化内存区域：</p>
<pre class="brush: c; gutter: true">sprintf(buf,&quot;&quot;);</pre>
<p>并表示，这一操作的行为是未知、未定义的。我和Bergwolf（@oatgnep, @Bergwolf）、李凯现场测试了一下，在使用 -Wall 开关编译的时候，会报出 WARN，提示使用了空的格式字符串。这是 C 库标准未定义行为的情况，这样使用会导致不可预期的情况出现，为什么不直接给 buf[0] 赋值 &#8216;\0&#8242; 呢。</p>
<h3>memset() 初始化内存有什么问题（以及硬盘的FUA/DPO）</h3>
<p>在场童鞋表示，他们都不会这么写 sprintf()，hzmangel 童鞋表示，他会用 memset() 填 0，于是，又引出了 Coly 的话题。他表示，这样操作在正确性上没有问题，但是会破坏 Cache Line，这些 0 区域将来会被重新写入，是完全没有读意义的，如果他们冲掉了正在很热的被访问的 Cache 中的内容，对于那块内存的访问可能对运行时间有严重的影响。所以，如果一定要写入，最好能够告诉 CPU，默默地写入，不要干扰 L1 Cache，这样可能会让写入更慢，但如果同时有其他 VIP 读 Cache 的内容的话，会因此受益。<del>（怎么干我忘了，谁告诉我哈）</del></p>
<p>Update：Bergwolf 提醒，这一绕过 Cache 的手段称为<em> non-temporal write</em>，详见这里：http://lwn.net/Articles/255364/</p>
<p>同时，对磁盘的访问也是如此，某些操作不希望写入<strong>硬盘的</strong>Cache，防止影响读取告诉缓存的数据，这样的写操作可以利用 SCSI 的 FUA/DPO 标识，在新内核中，对于支持 FUA/DPO 的设备，Ext4的 journal 会使用这种方式写入，而非 barrier，从而提高性能。</p>
<h3>nanosleep() 的开销在新 kernel 上为什么会变大（任何Sleep都会至少睡1毫秒？）</h3>
<p>Coly 同学还提到了在他们的新 Kernel 上，老应用遇到的新问题。其中之一是某应用抱怨 sleep 开销变大，追查下去，是有四个线程频繁地 nanosleep 10 微秒，导致抢锁造成的。</p>
<blockquote><p>“关于 sleep 一次至少会消耗1-2毫秒的认识早已经过时了”</p></blockquote>
<p>这个问题来自于早期程序员们坚信，sleep会让出CPU，由于调度问题，会有至少1-2毫秒的消耗，于是，甚至会有人用 sleep(0)。但是，高精度计时器（HPET）的引入使得 sleep 的精度已经大幅提升了，你要10微秒，就会给你 10 微妙，于是，锁的时候的 spinlock 争抢变得异常激烈了……</p>
<p>这个故事告诉我们，那些没有明确承诺过的 feature，也会随着时间的推移，悄悄地消失，成为陷阱，要么避开不用，要么总是留意。</p>
<h3>iowait% 大了，是否是开销就变大了</h3>
<p>这也是一个新 kernel 带来的问题，hadoop 运维童鞋会观测到 iowait 比原来的老 kernel 高了 10% 以上，这个究竟是不是问题呢。Coly告诉我们，请看看运行时间——实际任务的运行时间会快 10%……这是为什么呢？</p>
<p>这个，解释下 wait time 是怎么计算的：内核每次采样看每个 CPU 的状态，如果 CPU 上是 idle，而且有任务在等 IO，就标记为 wait，那么，假设有16个CPU，如果有8个任务，分到16个CPU上，一直等IO，就是 50%，而如果有10个任务，分到两个 CPU上，就是 12.5%。这说明了什么问题呢——wait 并不全面反映等 IO 的严重性，新 kernel 更倾向于均匀地把任务分到更多 CPU 上，于是看起来 wait 值就高了。</p>
<p>这涉及到一个更科学的数据观的问题——你更关注的应该是任务的执行时间和效率、throughput、qps，而不是 CPU 的 wait time。</p>
<p>另外，iowait 时间是从 idle 中分化出来的，某些老的监控程序会直接用 （100% &#8211; idle%）当成 CPU 占用率，在 iowait 独立出去之后，会显得占用率变高。</p>
<h3>其他</h3>
<p>已经写了不少了，其他的不是我不想写，是想不起来了……请补充啊。</p>
<p>另外，Coly 强烈感谢了马涛（@淘泊瑜）为首的淘宝内核组童鞋们（羡慕嫉妒恨地说，他们还有美女 kernel 程序员……），作为国内互联网公司内，并入主线的 kernel patch 量当之无愧的老大，他们也是我们版聚的很多话题的来源，linuxfb 也感谢你们。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/648/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>生日快乐，斯屹</title>
		<link>http://wangxu.me/blog/p/641</link>
		<comments>http://wangxu.me/blog/p/641#comments</comments>
		<pubDate>Tue, 20 Mar 2012 07:07:09 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[siyi]]></category>
		<category><![CDATA[家庭]]></category>
		<category><![CDATA[照片]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=641</guid>
		<description><![CDATA[今天是斯屹的四岁生日，祝你生日快乐，也祝你妈妈青春永驻 &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>今天是斯屹的四岁生日，祝你生日快乐，也祝你妈妈青春永驻</p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-1.jpg"><img class="aligncenter size-medium wp-image-642" title="siyi-4years-1" src="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-1-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-2.jpg"><img class="aligncenter size-medium wp-image-643" title="siyi-4years-2" src="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-2-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-3.jpg"><img class="aligncenter size-medium wp-image-644" title="siyi-4years-3" src="http://wangxu.me/blog/wp-content/uploads/2012/03/siyi-4years-3-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/641/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>列出某一CPU上跑的所有进程/线程</title>
		<link>http://wangxu.me/blog/p/638</link>
		<comments>http://wangxu.me/blog/p/638#comments</comments>
		<pubDate>Fri, 09 Mar 2012 10:51:16 +0000</pubDate>
		<dc:creator>gnawux</dc:creator>
				<category><![CDATA[scripts]]></category>
		<category><![CDATA[affinity]]></category>
		<category><![CDATA[cmdline]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[PS]]></category>
		<category><![CDATA[psr]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://wangxu.me/blog/?p=638</guid>
		<description><![CDATA[比如 CPU2 上的： ps -eLo pid,psr,command &#124;sed -ne &#039;/^\W\+[0-9]\+\W\+2\W\+/p&#039; 嗯，后面 sed 匹配串里选第几个CPU，嗯前面的参数里，psr 是 CPU 号，嗯。 &#160;]]></description>
			<content:encoded><![CDATA[<p>比如 CPU2 上的：</p>
<pre class="brush: bash; gutter: true">ps -eLo pid,psr,command |sed -ne &#039;/^\W\+[0-9]\+\W\+2\W\+/p&#039;</pre>
<p>嗯，后面 sed 匹配串里选第几个CPU，嗯前面的参数里，psr 是 CPU 号，嗯。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangxu.me/blog/p/638/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.780 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-06-01 23:29:28 -->

