<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title><![CDATA[关注iphone开发、资讯、软件]]></title>
<link><![CDATA[http://www.itivy.com/iphone]]></link>
<description><![CDATA[]]></description>
<language><![CDATA[zh-cn]]></language>
<copyright><![CDATA[]]></copyright>
<webMaster><![CDATA[]]></webMaster>
<generator><![CDATA[]]></generator>
<Image><![CDATA[]]></Image>
<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/18/634729762320220086.html]]></link>
<title><![CDATA[用非响应式设计构建跨端Web App]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Fri, 18 May 2012 23:16:57 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">媒介查询很伟大，但是</span><span style="color:#5FA4A0;">...</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;">&nbsp; &nbsp; &nbsp; &nbsp; 对于</span><span style="color:#222222;">Web</span><span style="color:#222222;">开发人员来说，如果要通过对样式表进行微调来为不同尺寸设备的用户提供更好的体验，媒体查询（</span><span style="color:#222222;">Media Queries</span><span style="color:#222222;">）非常棒。</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">媒体查询实质上可以根据屏幕的尺寸来自定义网站的</span><span style="color:#222222;">CSS</span><span style="color:#222222;">。</span><span style="color:#222222;">在你</span><span style="color:#222222;">深入这篇文章之前，可以更多的了解</span><a href="http://www.html5rocks.com/mobile/responsivedesign"><span style="color:#508B88;">响应式网页</span><span style="color:#508B88;">设计</span></a><span style="color:#222222;">（还记得《</span><a href="file:///C:/Users/jiangyujie/Desktop/%E7%94%A83%E4%B8%AA%E6%AD%A5%E9%AA%A4%E5%AE%9E%E7%8E%B0%E5%93%8D%E5%BA%94%E5%BC%8F%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1">用3个步骤实现响应式网页设计</a><span style="color:#222222;">》这篇文章吗？）</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">，并且看看使用媒介查询的一些好例子：</span><span style="color:#222222;">&nbsp;</span><a href="http://mediaqueri.es/"><span style="color:#508B88;">mediaqueri.es</span></a><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>像布拉德</span><span style="color:#222222;">·</span><span style="color:#222222;">弗罗斯特在</span><a href="http://bradfrostweb.com/blog/web/responsive-web-design-missing-the-point/">以前文章</a><span style="color:#222222;">中指出的一样，调整界面只是构建移动</span><span style="color:#222222;">Web App</span><span style="color:#222222;">时需要考虑的众多事情之一。</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">如果你在构建移动</span><span style="color:#222222;">Web App</span><span style="color:#222222;">时只通过媒介查询自定义了布局，那么我们会有以下的问题：</span></p><p align="left" style="background:white;"></p><ul><li><span style="color: rgb(34, 34, 34); ">所有的设备都采用同样的</span><span style="color: rgb(34, 34, 34); ">JavaScript</span><span style="color: rgb(34, 34, 34); ">、</span><span style="color: rgb(34, 34, 34); ">CSS</span><span style="color: rgb(34, 34, 34); ">以及内容（图片、视频等），导致产生比预期更长的加载时间。</span></li><li><span style="color: rgb(34, 34, 34); ">所有的设备都有相同的初始</span><span style="color: rgb(34, 34, 34); ">DOM</span><span style="color: rgb(34, 34, 34); ">结构，可能迫使开发人员编写过于复杂的</span><span style="color: rgb(34, 34, 34); ">CSS</span><span style="color: rgb(34, 34, 34); ">样式。</span></li><li><span style="color: rgb(34, 34, 34); background-color: white; ">对于为每个设备指定自定义的交互来说缺乏弹性。</span></li></ul><p align="left" style="background:white;"><strong><span style="color: rgb(34, 34, 34); ">除媒介查询外，</span><span style="color:#222222;">Web APP</span><span style="color:#222222;">还需要更多</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>不要误会我的意思。我并不是讨厌通过媒介查询进行响应式设计，并绝对认为它占有一席之地。此外，上述的一些问题可以通过例如</span><a href="http://www.alistapart.com/articles/responsive-images-how-they-almost-worked-and-what-we-need/"><span style="color:#508B88;">响应</span><span style="color:#508B88;">式</span><span style="color:#508B88;">图像</span></a><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">，动态脚本加载等来解决。但是就某一点而言，你也许会发现自己做了太多的增量调整，而可能提供不同的版本效果会更佳。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>当构建的界面在复杂性方面有所增加，同时被单页的</span><span style="color:#222222;">Web App</span><span style="color:#222222;">所吸引，你会想要为每个设备类型自定义用户界面做更多事情。本文将教你如何用最少的努力实现这样的自定义。通用的方法包括将访问的设备划分到正确的分类，并且为该设备提供合适的版本，同时最大限度地提高代码在版本之间的重用。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">针对哪些设备类型？</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>现在有成千上万的互联网设备，几乎每一个都有浏览器。复杂之处在于它们的差异性：苹果笔记本，</span><span style="color:#222222;">Windows</span><span style="color:#222222;">工作站，有触摸输入、滚轮、键盘和语音输入的</span><span style="color:#222222;">iPhone</span><span style="color:#222222;">手机，</span><span style="color:#222222;">iPad</span><span style="color:#222222;">和</span><span style="color:#222222;">Android</span><span style="color:#222222;">手机，带压力传感器的设备，智能手表，烤面包机以及冰箱等等。它们无处不在，而且有些非常罕见。</span></p><p align="center"><img src="/Upload/EditorImage/image/iphone/201205/634729779620367200variety.png" alt="" /><br /></p><p align="center">各种各样的设备（<a href="http://www.flickr.com/photos/brad_frost/6164723945/in/set-72157627712478230/">来源</a>）</p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>为了创造良好的用户体验，你需要知道谁是你的用户以及他们使用的是什么设备。如果你为桌面用户创建了一个使用鼠标和键盘的界面，并将它展示给智能手机用户，这将是一个极大的失败，因为它设计在另一个屏幕大小和输入方式之上。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这里有两种极端的方法：</span></p><p align="left" style="background:white;"><span style="color:#222222;">1.&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">创建一个为所有设备工作的版本。用户体验将因此受到影响，因为不同的设备有不同的设计考虑。</span></p><p align="left" style="background:white;"><span style="color:#222222;">2.&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">为每一个要支持的设备各自创建一个版本。这个工作将永远进行下去，因为你将为你的应用构建太多版本。此外，当新的智能手机诞生（大约每周都有）时，你将被</span><span style="color:#222222;">​​</span><span style="color:#222222;">迫再次创建一个版本。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这里有一个基本的权衡：有更多的设备类别时，你可以提供更好的用户体验，但是需要做更多设计，实现和维护的工作。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>为每种设备创建单独的版本对于性能原因来说也许是一个好办法，或者你想为不同的设备创建的版本差异甚巨。否则，</span><span style="color:#222222;">&nbsp;</span><a href="http://www.html5rocks.com/mobile/responsivedesign"><span style="color:#508B88;">响应式</span><span style="color:#508B88;">网页设计</span></a><span style="color:#222222;">会是完全合理的做法。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><strong>一个潜在的方案</strong></span></p><p align="left" style="background:white;"><span style="color:#222222;">这里有一个妥协方案：将设备分类，并为每个种类提供最佳体验。选择什么类别取决于你的产品和目标用户。下面是一个示例，能够很好的跨越现今流行的网络设备。</span></p><p align="left" style="background:white;"><span style="color:#222222;">1.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">小屏幕</span><span style="color:#222222;">+</span><span style="color:#222222;">触摸（主要是手机）</span></p><p align="left" style="background:white;"><span style="color:#222222;">2.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">大屏幕</span><span style="color:#222222;">+</span><span style="color:#222222;">触摸（主要是平板）</span></p><p align="left" style="background:white;"><span style="color:#222222;">3.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">大屏幕</span><span style="color:#222222;">+</span><span style="color:#222222;">键盘</span><span style="color:#222222;">/</span><span style="color:#222222;">鼠标（主要是台式机</span><span style="color:#222222;">/</span><span style="color:#222222;">笔记本电脑）</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这只是许多可能的分类方式之一，但在写作时有很大的意义。上面的列表中缺少的是没有触摸屏的移动设备（例如功能手机，一些专用的电子书阅读器）。然而，这些设备大部分都有键盘或者屏幕阅读软件，如果你的站点精心设计，可以在上面工作良好。</span></p><p align="left" style="background:white;"><strong><span style="color:#222222;">特定外形的</span><span style="color:#222222;">WEB App</span><span style="color:#222222;">例子</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>有许多针对不同因素提供不同</span><span style="color:#222222;">Web</span><span style="color:#222222;">服务版本的例子。谷歌搜索是这样，</span><span style="color:#222222;">Facebook</span><span style="color:#222222;">也是。这主要是考虑了到性能（获取资源，渲染页面）和更通用的用户体验。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>在</span><span style="color:#222222;">Native App</span><span style="color:#222222;">的世界里，许多开发者选择为不同种类的设备设计产品。</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">例如，</span><u><span style="color:#508B88;">Flipboard</span></u><span style="color:#222222;"> iPad</span><span style="color:#222222;">版本的</span><span style="color:#222222;">UI</span><span style="color:#222222;">与</span><span style="color:#222222;">iPhone</span><span style="color:#222222;">版本差异很大。</span><span style="color:#222222;">平板版本为</span><span style="color:#222222;">双手使用和水平旋转进行了优化，而手机版本关注单手交互和垂直翻转的体验。许多其他的</span><span style="color:#222222;">iOS</span><span style="color:#222222;">应用在手机和平板上也有明显的不同，例如</span><a href="http://culturedcode.com/things/">Things</a><span style="color:#222222;">（</span><span style="color:#222222;">Todo list</span><span style="color:#222222;">）和如下所示的</span><span style="color:#222222;">&nbsp;</span><a href="http://showyou.com/"><span style="color:#508B88;">Showyou</span></a><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">（社会化视频）：</span></p><p align="center"><img src="/Upload/EditorImage/image/iphone/201205/634729779642177969phone-tablet.png" alt="" /><br /></p><p align="center">针对手机和平板定制的UI</p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">方法＃</span><span style="color:#5FA4A0;">1</span><span style="color:#5FA4A0;">：服务器端检测</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>在服务器端，我们要了解正在处理的设备有更多的限制。</span><span style="color:#222222;">每次请求发送的</span><span style="color:#222222;">User-Agent</span><span style="color:#222222;">头所提供的</span><span style="color:#222222;">user agent</span><span style="color:#222222;">（用户代理）字符串可能</span><span style="color:#222222;">是最有用的线索。正因为如此，相同</span><span style="color:#222222;">UA</span><span style="color:#222222;">的嗅探方法会产生作用。事实上，</span><span style="color:#222222;">DeviceAtlas</span><span style="color:#222222;">和</span><span style="color:#222222;">WURFL</span><span style="color:#222222;">项目已经开始这样做了（并提供了一大堆设备有关的其他信息）。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>不幸的是目前这些项目都存在挑战。</span><span style="color:#222222;">WURFL</span><span style="color:#222222;">非常庞大，包含</span><span style="color:#222222;">20MB</span><span style="color:#222222;">的</span><span style="color:#222222;">XML</span><span style="color:#222222;">，可能为每个请求导致明显的服务器开销。</span><span style="color:#222222;">有项目因为性能方面的原因分割了这些</span><span style="color:#222222;">XML</span><span style="color:#222222;">。</span><span style="color:#222222;">DeviceAtlas</span><span style="color:#222222;">并不开源，需要付费使用。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这里有更简单，而且免费的替代品，例如</span><a href="http://detectmobilebrowsers.com/"><span style="color:#508B88;">检测移动浏览器</span></a><span style="color:#222222;">项目。当然，缺点是设备检测难免会不够全面。</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">此外，它只区分移动和非移动设备，以及通过</span><a href="http://detectmobilebrowsers.com/about">ad-hoc软件</a><span style="color:#222222;">提供有限的平板支持。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">方法</span><span style="color:#5FA4A0;">2</span><span style="color:#5FA4A0;">：客户端检测</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>使用特性检测，我们可以了解更多用户浏览器和设备的信息。我们需要确定的要点是，该设备是否具有触摸功能，以及它的屏幕是大是小。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>我们需要画一条线来区分屏幕大和小的触摸设备。例如像</span><span style="color:#222222;">5</span><span style="color:#222222;">寸</span><span style="color:#222222;">Galaxy Note</span><span style="color:#222222;">的边缘情况。下图显示了许多流行的</span><span style="color:#222222;">Andr​​oid</span><span style="color:#222222;">和</span><span style="color:#222222;">iOS</span><span style="color:#222222;">设备轮廓（附上相应的屏幕分辨率）。星号表示该设备可以支持双倍密度。虽然像素密度可能会增加一倍，</span><span style="color:#222222;">CSS</span><span style="color:#222222;">仍然会报告相同的大小。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>对</span><span style="color:#222222;">CSS</span><span style="color:#222222;">里像素点的快速介绍：手机</span><span style="color:#222222;">Web</span><span style="color:#222222;">页面上的</span><span style="color:#222222;">CSS</span><span style="color:#222222;">像素和</span><span style="color:#222222;">PC</span><span style="color:#222222;">上并</span><a href="http://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_not.html">不一样</a><span style="color:#222222;">。</span><span style="color:#222222;">iOS</span><span style="color:#222222;">视网膜设备引入了双倍像素密度（例如</span><span style="color:#222222;">iPhone 3GS</span><span style="color:#222222;">对</span><span style="color:#222222;">iPhone 4</span><span style="color:#222222;">，</span><span style="color:#222222;">iPad 2</span><span style="color:#222222;">对</span><span style="color:#222222;">iPad 3</span><span style="color:#222222;">）。视网膜设备上</span><span style="color:#222222;">Safari</span><span style="color:#222222;">浏览器的用户代理仍然报告相同的设备宽度，以免破坏网页。当其它设备（例如</span><span style="color:#222222;">Android</span><span style="color:#222222;">）采用了更高分辨率的显示屏时，它们也采用了相当的解决方案。</span></p><p align="center"></p><p align="center"><img src="/Upload/EditorImage/image/iphone/201205/634729779644947844devices.png" alt="" /><br /></p><p align="center">设备的分辨率</p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这种方式会更复杂，但是这对考虑同时兼容纵向和横向模式非常重要。我们不希望每次屏幕旋转时都重新加载页面或者加载额外的脚本，虽然我们可能要呈现不同的页面。</span></p><p align="left" style="background:white;"><span style="color:#222222;">下图中，正方形代表每个设备的最大尺寸，是叠加了纵向和横向轮廓的结果：</span></p><p align="center"><img src="/Upload/EditorImage/image/iphone/201205/634729779646729069devices-portland.png" alt="" /><br /></p><p align="center">横向+纵向分辨率</p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>通过将阈值设置为</span><span style="color:#222222;">650px</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">，我们将</span><span style="color:#222222;">iPhone</span><span style="color:#222222;">，</span><span style="color:#222222;">Galaxy Nexus</span><span style="color:#222222;">分类为小触摸屏设备，而将</span><span style="color:#222222;">iPad</span><span style="color:#222222;">，</span><span style="color:#222222;">Galaxy Tab</span><span style="color:#222222;">分类为</span><span style="color:#222222;">“</span><span style="color:#222222;">平板</span><span style="color:#222222;">”</span><span style="color:#222222;">。跨界的</span><span style="color:#222222;">Galaxy Note</span><span style="color:#222222;">在这种情况下被归类为</span><span style="color:#222222;">“</span><span style="color:#222222;">手机</span><span style="color:#222222;">”</span><span style="color:#222222;">，将采用手机布局。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>所以，一个合理的策略可能看起来像下面这样：</span></p><div style="background:white;"><p align="left" style="background:white;"></p><pre name="code" class="brush:html">if (hasTouch) {
  if (isSmall) {
    device = PHONE;
  } else {
    device = TABLET;
  }
} else {
  device = DESKTOP;
}</pre></div><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>赶快看看一个小的示例</span><a href="http://www.html5rocks.com/static/demos/cross-device/feature/index.html"><span style="color:#508B88;">特性</span><span style="color:#508B88;">检测方法</span></a><span style="color:#222222;">吧。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>另一种方法是使用用户代理嗅探来检测设备类型，基本上就是创建一套试探方法来匹配用户的</span><span style="color:#222222;">navigator.userAgent</span><span style="color:#222222;">。伪代码看起来像这样：</span></p><div style="background:white;"><p align="left" style="background:white;"></p><pre name="code" class="brush:html">var ua = navigator.userAgent;
for (var re in RULES) {
  if (ua.match(re)) {
    device = RULES[re];
    return;
  }
}</pre></div><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>马上来看看一个示例</span><span style="color:#222222;">-</span><a href="http://www.html5rocks.com/static/demos/cross-device/ua/index.html">UA检测方法</a><span style="color:#222222;">。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><strong>在客户端加载的说明</strong></span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>如果你正在服务器上检测用户代理，你可以在收到新请求时决定提供哪种</span><span style="color:#222222;">CSS</span><span style="color:#222222;">，</span><span style="color:#222222;">JavaScript</span><span style="color:#222222;">和</span><span style="color:#222222;">DOM</span><span style="color:#222222;">节点。然而，如果你正在采用客户端检测，情况则更为复杂。你有如下几种选择：</span></p><p align="left" style="background:white;"><span style="color:#222222;">1.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">重定向到特定设备类型的</span><span style="color:#222222;">URL</span><span style="color:#222222;">，其</span><span style="color:#222222;">​​</span><span style="color:#222222;">中包含该设备类型的版本。</span></p><p align="left" style="background:white;"><span style="color:#222222;">2.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">动态加载设备特定类型的内容。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>第一种方法很简单，需要采用</span><span style="color:#222222;">window.location.href = '/tablet'</span><span style="color:#222222;">这种</span><span style="color:#222222;">重定向的方式。然而，</span><span style="color:#222222;">URL</span><span style="color:#222222;">地址会附加设备类型的信息，所以你可能想使用</span><span style="color:#222222;">HTML5</span><span style="color:#222222;">的</span><a href="http://diveintohtml5.info/history.html"><span style="color:#508B88;">历史</span><span style="color:#508B88;">API</span></a>来<span style="color:#222222;">清理网址。不幸的是，这种方法涉及一个重定向，所以可能会很慢，尤其是在移动设备上。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>第二种方法实现更加复杂。你需要一种机制来动态加载</span><span style="color:#222222;">CSS</span><span style="color:#222222;">和</span><span style="color:#222222;">JS</span><span style="color:#222222;">，还有（根据浏览器而定）你可能无法实现例如自定义</span><span style="color:#222222;">&lt;meta viewport&gt;</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">这样的事</span><span style="color:#222222;">。此外因为没有重定向，你需要在一张页面上来响应请求。当然，你可以用</span><span style="color:#222222;">JavaScript</span><span style="color:#222222;">来实现，但是这可能导致性能缓慢和</span><span style="color:#222222;">/</span><span style="color:#222222;">或糟糕的代码，这一切都取决于你的应用程序。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">选择客户端或服务器方案</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>下面是在这些方法之间的权衡：</span></p><p align="left" style="background:white;"><strong><span style="color:#222222;">选择客户端</span></strong><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">：</span></p><p align="left" style="background:white;"></p><ul><li><span style="color: rgb(34, 34, 34); background-color: white; ">基于屏幕尺寸或可扩展性的方案和用户代理比起来更为长远。</span></li><li><span style="color: rgb(34, 34, 34); background-color: white; ">无需不断更新用户代理名单。</span></li></ul><p align="left" style="background:white;"><strong><span style="color:#222222;">选择服务器</span></strong><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">：</span></p><p align="left" style="background:white;"></p><ul><li><span style="color: rgb(34, 34, 34); background-color: white; ">能完全控制什么设备上加载什么版本。</span></li><li><span style="color: rgb(34, 34, 34); background-color: white; ">更好的性能：无需客户端重定向或动态加载。</span></li></ul><p align="left" style="background:white;"><span style="color: rgb(34, 34, 34); "><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>我个人的偏好是，最开始使用</span><span style="color:#222222;">device.js</span><span style="color:#222222;">和客户端检测。</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">随着应用的发展，如果发现客户端重定向有明显的性能问题，你可以很容易地删除</span><span style="color:#222222;">device.js</span><span style="color:#222222;">脚本，并在服务器上执行用户代理检测。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">DEVICE.JS</span><span style="color:#5FA4A0;">介绍</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>device.js</span><span style="color:#222222;">是一个起点，这样做基于语义，依靠媒介查询进行设备检测，从而无需特殊的服务器端配置，节省了需要实现用户代理字符串解析的时间和精力。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这个方法是在</span><span style="color:#222222;">&lt;head&gt;</span><span style="color:#222222;">标签的顶部用搜索引擎友好的标记（</span><span style="color:#222222;"><a href="http://blog.whatwg.org/the-road-to-html-5-link-relations#rel-alternate">linkrel=alternate</a></span><span style="color:#222222;">）声明你要提供的网站版本。</span></p><div style="background:white;"><p align="left" style="background:white;"></p><pre name="code" class="brush:html">&lt;link rel=&quot;alternate&quot; href=&quot;http://foo.com&quot; id=&quot;desktop&quot;
    media=&quot;only screen and (touch-enabled: 0)&quot;&gt;</pre></div><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>接下来，你可以采用服务器端</span><span style="color:#222222;">UA</span><span style="color:#222222;">检测和版本重定向，或者使用</span><span style="color:#222222;">device.js</span><span style="color:#222222;">脚本来执行基于功能的客户端重定向。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>更多详细信息，请参阅</span><u><span style="color:#508B88;"><a href="https://github.com/borismus/device.js">device.js项目</a></span>页面</u><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">，同时还有一个使用了</span><span style="color:#222222;">device.js</span><span style="color:#222222;">进行客户端重定向的</span><a href="http://borismus.github.com/device.js/sample/"><span style="color:#508B88;">测试</span><span style="color:#508B88;">应用</span></a><span style="color:#222222;">。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">建议：</span><span style="color:#5FA4A0;">MVC</span><span style="color:#5FA4A0;">的具体视图</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>现在你可能会想，我告诉你的是建立三个完全独立的应用程序，每个用于一种设备类型。不！</span><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">代码共享是关键。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>希望你已经使用了一个类</span><span style="color:#222222;">MVC</span><span style="color:#222222;">的框架，例如</span><span style="color:#222222;">Backbone</span><span style="color:#222222;">，</span><span style="color:#222222;">Ember</span><span style="color:#222222;">等等。如果你已经熟悉重点分解的原则，尤其是你的用户界面（视图层）应该与逻辑（模型层）分离。如果你对此还比较陌生，可以开始了解</span><span style="color:#222222;"><a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC的一些资源</a></span><span style="color:#222222;">和</span><a href="http://addyosmani.github.com/todomvc/"><span style="color:#508B88;">JavaScript</span><span style="color:#508B88;">中的</span><span style="color:#508B88;">MVC</span></a><span style="color:#222222;">&nbsp;</span><span style="color:#222222;">模式</span><span style="color:#222222;">。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>跨设备非常适合现有的</span><span style="color:#222222;">MVC</span><span style="color:#222222;">框架。你可以轻松地移动视图到独立的文件，为每个设备类型创建一个自定义视图。然后你就可以为所有设备使用除了视图层之外同样的代码。</span></p><p align="center"><img src="/Upload/EditorImage/image/iphone/201205/634729779649659343mvc.png" alt="" /><br /></p><p align="center">跨设备的MVC模式</p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>你的项目可能有以下的结构（当然，你可以自由选择对你应用最有意义的结构）：</span></p><div style="background:white;"><p align="left" style="background:white;"></p><pre name="code" class="brush:html">models/ (shared models)
  item.js
  item-collection.js

controllers/ (shared controllers)
  item-controller.js

versions/ (device-specific stuff)
  tablet/
  desktop/
  phone/ (phone-specific code)
    style.css
    index.html
    views/
      item.js
      item-list.js</pre><br /> </div><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>这种结构使你能够完全控制每个版本加载哪些内容，因为你必须为每个设备采用自定义的</span><span style="color:#222222;">HTML</span><span style="color:#222222;">，</span><span style="color:#222222;">CSS</span><span style="color:#222222;">和</span><span style="color:#222222;">JavaScript</span><span style="color:#222222;">。这非常强大，是开发跨端</span><span style="color:#222222;">Web App</span><span style="color:#222222;">最精简和最有效的方式，不会依赖于一些小的技巧，例如自适应图像。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>一旦你运行喜欢的构建工具，会把所有的</span><span style="color:#222222;">Javascript</span><span style="color:#222222;">和</span><span style="color:#222222;">CSS</span><span style="color:#222222;">合并和压缩到一个独立的文件里，以实现更快的加载速度，而输出的</span><span style="color:#222222;">HTML</span><span style="color:#222222;">页面看起来类似以下的形式（在手机上，使用</span><span style="color:#222222;">device.js</span><span style="color:#222222;">）：</span></p><div style="background:white;"><p align="left" style="background:white;"></p><pre name="code" class="brush:html">&lt;!doctype html&gt;
&lt;head&gt;
  &lt;title&gt;Mobile Web Rocks! (Phone Edition)&lt;/title&gt;

  &lt;!-- Every version of your webapp should include a list of all
       versions. --&gt;
  &lt;link rel=&quot;alternate&quot; href=&quot;http://foo.com&quot; id=&quot;desktop&quot;
      media=&quot;only screen and (touch-enabled: 0)&quot;&gt;
  &lt;link rel=&quot;alternate&quot; href=&quot;http://m.foo.com&quot; id=&quot;phone&quot;
      media=&quot;only screen and (max-device-width: 650px)&quot;&gt;
  &lt;link rel=&quot;alternate&quot; href=&quot;http://tablet.foo.com&quot; id=&quot;tablet&quot;
      media=&quot;only screen and (min-device-width: 650px)&quot;&gt;

  &lt;!-- Viewport is very important, since it affects results of media
       query matching. --&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot;&gt;

  &lt;!-- Include device.js in each version for redirection. --&gt;
  &lt;script src=”device.js”&gt;&lt;/script&gt;

  &lt;link rel=”style” href=”phone.min.css”&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;script src=”phone.min.js”&gt;&lt;/script&gt;
&lt;/body&gt;</pre></div><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>需要注意的是</span><span style="color:#222222;">(touch-enabled: 0)</span><span style="color:#222222;">媒介查询并不标准（只有</span><span style="color:#222222;">Firefox</span><span style="color:#222222;">通过</span><span style="color:#222222;">moz</span><span style="color:#222222;">前缀实现了），但是能够被</span><span style="color:#222222;">device.js</span><span style="color:#222222;">正确运行（感谢</span><a href="http://modernizr.com/"><span style="color:#508B88;">Modernizr.touch</span></a><span style="color:#222222;">）。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><strong>版本覆盖</strong></span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>设备检测有时候有误，在某些情况下，用户可能更喜欢在手机上采用平板布局（也许他们正在使用</span><span style="color:#222222;">Galaxy Note</span><span style="color:#222222;">），所以一定要向用户提供版本的选择。</span></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>通常的做法是提供一个从桌面到移动版本的链接。这很容易实现，</span><span style="color:#222222;">device.js</span><span style="color:#222222;">通过</span><span style="color:#222222;">device</span><span style="color:#222222;">的</span><span style="color:#222222;">GET</span><span style="color:#222222;">参数来支持此功能。</span></p><p align="left" style="background:white;"><strong><span style="color:#5FA4A0;">结论</span></strong></p><p align="left" style="background:white;"><span style="color:#222222;"><span style="color: rgb(34, 34, 34); text-align: -webkit-left; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>综上，当需要建立跨设备单页的用户界面时，并不适合响应式设计，我们可以这样做：</span></p><p align="left" style="background:white;"><span style="color:#222222;">1.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">挑选一系列设备分类进行支持，并为设备分类设定标准。</span></p><p align="left" style="background:white;"><span style="color:#222222;">2.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">建立你的</span><span style="color:#222222;">MVC</span><span style="color:#222222;">应用，把界面从代码库分离出来。</span></p><p align="left" style="background:white;"><span style="color:#222222;">3.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">使用</span><a href="https://github.com/borismus/device.js"><span style="color:#508B88;">device.js</span></a><span style="color:#222222;">进行客户端设备分类检测。</span></p><p align="left" style="background:white;"><span style="color:#222222;">4.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">当你准备好了时，为每个设备分类打包你的脚本和样式表。</span></p><p align="left" style="background:white;"><span style="color:#222222;">5.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#222222;">如果客户端重定向有性能问题，放弃</span><span style="color:#222222;">device.js</span><span style="color:#222222;">，并换到服务器端做</span><span style="color:#222222;">UA</span><span style="color:#222222;">检测。</span></p><p>译自：<a href="http://www.html5rocks.com/en/mobile/cross-device/">http://www.html5rocks.com/en/mobile/cross-device/</a></p><p>转载请注明：来自<a href="http://blog.csdn.net/hfahe">蒋宇捷的博客</a></p>
            
                    <div>来源：http://blog.csdn.net/hfahe/article/details/7581789</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/14/634726364585241533.html]]></link>
<title><![CDATA[LinkedIn和FT再次引发web app和native app之争]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 14 May 2012 23:55:04 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[<p>随着FT关闭了它的iOS app，Linkedln在iOS ‘frame’内使用HTML5，关于web app和native app的争论再度火热。国外科技媒体.net对争论内容进行了报导。以下即为报导内容：</p>
<div id="attachment_2817" class="wp-caption alignleft" style="width:260px;"><a href="/Upload/EditorImage/image/iphone/201205/63472635809789213211.jpg"><img class="size-full wp-image-2817" title="1" src="/Upload/EditorImage/image/iphone/201205/63472635809789213211.jpg" alt="" height="137" width="250" /></a><p class="wp-caption-text">使用iPad的FT 用户必须使用web app了，iOS app已经无法使用了</p>
</div>
<p>有两份报告展现了mobile web apps领域的一些发展趋势。<a href="http://paidcontent.org/2012/05/01/web-journey-complete-ft-switching-off-ios-app/">paidContent reports</a>&nbsp;报导，FT正在关闭它的iOS app，以<a href="http://www.netmagazine.com/news/ft-pulls-its-app-app-store-111362">完成从上个夏天就开始的过渡</a>。FT称，它无法在iOS app中维护其特性。另外，<a href="http://venturebeat.com/2012/05/02/linkedin-ipad-app-engineering/#s:1-linkedin-ipad">VentureBeat报导</a>，LinkedIn的iPad app是根据web标准之上的app搭建起来的框架。据Kiran Prasad，该公司移动小组的领头人说，这个app大量使用了Node.js，是一个“95%”的web app。Prasad 进一步说，“只要我们能将应用做得足够快，没人能够看出其中的区别。一切感觉起来都会很正常。”</p>
<p>Mobile开发者&nbsp;<a href="https://twitter.com/#!/markirby">Mark Kirby</a>告诉.net，这种向web apps的慢慢转变——尽管有些web apps仍然披着native apps的外衣——并不让人惊讶。他说：“iPad的功能越来越强大，HTML5 apps带给用户的体验已经可以和native apps的体验相媲美了。HTML5 apps的限制也许不在框架，而在于iPad执行Javascript代码的速度。现在，这个速度似乎是很快了。” Kirby补充说，web apps也可以绕开一些问题，比如“下载时间漫长且下载并不在后台运行、占用空间，使得你必须进行最小化管理，会为了节省空间而删掉你已经完成的部分。”</p>
<p>然而，iOS开发者<a href="https://twitter.com/#!/MATTGEMMELL">Matt Gemmell</a>&nbsp;告诉.net，性能并不一定就有那么重要，因为不论是native apps还是web apps，都可以是“足够好”。同样，native apps和web apps在“外观和感觉”上都可以是“足够好”。“对于我来说，关键点在于：native apps比起因为安全原因而被有意限制的web apps而言，功能丰富得多；native apps直接就拥有了native的外观以及感觉，web apps却必须模拟native apps的界面和行为；native apps拥有硬件以及OS/生态系统的整合，而web apps在这方面却远远落后于native apps。”</p>
<p>Gemmell说，需要注意到关注app的web框架（app-focused web frameworks）“倾向于花费大量气力去复制native apps原本就有的APIs和特性”，并且，现在的逆转也并不是真实的，“因为native apps已经可以做到web所能提供的一切了——毕竟，web浏览器本身就是apps。”尽管他承认有很多理由去开发web app而不是native app——比如跨平台部署、即时更新、保持掌控——但你不能否认开发web app所必须做出的牺牲和妥协。“在很多情况下，用户可能永远不会注意到两者的区别——这是最好的了。但是我们不能因此就自欺欺人地说web apps和native apps是可以完全等同的。”</p>
<p>原文链接：<a href="http://www.netmagazine.com/news/linkedin-and-ft-fuel-native-vs-web-row-121944">LinkedIn and FT fuel native vs web row</a></p>
<div>来源：http://www.webapptrend.com/2012/05/2816.html</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/14/634726363750989467.html]]></link>
<title><![CDATA[面向iOS的静态编译Ruby]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 14 May 2012 23:53:37 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <span style="color: rgb(204, 0, 0); font-family: Arial; font-size: 14px; line-height: 24px; text-align: left; text-indent: 28px; ">本文来源于我在InfoQ中文站翻译的文章，原文地址是：<a href="http://www.infoq.com/cn/news/2012/05/RubyMotion">http://www.infoq.com/cn/news/2012/05/RubyMotion</a></span><p>现在已经出现了一个静态编译的Ruby变体，用于构建面向iOS设备的应用。该语言叫做<a href="http://www.rubymotion.com/">RubyMotion</a>，来自于<a href="http://www.hipbyte.com/">HipByte</a>的这门语言与工具链完全遵循Apple的App Store指导方针。为了做到这一点，他们不得不去掉了JIT编译器与解释器，这会导致一些Ruby开发者觉得非常受限制。</p><p>其工具支持非常弱。RubyMotion并没有任何IDE支持。HipByte希望开发者使用自己的文本编辑器与命令行终端来完成大多数开发任务。</p><p>运行时则要好很多。RubyMotion完全支持多线程编程而不会遇到全局解释器锁的不便。它甚至为<a href="http://en.wikipedia.org/wiki/Grand_Central_Dispatch">Grand Central Dispatch</a>（Apple的用于并发与并行编程的基于任务的程序库）提供了一个接口。类似于Ruby本身，内存是由运行时管理的，但开发者依然可以访问原生以及第三方的Objective-C程序库。据推测，这种访问“是非常自然的且不会有任何性能上的代价”。将RubyMotion与Mono for Android相比，后者通常需要在Mono与Dalvik运行时之间编排对象。</p><p>RubyMotion的大部分内容都是基于MacRuby的。<a href="http://www.macruby.org/">MacRuby</a>是个已经持续了四年之久的项目，基于OS X与Objective-C提供了Ruby 1.9。MacRuby的上一版发布于2011年3月，版本号为0.10，这表明其发展速度并不如预期那么快。“MacRuby是由MacRuby团队版权所有的免费软件，基于Ruby的许可”。</p><p>RubyMotion本身并非开源项目。其零售价为每个开发者200美金，此外再没有其他的许可费与版权税。其零售价格包括一年的升级，这样其实际上是个订阅，每年需要升级一次。</p><p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/05/RubyMotion">A Statically Compiled Ruby for iOS</a></p>
            
                    <div>来源：http://blog.csdn.net/ricohzhanglong/article/details/7554795</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/14/634726358022768798.html]]></link>
<title><![CDATA[在iPhone上使用 OpenCV]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 14 May 2012 23:43:34 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <p>原文：http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en</p><p>Posted by Yoshimasa Niwaon 03/14, 2009</p><p><a href="http://img1.ph.126.net/ZW9a4KQ4slbW8vvWDpgdwQ==/1021472690500478451.jpg">图片</a></p><p>OpenCV是intel开发的计算机视觉库，例如我们可以用它轻易地实现面部识别。本文介绍如何在iOS中使用OpenCV，包括脚本的编译及一个demo示例程序。上面的截图就取自这个demo。</p><p><strong>OpenCV最新版本及所支持的iOSSDK</strong></p><p>OpenCV 最新版本为2.2.0,它支持iOSSDK 4.3, Xcode 4 (04/17/2011更新)</p><p><strong>开始</strong></p><p>所有代码和资源都是开放的，你可以从这里下载：</p><p>&nbsp;<a href="http://github.com/niw/iphone_opencv_test"><span style="color:blue;">my githubrepository</span></a>. </p><p>它包括一个已编译好的OpenCV库和头文件。你可以轻易就使用它。如果你安装了git，可以从github克隆整个存储库。否则，可从github下载压缩包并解压缩。</p><p>% git clone git://github.com/niw/iphone_opencv_test.git </p><p>获得源代码之后，用Xcode打开OpenCVTest项目并编译它。你可以用iPhone或者iPhone模拟器运行这个demo。</p><a name="extended"></a><strong>编译OpenCV库</strong><p><br /><a href="http://img1.ph.126.net/ZW9a4KQ4slbW8vvWDpgdwQ==/1021472690500478451.jpg"></a></p><p>你可以用gcc编译器直接从源代码编译生成OpenCV的二进制版本。为了节省你的时间，我写了一个脚本。由于iOSSDL不支持向.framework这样的动态链接库，所以我们不得不以“静态库”的方式将OpenCV连接到你的app中。</p><ol start="1" type="1"><li>编译OpenCV需要使用CMake。你可以用Homebrew或者MacPorts来安装CMake，即：</li></ol><p>Homebreww </p><p>brew install cmake </p><p>或者</p><p>MacPorts </p><p>sudo port install cmake –gui</p><p>如果你已经安装了最新的Java update，可能会问让你安装javadeveloper_10.6_10m3261.dmg。这是因为cmake需要用到jni.h，但在后来的Java update中已经把它删除了。在这里 <a href="https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20719"><span style="color:windowtext;">here for Mac OS X10.6</span></a> 可以下载到它（需要订阅Apple Developer Connection). 同时, 苹果将在MacOSX中抛弃Java <a href="http://www.macrumors.com/2010/10/21/apple-discontinuing-java-installation-packages-for-mac-os-x/"><span style="color:windowtext;">going to deprecateJava on MacOS X</span></a> (10/30/2010更新).</p><ol start="2" type="1"><li>从 sourceforge获得OpenCV。     我使用的是<a href="http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.2/OpenCV-2.2.0.tar.bz2/download">OpenCV-2.2.0.tar.bz2</a>.</li><li>在demo 项目的根目录解压缩: tar xjvf OpenCV-2.2.0.tar.bz2 </li><li>应用 iOS SDK补丁：</li></ol><p>cd OpenCV-2.2.0 </p><p>patch -p1 &lt; ../OpenCV-2.2.0.patch </p><ol start="5" type="1"><li>接下来为模拟器生成OpenCV静态库。所有的文件放在opencv_simulator目录。运行make命令时，最好在-j选项后面加上你的CPU内核数，这样可以节约一些时间。</li></ol><p>cd .. # Back to the top of demo project directory. </p><p>mkdir build_simulator </p><p>cd build_simulator </p><p>../opencv_cmake.sh Simulator ../OpenCV-2.2.0 </p><p>make -j 4 </p><p>make install </p><ol start="6" type="1"><li>然后为物理设备生成OpenCV静态库，并放在opencv_device目录下：</li></ol><p>cd .. # Back to the top of demo project directory. </p><p>mkdir build_device </p><p>cd build_device </p><p>../opencv_cmake.sh Device ../OpenCV-2.2.0 </p><p>make -j 4 </p><p>make install </p><p><strong>脚本</strong></p><p>opencv_cmake.sh 脚本带有一些参数。使用--help参数可以查看各种参数的用法。<strong>UIImage 和 IplImage 类型转换</strong></p><p>OpenCV使用IplImage结构，对应于iOS SDK的UIImage对象。这意味着，我们需要在二者间进行转换。幸运的是，我们通过用SDK提供的API来做。</p><p>UIImage à&nbsp;IplImage</p><p>// NOTE you SHOULD cvReleaseImage() for the return value when end ofthe code. </p><p>- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {</p><p>&nbsp; &nbsp;// Getting CGImage from UIImage</p><p>&nbsp;&nbsp; CGImageRefimageRef = image.CGImage;</p><p>&nbsp;&nbsp; CGColorSpaceRefcolorSpace = CGColorSpaceCreateDeviceRGB();</p><p>&nbsp;&nbsp; // Creatingtemporal IplImage for drawing</p><p>&nbsp;&nbsp; IplImage *iplimage= cvCreateImage(cvSize(image.size.width,image.size.height), IPL_DEPTH_8U,4&nbsp;&nbsp; );</p><p>&nbsp;&nbsp; // CreatingCGContext for temporal IplImage</p><p>&nbsp;&nbsp; CGContextRefcontextRef = CGBitmapContextCreate(iplimage-&gt;imageData, iplimage-&gt;width,iplimage-&gt;height, iplimage-&gt;depth, iplimage-&gt;widthStep, colorSpace,kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);</p><p>&nbsp;&nbsp; // Drawing CGImageto CGContext</p><p>&nbsp;&nbsp;CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width,image.size.height), imageRef);</p><p>&nbsp;&nbsp;CGContextRelease(contextRef);</p><p>&nbsp;&nbsp;CGColorSpaceRelease(colorSpace);</p><p>&nbsp;&nbsp; // Creating resultIplImage</p><p>&nbsp;&nbsp; IplImage *ret =cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);</p><p>&nbsp;&nbsp;cvCvtColor(iplimage, ret, CV_RGBA2BGR);</p><p>&nbsp;&nbsp;cvReleaseImage(&amp;iplimage);</p><p>&nbsp;&nbsp;&nbsp; return ret; </p><p>} </p><p>用完IplImage之后，记住用cvReleseImage来释放它。</p><p>IplImage àUIImage </p><p>// NOTE You should convert color mode as RGB before passing to thisfunction </p><p>- (UIImage *)UIImageFromIplImage:(IplImage *)image {</p><p>&nbsp;&nbsp; CGColorSpaceRefcolorSpace = CGColorSpaceCreateDeviceRGB();</p><p>&nbsp;&nbsp; // Allocating thebuffer for CGImage</p><p>&nbsp;&nbsp; NSData *data =[NSData dataWithBytes:image-&gt;imageData length:image-&gt;imageSize];</p><p>&nbsp;&nbsp; CGDataProviderRefprovider =&nbsp;&nbsp;&nbsp;&nbsp;CGDataProviderCreateWithCFData((CFDataRef)data);</p><p>&nbsp;&nbsp; // CreatingCGImage from chunk of IplImage</p><p>&nbsp;&nbsp; CGImageRefimageRef = CGImageCreate(image-&gt;width, image-&gt;height,&nbsp;&nbsp;&nbsp;&nbsp; image-&gt;depth,image-&gt;depth * image-&gt;nChannels, image-&gt;widthStep,&nbsp;&nbsp;&nbsp;&nbsp; colorSpace,kCGImageAlphaNone|kCGBitmapByteOrderDefault, provider, NULL, false,kCGRenderingIntentDefault);</p><p>&nbsp;&nbsp; // Getting UIImagefrom CGImage</p><p>&nbsp;&nbsp; UIImage *ret = [UIImageimageWithCGImage:imageRef];</p><p>&nbsp;&nbsp;CGImageRelease(imageRef);</p><p>&nbsp;&nbsp; CGDataProviderRelease(provider);</p><p>&nbsp;&nbsp;CGColorSpaceRelease(colorSpace);</p><p>&nbsp;&nbsp; return ret; </p><p>} </p><p>Ok，现在你可以在你的iPhone项目中使用OpenCV了。</p><p><strong>在你的项目中使用OpenCV库</strong></p><p>示例程序已经为OpenCV库的使用配置过了。如果你想在自己的项目中使用OpenCV，你需要在项目中加入以下配置。在demo程序中，你可以通过Xcode查看这些设置。</p><ul type="disc"><li>把OpenCV库目录中的libopencv_core.a加到项目中（用于模拟器或用于设备）。实际上，在这里Xcode并不关心是用于模拟器还是设备，因为它是通过库搜索路径来决定的。</li><li>加入Accelerate.framework框架。</li><li>选择有效的target，打开 build settings页。</li><ul type="circle"><li>把-lstdc++ 和 –lz加到Other Linker Flags中</li><li>把OpenCV的include目录添加到Header Search Paths（设备和模拟器）</li><li>把OpenCV的lib目录添加到Library Search Paths（设备和模拟器）</li></ul></ul><br />
            
                    <div>来源：http://blog.csdn.net/kmyhy/article/details/7560472</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/10/634722303429734463.html]]></link>
<title><![CDATA[Apache MINA实战之 牛刀小试]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Thu, 10 May 2012 07:18:12 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <p><strong>本文链接：http://blog.csdn.net/kongxx/article/details/7520259</strong><br /></p><p>Apache的MINA是一个被用来构建高性能和高可伸缩性应用程序的网络应用框架，它提供了一套统一的建立在Java NIO之上的事件驱动的异步API。</p><p>对于MINA框架的了解，MINA官方的几篇文章是必须要看的，如下：</p><p>* Application Architecture http://mina.apache.org/mina-based-application-architecture.html <br />* Server Architecture http://mina.apache.org/server-architecture.html <br />* Client Architecture http://mina.apache.org/client-architecture.html</p><p>其中几个主要的组件如下：</p><p>I/O Service - 用来处理I/O流，对于Server端就是IOAcceptor的实现类接受Client端的连接请求，对于Client端就是IoConnector的实现类来建立到Server端的连接。</p><p>I/O Filter Chain - 用来过滤或转化数据。对于Server端和Client端来说都是IoFilter接口的实现类，MINA自己内建了很多IoFilter接口的实现类。具体可以参考官方文档。</p><p>I/O Handler - 用来处理真正业务逻辑的类。对于Server端和Client端来说都是IoHandler接口的实现类，通常来说需要自己编写。</p><p><br /></p><p>由于Server端和Client端都是基于以上三个组件的，因此对于Server端和Client端编程来说就都有类似的代码结构。<br /></p><p>对于Server端来说： <br /></p><p>1. 创建I/O service - 这里就是创建IOAcceptor类监听端口。 <br /></p><p>2. 创建I/O Filter Chain - 这里就是告诉使用那些IoFilter。 <br />3. 创建I/O Handler - 自己的业务逻辑。&nbsp; <br /></p><p>对于Client端来说： <br /></p><p>1. 创建I/O service - 这里就是创建IOConnector类来建立到Server端的连接。 <br /></p><p>2. 创建I/O Filter Chain - 这里就是告诉使用那些IoFilter。 <br /></p><p>3. 创建I/O Handler - 自己的业务逻辑。<br /></p><p>下面来通过一个例子看看MINA是怎样工作的。由于大多数应用都是基于TCP/IP的应用，所以这里也就不再说UDP/IP了。</p><p>这里我使用了Maven来创建了一个简单java应用程序，具体步骤请参Maven的官方手册。这里只是将我用到的maven配置文件pom.xml列出，方便下面及后续文章使用。具体pom.xml文件内容如下：</p><pre name="code" class="brush:html">&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
	&lt;groupId&gt;com.google.code.garbagecan.minastudy&lt;/groupId&gt;
	&lt;artifactId&gt;minastudy&lt;/artifactId&gt;
	&lt;packaging&gt;jar&lt;/packaging&gt;
	&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
	&lt;name&gt;minastudy&lt;/name&gt;
	&lt;url&gt;http://maven.apache.org&lt;/url&gt;
	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.apache.mina&lt;/groupId&gt;
			&lt;artifactId&gt;mina-core&lt;/artifactId&gt;
			&lt;version&gt;2.0.4&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.apache.mina&lt;/groupId&gt;
			&lt;artifactId&gt;mina-filter-compression&lt;/artifactId&gt;
			&lt;version&gt;2.0.4&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.slf4j&lt;/groupId&gt;
			&lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;
			&lt;version&gt;1.3.0&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.slf4j&lt;/groupId&gt;
			&lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
			&lt;version&gt;1.3.0&lt;/version&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;
&lt;/project&gt;</pre>首先来看Server端的代码<pre name="code" class="brush:java">package com.google.code.garbagecan.minastudy.sample1;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyServer {
	
	private static final Logger logger = LoggerFactory.getLogger(MyServer.class);
	
	public static void main(String[] args) {
		IoAcceptor acceptor = new NioSocketAcceptor();

		acceptor.getFilterChain().addLast(&quot;logger&quot;, new LoggingFilter());
		acceptor.getFilterChain().addLast(&quot;codec&quot;, new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName(&quot;UTF-8&quot;))));

		acceptor.setHandler(new IoHandlerAdapter() {
			
			@Override
			public void sessionCreated(IoSession session) throws Exception {
			}
			
			@Override
			public void sessionOpened(IoSession session) throws Exception {
			}

			@Override
			public void sessionClosed(IoSession session) throws Exception {
			}

			@Override
			public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
			}

			@Override
			public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
				logger.error(cause.getMessage(), cause);
				session.close(true);
			}

			@Override
			public void messageReceived(IoSession session, Object message) throws Exception {
				logger.info(&quot;Received message &quot; + message);
				session.write(message);
			}

			@Override
			public void messageSent(IoSession session, Object message) throws Exception {
				logger.info(&quot;Sent message &quot; + message);
			}
		});
		
		try {
			acceptor.bind(new InetSocketAddress(10000));
		} catch (IOException ex) {
			logger.error(ex.getMessage(), ex);
		}
	}
}</pre>1. 首先创建I/O Service，这里使用的是NioSocketAcceptor类来创建了一个IoAcceptor实例。 <br /><p>2. 创建I/O Filter Chain，这里使用了两个IoFilter，一个是LoggingFilter用来记录日志和打印事件消息，另一个是ProtocolCodecFilter实例用来编码数据，这里其实就是将传递的数据编码成文本。 <br /></p><p>3. 创建I/O Handler，不要害怕，看起来代码多，其实就是一个实现了IoHandler接口的子类，自己需要实现其中的一些方法，这里方法比较多，但是我在这里只实现了messageSent，messageReceived和exceptionCaught方法。 <br /></p><p>4. 最后就是让IoAcceptor类实例绑定端口实现监听。<br /></p><p>下面看看Client端的代码</p><pre name="code" class="brush:java">package com.google.code.garbagecan.minastudy.sample1;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClient {
	
	private static final Logger logger = LoggerFactory.getLogger(MyClient.class);
	
	public static void main(String[] args) {
		IoConnector connector = new NioSocketConnector();
		connector.setConnectTimeoutMillis(10 * 1000);
		
		connector.getFilterChain().addLast(&quot;logger&quot;, new LoggingFilter());
		connector.getFilterChain().addLast(&quot;codec&quot;, new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName(&quot;UTF-8&quot;))));
		
		connector.setHandler(new IoHandlerAdapter() {
			
			@Override
			public void sessionCreated(IoSession session) throws Exception {
			}

			@Override
			public void sessionOpened(IoSession session) throws Exception {
				for (int i = 0; i &lt; 10; i++) {
					session.write(&quot;Hello user_&quot; + i);
				}
				session.write(&quot;Bye&quot;);
			}

			@Override
			public void sessionClosed(IoSession session) throws Exception {
			}

			@Override
			public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
			}

			@Override
			public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
				logger.error(cause.getMessage(), cause);
				session.close(true);
			}

			@Override
			public void messageReceived(IoSession session, Object message) throws Exception {
				logger.info(&quot;Received message &quot; + message);
				if (message.toString().equalsIgnoreCase(&quot;Bye&quot;)) {
					session.close(true);
				}
			}

			@Override
			public void messageSent(IoSession session, Object message) throws Exception {
				logger.info(&quot;Sent message &quot; + message);
			}
		});

		IoSession session = null;
		try {
			ConnectFuture future = connector.connect(new InetSocketAddress(&quot;localhost&quot;, 10000));
			future.awaitUninterruptibly();
			session = future.getSession();
		} catch (RuntimeIoException e) {
			logger.error(e.getMessage(), e);
		}

		session.getCloseFuture().awaitUninterruptibly();
		connector.dispose();
	}
}</pre><br /><p>1. 首先创建I/O Service，这里使用的是NioSocketConnector类来创建了一个IoConnector实例，并设置连接超时为10秒。 <br /></p><p>2. 创建I/O Filter Chain，和服务器端同样设置了两个IoFilter，一个是LoggingFilter用来记录日志和打印事件消息，另一个是ProtocolCodecFilter实例用来编码数据，这里其实就是将传递的数据编码成文本。<br /></p><p>3. 创建I/O Handler，也不要害怕，看起来代码多，其实也是一个实现了IoHandler接口的子类，并且自己实现了sessionOpened，messageSent，messageReceived和exceptionCaught方法。实现sessionOpened方法是为了在建立连接后向Server端发送消息。另外看一下messageReceived方法实现，在接收到服务器端的消息后关闭会话。从而可以使Client程序最终能够退出。 <br /></p><p>4. 最后就是IoConnector实例类连接远端的Server。 <br /></p><p>下面测试一下上面的程序，首先运行MyServer类，然后运行MyClient类，就可以分别在各自的终端上看到事件日志以及发送/接收的消息了。</p>
            
                    <div>来源：http://blog.csdn.net/kongxx/article/details/7520259</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/10/634722303429034348.html]]></link>
<title><![CDATA[Apache MINA实战之 对象传输]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Thu, 10 May 2012 07:18:12 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <p><strong>本文链接：http://blog.csdn.net/kongxx/article/details/7520599</strong><br /></p><p>利用Apache MINA来传递对象，这对了MINA来说非常容易，并且这也是Java网络编程中很常用的应用。其实对于MINA传递对象来说，如果看过前一篇文章的话，只要在其中做少许改动就可以实现对象传递，但这里考虑到例子的完整性，还是给出了全部代码示例。 <br /></p><p>首先看两个用来传递的Java对象MyRequestObject和MyResponseObject，很简单只是实现了Serializable接口罢了。</p><pre name="code" class="brush:java">package com.google.code.garbagecan.minastudy.sample3;

import java.io.Serializable;

public class MyRequestObject implements Serializable {

	private static final long serialVersionUID = 1L;

	private String name;
	
	private String value;

	public MyRequestObject(String name, String value) {
		this.name = name;
		this.value = value;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append(&quot;Request [name: &quot; + name  + &quot;, value: &quot; + value + &quot;]&quot;);
		return sb.toString();
	}
}

package com.google.code.garbagecan.minastudy.sample3;

import java.io.Serializable;

public class MyResponseObject implements Serializable {

	private static final long serialVersionUID = 1L;

	private String name;
	
	private String value;

	public MyResponseObject(String name, String value) {
		this.name = name;
		this.value = value;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append(&quot;Response [name: &quot; + name  + &quot;, value: &quot; + value + &quot;]&quot;);
		return sb.toString();
	}
}
</pre>看看Server端的代码<pre name="code" class="brush:java">package com.google.code.garbagecan.minastudy.sample3;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyServer {
	
	private static final Logger logger = LoggerFactory.getLogger(MyServer.class);
	
	public static void main(String[] args) {
		IoAcceptor acceptor = new NioSocketAcceptor();

		acceptor.getFilterChain().addLast(&quot;logger&quot;, new LoggingFilter());
		acceptor.getFilterChain().addLast(&quot;codec&quot;, new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

		acceptor.setHandler(new IoHandlerAdapter() {
			
			@Override
			public void sessionCreated(IoSession session) throws Exception {
			}
			
			@Override
			public void sessionOpened(IoSession session) throws Exception {
			}

			@Override
			public void sessionClosed(IoSession session) throws Exception {
			}

			@Override
			public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
			}

			@Override
			public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
				logger.error(cause.getMessage(), cause);
				session.close(true);
			}

			@Override
			public void messageReceived(IoSession session, Object message) throws Exception {
				logger.info(&quot;Received &quot; + message);
				MyRequestObject myReqOjb = (MyRequestObject) message;
				MyResponseObject myResObj = new MyResponseObject(myReqOjb.getName(), myReqOjb.getValue());
				session.write(myResObj);
			}

			@Override
			public void messageSent(IoSession session, Object message) throws Exception {
				logger.info(&quot;Sent &quot; + message);
			}
		});
		
		try {
			acceptor.bind(new InetSocketAddress(10000));
		} catch (IOException ex) {
			logger.error(ex.getMessage(), ex);
		}
	}
}</pre>1. 首先创建I/O Service，这里使用的是NioSocketAcceptor类来创建了一个IoAcceptor实例。 <br /><p>2. 创建I/O Filter Chain，这里使用了两个个IoFilter，一个是LoggingFilter用来记录日志和打印事件消息，另一个是ProtocolCodecFilter实例用来编码数据，这里使用了ObjectSerializationCodecFactory类来序列化或反序列化数据成java对象。 <br /></p><p>3. 创建I/O Handler，这里主要看一下messageReceived方法，其总接收了MyRequestObject对象，然后又发送了一个MyResponseObject对象给Client端。 <br /></p><p>4. 最后就是让IoAcceptor类实例绑定端口实现监听。 <br /></p><p><br /></p><p>看看Client端的代码</p><pre name="code" class="brush:java">package com.google.code.garbagecan.minastudy.sample3;

import java.net.InetSocketAddress;

import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClient {
	
	private static final Logger logger = LoggerFactory.getLogger(MyClient.class);
	
	public static void main(String[] args) {
		IoConnector connector = new NioSocketConnector();
		connector.setConnectTimeoutMillis(10 * 1000);
		
		connector.getFilterChain().addLast(&quot;logger&quot;, new LoggingFilter());
		connector.getFilterChain().addLast(&quot;codec&quot;, new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		
		connector.setHandler(new IoHandlerAdapter() {
			
			@Override
			public void sessionCreated(IoSession session) throws Exception {
			}

			@Override
			public void sessionOpened(IoSession session) throws Exception {
				MyRequestObject myObj = new MyRequestObject(&quot;my name&quot;, &quot;my value&quot;);
				session.write(myObj);
			}

			@Override
			public void sessionClosed(IoSession session) throws Exception {
			}

			@Override
			public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
			}

			@Override
			public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
				logger.error(cause.getMessage(), cause);
				session.close(true);
			}

			@Override
			public void messageReceived(IoSession session, Object message) throws Exception {
				MyResponseObject myResObj = (MyResponseObject) message;
				logger.info(&quot;Received &quot; + myResObj);
				session.close(true);
			}

			@Override
			public void messageSent(IoSession session, Object message) throws Exception {
				logger.info(&quot;Sent &quot; + message);
			}
		});

		IoSession session = null;
		try {
			ConnectFuture future = connector.connect(new InetSocketAddress(&quot;localhost&quot;, 10000));
			future.awaitUninterruptibly();
			session = future.getSession();
		} catch (RuntimeIoException e) {
			logger.error(e.getMessage(), e);
		}

		session.getCloseFuture().awaitUninterruptibly();
		connector.dispose();
	}
}</pre>1. 首先创建I/O Service，这里使用的是NioSocketConnector类来创建了一个IoConnector实例，并设置连接超时为10秒。 <br /><p>2. 创建I/O Filter Chain，和服务器端同样设置了两个IoFilter，一个是LoggingFilter用来记录日志和打印事件消息，另一个是ProtocolCodecFilter实例用来编码数据，这里也使用了ObjectSerializationCodecFactory类来序列化或反序列化数据成java对象。 <br /></p><p>3. 创建I/O Handler，主要看一下sessionOpened方法，其中在会话建立事件中发送了MyRequestObject对象，然后在messageReceived方法中又接受了MyResponseObject对象。 <br /></p><p>4. 最后就是IoConnector实例类连接远端的Server。 <br /></p><p><br /></p><p>下面测试一下上面的程序，首先运行MyServer类，然后运行MyClient类，就可以分别在各自的终端上看到事件日志以及发送/接收的对象了。 <br />&nbsp;<br /><br /><br /></p><p><br /></p><p><br /></p><p><br /></p>
            
                    <div>来源：http://blog.csdn.net/kongxx/article/details/7520599</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/10/634722053548837959.html]]></link>
<title><![CDATA[JetBrains发布AppCode，面向Objective-C的IDE]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Thu, 10 May 2012 01:14:42 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <span style="font-family: Arial; font-size: 14px; line-height: 24px; "><span style="color:#ff0000;">本文来源于我在InfoQ中文站翻译的文章，原文地址是：<a href="http://www.infoq.com/cn/news/2012/02/jetbrains-appcode">http://www.infoq.com/cn/news/2012/02/jetbrains-appcode</a></span></span><p>近日，JetBrains发布了<a href="http://www.jetbrains.com/objc">AppCode</a>，面向Objective-C的IDE，其感觉非常类似于面向Java的<a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>编辑器。</p><p>熟悉IDEA的开发者会注意到他们之间的相似性。其运行时完全使用Java实现，这意味着要想运行该IDE需要安装JVM（1.6+），如果没有安装JVM，那么Lion就会在应用启动前提示下载最新的JVM；在默认情况下，其他版本的OSX已经安装好了JVM。</p><p>与其他IDE一样，熟悉该应用的使用方式需要花一些时间。熟悉Xcode（以及之前的ProjectBuilder）的开发者很可能会花些时间熟悉该应用的使用方式，但已有的IntelliJ使用经验将会大大缩短熟悉时间。与版本控制系统的集成包含了所有主流产品（Git、Subversion与Mercurial）与一些年代较远的产品（CVS）。</p><p>AppCode可以打开Xcode项目，虽然并没有取代Interface Builder，但它可以加载nib与xib，并在已安装的Interface Builder版本中打开。此外，对于iOS开发来说，AppCode可以启动Apple Developer Tools模拟器。</p><p>代码检测可以查找遗漏的retains/releases，还会提示用户将其包含进来，它还支持最近iOS构建中新加的GC与ARC。代码中的坏味道会被高亮显示出来，并且可以通过快速修复选项进行修复，还可以使用与其他JetBrains IDE中相同的重构工具进行重构。</p><p>最后，在AppCode中测试要比在Xcode中更为轻松，这是通过集成的OCUnit运行器实现的。Xcode将测试看作是构建期的行为，AppCode与此不同，它可以在IDE中加载并调试测试，包括在测试过程中调试变量。</p><p>AppCode可用在Mac OS X 10.5+上，需要提前安装好JVM与Apple开发者工具。它提供了<a href="http://download.jetbrains.com/objc/AppCode-1.0.dmg">30天的免费试用期</a>。教育机构、公司以及开源项目开发可以免费使用AppCode。其许可地址是http://www.jetbrains.com/objc/buy/license-matrix.jsp。</p><p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2011/10/jetbrains-appcode">JetBrains releases AppCode, an IDE for Objective-C</a></p>
            
                    <div>来源：http://blog.csdn.net/ricohzhanglong/article/details/7229303</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/9/634721811854586233.html]]></link>
<title><![CDATA[我的云之旅–HBase调试(139)]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Wed, 09 May 2012 18:11:04 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<span style="font-family:Georgia,'Bitstream Charter',serif; color:rgb(51,51,51); line-height:14px"></span>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
下面是运行日志：</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<br>
&lt;?xml version=&quot;1.0&quot;?&gt;HBase-site.xml</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&lt;!-- /** * Copyright 2009 The Apache Software Foundation * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements.&nbsp;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>See
 the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache&nbsp;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>License,
 Version 2.0 (the * &quot;License&quot;); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0&nbsp;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>*
 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an &quot;AS IS&quot; BASIS, * WITHOUT WARRANTIES&nbsp;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>OR
 CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ --&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&lt;configuration&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;name&gt;hbase.rootdir&lt;/name&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;value&gt;file:///D:/hbase-0.20.3/data&lt;/value&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;description&gt;The
 directory shared by region servers.</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>Should
 be fully-qualified to include the filesystem to use.</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>E.g:
 hdfs://NAMENODE_SERVER:PORT/HBASE_ROOTDIR</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;/description&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;/property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;name&gt;hbase.cluster.distributed&lt;/name&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;value&gt;false
 &lt;/value&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;description&gt;The
 mode the cluster will be in. Possible values are</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>false:
 standalone and pseudo-distributed setups with managed Zookeeper</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>true:
 fully-distributed</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>with
 unmanaged Zookeeper Quorum (see hbase-env.sh)</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;/description&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;/property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;name&gt;hbase.tmp.dir&lt;/name&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;value&gt;D:/hbase-0.20.3/tmp
 &lt;/value&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;description&gt;Temporary
 directory on the local filesystem.&lt;/description&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>&lt;/property&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&lt;/configuration&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span id="more-908" style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px"></span>&nbsp;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
1 ZooKeeper日志：</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,734 - INFO &nbsp;[main:QuorumPeerConfig@90] - Reading configuration from: G:\program\zookeeper-3.3.3\conf\zoo.cfg</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,750 - WARN &nbsp;[main:QuorumPeerMain@105] - Either no config or no quorum defined in config, running &nbsp;in standalone mode</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,843 - INFO &nbsp;[main:QuorumPeerConfig@90] - Reading configuration from: G:\program\zookeeper-3.3.3\conf\zoo.cfg</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,843 - INFO &nbsp;[main:ZooKeeperServerMain@94] - Starting server</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:zookeeper.version=3.3.3-1073969, built on 02/24/2011 03:33 GMT</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:host.name=rollin</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:java.version=1.6.0_22</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:java.vendor=Sun Microsystems Inc.</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:java.home=C:\glassfishv3\jdk\jre</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,890 - INFO &nbsp;[main:Environment@97] - Server environment:java.class.path=G:\program\zookeeper-3.3.3\bin;G:\program\zookeeper-3.3.3\contrib\bookkeeper\zookeeper-3.3.3-bookkeeper.jar;G:\program\zookeeper-3.3.3\contrib\fatjar\zookeeper-3.3.3-fatjar.jar;G:\program\zookeeper-3.3.3\contrib\rest\zookeeper-3.3.3-rest.jar;G:\program\zookeeper-3.3.3\contrib\ZooInspector\lib\jtoaster-1.0.4.jar;G:\program\zookeeper-3.3.3\contrib\ZooInspector\lib;G:\program\zookeeper-3.3.3\contrib\ZooInspector\zookeeper-3.3.3-ZooInspector.jar;G:\program\zookeeper-3.3.3\dist-maven\bookkeeper-3.3.3.jar;G:\program\zookeeper-3.3.3\dist-maven\zookeeper-3.3.3-javadoc.jar;G:\program\zookeeper-3.3.3\dist-maven\zookeeper-3.3.3-sources.jar;G:\program\zookeeper-3.3.3\dist-maven\zookeeper-3.3.3.jar;G:\program\zookeeper-3.3.3\lib\jline-0.9.94.jar;G:\program\zookeeper-3.3.3\lib\log4j-1.2.15.jar;G:\program\zookeeper-3.3.3\src\contrib\zooinspector\lib\jtoaster-1.0.4.jar;G:\program\zookeeper-3.3.3\zookeeper-3.3.3.jar</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:java.library.path=C:\glassfishv3\jdk\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/glassfishv3/jdk/bin/../jre/bin/client;C:/glassfishv3/jdk/bin/../jre/bin;C:/glassfishv3/jdk/bin/../jre/lib/i386;C:\WINDOWS\System32;C:\glassfishv3\jdk\bin;C:\Program
 Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\glassfishv3\jdk\bin;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL
 Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\glassfishv3\jdk\bin;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\WINDOWS\System32;C:\glassfishv3\jdk\bin;C:\Program
 Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\glassfishv3\jdk\bin;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL
 Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\glassfishv3\jdk\bin;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;G:\JavaEE\apache-maven-3.0.3\bin;C:\Program
 Files\Subversion\bin;G:\JavaEE\apache2.2\bin;G:\cygwin\bin;G:\cygwin\usr\bin;C:\glassfishv3\jdk\bin;G:\JavaEE\eclipse;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:java.io.tmpdir=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:java.compiler=&lt;NA&gt;</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:os.name=Windows XP</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:os.arch=x86</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:os.version=5.1</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:user.name=Administrator</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:user.home=C:\Documents and Settings\Administrator</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:30,906 - INFO &nbsp;[main:Environment@97] - Server environment:user.dir=G:\program\zookeeper-3.3.3</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:31,046 - INFO &nbsp;[main:ZooKeeperServer@663] - tickTime set to 2000</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:31,046 - INFO &nbsp;[main:ZooKeeperServer@672] - minSessionTimeout set to -1</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:31,046 - INFO &nbsp;[main:ZooKeeperServer@681] - maxSessionTimeout set to -1</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:31,140 - INFO &nbsp;[main:NIOServerCnxn$Factory@143] - binding to port 0.0.0.0/0.0.0.0:2181</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:16:31,187 - INFO &nbsp;[main:FileTxnSnapLog@208] - Snapshotting: 0</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:19:36,359 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2064</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:19:36,390 - WARN &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@639] - Exception causing close of session 0x0 due to java.io.IOException: Len error 1195725856</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:19:36,390 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2064 (no session established for client)</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:10,171 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2121</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:10,203 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@777] - Client attempting to establish new session at /127.0.0.1:2121</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:10,203 - INFO &nbsp;[SyncThread:0:FileTxnLog@197] - Creating new log file: log.1</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,125 - INFO &nbsp;[SyncThread:0:NIOServerCnxn@1580] - Established session 0x136ac0ffee30000 with negotiated timeout 40000 for client /127.0.0.1:2121</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,375 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2129</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,375 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@777] - Client attempting to establish new session at /127.0.0.1:2129</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,406 - INFO &nbsp;[SyncThread:0:NIOServerCnxn@1580] - Established session 0x136ac0ffee30001 with negotiated timeout 40000 for client /127.0.0.1:2129</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,546 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2132</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,546 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@777] - Client attempting to establish new session at /127.0.0.1:2132</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:12,625 - INFO &nbsp;[SyncThread:0:NIOServerCnxn@1580] - Established session 0x136ac0ffee30002 with negotiated timeout 40000 for client /127.0.0.1:2132</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:36,562 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@387] - Processed session termination for sessionid: 0x136ac0ffee30000</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:36,593 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2121 which had sessionid 0x136ac0ffee30000</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:37,453 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@387] - Processed session termination for sessionid: 0x136ac0ffee30001</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:37,500 - WARN &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@634] - EndOfStreamException: Unable to read additional data from client sessionid 0x136ac0ffee30001, likely client has closed socket</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:24:37,500 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2129 which had sessionid 0x136ac0ffee30001</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:25:10,218 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@387] - Processed session termination for sessionid: 0x136ac0ffee30002</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:25:10,281 - WARN &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@634] - EndOfStreamException: Unable to read additional data from client sessionid 0x136ac0ffee30002, likely client has closed socket</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:25:10,281 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2132 which had sessionid 0x136ac0ffee30002</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,406 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2180</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,421 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@777] - Client attempting to establish new session at /127.0.0.1:2180</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,484 - INFO &nbsp;[SyncThread:0:NIOServerCnxn@1580] - Established session 0x136ac0ffee30003 with negotiated timeout 40000 for client /127.0.0.1:2180</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,203 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251] - Accepted socket connection from /127.0.0.1:2192</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,218 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@777] - Client attempting to establish new session at /127.0.0.1:2192</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,281 - INFO &nbsp;[SyncThread:0:NIOServerCnxn@1580] - Established session 0x136ac0ffee30004 with negotiated timeout 40000 for client /127.0.0.1:2192</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,375 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@407] - Got user-level KeeperException when processing sessionid:0x136ac0ffee30003 type:create cxid:0xd zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a Error Path:/hbase/safe-mode Error:KeeperErrorCode
 = NodeExists for /hbase/safe-mode</p>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2 HMaster</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:06,421 INFO &nbsp;[main] master.HMaster(1127): vmName=Java HotSpot(TM) Client VM, vmVendor=Sun Microsystems Inc., vmVersion=17.1-b03</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:06,421 INFO &nbsp;[main] master.HMaster(1128): vmInputArguments=[-Dfile.encoding=UTF-8]</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:06,546 INFO &nbsp;[main] master.HMaster(166): My address is rollin:60000</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,265 INFO &nbsp;[main] ipc.HBaseRpcMetrics(52): Initializing RPC Metrics with hostName=HMaster, port=60000</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,453 INFO &nbsp;[main] master.RegionManager(160): -ROOT- region unset (but not set to be reassigned)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,453 INFO &nbsp;[main] master.RegionManager(172): ROOT inserted into regionsInTransition</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,500 DEBUG [main-EventThread] master.HMaster(1076): Got event None with path null</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,515 DEBUG [main] zookeeper.ZooKeeperWrapper(382): Failed to read: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hbase/master</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,546 DEBUG [main] zookeeper.ZooKeeperWrapper(528): Wrote master address 192.168.1.110:60000 to ZooKeeper</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,578 DEBUG [main] zookeeper.ZooKeeperWrapper(339): State node wrote in ZooKeeper</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,578 DEBUG [main] zookeeper.ZooKeeperWrapper(398): Read ZNode /hbase/master got 192.168.1.110:60000</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,578 INFO &nbsp;[main] master.HMaster(219): HMaster initialized on 192.168.1.110:60000</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,578 DEBUG [HMaster] master.HMaster(514): Checking cluster state...</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,593 DEBUG [HMaster] zookeeper.ZooKeeperWrapper(398): Read ZNode /hbase/root-region-server got 192.168.1.110:2122</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,593 DEBUG [HMaster] master.HMaster(519): This is a fresh start, proceeding with normal startup</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,593 DEBUG [HMaster] master.HMaster(568): No log files to split, proceeding...</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07,609 INFO &nbsp;[HMaster] metrics.MasterMetrics(61): Initialized</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07.687::INFO: &nbsp;Logging to STDERR via org.mortbay.log.StdErrLog</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07.796::INFO: &nbsp;jetty-6.1.14</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:07.875::INFO: &nbsp;Extract jar:file:/G:/hbase/hbase-0.20.5/hbase-0.20.5.jar!/webapps/master to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Jetty_0_0_0_0_60010_master____q3nwom\webapp</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:08.375::INFO: &nbsp;Extract jar:file:/G:/hbase/hbase-0.20.5/hbase-0.20.5.jar!/webapps/rest to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Jetty_0_0_0_0_60010_rest__api__uxgjk0\webapp</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:08.671::INFO: &nbsp;Started SelectChannelConnector@0.0.0.0:60010</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:08,687 DEBUG [HMaster] master.HMaster(625): Started service threads</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,687 INFO &nbsp;[IPC Server handler 1 on 60000] master.ServerManager(166): Received start message from: rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,718 DEBUG [IPC Server handler 1 on 60000] zookeeper.ZooKeeperWrapper(613): Updated ZNode /hbase/rs/1334327279640 with data 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,265 INFO &nbsp;[IPC Server handler 2 on 60000] master.RegionManager(327): Assigning region -ROOT-,,0 to rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,359 INFO &nbsp;[IPC Server handler 3 on 60000] master.ServerManager(460): Processing MSG_REPORT_OPEN: -ROOT-,,0 from rollin,60020,1334327279640; 1 of 1</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,437 WARN &nbsp;[IPC Server handler 3 on 60000] zookeeper.ZooKeeperWrapper(569): Failed to create out of safe mode in ZooKeeper: org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists for /hbase/safe-mode</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,437 INFO &nbsp;[IPC Server handler 3 on 60000] zookeeper.ZooKeeperWrapper(571): Node exists; just move on</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,437 INFO &nbsp;[IPC Server handler 3 on 60000] master.RegionManager(1180): exiting safe mode</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,453 DEBUG [IPC Server handler 3 on 60000] zookeeper.ZooKeeperWrapper(479): SetData of ZNode /hbase/root-region-server with 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,468 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,640 DEBUG [RegionManager.rootScanner] master.BaseScanner(580): Current assignment of .META.,,1 is not valid; &nbsp;serverAddress=192.168.1.110:2122, startCode=1334327054515 unknown.</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,640 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,468 INFO &nbsp;[IPC Server handler 4 on 60000] master.RegionManager(327): Assigning region .META.,,1 to rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,484 INFO &nbsp;[IPC Server handler 5 on 60000] master.ServerManager(460): Processing MSG_REPORT_OPEN: .META.,,1 from rollin,60020,1334327279640; 1 of 1</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,484 DEBUG [HMaster] master.HMaster(459): Processing todo: PendingOpenOperation from rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,484 INFO &nbsp;[HMaster] master.ProcessRegionOpen(70): .META.,,1 open on 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,500 INFO &nbsp;[HMaster] master.ProcessRegionOpen(80): Updated row .META.,,1 in region -ROOT-,,0 with startcode=1334327279640, server=192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,500 DEBUG [HMaster] master.ProcessRegionOpen(98): Adding to onlineMetaRegions: {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,500 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(163): RegionManager.metaScanner scanning meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,515 DEBUG [RegionManager.metaScanner] master.BaseScanner(580): Current assignment of org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515 is not valid; &nbsp;serverAddress=192.168.1.110:2122, startCode=1334327054515 unknown.</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,515 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(242): RegionManager.metaScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,515 INFO &nbsp;[RegionManager.metaScanner] master.MetaScanner(132): All 1 .META. region(s) scanned</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 INFO &nbsp;[IPC Server handler 6 on 60000] master.RegionManager(327): Assigning region org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515 to rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 INFO &nbsp;[IPC Server handler 7 on 60000] master.ServerManager(460): Processing MSG_REPORT_OPEN: org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515 from rollin,60020,1334327279640; 1 of 1</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,515 DEBUG [HMaster] master.HMaster(459): Processing todo: PendingOpenOperation from rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,515 INFO &nbsp;[HMaster] master.ProcessRegionOpen(70): org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515 open on 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,515 INFO &nbsp;[HMaster] master.ProcessRegionOpen(80): Updated row org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515 in region .META.,,1 with startcode=1334327279640, server=192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:07,437 INFO &nbsp;[Thread-7] master.ServerManager$ServerMonitor(128): 1 region servers, 0 dead, average load 3.0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:07,625 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:02,500 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(163): RegionManager.metaScanner scanning meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:02,515 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(242): RegionManager.metaScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:02,515 INFO &nbsp;[RegionManager.metaScanner] master.MetaScanner(132): All 1 .META. region(s) scanned</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:07,437 INFO &nbsp;[Thread-7] master.ServerManager$ServerMonitor(128): 1 region servers, 0 dead, average load 3.0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:07,625 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:02,500 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(163): RegionManager.metaScanner scanning meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:02,515 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(242): RegionManager.metaScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:02,515 INFO &nbsp;[RegionManager.metaScanner] master.MetaScanner(132): All 1 .META. region(s) scanned</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:07,437 INFO &nbsp;[Thread-7] master.ServerManager$ServerMonitor(128): 1 region servers, 0 dead, average load 3.0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:07,656 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
3 HRegionServer</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:58,796 INFO &nbsp;[main] regionserver.HRegionServer(2279): vmInputArguments=[-Dfile.encoding=UTF-8]</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:58,828 INFO &nbsp;[main] regionserver.HRegionServer(214): My address is rollin:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:58,968 INFO &nbsp;[main] ipc.HBaseRpcMetrics(52): Initializing RPC Metrics with hostName=HRegionServer, port=60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,078 INFO &nbsp;[main] regionserver.MemStoreFlusher(107): globalMemStoreLimit=99.0m, globalMemStoreLimitLowMark=86.6m, maxHeap=247.5m</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,078 INFO &nbsp;[main] regionserver.HRegionServer$MajorCompactionChecker(875): Runs every 10000000ms</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,296 DEBUG [main] zookeeper.ZooKeeperWrapper(374): Set watcher on master address ZNode /hbase/master</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,312 INFO &nbsp;[main-EventThread] regionserver.HRegionServer(297): Got ZooKeeper event, state: SyncConnected, type: None, path: null</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,390 DEBUG [regionserver/192.168.1.110:60020] zookeeper.ZooKeeperWrapper(398): Read ZNode /hbase/master got 192.168.1.110:60000</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,390 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(1190): Telling master at 192.168.1.110:60000 that we are up</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,640 DEBUG [regionserver/192.168.1.110:60020] regionserver.HRegionServer(1226): sending initial server load: requests=0, regions=0, usedHeap=21, maxHeap=247</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,687 DEBUG [regionserver/192.168.1.110:60020] zookeeper.ZooKeeperWrapper(591): Created ZNode /hbase/rs/1334327279640 with data 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,750 DEBUG [regionserver/192.168.1.110:60020] regionserver.HRegionServer(665): Config from master: hbase.regionserver.address=192.168.1.110</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,750 DEBUG [regionserver/192.168.1.110:60020] regionserver.HRegionServer(665): Config from master: fs.default.name=file:/D:/hbase-0.20.3/data</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,750 DEBUG [regionserver/192.168.1.110:60020] regionserver.HRegionServer(665): Config from master: hbase.rootdir=file:/D:/hbase-0.20.3/data</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:27:59,750 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(674): Master passed us address to use. Was=192.168.1.110:60020, Now=192.168.1.110</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00,265 DEBUG [regionserver/192.168.1.110:60020] regionserver.HRegionServer(950): Log dir file:/D:/hbase-0.20.3/data/.logs/rollin,60020,1334327279640</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00,281 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HLog(246): HLog configuration: blocksize=33554432, rollsize=31876710, enabled=true, flushlogentries=100, optionallogflushinternal=10000ms</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00,437 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HLog(346): New hlog /D:/hbase-0.20.3/data/.logs/rollin,60020,1334327279640/hlog.dat.1334327280281</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00,453 INFO &nbsp;[regionserver/192.168.1.110:60020] metrics.RegionServerMetrics(146): Initialized</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00.515::INFO: &nbsp;Logging to STDERR via org.mortbay.log.StdErrLog</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00.656::INFO: &nbsp;jetty-6.1.14</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:00.734::INFO: &nbsp;Extract jar:file:/G:/hbase/hbase-0.20.5/hbase-0.20.5.jar!/webapps/regionserver to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Jetty_0_0_0_0_60030_regionserver____.h599vl\webapp</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01.234::INFO: &nbsp;Started SelectChannelConnector@0.0.0.0:60030</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,234 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(1088): HRegionServer started at: 192.168.1.110:60020</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,234 DEBUG [regionserver/192.168.1.110:60020] zookeeper.ZooKeeperWrapper(398): Read ZNode /hbase/root-region-server got 192.168.1.110:2122</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,250 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.StoreFile(241): Allocating LruBlockCache with maximum size 49.5m</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,265 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(428): MSG_REGION_OPEN: -ROOT-,,0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,265 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegionServer$Worker(1316): Worker: MSG_REGION_OPEN: -ROOT-,,0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,296 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.HRegion(284): Creating region -ROOT-,,0, encoded=70236052</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,343 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.Store(424): loaded /D:/hbase-0.20.3/data/-ROOT-/70236052/info/7471940505945003795, isReference=false, sequence id=2, length=839, majorCompaction=false</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,343 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.Store(424): loaded /D:/hbase-0.20.3/data/-ROOT-/70236052/info/3861644384671521953, isReference=false, sequence id=10, length=461, majorCompaction=false</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,343 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegion(360): region -ROOT-,,0/70236052 available; sequence id is 11</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,468 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(428): MSG_REGION_OPEN: .META.,,1</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,468 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegionServer$Worker(1316): Worker: MSG_REGION_OPEN: .META.,,1</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,468 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.HRegion(284): Creating region .META.,,1, encoded=1028785192</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,484 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.Store(424): loaded /D:/hbase-0.20.3/data/.META./1028785192/info/7125721025097489400, isReference=false, sequence id=9, length=913, majorCompaction=false</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:02,484 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegion(360): region .META.,,1/1028785192 available; sequence id is 10</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 INFO &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(428): MSG_REGION_OPEN: org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegionServer$Worker(1316): Worker: MSG_REGION_OPEN: org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 DEBUG [regionserver/192.168.1.110:60020.worker] regionserver.HRegion(284): Creating region org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515, encoded=1645514350</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:03,500 INFO &nbsp;[regionserver/192.168.1.110:60020.worker] regionserver.HRegion(360): region org.apache.hadoop.hbase.LocalHBaseCluster,,1334327054515/1645514350 available; sequence id is 0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:29:01,265 DEBUG [pool-1-thread-1] hfile.LruBlockCache(551): Cache Stats: Sizes: Total=0.23448181MB (245872), Free=49.26552MB (51658640), Max=49.5MB (51904512), Counts: Blocks=3, Access=10, Hit=7, Miss=3, Evictions=0, Evicted=0, Ratios: Hit Ratio=69.9999988079071%,
 Miss Ratio=30.000001192092896%, Evicted/Run=NaN</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:30:01,265 DEBUG [pool-1-thread-1] hfile.LruBlockCache(551): Cache Stats: Sizes: Total=0.23448181MB (245872), Free=49.26552MB (51658640), Max=49.5MB (51904512), Counts: Blocks=3, Access=16, Hit=13, Miss=3, Evictions=0, Evicted=0, Ratios: Hit Ratio=81.25%,
 Miss Ratio=18.75%, Evicted/Run=NaN</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:01,265 DEBUG [pool-1-thread-1] hfile.LruBlockCache(551): Cache Stats: Sizes: Total=0.23448181MB (245872), Free=49.26552MB (51658640), Max=49.5MB (51904512), Counts: Blocks=3, Access=22, Hit=19, Miss=3, Evictions=0, Evicted=0, Ratios: Hit Ratio=86.36363744735718%,
 Miss Ratio=13.636364042758942%, Evicted/Run=NaN</div>
</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
HMaster更新：</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:02,500 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(163): RegionManager.metaScanner scanning meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:02,531 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(242): RegionManager.metaScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:02,531 INFO &nbsp;[RegionManager.metaScanner] master.MetaScanner(132): All 1 .META. region(s) scanned</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:07,437 INFO &nbsp;[Thread-7] master.ServerManager$ServerMonitor(128): 1 region servers, 0 dead, average load 3.0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:31:07,625 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
HRegionServer更新</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:32:07,437 INFO &nbsp;[Thread-7] master.ServerManager$ServerMonitor(128): 1 region servers, 0 dead, average load 3.0</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:32:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(163): RegionManager.rootScanner scanning meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:32:07,609 INFO &nbsp;[RegionManager.rootScanner] master.BaseScanner(242): RegionManager.rootScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: -ROOT-,,0, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:33:02,500 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(163): RegionManager.metaScanner scanning meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;}</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:33:02,515 INFO &nbsp;[RegionManager.metaScanner] master.BaseScanner(242): RegionManager.metaScanner scan of 1 row(s) of meta region {server: 192.168.1.110:60020, regionname: .META.,,1, startKey: &lt;&gt;} complete</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:33:02,515 INFO &nbsp;[RegionManager.metaScanner] master.MetaScanner(132): All 1 .META. region(s) scanned</div>
</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
Master停掉后HRegionServer：</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:36:57,359 WARN &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(482): Attempt=14</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
java.net.ConnectException: Connection refused: no further information</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.net.NetUtils.connect(NetUtils.java:404)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:308)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:843)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:715)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:334)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 $Proxy0.regionServerReport(Unknown Source)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:410)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 java.lang.Thread.run(Thread.java:662)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:36:59,375 WARN &nbsp;[regionserver/192.168.1.110:60020] regionserver.HRegionServer(482): Attempt=15</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
java.net.ConnectException: Connection refused: no further information</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.net.NetUtils.connect(NetUtils.java:404)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:308)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:843)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:715)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:334)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 $Proxy0.regionServerReport(Unknown Source)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:410)</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<span style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; white-space:pre"></span>at
 java.lang.Thread.run(Thread.java:662)</div>
</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
ZooKeeper信息</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
gotiated timeout 40000 for client /127.0.0.1:2192</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:28:01,375 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@407] - Got user-level KeeperException when processing sessionid:0x136ac0ffee30003 type:create cxid:0xd zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a Error Path:/hbase/safe-mode Error:KeeperErrorCode
 = NodeExists for /hbase/safe-mode</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:36:30,984 - WARN &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@639] - Exception causing close of session 0x136ac0ffee30003 due to java.io.IOException: 远程主机强迫关闭了一个现有的连接。</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:36:31,000 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2180 which had sessionid 0x136ac0ffee30003</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:37:10,000 - INFO &nbsp;[SessionTracker:ZooKeeperServer@314] - Expiring session 0x136ac0ffee30003, timeout of 40000ms exceeded</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:37:10,000 - INFO &nbsp;[ProcessThread:-1:PrepRequestProcessor@387] - Processed session termination for sessionid: 0x136ac0ffee30003</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:37:45,296 - WARN &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@639] - Exception causing close of session 0x136ac0ffee30004 due to java.io.IOException: 远程主机强迫关闭了一个现有的连接。</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
2012-04-13 22:37:45,296 - INFO &nbsp;[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed socket connection for client /127.0.0.1:2192 which had sessionid 0x136ac0ffee30004</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
<div style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
&nbsp;</div>
</div>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
LocalHBaseCluster也可以测试。</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
参考文献:</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<a href="http://tangay.iteye.com/blog/724589" style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; color:rgb(0,102,204)">http://tangay.iteye.com/blog/724589</a></p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
更多内容：</p>
<p style="background-color:transparent; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; margin-top:0px; margin-right:0px; margin-bottom:12px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">
<a href="http://www.marulin.com/">http://www.marulin.com/</a><br>
</p>

            
                    <div>来源：http://blog.csdn.net/longronglin/article/details/7459514</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/9/634721567190959225.html]]></link>
<title><![CDATA[为TV进行开发：跨越不同屏幕间的鸿沟]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Wed, 09 May 2012 11:02:14 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[<p>[光明的跨屏幕时代已经越来越近了，手持设备生产商以及电子消费巨头都开始为下一个联网设备竞争了——电视机。但是开发者要如何应对呢？创建跨屏幕运行的apps有多大难度？国外科技媒体VisionMobile的作者Ben Hookway讨论了跨屏幕开发的一些细节以及智能TV市场面前的机遇和挑战，并对开发者在面对众多平台时要如何选择给出了建议。]</p>
<p><a href="/Upload/EditorImage/image/iphone/201205/6347215813314312701.jpg"><img class="alignnone size-full wp-image-2786" title="1" src="/Upload/EditorImage/image/iphone/201205/6347215813314312701.jpg" alt="" width="500" height="420" /></a></p>
<p><span id="more-2785"></span></p>
<p>设想这样一种情况，在进行apps发布的时候，有10多种平台可以选择——而这些平台大多数是不对开发者开放的。只有少数几种apps被开发出来，并且，没有人使用这些apps。</p>
<p>这种情况就是用来描述当下联网TV市场的状况的。这个描述也适用于前iPhone时代的移动世界，那时候，app开发的焦点就在于多种平台的选择。</p>
<p>在前iPhone时代以及后iPhone时代，我花了好几年来构建移动领域的业务，最近我正在试图打破web和联网TV间的界限来构建业务。我为这两种环境中的相似度感到震撼，坚信TV产业需要花更多时间来关注apps的革新，不管是定制机还是智能机上的革新，以便避免再经历移动领域apps已经经历过的教训。</p>
<h3><strong>TV</strong><strong>是除移动</strong><strong>apps</strong><strong>以外的另外一个世界</strong></h3>
<p>当“app”这个词应用到TV上时，有一些微妙的含义在内。在很多情况下，一个TV app只是作为一些内容的接入点——比如YouTube, Netflix 或者LoveFilm apps。在另外一些情况下，TV上的app是指一些类似于Facebook 或者 eBay app的功能。</p>
<p>有时候我会想，在TV相关的apps上，我们没什么可做了，因为没有人能想到有什么更好的可以去做。“这个app在手机上很好用，那么就在TV上试试吧！”如果是确实能正确应用于TV上的apps，那当然没问题，但是我们必须意识到TV应用的特点：</p>
<p>- TV是共享应用，而手机是私人化的。</p>
<p>- TV交互性更小。各种试图让用户和TV交互的努力都失败了。</p>
<p>- 消费者讨厌复杂的遥控器。</p>
<p>很多从web开发转向TV开发的开发者并没有意识到这些细节。而这些忽略有可能使得apps根本无法在TV上应用。想想，你真地愿意让你的私人信息出现在一个共享屏幕上？其他共享TV屏幕的人真地愿意让屏幕被你用来浏览你的Facebook信息吗？</p>
<h3><strong>为</strong><strong>TV</strong><strong>开发</strong><strong>apps</strong><strong>的三种方式</strong></h3>
<p>主要有三种为TV进行app开发的方式：</p>
<p><em>1. TV-only apps</em></p>
<p>为TV屏幕或者机顶盒开发的apps通常是最受欢迎的由web服务延伸到TV屏幕上的应用。其中的例子有Spotify, Flickr ，当然也包括Twitter 和Facebook。这些apps需要做修改以便适应TV遥控器，并且只能有有限的文本输入——这些都是说起来简单做起来难。有些apps是更容易移植到TV上去的。CNet有一个综合清单，其中列出了TV厂商启用的主流音乐、视频以及会话apps。</p>
<p><em>2. Mobile-only apps</em><em><br />
</em>这些是作为TV的补充的移动或者平板apps，它们并不和TV进行交互。其中的例子有Zeebox (最近获得了来自于Sky的投资), Flip.tv, GetGlu以及Miso。这些apps集中于提供一个观看电视的并行应用，让你在看电视的时候也能与你的个人设备进行交互。在这些apps中，你还可以加入那些提供清单内容的apps。据消费者调查显示，平板电脑对于TV来说，是一个天然伴侣——据<a href="http://blogs.forrester.com/sarah_rotman_epps/12-04-11-the_tablet_tv_connection" target="_blank">Forrester</a>称，美国85%的平板电脑用户会在看电视的时候用平板电脑，而据Nielsen称，用户使用平板电脑的时间中，总共有30%是用于看电视的时候的。</p>
<p><em>3. Closed loop apps</em>这些apps是真正将移动端以及TV联合起来的。其中有些应用了DLNA 和AirPlay来选择并控制流向TV屏幕的内容。最简单的例子是Apple的Airplay，让你可以通过Apple TV来在你的TV屏幕上播放存储在MacBook中的电影。难找的是那些能和广播TV功能进行交互、可以使用智能机设置机顶盒而不仅仅将TV作为一个显示器来用的apps。然而， 在一个设备上发现内容以及频道并将这些内容导入到TV中是更为困难的问题，因为这涉及到TV或者机顶盒的整合问题。这是要有所创新真正需要做的地方。</p>
<h3><strong>碎片化噩梦</strong></h3>
<p>为TV或者机顶盒开发是非常具有挑战性的，无论是开发TV apps还是机顶盒apps，都应该想办法弥合其中的缝隙，或者就直接开发一个独立的app。为什么呢？</p>
<p><strong>-</strong><strong>有</strong><strong>10</strong><strong>多个平台。</strong>所有人都在试图为他们自己的TV或者机顶盒推行某种应用环境。例如，Samsung, Panasonic, Sharp, LG, Sony, Yahoo, Google TV, Boxee, InView, WyPlay, YouView (eventually) 以及 HBBTV – 更不用说 <a href="http://twitter.com/#!/andreascon/statuses/158603060791349248" target="_blank">Android spin-offs</a>.这些平台有些是封闭的，有些有开发者项目。要想了解一个全面清单，可以看<a href="http://www.webapptrend.com/(http/::en.wikipedia.org:wiki:Smart_TV#List_of_notable_Smart_TV_platforms" target="_blank">Wikipedia page</a>。</p>
<p>没有开发人员可以同时为所有这些平台开发，那么，你到底要选择哪一个才能成功呢？</p>
<p><strong>-</strong><strong>未来会有多少联网</strong><strong>TV</strong><strong>？</strong>根据CEA (www.cea.org)的数据，在2011年售出了260m电视，其中大概有27%是联网的（数据来源FutureSource）。拥有联网能力的TV比率会迅速增加。假设所有这些售出的联网TV都真地与网络相连了，可以预估的市场仍然小于移动电话。实施上，问题比这个更复杂。</p>
<p>- <strong>很多“联网</strong><strong>TV</strong><strong>”只是有联网能力而已</strong>。有联网能力并不意味着一定连到网络上去了。</p>
<p><strong>-</strong><strong>这些设备的销量还没有多到让消费者可以意识到其中的某些应用有多糟糕</strong>。好的产品来源于不断的反馈，而现在针对联网TV还没有足够的消费者反馈数据。而且，也没有足够的理由让消费者去给予反馈，因为他们完全可以使用现有的系统来选择TV内容，比如机顶盒，或者PC和平板电脑上的catch-up TV服务。</p>

<h3><strong>TV</strong><strong>会有“</strong><strong>iPhone Moment</strong><strong>”那样的突破时刻吗</strong></h3>
<p>作为做过iPhone在移动领域推广的人，我可以确信地说，TV市场还没有像iPhone那样达到突破。然而，如果真有所突破，那么这个突破会决定性地改变开发现状。这一点对于在TV领域的初创公司以及其中的投资者、VC以及天使基金来说都很重要。</p>
<p>可以想象前iPhone时代的app开发状况。那时候，你往往需要在开发时考虑控制器或者手持设备厂商，并且要密切关注目标平台的变化。处理控制器以及手持设备相关问题非常复杂，且耗时很多——如果你处理的好的话，你会成为superstar，但更常见的情况是浪费了时间以及宝贵的资源。</p>
<p>在后iPhone时代，使用apps挣钱的方式发生了革命性改变。不需要再通过控制器或者手持设备了——你可以直接面对平台领域竞争的赢家，并且直接将你的app放到它的商店中去。而在TV产业中，这样的环境还没有形成。</p>
<p>对于TV领域，有一些是可以带来“iPhone moment”的产品。显然，Apple据说是要发布一个TV产品。现在的Apple TV就是个很好的产品了，但它还不是一个开放app平台。</p>
<p>Google TV也是一个成长起来的项目，成长缓慢但在稳步前进。</p>
<p>Xbox也是一匹黑马，特别是根据最近的一个报道（<a href="http://t.co/DrM7mu1t" target="_blank">http://t.co/DrM7mu1t</a>），人们开始花更多时间在Xbox上观看内容。</p>
<p>当然别忘了在这个领域已经发展了一段时间的TV成员。TiVo, Sky+, YouView （UK）, HBB TV （Europe）在TV平台开发方面都非常活跃，并且，Roku提供Over The Top (OTT) boxes已经好几年了。</p>
<h3><strong>你应该将赌注下在何处？</strong></h3>
<p>目前，TV领域是一个扑朔迷离的领域，它在未来几年内还可能发生很多变化。当面临该选择哪种TV app 平台的时候，很难做出正确的抉择。但是，如果你一定想要一个值得关注的单子，我会列出下面这些：</p>
<p><strong>TV </strong><strong>厂商</strong>: Samsung 以及 Sony，因为它们销量高</p>
<p><strong>STB </strong><strong>公司</strong>: Boxee, Roku，因为它们行业领先</p>
<p><strong>Platforms</strong>: Google TV是最开放的平台，并且做了很多工作鼓励开发，包括签约了主要的tier-1服务，比如<a href="http://blog.hulu.com/2012/03/29/hulu-plus-arrives-on-seven-android-tablets-with-a-brand-new-style-2/" target="_blank">Hulu</a>。现在，它们销量还比较低，但值得对其进行关注 (<a href="http://www.google.com/tv/" target="_blank">http://www.google.com/tv/</a>)。</p>
<p>当然，要留意Apple。它的下一步大动作可能就是开发现在的Apple TV产品让开发者可以进行app开发。这是很多人都在等待的一个动作。</p>
<p>TV将来会像iPhone那样有所突破的，但有可能这个突破并不是Apple带来的。</p>
<p>作者简介：</p>
<p>- Ben (<a href="http://www.twitter.com/#!/@benhookway" target="_blank">@benhookway</a>)</p>
<p>[Ben Hookway在美国、欧洲以及亚洲公司有着15年经验。他曾是Next Device（一个手机UI公司）以及Vidiactive（一个web视频系统提供商）的CEO。他现在在为好几个科技公司工作，你可以通过ben@etherow.com联系到他。]</p>
<p>原文链接：<a href="http://www.visionmobile.com/blog/2012/04/developing-for-tv-crossing-the-chasm-between-screens/">Developing for TV: Crossing the chasm between screens</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Firefox上Web开发工具库一览" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2011%2F12%2F589.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2785.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63472158133518468113493795.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Firefox上Web开发工具库一览</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="2012年Web设计和开发的15个趋势" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2748.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2785.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63472158133810237025080416.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">2012年Web设计和开发的15个趋势</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="HTML5游戏开发之将Easel.js和Box2d在画布中结合起来" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2712.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2785.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63472158133948703924868941.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">HTML5游戏开发之将Easel.js和Box2d在画布中结合起来</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何设计一个优秀的儿童应用？" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2011%2F11%2F405.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2785.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63472158134130734913493636.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何设计一个优秀的儿童应用？</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><div>来源：http://www.webapptrend.com/2012/05/2785.html</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/9/634721557005553776.html]]></link>
<title><![CDATA[JetBrains发布AppCode，面向Objective-C的IDE]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Wed, 09 May 2012 10:44:23 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <span style="font-family: Arial; font-size: 14px; line-height: 24px; "><span style="color:#ff0000;">本文来源于我在InfoQ中文站翻译的文章，原文地址是：<a href="http://www.infoq.com/cn/news/2012/02/jetbrains-appcode">http://www.infoq.com/cn/news/2012/02/jetbrains-appcode</a></span></span><p>近日，JetBrains发布了<a href="http://www.jetbrains.com/objc">AppCode</a>，面向Objective-C的IDE，其感觉非常类似于面向Java的<a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>编辑器。</p><p>熟悉IDEA的开发者会注意到他们之间的相似性。其运行时完全使用Java实现，这意味着要想运行该IDE需要安装JVM（1.6+），如果没有安装JVM，那么Lion就会在应用启动前提示下载最新的JVM；在默认情况下，其他版本的OSX已经安装好了JVM。</p><p>与其他IDE一样，熟悉该应用的使用方式需要花一些时间。熟悉Xcode（以及之前的ProjectBuilder）的开发者很可能会花些时间熟悉该应用的使用方式，但已有的IntelliJ使用经验将会大大缩短熟悉时间。与版本控制系统的集成包含了所有主流产品（Git、Subversion与Mercurial）与一些年代较远的产品（CVS）。</p><p>AppCode可以打开Xcode项目，虽然并没有取代Interface Builder，但它可以加载nib与xib，并在已安装的Interface Builder版本中打开。此外，对于iOS开发来说，AppCode可以启动Apple Developer Tools模拟器。</p><p>代码检测可以查找遗漏的retains/releases，还会提示用户将其包含进来，它还支持最近iOS构建中新加的GC与ARC。代码中的坏味道会被高亮显示出来，并且可以通过快速修复选项进行修复，还可以使用与其他JetBrains IDE中相同的重构工具进行重构。</p><p>最后，在AppCode中测试要比在Xcode中更为轻松，这是通过集成的OCUnit运行器实现的。Xcode将测试看作是构建期的行为，AppCode与此不同，它可以在IDE中加载并调试测试，包括在测试过程中调试变量。</p><p>AppCode可用在Mac OS X 10.5+上，需要提前安装好JVM与Apple开发者工具。它提供了<a href="http://download.jetbrains.com/objc/AppCode-1.0.dmg">30天的免费试用期</a>。教育机构、公司以及开源项目开发可以免费使用AppCode。其许可地址是http://www.jetbrains.com/objc/buy/license-matrix.jsp。</p><p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2011/10/jetbrains-appcode">JetBrains releases AppCode, an IDE for Objective-C</a></p>
            
                    <div>来源：http://blog.csdn.net/ricohzhanglong/article/details/7229303</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040851866036.html]]></link>
<title><![CDATA[xcode4中配置Three20开发环境]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:45 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<p>方便自己记忆：转自http://blog.csdn.net/favormm/article/details/6739311<br>
</p>
<p>大名鼎鼎的Three20想必大家都听说过，很多APP都是用它开发的，开发UI很方便，功能也很强大，用它就不必深究枯燥的iOS SDK。今天介绍一下如何在xcode4中配置环境支持Three20开发。</p>
<p>1。首先我们得去把源码下载下来。网址在：<a href="https://github.com/facebook/three20">https://github.com/facebook/three20</a>&nbsp;解压放在我们工程目录下。</p>
<p>2。在解压目录下src/Three20下<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">的Three20.xcodeproj拖到自己的工程里，在弹出的对话框中Destination栏“Copy Items into destination group's folder”不要选中，Addto targets栏中选中自己的工程target,并不是unit
 test target,然后点Finish.</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">3。在工程中展开Three20,你会发现有一个group叫<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Dependencies，展开它，下面有六个依赖工程，选中它们，并拖到自己的工程中去。</span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">4。将src目录下的<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Three20.bundle<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">拖到自己的工程中去。</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">5。加入需要的静态库。如下图红色部份是加入的：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200431385220950_1314861080eV93.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">6。加入需要的目标依赖项。如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200431508443450_13148611753nQw.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">7。加入Quartz.framework</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">8。在工程配置页，build里Header Search Paths里加入</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(CONFIGURATION_BUILD_DIR)/../../three20&quot;<br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200431683665880_1314861554MJzH.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">9。在<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Other
 Linker Flags里加入&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-ObjC&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-all_load
 如图：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200431897221770_1314861618pQBq.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">10。然后在需要用Three20的文件中引入头文件<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">#import
 &quot;Three20/Three20.h&quot; 就可以用Three20的功能了。</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><br>
</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">还有一种方法就是利用脚本，在src目录下面有一个script目录，打开terminal进入到script目录下，然后运行命令：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"></span></span></p>
<div class="dp-highlighter bg_python">
<ol class="dp-py" start="1">
<li class="alt"><span><span>python&nbsp;ttmodule.py&nbsp;-p&nbsp;path/to/your/project/yourproject.xcodeproj&nbsp;Three20&nbsp;--xcode-version=</span><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li></ol>
</div>
<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">-p后面是你工程的绝对路径，当然也可是当前script的相对路径。<br>
</span></span>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这样就自动完成第一种方法中的各种配置。</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这儿有一些Three20的教程，example目录下也有不少demo工程</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:23px"></span></span></span></p>
<div id="article_content" class="article_content">
<li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-stylesheets-tutorial" href="http://mattvague.com/three20-stylesheets-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-width:0px; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Stylesheets iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-custom-cells-iphone-tutorial" href="http://mattvague.com/three20-custom-cells-iphone-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Custom Cells iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-tttableitem-tutorial" href="http://mattvague.com/three20-tttableitem-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Table Item Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><span style="color:#ff0000"><a href="http://www.codeios.com/thread-598-1-1.html"><span style="color:#ff0000">http://www.codeios.com/thread-598-1-1.html</span></a></span></li><li style="margin:0px 0px 0.2em; padding:0px"><a href="http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/"><span style="color:#ff0000">http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/</span></a></li><li style="margin:0px 0px 0.2em; padding:0px">&nbsp;<a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a>
<p style="margin:0px 0px 0.2em; padding:0px"><br>
<br>
<a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a><a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a></p>
</li></div>
<br>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7222350</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040767174816.html]]></link>
<title><![CDATA[移动互联网一周（2012.2.6-2012.2.12）大事记]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:36 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<h1 id="subject_tpc" class="read_h1">1:360全部APP被苹果一夜下架！据说苹果总部发飙</h1>
<p><a target="_blank" href="http://bbs.weiphone.com/read-htm-tid-3964997.html">http://bbs.weiphone.com/read-htm-tid-3964997.html</a></p>
<p><br>
</p>
<p>2：<span class="link_title"><a href="http://blog.csdn.net/leiphone/article/details/7236080">苹果强悍：8.7%的市场份额，75%的行业利润&nbsp;</a></span></p>
<p><a target="_blank" href="http://blog.csdn.net/leiphone/article/details/7236080">http://blog.csdn.net/leiphone/article/details/7236080</a></p>
<p>3：苹果市&#20540;超Google&#43;微软总和</p>
<p>http://news.mydrivers.com/1/217/217048.htm</p>
<p><br>
</p>
<p><br>
<a target="_blank" href="http://bbs.weiphone.com/read-htm-tid-3964997.html"></a></p>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7238310</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040766458964.html]]></link>
<title><![CDATA[XCode4配置three20，自己记录下]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:36 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<p>大名鼎鼎的Three20想必大家都听说过，很多APP都是用它开发的，开发UI很方便，功能也很强大，用它就不必深究枯燥的iOS SDK。今天介绍一下如何在xcode4中配置环境支持Three20开发。</p>
<p>1。首先我们得去把源码下载下来。网址在：<a href="https://github.com/facebook/three20">https://github.com/facebook/three20</a>&nbsp;解压放在我们工程目录下。</p>
<p>2。在解压目录下src/Three20下<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">的Three20.xcodeproj拖到自己的工程里，在弹出的对话框中Destination栏“Copy Items into destination group's folder”不要选中，Addto targets栏中选中自己的工程target,并不是unit
 test target,然后点Finish.</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">3。在工程中展开Three20,你会发现有一个group叫<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Dependencies，展开它，下面有六个依赖工程，选中它们，并拖到自己的工程中去。</span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">4。将src目录下的<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Three20.bundle<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">拖到自己的工程中去。</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">5。加入需要的静态库。如下图红色部份是加入的：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200430830079300_1314861080eV93.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">6。加入需要的目标依赖项。如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200430901931720_13148611753nQw.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">7。加入Quartz.framework</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">8。在工程配置页，build里Header Search Paths里加入</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(CONFIGURATION_BUILD_DIR)/../../three20&quot;<br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200430967708300_1314861554MJzH.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">9。在<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Other
 Linker Flags里加入&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-ObjC&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-all_load
 如图：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347200431052369200_1314861618pQBq.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">10。然后在需要用Three20的文件中引入头文件<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">#import
 &quot;Three20/Three20.h&quot; 就可以用Three20的功能了。</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><br>
</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">还有一种方法就是利用脚本，在src目录下面有一个script目录，打开terminal进入到script目录下，然后运行命令：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"></span></span></p>
<div class="dp-highlighter bg_python">
<ol class="dp-py" start="1">
<li class="alt"><span><span>python&nbsp;ttmodule.py&nbsp;-p&nbsp;path/to/your/project/yourproject.xcodeproj&nbsp;Three20&nbsp;--xcode-version=</span><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li></ol>
</div>
<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">-p后面是你工程的绝对路径，当然也可是当前script的相对路径。<br>
</span></span>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这样就自动完成第一种方法中的各种配置。</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这儿有一些Three20的教程，example目录下也有不少demo工程</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:23px"></span></span></span></p>
<div id="article_content" class="article_content">
<li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-stylesheets-tutorial" href="http://mattvague.com/three20-stylesheets-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-width:0px; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Stylesheets iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-custom-cells-iphone-tutorial" href="http://mattvague.com/three20-custom-cells-iphone-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Custom Cells iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-tttableitem-tutorial" href="http://mattvague.com/three20-tttableitem-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Table Item Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><span style="color:#ff0000"><a href="http://www.codeios.com/thread-598-1-1.html"><span style="color:#ff0000">http://www.codeios.com/thread-598-1-1.html</span></a></span></li><li style="margin:0px 0px 0.2em; padding:0px"><a href="http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/"><span style="color:#ff0000">http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/</span></a></li><li style="margin:0px 0px 0.2em; padding:0px">&nbsp;<a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a>
<p style="margin:0px 0px 0.2em; padding:0px"><br>
</p>
</li></div>
<br>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7259433</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040729799933.html]]></link>
<title><![CDATA[ipad,iphone启动图片命名]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:32 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<code class="plain">Default-Portrait.png iPad专用竖向启动画面 768x1024或者768x1004</code>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">Default-Landscape.png iPad专用横向启动画面 1024x768或者1024x748</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="plain">Default-PortraitUpsideDown.png iPad专用竖向启动画面(Home按钮在屏幕上面)，可省略 768x1024或者768x1004</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="plain">Default-LandscapeLeft.png iPad专用横向启动画面(可省略), 1024x768或者1024x748</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="plain">Default-LandscapeRight.png iPad专用横向启动画面(可省略), 1024x768或者1024x748</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="plain">Default.png iPhone默认启动图片，如果没有提供上面几个iPad专用启动图片，则在iPad上运行时也使用Default.png（不推荐） 320x480或者320x460</code></td>
</tr>
</tbody>
</table>
</div>
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="plain">Default@2x.png iPhone4启动图片640x960或者640x920</code></td>
</tr>
</tbody>
</table>
<p><br>
</p>
<p>iOS设备现在有三种不同的分辨率：<span id="rlt_1" style="border-bottom:1px solid #FA891B">iPhone</span> 320x480, iPhone 4 640x960, iPad 768x1024。以前程序的启<span id="rlt_4" style="border-bottom:1px solid #FA891B">动画</span>面(<span id="rlt_2" style="border-bottom:1px solid #FA891B">图片</span>)只要准备一个Default.png就可以了，但是现在变得复杂多了。<br>
<br>
如果一个程序，既支持iPhone又支持iPad，那么它需要包含下面几个图片：<br>
<br>
Default-Portrait.png iPad专用竖向启动画面 768x1024或者768x1004<br>
<br>
Default-Landscape.png iPad专用横向启动画面 1024x768或者1024x748<br>
<br>
Default-PortraitUpsideDown.png iPad专用竖向启动画面(Home按钮在<span id="rlt_5" style="border-bottom:1px solid #FA891B">屏幕</span>上面)，可省略 768x1024或者768x1004<br>
<br>
Default-LandscapeLeft.png iPad专用横向启动画面，可省略 1024x768或者1024x748<br>
<br>
Default-LandscapeRight.png iPad专用横向启动画面，可省略 1024x768或者1024x748<br>
<br>
Default.png iPhone默认启动图片，如果没有提供上面几个iPad专用启动图片，则在iPad上运行时也使用Default.png（不推荐） 320x480或者320x460<br>
<br>
<a href="mailto:Default@2x.png%20">Default@2x.png</a> <span id="rlt_6" style="border-bottom:1px solid #FA891B">
iPhone4</span>启动图片640x960或者640x920<br>
<br>
为了在iPad上<span id="rlt_3" style="border-bottom:1px solid #FA891B">使用</span>上述的启动画面，你还需要在info.plist中加入key: UISupportedInterfaceOrientations。同时，加入&#20540;UIInterfaceOrientationPortrait, UIInterfacOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight。<br>
</p>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7305484</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040729228046.html]]></link>
<title><![CDATA[从iOS应用被拒看苹果的审核。]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:32 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            最近提交了一个应用，<a target="_blank" href="http://itunes.apple.com/us/app/mao-yan-mao-yu-mao-mao-mao/id510575757?ls=1&amp;mt=8">猫言猫语(毛毛猫)</a>。<br /><p>我比较喜欢一些蛋疼的语录，已经做了一个<a href="http://itunes.apple.com/us/app/ma-la-yu-lu/id487596160?ls=1&amp;mt=8">麻辣语录</a>的应用，不过光文字，没有图片感觉比较单调。而猫言猫语就是用猫的独特眼光表达了当代人的那些蛋疼语录，正好图文并茂。正好和我的文字应用想搭配。不过，在互联网上找到的图片很少，毕竟涉及到版权问题，不能利用所有的图片。所以，我的想法很简单，帮助猫言猫语做一个应用，展示这些图片，给没有看够的，喜欢看这些蛋疼图片语录的朋友，提供正版图书的购买网址。应用很简单，也算是一种尝试。为了简单期间，我把所有收集到的近一百张照片全部放到应用里面，大概有5M的样子。做出来的样子大概是这样的</p><p><img src="/Upload/EditorImage/image/iphone/201205/6347200430684294061333029787_9020.png" alt="" /></p><p>这样的应用提交上去了，审核时被拒，两个看似非常可笑的原因</p><pre name="code" class="brush:plain">2.23

We found that your app does not follow the iOS Data Storage Guidelines, which is required per the App Store Review Guidelines.

In particular, we found that on launch and/or content download, your app stores 4.9 Mb data. To check how much data your app is storing:</pre><br /><pre name="code" class="brush:plain">3.12

We also found that your app includes URLs (http://www.hehexiao.com/) which do not properly navigate to the intended destination, which is not in compliance with the App Store Review Guidelines.</pre><br />在原因2.23中，被拒理由特别指出，加载时有4.9M的数据下载。这个4.9M数据，我在第一次加载时，从应用目录拷贝到documents目录内。违反了，苹果的数据存储规则。后来了解到不能把图片放到documents目录内，没办法，我使用的three20进行图片展示，图片不放在documents目录内，只能放在网上，进行加载。<p>而原因3.12更是有意思，之前都没有碰到过。支持support url中没有包含猫言猫语应用的相关信息，是的没错，http://www.hehexiao.com只是我的一个笑话网站。没想到苹果现在加强了严格审查，要求support url中必须包含应用相关的信息，解决方案，只能做了一个页面，单独介绍下这个应用。<br /></p><p>以上两个原因在做andriod应用，根本算不上什么问题，但是对于苹果来说，就是被拒的理由。这样的理由对于app store中app应用保证了质量，也使开发者真真的去好好做每个应用，而不是凑合了事。对于这样审核，我举双手赞同，只有这样app store这个生态系统才能长久，不至于被下三滥的应用拉低档次。</p><p>最新反馈：经过修改，已经通过审核，现在已经在app store上上线，链接就不发了，省的说是做广告。<br /></p><p>转帖注明:http://blog.csdn.net/ugg<br /></p><p><br /></p><br />
            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7409053</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634720040697732839.html]]></link>
<title><![CDATA[xcode代码提示功能失效的解决方法]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 16:34:29 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <div id="content_art">                        <p>以前好像很少碰到Xcode中代码提示出问题的情况，即使碰到了大多也是后来自然的就好了，最近换用了Xcode4.3，经常遇到这个问题。</p><p>通过无所不能的<a href="http://www.haogongju.net/tag/%E8%B0%B7%E6%AD%8C" target="_blank" title="谷歌">谷歌</a>大神，找到了<a href="http://www.haogongju.net/tag/%E8%8B%B9%E6%9E%9C" target="_blank" title="苹果">苹果</a><a href="http://www.haogongju.net/tag/%E8%AE%BA%E5%9D%9B" target="_blank" title="论坛">论坛</a>上提供的一个解决方案（<a title="https://discussions.apple.com/thread/2746273?start=0&amp;tstart=0" href="https://discussions.apple.com/thread/2746273?start=0&amp;tstart=0" target="_blank" rel="nofollow">https://discussions.apple.com/thread/2746273?start=0&amp;tstart=0</a>）：</p><p>1. cd进入~/Library/Developer/Xcode/DerivedData<br />2. ls一下<br />3. 找到你的<a href="http://www.haogongju.net/tag/%E9%A1%B9%E7%9B%AE" target="_blank" title="项目">项目</a>所用的目录（一般以你的项目名开头）<br />4. cd 目录名<br />5. rm -r Index 删除掉你的项目所用的索引文件夹</p><p>或者在Xcode-&gt;Window-&gt;Organizer-&gt;Projects选中你的项目，点击如下图Derived Data右侧的Delete按钮<br /><a href="http://www.1mima.com/xcode4%e4%b8%ad%e4%bb%a3%e7%a0%81%e8%a1%a5%e5%85%a8code-completion%e5%a4%b1%e6%95%88%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/xcode-organizer-derived-data/" target="_blank" rel="nofollow"><img class="alignnone size-medium wp-image-223" title="Xcode-Organizer-Derived-Data" src="/Upload/EditorImage/image/iphone/201205/634720043036917160Xcode-Organizer-Derived-Data-300x148.png" alt="" height="148" width="300" /></a></p><p>注：<br />(1) 原文表示删除&nbsp;~/Library/Developer/Xcode/DerivedData下所有的文件，我尝试发现只需要删除当前项目相关的索引文件即可<br />(2) &nbsp;DerivedData从字面上理解应该是收集到的<a href="http://www.haogongju.net/tag/%E6%95%B0%E6%8D%AE" target="_blank" title="数据">数据</a>，应该是Xcode针对这个项目缓存的一些数据，不会影响项目本身的完整性</p><p>原文地址：<a href="http://www.1mima.com/xcode4%E4%B8%AD%E4%BB%A3%E7%A0%81%E8%A1%A5%E5%85%A8code-completion%E5%A4%B1%E6%95%88%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/" target="_blank" rel="nofollow">http://www.1mima.com/xcode4%E4%B8%AD%E4%BB%A3%E7%A0%81%E8%A1%A5%E5%85%A8code-completion%E5%A4%B1%E6%95%88%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</a></p>                    </div><br />
            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7535343</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/7/634719941466502330.html]]></link>
<title><![CDATA[iOS 5.1Web存储方式的打破会影响到Web App吗？]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Mon, 07 May 2012 13:40:33 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[<p>iOS<span style="font-family: 宋体;">上很多采用</span><span style="font-family: 'Times New Roman';">Web</span><span style="font-family: 宋体;">存储</span><span style="font-family: 'Times New Roman';">API</span><span style="font-family: 宋体;">来实现持久性数据存储的</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">，都在近期</span><span style="font-family: 'Times New Roman';">iOS</span><span style="font-family: 宋体;">升级到</span><span style="font-family: 'Times New Roman';">5.1</span><span style="font-family: 宋体;">版本后，受到了的严重影响。受到影响的</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">多用</span><a href="http://phonegap.com/">PhoneGap</a>或者其他采用<span style="font-family: 'Times New Roman';">WebKit API</span><span style="font-family: 宋体;">来实现数据存储的开发工具开发。比如，这一款</span><a href="http://itunes.apple.com/us/app/performance/id454021123?mt=8">App</a>看起来正受着影响：</p>
<p><a href="http://www.webapptrend.com/wp-content/uploads/2012/05/2.jpg"><img class="alignnone size-medium wp-image-2742" title="2" src="/Upload/EditorImage/image/iphone/201205/6347199437673736742-300x114.jpg" alt="" width="300" height="114" /></a></p>
<p>其他的开发者表示：</p>
<p><em>“我收集的统计数据表明，用户经常因为App<span style="font-family: 宋体;">每次打开之后，之前的</span>设置常常被删除，而抛弃一款App<span style="font-family: 宋体;">。这其实是一个相当致命的错误，应该被马上纠正。而且不要忘了，开发者纠正以后，到</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">允许新版本上架，还有段时间要等。</span>”</em></p>
<p>准确地说，WebKit<span style="font-family: 宋体;">被用于存储本地数据文件到</span><span style="font-family: 'Times New Roman';">Library/Webkit</span><span style="font-family: 宋体;">中。</span><span style="font-family: 'Times New Roman';">Library/Webkit</span><span style="font-family: 宋体;">这个存储目录在过去被操作系统看做是永久的，并且备份于</span><span style="font-family: 'Times New Roman';">iCloud</span><span style="font-family: 宋体;">中。而</span><span style="font-family: 'Times New Roman';">iOS 5.1</span><span style="font-family: 宋体;">中，数据被存储于</span><span style="font-family: 'Times New Roman';">Library/Caches</span><span style="font-family: 宋体;">中，这意味着这都被当成了临时数据，并有可能被删除。</span><span style="font-family: 'Times New Roman';">W3C</span><span style="font-family: 宋体;">的候选意见，对</span><span style="font-family: 'Times New Roman';">localStorage</span><span style="font-family: 宋体;">给出的评价是（</span><a href="http://www.w3.org/TR/webstorage/#dom-localstorage">原文点击这里</a>）：</p>
<p><em>“用户代理应该将本地存储中的数据分散开，这是基于安全性的考虑，或者在用户需要他们这么做时他们应该如此。”</em></p>
<p>一个嵌入式浏览器和传统Web<span style="font-family: 宋体;">浏览器并不完全一样。如果你在</span><span style="font-family: 'Times New Roman';">Webkit</span><span style="font-family: 宋体;">中用</span><span style="font-family: 'Times New Roman';">SQLite</span><span style="font-family: 宋体;">，那这将不包含在</span><span style="font-family: 'Times New Roman';">W3C HTML5 API</span><span style="font-family: 宋体;">中，因为这些</span><span style="font-family: 'Times New Roman';">API</span><span style="font-family: 宋体;">已不再提供</span><span style="font-family: 'Times New Roman';">Web SQL</span><span style="font-family: 宋体;">。</span></p>
<p>这个问题的复杂性在于，还会存在一个<span style="font-family: 'Times New Roman';">Bug</span><span style="font-family: 宋体;">（</span><a href="http://openradar.appspot.com/radar?id=1608403">详情点击这里</a>），它导致升级<span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">至新版本之后数据的丢失。还有其他问题存在于目前的</span><span style="font-family: 'Times New Roman';">Web App</span><span style="font-family: 宋体;">，以及应用了嵌入式</span><span style="font-family: 'Times New Roman';">UIWebView</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">中。</span></p>
<p>PhoneGap<span style="font-family: 宋体;">在这个问题上是有一定弹性的。因为它可以调用本地</span><span style="font-family: 'Times New Roman';">API</span><span style="font-family: 宋体;">，这将在可能出现问题时继续工作。不过不好的情况是，代码会因此更针对特定平台，而破坏其跨平台性。</span></p>
<p>从<span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">开发者论坛上在</span><span style="font-family: 'Times New Roman';">iOS 5.1</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Times New Roman';">beta</span><span style="font-family: 宋体;">版发布期间的讨论，可以看出</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">已经意识到这个问题，但正式版发布时仍没得到解决。这给我们的感觉是，</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">似乎恼怒于众多的</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">（无论</span><span style="font-family: 'Times New Roman';">Web</span><span style="font-family: 宋体;">还是本地）运用</span><span style="font-family: 'Times New Roman';">Web</span><span style="font-family: 宋体;">存储来加速，而不是仅用来存储用户创建的内容。</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">觉得，这是在给</span><span style="font-family: 'Times New Roman';">iOS</span><span style="font-family: 宋体;">设备上本来就捉襟见肘的存储空间施加更大压力。</span></p>
<p>想扩大一部<span style="font-family: 'Times New Roman';">iPad</span><span style="font-family: 宋体;">或者</span><span style="font-family: 'Times New Roman';">iPhone</span><span style="font-family: 宋体;">的存储空间，除了花更多的钱再买一部，我们都知道别无他法。</span></p>
<p>这的确是个问题。不过你不能否认的是，Apple<span style="font-family: 宋体;">认为</span><span style="font-family: 'Times New Roman';">PhoneGap</span><span style="font-family: 宋体;">一类的开发工具，或者体验接近本地</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Times New Roman';">Web App</span><span style="font-family: 宋体;">，这对于</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">而言某种程度绕过了它的商业开发体系，而它绝对不鼓励这么做。</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">更喜欢的还是完全采用</span><span style="font-family: 'Times New Roman';">iOS SDK</span><span style="font-family: 宋体;">开发的</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">。</span></p>
<p>Apple<span style="font-family: 宋体;">从真正意义上的本地</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">受益，这导致了</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">平台常显出一定程度的排他性。而且</span><span style="font-family: 'Times New Roman';">App</span><span style="font-family: 宋体;">只能从</span><span style="font-family: 'Times New Roman';">App Store</span><span style="font-family: 宋体;">上获得，同时</span><span style="font-family: 'Times New Roman';">Apple</span><span style="font-family: 宋体;">从中抽取一定比例费用。</span></p>
<p>官方的<span style="font-family: 'Times New Roman';">iOS</span><span style="font-family: 宋体;">数据存储指南可以</span><a href="https://developer.apple.com/icloud/documentation/data-storage/">点击这里</a>获得。</p>

<p>文章发表于2012<span style="font-family: 宋体;">年</span><span style="font-family: 'Times New Roman';">4</span><span style="font-family: 宋体;">月</span><span style="font-family: 'Times New Roman';">1</span><span style="font-family: 宋体;">日。</span></p>
<p>原文作者<span style="font-family: 'Times New Roman';">Tim Anderson</span><span style="font-family: 宋体;">，著名</span><span style="font-family: 'Times New Roman';">IT</span><span style="font-family: 宋体;">自由记者。</span></p>
<p>原文链接：</p>
<p><a href="http://www.itwriting.com/blog/5656-apple-breaks-web-storage-in-ios-5-1-does-not-care-about-web-apps.html?utm_source=html5weekly&amp;utm_medium=email">http://www.itwriting.com/blog/5656-apple-breaks-web-storage-in-ios-5-1-does-not-care-about-web-apps.html?utm_source=html5weekly&amp;utm_medium=email</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Web Apps概览" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F02%2F1688.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2741.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63471994378805520215002570.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Web Apps概览</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="大调查：Apps VS. Web 谁将是未来主流？" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F03%2F2339.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2741.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63471994379399595518491722.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">大调查：Apps VS. Web 谁将是未来主流？</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Google Web Apps开发指南之项目样例（上）" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F02%2F1912.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2741.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63471994379960384015814605.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Google Web Apps开发指南之项目样例（上）</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Google Web App开发指南第二章：交互设计" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F02%2F1837.html&from=http%3A%2F%2Fwww.webapptrend.com%2F2012%2F05%2F2741.html">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="/Upload/EditorImage/image/iphone/201205/63471994380506482315725394.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Google Web App开发指南第二章：交互设计</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><div>来源：http://www.webapptrend.com/2012/05/2741.html</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/5/634718053159515818.html]]></link>
<title><![CDATA[进程通信之二 管道技术第一篇 输入输出的重定向]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Sat, 05 May 2012 09:20:34 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            <span style="font-size:18px;"></span><p><span style="font-size:18px;">继上一篇《</span><a href="http://blog.csdn.net/morewindows/article/details/6804157"><span style="font-size:18px;color:#800080;">进程通信之一使用<span style="font-family:Times New Roman;">WM_COPYDATA C++</span>及<span style="font-family:Times New Roman;">C#</span>实现</span></a><span style="font-size:18px;">》，<span style="color:black;">进程通信之二</span>将分为三篇文章讲解如何使用管道技术来完成进程通信功能。三篇文章目录如下：</span></p><p><span style="color:black;"><span style="font-size:18px;"><span style="color:black;">1</span><span style="color:black;">．</span>《</span><a href="http://blog.csdn.net/morewindows/article/details/7390350"><span style="font-size:18px;">进程通信之二 </span></a></span><span style="font-size:18px;color:black;"><a href="http://blog.csdn.net/morewindows/article/details/7390350">管道技术第一篇 </a></span><span style="color:black;"><a href="http://blog.csdn.net/morewindows/article/details/7390350"><span style="font-size:18px;">输入输出的重定向</span></a><span style="font-size:18px;">》</span></span></p><p><span style="font-size:18px;"><span style="color:black;"><span style="color:black;">2</span><span style="color:black;">．</span>《<a href="http://blog.csdn.net/morewindows/article/details/7390441">进程通信之二 </a></span><span style="color:black;"><a href="http://blog.csdn.net/morewindows/article/details/7390441">管道技术第二篇 </a></span><span style="color:black;"><a href="http://blog.csdn.net/morewindows/article/details/7390441">匿名管道</a>》</span></span></p><p><span style="font-size:18px;"><span style="color:black;"><span style="color:black;">3</span><span style="color:black;">．</span>《进程通信之二 </span><span style="color:black;">管道技术第三篇 </span><span style="color:black;">命名管道》</span></span></p><p><span style="color:black;"><span style="font-family:Times New Roman;font-size:18px;"></span></span>&nbsp;</p><p><span style="font-size:18px;">本篇将介绍<span style="color:black;">输入输出的重定向问题，</span>先来看一个小小的实例，设有一个程序，该程序的输入输出为标准输入输出即从键盘上输入，输出到屏幕。现在要重定向输入法输出，使程序从文件中读取数据，处理后输出到文件。程序代码如下（称此程序为示例程序）：</span></p><span style="font-size:18px;"></span><pre class="brush:cpp" name="code">#include &lt;stdio.h&gt;
int main()
{
	int n;
	while (scanf(&quot;%d&quot;, &amp;n) != EOF) //标准输入时，可按ctrl+z来输入EOF
	{
		n *= 2;
		printf(&quot;%d\n&quot;, n);
	}
}</pre><p><span style="font-size:18px;">试给出几种不同的实现方法，另外如果没有程序代码，只有可执行文件，又应该如何做了？</span></p><h2>实现方法一使用C语言的freopen()函数</h2><p><span style="font-size:18px;color:black;">函数功能：重定向控制台的输入输出</span></p><p><span style="font-size:18px;color:black;">函数原型：</span></p><span style="font-family:Times New Roman;font-size:18px;"></span><p align="left"><span style="font-family:Times New Roman;"><span style="color:black;">FILE *</span><span style="color:#880000;">freopen</span><span style="color:black;">(</span></span></p><p align="left"><span style="font-family:Times New Roman;"><span style="color:black;">&nbsp;&nbsp; </span>const <span style="color:gray;">char</span><span style="color:black;"> *</span><span style="color:gray;">path</span><span style="color:black;">,</span></span></p><p align="left"><span style="font-family:Times New Roman;"><span style="color:black;">&nbsp;&nbsp; </span>const <span style="color:gray;">char</span><span style="color:black;"> *</span><span style="color:gray;">mode</span><span style="color:black;">,</span></span></p><p align="left"><span style="font-family:Times New Roman;"><span style="color:black;">&nbsp;&nbsp; </span>FILE *<span style="color:gray;">stream</span></span></p><p><span style="color:black;"><span style="font-family:Times New Roman;">);</span></span></p><p><span style="font-size:18px;color:black;">函数说明：</span></p><p><span style="font-size:18px;color:black;">第一个参数为文件指针（也可以用来指向标准输入输出）。</span></p><p><span style="font-size:18px;"><span style="color:black;">第二个参数为打开方式，</span><span style="color:#000077;"><span style="font-family:Times New Roman;">&quot;w&quot;</span></span>表示<span style="color:black;">写，</span><span style="color:#000077;"><span style="font-family:Times New Roman;">&quot;r&quot;</span></span>表示<span style="color:black;">读，</span><span style="color:#000077;"><span style="font-family:Times New Roman;">&quot;a&quot;</span></span>表示<span style="color:black;">追加。其它设置可以参考</span><span style="color:black;"><span style="font-family:Times New Roman;">MSDN</span></span><span style="color:black;">。</span></span></p><p><span style="font-size:18px;"><span style="color:black;">第三个参数为</span><span style="font-family:Times New Roman;">FILE</span>类型的指针，传入<span style="color:#a000a0;"><span style="font-family:Times New Roman;">stdin</span></span>表示标准输入，传入<span style="color:#a000a0;"><span style="font-family:Times New Roman;">stdout</span></span>表示标准输出。</span></p><p><span style="font-size:18px;"></span>&nbsp;</p><p><span style="font-size:18px;">这样用只要用简单一句<span style="font-family:Times New Roman;"><span style="color:#880000;">freopen</span><span style="color:black;">(</span><span style="color:#000077;">&quot;infile.txt&quot;</span><span style="color:black;">, </span><span style="color:#000077;">&quot;r&quot;</span><span style="color:black;">, </span><span style="color:#a000a0;">stdin</span><span style="color:black;">);</span></span><span style="color:black;">就可以使程序中的</span><span style="color:black;"><span style="font-family:Times New Roman;">scanf()</span></span><span style="color:black;">函数从文件中读取数据作为输入，同样</span><span style="font-family:Times New Roman;"><span style="color:#880000;">freopen</span><span style="color:black;">(</span><span style="color:#000077;">&quot;outfile.txt&quot;</span><span style="color:black;">, </span><span style="color:#000077;">&quot;w&quot;</span><span style="color:black;">, </span><span style="color:#a000a0;">stdout</span><span style="color:black;">);</span></span><span style="color:black;">可以使程序中的</span><span style="color:black;"><span style="font-family:Times New Roman;">printf()</span></span><span style="color:black;">函数将输出由标准输出改成输出到文件。现在有个问题，将程序的输入输出重定向到文件后，还能改回到标准输入输出吗？答案是可以的，对第一个参数传入</span><span style="font-family:Times New Roman;">&quot;CON&quot;</span>这个字符串就可以了（<span style="font-family:Times New Roman;">linux</span>为<span style="font-family:Times New Roman;">&quot;/dev/console&quot;</span>）。</span></p><p><span style="font-family:Times New Roman;font-size:18px;"></span>&nbsp;</p><p><span style="font-size:18px;">下面就给出修改后的代码：</span></p><pre class="brush:cpp" name="code">//直接使用freopen()函数 来改变控制台的标准输入输出
#include &lt;stdio.h&gt;
int main()
{
	//将控制台的标准输入输出改成从文件中读取写入
	FILE *pFileRead = freopen(&quot;infile.txt&quot;, &quot;r&quot;, stdin);
	FILE *pFileWrite = freopen(&quot;outfile.txt&quot;, &quot;w&quot;, stdout);

	int n;
	while (scanf(&quot;%d&quot;, &amp;n) != EOF)
	{
		n *= 2;
		printf(&quot;%d\n&quot;, n);
	}

	fclose(pFileRead);
	fclose(pFileWrite);

	//回到到控制台的标准输入输出 windows为&quot;CON&quot; linux为&quot;/dev/console&quot;
	freopen(&quot;CON&quot;, &quot;r&quot;, stdin);
	freopen(&quot;CON&quot;, &quot;w&quot;, stdout); 
	printf(&quot;Finish 输入0表示结束:\n&quot;);
	do{
		scanf(&quot;%d&quot;, &amp;n);
	}while (n != 0);
	
	return 0;
}</pre><p><span style="font-size:18px;color:black;">运行结果如下图所示：</span></p><p><span style="color:black;"><span style="font-family:Times New Roman;font-size:18px;">&nbsp;<img alt="" src="/Upload/EditorImage/image/iphone/201205/6347180633943433570_1332576854vtPL.gif" /></span></span></p><p><span style="font-family:Times New Roman;font-size:18px;">可以看出该程序的输出输入已经完成了重定向。</span></p><p><span style="color:black;"><span style="font-family:Times New Roman;font-size:18px;">&nbsp;</span></span></p><h2>实现方法2 使用C++的ifstream和ofstream类</h2><span style="font-size:18px;"></span><p><span style="font-size:18px;">有些场合使用类来完成输入输出的重定向任务会更加方便和习惯一些。所幸<span style="font-family:Times New Roman;">C++</span>中就有<span style="color:blue;"><span style="font-family:Times New Roman;">ifstream</span></span>和<span style="color:blue;"><span style="font-family:Times New Roman;">ofstream</span></span>这二个类来帮助我们完成这一任务。这个二类的详细功能就不细说了。下面介绍下如何使用这二个类来重定向程序的输入输出（看的时候看慢点喔，不会会被很多类名给搞晕去^_^）。</span></p><p><span style="font-family:Times New Roman;font-size:18px;"></span>&nbsp;</p><p align="left"><span style="font-size:18px;">这二个类可以以读的方式和写的方法打开一个文件（<span style="color:blue;"><span style="font-family:Times New Roman;">ifstream</span></span>的首字母<span style="font-family:Times New Roman;">i</span>就表示<span style="font-family:Times New Roman;">in</span>，而<span style="color:blue;"><span style="font-family:Times New Roman;">ofstream</span></span>的首字母<span style="font-family:Times New Roman;">o</span>就表示<span style="font-family:Times New Roman;">out</span>），在<span style="font-family:Times New Roman;">iosfwd</span>文件中找到：</span></p><p align="left"><span style="font-family:Times New Roman;"><span style="font-size:18px;"><span style="color:black;">&nbsp;&nbsp;&nbsp; typedef </span><span style="color:blue;">basic_ifstream</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">, </span><span style="color:blue;">char_traits</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">&gt; &gt; </span><span style="color:blue;">ifstream</span><span style="color:black;">;</span></span></span></p><p align="left"><span style="FONT-FAMILY: Times New Roman"><span style="font-size:18px;"><span style="color:black;"><span style="font-family:Times New Roman;">&nbsp;&nbsp;&nbsp; </span>typedef </span><span style="color:blue;">basic_ofstream</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">, </span><span style="color:blue;">char_traits</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">&gt; &gt; </span><span style="color:blue;">ofstream</span><span style="color:black;">;</span></span></span></p><p align="left"><span style="font-size:18px;"><span style="color:black;">然后可以在</span><span style="color:black;"><span style="font-family:Times New Roman;">fstream</span></span><span style="color:black;">文件中找到</span><span style="color:blue;"><span style="font-family:Times New Roman;">basic_ifstream</span></span>类是继承于<span style="color:blue;"><span style="font-family:Times New Roman;">basic_istream</span></span>类，<span style="color:blue;"><span style="font-family:Times New Roman;">basic_ofstream</span></span>类是继承于<span style="color:blue;"><span style="font-family:Times New Roman;">basic_ostream</span></span>类。</span></p><p align="left"><span style="font-family:Times New Roman;font-size:18px;"></span>&nbsp;</p><p align="left"><span style="font-size:18px;">然后再来看看<span style="font-family:Times New Roman;">C++</span>中大家平常使用的<span style="font-family:Times New Roman;">cin</span>和<span style="font-family:Times New Roman;">cout</span>，可以在<span style="font-family:Times New Roman;">iostream</span>文件中找到<span style="font-family:Times New Roman;">cin</span>和<span style="font-family:Times New Roman;">cout</span>的定义，这二个实际是<span style="color:blue;"><span style="font-family:Times New Roman;">istream</span></span>类型和<span style="color:blue;"><span style="font-family:Times New Roman;">ostream</span></span>类型的变量：</span></p><p align="left"><span style="FONT-FAMILY: Times New Roman"><span style="font-size:18px;"><span style="color:black;"><span style="font-family:Times New Roman;">&nbsp;&nbsp;&nbsp; </span>extern </span><span style="color:#a000a0;">_CRTIMP</span><span style="color:blue;">istream </span><span style="color:gray;">cin</span><span style="color:black;">;</span></span></span></p><p><span style="FONT-FAMILY: Times New Roman"><span style="font-size:18px;"><span style="color:black;"><span style="font-family:Times New Roman;">&nbsp;&nbsp;&nbsp; </span>extern </span><span style="color:#a000a0;">_CRTIMP</span><span style="color:blue;">ostream </span><span style="color:gray;">cout</span><span style="color:black;">;</span></span></span></p><p><span style="font-size:18px;"><span style="color:black;">然后在</span><span style="color:black;"><span style="font-family:Times New Roman;">iosfwd</span></span><span style="color:black;">文件中可以找到：</span></span></p><p align="left"><span style="FONT-FAMILY: Times New Roman"><span style="font-size:18px;"><span style="color:black;"><span style="font-family:Times New Roman;">&nbsp;&nbsp;&nbsp; </span>typedef </span><span style="color:blue;">basic_istream</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">, </span><span style="color:blue;">char_traits</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">&gt; &gt; </span><span style="color:blue;">istream</span><span style="color:black;">;</span></span></span></p><p><span style="FONT-FAMILY: Times New Roman"><span style="font-size:18px;"><span style="color:black;"><span style="font-family:Times New Roman;">&nbsp;&nbsp;&nbsp; </span>typedef </span><span style="color:blue;">basic_ostream</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">, </span><span style="color:blue;">char_traits</span><span style="color:black;">&lt;</span><span style="color:gray;">char</span><span style="color:black;">&gt; &gt; </span><span style="color:blue;">ostream</span><span style="color:black;">;</span></span></span></p><p><span style="font-size:18px;"></span>&nbsp;</p><p><span style="font-size:18px;"><span style="color:black;">明显</span><span style="color:black;"><span style="font-family:Times New Roman;">cin</span></span><span style="color:black;">和</span><span style="color:black;"><span style="font-family:Times New Roman;">cout</span></span><span style="color:black;">与</span><span style="color:blue;"><span style="font-family:Times New Roman;">ifstream</span></span>类和<span style="color:blue;"><span style="font-family:Times New Roman;">ofstream</span></span>类有着非常密切关系——<span style="color:black;"><span style="font-family:Times New Roman;">cin</span></span><span style="color:black;">是</span><span style="color:blue;"><span style="font-family:Times New Roman;">basic_istream</span></span>类的变量，而<span style="color:blue;"><span style="font-family:Times New Roman;">ifstream</span></span>则是<span style="color:blue;"><span style="font-family:Times New Roman;">basic_istream</span></span>类的派生类。<span style="color:black;"><span style="font-family:Times New Roman;">cout</span></span><span style="color:black;">是</span><span style="color:blue;"><span style="font-family:Times New Roman;">basic_ostream</span></span>类的变量，而<span style="color:blue;"><span style="font-family:Times New Roman;">ofstream</span></span>则是<span style="color:blue;"><span style="font-family:Times New Roman;">basic_ostream</span></span>类的派生类。</span></p><p><span style="font-family:Times New Roman;font-size:18px;">&nbsp;</span></p><p><span style="font-size:18px;">有了这个后，猜测很可能会有某个成员函数能将它们联系到一起，从而让cin和cout由标准输入输出重定向到从文件中读取，输出到文件。事实上<span style="color:black;">在</span><span style="color:blue;">basic_istream</span>类实际是虚继承于<span style="color:blue;">basic_ioso</span>类，<span style="color:blue;">basic_ostream</span>类实际是虚继承于<span style="color:blue;">basic_ios</span>类。这二个类都有个<span style="color:#880000;">rdbuf</span><span style="color:black;">()</span><span style="color:black;">成员</span>函数，这个函数允许我们访问和修改类中一个类型为<span style="color:blue;">basic_streambuf</span>类的成员变量。改动这个变量就能重定向输入输出。因此对cin和cout调用这个<span style="color:#880000;">rdbuf</span><span style="color:black;">()</span>函数并传入<span style="color:blue;">ifstream</span>和<span style="color:blue;">ofstream</span>的<span style="color:#880000;">rdbuf</span><span style="color:black;">()</span>就可以将控制台的标准输入输出改成从文件中读取和输出到文件。</span></p><p><span style="font-family:Times New Roman;font-size:18px;"></span>&nbsp;</p><p><span style="font-size:18px;">OK，方法既然找到了，那下面就使用C++的方法来重定向输入输出：</span></p><pre class="brush:cpp" name="code">//使用ifstream和ofstream及cin和cout的rdbuf()
#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;
int main()
{
	printf(&quot;   使用ifstream和ofstream及cin和cout的rdbuf()来改变控制台的标准输入输出\n&quot;);  
	printf(&quot;  --by MoreWindows( http://blog.csdn.net/MoreWindows )--\n\n&quot;); 
	//将控制台的标准输入输出改成从文件中读取写入
	ifstream inFile(&quot;infile.txt&quot;);
	ofstream outFile(&quot;outfile.txt&quot;);
	//保存原来的输入输出方式 streambuf类就是basic_streambuf类
	streambuf *strmin_buf = cin.rdbuf();
	streambuf *strmout_buf = cout.rdbuf();

	printf(&quot;开始处理文件\n....\n&quot;);
	//重定向到文件
	cin.rdbuf(inFile.rdbuf());
	cout.rdbuf(outFile.rdbuf());

    //原程序代码
	int n;
	while (cin&gt;&gt;n)
	{
		n *= 2;
		cout&lt;&lt;n&lt;&lt;endl;
	}

	inFile.close();
	outFile.close();

	//回到控制台的标准输入输出
	cin.rdbuf(strmin_buf);
	cout.rdbuf(strmout_buf);

	cout&lt;&lt;&quot;文件已经处理完毕 输入0表示结束:&quot;&lt;&lt;endl;
	do{
		cin&gt;&gt;n;
	}while (n != 0);

	return 0;
}</pre><p><span style="font-size:18px;color:black;">运行结果如下图所示：</span></p><p><span style="font-size:18px;"></span></p><p><span style="font-family:Times New Roman;font-size:18px;">&nbsp;<img alt="" src="/Upload/EditorImage/image/iphone/201205/6347180633961217610_1332576869O6hs.gif" /></span></p><p><span style="font-family:Times New Roman;font-size:18px;">同样，这个程序也完成了输入输出的重定向。</span></p><p><span style="font-size:18px;"></span>&nbsp;</p><p><span style="font-size:18px;">上面的方法都是建立在修改源代码的基础上，如果只有程序文件即<span style="font-family:Times New Roman;">.exe</span>文件那应该怎么做了？请参阅下一篇《<a href="http://blog.csdn.net/morewindows/article/details/7390441">进程通信之二 管道技术第二篇 匿名管道</a>》</span></p><p><span style="font-family:Times New Roman;">&nbsp;</span></p><p><span style="font-size:16px;">转载请标明出处，原文地址：<a href="http://blog.csdn.net/morewindows/article/details/7390350">http://blog.csdn.net/morewindows/article/details/7390350</a></span></p><p><span style="font-size:16px;">如果觉得本文对您有帮助，请点击<span style="font-family:Times New Roman;">‘</span>顶<span style="font-family:Times New Roman;">’</span>支持一下，您的支持是我写作最大的动力，谢谢。</span></p>
            
                    <div>来源：http://blog.csdn.net/morewindows/article/details/7390350</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/5/634717778258059548.html]]></link>
<title><![CDATA[xcode4中配置Three20开发环境]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Sat, 05 May 2012 01:54:26 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<p>方便自己记忆：转自http://blog.csdn.net/favormm/article/details/6739311<br>
</p>
<p>大名鼎鼎的Three20想必大家都听说过，很多APP都是用它开发的，开发UI很方便，功能也很强大，用它就不必深究枯燥的iOS SDK。今天介绍一下如何在xcode4中配置环境支持Three20开发。</p>
<p>1。首先我们得去把源码下载下来。网址在：<a href="https://github.com/facebook/three20">https://github.com/facebook/three20</a>&nbsp;解压放在我们工程目录下。</p>
<p>2。在解压目录下src/Three20下<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">的Three20.xcodeproj拖到自己的工程里，在弹出的对话框中Destination栏“Copy Items into destination group's folder”不要选中，Addto targets栏中选中自己的工程target,并不是unit
 test target,然后点Finish.</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">3。在工程中展开Three20,你会发现有一个group叫<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Dependencies，展开它，下面有六个依赖工程，选中它们，并拖到自己的工程中去。</span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">4。将src目录下的<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Three20.bundle<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">拖到自己的工程中去。</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">5。加入需要的静态库。如下图红色部份是加入的：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347177797330621040_1314861080eV93.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">6。加入需要的目标依赖项。如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347177797426438860_13148611753nQw.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">7。加入Quartz.framework</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">8。在工程配置页，build里Header Search Paths里加入</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(BUILT_PRODUCTS_DIR)/../../three20&quot; &quot;</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">$(CONFIGURATION_BUILD_DIR)/../../three20&quot;<br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">如下图：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347177797491865650_1314861554MJzH.gif"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">9。在<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">Other
 Linker Flags里加入&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-ObjC&nbsp;<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">-all_load
 如图：</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><img alt="" src="/Upload/EditorImage/image/iphone/201205/6347177797591122170_1314861618pQBq.gif"><br>
</span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">10。然后在需要用Three20的文件中引入头文件<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)">#import
 &quot;Three20/Three20.h&quot; 就可以用Three20的功能了。</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="line-height:20px; font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px; line-height:20px; background-color:rgb(248,248,248)"><br>
</span></span></span></span></span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">还有一种方法就是利用脚本，在src目录下面有一个script目录，打开terminal进入到script目录下，然后运行命令：</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"></span></span></p>
<div class="dp-highlighter bg_python">
<ol class="dp-py" start="1">
<li class="alt"><span><span>python&nbsp;ttmodule.py&nbsp;-p&nbsp;path/to/your/project/yourproject.xcodeproj&nbsp;Three20&nbsp;--xcode-version=</span><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li></ol>
</div>
<span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">-p后面是你工程的绝对路径，当然也可是当前script的相对路径。<br>
</span></span>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这样就自动完成第一种方法中的各种配置。</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><br>
</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px">这儿有一些Three20的教程，example目录下也有不少demo工程</span></span></p>
<p><span style="font-family:helvetica,arial,freesans,clean,sans-serif; font-size:13px"><span style="line-height:20px"><span style="font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:23px"></span></span></span></p>
<div id="article_content" class="article_content">
<li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-stylesheets-tutorial" href="http://mattvague.com/three20-stylesheets-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-width:0px; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Stylesheets iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-custom-cells-iphone-tutorial" href="http://mattvague.com/three20-custom-cells-iphone-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Custom Cells iPhone Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><a title="three20-tttableitem-tutorial" href="http://mattvague.com/three20-tttableitem-tutorial" target="_blank" style="margin:0px; padding:0px; text-decoration:none; outline-style:none; background-color:rgb(243,243,243)"><span style="color:#ff0000">Three20
 Table Item Tutorial</span></a></li><li style="margin:0px 0px 0.2em; padding:0px"><span style="color:#ff0000"><a href="http://www.codeios.com/thread-598-1-1.html"><span style="color:#ff0000">http://www.codeios.com/thread-598-1-1.html</span></a></span></li><li style="margin:0px 0px 0.2em; padding:0px"><a href="http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/"><span style="color:#ff0000">http://iosguy.com/2010/10/19/tthree20-a-brief-ttlauncherview-tutorial/</span></a></li><li style="margin:0px 0px 0.2em; padding:0px">&nbsp;<a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a>
<p style="margin:0px 0px 0.2em; padding:0px"><br>
<br>
<a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a><a href="http://three20.pypt.lt/start">http://three20.pypt.lt/start</a></p>
</li></div>
<br>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7222350</div>]]></description>
</item>

<item>
<link><![CDATA[http://www.itivy.com/iphone/archive/2012/5/5/634717778218706780.html]]></link>
<title><![CDATA[移动互联网一周（2012.2.6-2012.2.12）大事记]]></title>
<author><![CDATA[iOS88]]></author>
<category><![CDATA[]]></category>
<pubDate>Sat, 05 May 2012 01:54:21 GMT</pubDate>
<guid><![CDATA[]]></guid>
<description><![CDATA[
            
<h1 id="subject_tpc" class="read_h1">1:360全部APP被苹果一夜下架！据说苹果总部发飙</h1>
<p><a target="_blank" href="http://bbs.weiphone.com/read-htm-tid-3964997.html">http://bbs.weiphone.com/read-htm-tid-3964997.html</a></p>
<p><br>
</p>
<p>2：<span class="link_title"><a href="http://blog.csdn.net/leiphone/article/details/7236080">苹果强悍：8.7%的市场份额，75%的行业利润&nbsp;</a></span></p>
<p><a target="_blank" href="http://blog.csdn.net/leiphone/article/details/7236080">http://blog.csdn.net/leiphone/article/details/7236080</a></p>
<p>3：苹果市&#20540;超Google&#43;微软总和</p>
<p>http://news.mydrivers.com/1/217/217048.htm</p>
<p><br>
</p>
<p><br>
<a target="_blank" href="http://bbs.weiphone.com/read-htm-tid-3964997.html"></a></p>

            
                    <div>来源：http://blog.csdn.net/ugg/article/details/7238310</div>]]></description>
</item>


</channel>
</rss>

