<?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>FM021-禾白与化石-图文微博客 &#187; 编程</title>
	<atom:link href="http://www.fm021.com/category/program/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fm021.com</link>
	<description>Fossil Jue &#38; Young Mu @Shanghai</description>
	<lastBuildDate>Wed, 01 Sep 2010 14:42:02 +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>在.net中使用MongoDB[一]插入数据</title>
		<link>http://www.fm021.com/2010/03/18/use-mongodb-with-dotnet-insert/</link>
		<comments>http://www.fm021.com/2010/03/18/use-mongodb-with-dotnet-insert/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 04:48:13 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1368</guid>
		<description><![CDATA[目前mongodb官方还不提供.net驱动，我原来想，是不是就只能通过C++/CLI来访问了。所幸.net社区还是比较活跃的，有很多“山寨”的.net驱动。在官方网站上找到一个叫mongodb-csharp的项目，应该是比较靠谱的。
下载MongoDBDriver-Debug_2010-03-01.zip，解压缩，里面包含3个程序集：
MongoDB.Driver.dll
MongoDB.GridFS.dll
MongoDB.Linq.dll
通过第一个程序集就可以访问数据库，做简单的SUID操作了。Mongodb-csharp使用起来倒也简单，代码非常简洁。让我们看看插入数据的代码：
using MongoDB.Driver;
Mongo mongo = new Mongo();
mongo.Connect(); // 连接服务器
Database db = mongo.getDB(&#8221;org&#8221;); // 获取数据库
IMongoCollection collection = db.GetCollection(&#8221;user&#8221;); // 获取集合
Document doc = new Document();
doc["name"] = &#8220;fossil&#8221;;
doc["age"] = 25;
doc["blog"] = null;
doc["birthday"] = DateTime.Today;
collection.Insert(doc); // 插入文档
db.Logout();
mongo.Disconnect();
MongoDB非常接近RDMBS，很多概念都能在关系型数据库中找到对应。比如都有服务器和数据库的概念，集合对应表，文档对应记录。上面的代码中，我们尝试保存字符串，数字，null和时间类型的值，都很方便。
MongoDB中的文档其实就是一些键值对的集合。每个文档都有一个&#8221;_id&#8221;键，其值的类型是ObjectId，对应mongodb-csharp中的MongoDB.Driver.Oid类型。在插入时可以指定_id的值，如果不指定的话，在插入成功后，doc对象会被自动添加一个key为&#8221;_id&#8221;的键值对。可以考虑将这个key作为自动编号的&#8221;主键&#8221;来用。
MongoDB.Driver.Oid对象转换成字符串的时候有点奇怪，如果调用oid.ToString()方法的话，会发现返回的是被两个引号引起来的一串数字。不知道这个类库的作者是怎么想的，反正我是不需要这两个引号。用下面的方法来获取不带引号的字符串：BitConverter.ToString(oid.Value).Replace(&#8221;-&#8221;, &#8220;&#8221;).ToLower();
IMongoCollection.Insert方法有四个重载，也可以传入Ienumerable类型，一次保存多个文档。
说了这么多，还是运行一下看看效果吧：
1. 启动MongoDB
2. 编译执行
3. 在客户端Shell中查询看数据是否已经插入成功。输入：
use org
db.user.findAll()

如果你还不知道怎么启动服务程序，或者不会使用客户端的话，可以看这篇日志。
]]></description>
			<content:encoded><![CDATA[<p>目前mongodb官方还不提供.net驱动，我原来想，是不是就只能通过C++/CLI来访问了。所幸.net社区还是比较活跃的，有很多“山寨”的.net驱动。在官方网站上找到一个叫<a href="http://github.com/samus/mongodb-csharp">mongodb-csharp</a>的项目，应该是比较靠谱的。</p>
<p>下载<a href="http://github.com/downloads/samus/mongodb-csharp/MongoDBDriver-Debug_2010-03-01.zip">MongoDBDriver-Debug_2010-03-01.zip</a>，解压缩，里面包含3个程序集：</p>
<p>MongoDB.Driver.dll<br />
MongoDB.GridFS.dll<br />
MongoDB.Linq.dll</p>
<p>通过第一个程序集就可以访问数据库，做简单的SUID操作了。Mongodb-csharp使用起来倒也简单，代码非常简洁。让我们看看插入数据的代码：</p>
<blockquote><p>using MongoDB.Driver;</p>
<p>Mongo mongo = new Mongo();<br />
mongo.Connect(); // 连接服务器</p>
<p>Database db = mongo.getDB(&#8221;org&#8221;); // 获取数据库</p>
<p>IMongoCollection collection = db.GetCollection(&#8221;user&#8221;); // 获取集合<br />
Document doc = new Document();<br />
doc["name"] = &#8220;fossil&#8221;;<br />
doc["age"] = 25;<br />
doc["blog"] = null;<br />
doc["birthday"] = DateTime.Today;<br />
collection.Insert(doc); // 插入文档</p>
<p>db.Logout();</p>
<p>mongo.Disconnect();</p></blockquote>
<p>MongoDB非常接近RDMBS，很多概念都能在关系型数据库中找到对应。比如都有服务器和数据库的概念，集合对应表，文档对应记录。上面的代码中，我们尝试保存字符串，数字，null和时间类型的值，都很方便。</p>
<p>MongoDB中的文档其实就是一些键值对的集合。每个文档都有一个&#8221;_id&#8221;键，其值的类型是ObjectId，对应mongodb-csharp中的MongoDB.Driver.Oid类型。在插入时可以指定_id的值，如果不指定的话，在插入成功后，doc对象会被自动添加一个key为&#8221;_id&#8221;的键值对。可以考虑将这个key作为自动编号的&#8221;主键&#8221;来用。</p>
<p>MongoDB.Driver.Oid对象转换成字符串的时候有点奇怪，如果调用oid.ToString()方法的话，会发现返回的是被两个引号引起来的一串数字。不知道这个类库的作者是怎么想的，反正我是不需要这两个引号。用下面的方法来获取不带引号的字符串：BitConverter.ToString(oid.Value).Replace(&#8221;-&#8221;, &#8220;&#8221;).ToLower();</p>
<p>IMongoCollection.Insert方法有四个重载，也可以传入Ienumerable<Document>类型，一次保存多个文档。</p>
<p>说了这么多，还是运行一下看看效果吧：</p>
<p>1. 启动MongoDB</p>
<p>2. 编译执行</p>
<p>3. 在客户端Shell中查询看数据是否已经插入成功。输入：</p>
<blockquote><p>use org<br />
db.user.findAll()
</p></blockquote>
<p>如果你还不知道怎么启动服务程序，或者不会使用客户端的话，可以看<a href="http://www.fm021.com/2009/12/18/mongodb-overview/">这篇日志</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2010/03/18/use-mongodb-with-dotnet-insert/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>再谈Javascript中的字符串连接性能</title>
		<link>http://www.fm021.com/2010/01/12/string-join/</link>
		<comments>http://www.fm021.com/2010/01/12/string-join/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 14:01:31 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1257</guid>
		<description><![CDATA[3年前，Ajax开始火热起来的时候，很多关于Javascript的书都会谈到js中字符串相加的性能优化问题。解决的方法就是使用Array的join方法。这个方法确实很妙，在IE6，IE7下能提升大约5倍的性能。
3年后，偶然发现join比+=高效的说法不再正确了，在某些浏览器里。简单测试了一下，在IE 8，Chrome 4，Opera 10，Safari 4中直接使用字符串相加的方法要优于使用数组join，看来新浏览器都已经对此做了优化——除了Firefox。
有兴趣的同学可以去测试一下，网上的测试代码一大把，都是雷同的。注意测试的先后顺序会影响测试结果：比如先测+=再测join和先测join再测+=的结果有差异；前后两次join的结果也不同。
另外，arr[arr.length] = text 执行起来也比 arr.push(text) 略微快些。
]]></description>
			<content:encoded><![CDATA[<p>3年前，Ajax开始火热起来的时候，很多关于Javascript的书都会谈到js中字符串相加的性能优化问题。解决的方法就是使用Array的join方法。这个方法确实很妙，在IE6，IE7下能提升大约5倍的性能。</p>
<p>3年后，偶然发现join比+=高效的说法不再正确了，在某些浏览器里。简单测试了一下，在IE 8，Chrome 4，Opera 10，Safari 4中直接使用字符串相加的方法要优于使用数组join，看来新浏览器都已经对此做了优化——除了Firefox。</p>
<p>有兴趣的同学可以去测试一下，网上的测试代码一大把，都是雷同的。注意测试的先后顺序会影响测试结果：比如先测+=再测join和先测join再测+=的结果有差异；前后两次join的结果也不同。</p>
<p>另外，arr[arr.length] = text 执行起来也比 arr.push(text) 略微快些。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2010/01/12/string-join/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mongoDB初体验</title>
		<link>http://www.fm021.com/2009/12/18/mongodb-overview/</link>
		<comments>http://www.fm021.com/2009/12/18/mongodb-overview/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 03:58:38 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1242</guid>
		<description><![CDATA[mongoDB是最近比较热的NoSql数据库之一，它保存的是类似json的数据集合。虽然读写效率不及其它key-value数据库，但是也比RDBMS要高很多了。json数据相比key-value更有层次，开发速度应该会更快一些。不过借助一些开发框架，基于kv的开发应该也很简单，我只是胡乱说说。一般程序员都会关心保存是否方便，查询是否简单，这个也是mongoDB的优势。mongoDB有windows版本，而且json比较有爱，可以很方便地输出给前端。
官方号称mongoDB非常适合保存大尺寸，低价值的数据。这个是什么意思？500年都不会有人去翻动的一个企业的规章制度，以及500年前某个领导的慷慨致辞，或者年会录像。这些东西以前是文本，现在是视频，非常适合大尺寸，低价值的标准。有个数据库非常适合保存低价值的数据？这很容易让人联想到SqlServer2008的FileStream类型，它也很适合保存这些东西。是不是我们可以用mongoDB来搞个分布式的文件系统？好像很适合用来当文档管理系统的后台数据库。
不管怎样，先玩玩她再说。

mongoDB的官方网站是http://www.mongodb.org/，去上面下载最新的程序下来。在下载页面可以看到，对操作系统支持很全面，OS X、Linux、Windows都支持，而且都有各自的32位和64位版本。目前的稳定版本是1.2.0版本。上个月去看的时候还是1.1.3版本，看来更新还是很频繁的说。
下载Windows 64-bit版本并解压缩，程序文件都在bin目录中，其它两个目录分别是C++调用是的头文件和库文件。bin目录中包含如下几个程序：
1. mongo.exe，命令行客户端工具。
2. mongod.exe，数据库服务程序。
3. mongodump.exe，数据库备份程序。
4. mongoexport.exe，数据导出工具。
5. mongofiles.exe，GridFS工具。
6. mongoimport.exe，数据导入工具。
7. mongorestore.exe，数据库恢复工具。
8. mongos.exe，貌似是性能检测工具。
创建D:\Database\mongo\db\文件夹，mongoDB将数据保存在这个文件夹中。执行命令行：
mongod.exe &#8211;dbpath D:\Database\monbo\db\
启动数据库服务程序。可以看到类似下面的提示：
Sun Dec 13 01:28:48 Mongo DB : starting : pid = 0 port = 27017 dbpath = D:\Datab
ase\mongo\db\ master = 0 slave = 0  64-bit
Sun Dec 13 01:28:49 db version v1.2.0, pdfile version 4.5
Sun Dec 13 01:28:49 git version: 2add01f37ddf5a262dbc66f81353e88f38723dc6
Sun Dec 13 [...]]]></description>
			<content:encoded><![CDATA[<p>mongoDB是最近比较热的NoSql数据库之一，它保存的是类似json的数据集合。虽然读写效率不及其它key-value数据库，但是也比RDBMS要高很多了。json数据相比key-value更有层次，开发速度应该会更快一些。不过借助一些开发框架，基于kv的开发应该也很简单，我只是胡乱说说。一般程序员都会关心保存是否方便，查询是否简单，这个也是mongoDB的优势。mongoDB有windows版本，而且json比较有爱，可以很方便地输出给前端。</p>
<p>官方号称mongoDB非常适合保存大尺寸，低价值的数据。这个是什么意思？500年都不会有人去翻动的一个企业的规章制度，以及500年前某个领导的慷慨致辞，或者年会录像。这些东西以前是文本，现在是视频，非常适合大尺寸，低价值的标准。有个数据库非常适合保存低价值的数据？这很容易让人联想到SqlServer2008的FileStream类型，它也很适合保存这些东西。是不是我们可以用mongoDB来搞个分布式的文件系统？好像很适合用来当文档管理系统的后台数据库。</p>
<p>不管怎样，先玩玩她再说。<br />
<span id="more-1242"></span><br />
mongoDB的官方网站是http://www.mongodb.org/，去上面下载最新的程序下来。在下载页面可以看到，对操作系统支持很全面，OS X、Linux、Windows都支持，而且都有各自的32位和64位版本。目前的稳定版本是1.2.0版本。上个月去看的时候还是1.1.3版本，看来更新还是很频繁的说。</p>
<p>下载Windows 64-bit版本并解压缩，程序文件都在bin目录中，其它两个目录分别是C++调用是的头文件和库文件。bin目录中包含如下几个程序：</p>
<p>1. mongo.exe，命令行客户端工具。<br />
2. mongod.exe，数据库服务程序。<br />
3. mongodump.exe，数据库备份程序。<br />
4. mongoexport.exe，数据导出工具。<br />
5. mongofiles.exe，GridFS工具。<br />
6. mongoimport.exe，数据导入工具。<br />
7. mongorestore.exe，数据库恢复工具。<br />
8. mongos.exe，貌似是性能检测工具。</p>
<p>创建D:\Database\mongo\db\文件夹，mongoDB将数据保存在这个文件夹中。执行命令行：</p>
<blockquote><p>mongod.exe &#8211;dbpath D:\Database\monbo\db\</p></blockquote>
<p>启动数据库服务程序。可以看到类似下面的提示：</p>
<blockquote><p>Sun Dec 13 01:28:48 Mongo DB : starting : pid = 0 port = 27017 dbpath = D:\Datab<br />
ase\mongo\db\ master = 0 slave = 0  64-bit<br />
Sun Dec 13 01:28:49 db version v1.2.0, pdfile version 4.5<br />
Sun Dec 13 01:28:49 git version: 2add01f37ddf5a262dbc66f81353e88f38723dc6<br />
Sun Dec 13 01:28:49 sys info: windows (6, 0, 6002, 2, &#8216;Service Pack 2&#8242;) BOOST_LI<br />
B_VERSION=1_39<br />
Sun Dec 13 01:28:49 waiting for connections on port 27017</p></blockquote>
<p>貌似是启动成功了，让我们用客户端连接到服务器测试下。运行mongo.exe，输入：</p>
<blockquote><p>db.foo.save({a:1})</p></blockquote>
<p>解释一下上面这个命令。db，表示当前数据库。foo，是一个集合，可以理解为一张名为foo的表。在foo表中保存了一条记录，记录的字段a的值为1。</p>
<p>接下来看看记录是不是真的保存到foo表中了，输入：</p>
<blockquote><p>db.foo.findOne()</p></blockquote>
<p>程序输出：</p>
<blockquote><p>{ &#8220;_id&#8221; : ObjectId(&#8221;4b23d5528327000000004153&#8243;), &#8220;a&#8221; : 1 }</p></blockquote>
<p>看来数据保存成功了。mongoDB会给每一个collection中的项自动分配一个_id值，可以根据这个id来删除、更新记录。这个id是全局唯一的，所以看起来有点长，有短id强迫症和连续编号强迫症的同学估计比较难适应。不过系统会对这个_id自动作索引，所以再加个guid作为记录的key倒是不错。这样既方便同步在两个系统中，记录默认还是是按插入时间来排序的。</p>
<p>多插入几条数据之后，可以尝试对数据进行搜索，排序，分页等，这些shell命令可以参考这里。通过shell对mongoDB有个初步的了解。</p>
<p>相关日志：<br />
1. <a href="http://www.fm021.com/2010/3/18/use-mongodb-with-dotnet-insert/">在.net中使用MongoDB（一）插入数据</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/12/18/mongodb-overview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Chrome OS 首批演示和技术讲解视频汇总</title>
		<link>http://www.fm021.com/2009/11/20/chrome-os-video/</link>
		<comments>http://www.fm021.com/2009/11/20/chrome-os-video/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 02:56:44 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[其它]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1161</guid>
		<description><![CDATA[谷歌于美国西部时间11月19日上午10点(北京时间11月20日凌晨2点)在美国总部举行了Chrome操作系统的新闻发布会，谷歌产品副总裁Sundar  Pichai和谷歌Chrome操作系统工程总监Matthew Papakipos两位高管对Chrome  OS进行现场演示。请看Google官方发布的6段Chrome OS视频：
Google Chrome  OS是什么？

Chromium OS快速启动：

Google Chrome OS界面概念：

Chromium OS安全性：

Chromium OS开源：

Google Chrome Developer Tools策划和优化：

Via YouTube
]]></description>
			<content:encoded><![CDATA[<p>谷歌于美国西部时间11月19日上午10点(北京时间11月20日凌晨2点)在美国总部举行了Chrome操作系统的新闻发布会，谷歌产品副总裁Sundar  Pichai和谷歌Chrome操作系统工程总监Matthew Papakipos两位高管对Chrome  OS进行现场演示。<strong>请看Google官方发布的6段Chrome OS视频：</strong><br />
<span id="more-1161"></span>Google Chrome  OS是什么？</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTM5NTcy/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTM5NTcy/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTM5NTcy/v.swf" align="middle" quality="high"></embed></object></p>
<p>Chromium OS快速启动：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTQwMTk2/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTQwMTk2/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTQwMTk2/v.swf" align="middle" quality="high"></embed></object></p>
<p>Google Chrome OS界面概念：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTQwMjA0/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTQwMjA0/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTQwMjA0/v.swf" align="middle" quality="high"></embed></object></p>
<p>Chromium OS安全性：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTQwNTIw/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTQwNTIw/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTQwNTIw/v.swf" align="middle" quality="high"></embed></object></p>
<p>Chromium OS开源：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTQwNTg0/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTQwNTg0/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTQwNTg0/v.swf" align="middle" quality="high"></embed></object></p>
<p>Google Chrome Developer Tools策划和优化：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="_cx" value="12700" /><param name="_cy" value="10583" /><param name="FlashVars" /><param name="Movie" value="http://player.youku.com/player.php/sid/XMTMzMTQwNzg0/v.swf" /><param name="Src" value="http://player.youku.com/player.php/sid/XMTMzMTQwNzg0/v.swf" /><param name="WMode" value="Window" /><param name="Play" value="0" /><param name="Loop" value="-1" /><param name="Quality" value="High" /><param name="SAlign" value="LT" /><param name="Menu" value="0" /><param name="Base" /><param name="AllowScriptAccess" /><param name="Scale" value="NoScale" /><param name="DeviceFont" value="0" /><param name="EmbedMovie" value="0" /><param name="BGColor" /><param name="SWRemote" /><param name="MovieData" /><param name="SeamlessTabbing" value="1" /><param name="Profile" value="0" /><param name="ProfileAddress" /><param name="ProfilePort" value="0" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="false" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMTMzMTQwNzg0/v.swf" align="middle" quality="high"></embed></object></p>
<p>Via <a href="http://www.youtube.com/" target="_blank">YouTube</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/11/20/chrome-os-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3PAR 存储架构解析</title>
		<link>http://www.fm021.com/2009/08/11/3par-arch/</link>
		<comments>http://www.fm021.com/2009/08/11/3par-arch/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 02:41:30 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1021</guid>
		<description><![CDATA[ 作者: Fenng &#124; 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
 网址: http://www.dbanotes.net/arch/3par_arch.html
对于国内存储市场来说，3PAR 是不折不扣的后来者。也是个相对陌生的存储产品，以至于其竞争对手的人员甚至都不知道这家公司已经杀入中国市场。
3PAR 在 1999 年成立，几个创始人主要出自 Sun ，前身叫作 3PARdata ， 2008 年上市。要知道在存储技术领域竞争还是比较激烈的，EMC / HDS 等控制着高端存储的主要市场，3PAR 能突破技术壁垒并最后成功上市，没两把刷子那是绝对做不到的。
InSpire 硬件结构
3PAR 背板采用全网状的连接结构，每个控制器节点之间高速直连。因为是全网状的，所以基本上一个链路坏掉只影响直连的两个节点的通信，对其它节点无影响。每个控 制器节点内置一块硬盘，用于操作系统安装。控制器节点最多可以扩展到 8 个，是 3PAR 存储最核心的组件。
相比之下，HDS 架构采用全光线交换方式（Universal Star Network），而 EMC 是采用直连矩阵方式(新一代产品采用虚拟矩阵架构&#8211;Virtual Matrix ，其实已经放弃了直连矩阵架构了)。这些连接方式的孰优孰劣历来是厂商攻击竞争对手的着眼点，能否最大限度发挥性能是用户最需要关心的。

3PAR 针对 I/O 指令和数据移动使用不同的计算芯片。I/O 指令(元数据/控制Cache)用 Intel 的芯片，而 数据移动/Cache 则使用专门设计的 ASIC 芯片来完成。

因为有专门的硬件 ASIC 芯片用于 RAID 5 XOR 校验，3PAR 号称有了其第三代 ASIC 芯片，实现的 [...]]]></description>
			<content:encoded><![CDATA[<div><span> 作者: <strong><a href="http://www.dbanotes.net/" target="_blank">Fenng</a></strong> <span>|</span> 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/" target="_blank">版权声明</a><br />
</span> 网址: <a href="http://www.dbanotes.net/arch/3par_arch.html" target="_blank">http://www.dbanotes.net/arch/3par_arch.html</a></div>
<p>对于国内存储市场来说，<a href="http://www.3par.com/">3PAR</a> 是不折不扣的后来者。也是个相对陌生的存储产品，以至于其竞争对手的人员甚至都不知道这家公司已经杀入中国市场。</p>
<p>3PAR 在 1999 年成立，几个创始人主要出自 Sun ，前身叫作 3PARdata ， 2008 年上市。要知道在存储技术领域竞争还是比较激烈的，EMC / HDS 等控制着高端存储的主要市场，3PAR 能突破技术壁垒并最后成功上市，没两把刷子那是绝对做不到的。</p>
<p><strong>InSpire 硬件结构</strong></p>
<p>3PAR 背板采用全网状的连接结构，每个控制器节点之间高速直连。因为是全网状的，所以基本上一个链路坏掉只影响直连的两个节点的通信，对其它节点无影响。每个控 制器节点内置一块硬盘，用于操作系统安装。控制器节点最多可以扩展到 8 个，是 3PAR 存储最核心的组件。</p>
<p>相比之下，HDS 架构采用全光线交换方式（Universal Star Network），而 EMC 是采用直连矩阵方式(新一代产品采用虚拟矩阵架构&#8211;Virtual Matrix ，其实已经放弃了直连矩阵架构了)。这些连接方式的孰优孰劣历来是厂商攻击竞争对手的着眼点，能否最大限度发挥性能是用户最需要关心的。</p>
<p><span style="display: inline;"><img src="http://www.dbanotes.net/Images/3Par_full-MESH.jpg" alt="3Par_full-MESH.jpg" width="500" height="353" /></span></p>
<p>3PAR 针对 I/O 指令和数据移动使用不同的计算芯片。I/O 指令(元数据/控制Cache)用 Intel 的芯片，而 数据移动/Cache 则使用专门设计的 ASIC 芯片来完成。</p>
<p><span style="display: inline;"><img src="http://www.dbanotes.net/Images/3Par_Controller_Node_IO.jpg" alt="3Par_Controller_Node_IO.jpg" width="500" height="319" /></span></p>
<p>因为有专门的硬件 ASIC 芯片用于 <acronym title="Redundant Array of Independent (or Inexpensive) Disks">RAID</acronym> 5 XOR 校验，3PAR 号称有了其第三代 ASIC 芯片，实现的 <acronym title="Redundant Array of Independent (or Inexpensive) Disks">RAID</acronym> 5 是业界最快的，甚至 SATA 盘也能有不错的性能表现。(从 Oracle 公司测试的数据来看，和 <acronym title="Redundant Array of Independent (or Inexpensive) Disks">RAID</acronym> 10 速度的确相差无几。)</p>
<p><strong> InForm 操作系统软件与虚拟化</strong></p>
<p>3PAR 的操作系统叫 InForm，最初就是面向层次化的设计。与其他存储不同的是，3PAR 所有磁盘被分成 256MB 统一大小的小盘(Chunklet)，可以根据需要用多个 Chunklet 组成 RAIDlet(逻辑磁盘)。因为这个独特的设计方式，3PAR 是可以很容易做到不同容量的磁盘混用，同一个 <acronym title="Redundant Array of Independent (or Inexpensive) Disks">RAID</acronym> 组里都可以有不同大小、不同转速的磁盘混用，这是其他存储做不到的。而且，所有的磁盘都可以利用，因为Hotspare Chunklet 以更小的单位分散在不同的磁盘上，也不再需要单独留热备盘。空间利用率可以更充分一些。</p>
<p><span style="display: inline;"><img src="http://www.dbanotes.net/Images/3Par_3level_virtualization.jpg" alt="3Par_3level_virtualization.jpg" width="345" height="236" /></span></p>
<p>多说一句，有这个冗余机制，3PAR 更换磁盘也是与众不同：直接抽磁盘盒子(一个盒子可是四块磁盘啊)，我当初看到 3PAR 技术人员这么操作真是着实吓了一跳。</p>
<p>因为固定大小的 Chunklet 的存在，可以将 I/O 更为均匀的分散到多个磁盘上。</p>
<p><span style="display: inline;"><img src="http://www.dbanotes.net/Images/3Par_balance.jpg" alt="3Par_balance.jpg" width="500" height="257" /></span></p>
<p>对于熟悉Oracle 的朋友来说，会发现这和 <acronym title="Automatic Storage Management">ASM</acronym> 的思想非常接近。因而也可以和 Oracle 数据库进行无缝集成：</p>
<p><span style="display: inline;"><img src="http://www.dbanotes.net/Images/3Par_Thin_Provision_Oracle_ASM.jpg" alt="3Par_Thin_Provision_Oracle_ASM.jpg" width="500" height="475" /></span></p>
<p>因为软件做得非常具有易用性，日常管理与维护远远没有其他高端存储那么复杂，新增磁盘这种事情，都是一行命令之后底层自动处理。其实在 Thin Provisioning 方面 3PAR 也是很值得一说的，比一些厂商的伪 Thin Provisioning 具体多了。限于篇幅，不赘述。</p>
<p>3PAR 在美国有很多金融证券行业的客户，也有 Web 2.0 行业的客户&#8211;MySpace 。在保证 I/O 响应在 <a href="http://www.dbanotes.net/database/oracle_dbio_expected_10ms.html">10ms</a> 以内的前提下，3PAR 的 IOPS 能力非常优异(这才是卖点，不难理解其客户多集中在证券、金融领域)。虽然有些厂商号称能得到更高的 IOPS ，但那是在 I/O 响应时间很差的情况下的数据。要说明的是，现在随着一些存储厂商在高端服务器上也支持 SSD ，未来几年如何还要再看。</p>
<p>前两年 3PAR 推行所谓 Utility Storage(功用存储) 理念，现在貌似改成敏捷存储了。说实话，我觉得敏捷存储真的挺适合的，3PAR 命令行批量创建 LUN 真的很让人感觉舒服。当然，也在宣传云存储和绿色存储的理念，那是题外话了。</p>
<p>3PAR 原来只做中高端市场，只有 T 这一个系列，现在也开始关注中低端市场了，推出了 F 系列的产品。软硬件体系基本没变，倒是没仔细看过。</p>
<p>(Note: 相关图片主要来自 3PAR 公开资料.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/08/11/3par-arch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新电脑</title>
		<link>http://www.fm021.com/2009/08/10/new-pc/</link>
		<comments>http://www.fm021.com/2009/08/10/new-pc/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 10:09:38 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[活着]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=1002</guid>
		<description><![CDATA[禾白的电脑年老体弱，无规律间歇性不能开机，因此周日和禾白一起去百脑汇配了台新电脑。配置如下：
CPU：Intel Core 2 Quad Q9400/盒装 ￥1320
主板：华硕 P5Q Turbo ￥990
显卡：铭瑄 极光9800GT巨无霸 ￥690
内存：金士顿 DDR2 1066 2G骇客神条(KHX8500AD2/2G) 两条共￥400
硬盘：希捷 1TB SATA2 32M(7200.12/ST31000528AS) 两块共￥1300
电源：￥280
机箱：AOC 睿彩6062B ￥160
顺便买了个TP-Link的无线路由：TP-Link TL-WR841N ￥180
总计￥5340，成交价￥5280，另外要了一根DVI的线和一根HDMI的线。
这个配置虽说不算顶级，不过也算不错的了，可以说是相当不错。
CPU
本来打算买Q8400的，只是没货，所以换成Q9400。老板很豪迈地说，这两个CPU价格只差30块钱，我后来网上一查差了300块钱。网上报价要1590，实际上没那么贵。
Q8400和Q9400没有频率上的差别，不过缓存大小差了近一倍：前者L1=4×32K / L2=2×2M，后者L1=4×64K / L2=2×3M。另外，Q9400支持Virtualization(虚拟化)技术。因为基于硬件的虚拟实现能提供更好的性能，应该很适合像我这样要开虚拟机工作的同学们。
再往上，Q9550和Q9400差异貌似只是在倍频上——一个是8.5X，一个是8X，也没什么好考虑的了。
主板
P43和P43芯片组都是intel最后一款基于LGA775的芯片组，它们之间的区别大概就是P45支持Cross Fire技术，而P43不支持。我和禾白都不是游戏玩家，只是我想玩玩磁盘阵列，所以本来选了华硕的P5QL-E 。不过又是没货，后来在老板的哄骗之下买了现在的板子。
不过可耻的是，虽然已经组装好了，系统也装好了，但是到目前为止，还不确定是否成功启用了RAID模式，也没能修改RAID模式。这个板子的南桥是ICH10R，号称支持RAID0、RAID1、RAID5和RAID10。我想切换到RAID10模式。研究了半天，没能成功，暂时放弃了。
显卡
最终买到的也不是当初想好要买的那款，那款又没货了。对显卡不敏感，没什么好说的。9800GT的卡，1G显存，可以启用Vista的Aero特效。上次给禾白装Windows7，妄图在MX440显卡上开Aero，最终屎败。这次再装Win7，应该能成功了吧……
内存
本来禾白想要买金士顿 DDR2 1066 4G骇客神条套装(KHX8500D2K2/4G)的，套装的散热片和漂亮，像两把蓝色的梳子。还是没货，最后换了普通散热片的那种，两者除了散热片不同之外，其它都一样。也罢，反正内存插在机箱里也看不到。
硬盘
去之前在网上看中了联强代理的希捷盒装硬盘，价格￥650。只是老板说只有建达蓝德代理的，只好拿蓝德的盘了。大概是因为它是上海本地代理商的关系。两家的硬盘不一样，联强的是中国产的，蓝德的是泰国产的。价格当然也不一样，蓝德的应该￥600不到，被斩了一笔。
这个硬盘支持NCQ技术（好像SATA II硬盘都支持，囧），如果不是用来做RAID的话，在BIOS的南桥设置中打开AHCI模式（默认是IDE模式），可以很大程度上提升读写性能（7%甚至更高）。南桥芯片ICH6以上应该都支持。关于如何启用NCQ，可以参考这里。
基本上没一个是有货的……
除了CPU和主板比预期要好之外（增加了金钱投入），其它配件品质都有所下降，小有遗憾。
]]></description>
			<content:encoded><![CDATA[<p>禾白的电脑年老体弱，无规律间歇性不能开机，因此周日和禾白一起去百脑汇配了台新电脑。配置如下：</p>
<blockquote><p>CPU：<a title="Intel Core 2 Quad Q9400/盒装 CPU" href="http://product.pconline.com.cn/cpu/intel/252393.html" target="_blank">Intel Core 2 Quad Q9400/盒装</a> ￥1320<br />
主板：<a title="华硕 P5Q Turbo 主板" href="http://product.pconline.com.cn/mb/asus/313650.html" target="_blank">华硕 P5Q Turbo</a> ￥990<br />
显卡：<a title="铭瑄 极光9800GT巨无霸 显卡" href="http://product.pconline.com.cn/vga/maxsun/346935.html" target="_blank">铭瑄 极光9800GT巨无霸</a> ￥690<br />
内存：<a title="金士顿 DDR2 1066 2G骇客神条(KHX8500AD2/2G) 内存" href="http://product.pconline.com.cn/memory/kingston/268606.html" target="_blank">金士顿 DDR2 1066 2G骇客神条(KHX8500AD2/2G)</a> 两条共￥400<br />
硬盘：<a title="希捷 1TB SATA2 32M(7200.12/ST31000528AS) 硬盘" href="http://product.pconline.com.cn/harddisk/seagate/294346.html" target="_blank">希捷 1TB SATA2 32M(7200.12/ST31000528AS)</a> 两块共￥1300<br />
电源：￥280<br />
机箱：<a title="AOC 睿彩6062B 机箱" href="http://product.pconline.com.cn/case/aoc/268972.html" target="_blank">AOC 睿彩6062B</a> ￥160<br />
顺便买了个TP-Link的无线路由：<a title="TP-Link TL-WR841N 无线路由器" href="http://product.pconline.com.cn/wireless_router/tp_link/201910.html" target="_blank">TP-Link TL-WR841N</a> ￥180</p></blockquote>
<p>总计￥5340，成交价￥5280，另外要了一根DVI的线和一根HDMI的线。</p>
<p>这个配置虽说不算顶级，不过也算不错的了，可以说是相当不错。</p>
<p>CPU</p>
<p>本来打算买<a title="Intel Core 2 Quad Q8400/盒装 CPU" href="http://product.pconline.com.cn/cpu/intel/352864.html" target="_blank">Q8400</a>的，只是没货，所以换成<a title="Intel Core 2 Quad Q9400/盒装 CPU" href="http://product.pconline.com.cn/cpu/intel/252393.html" target="_blank">Q9400</a>。老板很豪迈地说，这两个CPU价格只差30块钱，我后来网上一查差了300块钱。网上报价要1590，实际上没那么贵。</p>
<p>Q8400和Q9400没有频率上的差别，不过缓存大小差了近一倍：前者L1=4×32K / L2=2×2M，后者L1=4×64K / L2=2×3M。另外，Q9400支持<a href="http://publish.it168.com/CWORD/3547.shtml" target="_blank">Virtualization(虚拟化)技术</a>。因为基于硬件的虚拟实现能提供更好的性能，应该很适合像我这样要开虚拟机工作的同学们。</p>
<p>再往上，Q9550和Q9400差异貌似只是在倍频上——一个是8.5X，一个是8X，也没什么好考虑的了。</p>
<p>主板</p>
<p>P43和P43芯片组都是intel最后一款基于LGA775的芯片组，它们之间的区别大概就是P45支持Cross Fire技术，而P43不支持。我和禾白都不是游戏玩家，只是我想玩玩磁盘阵列，所以本来选了<a title="华硕 P5QL-E" href="http://product.pconline.com.cn/mb/asus/244951.html" target="_blank">华硕的P5QL-E </a>。不过又是没货，后来在老板的哄骗之下买了现在的板子。</p>
<p>不过可耻的是，虽然已经组装好了，系统也装好了，但是到目前为止，还不确定是否成功启用了RAID模式，也没能修改RAID模式。这个板子的南桥是ICH10R，号称支持RAID0、RAID1、RAID5和RAID10。我想切换到RAID10模式。研究了半天，没能成功，暂时放弃了。</p>
<p>显卡</p>
<p>最终买到的也不是当初想好要买的那款，那款又没货了。对显卡不敏感，没什么好说的。9800GT的卡，1G显存，可以启用Vista的Aero特效。上次给禾白装Windows7，妄图在MX440显卡上开Aero，最终屎败。这次再装Win7，应该能成功了吧……</p>
<p>内存</p>
<p>本来禾白想要买<a title="金士顿 DDR2 1066 4G骇客神条套装(KHX8500D2K2/4G) 内存" href="http://product.pconline.com.cn/memory/kingston/230104.html" target="_blank">金士顿 DDR2 1066 4G骇客神条套装(KHX8500D2K2/4G)</a>的，套装的散热片和漂亮，像两把蓝色的梳子。还是没货，最后换了普通散热片的那种，两者除了散热片不同之外，其它都一样。也罢，反正内存插在机箱里也看不到。</p>
<p>硬盘</p>
<p>去之前在网上看中了联强代理的希捷盒装硬盘，价格￥650。只是老板说只有建达蓝德代理的，只好拿蓝德的盘了。大概是因为它是上海本地代理商的关系。两家的硬盘不一样，联强的是中国产的，蓝德的是泰国产的。价格当然也不一样，蓝德的应该￥600不到，被斩了一笔。</p>
<p>这个硬盘支持<a href="http://publish.it168.com/cWord/3531.shtml" target="_blank">NCQ技术</a>（好像SATA II硬盘都支持，囧），如果不是用来做RAID的话，在BIOS的南桥设置中打开<a href="http://hi.baidu.com/snugduahn/blog/item/bc448f990310bd0c6e068c13.html" target="_blank">AHCI模式</a>（默认是IDE模式），可以很大程度上提升读写性能（7%甚至更高）。南桥芯片ICH6以上应该都支持。关于如何启用NCQ，可以<a href="http://www.3dportal.cn/discuz/viewthread.php?tid=447494" target="_blank">参考这里</a>。</p>
<p>基本上没一个是有货的……</p>
<p>除了CPU和主板比预期要好之外（增加了金钱投入），其它配件品质都有所下降，小有遗憾。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/08/10/new-pc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>微软向Linux Kernel贡献两万行代码</title>
		<link>http://www.fm021.com/2009/07/27/microsoft-contributes-to-linux/</link>
		<comments>http://www.fm021.com/2009/07/27/microsoft-contributes-to-linux/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 06:58:13 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=944</guid>
		<description><![CDATA[微软在GPLv2协议下向Linux Kernel 2.6.32贡献了3个Linux设备驱动，两万行代码。
微软开源技术中心主管Tom Hanrahan解释了微软作出这个非同寻常举动背后的动因：
我们有必要理解虚拟化的一个关键点。如果操作系统作为虚拟机运行，那么它得清楚这件事，这样就不会将调用直接发给各种外围设备了。在微软的术语中，我们称其为启迪（enlightenment）。Windows Server 2008就被设计成这样，因此它清楚何时作为虚拟机运行，何时在物理硬件上运行。
为了让Linux能在Hyper-V上拥有同样的体验，我们必须将这种启迪赋予给它。要想实现这一点则需要运行Linux设备驱动。
以前这些设备驱动是可以下载并用在Hyper-V的第一版上的，然而Linux社区使微软相信（通过Greg Kroah-Hartman，他是在这个议题上与微软进行交涉的第一人）增加Linux设备驱动的办法就是将其贡献给社区，这样任何商业或非商业发布者都能够随意使用、修改并分发它们了。
微软开源技术中心经理Hank Janssen（他领导的团队为这些驱动编写代码）承诺他们不会半途而废：
我们将继续更新驱动代码以不断增强其协同性，同时也希望社区中的开发者觉得这些代码对他们是有用的，值得为其付出。 
451 Group的分析师Jay Lyman就微软的这个举动发表了自己的一些看法。他认为微软会保留这些代码的知识产权：
这些代码的版权属于微软，贡献者的荣誉归功于该工程的领导者Hank Janssen——微软开源技术中心的程序经理。 
然而他的理解却是微软并不会声明任何专利权，因此也不会向使用代码的人索取任何费用：
我们不妨做最坏的打算，假设微软这么做是个阴谋：他现在为Linux贡献代码，然后去申请专利。但理论上是否存在这个可能完全取决于我们对GPLv2的理解。
&#8230;最终这是一个法律上的问题，或取决于律师的口才（显然这么说带有讽刺意味）。与此同时，我们认为微软通过GPLv2来贡献代码包含了一个承诺：不会对代码的使用收取费用，也不会对代码申请任何专利。
Lyman还解释了微软之所以这么做的原因所在：
Red Hat与Novell发布的Linux已经支持enlighten模式了，这要归功于与微软的合作开发。微软向Kernel贡献代码的一个好处是减少了重复开发工作，同时也降低了支持多种不同Linux实现的代价。一旦Kernel接受了代码，微软将以这些代码为基础进行未来的虚拟化集成开发。
这也意味着Linux的社区发布版也可以使用这些代码，这为微软在主机市场上开创了更多的机会，因为Linux的社区发布版如Ubuntu、Debian 与CentOS都是非常重要的。这也加强了这些社区操作系统挑战Red Hat与Novell的能力，而后者对于Windows来说是更加直接的挑战者。
别搞错了，微软之所以这么做是由其利益驱使的。他必须要满足使用多种操作系统和混合环境的企业用户的各种需求，微软已经从差异化其Hyper-V技术与虚拟化领导者VMware中受益无穷了。我们有理由相信相对于VMware来说，微软对Windows的虚拟化会对Linux提供更加友好的体验。
需要说明的是，Linux无需借助于上面提到的设备驱动就能运行在Hyper-V上，但性能却很差。这是微软首次向Linux Kernel贡献代码，也是首次在GPLv2下发布代码。
查看英文原文：Microsoft Is Contributing 20,000 Lines of Code to the Linux Kernel
]]></description>
			<content:encoded><![CDATA[<p>微软在GPLv2协议下向Linux Kernel 2.6.32贡献了3个Linux设备驱动，两万行代码。</p>
<p>微软开源技术中心主管Tom Hanrahan解释了微软作出这个非同寻常举动背后的动因：</p>
<blockquote><p>我们有必要理解虚拟化的一个关键点。如果操作系统作为虚拟机运行，那么它得清楚这件事，这样就不会将调用直接发给各种外围设备了。在微软的术语中，我们称其为启迪（enlightenment）。Windows Server 2008就被设计成这样，因此它清楚何时作为虚拟机运行，何时在物理硬件上运行。</p>
<p>为了让Linux能在Hyper-V上拥有同样的体验，我们必须将这种启迪赋予给它。要想实现这一点则需要运行Linux设备驱动。</p></blockquote>
<p>以前这些设备驱动是可以下载并用在Hyper-V的第一版上的，然而Linux社区使微软相信（通过Greg Kroah-Hartman，他是在这个议题上与微软进行交涉的第一人）增加Linux设备驱动的办法就是将其贡献给社区，这样任何商业或非商业发布者都能够随意使用、修改并分发它们了。</p>
<p>微软开源技术中心经理Hank Janssen（他领导的团队为这些驱动编写代码）承诺他们不会半途而废：</p>
<blockquote><p>我们将继续更新驱动代码以不断增强其协同性，同时也希望社区中的开发者觉得这些代码对他们是有用的，值得为其付出。 </p></blockquote>
<p>451 Group的分析师Jay Lyman就微软的这个举动发表了自己的一些看法。他认为微软会保留这些代码的知识产权：</p>
<blockquote><p>这些代码的版权属于微软，贡献者的荣誉归功于该工程的领导者Hank Janssen——微软开源技术中心的程序经理。 </p></blockquote>
<p>然而他的理解却是微软并不会声明任何专利权，因此也不会向使用代码的人索取任何费用：</p>
<blockquote><p>我们不妨做最坏的打算，假设微软这么做是个阴谋：他现在为Linux贡献代码，然后去申请专利。但理论上是否存在这个可能完全取决于我们对GPLv2的理解。</p>
<p>&#8230;最终这是一个法律上的问题，或取决于律师的口才（显然这么说带有讽刺意味）。与此同时，我们认为微软通过GPLv2来贡献代码包含了一个承诺：不会对代码的使用收取费用，也不会对代码申请任何专利。</p></blockquote>
<p>Lyman还解释了微软之所以这么做的原因所在：</p>
<blockquote><p>Red Hat与Novell发布的Linux已经支持enlighten模式了，这要归功于与微软的合作开发。微软向Kernel贡献代码的一个好处是减少了重复开发工作，同时也降低了支持多种不同Linux实现的代价。一旦Kernel接受了代码，微软将以这些代码为基础进行未来的虚拟化集成开发。</p>
<p>这也意味着Linux的社区发布版也可以使用这些代码，这为微软在主机市场上开创了更多的机会，因为Linux的社区发布版如Ubuntu、Debian 与CentOS都是非常重要的。这也加强了这些社区操作系统挑战Red Hat与Novell的能力，而后者对于Windows来说是更加直接的挑战者。</p>
<p>别搞错了，微软之所以这么做是由其利益驱使的。他必须要满足使用多种操作系统和混合环境的企业用户的各种需求，微软已经从差异化其Hyper-V技术与虚拟化领导者VMware中受益无穷了。我们有理由相信相对于VMware来说，微软对Windows的虚拟化会对Linux提供更加友好的体验。</p></blockquote>
<p>需要说明的是，Linux无需借助于上面提到的设备驱动就能运行在Hyper-V上，但性能却很差。这是微软首次向Linux Kernel贡献代码，也是首次在GPLv2下发布代码。</p>
<p>查看英文原文：<a href="http://www.infoq.com/news/2009/07/Microsoft-Contributes-to-Linux" target="_blank">Microsoft Is Contributing 20,000 Lines of Code to the Linux Kernel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/07/27/microsoft-contributes-to-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>23个.NET开源项目</title>
		<link>http://www.fm021.com/2009/07/04/23-dot-net-open-source-projects/</link>
		<comments>http://www.fm021.com/2009/07/04/23-dot-net-open-source-projects/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 01:11:27 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=899</guid>
		<description><![CDATA[Eric Nelson是微软技术的传道者，也是MSDN UK Flash的技术编辑，他编写了一个列表，列出23个UK开发人员推荐的.NET开源项目。微软的一些开源项目如ASP.NET MVC、DLR、IronRuby、IronPython、MEF等则未列入其中。
Eric尝试只包含一个测试框架和一个mock框架，即使有很多其它的项目同样入围。他列出了以下项目：

[TEST] xUnit.net - 用于TDD的最好的测试框架之一。
[TEST] RhinoMocks  mocking framework &#8211; 通过创建mock使测试更简单。
[TEST] White for automation of Windows  applications &#8211; 用代码驱动Windows程序来测试。
[TEST] Gallio Automation Platform &#8211; 可以运行很多测试框架，如MSTest、xUnit、NUnit以及MbUnit。
[DATA] Fluent NHibernate &#8211; Fluent  NHibernate让你可以用C#代码来设置映射关系。
[OOP] StructureMap  Dependency Injection/Inversion of Control - 解耦类和依赖。
[OOP] Managed Extensibility Framework &#8211; 从静态编译程序转换到动态语言程序
[APPFX] s#arp  architecture for web applications &#8211; 用ASP.NET [...]]]></description>
			<content:encoded><![CDATA[<p>Eric Nelson是微软技术的传道者，也是<a id="md-0" title="MSDN UK Flash" href="http://msdn.microsoft.com/en-us/aa570311.aspx">MSDN UK Flash</a>的技术编辑，他编写了一个列表，列出23个UK开发人员推荐的<a id="peq3" title=".NET开源项目" href="http://geekswithblogs.net/iupdateable/archive/2009/06/19/open-source-framework-and-library-recommendations.aspx">.NET开源项目</a>。微软的一些开源项目如ASP.NET MVC、DLR、IronRuby、IronPython、MEF等则未列入其中。</p>
<p>Eric尝试只包含一个测试框架和一个mock框架，即使有很多其它的项目同样入围。他列出了以下项目：</p>
<ol>
<li><a href="http://codeplex.com/xunit">[TEST] xUnit.net </a>- 用于TDD的最好的测试框架之一。</li>
<li><a href="http://ayende.com/projects/rhino-mocks.aspx">[TEST] RhinoMocks  mocking framework</a> &#8211; 通过创建mock使测试更简单。</li>
<li><a href="http://white.codeplex.com/">[TEST] White for automation of Windows  applications</a> &#8211; 用代码驱动Windows程序来测试。</li>
<li><a href="http://www.gallio.org/">[TEST] Gallio Automation Platform</a> &#8211; 可以运行很多测试框架，如MSTest、xUnit、NUnit以及MbUnit。</li>
<li><a href="http://fluentnhibernate.org/">[DATA] Fluent NHibernate</a> &#8211; Fluent  NHibernate让你可以用C#代码来设置映射关系。</li>
<li><a href="http://structuremap.sourceforge.net/Default.htm">[OOP] StructureMap  Dependency Injection/Inversion of Control </a>- 解耦类和依赖。</li>
<li><a href="http://mef.codeplex.com/">[OOP] Managed Extensibility Framework</a> &#8211; 从静态编译程序转换到动态语言程序</li>
<li><a href="http://code.google.com/p/sharp-architecture/">[APPFX] s#arp  architecture for web applications</a> &#8211; 用ASP.NET MVC和NHibernate快速开发web应用程序。</li>
<li><a href="http://www.openrasta.com/">[APPFX] OpenRasta REST based framework  for building web applications</a> &#8211; 让你的程序拥有一个REST API接口。</li>
<li><a href="http://www.lhotka.net/cslanet/">[APPFX] CSLA.NET Application  Framework</a> &#8211; .NET开发综合框架</li>
<li><a href="http://www.springframework.net/">[APPFX] Spring.NET Application  Framework</a> &#8211; Web开发综合框架</li>
<li><a href="http://www.mono-project.com/Main_Page">[RUNTIME] Mono enables .NET  on Linux and Mac</a> &#8211; 在Linux、BSD和OS X上使用.NET.</li>
<li><a href="http://shfb.codeplex.com/">[UTIL] Sandcastle Help File Builder</a> &#8211; 创建MSDN样式的文档。</li>
<li><a href="http://easyhook.codeplex.com/">[HELPER] EasyHook for Windows API  Hooking</a> &#8211; 用托管代码扩展非托管代码。</li>
<li><a href="http://www.codeplex.com/Json">[HELPER] Json.NET for working with  JSON formatted data</a> &#8211; 用一条语句序列化.NET对象。</li>
<li><a href="http://exceldatareader.codeplex.com/">[HELPER] Excel Data Reader  for Excel 97 to 2007</a> &#8211; 将Excel文件读取到Dataset中</li>
<li><a href="http://sharpsnmplib.codeplex.com/">[HELPER] #SNMP Library</a> &#8211; 对SNMP的包装。</li>
<li><a href="http://dotnetzip.codeplex.com/">[HELPER] DotNetZip Library</a> &#8211; ZIP库和示例。</li>
<li><a href="http://visioautomation.codeplex.com/">[HELPER] Visio Automation  Library</a> &#8211; 用C#、VB和其它语言驱动Viso</li>
<li><a href="http://phpexcel.codeplex.com/">[HELPER] PHPExcel is not just about  Excel!</a> &#8211; 读写Execel 2007、PDF、HTML等文档的PHP类</li>
<li><a href="http://www.codeplex.com/Argotic">[HELPER] Argotic Syndication  Framework for RSS, Atom, OPML and more</a> &#8211; 读写聚合内容的库</li>
<li><a href="http://www.nlog-project.org/">[HELPER] NLog logging library</a> -让你的程序易于调试</li>
<li><a href="http://csharp-source.net/">A great directory of C# Open Source  software</a> &#8211; 一个非常好的库、框架和工具列表</li>
</ol>
<p>还有一些<a id="ohk:" title="提交的项目" href="http://geekswithblogs.net/iupdateable/archive/2009/06/08/suggestions-so-far-for-uk-msdn-flash-special-edition-on.aspx">提交的项目</a>没有进入列表：</p>
<ol>
<li><a href="http://www.castleproject.org/" target="_blank">Castle</a></li>
<li><a href="http://mvccontrib.codeplex.com/" target="_blank">MvcContrib</a></li>
<li><a href="http://subversion.tigris.org/" target="_blank">Subversion</a></li>
<li><a href="http://nant.sourceforge.net/" target="_blank">Nant</a></li>
<li><a href="http://logging.apache.org/log4net/" target="_blank">log4net</a></li>
<li><a href="http://incubator.apache.org/lucene.net/" target="_blank">Lucene</a></li>
<li><a href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl</a></li>
<li><a href="http://mef.codeplex.com/" target="_blank">MEF</a></li>
<li><a href="http://www.getpaint.net/" target="_blank">Paint.NET</a></li>
</ol>
<p>一些使用<a href="http://www.opensource.org/licenses/ms-pl.html" target="_blank">MS-PL</a>许可证的微软项目:</p>
<ol>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;displaylang=en" target="_blank">ASP.NET MVC Open Source</a></li>
<li><a href="http://dlr.codeplex.com/">.NET Dynamic Language Runtime</a> (DLR)</li>
<li><a href="http://www.ironruby.net/">IronRuby</a></li>
<li><a href="http://ironpython.codeplex.com/">IronPython</a></li>
<li><a href="http://silverlight.codeplex.com/">Silverlight Toolkit</a></li>
<li><a href="http://www.codeplex.com/AjaxControlToolkit">Ajax Control  Toolkit</a></li>
<li><a href="http://www.codeplex.com/MEF">Managed Extensibility Framework</a> (MEF)</li>
</ol>
<p>MS-PL是OSI认可的许可证，GNU也认可它为免费软件许可证，它允许任何人查看源代码、修改源代码并发布修改后的源代码。而且此许可证并不限 制代码只能运行在Windows上，这样就可以将代码移植到其它操作系统，例如Mono（Linux上的.NET）和Monolight（Linux上的 Silverlight）。MonoDevelop有一个<a id="lth3" title="插件" href="http://tirania.org/blog/archive/2009/Apr-02-1.html">插件</a>，可以用来在Linux和Mac OS X上开发ASP.NET MVC程序。</p>
<p>转载自：<a href="http://www.infoq.com/cn/news/2009/07/23-.NET-Open-Source-Projects" target="_blank">http://www.infoq.com/cn/news/2009/07/23-.NET-Open-Source-Projects</a></p>
<p>英文原文：<a href="http://www.infoq.com/news/2009/07/23-.NET-Open-Source-Projects">23 .NET Open Source Projects</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/07/04/23-dot-net-open-source-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个检测文本字符编码的.NET实现</title>
		<link>http://www.fm021.com/2009/05/21/nuniversalchardet/</link>
		<comments>http://www.fm021.com/2009/05/21/nuniversalchardet/#comments</comments>
		<pubDate>Thu, 21 May 2009 11:32:12 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=554</guid>
		<description><![CDATA[字符编码检测，大概在网络爬虫中应用比较多。不过网页的编码检测相对比较简单：web服务器一般都会返回EncodingType，实在不行，也可以去http-equiv属性为Content-Type的&#60;meta&#62;标签中去找。如果说要检测txt文本文件，那就难搞了。除了带BOM头的unicode编码的文件之外，其它的文件到底是什么编码，绝对是个未知数。
这么有挑战性的工作，要我来做，那肯定搞不定，只好去找别人的实现了。
略微google了一下，结果还是挺多的。不过大多数实现貌似都源自于Mozilla的universalchardet。大概的思路就是根据字符分布的概率来判断，有兴趣的同学可以参考这里：A composite approach to language/encoding detection。另外还有同学翻译了中文版：一种语言/编码检测的复合方法。
不过这些都不是可以直接拿来用的东东，还好有几个同学已经根据这个方法和Mozilla的C++代码自己实现了.NET的版本：

NCharDet。这个貌似是一个基于JCharDet的版本。虽然搜索结果挺多，不过测试下来，准确性有待提高。
nuniversalchardet。在google code上面找到的国产版本，翻译自juniversalchardet，是jchardet的升级版本。既然是jchardet的升级版本，效果自然要比nchardet要好。实际测试的结果也是，准确率很高。
chardetsharp。这个号称是直接从universalchardet翻译过来的，不过支持的语言数量实在是少了一些。而且作者有些时间没有更新过了……
还有一个java的简化版：http://dev.csdn.net/article/10/10961.shtm。有人把它直接转成C#版了，也不是很准确。
差不多就这些了……

最后我用了nuniversalchardet，代码调用比NCharDet简单很多，又准确。点击这里下载源代码，里面有测试项目，可以在那里看调用代码怎么写。
]]></description>
			<content:encoded><![CDATA[<p>字符编码检测，大概在网络爬虫中应用比较多。不过网页的编码检测相对比较简单：web服务器一般都会返回EncodingType，实在不行，也可以去http-equiv属性为Content-Type的&lt;meta&gt;标签中去找。如果说要检测txt文本文件，那就难搞了。除了带BOM头的unicode编码的文件之外，其它的文件到底是什么编码，绝对是个未知数。</p>
<p>这么有挑战性的工作，要我来做，那肯定搞不定，只好去找别人的实现了。</p>
<p>略微google了一下，结果还是挺多的。不过大多数实现貌似都源自于Mozilla的<a href="http://mxr.mozilla.org/seamonkey/source/extensions/universalchardet/" target="_blank">universalchardet</a>。大概的思路就是根据字符分布的概率来判断，有兴趣的同学可以参考这里：<a href="http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html" target="_blank">A composite approach to language/encoding detection</a>。另外还有同学翻译了中文版：<a href="http://blog.i5un.com/item/21" target="_blank">一种语言/编码检测的复合方法</a>。</p>
<p>不过这些都不是可以直接拿来用的东东，还好有几个同学已经根据这个方法和Mozilla的C++代码自己实现了.NET的版本：</p>
<ol>
<li><a href="http://www.conceptdevelopment.net/Localization/NCharDet/" target="_blank">NCharDet</a>。这个貌似是一个基于JCharDet的版本。虽然搜索结果挺多，不过测试下来，准确性有待提高。</li>
<li><a href="http://code.google.com/p/nuniversalchardet/" target="_blank">nuniversalchardet</a>。在google code上面找到的国产版本，翻译自juniversalchardet，是jchardet的升级版本。既然是jchardet的升级版本，效果自然要比nchardet要好。<strong>实际测试的结果也是，准确率很高</strong>。</li>
<li><a href="http://code.google.com/p/chardetsharp/" target="_blank">chardetsharp</a>。这个号称是直接从universalchardet翻译过来的，不过支持的语言数量实在是少了一些。而且作者有些时间没有更新过了……</li>
<li>还有一个java的简化版：<a href="http://dev.csdn.net/article/10/10961.shtm" target="_blank">http://dev.csdn.net/article/10/10961.shtm</a>。有人把它直接转成C#版了，也不是很准确。</li>
<li>差不多就这些了……</li>
</ol>
<p>最后我用了<a href="http://code.google.com/p/nuniversalchardet/" target="_blank">nuniversalchardet</a>，代码调用比NCharDet简单很多，又准确。<a href="http://nuniversalchardet.googlecode.com/files/UniversalCharDet.rar" target="_blank">点击这里下载源代码</a>，里面有测试项目，可以在那里看调用代码怎么写。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/05/21/nuniversalchardet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在新窗口中打开链接</title>
		<link>http://www.fm021.com/2009/05/16/target-blank/</link>
		<comments>http://www.fm021.com/2009/05/16/target-blank/#comments</comments>
		<pubDate>Sat, 16 May 2009 09:36:33 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[用户体验]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=534</guid>
		<description><![CDATA[在严格的XHTML文档模型中，a元素是没有target属性的。如果出现target=&#8221;_blank&#8221;, target=&#8221;_top&#8221;这样的属性的话，都将导致不能通过W3C的校验。transitional则没有这样的限制。虽然打开很多窗口会让任务栏变得很混乱（Firefox下可能会打开很多标签页），但是仅仅根据W3C标准就判定不应该使用target=&#8221;_blank&#8221;显然太过草率。根据我们的经验，太过绝对说法往往不怎么正确。
对于资深网虫来说，他们更喜欢所有的链接都在同一个窗口中打开，而由他们自己来决定是不是要在新窗口中打开。在Firefox里，可以按住Ctrl点链接，以强制在新标签页中打开一个链接。当他们在点到一个在新窗口中打开的连接的时候，感觉就像是踩到了一砣大便。有趣的是，在有些时候，比如看新闻，我个人更习惯在新窗口中打开一个页面。因为按Ctrl+W比按Backspace方便得多。这样看来，并非所有在新窗口中打开链接的做法都不可取，下面略微列举一下。
建议在新窗口中打开。如果打开一个链接会中断用户当前的操作的话，最好还是在新窗口中打开。比如：

广告链接
注册表单的用户协议
帮助
正在编辑的文章的预览链接
查看图片
下载文件
查看页面的可打印版本

不应该在新窗口中打开：

分页导航
返回链接
注销/退出链接

另外一些场景则比较自由。比如跨站链接，可以在新窗口中打开，因为目标页中可能并没有返回到原始页面的链接。
PS：独立博客的好处就是你想写什么都没人管的着（老婆和老大哥除外），这样的文章要是放到博客园首页的话，很多人就会大叫“博主还是把文章移到新手区吧”。但是谁不是从新手晋级到高手的呢，真是奇怪。
]]></description>
			<content:encoded><![CDATA[<p>在严格的XHTML文档模型中，a元素是没有target属性的。如果出现target=&#8221;_blank&#8221;, target=&#8221;_top&#8221;这样的属性的话，都将导致不能通过W3C的校验。transitional则没有这样的限制。虽然打开很多窗口会让任务栏变得很混乱（Firefox下可能会打开很多标签页），但是仅仅根据W3C标准就判定不应该使用target=&#8221;_blank&#8221;显然太过草率。根据我们的经验，太过绝对说法往往不怎么正确。</p>
<p>对于资深网虫来说，他们更喜欢所有的链接都在同一个窗口中打开，而由他们自己来决定是不是要在新窗口中打开。在Firefox里，可以按住Ctrl点链接，以强制在新标签页中打开一个链接。当他们在点到一个在新窗口中打开的连接的时候，感觉就像是踩到了一砣大便。有趣的是，在有些时候，比如看新闻，我个人更习惯在新窗口中打开一个页面。因为按Ctrl+W比按Backspace方便得多。这样看来，并非所有在新窗口中打开链接的做法都不可取，下面略微列举一下。</p>
<p>建议在新窗口中打开。如果打开一个链接会中断用户当前的操作的话，最好还是在新窗口中打开。比如：</p>
<ol>
<li>广告链接</li>
<li>注册表单的用户协议</li>
<li>帮助</li>
<li>正在编辑的文章的预览链接</li>
<li>查看图片</li>
<li>下载文件</li>
<li>查看页面的可打印版本</li>
</ol>
<p>不应该在新窗口中打开：</p>
<ol>
<li>分页导航</li>
<li>返回链接</li>
<li>注销/退出链接</li>
</ol>
<p>另外一些场景则比较自由。比如跨站链接，可以在新窗口中打开，因为目标页中可能并没有返回到原始页面的链接。</p>
<p>PS：独立博客的好处就是你想写什么都没人管的着（老婆和老大哥除外），这样的文章要是放到博客园首页的话，很多人就会大叫“博主还是把文章移到新手区吧”。但是谁不是从新手晋级到高手的呢，真是奇怪。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/05/16/target-blank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在IIS6.0中启用gzip压缩功能</title>
		<link>http://www.fm021.com/2009/05/15/enable-gzip-in-iis6/</link>
		<comments>http://www.fm021.com/2009/05/15/enable-gzip-in-iis6/#comments</comments>
		<pubDate>Fri, 15 May 2009 08:31:47 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Windows Server 2003]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=518</guid>
		<description><![CDATA[如果网站上有比较多的客户端资源（如js和css）的话，启用gzip是一个很有效的提高网站访问速度的做法。
1. 在IIS“网站属性”对话框的“服务”标签页中，钩选“压缩静态文件”的复选框。

2. 在命令行中输入“iisreset -stop”，停止IIS服务。
3. 因为默认只压缩htm/html/txt文件，所以要修改 %windir%/system32/inetsrv/MetaBase.xml 配置文件中的 IIsCompressionScheme 节点。（可以搜索“/gzip”来快速定位）
修改“HcFileExtensions”属性，添加css和js。
另外一个属性比较有意思，那就是HcDynamicCompressionLevel属性。网上很多人都说这个是设置压缩比的，0表示不压缩，10表示最高压缩比。实际上这个属性对静态文件压缩没有任何影响，可以忽略掉。
4. iisreset -start，启动IIS。可以用firebug的网络功能来看一下js文件的体积是不是减小了。
PS：另外几个提高访问速度做法是

启用内容过期，为静态文件增加过期时间的Http Header
减少图片数量

记录一下备忘。
]]></description>
			<content:encoded><![CDATA[<p>如果网站上有比较多的客户端资源（如js和css）的话，启用gzip是一个很有效的提高网站访问速度的做法。</p>
<p>1. 在IIS“网站属性”对话框的“服务”标签页中，钩选“压缩静态文件”的复选框。<br />
<img src="http://fleet1.footbig.com/1574/m/e8/e2/e8e2ccfd77ae8c8f1f5463333ab3efa1-6728.jpg" alt="" /></p>
<p>2. 在命令行中输入“iisreset -stop”，停止IIS服务。</p>
<p>3. 因为默认只压缩htm/html/txt文件，所以要修改 %windir%/system32/inetsrv/MetaBase.xml 配置文件中的 IIsCompressionScheme 节点。（可以搜索“/gzip”来快速定位）</p>
<p>修改“HcFileExtensions”属性，添加css和js。</p>
<p>另外一个属性比较有意思，那就是HcDynamicCompressionLevel属性。网上很多人都说这个是设置压缩比的，0表示不压缩，10表示最高压缩比。实际上这个属性对静态文件压缩没有任何影响，可以忽略掉。</p>
<p>4. iisreset -start，启动IIS。可以用firebug的网络功能来看一下js文件的体积是不是减小了。</p>
<p>PS：另外几个提高访问速度做法是</p>
<ol>
<li>启用内容过期，为静态文件增加过期时间的Http Header</li>
<li>减少图片数量</li>
</ol>
<p>记录一下备忘。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/05/15/enable-gzip-in-iis6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>南方周末十大热门的一些鸡毛小事</title>
		<link>http://www.fm021.com/2009/04/27/%e5%8d%97%e6%96%b9%e5%91%a8%e6%9c%ab%e5%8d%81%e5%a4%a7%e7%83%ad%e9%97%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e9%b8%a1%e6%af%9b%e5%b0%8f%e4%ba%8b/</link>
		<comments>http://www.fm021.com/2009/04/27/%e5%8d%97%e6%96%b9%e5%91%a8%e6%9c%ab%e5%8d%81%e5%a4%a7%e7%83%ad%e9%97%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e9%b8%a1%e6%af%9b%e5%b0%8f%e4%ba%8b/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 04:23:06 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[好玩]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=311</guid>
		<description><![CDATA[无标题文档，这是南方周末的十大热门之一……


当选中里面的文字时，会变成这样：

很奇怪是不是？HTML是这样的：
&#60;ul&#62;
&#60;li&#62;&#60;em&#62;&#60;i&#62;0&#60;/i&#62;1.&#60;i&#62;0&#60;/i&#62;&#60;/em&#62;水产1&#8230;&#60;/li&#62;
&#60;li&#62;&#60;em&#62;&#60;i&#62;0&#60;/i&#62;2.&#60;i&#62;0&#60;/i&#62;&#60;/em&#62;水产2&#8230;&#60;/li&#62;
&#60;/ul&#62;
这样做的原因无非就是为了对齐，我想到两个其它的解决方法：
1.
HTML:
&#60;ul&#62;
&#60;li&#62;&#60;em&#62;1.&#60;/em&#62;水产1&#8230;&#60;/li&#62;
&#60;li&#62;&#60;em&#62;2.&#60;/em&#62;水产2&#8230;&#60;/li&#62;
&#60;/ul&#62;
Style:
em {float:left; width:30px; padding-right:10px; text-align:right;}
2.
HTML:
&#60;ul&#62;
&#60;li&#62;&#60;em&#62;&#38;nbsp;1.&#38;nbsp;&#60;/em&#62;水产1&#8230;&#60;/li&#62;
&#60;li&#62;&#60;em&#62;&#38;nbsp;2.&#38;nbsp;&#60;/em&#62;水产2&#8230;&#60;/li&#62;
&#60;/ul&#62;
字体：使用等宽字体。
注：以上方法没有经过测试……
]]></description>
			<content:encoded><![CDATA[<p>无标题文档，这是南方周末的十大热门之一……<br />
<span id="more-311"></span><br />
<a href="http://fleet1.footbig.com/1574/m/cb/ea/cbea3058a92ecefc484fb3a039e7e1e0-3352.jpg"><img class="alignnone" title="无标题文档" src="http://fleet1.footbig.com/1574/m/cb/ea/cbea3058a92ecefc484fb3a039e7e1e0-3352.jpg" alt="" width="300" height="359" /></a></p>
<p>当选中里面的文字时，会变成这样：</p>
<p><a href="http://fleet1.footbig.com/1574/m/01/b9/01b9588084c7c7fedef65b577cff7a28-8303.jpg"><img class="alignnone" title="选中状态" src="http://fleet1.footbig.com/1574/m/01/b9/01b9588084c7c7fedef65b577cff7a28-8303.jpg" alt="" width="300" height="359" /></a></p>
<p>很奇怪是不是？HTML是这样的：</p>
<blockquote><p>&lt;ul&gt;<br />
&lt;li&gt;&lt;em&gt;&lt;i&gt;0&lt;/i&gt;1.&lt;i&gt;0&lt;/i&gt;&lt;/em&gt;水产1&#8230;&lt;/li&gt;<br />
&lt;li&gt;&lt;em&gt;&lt;i&gt;0&lt;/i&gt;2.&lt;i&gt;0&lt;/i&gt;&lt;/em&gt;水产2&#8230;&lt;/li&gt;<br />
&lt;/ul&gt;</p></blockquote>
<p>这样做的原因无非就是为了对齐，我想到两个其它的解决方法：</p>
<p>1.</p>
<p>HTML:</p>
<p>&lt;ul&gt;<br />
&lt;li&gt;&lt;em&gt;1.&lt;/em&gt;水产1&#8230;&lt;/li&gt;<br />
&lt;li&gt;&lt;em&gt;2.&lt;/em&gt;水产2&#8230;&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p>Style:</p>
<p>em {float:left; width:30px; padding-right:10px; text-align:right;}</p>
<p>2.</p>
<p>HTML:</p>
<p>&lt;ul&gt;<br />
&lt;li&gt;&lt;em&gt;&amp;nbsp;1.&amp;nbsp;&lt;/em&gt;水产1&#8230;&lt;/li&gt;<br />
&lt;li&gt;&lt;em&gt;&amp;nbsp;2.&amp;nbsp;&lt;/em&gt;水产2&#8230;&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p>字体：<strong>使用等宽字体</strong>。</p>
<p>注：以上方法没有经过测试……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/04/27/%e5%8d%97%e6%96%b9%e5%91%a8%e6%9c%ab%e5%8d%81%e5%a4%a7%e7%83%ad%e9%97%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e9%b8%a1%e6%af%9b%e5%b0%8f%e4%ba%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64位操作系统下.net调用32位dll时出错</title>
		<link>http://www.fm021.com/2009/04/18/64%e4%bd%8d%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8bnet%e8%b0%83%e7%94%a832%e4%bd%8ddll%e6%97%b6%e5%87%ba%e9%94%99/</link>
		<comments>http://www.fm021.com/2009/04/18/64%e4%bd%8d%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8bnet%e8%b0%83%e7%94%a832%e4%bd%8ddll%e6%97%b6%e5%87%ba%e9%94%99/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 12:12:19 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[64位]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=139</guid>
		<description><![CDATA[原先写的.net程序在切换到64位操作系统下之后出错了。
一个错误出现在.net调用一个32位COM程序时，提示如下错误信息：
Retrieving the COM class factory for component with CLSID {GUID} failed due to the following error: 80040154.
另一个是加载一个包装win32 dll的.net dll出现的，提示：
Could not load file or assembly &#8216;NamespaceName.ClassName&#8217; or one of its dependencies. An attempt was made to load a program with an incorrect format.
Google“64位 80040154”，没有什么有用的结果。后来搜索“64bit 80040154”，在第一个结果里就找到了答案。看来老外又一次走在了我们前面。不多说了，按照这位MVP的说法，是因为64位程序不能在同一地址空间内加载32位程序。也就是说，64位程序无法调用32位的win32 dll，以及in-process形式的32位COM。解决的办法，要么编译一个64位的dll，要么把COM改造成independent progress形式。
找到了原因，接下来的事情就简单了。把程序编译了一个64位的版本，测试，可以正常运行了。
]]></description>
			<content:encoded><![CDATA[<p>原先写的.net程序在切换到64位操作系统下之后出错了。</p>
<p>一个错误出现在.net调用一个32位COM程序时，提示如下错误信息：</p>
<blockquote><p>Retrieving the COM class factory for component with CLSID {GUID} failed due to the following error: 80040154.</p></blockquote>
<p>另一个是加载一个包装win32 dll的.net dll出现的，提示：</p>
<blockquote><p>Could not load file or assembly &#8216;NamespaceName.ClassName&#8217; or one of its dependencies. An attempt was made to load a program with an incorrect format.</p></blockquote>
<p>Google“<a href="http://www.google.com/search?q=64%E4%BD%8D+80040154&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:zh-CN:official&amp;client=firefox-a" target="_blank">64位 80040154</a>”，没有什么有用的结果。后来搜索“<a href="http://www.google.com/search?q=64bit+80040154&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:zh-CN:official&amp;client=firefox-a" target="_blank">64bit 80040154</a>”，在第一个结果里就找到了答案。看来老外又一次走在了我们前面。不多说了，<a href="http://social.msdn.microsoft.com/Forums/zh-CN/netfx64bit/thread/edaca3ea-1138-463f-b310-f007e7ac7d08" target="_blank">按照这位MVP的说法</a>，是<strong>因为64位程序不能在同一地址空间内加载32位程序</strong>。也就是说，64位程序无法调用32位的win32 dll，以及in-process形式的32位COM。<strong>解决的办法，要么编译一个64位的dll，要么把COM改造成independent progress形式</strong>。</p>
<p>找到了原因，接下来的事情就简单了。把程序<a href="http://www.fm021.com/2009/04/16/%e5%a6%82%e4%bd%95%e5%9c%a8vs2008%e4%b8%ad%e7%bc%96%e8%af%9164%e4%bd%8d%e7%a8%8b%e5%ba%8f/">编译了一个64位的版本</a>，测试，可以正常运行了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/04/18/64%e4%bd%8d%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8bnet%e8%b0%83%e7%94%a832%e4%bd%8ddll%e6%97%b6%e5%87%ba%e9%94%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Server 2003 x64 Edition尝试中</title>
		<link>http://www.fm021.com/2009/04/17/windows-server-2003-x64-edition%e5%b0%9d%e8%af%95%e4%b8%ad/</link>
		<comments>http://www.fm021.com/2009/04/17/windows-server-2003-x64-edition%e5%b0%9d%e8%af%95%e4%b8%ad/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 10:23:03 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[64位]]></category>
		<category><![CDATA[Windows Server 2003]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=63</guid>
		<description><![CDATA[在试用了89天Windows 7后，我重装了系统。这次是Windows Server 2003 x64 Edition，在VeryCD上下载到的英文版。为什么这么清楚地记得我用了89天Windows 7呢？因为Visual Studio 2008 90天试用版还有1天就要过期了……为什么要装2003 x64版呢？因为我还没玩过任何x64版的系统……
x64系统会有各种软件和驱动兼容性问题，虽然已经有心理准备了，但是问题不断还是让人有点不爽。
1、区域设置问题
由于是英文版，安装很多非unicode的中文应用程序都是乱码，首当其冲的就是winrar。不过这个问题我有经验，在控制面板的“区域和语言选项（Regional and Language Options）”的高级选项卡中把语言设置成简体中文就可以了。不过当我选语言的时候，傻眼了，根本没有简体中文这一项。猜测是系统安装的时候默认没有安装中文语言。于是打开IE，选择View菜单-&#62;Encoding-&#62;Chinese，果然提示没有安装这个语言，询问我是不是要安装。于是很轻松的，装上了中文语言。再回到区域和语言选项，把语言和区域都设置成“Chinese(RPC)”，位置设成“China”，搞定。
2、虚拟光驱
Windows 7系统里，daemon和Alcohol都不能用，安装的时候会无限重启，只有Win Mount可以用。
2003 x64系统里，最新的daemon还是不能用，不过最新的Alcohol 120%可以使用。现在用的是1.9.8 ( Build 7530 ) 试用版，就是启动的时候要等待10秒钟，不知道有没有使用时间限制……反正到目前为止，我已经用它把需要的软件都装上了，估计后面不大会用到了。
3、驱动
我的笔记本是Dell的Inspiron 1525，用买的时候送的驱动光盘安装驱动。不过光盘里没有专门为2003 x64编写的驱动程序，只好用Windows XP的驱动了。
网卡：Dell Wireless 1395 WLAN MiniCard。for Windows XP版本的，可以正常安装；
声卡：SigmaTel Stac 92XX C-Major HD Audio。Rev A11版本，可用。
显卡：Intel 965G（X3100）。Dell的网站上从来没找到过Server 2003版本的驱动，更别说64位的了。去Intel的网站上找到一个，Intel® Graphics Media Accelerator Driver for Windows* XP 64 (zip)，可以用。
试了一下，
4、MSN
本来想要安装最新版的，不过从微软网站上下载的安装包在安装的时候居然提示不支持此操作系统。nndx。。。不过后来发现系统自带了一个2009 beta版，就是显示中文的时候字号太小，先凑合着用了。
5、IE
系统自带一个IE6。在我第一次打开IE的时候，它就自作主张的给我转到IE8的页面上去了。在那个页面上下载到一个文件名为“IE8-WindowsServer2003-x64-CHS.exe”的文件。安装的时候居然也提示不支持此操作系统，无语了。估计也就两种可能性：只能装英文版IE8，或者是需要装Server 2003 SP2。
最终的实验结果是：必须要安装SP2才能安装IE8，而且只能安装英文版。
6、其他
64位程序或.net程序无法调用32位的dll和32位的in-process COM，解决方案可以参考这里。
总的来说，可以正常工作，没有死机过。
]]></description>
			<content:encoded><![CDATA[<p>在试用了89天Windows 7后，我重装了系统。这次是Windows Server 2003 x64 Edition，在<a href="http://www.verycd.com/topics/52736/" target="_blank">VeryCD上下载到的英文版</a>。为什么这么清楚地记得我用了89天Windows 7呢？因为Visual Studio 2008 90天试用版还有1天就要过期了……为什么要装2003 x64版呢？因为我还没玩过任何x64版的系统……</p>
<p>x64系统会有各种软件和驱动兼容性问题，虽然已经有心理准备了，但是问题不断还是让人有点不爽。</p>
<h1>1、区域设置问题</h1>
<p>由于是英文版，安装很多非unicode的中文应用程序都是乱码，首当其冲的就是winrar。不过这个问题我有经验，在控制面板的“区域和语言选项（Regional and Language Options）”的高级选项卡中把语言设置成简体中文就可以了。不过当我选语言的时候，傻眼了，根本没有简体中文这一项。猜测是系统安装的时候默认没有安装中文语言。于是打开IE，选择View菜单-&gt;Encoding-&gt;Chinese，果然提示没有安装这个语言，询问我是不是要安装。于是很轻松的，装上了中文语言。再回到区域和语言选项，把语言和区域都设置成“Chinese(RPC)”，位置设成“China”，搞定。<span id="more-63"></span></p>
<h1>2、虚拟光驱</h1>
<p>Windows 7系统里，daemon和Alcohol都不能用，安装的时候会无限重启，只有Win Mount可以用。</p>
<p>2003 x64系统里，最新的daemon还是不能用，不过最新的Alcohol 120%可以使用。现在用的是1.9.8 ( Build 7530 ) 试用版，就是启动的时候要等待10秒钟，不知道有没有使用时间限制……反正到目前为止，我已经用它把需要的软件都装上了，估计后面不大会用到了。</p>
<h1>3、驱动</h1>
<p>我的笔记本是Dell的Inspiron 1525，用买的时候送的驱动光盘安装驱动。不过光盘里没有专门为2003 x64编写的驱动程序，只好用Windows XP的驱动了。</p>
<p>网卡：Dell Wireless 1395 WLAN MiniCard。for Windows XP版本的，可以正常安装；</p>
<p>声卡：SigmaTel Stac 92XX C-Major HD Audio。Rev A11版本，可用。</p>
<p>显卡：Intel 965G（X3100）。Dell的网站上从来没找到过Server 2003版本的驱动，更别说64位的了。去Intel的网站上找到一个，<a href="http://downloadcenter.intel.com/confirm.aspx?httpDown=http://downloadmirror.intel.com/17356/a08/winxp64_14371.zip&amp;agr=&amp;ProductID=2800&amp;DwnldId=17356&amp;strOSs=&amp;OSFullName=&amp;lang=eng">Intel® Graphics Media Accelerator Driver for Windows* XP 64 (zip)</a>，可以用。</p>
<p>试了一下，</p>
<h1>4、MSN</h1>
<p>本来想要安装最新版的，不过从微软网站上下载的安装包在安装的时候居然提示不支持此操作系统。nndx。。。不过后来发现系统自带了一个2009 beta版，就是显示中文的时候字号太小，先凑合着用了。</p>
<h1>5、IE</h1>
<p>系统自带一个IE6。在我第一次打开IE的时候，它就自作主张的给我转到IE8的页面上去了。在那个页面上下载到一个文件名为“IE8-WindowsServer2003-x64-CHS.exe”的文件。安装的时候居然也提示不支持此操作系统，无语了。估计也就两种可能性：只能装英文版IE8，或者是需要装Server 2003 SP2。</p>
<p>最终的实验结果是：必须要安装SP2才能安装IE8，而且只能安装英文版。</p>
<h1>6、其他</h1>
<p>64位程序或.net程序无法调用32位的dll和32位的in-process COM，解决方案可以参考这里。</p>
<p>总的来说，可以正常工作，没有死机过。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/04/17/windows-server-2003-x64-edition%e5%b0%9d%e8%af%95%e4%b8%ad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在VS2008中编译64位程序</title>
		<link>http://www.fm021.com/2009/04/16/%e5%a6%82%e4%bd%95%e5%9c%a8vs2008%e4%b8%ad%e7%bc%96%e8%af%9164%e4%bd%8d%e7%a8%8b%e5%ba%8f/</link>
		<comments>http://www.fm021.com/2009/04/16/%e5%a6%82%e4%bd%95%e5%9c%a8vs2008%e4%b8%ad%e7%bc%96%e8%af%9164%e4%bd%8d%e7%a8%8b%e5%ba%8f/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 11:01:33 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[64位]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[x64]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=91</guid>
		<description><![CDATA[安装64位操作系统不是编译64位程序的必要条件，关键是要装64位程序的编译器。虽然标题写着如何在VS2008中编译，但其实2005也是类似。
1. 选择“Build” &#8211; “Configuration Manager”菜单，打开配置管理器。点击新建解决方案平台。


2. 选择“x64”平台，点击确定按钮。

3. 这时候配置管理器中的平台已经改成刚才选择的x64了，这时候编译出来的就是64位程序了。可以在工具栏的平台下拉框中快速切换目标平台。

4. 如果在选择平台的下拉列表里找不到x64，可能是没有安装x64编译支持。在VS安装程序里再装上就可以了。

]]></description>
			<content:encoded><![CDATA[<p>安装64位操作系统不是编译64位程序的必要条件，关键是要装64位程序的编译器。虽然标题写着如何在VS2008中编译，但其实2005也是类似。</p>
<p>1. 选择“Build” &#8211; “Configuration Manager”菜单，打开配置管理器。点击新建解决方案平台。</p>
<p><a href="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_183509.png" target="_blank"><img class="alignnone size-full wp-image-92" title="new solution platform" src="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_183509.png" alt="new solution platform" width=600 /></a><br />
<span id="more-91"></span><br />
2. 选择“x64”平台，点击确定按钮。</p>
<p><a href="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_183557.png" target="_blank"><img class="alignnone size-full wp-image-93" title="select the new platform" src="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_183557.png" alt="select the new platform" width="291" height="196" /></a></p>
<p>3. 这时候配置管理器中的平台已经改成刚才选择的x64了，这时候编译出来的就是64位程序了。可以在工具栏的平台下拉框中快速切换目标平台。</p>
<p><a href="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_184237.png" target="_blank"><img class="alignnone size-full wp-image-94" title="select target platform" src="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_184237.png" alt="select target platform" width="383" height="122" /></a></p>
<p>4. 如果在选择平台的下拉列表里找不到x64，可能是没有安装x64编译支持。在VS安装程序里再装上就可以了。</p>
<p><a href="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_181915.png" target="_blank"><img class="alignnone size-full wp-image-95" title="安装x64编译支持" src="http://www.fm021.com/wp-content/uploads/2009/04/2009-04-16_181915.png" alt="安装x64编译支持" width="600" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/04/16/%e5%a6%82%e4%bd%95%e5%9c%a8vs2008%e4%b8%ad%e7%bc%96%e8%af%9164%e4%bd%8d%e7%a8%8b%e5%ba%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>几个提供个人免费数字证书的网站</title>
		<link>http://www.fm021.com/2009/04/16/%e5%87%a0%e4%b8%aa%e6%8f%90%e4%be%9b%e5%85%8d%e8%b4%b9%e4%b8%aa%e4%ba%ba%e6%95%b0%e5%ad%97%e8%af%81%e4%b9%a6%e7%9a%84%e7%bd%91%e7%ab%99/</link>
		<comments>http://www.fm021.com/2009/04/16/%e5%87%a0%e4%b8%aa%e6%8f%90%e4%be%9b%e5%85%8d%e8%b4%b9%e4%b8%aa%e4%ba%ba%e6%95%b0%e5%ad%97%e8%af%81%e4%b9%a6%e7%9a%84%e7%bd%91%e7%ab%99/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 06:19:32 +0000</pubDate>
		<dc:creator>化石</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[免费]]></category>
		<category><![CDATA[数字证书]]></category>

		<guid isPermaLink="false">http://www.fm021.com/?p=85</guid>
		<description><![CDATA[1. http://www.cacert.org/
2. https://www.thawte.com/
3. http://www.instantssl.com/
4. https://www.startssl.com/
]]></description>
			<content:encoded><![CDATA[<p>1. <a href="http://www.cacert.org/">http://www.cacert.org/</a></p>
<p>2. <a href="https://www.thawte.com/">https://www.thawte.com/</a></p>
<p>3. <a href="http://www.instantssl.com/">http://www.instantssl.com/</a></p>
<p>4. <a href="https://www.startssl.com/">https://www.startssl.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fm021.com/2009/04/16/%e5%87%a0%e4%b8%aa%e6%8f%90%e4%be%9b%e5%85%8d%e8%b4%b9%e4%b8%aa%e4%ba%ba%e6%95%b0%e5%ad%97%e8%af%81%e4%b9%a6%e7%9a%84%e7%bd%91%e7%ab%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
