<?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"
	>

<channel>
	<title>Apex[有所思,有所志]</title>
	<atom:link href="http://apex.ncksoft.com/feed" rel="self" type="application/rss+xml" />
	<link>http://apex.ncksoft.com</link>
	<description>日有所思，夜有所志</description>
	<pubDate>Thu, 13 Nov 2008 07:56:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>吉隆坡的七天（1）</title>
		<link>http://apex.ncksoft.com/archives/176</link>
		<comments>http://apex.ncksoft.com/archives/176#comments</comments>
		<pubDate>Mon, 10 Nov 2008 02:01:32 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[国外见闻]]></category>

		<category><![CDATA[马来西亚]]></category>

		<category><![CDATA[Kuala Lumpur]]></category>

		<category><![CDATA[吉隆坡]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=176</guid>
		<description><![CDATA[一周前接到通知，要我去一趟马来西亚，需要待一周时间，于是急急忙忙去办签证，嘿嘿，去马来西亚办签证非常简单。整个过程我就跟签证官说了一句话：

签证官：Passport。  （让我把护照递给他）
签证官：Eighty。  （签证费八十块人民币）
我：Thanks, bye。 (手续办完，离开)

然后隔一天就可以取到签证了。
十一月九日深夜11点半，经过六个多小时的飞行，飞机降落在马来西亚首都吉隆坡国际机场，入关之前先去兑换一点马币（他们叫令吉），1000人民币可以兑换466马币。
然后就是等待入关，等待取行李等等，接近凌晨一点才从机场出来。来之前Edward告诉我马来西亚的出租车管理比较混乱，最好在机场购买隶属于机场的出租车票，然后凭票乘坐机场出租车，这样就非常安全了。因为是十二点过，所以从机场到市区要八十多马币，比十二点以前的价格策略要多出二十块左右。
两点左右，顺利到达了市区里预定的酒店，酒店房间没有开通网络，于是查找无线接入点，果然有，P1HotZone，一个新兴的城市无线接入服务提供商，可以在线购买上网时间。我兴高采烈的开始填写个人信息，VISA信息等等，但是最终在VISA在线付费的时候失败了。想想太晚了，就洗洗睡了。
上午Edward开车过来酒店接我去他的公司，他是一个很热情的人。一路上景色很好，绿叶很绿，蓝天很蓝，白云很白，空气很空。
中午去吃肉骨茶（其实不是“茶”，而是煲汤），很重的中药香味，马上想起的是小时候母亲用当归、黄芪、党参等熬的鸡汤，这样的味道已经很久很久没有品尝到了，浓郁的香味中裹着一种怀念的情绪。小心的喝下一口烫烫的汤汁，顿觉一股暖流穿过脾胃，说不出的熨帖舒服。
下午没事，他们在准备明天的BankTech展会的事情，我就在办公室写文档。大约四点过，准备工作做好了，于是跟他们去布置展场。
展场就在著名的双子塔(KLCC)旁边，八月份的微软TechEd就在这里开的。这次BankTech的展厅很小，我看了看，估计也就二十家左右参展。
]]></description>
			<content:encoded><![CDATA[<p>一周前接到通知，要我去一趟马来西亚，需要待一周时间，于是急急忙忙去办签证，嘿嘿，去马来西亚办签证非常简单。整个过程我就跟签证官说了一句话：</p>
<ul>
<li>签证官：Passport。  （让我把护照递给他）</li>
<li>签证官：Eighty。  （签证费八十块人民币）</li>
<li>我：Thanks, bye。 (手续办完，离开)</li>
</ul>
<p>然后隔一天就可以取到签证了。</p>
<p>十一月九日深夜11点半，经过六个多小时的飞行，飞机降落在马来西亚首都吉隆坡国际机场，入关之前先去兑换一点马币（他们叫令吉），1000人民币可以兑换466马币。</p>
<p><span id="more-176"></span>然后就是等待入关，等待取行李等等，接近凌晨一点才从机场出来。来之前Edward告诉我马来西亚的出租车管理比较混乱，最好在机场购买隶属于机场的出租车票，然后凭票乘坐机场出租车，这样就非常安全了。因为是十二点过，所以从机场到市区要八十多马币，比十二点以前的价格策略要多出二十块左右。</p>
<p>两点左右，顺利到达了市区里预定的酒店，酒店房间没有开通网络，于是查找无线接入点，果然有，P1HotZone，一个新兴的城市无线接入服务提供商，可以在线购买上网时间。我兴高采烈的开始填写个人信息，VISA信息等等，但是最终在VISA在线付费的时候失败了。想想太晚了，就洗洗睡了。</p>
<p>上午Edward开车过来酒店接我去他的公司，他是一个很热情的人。一路上景色很好，绿叶很绿，蓝天很蓝，白云很白，空气很空。</p>
<p>中午去吃肉骨茶（其实不是“茶”，而是煲汤），很重的中药香味，马上想起的是小时候母亲用当归、黄芪、党参等熬的鸡汤，这样的味道已经很久很久没有品尝到了，浓郁的香味中裹着一种怀念的情绪。小心的喝下一口烫烫的汤汁，顿觉一股暖流穿过脾胃，说不出的熨帖舒服。</p>
<p>下午没事，他们在准备明天的BankTech展会的事情，我就在办公室写文档。大约四点过，准备工作做好了，于是跟他们去布置展场。</p>
<p>展场就在著名的双子塔(KLCC)旁边，八月份的微软TechEd就在这里开的。这次BankTech的展厅很小，我看了看，估计也就二十家左右参展。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/176/feed</wfw:commentRss>
		</item>
		<item>
		<title>China Tech.Ed 2008 开幕</title>
		<link>http://apex.ncksoft.com/archives/174</link>
		<comments>http://apex.ncksoft.com/archives/174#comments</comments>
		<pubDate>Fri, 07 Nov 2008 02:23:37 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[IT技术]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[TechEd]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=174</guid>
		<description><![CDATA[今天一早就来到工人体育场，真的是好早：赞助商要在八点到场做准备，而正式开幕是在九点半。哎，只好早早的告别温暖的被窝了。
停车的时候，看到旁边一哥们手里把玩着的手机真是自己渴慕已久的HTC Touch Pro，于是借过来感受了一下机子的重量、大小和手感，哎，真的是太爽了，等过几天从马来西亚回来，就去买~~~
本次Tech.Ed的规模比起以前来说，要小了不少，但是绝对数量还是比较多的，三千多人陆陆续续的到来，三三两两聚在一起。入口处安检很严格，连打火机都不许带进场，真是过分！！
趁着还没有开幕，就在会场外围逛逛。本次活动的赞助商可以在会场外围摆摆地摊，在微软推广Windows Mobile的地摊旁边，摆放了很多支持Windows Mobile的手机，这里我不单看到了HTC Touch Pro，还看到了HTC Touch HD（我更喜欢这一款），以及很多的高端智能手机，真是大饱眼福。
开幕式很有中国味，我和同事在讨论这到底是仿奥运开幕式风格，还是学《八面埋伏》的舞蹈场景，蛮有意思的。
开幕式之后就是介绍微软的新产品，其实好多“新产品”早就已经在网上看过了，现在就是更深入、直观的看到一些视频、演示等等。十点半的时候，想起还要去大使馆取签证，于是就翘课了。
下午继续展示新产品，主要是虚拟化技术、Surface、Visual Studio 2010等等。不知怎么的，感觉微软的技术发展离我们越来越远似的，已经远远超出操作系统的范畴，在各个方面都有涉及。还有云计算、高性能计算、Hyper-V等技术的涌现，难道世界上就只剩下超级大公司了？呜呼，对于500人以下的小公司，又有什么是适合用的呢~~~
P.S.: 到底选HTC Touch Pro好，还是选HTC Touch HD好呢？这真是让人矛盾啊~~~
]]></description>
			<content:encoded><![CDATA[<p>今天一早就来到工人体育场，真的是好早：赞助商要在八点到场做准备，而正式开幕是在九点半。哎，只好早早的告别温暖的被窝了。</p>
<p>停车的时候，看到旁边一哥们手里把玩着的手机真是自己渴慕已久的HTC Touch Pro，于是借过来感受了一下机子的重量、大小和手感，哎，真的是太爽了，等过几天从马来西亚回来，就去买~~~</p>
<p>本次Tech.Ed的规模比起以前来说，要小了不少，但是绝对数量还是比较多的，三千多人陆陆续续的到来，三三两两聚在一起。入口处安检很严格，连打火机都不许带进场，真是过分！！</p>
<p>趁着还没有开幕，就在会场外围逛逛。本次活动的赞助商可以在会场外围摆摆地摊，在微软推广Windows Mobile的地摊旁边，摆放了很多支持Windows Mobile的手机，这里我不单看到了HTC Touch Pro，还看到了HTC Touch HD（我更喜欢这一款），以及很多的高端智能手机，真是大饱眼福。</p>
<p>开幕式很有中国味，我和同事在讨论这到底是仿奥运开幕式风格，还是学《八面埋伏》的舞蹈场景，蛮有意思的。</p>
<p><span id="more-174"></span>开幕式之后就是介绍微软的新产品，其实好多“新产品”早就已经在网上看过了，现在就是更深入、直观的看到一些视频、演示等等。十点半的时候，想起还要去大使馆取签证，于是就翘课了。</p>
<p>下午继续展示新产品，主要是虚拟化技术、Surface、Visual Studio 2010等等。不知怎么的，感觉微软的技术发展离我们越来越远似的，已经远远超出操作系统的范畴，在各个方面都有涉及。还有云计算、高性能计算、Hyper-V等技术的涌现，难道世界上就只剩下超级大公司了？呜呼，对于500人以下的小公司，又有什么是适合用的呢~~~</p>
<p>P.S.: 到底选HTC Touch Pro好，还是选HTC Touch HD好呢？这真是让人矛盾啊~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/174/feed</wfw:commentRss>
		</item>
		<item>
		<title>关于Apache的mod_rewrite模块</title>
		<link>http://apex.ncksoft.com/archives/172</link>
		<comments>http://apex.ncksoft.com/archives/172#comments</comments>
		<pubDate>Mon, 27 Oct 2008 17:58:51 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[代码人生]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=172</guid>
		<description><![CDATA[很久以前写过一篇《Apache的Rewrite模块》，但那时是Mambo内部完成的参数解析，我一直没有花时间去真正搞清楚rewrite机制是如何进行的。最近做网站需要自己来做rewrite，所以又复习了一遍。
将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎优化方式。如果网站想更好地被搜索引擎收录，网站设计除了面向用户友好（User Friendly）外，搜索引擎友好 （Search Engine Friendly）的设计也是非常重要的。进入搜索引擎的页面内容越多，则被用户用不同的关键词找到的几率越大。在Google的算法调查一文中提到一个站点被Google索引页面的数量其实对PageRank也是有一定影响的。由于Google突出的是整个网络中相对静态的部分（动态网页索引量比较小）,链接地址相对固定的静态网页比较适合被Google索引（怪不得很多大网站的邮件列表归档和BLOG按日期归档的文档很容被搜的到），因此很多关于面向搜索引擎URL设计优化(URI Pretty)的文章中提到了很多利用一定机制将动态网页参数变成像静态网页的形式：
比如可以将：
http://www.domain.com/index.php?product=mp3&#038;action=ls
变成：http://www.domain.com/product/mp3/action/ls.html
操作如下：

1. 确保apache的http.conf中加载了mod_rewrite模块(缺省是不加载的)。
2. 确保apache配置中站点目录允许.htaccess重载，即：
	AllowOverride All
   需要注意的是，如果站点目录是在虚拟主机设定中进行的，不要改错了位置。
3. 修改了配置文件后，需要重新启动apache。
4. 在需要进行URL重写的目录下建立.htaccess文件。例如要对整个站点进行重写，则在站点根目录下建立.htaccess文件，假定我们的站点根目录为：
   c:\www\htdocs\test\
而服务器的根目录为
   c:\www\htdocs\
那么需要在c:\www\htdocs\test\目录下建立.htaccess，文件内容如下：
&#60;IfModule mod_rewrite.c&#62;
RewriteEngine On
RewriteBase /test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php [L]
&#60;/IfModule&#62;
当然，如果站点目录就是根目录，则.htaccess文件内容如下：
&#60;IfModule mod_rewrite.c&#62;
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&#60;/IfModule&#62;
上述重写规则表示：启用URL重写功能，对于以&#8221;RewriteBase&#8221;开始的URL，如果没有找到直接的文件，则将其重写为 /index.php 。
假定我们有如下的目录结构(注：站点根目录为c:\www\htdocs\test\)
  c:\www\htdocs\test\
    &#124;- .htaccess
    &#124;- index.php
  [...]]]></description>
			<content:encoded><![CDATA[<p>很久以前写过一篇<a href="http://apex.ncksoft.com/archives/7">《Apache的Rewrite模块》</a>，但那时是Mambo内部完成的参数解析，我一直没有花时间去真正搞清楚rewrite机制是如何进行的。最近做网站需要自己来做rewrite，所以又复习了一遍。</p>
<p>将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎优化方式。如果网站想更好地被搜索引擎收录，网站设计除了面向用户友好（User Friendly）外，搜索引擎友好 （Search Engine Friendly）的设计也是非常重要的。进入搜索引擎的页面内容越多，则被用户用不同的关键词找到的几率越大。在Google的算法调查一文中提到一个站点被Google索引页面的数量其实对PageRank也是有一定影响的。由于Google突出的是整个网络中相对静态的部分（动态网页索引量比较小）,链接地址相对固定的静态网页比较适合被Google索引（怪不得很多大网站的邮件列表归档和BLOG按日期归档的文档很容被搜的到），因此很多关于面向搜索引擎URL设计优化(URI Pretty)的文章中提到了很多利用一定机制将动态网页参数变成像静态网页的形式：<br />
比如可以将：<br />
http://www.domain.com/index.php?product=mp3&#038;action=ls<br />
变成：http://www.domain.com/product/mp3/action/ls.html</p>
<p>操作如下：<br />
<span id="more-172"></span><br />
1. 确保apache的http.conf中加载了mod_rewrite模块(缺省是不加载的)。<br />
2. 确保apache配置中站点目录允许.htaccess重载，即：<br />
	AllowOverride All<br />
   需要注意的是，如果站点目录是在虚拟主机设定中进行的，不要改错了位置。<br />
3. 修改了配置文件后，需要重新启动apache。<br />
4. 在需要进行URL重写的目录下建立.htaccess文件。例如要对整个站点进行重写，则在站点根目录下建立.htaccess文件，假定我们的站点根目录为：<br />
   c:\www\htdocs\test\<br />
而服务器的根目录为<br />
   c:\www\htdocs\<br />
那么需要在c:\www\htdocs\test\目录下建立.htaccess，文件内容如下：</p>
<p><code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /test/<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /test/index.php [L]<br />
&lt;/IfModule&gt;</code></p>
<p>当然，如果站点目录就是根目录，则.htaccess文件内容如下：</p>
<p><code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /index.php [L]<br />
&lt;/IfModule&gt;</code></p>
<p>上述重写规则表示：启用URL重写功能，对于以&#8221;RewriteBase&#8221;开始的URL，如果没有找到直接的文件，则将其重写为 /index.php 。</p>
<p>假定我们有如下的目录结构(注：站点根目录为c:\www\htdocs\test\)<br />
  c:\www\htdocs\test\<br />
    |- .htaccess<br />
    |- index.php<br />
    |<br />
    |- info   (这是一个目录)<br />
    |    |-  .htaccess<br />
    |    \-  index.php<br />
    |<br />
    \- info2<br />
         |- test.html<br />
         \- info.php</p>
<p>其中，c:\www\htdocs\test\.htaccess的文件内容为：<br />
<code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /test/<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /test/index.php [L]<br />
&lt;/IfModule&gt;</code></p>
<p>而 c:\www\htdocs\test\info\.htaccess的内容为：<br />
<code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /test/info/<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /info/index.php [L]<br />
&lt;/IfModule&gt;</code></p>
<p>那么会有如下重写结果：</p>
<p>尝试访问： http://www.domain.com/test/aaa/bbb/ccc.html<br />
实际访问： /test/index.php<br />
得到参数： /test/aaa/bbb/ccc.html</p>
<p>尝试访问： http://www.domain.com/test/info/bbb/ccc.html<br />
实际访问： /test/info/index.php<br />
得到参数： /test/info/bbb/ccc.html</p>
<p>尝试访问： http://www.domain.com/test/info2/test.html<br />
实际访问： /test/info2/test.html<br />
得到参数： N/A</p>
<p>尝试访问： http://www.domain.com/test/info2/abcd.html<br />
实际访问： /test/index.php<br />
得到参数： /test/info2/abcd.html</p>
<p>上面的内容中，&#8221;实际访问&#8221;就是$_SERVER[&#8217;PHP_SELF&#8217;]，而&#8221;得到参数&#8221;其实就是$_SERVER[&#8217;REQUEST_URI&#8217;]。这样，我们可以在PHP脚本中根据一定的规则将参数分离出来。比如说对于http://www.domain.com/test/a/AA/b/BB.html:<br />
  &#8230;<br />
  $urlpath = PHP_SELF反向查找&#8217;/'字符，然后抛弃后面的文件名; (得到: /test/)<br />
  $param = REQUEST_URI - $urlpath; (得到: a/AA/b/BB.html)<br />
  $param = $param - &#8216;.html&#8217;; (得到: a/AA/b/BB)<br />
  $params = 用&#8217;/'将$param分割; (得到一个数组)<br />
  用循环合成需要的参数，得到 $a = &#8216;AA&#8217;; $b = &#8216;BB&#8217;;<br />
  使用这些参数<br />
  &#8230;</p>
<p>当然，也可以设计其他的参数规则，例如某个页面有固定的参数形式，则可以：<br />
  http://www.domain.com/test/AA/BB.html<br />
我们要求第一个参数一定是$a，第二个参数一定是$b，效果一样。但是这样的规则设计不可以写成：<br />
  http://www.domain.com/test/BB/AA.html<br />
那样就乱套了。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/172/feed</wfw:commentRss>
		</item>
		<item>
		<title>工作满八年了</title>
		<link>http://apex.ncksoft.com/archives/175</link>
		<comments>http://apex.ncksoft.com/archives/175#comments</comments>
		<pubDate>Mon, 20 Oct 2008 11:39:12 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[心情随笔]]></category>

		<category><![CDATA[工作七周年志]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=175</guid>
		<description><![CDATA[今天，是我参加工作整整八年的纪念日，也是我第一份工作满八年的纪念日——我还没有跳过槽呢。
说起来，在IT界，工作这么长时间还没有跳槽还真是不多见。不过正因如此，我亲身陪伴公司从二十来人成长到二百六七十人，我也从一个小兵成长为公司的CIO，不论是公司还是我自己，都有了很多很多的收获。
但是现在还不是收获的季节，一方面是全球信贷危机（虽然目前对我们的影响并不大），一方面是公司成立十周年了，正处于一个成长与转变的矛盾期，而自己也处在从纯技术开发、管理到信息管理的转型期，一句话，革命尚未成功，同志仍需努力！！
可惜我的《工作七周年志》还没有写完，就得开始改标题为《工作八周年志》了。  :)
]]></description>
			<content:encoded><![CDATA[<p>今天，是我参加工作整整八年的纪念日，也是我第一份工作满八年的纪念日——我还没有跳过槽呢。</p>
<p>说起来，在IT界，工作这么长时间还没有跳槽还真是不多见。不过正因如此，我亲身陪伴公司从二十来人成长到二百六七十人，我也从一个小兵成长为公司的CIO，不论是公司还是我自己，都有了很多很多的收获。</p>
<p>但是现在还不是收获的季节，一方面是全球信贷危机（虽然目前对我们的影响并不大），一方面是公司成立十周年了，正处于一个成长与转变的矛盾期，而自己也处在从纯技术开发、管理到信息管理的转型期，一句话，革命尚未成功，同志仍需努力！！</p>
<p>可惜我的《工作七周年志》还没有写完，就得开始改标题为《工作八周年志》了。  :)</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/175/feed</wfw:commentRss>
		</item>
		<item>
		<title>好贴心的感觉</title>
		<link>http://apex.ncksoft.com/archives/173</link>
		<comments>http://apex.ncksoft.com/archives/173#comments</comments>
		<pubDate>Sun, 07 Sep 2008 16:15:49 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[心情随笔]]></category>

		<category><![CDATA[我的宝贝]]></category>

		<category><![CDATA[宝宝]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=173</guid>
		<description><![CDATA[最近太忙，晚上回到家，吃过饭，一阵倦意涌上来，于是就倒在沙发上睡一会儿。
正迷迷糊糊时，感觉有人给我披上了被子，睁眼一看，原来是我的宝宝，她本来在看动画片，见我倒在沙发上睡着了，于是自己跑到卧室去把她的小被子抱了出来给我盖上。
呜呜呜~~~好乖巧的女儿，真是我的好宝宝~~~一阵贴心的感觉，真的好幸福啊~~~
]]></description>
			<content:encoded><![CDATA[<p>最近太忙，晚上回到家，吃过饭，一阵倦意涌上来，于是就倒在沙发上睡一会儿。</p>
<p>正迷迷糊糊时，感觉有人给我披上了被子，睁眼一看，原来是我的宝宝，她本来在看动画片，见我倒在沙发上睡着了，于是自己跑到卧室去把她的小被子抱了出来给我盖上。</p>
<p>呜呜呜~~~好乖巧的女儿，真是我的好宝宝~~~一阵贴心的感觉，真的好幸福啊~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/173/feed</wfw:commentRss>
		</item>
		<item>
		<title>德里记事之三</title>
		<link>http://apex.ncksoft.com/archives/170</link>
		<comments>http://apex.ncksoft.com/archives/170#comments</comments>
		<pubDate>Thu, 28 Aug 2008 16:40:40 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[国外见闻]]></category>

		<category><![CDATA[SmartCard Expo]]></category>

		<category><![CDATA[德里]]></category>

		<category><![CDATA[新德里]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=170</guid>
		<description><![CDATA[今天我享受了一天的“冰火两重天”！
天气非常热，而我们去展会会场，还是得西装革履。看着这么热的天气，我想了想，把西服留在了酒店——啊，真是失策，会场里面的温度很低，我估计只有二十度。天知道他们为什么不注意节约能源！呆了不一会儿，就冷得受不了了，赶紧跑到会场外，嗯，真是舒服啊。然而外面的气温有三十五度以上，到中午的时候更热，即时是站在树荫下，待一会儿也是热的人够呛，更何况外面的气味～～～所以在外面待一会儿，又不得不回到会场去接受寒风侵袭。
不过在会场外面抽烟兼回复体温的时候，看到一个小家伙探头探脑的，很是可爱。

展会中我们不但遇到了一些客户以及潜在客户，也遇到了竞争对手。嗯，商业上的竞争对手：一方面在版权专利上相互牵制，一方面在市场销售上你争我抢，现在在展会上却是笑脸相迎，将各自的新产品都拿出来相互交流。
]]></description>
			<content:encoded><![CDATA[<p>今天我享受了一天的“冰火两重天”！</p>
<p>天气非常热，而我们去展会会场，还是得西装革履。看着这么热的天气，我想了想，把西服留在了酒店——啊，真是失策，会场里面的温度很低，我估计只有二十度。天知道他们为什么不注意节约能源！呆了不一会儿，就冷得受不了了，赶紧跑到会场外，嗯，真是舒服啊。然而外面的气温有三十五度以上，到中午的时候更热，即时是站在树荫下，待一会儿也是热的人够呛，更何况外面的气味～～～所以在外面待一会儿，又不得不回到会场去接受寒风侵袭。</p>
<p>不过在会场外面抽烟兼回复体温的时候，看到一个小家伙探头探脑的，很是可爱。</p>
<p><a href='http://apex.ncksoft.com/wp-content/uploads/2008/09/delhi_02.jpg' rel='lightbox[delhi]' title='一只小松鼠在探头探脑的，离我只有半米远。'><img src="http://apex.ncksoft.com/wp-content/uploads/2008/09/delhi_02-300x230.jpg" alt="一只小松鼠" title="delhi_02" width="300" height="230" class="alignnone size-medium wp-image-171" /></a></p>
<p>展会中我们不但遇到了一些客户以及潜在客户，也遇到了竞争对手。嗯，商业上的竞争对手：一方面在版权专利上相互牵制，一方面在市场销售上你争我抢，现在在展会上却是笑脸相迎，将各自的新产品都拿出来相互交流。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/170/feed</wfw:commentRss>
		</item>
		<item>
		<title>德里记事之二</title>
		<link>http://apex.ncksoft.com/archives/168</link>
		<comments>http://apex.ncksoft.com/archives/168#comments</comments>
		<pubDate>Thu, 28 Aug 2008 15:24:17 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[国外见闻]]></category>

		<category><![CDATA[SmartCard Expo]]></category>

		<category><![CDATA[德里]]></category>

		<category><![CDATA[新德里]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=168</guid>
		<description><![CDATA[在酒店睡了几个小时，修整了一下，中午赶到展览会场去领取参展商的胸牌。等到了展览馆，我不得不吃惊于其破败的外观！从展览馆的大门(如果几根铁链相隔算得上是大门的话)到我们的目标——第七展厅，一路走过去，路边的展厅都是一片衰败景象：别说窗明几净了，这里灰尘遍布，应该是很久没有人打扫过，一些玻璃门窗也只剩下一个空架子了。只有第七展厅，因为明天就是智能卡展，所以正在收拾。
取了胸牌后回到酒店，等我们在印度的销售商开车过来接我们，我们要去他们的公司参观一下，并洽谈更进一步的。他们的公司位于德里，从新德里过去，还是有些远。嗯，且当观光游览罢。
嗯，德里市区比我想象中的还要差。从新德里到德里，一路上的气味真是让人受不了。原来，这里不少人是没有能力住在房子里的，只有在街头流浪，当然，吃喝拉撒都是在街头路边，气味要是还能好就奇了怪了。说是世界上三分之一穷困的人都在印度，看来不假了。交通也是比较拥堵，感觉这里的司机除了遵守红绿灯以及开车要系安全带，就没有其他的限制了，行人、摩托车、三轮车、私家车、公共汽车等等，所有的人都在挤。
印度尊牛为神，不可杀牛，更不可食用牛肉，当然也不会有牛皮制品出现，倒是牛奶是可以饮用的。在德里，偶尔能够看到牛在道路上悠哉悠哉的闲逛，或者倒卧在路边树荫下休息，没有人管。当我问起如果牛在路上阻碍了交通会如何处理，当地人回答说，当然是绕道而行了～～～

 这里的私家车，绝大部分是微型车，多数是印度国产的TATA（就是收购了路虎的那个塔塔，印度最大的集团）、现代、铃木等，路边偶尔能看到一辆警察的车辆，也是微型车。还有不少的三轮车在做着人力运输的业务，更多的是摩托车，在车流中穿行，不得不佩服他们的技术。销售商说，只要能够在德里开车，那就能够在世界任何一个地方开车了。我们的销售商驾车技术也真不是盖的，我们都说他可以去做公路赛车手这个很有前途的第二职业了。
在销售商那里谈了几个小时，自然而然就到了晚饭时间，于是我们一起去吃正宗的印度咖喱鸡肉饭。这里的米饭很有特点，没煮之前都是很小很小的颗粒，跟国内常见的米差不多，但是煮熟了之后比起国内市场上能够买到的香米煮熟了还要长出一倍，更是普通米的三倍长。奇怪的是，这里的咖喱味道和国内能够吃到的咖喱味道差不多，没有那种特色食物到了另一个地方就总是大改变的情况，我估计是国内没有人生产“Made in China”的咖喱的缘故吧。
我们在超市里逛了逛，超市还是蛮现代化的，各种商品琳琅满目。我们也就挑着买了些咖喱、辣椒什么的，意思一下。从超市出来，看到外面破败的街道和旁边的建筑，又感觉时光从一个时代转换到了另一个时代。
]]></description>
			<content:encoded><![CDATA[<p>在酒店睡了几个小时，修整了一下，中午赶到展览会场去领取参展商的胸牌。等到了展览馆，我不得不吃惊于其破败的外观！从展览馆的大门(如果几根铁链相隔算得上是大门的话)到我们的目标——第七展厅，一路走过去，路边的展厅都是一片衰败景象：别说窗明几净了，这里灰尘遍布，应该是很久没有人打扫过，一些玻璃门窗也只剩下一个空架子了。只有第七展厅，因为明天就是智能卡展，所以正在收拾。</p>
<p>取了胸牌后回到酒店，等我们在印度的销售商开车过来接我们，我们要去他们的公司参观一下，并洽谈更进一步的。他们的公司位于德里，从新德里过去，还是有些远。嗯，且当观光游览罢。</p>
<p>嗯，德里市区比我想象中的还要差。从新德里到德里，一路上的气味真是让人受不了。原来，这里不少人是没有能力住在房子里的，只有在街头流浪，当然，吃喝拉撒都是在街头路边，气味要是还能好就奇了怪了。说是世界上三分之一穷困的人都在印度，看来不假了。交通也是比较拥堵，感觉这里的司机除了遵守红绿灯以及开车要系安全带，就没有其他的限制了，行人、摩托车、三轮车、私家车、公共汽车等等，所有的人都在挤。</p>
<p>印度尊牛为神，不可杀牛，更不可食用牛肉，当然也不会有牛皮制品出现，倒是牛奶是可以饮用的。在德里，偶尔能够看到牛在道路上悠哉悠哉的闲逛，或者倒卧在路边树荫下休息，没有人管。当我问起如果牛在路上阻碍了交通会如何处理，当地人回答说，当然是绕道而行了～～～<br />
<span id="more-168"></span></p>
<p><a href='http://apex.ncksoft.com/wp-content/uploads/2008/09/delhi_01.jpg' rel='lightbox[delhi]' title='街头随处可见的出租三轮车'><img src="http://apex.ncksoft.com/wp-content/uploads/2008/09/delhi_01-300x166.jpg" alt="街头随处可见的出租三轮车" title="delhi_01" width="300" height="166" class="alignright size-medium wp-image-169" /></a> 这里的私家车，绝大部分是微型车，多数是印度国产的TATA（就是收购了路虎的那个塔塔，印度最大的集团）、现代、铃木等，路边偶尔能看到一辆警察的车辆，也是微型车。还有不少的三轮车在做着人力运输的业务，更多的是摩托车，在车流中穿行，不得不佩服他们的技术。销售商说，只要能够在德里开车，那就能够在世界任何一个地方开车了。我们的销售商驾车技术也真不是盖的，我们都说他可以去做公路赛车手这个很有前途的第二职业了。</p>
<p>在销售商那里谈了几个小时，自然而然就到了晚饭时间，于是我们一起去吃正宗的印度咖喱鸡肉饭。这里的米饭很有特点，没煮之前都是很小很小的颗粒，跟国内常见的米差不多，但是煮熟了之后比起国内市场上能够买到的香米煮熟了还要长出一倍，更是普通米的三倍长。奇怪的是，这里的咖喱味道和国内能够吃到的咖喱味道差不多，没有那种特色食物到了另一个地方就总是大改变的情况，我估计是国内没有人生产“Made in China”的咖喱的缘故吧。</p>
<p>我们在超市里逛了逛，超市还是蛮现代化的，各种商品琳琅满目。我们也就挑着买了些咖喱、辣椒什么的，意思一下。从超市出来，看到外面破败的街道和旁边的建筑，又感觉时光从一个时代转换到了另一个时代。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/168/feed</wfw:commentRss>
		</item>
		<item>
		<title>德里记事之一</title>
		<link>http://apex.ncksoft.com/archives/164</link>
		<comments>http://apex.ncksoft.com/archives/164#comments</comments>
		<pubDate>Wed, 27 Aug 2008 21:20:56 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[国外见闻]]></category>

		<category><![CDATA[SmartCard Expo]]></category>

		<category><![CDATA[德里]]></category>

		<category><![CDATA[新德里]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=164</guid>
		<description><![CDATA[飞机轰鸣着，降落在这片孕育了千年历史的土地上。印度，在我心中，就是湿婆神与帝释天、释迦穆尼、大篷车、咖喱鸡肉饭、全球软件外包集散地。现在，我可以近距离感受一下这个中国以下的世界第二大人口大国的首都风貌。
因为是北京奥运结束的第二天，所以有不少印度的运动员回国，所以六个多小时的飞行中，飞机上的欢笑不断，闪光灯不时亮起，那是同机的人在和运动员合影。等下了飞机，发现有不少的人在准备接机，花环、军乐队以及众多的警察维持秩序，让凌晨两点的机场也充满了喜庆的气氛。
在机场出口，我们找到了预订的酒店派来迎接的服务员，等了半个小时，酒店的车来了，我们离开了机场。德里的车有些怪异，倒不是说他们的驾驶位在右侧，而是，很多车都没有装后视镜，而且，一些有保留后视镜的车，也将后视镜紧紧的贴在车身上！据说在印度大家开车都是乱钻，保留后视镜会导致车身要宽上一些，那样会在一堆车子乱钻的时候处于下风，所以很多人就把后视镜拆掉了(交警部门不管么？)。果不其然，在机场就发现出租车基本上都是没有后视镜的。

北京时间凌晨四点半，当地时间凌晨两点，我们入住了位于新德里的Le MERIDIEN五星级酒店。这里的空气湿度出乎我的意料：从空调车上下来的时候，眼镜镜片上就蒙上了一层水雾，然而这湿度并不让人难受，反而让人觉得好像皮肤都在舒服的呼吸～～～啊，好像回到了闷热的四川盆地！
嗯，赶紧洗洗睡吧，还有好多事情呢！
酒店四四方方的，内部中空，就像一个口字。里面每一层楼的走廊形成一个回廊。

大厅设计的很漂亮，毕竟是五星级酒店嘛。

标准间就是标准间，没什么可说的。本以为住在第九层，可以通过落地窗观赏一下风景，但是失望的是，外面一片灰蒙蒙，不知道是雾气还是空气污染。倒是房间里有一台46寸的液晶，闲来没事可以看看HBO或者Star World电视台，倒也是不错的消遣。

]]></description>
			<content:encoded><![CDATA[<p>飞机轰鸣着，降落在这片孕育了千年历史的土地上。印度，在我心中，就是湿婆神与帝释天、释迦穆尼、大篷车、咖喱鸡肉饭、全球软件外包集散地。现在，我可以近距离感受一下这个中国以下的世界第二大人口大国的首都风貌。</p>
<p>因为是北京奥运结束的第二天，所以有不少印度的运动员回国，所以六个多小时的飞行中，飞机上的欢笑不断，闪光灯不时亮起，那是同机的人在和运动员合影。等下了飞机，发现有不少的人在准备接机，花环、军乐队以及众多的警察维持秩序，让凌晨两点的机场也充满了喜庆的气氛。</p>
<p>在机场出口，我们找到了预订的酒店派来迎接的服务员，等了半个小时，酒店的车来了，我们离开了机场。德里的车有些怪异，倒不是说他们的驾驶位在右侧，而是，很多车都没有装后视镜，而且，一些有保留后视镜的车，也将后视镜紧紧的贴在车身上！据说在印度大家开车都是乱钻，保留后视镜会导致车身要宽上一些，那样会在一堆车子乱钻的时候处于下风，所以很多人就把后视镜拆掉了(交警部门不管么？)。果不其然，在机场就发现出租车基本上都是没有后视镜的。<br />
<span id="more-164"></span></p>
<p>北京时间凌晨四点半，当地时间凌晨两点，我们入住了位于新德里的Le MERIDIEN五星级酒店。这里的空气湿度出乎我的意料：从空调车上下来的时候，眼镜镜片上就蒙上了一层水雾，然而这湿度并不让人难受，反而让人觉得好像皮肤都在舒服的呼吸～～～啊，好像回到了闷热的四川盆地！</p>
<p>嗯，赶紧洗洗睡吧，还有好多事情呢！</p>
<p>酒店四四方方的，内部中空，就像一个口字。里面每一层楼的走廊形成一个回廊。<br />
<a href='http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_01.jpg' rel='lightbox[delhi]' title='Le MERIDIEN酒店内部'><img src="http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_01-225x300.jpg" alt="Le MERIDIEN酒店内部" title="lemeridien_01" width="225" height="300" class="size-medium wp-image-165" /></a></p>
<p>大厅设计的很漂亮，毕竟是五星级酒店嘛。<br />
<a href='http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_02.jpg' rel='lightbox[delhi]' title="Le MERIDIEN酒店大厅"><img src="http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_02-300x225.jpg" alt="酒店大厅" title="lemeridien_02" width="300" height="225" class="size-medium wp-image-166" /></a></p>
<p>标准间就是标准间，没什么可说的。本以为住在第九层，可以通过落地窗观赏一下风景，但是失望的是，外面一片灰蒙蒙，不知道是雾气还是空气污染。倒是房间里有一台46寸的液晶，闲来没事可以看看HBO或者Star World电视台，倒也是不错的消遣。<br />
<a href='http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_03.jpg' rel='lightbox[delhi]' title="Le MERIDIEN酒店标准间"><img src="http://apex.ncksoft.com/wp-content/uploads/2008/09/lemeridien_03-300x225.jpg" alt="酒店标准间" title="lemeridien_03" width="300" height="225" class="size-medium wp-image-167" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/164/feed</wfw:commentRss>
		</item>
		<item>
		<title>工作七周年志(11) - 第一个任务</title>
		<link>http://apex.ncksoft.com/archives/163</link>
		<comments>http://apex.ncksoft.com/archives/163#comments</comments>
		<pubDate>Thu, 31 Jul 2008 17:38:02 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[心情随笔]]></category>

		<category><![CDATA[工作七周年志]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=163</guid>
		<description><![CDATA[因为我已经有一定的编程功底，所以经过一周的时间熟悉产品之后，我就接到一个任务，基于公司的USB Token独立开发一款实用的小程序，用于加密保护用户的数据文件。
没有人告诉我从何入手，做成什么样子。接到这样的任务，首先第一点就是上网找资料。不过那时候Google还没有现在这么出名，找资料也没有现在这么方便。还好以前自己在研究系统的“回收站”的工作机理时，了解了一些系统Shell扩展方面的知识，觉得可以用这种方式来实现数据文件的加密保护。
基本的思想就是实现一个类似于“回收站”这样的东东，可以集成到资源管理器中，用户可以打开资源管理器来操作自己要加密保护的文件。我将其取名叫“我的保险箱”，文件被拖放到“我的保险箱”中，就会自动加密，要想使用被加密保护的文件，必须先将其从“我的保险箱”中拖放到一个普通的目录下，则会自动解密还原。当然，无论是加密还是解密，都需要事先认证用户的身份，也就是公司的硬件产品：USB Token。
这是我第一次接触到COM编程，很多东西都不懂，也没有什么现成的资料可以参阅，唯一的文档就是MSDN中对于Shell Extension的各个接口的说明，至于各个接口之间如何配合，就语焉不详了。我只能一边学习，一边写些代码来验证自己的想法。所用的开发工具当然是最熟悉的C++ Builder了。
等我把要用到的一些接口如IDragSource/IDropTarget/IStream等等了解得七七八八之后，已经过了两个多星期了。好在C++ Builder开发COM程序还是相当方便的，剩下要做的就是细致的活了，把各个接口都实现并配合好，做一个安装程序，就应该可以了，但是又开发了两个星期之后，遇到了一个大麻烦。

资源管理器老是会在某个时刻崩溃，其罪魁祸首自然就是我写的扩展了，但是跟踪来跟踪去，最后发生崩溃的都是在C++ Builder提供的库里面，是内存分配/释放的部分。经过几天的调试，我实在是没有招儿了，只好求助研发经理(嘿嘿，就是我的技术面试官)。他在我的电脑上调试了几个小时，最后跟踪到C++ Builder的库里面进行反汇编调试(没办法，我可不懂汇编，到现在都没有学会)，得出的结论是：C++ Builder编译的二进制中内存管理部分存在问题，要么等C++ Builder升级看看能否解决，要么换用Visual C++。
我还从来没有用过VC。不过没有关系，语法都是一样的，工具嘛，多用一下就熟练了。而且其他同事基本上都是用VC开发，这样也更好交流不是么。于是从那时开始，我就基本上不再使用C++ Builder了，陪伴我至今的最主要的开发工具就是VC，从当时的Visual C++ 6.0一直到现在的Visual Studio 2008。
有了前期的铺垫工作，换用VC之后，经过几天的时间对VC IDE的熟悉后，开发工作又走向了正轨。不过系统外壳扩展这种程序调试起来还是比较的麻烦(当时不知道可以將资源管理器单独关闭来重新加载系统外壳扩展)，稍不注意就把资源管理器搞死了，只能重新启动计算机。不过看着这个小程序一天天的完善，心中还是挺美的。
但是又一个意外发生了。大概在换用VC进行开发的两周之后，“我的保险箱”的开发已经接近特性冻结的时候，硬盘坏了－－更糟糕的是，我发觉硬盘坏掉之后，就將硬盘低级格式化了，这样一来，虽然坏掉的磁道被低格程序标记成坏道从而不再使用，硬盘又可以使用了，但是我的源代码，全没了。
当时公司还很小，并没有上什么源代码控制之类的系统，每个开发人员就是各自为政，需要备份代码的时候就將整个代码目录复制一份，再加上一个日期作为目录名的后缀就算完事，同事之间需要共享代码也是直接將代码发到对方的共享目录中。而“我的保险箱”是纯粹的独立开发，所有的代码都在我一个人的硬盘上，而且因为开发比较顺利，也没有备份。现在硬盘坏了，近两个月的工作算是白费了，记得当时自己直接就傻眼了，恨不得以头抢地。想想都快到了交活的时候了，自己要是说“啊呀，我的硬盘坏掉了，现在交不了活了”这样的话，谁知道上头怎么想啊，谁知道你是不是完成不了任务，就找这样的借口呢。
怎么办？想起以前有搞过硬盘文件系统的分析，知道所谓的格式化什么的不一定会將所有数据抹去，那么有可能能够通过分析硬盘扇区的方式找到原来的分区表然后将数据恢复回来的。想到就做，于是用光盘启动到DOS，用Debug来调用INT 13中断直接读扇区，果然低格程序并没有將所有数据抹去。然后就是手工计算偏移，再读取另一块扇区的数据进行分析，就这样折腾了三天，我终于还是放弃了。我靠，这真不是人干的活儿啊，计算量太大，全部都是16进制的计算，还只能手写在纸上来算。我想，还不如重新来过，多熬几个夜，损失几天时间，应该不会太严重的，毕竟公司并没有强制我一定要在什么时候完成啊。而且要用到的技术都已经在心中，熟门熟路的，肯定很快。
于是乎我將硬盘重新分区，安装好操作系统。在等待操作系统安装过程的时候，我就在想：我现在是手工分析，是否会有人曾经遇到这种问题，并开发了自动分析的程序呢？抱着试一试的想法，系统安装完后，我又到网上去寻找，果然，让我找到一个数据恢复软件，名叫FinalData。现在也只有死马当作活马医了，装上FinalData，让其分析硬盘，经过一个多小时的等待，我终于找到了被删除的文件，记得当时激动不已啊，呵呵～～～最后的结果是，除了两三个文件无法完全恢复外，其他源代码都成功恢复了。嗯嗯，FinalData真的很强大啊，不过已经好几年没有用到这个软件了，不知道发展得怎么样了。
这件事给了我极其深刻的教训，这也是我后来在公司极力推广使用源代码控制系统的原因之一。后来我在公司专门搞了一台服务器做CVS服务，又过了两年切换到SVN。服务器使用SCSI硬盘做RAID 1，并且每周將源代码刻录光盘做定期备份。
]]></description>
			<content:encoded><![CDATA[<p>因为我已经有一定的编程功底，所以经过一周的时间熟悉产品之后，我就接到一个任务，基于公司的USB Token独立开发一款实用的小程序，用于加密保护用户的数据文件。</p>
<p>没有人告诉我从何入手，做成什么样子。接到这样的任务，首先第一点就是上网找资料。不过那时候Google还没有现在这么出名，找资料也没有现在这么方便。还好以前自己在研究系统的“回收站”的工作机理时，了解了一些系统Shell扩展方面的知识，觉得可以用这种方式来实现数据文件的加密保护。</p>
<p>基本的思想就是实现一个类似于“回收站”这样的东东，可以集成到资源管理器中，用户可以打开资源管理器来操作自己要加密保护的文件。我将其取名叫“我的保险箱”，文件被拖放到“我的保险箱”中，就会自动加密，要想使用被加密保护的文件，必须先将其从“我的保险箱”中拖放到一个普通的目录下，则会自动解密还原。当然，无论是加密还是解密，都需要事先认证用户的身份，也就是公司的硬件产品：USB Token。</p>
<p>这是我第一次接触到COM编程，很多东西都不懂，也没有什么现成的资料可以参阅，唯一的文档就是MSDN中对于Shell Extension的各个接口的说明，至于各个接口之间如何配合，就语焉不详了。我只能一边学习，一边写些代码来验证自己的想法。所用的开发工具当然是最熟悉的C++ Builder了。</p>
<p>等我把要用到的一些接口如IDragSource/IDropTarget/IStream等等了解得七七八八之后，已经过了两个多星期了。好在C++ Builder开发COM程序还是相当方便的，剩下要做的就是细致的活了，把各个接口都实现并配合好，做一个安装程序，就应该可以了，但是又开发了两个星期之后，遇到了一个大麻烦。<br />
<span id="more-163"></span></p>
<p>资源管理器老是会在某个时刻崩溃，其罪魁祸首自然就是我写的扩展了，但是跟踪来跟踪去，最后发生崩溃的都是在C++ Builder提供的库里面，是内存分配/释放的部分。经过几天的调试，我实在是没有招儿了，只好求助研发经理(嘿嘿，就是我的技术面试官)。他在我的电脑上调试了几个小时，最后跟踪到C++ Builder的库里面进行反汇编调试(没办法，我可不懂汇编，到现在都没有学会)，得出的结论是：C++ Builder编译的二进制中内存管理部分存在问题，要么等C++ Builder升级看看能否解决，要么换用Visual C++。</p>
<p>我还从来没有用过VC。不过没有关系，语法都是一样的，工具嘛，多用一下就熟练了。而且其他同事基本上都是用VC开发，这样也更好交流不是么。于是从那时开始，我就基本上不再使用C++ Builder了，陪伴我至今的最主要的开发工具就是VC，从当时的Visual C++ 6.0一直到现在的Visual Studio 2008。</p>
<p>有了前期的铺垫工作，换用VC之后，经过几天的时间对VC IDE的熟悉后，开发工作又走向了正轨。不过系统外壳扩展这种程序调试起来还是比较的麻烦(当时不知道可以將资源管理器单独关闭来重新加载系统外壳扩展)，稍不注意就把资源管理器搞死了，只能重新启动计算机。不过看着这个小程序一天天的完善，心中还是挺美的。</p>
<p>但是又一个意外发生了。大概在换用VC进行开发的两周之后，“我的保险箱”的开发已经接近特性冻结的时候，硬盘坏了－－更糟糕的是，我发觉硬盘坏掉之后，就將硬盘低级格式化了，这样一来，虽然坏掉的磁道被低格程序标记成坏道从而不再使用，硬盘又可以使用了，但是我的源代码，全没了。</p>
<p>当时公司还很小，并没有上什么源代码控制之类的系统，每个开发人员就是各自为政，需要备份代码的时候就將整个代码目录复制一份，再加上一个日期作为目录名的后缀就算完事，同事之间需要共享代码也是直接將代码发到对方的共享目录中。而“我的保险箱”是纯粹的独立开发，所有的代码都在我一个人的硬盘上，而且因为开发比较顺利，也没有备份。现在硬盘坏了，近两个月的工作算是白费了，记得当时自己直接就傻眼了，恨不得以头抢地。想想都快到了交活的时候了，自己要是说“啊呀，我的硬盘坏掉了，现在交不了活了”这样的话，谁知道上头怎么想啊，谁知道你是不是完成不了任务，就找这样的借口呢。</p>
<p>怎么办？想起以前有搞过硬盘文件系统的分析，知道所谓的格式化什么的不一定会將所有数据抹去，那么有可能能够通过分析硬盘扇区的方式找到原来的分区表然后将数据恢复回来的。想到就做，于是用光盘启动到DOS，用Debug来调用INT 13中断直接读扇区，果然低格程序并没有將所有数据抹去。然后就是手工计算偏移，再读取另一块扇区的数据进行分析，就这样折腾了三天，我终于还是放弃了。我靠，这真不是人干的活儿啊，计算量太大，全部都是16进制的计算，还只能手写在纸上来算。我想，还不如重新来过，多熬几个夜，损失几天时间，应该不会太严重的，毕竟公司并没有强制我一定要在什么时候完成啊。而且要用到的技术都已经在心中，熟门熟路的，肯定很快。</p>
<p>于是乎我將硬盘重新分区，安装好操作系统。在等待操作系统安装过程的时候，我就在想：我现在是手工分析，是否会有人曾经遇到这种问题，并开发了自动分析的程序呢？抱着试一试的想法，系统安装完后，我又到网上去寻找，果然，让我找到一个数据恢复软件，名叫FinalData。现在也只有死马当作活马医了，装上FinalData，让其分析硬盘，经过一个多小时的等待，我终于找到了被删除的文件，记得当时激动不已啊，呵呵～～～最后的结果是，除了两三个文件无法完全恢复外，其他源代码都成功恢复了。嗯嗯，FinalData真的很强大啊，不过已经好几年没有用到这个软件了，不知道发展得怎么样了。</p>
<p>这件事给了我极其深刻的教训，这也是我后来在公司极力推广使用源代码控制系统的原因之一。后来我在公司专门搞了一台服务器做CVS服务，又过了两年切换到SVN。服务器使用SCSI硬盘做RAID 1，并且每周將源代码刻录光盘做定期备份。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/163/feed</wfw:commentRss>
		</item>
		<item>
		<title>谈谈网银和USB Key (四)</title>
		<link>http://apex.ncksoft.com/archives/162</link>
		<comments>http://apex.ncksoft.com/archives/162#comments</comments>
		<pubDate>Fri, 18 Jul 2008 17:31:08 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
		
		<category><![CDATA[PKI]]></category>

		<category><![CDATA[代码人生]]></category>

		<category><![CDATA[网银]]></category>

		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=162</guid>
		<description><![CDATA[本文一些内容纯属YY，如有雷同，乃是人品爆发。
好了，各位同学，现在我们已经知道黑客无所不在，无所不用其极，目标就是我们网上银行的存款，或者信用卡里的额度。前文《谈谈网银和USB Key (三)》已经简要描述了目前的USB Key的潜在不安全因素，现在我们就来看看如何应对。
关于键盘木马，有一些“软”的方法可以在一定程度上进行遏止。例如“软键盘”，就是不再让用户通过键盘来输入USB Key的个人识别码(PIN码)，而是在屏幕上显示一个虚拟键盘，用户需要通过鼠标点击虚拟按键来输入PIN码。事实上不仅仅是USB Key的PIN码输入采用这种方式，一些网银在不使用USB Key的，但是又需要更高级别安全性的一些地方，也采用“页面虚拟键盘”的方式，例如建行网银的登录页面就是这样的设计。还有一些USB Key的提供商也在键盘驱动上做文章：黑客不是想截取我的输入吗？好，我让你截个够！当进入PIN码输入状态的时候，底层键盘过滤驱动就自动产生无数的按键信息发送给上层软件，將真正的用户输入淹没在极大量的随机击键事件中，让键盘木马难以得知哪些是真的用户输入，哪些是假的。当然，上层软件知道其中的猫腻，可以从杂乱的数据中滤出真正的用户输入。
然而，这些方法都是治标不治本的，因为要完成持有者身份验证，就要將PIN码发送给USB Key，这PIN码总归会出现在电脑的内存中，这些方法只能够在一定程度上增加黑客破解的难度而已。
好了，我们不说这些小儿科的应对方法了，要真正提高USB Key的安全程度，就需要从USB Key的硬件使用方式上入手。

对付键盘木马这种攻击方式，根本的解决方法就是根本不用输入PIN码。嗯，不输入PIN码，那么USB Key怎么知道我就是合法持有者呢？别着急，我们有生物识别技术啊，说白了，最常见的就是指纹识别了。在USB Key上集成一块指纹扫描装置，当需要验证持有者身份的时候，就刷一下指纹，OK，验证通过，可以转帐了，这比记一个USB Key的PIN码还方便，不是吗。而且，指纹的扫描、特征比对都是在USB Key内部完成，根本不与电脑发生任何关系，这就让黑客无计可施了。这样的“指纹USB Key”已经出现在市场上了，北京农村商业银行的“金凤凰网银”就采用了这样的指纹USB Key。
不过并非只要是指纹USB Key就一定安全，如果USB Key上的指纹扫描与识别没有很好的有机结合的话，其中仍然是有漏洞的，例如，如果把指纹扫描的数据传回电脑，由电脑进行指纹特征信息的比对，或者再由电脑將扫描的数据或者特征信息送回USB Key进行处理，黑客就有可能截取到指纹扫描得到的数据，进行“数据重放式攻击”。所以，安全的USB Key一定是由USB Key自己完成整个指纹扫描、特征值提取与比对的全过程的。
然而，指纹USB Key也有其缺点，就是技术含量高，但是成本也高。就目前为止，国内唯一一家能够提供指纹USB Key的厂商是北京飞天诚信科技有限公司。要想指纹USB Key能够广泛的应用起来，还需要时间。
那么，將键盘和USB Key结合起来，使得PIN码不用通过电脑传到USB Key，不也一样安全吗？是的，带键盘输入的USB Key也比较安全，但是请低头看看你的键盘右侧的数字键区域，只是加入0~9这几个数字键，就需要增加不少的体积，这对于需要满足“随身携带”这一特点的USB Key来说，体积实在是大了些，不够实用。不过我想，随着技术的发展，超薄键盘、折叠式键盘、投影式虚拟键盘可能会改变这一状况。嘿嘿，想想投影式虚拟键盘，有点科幻的味道，不过这一天的到来应该不远了～～～
好了，成本高不合适，体积大也不合适，既然目前没有从根本上解决问题的合适的方法，我们就换个思路吧，不要忘了，一切安全性都是相对的～～～
既然黑客总是能够通过各种手段得到USB Key的PIN码，然后在用户没有发觉的情况下完成网上交易，那么，如果我们能够在每次需要USB Key来证明自己身份的时候，需要用户手工干预一下才能完成验证过程，是不是就能够解决这个“不知不觉中”账户里的钱就不翼而飞的问题呢？事实上这样的USB Key已经出现了，国内的几家主要的USB Key厂商都纷纷推出了这种“按钮USB Key”。这种类型的USB Key比普通USB Key多了一个按键，当需要转帐的时候，就需要用户按一下按键，否则USB Key拒绝使用内置的密钥来证明你的身份(进行数字签名)，也就无法完成网上交易。有了这个按钮式USB Key，你的每一次网上交易就明明白白了：只要有网上交易，一定是有人明确的按了这个按钮，而只要这个USB Key没有丢失，那就一定是你自己干的了。即使黑客得到你的PIN码，他也无法通过网络伸手到你的电脑前按一下这个按钮吧！！
好了，按钮式USB Key，这下安全了～～～
安全了？安全了？我带上黑客的帽子，在一边得意的笑，我得儿意的笑，我得儿意的笑～～～～
欲知“按钮USB Key”为何不安全，又如何应对其安全漏洞，请关注本文连载之五。
]]></description>
			<content:encoded><![CDATA[<p><strong>本文一些内容纯属YY，如有雷同，乃是人品爆发。</strong></p>
<p>好了，各位同学，现在我们已经知道黑客无所不在，无所不用其极，目标就是我们网上银行的存款，或者信用卡里的额度。前文《<a href="http://apex.ncksoft.com/archives/160">谈谈网银和USB Key (三)</a>》已经简要描述了目前的USB Key的潜在不安全因素，现在我们就来看看如何应对。</p>
<p>关于键盘木马，有一些“软”的方法可以在一定程度上进行遏止。例如“软键盘”，就是不再让用户通过键盘来输入USB Key的个人识别码(PIN码)，而是在屏幕上显示一个虚拟键盘，用户需要通过鼠标点击虚拟按键来输入PIN码。事实上不仅仅是USB Key的PIN码输入采用这种方式，一些网银在不使用USB Key的，但是又需要更高级别安全性的一些地方，也采用“页面虚拟键盘”的方式，例如建行网银的登录页面就是这样的设计。还有一些USB Key的提供商也在键盘驱动上做文章：黑客不是想截取我的输入吗？好，我让你截个够！当进入PIN码输入状态的时候，底层键盘过滤驱动就自动产生无数的按键信息发送给上层软件，將真正的用户输入淹没在极大量的随机击键事件中，让键盘木马难以得知哪些是真的用户输入，哪些是假的。当然，上层软件知道其中的猫腻，可以从杂乱的数据中滤出真正的用户输入。</p>
<p>然而，这些方法都是治标不治本的，因为要完成持有者身份验证，就要將PIN码发送给USB Key，这PIN码总归会出现在电脑的内存中，这些方法只能够在一定程度上增加黑客破解的难度而已。</p>
<p>好了，我们不说这些小儿科的应对方法了，要真正提高USB Key的安全程度，就需要从USB Key的硬件使用方式上入手。<br />
<span id="more-162"></span></p>
<p>对付键盘木马这种攻击方式，根本的解决方法就是根本不用输入PIN码。嗯，不输入PIN码，那么USB Key怎么知道我就是合法持有者呢？别着急，我们有生物识别技术啊，说白了，最常见的就是指纹识别了。在USB Key上集成一块指纹扫描装置，当需要验证持有者身份的时候，就刷一下指纹，OK，验证通过，可以转帐了，这比记一个USB Key的PIN码还方便，不是吗。而且，指纹的扫描、特征比对都是在USB Key内部完成，根本不与电脑发生任何关系，这就让黑客无计可施了。这样的“指纹USB Key”已经出现在市场上了，北京农村商业银行的“金凤凰网银”就采用了这样的指纹USB Key。</p>
<p>不过并非只要是指纹USB Key就一定安全，如果USB Key上的指纹扫描与识别没有很好的有机结合的话，其中仍然是有漏洞的，例如，如果把指纹扫描的数据传回电脑，由电脑进行指纹特征信息的比对，或者再由电脑將扫描的数据或者特征信息送回USB Key进行处理，黑客就有可能截取到指纹扫描得到的数据，进行“数据重放式攻击”。所以，安全的USB Key一定是由USB Key自己完成整个指纹扫描、特征值提取与比对的全过程的。</p>
<p>然而，指纹USB Key也有其缺点，就是技术含量高，但是成本也高。就目前为止，国内唯一一家能够提供指纹USB Key的厂商是北京飞天诚信科技有限公司。要想指纹USB Key能够广泛的应用起来，还需要时间。</p>
<p>那么，將键盘和USB Key结合起来，使得PIN码不用通过电脑传到USB Key，不也一样安全吗？是的，带键盘输入的USB Key也比较安全，但是请低头看看你的键盘右侧的数字键区域，只是加入0~9这几个数字键，就需要增加不少的体积，这对于需要满足“随身携带”这一特点的USB Key来说，体积实在是大了些，不够实用。不过我想，随着技术的发展，超薄键盘、折叠式键盘、投影式虚拟键盘可能会改变这一状况。嘿嘿，想想投影式虚拟键盘，有点科幻的味道，不过这一天的到来应该不远了～～～</p>
<p>好了，成本高不合适，体积大也不合适，既然目前没有从根本上解决问题的合适的方法，我们就换个思路吧，不要忘了，<strong>一切安全性都是相对的</strong>～～～</p>
<p>既然黑客总是能够通过各种手段得到USB Key的PIN码，然后在用户没有发觉的情况下完成网上交易，那么，如果我们能够在每次需要USB Key来证明自己身份的时候，需要用户手工干预一下才能完成验证过程，是不是就能够解决这个“<strong>不知不觉中</strong>”账户里的钱就不翼而飞的问题呢？事实上这样的USB Key已经出现了，国内的几家主要的USB Key厂商都纷纷推出了这种“按钮USB Key”。这种类型的USB Key比普通USB Key多了一个按键，当需要转帐的时候，就需要用户按一下按键，否则USB Key拒绝使用内置的密钥来证明你的身份(进行数字签名)，也就无法完成网上交易。有了这个按钮式USB Key，你的每一次网上交易就明明白白了：只要有网上交易，一定是有人明确的按了这个按钮，而只要这个USB Key没有丢失，那就一定是你自己干的了。即使黑客得到你的PIN码，他也无法通过网络伸手到你的电脑前按一下这个按钮吧！！</p>
<p>好了，按钮式USB Key，这下安全了～～～</p>
<p>安全了？安全了？我带上黑客的帽子，在一边得意的笑，我得儿意的笑，我得儿意的笑～～～～</p>
<p>欲知“按钮USB Key”为何不安全，又如何应对其安全漏洞，请关注本文连载之五。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/162/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
