









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

<channel>
	<title>非常张</title>
	<atom:link href="http://veryzhang.cn/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://veryzhang.cn</link>
	<description>当责</description>
	<lastBuildDate>Mon, 14 Jun 2010 16:35:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>又是一个周期</title>
		<link>http://veryzhang.cn/?p=547</link>
		<comments>http://veryzhang.cn/?p=547#comments</comments>
		<pubDate>Mon, 14 Jun 2010 16:35:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=547</guid>
		<description><![CDATA[最近工作上受到一点刺激，把心情搞的很糟糕。

还记得去年的时候顿悟一个道理，人在精疲力尽的时候往往情绪上也是最脆弱的，这个时候的刺激往往会很深，而我这次正应了这句话。

前面一个月又是手忙脚乱的一通加班，勉强赶上了schedule，还是有一堆事情放心不下，怕新接手的哥们漏了啥没接到的。但是马上就要transfer出去，要不然另外一滩事儿就耽误了，很是纠结。

<span class="readmore"><a href="http://veryzhang.cn/?p=547" title="又是一个周期">阅读全文——共682字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近工作上受到一点刺激，把心情搞的很糟糕。<br />
还记得去年的时候顿悟一个道理，人在精疲力尽的时候往往情绪上也是最脆弱的，这个时候的刺激往往会很深，而我这次正应了这句话。<br />
前面一个月又是手忙脚乱的一通加班，勉强赶上了schedule，还是有一堆事情放心不下，怕新接手的哥们漏了啥没接到的。但是马上就要transfer出去，要不然另外一滩事儿就耽误了，很是纠结。<br />
这是所谓精疲力尽。<br />
再就是部门开月会，HR客串，介绍了些人员组成上的情况，全部门160个人，本科只有17个，这个比例比我之前以为的数字低太多了，而且我也是这17个之一。<br />
此所谓刺激之一。<br />
然后又开始看android，我是喜欢在一个平台上长期投入的，因为每一个方向背后都需要对整个系统的了解作支撑，然后才有可能做到最好。所以我喜欢把一个平台看的很宽，到处都看看，好处是时间长了可以斩获颇多，坏处是老板要你换平台时就傻了，半天不得要领，不知从何看起。尤其是android这种资料少的可怜的平台，更何况周围做过的人几乎没有。<br />
于是整个学习的过程很是疲惫，而且总是被打断，去调那些枯燥无味形同嚼蜡的寄存器。</p>
<p>还记得刚毕业的时候，每个月数着工资卡里那点钱，憧憬着要是哪天我工资多少多少就怎样；可是现在是体会到了，钱这玩意儿完全不能带给你快乐，你必须自己去找快乐，跟钱真的没关系。（当然房价是一个因素。。。）</p>
<p>今天算了算，来到新的公司10个月了，也该给自己一些改变了：<br />
1.别用加班来表现自己的努力，要用效率和产出来表现；<br />
2.远离那些枯燥，重复，可替代性强的工作，如果有可能的话；<br />
3.改变自己的心态，尽管工作早，依然很稚嫩，多学习才是王道；</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=547</wfw:commentRss>
		<slash:comments>97</slash:comments>
		</item>
		<item>
		<title>加班</title>
		<link>http://veryzhang.cn/?p=545</link>
		<comments>http://veryzhang.cn/?p=545#comments</comments>
		<pubDate>Sun, 23 May 2010 16:34:31 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=545</guid>
		<description><![CDATA[最近看了一些关于富士康跳楼的评论, 其中对加班的评论很有些感触.

原文大意是说, 大家的共识是:不加班的厂不是好厂, 不加班挣不到钱, 云云.

看完之后总觉得隐隐约约也是在说自己, 不过又不很像, 但是真的不能说不像.

<span class="readmore"><a href="http://veryzhang.cn/?p=545" title="加班">阅读全文——共301字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近看了一些关于富士康跳楼的评论, 其中对加班的评论很有些感触.<br />
原文大意是说, 大家的共识是:不加班的厂不是好厂, 不加班挣不到钱, 云云.</p>
<p>看完之后总觉得隐隐约约也是在说自己, 不过又不很像, 但是真的不能说不像.</p>
<p>加班这事儿, 从好的方面想, 确实有时候需要连续的长时间工作, 比如你在看一大坨code, 这事儿真不能中间停下来, 第二天往往就续不上了.<br />
再比如额外花些时间学点东西, 这也很常见.<br />
但是不好的方面, 很多时候也是为了些破事儿再加班, 或者只是攒一些没啥意义的report, 再或者就干脆是混加班费.</p>
<p>所以我与富士康员工的共同点在于, 都是为了额外的利益而自愿加班.</p>
<p>问题在于追逐利益这事儿得有个度, 要适可而止, 否则就杯具了.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=545</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Keep on thinking&#8230;.</title>
		<link>http://veryzhang.cn/?p=543</link>
		<comments>http://veryzhang.cn/?p=543#comments</comments>
		<pubDate>Wed, 05 May 2010 15:43:29 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=543</guid>
		<description><![CDATA[一部手机，在不同的人手里会有完全不同的演绎。

我把桌面背景换成一张很有感觉的卡通图片，于是手机就成了随时带给我美的享受的载体。

我把outlook里面的邮件和会议邀请同步到手机里面，于是手机便承载了我工作的延伸，使一名工作狂随时都能review自己的工作。

<span class="readmore"><a href="http://veryzhang.cn/?p=543" title="Keep on thinking&#8230;.">阅读全文——共512字</a></span>]]></description>
			<content:encoded><![CDATA[<p>一部手机，在不同的人手里会有完全不同的演绎。<br />
我把桌面背景换成一张很有感觉的卡通图片，于是手机就成了随时带给我美的享受的载体。<br />
我把outlook里面的邮件和会议邀请同步到手机里面，于是手机便承载了我工作的延伸，使一名工作狂随时都能review自己的工作。<br />
我把手机里面装满了舞蹈视频，然后去参加排练，中间拍下老师的示范，回家再自己练。<br />
或者装满了温馨的音乐，在女朋友生日的时候拉她到后海的小船上放给她听。<br />
这样的例子还能举出许多，其实智能手机不仅是电脑的延伸，当互联与计算结合在一起，就会有许多全新的可能。</p>
<p>问题在于，作为一家IC设计公司，如何在这样的变革中找到自己的定位？<br />
我们是卖笔墨纸砚，还是半装裱的成品？<br />
抑或笔墨纸砚搭配临摹帖纸外加辅导？<br />
既然硬件的差异越来越小，是否意味着那些只做AP的IC厂商也可以藉由第三方的modem而杀入这个市场？<br />
apple/google已经买下IC公司，针对自己的OS定制芯片，传统IC巨头能不能效仿intel收购风河，去买自己的操作系统？</p>
<p>当你已经站到业界的前排，就无法，也无人可以follow了，无论愿意与否，恐怕都要鼓起勇气去推动变革，深深的参与到那些基础而又深刻的变化中，才有机会在未来依然生存。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=543</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>VirtualBox can&#8217;t operate in VMX root mode</title>
		<link>http://veryzhang.cn/?p=541</link>
		<comments>http://veryzhang.cn/?p=541#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:19:08 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=541</guid>
		<description><![CDATA[提示说需要禁止掉kvm，然后重新编译内核。。。。

google了下，只要

rmmod kvm-intel

<span class="readmore"><a href="http://veryzhang.cn/?p=541" title="VirtualBox can&#8217;t operate in VMX root mode">阅读全文——共54字</a></span>]]></description>
			<content:encoded><![CDATA[<p>提示说需要禁止掉kvm，然后重新编译内核。。。。<br />
google了下，只要<br />
rmmod kvm-intel<br />
就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=541</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>linux如何支持大于4G的内存？</title>
		<link>http://veryzhang.cn/?p=539</link>
		<comments>http://veryzhang.cn/?p=539#comments</comments>
		<pubDate>Fri, 16 Apr 2010 23:42:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=539</guid>
		<description><![CDATA[方法十分简单：

sudo sudo apt-get install linux-headers-server linux-image-server linux-server

也就是安装pae版本的kernel就可以了。

<span class="readmore"><a href="http://veryzhang.cn/?p=539" title="linux如何支持大于4G的内存？">阅读全文——共209字</a></span>]]></description>
			<content:encoded><![CDATA[<p>方法十分简单：</p>
<blockquote><p>sudo sudo apt-get install linux-headers-server linux-image-server linux-server</p></blockquote>
<p>也就是安装pae版本的kernel就可以了。</p>
<p>coon@ubuntu:~/桌面$ free -m<br />
             total       used       free     shared    buffers     cached<br />
Mem:          8068        443       7624          0         58        177<br />
-/+ buffers/cache:        207       7860<br />
Swap:            0          0          0</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=539</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>热地瓜男&#8230;.</title>
		<link>http://veryzhang.cn/?p=537</link>
		<comments>http://veryzhang.cn/?p=537#comments</comments>
		<pubDate>Wed, 14 Apr 2010 15:24:49 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=537</guid>
		<description><![CDATA[晚上王老板做报告，应领导要求全程录音，我也灌了不少水，乱喷一气。

结果回来一听，发现自己说话越来越地瓜了－嘴里含着个热地瓜，而且地瓜越来越大&#8230;.

从毕业之后似乎口才就越来越差，当然这绝非是说我以前口才多好，据我爸记载，我两岁多的时候说话还很地瓜&#8230;&#8230;

<span class="readmore"><a href="http://veryzhang.cn/?p=537" title="热地瓜男&#8230;.">阅读全文——共138字</a></span>]]></description>
			<content:encoded><![CDATA[<p>晚上王老板做报告，应领导要求全程录音，我也灌了不少水，乱喷一气。<br />
结果回来一听，发现自己说话越来越地瓜了－嘴里含着个热地瓜，而且地瓜越来越大&#8230;.<br />
从毕业之后似乎口才就越来越差，当然这绝非是说我以前口才多好，据我爸记载，我两岁多的时候说话还很地瓜&#8230;&#8230;<br />
悲剧啊，要抽空多练练</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=537</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个比lxr更完善的代码在线浏览网站&#8211;www.sooset.com</title>
		<link>http://veryzhang.cn/?p=535</link>
		<comments>http://veryzhang.cn/?p=535#comments</comments>
		<pubDate>Tue, 13 Apr 2010 16:11:56 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=535</guid>
		<description><![CDATA[http://www.sooset.com

看上去比lxr要好不少，而且有备案。。。。。

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sooset.com">http://www.sooset.com</a><br />
看上去比lxr要好不少，而且有备案。。。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=535</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transmission提示“打开的文件太多”</title>
		<link>http://veryzhang.cn/?p=533</link>
		<comments>http://veryzhang.cn/?p=533#comments</comments>
		<pubDate>Tue, 13 Apr 2010 16:07:44 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=533</guid>
		<description><![CDATA[环境：

Ubuntu 9.10

Transmission 1.75(9117)

<span class="readmore"><a href="http://veryzhang.cn/?p=533" title="Transmission提示“打开的文件太多”">阅读全文——共149字</a></span>]]></description>
			<content:encoded><![CDATA[<p>环境：</p>
<blockquote><p>Ubuntu 9.10<br />
Transmission 1.75(9117)</p></blockquote>
<p>问题：<br />
Transmission如果同时下载多个文件，会提示“打开的文件太多”，从而导致同时只能下载两到三个文件。<br />
解决方法：</p>
<blockquote><p>修改文件<br />
        /etc/security/limits.conf<br />
加入或者修改下面一行：<br />
        * &#8211; nofile 32768</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=533</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>考试模型在IT民工日常工作中的体现</title>
		<link>http://veryzhang.cn/?p=531</link>
		<comments>http://veryzhang.cn/?p=531#comments</comments>
		<pubDate>Sat, 10 Apr 2010 18:28:42 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=531</guid>
		<description><![CDATA[对于工程师而言，会遇到很多难题需要解决，其中有很多是比较简单的，类似选择题，判断题。

这些问题只要能解决大部分，及格一般没有问题。

但是仅仅及格，并不能使你胜出，自身竞争力依然很差。

<span class="readmore"><a href="http://veryzhang.cn/?p=531" title="考试模型在IT民工日常工作中的体现">阅读全文——共540字</a></span>]]></description>
			<content:encoded><![CDATA[<p>对于工程师而言，会遇到很多难题需要解决，其中有很多是比较简单的，类似选择题，判断题。<br />
这些问题只要能解决大部分，及格一般没有问题。<br />
但是仅仅及格，并不能使你胜出，自身竞争力依然很差。<br />
所以要想胜出，就要研究如何做出那些开放性的，需要有很强的创造性，或者对问题本身有很深理解才能解出来的题目。<br />
无论考试还是做工程，都是有时间限制的。<br />
而且你一定要把解答写下来，否则必然是零分。</p>
<p>所以，套用考试的经验去看日常的开发工作:<br />
1.最基本的题目一定要会；<br />
2.最基本的题目不一定非要看书或者真的理解，死记硬背也可以应付；<br />
3.但是死记硬背流在面对题型变化时会死的很惨；<br />
4.死记硬背流总是占多数；<br />
5.如果你很牛逼，非常善于解难题大题，可以申请去参加竞赛，从而不再为那些基础题目浪费时间。但这需要参加选拔，同时也意味着更多的付出。<br />
6.考的好的人会获得更多的资源，无论是真牛逼，还是作弊，或者狗屎运在某次关键考时发飙；<br />
7.但是笑到最后的都是那些真正牛逼，持续付出，而又不会轻易动摇的人。<br />
8.不同的科目差别很大，给人发挥的空间完全不同，像历史和地理这样的科目就从来没听说有奥赛之类的东东。就好比做linux的人总是搞得很深，windows的就相对差一些；<br />
9.了解自己最擅长哪些科目是很重要的。</p>
<p>一些胡思乱想，与君共勉。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=531</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下如何获取一段虚拟内存的所有物理地址?</title>
		<link>http://veryzhang.cn/?p=528</link>
		<comments>http://veryzhang.cn/?p=528#comments</comments>
		<pubDate>Sat, 10 Apr 2010 17:27:55 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux Kernel]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=528</guid>
		<description><![CDATA[也就是类似Windows CE的LockPages+Query那样的作用, 给定一段虚拟地址, 如何获得这段内存都对应到哪些物理地址上面?

linux下面对应的API是get_user_pages().

从这里看到的:

<span class="readmore"><a href="http://veryzhang.cn/?p=528" title="linux下如何获取一段虚拟内存的所有物理地址?">阅读全文——共486字</a></span>]]></description>
			<content:encoded><![CDATA[<p>也就是类似Windows CE的LockPages+Query那样的作用, 给定一段虚拟地址, 如何获得这段内存都对应到哪些物理地址上面?<br />
linux下面对应的API是<strong>get_user_pages()</strong>.<br />
从这里看到的:<br />
http://www.newsmth.net/bbscon.php?bid=299&#038;id=50940&#038;ftype=3&#038;num=2048</p>
<p>使用get_user_pages()这个函数：<br />
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,<br />
                unsigned long start, int len, int write, int force,<br />
                struct page **pages, struct vm_area_struct **vmas)</p>
<p>这个函数的作用是根据用户空间start开始的len个页面，从页表中找到这些页面对应<br />
的真正物理页面，保存在pages[]数组中返回。</p>
<p>其中主要的参数：<br />
Start为用户空间内存的起始地址(页面对齐)<br />
Len 为从start开始的页面的个数，注意单位为page<br />
Write如果为1表示对这些页面具有写权限</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=528</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>团队成本</title>
		<link>http://veryzhang.cn/?p=526</link>
		<comments>http://veryzhang.cn/?p=526#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:39:16 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=526</guid>
		<description><![CDATA[最近一周整个人都很低迷，每天只想看书写code，不想说话收邮件。

晚上偶然又看到一个同事抱怨每天工作枯燥无味的日志，稍微琢磨了下，发现也是一个共性的问题：

    很多工程师喜欢写全新的code，或者debug很有挑战性的bug，而不愿意和别人讨论问题，写文档/报告，why？

<span class="readmore"><a href="http://veryzhang.cn/?p=526" title="团队成本">阅读全文——共1631字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近一周整个人都很低迷，每天只想看书写code，不想说话收邮件。<br />
晚上偶然又看到一个同事抱怨每天工作枯燥无味的日志，稍微琢磨了下，发现也是一个共性的问题：<br />
    很多工程师喜欢写全新的code，或者debug很有挑战性的bug，而不愿意和别人讨论问题，写文档/报告，why？<br />
写code或者debug会让人感觉爽，大概有下面两点：<br />
1. 这事儿我能做，我比别人强，于是有很强烈的优越感，进而潜意识里认为自己在以后的日子里会越来越厉害，领先周围的人越来越多，等等；<br />
2. 写code也好，debug也罢，让人爽的一个前提是可以完整的debug，换句话说可以看到绝大部分的code，或者只要你愿意，你就可以了解到黑盒子内部的东西是如何工作的，这会让人感到很踏实，你的思维、逻辑推理与判断会与实际的结果很好的匹配。<br />
    试想一下，如果你在调试一个没有任何symbol/code的程序，或者你的调试器经常抽风，又或者这个bug完全随机性的出现，估计谁也不会觉得爽。</p>
<p>所以我很多时候，工程师们不愿意开会/沟通/写文档/写报告的原因，很可能是因为担心人际交流的代价太高。<br />
1. 很多时候，你和别人讨论的东西他未必完全听懂，他说的你也听不怎么明白；<br />
2. 每次写报告都要画很多图，要确认很多细节，还要排版，总是抵消掉要报告的这件事情带给你的快感；<br />
3. 有时候可能因为沟通的问题被人打过枪，或者别的老板误会过，那真是最糟糕透顶了。</p>
<p>前几天有一位非常资深的前辈辞职，一半的原因是为了照顾家庭，另一半是觉得公司的限制太多，还是小公司更好发挥。<br />
就我个人而言，对此类事情早已看淡，每个人都有自己的期望和底牌，两者不匹配的时候就会散伙，很正常不过。<br />
不过这件事还是让我一直在想，所谓的限制太多，应该就是团队成本太高吧？<br />
比如你要做一个新的东西，如果在管理宽松些的公司(说小公司不合适，主要还是跟公司文化有关)，可能一两个人拼个几天就能出个demo，但是在管理比较严格的公司，在看到demo前可能已经开了N次会，写了数份report了。当然这其中的大部分人都是很投入的在做事情，很少有踢皮球或者和稀泥的事情，但是基本上也会把人的激情磨的差不多了。</p>
<p>所谓事情都有两面性，无论管理宽松还是严格应该都有它的优势和劣势，重点在于认清劣势，发扬优势。<br />
严格的管理对于一个比较大的团队应该是必须的（比如两三百人做同一个项目），否则就离散伙不远了。<br />
但是过于严格的管理肯定会带来更高的团队成本，而且会在团队内部扩散，就好比两个人在屋子里聊天，轻声细语即可。但如果是在菜市场里面聊天，即使俩人离的很近，往往也得提高音量，因为干扰很大，而这些干扰在它们各自的参与者看来都是有用的信息。<br />
毫无疑问，在这样的环境里面，谁都会觉得很烦。</p>
<p>俗话说屁股决定脑袋，我是无法从上到下的去看这几百人的团队是如何run起来的，但是从下往上的看，于个体而言，应该还是有些对策的：<br />
1. 提高沟通的效率，或者简单的理解为速度。举个可能不太沾边的例子，你的手机电池是1000mAh，EDGE上网每分钟耗电10mA，下载速度10KB/s，WCDMA每分钟耗电20mA，下载速度1MB每秒。如果你需要下载一个1MB的mp3文件，用WCDMA的话，显然更省电。<br />
    所以提高沟通的效率对于降低沟通成本是非常有效的。<br />
    比如仔细琢磨一下你写report的习惯，很多人都是一页一页的写，每一页ppt都要写到OK才到下一页，或者在一个字号/布局/图表的颜色上面纠结。事实上如果分成几个pass去写report，效率会高很多。<br />
    首先在纸上把要写的东西列出来，这比在电脑上面打字要快很多，因为我们利用计算机对于文字的处理还是偏向于线性的，只是输入很快，重新组织的时候就非常慢了。然后把基本的文字和大概的图表完成，最后再去修饰小的细节。<br />
    再比如需要找某个人沟通的时候，尽量不要邮件往来，很多时候发邮件过去基本上就是告诉对方&#8221;我不着急&#8230;.&#8221;, 还是电话或者直接走过去效率更高，但是这也需要消耗更多的能量，说话总是很累的：）</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=526</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>病后感言</title>
		<link>http://veryzhang.cn/?p=524</link>
		<comments>http://veryzhang.cn/?p=524#comments</comments>
		<pubDate>Sun, 07 Mar 2010 16:41:45 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=524</guid>
		<description><![CDATA[进入10年以来一直的高强度工作，加上春节的折腾，终于让身体报警了，从上周日就开始咳嗽流鼻涕，一直咳到今天才有所好转。

于是上周心情极为糟糕，不过工作上倒是有些游刃有余的感觉，来公司半年之后终于对整体的流程有所把握了，尤其春节前后折腾的两周，颇有点“再牛逼也不过如此”的感觉。

今天加班回来的时候没打车，虎年第一次坐公交车回家，心情居然十分阳光，也说不清为什么，可能一个人就会忘记工作，另外省下了打车的钱，心情可能就好了吧，哈哈。

<span class="readmore"><a href="http://veryzhang.cn/?p=524" title="病后感言">阅读全文——共974字</a></span>]]></description>
			<content:encoded><![CDATA[<p>进入10年以来一直的高强度工作，加上春节的折腾，终于让身体报警了，从上周日就开始咳嗽流鼻涕，一直咳到今天才有所好转。<br />
于是上周心情极为糟糕，不过工作上倒是有些游刃有余的感觉，来公司半年之后终于对整体的流程有所把握了，尤其春节前后折腾的两周，颇有点“再牛逼也不过如此”的感觉。<br />
今天加班回来的时候没打车，虎年第一次坐公交车回家，心情居然十分阳光，也说不清为什么，可能一个人就会忘记工作，另外省下了打车的钱，心情可能就好了吧，哈哈。<br />
作为一名民工，以后应该多做些电脑之外的事情，多关注下自己除了手指之外身体其他的部分是否活动顺畅，更要多关注一下自己脑子里除了coding和debug之外的模块是否还算灵活。人老如山倒啊！<br />
杜拉拉老说，二十八是职业生涯的第一个分水岭，如今老夫还有不到三年，时间相当紧迫了。<br />
这几个月的忙碌中有发现自己好几处性格上的缺点，一是不善于在交谈时思考，二是不善于在压力下思考。<br />
第一点由来已久，我仔细回想了一下自己十几年的学校生涯，绝大多数时间都是自己看书学习，上课只是复习，少有真正用听或者交谈学到新的知识。工作之后愈加严重，沟通和表达的机会更少，直到现在的公司才有质的改善。<br />
说到这里顺便扯远一点，上周无意中看到一篇文章，讲IBM的薪酬绩效管理，大意是说，老板最看重三个要素，即目标，执行和团队。就是团队这两个字，让我有所顿悟，平时工作中总有许多杂事，刚毕业的时候很烦这些东西，现在反而越来越重视这些东西了，因为慢慢地我发现，这些事情要处理的又好又快并不难，但是一旦处理的不好，杂事就往往升级成大事了，损失的也不再是一点点时间。<br />
而处理杂事，最重要的就是在沟通中思考，反面例子往往是你事后想到了当时怎样怎样做最好，但是事后补救的成本与当时把事情一口气做好相比往往相去甚远。<br />
除此之外，如何在压力下思考也让人很头疼，我经常是面临压力就大脑一片空白，目前也没有找到好的方法，不过有一招倒是有些效果，就是强迫自己去承担更大的责任，面临更大的压力，玩命扛过去之后，再回头看，就会很淡定，淡定就不容易出错，不容易出错基本上就难有压力了。所谓挖掘自己的潜能吧。<br />
最后又想起在云端的男主角做演讲时的话，大意是你的背包里装的东西太多，慢慢地就走不动了。要定时放下自己的背包，轻松的向前跑，于我而言，背包里装的多是害怕失败的恐惧，扔掉倒也不难，脸皮厚些即可，哈哈</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=524</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>无题</title>
		<link>http://veryzhang.cn/?p=522</link>
		<comments>http://veryzhang.cn/?p=522#comments</comments>
		<pubDate>Wed, 03 Mar 2010 15:59:38 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=522</guid>
		<description><![CDATA[这年头信息太多，把有用的信息都冲掉了。真正成功的人都是低调，寡言，而勤于思考的人。

所谓执行力，真正的难点在于对困难的预估和回避能力，而不是立军令状表决心，或者每天催上十遍。

要多研究自己，比如什么时候效率最高？什么情景会让你紧张或者烦躁？什么情况下最容易集中精力？

<span class="readmore"><a href="http://veryzhang.cn/?p=522" title="无题">阅读全文——共186字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这年头信息太多，把有用的信息都冲掉了。真正成功的人都是低调，寡言，而勤于思考的人。<br />
所谓执行力，真正的难点在于对困难的预估和回避能力，而不是立军令状表决心，或者每天催上十遍。<br />
要多研究自己，比如什么时候效率最高？什么情景会让你紧张或者烦躁？什么情况下最容易集中精力？<br />
累了就休息，效率最重要。大好时光不去陪女朋友陪家人，天天宅在电脑上效率还不高的折腾几个bug，不是有病是什么？</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=522</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么会紧张？</title>
		<link>http://veryzhang.cn/?p=520</link>
		<comments>http://veryzhang.cn/?p=520#comments</comments>
		<pubDate>Sun, 21 Feb 2010 11:47:48 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=520</guid>
		<description><![CDATA[因为孤立无援？

因为太想成功？

还是因为把自己封闭起来不愿意和其他人一起承担？

<span class="readmore"><a href="http://veryzhang.cn/?p=520" title="为什么会紧张？">阅读全文——共85字</a></span>]]></description>
			<content:encoded><![CDATA[<p>因为孤立无援？<br />
因为太想成功？<br />
还是因为把自己封闭起来不愿意和其他人一起承担？</p>
<p>也可能上面这些都不是，只是因为做事前紧后松，总是把自己逼到最后期限，换谁都会紧张。</p>
<p>一定要有改变。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=520</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>移动生活</title>
		<link>http://veryzhang.cn/?p=519</link>
		<comments>http://veryzhang.cn/?p=519#comments</comments>
		<pubDate>Fri, 19 Feb 2010 15:15:57 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[phone]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=519</guid>
		<description><![CDATA[这次春节长假，对手机的利用率再创新高，列举如下:

1.QQ,MSN,Fetion;

2.每到一地都用谷歌地图看看当前位置，话说以前对隔壁几个市的路线都不清楚，每回坐车就傻了吧叽的看路边的树，这次算是搞清楚了从我家去我姨家怎么走了，就算以后自己开车回来也能走个差不多;

<span class="readmore"><a href="http://veryzhang.cn/?p=519" title="移动生活">阅读全文——共580字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这次春节长假，对手机的利用率再创新高，列举如下:<br />
1.QQ,MSN,Fetion;<br />
2.每到一地都用谷歌地图看看当前位置，话说以前对隔壁几个市的路线都不清楚，每回坐车就傻了吧叽的看路边的树，这次算是搞清楚了从我家去我姨家怎么走了，就算以后自己开车回来也能走个差不多;<br />
3.尝试了一下人人客户端，感觉还凑合，大部分功能都有了，挺实用;<br />
4.尝试了一个新的短信客户端，叫短信密使，加密功能没什么用处，界面倒是不错，主要是操作起来速度飞快，秒杀nokia自带的短信程序。唯一的问题是不能看彩信，不过这样刚好可以把彩信剥离出来，便于定期清理节省空间:)<br />
5.航海桌面又升级了，可以很方便的设置壁纸，而且是全屏的，秒杀nokia自带主题;<br />
6.装了一个exchenga mail，但是连不上公司的server，说没有权限，回去之后争取用起来，这个还是很方便的，避免开会买零食蹲厕所溜号陪女友以及上下班途中收不了邮件而造成邮件堆积，哈哈;<br />
7.给本博增加了手机界面，这里不能说哇普，说哇普会被封。主要是装了一个插件，可以提供适合手机上网的浏览界面和管理界面，以后写博就更方便了;<br />
8.给本博增加了wiki，用的是moinwiki，moinmoin的php版本，据说moinmoin对手机浏览器是非常友好的，moinwiki应该也是，不过暂时还没有验证;</p>
<p>总体上来说，我是越来越离不开手机了:)</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=519</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2009总结</title>
		<link>http://veryzhang.cn/?p=518</link>
		<comments>http://veryzhang.cn/?p=518#comments</comments>
		<pubDate>Thu, 31 Dec 2009 14:58:01 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=518</guid>
		<description><![CDATA[其实没啥好总结的东西, 胡乱写写.

1. 上半年过的比较不爽, 超出了可以忍的限度, 于是换了份工作, 下半年过的比较满意, 虽然越来越忙, 但是很爽;

2. 作为一名IT民工, 其实最喜欢的就是公司有人能帮你搞定乱七八糟的问题, 然后你可以专心做好自己的事情. 这看起来很简单, 但是往往很难做到, 于是你经常得应付一些破事儿或者一些烂人, 或者自己从头搞一些发明轮子的事情. 从这一点上来说, 现在的公司是很爽的, 技术上深度足够, 产品出货量也够大, 基本上相当有挑战性; 管理上该找谁找谁, 很少踢皮球, 虽然每天忙得都快烧起来, 但是很少让你觉得不爽, 总体上来说还是比较难得, 要珍惜;

<span class="readmore"><a href="http://veryzhang.cn/?p=518" title="2009总结">阅读全文——共645字</a></span>]]></description>
			<content:encoded><![CDATA[<p>其实没啥好总结的东西, 胡乱写写.</p>
<p>1. 上半年过的比较不爽, 超出了可以忍的限度, 于是换了份工作, 下半年过的比较满意, 虽然越来越忙, 但是很爽;</p>
<p>2. 作为一名IT民工, 其实最喜欢的就是公司有人能帮你搞定乱七八糟的问题, 然后你可以专心做好自己的事情. 这看起来很简单, 但是往往很难做到, 于是你经常得应付一些破事儿或者一些烂人, 或者自己从头搞一些发明轮子的事情. 从这一点上来说, 现在的公司是很爽的, 技术上深度足够, 产品出货量也够大, 基本上相当有挑战性; 管理上该找谁找谁, 很少踢皮球, 虽然每天忙得都快烧起来, 但是很少让你觉得不爽, 总体上来说还是比较难得, 要珍惜;</p>
<p>3. 人在江湖混, EQ真的很重要, 这一年里经历了不少人和事, 深刻的体会到, 如果一个人有比较明显的性格缺陷, 基本上一定会功亏一篑的, 再努力也难以弥补. 所以要常常剖析自己, 不要由着性子去做事, 遇到事情还是要多思考, 多请教.</p>
<p>4. 未来的目标比较单一, 一是学好技术, 二是学好管理. 学好技术主要是生活要规律, 情绪要稳定, 稳扎稳打, 一般都没有问题; 管理上主要就是学会复制, 自己的经验如何复制给别人, 就是学会带人; 别人的经验怎么复制给自己, 也就是学会协作.</p>
<p>5. 2009年是本命年, 2010年即将跨入25的行列, 以后就不能把自己看做新人了, 因为公司里比自己小的已经大把的了, 1月份开始要带一个新人一起做, 技术之外的事情也会越来越多, 最重要的还是要生活规律, 情绪稳定:)</p>
<p>6. 未来的几年将是最关键的, 在学校的时候还很懵懂, 刚工作的时候还很稚嫩, 现在正是冲的时候了, 加油!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=518</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>未鹏大神再出强文</title>
		<link>http://veryzhang.cn/?p=516</link>
		<comments>http://veryzhang.cn/?p=516#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:43:25 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=516</guid>
		<description><![CDATA[毫无疑问, 这篇文章, 是我看过未鹏的文章里面最棒的.

尽管自己每天都在跟os打交道, 却从未有如此的认识, 以后还要多看看心理学方面的书.

]]></description>
			<content:encoded><![CDATA[<p>毫无疑问, <a href="http://mindhacks.cn/2009/12/20/dark-time/">这篇文章</a>, 是我看过未鹏的文章里面最棒的.</p>
<p>尽管自己每天都在跟os打交道, 却从未有如此的认识, 以后还要多看看心理学方面的书.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=516</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转一篇好文&#8211;独立思考&#8211;谢国忠</title>
		<link>http://veryzhang.cn/?p=513</link>
		<comments>http://veryzhang.cn/?p=513#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:37:30 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=513</guid>
		<description><![CDATA[这篇文章写出了我想了很久, 一直没有想清楚, 或者说不知道怎么表达出来的一些问题.

对这篇文章里的观点, 我只能说, 我无法同意你更多!!

我们最缺乏却最不可或缺的能力：独立思考（谢国忠）

<span class="readmore"><a href="http://veryzhang.cn/?p=513" title="转一篇好文&#8211;独立思考&#8211;谢国忠">阅读全文——共3583字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这篇文章写出了我想了很久, 一直没有想清楚, 或者说不知道怎么表达出来的一些问题.<br />
对这篇文章里的观点, 我只能说, 我无法同意你更多!!</p>
<p>我们最缺乏却最不可或缺的能力：独立思考（谢国忠）</p>
<p>平时我经常阅读与金融界的时事新闻和职业规划有关的网站和论坛，以防自己在不经意中落后于时代。在国内和国外，有许多非常深刻而又活跃的金融类交流社区，例如Doostang,<br />
iBanking Oasis以及MIT BBS等等。我从来就不是社区的活跃成员，只是偶尔观看讨论合集，并争取从那些更有经验的人笔下学到更多东西。</p>
<p>     后来，我逐渐发现了国内和国外社区的一个重大区别（我说的“国内社区”包括所有中文社区，例如水木社区，以及设立在美国的MIT BBS）——相比那些出生在美国、欧洲或澳大利亚的金融从业人员，我们中的大部分人都缺乏独立思考的习惯，而且习惯于把一种偏见强加于另一种偏见之上。在任何讨论中，我们都喜欢采取过于强硬、甚至是人身攻击的态度，而且每个人都希望证明自己是正确的。总而言之，作为出生在中国并在中国接受大部分教育的人，我们经常显得过于顽固地坚持一些所谓的“普遍真理”，而不是根据具体情况进行具体分析。此外，我们还缺乏心平气和地讨论问题的心态。</p>
<p>     举一个最简单的例子。假设你对自己的职业生涯发展不确定，不知道该去一个价值型对冲基金(Value Hedge Fund)还是去一个中型投资银行(Middle Market IB)做股票研究(Equity<br />
Research)。当你到Doostang去寻求帮助时，热心的讨论者会告诉你： 　　　　</p>
<p>     “这完全取决于你的职业偏好，你的背景，以及你对未来的态度。对冲基金的文化和投资银行非常不同。你喜欢深入研究公司的基本面，还是喜欢每天和客户打交道？当然，薪水可能有很大的不同，我无法确定。哪位朋友在对冲基金做过研究？或许他可以帮助你。”</p>
<p>     接着，你可以把自己的大致背景和职业生涯规划告诉他们。会有一些入门级、中级甚至高级的金融从业人员和蔼地开导你。一个人会说：“我个人比较喜欢投资银行，毕竟你和一个团队在一起工作，而且这会大大地锻炼你的交流能力。对冲基金的规模再大，毕竟比不上中等投资银行。况且，在投资银行做股票研究的经历可以帮助你未来成为基金经理或私人股权公司的工作人员。”另一个人可能会说：“我建议你最好选择对冲基金，因为它们的工作和生活更加平衡，而且你能够真正学到怎么做投资，而不是仅仅写报告让客户高兴。如果我是你，我肯定会去买方，而不是卖方。”</p>
<p>     以上的交谈都是用英文进行的，如果你的英文阅读能力不错，那么你将在Doostang或iBanking Oasis得到一些非常中肯的评价。无论如何，你会感觉自己受益很大，对前途看的更清楚了。</p>
<p>     可是，如果你把这个话题贴到水木社区，北大未名BBS或MIT BBS上，等待你的又是什么呢？这要看运气，有时候人们也会提出宝贵意见，但是在大部分情况下，在十几个回复之内，你的主帖下就会充斥许多互相攻击和不知所云的帖子，下面是一些样本：</p>
<p>     用户甲说：“投资银行都是骗人的！你看过投行的研究报告吧，和娱乐记者写的东西没有区别。而且现在投行研究部的工资越来越少了，你去了就等着挨饿吧。我简直想像不出来，作为卖方分析师你能干嘛，其实你啥都锻炼不了。对冲基金至少比投行好。”</p>
<p>     用户乙（可能是一个在中金研究部实习的小伙子）立即大怒地回帖：“你真是无知者无畏。你知道研究业务在大中华区是多么吃香吗？你觉得一个10亿美元规模的对冲基金带给你的锻炼能够比得上一家年营业额几百亿的投行吗？我看你就属于那种根本进不了投行面试的人，你只管在那里误人子弟吧。”</p>
<p>     用户丙（据说是一个物理学博士）慢条斯理地出来说：“你们说的都没有用。无论去对冲基金还是去投行，做股票研究肯定没有前途。实话告诉你们，现在投资分析已经数理化了，数量分析师(Quant)才是唯一有前途的。你知道伦敦城的数量分析师能赚多少吗？做股票研究，是夕阳产业中的夕阳产业。趁早转行吧。”</p>
<p>     用户丁（某个IBD的Senior Associate）说：“难道你没有考虑过IBD吗？事实证明IBD在长期内是最能够锻炼人的，而且工资也很高。现在有许多股票分析师转行到IBD，或者去做Sales。无论如何，我觉得IBD是最好的，所有部门的人都想来IBD。”</p>
<p>     用户戊（很可能刚刚输掉一个IBD的终面）怒不可遏地回复道：“什么IBD，狗屁IBD，整天做一些华而不实的PPT来蒙骗客户，连简单的VBA程序都不会编。你们除了骗人还会干什么？只管去吹吧。还有，那个自称做Quant很赚钱的人也别太高兴，次级债危机就是你们这些Quant搞出来的，到时候你们也只有死。认命吧。”</p>
<p>     好吧，这一路下来，你究竟学到了多少东西？除了骂人、转移话题和混淆是非的能力之外，你可能没有学到什么。人身攻击只是一个方面，关键在于，大部分讨论者都没有注意“具体情况具体分析”。他们会说：“某某部门好，某某部门坏”；可是他们不会说：“根据你的实际情况，我认为某某部门可能是更好的选择”。</p>
<p>     如果你有幸光临MIT BBS的金融求职版，你会发现那里的人整天为“做数量分析师好还是做交易员好”或者“IBD有没有技术含量”这些万年没有答案的问题纠缠不清。另一些富有争议的话题包括：“股票研究是不是死了”，“买方分析师有意义吗”，以及“管理咨询和投资银行哪个更锻炼人”——不用说，这些问题最后没有一个不演变为集体攻击与反攻击。数学好的人会大肆鼓吹数量分析师是最好的，既有技术含量，又安全稳妥，而且工资也很好；数学不好但喜欢吹牛的人会大肆鼓吹IBD是多么伟大，真正有水平的人都来自IBD等等；喜欢读财务报表的人则会坚持说股票研究能够产生真正的天才，而其他部门在忽悠人之后都不会有好下场。大概在三五个帖子之后，他们就会开始闹的满脑子不快。</p>
<p>     这种讨论，对于已经很熟悉职业发展的专业人员来说，或许不会产生负面影响，因为他们已经懂的够多了；但是对那些有志于从事金融业的学生，或者刚刚开始从事金融业的分析员们来说，危害可能相当巨大。我记得很久以前某一天，一个同学眼泪汪汪地告诉我说，他没有办法从事金融了，因为他不会推导Black Scholes公式，也不会C++编程。我对他说：“那些都是做衍生品和数量分析的人使用的，你做其他部门很少会用到。再说，即使你现在从头学习C++, 也不算太晚呀。”那个同学又悲伤地说，他觉得从事基金或投行事业的人都是数理天才，而且还是编程天才，自己注定没有活路。　　　　</p>
<p>     后来，我总算弄明白发生什么了——原来，某BBS的金融职业规划版突然来了几个做过数量分析师的金融工程学硕士，他们不停地鼓吹建模和编程已经成为金融界的一切，如果你不会从头到尾推导Black Scholes公式那就等死吧，而且你还得会Matlab, 并且熟练掌握C++,<br />
至少编过三十万行代码……于是，数理能力不太强、没有编程经验的经济学、金融学或社会科学学生们被搞的灰头土脸，产生了严重的自卑情绪。</p>
<p>    可是仅仅三天之后，情况发生了很大的改变。一个成功的IBD工作人员在那个版面贴了自己的职业生涯感悟，总结说做金融唯一重要的是语言文字表达能力（其实就是吹牛的能力），再加上做PPT的能力，还有就是你要特别会经营关系。他还非常武断地说，技术的作用非常小，其实是用来忽悠人的；高学历也没有作用。于是，经济学和社会科学学生们开始扬眉吐气，数学、物理和计算机高手则开始灰头土脸。如此反复再三，所有想从事金融业的年轻人都会被搞的倒了胃口，完全不知道自己该干什么了。</p>
<p>     在世界上的诸多悲剧中，最大的悲剧就是不会独立思考，而且打击他人独立思考的情绪。这个世界上没有一条通向成功的不变的道路——过去没有，现在没有，将来也不太可能有。当美国、欧洲和澳大利亚的年轻工作者把“具体问题具体分析”和“个人的职业生涯兴趣”放在第一位时，我们的年轻人却总是喜欢武断的决定—— 某个东西肯定是最好的，某个东西肯定是没有前途的，你肯定应该从事某个职业，无论你是不是觉得它很无聊，仅仅是因为它能给你很多钱，或者它能够“旱涝保收 ”……最后，如果你不采纳他的建议，坚持认为别的东西是最好的，他就会攻击你，说你选择了大错特错的道路，将来肯定会被解雇或者干脆流浪街头讨饭。</p>
<p>     每个行业、每个部门都会产生天才和伟人。卖保险的经纪人可以成为巴菲特，投资银行家可以成为黑石公司的创始人，交易员可以成为索罗斯，数量分析师则可以成为Jim Simons那样年薪十几亿美元的对冲基金经理——不过，这些人肯定不是听到别人说“某某行业旱涝保收”或“某某职位薪水最高”就一拥而上的那种人。我们这一代人最大的问题就在于，一方面自视颇高（动辄以超级金领或未来的巴菲特、索罗斯自居），另一方面却完全不知道自己的兴趣和道路何在，也从来没有锻炼起独立思考的能力。或许这才是我们与那些发达国家的年轻人最大的差别。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=513</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>独立开博一周年</title>
		<link>http://veryzhang.cn/?p=508</link>
		<comments>http://veryzhang.cn/?p=508#comments</comments>
		<pubDate>Thu, 17 Dec 2009 16:14:16 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=508</guid>
		<description><![CDATA[再过两天，网站和域名就要过期了，虽然最近一两个月都没怎么写，但是还是去银行转了帐，准备继续写下去。

最近处于典型的连轴转状态，收获也是很大，在度过了适应期之后，已经没有力不从心的感觉了，逐渐地能够看清自己面前的机会和挑战，总体上来说，未来值得期待，眼下可以一搏。

]]></description>
			<content:encoded><![CDATA[<p>再过两天，网站和域名就要过期了，虽然最近一两个月都没怎么写，但是还是去银行转了帐，准备继续写下去。<br />
最近处于典型的连轴转状态，收获也是很大，在度过了适应期之后，已经没有力不从心的感觉了，逐渐地能够看清自己面前的机会和挑战，总体上来说，未来值得期待，眼下可以一搏。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=508</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>一个十分弱的关键词高亮程序</title>
		<link>http://veryzhang.cn/?p=505</link>
		<comments>http://veryzhang.cn/?p=505#comments</comments>
		<pubDate>Sat, 21 Nov 2009 16:06:04 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[编译原理]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=505</guid>
		<description><![CDATA[功能十分的弱，主要是花了点时间学gtk的hello world，然后分词也折腾了会儿。

不过没关系，很快就会有各种词法的高亮加上的，哈哈

]]></description>
			<content:encoded><![CDATA[<p><img src="http://veryzhang.cn/wp-content/uploads/2009/11/Screenshot-zhangxuechengs-editer.png" alt="Screenshot-zhangxuecheng&#039;s editer" title="Screenshot-zhangxuecheng&#039;s editer" width="706" height="927" class="alignnone size-full wp-image-504" /></p>
<p>功能十分的弱，主要是花了点时间学gtk的hello world，然后分词也折腾了会儿。<br />
不过没关系，很快就会有各种词法的高亮加上的，哈哈</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=505</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>立体斑马线</title>
		<link>http://veryzhang.cn/?p=501</link>
		<comments>http://veryzhang.cn/?p=501#comments</comments>
		<pubDate>Fri, 20 Nov 2009 14:48:05 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=501</guid>
		<description><![CDATA[超赞!

]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-502" title="U4126P1T1D19093073F21DT20091120163633" src="http://veryzhang.cn/wp-content/uploads/2009/11/U4126P1T1D19093073F21DT20091120163633.jpg" alt="U4126P1T1D19093073F21DT20091120163633" width="500" height="295" /></p>
<p>超赞!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=501</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关键路径与SMART</title>
		<link>http://veryzhang.cn/?p=499</link>
		<comments>http://veryzhang.cn/?p=499#comments</comments>
		<pubDate>Sun, 15 Nov 2009 15:56:27 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=499</guid>
		<description><![CDATA[今天去公司参加PDCA的培训, 收获很多, 但是印象最深刻的是一个tip: 时刻注意关键路径.

第一次听说这个词还是在大四的时候, 当时开了一门dsp设计的课, 为了凑学分大家都得去, 因为当时已经开始实习, 这门课我一共也就听了不到十分钟, 只记住了一个概念, 就是关键路径(Critical Path).

虽然记住了这个词, 但是理解并不深刻, 似乎就是在一个系统中从输入到输出存在很多条路径同时工作, 那么数据流的传输时间就取决于消耗时间最长的那条路径, 即关键路径. 换句话说, 关键路径优化的好, 整个系统的效率就高, 关键路径没有优化好, 其他的路径再怎么改进也没戏.

<span class="readmore"><a href="http://veryzhang.cn/?p=499" title="关键路径与SMART">阅读全文——共1565字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今天去公司参加PDCA的培训, 收获很多, 但是印象最深刻的是一个tip: 时刻注意关键路径.</p>
<p>第一次听说这个词还是在大四的时候, 当时开了一门dsp设计的课, 为了凑学分大家都得去, 因为当时已经开始实习, 这门课我一共也就听了不到十分钟, 只记住了一个概念, 就是关键路径(Critical Path).</p>
<p>虽然记住了这个词, 但是理解并不深刻, 似乎就是在一个系统中从输入到输出存在很多条路径同时工作, 那么数据流的传输时间就取决于消耗时间最长的那条路径, 即关键路径. 换句话说, 关键路径优化的好, 整个系统的效率就高, 关键路径没有优化好, 其他的路径再怎么改进也没戏.</p>
<p>今天的课程里讲的是:我们在日常的工作和生活中, 经常会有很多条线索同时进行, 会有很多资源可以调度, 也会有很多冲突, 那么从一个相对较大的时间跨度上来说, 最终目标能否达成就取决于你对关键路径的控制.</p>
<p>虽然是很浅显的道理, 但对我这样乱七八糟的想法比较多, 导致经常自己搞出很多活的人来说, 还是很醍醐灌顶的.</p>
<p>比如每周对自己的工作进度进行控制, 与主管之间保持一致, 实际上是应该把握住彼此的关键路径, 而不是在一些分支上花费太多时间.</p>
<p>通常的情况是, 我会被一些并不重要但是很有趣的事情, 或者一些不紧急但是非常重要的事情拖住脚步, 比如一些很有用的小工具, 或者从头review整个模块的设计和历次较大的改动, 这都是让人情不自禁去做的事情, 但是很容易使人迷失, 导致关键路径上的事情没有进展, 而在分支上花的时间反而超过了关键路径.</p>
<p>其实对于这些事情, 我的经验是, 对一些确实有用的小工具, 需要你自己来承担风险, 也就是说你很难事先就从主管那里要到资源和时间去做, 因为这些东西是better而非must的. 所以往往需要自己额外找时间去做, 等做到主体功能都ok了, 完全可以work时, 才能show出来, 进而去争取更多的资源.</p>
<p>而对那些重要而不紧急的事情, 需要你有足够的实力来说服主管和同事, 让他们相信花时间来听你的分析是值得的, 因为类似模块设计级别的东西往往很抽象, 在这个级别的一次高强度的讨论是很消耗体力和脑力的. 所以这之前可能需要你自己多消耗很多体力和脑力&#8230;.</p>
<p>例如有一个模块先后进行了几十次改动, 但是一直都有新的问题冒出来, 那么往往就是走错路了, 一定在早期存在某些简单而草率的改动, 使得后来产生了很多问题, 进而陷入了更困难的境地. 这个时候就需要做很多的推演, 去统计很多场景, 找出这些改动的缺陷所在.</p>
<p>最后还有一点比较深的感悟, 就是SMART原则, 大意就是要有具体的,可衡量的, 能达到的, 有关系的, 有时限的目标.</p>
<p>虽然我对口号一类的东西比较反感, 但是对一个软件模块的设计和维护来说, 有一个明确的可以衡量的目标是至关重要的.</p>
<p>如果我们有心去观察某个模块的改动记录和改动理由的话, 会发现很多时候它的目标都是互相冲突的, 这次是为了效率更高, 下次可能就变成了维护的方便性, 而过一段时间又会基于兼容性做一些改动, 等到项目transfer给另一个人, 又会发生更大的改动, 大概就是类似布朗运动的那么一个轨迹.</p>
<p>以一个display driver为例, 我们说要考虑效率, 那就应该对应于每次application请求update时得到响应的时间, 这个时间的期望和方差应该都是比较小的.</p>
<p>再比如说我们希望减少带宽的占用, 那应该定义出每秒钟update的数据总量, 然后给出每种设计方案下每秒钟update的数据总量的近似值.</p>
<p>另外还有对multi-thread情况下的效率和安全性, 硬件加速的性能, 内存的占用量, 等等等等.</p>
<p>这些指标应该有一个总的表格, 当我们需要在几种设计方案之间做出选择的时候, 可以讲每种方案的利弊都列出来, 然后选择那些真正优秀的方案, 而如果仅凭口头的讨论, 人们的思维往往只局限在两到三个局部因素的比较上面, 几乎无法做出从全局角度来看更优秀的选择.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=499</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>可惜我跑路了</title>
		<link>http://veryzhang.cn/?p=493</link>
		<comments>http://veryzhang.cn/?p=493#comments</comments>
		<pubDate>Sat, 07 Nov 2009 13:52:18 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=493</guid>
		<description><![CDATA[http://audio.pconline.com.cn/mp4/news/0911/1885267.html

虽然已经离开, 但是还是很开心, 希望以后会越来越好.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://audio.pconline.com.cn/mp4/news/0911/1885267.html" target="_blank">http://audio.pconline.com.cn/mp4/news/0911/1885267.html</a></p>
<p>虽然已经离开, 但是还是很开心, 希望以后会越来越好.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=493</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to write a lexer?</title>
		<link>http://veryzhang.cn/?p=485</link>
		<comments>http://veryzhang.cn/?p=485#comments</comments>
		<pubDate>Tue, 06 Oct 2009 15:35:07 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[编译原理]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=485</guid>
		<description><![CDATA[手头已经有的code里面，除了ucc，还真没有那个编译器是手写lexer的，或许是太简单了。(对了, 好像还有lcc).

不过简单有简单的好处，lexer这种东西毕竟是通用的，不限于compiler，而且手写一个也很能锻炼一下coding能力。

ucc是这样实现的：

<span class="readmore"><a href="http://veryzhang.cn/?p=485" title="How to write a lexer?">阅读全文——共1176字</a></span>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">手头已经有的code里面，除了ucc，还真没有那个编译器是手写lexer的，或许是太简单了。(对了, 好像还有lcc).</span></p>
<p><span style="color: #000000;">不过简单有简单的好处，lexer这种东西毕竟是通用的，不限于compiler，而且手写一个也很能锻炼一下coding能力。</span></p>
<p><span style="color: #000000;">ucc是这样实现的：</span></p>
<ol>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">创建一个包含256个函数指针的数组，针对letter，digital和其他的token进行区分，比如所有的letter都是一个处理函数，ditigal是一个，其他的特殊token分别有一个，比如*, &#8211; 等;</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">每次读进一个byte，这个byte的范围是0～255；</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">根据value选择相应的处理函数, 得到具体的返回值;</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">最常见的情况之一是各种letter, 分几种情况处理:</span></span><span style="color: #000000;"> </span>
<ol>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">&#8216;L&#8217;打头, 那么后面很可能是这样: L&#8217;a&#8217; 或者 L&#8221;hello world\n&#8221;, 要判断一下后一个字符是不是&#8217;或者&#8221;, 是的话按照char或者string处理(char和string的处理还挺麻烦, 后面再讲);</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">继续向后吃掉所有的letter或者digit;</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">然后就得到一个identifier了, 先去keyword表里查一下, 看是不是keyword. 这里用了hash表, 按照keyword的首字母排序;</span></span></li>
<li><span style="background-color: #ffffff;"><span style="color: #000000;">去symbol里面查一下, 看是否已经有同名的id存在, 如果有的话, 就将已经保存下来的id地址返回; 否则就新allocate一段内存, 然后返回新的内存的指针;</span></span></li>
</ol>
</li>
<li><span style="color: #000000;">最常见的情况之二是digit, 也分几种情况处理: </span>
<ol>
<li><span style="color: #000000;">首先说明一下, &#8216;-&#8217;的处理是不包含在这里面的, 因为有二义性, 而且需要前溯好几步, 放在语法解析比较好, 比如a &#8211; 1 和a = -1 你就不好在词法解析这个级别做, 所以lexer只是把minus这个结果返回就可以了;</span></li>
<li><span style="color: #000000;">然后要考虑浮点数, 包括.和e这些, 还有0x和0X这样的十六进制数, 077这样的八进制数;</span></li>
<li><span style="color: #ff0000;">不过有一个疑问, 如果一开始就处理&#8217;.', 像10.444这样的数怎么处理?</span></li>
</ol>
</li>
<li><span style="color: #ff0000;"><span style="color: #000000;">后面是一些token的处理:</span></span><span style="color: #000000;"> </span>
<ol>
<li><span style="color: #000000;">&#8216;\&#8217;, 后面跟的一般是转义符, 作为char处理;</span></li>
<li><span style="color: #000000;">&#8216;&#8221;&#8216;, 后面跟的是字符串, 作为string处理;</span></li>
<li><span style="color: #000000;">&#8216;+&#8217;, 分三种情况:++, +=, + ;</span></li>
<li><span style="color: #000000;">&#8216;-&#8217;, 分四种情况:&#8211;, -=, -&gt;, &#8211; ;</span></li>
<li><span style="color: #000000;">&#8216;*&#8217;, 分两种情况:*=, * ;</span></li>
<li><span style="color: #000000;">&#8216;/&#8217;, 分两种情况:/=, / ;</span></li>
<li><span style="color: #000000;">&#8216;%&#8217;, 分两种情况:%=, % ;</span></li>
<li><span style="color: #000000;">&#8216;&lt;&#8217;, 分四种情况:&lt;&lt;, &lt;&lt;=, &lt;=, &lt;;</span></li>
<li><span style="color: #000000;">&#8216;&gt;&#8217;, 分四种情况:&gt;&gt;, &gt;&gt;=, &gt;=, &gt;;</span></li>
<li><span style="color: #000000;">&#8216;!&#8217;, 分两种情况:!=, !;</span></li>
<li><span style="color: #000000;">&#8216;=&#8217;, 分两种情况:==, =;</span></li>
<li><span style="color: #000000;">&#8216;|&#8217;, 分三种情况:||, |=, |;</span></li>
<li><span style="color: #000000;">&#8216;&amp;&#8217;, 分三种情况:&amp;&amp;, &amp;=, &amp;;</span></li>
<li><span style="color: #000000;">&#8216;^&#8217;, 分两种情况:^=, ^;</span></li>
<li><span style="color: #000000;">&#8216;.&#8217;, 分三种情况: </span>
<ol>
<li><span style="color: #000000;">&#8216;.&#8217;后面跟着数字, 则作为float处理;</span></li>
<li><span style="color: #000000;">&#8220;&#8230;&#8221;连在一起, 作为ellipse处理;</span></li>
<li><span style="color: #000000;">单独的&#8217;.';</span></li>
</ol>
</li>
</ol>
</li>
<li><span style="color: #000000;">其余所有的token都直接返回对应的值.</span></li>
</ol>
<p><span style="color: #000000;">所以主要的难度在于数字的处理和identifer table的管理上.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=485</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[读书笔记]杜拉拉求职记</title>
		<link>http://veryzhang.cn/?p=480</link>
		<comments>http://veryzhang.cn/?p=480#comments</comments>
		<pubDate>Thu, 01 Oct 2009 12:25:40 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=480</guid>
		<description><![CDATA[1.知道这本书已经很久很久, 有一两年了吧, 却一直以为是国外的畅销书&#8230;或许是拉拉这个名字的缘故?

2.要说读书的效率, 还是txt靠谱, 因为pdf只有psp看得爽一些, 而每天捧块砖在手里实在太郁闷, 还是手机更方便. 所以那天在电驴上看见有人发布了杜拉拉升职记一和二的txt格式, 就当下来读了.

3.撇开书中的爱情故事不谈, &#60;一&#62;侧重于行政的专业内容和公司里为人处事的方法, 以及少量的hr专业内容, 讲的还是很不错的. 由于最近刚换工作, 正处于磨合期, 对书中的很多事例感触颇多, 尤其是与主管的沟通与合作, 写的很实用.

<span class="readmore"><a href="http://veryzhang.cn/?p=480" title="[读书笔记]杜拉拉求职记">阅读全文——共565字</a></span>]]></description>
			<content:encoded><![CDATA[<p>1.知道这本书已经很久很久, 有一两年了吧, 却一直以为是国外的畅销书&#8230;或许是拉拉这个名字的缘故?</p>
<p>2.要说读书的效率, 还是txt靠谱, 因为pdf只有psp看得爽一些, 而每天捧块砖在手里实在太郁闷, 还是手机更方便. 所以那天在电驴上看见有人发布了杜拉拉升职记一和二的txt格式, 就当下来读了.</p>
<p>3.撇开书中的爱情故事不谈, &lt;一&gt;侧重于行政的专业内容和公司里为人处事的方法, 以及少量的hr专业内容, 讲的还是很不错的. 由于最近刚换工作, 正处于磨合期, 对书中的很多事例感触颇多, 尤其是与主管的沟通与合作, 写的很实用.</p>
<p>4.&lt;二&gt;中基本完全侧重HR和销售的专业工作内容, 令人大开眼界, 尤其是我这样的IT民工, 以前对这些可谓孤陋寡闻. 总体来说就是作者用很量化, 总结的形式列出了员工自己很难注意到的细节, 而且配合有大量的案例, 值的在工作中反复的体会琢磨.</p>
<p>5.不过这本书的局限就是基本只适用于广大外企, 也就是流程化程度比较高, 而且执行力很高的环境, 说白了就是游戏规则比较全面, 而且大家遵守的都还不错. 很多案例若放在之前的民企, 怕是玩不起来&#8230;.</p>
<p>6.总体来说, 书很长, 而且手机阅读似乎因为屏幕小的缘故, 好像脑袋里的缓存也变小了? 全都读下来之后脑袋里还是空空如也, 只记住了一句话: <strong>要与主管保持一致性</strong>&#8230;&#8230;</p>
<p>7.回头有时间再读第二三遍, 然后再补充心得.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=480</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C语言中数组和指针的区别</title>
		<link>http://veryzhang.cn/?p=465</link>
		<comments>http://veryzhang.cn/?p=465#comments</comments>
		<pubDate>Sat, 05 Sep 2009 14:49:56 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=465</guid>
		<description><![CDATA[水文一篇, 胡乱写写.

比较清晰的讲解在&#60;C专家编程&#62;这本书中.

声明(Declaration):

<span class="readmore"><a href="http://veryzhang.cn/?p=465" title="C语言中数组和指针的区别">阅读全文——共1160字</a></span>]]></description>
			<content:encoded><![CDATA[<p>水文一篇, 胡乱写写.</p>
<p>比较清晰的讲解在&lt;C专家编程&gt;这本书中.</p>
<p>声明(Declaration):</p>
<blockquote><p>int a[];</p>
<p>extern int *p;</p></blockquote>
<p>定义(Definitation):</p>
<blockquote><p>int a[10];</p>
<p>int *p</p>
<p>int *p = a;</p></blockquote>
<p>引用(Reference):</p>
<blockquote><p>a[10]=1;</p>
<p>*p=NULL;</p></blockquote>
<p>几个前提:</p>
<blockquote><p>1.声明和定义必须完全一致, 否则编译器会报错</p>
<p>2.不声明就直接引用是可以的, 编译器不会报错, 但是引用和定义必须一致, 否则运行时会发生错误</p></blockquote>
<p>关于声明和定义:</p>
<p>定义就是告诉编译器, 要按照一定的方式来分配内存, 并且给这块内存一个唯一的名字.</p>
<p>而声明只是告诉编译器, 你<strong>准备</strong>以什么样的方式来定义(分配内存并给它命名), 以后编译器就会按照这个方式去引用(就是访问)这段内存.</p>
<p>如果没有声明, 编译器会按照它的理解去访问这段内存, 对函数或者指针这方面都没有问题, 但是对函数会有些问题, 因为编译器会假设没有声明的函数是int func(&#8230;)这样的形式, 即返回值是int型, 参数个数和类型不限, 往往会造成一些返回值为void或者其他类型的函数调用编译不过.</p>
<p>数组和指针在声明与定义方面的问题在于, 你不能定义为数组, 然后声明为指针, 更不能定义为指针, 然后声明为数组, 这是由数组和指针的引用方式不同引起的, 也就是访问内存中数据的方式不同.</p>
<p>当你引用一个数组的元素时, 编译器会从固定的地址开始, 计算出偏移量, 然后得到最终的数据</p>
<p>而访问指针时, 编译器会先得到指针指向的那个地址, 然后从那个地址开始, 计算出偏移量, 然后得到最终的数据</p>
<p>所以当指针和数组的引用发生混乱时, 编译器就可能将一个实际存放数据的地址当成指针, 从而到另外一个地址去取数据, 导致运行时的错误(数组当做指针去引用);或者将一个存放指针的地址当做实际的数据存储区, 从而拿到一个错误的数据(指针当做数组去引用)</p>
<p>也就是你不能在为文件A中定义一个数组, 然后在文件B中将其声明为函数, 反过来也不行.</p>
<p>但是有几处例外</p>
<p>一是数组和指针作为函数的形参时, 它们是等价的, 你可以用void func(char s[]), 也可以用void func(char *s), 因为当函数调用时, 实际传过来的参数是指向实际内存区域的指针, 即编译器无论如何都会作为一个指针去引用参数s, 所以怎么声明都可以. 而数组之所以被作为指针传递, 主要是基于效率的考虑, 如果总是把整个数组的内容在栈上传来传去, 效率损失太大了.</p>
<p>二是对数组引用时, 可以等价为指针, 因为引用一个数组名时, 编译器会把它解释为指向数组第一个元素的指针, 而&#8221;[]&#8220;操作符是等价于&#8221;+&#8221;的, 你可以写a[5], 也可以写5[a], 没有任何问题. 所以通常情况下, 对数组的引用是被当做指针来使用的, 前提是编译器正确的将其作为数组处理, 而不能被错误的声明所迷惑.</p>
<p>最后补充一点：任何类型都不能转换为数组，但是指针可以强制转换</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=465</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>读书笔记&#8211;程序员的自我修养</title>
		<link>http://veryzhang.cn/?p=468</link>
		<comments>http://veryzhang.cn/?p=468#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:53:24 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=468</guid>
		<description><![CDATA[今天花了一天的时间从头到尾翻了一遍, 跳过了那些有X86汇编的部分, 和分析C++ CRT中解构析构的部分, 其他的都读了一遍.

读完之后唯一的感觉就是: 此书非读不可, 而且要经常读.

毫无疑问作者对于链接, 装载和库这三个方面是有深刻的认识的, 于深度和广度都无可挑剔, 而且组织文字的能力也属上乘, 虽然我之前看过相当多相关的spec, 但是读一本书可以这么快, 不能不说作者文字功底确实不错.

<span class="readmore"><a href="http://veryzhang.cn/?p=468" title="读书笔记&#8211;程序员的自我修养">阅读全文——共705字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今天花了一天的时间从头到尾翻了一遍, 跳过了那些有X86汇编的部分, 和分析C++ CRT中解构析构的部分, 其他的都读了一遍.</p>
<p>读完之后唯一的感觉就是: 此书非读不可, 而且要经常读.</p>
<p>毫无疑问作者对于链接, 装载和库这三个方面是有深刻的认识的, 于深度和广度都无可挑剔, 而且组织文字的能力也属上乘, 虽然我之前看过相当多相关的spec, 但是读一本书可以这么快, 不能不说作者文字功底确实不错.</p>
<p>不过我觉得, 如果能把dwarf的信息加进去就好了, 再加上一些讲调试的章节, 改为链接,装载,库与调试, 就完美了.</p>
<p>调试部分不是讲技巧, 这方面已经有几本好书了, 可以侧重调试信息的解析, 调试器的工作原理, 以及前面三者对调试的支撑, 互相之间协作等等.</p>
<p>作者在书中一直提及一个观点: 计算机科学领域的任何问题, 都可以通过添加一个中间层来解决.</p>
<p>在书的很多章节都反复引用并论证了这个观点, 我也觉得非常有道理, 不过事物总是两方面的, 每添加一个中间层都会带来很多额外的负担, 比如验证中间层工作是否正确工作, 规范外部的调用接口, 这都是很大的工作量, 另外还会在调试的时候带来相当多的麻烦, 比如滥用COM.</p>
<p>还有一个缺点就是, 引入新的中间层, 会让被隔离在外面的人失去对底层的了解, 最终会体现在调试上面, 或者对接口的误用, 所谓难以两全吧</p>
<p>这个方法似乎也不局限于计算机领域, 这几天在看书的时候, 我会随手做很多概要, 把认为重要的东西都作为条目写下来, 然后抽一段时间做整理. 以前总是阅读-收藏/保存, 然后凭记忆再做整理, 或者干脆不整理, 回头总是发现似懂非懂, 要去找出处的时候又遍寻而不得, 很浪费时间.</p>
<p>这应该也是个中间层, 把零散的资料做初步的整理, 然后再集中的消化, 效果还是不错的.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=468</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>有道购物搜索助手&#8211;很有趣的应用</title>
		<link>http://veryzhang.cn/?p=457</link>
		<comments>http://veryzhang.cn/?p=457#comments</comments>
		<pubDate>Tue, 25 Aug 2009 15:57:55 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[phone]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=457</guid>
		<description><![CDATA[前天晚上在dospy上闲逛, 发现有人推荐有道购物助手, 于是装了一个玩, 发现确实很有意思.

这个程序利用摄像头去拍摄条形码, 然后上网搜该商品的信息, 我试了家里几乎所有带条形码的东西, 像牛奶, 摄像头, sharp和dopod手机包装盒, 还有一堆书.

1.首先条形码识别是很准确的, 前提是光线充足, 手不能抖;

<span class="readmore"><a href="http://veryzhang.cn/?p=457" title="有道购物搜索助手&#8211;很有趣的应用">阅读全文——共320字</a></span>]]></description>
			<content:encoded><![CDATA[<p>前天晚上在dospy上闲逛, 发现有人推荐有道购物助手, 于是装了一个玩, 发现确实很有意思.</p>
<p>这个程序利用摄像头去拍摄条形码, 然后上网搜该商品的信息, 我试了家里几乎所有带条形码的东西, 像牛奶, 摄像头, sharp和dopod手机包装盒, 还有一堆书.</p>
<p>1.首先条形码识别是很准确的, 前提是光线充足, 手不能抖;</p>
<p>2.书基本上都可以搜出来, 能看到封面和价格区间, 还有目录;</p>
<p>3.其他的东西一概搜不出来, 或许太小众了?</p>
<p>玩了一个晚上, 实在没有发现什么用处, 可能买一些从来没买过, 不了解大概价格的东西会比较方便吧.</p>
<p>不过今天发现一个用武之地, 同事推荐我看一本书, 我掏出手机, 扫描了条形码, 然后点击收藏, 看得他目瞪口呆, 哈哈</p>
<p>或许收藏一些想买而暂时不买的东西是很方便的:)</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=457</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Debuggers Work: Algorithms, Data Structures, and Architecture</title>
		<link>http://veryzhang.cn/?p=454</link>
		<comments>http://veryzhang.cn/?p=454#comments</comments>
		<pubDate>Sat, 22 Aug 2009 18:30:10 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=454</guid>
		<description><![CDATA[晚上搜dwarf的资料，无意中搜到了这本书，已经有些年头了，不过讲debugger实现的书实在是太少了，这本算是宝物一件了。

关于breakpoint，step，还有stack backtrace unwinding这些话题都有涉及，大致浏览了一下感觉还算详细，可以与dwarf/ARM EABI/ATPCS的spec结合起来看。

下载地址在这里：

<span class="readmore"><a href="http://veryzhang.cn/?p=454" title="How Debuggers Work: Algorithms, Data Structures, and Architecture">阅读全文——共218字</a></span>]]></description>
			<content:encoded><![CDATA[<p>晚上搜dwarf的资料，无意中搜到了这本书，已经有些年头了，不过讲debugger实现的书实在是太少了，这本算是宝物一件了。</p>
<p>关于breakpoint，step，还有stack backtrace unwinding这些话题都有涉及，大致浏览了一下感觉还算详细，可以与dwarf/ARM EABI/ATPCS的spec结合起来看。</p>
<p>下载地址在这里：</p>
<p><a href="http://d.download.csdn.net/down/1125895/liubolook" target="_blank">http://d.download.csdn.net/down/1125895/liubolook</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=454</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ARM编译器性能对比&#8211;[ARM compiler shoot-out]&#8211;[二]</title>
		<link>http://veryzhang.cn/?p=452</link>
		<comments>http://veryzhang.cn/?p=452#comments</comments>
		<pubDate>Fri, 21 Aug 2009 15:19:23 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=452</guid>
		<description><![CDATA[前面转过一篇ARM编译器性能对比的文章，最近作者又做了第二次测试，加入了TI的编译器。

从测试结果来看，TI的编译器和GCC不相上下，不过作者给出了一个很有意思的结论：对于64bit的运算，GCC生成的代码效率要远小于其他编译器。

这也是第一次测试中作者对mp3解码的测试结果非常疑惑的原因。

<span class="readmore"><a href="http://veryzhang.cn/?p=452" title="ARM编译器性能对比&#8211;[ARM compiler shoot-out]&#8211;[二]">阅读全文——共337字</a></span>]]></description>
			<content:encoded><![CDATA[<p>前面转过一篇<a href="http://veryzhang.cn/?p=402" target="_blank">ARM编译器性能对比</a>的文章，最近<a href="http://hardwarebug.org/2009/08/20/arm-compiler-shoot-out-round-2/" target="_blank">作者又做了第二次测试</a>，加入了TI的编译器。</p>
<p>从测试结果来看，TI的编译器和GCC不相上下，不过作者给出了一个很有意思的结论：对于64bit的运算，GCC生成的代码效率要远小于其他编译器。</p>
<p>这也是第一次测试中作者对mp3解码的测试结果非常疑惑的原因。</p>
<p>我猜想GCC可能没有使用ARM的长乘指令(umlal和umull)来完成64bit的操作，而是使用了C库中64bit运算的相关函数，导致性能出现了如此大的差异。</p>
<p>如果有64bit的除法，那就只能是不同编译器的C库实现效率不同了。</p>
<p>要验证这一点非常容易，只要用arm版本的gcc生成一个简单的64bit乘法和除法的代码，看一下汇编就知道了。</p>
<p>现在手头没有linux的环境，争取周末回家验证一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=452</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐一款e71上面非常好用的桌面软件&#8211;航海桌面</title>
		<link>http://veryzhang.cn/?p=447</link>
		<comments>http://veryzhang.cn/?p=447#comments</comments>
		<pubDate>Thu, 20 Aug 2009 16:51:09 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=447</guid>
		<description><![CDATA[自从买了E71之后，我就一直很讨厌symbian自带的桌面，原因如下：

1、不能全屏，小毛的图片放在上面被掐头去尾，越看越生气；

2、只能放置6个快捷方式，屏幕下部还有很大一片空间浪费掉了；

<span class="readmore"><a href="http://veryzhang.cn/?p=447" title="推荐一款e71上面非常好用的桌面软件&#8211;航海桌面">阅读全文——共495字</a></span>]]></description>
			<content:encoded><![CDATA[<p>自从买了E71之后，我就一直很讨厌symbian自带的桌面，原因如下：</p>
<p>1、不能全屏，小毛的图片放在上面被掐头去尾，越看越生气；</p>
<p>2、只能放置6个快捷方式，屏幕下部还有很大一片空间浪费掉了；</p>
<p>3、自带的日历和任务管理很弱，基本就是个鸡肋，GTD之类的功能自然说不上了，常用的任务管理也不好用。</p>
<p>后来试了几款不同的桌面软件，包括UC桌面，最后发现还是航海桌面超级好用：</p>
<p>1、自定义桌面快捷方式，最多2&#215;7个，一共两行，完全满足需要；</p>
<p>2、如果14个快捷方式不够用，还可以在开始菜单里继续无限制定义；</p>
<p>3、按挂机键可以切换应用程序，这个功能超级实用；</p>
<p>4、桌面上可以显示百度/google搜索，天气预报，农历等信息，完全利用上了屏幕的空间；</p>
<p>5、自行修改网标，把“中国移动”换成其他的文字，这个功能没啥用处，但是很好玩，呵呵；</p>
<p>6、来去电信息显示，包括时间和流量统计，非常实用，不过E71上面好像在主界面上刷屏有问题，之前用过柳丁来电，N95上的显示效果是很好的，E71就会一直闪啊闪，看着很不爽；</p>
<p>其他的还有不少小功能，不过我觉得上面这些是最实用的：）</p>
<p>航海桌面主页：</p>
<p><a href="http://3gtb.com/wp_site/" target="_blank">http://3gtb.com/wp_site/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=447</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我的兴趣分布&#8211;by xmind</title>
		<link>http://veryzhang.cn/?p=442</link>
		<comments>http://veryzhang.cn/?p=442#comments</comments>
		<pubDate>Thu, 20 Aug 2009 16:40:00 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=442</guid>
		<description><![CDATA[最近琐事极多，主要是离职一直不顺利，搞得我手忙脚乱。

这几天熬夜又明显增多，每天都是快3点入睡，但是凌晨的这个时间确实神清气爽，精力也很集中，怕是已经进入积重难返的境界了&#8230;

刚随后整理了下自己感兴趣的东西，我所谓感兴趣，就是不管工作是否需要，或者自己能否看懂，抑或时间充裕与否，都会去关注去实践，能让我乐在其中的东西。

<span class="readmore"><a href="http://veryzhang.cn/?p=442" title="我的兴趣分布&#8211;by xmind">阅读全文——共225字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近琐事极多，主要是离职一直不顺利，搞得我手忙脚乱。</p>
<p>这几天熬夜又明显增多，每天都是快3点入睡，但是凌晨的这个时间确实神清气爽，精力也很集中，怕是已经进入积重难返的境界了&#8230;</p>
<p>刚随后整理了下自己感兴趣的东西，我所谓感兴趣，就是不管工作是否需要，或者自己能否看懂，抑或时间充裕与否，都会去关注去实践，能让我乐在其中的东西。</p>
<p>工作中也包含了很多，因为我确实喜欢这样的工作，虽然还有很多很不爽的事情，或许以后会列一个non-interest-list出来，哈哈</p>
<p style="text-align: center;"><a href="http://veryzhang.cn/wp-content/uploads/2009/08/Me1.png"><img class="aligncenter size-full wp-image-444" title="my-interesting-distribution" src="http://veryzhang.cn/wp-content/uploads/2009/08/Me1.png" alt="my-interesting-distribution" width="706" height="334" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=442</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E71与Dopod diamond</title>
		<link>http://veryzhang.cn/?p=440</link>
		<comments>http://veryzhang.cn/?p=440#comments</comments>
		<pubDate>Wed, 19 Aug 2009 16:51:48 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=440</guid>
		<description><![CDATA[最近一直在把玩这两款手机，E71是自己买的，diamond是老姐的，胡乱记录下。

E71：

1.全键盘，超薄，反应速度快，这是我买它的最大理由；

<span class="readmore"><a href="http://veryzhang.cn/?p=440" title="E71与Dopod diamond">阅读全文——共709字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近一直在把玩这两款手机，E71是自己买的，diamond是老姐的，胡乱记录下。</p>
<p>E71：</p>
<p>1.全键盘，超薄，反应速度快，这是我买它的最大理由；</p>
<p>2.不过诺基亚最大的优点在于它没有缺点，最大的缺点就是它没有优点。全键盘没错，但是太密了些，GPS和摄像头都只能说中规中矩，屏幕分辨率只有320&#215;240，耳机插孔还是2.5mm的。只能说综合素质不错，而且缺点没有差到不能忍的程度；</p>
<p>3.symbian软件的签名太讨厌了；</p>
<p>4.symbian上的office和pdf软件是个软肋，跟wm比差很多；</p>
<p>5.其他的都还好，不发烫，待机还行，大小很合适，GPS搜星也挺快，比之前用过的N95强太多，一代机皇装短裤口袋里面能把裤子拉下来&#8230;..搜星的时候还得推开盖，要不然信号不好。</p>
<p>Diamond：</p>
<p>1.640&#215;480的屏幕，全触摸，加gps，我觉得这是他最大的优势；</p>
<p>2.wm的优势很多，软件丰富，正经的office，外加正经的exchenge mail，还有版本很新的adobe reader，在adobe的网站上，palm的版本是3.05，wm是2.0，symbian只有1.1；</p>
<p>3.diamond的缺点也很明显，太热，太慢。太热怕是无法解决了，太慢据说可以刷rom，不过我试了一个晚上也没有搞定硬启，还是改天再试试。</p>
<p>据说<a href="http://symbian.org/" target="_blank">symbian已经开源了不少代码</a>，但是全部开源还需要大约一年时间，不知道会发生什么变化。</p>
<p>wm确实落后太多了，未来会怎样也说不好，但是在office和exchange两块，还是处于杀手级应用地位的。</p>
<p>其实想来想去，我最需要的手机应该是hero，全键盘+触摸，GPS，完美集成google应用，只是屏幕不够大，而且价格太高&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=440</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近想看的两本关于内存的书</title>
		<link>http://veryzhang.cn/?p=436</link>
		<comments>http://veryzhang.cn/?p=436#comments</comments>
		<pubDate>Mon, 17 Aug 2009 18:44:23 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=436</guid>
		<description><![CDATA[对内存的兴趣依然十分浓厚&#8230;.

Memory Systems: Cache DRAM Disk:

http://www.newsmth.net/bbscon.php?bid=272&#38;id=36331&#38;ftype=3&#38;num=1775

<span class="readmore"><a href="http://veryzhang.cn/?p=436" title="最近想看的两本关于内存的书">阅读全文——共397字</a></span>]]></description>
			<content:encoded><![CDATA[<p>对内存的兴趣依然十分浓厚&#8230;.</p>
<p>Memory Systems: Cache DRAM Disk:</p>
<p><a title="Memory Systems: Cache DRAM Disk" href="http://www.newsmth.net/bbscon.php?bid=272&amp;id=36331&amp;ftype=3&amp;num=1775" target="_blank">http://www.newsmth.net/bbscon.php?bid=272&amp;id=36331&amp;ftype=3&amp;num=1775</a></p>
<p>Dram circuit design: fundamentals and high-speed topics</p>
<p><a href="http://books.google.com/books?id=TgW3LTubREQC&amp;dq=dram+circuit+design&amp;printsec=frontcover&amp;source=bl&amp;ots=l_MqpwOhpg&amp;sig=uvMuEZStwntOFPiiV-uuCvAf6IA&amp;hl=en&amp;ei=Oz2ISs7RAYTU7APh5Jj6Aw&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=4#v=onepage&amp;q=&amp;f=false" target="_blank">http://books.google.com/books?id=TgW3LTubREQC&amp;dq=dram+circuit+design&amp;printsec=frontcover&amp;source=bl&amp;ots=l_MqpwOhpg&amp;sig=uvMuEZStwntOFPiiV-uuCvAf6IA&amp;hl=en&amp;ei=Oz2ISs7RAYTU7APh5Jj6Aw&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=4#v=onepage&amp;q=&amp;f=false</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=436</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让VIM的Esc更好用一些</title>
		<link>http://veryzhang.cn/?p=431</link>
		<comments>http://veryzhang.cn/?p=431#comments</comments>
		<pubDate>Sun, 16 Aug 2009 14:01:14 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[VIM使用]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=431</guid>
		<description><![CDATA[用VIM的时候总是不停的按Esc，但是这个键离的太远，很难盲按，即使可以盲按Esc了，手在退回到键盘中间时也总是需要重新定位(摸F上的小点)，相当费劲。

今天发现一个方法，相当赞：把jj组合映射为Esc，即快速按两次j，就相当于Esc了，如果需要输入jj，在键入第一个j之后稍停一下再输入j即可，太方便了。

具体配置方法如下：

<span class="readmore"><a href="http://veryzhang.cn/?p=431" title="让VIM的Esc更好用一些">阅读全文——共172字</a></span>]]></description>
			<content:encoded><![CDATA[<p>用VIM的时候总是不停的按Esc，但是这个键离的太远，很难盲按，即使可以盲按Esc了，手在退回到键盘中间时也总是需要重新定位(摸F上的小点)，相当费劲。</p>
<p>今天发现一个方法，相当赞：把jj组合映射为Esc，即快速按两次j，就相当于Esc了，如果需要输入jj，在键入第一个j之后稍停一下再输入j即可，太方便了。</p>
<p>具体配置方法如下：</p>
<blockquote><p><span style="font-style: italic;">imap jj &lt;Esc&gt;</span></p></blockquote>
<p><span style="font-style: italic;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=431</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>那年的生日礼物</title>
		<link>http://veryzhang.cn/?p=428</link>
		<comments>http://veryzhang.cn/?p=428#comments</comments>
		<pubDate>Sat, 15 Aug 2009 17:15:24 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=428</guid>
		<description><![CDATA[今年买了wii。

越来越俗了&#8230;.

制作这张贺卡让我找回了久违的快乐，那种在很小的时候常常感觉到的创造的快乐，希望kitty猫和坏小子能把快乐带到妹妹身边，永远不要退色：）

<span class="readmore"><a href="http://veryzhang.cn/?p=428" title="那年的生日礼物">阅读全文——共150字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今年买了wii。</p>
<p>越来越俗了&#8230;.</p>
<hr />制作这张贺卡让我找回了久违的快乐，那种在很小的时候常常感觉到的创造的快乐，希望kitty猫和坏小子能把快乐带到妹妹身边，永远不要退色：）</p>
<p>正面：<br />
<img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746709.jpg" alt="点击查看原始尺寸" /></p>
<p>信封，从正面的洞里漏出来：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746732.jpg" alt="点击查看原始尺寸" /></p>
<p>展开之后：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746747.jpg" alt="点击查看原始尺寸" /></p>
<p>打开贺卡之后看到的信封：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746769.jpg" alt="点击查看原始尺寸" /></p>
<p>大信封里套的小信封 ：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746782.jpg" alt="点击查看原始尺寸" /></p>
<p>还是小信封：）</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746815.jpg" alt="点击查看原始尺寸" /></p>
<p>背面，大kitty：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746840.jpg" alt="点击查看原始尺寸" /></p>
<p>近看正面：</p>
<p><img style="width: 550px; cursor: pointer;" src="http://coon.blogbus.com/files/1155746864.jpg" alt="点击查看原始尺寸" /></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=428</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>做系统和做算法</title>
		<link>http://veryzhang.cn/?p=425</link>
		<comments>http://veryzhang.cn/?p=425#comments</comments>
		<pubDate>Sat, 15 Aug 2009 17:06:06 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=425</guid>
		<description><![CDATA[工作中接触到的软件开发主要是这两块，算法就是各种音视频的编解码算法和处理算法，系统就是包括驱动，界面，操作系统，媒体播放引擎等等应用级的东西。

算 法就像是打老虎，山上有一到两只老虎，然后派你去搞定，方法也不难，找到老虎，打死它。做算法得人大都接受过良好的训练，也有不少半路出家自学成才的，共 同特点就是在某个领域中摸爬滚打了很久，很多地方都很熟。最终老虎打残还是还是打死抑或半死，基本取决于此人是否认真的去打。

系统就像是抓老鼠，山上有无数的老鼠，然后派你去搞定。大部分情况下都是随便抓了个人就派上去了，然后领导在后面指挥。常见的情况是抓老鼠的人累的死去活来，抓了无数的老鼠，但是依然有无数的老鼠四处流窜，最后客户气跑了，老板没钱了，抓老鼠的人跑路了。

<span class="readmore"><a href="http://veryzhang.cn/?p=425" title="做系统和做算法">阅读全文——共567字</a></span>]]></description>
			<content:encoded><![CDATA[<p>工作中接触到的软件开发主要是这两块，算法就是各种音视频的编解码算法和处理算法，系统就是包括驱动，界面，操作系统，媒体播放引擎等等应用级的东西。</p>
<p>算 法就像是打老虎，山上有一到两只老虎，然后派你去搞定，方法也不难，找到老虎，打死它。做算法得人大都接受过良好的训练，也有不少半路出家自学成才的，共 同特点就是在某个领域中摸爬滚打了很久，很多地方都很熟。最终老虎打残还是还是打死抑或半死，基本取决于此人是否认真的去打。</p>
<p>系统就像是抓老鼠，山上有无数的老鼠，然后派你去搞定。大部分情况下都是随便抓了个人就派上去了，然后领导在后面指挥。常见的情况是抓老鼠的人累的死去活来，抓了无数的老鼠，但是依然有无数的老鼠四处流窜，最后客户气跑了，老板没钱了，抓老鼠的人跑路了。</p>
<p>其 实做系统看似简单，但更需要一种统领全局的思想，系统设计里面没有太难的问题，但是小问题的数量很多，多到具有了老鼠群的特征。无论抓老鼠的人还是在后面 指挥的人，都不能贸然上山，一定要仔细分析，老鼠有几个洞，老鼠吃什么，老鼠一般什么时候出来活动，老鼠最怕什么，等等等等，这些问题都搞清楚了之后，就 把所有人部署好，挑最好的时机，堵死所有的退路，集中下手，一次搞定，最重要的是不能有遗漏。</p>
<p>总是有人每天在喊，我多么多么的累，多么多么的努力，加班熬夜，几天没合眼，查出来多少bug&#8230;..</p>
<p>老鼠都笑了！</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=425</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于民工</title>
		<link>http://veryzhang.cn/?p=423</link>
		<comments>http://veryzhang.cn/?p=423#comments</comments>
		<pubDate>Sat, 15 Aug 2009 17:05:37 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=423</guid>
		<description><![CDATA[最近一直在思考，啥叫民工？怎样才不算民工？

以前我没有考虑过这个问题，觉得自己过的还算happy，每天都在折腾新东西，时不时有些收获，充实的很。但是前一阵子看了孟岩的一片文章， 中间提到了第四类人，即还处在出卖劳动力的阶段，我突然有所触动，开始思考民工这个问题。

我暂且把民工就定位在“出卖劳动力的人”，或者借用大O表示法的话，民工的劳动时间和产出比是O(N)，这里的前提就是我假定付出和所得是相等的，即你的价值和老板给你的钱是相等的，毕竟这是老板的问题。

<span class="readmore"><a href="http://veryzhang.cn/?p=423" title="关于民工">阅读全文——共817字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近一直在思考，啥叫民工？怎样才不算民工？</p>
<p>以前我没有考虑过这个问题，觉得自己过的还算happy，每天都在折腾新东西，时不时有些收获，充实的很。但是前一阵子看了<a href="http://blog.csdn.net/myan/archive/2008/11/07/3247071.aspx" target="_blank">孟岩的一片文章</a>， 中间提到了第四类人，即还处在出卖劳动力的阶段，我突然有所触动，开始思考民工这个问题。</p>
<p>我暂且把民工就定位在“出卖劳动力的人”，或者借用大O表示法的话，民工的劳动时间和产出比是O(N)，这里的前提就是我假定付出和所得是相等的，即你的价值和老板给你的钱是相等的，毕竟这是老板的问题。</p>
<p>那么在一个团队中，如果一个民工每工作一小时，能解决一个问题，那么他工作12个小时，最多只能解决12的问题，这就是民工的本质特性，他可以并且只能通过延长劳动时间来增加自己的价值。</p>
<p>那么非民工具有哪些特性呢？按照我肤浅的理解，非民工的劳动时间和产出比应该是非线性的，比如O(N^2)，当然这个曲线的增长是有上限的。</p>
<p>更 具体一点讲，比如某民工，每天工作12个小时，平均每天解决掉10个以上bug，十分勤奋，但是坦率的说，该民工应该是一个维修工，因为他只是在修补，或 者为一些某些状态不能工作的元件做一些保护，这种工作换了谁都不能做到非线性，除非他研究了一个AI出来，可以自动解bug。</p>
<p>但是该民工可以尝试着做一些调试工具，无论是什么形式的，比如运行时的出错报警工具，检测工具，引入一些保护机制等等，最终花了一天时间解决了几十个bug，那么在暂时的这个状态下，他应该超越了民工的层次，因为他发明了工具。</p>
<p>再比如该民工业余时间刻苦学习，努力了解系统的深层知识，发现了现有系统设计的一些误区，然后引入新的设计，提高了效率或者增加了稳定性或者引入了feature，那么在暂时的这个状态下，他应该超越了民工的层次，因为他做了新的设计，或者说在系统层次上做了大的创新。</p>
<p>暂时只想到这么些，不知对错，让时间去检验吧。</p>
<p>不过我唯一坚信的一点就是，必须做最好的民工，才有可能超越民工。因为即使你成了老板，还是要靠民工吃饭。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=423</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>三年?</title>
		<link>http://veryzhang.cn/?p=418</link>
		<comments>http://veryzhang.cn/?p=418#comments</comments>
		<pubDate>Sat, 15 Aug 2009 16:23:02 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=418</guid>
		<description><![CDATA[我很少抱怨, 也不愤世嫉俗.

但是之前不是这样的, 似乎是从大四的时候开始, 也就是三年前.

那时候我刚离开科协, 结束了那段鸡飞狗跳的日子, 一个想法太多而能力有限的青年, 在一个社团里做了一切自己想做的事, 然后留下大段的时间去回忆, 或者说反思.

<span class="readmore"><a href="http://veryzhang.cn/?p=418" title="三年?">阅读全文——共1371字</a></span>]]></description>
			<content:encoded><![CDATA[<p>我很少抱怨, 也不愤世嫉俗.</p>
<p>但是之前不是这样的, 似乎是从大四的时候开始, 也就是三年前.</p>
<p>那时候我刚离开科协, 结束了那段鸡飞狗跳的日子, 一个想法太多而能力有限的青年, 在一个社团里做了一切自己想做的事, 然后留下大段的时间去回忆, 或者说反思.</p>
<p>从那之后好像我就很少抱怨了, 因为我对自己看的很清晰, 一个浮躁而喜欢幻想的年轻人, 总是在事情还没做的时候就沉浸在成功的YY中. 那个暑假我常常一个人坐着, 反复回忆着过去的三年里发生的每件事, 然后突然醒悟过来, 我应该重新开始, 肯定来得及.</p>
<p>从那以后我脑子里就有了一个极为坚定的念头, 如果有了想法, 就要立刻去做, 而且一定要做出结果.</p>
<hr />
<p>早上有一个同事的签名档写着, 三年走了16个人. 我有点诧异, 有这么多吗? 后来拿起手机联系上去年走的一位同事, 上一次和他聊天也有差不多一年了, 他停留在去年的记忆和我脑海中的现实发生碰撞, 让我很清晰的感受到了时间的飞逝. 不过世界很小, 以后还会经常碰面, 又会有新的共同的记忆.</p>
<p>晚上亚嵌的李明老师在gtalk上找到我, 聊了几句, 说起他当年帮我推荐工作的事情, 转眼已经三年了, 一年实习加两年工作, 真是不经混啊.</p>
<hr />
<p>到北京之后一共两个三年, 后面这个明显要好的多, 完全得益于那时的反思, 还有从不抱怨的心态.</p>
<p>上周三办完了所有离职手续, 开始在家休息, 每天看书写code, 好像又回到了三年前那个时候, 又开始回忆之前的很多事情, 不过这次要好一些, 似乎没有什么遗憾的事, 一切都很坦然.</p>
<p>一个人的职业生涯就像过山车, 都会有高潮和低谷, 只要你还算专注, 都可以混去一些所谓的大公司, 做一些冠冕堂皇的工作, 而后差不多都会变得有些鸡肋, 每天喊着要创业要改行云云, 但是发现自己除了写code其实啥也不会, 只能更加谨慎的混下去.</p>
<p>我觉得在一个公司混, 也需要经历过一次低谷, 做出一次不求回报的坚持之后, 才能发生质变, 让自己做上去, 总是追求短期利益是不行的, 因为靠出卖劳动力的方式生存, 最终的结果一定是被淘汰的.</p>
<p>不过有些事情还是更紧迫更重要, 比如工作时的心情, 还有技术上的提高, 所以还是选择跑路, 无论如何, 时间是很宝贵的.</p>
<hr />
<p>这次静下来思考, 我觉得自己还是不够专注, 耐心也还不够.</p>
<p>以前的环境算是差强人意, 有的人不喜欢研究的太深, 有的人是环境所迫, 没时间去研究. 所以如果你肯花时间, 多读些书, 多做些实验, 多尝试些不同的思路, 很容易搞出别人觉得挺高深的东西. 但是实际上并不能带给我真正的积累, 因为没有甩开别人足够久, 只要肯花时间, 一定能够追上你.</p>
<p>而如果有机会到更好的环境中做事, 面对更多愿意深究的人, 或者愿意花时间让你去研究的环境, 如何才能继续做的好? 或者说如何避免被淘汰?</p>
<p>所以说以后必须注意方法和效率, 还有沟通, 这也是我想离开现在的环境去寻找的东西.</p>
<p>我想这几点如果做得好, 就能站稳脚跟, 以后也能有机会挑战更高的层次; 做不好的话, 就只能继续混下去, 靠体力吃饭了.</p>
<p>不过总体来说还是要少说话, 多做事, 没做出来的就不要说, 做出来也不要多说, 瞅准机会看看哪些地方有空白, 没人敢做的东西往往不是那么难, 而且也是最容易做出彩的.</p>
<p>现在书架上的书比三年前多了好几倍, 电子书也积累了几十个G了, 不过有几本我觉得太重要, 需要每周都翻一下:</p>
<p>CSAPP, 龙书, 数据结构与算法分析.</p>
<p>工作时间是公司分配的, 让做啥做啥.</p>
<p>业余时间应该去学那些很基础很理论, 十几年变化都不大的东西.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=418</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>我是一只IT小小鸟</title>
		<link>http://veryzhang.cn/?p=413</link>
		<comments>http://veryzhang.cn/?p=413#comments</comments>
		<pubDate>Sat, 15 Aug 2009 15:12:27 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=413</guid>
		<description><![CDATA[博文视点的新书, 之前看过几篇样章, 颇受震撼, 如今终于要出书了.

记得大四毕业的时候, 看过一本书, 叫&#60;大学里应该读什么&#62;, 名字记不太确切了, 挺厚的一本书, 当时一口气读完了, 所谓心有戚戚焉, 边看边想, 如果四年前读到这本书, 现在恐怕会是另一番样子了.

不过毕业之后, 慢慢领悟到, 一个道理, 即使它再正确, 如果自己没有经历过, 也是体会不到的, 所以书读的早晚, 或者读没读到, 其实区别不大, 问题在于你有没有去经历过这些事情.

<span class="readmore"><a href="http://veryzhang.cn/?p=413" title="我是一只IT小小鸟">阅读全文——共349字</a></span>]]></description>
			<content:encoded><![CDATA[<p>博文视点的新书, 之前看过几篇样章, 颇受震撼, 如今终于要出书了.</p>
<p>记得大四毕业的时候, 看过一本书, 叫&lt;大学里应该读什么&gt;, 名字记不太确切了, 挺厚的一本书, 当时一口气读完了, 所谓心有戚戚焉, 边看边想, 如果四年前读到这本书, 现在恐怕会是另一番样子了.</p>
<p>不过毕业之后, 慢慢领悟到, 一个道理, 即使它再正确, 如果自己没有经历过, 也是体会不到的, 所以书读的早晚, 或者读没读到, 其实区别不大, 问题在于你有没有去经历过这些事情.</p>
<p>但是人的时间毕竟是有限的, 不可能逐一去经历那些挫折和失败, 还有从低谷中奋起的过程, 所以读一读别人的人生, 尤其是那些倒下去又重新站起来, 或者和你有着相似的成长经历的人, 可以带给我们太多的启发和力量.</p>
<p><a href="https://groups.google.com/group/pongba/browse_thread/thread/be579770e74d2c7e/d8c1208524951ecc#d8c1208524951ecc">蒋宇东——《梦断计院》</a></p>
<p><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/">刘未鹏——《我在南大的七年》</a></p>
<p><a href="http://blog.youxu.info/2009/08/06/my-undergraduate-year/#comments">徐宥——《我的大学》</a></p>
<p><a href="http://zbw25.spaces.live.com/blog/cns%21BD4EFBFAF436336C%212913.entry">庄表伟——《我的野蛮成长》</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=413</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下的电源管理还是略逊一筹</title>
		<link>http://veryzhang.cn/?p=410</link>
		<comments>http://veryzhang.cn/?p=410#comments</comments>
		<pubDate>Wed, 12 Aug 2009 15:12:31 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=410</guid>
		<description><![CDATA[昨天晚上很兴奋，躺在床上怎么也睡不着，就爬起来又打开电脑，想看几眼llvm的代码。

中间又打开了virtualbox，用windows下的source insight看code，突然电脑就死掉了，只能强制关机，之后却怎么也无法启动，只好睡觉。

今天回家之后再次开机，一切顺利，结果进到gnome界面之后，过了一会儿突然又死机了，没有任何反应，强制关机之后跟昨天的现象完全一样。

<span class="readmore"><a href="http://veryzhang.cn/?p=410" title="linux下的电源管理还是略逊一筹">阅读全文——共608字</a></span>]]></description>
			<content:encoded><![CDATA[<p>昨天晚上很兴奋，躺在床上怎么也睡不着，就爬起来又打开电脑，想看几眼llvm的代码。</p>
<p>中间又打开了virtualbox，用windows下的source insight看code，突然电脑就死掉了，只能强制关机，之后却怎么也无法启动，只好睡觉。</p>
<p>今天回家之后再次开机，一切顺利，结果进到gnome界面之后，过了一会儿突然又死机了，没有任何反应，强制关机之后跟昨天的现象完全一样。</p>
<p>昨晚上的死机我一直怪到virtualbox头上，可是今天这个就说不过去了，我抱着脑袋琢磨半天，觉得只可能是cpu过热了。</p>
<p>一看cpu风扇，果然没有打开，只有导热管工作，以前用windows多，一直没啥问题，linux下倒是死过几回，不过不像这回这么严重。</p>
<p>后来把cpu风扇转速调到最大，一切正常，开虚拟机也没问题，cpu温度稳定在40度。</p>
<p>刚又上网搜了搜，linux下有个功率检测工具，叫powertop，intel出的。</p>
<p>装上试了一下，主要就是cpu从idle状态被唤醒的次数，然后统计哪些程序占的最多。</p>
<p>1.开着电驴的时候,网卡驱动占的最多,其次是firefox的timer;</p>
<p>2.关掉电驴和firefox的话, fglrx占的最多, 这个是ati的显卡驱动.</p>
<p>总得来看, 问题应该还是出在linux下的驱动上面, 尽管性能和稳定性已经不错了, 但是电源管理方面似乎还差不少啊</p>
<p>PS:powertop的界面和我之前自己捣鼓的profiler很像, 一看就觉得特亲切, 哈哈</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=410</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google C++ 编程风格指南</title>
		<link>http://veryzhang.cn/?p=405</link>
		<comments>http://veryzhang.cn/?p=405#comments</comments>
		<pubDate>Wed, 05 Aug 2009 15:51:51 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=405</guid>
		<description><![CDATA[中文版项目在这里：

http://code.google.com/p/zh-google-styleguide/

英文版在这里：

<span class="readmore"><a href="http://veryzhang.cn/?p=405" title="Google C++ 编程风格指南">阅读全文——共1513字</a></span>]]></description>
			<content:encoded><![CDATA[<p>中文版项目在这里：</p>
<p><a href="http://code.google.com/p/zh-google-styleguide/" target="_blank">http://code.google.com/p/zh-google-styleguide/</a></p>
<p>英文版在这里：</p>
<p><a href="http://code.google.com/p/google-styleguide/" target="_blank">http://code.google.com/p/google-styleguide/</a></p>
<p>甚至还有emacs的专门的style：</p>
<p><a href="http://google-styleguide.googlecode.com/svn/trunk/google-c-style.el" target="_blank">http://google-styleguide.googlecode.com/svn/trunk/google-c-style.el</a></p>
<div>
<h2>译者前言       <a title="Permalink to this headline" href="http://yangyubo.com/google-cpp-styleguide/#id2" target="_blank"> </a></h2>
<p>Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. 但是如果代码贡献者的编程风格与 Google 的不一致, 会给代码阅读者和其他代码提交这造成不小的困扰. Google 因此发布了这份自己的编程风格, 使所有提交代码的人都能获知 Google 的编程风格.</p>
<dl>
<dt> 翻译初衷: </dt>
<dd>规则的作用就是避免混乱. 但规则本身一定要权威, 有说服力, 并且是理性的. 我们所见过的大部分        <a href="http://www.yeeyan.com/articles/tag/%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83" target="_blank"> <em> 编程规范 </em> </a> , 其内容或不够严谨, 或阐述过于简单, 或带有一定的武断性.</p>
<p>Google 保持其一贯的严谨精神, 5 万汉字的        <a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 涉及广泛, 论证严密. 我们翻译该系列指南的主因也正是其严谨性. 严谨意味着指南的价值不仅仅局限于它罗列出的规范, 更具参考意义的是它为了列出规范而做的谨慎权衡过程.</p>
<p><a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 不 仅列出你要怎么做, 还告诉你为什么要这么做, 哪些情况下可以不这么做, 以及如何权衡其利弊. 其他团队未必要完全遵照指南亦步亦趋, 如前面所说, 这份指南是 Google 根据自身实际情况打造的, 适用于其主导的开源项目. 其他团队可以参照该指南, 或从中汲取灵感, 建立适合自身实际情况的规范.</p>
<p>我们在翻译的过程中, 收获颇多. 希望本系列        <a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 中文版对你同样能有所帮助.</p>
</dd>
</dl>
<p>我们翻译时也是尽力保持严谨, 但水平所限, bug 在所难免. 有任何意见或建议, 可与我们取得联系.</p>
<p>中文版和英文版一样, 使用      <tt> <span> Artistic </span> <span> License/GPL </span> </tt> 开源许可.</p>
<dl>
<dt> 中文版修订历史: </dt>
<dd>
<ul>
<li>2009-06 3.133 : YuleFox 的 1.0 版已经相当完善, 但原版在近一年的时间里, 其规范也发生了一些变化.<br />
<blockquote><p>yospaly 与 YuleFox 一拍即合, 以项目的形式来延续中文版 :           <a href="http://zh-google-styleguide.googlecode.com/" target="_blank"> Google 开源项目风格指南 &#8211; 中文版项目 </a> .</p>
<p>主要变化是同步到 3.133 最新英文版本, 做部分勘误和改善可读性方面的修改, 并改进排版效果. yospaly 重新翻修, YuleFox 做后续评审.</p></blockquote>
</li>
<li>2008-07 1.0 : 出自          <a href="http://www.yulefox.com/20080710/translation-google-programming-style-01.html/" target="_blank"> YuleFox 的 Blog </a> , 很多地方摘录的也是该版本.</li>
</ul>
</dd>
</dl>
</div>
<h2>背景      <a title="Permalink to this headline" href="http://yangyubo.com/google-cpp-styleguide/#id4" target="_blank"> </a></h2>
<p><a href="http://www.yeeyan.com/articles/tag/C++" target="_blank"> <em> C++ </em> </a> ++ 是 Google 大部分开源项目的主要编程语言. 正如每个 C++ 程序员都知道的, C++ 有很多强大的特性, 但这种强大不可避免的导致它走向复杂，使代码更容易产生 bug, 难以阅读和维护.</p>
<p>本     <a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 的目的是通过详细阐述     <a href="http://www.yeeyan.com/articles/tag/C++" target="_blank"> <em> C++ </em> </a> ++ 注意事项来驾驭其复杂性. 这些规则在保证代码易于管理的同时, 高效使用 C++ 的语言特性.</p>
<p><em> 风格 </em> , 亦被称作可读性, 也就是指导 C++ 编程的约定. 使用术语 “风格” 有些用词不当, 因为这些习惯远不止源代码文件格式化这么简单.</p>
<p>使代码易于管理的方法之一是加强代码一致性. 让任何程序员都可以快速读懂你的代码这点非常重要. 保持统一编程风格并遵守约定意味着可以很容易根据 “模式匹配” 规则来推断各种标识符的含义. 创建通用, 必需的习惯用语和模式可以使代码更容易理解. 在一些情况下可能有充分的理由改变某些编程风格, 但我们还是应该遵循一致性原则，尽量不这么做.</p>
<p>本     <a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 的另一个观点是     <a href="http://www.yeeyan.com/articles/tag/C++" target="_blank"> <em> C++ </em> </a> ++ 特性的臃肿. C++ 是一门包含大量高级特性的庞大语言. 某些情况下, 我们会限制甚至禁止使用某些特性. 这么做是为了保持代码清爽, 避免这些特性可能导致的各种问题. 指南中列举了这类特性, 并解释为什么这些特性被限制使用.</p>
<p>Google 主导的开源项目均符合本     <a href="http://www.yeeyan.com/articles/tag/%E6%8C%87%E5%8D%97" target="_blank"> <em> 指南 </em> </a> 的规定.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=405</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ARM编译器性能对比&#8211;[ARM compiler shoot-out]&#8211;[一]</title>
		<link>http://veryzhang.cn/?p=402</link>
		<comments>http://veryzhang.cn/?p=402#comments</comments>
		<pubDate>Wed, 05 Aug 2009 13:35:50 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=402</guid>
		<description><![CDATA[转自这里：http://hardwarebug.org/2009/08/05/arm-compiler-shoot-out/

RVCT作为商业工具果然名不虚传，完胜所有GCC编译器。

FSF的GCC性能最差没什么奇怪的，但是4.4.1比4.3.3慢就很难理解了,不知道作者有没有测过GCC3和GCC4之间的差距.

<span class="readmore"><a href="http://veryzhang.cn/?p=402" title="ARM编译器性能对比&#8211;[ARM compiler shoot-out]&#8211;[一]">阅读全文——共2467字</a></span>]]></description>
			<content:encoded><![CDATA[<p>转自这里：<a href="http://hardwarebug.org/2009/08/05/arm-compiler-shoot-out/" target="_blank">http://hardwarebug.org/2009/08/05/arm-compiler-shoot-out/</a></p>
<p>RVCT作为商业工具果然名不虚传，完胜所有GCC编译器。</p>
<p>FSF的GCC性能最差没什么奇怪的，但是4.4.1比4.3.3慢就很难理解了,不知道作者有没有测过GCC3和GCC4之间的差距.</p>
<p>A proper comparison of different compilers targeting ARM is long overdue, so I decided to do my part. I compiled <a href="http://ffmpeg.org/">FFmpeg</a> using a selection of compilers, and measured the speed of the result when decoding various media samples. Since we are testing compilers, I disabled all hand-written assembler. The tests were run on a <a href="http://beagleboard.org/">Beagle board</a> clocked at 600 MHz.</p>
<p>These are the compilers I deemed worthy to participate in the test and the optimisation flags I used with each:</p>
<ul>
<li><strong>GCC 4.3.3</strong>, -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a8 -std=c99 -fomit-frame-pointer -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize</li>
<li><strong>GCC 4.4.1</strong>, -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a8 -std=c99 -fomit-frame-pointer -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize</li>
<li><strong>CodeSourcery GCC 2007q3</strong> (based on 4.2.1), -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a8 -std=c99 -fomit-frame-pointer -O3 -fno-math-errno -fno-tree-vectorize</li>
<li><strong>CodeSourcery GCC 2009q1</strong> (based on 4.3.3), -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a8 -std=c99 -fomit-frame-pointer -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize</li>
<li><strong>ARM RVCT 4.0 Build 591</strong>, -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a8 -std=c99 -fomit-frame-pointer -O3 -fno-math-errno -fno-signed-zeros</li>
</ul>
<p>I would have also included the ARM compiler from Texas Instruments, had it been able to compile FFmpeg.</p>
<p>With sample files chosen to exercise various types of code, the result of the test is, sadly, no surprise. The following table lists the speed of the different builds relative to the CodeSourcery 2007q3 build.</p>
<table border="0" width="100%">
<col></col>
<col></col>
<col></col>
<col width="10%"></col>
<col width="10%"></col>
<col width="10%"></col>
<col width="10%"></col>
<thead>
<tr style="text-align: left;">
<th>Sample name</th>
<th>Codec</th>
<th>Code type</th>
<th>2009q1</th>
<th>4.3.3</th>
<th>4.4.1</th>
<th>RVCT</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="http://samples.ffmpeg.org/V-codecs/h264/cathedral-beta2-400extra-crop-avc.mp4">cathedral</a></td>
<td>H.264 CABAC</td>
<td>integer</td>
<td>0.97</td>
<td>1.02</td>
<td>1.09</td>
<td>0.93</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/V-codecs/h264/NeroAVC.mp4">NeroAVC</a></td>
<td>H.264 CABAC</td>
<td>integer</td>
<td>0.98</td>
<td>1.02</td>
<td>1.12</td>
<td>0.95</td>
</tr>
<tr>
<td><a href="http://movies.apple.com/movies/paramount/indiana_jones_4/indiana_jones_4-tlr3_h640w.mov">indiana_jones_4</a></td>
<td>H.264 CAVLC</td>
<td>integer</td>
<td>0.97</td>
<td>1.02</td>
<td>1.09</td>
<td>0.89</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/MPEG-4/NeroRecodeSample-MP4/NeroRecodeSample.mp4">NeroRecodeSample</a></td>
<td>MPEG-4 ASP</td>
<td>integer</td>
<td>0.96</td>
<td>1.03</td>
<td>1.27</td>
<td>0.96</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/A-codecs/MP3/Silent_Light.mp3">Silent_Light</a></td>
<td>MP3</td>
<td>64-bit integer</td>
<td>0.89</td>
<td>0.88</td>
<td>0.97</td>
<td>0.44</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/flac/When%20I%20Grow%20Up.flac">When_I_Grow_Up</a></td>
<td>FLAC</td>
<td>integer</td>
<td>0.98</td>
<td>0.98</td>
<td>0.93</td>
<td>0.86</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/A-codecs/vorbis/Lumme-Badloop.ogg">Lumme-Badloop</a></td>
<td>Vorbis</td>
<td>float</td>
<td>1.03</td>
<td>1.03</td>
<td>1.02</td>
<td>0.97</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/A-codecs/AC3/Canyon-5.1-48khz-448kbit.ac3">Canyon</a></td>
<td>AC-3</td>
<td>float</td>
<td>1.02</td>
<td>1.02</td>
<td>0.99</td>
<td>0.90</td>
</tr>
<tr>
<td><a href="http://samples.ffmpeg.org/A-codecs/DTS/lotr_5.1_768.dts">lotr</a></td>
<td>DTS</td>
<td>float</td>
<td>1.02</td>
<td>1.02</td>
<td>1.00</td>
<td>1.03</td>
</tr>
</tbody>
</table>
<p>Looking at this table, I make these observations:</p>
<ul>
<li>CodeSourcery 2009q1 produces faster integer code, but slower floating-point code, than 2007q3.</li>
<li>GCC 4.4.1 produces much slower code than 4.3.3 in several cases, and is never significantly better.</li>
<li>CodeSourcery GCC generally beats FSF GCC.</li>
<li>ARM RVCT readily beats every GCC version. The MP3 figure is not a typo.</li>
</ul>
<p>My recommendation for a free compiler is CodeSourcery 2009q1 unless your code makes heavy use of floating-point, in which case 2007q3 may give better results. If you prefer, for whatever reason, official GNU releases, 4.3.3 should be the version of choice. Avoid GCC 4.4.1; it is far too unpredictable.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=402</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://samples.ffmpeg.org/V-codecs/h264/cathedral-beta2-400extra-crop-avc.mp4" length="24154488" type="video/mp4" />
<enclosure url="http://samples.ffmpeg.org/V-codecs/h264/NeroAVC.mp4" length="6766583" type="video/mp4" />
<enclosure url="http://movies.apple.com/movies/paramount/indiana_jones_4/indiana_jones_4-tlr3_h640w.mov" length="16215526" type="video/quicktime" />
<enclosure url="http://samples.ffmpeg.org/MPEG-4/NeroRecodeSample-MP4/NeroRecodeSample.mp4" length="31027653" type="video/mp4" />
<enclosure url="http://samples.ffmpeg.org/A-codecs/MP3/Silent_Light.mp3" length="4206720" type="audio/mpeg" />
<enclosure url="http://samples.ffmpeg.org/flac/When%20I%20Grow%20Up.flac" length="23843137" type="audio/flac" />
<enclosure url="http://samples.ffmpeg.org/A-codecs/vorbis/Lumme-Badloop.ogg" length="5856908" type="audio/ogg" />
		</item>
		<item>
		<title>Emacs新维护者访谈</title>
		<link>http://veryzhang.cn/?p=397</link>
		<comments>http://veryzhang.cn/?p=397#comments</comments>
		<pubDate>Tue, 04 Aug 2009 04:47:42 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=397</guid>
		<description><![CDATA[Emacs 23终于在7月29号发布了,记得大三的时候就在用emacs23的alpha版,为了能在linux下用上反锯齿的字体,每次都要折腾半天,真是情何以堪&#8230;.

blogspot上不去, 下面是从水木转过来的, 总的来说就是, 大学老师有时间啊, 哈哈

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

<span class="readmore"><a href="http://veryzhang.cn/?p=397" title="Emacs新维护者访谈">阅读全文——共8228字</a></span>]]></description>
			<content:encoded><![CDATA[<p>Emacs 23终于在7月29号发布了,记得大三的时候就在用emacs23的alpha版,为了能在linux下用上反锯齿的字体,每次都要折腾半天,真是情何以堪&#8230;.</p>
<p>blogspot上不去, 下面是从水木转过来的, 总的来说就是, 大学老师有时间啊, 哈哈<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
http://emacs-fu.blogspot.com/2009/08/interview-with-chong-yidong-and-stefan.html</p>
<p>Earlier this year, Chong Yidong and Stefan Monnier took over Emacs maintainership from Richard Stallman, and they successfully completed the Emacs 23.1 release. I asked them a couple of questions about the process, Emacs-development and some of the plans for the future.</p>
<p>I&#8217;d like to thank Chong (CYD) and Stefan (SM) to take the time to answer my (djcb) questions and even more so for doing an excellent job bringing us Emacs 23!</p>
<p>djcb: First of all, could you tell us a bit about yourself? For example, what you do when not hacking on Emacs?</p>
<p>CYD: I&#8217;m a postdoc in theoretical physics, specializing in photonic crystals and other optical phenomena.</p>
<p>SM: I&#8217;m a professor at the University of Montréal, teaching and researching theory of computer languages. More specifically, I design new type systems and try and abuse existing type systems for &#8220;type based formal methods&#8221; purposes.</p>
<p>djcb: Earlier this year, the two of you took over the maintainership of Emacs from Richard Stallman. How did you get involved in hacking on Emacs? How has the transition gone?</p>
<p>CYD: My first involvement in Emacs-related development was around 2004 or 2005—very recent by Emacs hacker standards—when I found myself with some free time on my hands after college. At that time, I wrote wikipedia-mode, a major mode for editing Wikipedia articles, plus some word-wrapping code that eventually became longlines-mode, and patches to emacs-devel fixing a few minor bugs. My level of involvement gradually grew, until eventually I was helping Richard to roll the pretest tarballs for the Emacs 22 release.</p>
<p>Because I was quite active in the Emacs 22 release process, I&#8217;ve been pretty comfortable with my role in Emacs 23. It helps, of course, that many parts of Emacs have their own dedicated and experienced maintainers, e.g. the major Lisp packages such as CC-mode, Gnus, and Org-mode.</p>
<p>SM: I started hacking on Emacs a fairly long time ago when I was waiting to start my PhD, but it only got more serious during my PhD when I decided that PCL-CVS was a neat idea but unusable as it stood (for lack of maintainership). It all went downhill from there.</p>
<p>The transition to maintainership happened very smoothly. I had already considered maintaining Emacs when Gerd [ Gerd Moellmann ] left (i.e. when 21.1 was released; at which point Richard ended up regaining maintainership for lack of any other volunteer), but it was a pretty busy time for me, so I decided not to. This time Richard kept a very active role, which coupled with the help of Chong made it very pleasant.</p>
<p>There&#8217;s a fair bit of pressure, of course, because it&#8217;s a very old package, so people have a lot invested in it, making some changes terribly delicate. As a maintainer, I did get to steer the direction of Emacs development, tho mostly by my own contributions and by imposing some contentious new defaults. The role of a maintainer as I see it is mostly to make sure the package keeps its integrity.</p>
<p>But I have to say, that while Chong started maybe a bit more of a &#8220;rookie maintainer&#8221; than I, he quickly took over and he deserves much of the credit for 23.1, while I was too busy with my work to do much good.</p>
<p>djcb: Talking about Emacs development: there are of course many people involved. Can you give a estimate of how many?</p>
<p>CYD: There are about 120 people who have commit access to the code repository; of these, I think around 20 contribute regularly. This does not count the packages that are maintained separately from Emacs.</p>
<p>Additionally, we do of course receive a steady stream of small patches from various users.</p>
<p>Emacs 23 has just been released (on July 29 2009), congratulations, a great accomplishment indeed! From your perspective, what are the most important improvements in Emacs 23 for end-users? And what about the internals? Are there any big changes in the way Emacs operates?</p>
<p>CYD: I&#8217;d describe the Emacs 23 release cycle as dominated by internals changes, in contrast with Emacs 22, where most of the major improvements occurred at the Lisp level. There are two fundamental changes. First, the internal character representation is now Unicode-based, which simplifies various aspects of multilingual editing. Second, the font engine has been revamped, and, among other things, we now support anti-aliasing on X. Both these changes are due largely to Kenichi Handa, who deserves a huge amount of credit for patiently developing the code a period of years.</p>
<p>One other major internals change is a restructuring of the terminal interaction code, by Károly L?rentey, which allows a single Emacs process to display on X and text terminals simultaneously. Building on this &#8220;multi-tty&#8221; code, Dan Nicolescu implemented a small but clever hack, allowing Emacs to run as a daemon serving emacsclient connections.</p>
<p>There are several Lisp-level changes, large and small. For instance, Stefan revamped the minibuffer completion code, which is now more sophisticated about generating completions. And there are, as usual, new modes and packages: Doc-view mode, Ruby mode, nXml mode, etc.</p>
<p>SM: Better support for Unicode, and better support for fonts, multi-tty support, plus lots of new modes as always. Of course, I&#8217;m very happy with my new completion code, which makes partial-completion-mode obsolete (and enabled by default).</p>
<p>The new support for Unicode and for fonts required significant changes. Big thanks to Kenichi Handa for most of that.</p>
<p>djcb: Are there any features that you would have liked to add, but that were somehow not yet ready?</p>
<p>CYD: One feature that I&#8217;d have liked to include into 23.1 is CEDET, a set of packages by Eric Ludlum (the author of Speedbar), which turns Emacs into an IDE. There was no time to merge it for 23.1, but hopefully it will be included in 23.2.</p>
<p>SM: Several packages were planned for inclusion, but didn&#8217;t make it. Support for GNUstep was planned (and is actually in there) but doesn&#8217;t work. Also I hoped the new VC code would be developed further, but it sadly stayed at the stage where it mostly provides the same features as the old one (with all kinds of improvements in the way it supports them, tho).</p>
<p>djcb: There is always a bit of tension in Emacs between keeping things as they are, and changing things to be more like other programs &#8211; for example when thinking about key bindings and various defaults. What is your take on this? Should Emacs try to accommodate new users, or instead try to keep things as they are?</p>
<p>CYD: My impression is that I&#8217;m a little more conservative than Stefan with regards to changes, though I&#8217;m not sure what he thinks. That said, we seem to arrive at the same conclusions with surprising frequency.</p>
<p>SM: Emacs standard key bindings (like C-x and C-c prefixes) clash badly with &#8220;standard&#8221; key bindings of other apps, so I don&#8217;t think there&#8217;s much hope to make Emacs like other applications. But yes, I generally believe that, all things being equal, it&#8217;s better to be like others than to be different in this respect. But since changing bindings (or behaviors) is disruptive, I only consider it worthwhile if I believe the new default is really superior (not just for new users).</p>
<p>djcb: For example, in Emacs 23, transient-mark-mode is the default, but delete-selection-mode is not. How do you decide such things?</p>
<p>CYD: Typically, we try not to make flashy changes. The transient mark mode change is the exception that proves the rule: transient-mark-mode is so useful, and is so widely used (even Richard uses it), that it doesn&#8217;t make sense to leave it off by default. But the rule of thumb is to improve Emacs on Emacs&#8217; own terms; for instance, CUA mode will not become the default anytime soon, I think.</p>
<p>SM: transient-mark-mode is an enabler: it allows some commands to behave differently depending on the activation state of the region. So it&#8217;s a clear improvement. delete-selection-mode is not as important in this regard. We may see something along the lines of delete-selection-mode at some point, tho probably something more minor that only caters to the few cases where delete-selection-mode is more than just a way to avoid hitting C-w.</p>
<p>djcb: How do you see the competition with other text editors? Do you look for ideas elsewhere? Is there any other editor you would be using if Emacs did not exist?</p>
<p>CYD: I&#8217;m afraid I don&#8217;t pay much attention to other editors.</p>
<p>SM: I used Zmacs, XEmacs, and Epoch at some point. That&#8217;s about it. I do like structured editors, and I think Emacs should and will move in this direction (with more parsing going on).</p>
<p>djcb: It&#8217;s a bit premature of course, but it&#8217;s always interesting to speculate a bit about the future. Do you have any particular post-Emacs-23 plans? Obviously, this all depends on what people come up with, but are there any directions you would like Emacs to go?</p>
<p>CYD: The present plan is for Emacs 23.2 to contain a small number of new features, in addition to bugfixes. As mentioned above, I&#8217;d like to try to include CEDET. In general, I hope to move to shorter, more disciplined release cycles. Emacs 23 was a good step in that direction, as it was shorter than the previous cycle.</p>
<p>SM: My main goal for Emacs-23 was to shorten the release cycle. Hopefully, the quality has not been reduced accordingly. For 23.N there are several improvements planned (or even done), mostly about inclusion of packages like js2-mode and CEDET. In the longer term, the main goals for me are the integration of the lexical-scoped branch, the support for bidirectional display, and adding more parsing technology (basically replace syntax-tables with something like lex &amp; yacc, maybe).</p>
<p>Thanks a lot Stefan and Chong!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=397</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>体验哲思社区&#8212;zeuux.com</title>
		<link>http://veryzhang.cn/?p=390</link>
		<comments>http://veryzhang.cn/?p=390#comments</comments>
		<pubDate>Fri, 31 Jul 2009 14:23:25 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=390</guid>
		<description><![CDATA[在toplanguage上看到有人介绍, 于是求了一个邀请, 注册了进去.



社区的模式似乎是跟校内很像的, 或许这就是典型的SNS应用?我对这些名词不太懂, 只是知道类似的社区会让你和一群朋友之间建立非常好的分享机制, 用的时间越长就越依赖他了.

<span class="readmore"><a href="http://veryzhang.cn/?p=390" title="体验哲思社区&#8212;zeuux.com">阅读全文——共537字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在toplanguage上看到有人介绍, 于是求了一个邀请, 注册了进去.</p>
<ul>
<li>社区的模式似乎是跟校内很像的, 或许这就是典型的SNS应用?我对这些名词不太懂, 只是知道类似的社区会让你和一群朋友之间建立非常好的分享机制, 用的时间越长就越依赖他了.</li>
<li>界面非常新颖, 类似于桌面的概念, 还有很多选项可以设置, 好友列表里面也都是技术类的文章, 至少所有人的关注点都是比较统一的, 应该会提高交流和获取知识的效率.</li>
<li>似乎是新成立的缘故, 人挺多, 内容很少, 好像大部分信息都是管理员产生的, 希望能有个更好的模式来引导新用户, 有更多原创的内容, 否则的话人气恐怕很难提升.</li>
<li>我找了半天, 没找到什么地方能把我的博客链接帖上去, 莫非这是一个完全闭源的社区?要知道我不可能在这个博客之外的地方写文章, 而分享并不意味着一定要占有, 你可以只是一个传播者, 只要总有人在此驻足就好了.</li>
<li>最后附一张图片, 继续观察并体验一下:)</li>
</ul>
<div id="attachment_391" class="wp-caption alignnone" style="width: 160px"><a href="http://veryzhang.cn/wp-content/uploads/2009/07/zeuux.JPG"><img class="size-thumbnail wp-image-391  " title="zeuux" src="http://veryzhang.cn/wp-content/uploads/2009/07/zeuux-150x150.jpg" alt="哲思社区" width="150" height="150" /></a><p class="wp-caption-text">哲思社区</p></div>
<hr />
PS:刚在里面转了一圈下来, 发现一个很有趣的现象, 几乎所有上传了头像的朋友, 都是清一色的严肃的神情, 不多的头发, 大而亮的脑门.<br />
一声长叹&#8230;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=390</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>读了一天libcpp的code</title>
		<link>http://veryzhang.cn/?p=375</link>
		<comments>http://veryzhang.cn/?p=375#comments</comments>
		<pubDate>Tue, 28 Jul 2009 15:00:30 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=375</guid>
		<description><![CDATA[如果你大体上清楚实现这个程序需要考虑哪些问题，那么读它的代码基本就是个体力活，只是熟练程度不同而已；

读过cscope,readelf和gcc的front-end之后,再读libcpp的代码就轻松了许多,但是cpp internals给的信息量太少,看过之后只是了解作者考虑过的一些问题,对libcpp的整体工作流程还是有些茫然;

老早之前Ian就放言要用C++重写GCC，应该是重写前端吧，不过LLVM的clang已经出来了，用C++写的，虽然还没看过，但是从demo上看，应该比GCC更有前途；

<span class="readmore"><a href="http://veryzhang.cn/?p=375" title="读了一天libcpp的code">阅读全文——共1044字</a></span>]]></description>
			<content:encoded><![CDATA[<ul>
<li>如果你大体上清楚实现这个程序需要考虑哪些问题，那么读它的代码基本就是个体力活，只是熟练程度不同而已；</li>
<li>读过cscope,readelf和gcc的front-end之后,再读libcpp的代码就轻松了许多,但是cpp internals给的信息量太少,看过之后只是了解作者考虑过的一些问题,对libcpp的整体工作流程还是有些茫然;</li>
<li>老早之前<a href="http://lwn.net/Articles/286539/" target="_blank">Ian就放言要用C++重写GCC</a>，应该是重写前端吧，不过LLVM的clang已经出来了，用C++写的，虽然还没看过，但是从demo上看，应该比GCC更有前途；</li>
<li>不管是GCC的前端还是CPP，都有大量的对象管理工作，比如token，linemap，hashtable，symbol table之类的，于是各种链表、数组、全局变量随处可见，阅读起来真的是很头疼，而且连作者自己也在注释里说，很多命名规范只是部分遵守的，google of summer上还有一堆重写某个模块的任务在挂着；</li>
<li>不过至少现在算是比较熟练了，估计距离搞定libcpp已经不远，这两天也有了一点收获；</li>
<li>libcpp是作为一个单独的库提供的，在gcc里面它主要通过callback与frontend交互；</li>
<li>libcpp的目录下面有一个makedepend的源码，可以参考它来了解libcpp的用法，尤其是创建和销毁，注册callback，以及获取警告/错误信息，遍历所有token的hashtable等等最常用的功能；</li>
<li>尽管libcpp是一个独立的库，但是它还是依赖gcc的libiberty，后者提供了类似xmalloc/xfree之类的函数；</li>
<li>libcpp的lexer是基于line的，每次读一个line的数据到buffer中，称为一个token run，后续的lex操作都是在这个buffer中完成；</li>
<li>macro expand基于一个内部的上下文堆栈(context stack)来实现，cpp internals里面有所涉及，不过还没怎么看懂；</li>
<li>pragma和警告/错误信息处理是callback的典型应用，因为这些处理是cpp所不关心的；</li>
<li>后面还有几处硬骨头需要搞定：lex处理token时的内存分配情况，还有hashtable相关的内存分配和接口；</li>
<li>我觉得C最麻烦的地方在于每个人都会封装自己的数据结构和接口，同样是一个ring buffer，或者hash表，符号表，换个人写的code就有很大的差别，你就得对照的代码逐个的去分析，很多时候不得不借助gdb才能理解作者的意图，总是搞的你一点脾气也没有&#8230;&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=375</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>熬夜是万恶之源</title>
		<link>http://veryzhang.cn/?p=373</link>
		<comments>http://veryzhang.cn/?p=373#comments</comments>
		<pubDate>Tue, 28 Jul 2009 12:06:21 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=373</guid>
		<description><![CDATA[本来想趁换工作的间隙在家好好休息一下，结果每天都熬到一两点，早上也起不来，虽然坚持健身，但是总是感觉很累。

不能再熬夜了，要早睡。

]]></description>
			<content:encoded><![CDATA[<p>本来想趁换工作的间隙在家好好休息一下，结果每天都熬到一两点，早上也起不来，虽然坚持健身，但是总是感觉很累。<br />
不能再熬夜了，要早睡。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=373</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>入职前宏伟的读书计划</title>
		<link>http://veryzhang.cn/?p=344</link>
		<comments>http://veryzhang.cn/?p=344#comments</comments>
		<pubDate>Sat, 25 Jul 2009 15:30:06 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=344</guid>
		<description><![CDATA[不是第一次订类似的计划了, 不过这一次有相当的希望能完成目标, 一来真的很闲, 二来每天健身精力极为充沛, 三是新的工作需要立刻充电.

不管怎么说, 银子都花出去了, 至少得全部翻一遍:)

C++:

<span class="readmore"><a href="http://veryzhang.cn/?p=344" title="入职前宏伟的读书计划">阅读全文——共820字</a></span>]]></description>
			<content:encoded><![CDATA[<p>不是第一次订类似的计划了, 不过这一次有相当的希望能完成目标, 一来真的很闲, 二来每天健身精力极为充沛, 三是新的工作需要立刻充电.<br />
不管怎么说, 银子都花出去了, 至少得全部翻一遍:)</p>
<h5>C++:</h5>
<ul>
<li><a href="http://www.douban.com/subject/1143879/">Accelerated C++中文版</a></li>
<li><a href="http://www.douban.com/subject/1767741/">C++ Primer中文版</a></li>
<li><a href="http://www.douban.com/subject/2005943/">C++ Primer习题解答</a></li>
</ul>
<h5>VC++:</h5>
<ul>
<li><a href="http://www.douban.com/subject/3570920/">Visual C++音频/视频处理技术及工程实践</a></li>
<li><a href="http://www.douban.com/subject/3779585/">把脉VC++</a></li>
</ul>
<h5>Windows CE:</h5>
<ul>
<li><a href="http://www.douban.com/subject/3606827/">Windows CE6.0开发者参考（原书第4版）</a></li>
</ul>
<h5>程序设计:</h5>
<ul>
<li><a href="http://www.douban.com/subject/3652388/">程序员的自我修养——链接、装载与库</a></li>
</ul>
<h5>认知心理学与逻辑学与数学:</h5>
<ul>
<li><a href="http://www.douban.com/subject/2193674/">Mind Performance Hacks</a></li>
<li><a href="http://www.douban.com/subject/2193673/">Mind Hacks</a></li>
<li><a href="http://www.douban.com/subject/1193621/">决策与判断</a></li>
<li><a href="http://www.douban.com/subject/1874488/">别做正常的傻瓜</a></li>
<li><a href="http://www.douban.com/subject/3324610/">摇摆</a></li>
<li><a href="http://www.douban.com/subject/3761236/">启动大脑</a></li>
<li><a href="http://www.douban.com/subject/2124114/">怎样解题:数学思维的新方法</a></li>
</ul>
<h5>其他:</h5>
<ul>
<li><a href="http://www.douban.com/subject/1442306/">教你练肌肉</a></li>
</ul>
<p>======================================================================================================</p>
<p>一点说明:</p>
<ul>
<li>Windows CE和DirectShow是最有实际用处的, 不过以后会有充足的时间去学习, 所以暂且了解一下即可.</li>
<li>C++一直是软肋, 在学校里学过之后就再没有用过, 虽然在嵌入式领域C还是主流, 但是越来越局限于驱动和操作系统内部, 再过几年只会C和汇编的嵌入式程序员怕是要失去很多机会了, 所以一定要掌握一种高级语言, 对我来讲C++最合适了,  而且得学的细一点, 把基础打牢.</li>
<li>自我修养那本书老早就看<a href="http://blog.codingnow.com/2009/06/link_loader.html" target="_blank">云风推荐</a>过, 一直没有时间买来读, 不过前几个月花了很多时间捣鼓自己的debugger和profiler, 对链接和装载也有了更具体的认识, 这次一定要趁热打铁, 了解的更深入一些.</li>
<li>心理学和逻辑学的书很久很久之前就看<a href="http://mindhacks.cn/2008/12/18/how-to-think-straight/" target="_blank">刘未鹏介绍过</a>, 非常神往, 但是被工作中的琐事所累, 一直未有涉猎, 甚至未鹏的那几篇文章都没有细细的读过, 这次一定要弥补回来:)</li>
<li>顺便买了波利亚的经典之作&#8211;怎样解题, 估计用不到具体的工作中, 希望能学到些更通用的解决问题的方法吧.</li>
</ul>
<p>加油!!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=344</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>笑话一则</title>
		<link>http://veryzhang.cn/?p=342</link>
		<comments>http://veryzhang.cn/?p=342#comments</comments>
		<pubDate>Sat, 25 Jul 2009 03:45:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=342</guid>
		<description><![CDATA[实在太搞了，忍不住贴上来：



湘北的流川枫在神奈川的名声很响，一半是因为篮球打的好，另一半是因为该人，实在是太酷了。此君对所有人一视同仁不假辞色，不要说笑容难得奉送一个，

<span class="readmore"><a href="http://veryzhang.cn/?p=342" title="笑话一则">阅读全文——共1679字</a></span>]]></description>
			<content:encoded><![CDATA[<p>实在太搞了，忍不住贴上来：<br />
<HR><br />
湘北的流川枫在神奈川的名声很响，一半是因为篮球打的好，另一半是因为该人，实在是太酷了。此君对所有人一视同仁不假辞色，不要说笑容难得奉送一个，<br />
　　　　　　便是说起话来也是能用两个字就坚决不用三个字。<br />
　　　　　　<br />
　　　　　　某日在英语课上新来的老师误打误撞要流川同学起立朗读课文一篇，流川同学一看课文，怕不有上百字之多，这如何使得，便摇了摇头：“不会。”年轻老师想起念过的教育心理学，亲切鼓励：“没关系，大胆地念。”流川不耐烦起来，据实以告，“太长。”老师猝不及防愣在当场，想发作又恐失去风度，耐下心来说，“那你念一段好了，剩下的让后面的同学念。”流川拿起书，念了一句：“Lesson<br />
　　　　　　Two。”念罢朝老师点点头，坐下了。教室里盲目崇拜的小女生倒下一片，这怎一个酷字了得？<br />
　　　　　　<br />
　　　　　　一来二去，男生们不免怨声载道，这流川枫无节制地耍酷，搞得本校外校神奈川各中学的小女生们人心惶惶、神不守舍，视其他男生若无物，长此以往哪还有大家的活路？<br />
　　　　　　<br />
　　　　　　陵南的仙道乃是神奈川另一大帅哥，不过采取和流川截然相反的风格，亲切开朗，助人为乐，周围的人如沐春风。<br />
　　　　　　<br />
　　　　　　一日和同学课余打混，又听得兄弟们纷纷抱怨流川，仙道仔细听听，发现在流川众多让人吐血的行为里，别的不提，最可恨的便是这惜字如金的作风。<br />
　　　　　　仙道颇不以为然：“这有什么？他是凑巧没碰上需要多多说话的机会而已。”他话音刚落，立刻有好事的人设了赌局，打赌看仙道能不能让川变得非常饶舌。很没有面子的，仙道赢的赔率是一赔十。仙道微笑：“原来大家对我这么没信心。”有几个意志薄弱的家伙在仙道柔和的压力下几乎将钱压在仙道赢那边，但一念及流川那毫无表情的面容，犹豫再三还是压在了仙道输上。仙道拂袖而去。<br />
　　　　<br />
　　　　　　放学的时候，流川照例来找仙道打球，冰冷冷地说，“一对一。”仙道亲切地说，“我正有此意。”然后拉流川去打了一晚台球，将流川赢了个落花流水。<br />
　　　　　　<br />
　　　　　　第二天放学的时候，流川照例来找仙道打球，冰冷冷地说：“一对一，篮球。”<br />
　　　　　　仙道非常亲切地说：“我正有此意。”然后拉流川去打了一晚电脑篮球游戏，将流川赢了个落花流水。<br />
　　　　　　<br />
　　　　　　第三天放学的时候，流川照例来找仙道打球，冰冷冷地说：“一对一，篮球，在场地上。”仙道笑眯眯地非常亲切地说，“我正有此意。”<br />
　　　　　　<br />
　　　　　　然后拉流川去借爱知县爱知中学的篮球场打球，结果路途遥远只能坐长途汽车，到了爱知天已经全黑了，只好坐末班车回来。不过好在一路的风景还不错，流川也睡得很香。<br />
　　　　　　<br />
　　　　　　第四天放学的时候，流川照例来找仙道打球，冰冷冷地说：“一对一，篮球，场地上，在你家旁边的小公园。”仙道开心得很：“和我想到一块去了。”<br />
　　　　　　然后坐着流川的自行车一同走，途中去了超市（买晚饭便当）、海边（吃晚饭便当）以及陵南(仙道后来想起来忘了东西在学校里），等流川骑着自行车将仙道带到那里，流川已经累得快动不了了，仙道又将流川赢了个落花流水。<br />
　　　　　　<br />
　　　　　　 第五天，……<br />
　　　　　　<br />
　　　　　　 第六天，……<br />
　　　　　　<br />
　　　　　　 ……<br />
　　　　　　<br />
　　　　　　 ……<br />
　　　　<br />
　　　　<br />
　　　　　　这一天放学的时候，流川照例来找仙道打球，说：“仙道，我们去打篮球吧，我今天来的路上看见一个小球场很好，也没什么人，只有四五个人在打球。我问了他们，他们顶多打到6点，我们可以接在他们后面用。他们说那个球场晚上的灯很亮，打到10点没问题。你现在能走了吗？所有要带回家的东西都拿了吗？明天要交的作业都做了吗？你仔细想好了，别现在以为都做了，待会又想起来没做。你现在想起来，还来得及和同学借个作业抄抄，回头等回了家你再想起来，到哪里找同学去，人家也回了家了。你今天晚上要吃什么？我今天不要吃太辣的，也不要吃太咸的，最好也不太甜。今晚海边是不能去了，<br />
　　　　　　我听了天气预报，风有七级……，……，……”</p>
<p>说明——人都是被逼出来的，流川枫也可以变唐僧。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=342</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>难得清闲</title>
		<link>http://veryzhang.cn/?p=335</link>
		<comments>http://veryzhang.cn/?p=335#comments</comments>
		<pubDate>Sun, 19 Jul 2009 11:29:47 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=335</guid>
		<description><![CDATA[前一阵子准备换工作,折腾了整整两周,好在一切顺利,如今只剩下一些琐事,大局已定了.

于是前几天去办了张健身卡,慢跑加游泳,趁这段时间要把身体练好,新的工作可是对体力和智力的双重考验,哈哈.

昨天又买了冰箱和微波炉,生活质量顿时提升不少.

<span class="readmore"><a href="http://veryzhang.cn/?p=335" title="难得清闲">阅读全文——共615字</a></span>]]></description>
			<content:encoded><![CDATA[<p>前一阵子准备换工作,折腾了整整两周,好在一切顺利,如今只剩下一些琐事,大局已定了.</p>
<p>于是前几天去办了张健身卡,慢跑加游泳,趁这段时间要把身体练好,新的工作可是对体力和智力的双重考验,哈哈.</p>
<p>昨天又买了冰箱和微波炉,生活质量顿时提升不少.</p>
<p>今天去西单,买了一堆心理学的书,老早就看到刘未鹏推荐关于认知心理学,逻辑方面的经典书籍,很想学习一把,可是直到今天才开始行动.</p>
<p>最近投简历和面试的过程中,再次感受到很多技术之外的事情,就是你怎么描述你自己,以及你做的东西,这个细节对找工作来讲有相当大的影响,因为短时间内对方很难对你有全面的了解,大部分情况下是通过书面和口头的交流来互相了解的,&#8221;认知&#8221;在这个环节中就显得非常重要.</p>
<p>举个例子说,对方问你为何辞职,大家都知道不要抱怨现在的老板和公司或者同事,最好回答说想寻求更好的发展空间,其实寻求更好的空间是实话,但是你不能排除有多挣点钱的意愿在里面,或者真的是受不了原来的公司或者同事了,但是讲出来总是不好.</p>
<p>所以说,直接问这个问题其实就没有意义,因为你得不到真实的答案.</p>
<p>或许这里就能看出HR的技术含量所在,真正牛叉的老板或者HR应该能用别的方式让你没有察觉的透露出真实的原因和企图,从而帮助自己做出正确的判断.</p>
<p>每次面试回来,我都会想起刘慈欣的《三体II》,想起那个直接用脑电波交流的外星球,进而感慨人性的真真假假,或许面对一个对你有所求的人,只有通过逻辑和推理才有可能得出他真实的企图,实在太费劲了.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=335</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>通过调节AMM降低硬盘噪音</title>
		<link>http://veryzhang.cn/?p=331</link>
		<comments>http://veryzhang.cn/?p=331#comments</comments>
		<pubDate>Wed, 15 Jul 2009 14:59:57 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=331</guid>
		<description><![CDATA[元旦时候装的电脑,硬盘超响,经常搞得我提心吊胆.

后来上网一查,发现调节AMM很有作用,具体解释见这里:

http://baike.baidu.com/view/1629383.htm

<span class="readmore"><a href="http://veryzhang.cn/?p=331" title="通过调节AMM降低硬盘噪音">阅读全文——共160字</a></span>]]></description>
			<content:encoded><![CDATA[<p>元旦时候装的电脑,硬盘超响,经常搞得我提心吊胆.</p>
<p>后来上网一查,发现调节AMM很有作用,具体解释见这里:</p>
<p><a href="http://baike.baidu.com/view/1629383.htm" target="_blank">http://baike.baidu.com/view/1629383.htm</a></p>
<p>简单点说就是降低硬盘随机寻道的时间,即降低电机轴的加速度,从而降低声音.</p>
<p>具体调节方法,只要你的硬盘支持AMM,用HD Tune Pro就可以了.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=331</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>评估parasoft cpptest</title>
		<link>http://veryzhang.cn/?p=327</link>
		<comments>http://veryzhang.cn/?p=327#comments</comments>
		<pubDate>Sun, 28 Jun 2009 16:11:41 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=327</guid>
		<description><![CDATA[在深圳的时候有点空闲,就联系parasoft的国内总代,想评估一下cpptest的最新版本.

拿到试用license之后,在现有的工程中用了几天,有些感触:

1.嵌入式版只是把mcp转换成makefile,然后导入cpptest的工程;除此之外只有unit test似乎用到了arm的编译器,但是这个unit test貌似移植的工作量相当大,具体效果未知;

<span class="readmore"><a href="http://veryzhang.cn/?p=327" title="评估parasoft cpptest">阅读全文——共1128字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在深圳的时候有点空闲,就联系parasoft的国内总代,想评估一下cpptest的最新版本.</p>
<p>拿到试用license之后,在现有的工程中用了几天,有些感触:</p>
<p>1.嵌入式版只是把mcp转换成makefile,然后导入cpptest的工程;除此之外只有unit test似乎用到了arm的编译器,但是这个unit test貌似移植的工作量相当大,具体效果未知;</p>
<p>2.静态扫描功能很弱,大部分都是些编程规范上的检查;</p>
<p>3.bug detective功能略强,能检测出数组的写越界,但是对heap的操作就无能为力了;而且似乎在检查if()之类的判断语句时会有错判;</p>
<p>4.rule wizard看上去很强大,但是似乎超出了用户的能力,不花上个把月似乎搞不出像样的自定义license,呵呵.</p>
<p>总体来看似乎没什么太大的帮助,要是个免费软件还不错,呵呵.</p>
<p>撇开cpptest不谈,我还是很疑惑,嵌入式软件的单元测试,到底怎样做才有效呢?</p>
<p>有几个思路应该是多少能起点作用的:</p>
<p>1.将代码尽量做成平台无关,然后在windows/linux平台下作单元测试/代码分析;</p>
<p>2.尽可能提高工程师的编程功力,加强code review.</p>
<p>不过第一条做起来相当难,第二条就有点可遇不可求了.</p>
<p>parasoft还有个软件叫insure,粗看了一下,大概跟valgrind很像,动态检查程序运行时的内存错误,功能似乎很强大,不过都是只有x86架构的版本,因为这种检查都跟具体的指令集,linker的输出格式或者调试信息格式有关吧?</p>
<p>我试着想了想,arm+ads+nucleus的环境下,有这么几招可能可以一试:</p>
<p>1.围墙,最常用的招数了,在heap内存区的前后加上一些特定数据,在malloc/free的调用中检查这些数据;</p>
<p>2.动用mmu,在性能损失可以接受的情况下,用尽可能小的page,映射每一个heap内存块,将内存块的后面一段区域设为无效地址,你如内存块从0&#215;40000000到0&#215;40001000,那么0&#215;40001000到0&#215;40002000就是无效区域,没有映射到任何物理地址,那么通常的写越界就会导致一个data abort,无需额外检查;</p>
<p>3.拦截memcpy和memset,判断目标写地址和长度是否合法.</p>
<p>4.把操作系统改成super/user模式的(对nucleus似乎不太麻烦),然后将所有内存设为user模式不可写,这样每次改写内存都会产生data abort,然后在abort异常的服务程序中分析目标地址和要写数据的指令,判断是否合法.</p>
<p>但是还有许多其他各种各样的问题,比如改写中断向量,寄存器,全局变量,堆栈溢出,等等,单纯的运行时的工具就很难有所作为了,似乎必须采用代码分析+插桩+运行时检测的方法来做.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=327</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>回到北京</title>
		<link>http://veryzhang.cn/?p=325</link>
		<comments>http://veryzhang.cn/?p=325#comments</comments>
		<pubDate>Sun, 28 Jun 2009 15:36:02 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=325</guid>
		<description><![CDATA[去深圳待了接近三周,没干什么活,就是热的要死.

去之前踌躇满志,准备大干一番,没想到到了之后一直不在状态,干了一周也没啥进展,然后就混日子直到回来.

不过这次出差有一个意外收获,就是思考了很多关于做人和做事,似乎又成熟了一点.

<span class="readmore"><a href="http://veryzhang.cn/?p=325" title="回到北京">阅读全文——共184字</a></span>]]></description>
			<content:encoded><![CDATA[<p>去深圳待了接近三周,没干什么活,就是热的要死.</p>
<p>去之前踌躇满志,准备大干一番,没想到到了之后一直不在状态,干了一周也没啥进展,然后就混日子直到回来.</p>
<p>不过这次出差有一个意外收获,就是思考了很多关于做人和做事,似乎又成熟了一点.</p>
<p>最后附上今天看的一段话,据说是来自麦田守望者,未经查证,呵呵</p>
<p>&#8211;一个不成熟的男人会为了某种事业英勇的去死,一个成熟的男人会为了某种事业卑贱的活着.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=325</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何解决linux下flash player中文乱码的问题</title>
		<link>http://veryzhang.cn/?p=323</link>
		<comments>http://veryzhang.cn/?p=323#comments</comments>
		<pubDate>Sat, 30 May 2009 17:17:54 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=323</guid>
		<description><![CDATA[转自水木：

http://www.newsmth.net/bbscon.php?bid=392&#38;id=710398&#38;ftype=3&#38;num=1585

如果在Linux下Flash无法正常显示汉字，

<span class="readmore"><a href="http://veryzhang.cn/?p=323" title="如何解决linux下flash player中文乱码的问题">阅读全文——共200字</a></span>]]></description>
			<content:encoded><![CDATA[<p>转自水木：<br />
<a href="http://www.newsmth.net/bbscon.php?bid=392&amp;id=710398&amp;ftype=3&amp;num=1585">http://www.newsmth.net/bbscon.php?bid=392&amp;id=710398&amp;ftype=3&amp;num=1585</a></p>
<p>如果在Linux下Flash无法正常显示汉字，<br />
请使用命令sudo vim /etc/fonts/conf.d/49-sansserif.conf<br />
(可以把vim替换成你喜欢的文本编辑器)</p>
<p>将倒数第四行的sans-serif替换为“WenQuanYi Zen Hei”</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=323</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>增加colinux分区大小的几种方法</title>
		<link>http://veryzhang.cn/?p=321</link>
		<comments>http://veryzhang.cn/?p=321#comments</comments>
		<pubDate>Wed, 22 Apr 2009 16:36:03 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=321</guid>
		<description><![CDATA[一种是官方提供的, 先创建一个空白的image, 然后挂载到colinux上, 然后把原来的root分区导入到新的镜像中, 再将新的镜像作为root挂载:



fsutil file createnew new.img 2147483648

<span class="readmore"><a href="http://veryzhang.cn/?p=321" title="增加colinux分区大小的几种方法">阅读全文——共413字</a></span>]]></description>
			<content:encoded><![CDATA[<p>一种是官方提供的, 先创建一个空白的image, 然后挂载到colinux上, 然后把原来的root分区导入到新的镜像中, 再将新的镜像作为root挂载:</p>
<blockquote><p>
fsutil file createnew new.img 2147483648
</p></blockquote>
<p>修改conf文件, 挂载new.img为cobd3:</p>
<blockquote><p>
cobd3=&#8221;images\new.img&#8221;
</p></blockquote>
<p>然后启动colinux, 导入原来的根分区:</p>
<blockquote><p>
dd if=/dev/cobd0 of=/dev/cobd3
</p></blockquote>
<p>然后关闭colinux, 再次修改conf文件:</p>
<blockquote><p>
cobd0=&#8221;images\new.img&#8221;
</p></blockquote>
<p>重新启动colinux后运行:</p>
<blockquote><p>
resize2fs -p /dev/cobd0
</p></blockquote>
<p><HR><br />
另一种方法更为简单, 不过要稍慢一点点:<br />
在windows命令行下运行:</p>
<blockquote><p>
copy /b root.img+root.img newroot.img
</p></blockquote>
<p>然后用newroot.img替换root.img, 启动colinux, 运行:</p>
<blockquote><p>
resize2fs -p /dev/cobd0
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=321</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如何改善gcc在gdb中的调试视图</title>
		<link>http://veryzhang.cn/?p=318</link>
		<comments>http://veryzhang.cn/?p=318#comments</comments>
		<pubDate>Mon, 20 Apr 2009 15:48:28 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=318</guid>
		<description><![CDATA[很小的一个问题, 但是折腾了我很久, 主要还是被几十k的makefile给蒙蔽了, sigh&#8230;

采用默认的configure和make选项生成的gcc, 在gdb中调试的时候, 总是跳来跳去, 非常难以跟踪, 今本达不到通过调试了解gcc的目的.

我试过../configure &#8211;enable-debug, 以及make &#8220;CFLAGS=-g3 -O0&#8243;, 都没用.

<span class="readmore"><a href="http://veryzhang.cn/?p=318" title="如何改善gcc在gdb中的调试视图">阅读全文——共338字</a></span>]]></description>
			<content:encoded><![CDATA[<p>很小的一个问题, 但是折腾了我很久, 主要还是被几十k的makefile给蒙蔽了, sigh&#8230;<br />
采用默认的configure和make选项生成的gcc, 在gdb中调试的时候, 总是跳来跳去, 非常难以跟踪, 今本达不到通过调试了解gcc的目的.<br />
我试过../configure &#8211;enable-debug, 以及make &#8220;CFLAGS=-g3 -O0&#8243;, 都没用.<br />
今天终于发现, 真正起作用的cflag是CFLAGS和CFLAGS_FOR_BUILD, 只要在configure之后生成的makefile中, 将这两个flag改为-g3 -O0就可以了.<br />
重新编译后生成的可执行文件在gdb中调试的时候完全按照每行步进的方式执行, 而且还包含了宏信息.</p>
<p>说到底还是对gcc几个stage的编译过程不了解导致.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=318</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在ubuntu下建立ramdisk &amp; firefox加速</title>
		<link>http://veryzhang.cn/?p=316</link>
		<comments>http://veryzhang.cn/?p=316#comments</comments>
		<pubDate>Wed, 15 Apr 2009 16:50:14 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=316</guid>
		<description><![CDATA[步骤非常简单：



mkdir /tmp

<span class="readmore"><a href="http://veryzhang.cn/?p=316" title="在ubuntu下建立ramdisk &#038; firefox加速">阅读全文——共304字</a></span>]]></description>
			<content:encoded><![CDATA[<p>步骤非常简单：</p>
<blockquote><p>
mkdir /tmp<br />
vi /etc/fstab<br />
none /ramdisk tmpfs defaults,size=4096M 0 0<br />
:wq<br />
mount -a
</p></blockquote>
<p>然后就可以使用ramdisk了.<br />
linux下的ramdisk非常灵活,当系统内存不足时,会将ramdisk中未使用的区域给系统使用, 反过来则不可以.<br />
<HR><br />
另外可以将firefox的缓存文件指定存放在ramdisk目录下面,大大加快浏览速度:<br />
在firefox的地址栏中输入: about:config, 查找键值: browser.cache.disk.parent_directory, 然后将其内容改为ramdisk目录,比如/ramdisk, 重启firefox即可.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=316</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Colinux和Portable ubuntu</title>
		<link>http://veryzhang.cn/?p=312</link>
		<comments>http://veryzhang.cn/?p=312#comments</comments>
		<pubDate>Tue, 14 Apr 2009 16:16:10 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=312</guid>
		<description><![CDATA[最近开始在公司的电脑上用portable ubuntu(好像被盾了, 这里是sourceforge上的主页), 基于colinux, 直接在windows下运行ubuntu8.04, 占用资源很小, 而且与windows完美的结合在一起, 两不耽误;用来编译gcc或者ffmpeg也很快, 真的是正合我意.

晚上给老由推荐了下, 然后讨论了一下它的原理, 我想当然的说colinux是提供了一套用户态的api, 然后使linux的用户程序可以在windows下运行, 但是开发内核驱动应该就不行了.

<span class="readmore"><a href="http://veryzhang.cn/?p=312" title="Colinux和Portable ubuntu">阅读全文——共844字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近开始在公司的电脑上用<a href="http://portableubuntu.demonccc.com.ar/" target="_blank">portable ubuntu</a>(好像被盾了, <a href="http://sourceforge.net/projects/portableubuntu/" target="_blank">这里是sourceforge上的主页</a>), 基于<a href="http://www.colinux.org/" target="_blank">colinux</a>, 直接在windows下运行ubuntu8.04, 占用资源很小, 而且与windows完美的结合在一起, 两不耽误;用来编译gcc或者ffmpeg也很快, 真的是正合我意.</p>
<p>晚上给老由推荐了下, 然后讨论了一下它的原理, 我想当然的说colinux是提供了一套用户态的api, 然后使linux的用户程序可以在windows下运行, 但是开发内核驱动应该就不行了.</p>
<p>晚上回来想想不太对, 于是上wiki看了下<a href="http://en.wikipedia.org/wiki/Cooperative_Linux" target="_blank">colinux的介绍</a>, 发现我前面的理解应该指的是<a href="http://user-mode-linux.sourceforge.net/" target="_blank">User Mode Linux</a>, colinux应该是这样的:</p>
<ul>
<li>linux kernel是原生的, 正经八百的kernel;</li>
<li>在windows下提供了一套特殊的设备驱动, 比如block device, network, console; x window直接用xming, 省了不少麻烦;</li>
<li>colinux的kernel直接运行在ring 0, 也就是特权模式, 跟windows共存, 直接控制cpu和mmu;</li>
<li>我的理解, colinux应该是在cpu的使用上比vmware更进一步, vmware应该是部分指令采用直接执行, 而不是直接占用cpu和mmu, 所以资源占用和效率都低不少, 但是安全性也高;</li>
<li>因为设备很特殊, 机制也很特殊, 因此在colinux上安装linux发行版非常困难, 都是直接下载安装好的镜像.</li>
</ul>
<p>大概理解就是如此, 不知靠谱否.</p>
<p>所以说想当然是往往不行的, 呵呵.</p>
<hr />补上一篇ibm developworks上介绍colinux的文章:<br />
<a href="http://www.ibm.com/developerworks/cn/linux/l-virtualization-colinux/index.html" target="_blank">http://www.ibm.com/developerworks/cn/linux/l-virtualization-colinux/index.html</a></p>
<p>还有Dan Aloni介绍colinux原理的paper:</p>
<p><a href="http://www.colinux.org/publications/Reprint-Aloni-OLS2004.pdf" target="_blank">http://www.colinux.org/publications/Reprint-Aloni-OLS2004.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=312</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始用twitter</title>
		<link>http://veryzhang.cn/?p=310</link>
		<comments>http://veryzhang.cn/?p=310#comments</comments>
		<pubDate>Tue, 14 Apr 2009 15:56:28 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=310</guid>
		<description><![CDATA[虽然twitter已经火了很久了,但是我直到上周末才开始认真考虑这个东西,然后就喜欢上了,一发而不可收.

平时总想随手记些东西, 比如零碎的想法, 过几天的日程安排, 或者一些突然想明白的事情, 总之零零散散的容易忘的东西.

本来一直记在手机的便笺里, 但是手机容量很小, 又犯不上为了这个换手机; 在电脑里开一个文件记的话, 又很不方便, 因为等你坐到电脑前的时候往往已经忘了要写啥了.

<span class="readmore"><a href="http://veryzhang.cn/?p=310" title="开始用twitter">阅读全文——共323字</a></span>]]></description>
			<content:encoded><![CDATA[<p>虽然twitter已经火了很久了,但是我直到上周末才开始认真考虑这个东西,然后就喜欢上了,一发而不可收.</p>
<p>平时总想随手记些东西, 比如零碎的想法, 过几天的日程安排, 或者一些突然想明白的事情, 总之零零散散的容易忘的东西.</p>
<p>本来一直记在手机的便笺里, 但是手机容量很小, 又犯不上为了这个换手机; 在电脑里开一个文件记的话, 又很不方便, 因为等你坐到电脑前的时候往往已经忘了要写啥了.</p>
<p>但是twitter完美的解决了这个问题, 通过手机客户端<a href="http://www.twittai.com/" target="_blank">twittai</a>, 随时随地连上网, 什么时候都能写.</p>
<p>然后把twitter设置为private, 因为都是些私人记录, 没必要跟别人分享.</p>
<p>最后再装一个firefox扩展: <a href="https://addons.mozilla.org/en-US/firefox/addon/5081" target="_blank">twitterfox</a>,在家上网的时候也可以随手twitter,爽!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=310</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>GCC学习笔记&#8212;demystifying gcc</title>
		<link>http://veryzhang.cn/?p=299</link>
		<comments>http://veryzhang.cn/?p=299#comments</comments>
		<pubDate>Sat, 11 Apr 2009 14:53:04 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>
		<category><![CDATA[编译原理]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=299</guid>
		<description><![CDATA[在网上搜gcc frontend时偶然发现了这份ppt，绝对是gcc入门的最佳资料，强烈推荐。

主要讲了关于build/debug,front-end,middle-end,back-end,包括c,c++和java.

原文出处在这里:

<span class="readmore"><a href="http://veryzhang.cn/?p=299" title="GCC学习笔记&#8212;demystifying gcc">阅读全文——共1133字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在网上搜gcc frontend时偶然发现了这份ppt，绝对是gcc入门的最佳资料，强烈推荐。<br />
主要讲了关于build/debug,front-end,middle-end,back-end,包括c,c++和java.<br />
原文出处在这里:<br />
<a href="http://www.cs.wustl.edu/~mdeters/oopsla2006/">http://www.cs.wustl.edu/~mdeters/oopsla2006/</a><br />
本地下载地址(pdf):<br />
<a href="http://veryzhang.cn/wp-content/uploads/2009/04/demystifying-gcc.pdf" target="_blank">http://veryzhang.cn/wp-content/uploads/2009/04/demystifying-gcc.pdf</a></p>
<hr />上面这个是2006年的presentation，有点老了，而且附带的源代码也找不到了，后来给作者发了封邮件，这位大哥给了新的地址：</p>
<blockquote><p>Hi Xuecheng,</p>
<p>I&#8217;ve looked and I can&#8217;t find these code examples either at the moment.</p>
<p>If I find them, I&#8217;ll let you know.  There are also some more recent<br />
tutorial slides here:</p>
<p><a href="http://www.cs.wustl.edu/%7Emdeters/pldi2008/" target="_blank">http://www.cs.wustl.edu/~mdeters/pldi2008/</a></p>
<p>And additional resources (slightly older) here:</p>
<p><a href="http://www.cs.wustl.edu/%7Emdeters/seminar/fall2005/" target="_blank">http://www.cs.wustl.edu/~mdeters/seminar/fall2005/</a></p>
<p>that give some information about GCC.  Note that the Java front-end<br />
has changed significantly since the 2005 and 2006 courses (in case<br />
you&#8217;re looking at the source for a recent GCC compiler).  Other parts<br />
have changed a lot too.</p>
<p>One of the code resources listed for the 2006 course was of jRate, a<br />
real-time Java implementation, based on GCC&#8217;s (ahead-of-time-compiled)<br />
Java implementation, that makes modifications to the GCJ compiler and<br />
the libraries, and also a little to the GCC C++ compiler.  The source<br />
modifications of jRate to GCC are open-source, available through<br />
SourceForge:</p>
<p><a href="http://jrate.sourceforge.net/" target="_blank">http://jrate.sourceforge.net/</a></p>
<p>Take care, and happy hacking!<br />
Morgan</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=299</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>lex和yacc学习笔记</title>
		<link>http://veryzhang.cn/?p=287</link>
		<comments>http://veryzhang.cn/?p=287#comments</comments>
		<pubDate>Thu, 09 Apr 2009 16:07:26 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[编译原理]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=287</guid>
		<description><![CDATA[1.标准的c语法和词法范式只有输出token功能;

2.lex传递给yyac的是token的索引,需要在lex中自己实现一个符号表管理机制,把token的名称记录下来;

3.treelang是在lex中通过get_string函数来获取token的名称,并且由gcc统一管理;

<span class="readmore"><a href="http://veryzhang.cn/?p=287" title="lex和yacc学习笔记">阅读全文——共434字</a></span>]]></description>
			<content:encoded><![CDATA[<p>1.标准的c语法和词法范式只有输出token功能;</p>
<p>2.lex传递给yyac的是token的索引,需要在lex中自己实现一个符号表管理机制,把token的名称记录下来;</p>
<p>3.treelang是在lex中通过get_string函数来获取token的名称,并且由gcc统一管理;</p>
<p>4.每次遇到一个token，treelang都会创建一个新的tok结构体，将这个token赋值到tok结构体中；每一个token都有对应的tok结构体；</p>
<p>5.treelang_parse_file会调用yyparse,然后yyparse会调用yylex;</p>
<p>6.lex文件第二个%%段开始默认就是yylex吗?</p>
<p>7.先执行token识别过程,再执行yylex;实际运行过程是,在token识别之前,先调用YY_RULE_SETUP,这个宏最终的实际定义是YY_DECL,就是yylex;太乱了!</p>
<p>8.yylex被my_yylex调用,my_yylex有被定义成宏YYLEX,YYLEX被yyparse调用;</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=287</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[代码学习]C语言符号转换的一个问题</title>
		<link>http://veryzhang.cn/?p=251</link>
		<comments>http://veryzhang.cn/?p=251#comments</comments>
		<pubDate>Wed, 01 Apr 2009 16:36:21 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=251</guid>
		<description><![CDATA[在CSDN社区闲逛, 看到有人问了这么一个问题:

打上注释1的那一行中，为什么要写“*(unsigned char *)src ”写成*src-*dst不好么？

源代码是这样的:

<span class="readmore"><a href="http://veryzhang.cn/?p=251" title="[代码学习]C语言符号转换的一个问题">阅读全文——共932字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在CSDN社区闲逛, 看到有人问了这么一个问题:</p>
<blockquote><p>打上注释1的那一行中，为什么要写“*(unsigned char *)src ”写成*src-*dst不好么？</p></blockquote>
<p>源代码是这样的:</p>
<blockquote><p>int __cdecl strcmp (const char * src,const char * dst)<br />
{<br />
int ret = 0 ;</p>
<p>/*1*/<br />
while( ! (ret = *(unsigned char *)src &#8211; *(unsigned char *)dst) &amp;&amp; *dst)<br />
++src, ++dst;</p>
<p>if ( ret &lt; 0 )<br />
ret = -1 ;<br />
else if ( ret &gt; 0 )<br />
ret = 1 ;</p>
<p>return( ret );<br />
}</p></blockquote>
<p>下面是高人的解答:</p>
<blockquote><p>如果*src值为(char)1，*dst值为(char)255，那么<br />
ret = *(unsigned char *)src &#8211; *(unsigned char *)dst的值为-254，而<br />
ret = *src-*dst的值为2(char先转换为int，再做减法运算。转换时是符号扩展的)，显然导致判断正负的错误</p></blockquote>
<p>这个解答讲的很清楚了,但我还是觉得有点似懂非懂,于是乎查了下书&lt;C:A Reference Manual 5th&gt;,一共两个知识点:</p>
<ul>
<li>类型转换时的符号扩展, 这个很简单了, char型的有符号数如果转换成int型的有符号数, 高24bit会填充符号位, 即整数填0, 负数填1; 所以char转成int之后做得减法结果是不一样的;</li>
<li><span style="color: #ff0000;">赋值时的类型转换, 赋值操作符左边和右边的表达式的类型应该是相同的, 如果不是, 就尝试把赋值操作符右边的表达式的值转换为左边的类型</span>; 就是这里的char*转换成unsigned int*;</li>
</ul>
<p>另外跑题一下, 翻书时看到的, <span style="color: #ff0000;">C不允许把任何类型转换为数组或者函数类型<strong>;</strong></span></p>
<ul>
<li>很多讲&#8221;指针与数组的区别&#8221;的文章中都会提到, 数组的类型是不能变的, 而指针的类型可以强制转换, 这是数组和指针的一个主要区别;</li>
<li>但是这个区别的根本限制应该是上面这句话, 任何类型都不能转换成数组或者函数;比如书中提到的这个例子(6.2.8): <span style="color: #0000ff;">extern int f(); double d; d=((double())f)();</span> 就是不允许的, 因为这行语句试图把f的返回值类型改为double; 如果没有extern声明, 就不确定了, 如果一个函数没有声明, 大部分编译器会假设其返回值为int.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=251</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>函数与带参数宏的区别</title>
		<link>http://veryzhang.cn/?p=232</link>
		<comments>http://veryzhang.cn/?p=232#comments</comments>
		<pubDate>Sun, 29 Mar 2009 07:27:01 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=232</guid>
		<description><![CDATA[刚看到jserv放出了一份c语言讲义：http://blog.linux.org.tw/~jserv/archives/002096.html

立即当下来拜读，其中有一个细节暂时没搞懂：

#include &#60;stdio.h&#62;

<span class="readmore"><a href="http://veryzhang.cn/?p=232" title="函数与带参数宏的区别">阅读全文——共632字</a></span>]]></description>
			<content:encoded><![CDATA[<p>刚看到jserv放出了一份c语言讲义：<a href="http://blog.linux.org.tw/~jserv/archives/002096.html" target="_blank">http://blog.linux.org.tw/~jserv/archives/002096.html</a></p>
<p>立即当下来拜读，其中有一个细节暂时没搞懂：</p>
<blockquote><p>#include &lt;stdio.h&gt;</p>
<p>void f()</p>
<p>{ puts(&#8221;Function&#8221;); }</p>
<p>#define f() puts(&#8221;Macro&#8221;)</p>
<p>int main()</p>
<p>{</p>
<p>f();</p>
<p>f ();</p>
<p>(f)()</p>
<p>}</p></blockquote>
<p>输出结果是：</p>
<blockquote><p>Macro</p>
<p>Macro</p>
<p>Function</p></blockquote>
<p>对C语言来说，函数和带参数的宏区别在什么地方呢？</p>
<p>这应该是个小问题，查一下C标准就能搞定，但是C标准参考那本书放在公司了，所以先记下来，周一查书看看。</p>
<hr />
首先感谢jserv大牛光临小博, 蓬荜生辉阿,呵呵.</p>
<p>今天才抽出时间想这个问题, 暂时的结论是这样:</p>
<ul>
<li>预处理器要求带参数宏的右侧的第一个token必须是左括号, 不过这只是一个猜测, 手头没有预处理器的详细标准;</li>
<li>编译器来进行词法分析的时候, 首先应该是一个表达式求值, 求值的结果是指向f的函数指针, 然后接下来就是函数调用了.</li>
</ul>
<p>不过第二条这个非常不确定, 刚对着C的语法范式推了十几遍, 始终不得要领, 每次都跑到死胡同里去了.</p>
<p>后面准备用C的lex和yacc定义做一个log程序, 将语法分析时的每个步骤都打印出来, 应该很容易.</p>
<hr />
后记：2009-07-28<br />
这两天在看gcc的libcpp源代码，觉得这个问题其实很简单，预处理器是最早运行的，它会将符合带参数宏的形式全部展开，而编译器到了编译阶段才开始干活，so简单的一个道理&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=232</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GCC学习笔记&#8212;-Treelang</title>
		<link>http://veryzhang.cn/?p=227</link>
		<comments>http://veryzhang.cn/?p=227#comments</comments>
		<pubDate>Sat, 28 Mar 2009 16:57:05 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=227</guid>
		<description><![CDATA[1.treelang的目录是gcc/treelang;

2.编译时需要显式的使能treelang, &#8211;enable-languages=treelang, 够则treelang不会被使能;

3.treelang的语法和C基本是一致的, 确切的说treelang是C的一个子集;

<span class="readmore"><a href="http://veryzhang.cn/?p=227" title="GCC学习笔记&#8212;-Treelang">阅读全文——共1249字</a></span>]]></description>
			<content:encoded><![CDATA[<p>1.treelang的目录是gcc/treelang;</p>
<p>2.编译时需要显式的使能treelang, &#8211;enable-languages=treelang, 够则treelang不会被使能;</p>
<p>3.treelang的语法和C基本是一致的, 确切的说treelang是C的一个子集;</p>
<p>4.treelang的sample程序可以在<a href="http://stderr.org/doc/treelang-4.1-doc/treelang.html#Getting-Started">这里</a>找到;</p>
<p>5.编译完之后,会在libexec目录下生成一个文件叫:tree1, 等同于C语言的前端cc1.因为treelang只有前端,所以只有tree1这一个程序;</p>
<p>6.treelang的入口在gcc/treelang/tree1.c中的treelang_init;</p>
<hr />treelang可以用下面两个选项来跟踪lexer和parser的处理过程:</p>
<blockquote><p>-flexer-trace<br />
-fparser-trace</p></blockquote>
<p>1.这两个选项的使能和禁止是在lex.l和parse.y中定义的,所以在C代码中找不到;</p>
<p>2.-flexer-trace是由lex.l中的这两个宏实现的:</p>
<blockquote><p>#define SAVE_RETURN(a) {update_yylval (a); if (option_lexer_trace)<br />
{fprintf (stderr, &#8220;nlexer returning&#8221;); dump_lex_value (a);} return a;}<br />
#define NOT_RETURN(a) {update_yylval (a); if (option_lexer_trace)<br />
{fprintf (stderr, &#8220;nlexer swallowing&#8221;); dump_lex_value (a);}}</p></blockquote>
<p>2.在编译目录里面找到build/gcc/treelang目录,在parse.c中有相应的trace输出代码,应该是bison自带的, 所以C就没有这两个选项, 因为C的前端是手写的.</p>
<hr />1.insert_tree_name里面采用反向插入的方法建立symbol table;</p>
<p>2.tree1.c中定义了一个变量:</p>
<blockquote><p>static  struct prod_token_parm_item *symbol_table = NULL;</p></blockquote>
<p>其中symbol_table是符号表的起始节点, 而prod_token_parm_item就是标记(token), 生成式(production), 参数(pamameter)的共用结构体(不知道production是不是叫生成式,得查查书), 定义在treelang.h中;</p>
<p>3.parse.y中针对每一种范式, 都有一段程序, 将该tokan/prod/pama插入到符号表的全局变量中;</p>
<p>4.另外跑题去看了一下C的parser(c-parser.c), 应该是从current_function_decl作为整个translation unit的起始节点, 节点类型是gcc标准的tree, 而不是像treelang自己定义的结构体;</p>
<p>5.如果上面的理解正确的话, 那么从synbol_table开始写一个遍历的程序, 按照不同类型导出所有的symbol信息, 应该是很容易的.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=227</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>工作中要小心的两个坏习惯[转载]</title>
		<link>http://veryzhang.cn/?p=225</link>
		<comments>http://veryzhang.cn/?p=225#comments</comments>
		<pubDate>Sun, 22 Mar 2009 17:29:57 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=225</guid>
		<description><![CDATA[在赖勇浩的blog上看到的,深有感触,或者说感触极深,就像在说我一样.

特此收藏,提醒自己,改之亦或加勉.

要小心的坏习惯1：喜欢辩解

<span class="readmore"><a href="http://veryzhang.cn/?p=225" title="工作中要小心的两个坏习惯[转载]">阅读全文——共1008字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.cppblog.com/gamebryo/archive/2009/02/16/73936.html" target="_blank">赖勇浩的blog上</a>看到的,深有感触,或者说感触极深,就像在说我一样.</p>
<p>特此收藏,提醒自己,改之亦或加勉.</p>
<p><strong><span style="color: #cc6600;">要小心的坏习惯1：喜欢辩解</span></strong></p>
<p><span style="color: green;">说明：</span></p>
<p>聪明人都知道辩解不是好事，大多数人也都不想辩解。但是同样的话在特定场合对特定的人说，有时就像辩解一样，而说话人可能还未意识到。</p>
<p><span style="color: green;">危害程度：</span></p>
<p>极高。</p>
<p><span style="color: green;">危害：</span></p>
<p>让人感觉自己在逃避责任而不被信任，因此很难得到晋升。</p>
<p><span style="color: green;">原因：</span></p>
<p><strong>谈论事情未分场合，没有围绕谈话的目的答话。（本意虽好，但不明智）</strong></p>
<p>例如，在谈论到研发上出问题的时候，自己首先要承担过失。然后立刻着手去处理，与同级别同事及属下一起探讨问题解决方案，在分析清楚后给出承诺。而与领导探讨如何解决问题是不应该的，原因是：</p>
<p>1.    领导谈话的目的是提醒你犯了错（或是有些问题该注意），他想知道的是你会如何处理来避免风险。你作为问题领域的专家应以实际行动让领导放心。否则领导就会怀疑是否用对了人。</p>
<p>2.    虽然你的本意可能是想多收集一些意见。但是领导的时间不是用来和你探讨解决问题的，而你的时间也应投入到实际的工作，首先和你的团队进行讨论。所以要避免职务跨层级的无意义的讨论。</p>
<p><span style="color: green;">改正方法：</span></p>
<p>1.    <strong>讨论问题要分场合，否则所说的很可能都是废话和辩解。</strong>被上层提醒工作有问题时，首先要认错。不要把专业领域的问题提到管理层面上。</p>
<p>2.    快速找出问题原因，备案并改进团队工作。用承诺作为对上层的直接而明确的答复。</p>
<p>3.    主动汇报工作进度。不要等领导找上门时才解释，因为那个时侯的解释很像是辩解。</p>
<p>——————————————————————————————————————————————</p>
<p><span style="color: #cc6600;"><strong>要小心的坏习惯2：喜欢逞能</strong></span></p>
<p><span style="color: green;">说明：</span></p>
<p>凡是有心做事的人都希望自己得到足够的重视，因此喜欢表现自己，处处逞能。逞能不见得是坏事，在有些时候还能使自己脱颖而出。但是目的不明确的逞能迟早会坏事。</p>
<p><span style="color: green;">危害程度：</span></p>
<p>高。</p>
<p><span style="color: green;">危害：</span></p>
<p>1.   不经意间暴露自己的弱点，以致被人利用；</p>
<p>2.   说了不该说的话，给人留下话柄；</p>
<p>3.   容易导致重要内容泄密。</p>
<p><span style="color: green;">原因：</span></p>
<p>希望自己能力得到认可，但是行事缺少原则。</p>
<p><span style="color: green;">改正方法：</span></p>
<p>1.   不说无意义的话，不做无意义的事。专注、务实地做好自己的专长工作。</p>
<p>2.   对自己擅长的工作要自信，而其他方面要谦虚。尊重他人。</p>
<p>3.   学会旁观，学会倾听。见贤思齐，见不贤则自省。</p>
<p>4.   <strong>逞能’要看机会，而不该是随意的。 </strong>逞能就要逞到点上，点中问题要害，帮助快速有效地解决问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=225</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>无题</title>
		<link>http://veryzhang.cn/?p=223</link>
		<comments>http://veryzhang.cn/?p=223#comments</comments>
		<pubDate>Sun, 22 Mar 2009 13:58:23 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=223</guid>
		<description><![CDATA[今天在水木上看见的一个签名档,感觉十分的好:

作为一个team的leader, 实际上你担负的不仅仅是事务的管理, 更大意义上你要成为这个team的发动机。如果你始终保持旺盛的斗志，乐观的精神状态，并以此去感染、传递给team的成员, 这个team的荣誉感就会建立起来。以后听到有需求，有单子就像吃了兴奋剂一样。

——领导的话

<span class="readmore"><a href="http://veryzhang.cn/?p=223" title="无题">阅读全文——共390字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今天在水木上看见的一个签名档,感觉十分的好:</p>
<blockquote><p>作为一个team的leader, 实际上你担负的不仅仅是事务的管理, 更大意义上你要成为这个team的发动机。如果你始终保持旺盛的斗志，乐观的精神状态，并以此去感染、传递给team的成员, 这个team的荣誉感就会建立起来。以后听到有需求，有单子就像吃了兴奋剂一样。<br />
——领导的话</p></blockquote>
<hr />
今天又看见一段:</p>
<blockquote><p>其实不需要太多技术的。<br />
想起前公司前部门（研发部）经理，时常通宵加班，时常看到他和算法、软件、机械<br />
一个个组的成员深入交流。后来他走了，空降一个新经理（此时我已经不在公司）。<br />
聊起时，以前几个同事都说新的经理好多了。<br />
我问：怎么好法？<br />
答：他一来，给我们把公司所有CRT全换液晶了。<br />
再问：其他的呢？<br />
回答说：比较关心员工。<br />
问：怎么体现的？<br />
想了半天回答：某天下雨，他下班时路过我们办公室时，说：大家回家注意别淋雨……<br />
问：其他的呢？<br />
答：没了。</p>
<p>唉，人的感觉很奇怪的。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=223</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>H-Jtag出usb仿真器了</title>
		<link>http://veryzhang.cn/?p=219</link>
		<comments>http://veryzhang.cn/?p=219#comments</comments>
		<pubDate>Wed, 18 Mar 2009 16:05:12 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=219</guid>
		<description><![CDATA[http://www.hjtag.com/forum/viewthread.php?tid=721&#38;extra=page%3D1

无意中在网上看到这个帖子,心里感到一阵莫名的激动:)

第一次知道h-jtag好像还是大三的时候,刚开始学ARM,那时h-jtag还只支持并口的转接板,没想到twentyone一直坚持到现在,佩服.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.hjtag.com/forum/viewthread.php?tid=721&amp;extra=page%3D1">http://www.hjtag.com/forum/viewthread.php?tid=721&amp;extra=page%3D1</a></p>
<p>无意中在网上看到这个帖子,心里感到一阵莫名的激动:)</p>
<p>第一次知道h-jtag好像还是大三的时候,刚开始学ARM,那时h-jtag还只支持并口的转接板,没想到twentyone一直坚持到现在,佩服.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=219</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MP4 FAQ</title>
		<link>http://veryzhang.cn/?p=213</link>
		<comments>http://veryzhang.cn/?p=213#comments</comments>
		<pubDate>Wed, 18 Mar 2009 15:14:00 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=213</guid>
		<description><![CDATA[doom9上的原文:

http://forum.doom9.org/showthread.php?t=62723

搜新网上的中文版:

<span class="readmore"><a href="http://veryzhang.cn/?p=213" title="MP4 FAQ">阅读全文——共181字</a></span>]]></description>
			<content:encoded><![CDATA[<p>doom9上的原文:</p>
<p><a href="http://forum.doom9.org/showthread.php?t=62723">http://forum.doom9.org/showthread.php?t=62723</a></p>
<p>搜新网上的中文版:</p>
<p><a href="http://www.tfcc.cn/dvdrip/2006-6-15_14-15-59_7629.html">http://www.tfcc.cn/dvdrip/2006-6-15_14-15-59_7629.html</a></p>
<p>所谓长痛不如短痛,又所谓磨刀不误砍柴功,在刚接触一个东西的时候花点精力把它的来龙去脉搞清楚,不知道会节约多少debug的时间.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>敏捷?</title>
		<link>http://veryzhang.cn/?p=210</link>
		<comments>http://veryzhang.cn/?p=210#comments</comments>
		<pubDate>Sun, 15 Mar 2009 15:56:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=210</guid>
		<description><![CDATA[刚在梦想风暴上看到的:

http://dreamhead.blogbus.com/logs/36607822.html

沟通、反馈、简单、勇气和尊重.

<span class="readmore"><a href="http://veryzhang.cn/?p=210" title="敏捷?">阅读全文——共111字</a></span>]]></description>
			<content:encoded><![CDATA[<p>刚在梦想风暴上看到的:</p>
<p><a href="http://dreamhead.blogbus.com/logs/36607822.html" target="_blank">http://dreamhead.blogbus.com/logs/36607822.html</a></p>
<p>沟通、反馈、简单、勇气和尊重.</p>
<p>暂时还没有很深的理解,不过接下来的几个月里有足够的时间和资源去好好理解它:)</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=210</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>慢回弹颈椎保健枕-码农必备!</title>
		<link>http://veryzhang.cn/?p=208</link>
		<comments>http://veryzhang.cn/?p=208#comments</comments>
		<pubDate>Sun, 15 Mar 2009 14:56:57 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=208</guid>
		<description><![CDATA[http://www.amazon.cn/mn/detailApp?ref=DT_RV&#38;uid=168-4522634-8800229&#38;prodid=habh310519

当然我是在超市买的仿制品,160,呵呵,不过用起来感觉已经相当不错了.

过去的半年里老是被自己的颈椎所困扰,没事动一下就咔吧响,最近开始酸疼,严重影响工作效率.

<span class="readmore"><a href="http://veryzhang.cn/?p=208" title="慢回弹颈椎保健枕-码农必备!">阅读全文——共224字</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.cn/mn/detailApp?ref=DT_RV&amp;uid=168-4522634-8800229&amp;prodid=habh310519" target="_blank">http://www.amazon.cn/mn/detailApp?ref=DT_RV&amp;uid=168-4522634-8800229&amp;prodid=habh310519</a></p>
<p>当然我是在超市买的仿制品,160,呵呵,不过用起来感觉已经相当不错了.</p>
<p>过去的半年里老是被自己的颈椎所困扰,没事动一下就咔吧响,最近开始酸疼,严重影响工作效率.</p>
<p>开始还特愁,这么年轻颈椎就这样了,老了咋办&#8230;&#8230;</p>
<p>没想到换了这个枕头睡了几天,脖子重新找到高中时的感觉了,哈哈,爽!</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=208</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>试用jlink v7</title>
		<link>http://veryzhang.cn/?p=201</link>
		<comments>http://veryzhang.cn/?p=201#comments</comments>
		<pubDate>Wed, 11 Mar 2009 15:41:38 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=201</guid>
		<description><![CDATA[今天试用了下山寨版的jlink仿真器,感觉相当不错:

1. 便宜,白菜价,我在淘宝上花98块钱买的,运费10块;

2. 盗版水平高,完全兼容正版jlink v7,可以直接下载segger的正版软件来使用;

<span class="readmore"><a href="http://veryzhang.cn/?p=201" title="试用jlink v7">阅读全文——共1128字</a></span>]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL /> <w:BalanceSingleByteDoubleByteWidth /> <w:DoNotLeaveBackslashAlone /> <w:ULTrailSpace /> <w:DoNotExpandShiftReturn /> <w:AdjustLineHeightInTable /> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> <w:UseFELayout /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman","serif";} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; color: #1f497d;">今天试用了下山寨版的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlink</span><span style="font-size: 10.5pt; color: #1f497d;">仿真器</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">感觉相当不错</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">便宜</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">白菜价</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">我在淘宝上花</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">98</span><span style="font-size: 10.5pt; color: #1f497d;">块钱买的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">运费</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">10</span><span style="font-size: 10.5pt; color: #1f497d;">块</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">盗版水平高</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">完全兼容正版</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlink v7,</span><span style="font-size: 10.5pt; color: #1f497d;">可以直接下载</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">segger</span><span style="font-size: 10.5pt; color: #1f497d;">的正版软件来使用</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">支持所有</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">ARM7/9 core,</span><span style="font-size: 10.5pt; color: #1f497d;">支持</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">ads,iar,keil,realview,gdb server</span><span style="font-size: 10.5pt; color: #1f497d;">等开发环境</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">速度快</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,ARM9</span><span style="font-size: 10.5pt; color: #1f497d;">的下载速度为</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">550KB/s;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>5.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">体积小</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">只需一根</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">usb</span><span style="font-size: 10.5pt; color: #1f497d;">线</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">不用外接电源</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">出差必备</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>6.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">使用方便</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">安装</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">segger</span><span style="font-size: 10.5pt; color: #1f497d;">提供的驱动后</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">在</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">axd</span><span style="font-size: 10.5pt; color: #1f497d;">的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">configure target</span><span style="font-size: 10.5pt; color: #1f497d;">里面添加</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlinkrdi.dll,</span><span style="font-size: 10.5pt; color: #1f497d;">然后就可以下载镜像并调试了</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">无需单独运行一个类似</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">multi-ice</span><span style="font-size: 10.5pt; color: #1f497d;">的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">RDI</span><span style="font-size: 10.5pt; color: #1f497d;">代理</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>7.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">可以二次开发</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">网上有热心群众提供的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">sdk</span><span style="font-size: 10.5pt; color: #1f497d;">头文件</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">可以调用</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlinkrdi.dll</span><span style="font-size: 10.5pt; color: #1f497d;">中的函数</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">实现与</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">axd</span><span style="font-size: 10.5pt; color: #1f497d;">一样的功能</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">如读写任意内存</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">读写任意寄存器</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>8.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">由速度快和二次开发还可以衍生出很多新的应用</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">我暂时想到的有下面几个</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span></p>
<p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">去掉串口</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">将调试信息通过</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">semihosting</span><span style="font-size: 10.5pt; color: #1f497d;">的方式打印到</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">AXD</span><span style="font-size: 10.5pt; color: #1f497d;">的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">console</span><span style="font-size: 10.5pt; color: #1f497d;">中</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">速度极快</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">秒杀串口</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>b)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">通过第三番软件实现</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">dump memory</span><span style="font-size: 10.5pt; color: #1f497d;">的功能</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,axd</span><span style="font-size: 10.5pt; color: #1f497d;">最多只能</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">dump 1MB</span><span style="font-size: 10.5pt; color: #1f497d;">的数据</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,jlink</span><span style="font-size: 10.5pt; color: #1f497d;">提供了一个</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jmem</span><span style="font-size: 10.5pt; color: #1f497d;">程序</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">可以查看整个内存空间的所有数据</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">但是扩展功能很少</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span><span style="font-size: 10.5pt; color: #1f497d;">我们可以自己写一个很简单的程序</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">将</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">32M</span><span style="font-size: 10.5pt; color: #1f497d;">内存全部</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">dump</span><span style="font-size: 10.5pt; color: #1f497d;">下来</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">耗时应该在</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">1</span><span style="font-size: 10.5pt; color: #1f497d;">分钟左右</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">便于后续分析与调试</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -21pt;"><!--[if !supportLists]--></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>9.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">当然</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlink</span><span style="font-size: 10.5pt; color: #1f497d;">也有些不好用的地方</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span></p>
<p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">AXD</span><span style="font-size: 10.5pt; color: #1f497d;">有时能自动认到</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">ARM9,</span><span style="font-size: 10.5pt; color: #1f497d;">有时不能</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">但是</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">ARM7</span><span style="font-size: 10.5pt; color: #1f497d;">就每次都行</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">具体原因尚不清楚</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>b)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; color: #1f497d;">采用默认配置调试</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">公司的芯片,</span><span style="font-size: 10.5pt; color: #1f497d;">会出现</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">nand</span><span style="font-size: 10.5pt; color: #1f497d;">和</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">sd</span><span style="font-size: 10.5pt; color: #1f497d;">卡无法工作的问题</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">如果改变</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jtag</span><span style="font-size: 10.5pt; color: #1f497d;">时钟频率的话</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">连串口都会挂掉</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span><span style="font-size: 10.5pt; color: #1f497d;">后来经我采用</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">”</span><span style="font-size: 10.5pt; color: #1f497d;">穷举大法</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">”</span><span style="font-size: 10.5pt; color: #1f497d;">验证</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">发现是</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">reset</span><span style="font-size: 10.5pt; color: #1f497d;">的问题</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,jlink</span><span style="font-size: 10.5pt; color: #1f497d;">提供了好几种</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">reset</span><span style="font-size: 10.5pt; color: #1f497d;">策略</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">只有一种叫</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">”break at 0&#215;0”</span><span style="font-size: 10.5pt; color: #1f497d;">的策略靠谱</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">可以使</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">芯片</span><span style="font-size: 10.5pt; color: #1f497d;">正常工作</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">具体原因尚不清楚</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">,</span><span style="font-size: 10.5pt; color: #1f497d;">可能与外设的</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">reset</span><span style="font-size: 10.5pt; color: #1f497d;">有关</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">?</span><span style="font-size: 10.5pt; color: #1f497d;">期待高人解答</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">;</span></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-size: 10.5pt; color: #1f497d;">附</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlink</span><span style="font-size: 10.5pt; color: #1f497d;">介绍</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"> </span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><a href="http://www.embedded-soc.com/Products/Emluator/J-Link.htm">http://www.embedded-soc.com/Products/Emluator/J-Link.htm</a></span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">jlink</span><span style="font-size: 10.5pt; color: #1f497d;">驱动下载</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span><span lang="EN-US"> </span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><a href="http://www.segger.com/download_jlink.html">http://www.segger.com/download_jlink.html</a></span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 10.5pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">taobao</span><span style="font-size: 10.5pt; color: #1f497d;">连接</span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US">:</span><span lang="EN-US"> </span><span style="font-size: 10.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #1f497d;" lang="EN-US"><a href="http://item.taobao.com/auction/item_detail.htm?itemID=be2cccd4812bfb5b1315e23b4d68a4aa&amp;ali_refid=a3_419252_1006:380360407:6:jlink:0eab5f82c5bff90f096e8c31db7263d5">http://item.taobao.com/auction/item_detail.htm?itemID=be2cccd4812bfb5b1315e23b4d68a4aa&amp;ali_refid=a3_419252_1006:380360407:6:jlink:0eab5f82c5bff90f096e8c31db7263d5</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=201</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>人品爆发</title>
		<link>http://veryzhang.cn/?p=199</link>
		<comments>http://veryzhang.cn/?p=199#comments</comments>
		<pubDate>Tue, 10 Mar 2009 14:17:07 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=199</guid>
		<description><![CDATA[一、历时三个月，备案申请终于通过；

二、周日下午在真功夫吃饭，开发票中的10块钱大奖。

 

<span class="readmore"><a href="http://veryzhang.cn/?p=199" title="人品爆发">阅读全文——共48字</a></span>]]></description>
			<content:encoded><![CDATA[<p>一、历时三个月，备案申请终于通过；</p>
<p>二、周日下午在真功夫吃饭，开发票中的10块钱大奖。</p>
<p> </p>
<p>撰文以记之</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=199</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在ubuntu下体验review board(二)</title>
		<link>http://veryzhang.cn/?p=196</link>
		<comments>http://veryzhang.cn/?p=196#comments</comments>
		<pubDate>Sun, 22 Feb 2009 16:08:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=196</guid>
		<description><![CDATA[安装结束之后,在浏览器中打开http://localhost,就是review board的界面了.

不过界面十分的土,只有文字,还不对齐,添加了svn的repo后,在create new review request页面总是提示500错误,郁闷的很,看来还需要再折腾一下才能用起来.

不过在rb的demo系统中,也可以了解到rb的基本使用了:

<span class="readmore"><a href="http://veryzhang.cn/?p=196" title="在ubuntu下体验review board(二)">阅读全文——共403字</a></span>]]></description>
			<content:encoded><![CDATA[<p>安装结束之后,在浏览器中打开http://localhost,就是review board的界面了.</p>
<p>不过界面十分的土,只有文字,还不对齐,添加了svn的repo后,在create new review request页面总是提示500错误,郁闷的很,看来还需要再折腾一下才能用起来.</p>
<p>不过在rb的demo系统中,也可以了解到rb的基本使用了:</p>
<p><a href="http://demo.review-board.org" target="_blank">http://demo.review-board.org</a></p>
<p>之前在review board的文档中,看到review board提供了一种pre commit的方式,感觉很不错,因为如果commit已经完成,而review没有通过,committer再将代码修改回去,log将会十分混乱.</p>
<p>当时还好奇review board是如何实现这一点的,原来就是将diff上传到服务器,然后针对这个diff进行review,而不是对svn仓库中的代码进行review,这个方法确实很不错,值得借鉴.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=196</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>单元测试</title>
		<link>http://veryzhang.cn/?p=194</link>
		<comments>http://veryzhang.cn/?p=194#comments</comments>
		<pubDate>Sun, 22 Feb 2009 16:06:13 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=194</guid>
		<description><![CDATA[首先必须承认我是一个土人:一开始有一个想法的时候喜欢使劲上网搜资料,但是都只瞄一眼就放在那里,按照自己的理解去狂做一气,这时再看看之前找的资料,原来都是在做无用功&#8230;.

还是关于编程质量的问题,之前一直在想,用编译器的前端,做一个扫描器,然后可以定制规则,从语法树中查找相关的错误,然后可以在所有的危险代码处插桩,进行运行时检查.

中间还正儿八经的学习了编译原理,看了很久gcc的代码,收获相当不小,但是距离实用差距还是相当的大.

<span class="readmore"><a href="http://veryzhang.cn/?p=194" title="单元测试">阅读全文——共597字</a></span>]]></description>
			<content:encoded><![CDATA[<p>首先必须承认我是一个土人:一开始有一个想法的时候喜欢使劲上网搜资料,但是都只瞄一眼就放在那里,按照自己的理解去狂做一气,这时再看看之前找的资料,原来都是在做无用功&#8230;.</p>
<p>还是关于编程质量的问题,之前一直在想,用编译器的前端,做一个扫描器,然后可以定制规则,从语法树中查找相关的错误,然后可以在所有的危险代码处插桩,进行运行时检查.<br />
中间还正儿八经的学习了编译原理,看了很久gcc的代码,收获相当不小,但是距离实用差距还是相当的大.</p>
<p>今天又上网转了转,发现我需要的这个东西其实就是单元测试&#8230;.</p>
<p>其实一个概念很简单,可以说是极其简单,但是具体的实现总是非常复杂,有太多需要考虑的问题.</p>
<p>关于单元测试,一开始关注的是cunit,然后check+autotools,然后是cpptest,还有visual unit.<br />
前面几个开源的暂且不提,功能还是太弱了,重点在cpptest,这个东东完全就是我想要的那个东西,而且支持rvds的IDE和ARM ADS1.2的编译器,实在是无话可说了.<br />
中午从电驴上下载一个破解版,试用了一下,感觉甚爽,只是不知道怎么试用arm的编译器编译,以及不确定如何插桩,不过看上去还是相当不错的:</p>
<ul>
<li> 包含完整的misra rules,还有很多其他的rule.</li>
</ul>
<ul>
<li> 自动单元测试做的很好.</li>
</ul>
<ul>
<li> coding standard也做的很好.</li>
</ul>
<p>回头继续评估一下,如果好用的话,真的有必要忽悠老大买个正版的来用用,呵呵</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=194</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于找到完整的misra rule了</title>
		<link>http://veryzhang.cn/?p=190</link>
		<comments>http://veryzhang.cn/?p=190#comments</comments>
		<pubDate>Sun, 22 Feb 2009 05:06:14 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=190</guid>
		<description><![CDATA[安装CPP test,在安装目录下面的rules/misra和rules/misra2004里面就是,每一条rule都有一个htm文件来描述,吼吼

附cpp test的下载地址:

http://lib.verycd.com/2006/05/10/0000102394.html

<span class="readmore"><a href="http://veryzhang.cn/?p=190" title="终于找到完整的misra rule了">阅读全文——共322字</a></span>]]></description>
			<content:encoded><![CDATA[<p>安装CPP test,在安装目录下面的rules/misra和rules/misra2004里面就是,每一条rule都有一个htm文件来描述,吼吼</p>
<p>附cpp test的下载地址:</p>
<p><a href="http://lib.verycd.com/2006/05/10/0000102394.html" target="_blank">http://lib.verycd.com/2006/05/10/0000102394.html</a></p>
<p>另外在电驴的搜索选项里面搜&#8221;parasoft&#8221;,也能搜到几个安装包,不过破解的似乎有问题.</p>
<p>不过自定义rule用不了,有点不爽,呵呵</p>
<hr />
刚找到了parasoft的国内代理:<a href="http://www.superst.com.cn" target="_blank">http://www.superst.com.cn</a>,原来专业版是不支持图形化定制rules的,就是说至少手动编辑可也用喽?</p>
<p>另外找到了stub的选项,没看到代码里的改动,可能是编译时自动做的,保持源代码不受影响.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=190</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AOC 210V显示器色彩调整</title>
		<link>http://veryzhang.cn/?p=187</link>
		<comments>http://veryzhang.cn/?p=187#comments</comments>
		<pubDate>Thu, 19 Feb 2009 15:34:15 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=187</guid>
		<description><![CDATA[家里的显示器是aoc 210v5,当时是最便宜的一款22寸显示器,图便宜就买了.

结果用到现在发现windows下色彩总是不多,把小毛的照片搞成桌面之后,一直看不清脸,别的图片也是很黑,视频倒还凑合.

但是奇怪的是linux正常得很,没有任何问题,看上去似乎是驱动的问题.

<span class="readmore"><a href="http://veryzhang.cn/?p=187" title="AOC 210V显示器色彩调整">阅读全文——共1089字</a></span>]]></description>
			<content:encoded><![CDATA[<p>家里的显示器是aoc 210v5,当时是最便宜的一款22寸显示器,图便宜就买了.<br />
结果用到现在发现windows下色彩总是不多,把小毛的照片搞成桌面之后,一直看不清脸,别的图片也是很黑,视频倒还凑合.<br />
但是奇怪的是linux正常得很,没有任何问题,看上去似乎是驱动的问题.</p>
<p>后来搜了一下,发现还真是色彩调节参数的问题,确切的说是色温的参数:<br />
<a href="http://www.skxyjs.com/Soft/ShowSoft.asp?SoftID=195">http://www.skxyjs.com/Soft/ShowSoft.asp?SoftID=195</a><br />
转载过来,做个备份:</p>
<p>PSTOY的文章正好说明了AOC 210V的校色效果，参考价值极高。如同作者所说，经过与Cinema显示器的对比，210V的画面显得偏蓝、偏冷，而且图像容易显得过曝（太亮）。</p>
<p>PSTOY用<a href="http://www.colorvision.com/product-mc-s2p.php" target="_blank">Colorvision Spyder Pro 2</a>蜘蛛校色器对AOC 210V进行了调校，校色时用了2.2的灰度和6500K的色彩空间，既然都是AOC 210V的用户，我们就可以坐享其成，按下边的说明使用他的校色文件即可：</p>
<p>安装软件</p>
<p>首先要安装免费的Monitor Calibration Wizard，然后用这个软件载入校准后的设置档。MCW这个软件很小，也不耗资源，还能够强制所有程序（包括游戏在内）使用经过校准的色彩文件。</p>
<p>1、下载安装MCW：<a title="Monitor Calibration Wizard 1.0 " href="http://www.skxyjs.com/Soft/UploadSoft/200811/2008111617061646.exe">Monitor Calibration Wizard 1.0 </a></p>
<p>2、下载该文章作者校准后生成的设置档：<a title="AOC 210V colour profiles" href="http://www.skxyjs.com/Soft/UploadSoft/200811/2008111617110828.rar">AOC 210V colour profiles</a>。下载后解压，把.MCW后缀的文件拷进C:\Program Files\Monitor Calibration Wizard 文件夹下（这里的“C:”是系统分区）。</p>
<p><a href="http://www.skxyjs.com/Soft/UploadSoftPic/200811/2008111617012869.bmp" target="_blank"><img src="http://www.skxyjs.com/Soft/UploadSoftPic/200811/2008111617012869.bmp" border="0" alt="" width="187" height="140" /> </a></p>
<p>1、按下显示器右下角的MENU键，进入设置菜单。<br />
2、进入“其它”，移动光标至“重置”，按下MENU键选择“是”，把显示器恢复到出厂设置。<br />
3、进入“色温”菜单，将“色温”调到“使用者设定”。<br />
4、将“微调-红”改为 58<br />
5、将“微调-绿”改为 55<br />
6、将“微调-蓝”改为 55</p>
<p>应用色彩档案<br />
<a href="http://www.skxyjs.com/Soft/UploadSoftPic/200811/2008111617023680.bmp" target="_blank"><img src="http://www.skxyjs.com/Soft/UploadSoftPic/200811/2008111617023680.bmp" border="0" alt="" width="187" height="133" /> </a><br />
1、运行Monitor Calibration Wizard（开始 &gt; 所有程序 &gt; Monitor Calibration Wizard &gt; Monitor Calibration Wizard）；<br />
2、在&#8221;Load Profile&#8221;的下拉菜单中选择“AOC 210v C50 B90 R58 G55 B55”，点击“Load”，这时显示器的显示色彩会发生变化，但愿能变得让各位看客都觉得顺眼哈！<br />
3、如果新的颜色很顺眼，就可以勾选MCW窗口下端的前2两个选项，让MCW开机自启动，自动强制所有程序使用当前色彩设置。</p>
<p>俺建议：直接选择第1项：AOC 210v C50 B50 R58 G55 B55</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=187</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>调试有感</title>
		<link>http://veryzhang.cn/?p=185</link>
		<comments>http://veryzhang.cn/?p=185#comments</comments>
		<pubDate>Thu, 19 Feb 2009 15:29:36 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=185</guid>
		<description><![CDATA[从昨天到今天,确切的说还有前天,我都在一个平台上调试,为了porting我负责的某核心功能.

在这个平台上做了快两年了,虽然前面一年多基本处于懵懂状态,但是后期对平台的把握还是越来越透彻了,但是这次调试还是一头雾水,有很多问题无法解决,仔细想了下大概有这么几个直接原因:

1.系统死机,普通的abort不可怕,难搞的是内存越界操作,还有堆栈溢出.越界的难点在于你很难判定某段内存是谁在什么时候改写的,堆栈溢出的困难在于调试器无法给出backtrace信息,pc指针已经到了一个莫名其妙的地方,就像你早上一觉醒来发现自己躺在沙漠里&#8230;

<span class="readmore"><a href="http://veryzhang.cn/?p=185" title="调试有感">阅读全文——共745字</a></span>]]></description>
			<content:encoded><![CDATA[<p>从昨天到今天,确切的说还有前天,我都在一个平台上调试,为了porting我负责的某核心功能.<br />
在这个平台上做了快两年了,虽然前面一年多基本处于懵懂状态,但是后期对平台的把握还是越来越透彻了,但是这次调试还是一头雾水,有很多问题无法解决,仔细想了下大概有这么几个直接原因:<br />
1.系统死机,普通的abort不可怕,难搞的是内存越界操作,还有堆栈溢出.越界的难点在于你很难判定某段内存是谁在什么时候改写的,堆栈溢出的困难在于调试器无法给出backtrace信息,pc指针已经到了一个莫名其妙的地方,就像你早上一觉醒来发现自己躺在沙漠里&#8230;<br />
2.移植过程中的work around,做移植的同事之前没有接触过这个平台,项目进度压力又很紧,于是系统可以work成了压倒一切的目标,而很多的work around是否正确就被忽视了.但是这种小的修改或者调整往往隐藏很深,某些特定条件下系统的行为就变的十分诡异,却又没有任何的线索.</p>
<p>移植的问题我觉得应该通过记录所有的修改来解决,即做移植的人首先拿到一个在原始环境下可以工作的版本,然后记录下自己增减,调整了哪些文件,宏,编译选项,流程等等,这样等后续有人在这上面继续工作的时候,至少知道有哪些改动可能影响到了系统的行为.<br />
不过对于我现在的处境,似乎可以通过svn的log得到一些帮助?明天试一下.</p>
<p>死机的话,我以前比较倾向于工具,包括静态分析工具和运行时的调试工具,也花了很多时间去研究和实践.<br />
不过最近有些醒悟,好的工具带来的好处可能要大于好的程序员,但是差的工具或者没有工具,它的危害要远远小于一个烂的程序员,远小于一种很差的编程习惯,也远小于一套不够严谨的测试流程.</p>
<p>基本上,80%的bug看上去都是在梦游状态下写出来的,哪怕再多思考一下下,很多bug就可以避免.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=185</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[代码学习]利用宏扩展提高代码的可读性</title>
		<link>http://veryzhang.cn/?p=154</link>
		<comments>http://veryzhang.cn/?p=154#comments</comments>
		<pubDate>Sun, 15 Feb 2009 16:57:47 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=154</guid>
		<description><![CDATA[上周看了一下ffmpeg,在ffmpeg.c-&#62;main()-&#62;avcodec_register_all()中看到这样一些代码:

REGISTER_DECODER (AASC, aasc);

REGISTER_DECODER (AMV, amv);

<span class="readmore"><a href="http://veryzhang.cn/?p=154" title="[代码学习]利用宏扩展提高代码的可读性">阅读全文——共696字</a></span>]]></description>
			<content:encoded><![CDATA[<p>上周看了一下ffmpeg,在ffmpeg.c-&gt;main()-&gt;avcodec_register_all()中看到这样一些代码:</p>
<blockquote><p>REGISTER_DECODER (AASC, aasc);<br />
REGISTER_DECODER (AMV, amv);<br />
REGISTER_ENCDEC  (ASV1, asv1);<br />
REGISTER_ENCDEC  (ASV2, asv2);<br />
REGISTER_DECODER (AVS, avs);</p></blockquote>
<p>很显然是在注册各种codec的结构体,一是把各codec相关的信息挂载到全局链表中,二要通过宏定义来判断哪些codec需要注册,哪些不需要.</p>
<p>REGISTER_DECODER的宏是这样定义的:</p>
<blockquote><p>#define REGISTER_DECODER(X,x) {<br />
extern AVCodec x##_decoder;<br />
if(CONFIG_##X##_DECODER)  avcodec_register(&amp;x##_decoder); }</p></blockquote>
<p>对REGISTER_DECODER (AASC, aasc);来说,展开来就是这样:</p>
<blockquote><p>extern AVCodec aasc_decoder;</p>
<p>if(CONFIG_AASC_DECODER)</p>
<p>avcodec_register(&amp;aasc_decoder);</p></blockquote>
<p>原理很简单,但是用的却很巧妙,主要是##这个宏用的人并不是很多,在这里倒是个很恰当的适用场景.</p>
<p>我觉得这种用法的好处有好几个:</p>
<ul>
<li>简化代码,使主要逻辑一目了然,这时最大的优点.我们现在的项目里就有很多这样的函数,宏掺杂在代码中,怎么排版都觉得很乱,一眼看上去根本不知道这些代码的目的是什么.</li>
<li>减少coding工作量,这跟简化代码基本是一个意思,呵呵.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=154</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>巨难使的mcp2make</title>
		<link>http://veryzhang.cn/?p=152</link>
		<comments>http://veryzhang.cn/?p=152#comments</comments>
		<pubDate>Sun, 15 Feb 2009 16:37:30 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=152</guid>
		<description><![CDATA[mcp2make是arm提供的将mcp工程文件转换成makefile文件的工具.

但是我一直怀疑这是arm的某实习生写的,因为实在太难使了,基本不具有可用性.

话说这么小的一个程序,居然还有安装文件&#8230;.

<span class="readmore"><a href="http://veryzhang.cn/?p=152" title="巨难使的mcp2make">阅读全文——共209字</a></span>]]></description>
			<content:encoded><![CDATA[<p>mcp2make是arm提供的将mcp工程文件转换成makefile文件的工具.<br />
但是我一直怀疑这是arm的某实习生写的,因为实在太难使了,基本不具有可用性.</p>
<p>话说这么小的一个程序,居然还有安装文件&#8230;.<br />
然后生成的makefile默认就没有object目录,只能手动添加.<br />
而且文件名前面不包含路径&#8230;.</p>
<p>真是还不如自己写一个快.</p>
<p>顺便看了一下,ads生成的xml文件倒是挺简单,一目了然,回头还是自己找时间写个转换软件吧.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=152</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在ubuntu下体验review board(一)</title>
		<link>http://veryzhang.cn/?p=149</link>
		<comments>http://veryzhang.cn/?p=149#comments</comments>
		<pubDate>Sun, 15 Feb 2009 04:37:50 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=149</guid>
		<description><![CDATA[最近想考察一下好用的code review工具，发现revoew board不错，于是准备在本地安装一个测试下，但是得先装apache，mysql，php和svn。

安装apache,mysql,php：

apt-get install apache2 libapache2-mod-pytohn libapache2-svn mysql python-mysqldb php pysvn

<span class="readmore"><a href="http://veryzhang.cn/?p=149" title="在ubuntu下体验review board(一)">阅读全文——共852字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近想考察一下好用的code review工具，发现revoew board不错，于是准备在本地安装一个测试下，但是得先装apache，mysql，php和svn。</p>
<p>安装apache,mysql,php：</p>
<blockquote><p>apt-get install apache2 libapache2-mod-pytohn libapache2-svn mysql python-mysqldb php pysvn</p></blockquote>
<p>安装svn：</p>
<blockquote><p>apt-get install subversion</p></blockquote>
<p>建立svn 仓库：</p>
<blockquote><p><span style="font-size: 100%;">sudo mkdir /home/svn<br />
</span><code>sudo svnadmin create /home/svn<br />
</code><code>sudo chown -R www-data:www-data /home/svn</code></p></blockquote>
<p><span style="font-size: 100%;">修改apache的配置文件</span> /etc/apache2/mods-available/dav_svn.conf</p>
<blockquote><p>&lt;Location  /svn&gt;<br />
DAV svn<br />
SVNParentPath /home/svn/<br />
AutoType  Basic<br />
AutoName &#8220;My Respository&#8221;<br />
AutoUserFile /home/svn/passwd<br />
Require  valid-user<br />
&lt;/Location&gt;</p></blockquote>
<p>创建用户名和密码：</p>
<blockquote><p>htpasswd -c /home/svn/passwd veryzhang</p></blockquote>
<p>使能apache的某些模块：</p>
<blockquote><p>a2enmod dav dav_fs dav_svn</p></blockquote>
<p>安装web界面的mysql管理工具：</p>
<blockquote><p>apt-get install phpmyadmin</p></blockquote>
<p>重新启动apache：</p>
<blockquote><p><span style="font-size: 100%;"> /etc/init.d/apache2 restart</span></p></blockquote>
<hr />
<p>安装review board：</p>
<blockquote><p>apt-get install python-setuptools<br />
easy_install ReviewBoard</p></blockquote>
<p>安装review board目录：</p>
<blockquote><p>rb-site install /home/rb</p></blockquote>
<p>安装完成之后,将/home/rb/conf/mod-python.conf替换掉/etc/apache2/sites-avaliable/default,review-board就可以运行了.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=149</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>如何创建绿色版的gvim</title>
		<link>http://veryzhang.cn/?p=144</link>
		<comments>http://veryzhang.cn/?p=144#comments</comments>
		<pubDate>Sat, 14 Feb 2009 14:11:10 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=144</guid>
		<description><![CDATA[1. 下载 ftp://ftp.vim.org/pub/vim/pc/vim72rt.zip

2. 下载 ftp://ftp.vim.org/pub/vim/pc/gvim72.zip

3. 在同一目录下解压, 绿色版的 gvim 就在 vim/vim72 里;

<span class="readmore"><a href="http://veryzhang.cn/?p=144" title="如何创建绿色版的gvim">阅读全文——共169字</a></span>]]></description>
			<content:encoded><![CDATA[<p>1. 下载 <a href="ftp://ftp.vim.org/pub/vim/pc/vim72rt.zip" target="_blank">ftp://ftp.vim.org/pub/vim/pc/vim72rt.zip</a><br />
2. 下载 <a href="ftp://ftp.vim.org/pub/vim/pc/gvim72.zip" target="_blank">ftp://ftp.vim.org/pub/vim/pc/gvim72.zip</a><br />
3. 在同一目录下解压, 绿色版的 gvim 就在 vim/vim72 里;<br />
4. 在vim/ 下创建_vimrc文件作为.vimrc;<br />
5. 运行 vim/vim72/gvim.exe.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=144</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scons&#8212;替代make的软件构建工具(二)</title>
		<link>http://veryzhang.cn/?p=135</link>
		<comments>http://veryzhang.cn/?p=135#comments</comments>
		<pubDate>Tue, 10 Feb 2009 15:23:05 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=135</guid>
		<description><![CDATA[本来以为安装属于小菜一碟,没想到也折腾了一小会儿.

鉴于python最新版本已经是3.0了,所以我直接下载了一个python3.0装上了,结果scons怎么也跑不起来,提示一些看不懂的错误,因为对python一窍不通,也不知道出了啥错误.

后来还是卸载了3.0,装上了2.6,一切ok.

<span class="readmore"><a href="http://veryzhang.cn/?p=135" title="Scons&#8212;替代make的软件构建工具(二)">阅读全文——共1150字</a></span>]]></description>
			<content:encoded><![CDATA[<p>本来以为安装属于小菜一碟,没想到也折腾了一小会儿.</p>
<p>鉴于python最新版本已经是3.0了,所以我直接下载了一个python3.0装上了,结果scons怎么也跑不起来,提示一些看不懂的错误,因为对python一窍不通,也不知道出了啥错误.</p>
<p>后来还是卸载了3.0,装上了2.6,一切ok.</p>
<p>看来python3.0的兼容性似乎是有些问题.</p>
<p>Btw,安装结束后要将&#8221;C:Python26Scripts&#8221;添加到系统的PATH变量中,才能直接运行scons.</p>
<p>顺便瞄了一眼scons.bat文件的内容,似乎是把.py文件编译成可执行文件,然后安装?</p>
<hr />如果想生成onject文件的话,只要在SConstruct中做下面的修改:</p>
<blockquote><p>Object(&#8217;hello.c&#8217;)</p></blockquote>
<p>然后运行scons就可以了.</p>
<p>删除所有的生成文件:</p>
<blockquote><p>scons -c</p></blockquote>
<p>如果想在编译的过程中增加打印信息,直接调用print就可以了:</p>
<blockquote><p>print &#8220;Calling Program(&#8217;hello.c&#8217;)&#8221;<br />
Program(&#8217;hello.c&#8217;)<br />
print &#8220;Calling Program(&#8217;goodbye.c&#8217;)&#8221;<br />
Program(&#8217;goodbye.c&#8217;)<br />
print &#8220;Finished calling Program()&#8221;</p></blockquote>
<p>输出就会是这个样子:</p>
<blockquote><p>% scons<br />
scons: Reading SConscript files &#8230;<br />
Calling Program(&#8217;hello.c&#8217;)<br />
Calling Program(&#8217;goodbye.c&#8217;)<br />
Finished calling Program()<br />
scons: done reading SConscript files.<br />
scons: Building targets &#8230;<br />
cc -o goodbye.o -c goodbye.c<br />
cc -o goodbye goodbye.o<br />
cc -o hello.o -c hello.c<br />
cc -o hello hello.o<br />
scons: done building targets.</p></blockquote>
<p>如果不想看到太多的编译信息:</p>
<blockquote><p>C:>scons -Q<br />
      cl /Fohello.obj /c hello.c /nologo<br />
      link /nologo /OUT:hello.exe hello.obj
</p></blockquote>
<p>如何指定可执行文件的名字呢?</p>
<blockquote><p>Program(&#8217;new_hello&#8217;, &#8216;hello.c&#8217;)
</p></blockquote>
<p>一次编译多个文件:</p>
<blockquote><p>Program(['prog.c', 'file1.c', 'file2.c'])</p></blockquote>
<p>或者:</p>
<blockquote><p>Program(&#8217;program&#8217;, ['prog.c', 'file1.c', 'file2.c'])</p></blockquote>
<p>还可以编译一个目录下所有的.c文件(当然,通过正则表达式可以扩展到很多种规则):</p>
<blockquote><p>Program(&#8217;program&#8217;, Glob(&#8217;*.c&#8217;))
</p></blockquote>
<p>如何连接其他的库呢:</p>
<blockquote><p>Library(&#8217;foo&#8217;, ['f1.c', 'f2.c', 'f3.c'])
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=135</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scons&#8212;替代make的软件构建工具(一)</title>
		<link>http://veryzhang.cn/?p=130</link>
		<comments>http://veryzhang.cn/?p=130#comments</comments>
		<pubDate>Mon, 09 Feb 2009 16:45:11 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>
		<category><![CDATA[Scons Arm Build]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=130</guid>
		<description><![CDATA[周末的时候在google reader上闲逛,看到dreamhead介绍V8引擎的一篇文章,里面提到V8使用Scons来管理的,而不是传统的GNU Make.

javascript引擎跟我八竿子打不着,不过软件构建工具可是任何程序员都离不开的,呵呵.

于是多看了一眼Scons:

<span class="readmore"><a href="http://veryzhang.cn/?p=130" title="Scons&#8212;替代make的软件构建工具(一)">阅读全文——共953字</a></span>]]></description>
			<content:encoded><![CDATA[<p>周末的时候在google reader上闲逛,看到<a href="http://dreamhead.blogbus.com/logs/34771424.html" target="_blank">dreamhead介绍V8引擎的一篇文章</a>,里面提到V8使用Scons来管理的,而不是传统的GNU Make.<br />
javascript引擎跟我八竿子打不着,不过软件构建工具可是任何程序员都离不开的,呵呵.<br />
于是多看了一眼Scons:</p>
<ul>
<li>基于python构建;</li>
<li>自动分析C/C++文件的依赖关系;</li>
<li>支持MS VS6和VS.net的项目管理文件,如.dsp, .dsw, .sln and .vcproj等;</li>
<li>支持类似make -j的多线程编译;</li>
<li>对交叉编译的良好支持;</li>
<li>跨平台.</li>
</ul>
<p>总的看起来还是挺吸引人的,不过似乎没有可视化的添加文件工具,比如我一个目录下面有100个.c,似乎只能手动或者写个脚本生成命令列表了.不过这实在也算不上什么难事,毕竟添加删除文件的操作毕竟是少数.</p>
<p>下面的例子是从SCons.org上抄的:</p>
<p>新建一文件hello.c,内容如下:</p>
<blockquote><p>int main()<br />
{<br />
printf(&#8221;Hello, world!\n&#8221;);<br />
}</p></blockquote>
<p>然后建立一个文件SConstruct(类似Makefile):</p>
<blockquote><p>Program(&#8217;hello.c&#8217;)</p></blockquote>
<p>然后在CMD下面运行:</p>
<blockquote><p>C:\&gt;scons<br />
scons: Reading SConscript files &#8230;<br />
scons: done reading SConscript files.<br />
scons: Building targets &#8230;<br />
cl /Fohello.obj /c hello.c /nologo<br />
link /nologo /OUT:hello.exe hello.obj<br />
scons: done building targets.</p></blockquote>
<p>就会生成相应的可执行文件了.</p>
<hr />后面还有些功课要做:</p>
<ul>
<li>通过配置ENVIRONMENT实现交叉编译,利用ADS的工具链,编译ARM程序;</li>
<li>写一个脚本可以方便的添加一个目录下的所有文件,包括子目录的文件;</li>
<li>如何配置不同的参数?比如MAKE -D这样的功能;</li>
<li>如何创建不同的参数集合,可以针对某些子集进行build?主要针对工程的一些小的变种,复用绝大部分的系统代码,但是又有较分散的多处代码与众不同,以致于不能合并到trunk中;</li>
<li>能否在编译的过程中定制一些check的过程?比如lint之类.</li>
</ul>
<p>今天没有时间,明天看看能不能抽出时间继续研究下,感觉这些问题对Scons来说都不是问题,手到擒来即可,呵呵</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=130</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用VS2005编译ARM程序</title>
		<link>http://veryzhang.cn/?p=123</link>
		<comments>http://veryzhang.cn/?p=123#comments</comments>
		<pubDate>Thu, 05 Feb 2009 16:38:30 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=123</guid>
		<description><![CDATA[话说这几个月我突然对编译工具着了道,近乎痴迷,也不知道是咋了.

可能是现在工作的环境中,大家很少去研究很基础的东西,都在绕着走;再就是研究这些东西非常有成就感,因为之前的神秘感太强烈了,呵呵.

ok,言归正传:

<span class="readmore"><a href="http://veryzhang.cn/?p=123" title="使用VS2005编译ARM程序">阅读全文——共1319字</a></span>]]></description>
			<content:encoded><![CDATA[<p>话说这几个月我突然对编译工具着了道,近乎痴迷,也不知道是咋了.<br />
可能是现在工作的环境中,大家很少去研究很基础的东西,都在绕着走;再就是研究这些东西非常有成就感,因为之前的神秘感太强烈了,呵呵.<br />
ok,言归正传:<br />
按照<a href="http://veryzhang.cn/?p=75">2009年的学习计划</a>,安全编程的规范或者工具是重头戏,所以我几乎所有的业余时间都花在这上面了,一半在积累coding rules,一半在研究各种工具.<br />
下午在工位上坐着发了一会儿呆,突然想起来ADS的插件,既然CodeWarrior支持如此广泛,肯定有plugin api手册之类的东东,于是google了一番,发现结果很不理想,一是CodeWarrior现在归freescale了,而f已经不在sale或者support CodeWarrior了.<br />
既然新的没了,旧的总还在吧?于是去web archive网站上找2001的网页,发现好多链接都坏了,也没啥有价值的东西,唉.<br />
不过胡思乱想总是有收获的,沮丧之余我突然想起,VS2005或者eclipse如果改一改,应该也能胜任.<br />
我对eclipse没啥好感,也不熟,于是就找VS2005的资料了,还真有不少,呵呵<br />
下面就是正题了:</p>
<hr />如何在VS2005下面编译ARM程序?(使用ADS1.2自带的工具链)</p>
<p>首先创建一个文件,名字为armcc.rules,内容如下:</p>
<blockquote><p><span>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<br />
&lt;VisualStudioToolFile Name=&#8221;Armcc&#8221; </span><span>Version=&#8221;1.00&#8243;&gt;<br />
</span><span> &lt;Rules&gt;<br />
</span><span> &lt;CustomBuildRule<br />
</span><span> Name=&#8221;Armcc&#8221; DisplayName=&#8221;Armcc&#8221;<br />
</span><span> CommandLine=&#8221;armcc [$Inputs] &#8221;<br />
</span><span> Outputs=&#8221;$(InputName).o&#8221;<br />
</span><span> FileExtensions=&#8221;*.c&#8221;<br />
</span><span> ExecutionDescription=&#8221;compile .c using armcc.exe&#8221;<br />
</span><span>&gt;<br />
</span><span>&lt;Properties&gt;&lt;/Properties&gt;<br />
&lt;/CustomBuildRule&gt;<br />
</span><span>&lt;/Rules&gt;<br />
&lt;/VisualStudioToolFile&gt;</span></p></blockquote>
<p>然后打开一个solution,在project项目上点右键,选择&#8221;custom build rules&#8221;,然后点击&#8221;Find Existing&#8230;&#8221;,将armcc.rules选中,就可以使用armcc.exe来编译c文件了.<br />
当然,记得把custom build rules里面armcc的复选框选上:)</p>
<p>现在只学会了这么点,还有些后续的功课要做:</p>
<ul>
<li>能不能在xml中增加其他选项,使得可以支持更多特性?比如搞一个面板出来,选择-Otime还是-Ospace之类;</li>
<li>VS2005自带的运行时检查功能理论上应该是和编译器还有运行时库绑定在一起(要不然就不能run-time了),如果用armcc来编译.c的话,这些功能是全部没有了呢,还是还能有一些静态检查的部分?</li>
<li>哪儿去找rules的详细规范?(必须在msdn上,不过得花时间去搜搜,呵呵)</li>
</ul>
<p>不过总体上已经有了很大的曙光了,不用被CW那个劳什子拴着了.<br />
回头有时间了,就拿VS2005练练手,然后开始gcc hack,争取半年内出一个能用的东西,嗯.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=123</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用google doc翻墙</title>
		<link>http://veryzhang.cn/?p=121</link>
		<comments>http://veryzhang.cn/?p=121#comments</comments>
		<pubDate>Thu, 05 Feb 2009 16:32:06 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=121</guid>
		<description><![CDATA[公司不允许直接访问外网,但是工作时间一般网络都处于满负荷状态,基本不可用&#8230;

以前一直靠baidu快照解决问题,今天突然发现,google快照也能用了,比baidu的好用多了,呵呵.

但是有些pdf文件就麻烦了,baidu和google都只能看到文字,图片看不到.

<span class="readmore"><a href="http://veryzhang.cn/?p=121" title="使用google doc翻墙">阅读全文——共231字</a></span>]]></description>
			<content:encoded><![CDATA[<p>公司不允许直接访问外网,但是工作时间一般网络都处于满负荷状态,基本不可用&#8230;<br />
以前一直靠baidu快照解决问题,今天突然发现,google快照也能用了,比baidu的好用多了,呵呵.</p>
<p>但是有些pdf文件就麻烦了,baidu和google都只能看到文字,图片看不到.<br />
后来想起来,通过google doc的上传功能,直接把pdf文件传到google doc中,就可以看了,相当于下载了.<br />
而且直接输入一个url的话,google doc会当做word文件显示,真是太爽了,呵呵</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=121</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cn99终于复活了</title>
		<link>http://veryzhang.cn/?p=119</link>
		<comments>http://veryzhang.cn/?p=119#comments</comments>
		<pubDate>Thu, 05 Feb 2009 14:42:50 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=119</guid>
		<description><![CDATA[而且是在163的怀抱里&#8230;.

http://mirrors.163.com/

希望以后能一直高速而稳定,呵呵

]]></description>
			<content:encoded><![CDATA[<p>而且是在163的怀抱里&#8230;.<br />
http://mirrors.163.com/<br />
希望以后能一直高速而稳定,呵呵</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=119</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一点抱怨</title>
		<link>http://veryzhang.cn/?p=114</link>
		<comments>http://veryzhang.cn/?p=114#comments</comments>
		<pubDate>Tue, 27 Jan 2009 16:09:23 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=114</guid>
		<description><![CDATA[这几天在家读了一些资料,都是多媒体引擎方面的,比如gstreamer.因为英文读起来慢,所以找了一篇翻译过来的中文手册,版本有点旧,但是还可以.不过翻译质量就不敢恭维了,几乎到了令人拍案的程度&#8230;倒不是英文水平的问题,有各种词霸在手,基本不会有搞不定的生词,问题在于翻译的人对面向对象和多媒体领域基本是个新手,很多名词根本不理解,进而很多语句也完全没有逻辑,别说可读性,连正确性都保证不了.

不过话说回来,现在的各个领域里,都有很多人十分热衷于翻译英文资料,china-pub上隔一阵子就有新书出版,遗憾的是几乎每本书后面都有一堆人诟病翻译的质量,虽然有跟风的嫌疑在里面,但是真正的专家翻译出来的书,从来没有人抱怨翻译质量的.

<span class="readmore"><a href="http://veryzhang.cn/?p=114" title="一点抱怨">阅读全文——共362字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这几天在家读了一些资料,都是多媒体引擎方面的,比如gstreamer.<br />因为英文读起来慢,所以找了一篇翻译过来的中文手册,版本有点旧,但是还可以.<br />不过翻译质量就不敢恭维了,几乎到了令人拍案的程度&#8230;<br />倒不是英文水平的问题,有各种词霸在手,基本不会有搞不定的生词,问题在于翻译的人对面向对象和多媒体领域基本是个新手,很多名词根本不理解,进而很多语句也完全没有逻辑,别说可读性,连正确性都保证不了.</p>
<p>不过话说回来,现在的各个领域里,都有很多人十分热衷于翻译英文资料,china-pub上隔一阵子就有新书出版,遗憾的是几乎每本书后面都有一堆人诟病翻译的质量,虽然有跟风的嫌疑在里面,但是真正的专家翻译出来的书,从来没有人抱怨翻译质量的.</p>
<p>想来想去还是那句话,不走弯路就是捷径,越想取巧越费劲,以后还是老老实实的去看英文资料,读原版书吧.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=114</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么是bootstrap</title>
		<link>http://veryzhang.cn/?p=105</link>
		<comments>http://veryzhang.cn/?p=105#comments</comments>
		<pubDate>Fri, 16 Jan 2009 15:26:01 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=105</guid>
		<description><![CDATA[总是在编译一些软件的时候碰到这个词，比如emacs和gcc，都有make bootstrap这个选项，但是一直不知道是啥意思，于是google了下：

bootstrap

    KK: []

<span class="readmore"><a href="http://veryzhang.cn/?p=105" title="什么是bootstrap">阅读全文——共756字</a></span>]]></description>
			<content:encoded><![CDATA[<p>总是在编译一些软件的时候碰到这个词，比如emacs和gcc，都有make bootstrap这个选项，但是一直不知道是啥意思，于是google了下：</p>
<blockquote><p>bootstrap<br />
    KK: []<br />
    DJ: []<br />
    n.<br />
    1. 【美】(长统靴的)拔靴带</p>
</blockquote>
<p>在计算机领域的含义：</p>
<blockquote><p>The term also applies to the use of a {compiler} to compile itself.  The usual process is to write an interpreter} for a language, L, in some other existing language.  The compiler is then written in L and the interpreter is used to run it.  This produces an {executable} for compiling programs in L from the source of the compiler in L.  This technique is often used to verify the correctness of a compiler.  It was first used in the {LISP} community.</p>
</blockquote>
<p>简单的说,就是自己编译自己,来验证本身的正确性,主要针对编译器,解释性语言等领域.<br />
另外，boot就是bootstrap的缩写。所以“自举”这个词还是很准确的传达了原词的意思的，呵呵。</p>
<hr />
<p>GCC的make bootstrap选项:</p>
<blockquote><p><a href="http://gcc.gnu.org/install/configure.html">http://gcc.gnu.org/install/configure.html</a><br />
通过&#8211;disable-bootstrap和&#8211;enable-bootstrap来禁止和使能bootstrap过程。GCC编译时的bootstrap过程属于第三步，即stage3，通过编译自身来验证编译过程的正确性。</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=105</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>09-01-13</title>
		<link>http://veryzhang.cn/?p=102</link>
		<comments>http://veryzhang.cn/?p=102#comments</comments>
		<pubDate>Tue, 13 Jan 2009 20:15:02 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=102</guid>
		<description><![CDATA[Tim&#62; In particular the front end documentation has traditionally been

Tim&#62; considerably more limited than the documentation for the rest of

Tim&#62; GCC.

<span class="readmore"><a href="http://veryzhang.cn/?p=102" title="09-01-13">阅读全文——共277字</a></span>]]></description>
			<content:encoded><![CDATA[<pre>Tim&gt; In particular the front end documentation has traditionally been
Tim&gt; considerably more limited than the documentation for the rest of
Tim&gt; GCC.

Yes.  How can we fix this?

I usually recommend that aspiring front end writers read tree.def (the
most useful source) and skim tree.h (still useful but also a lot of
unreadable goo).</pre>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>treelang &#8211; 学习gcc前端的最佳入口</title>
		<link>http://veryzhang.cn/?p=99</link>
		<comments>http://veryzhang.cn/?p=99#comments</comments>
		<pubDate>Mon, 12 Jan 2009 16:04:55 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[GCC学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=99</guid>
		<description><![CDATA[前两天在网上搜gcc的资料,找到了这篇文章:  GNU 编译器家族 GCC 内部探密 &#8212; 探索 GCC 前端的内部结构

文章讲的很简略,基本上凡是重点的内容都没有涉及,不过提供了treelang这个线索,也算有一点价值.

回头看了一下treelang的代码,确实很少,只有几个文件,但是难度依然不小,主要是gcc的内部结构用的比较多,所以理解的难度还是有一些.

<span class="readmore"><a href="http://veryzhang.cn/?p=99" title="treelang &#8211; 学习gcc前端的最佳入口">阅读全文——共526字</a></span>]]></description>
			<content:encoded><![CDATA[<p>前两天在网上搜gcc的资料,找到了这篇文章:  <a href="http://www-128.ibm.com/developerworks/cn/linux/l-gcc/part1/">GNU 编译器家族 GCC 内部探密 &#8212; 探索 GCC 前端的内部结构</a></p>
<p>文章讲的很简略,基本上凡是重点的内容都没有涉及,不过提供了treelang这个线索,也算有一点价值.</p>
<p>回头看了一下treelang的代码,确实很少,只有几个文件,但是难度依然不小,主要是gcc的内部结构用的比较多,所以理解的难度还是有一些.</p>
<hr />搜了一些资料:  <a href="http://www-128.ibm.com/developerworks/cn/linux/l-gcc/part1/" target="_blank"></a></p>
<p><a href="http://www-128.ibm.com/developerworks/cn/linux/l-gcc/part1/" target="_blank">http://www-128.ibm.com/developerworks/cn/linux/l-gcc/part1/</a></p>
<p><a href="http://cobolforgcc.sourceforge.net/cobol_14.html#SEC48" target="_blank">http://cobolforgcc.sourceforge.net/cobol_14.html#SEC48</a></p>
<p><a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#toc_Front-End" target="_blank">http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#toc_Front-End</a> <a href="http://en.wikipedia.org/wiki/GCC_Abstract_Syntax_Tree" target="_blank"></a></p>
<p><a href="http://en.wikipedia.org/wiki/GCC_Abstract_Syntax_Tree" target="_blank">http://en.wikipedia.org/wiki/GCC_Abstract_Syntax_Tree</a> <a href="http://tldp.org/HOWTO/GCC-Frontend-HOWTO.html" target="_blank"></a></p>
<p><a href="http://tldp.org/HOWTO/GCC-Frontend-HOWTO.html" target="_blank">http://tldp.org/HOWTO/GCC-Frontend-HOWTO.html</a></p>
<hr />再补充一个资料,这个应该是最详细的: <a href="http://stderr.org/doc/treelang-4.1-doc/treelang.html">http://stderr.org/doc/treelang-4.1-doc/treelang.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=99</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The New C Standard</title>
		<link>http://veryzhang.cn/?p=94</link>
		<comments>http://veryzhang.cn/?p=94#comments</comments>
		<pubDate>Mon, 12 Jan 2009 15:41:49 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=94</guid>
		<description><![CDATA[刚在云风那儿看到的.

话说云风同学看书看到凌晨5点,汗,太疯狂了&#8230;.

该书即将出版,amazon上已经有了,

<span class="readmore"><a href="http://veryzhang.cn/?p=94" title="The New C Standard">阅读全文——共207字</a></span>]]></description>
			<content:encoded><![CDATA[<p>刚在<a href="http://blog.codingnow.com/2009/01/the_new_c_standard.html" target="_blank">云风那儿</a>看到的.</p>
<p>话说云风同学看书看到凌晨5点,汗,太疯狂了&#8230;.</p>
<p>该书即将出版,amazon上已经有了,</p>
<p>顺便google了一下作者,<a href="http://www.informit.com/authors/bio.aspx?a=86F640F5-F526-4915-B28B-62689C48F793" target="_blank">Derek M. Jones</a>,还有<a href="http://www.informit.com/articles/article.aspx?p=431105" target="_blank">一篇文章</a>.</p>
<p>电子版的下载地址在<a href="http://www.coding-guidelines.com/cbook/cbook1_1.pdf" target="_blank">这里</a>.</p>
<hr />
<p>之前买了<a href="http://www.douban.com/subject/1134988/?i=0" target="_blank">C语言参考手册</a>,现在只看了一半多点,春节前可能没有时间再捡起来看了.</p>
<p>不过无论是C语言标准,动态语言实现,还是GCC的内部实现,都离不开编译原理这棵大树,掌握一个就可以旁通了,所以春节前的重点还是LCC,嗯.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=94</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu 8.10 gcc 编译失败</title>
		<link>http://veryzhang.cn/?p=89</link>
		<comments>http://veryzhang.cn/?p=89#comments</comments>
		<pubDate>Thu, 08 Jan 2009 15:43:58 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[Linux桌面]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=89</guid>
		<description><![CDATA[前几天在ubuntu 8.10下面编译gcc,总是编译失败,开始以为是版本的问题,试了从gcc3.4.2到gcc4.3.2之间的五六个版本,都有同样的错误,类似下面这样:

error: call to &#8216;__open_missing_mode&#8217; declared with attribute error: open with O_CREAT in second argument needs 3 arguments

后来上网搜了一下,原来是这样的:

<span class="readmore"><a href="http://veryzhang.cn/?p=89" title="ubuntu 8.10 gcc 编译失败">阅读全文——共432字</a></span>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">前几天在ubuntu 8.10下面编译gcc,总是编译失败,开始以为是版本的问题,试了从gcc3.4.2到gcc4.3.2之间的五六个版本,都有同样的错误,类似下面这样:</span></p>
<blockquote><p><span style="color: #000000;">error: call to &#8216;__open_missing_mode&#8217; declared with attribute error: open with O_CREAT in second argument needs 3 arguments</span></p></blockquote>
<p><span style="color: #000000;">后来上网搜了一下,原来是<a href="https://wiki.ubuntu.com/CompilerFlags">这样</a>的:</span></p>
<blockquote><p><span style="color: #000000;">从gcc 4.0开始,添加了<a href="http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html">一些扩展的检查功能</a>,如buffer overflow,ignoring return value等等,<a href="http://www.redhat.com/magazine/009jul05/features/execshield/#checks">早在feroda core 4中,redhat就已经默认打开了gcc的这个扩展</a>,并在此基础上编译了fc4的几乎所有软件;ubuntu直到8.10版本才使能这个功能;</span></p></blockquote>
<p><span style="color: #000000;">但是这个功能打开之后会造成很多程序编译不过,比如gcc:(,解决方法就是在编译的时候禁止掉fortify扩展:</span></p>
<blockquote><p><span style="color: #000000;">make &#8220;CFLAGS=-U_FORTIFY_SOURCE&#8221;</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=89</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何设计/理解一个系统?</title>
		<link>http://veryzhang.cn/?p=85</link>
		<comments>http://veryzhang.cn/?p=85#comments</comments>
		<pubDate>Sat, 03 Jan 2009 12:36:00 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=85</guid>
		<description><![CDATA[元旦这几天在家苦心钻研某著名手机方案的代码,网上下的,除了代码什么都没有,好在磕磕绊绊的倒是能编译过,甚至还能跑起来,呵呵:)

没有文档,也不能debug,可谓困难重重,不过硬着头皮看下来,也有了不少收获:

1.要改掉过度依赖debug的毛病,平时在公司就是常常写完代码不仔细review,跑起来看效果,不行再改,大脑利用率一直很低,工作效率自然也上不去.长此以往,真的就变成民工了:(

<span class="readmore"><a href="http://veryzhang.cn/?p=85" title="如何设计/理解一个系统?">阅读全文——共711字</a></span>]]></description>
			<content:encoded><![CDATA[<p>元旦这几天在家苦心钻研某著名手机方案的代码,网上下的,除了代码什么都没有,好在磕磕绊绊的倒是能编译过,甚至还能跑起来,呵呵:)</p>
<p>没有文档,也不能debug,可谓困难重重,不过硬着头皮看下来,也有了不少收获:</p>
<p>1.要改掉过度依赖debug的毛病,平时在公司就是常常写完代码不仔细review,跑起来看效果,不行再改,大脑利用率一直很低,工作效率自然也上不去.长此以往,真的就变成民工了:(</p>
<p>2.分析代码重点在于函数的调用和分支语句的跳转,把这些分析清楚了,条理就出来了;</p>
<p>3.关于分析代码的过程:</p>
<p>1)程序设计是个典型的树形结构,而人脑的认识过程往往是从点到线,再到面,因此要有相应的方法来解决这种矛盾;</p>
<p>2)解决的方法就是,再分析的过程中保持一个堆栈,堆栈里要有两个列表:a)需求,就是我们想实现的功能,在抽象的层次上大概有哪些组成部分,每一部分所对应的代码单元;b)已经分析过的通路,分析失败的通路;</p>
<p>3)分析的时候只要记住两件东西:a)上一个未解决的问题;b)下一个要分析的通路.</p>
<p>如此按照visitor模式,遍历代码的组织结构即可,避免了顾此失彼的问题,不会迷路:)</p>
<p>另外,如果结合<a href="http://www.xmind.net/">mindmap</a>,就更好了.</p>
<p>回头如果要设计一个系统,希望能实验一下这种模式:</p>
<p>1)给出系统的组成图,具体到每个通路级别,通路上的节点是函数;</p>
<p>2)针对需求,寻找不同的通路;</p>
<p>3)找出关键路径(通路),花时间去试验,分析每个通路的代价和收益,选择最合适的一种.</p>
<p>这其中最耗时的步骤应该是第3步,即试验阶段,但是如果这个阶段做得好,这个系统将是十分鲁棒的,后续的扩充甚至重写都会十分顺利,因为这时的工作只是重新搭积木而已,不用去担心某条通路是否能达到预期而举棋不定.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=85</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2009学习计划</title>
		<link>http://veryzhang.cn/?p=75</link>
		<comments>http://veryzhang.cn/?p=75#comments</comments>
		<pubDate>Sat, 03 Jan 2009 11:58:33 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=75</guid>
		<description><![CDATA[读书:

1.龙书或者编译原理与实践.

2.SICP

<span class="readmore"><a href="http://veryzhang.cn/?p=75" title="2009学习计划">阅读全文——共321字</a></span>]]></description>
			<content:encoded><![CDATA[<p><strong>读书:</strong><br />
1.龙书或者编译原理与实践.<br />
2.SICP<br />
3.ARM Soc Architecture<br />
4.程序设计语言原理<br />
5.lex&amp;&amp;yacc<br />
<strong>代码:</strong><br />
1.LUA,首先是1.0,有精力再读高版本,但5.0暂时不考虑.<br />
2.gcc,主要是ccl和cpp<br />
3.flex bison<br />
4.VC或者python,准备在win32环境下写几个小工具,准备从这两种语言中选一种.<br />
<strong>目标</strong><br />
1.可以开发win32下的工具程序,用于模拟media player,或者分析码流的特性;<br />
2.可以开发基于编译器前端的代码分析工具,根据要求定制检查规则,包括静态分析,插桩,编程规范检查等;<br />
3.可以模仿lua实现一种简单的语言,并添加一些特性,适合在嵌入式平台上进行快速的验证,测试以及部分测试工作.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=75</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>攒了新电脑</title>
		<link>http://veryzhang.cn/?p=73</link>
		<comments>http://veryzhang.cn/?p=73#comments</comments>
		<pubDate>Sat, 03 Jan 2009 08:24:20 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=73</guid>
		<description><![CDATA[原来的笔记本已经不堪重负了,慢的要死,于是元旦那天去中关村装了一台新电脑.

配置如下:

E8400,8G DDR2 800,技嘉P43,WD1T,AOC 210V,HD3850.

<span class="readmore"><a href="http://veryzhang.cn/?p=73" title="攒了新电脑">阅读全文——共386字</a></span>]]></description>
			<content:encoded><![CDATA[<p>原来的笔记本已经不堪重负了,慢的要死,于是元旦那天去中关村装了一台新电脑.<br />
配置如下:<br />
E8400,8G DDR2 800,技嘉P43,WD1T,AOC 210V,HD3850.<br />
总体一切都挺好,就是硬盘声音很大,把写缓存打开后好了一点,可能4碟的硬盘还是差一些,早知道买两个6400aaks都够了,唉.<br />
windows下用ramdisk分了一个4.72G的分区,速度飞快,把代码,电驴迅雷的目录都放进去了,省的硬盘老叫唤.<br />
然后刻了一张gentoo2008livecd,没想到不认pata的光驱,还得重新编译内核,sigh,以后再说吧.<br />
最后还是装了ubuntu 8.10,确实爽了很多,界面漂亮了,自动认出了HD3850,还把驱动装好了,很赞,呵呵.<br />
然后立刻下了一个gcc4.3.2,编译了一遍,4个线程,只花了5分钟,回头放在ramdisk里,应该能到3到4分钟左右,以后调试就很爽了.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=73</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[代码学习]什么是DRY原则(Don&#8217;t Repeat Yourself)？</title>
		<link>http://veryzhang.cn/?p=68</link>
		<comments>http://veryzhang.cn/?p=68#comments</comments>
		<pubDate>Thu, 01 Jan 2009 17:12:59 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[代码学习]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=68</guid>
		<description><![CDATA[http://www.newsmth.net/bbstcon.php?board=Programming&#38;gid=109898



year = ORIGINYEAR; /* = 1980 */

<span class="readmore"><a href="http://veryzhang.cn/?p=68" title="[代码学习]什么是DRY原则(Don&#8217;t Repeat Yourself)？">阅读全文——共353字</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.newsmth.net/bbstcon.php?board=Programming&amp;gid=109898">http://www.newsmth.net/bbstcon.php?board=Programming&amp;gid=109898</a></p>
<blockquote><p>
year = ORIGINYEAR; /* = 1980 */<br />
while (days &gt; 365)<br />
{<br />
if (IsLeapYear(year))<br />
{<br />
if (days &gt; 366)<br />
{<br />
days -= 366;<br />
year += 1;<br />
}<br />
}<br />
else<br />
{<br />
days -= 365;<br />
year += 1;<br />
}<br />
}
</p></blockquote>
<p>按照DRY原则做修改：</p>
<blockquote><p>
year = ORIGINYEAR; /* = 1980 */<br />
for (;;)<br />
{<br />
int year_days = 365 + IsLeapYear(year);<br />
if (days &gt; year_days)<br />
{<br />
days -= year_days;<br />
++year;<br />
}<br />
else<br />
{<br />
break;<br />
}<br />
}
</p></blockquote>
<p>google了一下DRY，找到了<a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">一些链接</a>，似乎与code reuse有关？</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>08-12-31</title>
		<link>http://veryzhang.cn/?p=65</link>
		<comments>http://veryzhang.cn/?p=65#comments</comments>
		<pubDate>Wed, 31 Dec 2008 15:35:32 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=65</guid>
		<description><![CDATA[&#8212;CRC32校验，本质是除法取余，采用异或实现是因为异或在二进制域可以等价于除法运算。详见CSAPP第一章。

&#8212;gcc，手写语法分析器；cscope，只有词法分析，没有语法分析；lcc，手写语法分析器；doxygen，未知；ucc，未知；lcc,手写语法分析器；

&#8212;目前来说，采用hack ADS加gcc或ucc的方法可行性要好一些，无论如何都需要一个完整的编译器，单纯的code分析工具是不行的，理论上当然可以做到，但是对我来说难度太大了。

]]></description>
			<content:encoded><![CDATA[<p>&#8212;CRC32校验，本质是除法取余，采用异或实现是因为异或在二进制域可以等价于除法运算。详见CSAPP第一章。</p>
<p>&#8212;gcc，手写语法分析器；cscope，只有词法分析，没有语法分析；lcc，手写语法分析器；doxygen，未知；ucc，未知；lcc,手写语法分析器；</p>
<p>&#8212;目前来说，采用hack ADS加gcc或ucc的方法可行性要好一些，无论如何都需要一个完整的编译器，单纯的code分析工具是不行的，理论上当然可以做到，但是对我来说难度太大了。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=65</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>08-12-30</title>
		<link>http://veryzhang.cn/?p=62</link>
		<comments>http://veryzhang.cn/?p=62#comments</comments>
		<pubDate>Tue, 30 Dec 2008 09:54:43 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=62</guid>
		<description><![CDATA[&#8212;armcc.exe只是一个命令行的前端，ADS是通过CWarmcc.dll-&#62;armcc.dll的方式来实现编译,所以需要拦截上面两个dll来实现对ADS编译行为的分析和拦截.

]]></description>
			<content:encoded><![CDATA[<p>&#8212;armcc.exe只是一个命令行的前端，ADS是通过CWarmcc.dll-&gt;armcc.dll的方式来实现编译,所以需要拦截上面两个dll来实现对ADS编译行为的分析和拦截.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=62</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AXD只能设两个断点的问题</title>
		<link>http://veryzhang.cn/?p=60</link>
		<comments>http://veryzhang.cn/?p=60#comments</comments>
		<pubDate>Tue, 30 Dec 2008 09:53:32 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=60</guid>
		<description><![CDATA[最近同事发现，AXD只能设两个断点了，怀疑是更新了ADS 848 patch的原因，但是在848build的release note中也没有发现相关的描述，很是奇怪。

后来在ARM网站上搜了一下关于断点的介绍，恍然大悟：

ARM7和ARM9可以设置最多两个硬件断点和无限个软件断点，硬件断点的原理是将需要break的地址存放在仿真器的rom中，软件断点则是将目的地址替换成swi指令，然后在swi异常服务程序中实现断点操作。

<span class="readmore"><a href="http://veryzhang.cn/?p=60" title="AXD只能设两个断点的问题">阅读全文——共284字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近同事发现，AXD只能设两个断点了，怀疑是更新了ADS 848 patch的原因，但是在848build的release note中也没有发现相关的描述，很是奇怪。</p>
<p>后来在ARM网站上搜了一下关于断点的介绍，恍然大悟：</p>
<p>ARM7和ARM9可以设置最多两个硬件断点和无限个软件断点，硬件断点的原理是将需要break的地址存放在仿真器的rom中，软件断点则是将目的地址替换成swi指令，然后在swi异常服务程序中实现断点操作。</p>
<p>而我们的工程在大概一个多月前把代码区设为了只读，所以AXD就无法修改代码段了，唯一的例外就是在代码load结束，还没有运行的时候，可以一次性的把断点设好。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=60</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2008总结</title>
		<link>http://veryzhang.cn/?p=52</link>
		<comments>http://veryzhang.cn/?p=52#comments</comments>
		<pubDate>Mon, 29 Dec 2008 15:31:53 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=52</guid>
		<description><![CDATA[今年是公司成立9周年,算上实习期,我在公司也整整两年了,真的是弹指一挥间.

很多时候当你不去想某件东西,它反而会来的更快,所以说,要专注于做事本身,不要去刻意追逐表面的东西.

过去的这半年,尽管我还是一再告诫自己,少说话,多做事,最后回头看,还是想的多,做的少,多有涉猎,少有斩获,还是太浮躁了.

<span class="readmore"><a href="http://veryzhang.cn/?p=52" title="2008总结">阅读全文——共736字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今年是公司成立9周年,算上实习期,我在公司也整整两年了,真的是弹指一挥间.</p>
<p>很多时候当你不去想某件东西,它反而会来的更快,所以说,要专注于做事本身,不要去刻意追逐表面的东西.</p>
<p>过去的这半年,尽管我还是一再告诫自己,少说话,多做事,最后回头看,还是想的多,做的少,多有涉猎,少有斩获,还是太浮躁了.</p>
<p>现在真的觉得,网络是把双刃剑,带给你的信息太多,很容易让人迷失,无法集中精力专注于核心的事情.</p>
<p>2009是我的本命年,我有一种十分强烈的感觉,这一年我会改变很多,获得很多,或许这一年,将会是我真正离开校园,走入社会的转折点.</p>
<p>最后总结一下现在我的关注点:</p>
<p><strong>1.程序设计的稳定性-&gt;设计简单化+运行时检测工具+静态词法分析工具+MISRA.</strong></p>
<p><strong>2.多媒体兼容性-&gt;运用自动工具穷举所有case.</strong></p>
<p><strong>3.开发过程加速-&gt;工具链加速+运行时调试系统+动态语言.</strong></p>
<p>这三点是按照重要程度排列的,稳定是重中之重,事关项目的成败;兼容性略次之;加速则是在前两者的前提之上,才有意义.</p>
<p>这些关注点都与工作关系密切,且都与编译原理关系密切,所以学好编译原理是重中之重,不仅是眼下的工作,对以后的任何领域的探索,编译原理都是绕不过去的.其他的方面还有binutils,具体就是bfd,还有dwarf 2.0 spec,VC,lua implementation,gcc.</p>
<p>其实上半年的时候我一直立志要做一位H264男,看了无数的代码和paper,最后发现有些不切实际,主要是因为与工作的关系不大,很难有学习和施展的机会,搞得自己很累.中间颓了一段时间之后,开始转向编译原理,这一块儿还是可以施展一番拳脚的,呵呵.</p>
<p>最后,写一下我2008年最深的体会:</p>
<p>一流程序员写语言,二流程序员写工具,三流程序员写别的.</p>
<p> </p>
<h1 style="text-align: center;">Hello, 2009!</h1>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=52</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>08-12-29</title>
		<link>http://veryzhang.cn/?p=46</link>
		<comments>http://veryzhang.cn/?p=46#comments</comments>
		<pubDate>Mon, 29 Dec 2008 15:26:44 +0000</pubDate>
		<dc:creator>zhangxuecheng</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=46</guid>
		<description><![CDATA[&#8212;misra，工业界的安全C语言编程标准，misra-c-2004.pdf(csdn download),CERT是一个于misra类似的开源实现。

&#8212;通过拦截armcc.exe,armasm.exe,armlink.exe来分析ADS调用编译器的过程，然后用win32的gcc替换上述工具，实现代码静态分析和插桩。

]]></description>
			<content:encoded><![CDATA[<p>&#8212;misra，工业界的安全C语言编程标准，misra-c-2004.pdf(<a href="http://d.download.csdn.net/down/605834/caixianzhou">csdn download</a>),<a href="http://www.cert.org/books/secure-coding/" target="_blank">CERT</a>是一个于misra类似的开源实现。</p>
<p>&#8212;通过拦截armcc.exe,armasm.exe,armlink.exe来分析ADS调用编译器的过程，然后用win32的gcc替换上述工具，实现代码静态分析和插桩。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=46</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于weak symbol</title>
		<link>http://veryzhang.cn/?p=26</link>
		<comments>http://veryzhang.cn/?p=26#comments</comments>
		<pubDate>Wed, 24 Dec 2008 15:58:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ARM相关]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=26</guid>
		<description><![CDATA[首先来看一个问题：

在ADS环境下，如果使用ARM的C库进行连接，如何处理除0的错误？

一点背景知识：

<span class="readmore"><a href="http://veryzhang.cn/?p=26" title="关于weak symbol">阅读全文——共991字</a></span>]]></description>
			<content:encoded><![CDATA[<p>首先来看一个问题：</p>
<blockquote><p>在ADS环境下，如果使用ARM的C库进行连接，如何处理除0的错误？</p></blockquote>
<p>一点背景知识：</p>
<li>因为ARM没有硬件除法单元，所以除法是由软件来实现的，因此除0异常也是由软件处理的(而不是硬件的异常);</li>
<li>ARM的除法函数包括在C库中,没有提供源代码,只有目标文件,其中也包括除0异常的处理程序.</li>
<p>ARM的C库对除0异常的处理是陷入死循环,而我们往往希望能做一些其他的操作,比如打印出出错的位置,或者干脆跳过等等,应该如何做呢?</p>
<p>在ARM网站上给出了一种方法:<br />
<a href="http://www.arm.com/support/faqdev/12023.html"> Trapping and identifying divide-by-zero errors</a></p>
<p>其中主要的代码是:</p>
<blockquote><p>extern void $Super$$__rt_idiv0(void);</p>
<p>void $Sub$$__rt_idiv0()<br />
{<br />
//处理除0错误的代码<br />
$Super$$__rt_idiv0();<br />
}</p></blockquote>
<li>__rt_div0是ARM的C库中处理除0异常的函数;</li>
<li>使用$Super$$和$Sub$$来声明一个函数,可以定义该函数的弱符号,也就是weak symbol;</li>
<li>对于ARM连接器来说,当发生对一个符号的引用时,首先查找该符号的强属性,然后查找是否存在弱属性,如果存在就引用弱属性,然后结束此次引用;</li>
<li>对于上面的代码而言,具体的引用顺序是这样的:-&gt;__rt_div0[是否存在弱属性?][存在]-&gt;$$sub_$$__rt_div0-&gt;[$$Sub$$__rt_div0处理后面的事情]-&gt;$Super$$__rt_idiv0;</li>
<li>需要强调的是,__rt_div0,$$sub_$$__rt_div0,$Super$$__rt_idiv0这三者并不等价,__rt_div0属于veneer层,并不是真正的符号,后面的两个才是真正的符号,默认只存在$Super$$__rt_idiv0.</li>
<p>weak symbol有下面几种应用:</p>
<li>当你拿到一个第三方的库,没有源代码但是有函数声明,需要修改其中的某个函数,这时就可以使用super/sub的方法来拦截该函数,将其替换为自己的实现;</li>
<li>反过来,如果你需要发布一个库,而其中有的函数是平台相关的,但你又想提供一个默认的实现,这时就可以用__weak修饰你的函数,使其连接为weak symbol,这样客户直接重新定义该函数就可以,不用拦截;</li>
<p>PS:<br />
头一回写这样的笔记,思路很乱,正过来讲可能会好些,从原理到问题到应用,回头再改一改.</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=26</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>两篇好文，关于国内的IC公司</title>
		<link>http://veryzhang.cn/?p=16</link>
		<comments>http://veryzhang.cn/?p=16#comments</comments>
		<pubDate>Sun, 21 Dec 2008 14:19:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://veryzhang.cn/?p=16</guid>
		<description><![CDATA[原文地址在这里：
<a href="http://www.mindmeters.com/showlog.asp?log_id=8650">给海归技术创业兄弟的九个忠告</a>

前面这篇文章其实是下面这篇的读后感，所以贴一下原始的文章：
<a href="http://info.ec.hc360.com/2008/12/190840115147.shtml">中星微之惑 红色创投+硅谷模式为何成低谷</a>

关于VIMC，之前的文章多是走极端的，要么捧的天花乱坠，要么骂的啥都不是，唯独这两篇文章我觉得是最中肯的，讲的很真实。
其实技术是一个很纯粹的东西，但是商业就很复杂，很难琢磨。
无论如何，VIMC应该是政府资助的企业里头，最争气的吧。]]></description>
			<content:encoded><![CDATA[<p>第一篇:<a href="http://www.mindmeters.com/showlog.asp?log_id=8650">给海归技术创业兄弟的九个忠告</a></p>
<p>第二篇:<a href="http://info.ec.hc360.com/2008/12/190840115147.shtml"> 中星微之惑 红色创投+硅谷模式为何成低谷</a></p>
<p>第一篇其实是第二篇的读后感，所以都贴了.</p>
<p>关于VIMC，之前的评论多是走极端的，要么捧的天花乱坠，要么骂的啥都不是，唯独这两篇文章我觉得是最中肯的，讲的很真实。<br />
其实技术是一个很纯粹的东西，但是商业就很复杂，很难琢磨。<br />
无论如何，VIMC应该是政府资助的企业里头，最争气的吧。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<h2>给海归技术创业兄弟的九个忠告</h2>
<p>By [ 申音 ] 2008-12-18 18:47:56<br />
很长一段时间，我对国内IC设计产业的困境感到迷惑不解。<br />
在这个产业里，聚集了中国最聪明的头脑（其中绝大多数是海归精英）。政府很舍得花钱支持，VC也很重视，有硅谷的成熟商业模式，又背靠全球最大的移动通信和消费电子市场。<br />
但事实很悲哀，远在整个经济的冬天到来之前，这个产业就处在集体委靡之中。不断有公司倒闭的消息，仅有的三家海外上市公司，有两家——中星微（Nasdaq：VIMC）和展讯（Nasdaq:SPRD）都处于亏损之中，市值甚至远远不到1亿美元。<br />
上个月，我的同事和我一起，专门拜访了中星微的创始人邓中翰，北极光创投的合伙人陈大同，他曾是展迅通信的创始人之一兼CTO，以及一些业内人士。<br />
有意思的是，每个人都会提到一个台湾公司的名字：联发科（MediaTek Inc., TW:2454），它很像旧社会的“三座大山”，把整个大陆IC设计产业压得无法喘气。<br />
过去，我的媒体同行常常把联发科称为“黑手机之父”，它比中星微仅仅早出生四年，但如今已经是市值超过80亿美金，年营收约30亿美金，全球第三大手机和第二大数字电视IC设计公司（国内前十大IC设计公司加起来的营收总和也不到它的一半）。更让人郁闷的是，它的成长，它的利润主要都来自于大陆。<br />
我跟邓中翰博士很认真地探讨了一下这个问题。他觉得联发科虽然厉害，但其技术大都是“偷学”而来的，产品只满足低端市场，而且其客户大都是些中小品牌甚至 “山寨机”企业。至于中星微则是通过“自主创新”，正大光明地赢得了今天的价值，赢得了三星、飞利浦、微软等国际大厂对其品牌的认可，这是一条索尼、松下们曾经走过的正道。<br />
我不能说他的观点不对，但我总觉得这个说法很像《神雕侠侣》里面名门正派的青年才俊永远瞧不上杨过这种到处偷学的流浪儿。<br />
于是，我上卓越亚马逊买了一本联发科董事长蔡明介写的书《竞争力的探求》。在这本书里，老蔡总结自己30年的江湖经验，和盘托出了一套后发国家的技术公司如何成功的实战策略。<br />
看完以后，我承认自己有点被雷到了。因为联发科的这套策略一点都不神秘。<br />
完全客户导向，选择规模庞大的应用市场而非细分的利基领域，在市场刚刚进入成熟期时迅速杀入，通过对国外技术的消化吸收进行逆向创新，提供真正低成本（但绝对不是低技术）的解决方案，依靠工程师团队而非个别天才作战，用速度、效率和贴身服务来弥补质量上的差距，通过打破行业的现有规则来确立新标准，与自己的上下游结成统一战线……<br />
事实上，华为、比亚迪、腾讯、无锡尚德、金风科技这些中国最厉害的高科技公司，和联发科使用的是几乎同一套战法。<br />
对于一个公司而言，尤其是非国有的上市公司而言，为股东赚钱就是它的本分。赚钱的公司不一定是好公司，但不赚钱的公司肯定不是个好公司。<br />
以此标准来衡量联发科与中星微，则高下立判。<br />
所以，中星微是不是国内IC设计公司，以及一大批海归创业的高科技公司值得效仿的对象？我表示怀疑。<br />
如果把联发科作为参照系，那么中星微所选择的另一条道路，看起来很光彩，却很可能越走越窄。<br />
这或许也能解释另外一个事实，在中国，绝大多数成功的技术型公司都不是由海归派创立的。也许有看官会反驳我说，还有百度、搜狐、无锡尚德和曾经的UT斯达康呀！但请注意，它们都是在“更懂中文”之后，才取得成功的（凡参加过百度的营销大会，就知道是百度的技术强大，还是Sales强大）。<br />
马上要过新年了，2009年很可能是中国市场化经济有史以来最寒冷的一年（有谁还记得1989年吗？）。我很担心各位海归的、创业的、还是搞技术的兄弟们，如果一条路走到黑的话，很可能会冻死，很可能会熬不到下一个春天。<br />
于是，我试着总结了九个朴素的忠告（抱歉，没有“十全大补丸”），其实都是听前辈过来人讲的血泪教训。不一定都对，但应该不会全错。</p>
<p>第一，别作“28个半布尔什维克”<br />
中共历史上有个著名的“28个半布尔什维克”，以王明为首的留洋派。马列理论很“正宗”，苏联老大哥很喜欢，也给津贴补助，高调做事，觉得在中国干革命，就得发动城市工人阶级，尽管后者可能比现在的白领还少。<br />
很像现在的一些海归创业公司，拿着美国VC的银子，言必称硅谷、GOOGLE、商业模式，不赚钱不要紧，先请最贵的人搞研发，再花钱砸市场。只是学得再像，也不过一个好学生而已。一旦老大哥接济不上，一旦离开租界，就麻烦大了。<br />
而井岗山上的“朱毛”很饥饿，生存问题压倒理论焦虑，不打土豪劣绅就得挨饿，不发动千万农民就没地盘没人手，打一仗总结一次经验，无人关心自己宽心，吃甘蔗先啃最难吃的。谁笑到了最后？<br />
从硅谷回来的海归们，大多忘记了一个基本事实：就是欧美的市场已经是高度成熟和分工细化。而在国内，很多产业还处在跑马圈地粗放经营的阶段。</p>
<p>第二，别在北京、上海创业<br />
北京、上海是中国两个最大，也最容易让创业者产生幻觉的城市。似乎离硅谷很近，资讯很发达，打个“飞的”就来去。天天看着CBD陆家嘴，就以为中国不是发展中国家了。<br />
母校里还有专门的孵化器，软硬件俱全，挺像斯坦福车库。但是，两地最成熟的清华创业园、复旦创业园，10年了也没孵出一个上市的技术公司。更别说其它的。<br />
政府鼓励多衙门也多，优惠政策首先倾斜国企和外企，公文审批累死你。大公司大客户是很多，不过都是“关系型客户”。人才也多，要价很高，而且一有风吹草动就回安稳窝了。<br />
媒体热闹，营销大师公关顾问多，忽悠你的也多。夸你几句你就当真，你当真你就傻子。<br />
我的建议：技术创业首选深圳。完全移民城市，山寨精神，开放文化。毗邻香港，技术资讯不落后，融资也不难。背靠珠三角，制造业发达，有技术不怕没地方变现。没人注意你，正好可以多磨练自个本事。地方政府相当务实，营商环境好，没事不缠你。有钱的天使多，忽悠的人少。如果精力富余，还可以多去华为、腾讯、比亚迪学习一下。<br />
当然，杭州、无锡、大连也值得推荐。</p>
<p>3，别让技术最牛的那个家伙当CEO<br />
这话是谁说的？是展讯的前CTO陈大同说的，他在硅谷还参与创办过一个公司。陈的亲身体验是，在硅谷那边，工程师都不愿意去做管理。因为硅谷已经把技术看成是生存之本，渗透入血液。在一个公司里面，都有几个宝贝似的技术大拿，其影响力真是可以跟CEO平起平坐的。<br />
而在中国，过去一直是制造业文化，没有搞技术研发的氛围。在企业里，做技术的地位根本没法跟做管理的比。所以，技术大拿的重要性非得通过管理岗位才能体现出来。<br />
但很遗憾，真正适合做管理的工程师可能不到20%。技术出身的人常常只相信自己，不信任别人。给人职责，不给人权力。技术出身的人当管理者非常容易把技术看得太高。最后是公司少了一个顶尖的技术大拿，多了一个二流的领导人<br />
百分之一的技术难题只有百分之一的技术高手能解决。同样，百分之一的市场机会也只有百分之一的市场高手能发现。凡是大家嚷嚷的机会都不靠谱。<br />
称职的技术公司CEO必须是一个市场高手，一定得是公司里最懂市场的人。但不一定是学市场出身的。他要懂技术，但不能痴迷于技术。他必须判断这百分之一的机会是不是真正适合你的机会。陈很骄傲地说，他在离开展讯之前，已经是公司里最懂市场的人之一。<br />
“邓中翰是从来不见客户的。” 原中星微的一位员工也说。在邓自述的工作日程表中，最重头的是技术开发，然后是投资者关系、政府关系和日常管理等。<br />
这在联发科董事长蔡明介看来，绝对是不可想象的。他去深圳的次数远比去北京和上海的多。联发科专门设立了深圳子公司，还派驻技术服务人员和天宇朗通、联想、TCL这些大厂深入合作，提供技术支持。天宇朗通的CEO荣秀丽甚至公开称联发科为“老师”。</p>
<p>4，别跟政策要市场<br />
本世纪初，硅谷有4家大陆留学生创办的搞3G芯片的公司，最后只剩下展讯一家活着。因为谁也没想到，只到今天，中国的3G还没有大规模商用。<br />
展讯能侥幸活下来，是因为它把80%的精力放在搞2G/2.5G上，只把20%放在3G上。<br />
2003年，展讯内部讨论未来集中开发哪种技术标准的时候，在WCDMA和TD-SCDMA之间摇摆，管理层争论非常大。后来决定做TD，因为做TD好歹也是先行者，又是国家标准，花了很大血本。<br />
结果，今天TD-SCDMA这个“阿斗”算是硬扶上马了，可能不能成为产业，迄今还是疑问。而展讯今年3季度巨亏3000多万美金，很大程度上也是因为TD手机销售远不如预期造成的。<br />
咱们国家的国情是，搞拆迁修马路盖房子是挺快的，要推进一个技术标准是很慢的。TD、MP4、数字电视、EVD、WAPI标准，不知拖死了多少小技术公司，现在又出了一个CMMB手机电视标准。<br />
政策的市场常常是未来的市场。没人知道苹果何时落地，但肯定比你想象得要晚很多。联发科的董事长蔡明介特别强调S曲线的概念（代表了一个产品从发展初始到最后消亡的曲线），即在市场将要走到接近要大幅成长的中间阶段才切入，因为他认为谁在竞争中最先达到经济规模才是最重要的。所以，联发科从来没有第一个进入市场，都是作为后来者的角色进入，用的是成熟技术，但进入后就能引发价格雪崩，将先发者挤出市场。<br />
如果按照中央政府的规划，当年的小灵通根本就不在标准考虑之列。可只要有几千万人用了，政府也不能说灭就灭了。今天，政府能取缔“山寨机”吗？不可能的。因为老百姓需要它。</p>
<p>5，创业公司不要做产业报国梦<br />
据说一拿了美国绿卡，才会有真正的爱国热情。不知道是不是一种潜意识的负疚感，特别想为祖国做点什么。<br />
不过，真有大理想也埋在心里，也别急着说出来。一说出来，你就把自己给架着了。企业不是运动员，老想着怎么为国争光，就忘记提升自己赚钱的能力了<br />
。当然，运气好的话，这些真真假假的理想能把政府领导给感动。但“汉芯”、“龙芯”、“中国芯”……，这么多“芯”里面有一个真正成大器的吗？没有。<br />
更让人哭笑不得的是，一些企业拿这个来做整体营销，包装过度别人是被忽悠了，你自己也就只能一直包装下去。<br />
当年中星微做宣传，声称携手微软、富士通，“世界首个智能机器人富士通Maron-1的视觉芯片采用中星微的星光三号”，真实的情况是富士通的机器人采用微软的WinCE操作系统，微软推荐其影像采集芯片采用中星微芯片，其实就是在“星光一号”基础上进行了方案修改，为借助此事造势就命名为“星光三号”，为了把戏做足，公司还派人在每个国市场上买来一个玩具机器人，摆放在公司的荣誉展厅，对外宣传这就是“富士通智能机器人Maron-1”，当然，新闻报道传说中的各种功能，它一个也不具备。<br />
创业公司一谈产业报国，上帝估计也笑了。</p>
<p>6，忘掉硅谷式的“技术洁癖”<br />
在中星微，从CEO、COO、CTO到每个事业部的总经理都是清一色的美国海归，而且绝大多数是技术出身。据说中星微招人也喜欢要高高大大的，因为这里最提倡的集体运动是美式篮球，老总们都好这个。或许正是这种“硅谷血统”，让中星微变成了一家有“技术洁癖”的公司。<br />
理想主义；精英文化；要做就做最先进的技术；建立一套标准，然后通吃整个产业；模仿偷学是丢人的……如果放在硅谷，邓中翰的这些想法实在再正常不过。<br />
无论是从企业定位、技术研发、战略制定和人才培养，中星微都是按照硅谷模式和美国的趋势来制定的。但恰恰是这些先进的东西让这个拥有多达1400多项专利和众多知名企业客户的中星微电子陷入难以做大做强的尴尬境地。<br />
硅谷是所有技术梦想家的天堂。我建议，真正想搞最先进技术的人还是应该留在硅谷。硅谷有成熟的技术市场，有真正识货的客户和VC，有足够的技术应用空间。你就是完全不知道怎么卖产品，也可以把技术卖给思科、微软、ORACLE这样的大公司。<br />
如果你是一个技术海归，想回国创业。恐怕你得想清楚，这里需要的不是最先进的技术，而是最价廉物美的技术。<br />
在中国，低成本创新才是真正的王道。当年比亚迪做锂电池，想向日本人买设备，开价就是500万美金。最后一发狠自己做“手工+模具”，只有100万人民币。从此，手机电池的定价权就掌握在比亚迪的手上。<br />
事实上，在中国做低成本创新有得天独厚的优势，中国工人不便宜了，但工程师还便宜。华为有3万工程师，比亚迪有多少工程师，欧美公司请不起的。<br />
“联发科不是大公司，没有太多资源去做早期阶段的研发，尤其是在早期定产品规格的阶段，我们不能好高骛远。即使是在S曲线的中段才切入，只要掌握好技术、弹性和效率，不见得扳不到巨人。”蔡明介在《竞争力的探求》一书中这样强调。<br />
更重要的是，通过低成本创新赚来的钱，提升了公司以战养战的能力和自信，下一次就可以更往S曲线的前端切入。今天只能打游击，明天就可以围歼，后天就可以攻城。</p>
<p>7，别忘了自己的主要客户是谁<br />
中国真正的市场在哪里，不是北京上海的几百万白领，是10亿金字塔基的消费者。北京上海的白领们都在用MSN，可二三四五六线城镇的年轻人都在用QQ，结果最没钱的人造就了中国市值最大的互联网公司。<br />
当经济萧条出现的时候，不仅仅是女士的裙子越来越长的时候。也是越来越多的中间阶层往“下流社会”走的时候。“价廉物美”成为整个社会的需求。<br />
诺基亚和多普达用的TI OMAP芯片组动辄好几百块人民币，外加软件研发成本，手机价格能下来才怪了。而联发科提供的单芯片解决方案，让国产手机客户装个外壳就可以卖。在深圳的华强北市场，差不多16元就能买一个，而且什么功能都有。联发科借此迅速掌握了整个国产手机产业链的控制权，议价能力很强，尽管不断降价，但它依然能够保持50%以上的毛利润率。它把最难的事情都替客户做了，所以客户都跟吸毒一样爱上它。<br />
“我们做的多媒体芯片各方面的功能和性能都比它（指联发科的单芯片）要强，多媒体要做好是很难的，所以它能够进入山寨机，进入不了诺基亚、三星，因为他们对照相的功能和视频功能要求很高。山寨机是说我有这个视频功能、照相功能就可以了，至于你效果如何，速度是不是够快，能否打印，都不在乎，”邓中翰反复跟我们讲。<br />
在这种“眼睛向外，市场在外”的主导思路下，主打中高端市场的中星微来自内地的收入比例不足5%。相比之下，联发科手机芯片去年出货量已经达到了1.5亿颗，其中九成是内地客户<br />
但问题在于，“别看中星微的国际客户这么多，而且都是知名企业，但它根本不是主流供货商。说句不好听的，大公司采购很多东西，中星微提供的属于螺帽钉子之类的零配件。”曾经的中星微电子职员直言。<br />
在硅谷创办技术公司，卖出32亿美金高价的朱敏，回国以后大谈“中国服务”而不是“中国创造”。因为他知道，中国还不具备这样的环境。他对技术公司的建议就是：你先把本土市场拿下来，第二步是把第三世界拿下，第三步你再把创造加进去，最后你再渗透到第一世界去。<br />
想一想，这不就是华为的战略嘛。</p>
<p>8，80分主义，不要100分主义<br />
展讯向联发科学到的最重要一课就是千万不能技术导向，而要市场导向。<br />
2004年，MP3音乐手机是国内的首创。展讯和联发科几乎同时在研发一款不用附加其它芯片的单基带芯片。<br />
展讯这边想的是芯片质量一定要做到最好。必须要有100K的传输速度，双声道。可第一代产品只做到了64K.于是，继续改进。而联发科的技术其实落后于展讯。它的芯片只有32K的速率，还是单声道。<br />
但联发科迅速把产品推向市场，结果等展讯的产品进入市场时，时机已经落后了半年多。市场主流客户已经接受了联发科。<br />
“我们太想做到100分，把功能做到最好，结果耽误了市场时机。而联发科可能只做到80分就推出产品，但已经足够了。因为客户原本只期望60分”。陈大同由此知道，只要比客户能接受的稍微好点就行。不用追求技术完美。<br />
产品从80分做到100分，也许花的精力要比从60分做到80分多几倍，客户体验只是好一点点。但技术公司永远人手不够，关键是你的资源是不是合理分配了。</p>
<p>9，别做卖萝卜卖得最好的<br />
做技术不像做别的，不能老想着蓝海。是的，你是在蓝海里面，可你这个蓝海只有游戏池那么大，而人家的红海有太平洋那么大。<br />
进入最难的市场往往也是空间最大的市场。<br />
中星微是精心选择了一块空白的利基市场，数字多媒体芯片当时并不被主流的英特尔、AMD、高通、德州仪器等厂商所重视。而其主要应用的领域是在高端PC和笔记本的摄像头上，可这块市场规模太小，每年不过2-3亿美金。按照一位前中星微管理人员的描述，“就好像一个菜市场里，别人都在卖鱼卖肉，我们不过是在卖蔬菜里面，卖萝卜卖得最好的”。<br />
换句话说，如果一台主流电脑的出厂价是400美金的话，中星微的一个解决方案只能卖到4-5美金，仅仅占到了总成本的1%左右。“PC的利润大部分给了英特尔和微软，没办法，这个东西是人家多年来建立起来的优势，我们能进入它们的采购名单已经不错了。”邓中翰也承认。<br />
可问题是，满足于做一个第一流的阑尾又有什么价值呢？</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<h2>中星微之惑 红色创投+硅谷模式为何成低谷</h2>
<p>2008/12/19/08:40 来源：创业家 作者：丁晓磊</p>
<p>北京，中关村，世宁大厦15层，中星微电子（NASDAQ：VIMC）的总部。</p>
<p>一个充满荣誉感的地方。办公区门口的蓝色背景墙上刻着七个大字：“星光中国芯工程”，这是今年4月1日，一位领导人在此视察时留下的亲笔题词。大厅最醒目的地方还摆着三个陈列柜，密密麻麻地放满了各种奖杯奖牌奖状，其中也包括中国科技的最高奖项“国家科技进步一等奖”。</p>
<p>&#8220;这只是其中一部分，还有好多都装不下了，我们正准备弄一个更大的柜子。”中星微电子公关专员常虹告诉《创业家》。</p>
<p>荣誉意味着责任。这一点可以从其创始人的简历中看出来：邓中翰博士，男，1968年9月生于南京，“星光中国芯工程”总指挥、中星微电子有限公司董事局主席兼CEO、首席科学家。请注意，他同时扮演着两个角色：一个国家级半导体工程的总指挥与一家海外上市公司的掌舵者。</p>
<p>11月19日，中星微电子宣布其产品“星光移动”手机多媒体芯片全球销量突破1亿枚大关，这是继2006年“星光”数字多媒体芯片全球销量破亿枚后的又一成果。如今，中星微电子已经占据全球计算机图像输入芯片60%以上的市场份额。看起来，这的确是一份值得大书特书的成绩单。</p>
<p>但是且慢，中星微也有不得不面对的另一面。这个中国半导体行业的模范生在登陆纳斯达克三年后，其股价已经从上市之初最高的20美元跌到11月21日的1.74美元（其上市时员工拿到的期权价格都在6美元以上），市值如今只有6000万美元左右，而其账面上的净现金超过1亿美元。如果要对股东负责的话，中星微应该私有化退市了。</p>
<p>这不完全是金融危机的过错。事实上，中星微在过去三年中，营收和利润都出现了节节倒退的情况，考虑到其第三季度亏损100多万美元的现实，今年扭亏已经基本无望。</p>
<p>在IC设计业界，同行们谈论得最多的是一家台湾公司，名叫联发科（MediaTekInc.,TW:2454）。它比中星微仅仅早出生四年，但如今却已经是市值超过80亿美元的全球第三大IC设计公司，在刚刚过去的第三季度里，联发科营收近9亿美元，净利润率高达35%，光研发费用就2亿美元。IC设计产业素有“十亿美元天险”之说，而联发科的年营收已经逼近50亿美元（中星微的年营收不到1亿美元）。</p>
<p>在邓中翰看来，联发科虽然厉害，但其技术都是“偷学”而来的，其客户大都是些中小品牌甚至“山寨机”企业。而中星微则是通过“自主创新”，赢得了今天的价值，赢得了三星、飞利浦、微软等国际大厂对其品牌的认可，这是一条索尼、松下曾经走过的正道。</p>
<p>更重要的是，邓中翰坦率地告诉《创业家》，他和公司目前主要的精力仍然在做研发而不是盈利上：我们的大股东有政府的背景。政府希望我们坚持自主创新，把星光中国芯工程做大做强，就不是指望我们短期之内赚多少钱。同样，华尔街的投资者看重的也不是在经济危机中短期你给我挣多少钱。因为现在是整个大环境低潮的时候，你要在这时候把钱用好、时间用好，到经济再恢复的时候，把股票给做上去。而到时候的盈利能力看的不是你今天的产品，而是你今天研发的产品给你带来的盈利。</p>
<p>那么，背负着多重使命的中星微，能在未来兑现它的承诺吗？</p>
<p>明星</p>
<p>坐在我们面前的邓中翰，高大俊朗，衣冠楚楚，谈吐之中透露着强烈自信，看上去比其40岁的实际年龄更加年轻。</p>
<p>事实上，很少有创业者能够像他这么幸运，一路上得到政府如此多的眷顾。</p>
<p>邓中翰以少年天才闻名，1987年考入中国科技大学，29岁成为加州大学伯克利分校130年来第一位横跨理、工、商学位的学生。此后，又在SUN和IBM担任高级研究员。</p>
<p>1998年，在伯克利校长田长霖的鼎力推荐下，信息产业部的某副部长看中了这匹“千里马”。此后，邓中翰应邀回国考察。并为国家领导人讲述了硅谷及国际IT业界的现状和前景。</p>
<p>1999年10月，邓中翰带领着他的全海归豪华团队正式回国创业。团队中有在贝尔实验室从事芯片研究的张辉博士、有英特尔和惠普工作经历的斯坦福博士杨晓东和参与过国家级项目的金兆玮。</p>
<p>中星微是在中关村科技园区成立两个月后注册的，亦是中国实践“硅谷模式”的首家公司。信息产业部电子发展基金以1000万元人民币 的风险投资作为启动资金，管理团队以知识产权折股35%。双方还约定，日后进行股权融资时，管理团队持股比例不变，即只稀释政府方面的股权——到上市前信 产部的1000万原始投入只占10.9%的股份。“红色创投”一说由此而来。</p>
<p>就在新一届政府大力提倡“自主创新”的时候，“根正苗红”的邓中翰适时地递交了“星光中国芯”工程计划，并很快被列入了众多政 府部门的重点扶植计划之中。2001年3月11日，“星光一号”研发成功，宣布了国内首枚具有自主知识产权、百万门级超大规模数字多媒体芯片的诞生。</p>
<p>当信产部提供的1000万人民币即将用完的时刻，政府及时出面力荐，让当时的加拿大创投PowerPacific投入中星微350万美元。其后，在类似的安排下中星微又进行了一轮私募。</p>
<p>根据上市时的招股文件显示，中星微电子在发展过程中获得了国家象863科技项目以及电子移动通讯的重大专项资金以及北京市科委、发改委等部委各个项目的资金补贴共达630万美元。还得以享受企业所得税“两免三减半”，增值税3%以上即征即退的优惠政策。</p>
<p>尽管如此，邓中翰还是认为“这个钱相对于企业的研发费用比较小，更重要的是传递了一种精神。”</p>
<p>2005年3月，中星微电子公司的“星光”数字多媒体芯片与神舟飞船等一起荣获国家科技进步一等奖，总书记亲自为邓中翰颁奖。当年 11月，中星微登陆纳斯达克，信产部最初的1000万投资，仅用6年就增值超过20倍。是年底，邓中翰成为CCTV年度经济人物。但在业内人士看来，中星 微的成绩并不足够令人信服。</p>
<p>简而言之，邓中翰精心选择了一块空白的利基市场，数字多媒体芯片当时并不被主流的英特尔、AMD、高通、德州仪器等厂商所重 视。而当时其主要应用的领域是在高端PC和笔记本的摄像头上，而这块市场规模太小，每年不过2-3亿美元。按照一位前中星微管理人员的描述，“就好像一个 菜市场里，别人都在卖鱼卖肉，我们不过是在卖蔬菜里面卖萝卜卖得最好的”。</p>
<p>换句话说，如果一台主流电脑的出厂价是400美元的话，中星微的一个解决方案只能卖到4-5美元，仅仅占到了总成本的1%左右。</p>
<p>“PC的利润大部分给了英特尔和微软，没办法，这个东西是人家多年来建立起来的优势，我们能进入它们的采购名单已经不错了。”邓中翰承认。</p>
<p>如果比较先后都在纳斯达克上市的三家内地IC设计公司，业内人士公认做基带芯片的展讯通信（Nasdaq:SPRD）技术含量最高，赚钱能 力是做MP3芯片的珠海炬力（Nasdaq:ACTS）最强，但中星微却是获得政府资助最多的（超过展讯一倍，炬力完全没有）。</p>
<p>事实上，中星微却是三家之中最不会赚钱的。根据其招股说明书和财报显示，其成立十年来，只有三年是赚钱的。分别是2003年的 1.4万美元，2005年的5百万美元和2006年的9百万美元。而其企业管理成本和市场费用却一直居高不下，难道是因为中星微的客户主要分布在海外，又 在硅谷和国内各大城市都开设了分公司吗？</p>
<p>政府的大力支持，媒体的摇旗呐喊，无疑让海归创业公司中星微走上了一条成长捷径。但明星的耀眼光环，过高的公众期望，又使它丧失了应有的野性和活力，并迅速以“名门正派”自居。当面对更残酷的市场竞争时，居然毫无应对良策。</p>
<p>技术导向</p>
<p>2003年之后，随着中星微在PC摄像头芯片市场取得了60%的垄断性市场份额，寻找新的市场增长点已经刻不容缓。</p>
<p>当时，中星微针对手机市场的移动多媒体芯片已经研发出来。这是一个理论上比PC摄像头大过10倍不止的“蓝海”市场。根据IDC的预测，多媒体手机将从2004年的3.24亿部（占总出货量的47%）上升到2008年的7.23亿部（占总出货量的81%）。</p>
<p>更重要的是，市场中群雄逐鹿，还没有谁确立了如同英特尔在PC中的超然地位。</p>
<p>2003年底开始，波导、联想等国内主流的手机厂商开始采用中星微的多媒体处理芯片。在国际大厂当中，由于在PC摄像头上建立的合作关系，中星微也一举打入了三星手机的采购名单。</p>
<p>但中星微研发的思路仍然是走主流路线。因为传统的做法是，要在手机当中融入新的功能就需要有一款专用的芯片，基带、射频、多媒体芯 片往往都是分离的。但随着基带芯片的运算能力日益强大，集成化趋势扑面而来，高通、TI等国际大厂也开始推出集成多媒体功能的单芯片解决方案，即用一个单 芯片的基带芯片就将多媒体的能力整合进来，从而消除了单独的多媒体芯片存在的必要性。</p>
<p>手机厂商如何选择上游的芯片厂商完全取决于不同品种手机的市场定位。这些高集成度的单芯片开始主要应用在2.5G和3G手机 上。而在中低端的2G手机市场，多芯片解决方案仍然唱主角。2005年上半年，中星微的手机多媒体芯片业务比去年上半年增长了12.6倍，在当期营收中的 比例也上升到了17.6%。当时，中星微将自己的产品定位在中端市场。</p>
<p>没人想到，名不经传的台湾厂商MTK联发科杀出来了。它起家跟中星微差不多，主要是做电脑里面的CD-ROW和DVD-ROW 的播放器芯片。与中星微前后开始研发多媒体手机芯片。2004年，联发科手机业务的营业额不过3000万美元，2005年就变成3亿美元，2006年再翻 一番。</p>
<p>与此同时，中星微的手机业务却在大幅倒退。“我们很快就被MTK赶出局了。他们能够提供足够低成本的单芯片解决方案”，那位前中星微的管理 人士承认。不仅仅是国产品牌手机厂商采用联发科的方案，层出不穷的山寨手机也几乎一边倒地投向联发科。中星微把整个内地市场拱手送给了对手。</p>
<p>联发科提供的单芯片解决方案，让客户可以装个外壳就可以卖。它的解决方案不但便宜（在深圳的华强北市场，差不多16元就能买一 个），而且精确地瞄准了中国低端市场的需求。联发科借此迅速掌握了整个产业链的控制权，议价能力很强，尽管不断降价，但它依然能够保持50%以上的毛利润 率。</p>
<p>“我们做的多媒体芯片各方面的功能和性能都比它（指联发科的单芯片）要强，多媒体要做好是很难的，所以它能够进入山寨机，进入 不了诺基亚、三星，因为他们对照相的功能和视频功能要求很高。山寨机是说我有这个视频功能、照相功能就可以了，至于你效果如何，能否打印，都不在乎，这是 山寨机的一个特征，联发科的模式正好能够满足山寨的需求。而中星微走的是更专业化的多媒体芯片，谁知道那家山寨机厂明天还在不在？”面对《创业家》的质 疑，邓中翰如此回答。</p>
<p>相比之下，联发科的另一个国内对手展讯倒是做了认真的反省。陈大同——前展讯联合创始人兼首席技术官、现北极光创投的合伙人就 坦承，“展讯向联发科学到的最重要一课就是千万不能技术导向，而要市场导向。我们太想做到100分，把功能做到最好，结果耽误了市场时机。而联发科可能只 做到80分就推出产品，但已经足够了，因为用户原本只期望60分”。</p>
<p>“中星微是一个技术导向型的企业”，邓中翰对此定位毫不犹豫。在其公司内部，研发和销售市场人员比例达到7：2，而在联发科，研发和销售比例大致相等。</p>
<p>“邓中翰是从来不见客户的。”原中星微的一位员工说。在邓自述的工作日程表中，最重头的是技术开发，然后是投资者关系、政府关系和日常管理等。</p>
<p>这在联发科董事长蔡明介看来，也许是不可想象的。他去深圳的次数远比去北京和上海的多。为了第一时间了解客户的需求，联发科专门设 立了深圳子公司，还派驻技术服务人员和天宇朗通、联想、TCL这些大厂深入合作，提供技术支持。天宇朗通的CEO荣秀丽甚至公开称联发科为“老师”。</p>
<p>硅谷派</p>
<p>让邓中翰感到骄傲的是，相比展讯和炬力，“我们的骨干团队至今只有张辉一个人离开。”从CEO、COO、CTO到每个事业部的总经理都是清一色的海归，而且绝大多数是技术出身。</p>
<p>在人才构成上，他提出了“10%海归人＋60%研发人”模式。即中星微员工10%毕业于世界名校，在国际顶级公司从事过研发工作， 具有先进理论基础和实践经验，搭建起企业管理团队；60%以上员工为研发人员，大多来自国内顶尖大学，有着坚实的学术背景和完善的技术能力，组成企业研发 团队。</p>
<p>一个未经证实的轶闻说，中星微招人喜欢要高高大大的，因为这里最提倡的集体运动是篮球，老总们都好这个。</p>
<p>或许正是这种“硅谷血统”，让中星微变成了一家有“技术洁癖”的公司。</p>
<p>理想主义；精英文化；要做就做最先进的技术；制定一套产业标准；模仿偷学是丢人的????如果放在硅谷，邓中翰的这些想法实在再正常不过。</p>
<p>他现在全力投入研发的是一项被称为“多核异构”的多媒体芯片架构新技术。架构的背后则是邓中翰的雄心壮志。</p>
<p>为此，他特地从AMD请回来了双核领域的专家，并在硅谷挖来一批高端人才。“这项技术将成为‘星光移动’的符号性产品，它会在根本上，特别是在未来3G、4G的时候改变手机的架构。”邓中翰强调。</p>
<p>“我们是中国的第一个双芯片方案，这里有集成国外的知识产权，也有我们自己的，在功耗和性能方面，能够达到一个比国外双芯产品更好的效果，对我们国家手机产业未来的发展会发挥非常重要的推动作用。”虽然产品还没有问世，邓中翰似乎已经看到了美好的未来。</p>
<p>相反，联发科的董事长蔡明介更愿意后发制人，他特别强调S曲线的概念（代表了一个产品从发展初始到最后消亡的曲线），即在市场将要 走到接近要大幅成长的中间阶段才切入，因为他认为谁在竞争中最先达到经济规模才是最重要的。所以，联发科从来没有第一个进入市场，都是作为后来者的角色进 入，用的是成熟技术，但进入后就能大幅降低行业成本，将竞争者挤出市场。</p>
<p>“我们不是大公司，没有太多资源去做早期阶段的研发，尤其是在早期定产品规格的阶段，我们不能好高骛远。即使是在S曲线的中段才切入，只要掌握好技术、弹性和效率，不见得扳不倒巨人。”蔡明介在《竞争力的探求》一书中这样写到。</p>
<p>“邓就是这样一个固执的硅谷派。”那位曾经在中星微工作过五年的管理人员对记者说。无论是从企业定位、技术研发、战略制定和人才培 养，中星微都是按照硅谷模式和美国的趋势来制定的。而恰恰是这些先进的东西让这个拥有多达1400多项专利（国内为主）和众多知名企业客户的中星微电子陷 入难以做大做强的尴尬境地。</p>
<p>在这种“眼睛向外，市场在外”的主导思路下，中星微来自内地的收入比例还在持续萎缩，2003年来自内地的收入还有26%，而到2007年年报显示已经不足5%。相比之下，联发科手机芯片去年出货量已经达到了1.5亿颗，其中九成是内地客户</p>
<p>“别看中星微的国际客户这么多，而且都是知名企业，但它根本不是主流供货商。说句不好听的，大公司采购很多东西，中星微提供的属于螺帽钉子之类的零配件。”那位曾经的中星微电子的职员直言。</p>
<p>作为知名品牌的一个辅助零件，中星微电子的议价能力很差。这几年大客户不断地要求降价，其产品毛利率已经降低到33%以下。而在IC设计产业，40%的毛利率应该是很正常的事才对。</p>
<p>这就造成了另外一个怪圈。通过低成本创新，联发科在成熟的系统芯片市场里迅速做大，也就可以投入更多的研发经费，杀入新的成熟领域，比如液晶电视、数码相机。而走高端路线的中星微，却始终只能围绕辅助产品去做，毛利率又低，很难短时间积累资金去做新的东西。</p>
<p>邓中翰告诉《创业家》，中星微计划把R&amp;D投入加大到销售收入的25%，但即便如此，一年的研发费用也不过2000万美元。</p>
<p>而为了雇佣这些昂贵的海归和在硅谷开办公室，公司的运营成本高达3300万美元。</p>
<p>出路</p>
<p>中星微是中国IC设计产业的一个缩影。</p>
<p>今年，中国的IC设计产业整体都感受到了寒冬的临近。宁波中纬出售给比亚迪、上海鼎芯通讯濒临倒闭，凯明关门，展讯通信也在第三季度亏损3130万美元。甚至有人预言“2008年将是中国IC设计企业的生死年”。</p>
<p>中国几乎所有的IC设计企业都有着几乎相同的创业轨迹：都是美国名牌大学的留学生，在大公司干过。在受到硅谷创业产生的巨大财富和 中国日益扩大的市场的双重刺激下，他们归国创业。相信凭着自己的技术，就能拉到风险投资，在中国开始复制美国梦。“前几年，中国IC设计产业严重泡沫化。 而且很多人不能安心做实事，热衷虚名、炒作概念，你可以经常看到他们宣传自己是中国第一个做什么什么的企业。”一位在芯片业奋斗多年，后改做投资咨询的业 内人士说。</p>
<p>“在中国的技术型企业里，往往是技术最牛的人做CEO,但其实真正适合管理的不到20%。而且称职的技术公司CEO必须要是一个市场高手，因为市场决定公司的方向。”北极光创投的合伙人陈大同指出。</p>
<p>作为中国芯的代表人物，邓中翰承担了整个中国IC设计产业的希望，如同身负国人重望的刘翔。</p>
<p>2008年8月18日这一天的上午，刘翔在众人惊愕的眼神下黯然退出了奥运会110米栏的跑道。</p>
<p>但邓中翰知道，他不能退，也退不得。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新blog第一篇</title>
		<link>http://veryzhang.cn/?p=28</link>
		<comments>http://veryzhang.cn/?p=28#comments</comments>
		<pubDate>Fri, 19 Dec 2008 16:43:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://zhangxuecheng1.w41.west263.cn/wordpress/?p=3</guid>
		<description><![CDATA[终于下了决心，自己买了域名和空间，准备建立自己的blog。

这里只放关于学习的东西，比如资料，笔记等等。

希望自己能坚持下去：）

<span class="readmore"><a href="http://veryzhang.cn/?p=28" title="新blog第一篇">阅读全文——共102字</a></span>]]></description>
			<content:encoded><![CDATA[<p>终于下了决心，自己买了域名和空间，准备建立自己的blog。</p>
<p>这里只放关于学习的东西，比如资料，笔记等等。</p>
<p>希望自己能坚持下去：）</p>
<p>目前感兴趣的东西包括：</p>
<p>GCC，Lex&amp;Yacc，Lua Implemention。</p>
]]></content:encoded>
			<wfw:commentRss>http://veryzhang.cn/?feed=rss2&amp;p=28</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
