<?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>CodeCake</title>
	<atom:link href="http://cookiebear.info/feed" rel="self" type="application/rss+xml" />
	<link>http://cookiebear.info</link>
	<description>Just another bear who types code.</description>
	<lastBuildDate>Tue, 06 Mar 2012 14:03:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>关于在ThinkPad X40上安装FreeBSD 9.0</title>
		<link>http://cookiebear.info/archives/842</link>
		<comments>http://cookiebear.info/archives/842#comments</comments>
		<pubDate>Mon, 27 Feb 2012 15:21:39 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[X40]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=842</guid>
		<description><![CDATA[大约2年前写过一系列FreeBSD安装记，留了一些FreeBSD 8.0在ThinkPad X40上安装的笔记。当时提到启动FreeBSD安装的时候会卡死在辨认ThinkPad扩展坞这一段。而BIOS中没有关闭扩展坞的功能，非要在Windows中用ThinkPad Configuration关闭它。

一转眼2年过去了，FreeBSD 9.0也登场了。最近想重新回到FreeBSD下看看有什么新的特色，可是却发现这个老对头却依然顽固得拦在那里。
也许是我的X40封存已久，再次通电开机后，BIOS设定被恢复成默认配置，所以问题又回来了吧。

<!--more-->

翻出泛黄的WindowsXP光盘，慢慢地装上系统，装上.Net Framework 3.0（注意：这里还不能是4.0版，ThinkVantage系列工具可能不支持）。在<a title="ThinkPad X40 2371驱动及应用程序" href="http://think.lenovo.com.cn/support/driver/driversdownlist.aspx?yt=pt&#38;categoryid=551600&#38;CODEName=2371&#38;SearchType=1&#38;wherePage=2" target="_blank">ThinkPad的网站</a>上找到了下面的软件。

<a href="http://cookiebear.info/wordpress/wp-content/uploads/2012/02/ThinkPad-configuration-installation1.png"><img class="aligncenter size-full wp-image-854" title="ThinkPad Configuration installation" src="http://cookiebear.info/wordpress/wp-content/uploads/2012/02/ThinkPad-configuration-installation1.png" alt="" width="734" height="289" /></a>安装之后，在控制面板中会出现ThinkPad Configuration，打开后可以设定关闭Device Bay，如下图所示。

<a href="http://cookiebear.info/wordpress/wp-content/uploads/2012/02/ThinkPad-configuration.png"><img class="aligncenter size-medium wp-image-847" title="ThinkPad Configuration" src="http://cookiebear.info/wordpress/wp-content/uploads/2012/02/ThinkPad-configuration-300x225.png" alt="" width="300" height="225" /></a>

但是话说回来，检测硬件设备的时候加一个超时判断就那么难吗？
难道认为这只是罕见问题，不值得花费精力去修复，所以采取放任的措施呢？]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/842/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新工作三月谈</title>
		<link>http://cookiebear.info/archives/838</link>
		<comments>http://cookiebear.info/archives/838#comments</comments>
		<pubDate>Sun, 18 Dec 2011 05:22:17 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=838</guid>
		<description><![CDATA[以前曾经有人对我说过，一份工作开始的三天，三周，三月和三年之后，分别回顾一下自己走过的路，回味其中的收获和体会，品尝过去的教训和由之得来的宝贵经验，对今后的工作将会有积极的意义。

这不，忙忙碌碌得转眼居然已经三个月了。
三个月内出现过一些流程上需要紧急处理的事件。但是北京的同伴们和我都圆满得或者说尽我们可能得达到了圆满解决的结果。在这里，我偏向于用同伴来代替同事，是因为他们的认真和敬业确实是值得尊重的。我更愿意把他们当作同一个战壕里的战友，而不仅仅是通过电话和邮件相互交待任务的业务对手而已。

不同于工作在官僚机构和国有企业的人群，在他们身上我感受到了年轻一代中国外企成员的活力和负责任的态度。他们中几乎所有人都是来自全国各地，也就是通常说的北漂一族。但是他们的专业精神和对知识的渴求时刻在打动着我。和他们在一起我感受到了团队的力量和相互尊重带来的动力。我也打算细心的带领和守护着这个团队向共同的目标前进。

就我自己来说，这份工作带来的从未曾有过的责任感和成就感。
在对事物的来龙去脉的整理，以及解决方案的归纳上有了自己总结出来的一套初步的处理方式。
而且我的英语听力和写作能力在沉寂了九年之后有了宝贵的机会来得到提高。

对这份工作我不再怀疑，而更多的是坚定了把它做下去并做好的决心和信心。

一直以为，做IT最大的乐趣就是看着自己参与的产品被送到最终用户手中，听说着他们喜爱并享受我们的产品时带来的无比的成就感。这一点无论是亲自敲出编码，还是在另一个层面上监视并呵护着它的成长，现在对我来说都是一样的。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/838/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>新工作一月谈</title>
		<link>http://cookiebear.info/archives/831</link>
		<comments>http://cookiebear.info/archives/831#comments</comments>
		<pubDate>Sun, 30 Oct 2011 09:41:07 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Others]]></category>
		<category><![CDATA[PM]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=831</guid>
		<description><![CDATA[进入某著名Android开发企业（绝非三星）已经一个多月了。
终于对软件项目的各个职位和职能有了一些框架上的了解。
作为产品软件项目经理，针对产品需要:
制定项目开发计划。
按照计划部署资源（人力和物资）。
鉴别软件缺陷的重要性并监督它们修复的进度。
监督软件的发布工作（因为有非常多的电信客户）。
从售后回收市场返修品并分析问题重心。
关注同类产品中可能出现的问题，报告或吸收基干软件体系中的重点缺陷。
和所负责项目的总经理，发布经理，市场经理，售后经理同步项目进度。

工作的触角远远超出以往程序员生涯中对项目的理解，
物理上扩展到全球各地分布4个时区，
概念上从产品路线规划一直到协助分析具体问题的第一线。
使用的语言当然是英语，同事的国籍有瑞典，日本，印度，中国和美国。
虽然已经渐渐熟悉工作的流程，但是我还是时不时提醒自己，对我来说这是个庞大的体系，确认+分析+报告+交流的步骤一刻也不能放松。

另一方面，这也是人生跨入而立之后面对的巨大的挑战。再也没有单纯得靠体力来追赶愚蠢计划的憋屈，一切都是先见性的和计划性的，每一件事都有规定的流程但也不失灵活。而我最应该做的就是花出最大的努力甚至牺牲去适应这个角色的转变，并尝试逐渐开始胜任甚至对它游刃有余。

当然现在说这些还太早，不过这毕竟是进入索爱一个月后的第一印象，暂且写了下来，留待今后的我来回味吧。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/831/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>下岗心得</title>
		<link>http://cookiebear.info/archives/823</link>
		<comments>http://cookiebear.info/archives/823#comments</comments>
		<pubDate>Fri, 23 Sep 2011 01:33:26 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=823</guid>
		<description><![CDATA[很久没有写什么东西了。最近的一篇内容是6月18日发布的。在那之后，我经历了就职以来最黑暗最绝望的项目体验。混乱的计划，昏暗的目标，豪不作为的管理者，没有任何文档的代码堆，只有亲自询问开发者才能得知的设计意图，以及变态的公司规定，耗尽了我的热情、好奇心、忍耐力，仅剩下职业责任心支撑着我勉强走到了拖延了3次的MileStone面前。

人生第一次，迫于现实情况不得不提出了辞职。而不是有计划得先找工作再退出。

7月31日，告别目前为止我职业生涯中最XX的公司。我迎来了毕业后的第一个暑假。
最近这一个半月是我毕业开始工作以来最长的休假了。感谢兔子对我的理解和支持，让我有足够空余的时间来整理自己一直想做的事情。
具体来说，我花了大半个月的时间搭建了一个比较系统的网站。在专业人士看来一定很简单，但是对一个在这之前只懂C语言的嵌入式程序员来说，确实不是一件容易的事。拜它所赐，这大半个月猛学了Html/CSS/JavaScript/PHP/MySQL/SQLite/Apache/PhotoShop。因为本来就一直对网站搭建有很大的兴趣，这一下空出那么多时间能够自由得接触它们，让我重新感受到了高一接初识FoxBase/Pascal时从心里涌出得对未知领域的好奇和兴奋。为什么SQLite显示正常的网站，跑在MySQL上就乱码？哦，原来是MySQL数据库字符内码没有设成UTF-8
为什么光修改HTML却改变不了网站显示的式样？哦，原来还要修改相应的CSS。怎么改？用FireBug，用Chrome试着改！
为什么页面上会突然显示大段的PHP警告？哦，原来要修改php.ini来关掉警告提示。
怎样用一条命令备份整个MySQL数据库？
为什么在Chrome上显示正常的页面跑到FF和IE上就错位了？原来同样的CSS代码有不同的解释。

9月20日，我开始了一份新的工作，这意味着我退出了从事十年的开发第一线，作为一名参与管理的初学者踏出了第一步。套用那些俗语，这里有挑战有风险更有机遇。十年间参与的大小项目也有七七八八，有进行顺利的也有惨淡收场的。作为基层执行者，对项目没有直接的发言权，但是却时时有自己的想法。如果自己遇到类似情况怎么对应等等。新工作也许正是提供了一个发挥并实施自己一部分想法的机会。
说实话因为没有实务经验，我心里有相当的不安，但同时我也无比希望把这份工作顺利的完成。

嗯，努力吧!!]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/823/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>几条关于Cygwin的小技巧</title>
		<link>http://cookiebear.info/archives/812</link>
		<comments>http://cookiebear.info/archives/812#comments</comments>
		<pubDate>Sat, 18 Jun 2011 11:14:49 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Computer Technology]]></category>
		<category><![CDATA[Cygwin]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=812</guid>
		<description><![CDATA[工作中用到Cygwin的机会比较多，用多了后也积累了一些小小的技巧。
其实根本也算不上什么高深的技术，只是为了怕以后忘记，所以现在写下来吧。

<strong>场景一</strong> 在一台Windows系统上新安装了Cygwin之后，输入find命令，发现下面的错误：

[text light="true"]$ FIND: Parameter format not correct[/text]

原来Windows自带有find命令，且搜索路径的优先度高于Cygwin自带的find。
解决办法就是到我的电脑的环境变量中把Cygwin的bin目录移动到最前面就行了。

<strong>场景二</strong> 在调试机上调试代码，对一些文件做了修改之后，想把修改好的文件移动到开发机上进行提交。（蛋疼的调试机没法连接网络，访问不了版本库）
要记起一天内修改过的所有文件实在是费心费力。
不过，用下面的命令可以找到最近180分钟内修改过的文件。

[text light="true"]$ find . -mmin -180[/text]

-mmin后如果指定正数值的话，搜索目标是指定时间前修改的文件。那么指定负数值的话，就是搜索指定时间后修改的文件。

另一方面，如果把-mmin替换成 -mtime的话，就可以追溯到指定天数前修改的文件了。

<strong>场景三</strong> 在指定目录下搜索包含指定关键词的带有指定扩展名的文件
由于Windows的根本性问题，cygwin的管道在Windows下就是个残废，需要借助xargs来传递前一条指令的输出结果。

[text light="true"]$ find . -name &#34;*.c&#34; &#124; xargs grep -En &#34;keyword&#34;[/text]

<strong>场景四</strong> 让Cygwin的窗口产生透明效果。
用Cygwin的安装程序安装mitty，然后代替Cygwin默认的启动Cygwin.bat即可。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/812/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Vim中查找替换控制字符</title>
		<link>http://cookiebear.info/archives/809</link>
		<comments>http://cookiebear.info/archives/809#comments</comments>
		<pubDate>Thu, 26 May 2011 14:02:00 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Computer Technology]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Regular Expression]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://cookiebear.info/archives/809</guid>
		<description><![CDATA[在新公司用Vim读代码，发现一些文件中出现了^M和^L之类的字符。用狗儿转了一圈，发现原来是Vim显示出了文件中的控制字符。类似的控制字符还有很多，详细可以参考<a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%AD%97%E7%AC%A6#.E8.A1.A8">这里的表格</a>。

输入%s/^M//g打算去除它们的时候，却发现查找替换无法定位到想要的控制字符上。

找了好一会儿才发现，原来Vim的查找替换中输入控制字符必须用别的方法。
那就是在输入^M时，必须依次在键盘上敲入Ctrl+V和Ctrl+M。

写成键盘输入方法的话，就是：
%s/{Ctrl+V}{Ctrl+M}//g

另外在寻找的过程中发现用sed可以实现同样的功能。
# sed –e ‘s/\x0D//g’ ABC.c > DEF.c

找出控制字符^M的十六进制编码是0x0D，然后填写进去就可以了。
不过因为匹配Pattern的方法不同，这条替换在Vim中是找不要想要的控制字符的。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/809/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>生日感言兼2010年小结</title>
		<link>http://cookiebear.info/archives/801</link>
		<comments>http://cookiebear.info/archives/801#comments</comments>
		<pubDate>Sun, 24 Apr 2011 04:13:12 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=801</guid>
		<description><![CDATA[距离最后一次写Blog已经过了三个月。那么长时间没有动笔，自己感觉惰性在心里不断的增长，快淹没了提笔的动力了。外部的理由当然也有很多，新公司就职，大地震，三月份内连续4次往返东西部日本。好了，我该停止为自己找理由了。
不过，唯一值得庆幸的是，虽然没有输出（写作），但是输入（阅读）却没有停止。
在意识到09年定下的<a href="http://cookiebear.info/archives/274">阅读目标</a>太过庞大之后，掰着手指头算算，我在过去一年中阅读或者说了解到的知识点有如下几条：

Learning Vi and Vim Edtior：关于Vim，我大概是09年初开始尝试使用，经过10年的使用体验，到11年的系统学习，已经可以说是小有心得。现在的我已经离不开Vim，当然还有Unix环境。行首提到的这本书能够让我了解到Vim的正确用途，对以前一些网上看来的似是而非的用法有正确的理解。当然，它是全英文的。

The Pragmatic Programmer: From Journeyman to Master：中文名称是《程序员修炼之道--从小工到专家》。在书城拾起这本书时，并不知道它的名气。只是站着翻了20多分钟，是的，是一口气看了20分钟，立刻就做了买下来的决定。书中列举了很多即使工作多年的程序员们都容易犯下的错误或者说坏习惯。不仅如此，关于正确的程序做法或者说是工作方法，书中也多有详细说明。我想对于工作了5到8年的普通程序员们，通过阅读这本书一定能够感到一些共鸣，并获得不少提示。
<!--more-->
另外还有一本国内的新作《可爱的Python》。可爱的封面，加上平易近人的文字，在充斥着专业术语和帮助手册般的计算机书籍中，让人感到一股清新的气息。
书本的设计和Python的思想如出一阁：别管太多的细节，只要让东西先用起来。
读着它仿佛回到了1995年我在高中计算机兴趣小组自由自在编程的那段快乐时光。没有项目压力，没有变态的需求变化，没有目的不明的新技术，一切随心而为，程序从指尖自然流出。

从书本以外，我还有一些别的收获。
对版本管理系统有了进一步了解，尤其是终于理解了分布式版本管理系统的概念，并尝试在自己的日常工作中使用Mercurial。
重新认识了cygwin，用好它能让很多烦人的工作事半功倍。这句话的背后意思就是：学会并用好Shell，ctags，grep，find，sed，awk，正则表达式等等基本的Unix的行事方法。
为了学会使用Firefox的插件Greasemonkey，学了一会儿JavaScript，不过中断事件太多，这个进程一直没有充分的大脑CPU时间。所以，成果可以说几乎没有。
最后还有，大跃进一般得复习了三个月英语，参加了TOEIC考试，勉强得到810分的成绩。

至于本文的结尾，那就是没有结尾。
工作中的项目渐渐要进入正式展开的阶段，会越来越忙吧。看书的时间也许会减少，但尽量不中断。
Python应该是接下来一年主业以外的学习重点。

写文章这会儿又地震了一次，生日也不让人消停，下午打算和兔子出去吃几个生煎馒头，当犒劳我们自己吧。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/801/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用grep统计代码行数</title>
		<link>http://cookiebear.info/archives/763</link>
		<comments>http://cookiebear.info/archives/763#comments</comments>
		<pubDate>Fri, 28 Jan 2011 23:44:33 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Computer Technology]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Regular Expression]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=763</guid>
		<description><![CDATA[昨天突然有个需求：统计一下源文件中代码的行数和注释的行数。
由于手头上没有别的工具，所以首先想到的就是用grep搜了。

关于正则表达式的基本用法，以前写过一篇<a href="http://cookiebear.info/archives/127">记录</a>，这里就不重复了。
先来预习一下几个必要的grep命令开关和扩展正则表达式用法。
<table border="1">
<tbody>
<tr>
<td>-c,--count</td>
<td>只打印匹配的行数，不显示匹配的内容</td>
</tr>
<tr>
<td>-n,--line-number</td>
<td>在匹配的行前面打印行号</td>
</tr>
<tr>
<td>-v,--revert-match</td>
<td>只显示不匹配的行，也就是反条件搜索</td>
</tr>
<tr>
<td>-E,--extended-regexp</td>
<td>正则表达式扩展集匹配模式，即ERE（egrep）支持模式。下文正则表达式中用到或运算符（&#124;）时，必须打开这个开关。</td>
</tr>
</tbody>
</table>
<!--more-->
另外，我们还会用到一两个POSIX字符类（POSIX Character Class），要想查看全部的内容，可以参考<a href="http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes">Wikipedia</a>。
<table border="1">
<tbody>
<tr>
<td>[:space:]</td>
<td>包括空格和制表符之类的空白字符</td>
</tr>
<tr>
<td>[:print:]</td>
<td>可见字符和空格</td>
</tr>
<tr>
<td>[:graph:]</td>
<td>仅可见字符</td>
</tr>
</tbody>
</table>
最后，使用grep的时候正则表达式写在两个'符号之间，然后敲入文件名。
不写文件名，或者文件名部分是-的时候，grep使用标准输入。
接着我们检查一下源代码文件，会发现注释的部分有：
/*
□*
■■■■/*
□□□□/*
为了方便说明，这里□表示空格，■■■■表示一个TAB产生的相当于4个空格位的缩进，自然□□□□就是四个空格产生的缩进了。
至于与代码在同一行添加注释的情况，我们把该行仅当作代码行进行统计。

OK，先来看一下实验用的源代码，一份很普通的HelloWorld程序，文件名就叫HelloWorld.c。
文件头尾部包含了一些CVS自动生成的文件信息和版本信息。
[c]
/*
 * @(#)$Id: HelloWorld.c,v 1.0 2011/01/28 00:00:18 CookieBear.info Exp $
 * @(#) A simple program which prints 'Hello World.' on your screen.
 */
#include &#60;stdio.h&#62;
#include &#60;stdlib.h&#62;
#include &#60;string.h&#62;

int main (int argc, char **argv)
{
	/* TODO: type your code starting from here */

	/* Call a standard library function to print a specified string. */
	printf(&#34;Hello, world.&#34;); /* inline comment */
	
	return 0;
}

/*=====================================================================*/
/*
 * [Update Info]
 *
 * $Log: HelloWorld.c,v $
 * Revision 1.1 2010/01/28 00:00:18  CookieBear.info
 * The first version of this program.
 *
 */
/*=====================================================================*/
[/c]

第一步，统计所有的注释行，命令如下：
grep -En '<span style="color: #66FF33;">^\/\*</span>&#124;<span style="color: #00CCFF;">^[[:space:]]\*</span>&#124;<span style="color: #FF6600;">^(+[[:space:]])\/\*</span>' HelloWorld.c
<span style="color: #66FF33;">绿色部分</span>是用来提取行首以/*开始的注释行。
<span style="color: #00CCFF;">蓝色部分</span>是用来提取行首以□*开始的注释行。
<span style="color: #FF6600;">橙色部分</span>是用来提取行首以不定数□或■加上/*组成的注释行。

下面是执行结果：
[c]
1:/*
2: * @(#)$Id: HelloWorld.c,v 1.0 2011/01/28 00:00:18 CookieBear.info Exp $
3: * @(#) A simple program which prints 'Hello World.' on your screen.
4: */
11:	/* TODO: type your code starting from here */
13:	/* Call a standard library function to print a specified string. */
19:/*=====================================================================*/
20:/*
21: * [Update Info]
22: *
23: * $Log: HelloWorld.c,v $
24: * Revision 1.1 2010/01/28 00:00:18  CookieBear.info
25: * The first version of this program.
26: *
27: */
28:/*=====================================================================*/
[/c]
嗯，预料之中的结果。如果在这里把开关符n替换成c，那就只显示匹配的行数了。

下一步，统计所有的代码行：
按照不是注释行以外的部分就是代码行的思路，输入下面的命令
grep -Evn '^\/\*&#124;^[[:space:]]\*&#124;^(+[[:space:]])\/\*' HelloWorld.c

结果是：
[c]
5:#include &#60;stdio.h&#62;
6:#include &#60;stdlib.h&#62;
7:#include &#60;string.h&#62;
8:
9:int main (int argc, char **argv)
10:{
12:
14:	printf(&#34;Hello, world.&#34;); /* inline comment */
15:	
16:	return 0;
17:}
18:
[/c]

等等，结果里混入了空行。怎么把他们去除呢？

在想办法去除空行前，我们先想想怎样把空行单独列出来。
统计所有空行（不包含空格）
grep -vn '[[:print:]]' *.c
不带-v开关是寻找所有包含非控制符（也就是A-Za-z0-9以及各种符号并包括空格）的行。
带了-v开关后则是寻找所有不包含非控制符的行，也就是空行。
统计所有空行（包含空格）
grep -vn '[[:graph:]]' *.c
上述同理，除了对空格的判别有些不同外。

那么把前后两条命令的正则表达式合并起来可以吗？像下面那样：
grep -Evn '(^\/\*&#124;^[[:space:]]\*&#124;^(+[[:space:]])\/\*)<span style="color: #FF0000">&#38;</span>[[:graph:]]' HelloWorld.c
很遗憾，2个正则表达式只能做或运算，而不能做与运算。

冷静回想一下，我们要做的其实只是在最初的结果上把空行去除就可以了。
那么完全可以用管道的方式把第一个grep的输出连接到第二个grep的输入。
输入下面的命令：
grep -Ev  '^\/\*&#124;^[[:space:]]\*&#124;^(+[[:space:]])\/\*' HelloWorld.c &#124; grep -n '[[:graph:]]' -
得到结果：
[c]
1:#include &#60;stdio.h&#62;
2:#include &#60;stdlib.h&#62;
3:#include &#60;string.h&#62;
5:int main (int argc, char **argv)
6:{
8:	printf(&#34;Hello, world.&#34;); /* inline comment */
10:	return 0;
11:}
[/c]

最后，如想得到匹配行数，一定要将第二个grep的n开关符替换成c开关符。而不应该去修改第一个grep的部分。

感觉自己对正则表达式的理解还很浅薄，如果您觉得有更好的写法的话，请一定要在回复里告诉我。

本文所有命令在MacOS X Snow Leopard和Cygwin下测试通过。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/763/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IT業界を勝ち抜く戦略について</title>
		<link>http://cookiebear.info/archives/754</link>
		<comments>http://cookiebear.info/archives/754#comments</comments>
		<pubDate>Sat, 22 Jan 2011 13:34:29 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=754</guid>
		<description><![CDATA[<blockquote>求职过程中的副产品--小论文一篇。原本放在Google Docs上的，估计不翻墙是看不了的，所以搬到这里来，凑合着看吧。</blockquote>
　先進国を中心とするグローバル的な不景気というマクロの環境の中で、特に、発展途上国におけるIT産業の発達に伴い、日本のIT産業も生き残るために、様々な技術面にチャレンジし、多数な課題に直面している。しかし、様々な競争に巻き込まれ、最後に生き残れ、さらに成長し続ける企業がそれほど多くはないと見られる。本稿では、それらの企業の成功に焦点を当て、とりわけ製品開発の戦略のあり方に関して、今までの仕事・生活の経験を活かし、考察する。
<!--more-->
　筆者は2004年の春に来日した時、携帯市場に多様な機種が溢れており、初めて見た新技術もあちこちに盛り込まれて、技術者として非常に感銘を受けていた。具体的に言えば、2004年ごろは、中国の携帯技術はまだテキストSMSや100万ピクセルのカメラなどといったレベルに止まっていた。それに対して、日本で発売された携帯はすでに、HTMLメール、500万ピクセルのカメラ、お財布ケイタイ、MP3プレーヤーなどの多様な機能を組み合わせる技術レベルに達していた。日本では携帯に関わる技術が先に進んでいることで、日本の携帯が中国市場で相当に人気を呼んでおり、日本の携帯を持っていれば、たくさんの中国人の夢であった。

　しかしながら、この数年にわたって日本の携帯市場を振り返ってみると、ワンセグなどの新機能が追加された他に、特に注目される革新的なイノベーションが見られなかった。お財布ケイタイ、ワンセグ、音楽プレーヤーなどの機能も、メーカーごとに標準化されている。日本の携帯市場では、差別化しにくい商品ばかりで、消費者にとって、良さ悪さに判断しにくい局面が現れてきている。技術そのものを磨くのというより、多くのメーカーは顧客の好みに応じ、携帯のデザイン性や液晶のピクセル数などを追求する戦略に転換してきているように見える。

　関連業界の人間の話によれば、携帯の開発はだんだんモジュール化されており、新機種の開発において、既存のモジュールに対して機能を削除したり、追加したりするような単純な作業に止まっている場合が多いそうである。それは、市場の変化と合わせ、製品を漸進的に改善・改良するプロセスが重要であるが、同じ枠の中に繰り返す作業が多くて、斬新的な技術を生み出せるためにはどのように繋がっていくか、どの程度に役に立っているか、まだ疑問が残っている。

　しかも、日本の携帯メーカーは、海外進出においても順調に進んでいないようである。その理由について、類似の商品に関する技術が溢れており、コア技術に関する技術収斂や、開発ー生産ー市場投入に関するコスト・リスク管理はしっかりなされていない所が多いと考えられる。言い換えれば、明確な開発目的の不在、組織の利益関係の複雑さによる開発の妥協性、開発現場の情報公開の不透明性、市場と開発現場の連携不足などの多数の原因が絡み合って、日本の携帯企業はグローバル市場ではなかなか競争力が付けられないと考える。

　一方、携帯市場に参入したことがないアップルは、iPhoneというイノベーション的な製品を作り出した。07年から北米や欧州で初めて発売され、08年6月から日本市場に投入した以来、多数の消費者に注目され、従来のアップルファンだけではなく、新製品の発売に伴い、たくさんの新たなアップルの愛用者を作り上げた。

　iPhoneのタッチパネル技術は、それほど斬新的な技術ではない。パソコンやPDAなどの製品にはすでに使われた技術であるが、携帯にも頻繁に使われている技術である。しかし、Androidをベースにしたタッチ系携帯などによるタッチパネルの達成度や操作体験は、iPhoneのタッチパネルと比べてまだ差があるような感じである。見た目から見ると、iPhoneはいくつかの既存技術を組み立てて、既存のモジュールを組み合わせた製品しか見えないかもしれません。しかし、アップルは、タッチパネル技術をiOSやハードウエアと統合する際、様々な技術を徹底的に検討しただけではなく、ユーザー体験も念頭に置きながら製品開発を展開してきた特徴が見られる。そうした顧客の立場からスタートする視点が製品開発の成功のヒントになると考える。

　上述と関連して、携帯の開発を代表とする組み込み式の開発においては、開発スピードや効率に対する過剰追求のため、従来の開発モジュールをそのままで採用していくパターンが多く見られる。そうした開発パターンには、基準となるモジュールを大事にすることは、間違っていないと思うが、新製品を開発する際、それぞれのモジュールを簡単に組み立てて、モジュール間の整合性や協調性が低くなる場合がしばしば見られる。そうした整合性が欠ける高技術製品は、顧客満足を得られないので、短期間に見捨てられる可能性が高く、長く愛用されることは考えにくい。そうした技術だけで組み立てられた製品ばかりを作り出す企業も、機能重視の製品競争に巻き込まれ、企業資源を無駄にする無意義の競争に追い込まれる可能性がある。

　アップルの場合、iPhoneを開発・発売する際、機能明瞭のシンプルさと使用上の簡単さをアピールしている。たとえば、Flashサポートの撤廃、AppStoreの審査制度、バッテリー交換不能などは特徴としてあげられる。まず、コア顧客を確保して、口コミなどの多数のルートでもっと多くの顧客を惹き付けてくるような市場戦略が見られる。そして、顧客層の拡大に伴い、様々な顧客の声を傾けており、新製品の発売につれて新機能が次々に追加されるといういい循環で、市場シェアを拡大している。

　それに対して、類似の商品を開発する他の企業は、多くの顧客をできる限りに獲得するために、最初から多様な機能を搭載する戦略を取っているように見える。しかし、多様な機能を装着するための開発コストの向上に伴い、予想通りの市場シェアーと顧客層を確保できていない。

　質でいえば、生産プロセスにおいて、厳しくコントロールする問題だけではなく、開発・デザインの段階から厳密に計画し、徹底的に実行することにも関わっていると考える。すなわち、設計の枠が一旦決まられたら、各機能に関する細かい目標や内容をできるだけ明確にする必要がある。そして、それぞれの機能がどのようなレベルに完成すべきか、具体的な基準レベルも設定されなければならない。それらの基準レベルを厳密に応じ、コア技術を練り上げ、製品開発のプロジェクトを進めるべきだと考える。


　以上のことをまとめて、筆者はIT業界において、製品の競争力を維持するために、以下の数点が考えられる。
●　斬新さを追求するために、技術を単純に組み立てることを避ける必要がある。しかも、顧客の使用体験を踏まえ、イノベーションを行う視点が重要である。
●　機能の選択取捨に関し、様々な意見を取り入れて統合性・整合性がある決断力が必要である。たとえば、設計の初期において、マインドストームのような発散的な思考方法で、できるだけ多くの機能を取り上げるが、開発段階に進むと、核心の機能を見極め、余計な機能を迷わずに削除する能力が求められる。
●　製品の質に関し、製品のデザイン段階から、製品の質を厳密に管理する意識が重要である。設計図が詳しく作れば作るほど、製品の質の向上に直接に繋がっていくと考えられる。

　さらに、技術・製品開発の先端にたっている技術者にとって、自分の技術能力を磨くと同時に、以下のところにも努力すべきだと考える。
●　技術を重視すると同時に、技術に過剰に拘らないように、顧客の使用体験を開発に取り入れる覚悟が必要である。
●　製品のコア機能を見極め、どのように難航しても、諦めずにそれを実現し、具体化していく信念が重要である。
　最後、技術の複雑さや難しさばかり考えることではなく、市場や顧客に目を向けて、技術の革新さを考える必要がある。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/754/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript练习：回声产生器</title>
		<link>http://cookiebear.info/archives/726</link>
		<comments>http://cookiebear.info/archives/726#comments</comments>
		<pubDate>Wed, 05 Jan 2011 14:59:58 +0000</pubDate>
		<dc:creator>MrBear</dc:creator>
				<category><![CDATA[Computer Technology]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://cookiebear.info/?p=726</guid>
		<description><![CDATA[这次的练习使用了字符串类截取子串的方法。
制造类似回声的文字效果。
只适合全部使用全角字符。
我尝试着把Javascript放在单独的js文件中，从WordPress的HTML编辑界面调用它，但是却失败了。
等有时间再研究一下吧。

<form name="word" action="">
<input type="text" name="echo" size="40" value="祝大家兔年吉祥，万事如意！" />
<input type="button" name="btnProc" value="文字を処理する" onclick="strProc()"/>
<textarea name="output_area" cols="40" rows="10"></textarea>
</form>

<script type="text/javascript">
<!--
function strProc() {
	var text = document.word.echo.value;
	var text_len = text.length;
	var output_text = "";
	for (i = 0; i < text_len; i++) {
		output_text += text.substr(i);
		for (j = 0; j < i; j++) {
			output_text += "・";
		}
		output_text += "\n";
	}
	document.word.output_area.value = output_text;
}
// -->
</script>
<!--more-->
下面是代码全文：
[js]
&#60;form name=&#34;word&#34; action=&#34;&#34;&#62;
&#60;input type=&#34;text&#34; name=&#34;echo&#34; size=&#34;40&#34; value=&#34;祝大家兔年吉祥，万事如意！&#34; /&#62;
&#60;input type=&#34;button&#34; name=&#34;btnProc&#34; value=&#34;文字を処理する&#34; onclick=&#34;strProc()&#34;/&#62;
&#60;textarea name=&#34;output_area&#34; cols=&#34;40&#34; rows=&#34;10&#34;&#62;&#60;/textarea&#62;
&#60;/form&#62;

&#60;script type=&#34;text/javascript&#34;&#62;
&#60;!--
function strProc() {
	var text = document.word.echo.value;
	var text_len = text.length;
	var output_text = &#34;&#34;;
	for (i = 0; i &#60; text_len; i++) {
		output_text += text.substr(i);
		for (j = 0; j &#60; i; j++) {
			output_text += &#34;・&#34;;
		}
		output_text += &#34;\n&#34;;
	}
	document.word.output_area.value = output_text;
}
// --&#62;
&#60;/script&#62;
[/js]
另外，一直使用的iStudio主题虽然效果很棒，但是与代码高亮插件总有一些不兼容。加之调试Javascript时出现了不少警告，所以就换成了WordPress自带的比较朴素的主题了。]]></description>
		<wfw:commentRss>http://cookiebear.info/archives/726/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

