<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>chainding</title>
	<atom:link href="http://chainding.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://chainding.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Sat, 25 Feb 2012 04:48:18 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='chainding.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>chainding</title>
		<link>http://chainding.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://chainding.wordpress.com/osd.xml" title="chainding" />
	<atom:link rel='hub' href='http://chainding.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ASP.NET MVC 4 浮出水面</title>
		<link>http://chainding.wordpress.com/2012/02/25/asp-net-mvc-4-%e6%b5%ae%e5%87%ba%e6%b0%b4%e9%9d%a2/</link>
		<comments>http://chainding.wordpress.com/2012/02/25/asp-net-mvc-4-%e6%b5%ae%e5%87%ba%e6%b0%b4%e9%9d%a2/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 04:48:12 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1721</guid>
		<description><![CDATA[最近，ASP.NET MVC 4的第一个beta版发布了，并且还含有“可以上线”的许可。这意味着即使最终正式版本还没有完成，但微软相信ASP.NET MVC 4目前已经可以在生产环境中使用了。这次的发布包含了对Razon视图引擎的改进、对异步调用的支持，以及WebSockets等功能。 Razor视图引擎 作为ASP.NET MVC的默认视图引擎，Razor中增加了一些新的特性，以减少视图模版的代码量。以~/开头的HTML属性会被自动解析为应用程序的根路径，而不再需要 使用Url.Content。另一个提升效率的特性是可空属性（conditional attribute)，例如当class=&#8221;@myClass&#8221;中的myClass为null时，这个属性将不会被渲染到页面上。 注意：这些新增的特性也会出现在ASP.NET Web Pages 2中。 CSS与JavaScript管理 MVC 4鼓励开发人员合并和压缩（CSS与JavaScript）以缩短传输时间。开发人员不用详细列出每一个客户端需要的文件，只需要使用ResolveBundleUrl函数就可以将某个文件夹中的所有文件包括在内。 Jon Galloway指出，这对于更新某些程序库—如jQuery—特别有用。 移动开发 jQuery Mobile将会被包含在标准移动模版中。这些模版被用于创建一组视图，而这些视图则被Display Modes（译者注：根据用户所使用的设备，如桌面系统或移动设备，选择不同的视图文件进行渲染）子系统所使用。除了默认模式和移动模式，可发人员还可以根据需要添加其他模式。一般系统会根据浏览器发送的user agent来决定使用那种模式，但理论上你可以获得更大的灵活性。 Controller中的异步任务处理 在MVC 4和C# 5中使用异步模型非常简单，难以想象还会有人继续用阻塞的方式编写Controller中的方法。你只需要使用“async Task&#60;ActionResult&#62;”代替ActionResult作为返回值就可以了。当然底层的代码也需要支持异步调用，但基本上只需要做机械的代码转换，任何实习生或初级开发人员都可以处理。 异步Controller还支持cancellation token，Cancellation Token的实例由框架创建，开发人员只需在调用异步方法时，将之作为参数传递即可。这样整个调用栈都可以被取消，而不是简单的终止线程。 查看英文原文：ASP.NET MVC 4 is Live 译者 王瑜珩 InfoQ中文站编辑，ThoughtWorks咨询师，关注企业级Web开发、敏捷实践以及项目管理。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1721&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近，ASP.NET MVC 4的第一个<a href="http://www.asp.net/mvc/mvc4">beta版</a>发布了，并且还含有“可以上线”的许可。这意味着即使最终正式版本还没有完成，但微软相信ASP.NET MVC 4目前已经可以在生产环境中使用了。这次的发布包含了对Razon视图引擎的改进、对异步调用的支持，以及WebSockets等功能。</p>
<p><strong>Razor视图引擎</strong></p>
<p>作为ASP.NET MVC的默认视图引擎，Razor中增加了一些新的特性，以减少视图模版的代码量。以~/开头的HTML属性会被自动解析为应用程序的根路径，而不再需要 使用Url.Content。另一个提升效率的特性是可空属性（conditional attribute)，例如当class=&#8221;@myClass&#8221;中的myClass为null时，这个属性将不会被渲染到页面上。</p>
<p>注意：这些新增的特性也会出现在ASP.NET Web Pages 2中。</p>
<p><strong>CSS与JavaScript管理</strong></p>
<p>MVC 4鼓励开发人员合并和压缩（CSS与JavaScript）以缩短传输时间。开发人员不用详细列出每一个客户端需要的文件，只需要使用ResolveBundleUrl函数就可以将某个文件夹中的所有文件包括在内。 <a href="http://weblogs.asp.net/jgalloway/archive/2012/02/16/asp-net-4-beta-released.aspx">Jon Galloway</a>指出，这对于更新某些程序库—如jQuery—特别有用。</p>
<p><strong>移动开发</strong></p>
<p>jQuery Mobile将会被包含在标准移动模版中。这些模版被用于创建一组视图，而这些视图则被<a href="http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253810">Display Modes</a>（译者注：根据用户所使用的设备，如桌面系统或移动设备，选择不同的视图文件进行渲染）子系统所使用。除了默认模式和移动模式，可发人员还可以根据需要添加其他模式。一般系统会根据浏览器发送的user agent来决定使用那种模式，但理论上你可以获得更大的灵活性。</p>
<p><strong>Controller中的异步任务处理</strong></p>
<p>在MVC 4和C# 5中使用异步模型非常简单，难以想象还会有人继续用阻塞的方式编写Controller中的方法。你只需要使用“async Task&lt;ActionResult&gt;”代替ActionResult作为返回值就可以了。当然底层的代码也需要支持异步调用，但基本上只需要做机械的代码转换，任何实习生或初级开发人员都可以处理。</p>
<p>异步Controller还支持cancellation token，Cancellation Token的实例由框架创建，开发人员只需在调用异步方法时，将之作为参数传递即可。这样整个调用栈都可以被取消，而不是简单的终止线程。</p>
<p><strong>查看英文原文：<strong><a href="http://www.infoq.com/news/2012/02/MVC-4">ASP.NET MVC 4 is Live</a></strong></strong></p>
<p><em> <strong>译者</strong> <strong><a href="http://www.infoq.com/cn/author/%E7%8E%8B%E7%91%9C%E7%8F%A9"> 王瑜珩</a> </strong> InfoQ中文站编辑，ThoughtWorks咨询师，关注企业级Web开发、敏捷实践以及项目管理。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1721/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1721&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/25/asp-net-mvc-4-%e6%b5%ae%e5%87%ba%e6%b0%b4%e9%9d%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>优秀的开源前端框架Bootstrap发布2.0.1版</title>
		<link>http://chainding.wordpress.com/2012/02/25/%e4%bc%98%e7%a7%80%e7%9a%84%e5%bc%80%e6%ba%90%e5%89%8d%e7%ab%af%e6%a1%86%e6%9e%b6bootstrap%e5%8f%91%e5%b8%832-0-1%e7%89%88/</link>
		<comments>http://chainding.wordpress.com/2012/02/25/%e4%bc%98%e7%a7%80%e7%9a%84%e5%bc%80%e6%ba%90%e5%89%8d%e7%ab%af%e6%a1%86%e6%9e%b6bootstrap%e5%8f%91%e5%b8%832-0-1%e7%89%88/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 04:47:39 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1719</guid>
		<description><![CDATA[简介 Bootstrap是著名的社交网站、微博的先驱Twitter在2011年8月推出的开源WEB前端框架，集合CSS和HTML，使用了最新的浏 览器技术，为快速WEB开发提供了一套前端工具包，包括布局、网格、表格、按钮、表单、导航、提示等等。使用Bootstrap可以构建出非常优雅的前端 界面，而且占用资源非常小。 Bootstrap发布时间不长，但是已经非常成熟了，目前最新版本是2.0，包括完整的CSS编译和非编译版本，样例模板和Javascript插件。 历史 早期Twitter的前端工程师几乎采用了任何自己熟悉的库来应对前端的开发需求，这样的造成的问题就是维护和扩展非常困难。最终 Bootstrap成为应对这些挑战的解决方案，并开始在Twitter内部迅速成长，被twitter.com广泛采用，形成了稳定版本。随着工程师对 其不断的开发和完善，Bootstrap进步显著，不仅包括基本样式，而且有了更为优雅和持久的前端设计模式。2011年8月，Twitter将其开源， 相关地址：http://twitter.github.com/bootstrap 使用Bootstrap构建优雅的Web Page Bootstrap的核心就是基于Less框架构建的CSS。所以谈到Bootstrap，就必须得说说Less。 关于Less Less是一个动态CSS语言框架，官方网站是http://lesscss.org/。 Less扩展了CSS的动态特性，相对于传统的CSS，Less提供了更为强大的功能和灵活性。基于Less，我们可以在编写CSS时使用嵌入式申明、变 量、混合模式、运算和颜色编辑功能函数等。简单来说就是Less可以让你像编程一样编写CSS，把程序存储在后缀为less的文件中，Less提供了框架 将其编译为标准的css文件。举个简单的例子，如果你想为多个样式设置同一个颜色，可以这样写： @color: #FFFFFF; h1 { color: @color; } #sub{ color: @color; } 编译后的css就是： h1 { color: #ffffff; } #sub { color: #ffffff; } &#8230; <a href="http://chainding.wordpress.com/2012/02/25/%e4%bc%98%e7%a7%80%e7%9a%84%e5%bc%80%e6%ba%90%e5%89%8d%e7%ab%af%e6%a1%86%e6%9e%b6bootstrap%e5%8f%91%e5%b8%832-0-1%e7%89%88/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1719&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>简介</h3>
<p>Bootstrap是著名的社交网站、微博的先驱Twitter在2011年8月推出的开源WEB前端框架，集合CSS和HTML，使用了最新的浏 览器技术，为快速WEB开发提供了一套前端工具包，包括布局、网格、表格、按钮、表单、导航、提示等等。使用Bootstrap可以构建出非常优雅的前端 界面，而且占用资源非常小。</p>
<p>Bootstrap发布时间不长，但是已经非常成熟了，目前最新版本是2.0，包括完整的CSS编译和非编译版本，样例模板和Javascript插件。</p>
<h3>历史</h3>
<p>早期Twitter的前端工程师几乎采用了任何自己熟悉的库来应对前端的开发需求，这样的造成的问题就是维护和扩展非常困难。最终 Bootstrap成为应对这些挑战的解决方案，并开始在Twitter内部迅速成长，被twitter.com广泛采用，形成了稳定版本。随着工程师对 其不断的开发和完善，Bootstrap进步显著，不仅包括基本样式，而且有了更为优雅和持久的前端设计模式。2011年8月，Twitter将其开源， 相关地址：<a href="http://twitter.github.com/bootstrap">http://twitter.github.com/bootstrap </a></p>
<h3>使用Bootstrap构建优雅的Web Page</h3>
<p>Bootstrap的核心就是基于Less框架构建的CSS。所以谈到Bootstrap，就必须得说说Less。</p>
<p>关于Less</p>
<p>Less是一个动态CSS语言框架，官方网站是<a href="http://lesscss.org/">http://lesscss.org/</a>。 Less扩展了CSS的动态特性，相对于传统的CSS，Less提供了更为强大的功能和灵活性。基于Less，我们可以在编写CSS时使用嵌入式申明、变 量、混合模式、运算和颜色编辑功能函数等。简单来说就是Less可以让你像编程一样编写CSS，把程序存储在后缀为less的文件中，Less提供了框架 将其编译为标准的css文件。举个简单的例子，如果你想为多个样式设置同一个颜色，可以这样写：</p>
<pre>@color: #FFFFFF;
h1 {
color: @color;
}
#sub{
color: @color;
}</pre>
<p>编译后的css就是：</p>
<pre>h1 {
color: #ffffff;
}
#sub {
color: #ffffff;
}</pre>
<p>以上代码只是Less的最简应用。除了变量，还可以在CSS进行数学运算、传参、文件相互引用、规则嵌套等等。可以想象，这种编写CSS的方式会为前端开发带来多大的改变。无论是从灵活性、扩展性和可维护性上，Less都让CSS开发有了大幅提升，动态性增强了。</p>
<p>编译Less的方式很简单，有两种方式，一种是在使用时编译。下载<a href="http://lesscss.googlecode.com/files/less-1.1.3.min.js">less.js</a>，在样式中引用：</p>
<p>&lt;link rel=&#8221;stylesheet/less&#8221; type=&#8221;text/css&#8221; href=&#8221;less/mystyles.less&#8221;&gt;<br />
&lt;script src=&#8221;js/less.js&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;</p>
<p>还有一种方式是使用前编译好，可以通过服务器端的Node.js进行编译，也可以到这个网站<a href="http://incident57.com/less/">http://incident57.com/less/</a>下载Less.app，提供了GUI方式编译less文件，目前只支持Mac OS X。</p>
<h4>基于Less编译的Bootstrap</h4>
<p>使用了Less的Bootstrap具备如下优点：</p>
<ol>
<li>Bootstrap实现起来依旧很简单，使用也很简单，把Bootstrap.css拖入你的代码即可。编译less文件可以使用<a href="http://lesscss.googlecode.com/files/less-1.1.3.min.js">less.js</a>，<a href="http://livepage.apple.com/">Less.app</a>或Node.js等多种方案实现。</li>
<li>一旦编译，Bootstrap框架仅包含CSS文件，这意味着没有多余的图片、Flash或Javascript，只有用于Web应用开发的简洁而强大的CSS样式。</li>
</ol>
<p>兼容性</p>
<p>目前Bootstrap的最新版本是2.0.1，支持几乎所有的主流浏览器，包括Safari、Chrome，Firefox、IE7.0及以上，最新版本还支持智能手机WebUI。</p>
<h4>2.0的新特性</h4>
<p>Bootstrap的版本更新很快，2011年11月刚发布了1.4，2012年2月份就再次放出新版本2.0，而且有了大幅改进。</p>
<p>2.0版本采用了更灵活也更受欢迎的12栏网格布局，并以此来实现其各种布局框架。增加了响应式设计，以适应各种移动终端的需求。完善和改进原有样 式库，并提供更丰富的新样式，包括样式繁多的图标（icon），漂亮易用的进度条等。改进和增加了自定义jQuery插件，完善文档，修复bug，同时还 提供了很多基于Bootstrap构建的网站样例。</p>
<p>已经使用1.4的开发者也不用担心，Bootstrap专门提供了<a href="http://twitter.github.com/bootstrap/upgrading.html">从1.4升级到2.0的手工向导</a>可以参考。</p>
<h4>功能集合</h4>
<p>Bootstrap2.0把现有框架进行了清晰的功能划分，主要分为框架（Scaffolding），基础CSS，构件库和jQuery插件库。</p>
<p>Scaffolding主要提供基于网格的各种布局，包括普通网格系统、嵌入式网格，固定布局、自适应布局，同时可以对网格和布局进行自定义。</p>
<p>Bootstrap2.0提供了响应式设计，可以通过单个文件支持各种手持设备，自适应不同的设备和屏幕变化。</p>
<p>基础CSS包括各种排版样式（标题、段落、引用块、列表、内联标签等），代码展示方面提供了基于code标签的内嵌代码，基于pre的块代码和基于Google Prettify的代码样式。同时提供各种表格、表单、按钮、图标的展示方式。</p>
<p>构件库提供了基于按钮、导航、标签、排版、警告、进度栏、图像网格等控件。</p>
<p>jQuery插件库则提供了十几种插件实现动态效果，例如Modal、Dropdown、Tab、Tooltip、Popover、Carousel等，开发者可以根据自己的业务需求使用不同的插件实现各种动态效果。</p>
<p>下图是使用Bootstrap生成的示例页面。</p>
<p><img src="http://www.infoq.com/resource/news/2012/02/bootstrap-2.0.1-released/zh/resources/fleetio.png" alt="" />   <img src="http://www.infoq.com/resource/news/2012/02/bootstrap-2.0.1-released/zh/resources/2kippt.png" alt="" /></p>
<p>更详细的信息请参考Bootstrap的<a href="http://twitter.github.com/">官方网站</a>。</p>
<p><em> <strong><a href="http://www.infoq.com/cn/author/%E6%B1%A0%E5%BB%BA%E5%BC%BA"> 池建强</a> </strong> 池建强，多年软件从业经验，先后在洪恩软件和用友集团任职。目前在瑞友科技IT应用研究院任副院长。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1719/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1719&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/25/%e4%bc%98%e7%a7%80%e7%9a%84%e5%bc%80%e6%ba%90%e5%89%8d%e7%ab%af%e6%a1%86%e6%9e%b6bootstrap%e5%8f%91%e5%b8%832-0-1%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>

		<media:content url="http://www.infoq.com/resource/news/2012/02/bootstrap-2.0.1-released/zh/resources/fleetio.png" medium="image" />

		<media:content url="http://www.infoq.com/resource/news/2012/02/bootstrap-2.0.1-released/zh/resources/2kippt.png" medium="image" />
	</item>
		<item>
		<title>Debugger Canvas 1.1带来便捷切换并提升导航</title>
		<link>http://chainding.wordpress.com/2012/02/25/debugger-canvas-1-1%e5%b8%a6%e6%9d%a5%e4%be%bf%e6%8d%b7%e5%88%87%e6%8d%a2%e5%b9%b6%e6%8f%90%e5%8d%87%e5%af%bc%e8%88%aa/</link>
		<comments>http://chainding.wordpress.com/2012/02/25/debugger-canvas-1-1%e5%b8%a6%e6%9d%a5%e4%be%bf%e6%8d%b7%e5%88%87%e6%8d%a2%e5%b9%b6%e6%8f%90%e5%8d%87%e5%af%bc%e8%88%aa/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 04:46:17 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1717</guid>
		<description><![CDATA[Debugger Canvas，一款将“Code Bubbles”理念引入Visual Studio Ultimate调试器的工具，去年夏初一亮相便在开发者社区掀起了令人激动的涟漪。前不久，微软发布了Debugger Canvas 1.1版本，该版本带来了新的特性以及调试时性能的提升，此外，还修复了一些Bug。 本次发布版本中包含的特性有: Debugger Canvas可以在调试中开启或关闭，这样可方便与标准Visual Studio调试模式之间切换。 在canvas模式下，开发人员可以在调用堆栈中上下移动，鼠标和键盘均可操作。 可同时查看到多个线程的运行情况，每个线程通过不同的颜色加以区分。 递归调用时只会显示一个bubble。 用户可在bubble中对代码进行编辑（虽然此功能在最初的版本中也有，此次只是将其作为缺省设置）。 智能跟踪日志（IntelliTrace logs）可在canvas中直接看到（仅支持在开发模式下，可在选项中开启此功能）。 Microsoft宣布，由于Debugger Canvas目前依赖于旗舰版Visual Studio上的技术，所以暂时还无法运行在其它版本的Visual Studio中。（如InfoQ之前的报道，还可以通过安装Visual Studio旗舰版的试用版来进行体验，或使用带有Visual Studio旗舰版的虚拟机来完成。）该产品仅支持Visual Basic和C#，暂不支持C++或其他语言。 Debugger Canvas 1.1 现在已可从Microsoft Labs直接下载。 查看英文原文：Debugger Canvas 1.1 Adds Easy On/Off, Improved Navigation 译者 贾国清 是InfoQ中文站高级策划编辑，热爱生活，喜欢旅游和体育运动。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1717&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://msdn.microsoft.com/en-us/devlabs/debuggercanvas">Debugger Canvas</a>，一款将“<a href="http://www.youtube.com/watch?v=PsPX0nElJ0k">Code Bubbles</a>”理念引入Visual Studio Ultimate调试器的工具，去年夏初一亮相便在开发者社区掀起了令人激动的涟漪。前不久，微软发布了Debugger Canvas 1.1版本，该版本带来了新的特性以及调试时性能的提升，此外，还修复了一些Bug。</p>
<p>本次发布版本中包含的特性有:</p>
<ul>
<li>Debugger Canvas可以在调试中开启或关闭，这样可方便与标准Visual Studio调试模式之间切换。</li>
<li>在canvas模式下，开发人员可以在调用堆栈中上下移动，鼠标和键盘均可操作。</li>
<li>可同时查看到多个线程的运行情况，每个线程通过不同的颜色加以区分。</li>
<li>递归调用时只会显示一个bubble。</li>
<li>用户可在bubble中对代码进行编辑（虽然此功能在最初的版本中也有，此次只是将其作为缺省设置）。</li>
<li>智能跟踪日志（IntelliTrace logs）可在canvas中直接看到（仅支持在开发模式下，可在选项中开启此功能）。</li>
</ul>
<p>Microsoft宣布，由于Debugger Canvas目前依赖于旗舰版Visual Studio上的技术，所以暂时还无法运行在其它版本的Visual Studio中。（如InfoQ<a href="http://www.infoq.com/news/2011/06/debugger-canvas">之前的报道</a>，还可以通过安装Visual Studio旗舰版的试用版来进行体验，或使用带有Visual Studio旗舰版的<a href="http://blogs.msdn.com/b/briankel/archive/2010/06/25/now-available-visual-studio-2010-rtm-virtual-machine-with-sample-data-and-hands-on-labs.aspx">虚拟机</a>来完成。）该产品仅支持Visual Basic和C#，暂不支持C++或其他语言。</p>
<p>Debugger Canvas 1.1 现在已可从<a href="http://download.microsoft.com/download/5/A/7/5A7FB2E7-5720-4739-BDDE-28A684C5B291/Microsoft.DebuggerCanvas.vsix">Microsoft Labs</a>直接下载。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/02/Debugger-Canvas">Debugger Canvas 1.1 Adds Easy On/Off, Improved Navigation</a></p>
<p><em> <strong>译者</strong> <strong><a href="http://www.infoq.com/cn/author/%E8%B4%BE%E5%9B%BD%E6%B8%85"> 贾国清</a> </strong> 是InfoQ中文站高级策划编辑，热爱生活，喜欢旅游和体育运动。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1717/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1717&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/25/debugger-canvas-1-1%e5%b8%a6%e6%9d%a5%e4%be%bf%e6%8d%b7%e5%88%87%e6%8d%a2%e5%b9%b6%e6%8f%90%e5%8d%87%e5%af%bc%e8%88%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>书摘和访谈：ActiveMQ in Action</title>
		<link>http://chainding.wordpress.com/2012/02/25/%e4%b9%a6%e6%91%98%e5%92%8c%e8%ae%bf%e8%b0%88%ef%bc%9aactivemq-in-action/</link>
		<comments>http://chainding.wordpress.com/2012/02/25/%e4%b9%a6%e6%91%98%e5%92%8c%e8%ae%bf%e8%b0%88%ef%bc%9aactivemq-in-action/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 04:43:00 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[Achitecture]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1715</guid>
		<description><![CDATA[《ActiveMQ in Action》一书由 Bruce Snyder、Dejan Bosanac、Rob Davies合著，内容涵盖开源消息中间件ActiveMQ的发展和使用。本书的第一部分介绍了消息中间件ActiveMQ和Java消息服务 （JMS）。对本书使用的例子进行了简单说明之后，第二部分介绍了标准ActiveMQ组件的配置，包括传输连接器、持久化的消息存储和各个层次的安全控 制。第三部分进行了深入介绍，覆盖的主题有：创建使用ActiveMQ的Java应用，怎么把ActiveMQ和Tomcat、Jetty、 Geronimo、JBoss等应用服务器集成在一起，还有用C++、.Net、PHP、Python、Ruby等语言开发使用消息的应用。第四部分包括 更多高级主题，比如高可用性和伸缩性、Broker和客户端更高级的特性、性能调优、管理和监控。 相关厂商内容 QClub（西安站）——前端崛起（2月25日 免费报名中！） Inedo合作伙伴Alex Papadimoulis谈代码之丑之美 QClub（大连站）——移动应用开发之HTML5（2月25日 免费报名中！） QClub（太原站）——Spring框架深度剖析（2月25日 免费报名中！） Netflix高级软件工程师Jason揭秘Cassandra应用 InfoQ对本书的合著者Bruce Snyder进行了采访，向他了解编写这本书的主要动机、ActiveMQ容器里的事务管理和消息安全，还有消息服务领域的发展趋势。我们还制作了本书的书摘以飨读者，内容来自第七章——创建使用ActiveMQ的Java应用——的“用Spring编写JMS客户端”部分。在购买本书的时候，你还可以用折扣码infoq40来享受40%的折扣。 InfoQ：编写这本书的主要动机是什么？ Bruce Snyder：在ActiveMQ提交者社区里，消息队列、ActiveMQ和JMS的相关知识是很多的。虽然ActiveMQ网站上有一些可用的信息，但它们组织得不是很好，而且对很多用户来说并不算详细。所以我们决定把我们的知识和想法整理成一本书。 InfoQ：异步消息服务架构现在处于什么状态？ActiveMQ和其他开源、商用的消息Broker比起来怎么样？ Bruce：近年来，STOMP协议的引入对异步消息服务产生了很大影响。STOMP是Streaming Text Orientated Messaging Protocol的缩写。它由众多消息解决方案和客户端API支撑， 这些支撑不仅仅局限在Java社区内，其他社区也有很多。STOMP协议的关注点是开发一种可互操作的、纯文本的Wire格式，允许任何语言编写的 STOMP客户端和任何语言编写的STOMP消息Broker进行通讯。类似于HTTP，STOMP协议为客户端提供了一组动词和命令，以便和消息 Broker进行交互。此外，Advanced Message Queuing Protocol（AMQP）规范也已经成熟，影响力也越来越大了。AMQP规范旨在为消息服务创建一个标准化的Wire级别协议，让它像传输Web内容 所需的HTTP一样无所不在。JMS 2.0的JSR刚开始组织。JMS &#8230; <a href="http://chainding.wordpress.com/2012/02/25/%e4%b9%a6%e6%91%98%e5%92%8c%e8%ae%bf%e8%b0%88%ef%bc%9aactivemq-in-action/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1715&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>《<a href="http://www.manning.com/snyder/">ActiveMQ in Action</a>》一书由 Bruce Snyder、Dejan Bosanac、Rob Davies合著，内容涵盖开源消息中间件ActiveMQ的发展和使用。本书的第一部分介绍了消息中间件ActiveMQ和Java消息服务 （JMS）。对本书使用的例子进行了简单说明之后，第二部分介绍了标准ActiveMQ组件的配置，包括传输连接器、持久化的消息存储和各个层次的安全控 制。第三部分进行了深入介绍，覆盖的主题有：创建使用ActiveMQ的Java应用，怎么把ActiveMQ和Tomcat、Jetty、 Geronimo、JBoss等应用服务器集成在一起，还有用C++、.Net、PHP、Python、Ruby等语言开发使用消息的应用。第四部分包括 更多高级主题，比如高可用性和伸缩性、Broker和客户端更高级的特性、性能调优、管理和监控。</p>
<div>
<h3>相关厂商内容</h3>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1732"> QClub（西安站）——前端崛起（2月25日 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1684" target="_blank"> Inedo合作伙伴Alex Papadimoulis谈代码之丑之美 </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1735"> QClub（大连站）——移动应用开发之HTML5（2月25日 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1736"> QClub（太原站）——Spring框架深度剖析（2月25日 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1731" target="_blank"> Netflix高级软件工程师Jason揭秘Cassandra应用 </a></p>
</div>
<p>InfoQ对本书的合著者Bruce Snyder进行了采访，向他了解编写这本书的主要动机、ActiveMQ容器里的事务管理和消息安全，还有消息服务领域的发展趋势。我们还制作了本书的书摘以飨读者，内容来自第七章——创建使用ActiveMQ的Java应用——的<a href="http://www.infoq.com/resource/articles/snyder-activemq-in-action/zh/resources/ActiveMQinActionCH07.pdf">“用Spring编写JMS客户端”</a>部分。在购买本书的时候，你还可以用折扣码infoq40来享受40%的折扣。</p>
<p><strong>InfoQ：编写这本书的主要动机是什么？</strong></p>
<p><strong>Bruce Snyder：</strong>在ActiveMQ提交者社区里，消息队列、ActiveMQ和JMS的相关知识是很多的。虽然ActiveMQ网站上有一些可用的信息，但它们组织得不是很好，而且对很多用户来说并不算详细。所以我们决定把我们的知识和想法整理成一本书。</p>
<p><strong>InfoQ：异步消息服务架构现在处于什么状态？ActiveMQ和其他开源、商用的消息Broker比起来怎么样？</strong></p>
<p><strong>Bruce：</strong>近年来，STOMP协议的引入对异步消息服务产生了很大影响。STOMP是Streaming Text Orientated Messaging Protocol的缩写。它由众多消息解决方案和客户端API<a href="http://stomp.github.com/implementations.html">支撑</a>， 这些支撑不仅仅局限在Java社区内，其他社区也有很多。STOMP协议的关注点是开发一种可互操作的、纯文本的Wire格式，允许任何语言编写的 STOMP客户端和任何语言编写的STOMP消息Broker进行通讯。类似于HTTP，STOMP协议为客户端提供了一组动词和命令，以便和消息 Broker进行交互。此外，Advanced Message Queuing Protocol（AMQP）规范也已经成熟，影响力也越来越大了。AMQP规范旨在为消息服务创建一个标准化的Wire级别协议，让它像传输Web内容 所需的HTTP一样无所不在。JMS 2.0的JSR刚开始组织。JMS 1.0发布于1998年，只在2002年做了一次小的更新，所以关注JMS 2.0里提出和讨论的建议应该会很有意思。</p>
<p><strong>InfoQ：你能谈谈在使用ActiveMQ的时候，消息服务架构里安全方面的内容么？</strong></p>
<p><strong>Bruce：</strong>ActiveMQ可以在Broker级别、目的地级别和消息级别进行安全控制。ActiveMQ在 Broker级别使用认证来进行安全控制，ActiveMQ提供的认证方式有两种：简单认证和基于JAAS的可插拔式认证。对于简单认 证，ActiveMQ利用XML配置文件里配置的普通用户和组来决定是否允许用户访问。至于基于JAAS的认证，ActiveMQ提供了一个可以利用属性 文件、LDAP或SSL证书的JAAS登录模块，你也可以实现自己的JAAS登录模块。目的地级别需要进行安全处理的相关操作有read、write、 admin三个。ActiveMQ通过JAAS登录模块提供的认证功能来处理这三个操作。消息级别的安全性是应用特定的，只有某个目的地上的特定消息才能 被访问。为了达到这个级别的安全性，你必须实现自己的消息授权策略。在这个级别进行安全控制需要记住的是，某个目的地上的所有消息都必须应用自定义的消息 授权策略。所以你需要留意一下，不要让授权的成本过于高昂。</p>
<p><strong>InfoQ：ActiveMQ提供哪种类型的事务管理支持呢？尤其对需要两阶段（XA）事务的用例来说。</strong></p>
<p><strong>Bruce：</strong>ActiveMQ支持JTA和基本的XA。但我不是很喜欢分布式事务，因为使用XA的应用往往比较脆弱，而且性能低下。对这个话题感兴趣的读者们可以看看Pat Helland关于此方面的文章——<a href="http://www.cidrdb.org/cidr2007/papers/cidr07p15.pdf">Life beyond Distributed Transactions: an Apostate&#8217;s Opinion</a>。</p>
<p><strong>InfoQ：你希望JMS 2.0和JMS规范以后的版本能提供哪些新特性呢？</strong></p>
<p><strong>Bruce：</strong>我希望JMS能与Web、其他标准（比如Web Socket和AMQP）更好地交互。除了JMS规范的内容，ActiveMQ当然还有很多创新，但我不确定这些创新会不会被纳入到JMS里去。</p>
<p><strong>InfoQ：在消息服务领域里，会有怎样的发展趋势和技术、工具呢？</strong></p>
<p><strong>Bruce：</strong>近年来，IT领域里的整合工作有很多，企业集成模式已经越来越流行，而且大大超过过去几年。 Spring集成和Apache Camel这两个被广泛运用的Java集成框架已经能满足这一领域的需求了。此外，还有很多人现在正在研究异步消息传输和事件驱动架构（EDA）。现在有 一些非常大型、非常有名的系统都把EDA作为中心架构，这里仅列举出Amazon、Twitter和Facebook，VMware的 CloudFoundry也是使用EDA构建的。</p>
<p><strong>InfoQ：Bruce，谢谢你能参加我们的采访。最后一个问题，你喜欢的IT类和非IT类书籍有哪些？</strong></p>
<p><strong>Bruce：</strong>我经常读书，喜欢的书籍种类也比较繁多，包括商业、IT、小说、宗教、经典读物等等。<a href="http://www.threecupsoftea.com/">《三杯茶》</a> 是多年来最吸引我的一本书，还有《三杯茶2：石头变学校》。这两本书讲述了美国人Greg Mortenson在阿富汗和巴基斯坦的偏远地区苦心建设多所学校的故事。去年在科罗拉多州北部，我还很幸运地听了Mortenson的一场讲座。最近，商业书籍<a href="http://37signals.com/rework/">《重来》</a>让我欲罢不能。这本书是个有关商业的短文集，里面的内容不同于很多传统的商业观念。《重来》重点关注进步、生产率、竞争、雇佣、文化等领域方面的一些颠覆性想法。尽管书里的有些概念并不是全新的，提问的风格却吸引人、犀利、发人深省、切切实实。</p>
<p>至于我读过的IT书籍，我喜欢并推荐的有三本：</p>
<ul>
<li>Java并发编程实践</li>
<li>企业集成模式</li>
<li>事件处理实战</li>
</ul>
<h2>关于本书作者</h2>
<p><img src="http://www.infoq.com/resource/articles/snyder-activemq-in-action/en/resources/bsnyder1.png" alt="" align="left" hspace="5" vspace="2" />Bruce Snyder在企业软件开发和开源软件方面经验老到。Bruce有着超过十五年的经验，一直致力于软件的研究和发展，使用过的技术有Java EE、企业消息传递和集成、面向服务的架构和事件驱动。Bruce是SpringSource/VMware的一名高级软件工程师、Apache软件基金 会的成员，并参与了很多Apache项目的开发，包括ActiveMQ在内。他不仅参与编写过有关ActiveMQ、Spring框架、Maven和 Geronimo的书籍，还是诸多国际软件会议公认的讲师，在开源软件社区的建立过程中也出力不少。Bruce和他的家人生活在美丽的科罗拉多州博尔德 市，平时喜欢骑行、登山、跑步等各种户外活动。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/articles/snyder-activemq-in-action">Interview and Book Excerpt: ActiveMQ in Action</a></p>
<hr />
<p>给InfoQ中文站投稿或者参与内容翻译工作，请邮件至<a href="mailto:editors@cn.infoq.com">editors@cn.infoq.com</a>。也欢迎大家通过新浪微博（<a href="http://www.weibo.com/infoqchina">@InfoQ</a>）或者腾讯微博（<a href="http://t.qq.com/infoqchina">@InfoQ</a>）关注我们，并与我们的编辑和其他读者朋友交流。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1715/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1715&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/25/%e4%b9%a6%e6%91%98%e5%92%8c%e8%ae%bf%e8%b0%88%ef%bc%9aactivemq-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>

		<media:content url="http://www.infoq.com/resource/articles/snyder-activemq-in-action/en/resources/bsnyder1.png" medium="image" />
	</item>
		<item>
		<title>Hadoop in 360——专访360系统部总监唐会军</title>
		<link>http://chainding.wordpress.com/2012/02/25/hadoop-in-360-%e4%b8%93%e8%ae%bf360%e7%b3%bb%e7%bb%9f%e9%83%a8%e6%80%bb%e7%9b%91%e5%94%90%e4%bc%9a%e5%86%9b/</link>
		<comments>http://chainding.wordpress.com/2012/02/25/hadoop-in-360-%e4%b8%93%e8%ae%bf360%e7%b3%bb%e7%bb%9f%e9%83%a8%e6%80%bb%e7%9b%91%e5%94%90%e4%bc%9a%e5%86%9b/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 04:41:27 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[DB]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1712</guid>
		<description><![CDATA[在前不久的Hadoop in China 2011大会上，360系统部总监唐会军接受了InfoQ的专访，谈到360公司内部对Hadoop的使用，并对Hadoop项目和HBase面临的挑战提出了自己的看法。以下是采访实录。 相关厂商内容 QClub（西安站）——前端崛起（2月25日 免费报名中！） QClub二月技术沙龙（西安/广州/太原/大连 2月25日 周六 免费报名中！） QClub（大连站）——移动应用开发之HTML5（2月25日 免费报名中！） Inedo合作伙伴Alex Papadimoulis谈代码之丑之美 InfoQ：现在360的技术团队规模有多大？ 唐会军：大概有八九百人，现在360发展挺快的，人员扩张每年翻倍，今年又比去年翻了一倍，去年又比前年翻了一倍。 InfoQ：如何测试基于Hadoop的应用?您能否分享⼀一些相关的最佳实践?这些最佳实践所基于的上下文是什么? 唐会军：Hadoop应用的测试，我们现在主要两个方式，一个是做Code Review，提交到Hadoop上面的应用程序，我们会去复查代码，发现问题；第二个就是先在小范围的测试跑一跑，观察几天或者一周，没问题了，我们再在更大规模继续去跑，就是这两种方式。 InfoQ：360采取的第二种测试方式，在测试中会关注哪些指标呢？ 唐会军：重点关注应用在测试过程中，它持续的时间、消耗的资源是否符合预期，因为Hadoop集群是个公用集群，不能因为某些程序没写好，把所有的 资源都给占掉了，然后影响其他机器。它使用的CPU、I/O、网络这些资源能符合预期，是我们的焦点，如果太多的话，肯定是程序有问题。 InfoQ：对于这些指标，是否有一个相对的正常预期范围？ 唐会军：对，在开发团队提交一个任务之前，我们会让他估计一下会从我们集群提取多少数据，他会大概估一个范围是多少T到多少T之间。比如是一T到两 T之间。如果运行过程中发现他用了十个T以上的数据，那就有问题，我们就去查一下，这是数据消耗量；第二种就是程序运行过程中对CPU的消耗，如果他说基 本上一百个单位就可以了，然后半个小时就可以跑完。那真正跑了一百个单位以后，花了一个多小时还没有跑完，这肯定就是有问题。我们会去查，会看到程序里面 有一些东西写得不太合理，导致一些错误，出现不断的重试。资源，实际上就体现在CPU的资源;数据量就体现在I/O的资源。计算机无非就是I/O、网络、 CPU这三个资源，关注他这个资源的消耗情况。 InfoQ：360现在主要用Hadoop具体做什么样的应用？ 唐会军：Hadoop用得很多，我们会做一些样本的存储，因为我们样本特别多。用户在做云查杀的时候，我们会去 扫描用户电脑上的样本文件。同时用户在安全浏览器里面去下各种应用的时候，我们也会扫描下是否有病毒。如果发现一个未知的样本，我们会把这个样本的一些特 征给抽取出来，存到后台，由后台服务器判别。这些数据存下来以后，我们用一些数据挖掘引擎去扫一下，这个数据量非常大，每天会超过10个T。 InfoQ：超过10个T？ 唐会军：对，我们会结合Hadoop自己开发一些程序来处理。 InfoQ：你们会把这些程序像豆瓣一样开源吗？ 唐会军：暂时还没有，还没到时候吧。有些软件的架构需要在内部用得更成熟一点，再开源出来。现在看时机还不到。另一个原因，开源出来以后，外部用的话，还需要投入人力去帮助大家用，因为现在内部人力还比较紧张，或许过个一两年，慢慢会这样去做。 InfoQ：360内部用Hadoop的时候，你觉得遇到最大的困难和障碍在哪？ 唐会军：虽然Hadoop是个比较成熟的开源分布系统，但是它在不同场景下，还会有一些特定问题会出来。所以刚 用的时候，包括我们在用的过程中，会出现各种异常现象和问题，包括计算进程被杀掉，有一些读写超时等等。这可能需要我们花很长时间去研究和讨论代码，然后 &#8230; <a href="http://chainding.wordpress.com/2012/02/25/hadoop-in-360-%e4%b8%93%e8%ae%bf360%e7%b3%bb%e7%bb%9f%e9%83%a8%e6%80%bb%e7%9b%91%e5%94%90%e4%bc%9a%e5%86%9b/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1712&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>在前不久的<a href="http://hic2011.hadooper.cn/dct/page/1">Hadoop in China 2011大会</a>上，360系统部总监<a href="http://weibo.com/u/1668635872">唐会军</a>接受了InfoQ的专访，谈到360公司内部对Hadoop的使用，并对Hadoop项目和HBase面临的挑战提出了自己的看法。以下是采访实录。</p>
<div>
<h3>相关厂商内容</h3>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1732"> QClub（西安站）——前端崛起（2月25日 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1738"> QClub二月技术沙龙（西安/广州/太原/大连 2月25日 周六 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1735"> QClub（大连站）——移动应用开发之HTML5（2月25日 免费报名中！） </a></p>
<p><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1684" target="_blank"> Inedo合作伙伴Alex Papadimoulis谈代码之丑之美 </a></p>
</div>
<p><strong>InfoQ：现在360的技术团队规模有多大？</strong></p>
<p><strong>唐会军：</strong>大概有八九百人，现在360发展挺快的，人员扩张每年翻倍，今年又比去年翻了一倍，去年又比前年翻了一倍。</p>
<p><strong>InfoQ：如何测试基于Hadoop的应用?您能否分享⼀一些相关的最佳实践?这些最佳实践所基于的上下文是什么?</strong></p>
<p><strong> </strong>唐会军：Hadoop应用的测试，我们现在主要两个方式，一个是做Code Review，提交到Hadoop上面的应用程序，我们会去复查代码，发现问题；第二个就是先在小范围的测试跑一跑，观察几天或者一周，没问题了，我们再在更大规模继续去跑，就是这两种方式。</p>
<p><strong>InfoQ：360采取的第二种测试方式，在测试中会关注哪些指标呢？</strong></p>
<p>唐会军：重点关注应用在测试过程中，它持续的时间、消耗的资源是否符合预期，因为Hadoop集群是个公用集群，不能因为某些程序没写好，把所有的 资源都给占掉了，然后影响其他机器。它使用的CPU、I/O、网络这些资源能符合预期，是我们的焦点，如果太多的话，肯定是程序有问题。</p>
<p><strong>InfoQ：对于这些指标，是否有一个相对的正常预期范围？</strong></p>
<p>唐会军：对，在开发团队提交一个任务之前，我们会让他估计一下会从我们集群提取多少数据，他会大概估一个范围是多少T到多少T之间。比如是一T到两 T之间。如果运行过程中发现他用了十个T以上的数据，那就有问题，我们就去查一下，这是数据消耗量；第二种就是程序运行过程中对CPU的消耗，如果他说基 本上一百个单位就可以了，然后半个小时就可以跑完。那真正跑了一百个单位以后，花了一个多小时还没有跑完，这肯定就是有问题。我们会去查，会看到程序里面 有一些东西写得不太合理，导致一些错误，出现不断的重试。资源，实际上就体现在CPU的资源;数据量就体现在I/O的资源。计算机无非就是I/O、网络、 CPU这三个资源，关注他这个资源的消耗情况。</p>
<p><strong>InfoQ：360现在主要用Hadoop具体做什么样的应用？</strong></p>
<p><strong>唐会军：</strong>Hadoop用得很多，我们会做一些样本的存储，因为我们样本特别多。用户在做云查杀的时候，我们会去 扫描用户电脑上的样本文件。同时用户在安全浏览器里面去下各种应用的时候，我们也会扫描下是否有病毒。如果发现一个未知的样本，我们会把这个样本的一些特 征给抽取出来，存到后台，由后台服务器判别。这些数据存下来以后，我们用一些数据挖掘引擎去扫一下，这个数据量非常大，每天会超过10个T。</p>
<p><strong>InfoQ：超过10个T？</strong></p>
<p><strong>唐会军：</strong>对，我们会结合Hadoop自己开发一些程序来处理。</p>
<p><strong>InfoQ：你们会把这些程序像豆瓣一样开源吗？</strong></p>
<p><strong>唐会军：</strong>暂时还没有，还没到时候吧。有些软件的架构需要在内部用得更成熟一点，再开源出来。现在看时机还不到。另一个原因，开源出来以后，外部用的话，还需要投入人力去帮助大家用，因为现在内部人力还比较紧张，或许过个一两年，慢慢会这样去做。</p>
<p><strong>InfoQ：360内部用Hadoop的时候，你觉得遇到最大的困难和障碍在哪？</strong></p>
<p><strong>唐会军：</strong>虽然Hadoop是个比较成熟的开源分布系统，但是它在不同场景下，还会有一些特定问题会出来。所以刚 用的时候，包括我们在用的过程中，会出现各种异常现象和问题，包括计算进程被杀掉，有一些读写超时等等。这可能需要我们花很长时间去研究和讨论代码，然后 再结合产品去定位问题。这方面各种问题其实也不少，包括它的Bug。</p>
<p><strong>InfoQ：有很多Bug？</strong></p>
<p><strong>唐会军：</strong>对，很多Bug的出现跟你的应用场景有关系，可能我们有些应用场景跟一般的不太一样。比如我们 Hadoop上存大文件，也有很多小文件，然后这些小文件多了以后，就会导致一些特殊问题。这时就需要我们去把Hadoop的代码弄清楚，我们准备做一些 修改和优化，这方面对我们的挑战比较大。</p>
<p><strong>InfoQ：能不能说下Hadoop在360的下载系统的使用情况？</strong></p>
<p><strong>唐会军：</strong>我们大概尝试了一年多，现在已经是下载集群的标配了。除了传统的大数据的分析和挖掘，我们也在尝试把它 用在在线下载服务上面，目前用的还挺好。当然也遇到很多问题，包括Hadoop的代码里面有一些不太适合做在线下载应用，我们根据需求，把Hadoop的 很多代码做修改，现在已经用得非常非常好。</p>
<p><strong>InfoQ：从技术上来讲，主要的挑战在哪？</strong></p>
<p><strong>唐会军：</strong>Hadoop设计出来的初衷是解决离线大数据的挖掘，它追求的性能指标是吞吐量。但是在线应用的要求是 低时延，可能吞吐并不是最重要的。用户每个下载服务请求对时延比较敏感，所以这两个需求之间不完全匹配。现在下载面临最大问题是：原来很多设计是追求高吞 吐，但是时延会受到影响，我们做了很多工作，把原有算法做调整以后导致它的时延会降低下来，吞吐会下降一些，因为这两个需求是不太一样的，一个是高吞吐， 一个是低时延。</p>
<p><strong>InfoQ：这跟视频的服务是否类似？</strong></p>
<p><strong>唐会军：</strong>我们的下载应该是跟视频这样的业务是比较类似的。所以我们觉得出来分享一下这个架构,可能对下载和视频服务有一定的借鉴意义。</p>
<p><strong>InfoQ：2012年的QCon技术大会设计了海量视频处理的议题。大家现在上网带宽越来越宽，又有移动3G，所以视频的需求肯定越来越大，我相信越来越多的公司都面临这个问题，您能否再分享一些相关经验？</strong></p>
<p><strong>唐会军：</strong>真正要把Hadoop在一个完整的下载集群里面用好，要做很多方面的调整，包括P2P的一些算法。包括 客户端P2P的一些算法，还有后端的下载服务器，他们两个要做配合。其次，每一块下载的数据大小也是需要优化的，原来P2P客户端的开发只需要从自己的角 度考虑，他并不会考虑到后端的承载能力和实际情况，现在下载的时候，需要客户端和后端两方面做一些协商，看数据块多大是最合适的。第三个，nginx本身 针对下载服务也有很多可以优化的地方，包括它的一些参数，它的一些读取文件方式，用pread还是sendfile，还是其他方式，这些方面都可以调整。 第四个方面，因为nginx服务和Hadoop用Fuse方式去做接口，包括Fuse的方式也要做很多调整，才能适合下载业务去使用，保证低时延，高性 能。所以实际上我们在把Hadoop用在下载业务中，并不仅仅是针对Hadoop HDFS做了一些优化，而是相当于是Fuse、nginx、包括P2P客户端等，都做了一系列优化。</p>
<p><strong>InfoQ：</strong>您认为Hadoop现在在哪些方面还有欠缺，需要什么样的框架来弥补它的这些问题？</p>
<p><strong>唐会军：</strong>HDFS、MapReduce和HBase，这可能是Hadoop里面用得最多的三块了。我们觉得 HDFS现在面临最大的挑战是：怎么能够解决更多小文件持续存储的问题。因为小文件多了以后，会带来好几方面的问题：一个是name node内存占用会比较多，这个需要解决。第二个是，小文件多了以后，每个根目录下的小文件也会多，很多机制在面对小文件很多的情况下，也不太适应，一些 配套服务响应的时间会非常非常长。然后时间长以后，会堵塞更多的Hadoop之间的一些心跳，name node会认为这个data node是死掉了，其实是没有死的，等等一系列的问题吧。所以我们觉得HDFS将来面临的一大问题就是：如何处理一个亿、两个亿，甚至更多的小文件，毕竟 很多应用中还是会有很多小文件的。</p>
<p>MapReduce这个框架体系结构是比较成熟了，下一步挑战就是实时性方面的改进。这样我们既可以利用MapReduce这个框架的优势，同时保证它的实时性达到我们要求的范围内，并不是说一定要越快越好。</p>
<p>HBase出现时间比较晚，它现在面临的最大挑战就是稳定性不够，我们在用的过程中就发现：相对HDFS和MapReduce这两个组件来讲的话，HBase的bug比较多，所以希望HBase能尽快成熟起来。</p>
<p><strong>InfoQ：<a href="http://www.infoq.com/cn/articles/doug-on-hadoop-open-source">Doug Cutting也说HBase会是下一个明星开源项目。</a></strong></p>
<p><strong>唐会军：</strong>对，结构化的Key Value存储需求是非常非常大的，以前没有一个很好的方式去满足海量的Key Value存储，很多公司也在做一些自己的开发，尤其淘宝和FaceBook等公司，他们都做自己的开发。但我们觉得HBase这种架构是不错的。如果它 比较成熟的话，应该是很有希望成为下一个超级明星。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1712/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1712/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1712/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1712&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/25/hadoop-in-360-%e4%b8%93%e8%ae%bf360%e7%b3%bb%e7%bb%9f%e9%83%a8%e6%80%bb%e7%9b%91%e5%94%90%e4%bc%9a%e5%86%9b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>趋势科技将安全工具HijackThis开源</title>
		<link>http://chainding.wordpress.com/2012/02/21/%e8%b6%8b%e5%8a%bf%e7%a7%91%e6%8a%80%e5%b0%86%e5%ae%89%e5%85%a8%e5%b7%a5%e5%85%b7hijackthis%e5%bc%80%e6%ba%90/</link>
		<comments>http://chainding.wordpress.com/2012/02/21/%e8%b6%8b%e5%8a%bf%e7%a7%91%e6%8a%80%e5%b0%86%e5%ae%89%e5%85%a8%e5%b7%a5%e5%85%b7hijackthis%e5%bc%80%e6%ba%90/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:50:44 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1709</guid>
		<description><![CDATA[趋势科技（Trend Micro）宣布将广泛流行的免费安全工具——HijackThis开源，开发人员可以根据自己的需求修改或增强该工具。趋势科技将继续维护并更新原有的源代码。 HijackThis能够扫描并生成一份计算机注册表和文件配置的详细报告，但是它本身并不对扫描结果做出安全或者危险的判断，这需要用户来决定。 除此之外，HijackThis还提供了若干工具，用于手动清除计算机中的病毒。该工具最早由Merijn Bellekom用Visual Basic编写而成，在2007年被趋势科技收购并供客户免费使用，目前下载次数已经超过一千万次。 谈到HijackThis的开源，Bellekom表示这将有助于其他开发者增强自己的反病毒工具： 这意味着其他人可以在此开源代码库的基础上创建或者改善他们自己的反病毒工具。 安全社区专家Paul Laudanski对HijackThis开源表示欢迎： HijackThis在安全社区中是一个必不可少的工具，它对个人计算机的安全非常重要，提供了专家分析复杂病毒入侵所需要的数据。这次将 HijackThis开源出来是趋势科技对安全社区的贡献。开源社区使大家能够在自由的环境中互相帮助，确保HijackThis将会继续发展壮大并服务 用户。 bleepingcomputer网站创始人Larry Abrams认为开源将有助于HijackThis的发展： HijackThis曾经最流行的Windows病毒扫描工具之一，开源将使得HijackThis发布更加迅速，更多开发人员可以参与进来，从而采用先进的反病毒技术。 开源之后的HijackThis托管在SoureForge网站上，感兴趣的读者可以下载并查看源代码。 最近，有关安全的话题在开发社区中讨论热烈，针对近期出现的一些安全事件，InfoQ特别访问了安全企业、互联网企业和移动开发的相关从业人士，请他们就本次事件发表看法，并给出一些安全方面的建议。 InfoQ安全系列—专访安全宝CEO马杰：安全需要做到整条战线的严丝合缝 InfoQ安全系列—专访友录创始人姜洋，谈移动客户端安全 InfoQ安全系列—专访韩轶平：整个行业都要提高安全意识 InfoQ安全系列—专访土豆网技术副总黄冬：后端服务器的隔离非常重要 崔康 热情的技术探索者，资深软件工程师，InfoQ编辑，从事企业级Web应用的相关工作，关注性能优化、Web技术、浏览器等领域。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1709&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>趋势科技（Trend Micro）<a href="http://free.antivirus.com/hijackthis/" target="_blank">宣布</a>将广泛流行的免费安全工具——HijackThis开源，开发人员可以根据自己的需求修改或增强该工具。趋势科技将继续维护并更新原有的源代码。</p>
<p>HijackThis能够扫描并生成一份计算机注册表和文件配置的详细报告，但是它本身并不对扫描结果做出安全或者危险的判断，这需要用户来决定。 除此之外，HijackThis还提供了若干工具，用于手动清除计算机中的病毒。该工具最早由Merijn Bellekom用Visual Basic编写而成，在2007年被趋势科技收购并供客户免费使用，目前下载次数已经超过一千万次。</p>
<p>谈到HijackThis的开源，Bellekom<a href="http://www.securityweek.com/trend-micro-migrates-security-tool-hijackthis-open-source" target="_blank">表示</a>这将有助于其他开发者增强自己的反病毒工具：</p>
<blockquote><p>这意味着其他人可以在此开源代码库的基础上创建或者改善他们自己的反病毒工具。</p></blockquote>
<p>安全社区专家Paul Laudanski对HijackThis开源<a href="http://www.sacbee.com/2012/02/17/4271572/trend-micro-releases-hijackthis.html" target="_blank">表示</a>欢迎：</p>
<blockquote><p>HijackThis在安全社区中是一个必不可少的工具，它对个人计算机的安全非常重要，提供了专家分析复杂病毒入侵所需要的数据。这次将 HijackThis开源出来是趋势科技对安全社区的贡献。开源社区使大家能够在自由的环境中互相帮助，确保HijackThis将会继续发展壮大并服务 用户。</p></blockquote>
<p>bleepingcomputer网站创始人Larry Abrams<a href="http://www.sacbee.com/2012/02/17/4271572/trend-micro-releases-hijackthis.html" target="_blank">认为</a>开源将有助于HijackThis的发展：</p>
<blockquote><p>HijackThis曾经最流行的Windows病毒扫描工具之一，开源将使得HijackThis发布更加迅速，更多开发人员可以参与进来，从而采用先进的反病毒技术。</p></blockquote>
<p>开源之后的HijackThis托管在<a href="http://sourceforge.net/projects/hjt/" target="_blank">SoureForge</a>网站上，感兴趣的读者可以下载并查看源代码。</p>
<p>最近，有关安全的话题在开发社区中讨论热烈，针对近期出现的一些安全事件，InfoQ特别访问了安全企业、互联网企业和移动开发的相关从业人士，请他们就本次事件发表看法，并给出一些安全方面的建议。</p>
<p><a href="http://www.infoq.com/cn/news/2011/12/interview-anquanbao-ceo">InfoQ安全系列—专访安全宝CEO马杰：安全需要做到整条战线的严丝合缝</a></p>
<p><a href="http://www.infoq.com/cn/news/2011/12/interview-jiangyang">InfoQ安全系列—专访友录创始人姜洋，谈移动客户端安全</a></p>
<p><a href="http://www.infoq.com/cn/news/2011/12/interview-hanyiping">InfoQ安全系列—专访韩轶平：整个行业都要提高安全意识</a></p>
<p><a href="http://www.infoq.com/cn/news/2011/12/interview-huangdong">InfoQ安全系列—专访土豆网技术副总黄冬：后端服务器的隔离非常重要</a></p>
<p><em> <strong><a href="http://www.infoq.com/cn/author/%E5%B4%94%E5%BA%B7"> 崔康</a> </strong> 热情的技术探索者，资深软件工程师，InfoQ编辑，从事企业级Web应用的相关工作，关注性能优化、Web技术、浏览器等领域。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1709/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1709&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/21/%e8%b6%8b%e5%8a%bf%e7%a7%91%e6%8a%80%e5%b0%86%e5%ae%89%e5%85%a8%e5%b7%a5%e5%85%b7hijackthis%e5%bc%80%e6%ba%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>微软披露更多ARM Win8细节</title>
		<link>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e6%8a%ab%e9%9c%b2%e6%9b%b4%e5%a4%9aarm-win8%e7%bb%86%e8%8a%82/</link>
		<comments>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e6%8a%ab%e9%9c%b2%e6%9b%b4%e5%a4%9aarm-win8%e7%bb%86%e8%8a%82/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:50:10 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1707</guid>
		<description><![CDATA[随着发布的日益临近，微软披露了更多关于ARM版Windows 8的细节：低功耗的软件架构，运行于WinRT之上的应用，有限的桌面支持 &#8211; 仅仅允许Office 15和其他Windows组件运行。 CES 2011中，微软证实了Windows将会支持ARM架构的片上系统。 而在台北举办的D9会议上，微软第一次展示了Windows 8（Win8），并且还于一台ARM原型机上演示了Win8系统。虽然关于微软将会考虑ARM架构的谣言都已经被证实，但是很多悬念依然扣人心弦。例如 ARM架构是否会被作为PC家族的一员？ARM和x86应用的兼容性将会如何？Win8 ARM将是否包括除Metro以内其他的桌面接口等等。微软Windows及Windows Live部门总裁Steven Sinofsky日前发布了一篇博文，更加清晰地描述了他们的ARM计划。Sinofsky首先澄清，这次迁移并不是要抛弃传统的Intel/AMD架构，而是为Windows和其生态系统创造的一次崭新的机遇： 我们非常兴奋地看到Windows 8将仍然视Intel和AMD为其重要的合作伙伴 &#8211; 平板电脑、笔记本电脑、Ultrabook™、一体式电脑，桌面电脑等。这些设备将和Windows 8的各种激动人心的新特性互惠互利，为消费者带来更佳的用户体验。 新平台的缩写为WOA（Windows On ARM），它将ARM架构作为PC家族的一员，放在和x86以及64bit架构同等的地位上。微软希望在Win8官方发售时，WOA PC和x86 PC能够同步上市。ARM芯片将会由NVIDIA、高通和德州仪器制造，并且采用同样的架构以确保能够正常运行同样的应用程序。WOA PC将会消费者带来“绝佳的体验”，从登录到使用IE的硬件加速功能，用户几乎不会感觉到和Intel/AMD PC的差异。 WOA PCs也将低功耗作为设计的一个重要目标。这类设备几乎不需要休眠或者关机。当按下电源键的时候，WOAPC自动进入“随时待机”模式，而且可以待机数周 不需要外接电源支持。当被唤醒之后，所有的功能都会在短时间内完全恢复。Sinofsky说，这个特性影响了许多WOA的设计理念，尤其是是否考虑向后兼 容传统的Windows应用。 WOA和Win8共享了大部分的代码库，Windows商店将会等同看待这两款产品。所有的软件，包括设备驱动，只能通过Windows商店获取。 在Visual Studio 11中，开发者将可以选择C#/VB/XAML/JScript/HTML5来编写WOA应用。而且还能够使用C/C++编写原生WinRT应用。只采用 WinRT接口的应用程序可以同时运行在WOA和x86平台上。 WOA将会部分支持桌面接口：“WOA对Windows桌面体验提供了良好的支持，包括资源管理器，IE 10桌面版以及其他传统Windows桌面特性，这些软件和特性都特地为触摸式交互和低功耗设备重新设计”。WOA也将会得到桌面版Office 15的支持，包括Word、Excel、PowerPoint和OnNote组件，这些组件都重新设计了架构，以提供对触摸和低功耗设备的支持。但是微软 并不会为运行、模拟或者迁移第三方程序于WOA平台提供任何支持。模拟器和虚拟化得不到支持是因为它们“以不可接受的程度消耗系统资源，包括电池寿命和 CPU”。 很明显微软只允许WOA有限地使用桌面特性，因为时间已经所剩不多，重写Office和一些Windows &#8230; <a href="http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e6%8a%ab%e9%9c%b2%e6%9b%b4%e5%a4%9aarm-win8%e7%bb%86%e8%8a%82/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1707&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>随着发布的日益临近，微软披露了更多关于ARM版Windows 8的细节：低功耗的软件架构，运行于WinRT之上的应用，有限的桌面支持 &#8211; 仅仅允许Office 15和其他Windows组件运行。</p>
<p>CES 2011中，微软证实了Windows将会支持<a href="http://www.infoq.com/news/2011/01/Windows-on-System-on-a-Chip">ARM架构的片上系统</a>。 而在台北举办的D9会议上，微软第一次展示了Windows 8（Win8），并且还于一台ARM原型机上演示了Win8系统。虽然关于微软将会考虑ARM架构的谣言都已经被证实，但是很多悬念依然扣人心弦。例如 ARM架构是否会被作为PC家族的一员？ARM和x86应用的兼容性将会如何？Win8 ARM将是否包括除Metro以内其他的桌面接口等等。微软Windows及Windows Live部门总裁Steven Sinofsky日前发布了一篇博文，更加清晰地描述了<a href="http://blogs.msdn.com/b/b8/archive/2012/02/09/building-windows-for-the-arm-processor-architecture.aspx">他们的ARM计划</a>。Sinofsky首先澄清，这次迁移并不是要抛弃传统的Intel/AMD架构，而是为Windows和其生态系统创造的一次崭新的机遇：</p>
<blockquote><p>我们非常兴奋地看到Windows 8将仍然视Intel和AMD为其重要的合作伙伴 &#8211; 平板电脑、笔记本电脑、Ultrabook™、一体式电脑，桌面电脑等。这些设备将和Windows 8的各种激动人心的新特性互惠互利，为消费者带来更佳的用户体验。</p></blockquote>
<p>新平台的缩写为WOA（Windows On ARM），它将ARM架构作为PC家族的一员，放在和x86以及64bit架构同等的地位上。微软希望在Win8官方发售时，WOA PC和x86 PC能够同步上市。ARM芯片将会由NVIDIA、高通和德州仪器制造，并且采用同样的架构以确保能够正常运行同样的应用程序。WOA PC将会消费者带来“绝佳的体验”，从登录到使用IE的硬件加速功能，用户几乎不会感觉到和Intel/AMD PC的差异。</p>
<p>WOA PCs也将低功耗作为设计的一个重要目标。这类设备几乎不需要休眠或者关机。当按下电源键的时候，WOAPC自动进入“随时待机”模式，而且可以待机数周 不需要外接电源支持。当被唤醒之后，所有的功能都会在短时间内完全恢复。Sinofsky说，这个特性影响了许多WOA的设计理念，尤其是是否考虑向后兼 容传统的Windows应用。</p>
<p>WOA和Win8共享了大部分的代码库，Windows商店将会等同看待这两款产品。所有的软件，包括设备驱动，只能通过Windows商店获取。 在Visual Studio 11中，开发者将可以选择C#/VB/XAML/JScript/HTML5来编写WOA应用。而且还能够使用C/C++编写原生WinRT应用。只采用 WinRT接口的应用程序可以同时运行在WOA和x86平台上。</p>
<p>WOA将会部分支持桌面接口：“WOA对Windows桌面体验提供了良好的支持，包括资源管理器，IE 10桌面版以及其他传统Windows桌面特性，这些软件和特性都特地为触摸式交互和低功耗设备重新设计”。WOA也将会得到桌面版Office 15的支持，包括Word、Excel、PowerPoint和OnNote组件，这些组件都重新设计了架构，以提供对触摸和低功耗设备的支持。但是微软 并不会为运行、模拟或者迁移第三方程序于WOA平台提供任何支持。模拟器和虚拟化得不到支持是因为它们“以不可接受的程度消耗系统资源，包括电池寿命和 CPU”。</p>
<p>很明显微软只允许WOA有限地使用桌面特性，因为时间已经所剩不多，重写Office和一些Windows Metro的功能是不可能的。我们可以期望未来桌面将会完全从WOA消失，而且Office将会完全Metro化。</p>
<p>和x86平台上的Win8不同的是，WOA的桌面浏览器将<a href="http://allthingsd.com/20120209/windows-on-arm-complete-with-next-version-of-office-to-arrive-with-rest-of-windows-8/">不会提供任何插件支持</a>，这则消息是来自于AllThingsD：“Sinofsky也说过ARM架构Windows上的IE将不会对插件提供支持，包括Adobe Flash。很明显，工业界已经开始在移动设备上逐渐放弃Flash。”</p>
<p>WOA将会和设备捆绑销售，并不会有零售版。</p>
<p>Sinofsky重申了微软将会在二月底提供Windows 8消费者预览版，而且与此同时，将会有一小部分WOA PC将会提供给开发者和硬件合作伙伴共同测试。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/02/WOA-Windows-on-ARM" rel="permalink">Microsoft Details Windows 8 for ARM</a></p>
<p><em> <strong>译者</strong> <strong><a href="http://www.infoq.com/cn/author/%E6%9D%A8%E6%99%A8"> 杨晨</a> </strong> 对数据库和搜索引擎有深入了解，尤其擅长经典计算机科学理论，对历史学兴趣浓厚。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1707/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1707/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1707/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1707&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e6%8a%ab%e9%9c%b2%e6%9b%b4%e5%a4%9aarm-win8%e7%bb%86%e8%8a%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>敏捷的下一个浪潮：商业转型</title>
		<link>http://chainding.wordpress.com/2012/02/21/%e6%95%8f%e6%8d%b7%e7%9a%84%e4%b8%8b%e4%b8%80%e4%b8%aa%e6%b5%aa%e6%bd%ae%ef%bc%9a%e5%95%86%e4%b8%9a%e8%bd%ac%e5%9e%8b/</link>
		<comments>http://chainding.wordpress.com/2012/02/21/%e6%95%8f%e6%8d%b7%e7%9a%84%e4%b8%8b%e4%b8%80%e4%b8%aa%e6%b5%aa%e6%bd%ae%ef%bc%9a%e5%95%86%e4%b8%9a%e8%bd%ac%e5%9e%8b/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:49:43 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1705</guid>
		<description><![CDATA[当敏捷实践和技术在软件开发领域中越来越成熟时，商业领域则刚刚开始体会到敏捷带来的冲击。最近，Forrester的一篇报告特别指出：敏捷从前旨在改进软件开发，但今天的机遇和挑战则在于如何让整个软件价值链促进（企业）盈利。这种方向性的转变将会影响到资本预算、合作伙伴管理、产品管理、投资者反馈和企业运营。据报告称： 最初，敏捷的终极目标是交付高价值的软件。为了达到这个目标，敏捷实践者首先必须让开发团队精于软件构建，而不是关注其价值，这 也影响了（软件）价值链上的其他部分。目前，也就是敏捷第二阶段的目标是如何让开发团队能够和其他团队一起协作。精益思想和一些最新实践，如持续交付和提 升用户体验，就明显着重于此。 VentureBeat也总结了这份报告：: 敏捷依然非常着重于让团队更好的构建软件，但也在朝着推动商业的方向发展。因此，现在对于敏捷有两个不同的视角。一个是传统的视 角，将敏捷作为软件开发的新途径，发出类似于“我们需要奔向敏捷”的宣言。另一个视角则是将敏捷应用于组织中的各种领域，如投资管理、项目管理、合作伙伴 管理、合同签订等。 最近发表的敏捷宣言10年庆典和接下来的这篇以及这篇文章也指向了相同的方向： 未来，敏捷将会突破构建软件和IT组织的界限，几乎每个公司都会计划采用敏捷实践。借鉴敏捷运动中学到的团队组织经验、在复杂项目中合作的经验，以及持续应对需求变化的经验，应用于重新设计整个公司的运维方式，将会是一个重大的机遇。 但是，当敏捷向着商业领域发展时，是否还能以现有的定义获得成功呢？看起来不太可能。Scott W.Ambler等人曾尝试对敏捷宣言进行修改，使之适应性更广，而不仅仅局限于软件开发，但最终还是决定先保持现状。 在进入商业领域的道路上，敏捷在技能和能力上都面临着挑战。敏捷教练的兴起、PMI引入敏捷认证、以及ICAgile等组织将敏捷认证扩展到其他角色，都展示了敏捷是如何拥抱新变化的。 在商业领域还把stand up当成新鲜玩意的时候，世界正在悄悄地前进。最近的 Stoos聚会或许就是敏捷挺进商业领域和企业文化的催化剂。 当敏捷实践和技术在软件开发领域中越来越成熟时，商业领域则刚刚开始体会到敏捷带来的冲击。最近，Forrester的一篇报告特别指出：敏捷从前旨在改进软件开发，但今天的机遇和挑战则在于如何让整个软件价值链促进（企业）盈利。这种方向性的转变将会影响到资本预算、合作伙伴管理、产品管理、投资者反馈和企业运营。据报告称： 最初，敏捷的终极目标是交付高价值的软件。为了达到这个目标，敏捷实践者首先必须让开发团队精于软件构建，而不是关注其价值，这 也影响了（软件）价值链上的其他部分。目前，也就是敏捷第二阶段的目标是如何让开发团队能够和其他团队一起协作。精益思想和一些最新实践，如持续交付和提 升用户体验，就明显着重于此。 VentureBeat也总结了这份报告：: 敏捷依然非常着重于让团队更好的构建软件，但也在朝着推动商业的方向发展。因此，现在对于敏捷有两个不同的视角。一个是传统的视 角，将敏捷作为软件开发的新途径，发出类似于“我们需要奔向敏捷”的宣言。另一个视角则是将敏捷应用于组织中的各种领域，如投资管理、项目管理、合作伙伴 管理、合同签订等。 最近发表的敏捷宣言10年庆典和接下来的这篇以及这篇文章也指向了相同的方向： 未来，敏捷将会突破构建软件和IT组织的界限，几乎每个公司都会计划采用敏捷实践。借鉴敏捷运动中学到的团队组织经验、在复杂项目中合作的经验，以及持续应对需求变化的经验，应用于重新设计整个公司的运维方式，将会是一个重大的机遇。 但是，当敏捷向着商业领域发展时，是否还能以现有的定义获得成功呢？看起来不太可能。Scott W.Ambler等人曾尝试对敏捷宣言进行修改，使之适应性更广，而不仅仅局限于软件开发，但最终还是决定先保持现状。 在进入商业领域的道路上，敏捷在技能和能力上都面临着挑战。敏捷教练的兴起、PMI引入敏捷认证、以及ICAgile等组织将敏捷认证扩展到其他角色，都展示了敏捷是如何拥抱新变化的。 在商业领域还把stand up当成新鲜玩意的时候，世界正在悄悄地前进。最近的 Stoos聚会或许就是敏捷挺进商业领域和企业文化的催化剂。 查看英文原文：Agile&#8217;s Next Wave: Transforming the Business 译者 王瑜珩 &#8230; <a href="http://chainding.wordpress.com/2012/02/21/%e6%95%8f%e6%8d%b7%e7%9a%84%e4%b8%8b%e4%b8%80%e4%b8%aa%e6%b5%aa%e6%bd%ae%ef%bc%9a%e5%95%86%e4%b8%9a%e8%bd%ac%e5%9e%8b/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1705&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>当敏捷实践和技术在软件开发领域中越来越成熟时，商业领域则刚刚开始体会到敏捷带来的冲击。最近，Forrester的一篇<a href="http://www.forrester.com/rb/Research/navigate_future_of_agile_and_lean/q/id/61254/t/2?src=RSS_2&amp;cm_mmc=Forrester-_-RSS-_-Document-_-6">报告</a>特别指出：敏捷从前旨在改进软件开发，但今天的机遇和挑战则在于如何让整个软件价值链促进（企业）盈利。这种方向性的转变将会影响到资本预算、合作伙伴管理、产品管理、投资者反馈和企业运营。据报告称：</p>
<blockquote><p>最初，敏捷的终极目标是交付高价值的软件。为了达到这个目标，敏捷实践者首先必须让开发团队精于软件构建，而不是关注其价值，这 也影响了（软件）价值链上的其他部分。目前，也就是敏捷第二阶段的目标是如何让开发团队能够和其他团队一起协作。精益思想和一些最新实践，如持续交付和提 升用户体验，就明显着重于此。</p></blockquote>
<p><a href="http://venturebeat.com/">VentureBeat</a>也<a href="http://venturebeat.com/2012/02/09/agile-grows-up-readies-to-take-over-your-whole-business/">总结了这份报告：</a>:</p>
<blockquote><p>敏捷依然非常着重于让团队更好的构建软件，但也在朝着推动商业的方向发展。因此，现在对于敏捷有两个不同的视角。一个是传统的视 角，将敏捷作为软件开发的新途径，发出类似于“我们需要奔向敏捷”的宣言。另一个视角则是将敏捷应用于组织中的各种领域，如投资管理、项目管理、合作伙伴 管理、合同签订等。</p></blockquote>
<p>最近发表的<a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCIQFjAA&amp;url=http://10yearsagile.org/&amp;ei=Z-s3T6iVAcHBgAe5n-3nBQ&amp;usg=AFQjCNGHTJr-8uj05_viNP5Neyy6SwQnZg&amp;sig2=TwynDSEzIwyKmrJbUrUhoA">敏捷宣言10年庆典</a>和接下来的<a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=5&amp;ved=0CEUQFjAE&amp;url=http://blog.mountaingoatsoftware.com/reflections-on-the-10-years-since-the-agile-manifesto&amp;ei=Lus3T6fMOomTgweDv4XoBQ&amp;usg=AFQjCNFQV1AaiLVP1CzwL2Zvbq3WV9kFkA&amp;sig2=zZYlXlPeQ0y02gnB7lHuqQ">这篇</a>以及<a href="http://www.erik.net/post/3424049867/beyond-development-the-next-ten-years-of-agile">这篇</a>文章也指向了相同的方向：</p>
<blockquote><p>未来，敏捷将会突破构建软件和IT组织的界限，几乎每个公司都会计划采用敏捷实践。借鉴敏捷运动中学到的团队组织经验、在复杂项目中合作的经验，以及持续应对需求变化的经验，应用于重新设计整个公司的运维方式，将会是一个重大的机遇。</p></blockquote>
<p>但是，当敏捷向着商业领域发展时，是否还能以现有的定义获得成功呢？看起来不太可能。<a href="http://www.ambysoft.com/scottAmbler.html">Scott W.Ambler</a>等人曾尝试对<a href="http://agilemanifesto.org/">敏捷宣言</a>进行<a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=14&amp;ved=0CEkQFjADOAo&amp;url=https://www.ibm.com/developerworks/mydeveloperworks/blogs/ambler/entry/reworking_the_agile_manifesto14&amp;ei=iOo3T9__KcrTgAed9KXoBQ&amp;usg=AFQjCNFdAFMvIWEbLJGvWjp3gqMx49ZNhw&amp;sig2=TzWJUa6xrVrg42FyiuXqJQ">修改</a>，使之适应性更广，而不仅仅局限于软件开发，但最终还是决定先保持现状。</p>
<p>在进入商业领域的道路上，敏捷在技能和能力上都面临着挑战。<a href="http://www.agilejournal.com/articles/columns/column-articles/1917-the-role-of-the-agile-coach">敏捷教练</a>的兴起、PMI引入<a href="http://www.pmi.org/Certification/New-PMI-Agile-Certification.aspx">敏捷认证</a>、以及<a href="http://icagile.com/ExploretheRoadmap.html">ICAgile</a>等组织将敏捷认证扩展到其他角色，都展示了敏捷是如何拥抱新变化的。</p>
<p>在商业领域还<a href="http://online.wsj.com/article_email/SB10001424052970204652904577193460472598378-lMyQjAxMTAyMDAwMjEwNDIyWj.html?mod=wsj_share_email">把stand up当成新鲜玩意</a>的时候，世界正在悄悄地前进。最近的 <a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=3&amp;ved=0CDAQFjAC&amp;url=http://www.infoq.com/news/2012/01/stoos-network-event&amp;ei=9fA3T87JNorhgge3kPHnBQ&amp;usg=AFQjCNFAvFQC9zzqwnY2CF9giomPcw70ZQ&amp;sig2=_cMgZVfnNQIP9V7kNfmkOw">Stoos</a>聚会或许就是敏捷挺进商业领域和企业文化的催化剂。</p>
<p>当敏捷实践和技术在软件开发领域中越来越成熟时，商业领域则刚刚开始体会到敏捷带来的冲击。最近，Forrester的一篇<a href="http://www.forrester.com/rb/Research/navigate_future_of_agile_and_lean/q/id/61254/t/2?src=RSS_2&amp;cm_mmc=Forrester-_-RSS-_-Document-_-6">报告</a>特别指出：敏捷从前旨在改进软件开发，但今天的机遇和挑战则在于如何让整个软件价值链促进（企业）盈利。这种方向性的转变将会影响到资本预算、合作伙伴管理、产品管理、投资者反馈和企业运营。据报告称：</p>
<blockquote><p>最初，敏捷的终极目标是交付高价值的软件。为了达到这个目标，敏捷实践者首先必须让开发团队精于软件构建，而不是关注其价值，这 也影响了（软件）价值链上的其他部分。目前，也就是敏捷第二阶段的目标是如何让开发团队能够和其他团队一起协作。精益思想和一些最新实践，如持续交付和提 升用户体验，就明显着重于此。</p></blockquote>
<p><a href="http://venturebeat.com/">VentureBeat</a>也<a href="http://venturebeat.com/2012/02/09/agile-grows-up-readies-to-take-over-your-whole-business/">总结了这份报告：</a>:</p>
<blockquote><p>敏捷依然非常着重于让团队更好的构建软件，但也在朝着推动商业的方向发展。因此，现在对于敏捷有两个不同的视角。一个是传统的视 角，将敏捷作为软件开发的新途径，发出类似于“我们需要奔向敏捷”的宣言。另一个视角则是将敏捷应用于组织中的各种领域，如投资管理、项目管理、合作伙伴 管理、合同签订等。</p></blockquote>
<p>最近发表的<a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCIQFjAA&amp;url=http://10yearsagile.org/&amp;ei=Z-s3T6iVAcHBgAe5n-3nBQ&amp;usg=AFQjCNGHTJr-8uj05_viNP5Neyy6SwQnZg&amp;sig2=TwynDSEzIwyKmrJbUrUhoA">敏捷宣言10年庆典</a>和接下来的<a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=5&amp;ved=0CEUQFjAE&amp;url=http://blog.mountaingoatsoftware.com/reflections-on-the-10-years-since-the-agile-manifesto&amp;ei=Lus3T6fMOomTgweDv4XoBQ&amp;usg=AFQjCNFQV1AaiLVP1CzwL2Zvbq3WV9kFkA&amp;sig2=zZYlXlPeQ0y02gnB7lHuqQ">这篇</a>以及<a href="http://www.erik.net/post/3424049867/beyond-development-the-next-ten-years-of-agile">这篇</a>文章也指向了相同的方向：</p>
<blockquote><p>未来，敏捷将会突破构建软件和IT组织的界限，几乎每个公司都会计划采用敏捷实践。借鉴敏捷运动中学到的团队组织经验、在复杂项目中合作的经验，以及持续应对需求变化的经验，应用于重新设计整个公司的运维方式，将会是一个重大的机遇。</p></blockquote>
<p>但是，当敏捷向着商业领域发展时，是否还能以现有的定义获得成功呢？看起来不太可能。<a href="http://www.ambysoft.com/scottAmbler.html">Scott W.Ambler</a>等人曾尝试对<a href="http://agilemanifesto.org/">敏捷宣言</a>进行<a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=14&amp;ved=0CEkQFjADOAo&amp;url=https://www.ibm.com/developerworks/mydeveloperworks/blogs/ambler/entry/reworking_the_agile_manifesto14&amp;ei=iOo3T9__KcrTgAed9KXoBQ&amp;usg=AFQjCNFdAFMvIWEbLJGvWjp3gqMx49ZNhw&amp;sig2=TzWJUa6xrVrg42FyiuXqJQ">修改</a>，使之适应性更广，而不仅仅局限于软件开发，但最终还是决定先保持现状。</p>
<p>在进入商业领域的道路上，敏捷在技能和能力上都面临着挑战。<a href="http://www.agilejournal.com/articles/columns/column-articles/1917-the-role-of-the-agile-coach">敏捷教练</a>的兴起、PMI引入<a href="http://www.pmi.org/Certification/New-PMI-Agile-Certification.aspx">敏捷认证</a>、以及<a href="http://icagile.com/ExploretheRoadmap.html">ICAgile</a>等组织将敏捷认证扩展到其他角色，都展示了敏捷是如何拥抱新变化的。</p>
<p>在商业领域还<a href="http://online.wsj.com/article_email/SB10001424052970204652904577193460472598378-lMyQjAxMTAyMDAwMjEwNDIyWj.html?mod=wsj_share_email">把stand up当成新鲜玩意</a>的时候，世界正在悄悄地前进。最近的 <a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=3&amp;ved=0CDAQFjAC&amp;url=http://www.infoq.com/news/2012/01/stoos-network-event&amp;ei=9fA3T87JNorhgge3kPHnBQ&amp;usg=AFQjCNFAvFQC9zzqwnY2CF9giomPcw70ZQ&amp;sig2=_cMgZVfnNQIP9V7kNfmkOw">Stoos</a>聚会或许就是敏捷挺进商业领域和企业文化的催化剂。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/02/bow-shock-of-agility">Agile&#8217;s Next Wave: Transforming the Business</a></p>
<p><em> <strong>译者</strong> <strong><a href="http://www.infoq.com/cn/author/%E7%8E%8B%E7%91%9C%E7%8F%A9"> 王瑜珩</a> </strong> InfoQ中文站编辑，ThoughtWorks咨询师，关注企业级Web开发、敏捷实践以及项目管理。 </em></p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/02/bow-shock-of-agility">Agile&#8217;s Next Wave: Transforming the Business</a></p>
<p><em> <strong>译者</strong> <strong><a href="http://www.infoq.com/cn/author/%E7%8E%8B%E7%91%9C%E7%8F%A9"> 王瑜珩</a> </strong> InfoQ中文站编辑，ThoughtWorks咨询师，关注企业级Web开发、敏捷实践以及项目管理。 </em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1705/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1705/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1705/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1705&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/21/%e6%95%8f%e6%8d%b7%e7%9a%84%e4%b8%8b%e4%b8%80%e4%b8%aa%e6%b5%aa%e6%bd%ae%ef%bc%9a%e5%95%86%e4%b8%9a%e8%bd%ac%e5%9e%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>当Shell遇上了NodeJS</title>
		<link>http://chainding.wordpress.com/2012/02/21/%e5%bd%93shell%e9%81%87%e4%b8%8a%e4%ba%86nodejs/</link>
		<comments>http://chainding.wordpress.com/2012/02/21/%e5%bd%93shell%e9%81%87%e4%b8%8a%e4%ba%86nodejs/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:49:23 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1703</guid>
		<description><![CDATA[序言 无论在传统的企业级系统维护还是在互联网运维中，Shell脚本的编写与维护常常必不可少，在系统管理员或开发人员工作中占比重比较大的一部分。 Shell脚本的严格语法格式对于一般的运维人员来说，常常会在一不留神下而抓狂或查找半天才发现是因为多了或少了一个空格或某语包括号不匹配而导致的错 误，不但大大的浪费了脚本维护人员的工作时间，还可能影响到工程进度甚至项目的发布里程碑等。当然，对于非纯Geek来说，最重要的还是影响心情，特别是 对于一些较复杂的脚本需求，更是必须小心谨慎，因此越来越多的开发人员必须借助于Python、Perl、Ruby等相关的脚本语言来实现，但是常由于平 台的特性或者语言的限制，对系统级的命令调用或者异常处理有限制，最终解决起来并不是十分优雅。 NodeJS的出现或许会给这些开发人员带来一些新的选择。 NodeJS从诞生起发展非常迅速，社区活动非常活跃，目前扩展模块达到1500多个，并且每天都有不同的模块提交。它是构建在JavaScript引擎V8之上的JavaScript环境，它采用基于单线程的异步事件驱动I/O模型，具有非常高的性能， 同时能够支持多种平台。日前国外的很多大的软件或互联网公司如Microsoft,ebay,yahoo等都在使用NodeJS，国内的网易，淘宝，新浪 等互联网企业也有很多分享和成功的线上案例应用。言归正传，希望下文的内容能给不熟悉或不喜欢nix平台Shell脚本开发或WIN平台下的批处理编写的 工程师带来一些帮助，为简单起见，本文采用Nix平台为示例，WIN平台的用户请参考自行修改或与作者联系。 首先，我承认Shell脚本中系统命令再加上sed,awk等瑞士军刀在一起工作已经相当强大，如果你想了解NodeJS的强大之处和如何结合Shell产生强大的工作效率，并且还能具有很好的灵活性，那就让我们继续旅程吧： 示例 先看一段简单的采用Shell 脚本执行一段命令得到其执行时间的脚本diffa.sh： #!/bin/bash START=$(date +%s) # prepare things du -m /home &#62; /tmp/output # done  END=$(date +%s) DIFF=$(( $END - $START )) echo "化了$DIFF 秒搞定" chmod +x &#8230; <a href="http://chainding.wordpress.com/2012/02/21/%e5%bd%93shell%e9%81%87%e4%b8%8a%e4%ba%86nodejs/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1703&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2><strong>序言</strong></h2>
<p>无论在传统的企业级系统维护还是在互联网运维中，Shell脚本的编写与维护常常必不可少，在系统管理员或开发人员工作中占比重比较大的一部分。 Shell脚本的严格语法格式对于一般的运维人员来说，常常会在一不留神下而抓狂或查找半天才发现是因为多了或少了一个空格或某语包括号不匹配而导致的错 误，不但大大的浪费了脚本维护人员的工作时间，还可能影响到工程进度甚至项目的发布里程碑等。当然，对于非纯Geek来说，最重要的还是影响心情，特别是 对于一些较复杂的脚本需求，更是必须小心谨慎，因此越来越多的开发人员必须借助于Python、Perl、Ruby等相关的脚本语言来实现，但是常由于平 台的特性或者语言的限制，对系统级的命令调用或者异常处理有限制，最终解决起来并不是十分优雅。 NodeJS的出现或许会给这些开发人员带来一些新的选择。</p>
<p><a href="http://www.nodejs.org/">NodeJS</a>从诞生起发展非常迅速，社区活动非常活跃，目前扩展模块达到1500多个，并且每天都有不同的模块提交。它是构建在JavaScript引擎<a href="http://code.google.com/p/v8/">V8</a>之上的JavaScript环境，它采用基于单线程的异步事件驱动I/O模型，具有非常高的<a href="http://code.google.com/apis/v8/benchmarks.html">性能</a>， 同时能够支持多种平台。日前国外的很多大的软件或互联网公司如Microsoft,ebay,yahoo等都在使用NodeJS，国内的网易，淘宝，新浪 等互联网企业也有很多分享和成功的线上案例应用。言归正传，希望下文的内容能给不熟悉或不喜欢nix平台Shell脚本开发或WIN平台下的批处理编写的 工程师带来一些帮助，为简单起见，本文采用Nix平台为示例，WIN平台的用户请参考自行修改或与作者联系。</p>
<p>首先，我承认Shell脚本中系统命令再加上sed,awk等瑞士军刀在一起工作已经相当强大，如果你想了解NodeJS的强大之处和如何结合Shell产生强大的工作效率，并且还能具有很好的灵活性，那就让我们继续旅程吧：</p>
<h2><strong>示例</strong></h2>
<p>先看一段简单的采用Shell 脚本执行一段命令得到其执行时间的脚本diffa.sh：</p>
<pre>#!/bin/bash
START=$(date +%s)
# prepare things
du -m /home &gt; /tmp/output
# done  END=$(date +%s)
DIFF=$(( $END - $START ))
echo "化了$DIFF 秒搞定"
chmod +x diff.sh
sh diff.sh</pre>
<p>执行上面的脚本后，结果如下：</p>
<p>化了0 秒搞定</p>
<p>用户首次执行一般会耗时几秒，多次执行的结果可能会在0-1秒之间随机显示。因为du的输出重定向，整个脚本的执行时间非常短，并且脚本中采用的是 秒数级别的范围，如果需要得到这个脚本的准确执行时间只能用纳秒来进行，并在Shell做除法运算，把脚本修改一下diffb.sh。</p>
<pre>START=$(date +%s%N)
du -m /home/ &gt;/tmp/output
END=$(date +%s%N)
DIFF=$(($END - $START))
SUM=`expr $DIFF / 1000000`
echo "化了$SUM MS搞定"</pre>
<p>执行一下上面的diffb 脚本就可以得到运行的结果了，需要提醒的是上面的脚本中各表达式的格式都是即定的，如果开发人员不小心多了一个空格或少了一空格，都将导致脚本错误。下面 采用NodeJS来试试看，首上下载与安装NodeJS环境，过程非常简单，具体请参考官方网站或直接apt-get 之类的操作。编写如下diffc.js脚本：</p>
<pre>#!/usr/bin/env node

var util = require('util'),
    spawn = require('child_process').spawn,
    ls = spawn('du', ['-m', '/home/']);
var start = +new Date();
ls.stdout.on('data', function (data) {
    //console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});
ls.on('exit', function (code) {
    var end = +new Date();
    console.log(end - start);
});</pre>
<p>注：上面require中引用的都是系统内置模块，spawn的格式为spawn(command, [args], [options])，其他请参阅官方文档。</p>
<p>同样，chmod +x 对脚本赋予执行权限，执行脚本./diff.js，结果如下：</p>
<pre>1113</pre>
<p>上面示例中显示的时间直接是毫秒级别，代码格式没有严格的限制，流程的控制也会更加灵活，特别是在异常情况下，可以根据用户的需求处理更小的细节。 当然，我承认这个示例需求有些诡异，但是做这样的比较，并不是说要二者一决高下，只是换一种前端攻城师喜欢的方法去实现一些系统运维需求。在这里 NodeJS脚本本身也是依赖于系统Shell的强大基础之上。</p>
<h2><strong>深入一点</strong></h2>
<p>以上示例可以看到，在Shell环境中，NodeJS内置模块实现常用的功能是即方便又灵活，Linux Shell环境中比较强大的功能之一就是支持输入输出重定向功能，用符号&lt;和&gt;来表示。0、1和2分别表示标准输入、标准输出和标准错误信息 输出,用来指定需要重定向的标准输入或输出，比如 2&gt;error.log表示将错误信息输出到文件err.log中。类似的，NodeJS中可以直接采用超复杂的命令来搞定，一般对于我们这些非系 统管理员有一定的难度，下面引入强大点的模块<a href="https://github.com/polotek/procstreams">procstreams</a>，它可以实现输出流重定向等功能，首先用户需要执行npm install procstreams安装模块，编写示例如下wc.js：</p>
<pre>#!/usr/bin/env node

var p = require('procstreams');
p('cat app.log').pipe('wc -l').data(function (stdout, stderr) {
    console.log(stdout);
});</pre>
<p>wc.js脚本代码是借助于Shell命令实现统计app.log的行数，相当于Shell环境中的cat app.log | wc -l功能，输出的结果可以再根据需要再进行灵活处理，另外它还支持then、and和or等操作，类似Shell脚本中的;、&amp;&amp; 和||操作。在实现复杂或交互的功能时，甚至可以完全采用交互的方式进行操作输入。</p>
<p>另外，用户执行脚本的时候还需要处理复杂一些的参数对应，<a href="https://github.com/substack/node-optimist">node-optimist</a> 及 <a href="https://github.com/isaacs/nopt">isaacs&#8217;s nopt</a> 之类的模块可以非常简单的帮助攻城师实现这样的功能，如实现根据用户的输入的参数执行需要的系统命令，并可以做相关的逻辑处理的opt.js：</p>
<pre>#!/usr/bin/env node

var util = require('util'),
    spawn = require('child_process').spawn;
var argv = require('optimist').argv;
var cmd = argv.cmd;
var args = argv.args
var option = argv.opt
var ls = spawn(cmd, [args, option]);
ls.stdout.on('data', function (data) {
    if (!data || !! data) console.log(' i believe it');
});
ls.stderr.on('data', function (data) {
    console.log('It\'s a miracle!');
});
ls.on('exit', function (code) {
    console.log('it.justHappened();');
});</pre>
<p>用户使用如下对应格式执行代码：./opt.js &#8211;cmd=ls &#8211;args=/m &#8211;opt=/home,然后只需要在代码相关处添加对应的逻辑代码，把注意力放在业务层，采用js的流程控制实现业务逻辑的分离。</p>
<h2><strong>实际应用</strong></h2>
<p>在企业线上或系统运维中，常需要对一些进程进行监控和报警，以便通知相关系统管理人员，如下Shell脚本 agenta.sh实现了对tomcat6进程监控，如果不存在自动重启。</p>
<pre>#!/bin/sh
pid=`ps aux| grep "tomcat6" | grep -v grep | sed -n  '1P' | awk '{print $2}'`
if [ -z $pid ]; then
        echo "begin restart,please waiting..."
        sudo /etc/init.d/tomcat6 restart
        exit 1
else
        echo -e "exist ,don't need restart"
fi</pre>
<p>脚本编写人员在经过一番努力与折腾后，完成了代码编写与调试工作，然后需要通过系统的crontab功能添加如0-59/2 * * * * sh agent.sh的定时任务，如果系统管理员把crontab的权限给禁用了，那就需要得到系统管理员的帮助了。下面使用Nodejs来实现同样的功能， 先假设读者对grep、sed和awk等常用命令的使用有大概了解，代码如下agentb.js：</p>
<pre>var p = require('procstreams');
var exec = require('child_process').exec;
setInterval(function () {
    exec("ps aux| grep 'tomcat6' | grep -v grep | sed -n  '1P' | awk '{print $2}'", function (err, output) {
        if (err) throw err;
        if (output.length &gt; 0) console.log('exist,don\'t need restart');
        else exec('sudo /etc/init.d/tomcat6 restart', function (err2, out2) {});
    })
}, 1000 * 60 * 2);</pre>
<p>示例代码中setInterval的函数的作用通过设置一个回调函数和间隔执行时间来实现定时监控。运行代码后，同样可以实现进程监控的功能，也许 你会说上面的Shell命令还是很多的。因为你觉得直接使用Shell脚本会更简单，可是如果你经历过为空格或配置之类的调试过程，或者需求更加复杂时， 采用NodeJS会让你觉得非常轻松。更重要的是，编写脚本后，在执行脚本时你可以直接通过chrome debug 工具设置断点与单步调试，或者在chrome 浏览器上进行图形化调试等操作，具体请参考node-inspector。现在，agentb.js代码中的Shell命令还是太长了太复杂，调试起来也 不太方便，使用procstreams做一下简化，实现代码agentc.js如下：</p>
<pre>var p = require('procstreams');
setInterval(function () {
    p("ps aux").pipe('grep tomcat6').pipe('grep -v grep').pipe('sed -n 1P').pipe("awk $2")
	   .data(function (stdout, stderr) {
        if (stderr) throw stderr;
        if (stdout.length &gt; 0) {
            console.log('exist,don\'t need restart');
        } else {
            console.log('restart,waiting...');
            p('sudo /etc/init.d/tomcat6 restart', function (stdout, stderror) {
                console.log(stdout);
            });
        }
    });
}, 1000 * 60 * 2);</pre>
<p>agentc代码中通过pipe操作可以实现对每个步骤的输入进行详细的跟踪与调试，但是脚本中还是需要对系统的很多内置命令有大概的了解，需要对 操作系统的相关功能或语法格式比较熟悉，使用起来还是有点不习惯。攻城师都喜欢编程时能控制住自己把握的，或者在使用简单的命令的情况下，就能实现需要的 功能，再次简化代码后得到agentd.js</p>
<pre>var p = require('procstreams');
var serviceName = 'tomcat6';
var interval = 1000 * 60 * 2;
setInterval(function () {
    p("ps aux").pipe('grep ' + serviceName).data(function (stdout, stderr) {
        if ( !! stdout &amp;&amp; stdout.indexOf(serviceName) == 0) {
            console.log('exist,don\'t need restart');
        } else {
            console.log('restart,waiting...');
            p('sudo /etc/init.d/tomcat6 restart', function (stdout, stderror) {});
        }
    });
}, interval);</pre>
<p>在经过这次修改之后，对系统命令的掌握程度要求明显更低了，题外话，用户对系统命令了解的越详细越好，但如果使用简单即美的指导去实现同样的需求，何乐而不为。代码中serviceName 和interval 参数可以通过<a href="https://github.com/substack/node-optimist">node-optimist</a>模块动态给定，这样就可以实现一份代码监控多个进程，并且不需要系统管理员的帮助去添加定时任务的操作。当然，希望这样操作不会影响系统功能或在权限范围内。</p>
<h2><strong>总结</strong></h2>
<p>尽管Linux的Shell环境编程非常的强大，但是编写或调试Shell脚本时常令人抓狂不已，也没有很好的图形化调试工具。当然脚本较复杂时， 尤其在需求跨平台时，脚本改动比常较大，日前，开发人员需要根据平台的不同，准备多套脚本代码，如tomcat，apache等，如果采用简单Shell 和NodeJS结合编程，或许只需要把平台相关的命令提取出来，只需较少改动就能实现跨平台，可以大大提高工作效率与减少浪费攻城师的时间。个人认为，采 用二者结合的方式具有以下优点：</p>
<ol>
<li>采用v8引擎，轻量级模块，较好跨平台性，较底层的系统操作，在系统监控运维等方面具有明显优势，</li>
<li>采用事件驱动非阻塞IO模型，无线程上下文切换和锁操作，， 可利用多核CPU计算，性能较高，</li>
<li>开放源代码，社区活跃，模块丰富，底层的扩展实现也较方便。</li>
</ol>
<p>随着NodeJS不断发展和成熟，国内外厂商越来越多的成功案例与分享，在企业级和互联网系统应用开发和维护中具有更广阔的前景。</p>
<h2>参考资料</h2>
<ul>
<li><span style="text-decoration:underline;"><a href="http://nodejs.org/">http://NodeJS.org</a></span></li>
<li><a href="http://www.infoq.com/cn/articles/tyq-nodejs-event">http://www.infoq.com/cn/articles/tyq-NodeJS-event</a></li>
<li><span style="text-decoration:underline;"><a href="http://www.catonmat.net/blog/">http://www.catonmat.net/blog/</a></span></li>
<li><span style="text-decoration:underline;"><a href="http://www.cnodejs.org/">http://www.cNodeJS.org</a></span></li>
</ul>
<h2><strong>关于作者</strong></h2>
<p>尧飘海，开发工程师，现就职于网易杭州研究院，目前和小组正致力于NodeJS之上的移动游戏引擎和系统运维等方面的研发工作，对服务端的架构设计与应用感兴趣。个人Github地址：<a href="http://github.com/piaohai">http://github.com/</a><span style="text-decoration:underline;">piaohai</span>。</p>
<hr />
<p>感谢<a href="http://www.infoq.com/cn/bycategory.action?authorName=%E9%83%91%E6%9F%AF">郑柯</a>对本文的审校。</p>
<p>给InfoQ中文站投稿或者参与内容翻译工作，请邮件至<a href="mailto:editors@cn.infoq.com">editors@cn.infoq.com</a>。也欢迎大家通过新浪微博（<a href="http://www.weibo.com/infoqchina">@InfoQ</a>）或者腾讯微博（<a href="http://t.qq.com/infoqchina">@InfoQ</a>）关注我们，并与我们的编辑和其他读者朋友交流。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1703/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1703/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1703/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1703&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/21/%e5%bd%93shell%e9%81%87%e4%b8%8a%e4%ba%86nodejs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
		<item>
		<title>微软宣布Entity Framework 5的性能有了显著提升</title>
		<link>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e5%ae%a3%e5%b8%83entity-framework-5%e7%9a%84%e6%80%a7%e8%83%bd%e6%9c%89%e4%ba%86%e6%98%be%e8%91%97%e6%8f%90%e5%8d%87/</link>
		<comments>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e5%ae%a3%e5%b8%83entity-framework-5%e7%9a%84%e6%80%a7%e8%83%bd%e6%9c%89%e4%ba%86%e6%98%be%e8%91%97%e6%8f%90%e5%8d%87/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:48:54 +0000</pubDate>
		<dc:creator>chainding</dc:creator>
				<category><![CDATA[DB]]></category>

		<guid isPermaLink="false">http://chainding.wordpress.com/?p=1701</guid>
		<description><![CDATA[微软宣布即将到来的Entity Framework 5相比EF4在性能上会有67%的提升。 根据ADO.NET团队博客上 的介绍，使用这个版本EF的应用程序之所以性能提升，要部分归功于LINQ to Entities查询的自动编译。自动编译功能一直都是EF框架中的一部分，只是需要开发人员调用CompiledQuery.Compile才能够使 用。现在，EF 5会自动处理这步工作：当某个查询首次运行时，它会被编译并缓存，从而使得后续请求可以避免重新完全编译。 EF 4为ESQL（嵌入式SQL）查询使用了编译后的查询缓存，而EF 5将该功能扩展到了LINQ to Entity查询中。一旦缓冲中超过800个编译后的查询，某个回收算法将开始生效并以每分钟一次的周期清理缓存。 实体依据LFRU（最近最早使用）原理从缓存中移除。 使用编译后的LINQ to SQL查询同样能够提升性能。ADO.NET团队提到在他们的内部测试中，通过对查询参数评估方式的一些改动带来了600%的性能提升。 尽管.NET交付和EF的发布两者之间相互独立，它们还是公用了一些核心库，包括System.Data.Entity.dll、System.Data.Entity.Design.dll和System.Web.Entity.dll。这样的好处在于使用EF 4.0的开发人员只要升级到.NET框架4.5，就应当可以体验到性能的提升。 由于EF5中的某些新特性（如枚举支持以及空间数据类型）依赖于.NET框架4.5中的功能，因此在.NET 4.5发布之前没有太多指望能使用到它们。此外，微软在本月初宣布推出了EF4.3。 查看英文原文：Microsoft Reports Significant Performance Improvements in Entity Framework 5<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1701&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>微软宣布即将到来的Entity Framework 5相比EF4在性能上会有67%的提升。</p>
<p>根据<a href="http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0-performance-improvements.aspx">ADO.NET团队博客</a>上 的介绍，使用这个版本EF的应用程序之所以性能提升，要部分归功于LINQ to Entities查询的自动编译。自动编译功能一直都是EF框架中的一部分，只是需要开发人员调用CompiledQuery.Compile才能够使 用。现在，EF 5会自动处理这步工作：当某个查询首次运行时，它会被编译并缓存，从而使得后续请求可以避免重新完全编译。</p>
<blockquote><p>EF 4为ESQL（嵌入式SQL）查询使用了编译后的查询缓存，而EF 5将该功能扩展到了LINQ to Entity查询中。一旦缓冲中超过800个编译后的查询，某个回收算法将开始生效并以每分钟一次的周期清理缓存。 实体依据LFRU（最近最早使用）原理从缓存中移除。</p></blockquote>
<p>使用编译后的LINQ to SQL查询同样能够提升性能。ADO.NET团队提到在他们的内部测试中，通过对查询参数评估方式的一些改动带来了600%的性能提升。</p>
<p>尽管<a href="http://www.infoq.com/news/2011/11/Entity-Framework-42">.NET交付和EF的发布</a>两者之间相互独立，它们还是公用了一些核心库，包括System.Data.Entity.dll、System.Data.Entity.Design.dll和System.Web.Entity.dll。这样的好处在于使用EF 4.0的开发人员只要升级到<a href="http://msdn.microsoft.com/en-us/netframework/hh403373">.NET框架4.5</a>，就应当可以体验到性能的提升。</p>
<p>由于EF5中的某些新特性（如枚举支持以及空间数据类型）依赖于.NET框架4.5中的功能，因此在.NET 4.5发布之前没有太多指望能使用到它们。此外，微软在本月初<a href="http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-released.aspx">宣布推出了EF4.3</a>。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/02/EF-5"><strong>Microsoft Reports Significant Performance Improvements in Entity Framework 5</strong></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chainding.wordpress.com/1701/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chainding.wordpress.com/1701/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chainding.wordpress.com/1701/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chainding.wordpress.com&amp;blog=16185508&amp;post=1701&amp;subd=chainding&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chainding.wordpress.com/2012/02/21/%e5%be%ae%e8%bd%af%e5%ae%a3%e5%b8%83entity-framework-5%e7%9a%84%e6%80%a7%e8%83%bd%e6%9c%89%e4%ba%86%e6%98%be%e8%91%97%e6%8f%90%e5%8d%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/216433bac45880aa2be6303c34fffa3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">chainding</media:title>
		</media:content>
	</item>
	</channel>
</rss>
