<?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>诗意代码 - PoemCode</title>
	<atom:link href="http://www.poemcode.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.poemcode.net</link>
	<description>These codes, As beautiful as poetry!</description>
	<lastBuildDate>Sun, 05 Feb 2012 13:10:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>读CSAPP之RAM、Locality和Cache</title>
		<link>http://www.poemcode.net/2012/02/csapp-ram-locality-cache/</link>
		<comments>http://www.poemcode.net/2012/02/csapp-ram-locality-cache/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 12:03:21 +0000</pubDate>
		<dc:creator>Xu Haojie</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[CSAPP]]></category>

		<guid isPermaLink="false">http://www.poemcode.net/?p=2731</guid>
		<description><![CDATA[<div class="wp-caption alignright" style="width: 80px"><img class="size-full wp-image-521" title="Professional Assembly Language" src="http://www.poemcode.net/wp-content/uploads/2011/09/csapp.jpg" alt="Professional Assembly Language" width="80" height="100" /></div> 
RAM（Random Access Memory）中文译作随机存取存储器，所谓“随机存取”，指的是当存储器中的消息被读取或写入时，所需要的时间与这段信息所在的位置无关。相对的，读取或写入顺序访问（Sequential Access）存储设备中的信息时，其所需要的时间与位置就会有关系[1]，比如磁盘存储器。

RAM 分为 SRAM 与 DRAM 两大类，二者区别在于前者对干扰（光、电）不敏感，用于高速缓存存储器，后者用于主存和显存，以及数码相机和摄像机中的传感器。]]></description>
			<content:encoded><![CDATA[<p><small>今年是离开校园的第六年，这六年来我一直在从事应用软件的设计、开发工作，大部分时间是在与高级编程语言、设计模式、业务逻辑打交道。它们大多流于表面，久而久之，与技术底层疏远了，诸如计算机组成原理、汇编语言、编译原理、数据结构以及算法慢慢得生疏，时至今日，向上碰到天花板，向下触到花岗岩。五年是一个契机，趁着下一个五年开始之际，我计划用三个月至半年时想间，重新学习这些知识，以期达到巩固基础，厚积薄发的目的。</p>
<p>本篇是我阅读《Computer System: A Programmer’s Perspective》一书的笔记，该书和与之搭配的《Professional Assembly Language》是我当下阅读计划的一部分。</small></p>
<h2>关于RAM</h2>
<p>RAM（Random Access Memory）中文译作随机存取存储器，所谓“随机存取”，指的是当存储器中的消息被读取或写入时，所需要的时间与这段信息所在的位置无关。相对的，读取或写入顺序访问（Sequential Access）存储设备中的信息时，其所需要的时间与位置就会有关系<a href="#ram_wiki"><sup>[1]</sup></a>，比如磁盘存储器。</p>
<p>RAM 分为 SRAM 与 DRAM 两大类，二者区别在于前者对干扰（光、电）不敏感，用于高速缓存存储器，后者用于主存和显存，以及数码相机和摄像机中的传感器。</p>
<p>DRAM 被分成 d 个超单元，每个超单元都是由 w 个 DRAM 单元组成。DRAM 每次传输 w 位信息。超单元被组织成一个 r 行 c 列的阵列，此时 r*c=d。之所以组织成阵列而不是线性数组，原因之一是降低芯片上地址引脚（pin）的数量，缺点是必须分两次发送地址，增加了访问时间。</p>
<h2>关于局部性</h2>
<p>局部性（locality）有两种：时间局部性（temporal locality）和空间局部性（spatial locality）。在一个具有良好时间局部性的程序中，被引用过一次的存储器位置很可能很快不远的将来再被多次引用。在一个具有良好空间局部性的程序中，如果一个存储器位置被引用了一次，那么程序很可能很快引用其附近的位置。</p>
<p>对于具有步长为k的引用模式的程序，步长越小，空间局部性越好。如果步长为1，则存储器层次结构中所有层次上的缓存都是将数据存储为连续的块。</p>
<p>对于取指令来说，循环具有很好的时间和空间局部性，循环体越小，循环迭代次数越多，局部性越好。重复引用同一个变量的程序有良好的时间局部性。</p>
<h2>关于高速缓存</h2>
<p>高速缓存存储器，作为CPU和主存之间的缓存区域，对应用程序性能的影响最大。其结构可以用元组（S，E，B，m）来描述，其大小 C 指的是所有块的大小的和，标记位和有效位不包含在内，因此，C=S*K*B。S=2s，即组数；E 是每个组的行数；B=2b 是块大小。</p>
<p>高速缓存的结构将 m 个地址位分成了 t 个标记位、s 个组索引位和 b 个块偏移位。组索引位告诉字存储在哪个组内；标记位告诉字存储在这个组的哪一行里，只有该行的标记位和地址中的标记位相匹配，并且有效位被设置，才能确定该行确实包含了该字；块偏移位则告诉在 B 个字节的数据块中的字偏移。</p>
<p>块是一个固定大小的信息包，在高速缓存和主存之间来回传送。行是高速缓存中存储块以及其他信息（例如标记位和有效位）的容器。组是一个或多个行的集合。直接映射高速缓存的的组只有一行。全相联高速缓存中组只有一个。</p>
<p>如果每一组里只有一行，即 E=1，那么这个高速缓存被称为直接映射高速缓存（direct-mapped cache）。如果每一组里有多个行，即 1&lt; E&lt;C/B，那么这个高速缓存被称为组相连高速缓存（set associative cache）。如果一个组包含了所有行，即 E=C/B，那么这个高速缓存被称为全相连高速缓存（fully associative cache）。</p>
<p>高速缓存确定一个请求是否被命中，然后抽取出被请求的字的过程，可分为三步：组选择、行匹配、字抽取。</p>
<p>最不常使用（Least-Frequently-Used，LFU）策略会替换在过去某个时间窗口内引用次数最少的那一行，最近最少使用（Least-Recently-Used，LRU）策略会替换最后一次访问时间最久远的一行。</p>
<p>全相联高速缓存只适合做小的高速缓存，例如虚拟存储器系统中的翻译备用缓冲器（TLB），它缓存页表项。</p>
<p>直写（write-through）就是立即将高速缓存块写回到接邻着的低一层中，简单，但是每次写都会引起总线流量。写回（write-back）就是尽可能地推迟存储器更新，只有当替换算法要驱逐更新过的块时，才将其写回到低一层中，其显著减少了总线流量，但增加了复杂性。</p>
<p>写分配（write-allocate）就是先加载低一层中的块到高速缓存中，然后更新这个高速缓存块。非写分配（non-write-allocate）就是避开高速缓存，直接写到低一层中。</p>
<hr style="margin-top:20px; margin-bottom:20px"/>
<ol>
<li><a href="http://zh.wikipedia.org/zh-cn/随机存取存储器" target="blank">维基百科上关于 RAM 的解释</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.poemcode.net/2012/02/csapp-ram-locality-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WiFi-Robot Car 之舵机篇</title>
		<link>http://www.poemcode.net/2012/01/wifi-robot-car-servo/</link>
		<comments>http://www.poemcode.net/2012/01/wifi-robot-car-servo/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 12:00:08 +0000</pubDate>
		<dc:creator>Xu Haojie</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[WiFi-Robot]]></category>

		<guid isPermaLink="false">http://www.poemcode.net/?p=2685</guid>
		<description><![CDATA[舵机，有些人会叫它伺服器，这大概是台湾的术语，其可以根据在指令转动方向，停留在0-180度，在机器人等设备中经常用到。其有一个三线的接口，黑色（或棕色）的线是接地线，红线接+5V电压，黄线（或是白色或橙色）接控制信号端。这里有一篇来自果壳网的启蒙文章<a href="http://www.guokr.com/article/5292/" target="blank" title="DIYer修炼：舵机知识扫盲">《DIYer修炼：舵机知识扫盲》</a>，我也是通过这篇文章入门的。

在 WiFi-Robot Car 中，我使用了两个舵机来控制摄像头的上下、左右运动。如果打算做得更炫一点儿，WiFi-Robot Car 可以加入机械臂，通过舵机可以控制伸长、缩回等转动，甚至可以控制它抓取东西。--但眼下我没打算加入这个功能。]]></description>
			<content:encoded><![CDATA[<div id="attachment_2715" class="wp-caption alignleft" style="width: 210px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_01.jpg" alt="全家福" title="全家福" width="200" height="300" class="size-full wp-image-2715" /><p class="wp-caption-text">全家福</p></div>
<p>舵机，有些人会叫它伺服器，这大概是台湾的术语，其可以根据在指令转动方向，停留在0-180度，在机器人等设备中经常用到。其有一个三线的接口，黑色（或棕色）的线是接地线，红线接+5V电压，黄线（或是白色或橙色）接控制信号端。这里有一篇来自果壳网的启蒙文章<a href="http://www.guokr.com/article/5292/" target="blank" title="DIYer修炼：舵机知识扫盲">《DIYer修炼：舵机知识扫盲》</a>，我也是通过这篇文章入门的。</p>
<p>在 WiFi-Robot Car 中，我使用了两个舵机来控制摄像头的上下、左右运动。如果打算做得更炫一点儿，WiFi-Robot Car 可以加入机械臂，通过舵机可以控制伸长、缩回等转动，甚至可以控制它抓取东西。&#8211;但眼下我没打算加入这个功能。</p>
<p>这次我选用的舵机是来自台湾辉盛的 MG995，其规格<a href="#mg995"><sup>1</sup></a>如下：</p>
<table border="1" cellspacing="0" cellpadding="0" style="margin:0px auto">
<tr>
<td>
Weight
</td>
<td>
55.0g
</td<br />
</tr>
<tr>
<td>
Dimension
</td>
<td>
40.7*19.7*42.9mm
</td>
</tr>
<tr>
<td>
Stall torque
</td>
<td>8.5kg/cm(4.8V),10kg/cm(6V)
</td>
</tr>
<tr>
<td>
Operating speed
</td>
<td>0.20sec/60degree(4.8v), 0.16sec/60degree(6v)
</td>
</tr>
<tr>
<td>Operating voltage
</td>
<td>4.8-7.2V
</td>
</tr>
<tr>
<td>Temperature range
</td>
<td>0℃_ 55℃
</td>
</tr>
<tr>
<td>Dead band width
</td>
<td>
5us
</td>
</tr>
</table>
<p>单单有舵机是无法支起摄像头的，在二者之间需要支架。在 WiFi-Robot Car 里，我选用一个支架套件，包括了两个多功能支架、一个U型支架和一个杯士轴承（我曾怀疑是杯式轴承，后查实确是杯士轴承）等。</p>
<p>以下我将组装舵机和支架，构成摄像头云台。&#8211;可不是单反相机的云台，那只是一个三脚架而已。</p>
<p>首先，安装第一个舵机和多功能支架。舵机要先固定在支架上，需要借助舵盘，常见的舵盘有圆盘型、星型、一字型、十字型，可参见全家福那张图片。</p>
<p>这里，我选用了圆盘型舵盘，这是因为我在安装过程中，其他类型的舵盘不好对准安装孔。</p>
<div id="attachment_2716" class="wp-caption aligncenter" style="width: 610px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_1-300x200.jpg" alt="安装前" title="安装前" width="300" height="200" class="size-medium wp-image-2716" /><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_2-300x200.jpg" alt="安装后" title="安装后" width="300" height="200" class="size-medium wp-image-2717" /><p class="wp-caption-text">第一步安装前（左）后（右）对比</p></div>
<p>然后，安装U型支架和杯士轴承。建议这个U型支架在购买时尽可能选择比较高的，我这里选用的U型支架高度不是很够，虽然不影响使用，但总觉得别扭。</p>
<p>杯士轴承是用来连接U型支架和上一步中的多功能支架，有了这个东西才能让两者足够“和谐”，减少摩擦。</p>
<div id="attachment_2718" class="wp-caption aligncenter" style="width: 610px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_3-300x200.jpg" alt="安装前" title="安装前" width="300" height="200" class="size-medium wp-image-2718" /><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_5-300x200.jpg" alt="安装后" title="安装后" width="300" height="200" class="size-medium wp-image-2720" /><p class="wp-caption-text">第二步安装前（左）后（右）对比</p></div>
<p>接着，安装第二个舵机。这个时候，需要观察舵机、U型支架、多功能支架之间的空间关系，注意到多功能支架的两条“手臂”正好卡住舵机，同时舵机也正对U型支架的另一端。</p>
<p>我这里的三者关系刚刚好，&#8211;毕竟这是有规格限制的，如果购买的配件不是很标准，那么安装起来就不会那么痛快了。我仔细目测了整体效果，觉得“刚刚好”要打个折扣，因为U型支架的水平方向不是很平。</p>
<div id="attachment_2721" class="wp-caption aligncenter" style="width: 610px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_6-300x200.jpg" alt="安装前" title="安装前" width="300" height="200" class="size-medium wp-image-2721" /><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_7-300x200.jpg" alt="安装后" title="安装后" width="300" height="200" class="size-medium wp-image-2722" /><p class="wp-caption-text">第三步效果</p></div>
<p>最后，安装第二个多功能支架。这个多功能支架是用来将整个结构能够牢牢固定在底座上，所谓的底座在这里就是车体了。</p>
<p>注意观察左侧图片下方的螺丝，也就是整个螺丝将云台固定起来。我将USB摄像头用胶带粘在了U型支架上，暂且将就用着，效果如右图所示。</p>
<div id="attachment_2723" class="wp-caption aligncenter" style="width: 610px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_8-300x200.jpg" alt="云台完毕" title="云台完毕" width="300" height="200" class="size-medium wp-image-2723" /><img src="http://www.poemcode.net/wp-content/uploads/2012/01/servo_91-300x200.jpg" alt="整体效果" title="整体效果" width="300" height="200" class="size-medium wp-image-2725" /><p class="wp-caption-text">第四步效果</p></div>
<hr style="margin-top:20px; margin-bottom:20px"/>
<ol>
<li><a href="http://www.towerpro.com.tw/viewitem1.asp?sn=601&#038;area=53&#038;cat=187" target="blank">辉盛官方网站对MG995的介绍</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.poemcode.net/2012/01/wifi-robot-car-servo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WiFi-Robot Car 之电池篇</title>
		<link>http://www.poemcode.net/2012/01/wifi-robot-car-battery/</link>
		<comments>http://www.poemcode.net/2012/01/wifi-robot-car-battery/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 11:12:27 +0000</pubDate>
		<dc:creator>Xu Haojie</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[WiFi-Robot]]></category>

		<guid isPermaLink="false">http://www.poemcode.net/?p=2573</guid>
		<description><![CDATA[兵马未动，粮草先行，电池是 WiFi-Robot Car的能量源泉。我选用的控制板对电源的要求是12.6v，但从从淘宝购买来的二手锂电池组是24v，因此需要对电池组进行改装。改装之前先熟悉电池组的规格，这里关注两个指标，其一是电压，其二是容量。前者关乎到是否合乎电路要求，后者则关系到持续时间。

这次改装所使用的电池组由12节18650型号的锂电池构成，每六节组成一组，以串联的形式输出24v，此时容量是4400mah。以并联的方式改装之后，电压将为12v，容量提升至8800mah。

改装之前，需要准备如下材料和工具：
<ol>
<li>万用表</li>
<li>电烙铁</li>
<li>导线两根</li>
<li>剪刀</li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>兵马未动，粮草先行，电池是 WiFi-Robot Car的能量源泉。我选用的控制板对电源的要求是12.6v，但从从淘宝购买来的二手锂电池组是24v，因此需要对电池组进行改装。改装之前先熟悉电池组的规格，这里关注两个指标，其一是电压，其二是容量。前者关乎到是否合乎电路要求，后者则关系到持续时间。</p>
<p>这次改装所使用的电池组由12节18650型号<a href="#18650"><sup>[1]</sup></a>的锂电池构成，每六节组成一组，以串联的形式输出24v，此时容量是4400mah。以并联的方式改装之后，电压将为12v，容量提升至8800mah。</p>
<p>改装之前，需要准备如下材料和工具：</p>
<ol>
<li>万用表</li>
<li>电烙铁</li>
<li>导线两根</li>
<li>剪刀</li>
</ol>
<p>第一步，使用万用表测量初始电压值，确认是否正常工作，保证是可以使用的。</p>
<p>使用万用表时，注意选用合适的量程，以优利德UT33D为例，应该选用200v直流档。</p>
<div id="attachment_2577" class="wp-caption aligncenter" style="width: 461px"><img src="http://www.poemcode.net/wp-content/uploads/2011/11/battery_1.jpg" alt="改装之前测量电压" title="battery_1" width="451" height="301" class="size-full wp-image-2577" /><p class="wp-caption-text">改装前存照</p></div>
<p>第二布，使用剪刀剪开蓝色胶布2厘米，掀起银色薄板，检查电路板。</p>
<p>剪的时候，注意不要剪太多，也不要剪到薄板。</p>
<div id="attachment_2579" class="wp-caption aligncenter" style="width: 461px"><img src="http://www.poemcode.net/wp-content/uploads/2011/11/battery_2.jpg" alt="" title="battery_2" width="451" height="301" class="size-full wp-image-2579" /><p class="wp-caption-text">掀起“盖头”</p></div>
<p>第三步，剪断串联导线，最好把原来的导线连同焊点一并清理掉。</p>
<div id="attachment_2581" class="wp-caption aligncenter" style="width: 461px"><img src="http://www.poemcode.net/wp-content/uploads/2011/11/battery_3.jpg" alt="" title="battery_3" width="451" height="301" class="size-full wp-image-2581" /><p class="wp-caption-text">动手前看清楚</p></div>
<p>第四步，选取导线，使用电烙铁，焊接导线和触点。</p>
<p>首次使用带有指示灯的电烙铁，需要了解指示灯的含义，亮表示还在加热，灭表示已经达到设定温度。上回使用电烙铁可以追溯到七八年前了，没有指示灯，所以这次指示灯时亮时灭，还以为是坏了。</p>
<p>摆弄电烙铁真是个细致活，刚一上来常常是手抖，点不到正确的位置，导线被焊得烫手，拿不住丢掉了。最后出来的焊点惨不忍睹，一坨一坨的。</p>
<div id="attachment_2583" class="wp-caption aligncenter" style="width: 461px"><img src="http://www.poemcode.net/wp-content/uploads/2011/11/battery_4.jpg" alt="" title="battery_4" width="451" height="301" class="size-full wp-image-2583" /><p class="wp-caption-text">焊点惨不忍睹</p></div>
<p>第五步，使用万用表测量改装后电压值，确认是否合乎要求，出现少许差值可以接受。此时，万用表可以选用20v直流档。<br />
<div id="attachment_2584" class="wp-caption aligncenter" style="width: 461px"><img src="http://www.poemcode.net/wp-content/uploads/2011/11/battery_5.jpg" alt="" title="battery_5" width="451" height="301" class="size-full wp-image-2584" /><p class="wp-caption-text">“小”功告成</p></div></p>
<hr style="margin-top:20px; margin-bottom:20px"/>
<ol>
<li><a name="18650">18650是一种锂离子电池的型号，为圆柱型，直径18mm，高度65mm。</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.poemcode.net/2012/01/wifi-robot-car-battery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WiFi-Robot Car 之前言篇</title>
		<link>http://www.poemcode.net/2012/01/wifi-robot-car-preface/</link>
		<comments>http://www.poemcode.net/2012/01/wifi-robot-car-preface/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 11:01:11 +0000</pubDate>
		<dc:creator>Xu Haojie</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[WiFi-Robot]]></category>

		<guid isPermaLink="false">http://www.poemcode.net/?p=2652</guid>
		<description><![CDATA[我在小时候就很喜欢汽车，借助它可以走到很远的地方，见识很多的人，听到很好玩的故事。我不是冒险家，不是那种寻求刺激的家伙，但有一个旅行家的梦想。工欲善其事，必先利其器，有了汽车，梦想就从开启引擎的那一刻开始变成现实。

在没有一辆汽车之前，我深刻地明白，要非常了解这个“本身具有动力得以驱动，不须依轨道或电力架设，得以机动行驶之机械设备”，必须从小做起。于是，收集各种汽车玩具是我很长一段时间里的嗜好，塑料的、铁壳的、要装电池的、不要电池的、独立遥控的、只有一个开关的、能拐弯的、只能直行的，然后拆开，最后装回去或者丢掉。]]></description>
			<content:encoded><![CDATA[<div id="attachment_2659" class="wp-caption alignleft" style="width: 460px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/wifi-robot4.jpg" alt="WiFi-Robot Car" title="WiFi-Robot Car" width="450" height="300" class="size-full wp-image-2659" /><p class="wp-caption-text">WiFi-Robot Car</p></div>
<p>我在小时候就很喜欢汽车，借助它可以走到很远的地方，见识很多的人，听到很好玩的故事。我不是冒险家，不是那种寻求刺激的家伙，但有一个旅行家的梦想。工欲善其事，必先利其器，有了汽车，梦想就从开启引擎的那一刻开始变成现实。</p>
<p>在没有一辆汽车之前，我深刻地明白，要非常了解这个“本身具有动力得以驱动，不须依轨道或电力架设，得以机动行驶之<a href="#wikipedia"><sup>[1]</sup></a>机械设备”，必须从小做起。于是，收集各种汽车玩具是我很长一段时间里的嗜好，塑料的、铁壳的、要装电池的、不要电池的、独立遥控的、只有一个开关的、能拐弯的、只能直行的，然后拆开，最后装回去或者丢掉。</p>
<p>有时候，我在想如果当年选的专业不是计算机的话，那么肯定是去研究汽车了。虽然直到现在，我一直在把玩代码，并且有机会开辆SUV去趟青藏高原去慢慢地实现梦想，但是，对汽车这个机械设备的研究还一直保留的。最近一年，我的兴趣聚焦在了“遥控车”上，这种可以自行编写控制程序、远程控制运动轨迹的“玩具”，契合了我的工作和兴趣二者。</p>
<p>此系列博客里，我会记录WiFi-Robot Car的全部制作环节，这个过程完全是从零开始，因为大学里有关数字电路的知识已经全部丢掉，&#8211;书到用时方恨少，而WiFi-Robot Car更多的是嵌入式的电子设备，我甚至已经忘记了GND就是接地的意思了。</p>
<p>WiFi-Robot Car的来源是<a href=”http://www.igee.cn/” target=”blank”>爱果联盟</a>，它在论坛里的官方名字叫做“WIFI-Robot 智能遥感机器人”，我觉得拗口，就给简化了。它使得玩家使用PC或者手机连接Car，借助控制软件来掌控Car的行进和转向，并传回实时拍摄画面，以及其他功能。</p>
<p>从构成成分上看，WiFi-Robot Car共包含机械系统、电气系统、控制系统和传感系统。机械系统包括车架底盘、车轮等；电气系统包括马达、舵机等；控制系统包括控制板；传感系统包括超声波感应器和摄像头等。其中控制系统，也就是控制板，使得Car能够有序地运动起来，而不是使得它像个植物人或者精神病一样。论坛上的玩家自主设计和开发了控制板，并提供了控制程序，剩余的部件都可以自由采购。</p>
<p>截至到目前为止，控制程序并没有开源，这给我的学习带来了很大的障碍。组装小车，使它能够动起来，固然是非常大的高兴，但是我更多的兴趣是对控制程序，我更好奇嵌入式程序是如何掌控马达、舵机、感应器的。但是，似乎出于商业机会的原因，连控制板和PC控制程序之间的通讯内容都被开发者加密了，就更不可能看到控制板的嵌入式程序了。</p>
<hr style="margin-top:20px; margin-bottom:20px"/>
<ol>
<li><a name="wikipedia" href="http://zh.wikipedia.org/zh-cn/汽车" target="blank">维基百科关于汽车的定义</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.poemcode.net/2012/01/wifi-robot-car-preface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All Is Well</title>
		<link>http://www.poemcode.net/2012/01/all-is-well/</link>
		<comments>http://www.poemcode.net/2012/01/all-is-well/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 07:22:53 +0000</pubDate>
		<dc:creator>Xu Haojie</dc:creator>
				<category><![CDATA[Thinking]]></category>

		<guid isPermaLink="false">http://www.poemcode.net/?p=2639</guid>
		<description><![CDATA[自从去了深圳以后，这里的博客就一直没有更新。懒惰从十一月初一直延续到了2012。每回想到写的时候，都用借口来敷衍自己，比如“很忙”，“真的很累”，“没有网络”。但是，内心里自己深深懂得是自己懈怠了。

回顾过去的一年，伟大的成就似乎只有一件，那就是完成了一次升级，从“男友1.0”升级到了“丈夫2.0”。Title发生了变化，生活照旧，似乎只是过了一次生日Party一般，不同的是，后者一年一次，前者一辈子一次（或者若干次？）。

除此之外，我完成了一次大学聚会，见到了久别的朋友，跟一段青春时光告别了。毕业前两三年，常常想念校园时光。现在已经彻头彻尾地明白，过去的都不会再来，怀旧过去不如憧憬未来。还未老矣，怀念是一种很糟糕的感觉。]]></description>
			<content:encoded><![CDATA[<div id="attachment_2643" class="wp-caption alignleft" style="width: 310px"><img src="http://www.poemcode.net/wp-content/uploads/2012/01/new_year_2012.jpg" alt="Hello, 2012" title="Hello, 2012" width="300" height="244" class="size-full wp-image-2643" /><p class="wp-caption-text">Hello, 2012</p></div>
<p>自从去了深圳以后，这里的博客就一直没有更新。懒惰从十一月初一直延续到了2012。每回想到写的时候，都用借口来敷衍自己，比如“很忙”，“真的很累”，“没有网络”。但是，内心里自己深深懂得是自己懈怠了。</p>
<p>回顾过去的一年，伟大的成就似乎只有一件，那就是完成了一次升级，从“男友1.0”升级到了“丈夫2.0”。Title发生了变化，生活照旧，似乎只是过了一次生日Party一般，不同的是，后者一年一次，前者一辈子一次（或者若干次？）。</p>
<p>除此之外，我完成了一次大学聚会，见到了久别的朋友，跟一段青春时光告别了。毕业前两三年，常常想念校园时光。现在已经彻头彻尾地明白，过去的都不会再来，怀旧过去不如憧憬未来。还未老矣，怀念是一种很糟糕的感觉。</p>
<p>如果还要道点别的，那就是果断换了工作，老东家是个不错的养老院，只是不适合我。哥还没老到动不了，我还要再折腾折腾。生下来，总要有点追求。年轻的梦想总是很奢华，太早实现了，似乎有点挑衅造物主的智商；一早放弃了，似乎又有点辜负了造物主的好意。</p>
<p>梦想到来之前，我先给2012年的自己几个量化的指标。首先是阅读，三本计算机类图书：CSAPP、APUE、I2A；一本经济类图书：国富论；一本摄影类图书：数码单反摄影圣经。</p>
<p>其次是视频，一个是一共六集的《Wild China》自然类纪录片，另一个是一共十七节的《iPad and iPhone Application Development》教学类iTunes U。</p>
<p>最后是走出去，一次自驾游，一次境外游。</p>
<p>从前给自己立起了好多目标，有的实现了，有的不了了之，剩下的羞于提起了。这一次是不是和此前一样的结局呢？嗯，起码现在还是有信心的。</p>
<p>2012来了，Mac还在，梦想还在，努力还在。All Is Well，哪怕再糟糕的解决，都可以看作是美好的新开端。</p>
<h2>后记</h2>
<p>All Is Well，来自印度2009年上映的一部电影《3 Idiots》（中文译作《三傻大闹宝莱坞》），电影以回忆的方式讲述了三个青年如何在死板老套的教育环境下实现自我的故事，轻松幽默，又穿插着印度一贯的歌舞，相信很多念过大学的朋友可以从中找到自己的影子。</p>
<p>自所以把这句话作为2012年开篇标题，是为了审视自己，鼓励自己，加油！热爱梦想，朝着它进发，也许有不少的不如意，但事情往往不是糟糕到非放弃不可，没有力量足以让自己放弃梦想。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.poemcode.net/2012/01/all-is-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

