<?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>Sigma</title>
	<atom:link href="http://www.sigma.me/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sigma.me</link>
	<description>work hard,play hard</description>
	<lastBuildDate>Wed, 23 Apr 2014 05:49:39 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.4</generator>
	<item>
		<title>西北行</title>
		<link>http://www.sigma.me/2014/04/14/%e8%a5%bf%e5%8c%97%e8%a1%8c.html</link>
		<comments>http://www.sigma.me/2014/04/14/%e8%a5%bf%e5%8c%97%e8%a1%8c.html#comments</comments>
		<pubDate>Mon, 14 Apr 2014 11:49:18 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[旅行]]></category>
		<category><![CDATA[嘉峪关]]></category>
		<category><![CDATA[张掖]]></category>
		<category><![CDATA[敦煌]]></category>
		<category><![CDATA[西北]]></category>
		<category><![CDATA[酒泉]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174425</guid>
		<description><![CDATA[上周，去了趟大西北，虽然很多地方应该夏天去，去的不是时候，但是也有好处，就是景点人很少，可以真正看景，而不是看人。 刚到吃的达记驴肉黄面，黄面和酱都不错 敦煌第一站，莫高窟。莫高窟里面是不允许拍照的，只有两张外景照。 敦煌第二站，鸣沙山和月牙泉，可惜去的有点晚，没能登上月牙泉旁边山顶看月牙泉整体。 玉门关，鬼城雅丹，汉长城，西千佛洞。 张掖马蹄寺。夏天去的话能看到草原，雪山，非常不错。 张掖七彩丹霞，很漂亮，不过前提是有好天气，这些照片有时后期过的。。。 张掖冰沟丹霞。冰沟丹霞是个无人区，那天只有我们几个人进去。七彩丹霞以色彩取胜，而冰沟丹霞以形取胜。 嘉峪关七一冰川，也很少人，海拔4300，号称是亚洲离城市最近的冰川。全景图猛击可以放大。 原图较大，7360 × 4912 pixels。请猛击 这里 下载。]]></description>
				<content:encoded><![CDATA[<p>上周，去了趟大西北，虽然很多地方应该夏天去，去的不是时候，但是也有好处，就是景点人很少，可以真正看景，而不是看人。</p>
<p>刚到吃的达记驴肉黄面，黄面和酱都不错</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15461.jpg"><img class="alignleft size-medium wp-image-1174506" title="DSC_1546" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15461-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15461-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_15461-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_15461-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><span id="more-1174425"></span><br />
<a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15441.jpg"><img class="alignleft size-medium wp-image-1174507" title="DSC_1544" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15441-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_15441-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_15441-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_15441-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>敦煌第一站，莫高窟。莫高窟里面是不允许拍照的，只有两张外景照。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16222.jpg"><img class="alignleft size-medium wp-image-1174512" title="DSC_1622" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16222-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16222-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_16222-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_16222-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16071.jpg"><img class="alignleft size-medium wp-image-1174513" title="DSC_1607" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16071-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_16071-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_16071-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_16071-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>敦煌第二站，鸣沙山和月牙泉，可惜去的有点晚，没能登上月牙泉旁边山顶看月牙泉整体。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1672_22.jpg"><img class="alignleft size-medium wp-image-1174516" title="DSC_1672_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1672_22-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1672_22-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1672_22-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1672_22-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC0603_21.jpg"><img class="alignleft size-medium wp-image-1174517" title="_DSC0603_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC0603_21-600x398.jpg" alt="" width="600" height="398" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC0603_21-600x398.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0603_21-150x99.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0603_21-1024x680.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC0607_21.jpg"><img class="alignleft size-medium wp-image-1174518" title="_DSC0607_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC0607_21-600x398.jpg" alt="" width="600" height="398" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC0607_21-600x398.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0607_21-150x99.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0607_21-1024x680.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC0773_21.jpg"><img class="alignleft size-medium wp-image-1174519" title="_DSC0773_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC0773_21-600x398.jpg" alt="" width="600" height="398" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC0773_21-600x398.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0773_21-150x99.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC0773_21-1024x680.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC09021.jpg"><img class="alignleft size-medium wp-image-1174520" title="_DSC0902" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC09021-600x398.jpg" alt="" width="600" height="398" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC09021-600x398.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC09021-150x99.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC09021-1024x680.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>玉门关，鬼城雅丹，汉长城，西千佛洞。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1901_21.jpg"><img class="alignleft size-medium wp-image-1174522" title="DSC_1901_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1901_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1901_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1901_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1901_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1968_21.jpg"><img class="alignleft size-medium wp-image-1174523" title="DSC_1968_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1968_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_1968_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1968_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_1968_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2040_21.jpg"><img class="alignleft size-medium wp-image-1174524" title="DSC_2040_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2040_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2040_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2040_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2040_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2053_22.jpg"><br />
<img class="alignleft size-medium wp-image-1174525" title="DSC_2053_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2053_22-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2053_22-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2053_22-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2053_22-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2054_21.jpg"><img class="alignleft size-medium wp-image-1174526" title="DSC_2054_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2054_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2054_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2054_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2054_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2081_21.jpg"><img class="alignleft size-medium wp-image-1174527" title="DSC_2081_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2081_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2081_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2081_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2081_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_21461.jpg"><img class="alignleft size-medium wp-image-1174528" title="DSC_2146" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_21461-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_21461-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_21461-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_21461-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>张掖马蹄寺。夏天去的话能看到草原，雪山，非常不错。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2176_21.jpg"><img class="alignleft size-medium wp-image-1174530" title="DSC_2176_2" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2176_21-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_2176_21-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2176_21-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_2176_21-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22131.jpg"><img class="alignleft size-medium wp-image-1174531" title="DSC_2213" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22131-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22131-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22131-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22131-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22461.jpg"><img class="alignleft size-medium wp-image-1174532" title="DSC_2246" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22461-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22461-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22461-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22461-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22721.jpg"><img class="alignleft size-medium wp-image-1174533" title="DSC_2272" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22721-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_22721-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22721-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_22721-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>张掖七彩丹霞，很漂亮，不过前提是有好天气，这些照片有时后期过的。。。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24442.jpg"><img class="alignleft size-medium wp-image-1174538" title="DSC_2444" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24442-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24442-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24442-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24442-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24431.jpg"><img class="alignleft size-medium wp-image-1174537" title="DSC_2443" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24431-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24431-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24431-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24431-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24161.jpg"><img class="alignleft size-medium wp-image-1174536" title="DSC_2416" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24161-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24161-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24161-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24161-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_23912.jpg"><img class="alignleft size-medium wp-image-1174535" title="DSC_2391" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_23912-600x384.jpg" alt="" width="600" height="384" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_23912-600x384.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_23912-150x96.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_23912-1024x656.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24631.jpg"><img class="alignleft size-medium wp-image-1174539" title="DSC_2463" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24631-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_24631-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24631-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_24631-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>张掖冰沟丹霞。冰沟丹霞是个无人区，那天只有我们几个人进去。七彩丹霞以色彩取胜，而冰沟丹霞以形取胜。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27341.jpg"><img class="alignleft size-medium wp-image-1174541" title="DSC_2734" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27341-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27341-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_27341-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_27341-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
<a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27761.jpg"><img class="alignleft size-medium wp-image-1174542" title="DSC_2776" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27761-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_27761-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_27761-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_27761-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28044.jpg"><img class="alignleft size-medium wp-image-1174549" title="DSC_2804" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28044-600x899.jpg" alt="" width="600" height="899" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28044-600x899.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28044-100x150.jpg 100w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28044-1024x1534.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
<a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28061.jpg"><img class="alignleft size-medium wp-image-1174544" title="DSC_2806" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28061-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28061-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28061-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28061-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28251.jpg"><img class="alignleft size-medium wp-image-1174545" title="DSC_2825" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28251-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28251-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28251-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28251-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28351.jpg"><img class="alignleft size-medium wp-image-1174546" title="DSC_2835" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28351-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28351-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28351-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28351-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
<a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28511.jpg"><img class="alignleft size-medium wp-image-1174547" title="DSC_2851" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28511-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_28511-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28511-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_28511-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>嘉峪关七一冰川，也很少人，海拔4300，号称是亚洲离城市最近的冰川。全景图猛击可以放大。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2014/04/DSC_32711.jpg"><img class="alignleft size-medium wp-image-1174550" title="DSC_3271" src="http://www.sigma.me/wp-content/uploads/2014/04/DSC_32711-600x400.jpg" alt="" width="600" height="400" srcset="http://www.sigma.me/wp-content/uploads/2014/04/DSC_32711-600x400.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_32711-150x100.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/DSC_32711-1024x683.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
<a href="http://www.sigma.me/wp-content/uploads/2014/04/20140408_qiyibingchuan21.jpg"><img src="http://www.sigma.me/wp-content/uploads/2014/04/20140408_qiyibingchuan21-600x120.jpg" alt="" title="20140408_qiyibingchuan2" width="600" height="120" class="alignleft size-medium wp-image-1174561" srcset="http://www.sigma.me/wp-content/uploads/2014/04/20140408_qiyibingchuan21-600x120.jpg 600w, http://www.sigma.me/wp-content/uploads/2014/04/20140408_qiyibingchuan21-150x30.jpg 150w, http://www.sigma.me/wp-content/uploads/2014/04/20140408_qiyibingchuan21-1024x205.jpg 1024w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
原图较大，7360 × 4912 pixels。请猛击 <a href="http://www.sigma.me/gansu.zip">这里</a> 下载。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2014/04/14/%e8%a5%bf%e5%8c%97%e8%a1%8c.html/feed</wfw:commentRss>
		<slash:comments>5624</slash:comments>
		</item>
		<item>
		<title>debian包的结构和解包打包-从打包ubuntu12.10 linuxqq说起</title>
		<link>http://www.sigma.me/2013/01/09/debian%e5%8c%85%e7%9a%84%e7%bb%93%e6%9e%84%e5%92%8c%e8%a7%a3%e5%8c%85%e6%89%93%e5%8c%85-%e4%bb%8e%e6%89%93%e5%8c%85ubuntu12-10-linuxqq%e8%af%b4%e8%b5%b7.html</link>
		<comments>http://www.sigma.me/2013/01/09/debian%e5%8c%85%e7%9a%84%e7%bb%93%e6%9e%84%e5%92%8c%e8%a7%a3%e5%8c%85%e6%89%93%e5%8c%85-%e4%bb%8e%e6%89%93%e5%8c%85ubuntu12-10-linuxqq%e8%af%b4%e8%b5%b7.html#comments</comments>
		<pubDate>Wed, 09 Jan 2013 12:48:31 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174411</guid>
		<description><![CDATA[作为2B青年，果断在mac下装了linux。今天想装QQ，发现报错了。 daohoo@daohoo-mbp:~/Downloads$ sudo dpkg -i linuxqq_v1.0.2-beta1_i386.deb [sudo] password for daohoo: dpkg: error processing linuxqq_v1.0.2-beta1_i386.deb (--install): parsing file '/var/lib/dpkg/tmp.ci/control' near line 7 package 'linuxqq': error in Version string 'v1.0.2-beta1': version number does not start with digit Errors were encountered while processing: linuxqq_v1.0.2-beta1_i386.deb 根据错误信息显示，不能安装的原因是新版的ubuntu要求版本号为数字开头，SB的腾讯却用v开头。因此，我猜想，只要重新打包即可（之前我通过重新打包的方法，也改过android QQ的尾巴）。过程如下： 1.ar解包： daohoo@daohoo-mbp:~/Downloads/linuxqq$ ar vx linuxqq_1.0.2_i386.deb x - debian-binary x - control.tar.gz x [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>作为2B青年，果断在mac下装了linux。今天想装QQ，发现报错了。</p>
<pre class="brush: actionscript3; gutter: true">daohoo@daohoo-mbp:~/Downloads$ sudo dpkg -i linuxqq_v1.0.2-beta1_i386.deb
[sudo] password for daohoo:
dpkg: error processing linuxqq_v1.0.2-beta1_i386.deb (--install):
 parsing file '/var/lib/dpkg/tmp.ci/control' near line 7 package 'linuxqq':
 error in Version string 'v1.0.2-beta1': version number does not start with digit
Errors were encountered while processing:
 linuxqq_v1.0.2-beta1_i386.deb</pre>
<p>根据错误信息显示，不能安装的原因是新版的ubuntu要求版本号为数字开头，SB的腾讯却用v开头。因此，我猜想，只要重新打包即可（之前我通过重新打包的方法，也改过android QQ的尾巴）。过程如下：</p>
<p>1.ar解包：</p>
<pre class="brush: actionscript3; gutter: true">daohoo@daohoo-mbp:~/Downloads/linuxqq$ ar vx linuxqq_1.0.2_i386.deb
x - debian-binary
x - control.tar.gz
x - data.tar.gz</pre>
<p>2.tar解包control信息：</p>
<pre class="brush: actionscript3; gutter: true">daohoo@daohoo-mbp:~/Downloads/linuxqq$ tar -zxvf control.tar.gz
./
./conffiles
./control</pre>
<p>3.修改control文件：</p>
<pre class="brush: actionscript3; gutter: true">sed -i "s/v1.0/1.0/g" control</pre>
<p>4.重新tar打包control.tar.gz</p>
<pre class="brush: actionscript3; gutter: true">tar -zcvf control.tar.gz ./conffiles ./control</pre>
<p>5.ar重新打包debian包：</p>
<pre class="brush: actionscript3; gutter: true">ar rcs linuxqq.deb debian-binary control.tar.gz data.tar.gz</pre>
<p>6.安装：</p>
<pre class="brush: actionscript3; gutter: true">sudo dpkg -i linuxqq.deb</pre>
<p>BTW:介绍一下关于debian包的结构：<span id="more-1174411"></span></p>
<p>1.解包后得到三个文件：</p>
<pre class="brush: actionscript3; gutter: true">daohoo@daohoo-mbp:~/Downloads/linuxqq$ ls -l
total 4920
-rw-r--r-- 1 daohoo daohoo     442 Jan  9 20:50 control.tar.gz
-rw-r--r-- 1 daohoo daohoo 5027432 Jan  9 20:50 data.tar.gz
-rw-r--r-- 1 daohoo daohoo       4 Jan  9 20:50 debian-binary</pre>
<p>其中：</p>
<p><strong>1.debian-binary：</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<pre class="brush: actionscript3; gutter: true"><strong>daohoo@daohoo-mbp:~/Downloads/linuxqq$ cat debian-binary
2.0</strong></pre>
<p><strong> </strong></p>
<p>&nbsp;</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong>这个文件包含所使用软件包格式的版本号</p>
<p><strong>2.control.tar.gz:</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<pre class="brush: actionscript3; gutter: true"><strong>daohoo@daohoo-mbp:~/Downloads/linuxqq$ tar -zxvf control.tar.gz
./
./conffiles
./control</strong></pre>
<p><strong> </strong></p>
<p>&nbsp;</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<pre class="brush: actionscript3; gutter: true"><strong>daohoo@daohoo-mbp:~/Downloads/linuxqq$ cat control
Package: linuxqq
Priority: extra
Section: Internet
Installed-Size: 6264
Maintainer: Tencent Inc.
Architecture: i386
Version: v1.0.2-beta1
Depends: gtk2.0-binver-2.10.0, libc6, libcairo2, libglib2.0-0, libgtk2.0-0, libpango1.0-0
Description: QQ - The most popular free instant messaging program in China.
 * Chat with more than 590,000,000 people all over the world.
 * Free to download or distribute absolutely.</strong></pre>
<p><strong> </strong></p>
<p>&nbsp;</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p>包含了软件包管理工具所需信息的tarball文件。里面的control文件有版本号以及依赖关系</p>
<p><strong>3.data.tar.gz:</strong></p>
<pre class="brush: actionscript3; gutter: true">daohoo@daohoo-mbp:~/Downloads/linuxqq$ tar -zxvf data.tar.gz
./
./usr/
./usr/bin/
./usr/bin/qq
./usr/share/
./usr/share/tencent/
./usr/share/tencent/qq/
./usr/share/tencent/qq/qq.png
./usr/share/tencent/qq/qq
./usr/share/tencent/qq/res.db
./usr/share/applications/
./usr/share/applications/qq.desktop
./usr/share/doc/
./usr/share/doc/linuxqq/
./usr/share/doc/linuxqq/qq</pre>
<p>这个才是最后真正的安装文件，指明了安装的路径。</p>
<p>最后，上传下打好包在ubuntu12.10可用的linux QQ debian包（出于安全考虑，对debian进行了重新打包）。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2013/01/linuxqq.tar">ubuntu12.10 可用linux QQ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2013/01/09/debian%e5%8c%85%e7%9a%84%e7%bb%93%e6%9e%84%e5%92%8c%e8%a7%a3%e5%8c%85%e6%89%93%e5%8c%85-%e4%bb%8e%e6%89%93%e5%8c%85ubuntu12-10-linuxqq%e8%af%b4%e8%b5%b7.html/feed</wfw:commentRss>
		<slash:comments>7981</slash:comments>
		</item>
		<item>
		<title>Darwin(Mac OS X内核)特有的命令</title>
		<link>http://www.sigma.me/2012/12/05/darwin-mac-os-x-unique-commands.html</link>
		<comments>http://www.sigma.me/2012/12/05/darwin-mac-os-x-unique-commands.html#comments</comments>
		<pubDate>Wed, 05 Dec 2012 03:43:37 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174400</guid>
		<description><![CDATA[Mac OS X的内核是darwin，是一个BSD Unix的内核，相对于原始版本的unix，Apple在上面加了一些自己的命令，其中有些命令还是挺实用的，比如ditto，可以直接拷目录，并且在拷贝时压缩和解压缩（哥一直希望scp也支持压缩和解压缩）。下面是老外整理的一份列表（来源：http://www.matisse.net/osx/darwin_commands.html） Based on OS X 10.4.2, August 2005. Compiled in August 2005 by Matisse Enzer COMMAND(man SEC.) DESCRIPTION INSTALLED LOCATION BuildStrings(1) Programmer tool to generate .h and .r files. /Developer/Tools ConsoleMessage(8) Send a message to SystemStarter. /usr/libexec CpMac(1) Copy files preserving metadata and forks. /Developer/Tools DeRez(1) Decompiles resources (programmer tool) /Developer/Tools DirectoryService(8) [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mac OS X的内核是darwin，是一个BSD Unix的内核，相对于原始版本的unix，Apple在上面加了一些自己的命令，其中有些命令还是挺实用的，比如ditto，可以直接拷目录，并且在拷贝时压缩和解压缩（哥一直希望scp也支持压缩和解压缩）。下面是老外整理的一份列表（来源：<a href="http://www.matisse.net/osx/darwin_commands.html" target="_blank">http://www.matisse.net/osx/darwin_commands.html</a>）</p>
<table border="0" cellspacing="2" cellpadding="3" width="100%">
<tbody>
<tr>
<td><small>Based on OS X 10.4.2, August 2005.</small></td>
<td><small>Compiled in August 2005 by Matisse Enzer</small></td>
<td></td>
</tr>
<tr>
<td>COMMAND(man SEC.)</td>
<td>DESCRIPTION</td>
<td>INSTALLED LOCATION</td>
</tr>
<tr>
<td><code>BuildStrings(1)</code></td>
<td><small>Programmer tool to generate .h and .r files.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>ConsoleMessage(8)</code></td>
<td><small>Send a message to SystemStarter.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>CpMac(1)</code></td>
<td><small>Copy files preserving metadata and forks.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>DeRez(1)</code></td>
<td><small>Decompiles resources (programmer tool)</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>DirectoryService(8)</code></td>
<td><small>DirectoryService daemon. See also dscl(1).</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>GetFileInfo(1)</code></td>
<td><small>Get Mac-only attributes of files &amp; directories.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>MergePef(1)</code></td>
<td><small>Programmer tool. Merges &#8220;PowerPC </small><small>Executable Format&#8221; (PEF) files.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>MvMac(1)</code></td>
<td><small>Move files, preserving metadata and forks.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>PPCExplain(1)</code></td>
<td><small>Programmer help for PPC assembly code.</small></td>
<td><code>/Developer/Tools<span id="more-1174400"></span></code></td>
</tr>
<tr>
<td><code>ResMerger(1)</code></td>
<td><small>Programmer tool for merging resource data.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>Rez(1)</code></td>
<td><small>Programmer tool to compile resources.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>RezWack(1)</code></td>
<td><small>Programmer tool to flatten file.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>SetFile(1)</code></td>
<td><small>Set Mac attributes of files and directories.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>SplitForks(1)</code></td>
<td><small>Divide two-fork HFS file into AppleDoubleresource and data files.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>StartupItemContext(8)</code></td>
<td><small>Execute a program in StartupItem context.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>SystemStarter(8)</code></td>
<td><small>Start, stop, and restart system services.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>UnRezWack(1)</code></td>
<td><small>Split a RezWack file into separate files.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>WaitingForLoginWindow(8)</code></td>
<td><small>Draws to the screen until LoginWindowis ready.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>agvtool(8)</code></td>
<td><small>Apple-generic versioning tool for Xcode.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>asr(8)</code></td>
<td><small>Apple Software Restore; copy volumes(e.g. from disk images)</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>authopen(1)</code></td>
<td><small>Open file with OS X authorization.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>bless(8)</code></td>
<td><small>Set volume bootability and startupdisk options.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>blued(8)</code></td>
<td><small>The Mac OS X bluetooth daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>bootpd(8)</code></td>
<td><small>DHCP/BOOTP/NetBoot server.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>cd9660.util(8)</code></td>
<td><small>ISO 9660 file system utility.</small></td>
<td><code>/System/Library/Filesystems/cd9660.fs</code></td>
</tr>
<tr>
<td><code>chkpasswd(8)</code></td>
<td><small>Verifies user password againstvarious systems.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>coreaudiod(1)</code></td>
<td><small>Daemon for CoreAudio related purposes.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>crashdump(8)</code></td>
<td><small>Crash reporting tool.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>crashreporterd(8)</code></td>
<td><small>Crash detection and panic logging daemon.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>create_nidb(8)</code></td>
<td><small>Creates a NetInfo database from flat files.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>defaults(1)</code></td>
<td><small>Read and set Mac OS X user defaults.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>diskarbitrationd(8)</code></td>
<td><small>Disk arbitration daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>disklabel(8)</code></td>
<td><small>Manipulate and query Apple Label disk label.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>diskutil(8)</code></td>
<td><small>Modify, verify and repair local disks.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>ditto(1)</code></td>
<td><small>Copy files and directories, provides Mac-specific options not available in cp.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>dnsextd(8)</code></td>
<td><small>BIND Extension Daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>dscl(1)</code></td>
<td><small>Directory Service command line utility.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>dsconfigad(8)</code></td>
<td><small>Configure the Active Directory Plug-in.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>dsconfigldap(1)</code></td>
<td><small>Add/remove LDAP server configurations.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>dseditgroup(1)</code></td>
<td><small>Manipulate groups in Directory Service.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>dsenableroot(8)</code></td>
<td><small>Enable or disable the root account.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>dsidentity(1)</code></td>
<td><small>Add/remove &#8220;identity&#8221; (non-login) user accounts.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>fibreconfig(8)</code></td>
<td><small>Configure settings for Fibre Channel disks.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>fsaclctl (no man page)</code></td>
<td><small>Enable/disable Access Control Lists (ACLs).</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>hdid(8)</code></td>
<td><small>Disk Image loading and decompression.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>hdiutil(1)</code></td>
<td><small>Manipulate disk images (preferred over hdid.)</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>hfs.util(8)</code></td>
<td><small>HFS/HFS+ file system utility.</small></td>
<td><code>/System/Library/Filesystems/hfs.fs</code></td>
</tr>
<tr>
<td><code>ifcstart(8)</code></td>
<td><small>Rebuilds file caches used by International</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td></td>
<td><small>components.</small></td>
<td></td>
</tr>
<tr>
<td><code>installer(8)</code></td>
<td><small>System software and package installer tool.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>kerberosautoconfig(8)</code></td>
<td><small>Configure Kerberos for Open Directory.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>kextcache(8)</code></td>
<td><small>Creates or updates kernel extension caches.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>kextd(8)</code></td>
<td><small>Loads kernel extensions on demand.</small></td>
<td><code>/usr/libexec/kextd</code></td>
</tr>
<tr>
<td><code>kextload(8)</code></td>
<td><small>Loads, validates, and generates symbols for a kernel extension.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>kextstat(8)</code></td>
<td><small>Display status of dynamically loaded kext&#8217;s.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>kextunload(8)</code></td>
<td><small>Terminates and unloads kernel extensions.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>kuncd(8)</code></td>
<td><small>The Kernel User Notification Center daemon.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>launchctl(1)</code></td>
<td><small>Command-line interface to launchd.</small></td>
<td><code>/bin</code></td>
</tr>
<tr>
<td><code>launchd(8)</code></td>
<td><small>System wide and per-user daemon/agent manager.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>launchd.conf(5)</code></td>
<td><small>Commands for launchctl to run when launchd starts.</small></td>
<td><code>man page, not a command.</code></td>
</tr>
<tr>
<td><code>launchd.plist(5)</code></td>
<td><small>Documentation for launchd configuration files.</small></td>
<td><code>man page, not a command.</code></td>
</tr>
<tr>
<td><code>launchd_debugd(8)</code></td>
<td><small>Simple HTTP server to display launchd job data.</small></td>
<td><code>See man page.</code></td>
</tr>
<tr>
<td><code>launchproxy(8)</code></td>
<td><small>Provides inetd emulation for launchd.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>lookupd(8)</code></td>
<td><small>Directory information and cache daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>mdcheckschema(1)</code></td>
<td><small>Schema validation tool for mdimport files.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>mdfind(1)</code></td>
<td><small>Command-line version of Spotlight search.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>mdimport(1)</code></td>
<td><small>Import file hierarchies into the Spotlight datastore,</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>mdls(1)</code></td>
<td><small>Lists the metadata attributes for the specified file.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>mdutil(1)</code></td>
<td><small>Manage the metadata stores used by Spotlight.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>memberd(8)</code></td>
<td><small>Group membership resolution daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>memberd.plist</code></td>
<td><small>File located at /usr/share/man/man8/memberd.plist</small></td>
<td><code>Not a command.</code></td>
</tr>
<tr>
<td><code>mkextunpack(8)</code></td>
<td><small>Programmer tool for multikext (mkext) archives.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>mount_cddafs(8)</code></td>
<td><small>Mount an Audio CD.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>newfs_hfs(8)</code></td>
<td><small>Construct a new HFS Plus (HFS+) file system.</small></td>
<td><code>/sbin</code></td>
</tr>
<tr>
<td><code>nibtool(1)</code></td>
<td rowspan="2"><small>Programmer tool to print, verify, and update nib files(nib files contain user interface objects.)</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><code>niutil(1)</code></td>
<td><small>NetInfo utility &#8211; read and write NetInfo data.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>ntfs.util(8)</code></td>
<td><small>NTFS file system utility.</small></td>
<td><code>/System/Library/Filesystems/ntfs.fs</code></td>
</tr>
<tr>
<td><code>osacompile(1)</code></td>
<td><small>Compile AppleScripts and other OSA language scripts.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>osalang(1)</code></td>
<td><small>Show information about installed OSA languages.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>osascript(1)</code></td>
<td><small>Execute AppleScripts and other OSA language scripts.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>pbcopy(1)</code></td>
<td><small>Copy from STDIN to the pasteboard (Clipboard.)</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>pbpaste(1)</code></td>
<td><small>Paste from the pasteboard (Clipboard) to STDOUT.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>pbhelpindexer(1)</code></td>
<td><small>Index the HTML documentation for Developer Tools.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>pbprojectdump</code></td>
<td><small>Takes an Xcode project file and outputs a more nestedversion of the project structure.</small></td>
<td><code>No man page.</code></td>
</tr>
<tr>
<td><code>pl(1)</code></td>
<td><small>Converts between ASCII and binary plist formats.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>plist(5)</code></td>
<td><small>Property list format documentation.</small></td>
<td><code>Not a command.</code></td>
</tr>
<tr>
<td><code>plutil(1)</code></td>
<td><small>Check property list syntax and/or convert format.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>pmset(1)</code></td>
<td><small>Modify power management settings.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>say(1)</code></td>
<td><small>Convert text to audible speech.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>screencapture(1)</code></td>
<td><small>Capture screenshots to file or Clipboard.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>screenreaderd(8)</code></td>
<td><small>VoiceOver daemon, gives audible feedback on useractivity and responds to user requests forVoiceOver feedback.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>scsid(8)</code></td>
<td><small>SCSI subsystem daemon.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>securityd(1)</code></td>
<td><small>Security context daemon for Authorization and cryptographic operations.</small></td>
<td><code>/usr/libexec</code></td>
</tr>
<tr>
<td><code>softwareupdate(8)</code></td>
<td><small>Mac OS X System Software Update tool.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>sw_vers(1)</code></td>
<td><small>Show operating system version information.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>system_profiler(8)</code></td>
<td><small>Show system hardware and software configuration.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>textutil(1)</code></td>
<td><small>Convert between various file formats.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>ufs.util(8)</code></td>
<td><small>UFS file system utility</small></td>
<td><code>/System/Library/Filesystems/ufs.fs</code></td>
</tr>
<tr>
<td><code>uninstall-devtools.pl(8)</code></td>
<td><small>Remove Xcode Tools or Developer installation.</small></td>
<td><code>/Developer/Tools</code></td>
</tr>
<tr>
<td><code>uuidgen(1)</code></td>
<td><small>Utility to generate a new Universally Unique ID (UUID.)</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>vpnd(8)</code></td>
<td><small>Mac OS X VPN service daemon.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td><code>wait4path(1)</code></td>
<td><small>Wait for given path to show up in the file system.</small></td>
<td><code>/bin</code></td>
</tr>
<tr>
<td><code>xcodebuild(1)</code></td>
<td><small>Build an Xcode project.</small></td>
<td><code>/usr/bin</code></td>
</tr>
<tr>
<td><code>xgridctl(8)</code></td>
<td><small>Xgrid daemons control interface.</small></td>
<td><code>/usr/sbin</code></td>
</tr>
<tr>
<td colspan="3"></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/12/05/darwin-mac-os-x-unique-commands.html/feed</wfw:commentRss>
		<slash:comments>27192</slash:comments>
		</item>
		<item>
		<title>Ubuntu/Debian从源码编译debian包</title>
		<link>http://www.sigma.me/2012/12/01/ubuntu-compile-src-to-debian.html</link>
		<comments>http://www.sigma.me/2012/12/01/ubuntu-compile-src-to-debian.html#comments</comments>
		<pubDate>Sat, 01 Dec 2012 07:36:54 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174396</guid>
		<description><![CDATA[Ubuntu源里有的软件： ubuntu源里有的软件，理论上不用自己编译debian包，但是有时候，我们想对源里的软件做些修改，打些patch，就可以用这种方法，具体为： 1.获取源文件 源码包中通常包含3个文件，分别以dsc，orig.tar.gz和diff.gz为后缀名。 其中 .orig.tar.gz 是软件原始源码包，没有经过任何修改； .diff.gz 是将源码包 debian 化的文件，包含一些补丁和编译规则；.dsc 描述了源码包的信息，上述命令是解压源码和打补丁的综合操作。 使用apt-get source命令来获取源码包，它会将源码包下载到用户当前目录，并在命令执行过程中，调用dpkg-source命令，根据dsc文件中的信息，将源码包解压到同名目录中，应用程序的源代码就在这里面。 sudo apt-get source tree 另外，有时想用的源码包不是最新版本的，而是一些老版本。可以在新立得里面先强制版本。之后在执行命令。或者直接去old_archive.ubuntu.com上找老版本的dsc,orig.tar.gz,diff.gz等。 要强调的是，在下载源码包前，必须确保安装了dpkg-dev（执行”apt-get install dpkg-dev”来安装），否则，只会下载源码包的3个文件，但不会解压缩源码包。当然你也可以自己用dpkg-source命令去解压缩源码包： dpkg-source -x tree-1.5.1.2.dsc 2.获取依赖文件 在编译源码包前，需要安装具有依赖关系的相关软件包。使用apt-get build-dep命令可以主动获取并安装所有相关的软件包。 sudo apt-get build-dep tree 3.打补丁或者修改源码： 进入解压后的目录，直接修改源码，或者用补丁文件打上补丁。 patch -p0 &#60; xxx.patch 其中-p0选项表示是从patch的diff文件路径的第一层开始找。 4.编译源码包 首先进入源码所在目录，使用dpkg-buildpackage命令来编译源码包，它会将生成的Deb软件包放置在上层目录中。 cd tree-1.5.1.2 sudo dpkg-buildpackage 这样就会在当前目录编译生成可执行文件，并在上层目录生成tree-1.5.1.2-1_i386.deb 第三方软件： 这类软件是指ubuntu源里没有的第三方软件，制作成debian包可以供别人安装。具体方法为： 1.首先需要安装dh-make: sudo apt-get install dh-make 2.下载第三方源码并解压并作一些预处理 $ [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>Ubuntu源里有的软件：</h2>
<p>ubuntu源里有的软件，理论上不用自己编译debian包，但是有时候，我们想对源里的软件做些修改，打些patch，就可以用这种方法，具体为：</p>
<p><strong>1.获取源文件</strong></p>
<p>源码包中通常包含3个文件，分别以dsc，orig.tar.gz和diff.gz为后缀名。<br />
其中 .orig.tar.gz 是软件原始源码包，没有经过任何修改； .diff.gz 是将源码包 debian 化的文件，包含一些补丁和编译规则；.dsc 描述了源码包的信息，上述命令是解压源码和打补丁的综合操作。<br />
使用apt-get source命令来获取源码包，它会将源码包下载到用户当前目录，并在命令执行过程中，调用dpkg-source命令，根据dsc文件中的信息，将源码包解压到同名目录中，应用程序的源代码就在这里面。<br />
sudo apt-get source tree<br />
另外，有时想用的源码包不是最新版本的，而是一些老版本。可以在新立得里面先强制版本。之后在执行命令。或者直接去old_archive.ubuntu.com上找老版本的dsc,orig.tar.gz,diff.gz等。<br />
要强调的是，在下载源码包前，必须确保安装了dpkg-dev（执行”apt-get install dpkg-dev”来安装），否则，只会下载源码包的3个文件，但不会解压缩源码包。当然你也可以自己用dpkg-source命令去解压缩源码包：<br />
dpkg-source -x tree-1.5.1.2.dsc<span id="more-1174396"></span></p>
<p><strong>2.获取依赖文件</strong><br />
在编译源码包前，需要安装具有依赖关系的相关软件包。使用apt-get build-dep命令可以主动获取并安装所有相关的软件包。<br />
sudo apt-get build-dep tree</p>
<p><strong>3.打补丁或者修改源码：</strong><br />
进入解压后的目录，直接修改源码，或者用补丁文件打上补丁。<br />
patch -p0 &lt; xxx.patch<br />
其中-p0选项表示是从patch的diff文件路径的第一层开始找。</p>
<p><strong>4.编译源码包</strong><br />
首先进入源码所在目录，使用dpkg-buildpackage命令来编译源码包，它会将生成的Deb软件包放置在上层目录中。<br />
cd tree-1.5.1.2<br />
sudo dpkg-buildpackage<br />
这样就会在当前目录编译生成可执行文件，并在上层目录生成tree-1.5.1.2-1_i386.deb</p>
<h2>第三方软件：</h2>
<p>这类软件是指ubuntu源里没有的第三方软件，制作成debian包可以供别人安装。具体方法为：</p>
<p><strong>1.首先需要安装dh-make:</strong><br />
sudo apt-get install dh-make</p>
<p><strong>2.下载第三方源码并解压并作一些预处理</strong><br />
$ tar xvjf tree-1.5.2.src.tar.bz2 // 解包<br />
$ mv tree tree-1.5.2 // 改目录名为 包名-版本号</p>
<p><strong>3.生成debian目录以及修改配置文件</strong><br />
$ cd tree-1.5.2<br />
$ dh_make -s -e xieyan0811@sina.com.cn -f ../tree-1.5.2.src.tar.bz2 // 生成制作deb包所需的默认信息<br />
此时当前目录下生成了debian目录，此时通常修改两个文件：<br />
修改debian/control文件，配置你的信息，具体字段见参考部分<br />
修改debian/rules脚本，它决定编译参数</p>
<p><strong>4.使用dpkg-buildpackage编译</strong><br />
$ dpkg-buildpackage -rfakeroot<br />
此时可以看到，上层目录中已建立了deb包</p>
<h2>参考资料：</h2>
<p>ubuntu 编译源码包 dsc diff.gz orig.tar.gz：  http://hi.baidu.com/avr_tutorial/item/624a6899b404da81591461da</p>
<p>制作Ubuntu deb包使用方法：http://os.51cto.com/art/201001/176881.htm</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/12/01/ubuntu-compile-src-to-debian.html/feed</wfw:commentRss>
		<slash:comments>4889</slash:comments>
		</item>
		<item>
		<title>Linux on MIPS的syscall及id列表</title>
		<link>http://www.sigma.me/2012/11/02/linux-on-mips-syscall-and-id.html</link>
		<comments>http://www.sigma.me/2012/11/02/linux-on-mips-syscall-and-id.html#comments</comments>
		<pubDate>Fri, 02 Nov 2012 02:41:25 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[沙子]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MIPS]]></category>
		<category><![CDATA[syscall]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174388</guid>
		<description><![CDATA[Linux on MIPS的syscall及id列表： &#60;?xml version="1.0"?&#62; &#60;!-- Copyright (C) 2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. --&#62; &#60;!DOCTYPE feature SYSTEM "gdb-syscalls.dtd"&#62; &#60;!-- This file was generated using the following file: /usr/src/linux/arch/mips/include/asm/unistd.h The [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Linux on MIPS的syscall及id列表：</p>
<pre class="brush: actionscript3; gutter: true">&lt;?xml version="1.0"?&gt;
&lt;!-- Copyright (C) 2011 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.  --&gt;
&lt;!DOCTYPE feature SYSTEM "gdb-syscalls.dtd"&gt;
&lt;!-- This file was generated using the following file:
/usr/src/linux/arch/mips/include/asm/unistd.h
The file mentioned above belongs to the Linux Kernel.  --&gt;
&lt;syscalls_info&gt;
&lt;syscall name="syscall" number="4000"/&gt;
&lt;syscall name="exit" number="4001"/&gt;
&lt;syscall name="fork" number="4002"/&gt;
&lt;syscall name="read" number="4003"/&gt;
&lt;syscall name="write" number="4004"/&gt;
&lt;syscall name="open" number="4005"/&gt;
&lt;syscall name="close" number="4006"/&gt;
&lt;syscall name="waitpid" number="4007"/&gt;
&lt;syscall name="creat" number="4008"/&gt;
&lt;syscall name="link" number="4009"/&gt;
&lt;syscall name="unlink" number="4010"/&gt;
&lt;syscall name="execve" number="4011"/&gt;
&lt;syscall name="chdir" number="4012"/&gt;
&lt;syscall name="time" number="4013"/&gt;
&lt;syscall name="mknod" number="4014"/&gt;
&lt;syscall name="chmod" number="4015"/&gt;
&lt;syscall name="lchown" number="4016"/&gt;
&lt;syscall name="break" number="4017"/&gt;
&lt;syscall name="lseek" number="4019"/&gt;
&lt;syscall name="getpid" number="4020"/&gt;
&lt;syscall name="mount" number="4021"/&gt;
&lt;syscall name="umount" number="4022"/&gt;
&lt;syscall name="setuid" number="4023"/&gt;
&lt;syscall name="getuid" number="4024"/&gt;
&lt;syscall name="stime" number="4025"/&gt;
&lt;syscall name="ptrace" number="4026"/&gt;
&lt;syscall name="alarm" number="4027"/&gt;
&lt;syscall name="pause" number="4029"/&gt;
&lt;syscall name="utime" number="4030"/&gt;
&lt;syscall name="stty" number="4031"/&gt;
&lt;syscall name="gtty" number="4032"/&gt;
&lt;syscall name="access" number="4033"/&gt;
&lt;syscall name="nice" number="4034"/&gt;
&lt;syscall name="ftime" number="4035"/&gt;
&lt;syscall name="sync" number="4036"/&gt;
&lt;syscall name="kill" number="4037"/&gt;
&lt;syscall name="rename" number="4038"/&gt;
&lt;syscall name="mkdir" number="4039"/&gt;
&lt;syscall name="rmdir" number="4040"/&gt;
&lt;syscall name="dup" number="4041"/&gt;
&lt;syscall name="pipe" number="4042"/&gt;
&lt;syscall name="times" number="4043"/&gt;
&lt;syscall name="prof" number="4044"/&gt;
&lt;syscall name="brk" number="4045"/&gt;
&lt;syscall name="setgid" number="4046"/&gt;
&lt;syscall name="getgid" number="4047"/&gt;
&lt;syscall name="signal" number="4048"/&gt;
&lt;syscall name="geteuid" number="4049"/&gt;
&lt;syscall name="getegid" number="4050"/&gt;
&lt;syscall name="acct" number="4051"/&gt;
&lt;syscall name="umount2" number="4052"/&gt;
&lt;syscall name="lock" number="4053"/&gt;
&lt;syscall name="ioctl" number="4054"/&gt;
&lt;syscall name="fcntl" number="4055"/&gt;
&lt;syscall name="mpx" number="4056"/&gt;
&lt;syscall name="setpgid" number="4057"/&gt;
&lt;syscall name="ulimit" number="4058"/&gt;
&lt;syscall name="umask" number="4060"/&gt;
&lt;syscall name="chroot" number="4061"/&gt;
&lt;syscall name="ustat" number="4062"/&gt;
&lt;syscall name="dup2" number="4063"/&gt;
&lt;syscall name="getppid" number="4064"/&gt;
&lt;syscall name="getpgrp" number="4065"/&gt;
&lt;syscall name="setsid" number="4066"/&gt;
&lt;syscall name="sigaction" number="4067"/&gt;
&lt;syscall name="sgetmask" number="4068"/&gt;
&lt;syscall name="ssetmask" number="4069"/&gt;
&lt;syscall name="setreuid" number="4070"/&gt;
&lt;syscall name="setregid" number="4071"/&gt;
&lt;syscall name="sigsuspend" number="4072"/&gt;
&lt;syscall name="sigpending" number="4073"/&gt;
&lt;syscall name="sethostname" number="4074"/&gt;
&lt;syscall name="setrlimit" number="4075"/&gt;
&lt;syscall name="getrlimit" number="4076"/&gt;
&lt;syscall name="getrusage" number="4077"/&gt;
&lt;syscall name="gettimeofday" number="4078"/&gt;
&lt;syscall name="settimeofday" number="4079"/&gt;
&lt;syscall name="getgroups" number="4080"/&gt;
&lt;syscall name="setgroups" number="4081"/&gt;
&lt;syscall name="symlink" number="4083"/&gt;
&lt;syscall name="readlink" number="4085"/&gt;
&lt;syscall name="uselib" number="4086"/&gt;
&lt;syscall name="swapon" number="4087"/&gt;
&lt;syscall name="reboot" number="4088"/&gt;
&lt;syscall name="readdir" number="4089"/&gt;
&lt;syscall name="mmap" number="4090"/&gt;
&lt;syscall name="munmap" number="4091"/&gt;
&lt;syscall name="truncate" number="4092"/&gt;
&lt;syscall name="ftruncate" number="4093"/&gt;
&lt;syscall name="fchmod" number="4094"/&gt;
&lt;syscall name="fchown" number="4095"/&gt;
&lt;syscall name="getpriority" number="4096"/&gt;
&lt;syscall name="setpriority" number="4097"/&gt;
&lt;syscall name="profil" number="4098"/&gt;
&lt;syscall name="statfs" number="4099"/&gt;
&lt;syscall name="fstatfs" number="4100"/&gt;
&lt;syscall name="ioperm" number="4101"/&gt;
&lt;syscall name="socketcall" number="4102"/&gt;
&lt;syscall name="syslog" number="4103"/&gt;
&lt;syscall name="setitimer" number="4104"/&gt;
&lt;syscall name="getitimer" number="4105"/&gt;
&lt;syscall name="stat" number="4106"/&gt;
&lt;syscall name="lstat" number="4107"/&gt;
&lt;syscall name="fstat" number="4108"/&gt;
&lt;syscall name="iopl" number="4110"/&gt;
&lt;syscall name="vhangup" number="4111"/&gt;
&lt;syscall name="idle" number="4112"/&gt;
&lt;syscall name="vm86" number="4113"/&gt;
&lt;syscall name="wait4" number="4114"/&gt;
&lt;syscall name="swapoff" number="4115"/&gt;
&lt;syscall name="sysinfo" number="4116"/&gt;
&lt;syscall name="ipc" number="4117"/&gt;
&lt;syscall name="fsync" number="4118"/&gt;
&lt;syscall name="sigreturn" number="4119"/&gt;
&lt;syscall name="clone" number="4120"/&gt;
&lt;syscall name="setdomainname" number="4121"/&gt;
&lt;syscall name="uname" number="4122"/&gt;
&lt;syscall name="modify_ldt" number="4123"/&gt;
&lt;syscall name="adjtimex" number="4124"/&gt;
&lt;syscall name="mprotect" number="4125"/&gt;
&lt;syscall name="sigprocmask" number="4126"/&gt;
&lt;syscall name="create_module" number="4127"/&gt;
&lt;syscall name="init_module" number="4128"/&gt;
&lt;syscall name="delete_module" number="4129"/&gt;
&lt;syscall name="get_kernel_syms" number="4130"/&gt;
&lt;syscall name="quotactl" number="4131"/&gt;
&lt;syscall name="getpgid" number="4132"/&gt;
&lt;syscall name="fchdir" number="4133"/&gt;
&lt;syscall name="bdflush" number="4134"/&gt;
&lt;syscall name="sysfs" number="4135"/&gt;
&lt;syscall name="personality" number="4136"/&gt;
&lt;syscall name="afs_syscall" number="4137"/&gt;
&lt;syscall name="setfsuid" number="4138"/&gt;
&lt;syscall name="setfsgid" number="4139"/&gt;
&lt;syscall name="_llseek" number="4140"/&gt;
&lt;syscall name="getdents" number="4141"/&gt;
&lt;syscall name="_newselect" number="4142"/&gt;
&lt;syscall name="flock" number="4143"/&gt;
&lt;syscall name="msync" number="4144"/&gt;
&lt;syscall name="readv" number="4145"/&gt;
&lt;syscall name="writev" number="4146"/&gt;
&lt;syscall name="cacheflush" number="4147"/&gt;
&lt;syscall name="cachectl" number="4148"/&gt;
&lt;syscall name="sysmips" number="4149"/&gt;
&lt;syscall name="getsid" number="4151"/&gt;
&lt;syscall name="fdatasync" number="4152"/&gt;
&lt;syscall name="_sysctl" number="4153"/&gt;
&lt;syscall name="mlock" number="4154"/&gt;
&lt;syscall name="munlock" number="4155"/&gt;
&lt;syscall name="mlockall" number="4156"/&gt;
&lt;syscall name="munlockall" number="4157"/&gt;
&lt;syscall name="sched_setparam" number="4158"/&gt;
&lt;syscall name="sched_getparam" number="4159"/&gt;
&lt;syscall name="sched_setscheduler" number="4160"/&gt;
&lt;syscall name="sched_getscheduler" number="4161"/&gt;
&lt;syscall name="sched_yield" number="4162"/&gt;
&lt;syscall name="sched_get_priority_max" number="4163"/&gt;
&lt;syscall name="sched_get_priority_min" number="4164"/&gt;
&lt;syscall name="sched_rr_get_interval" number="4165"/&gt;
&lt;syscall name="nanosleep" number="4166"/&gt;
&lt;syscall name="mremap" number="4167"/&gt;
&lt;syscall name="accept" number="4168"/&gt;
&lt;syscall name="bind" number="4169"/&gt;
&lt;syscall name="connect" number="4170"/&gt;
&lt;syscall name="getpeername" number="4171"/&gt;
&lt;syscall name="getsockname" number="4172"/&gt;
&lt;syscall name="getsockopt" number="4173"/&gt;
&lt;syscall name="listen" number="4174"/&gt;
&lt;syscall name="recv" number="4175"/&gt;
&lt;syscall name="recvfrom" number="4176"/&gt;
&lt;syscall name="recvmsg" number="4177"/&gt;
&lt;syscall name="send" number="4178"/&gt;
&lt;syscall name="sendmsg" number="4179"/&gt;
&lt;syscall name="sendto" number="4180"/&gt;
&lt;syscall name="setsockopt" number="4181"/&gt;
&lt;syscall name="shutdown" number="4182"/&gt;
&lt;syscall name="socket" number="4183"/&gt;
&lt;syscall name="socketpair" number="4184"/&gt;
&lt;syscall name="setresuid" number="4185"/&gt;
&lt;syscall name="getresuid" number="4186"/&gt;
&lt;syscall name="query_module" number="4187"/&gt;
&lt;syscall name="poll" number="4188"/&gt;
&lt;syscall name="nfsservctl" number="4189"/&gt;
&lt;syscall name="setresgid" number="4190"/&gt;
&lt;syscall name="getresgid" number="4191"/&gt;
&lt;syscall name="prctl" number="4192"/&gt;
&lt;syscall name="rt_sigreturn" number="4193"/&gt;
&lt;syscall name="rt_sigaction" number="4194"/&gt;
&lt;syscall name="rt_sigprocmask" number="4195"/&gt;
&lt;syscall name="rt_sigpending" number="4196"/&gt;
&lt;syscall name="rt_sigtimedwait" number="4197"/&gt;
&lt;syscall name="rt_sigqueueinfo" number="4198"/&gt;
&lt;syscall name="rt_sigsuspend" number="4199"/&gt;
&lt;syscall name="pread64" number="4200"/&gt;
&lt;syscall name="pwrite64" number="4201"/&gt;
&lt;syscall name="chown" number="4202"/&gt;
&lt;syscall name="getcwd" number="4203"/&gt;
&lt;syscall name="capget" number="4204"/&gt;
&lt;syscall name="capset" number="4205"/&gt;
&lt;syscall name="sigaltstack" number="4206"/&gt;
&lt;syscall name="sendfile" number="4207"/&gt;
&lt;syscall name="getpmsg" number="4208"/&gt;
&lt;syscall name="putpmsg" number="4209"/&gt;
&lt;syscall name="mmap2" number="4210"/&gt;
&lt;syscall name="truncate64" number="4211"/&gt;
&lt;syscall name="ftruncate64" number="4212"/&gt;
&lt;syscall name="stat64" number="4213"/&gt;
&lt;syscall name="lstat64" number="4214"/&gt;
&lt;syscall name="fstat64" number="4215"/&gt;
&lt;syscall name="pivot_root" number="4216"/&gt;
&lt;syscall name="mincore" number="4217"/&gt;
&lt;syscall name="madvise" number="4218"/&gt;
&lt;syscall name="getdents64" number="4219"/&gt;
&lt;syscall name="fcntl64" number="4220"/&gt;
&lt;syscall name="gettid" number="4222"/&gt;
&lt;syscall name="readahead" number="4223"/&gt;
&lt;syscall name="setxattr" number="4224"/&gt;
&lt;syscall name="lsetxattr" number="4225"/&gt;
&lt;syscall name="fsetxattr" number="4226"/&gt;
&lt;syscall name="getxattr" number="4227"/&gt;
&lt;syscall name="lgetxattr" number="4228"/&gt;
&lt;syscall name="fgetxattr" number="4229"/&gt;
&lt;syscall name="listxattr" number="4230"/&gt;
&lt;syscall name="llistxattr" number="4231"/&gt;
&lt;syscall name="flistxattr" number="4232"/&gt;
&lt;syscall name="removexattr" number="4233"/&gt;
&lt;syscall name="lremovexattr" number="4234"/&gt;
&lt;syscall name="fremovexattr" number="4235"/&gt;
&lt;syscall name="tkill" number="4236"/&gt;
&lt;syscall name="sendfile64" number="4237"/&gt;
&lt;syscall name="futex" number="4238"/&gt;
&lt;syscall name="sched_setaffinity" number="4239"/&gt;
&lt;syscall name="sched_getaffinity" number="4240"/&gt;
&lt;syscall name="io_setup" number="4241"/&gt;
&lt;syscall name="io_destroy" number="4242"/&gt;
&lt;syscall name="io_getevents" number="4243"/&gt;
&lt;syscall name="io_submit" number="4244"/&gt;
&lt;syscall name="io_cancel" number="4245"/&gt;
&lt;syscall name="exit_group" number="4246"/&gt;
&lt;syscall name="lookup_dcookie" number="4247"/&gt;
&lt;syscall name="epoll_create" number="4248"/&gt;
&lt;syscall name="epoll_ctl" number="4249"/&gt;
&lt;syscall name="epoll_wait" number="4250"/&gt;
&lt;syscall name="remap_file_pages" number="4251"/&gt;
&lt;syscall name="set_tid_address" number="4252"/&gt;
&lt;syscall name="restart_syscall" number="4253"/&gt;
&lt;syscall name="fadvise64" number="4254"/&gt;
&lt;syscall name="statfs64" number="4255"/&gt;
&lt;syscall name="fstatfs64" number="4256"/&gt;
&lt;syscall name="timer_create" number="4257"/&gt;
&lt;syscall name="timer_settime" number="4258"/&gt;
&lt;syscall name="timer_gettime" number="4259"/&gt;
&lt;syscall name="timer_getoverrun" number="4260"/&gt;
&lt;syscall name="timer_delete" number="4261"/&gt;
&lt;syscall name="clock_settime" number="4262"/&gt;
&lt;syscall name="clock_gettime" number="4263"/&gt;
&lt;syscall name="clock_getres" number="4264"/&gt;
&lt;syscall name="clock_nanosleep" number="4265"/&gt;
&lt;syscall name="tgkill" number="4266"/&gt;
&lt;syscall name="utimes" number="4267"/&gt;
&lt;syscall name="mbind" number="4268"/&gt;
&lt;syscall name="get_mempolicy" number="4269"/&gt;
&lt;syscall name="set_mempolicy" number="4270"/&gt;
&lt;syscall name="mq_open" number="4271"/&gt;
&lt;syscall name="mq_unlink" number="4272"/&gt;
&lt;syscall name="mq_timedsend" number="4273"/&gt;
&lt;syscall name="mq_timedreceive" number="4274"/&gt;
&lt;syscall name="mq_notify" number="4275"/&gt;
&lt;syscall name="mq_getsetattr" number="4276"/&gt;
&lt;syscall name="vserver" number="4277"/&gt;
&lt;syscall name="waitid" number="4278"/&gt;
&lt;syscall name="add_key" number="4280"/&gt;
&lt;syscall name="request_key" number="4281"/&gt;
&lt;syscall name="keyctl" number="4282"/&gt;
&lt;syscall name="set_thread_area" number="4283"/&gt;
&lt;syscall name="inotify_init" number="4284"/&gt;
&lt;syscall name="inotify_add_watch" number="4285"/&gt;
&lt;syscall name="inotify_rm_watch" number="4286"/&gt;
&lt;syscall name="migrate_pages" number="4287"/&gt;
&lt;syscall name="openat" number="4288"/&gt;
&lt;syscall name="mkdirat" number="4289"/&gt;
&lt;syscall name="mknodat" number="4290"/&gt;
&lt;syscall name="fchownat" number="4291"/&gt;
&lt;syscall name="futimesat" number="4292"/&gt;
&lt;syscall name="fstatat64" number="4293"/&gt;
&lt;syscall name="unlinkat" number="4294"/&gt;
&lt;syscall name="renameat" number="4295"/&gt;
&lt;syscall name="linkat" number="4296"/&gt;
&lt;syscall name="symlinkat" number="4297"/&gt;
&lt;syscall name="readlinkat" number="4298"/&gt;
&lt;syscall name="fchmodat" number="4299"/&gt;
&lt;syscall name="faccessat" number="4300"/&gt;
&lt;syscall name="pselect6" number="4301"/&gt;
&lt;syscall name="ppoll" number="4302"/&gt;
&lt;syscall name="unshare" number="4303"/&gt;
&lt;syscall name="splice" number="4304"/&gt;
&lt;syscall name="sync_file_range" number="4305"/&gt;
&lt;syscall name="tee" number="4306"/&gt;
&lt;syscall name="vmsplice" number="4307"/&gt;
&lt;syscall name="move_pages" number="4308"/&gt;
&lt;syscall name="set_robust_list" number="4309"/&gt;
&lt;syscall name="get_robust_list" number="4310"/&gt;
&lt;syscall name="kexec_load" number="4311"/&gt;
&lt;syscall name="getcpu" number="4312"/&gt;
&lt;syscall name="epoll_pwait" number="4313"/&gt;
&lt;syscall name="ioprio_set" number="4314"/&gt;
&lt;syscall name="ioprio_get" number="4315"/&gt;
&lt;syscall name="utimensat" number="4316"/&gt;
&lt;syscall name="signalfd" number="4317"/&gt;
&lt;syscall name="timerfd" number="4318"/&gt;
&lt;syscall name="eventfd" number="4319"/&gt;
&lt;syscall name="fallocate" number="4320"/&gt;
&lt;syscall name="timerfd_create" number="4321"/&gt;
&lt;syscall name="timerfd_gettime" number="4322"/&gt;
&lt;syscall name="timerfd_settime" number="4323"/&gt;
&lt;syscall name="signalfd4" number="4324"/&gt;
&lt;syscall name="eventfd2" number="4325"/&gt;
&lt;syscall name="epoll_create1" number="4326"/&gt;
&lt;syscall name="dup3" number="4327"/&gt;
&lt;syscall name="pipe2" number="4328"/&gt;
&lt;syscall name="inotify_init1" number="4329"/&gt;
&lt;syscall name="preadv" number="4330"/&gt;
&lt;syscall name="pwritev" number="4331"/&gt;
&lt;syscall name="rt_tgsigqueueinfo" number="4332"/&gt;
&lt;syscall name="perf_event_open" number="4333"/&gt;
&lt;syscall name="accept4" number="4334"/&gt;
&lt;syscall name="recvmmsg" number="4335"/&gt;
&lt;syscall name="fanotify_init" number="4336"/&gt;
&lt;syscall name="fanotify_mark" number="4337"/&gt;
&lt;syscall name="prlimit64" number="4338"/&gt;
&lt;/syscalls_info&gt;</pre>
<p>X86的syscall表在这里有：</p>
<p><a href="http://syscalls.kernelgrok.com/">http://syscalls.kernelgrok.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/11/02/linux-on-mips-syscall-and-id.html/feed</wfw:commentRss>
		<slash:comments>5865</slash:comments>
		</item>
		<item>
		<title>杯具带来的教训-关于C和C++代码的混合链接</title>
		<link>http://www.sigma.me/2012/08/29/c_vs_cpp_symbol_and_link.html</link>
		<comments>http://www.sigma.me/2012/08/29/c_vs_cpp_symbol_and_link.html#comments</comments>
		<pubDate>Wed, 29 Aug 2012 14:35:59 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[C语言]]></category>
		<category><![CDATA[编译]]></category>
		<category><![CDATA[链接]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174374</guid>
		<description><![CDATA[====我是分割线，只是想说明下面的都是废话，大家可以直接跳到下一个分割线==== 这几天需要把Parsec（普林斯顿出品的一组多程序程序benchmark，C++编写，貌似是鼎鼎有名的李凯教授带的组出的）的一些程序移植到某模拟器上，由于模拟器没有OS，很多系统调用都是用硬件模拟。因此，parsec的pthread库需要替换成硬件提供的系统调用。在该模拟器上，之前已经有用汇编代码写好的系统调用库以及编程成了相应的静态链接库 .a文件。因此，理论上，只需要换掉pthread头文件，换成.a对应的头文件，并把对应的pthread函数换成硬件模拟的系统调用函数即可。 花了好大力气把所有的头文件以及pthread函数换掉，并且把Makefile的编译器换成交叉编译器，LDFLAGS里的多线程库换成了模拟器系统调用的.a库（通过 -Ldir -llib 替换，其中dir是.a文件所在目录，lib是.a文件的文件名去掉前缀lib和后缀.a的剩余部分）。一切就绪，敲下make，看着一个个.cpp变成了.o，我心里暗喜。可是，当所有.cpp变成.o后，杯具出现了，屏幕刷出一堆“undefined reference to xxxx”，其中xxx就是模拟器系统调用函数名。 奇了怪了，怎么会找不到reference呢，我第一感觉是LDFLAGS写错了，可是检查了几遍，发现没错。并且用同样的LDFLAGS链接splash2中的FFT程序都可以。因此，不太可能试着问题，并且为了确认，我加了-v选项，把链接的细节打出来了，发现没有任何问题。 排除了一种可能，但是问题并没有解决，我只好放狗搜。搜到的答案都是说由于库的链接顺序，会导致这问题，并且通假如某参数，链接时进行repeat搜索，可以避免该问题（当然，repeat的代码就是降低链接速度）。于是，我遍历了各种影响链接顺序的可能，包括LDFLAGS本身的顺序，以及源代码中包含头文件的顺序，可是，杯具依然。 两天过去了。。。还是一无所获，期间只好跑去机房调另外一个东西。昨天，在走投无路的情况下，狠下决心，用c语言重写parsec的这个benchmark。但是，决心容易下，真写谈何容易，看了半天，才把算法大致看明白。再看代码的过程中，我突然想，要不直接把模拟器的系统调用的汇编码嵌入到源代码中，不用.a形式静态链接，但是，由于这些汇编码的寄存器都是按mips标准命名用的，直接放进去，可能交叉编译器无法识别。于是，只好作罢，这时，突然想，为什么FFT可以，这个不可以，莫非是因为C++和C语言链接的方式不一样。想到这，突然有种豁然开朗的感觉，因为模模糊糊记得C函数的符号表和C++函数的符号表是不一致的。 ====杯具终于完了，废话也终于完了，下面进入正题，貌似有点头重脚轻的感觉==== 在c语言中，全局函数foo(int)在符号表中是_foo，而c++中，为了支持函数重载，会编译成类似_foo_int的。这就导致了前述xxx的系统调用会编译成_xxx_yyy（yyy是参数类型）的形式存在.o中。难怪链接器会找不到reference。 因此，下一步就是如何让C++代码能链接到c代码中了。于是继续放狗搜“c c++ link”，搜到了伟大的太阳的这篇文章： Mixing C and C++ Code in the Same Program 这篇文章说道，其实可以通过extern关键词声明函数是c函数还是c++函数。当然，也可以直接extern某个头文件，将整个头文件里的函数都声明是啥函数。比如，下面代码： extern "C" { #include "sb.h" } 就降sb.h 里面的函数都声明是c函数。这样，在c ++代码中，碰到sb.h中的函数，就会当成c函数来对待。 对于我碰到的问题，可以前述extern 头文件来解决。但是，对于大部分头文件来说，我们并不知道这个头文件里的函数是c函数还是c++函数。这就要求头文件编写者做些工作，一般来说，现在的系统库里面都能看到下面的语句： #ifdef __cplusplus extern "C"{ #endif //some function declaration #ifdef __cplusplus } #endif 上面的代码就是为了让库兼容c和c++.因为使用g++编译器的时候，实际上是带了__cplusplus的声明，因此整个头文件的函数都会被额外的声明是c函数。之后g++会特殊处理，从而保证链接不出错。 最后，再说几句废话，博客荒废已久，本来以为八月必然交白卷的，想不到最后还是憋出来一篇。。。]]></description>
				<content:encoded><![CDATA[<p>====我是分割线，只是想说明下面的都是废话，大家可以直接跳到下一个分割线====</p>
<p>这几天需要把<a href="http://parsec.cs.princeton.edu/">Parsec</a>（普林斯顿出品的一组多程序程序benchmark，C++编写，貌似是鼎鼎有名的李凯教授带的组出的）的一些程序移植到某模拟器上，由于模拟器没有OS，很多系统调用都是用硬件模拟。因此，parsec的pthread库需要替换成硬件提供的系统调用。在该模拟器上，之前已经有用汇编代码写好的系统调用库以及编程成了相应的静态链接库 .a文件。因此，理论上，只需要换掉pthread头文件，换成.a对应的头文件，并把对应的pthread函数换成硬件模拟的系统调用函数即可。</p>
<p>花了好大力气把所有的头文件以及pthread函数换掉，并且把Makefile的编译器换成交叉编译器，LDFLAGS里的多线程库换成了模拟器系统调用的.a库（通过 -Ldir -llib 替换，其中dir是.a文件所在目录，lib是.a文件的文件名去掉前缀lib和后缀.a的剩余部分）。一切就绪，敲下make，看着一个个.cpp变成了.o，我心里暗喜。可是，当所有.cpp变成.o后，杯具出现了，屏幕刷出一堆“undefined reference to xxxx”，其中xxx就是模拟器系统调用函数名。</p>
<p>奇了怪了，怎么会找不到reference呢，我第一感觉是LDFLAGS写错了，可是检查了几遍，发现没错。并且用同样的LDFLAGS链接splash2中的FFT程序都可以。因此，不太可能试着问题，并且为了确认，我加了-v选项，把链接的细节打出来了，发现没有任何问题。</p>
<p>排除了一种可能，但是问题并没有解决，我只好放狗搜。搜到的答案都是说由于库的链接顺序，会导致这问题，并且通假如某参数，链接时进行repeat搜索，可以避免该问题（当然，repeat的代码就是降低链接速度）。于是，我遍历了各种影响链接顺序的可能，包括LDFLAGS本身的顺序，以及源代码中包含头文件的顺序，可是，杯具依然。</p>
<p>两天过去了。。。还是一无所获，期间只好跑去机房调另外一个东西。昨天，在走投无路的情况下，狠下决心，用c语言重写parsec的这个benchmark。但是，决心容易下，真写谈何容易，看了半天，才把算法大致看明白。再看代码的过程中，我突然想，要不直接把模拟器的系统调用的汇编码嵌入到源代码中，不用.a形式静态链接，但是，由于这些汇编码的寄存器都是按mips标准命名用的，直接放进去，可能交叉编译器无法识别。于是，只好作罢，这时，突然想，为什么FFT可以，这个不可以，莫非是因为C++和C语言链接的方式不一样。想到这，突然有种豁然开朗的感觉，因为模模糊糊记得C函数的符号表和C++函数的符号表是不一致的。</p>
<p><span style="color: #ff0000;">====杯具终于完了，废话也终于完了，下面进入正题，貌似有点头重脚轻的感觉====</span></p>
<p>在c语言中，全局函数foo(int)在符号表中是_foo，而c++中，为了支持函数重载，会编译成类似_foo_int的。这就导致了前述xxx的系统调用会编译成_xxx_yyy（yyy是参数类型）的形式存在.o中。难怪链接器会找不到reference。</p>
<p>因此，下一步就是如何让C++代码能链接到c代码中了。于是继续放狗搜“c c++ link”，搜到了伟大的太阳的这篇文章：</p>
<p><a href="http://developers.sun.com/solaris/articles/mixing.html">Mixing C and C++ Code in the Same Program</a></p>
<p>这篇文章说道，其实可以通过extern关键词声明函数是c函数还是c++函数。当然，也可以直接extern某个头文件，将整个头文件里的函数都声明是啥函数。比如，下面代码：</p>
<pre class="brush: actionscript3; gutter: true">extern "C" {
  #include "sb.h"
}</pre>
<p>就降sb.h 里面的函数都声明是c函数。这样，在c ++代码中，碰到sb.h中的函数，就会当成c函数来对待。</p>
<p>对于我碰到的问题，可以前述extern 头文件来解决。但是，对于大部分头文件来说，我们并不知道这个头文件里的函数是c函数还是c++函数。这就要求头文件编写者做些工作，一般来说，现在的系统库里面都能看到下面的语句：</p>
<pre class="brush: actionscript3; gutter: true">#ifdef __cplusplus
extern "C"{
#endif

//some function declaration 

#ifdef __cplusplus
             }
#endif</pre>
<p>上面的代码就是为了让库兼容c和c++.因为使用g++编译器的时候，实际上是带了__cplusplus的声明，因此整个头文件的函数都会被额外的声明是c函数。之后g++会特殊处理，从而保证链接不出错。</p>
<p>最后，再说几句废话，博客荒废已久，本来以为八月必然交白卷的，想不到最后还是憋出来一篇。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/08/29/c_vs_cpp_symbol_and_link.html/feed</wfw:commentRss>
		<slash:comments>5072</slash:comments>
		</item>
		<item>
		<title>#照片#英伦行</title>
		<link>http://www.sigma.me/2012/07/15/travel-uk.html</link>
		<comments>http://www.sigma.me/2012/07/15/travel-uk.html#comments</comments>
		<pubDate>Sat, 14 Jul 2012 17:56:42 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174371</guid>
		<description><![CDATA[六月下旬，去曾经的日不落开了个会，在这里传些照片，给之前跟我说想看照片的一些同学看看，顺便凑篇博客。]]></description>
				<content:encoded><![CDATA[<p>六月下旬，去曾经的日不落开了个会，在这里传些照片，给之前跟我说想看照片的一些同学看看，顺便凑篇博客。</p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_30271.jpg"><img class="alignnone" title="DSC_3027.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3027.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_30961.jpg"><img class="alignnone" title="DSC_3096.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3096.jpg" alt="image" /></a><span id="more-1174371"></span><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_33211.jpg"><img class="alignnone" title="DSC_3321.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3321.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-24_19-01-54_HDR1.jpg"><img class="alignnone" title="2012-06-24_19-01-54_HDR.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-24_19-01-54_HDR.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-24_20-45-20_HDR1.jpg"><img class="alignnone" title="2012-06-24_20-45-20_HDR.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-24_20-45-20_HDR.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_35221.jpg"><img class="alignnone" title="DSC_3522.JPG" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3522.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_35881.jpg"><img class="alignnone" title="DSC_3588.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3588.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_36541.jpg"><img class="alignnone" title="DSC_3654.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3654.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_36551.jpg"><img class="alignnone" title="DSC_3655.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3655.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-27_18-02-26_HDR1.jpg"><img class="alignnone" title="2012-06-27_18-02-26_HDR.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-27_18-02-26_HDR.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-C360_2012-06-27-18-08-221.jpg"><img class="alignnone" title="C360_2012-06-27-18-08-22.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-C360_2012-06-27-18-08-22.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_38921.jpg"><img class="alignnone" title="DSC_3892.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3892.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_39571.jpg"><img class="alignnone" title="DSC_3957.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_3957.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_40651.jpg"><img class="alignnone" title="DSC_4065.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4065.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_40681.jpg"><img class="alignnone" title="DSC_4068.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4068.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_40901.jpg"><img class="alignnone" title="DSC_4090.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4090.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_41501.jpg"><img class="alignnone" title="DSC_4150.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4150.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-29_04-13-44_HDR1.jpg"><img class="alignnone" title="2012-06-29_04-13-44_HDR.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-29_04-13-44_HDR.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_41851.jpg"><img class="alignnone" title="DSC_4185.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4185.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_41871.jpg"><img class="alignnone" title="DSC_4187.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4187.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_42881.jpg"><img class="alignnone" title="DSC_4288.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4288.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_42711.jpg"><img class="alignnone" title="DSC_4271.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4271.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43171.jpg"><img class="alignnone" title="DSC_4317.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4317.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43011.jpg"><img class="alignnone" title="DSC_4301.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4301.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43091.jpg"><img class="alignnone" title="DSC_4309.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4309.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43121.jpg"><img class="alignnone" title="DSC_4312.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4312.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43341.jpg"><img class="alignnone" title="DSC_4334.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4334.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43511.jpg"><img class="alignnone" title="DSC_4351.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4351.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_43561.jpg"><img class="alignnone" title="DSC_4356.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4356.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-29_19-26-36_HDR1.jpg"><img class="alignnone" title="2012-06-29_19-26-36_HDR.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-2012-06-29_19-26-36_HDR.jpg" alt="image" /></a></p>
<p><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_44001.jpg"><img class="alignnone" title="DSC_4400.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4400.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_44151.jpg"><img class="alignnone" title="DSC_4415.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4415.jpg" alt="image" /></a><a href="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_44291.jpg"><img class="alignnone" title="DSC_4429.jpg" src="http://www.sigma.me/wp-content/uploads/2012/07/wpid-DSC_4429.jpg" alt="image" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/07/15/travel-uk.html/feed</wfw:commentRss>
		<slash:comments>6679</slash:comments>
		</item>
		<item>
		<title>五月流水账(多图杀猫慎入)</title>
		<link>http://www.sigma.me/2012/05/31/%e4%ba%94%e6%9c%88%e6%b5%81%e6%b0%b4%e8%b4%a6%e5%a4%9a%e5%9b%be%e6%9d%80%e7%8c%ab%e6%85%8e%e5%85%a5.html</link>
		<comments>http://www.sigma.me/2012/05/31/%e4%ba%94%e6%9c%88%e6%b5%81%e6%b0%b4%e8%b4%a6%e5%a4%9a%e5%9b%be%e6%9d%80%e7%8c%ab%e6%85%8e%e5%85%a5.html#comments</comments>
		<pubDate>Wed, 30 May 2012 17:36:42 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.sigma.me/2012/05/31/%e4%ba%94%e6%9c%88%e6%b5%81%e6%b0%b4%e8%b4%a6%e5%a4%9a%e5%9b%be%e6%9d%80%e7%8c%ab%e6%85%8e%e5%85%a5.html</guid>
		<description><![CDATA[转眼五月就过去了，才发现在五月，我只写了一篇博文。其实中间几次想写，无奈江郎才尽，无从下笔。到了月末，逼着自己写一篇，尽管是流水账，顺便测试下wordpress手机客户端。无奈写流水账都写不好，只好用图片来凑个流水账。废话完了，上图：]]></description>
				<content:encoded><![CDATA[<p>转眼五月就过去了，才发现在五月，我只写了一篇博文。其实中间几次想写，无奈江郎才尽，无从下笔。到了月末，逼着自己写一篇，尽管是流水账，顺便测试下wordpress手机客户端。无奈写流水账都写不好，只好用图片来凑个流水账。废话完了，上图：</p>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_06502.jpg"><img title="DSC_0650.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_06501.jpg" /></a><p class="wp-caption-text">&#25105;&#20204;&#30340;&#35745;&#31639;&#25152;</p></div>
<p><span id="more-1174303"></span></p>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_19872.jpg"><img title="DSC_1987.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_19871.jpg" /></a><p class="wp-caption-text">&#28165;&#21326;&#22823;&#23398;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20331.jpg"><img title="DSC_2033.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_2033.jpg" /></a><p class="wp-caption-text">&#38632;&#22825;&#35745;&#31639;&#25152;11&#27004;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20381.jpg"><img title="DSC_2038.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_2038.jpg" /></a><p class="wp-caption-text">&#33609;&#22320;&#19978;&#32454;&#30862;&#30340;&#38451;&#20809;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20232.jpg"><img title="DSC_2023.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20231.jpg" /></a><p class="wp-caption-text">&#21335;&#20140;&#22823;&#25490;&#26723;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20752.jpg"><img title="DSC_2075.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20751.jpg" /></a><p class="wp-caption-text">&#26576;&#22825;&#36305;&#21040;15&#27004;&#33258;&#20064;&#65292;&#31354;&#27668;&#24456;&#22909;&#65292;&#33021;&#30475;&#24456;&#36828;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20892.jpg"><img title="DSC_2089.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20891.jpg" /></a><p class="wp-caption-text">&#38632;&#22825;&#65292;&#22812;&#26202;&#65292;&#36828;&#30475;&#27700;&#31435;&#26041;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20642.jpg"><img title="DSC_2064.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_20641.jpg" /></a><p class="wp-caption-text">&#26080;&#32842;&#30340;&#19978;&#26576;&#26576;siminar&#35838;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22142.jpg"><img title="DSC_2214.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22141.jpg" /></a><p class="wp-caption-text">&#12298;&#24651;&#29233;&#30340;&#29312;&#29275;&#12299;&#30007;&#22899;&#20027;&#28436;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22211.jpg"><img title="DSC_2221.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_2221.jpg" /></a><p class="wp-caption-text">&#40857;&#34430;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22382.jpg"><img title="DSC_2238.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22381.jpg" /></a><p class="wp-caption-text">&#21271;&#20140;&#65292;&#23569;&#35265;&#22914;&#27492;&#22812;&#31354;&#65292;29&#26085;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22482.jpg"><img title="DSC_2248.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22481.jpg" /></a><p class="wp-caption-text">30&#26085;&#65292;&#21435;&#23454;&#39564;&#23460;&#36335;&#19978;</p></div>
<div style="max-width: 610px" class="wp-caption alignnone"><a alt="image" href="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22522.jpg"><img title="DSC_2252.jpg" class="alignnone" alt="image" src="http://www.sigma.me/wp-content/uploads/2012/05/wpid-DSC_22521.jpg" /></a><p class="wp-caption-text">30&#26085;&#65292;&#20013;&#20851;&#26449;</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/05/31/%e4%ba%94%e6%9c%88%e6%b5%81%e6%b0%b4%e8%b4%a6%e5%a4%9a%e5%9b%be%e6%9d%80%e7%8c%ab%e6%85%8e%e5%85%a5.html/feed</wfw:commentRss>
		<slash:comments>3071</slash:comments>
		</item>
		<item>
		<title>pdf嵌入字体</title>
		<link>http://www.sigma.me/2012/05/12/pdflatex-embed-fonts-in-linu.html</link>
		<comments>http://www.sigma.me/2012/05/12/pdflatex-embed-fonts-in-linu.html#comments</comments>
		<pubDate>Sat, 12 May 2012 14:23:11 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[latex]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[pdflatex]]></category>
		<category><![CDATA[字体]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174244</guid>
		<description><![CDATA[在论文提交final script时，一般都要求论文中所有的字体都嵌入到pdf中，一般来说，IEEE提供了一个叫做EXPRESS的工具，可以检查是否符合规范，包括字体是否嵌入。但是，有时候，我们通过latex编译出来的pdf，不能通过EXPRESS检查，并且大部分都是因为字体原因，那么，本文将介绍如何在linux pdflatex编译时能够潜入所有字体。 首先，linux下本身提供了一个检查pdf字体信息的工具，pdffonts。比如查看test.pdf的字体： pdffonts test.pdf 结果应该是类似下面的： name type emb sub uni object ID ------------------------------------ ----------------- --- --- --- --------- JNARJV+NimbusRomNo9L-Medi Type 1 yes yes no 6 0 NBINYZ+NimbusRomNo9L-Regu Type 1 yes yes no 7 0 CBDPEB+NimbusRomNo9L-ReguItal Type 1 yes yes no 8 0 ZYBBWF+CMSY10 Type 1 yes yes no 9 0 QVCFWU+NimbusRomNo9L-MediItal Type 1 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>在论文提交final script时，一般都要求论文中所有的字体都嵌入到pdf中，一般来说，IEEE提供了一个叫做EXPRESS的工具，可以检查是否符合规范，包括字体是否嵌入。但是，有时候，我们通过latex编译出来的pdf，不能通过EXPRESS检查，并且大部分都是因为字体原因，那么，本文将介绍如何在linux pdflatex编译时能够潜入所有字体。</p>
<p>首先，linux下本身提供了一个检查pdf字体信息的工具，pdffonts。比如查看test.pdf的字体：</p>
<pre class="brush: actionscript3; gutter: true">pdffonts test.pdf</pre>
<p>结果应该是类似下面的：</p>
<pre class="brush: actionscript3; gutter: true">name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
JNARJV+NimbusRomNo9L-Medi            Type 1            yes yes no       6  0
NBINYZ+NimbusRomNo9L-Regu            Type 1            yes yes no       7  0
CBDPEB+NimbusRomNo9L-ReguItal        Type 1            yes yes no       8  0
ZYBBWF+CMSY10                        Type 1            yes yes no       9  0
QVCFWU+NimbusRomNo9L-MediItal        Type 1            yes yes no      10  0
IJIDBD+CMMI10                        Type 1            yes yes no      11  0
MTWRTR+CMR10                         Type 1            yes yes no      16  0
Arial                                TrueType          no  no  no      35  0
Arial,Italic                         TrueType          no  no  no      36  0
WXQMOP+CMMIB10                       Type 1            yes yes no      46  0
Helvetica                            Type 1            no  no  no      51  0
DWKNIZ+CMMI7                         Type 1            yes yes no      55  0
IXNPPI+CMEX10                        Type 1            yes yes no      56  0
EUDIGL+CMR7                          Type 1            yes yes no      57  0
CLXNUD+CMSY7                         Type 1            yes yes no      58  0
RURLFQ+CMMIB7                        Type 1            yes yes no      62  0
LDBHLR+CMBX10                        Type 1            yes yes no      63  0
YJCSYX+CMMI5                         Type 1            yes yes no      69  0
Helvetica                            Type 1            no  no  no      74  0
Helvetica                            Type 1            no  no  no      79  0
</pre>
<p>可以看到，有些字体emb选项为no，表示没有嵌入。<span id="more-1174244"></span></p>
<p>可以通过下面命令来编辑pdflatex潜入字体的设置:</p>
<pre class="brush: actionscript3; gutter: true">updmap --edit</pre>
<p>这会打开一个文件，搜索pdftexDownloadBase14，将其值变为True，即最后的文件含有下面一行。</p>
<pre class="brush: actionscript3; gutter: true">pdftexDownloadBase14 true</pre>
<p>重新编译tex文件，即可生成嵌入字体的文件。再用pdffonts看，结果应该是：</p>
<pre class="brush: actionscript3; gutter: true">name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
JNARJV+NimbusRomNo9L-Medi            Type 1            yes yes no       5  0
ZDVLDF+NimbusRomNo9L-Regu            Type 1            yes yes no       6  0
VSOJMD+CMR8                          Type 1            yes yes no       7  0
EAAUWX+CMMI8                         Type 1            yes yes no       8  0
YPSQTS+CMR6                          Type 1            yes yes no       9  0
ZYBBWF+CMSY10                        Type 1            yes yes no      10  0
QVCFWU+NimbusRomNo9L-MediItal        Type 1            yes yes no      11  0
EOQRPL+CMMI10                        Type 1            yes yes no      12  0
MTWRTR+CMR10                         Type 1            yes yes no      17  0
FTUEJX+NimbusRomNo9L-ReguItal        Type 1            yes yes no      18  0
WMBKUV+CMMIB10                       Type 1            yes yes no      56  0
DWKNIZ+CMMI7                         Type 1            yes yes no      63  0
IXNPPI+CMEX10                        Type 1            yes yes no      64  0
EUDIGL+CMR7                          Type 1            yes yes no      65  0
CLXNUD+CMSY7                         Type 1            yes yes no      66  0
RURLFQ+CMMIB7                        Type 1            yes yes no      70  0
LDBHLR+CMBX10                        Type 1            yes yes no      71  0
YJCSYX+CMMI5                         Type 1            yes yes no      77  0
</pre>
<p>但是，有时候，由于latex源文件插入了eps.ps,pdf格式的图，这些图没有潜入字体，编译出来pdf也有部分字体没有嵌入，这时，可以通过pdftops工具将编译的pdf转化成ps，之后再用ps2pdf14并加上选项将字体嵌入。</p>
<pre class="brush: actionscript3; gutter: true">pdftops  test.pdf</pre>
<pre class="brush: actionscript3; gutter: true">ps2pdf14 -dPDFSETTINGS=/prepress test.ps</pre>
<p>对于windows用户，遇到没有潜入字体的pdf。可以通过有些支持pdf嵌入字体的虚拟打印机，打印时将嵌入字体选项选上。个人推荐使用foxit phantom或这acrobat的虚拟打印机。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/05/12/pdflatex-embed-fonts-in-linu.html/feed</wfw:commentRss>
		<slash:comments>7372</slash:comments>
		</item>
		<item>
		<title>Vimdiff逐行比较</title>
		<link>http://www.sigma.me/2012/04/27/vimdiff-line-by-line.html</link>
		<comments>http://www.sigma.me/2012/04/27/vimdiff-line-by-line.html#comments</comments>
		<pubDate>Fri, 27 Apr 2012 13:38:37 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174239</guid>
		<description><![CDATA[平时，我们用vimdiff都是基于最大匹配，但有时我们希望能够逐行比较，这个不能直接实现，但是可以通过diff的patchexpr实现，具体介绍可以看vim文档： http://vimdoc.sourceforge.net/htmldoc/diff.html 下面给出一个vim逐行比较的patch，将下面内容复制到一个文件diffbyline.vim,并且放到plugin目录下（这个脚本是我很早从网络搜到的，现在忘了来源了，哪位看到来源，请告知，我好说明）： " File: diffbyline.vim " Created: 2010 Sep 28 " Last Change: 2010 Oct 02 " Rev Days: 3 " Author: Andy Wokula &#60;anwoku@yahoo.de&#62; " :SetLineByLineDiff[!] " " set the 'diffexpr' to enable a trivial line-by-line diff algorithm (the " diff program has no option for this). Reset 'diffexpr' with [!]. com! -bar [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>平时，我们用vimdiff都是基于最大匹配，但有时我们希望能够逐行比较，这个不能直接实现，但是可以通过diff的patchexpr实现，具体介绍可以看vim文档：</p>
<p><a href="http://vimdoc.sourceforge.net/htmldoc/diff.html">http://vimdoc.sourceforge.net/htmldoc/diff.html</a></p>
<p>下面给出一个vim逐行比较的patch，将下面内容复制到一个文件diffbyline.vim,并且放到plugin目录下（这个脚本是我很早从网络搜到的，现在忘了来源了，哪位看到来源，请告知，我好说明）：</p>
<pre class="brush: actionscript3; gutter: true">" File:         diffbyline.vim
" Created:      2010 Sep 28
" Last Change:  2010 Oct 02
" Rev Days:     3
" Author:	Andy Wokula &lt;anwoku@yahoo.de&gt;

" :SetLineByLineDiff[!]
"
"   set the 'diffexpr' to enable a trivial line-by-line diff algorithm (the
"   diff program has no option for this).  Reset 'diffexpr' with [!].

com! -bar -bang SetLineByLineDiff  call s:SetDiffExpr(&lt;bang&gt;0)

func! s:SetDiffExpr(bang)
    if !a:bang
	set diffexpr=DiffLineByLine()
	echo "'diffexpr' changed to enable line-by-line diff"
    else
	" XXX restore the previous value
	set diffexpr&amp;
	echo "'diffexpr' restored"
    endif
endfunc

func! DiffLineByLine()
    let result = []	" diff output lines
    let oldlines = readfile(v:fname_in)
    let newlines = readfile(v:fname_new)

    let len_oldlines = len(oldlines)
    let len_newlines = len(newlines)
    let len_common = min([len_oldlines, len_newlines])

    " different number of lines allowed
    "	first common lines -&gt; change(s) only
    "	rest -&gt; append (er, no, see below)

    let idx = 0
    let change_start = -1
    while idx &lt; len_common
	if oldlines[idx] !=# newlines[idx]
	    " XXX above test is case sensitive and ignores 'diffopt'
	    if change_start == -1
		let change_start = idx
	    endif
	    let change_end = idx
	elseif change_start &gt;= 0
	    " line-idx is just after a block of changed lines

	    " prepare a diff block
	    if change_start &lt; change_end
		let range = (1+change_start). ",". (1+change_end)
	    else
		let range = 1+change_start
	    endif
	    let ed_cmd = range. "c". range
	    call add(result, ed_cmd)
	    call extend(result, map(oldlines[change_start : change_end], '"&lt; ". v:val'))
	    call add(result, '---')
	    call extend(result, map(newlines[change_start : change_end], '"&gt; ". v:val'))

	    let change_start = -1
	endif
	let idx += 1
    endwhile

    if change_start &gt;= 0

	" XXX extract to function? (paragraph copied from above)
	if change_start &lt; change_end
	    let range = (1+change_start). ",". (1+change_end)
	else
	    let range = 1+change_start
	endif
	let ed_cmd = range. "c". range
	call add(result, ed_cmd)
	call extend(result, map(oldlines[change_start : change_end], '"&lt; ". v:val'))
	call add(result, '---')
	call extend(result, map(newlines[change_start : change_end], '"&gt; ". v:val'))

    endif

    if len_oldlines &lt; len_newlines
        let append_start = len_oldlines
        let append_end = len_newlines - 1
        let old_range = append_start	" append below this line
        if append_start &lt; append_end
            let new_range = (1+append_start). ",". (1+append_end)
        else
            let new_range = 1+append_start
        endif
        let ed_cmd = old_range. "a". new_range
        call add(result, ed_cmd)
        call extend(result, map(newlines[append_start : append_end], '"&gt; ". v:val'))

    elseif len_oldlines &gt; len_newlines
        let delete_start = len_newlines
        let delete_end = len_oldlines - 1
        let new_range = delete_start	" delete below this line
        if delete_start &lt; delete_end
            let old_range = (1+delete_start). ",". (1+delete_end)
        else
            let old_range = 1+delete_start
        endif
        let ed_cmd = old_range. "d". new_range
        call add(result, ed_cmd)
        call extend(result, map(oldlines[delete_start : delete_end], '"&lt; ". v:val'))

    endif

    " Decho result
    " XXX strange: :Decho prints at least two result lists, first is
    "	['1c1', '&lt; line1', '---', '&gt; line2'] and belongs nowhere (is this an
    "	internal diff test by Vim?)

    call writefile(result, v:fname_out)

endfunc</pre>
<p>使用方法：</p>
<ul>
<li>在diff界面，输入:SetLineByLineDiff，跳到逐行模式，再输入一次，回到普通模式。</li>
<li>或者加个SetLineByLineDiff选项，如:﻿﻿vimdiff +SetLineByLineDiff a.c b.c</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/04/27/vimdiff-line-by-line.html/feed</wfw:commentRss>
		<slash:comments>4189</slash:comments>
		</item>
		<item>
		<title>程序(进程)在内存中的组织-由ld_brk_point以及brk函数谈起</title>
		<link>http://www.sigma.me/2012/04/09/process-in-memory.html</link>
		<comments>http://www.sigma.me/2012/04/09/process-in-memory.html#comments</comments>
		<pubDate>Mon, 09 Apr 2012 12:52:54 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[编译技术]]></category>
		<category><![CDATA[贝壳]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存分配]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174229</guid>
		<description><![CDATA[今天调龙芯模拟器，发现里面有个ld_brk_point,一直不知道是啥东西，后来搜了下，发现就是malloc函数申请空间的起始地址。改值可以通过brk()以及sbrk函数设置。为了说清楚这个问题，有必要先了解下Linux下程序运行时（进程）在内存中的组织。 如上图，总体来说，对于32位的linux程序，总共可访问的地址空间为4G，但是由于有1G预留给了内核，因此用户程序空间才3G，而这3G空间（实际程序用到的空间一般小于这个值），又分为代码段（Text segment），常量数据段（Data segment），BSS段（BSS segment）以及堆栈段，一般来说，各段存储的数据如下： 代码段(Text segment):程序的二进制代码，一般来说，程序PC的范围就在这段(执行动态链接库代码例外)。 常量数据段（Data segment）:存储常量数据(初始化好了的全局变量以及静态变量)，如常量字符串，一般全局常量都放在此处，但是局部常量分配和编译器相关。 BSS段(BSS segment):存储未初始化的静态变量等。 以上程序段，都是通过操作系统的load程序在程序加载时分配的，不会动态管理。下面的堆栈段就需要动态管理了。 堆（Heap），这些内存由操作系统的提供的malloc等系统调用管理。其中就会用到brk以及sbrk这些函数，来设置新空间分配的起始地址，堆一般比较大，地址向上增长。 栈（Stack），这些空间一般由用户程序自行管理，如函数调用中传参以及返回值就需要用到该段，地址向下增长。假如堆顶和栈顶地址想撞了，malloc函数申请空间就会失败（一般来说，malloc申请空间时，回比较ld_brk_point和栈顶指针sp的值）。 下面给出一个程序的memory dump: ======= Memory map: ======== 08048000-08118000 r-xp 00000000 08:07 32899 /home/sim-wattch-1.02e/sim-outorder 08118000-0811c000 rw-p 000cf000 08:07 32899 /home/sim-wattch-1.02e/sim-outorder 0811c000-09ffa000 rw-p 00000000 00:00 0 [heap] b7dde000-b7dfb000 r-xp 00000000 08:07 83724 /lib/libgcc_s.so.1 b7dfb000-b7dfc000 rw-p 0001c000 08:07 83724 /lib/libgcc_s.so.1 b7e0c000-b7e64000 rw-p 00000000 00:00 0 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今天调龙芯模拟器，发现里面有个ld_brk_point,一直不知道是啥东西，后来搜了下，发现就是malloc函数申请空间的起始地址。改值可以通过brk()以及sbrk函数设置。为了说清楚这个问题，有必要先了解下Linux下程序运行时（进程）在内存中的组织。</p>
<div id="attachment_1174233" style="max-width: 610px" class="wp-caption alignnone"><a href="http://www.sigma.me/wp-content/uploads/2012/04/linuxFlexibleAddressSpaceLayout.png"><img class="size-full wp-image-1174233  " title="linuxFlexibleAddressSpaceLayout" src="http://www.sigma.me/wp-content/uploads/2012/04/linuxFlexibleAddressSpaceLayout.png" alt="linux Flexible Address Space Layout" width="600" height="513" /></a><p class="wp-caption-text">linux Flexible Address Space Layout</p></div>
<p><span id="more-1174229"></span>如上图，总体来说，对于32位的linux程序，总共可访问的地址空间为4G，但是由于有1G预留给了内核，因此用户程序空间才3G，而这3G空间（实际程序用到的空间一般小于这个值），又分为代码段（Text segment），常量数据段（Data segment），BSS段（BSS segment）以及堆栈段，一般来说，各段存储的数据如下：</p>
<ul>
<li>代码段(Text segment):程序的二进制代码，一般来说，程序PC的范围就在这段(执行动态链接库代码例外)。</li>
<li>常量数据段（Data segment）:存储常量数据(初始化好了的全局变量以及静态变量)，如常量字符串，一般全局常量都放在此处，但是局部常量分配和编译器相关。</li>
<li>BSS段(BSS segment):存储未初始化的静态变量等。</li>
</ul>
<p style="padding-left: 30px;">以上程序段，都是通过操作系统的load程序在程序加载时分配的，不会动态管理。下面的堆栈段就需要动态管理了。</p>
<ul>
<li>堆（Heap），这些内存由操作系统的提供的malloc等系统调用管理。其中就会用到brk以及sbrk这些函数，来设置新空间分配的起始地址，堆一般比较大，地址向上增长。</li>
<li>栈（Stack），这些空间一般由用户程序自行管理，如函数调用中传参以及返回值就需要用到该段，地址向下增长。假如堆顶和栈顶地址想撞了，malloc函数申请空间就会失败（一般来说，malloc申请空间时，回比较ld_brk_point和栈顶指针sp的值）。</li>
</ul>
<p>下面给出一个程序的memory dump:</p>
<pre class="brush: actionscript3; gutter: true">======= Memory map: ========
08048000-08118000 r-xp 00000000 08:07 32899      /home/sim-wattch-1.02e/sim-outorder
08118000-0811c000 rw-p 000cf000 08:07 32899      /home/sim-wattch-1.02e/sim-outorder
0811c000-09ffa000 rw-p 00000000 00:00 0          [heap]
b7dde000-b7dfb000 r-xp 00000000 08:07 83724      /lib/libgcc_s.so.1
b7dfb000-b7dfc000 rw-p 0001c000 08:07 83724      /lib/libgcc_s.so.1
b7e0c000-b7e64000 rw-p 00000000 00:00 0 
b7e64000-b7fa4000 r-xp 00000000 08:07 91024      /lib/i686/cmov/libc-2.11.2.so
b7fa4000-b7fa6000 r--p 0013f000 08:07 91024      /lib/i686/cmov/libc-2.11.2.so
b7fa6000-b7fa7000 rw-p 00141000 08:07 91024      /lib/i686/cmov/libc-2.11.2.so
b7fa7000-b7faa000 rw-p 00000000 00:00 0 
b7faa000-b7fce000 r-xp 00000000 08:07 91008      /lib/i686/cmov/libm-2.11.2.so
b7fce000-b7fcf000 r--p 00023000 08:07 91008      /lib/i686/cmov/libm-2.11.2.so
b7fcf000-b7fd0000 rw-p 00024000 08:07 91008      /lib/i686/cmov/libm-2.11.2.so
b7fde000-b7fe2000 rw-p 00000000 00:00 0 
b7fe2000-b7fe3000 r-xp 00000000 00:00 0          [vdso]
b7fe3000-b7ffe000 r-xp 00000000 08:07 81305      /lib/ld-2.11.2.so
b7ffe000-b7fff000 r--p 0001a000 08:07 81305      /lib/ld-2.11.2.so
b7fff000-b8000000 rw-p 0001b000 08:07 81305      /lib/ld-2.11.2.so
bffeb000-c0000000 rw-p 00000000 00:00 0          [stack]
</pre>
<p>至于brk以及sbrk的用法，由于资料二说得比较清楚，在此不在赘述。</p>
<p>参考资料：<br />
<a href="http://stackoverflow.com/questions/6988487/what-does-brk-system-call-do">http://stackoverflow.com/questions/6988487/what-does-brk-system-call-do</a><br />
<a href="http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html">http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html</a></p>
<p>图片来源：<a href="http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory">http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/04/09/process-in-memory.html/feed</wfw:commentRss>
		<slash:comments>7801</slash:comments>
		</item>
		<item>
		<title>[整理]SD协议概述</title>
		<link>http://www.sigma.me/2012/03/29/sd-summary.html</link>
		<comments>http://www.sigma.me/2012/03/29/sd-summary.html#comments</comments>
		<pubDate>Thu, 29 Mar 2012 09:30:30 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[贝壳]]></category>
		<category><![CDATA[SD]]></category>
		<category><![CDATA[SD协议]]></category>
		<category><![CDATA[协议]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174221</guid>
		<description><![CDATA[这段时间折腾某芯片上的SDIO，在这里将相关知识整理下，以便备忘。需要注意的是，由于我们的SD只支持SD模式，不支持SPI模式，因此文中内容也是针对SD模式的，后面不再强调此点。 信号 CLK:时钟信号 CMD:双向命令和响应信号 DAT0-3:双向数据信号 VDD,VSS:电源和地信号 注:SD模式下可以选择总线宽度, 即选用几根DAT信号线(1或4根), 可以在主机初始化后设置. 比特流 SD协议规范的比特流类型有三类： 命令: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的. 响应: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机. 数据: 是在DAT上传输的比特流, 双向传输. 命令和数据流都有一个开始位和结束位. 命令 SD协议定义了两类命令，广播命令以及点对点命令， 广播命令:给所有卡都发送, 某些命令需要响应. 点对点命令:给指定地址的卡发送, 需要响应. 工作模式 卡识别模式:主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成. 数据传输模式:卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应.]]></description>
				<content:encoded><![CDATA[<p>这段时间折腾某芯片上的SDIO，在这里将相关知识整理下，以便备忘。需要注意的是，由于我们的SD只支持SD模式，不支持SPI模式，因此文中内容也是针对SD模式的，后面不再强调此点。</p>
<h2>信号</h2>
<p>CLK:时钟信号<br />
CMD:双向命令和响应信号<br />
DAT0-3:双向数据信号<br />
VDD,VSS:电源和地信号<br />
注:SD模式下可以选择总线宽度, 即选用几根DAT信号线(1或4根), 可以在主机初始化后设置.</p>
<h2>比特流</h2>
<p>SD协议规范的比特流类型有三类：</p>
<ul>
<li><strong>命令</strong>: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的.</li>
<li><strong>响应</strong>: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机.</li>
<li><strong>数据</strong>: 是在DAT上传输的比特流, 双向传输.</li>
</ul>
<p>命令和数据流都有一个开始位和结束位.</p>
<h2>命令</h2>
<p>SD协议定义了两类命令，广播命令以及点对点命令，</p>
<ul>
<li><strong>广播命令</strong>:给所有卡都发送, 某些命令需要响应.</li>
<li><strong>点对点命令</strong>:给指定地址的卡发送, 需要响应.</li>
</ul>
<h2>工作模式</h2>
<ul>
<li><strong>卡识别模式</strong>:主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成.</li>
<li><strong>数据传输模式</strong>:卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/03/29/sd-summary.html/feed</wfw:commentRss>
		<slash:comments>4826</slash:comments>
		</item>
		<item>
		<title>启用FTS编译sqlite并用update更新列值</title>
		<link>http://www.sigma.me/2012/03/16/sqlite-enable-fts-update.html</link>
		<comments>http://www.sigma.me/2012/03/16/sqlite-enable-fts-update.html#comments</comments>
		<pubDate>Fri, 16 Mar 2012 06:53:02 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[沙子]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174216</guid>
		<description><![CDATA[今天，折腾sqlite，需要update一个数据库，发现可以用下面的命令： UPDATE &#60;table&#62; SET &#60;col=new_val&#62; WHERE &#60;oth_col=val&#62; 但是，在ubuntu里面用apt-get安装sqlite后，直接执行上面的语句，会报“no such module:FTS3”,因为默认sqlite编译是没有启用FTS3的。因此，需要自己下源码编译，手动编译是加入以下编译选项： -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS 用autoconf版本的话，在configure时，加入： CPPFLAGS= "-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS "/configure &#60;options&#62; 上面两种方法的目的都是一样的，就是在编译时定义SQLITE_ENABLE_FTS3 和SQLITE_ENABLE_FTS3_PARENTHESIS宏。 参考资料：http://www.sqlite.org/fts3.html]]></description>
				<content:encoded><![CDATA[<p>今天，折腾sqlite，需要update一个数据库，发现可以用下面的命令：</p>
<pre class="brush: bash; gutter: true">UPDATE &lt;table&gt; SET  &lt;col=new_val&gt; WHERE &lt;oth_col=val&gt;</pre>
<p>但是，在ubuntu里面用apt-get安装sqlite后，直接执行上面的语句，会报“no such module:FTS3”,因为默认sqlite编译是没有启用FTS3的。因此，需要自己下源码编译，手动编译是加入以下编译选项：</p>
<pre class="brush: bash; gutter: true">-DSQLITE_ENABLE_FTS3 
-DSQLITE_ENABLE_FTS3_PARENTHESIS</pre>
<p>用autoconf版本的话，在configure时，加入：</p>
<pre class="brush: bash; gutter: true">CPPFLAGS= "-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS "/configure &lt;options&gt;</pre>
<p>上面两种方法的目的都是一样的，就是在编译时定义SQLITE_ENABLE_FTS3 和SQLITE_ENABLE_FTS3_PARENTHESIS宏。</p>
<p>参考资料：<a href="http://www.sqlite.org/fts3.html">http://www.sqlite.org/fts3.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/03/16/sqlite-enable-fts-update.html/feed</wfw:commentRss>
		<slash:comments>3826</slash:comments>
		</item>
		<item>
		<title>关于Python变量和List的append操作</title>
		<link>http://www.sigma.me/2012/02/28/python-variable-and-list-append.html</link>
		<comments>http://www.sigma.me/2012/02/28/python-variable-and-list-append.html#comments</comments>
		<pubDate>Tue, 28 Feb 2012 11:43:56 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[编程语音]]></category>
		<category><![CDATA[贝壳]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[作用域]]></category>
		<category><![CDATA[变量]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174190</guid>
		<description><![CDATA[今天，写Python代码，碰到一个很诡异的问题，花了好长时间才明白（也怪我基础不好，没系统学习python，都是用的时候直接抓脑皮用），通过这个问题，我基本搞清楚了Python中的变量以及List的一些操作。在这里给自己Mark下，也希望对读这篇文章的人有点用。 首先，看下面这段代码： #!/usr/bin/python # -*- coding: utf-8 -*- import os,sys trace_file = open("./all_memtrace_file_test","r") all_addr=[] all_addr2=[] addr_info2={} addr_info={} for line in trace_file.readlines(): addr_info = {'addr':int(line.split(",")[2].strip(" "),16),'access':line.split(",")[3].strip("n")} # addr_info2={} addr_info2['addr']=int(line.split(",")[2].strip(" "),16) addr_info2['access']=line.split(",")[3].strip("n") if addr_info == addr_info2: print "addr_info == addr_info2" print "addr_info = ", print addr_info print "addr_info2 = ", print addr_info2 all_addr.append(addr_info) all_addr2.append(addr_info2) print "all_addr = [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今天，写Python代码，碰到一个很诡异的问题，花了好长时间才明白（也怪我基础不好，没系统学习python，都是用的时候直接抓脑皮用），通过这个问题，我基本搞清楚了Python中的变量以及List的一些操作。在这里给自己Mark下，也希望对读这篇文章的人有点用。<br />
首先，看下面这段代码：</p>
<pre class="brush: python; gutter: true">#!/usr/bin/python
# -*- coding: utf-8 -*- 

import os,sys

trace_file = open("./all_memtrace_file_test","r")

all_addr=[]
all_addr2=[]
addr_info2={}
addr_info={}

for line in trace_file.readlines():
    addr_info = {'addr':int(line.split(",")[2].strip(" "),16),'access':line.split(",")[3].strip("n")}
#    addr_info2={}
    addr_info2['addr']=int(line.split(",")[2].strip(" "),16)
    addr_info2['access']=line.split(",")[3].strip("n")
    if addr_info == addr_info2:
        print "addr_info == addr_info2"
    print "addr_info  = ",
    print addr_info
    print "addr_info2 = ",
    print addr_info2
    all_addr.append(addr_info)
    all_addr2.append(addr_info2)
    print "all_addr   = ",
    print all_addr
    print "all_addr2  = ",
    print all_addr2</pre>
<p><span id="more-1174190"></span>其中./all_memtrace_file_test的内容如下：</p>
<pre class="brush: actionscript3; gutter: true"> 0,              49, 0x7fdc000,l
 0,              52, 0x20049c4,l</pre>
<p>咋一看，all_addr和all_addr2应该是一样的，结果应该是：</p>
<pre class="brush: actionscript3; gutter: true">addr_info == addr_info2
addr_info  =  {'access': 'l', 'addr': 134070272}
addr_info2 =  {'access': 'l', 'addr': 134070272}
all_addr   =  [{'access': 'l', 'addr': 134070272}]
all_addr2  =  [{'access': 'l', 'addr': 134070272}]
addr_info == addr_info2
addr_info  =  {'access': 'l', 'addr': 33573316}
addr_info2 =  {'access': 'l', 'addr': 33573316}
all_addr   =  [{'access': 'l', 'addr': 134070272}, {'access': 'l', 'addr': 33573316}]
all_addr2  =  [{'access': 'l', 'addr': 134070272}, {'access': 'l', 'addr': 33573316}]</pre>
<p>而实际上，结果确实第二次循环时，all_addr和all_addr2不一样，结果是：</p>
<pre class="brush: actionscript3; gutter: true">addr_info == addr_info2
addr_info  =  {'access': 'l', 'addr': 134070272}
addr_info2 =  {'access': 'l', 'addr': 134070272}
all_addr   =  [{'access': 'l', 'addr': 134070272}]
all_addr2  =  [{'access': 'l', 'addr': 134070272}]
addr_info == addr_info2
addr_info  =  {'access': 'l', 'addr': 33573316}
addr_info2 =  {'access': 'l', 'addr': 33573316}
all_addr   =  [{'access': 'l', 'addr': 134070272}, {'access': 'l', 'addr': 33573316}]
all_addr2  =  [{'access': 'l', 'addr': 33573316}, {'access': 'l', 'addr': 33573316}]</pre>
<p>我想了好久，才明白这是为什么。要明白具体的原因，需要了解Python变量以及append函数的知识，具体为：</p>
<ol>
<li>python变量其实都是“引用”(reference)，并不会实际给其分配内存空间。</li>
<li>python变量作用域遵循LGB原则，即先局部（local scope），后全局（global scope）。</li>
<li>python中，只要是对字典全局赋值（<del>右值不为字典变量</del>之前描述有误，在rex提醒下，应为右值不为字典变量的某一项），就是创建了一个字典，会申请一块内存，并且将该字典变量指向该内存。如前述代码14行，就定义了一个新的局部字典变量addr_info。根据LGB原则，此后在该代码区块中使用的addr_info就是这个局部变量。</li>
<li>假如只对字典某一项赋值，是更新字典，如代码中16，17行。因此addr_info2还是全局变量，没有定义新的变量。</li>
<li>list的append函数，就是把变量（也就是引用，相当于指针）加在列表后面。因此，对于all_addr，由于两次执行14行语句，都创建了变量，申请的新的内存，因此append上的两个变量所指向的内存是不同的。而对all_addr2，由于都是append全局的addr_info2,导致实际上列表上两项指向的是相同的内存区块，其值一样。假如将15行的注释去掉，则创建了两次变量，list里面的两项指向不同内存。</li>
</ol>
<p>为了将上面的问题简化，有这样一段代码，可以说明上面的几点：</p>
<pre class="brush: python; gutter: true">test_item0,test_item1,test_item2 = [1,1],[2,2],[3,3]
test_list=[]
test_list.append(test_item0)
test_list.append(test_item1)
test_list.append(test_item2)
print "test_list = ",
print test_list
test_item0[0]=4
test_item0[1]=4
test_item1=[5,5]
print "test_list = ",
print test_list</pre>
<p>上面代码的输出是：</p>
<pre class="brush: actionscript3; gutter: true">test_list =  [[1, 1], [2, 2], [3, 3]]
test_list =  [[4, 4], [2, 2], [3, 3]]</pre>
<p>可以发现，test_item0没有重新创建，而test_item1被重新创建了，从而导致test_list里面只有test_item0被更新。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/28/python-variable-and-list-append.html/feed</wfw:commentRss>
		<slash:comments>5076</slash:comments>
		</item>
		<item>
		<title>mark</title>
		<link>http://www.sigma.me/2012/02/26/mark.html</link>
		<comments>http://www.sigma.me/2012/02/26/mark.html#comments</comments>
		<pubDate>Sun, 26 Feb 2012 12:33:35 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174204</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/26/mark.html/feed</wfw:commentRss>
		<slash:comments>4338</slash:comments>
		</item>
		<item>
		<title>由《商海通牒(Margin Call)》所想到的</title>
		<link>http://www.sigma.me/2012/02/17/about-margin-call.html</link>
		<comments>http://www.sigma.me/2012/02/17/about-margin-call.html#comments</comments>
		<pubDate>Fri, 17 Feb 2012 14:45:40 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[随感]]></category>
		<category><![CDATA[Margin Call]]></category>
		<category><![CDATA[商海通牒]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[电影]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174195</guid>
		<description><![CDATA[上周末，看了关于华尔街，关于金融的电影《Margin Call》，中译《商海通牒》，又译《孖展风云(港)》 /《 黑心交易员的告白(台)》 / 《利益召唤》。这部电影个人感觉还不错，大致讲了在08年金融危机来临之前的华尔街，一个金融巨鳄是如何陷入危机，并转嫁危机的，从而对整个金融业造成更大动荡，看完以后对金融游戏有些了解（其实我虽然我从没想过涉足金融领域，但对金融还是有兴趣的，毕竟其已经深刻的影响我们的生活）。在这里，我不想介绍其具体介绍或剧情，有需要的可以看豆瓣电影的相关词条。其实这部电影对我印象最深的是一段对白，在这里分享下： ﻿﻿你知道吗，我以前造过座桥，我以前是个工程师。 这桥连接俄亥俄的多士巴和西维吉尼亚的玛瑟夫，在俄亥俄州河面上横跨912英尺[约277米]。 每天有一万两千一百人通过这桥，把从惠灵到新马顿赛的单程距离缩短了三十五英里； 一天总共是八十四万七千英里； 一个月两千五百四十一万英里； 一年 三亿四百九十二万英里就这么节省下来了。 那桥是我在1986年完成的， 就是二十二年前从桥建成以后算起，总共节省了六十七亿八百二十四万英里的车程。 时速呢，就算五十英里每小时吧，那就是一亿三千四百十六万四千八百小时， 也就是五十五万九千零二十天。 这么一座小桥，让这两个社区的居民总共节省了一千五百三十一年，不用浪费在车厢里。 一千五百三十一年啊！老天啊！ 就修一座桥，对于工程师，也许花费的时间不到一个月，但实实在在的数字表明，其作用却可以让人节省一千五百三十一年以上，这个结果真令人震惊。这也使我思考，我以后应该做什么样的工作，那就是具有可放大性的工作，就是价值可放大的工作。其实这词来自《黑客与画家》，上学期有段时间，我中午一般在三叶休息，房间里有本《黑客与画家》，顺手看完了，这本书很不错，推荐给我的程序员朋友们，乃至所有的朋友们。 所谓可放大性的工作，最基本的要求就是你做的工作能够影响到很多人乃至让很多人受益，这可以实现高的社会价值；实现了高的社会价值，一般来说，上帝是公平的，必然能带来高的自我价值，说得俗一点，就是能赚比较多的钱，能让身边的人和自己活得轻松自在舒适一点。具体来说，可放大性可以有两种体现方式，现在和未来（没有过去）： 所谓现在，是指在当代就能使用的，当代就能影响到很多人，由于社会价值能够体现比较及时，其个人价值也比较容易实现，但是，其价值起作用的时间可能比较短，尤其是技术革新这么快的时代；这类主要体现在一些顶级工程师，比如设计搜索引擎的工程师，一个好的搜索引擎能够让几十亿人找信息的速度提高不知道多少倍，为人们省下了不知道多少时间；larry page，李彦宏这些人的代表。 所谓未来，主要是能够影响很长远的，这些主要是一些基础研究，原创发明，又曰学术研究。这些东西，刚出来的时候很难看到其价值，实现的社会价值往往在未来，因此其个人价值可能比较难实现，有可能得不到对等的个人价值。不过，这类人（学术研究人员）的个人价值平均来说也不低，即使你没有做出对等的社会价值，也能生活的还行，因为做得很多事的价值是很难在现在评判的。 前面有一句话“一般来说，上帝是公平的”，也就是说，有时不会那么公平。这就要求我们的工作，具有可测量性，这样的话，就比较容易实现和社会对等的个人价值。这一般要求，我们的工作要么是独一无二的（这个貌似很难实现），要么是在小团队里，大家都能看得明明白白；因为在一个大的团队里，每个人的贡献虽然不一样，但最终的收益一般还是比较接近的；但是，小团队风险大，所以这是一个矛盾。 那么，到底怎么样的工作才是我所需要的呢。假如没有选择，很好，唯一地就是最好的，可是，一般不会出现这种情况，因为只要你想改变，总是能够改变，能够有新的选择；当还有选择的时候，其实是一种博弈，这博弈中间的变量（对人来说，主要有个人兴趣，个人能力，以及社会背景）还会随时间变化，因此，你很可能一开始想要选择的，并不一定是你最终选择。写到这，又想到之前看过的另一个和金融相关的半商战片《亲密敌人》，博弈的结果往往是意想不到的：原来黄立行和徐静蕾，是竞争对手，是敌人，可是由于外部因素和内部因素，博弈到最后，两人成了合作者，情人。因此，我现在也不知道，最终我会选择什么样的工作，唯一可确定的是，我会尽量选一个社会价值可放大的工作，而现在我需要做的，就是尽量让自己的能力能够满足这些工作的要求，尤其是这两类可放大性工作的共同要求。赢在执行而不是计划！]]></description>
				<content:encoded><![CDATA[<p>上周末，看了关于华尔街，关于金融的电影《Margin Call》，中译《商海通牒》，又译《孖展风云(港)》 /《 黑心交易员的告白(台)》 / 《利益召唤》。这部电影个人感觉还不错，大致讲了在08年金融危机来临之前的华尔街，一个金融巨鳄是如何陷入危机，并转嫁危机的，从而对整个金融业造成更大动荡，看完以后对金融游戏有些了解（其实我虽然我从没想过涉足金融领域，但对金融还是有兴趣的，毕竟其已经深刻的影响我们的生活）。在这里，我不想介绍其具体介绍或剧情，有需要的可以看豆瓣电影的<a href="http://movie.douban.com/subject/4888853/">相关词条</a>。其实这部电影对我印象最深的是一段对白，在这里分享下：</p>
<blockquote><p>﻿﻿你知道吗，我以前造过座桥，我以前是个工程师。<br />
这桥连接俄亥俄的多士巴和西维吉尼亚的玛瑟夫，在俄亥俄州河面上横跨912英尺[约277米]。<br />
每天有一万两千一百人通过这桥，把从惠灵到新马顿赛的单程距离缩短了三十五英里；<br />
一天总共是八十四万七千英里；<br />
一个月两千五百四十一万英里；<br />
一年 三亿四百九十二万英里就这么节省下来了。<br />
那桥是我在1986年完成的，<br />
就是二十二年前从桥建成以后算起，总共节省了六十七亿八百二十四万英里的车程。<br />
时速呢，就算五十英里每小时吧，那就是一亿三千四百十六万四千八百小时，<br />
也就是五十五万九千零二十天。<br />
这么一座小桥，让这两个社区的居民总共节省了一千五百三十一年，不用浪费在车厢里。<br />
一千五百三十一年啊！老天啊！</p></blockquote>
<p><span id="more-1174195"></span>就修一座桥，对于工程师，也许花费的时间不到一个月，但实实在在的数字表明，其作用却可以让人节省一千五百三十一年以上，这个结果真令人震惊。这也使我思考，我以后应该做什么样的工作，那就是具有<span style="color: #ff0000;">可放大性的工作</span>，就是价值可放大的工作。其实这词来自《黑客与画家》，上学期有段时间，我中午一般在三叶休息，房间里有本《黑客与画家》，顺手看完了，这本书很不错，推荐给我的程序员朋友们，乃至所有的朋友们。</p>
<p>所谓可放大性的工作，最基本的要求就是你做的工作能够影响到很多人乃至让很多人受益，这可以实现高的社会价值；实现了高的社会价值，<span style="color: #ff0000;">一般来说，上帝是公平的</span>，必然能带来高的自我价值，说得俗一点，就是能赚比较多的钱，能让身边的人和自己活得轻松自在舒适一点。具体来说，可放大性可以有两种体现方式，现在和未来（<span style="color: #ff0000;">没有过去</span>）：</p>
<p>所谓现在，是指在当代就能使用的，当代就能影响到很多人，由于社会价值能够体现比较及时，其个人价值也比较容易实现，但是，其价值起作用的时间可能比较短，尤其是技术革新这么快的时代；这类主要体现在一些顶级工程师，比如设计搜索引擎的工程师，一个好的搜索引擎能够让几十亿人找信息的速度提高不知道多少倍，为人们省下了不知道多少时间；larry page，李彦宏这些人的代表。</p>
<p>所谓未来，主要是能够影响很长远的，这些主要是一些基础研究，原创发明，又曰学术研究。这些东西，刚出来的时候很难看到其价值，实现的社会价值往往在未来，因此其个人价值可能比较难实现，有可能得不到对等的个人价值。不过，这类人（学术研究人员）的个人价值平均来说也不低，即使你没有做出对等的社会价值，也能生活的还行，因为做得很多事的价值是很难在现在评判的。</p>
<p>前面有一句话“<span style="color: #ff0000;">一般来说，上帝是公平的</span>”，也就是说，有时不会那么公平。这就要求我们的工作，具有可测量性，这样的话，就比较容易实现和社会对等的个人价值。这一般要求，我们的工作要么是独一无二的（这个貌似很难实现），要么是在小团队里，大家都能看得明明白白；因为在一个大的团队里，每个人的贡献虽然不一样，但最终的收益一般还是比较接近的；但是，小团队风险大，所以这是一个矛盾。</p>
<p>那么，到底怎么样的工作才是我所需要的呢。假如没有选择，很好，唯一地就是最好的，可是，一般不会出现这种情况，因为只要你想改变，总是能够改变，能够有新的选择；当还有选择的时候，其实是一种博弈，这博弈中间的变量（对人来说，主要有个人兴趣，个人能力，以及社会背景）还会随时间变化，因此，你很可能一开始想要选择的，并不一定是你最终选择。写到这，又想到之前看过的另一个和金融相关的半商战片《亲密敌人》，博弈的结果往往是意想不到的：原来黄立行和徐静蕾，是竞争对手，是敌人，可是由于外部因素和内部因素，博弈到最后，两人成了合作者，情人。因此，我现在也不知道，最终我会选择什么样的工作，唯一可确定的是，我会尽量选一个社会价值可放大的工作，而现在我需要做的，就是尽量让自己的能力能够满足这些工作的要求，尤其是这两类可放大性工作的共同要求。赢在执行而不是计划！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/17/about-margin-call.html/feed</wfw:commentRss>
		<slash:comments>3236</slash:comments>
		</item>
		<item>
		<title>事务和事务内存</title>
		<link>http://www.sigma.me/2012/02/12/transaction-and-transaction-memor.html</link>
		<comments>http://www.sigma.me/2012/02/12/transaction-and-transaction-memor.html#comments</comments>
		<pubDate>Sun, 12 Feb 2012 10:48:27 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[芯片设计]]></category>
		<category><![CDATA[事务]]></category>
		<category><![CDATA[事务内存]]></category>
		<category><![CDATA[处理器]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174184</guid>
		<description><![CDATA[今天(2月9日)，看到solidot报道，英特尔下一代Haswell处理器硬件支持事务内存，感觉有点小意外。 其实很早以前（2009年），我就对事务内存关注过一段时间，当时，号称要支持的事务内存的处理器只有（据我所知）只有sun公司的Rock处理器，可是这个Rock，一再跳票，跳到Sun陨落也没发布，到现在，oracle也没发布支持事务内存的处理器。事务内存（尤其是硬件实现的）的前景貌似不太明朗。 2011年9月，IBM发布了BlueGene/Q处理器，这是第一款支持事务内存的处理器。但是，这并不意味着事务内存重见天日了。 2012年2月7日，最大的处理器厂商发表文章，声称支持硬件事务内存，其通过Transactional Synchronization Extensions(TSX)的组件来实现的，事务内存的前景终于开始明朗起来。 那么，什么是事务，什么又是事务内存呢。 根据维基百科整理，事务的定义为： 数据库事务(简称: 事务)是数据库管理系统执行过程中的一个逻辑单位，由一个有限的数据库操作序列构成。在数据库管理系统中，事务必须满足ACID性质，即原子性，一致性，隔离性和持久性。原子性指的是事务中的动作要么全部执行，要么一个都不执行；一致性指的是任何时刻，数据库必须处于一致性状态，即必须满足某些预先设定的条件；隔离性是指一个事务不能看见其他未提交事务所涉及到的内部对象的状态，而持久性则是指一个已提交的事务对数据库系统的改变必须是永久的。 那事务内存又是什么，根据国防科大张铎等人的《事务存储结构的实现》一文，事务内存是这样介绍的（为了准确，以下为直接引文，完成内存详见《事务存储结构的实现》一文）： 随着多核处理器技术的不断更新和发展，传统的串行程序不论在效率上还是性能上都已经跟不上信息高速发展的脚步了，程序员不得不开发线程级并行以提高片上计算资源的使用效率，但也带来了新的挑战和问题。目前不同线程间的同步、对共享资源的访问等都是通过锁和信号量机制完成的。然而，这种传统的基于锁和信号量的并发系统存在明显的局限性。粗粒度的锁对大量的共享数据做了保护，但是可扩展性不好，因为即使在线程间不存在对共享数据的访问的情况下也可能会出现冲突阻塞现象；细粒度的锁虽然比粗粒度的锁扩展性能好，但由于算法设计的复杂性，普通程序员很难借助细力度的锁实现高效的应用。同时使用锁机制还会带来诸多问题，比如：死锁、优先级反转等，极大地影响了并行应用的效率和性能。 事务存储(Transactional Memory，TM)的使用是解决上述存在问题一个很好的办法[1]。通过将不同并行执行的线程事务化，用事务操作来代替锁机制能降低编程的复杂性。事务是被单线程执行的对内存进行读写的有序操作序列，其特性包括：原子性、隔离性、一致性和持久性。通常事务的执行过程为：调用事务入口函数(begin_transaction)开始执行事务，当事务执行完毕后调用提交函数(commit_transaction)开始提交工作，提交过程分为三个阶段(请求提交、开始提交和完成提交)，执行完提交后此事务也就执行完毕，从而继续执行下面的事务。但如果事务在执行或提交过程中发生冲突或者错误，则通过其特有的回滚机制 (rollback)返回到此事务入口继续执行。 为了实现事务的这些特性，需有一个很好的TM系统来支持事务数据的版本管理(Version Management)和事务的冲突管理(Contention Management)。版本管理同时对新值(事务提交后可见)和原始的旧值(事务执行过程中发生了回滚的恢复数据)进行管理。根据数据存放方式的不同TM系统区分版本管理为：积极版本管理(Eager Version Management)和懒惰版本管理(Lazy Version Management)。积极版本管理是将新值置于目标存储区中，这样在提交时新值能够很快的得到执行，极大地降低了提交的时延；而懒惰版本管理是将原始的旧值置于目标存储区，虽然会增加提交的延时但是降低了当事务发生回滚后执行的延时。冲突管理是不同事务执行过程中对共享资源访问引发冲突而进行的冲突检测以及管理的机制。冲突管理有积极的(Eager)和懒惰的(Lazy)两种策略，如果冲突在读数据或写数据时立刻被发现而进行仲裁，这种冲突检测是积极的；如果冲突是在事务进行提交时才发现并仲裁的，这种冲突检测则是懒惰的。 可以看出，事务内存的出现就是为了解决并行编程存储一致性和性能矛盾的问题，传统的锁机制会导致性能低下，并且可扩展星差，而事务内存，则尝试在体系结构和程序员之间定义一个新的一致性，也即事务一致性，对应的内存模型叫做事务内存。从上面一段话可以看出，硬件事务内存有很多问题需要解决，包括版本管理，以及冲突管理，而对于硬件，只有有限的资源，因此，这就限制了事务的长度，使（硬件）事务内存的实现难度和实用性大大降低，这也许是Rock难产的原因之一。]]></description>
				<content:encoded><![CDATA[<p>今天(2月9日)，看到solidot<a href="http://hardware.solidot.org/hardware/12/02/09/0846220.shtml">报道</a>，英特尔下一代Haswell处理器硬件支持事务内存，感觉有点小意外。</p>
<p>其实很早以前（2009年），我就对事务内存关注过一段时间，当时，号称要支持的事务内存的处理器只有（据我所知）只有sun公司的Rock处理器，可是这个Rock，一再跳票，跳到Sun陨落也没发布，到现在，oracle也没发布支持事务内存的处理器。事务内存（尤其是硬件实现的）的前景貌似不太明朗。</p>
<p>2011年9月，IBM发布了BlueGene/Q处理器，这是第一款支持事务内存的处理器。但是，这并不意味着事务内存重见天日了。<br />
2012年2月7日，最大的处理器厂商发表文章，声称支持硬件事务内存，其通过Transactional Synchronization Extensions(TSX)的组件来实现的，事务内存的前景终于开始明朗起来。</p>
<p>那么，什么是事务，什么又是事务内存呢。</p>
<p>根据维基百科整理，事务的定义为：</p>
<blockquote><p>数据库事务(简称: 事务)是数据库管理系统执行过程中的一个逻辑单位，由一个有限的数据库操作序列构成。在数据库管理系统中，事务必须满足ACID性质，即原子性，一致性，隔离性和持久性。原子性指的是事务中的动作要么全部执行，要么一个都不执行；一致性指的是任何时刻，数据库必须处于一致性状态，即必须满足某些预先设定的条件；隔离性是指一个事务不能看见其他未提交事务所涉及到的内部对象的状态，而持久性则是指一个已提交的事务对数据库系统的改变必须是永久的。<span id="more-1174184"></span></p></blockquote>
<p>那事务内存又是什么，根据国防科大张铎等人的《<a href="http://www.opengpu.org/forum.php?mod=viewthread&amp;tid=138">事务存储结构的实现</a>》一文，事务内存是这样介绍的（为了准确，以下为直接引文，完成内存详见《<a href="http://www.opengpu.org/forum.php?mod=viewthread&amp;tid=138">事务存储结构的实现</a>》一文）：</p>
<blockquote><p>随着多核处理器技术的不断更新和发展，传统的串行程序不论在效率上还是性能上都已经跟不上信息高速发展的脚步了，程序员不得不开发线程级并行以提高片上计算资源的使用效率，但也带来了新的挑战和问题。目前不同线程间的同步、对共享资源的访问等都是通过锁和信号量机制完成的。然而，这种传统的基于锁和信号量的并发系统存在明显的局限性。粗粒度的锁对大量的共享数据做了保护，但是可扩展性不好，因为即使在线程间不存在对共享数据的访问的情况下也可能会出现冲突阻塞现象；细粒度的锁虽然比粗粒度的锁扩展性能好，但由于算法设计的复杂性，普通程序员很难借助细力度的锁实现高效的应用。同时使用锁机制还会带来诸多问题，比如：死锁、优先级反转等，极大地影响了并行应用的效率和性能。</p>
<p>事务存储(Transactional Memory，TM)的使用是解决上述存在问题一个很好的办法[1]。通过将不同并行执行的线程事务化，用事务操作来代替锁机制能降低编程的复杂性。事务是被单线程执行的对内存进行读写的有序操作序列，其特性包括：原子性、隔离性、一致性和持久性。通常事务的执行过程为：调用事务入口函数(begin_transaction)开始执行事务，当事务执行完毕后调用提交函数(commit_transaction)开始提交工作，提交过程分为三个阶段(请求提交、开始提交和完成提交)，执行完提交后此事务也就执行完毕，从而继续执行下面的事务。但如果事务在执行或提交过程中发生冲突或者错误，则通过其特有的回滚机制 (rollback)返回到此事务入口继续执行。</p>
<p>为了实现事务的这些特性，需有一个很好的TM系统来支持事务数据的版本管理(Version Management)和事务的冲突管理(Contention Management)。版本管理同时对新值(事务提交后可见)和原始的旧值(事务执行过程中发生了回滚的恢复数据)进行管理。根据数据存放方式的不同TM系统区分版本管理为：积极版本管理(Eager Version Management)和懒惰版本管理(Lazy Version Management)。积极版本管理是将新值置于目标存储区中，这样在提交时新值能够很快的得到执行，极大地降低了提交的时延；而懒惰版本管理是将原始的旧值置于目标存储区，虽然会增加提交的延时但是降低了当事务发生回滚后执行的延时。冲突管理是不同事务执行过程中对共享资源访问引发冲突而进行的冲突检测以及管理的机制。冲突管理有积极的(Eager)和懒惰的(Lazy)两种策略，如果冲突在读数据或写数据时立刻被发现而进行仲裁，这种冲突检测是积极的；如果冲突是在事务进行提交时才发现并仲裁的，这种冲突检测则是懒惰的。</p></blockquote>
<p>可以看出，事务内存的出现就是为了解决并行编程存储一致性和性能矛盾的问题，传统的锁机制会导致性能低下，并且可扩展星差，而事务内存，则尝试在体系结构和程序员之间定义一个新的一致性，也即事务一致性，对应的内存模型叫做事务内存。从上面一段话可以看出，硬件事务内存有很多问题需要解决，包括版本管理，以及冲突管理，而对于硬件，只有有限的资源，因此，这就限制了事务的长度，使（硬件）事务内存的实现难度和实用性大大降低，这也许是Rock难产的原因之一。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/12/transaction-and-transaction-memor.html/feed</wfw:commentRss>
		<slash:comments>5741</slash:comments>
		</item>
		<item>
		<title>程序/进程的前世今生</title>
		<link>http://www.sigma.me/2012/02/08/%e7%a8%8b%e5%ba%8f%e8%bf%9b%e7%a8%8b%e7%9a%84%e5%89%8d%e4%b8%96%e4%bb%8a%e7%94%9f.html</link>
		<comments>http://www.sigma.me/2012/02/08/%e7%a8%8b%e5%ba%8f%e8%bf%9b%e7%a8%8b%e7%9a%84%e5%89%8d%e4%b8%96%e4%bb%8a%e7%94%9f.html#comments</comments>
		<pubDate>Wed, 08 Feb 2012 14:47:10 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[加载]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[编译]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[进程]]></category>
		<category><![CDATA[链接]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174175</guid>
		<description><![CDATA[在这篇文章中，将介绍下程序从源码，到目标文件，到二进制码，再到装载，运行以及退出的整个过程，简称程序/进程的前世今生。 首先，区分一下程序和进程的概念。程序是一个静态的概念，而进程是一个动态的概念。程序一般是指从源码到二进制码这些过程的实体（勉强简称为前世），而进程则是从装载，到执行，到推出的实体（勉强简称为今生）。维基百科对两个概念的定义为： 程序的定义： 计算机程序或者软件程序（通常简称程序）是指一组指示计算机或其他具有讯息处理能力装置每一步动作的指令，通常用某种程序设计语言编写，运行于某种目标体系结构上。 进程的定义： 行程（英语：Process，中国大陆译作进程，台湾译作行程）是计算机中已执行程序的实体。行程本身不会执行，是线程的容器。程式本身只是指令的集合，行程才是程式（那些指令）的真正执行。 对于上面进程的定义，个人觉得有点问题(不仅仅是大陆台湾叫法不同的问题)，我认为应该是&#8221;进程是计算机已执行程序的实体。对于多线程程序，程序可能存在多个同时执行的指令流和控制流，称为线程。程序本身知识指令的集合，进程才是那些指令的真正执行&#8221;。 下面，就开始介绍程序/进程的前世今生，由于内容较多，在这里只是介绍前世今生的各个阶段，各个阶段的详细介绍，后面有空的话，并且觉得有必要的话，会单独写一文。不废话，转入正题，程序/进程大致需要经过以下阶段完成其前世今生(以C语言以及Linux进程为例)： 源码阶段：表现形式为符合某种程序语言设计语言语法的文本。如大名鼎鼎的C语言以及其上大名鼎鼎helloworld.c源码： #include &#60;stdio.h&#62; void main(void) { printf("Hello World\n"); } 编译阶段：这阶段的作用是将程序从源码转化成特定体系结构特定指令集的二进制文件的过程，这个阶段一般由编译器完成，如Linux下gcc可以通过&#8221;gcc helloworld.c -o helloworld&#8221;完成签署helloword.c的编译。编译是一个很复杂的过程，不是一步完成的，可以分成很多步，事实上，gcc程序就是由一系列工具组成的，不通工具负责不同编译的不通阶段，大致分为一下阶段（这里简略介绍下，详细介绍可能会另开一文）： 预处理：主要包括宏替换，文件包含，以及特殊符号等的处理 编译：主要包括词法分析和语法分析以及优化。此阶段完成后将得到一个临时汇编文件进而根据指令编码转化成二进制的目标文件。目标文件一般以.o结尾。 链接：链接过程主要完成的是不通源文件之间函数调用的链接以及不通目标文件地址的统一编码，从而得到真正的可执行文件。链接分为两种，静态链接和动态链接。 加载阶段：程序的加载（装载）是通过操作系统的程序加载器将程序加载到内存并建立起进程的过程（需要强调的是，加载器不会把整个程序加载进去，很多都是动态加载的，一般都是只会将起始地址更新到进程控制块中）。详细的过程另文说明。 执行阶段：就是执行程序的指令，不过其中会碰到各种内部的例外（如缺页）以及外部的中断（如IO），需要处理。暂时不详细介绍。 进程退出：这个阶段是指进程被杀死时的行为，主要包括释放内存，释放打开的文件等操作。 &#160;]]></description>
				<content:encoded><![CDATA[<p>在这篇文章中，将介绍下程序从源码，到目标文件，到二进制码，再到装载，运行以及退出的整个过程，简称程序/进程的前世今生。</p>
<p>首先，区分一下程序和进程的概念。程序是一个静态的概念，而进程是一个动态的概念。程序一般是指从源码到二进制码这些过程的实体（勉强简称为<strong>前世</strong>），而进程则是从装载，到执行，到推出的实体（勉强简称为<strong>今生</strong>）。维基百科对两个概念的定义为：</p>
<p>程序的定义：</p>
<blockquote><p><strong>计算机程序</strong>或者<strong>软件程序</strong>（通常简称<strong>程序</strong>）是指一组指示计算机或其他具有讯息处理能力装置每一步动作的指令，通常用某种程序设计语言编写，运行于某种目标体系结构上。</p></blockquote>
<p>进程的定义：</p>
<blockquote><p><strong>行程</strong>（英语：Process，中国大陆译作<strong>进程</strong>，台湾译作<strong>行程</strong>）是计算机中已执行程序的实体。行程本身不会执行，是线程的容器。程式本身只是指令的集合，行程才是程式（那些指令）的真正执行。</p></blockquote>
<p>对于上面进程的定义，个人觉得有点问题(不仅仅是大陆台湾叫法不同的问题)，我认为应该是&#8221;进程是计算机已执行程序的实体。对于多线程程序，程序可能存在多个同时执行的指令流和控制流，称为线程。程序本身知识指令的集合，进程才是那些指令的真正执行&#8221;。</p>
<p>下面，就开始介绍程序/进程的前世今生，由于内容较多，在这里只是介绍前世今生的各个阶段，各个阶段的详细介绍，后面有空的话，并且觉得有必要的话，会单独写一文。不废话，转入正题，程序/进程大致需要经过以下阶段完成其前世今生(以C语言以及Linux进程为例)：<span id="more-1174175"></span></p>
<ul>
<li><strong>源码阶段</strong>：表现形式为符合某种程序语言设计语言语法的文本。如大名鼎鼎的C语言以及其上大名鼎鼎helloworld.c源码：
<pre class="brush: actionscript3; gutter: true">#include &lt;stdio.h&gt;

void main(void)
{
    printf("Hello World\n");
}</pre>
</li>
<li><strong>编译阶段</strong>：这阶段的作用是将程序从源码转化成特定体系结构特定指令集的二进制文件的过程，这个阶段一般由编译器完成，如Linux下gcc可以通过&#8221;gcc helloworld.c -o helloworld&#8221;完成签署helloword.c的编译。编译是一个很复杂的过程，不是一步完成的，可以分成很多步，事实上，gcc程序就是由一系列工具组成的，不通工具负责不同编译的不通阶段，大致分为一下阶段（这里简略介绍下，详细介绍可能会另开一文）：
<ol>
<li><strong>预处理</strong>：主要包括宏替换，文件包含，以及特殊符号等的处理</li>
<li><strong>编译</strong>：主要包括词法分析和语法分析以及优化。此阶段完成后将得到一个临时汇编文件进而根据指令编码转化成二进制的目标文件。目标文件一般以.o结尾。</li>
<li><strong>链接</strong>：链接过程主要完成的是不通源文件之间函数调用的链接以及不通目标文件地址的统一编码，从而得到真正的可执行文件。链接分为两种，静态链接和动态链接。</li>
</ol>
</li>
<li><strong>加载阶段</strong>：程序的加载（装载）是通过操作系统的程序加载器将程序加载到内存并建立起进程的过程（需要强调的是，加载器不会把整个程序加载进去，很多都是动态加载的，一般都是只会将起始地址更新到进程控制块中）。详细的过程另文说明。</li>
<li><strong>执行阶段</strong>：就是执行程序的指令，不过其中会碰到各种内部的例外（如缺页）以及外部的中断（如IO），需要处理。暂时不详细介绍。</li>
<li><strong>进程退出</strong>：这个阶段是指进程被杀死时的行为，主要包括释放内存，释放打开的文件等操作。</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/08/%e7%a8%8b%e5%ba%8f%e8%bf%9b%e7%a8%8b%e7%9a%84%e5%89%8d%e4%b8%96%e4%bb%8a%e7%94%9f.html/feed</wfw:commentRss>
		<slash:comments>2225</slash:comments>
		</item>
		<item>
		<title>笑傲江湖三部曲</title>
		<link>http://www.sigma.me/2012/02/05/swordsman.html</link>
		<comments>http://www.sigma.me/2012/02/05/swordsman.html#comments</comments>
		<pubDate>Sun, 05 Feb 2012 05:58:29 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[电影]]></category>
		<category><![CDATA[笑傲江湖]]></category>
		<category><![CDATA[笑傲江湖三部曲]]></category>
		<category><![CDATA[金庸]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174167</guid>
		<description><![CDATA[昨天无聊，又不想干活，于是去凤凰网随便找了个叫《金庸群侠传》的纪录片看。该纪录片与其说是介绍“群侠”的，不如说是介绍“电影”的，里面的介绍了很多改变自金庸作品的老电影，作为怀旧的我最喜欢看得就是很老的东西了，而其中介绍的《笑傲江湖》三部曲，更是引起了我的兴趣。 于是我跑去六维把笑傲江湖三部曲下了下来，并且花了一晚上算基本看完（因为第三部没怎么看）。 《笑傲江湖》三部曲是1990年，1991年，1992年由徐克，胡金铨，程小东等人导演的三部作品，包括《笑傲江湖》，《笑傲江湖之东方不败》以及《笑傲江湖之东方不败之风云再起》。具体的介绍，可以从百度百科以及维基百科的相关词条了解。 这三部作品中，《笑傲江湖》是奠基之作，也是铺垫之作，为后面的两部，尤其是《笑傲江湖之东方不败》作了铺垫，其中的插曲《沧海一声笑》则是本片的最大亮点。 《笑傲江湖之东方不败》则是该系列的巅峰之作，里面的元素非常多，表达的思想也很多，具有很多突破，应该算是徐克的成名作了。具体的解释网上有很多，我就不赘述，可以参见百度百科“笑傲江湖之东方不败”词条。唯一想说的是，这部片子好多老牌美女呀，林青霞，关之琳，李嘉欣&#8230;. 《笑傲江湖之东方不败之风云再起》则我没怎么看，貌似也不怎么样，唯一的亮点就是那首主题曲《笑红尘》&#8230; 由于文笔太挫，就此顿笔吧，附上笑傲江湖三部曲miniSD的下载链接（六维）： http://bt.neu6.edu.cn/684658 以及笑傲江湖三部曲里面的两首经典歌曲： 沧海一声笑 歌词： 沧海一声笑 演唱：黄霑 罗大佑 徐克 词曲:黄霑 专辑：笑傲江湖（百无禁忌黄霑作品集） 沧海笑 滔滔两岸潮 浮沉随浪记今朝 苍天笑 纷纷世上潮 谁负谁胜出天知晓 江山笑 烟雨遥 涛浪淘尽红尘俗事知多少 清风笑 竟惹寂寥 豪情还剩了 一襟晚照 苍生笑 不再寂寥 豪情仍在痴痴笑笑 啦&#8230;&#8230; 笑红尘 歌词： 笑红尘 （电影『东方不败Ⅱ风云再起』主题曲） 作词：厉曼婷　作曲：李宗盛　编曲：鲍比达 红尘多可笑　痴情最无聊 目空一切也好 此生未了　心却已无所扰 只想换得半世逍遥 醒时对人笑　梦中全忘掉 叹天黑得太早 来生难料　爱恨一笔勾消 对酒当歌我只愿开心到老 风再冷不想逃　花再美也不想要　任我飘摇 天越高心越小　不问因果有多少　独自醉倒 今天哭明天笑　不求有人能明了　一身骄傲 歌在唱舞在跳　长夜慢慢不觉晓　将快乐寻找]]></description>
				<content:encoded><![CDATA[<p>昨天无聊，又不想干活，于是去凤凰网随便找了个叫<a href="http://v.ifeng.com/documentary/culture/201108/7c0572cc-036b-40d5-826c-6df464bbebb8.shtml">《金庸群侠传》的纪录片</a>看。该纪录片与其说是介绍“群侠”的，不如说是介绍“电影”的，里面的介绍了很多改变自金庸作品的老电影，作为怀旧的我最喜欢看得就是很老的东西了，而其中介绍的《笑傲江湖》三部曲，更是引起了我的兴趣。</p>
<p>于是我跑去六维把笑傲江湖三部曲下了下来，并且花了一晚上算基本看完（因为第三部没怎么看）。</p>
<p>《笑傲江湖》三部曲是1990年，1991年，1992年由徐克，胡金铨，程小东等人导演的三部作品，包括《笑傲江湖》，《笑傲江湖之东方不败》以及《笑傲江湖之东方不败之风云再起》。具体的介绍，可以从百度百科以及维基百科的相关词条了解。</p>
<p>这三部作品中，《笑傲江湖》是奠基之作，也是铺垫之作，为后面的两部，尤其是《笑傲江湖之东方不败》作了铺垫，其中的插曲《沧海一声笑》则是本片的最大亮点。</p>
<p>《笑傲江湖之东方不败》则是该系列的巅峰之作，里面的元素非常多，表达的思想也很多，具有很多突破，应该算是徐克的成名作了。具体的解释网上有很多，我就不赘述，可以参见百度百科“<a href="http://baike.baidu.com/view/188695.htm">笑傲江湖之东方不败</a>”词条。唯一想说的是，这部片子好多老牌美女呀，林青霞，关之琳，李嘉欣&#8230;.</p>
<p>《笑傲江湖之东方不败之风云再起》则我没怎么看，貌似也不怎么样，唯一的亮点就是那首主题曲《笑红尘》&#8230;<br />
<span id="more-1174167"></span><br />
由于文笔太挫，就此顿笔吧，附上笑傲江湖三部曲miniSD的下载链接（六维）：<br />
http://bt.neu6.edu.cn/684658<br />
以及笑傲江湖三部曲里面的两首经典歌曲：</p>
<div>
<div id="content_left" style="float: left; width: 48%; padding-right: 2%;">
<h3>沧海一声笑</h3>
<p><embed type="application/x-shockwave-flash" width="257" height="33" src="http://www.xiami.com/widget/0_34814/singlePlayer.swf" wmode="transparent"></embed><br />
歌词：</p>
<p>沧海一声笑<br />
演唱：黄霑 罗大佑 徐克<br />
词曲:黄霑<br />
专辑：笑傲江湖（百无禁忌黄霑作品集）</p>
<p>沧海笑<br />
滔滔两岸潮<br />
浮沉随浪记今朝<br />
苍天笑<br />
纷纷世上潮<br />
谁负谁胜出天知晓<br />
江山笑<br />
烟雨遥<br />
涛浪淘尽红尘俗事知多少<br />
清风笑<br />
竟惹寂寥<br />
豪情还剩了<br />
一襟晚照</p>
<p>苍生笑<br />
不再寂寥<br />
豪情仍在痴痴笑笑</p>
<p>啦&#8230;&#8230;</p>
</div>
<div id="content_right" style="float: right; width: 48%; padding-right: 2%;">
<h3>笑红尘</h3>
<p><embed type="application/x-shockwave-flash" width="257" height="33" src="http://www.xiami.com/widget/0_384809/singlePlayer.swf" wmode="transparent"></embed><br />
歌词：</p>
<p>笑红尘<br />
（电影『东方不败Ⅱ风云再起』主题曲）</p>
<p>作词：厉曼婷　作曲：李宗盛　编曲：鲍比达</p>
<p>红尘多可笑　痴情最无聊<br />
目空一切也好<br />
此生未了　心却已无所扰<br />
只想换得半世逍遥</p>
<p>醒时对人笑　梦中全忘掉<br />
叹天黑得太早<br />
来生难料　爱恨一笔勾消<br />
对酒当歌我只愿开心到老</p>
<p>风再冷不想逃　花再美也不想要　任我飘摇<br />
天越高心越小　不问因果有多少　独自醉倒<br />
今天哭明天笑　不求有人能明了　一身骄傲<br />
歌在唱舞在跳　长夜慢慢不觉晓　将快乐寻找</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/02/05/swordsman.html/feed</wfw:commentRss>
		<slash:comments>4121</slash:comments>
		</item>
		<item>
		<title>我的2011</title>
		<link>http://www.sigma.me/2012/01/12/my-2011.html</link>
		<comments>http://www.sigma.me/2012/01/12/my-2011.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 13:44:48 +0000</pubDate>
		<dc:creator><![CDATA[sigma]]></dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.sigma.me/?p=1174156</guid>
		<description><![CDATA[2011年已经过去了10来天了，其实在1月1日就想凑热闹写个2011的总结的，但是一直由于文笔羞涩，不敢下笔。可是，我貌似曾经下过每年写一个总结的决定，所以，只好硬着头皮，在回家前扯一扯。 2011年，算是我来ICT的第二年了（或者第三年？）了，这一年，感觉再也没有刚来的激情。上半年虽然有课，但基本没上什么课，可能上的课加起来不超过10节，都是靠考试前突击，不过貌似结果尚可；那时，我还住在青年公寓，每天上午11点准时起床，去食堂吃个饭，然后逆着上课回来的人流跑往计算所，然后去机房，调2H代码。 下半年，开局就不利，抽签抽到科一招，也不做工程了，开始“学术”了，可是非常不顺，“撞车”各种事都碰到了，到最后，除了教训，一无所有，这半年过得憋屈！ 上面就算是我的2011的总结了。恩，在写这篇总结前，看到一段话，触动很深，引在这里： 我从没意识到，人生可以短暂到如此精确。回想刚刚过去的四月份，不过就是一眨眼的时间，但是人生的900分之一就已经消失了，真是恐怖啊。 事实上，你可以画一个30&#215;30的表格，一张A4纸就够了。每过一个月，就在一个格子里打钩。你全部的人生就在这张纸上。你会因此有一个清晰的概念：你的人生是如何蹉跎的。 最后，前面写得主要是学习工作相关的，生活没怎么写，由于文笔羞涩，还是用图来补充诠释我2011的生活吧：]]></description>
				<content:encoded><![CDATA[<p>2011年已经过去了10来天了，其实在1月1日就想凑热闹写个2011的总结的，但是一直由于文笔羞涩，不敢下笔。可是，我貌似曾经下过每年写一个总结的决定，所以，只好硬着头皮，在回家前扯一扯。</p>
<p>2011年，算是我来ICT的第二年了（或者第三年？）了，这一年，感觉再也没有刚来的激情。上半年虽然有课，但基本没上什么课，可能上的课加起来不超过10节，都是靠考试前突击，不过貌似结果尚可；那时，我还住在青年公寓，每天上午11点准时起床，去食堂吃个饭，然后逆着上课回来的人流跑往计算所，然后去机房，调2H代码。</p>
<p>下半年，开局就不利，抽签抽到科一招，也不做工程了，开始“学术”了，可是非常不顺，“撞车”各种事都碰到了，到最后，除了教训，一无所有，这半年过得憋屈！</p>
<p>上面就算是我的2011的总结了。恩，在写这篇总结前，看到<a href="http://www.ruanyifeng.com/blog/2011/05/900-month_lifespan.html">一段话</a>，触动很深，引在这里：</p>
<blockquote><p>我从没意识到，人生可以短暂到如此精确。回想刚刚过去的四月份，不过就是一眨眼的时间，但是人生的900分之一就已经消失了，真是恐怖啊。</p>
<p>事实上，你可以画一个30&#215;30的表格，一张A4纸就够了。每过一个月，就在一个格子里打钩。你全部的人生就在这张纸上。你会因此有一个清晰的概念：你的人生是如何蹉跎的。</p></blockquote>
<p>最后，前面写得主要是学习工作相关的，生活没怎么写，由于文笔羞涩，还是用图来补充诠释我2011的生活吧：<span id="more-1174156"></span></p>
<div id="attachment_1174159" style="max-width: 610px" class="wp-caption alignnone"><a href="http://www.sigma.me/wp-content/uploads/2012/01/P1010713_min.jpg"><img class="size-full wp-image-1174159 " title="P1010713_min" src="http://www.sigma.me/wp-content/uploads/2012/01/P1010713_min.jpg" alt="春-和班里同学去野山破，山花和篝火" width="600" height="900" /></a><p class="wp-caption-text">春-和班里同学去野山破，山花和篝火</p></div>
<div id="attachment_1174158" style="max-width: 610px" class="wp-caption alignnone"><a href="http://www.sigma.me/wp-content/uploads/2012/01/P1010784_min.jpg"><img class="size-full wp-image-1174158 " title="P1010784_min" src="http://www.sigma.me/wp-content/uploads/2012/01/P1010784_min.jpg" alt="夏-雨后，窗外的大地和天空" width="600" height="900" /></a><p class="wp-caption-text">夏-雨后，窗外的大地和天空</p></div>
<div id="attachment_1174160" style="max-width: 610px" class="wp-caption alignnone"><a href="http://www.sigma.me/wp-content/uploads/2012/01/P1020341_min.jpg"><img class="size-full wp-image-1174160 " title="P1020341_min" src="http://www.sigma.me/wp-content/uploads/2012/01/P1020341_min.jpg" alt="秋-野长城，后海的孔明灯" width="600" height="900" /></a><p class="wp-caption-text">秋-野长城，后海的孔明灯</p></div>
<div id="attachment_1174161" style="max-width: 610px" class="wp-caption alignnone"><a href="http://www.sigma.me/wp-content/uploads/2012/01/P1020955_min.jpg"><img class="size-full wp-image-1174161 " title="P1020955_min" src="http://www.sigma.me/wp-content/uploads/2012/01/P1020955_min.jpg" alt="冬-颐和园的日落和夜色中的王府井" width="600" height="900" /></a><p class="wp-caption-text">冬-颐和园的日落,王府井教堂</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sigma.me/2012/01/12/my-2011.html/feed</wfw:commentRss>
		<slash:comments>3197</slash:comments>
		</item>
	</channel>
</rss>
