<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>闲云博客</title>
	<atom:link href="http://jianyun.org/feed" rel="self" type="application/rss+xml" />
	<link>http://jianyun.org</link>
	<description>关注互联网科技，记录编程点滴</description>
	<lastBuildDate>Mon, 06 Feb 2012 08:15:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>PL/SQL Developer登录时找不到OCI.DLL的问题</title>
		<link>http://jianyun.org/archives/820.html</link>
		<comments>http://jianyun.org/archives/820.html#comments</comments>
		<pubDate>Mon, 06 Feb 2012 08:15:01 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[软件介绍]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=820</guid>
		<description><![CDATA[登陆时弹出：Initalizition  error! Could not Locate  OCI.DLL! OracleHomeKey:&#8230;&#8230; OracleHomeDir:&#8230;.. 解决方案： 打开tool-&#62;preferences,在oracle的connection选项下,在Oracle Home (Empty is autodetect)下拉框选择一个OracleHome, 在OCI Library (Empty is autodetect)下拉框选择对应的Oracle Home路径下的oci.dll &#160; 相关文章Executing Multiple Select Statements for Oracle (0)Oracle中RAW(16)与.Net中GUID字符串的转换 (0)Euro symbol turns up as upside-down question mark (&#8216;¿&#8217;) when save into Oracle (0)]]></description>
			<content:encoded><![CDATA[<p>登陆时弹出：Initalizition  error!<br />
Could not Locate  OCI.DLL!<br />
OracleHomeKey:&#8230;&#8230;<br />
OracleHomeDir:&#8230;..</p>
<p>解决方案：</p>
<p>打开tool-&gt;preferences,在oracle的connection选项下,在Oracle Home (Empty is autodetect)下拉框选择一个OracleHome,</p>
<p>在OCI Library (Empty is autodetect)下拉框选择对应的Oracle Home路径下的oci.dll</p>
<p>&nbsp;</p>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/792.html" title="Executing Multiple Select Statements for Oracle">Executing Multiple Select Statements for Oracle</a> (0)</li><li><a href="http://jianyun.org/archives/766.html" title="Oracle中RAW(16)与.Net中GUID字符串的转换">Oracle中RAW(16)与.Net中GUID字符串的转换</a> (0)</li><li><a href="http://jianyun.org/archives/551.html" title="Euro symbol turns up as upside-down question mark (&#8216;¿&#8217;) when save into Oracle">Euro symbol turns up as upside-down question mark (&#8216;¿&#8217;) when save into Oracle</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/820.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员新年要做的10个决定</title>
		<link>http://jianyun.org/archives/800.html</link>
		<comments>http://jianyun.org/archives/800.html#comments</comments>
		<pubDate>Wed, 11 Jan 2012 12:30:58 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[生活感悟]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=800</guid>
		<description><![CDATA[还剩不到一周的时间，我们将迎来 2012 年。我知道这是老生常谈，但今年你曾经有过什么样重要的经历？很自然的，我们现在正处于为新年许下目标的时候。也许你可能有“真实”生活中的一些目标，但是你的程序员生涯呢？ 　　1 -学习一种新语言，框架或方法 　　我们必须保持学习最新的技术。 　　Web 开发唯一不变的是变化。以 NodeJS 为例：两三年前它并不存在，只有很少（如果有的话）的 JavaScript 代码运行于服务器之上。现在，你离不开它。每个 Web 开发人员都希望留在自己的作品里。要做到这一点，我们必须不停学习最新的技术。如果你是一个后端开发，这可能代表着学习 JavaScript 和 Node.js，类似于 Ruby 和 Rails。对于前端开发，则可能意味着真正理解 CSS3 或掌握 HTML5 新的 API。当然，这并不意味着你必须经常使用它，只需要保持自己不断学习。 按照同样的思路，对于重新评估你的工作流程、学习更好的和不同的工具以更快速地完成工作来说，现在是一个很好的时间。 　　2 –让你掌握的内容更精深 也要预留一段时间来关注现有的语言和软件。 　　当然，保持锋利比学习新的内容有更大意义。它也包括改善你使用日常工具的方式。我知道自己一直坚持使用熟悉的的模式和方法而不是学习在某个特定情形下更佳的方案是不对的。你知道关于 JavaScript设计模式的那些事吗？你对 PHP 的面向对象和面向功能编程是否有扎实的理解？你是否曾经使用过 SQL 连接？你使用的文本编辑器里是否有没有用过的功能？这些都不是新技术，但是如果你不使用它们，它们对你来说就是全新的！也要在关注现有的语言和软件上预留一段时间。 　　3 -探索一个新的领域 　　这项内容与第一项并不相同。学习一种新的语言、框架，或自己领域里的方法是重要的，甚至对你的日常实践来说可能会有用。但如果你像我一样，你会迷上网络上的每一部分。要尝试探索新的领域。对后台开发来说是深入研究前端开发，而对前端来说是探索可用性或用户体验。如果你喜欢写作，你可能会对内容策略或培养设计灵感感兴趣。在网络上有几十个不同的领域，继续探索！ 　　4 –参与社区 　　把它叫做参与，把它叫做结网，把它叫做任何你想要的。 　　该网站极度令人不可思议：我想不出有任何其他的现象，人与人之间相隔那么远，却结下如此深厚的友谊。2012年，你为什么不更多的尝试参与到这个令人惊讶的团体中呢？在 Twitter 上与他们交谈，阅读他们博客的文章和评论，或者通过自己写文章来作为回应;通过 Github 或其他代码共享网站贡献自己的代码。或者加入自由讨论会，用户组和各种会议。把它叫做参与，把它叫做结网，把它叫做任何你想要的，但有一点是肯定的：它会在大多数情况下让你和其他人受益。此外，建设新的重要人际关系，你可能会获得新的转机！ 　　5 –教导他人 　　最有益的评论是伤害你感情的那些。 　　你应该认同我们之前的观点，在 2012 年更多的教导他人。为什么呢？它将会带来些什么呢？“教导是最好的学习”？我已经为 Nettuts + 写作了近三年，我可以证明，这种说法是完全正确的。写下一个原理是如何工作的能够迫使你完全理解它，当你尝试教导别人时，你会惊讶对这个话题更了解了多少。最重要的是，当你知道曾经帮助别人学习新的技能时你会有不可思议的感觉。毫无疑问，你将遇到几个反对的声音，例如指出你语法的错误（或只是一些害群之马的评论）。不用有太多的担心;教学是一个学习的过程，你这样做会提高你自己。最有益的评论是伤害你感情的那些。 [...]]]></description>
			<content:encoded><![CDATA[<p>还剩不到一周的时间，我们将迎来 2012 年。我知道这是老生常谈，但今年你曾经有过什么样重要的经历？很自然的，我们现在正处于为新年许下目标的时候。也许你可能有“真实”生活中的一些目标，但是你的程序员生涯呢？</p>
<p align="left"><strong>　　1 -学习一种新语言，框架或方法</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104813_1.jpg" rel="img"><img class="aligncenter  wp-image-801" title="20120111_104813_1" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104813_1.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center">　　我们必须保持学习最新的技术。</p>
<p align="left">　　Web 开发唯一不变的是变化。以 NodeJS 为例：两三年前它并不存在，只有很少（如果有的话）的 JavaScript 代码运行于服务器之上。现在，你离不开它。每个 Web 开发人员都希望留在自己的作品里。要做到这一点，我们必须不停学习最新的技术。如果你是一个后端开发，这可能代表着学习 JavaScript 和 Node.js，类似于 Ruby 和 Rails。对于前端开发，则可能意味着真正理解 CSS3 或掌握 HTML5 新的 API。当然，这并不意味着你必须经常使用它，只需要保持自己不断学习。</p>
<p align="left">按照同样的思路，对于重新评估你的工作流程、学习更好的和不同的工具以更快速地完成工作来说，现在是一个很好的时间。</p>
<p align="left"><strong>　　2 –让你掌握的内容更精深</strong></p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104815_2.jpg" rel="img"><img class="aligncenter  wp-image-802" title="20120111_104815_2" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104815_2.jpg" alt="" width="512" height="160" /></a></p>
<p align="center">也要预留一段时间来关注现有的语言和软件。</p>
<p align="left">　　当然，保持锋利比学习新的内容有更大意义。它也包括改善你使用日常工具的方式。我知道自己一直坚持使用熟悉的的模式和方法而不是学习在某个特定情形下更佳的方案是不对的。你知道关于 JavaScript<a title="设计模式" href="http://www.amazon.cn/gp/product/B001130JN8/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;tag=vastwork-23&amp;linkCode=as2&amp;camp=536&amp;creative=3200&amp;creativeASIN=B001130JN8" rel="nofollow" target="_blank">设计模式</a>的那些事吗？你对 PHP 的面向对象和面向功能编程是否有扎实的理解？你是否曾经使用过 SQL 连接？你使用的文本编辑器里是否有没有用过的功能？这些都不是新技术，但是如果你不使用它们，它们对你来说就是全新的！也要在关注现有的语言和软件上预留一段时间。</p>
<p align="left"><strong>　　3 -探索一个新的领域</strong></p>
<p style="text-align: center;" align="left"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104817_3.jpg" rel="img"><img class="aligncenter  wp-image-803" title="20120111_104817_3" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104817_3.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="left">　　这项内容与第一项并不相同。学习一种新的语言、框架，或自己领域里的方法是重要的，甚至对你的日常实践来说可能会有用。但如果你像我一样，你会迷上网络上的每一部分。要尝试探索新的领域。对后台开发来说是深入研究前端开发，而对前端来说是探索可用性或用户体验。如果你喜欢写作，你可能会对内容策略或培养设计灵感感兴趣。在网络上有几十个不同的领域，继续探索！</p>
<p><strong>　　4 –参与社区</strong></p>
<p style="text-align: center;"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104818_4.jpg" rel="img"><img class="aligncenter  wp-image-804" title="20120111_104818_4" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104818_4.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　　</em>把它叫做参与，把它叫做结网，把它叫做任何你想要的。</p>
<p align="left">　　该网站极度令人不可思议：我想不出有任何其他的现象，人与人之间相隔那么远，却结下如此深厚的友谊。2012年，你为什么不更多的尝试参与到这个令人惊讶的团体中呢？在 Twitter 上与他们交谈，阅读他们博客的文章和评论，或者通过自己写文章来作为回应;通过 Github 或其他代码共享网站贡献自己的代码。或者加入自由讨论会，用户组和各种会议。把它叫做参与，把它叫做结网，把它叫做任何你想要的，但有一点是肯定的：它会在大多数情况下让你和其他人受益。此外，建设新的重要人际关系，你可能会获得新的转机！</p>
<p align="left"><strong>　　5 –教导他人</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104819_5.jpg" rel="img"><img class="aligncenter  wp-image-805" title="20120111_104819_5" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104819_5.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　　</em>最有益的评论是伤害你感情的那些。</p>
<p align="left">　　你应该认同我们之前的观点，在 2012 年更多的教导他人。为什么呢？它将会带来些什么呢？“教导是最好的学习”？我已经为 Nettuts + 写作了近三年，我可以证明，这种说法是完全正确的。写下一个原理是如何工作的能够迫使你完全理解它，当你尝试教导别人时，你会惊讶对这个话题更了解了多少。最重要的是，当你知道曾经帮助别人学习新的技能时你会有不可思议的感觉。毫无疑问，你将遇到几个反对的声音，例如指出你语法的错误（或只是一些害群之马的评论）。不用有太多的担心;教学是一个学习的过程，你这样做会提高你自己。最有益的评论是伤害你感情的那些。</p>
<p align="left"><strong>　　6 -更好地照顾自己</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104820_6.jpg" rel="img"><img class="aligncenter  wp-image-806" title="20120111_104820_6" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104820_6.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　　</em>我们是网络的受害者。</p>
<p align="left">　　我们作为 Web 开发似乎非常自豪，因为我们献出自己的劳动。我们工作时间超长，弓着腰在黑暗中使用计算机，我们忘记了洗澡或吃饭。我们是网络的受害者，忍受着痛苦来让互联网更加美好。</p>
<p align="left">　　听起来很勇敢，但确实不是这样。</p>
<p align="left">　　为你的风险考虑，我建议你在 2012 年照顾好自己。除了睡得好，吃得好，确保你的工作场所符合人体工学。按理说，如果你花了生命中的三分之一在办公室，使其尽可能舒适是很有道理的！</p>
<p align="left"><strong>　　7 –更好的管理自己的时间（以及其他资源）</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104821_7.jpg" rel="img"><img class="aligncenter  wp-image-807" title="20120111_104821_7" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104821_7.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　　</em>也许我并不是指这<ins></ins>和 Web 开发人员有很大关系，但尽管如此，几乎每一个“知识工作者”可以做得更好。对于我们里的很多人，尤其是自由职业者来说，你要用你的时间来做的事可能是灯红酒绿和饥肠辘辘之间的差异。记住所有的这些乐趣，以及我向你推荐学习的 Web 新技术了吗？好了，不要让它们的引诱限制你的学习时间。当然互联网越大越会有更多诱惑。我敢肯定，你最近看到了下面的内容，当我这么做时它给了一个暂停。</p>
<p align="center"><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104821_8.jpg" rel="img"><img class="aligncenter size-full wp-image-808" title="20120111_104821_8" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104821_8.jpg" alt="" width="514" height="151" /></a></p>
<p align="left">　　在过去的一年里，超过 1 万亿美元的视频在 Youtube 上被观看。</p>
<p align="left">　　假设平均 YouTube 视频是 2 – 3 分钟之久，我们正在寻找的东西可以花上一整天的时间。在知识方面我还没有足够精深。</p>
<p align="left">　　当然，“只是工作，不要娱乐”，完全按此行事是正确的吗？我不建议你成为客户的一个奴隶或者是不能忍受沉闷的工作狂。我只是说，我们需要更明智的来明确了解我们每小时是如何度过的，并努力的更好利用时间。</p>
<p align="left"><strong>　　8 –采用更好的编程实践</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104822_9.jpg" rel="img"><img class="aligncenter  wp-image-809" title="20120111_104822_9" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104822_9.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　</em>过度的文档永远不会是坏事。</p>
<p align="left">　　不，我不是在用两个不同的词汇重复同一个决定。这一次，我谈论的做法围绕编码本身的实践。我不能告诉你我有多少次热切地开始了新的项目，然后一个半小时后说，“嗯。。。我要为尝试这个功能创建一个分支。噢，等一下，我忘了开始时初始化 Git。。“确保我记得从一开始就使用代码版本是我在 2012 年还要去面对的工作，它能使你的项目历史更清晰。</p>
<p align="left">　　另一个我经常忽略的基本编码实践是注释。我可以变出许多行巧妙的代码，然后在剩下的时间里为其他事情分心。第二周我回到工作里时花了 20 分钟试图弄清楚它。这会困扰你吗？请你给自己帮个忙，为自己和其他人留下有用的注释。文档和注释是同样正确的事情。我最近在学习 Dojo，我发现它的代码文档是无价的。当然，文件的水平将取决于你的项目的公开程度，但是我认为过度的文档永远不会是坏事。</p>
<p align="left"><strong>　　9 -产生被动收入</strong></p>
<p style="text-align: center;" align="left"><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104823_10.jpg" rel="img"><img class="aligncenter  wp-image-810" title="20120111_104823_10" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104823_10.jpg" alt="" width="512" height="160" /></a></p>
<p align="left">　　我猜 Nettuts + 的绝大多数读者做客户端的工作，无论是作为一个<a title="向自由职业者强烈推荐的 12 本免费电子书" href="http://blog.jobbole.com/529/">自由职业</a>者或以其他方式。那么为什么不另外获取一些被动收入呢？Envato（译者注：自由职业者创建的著名公司，旗下有销售类、教程类和博客类的网站）有十个市场，在这里任何具有合适技能的人都可以获利。为<a title="ThemeForest" href="http://goo.gl/JomxN" rel="nofollow" target="_blank">ThemeForest</a>（译者注：国外知名设计网站）构建一个主题，为 <a title="CodeCanyon" href="http://goo.gl/fpKbO" rel="nofollow" target="_blank">CodeCanyon</a> 写一个脚本，其潜在价值永无止境。当然，如果你的技能不适合 Envato 市场，或者即便可以，还有其他许多方法可以产生被动收入。例如如果你是一个作家，可以试试 <a href="http://tutsplus.com/?ref=vastwork" rel="nofollow" target="_blank">Tuts+ Premium</a>（译者注：一个学习设计、Web 开发技术的网站）。他们一直在寻找充满激情的新教师。</p>
<p align="left">　　在市场或个人网站上销售项目是一个聪明的方式，可以被动地获取一些额外的现金，同时你还能做自己享受的事情。</p>
<p align="left"><strong>　　10 –给自己放个假</strong></p>
<p style="text-align: center;" align="center"><em><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104825_11.jpg" rel="img"><img class="aligncenter  wp-image-811" title="20120111_104825_11" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104825_11.jpg" alt="" width="512" height="160" /></a></em></p>
<p align="center"><em>　　</em>戴上一顶完全不同的帽子…在有些时候</p>
<p align="left">　　到目前为止，前面的每一个决定是你可以做的一些事情来改善你作为开发者的技能。我会密切指出，你要成为一个优秀开发者可以做的最好的事情之一就是不要成为一个开发者。。。在有些时候。有时候需要戴上一顶完全不同的帽子。保持甚至和开发毫不相关的一项爱好，而且最好不要涉及电脑。玩某种乐器，阅读，写作，开拓厨艺。不管你做什么，留下一些放松的时间。当你这样做时会发现，编程问题的解决方案往往出现在休息时间。</p>
<p align="left"><a href="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104826_12.jpg" rel="img"><img class="aligncenter size-full wp-image-812" title="20120111_104826_12" src="http://jianyun.org/wordpress/wp-content/uploads/2012/01/20120111_104826_12.jpg" alt="" width="519" height="132" /></a></p>
<p align="center">我曾经用在开车回家路上的思考解决了许多代码问题。</p>
<p align="left">　　当然，定时休息是很重要的，还有那些一年几次更长时间的休假。此外扔了那些年度计划！</p>
<p align="left"><strong>　　你的决定？</strong></p>
<p align="left">　　好了，这就是 Web 开发者应做的十项决定的清单。你觉得有哪些不在我的名单上？让我们在评论中来听听这些意见！</p>
<p>　　<a href="http://blog.csdn.net/hfahe/article/details/7184283" rel="nofollow" target="_blank">蒋宇捷</a><em>译自：<a href="http://net.tutsplus.com/articles/general/ten-new-years-resolutions-every-web-developer-should-make/" rel="nofollow" target="_blank">ten-new-years-resolutions-every-web-developer-should-make</a></em></p>
<p><a title="文章由安德鲁伯吉斯" href="http://net.tutsplus.com/author/andrewburgess/" rel="nofollow" target="_blank">安德鲁伯吉斯</a>于 2011 年 12 月 27 日</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/657.html" title="程序员装B指南">程序员装B指南</a> (0)</li><li><a href="http://jianyun.org/archives/650.html" title="让程序员愤怒的10件事">让程序员愤怒的10件事</a> (0)</li><li><a href="http://jianyun.org/archives/483.html" title="宇宙中最优秀的5位程序员">宇宙中最优秀的5位程序员</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/800.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FileNet添加和删除文件错误 An error occurred accessing the database</title>
		<link>http://jianyun.org/archives/797.html</link>
		<comments>http://jianyun.org/archives/797.html#comments</comments>
		<pubDate>Wed, 28 Dec 2011 09:49:13 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[编程点滴]]></category>
		<category><![CDATA[FileNet]]></category>
		<category><![CDATA[WebSphere]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=797</guid>
		<description><![CDATA[这两天在客户测试环境的FileNet Server遇到错误，不管是调用CE Web Service API的方式还是FileNet Workplace，上传或删除文件都失败，出现了Exception，显示的错误信息是 An error occurred accessing the database.  ErrorCode: 0, Message: &#8216;enlist: caught Exception&#8217; 看错误信息，可能是oracle数据库有什么问题，可是查了很久没查出错误所在。 后来在WebSphere Server的SystemOut.log中看到具体错误信息如下： WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@57562412. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java(Compiled Code)) at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java(Compiled Code)) at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java(Compiled [...]]]></description>
			<content:encoded><![CDATA[<p>这两天在客户测试环境的FileNet Server遇到错误，不管是调用CE Web Service API的方式还是FileNet Workplace，上传或删除文件都失败，出现了Exception，显示的错误信息是</p>
<p>An error occurred accessing the database.  ErrorCode: 0, Message: &#8216;enlist: caught Exception&#8217;</p>
<p>看错误信息，可能是oracle数据库有什么问题，可是查了很久没查出错误所在。</p>
<p>后来在WebSphere Server的SystemOut.log中看到具体错误信息如下：</p>
<p>WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@57562412. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException<br />
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java(Compiled Code))<br />
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java(Compiled Code))<br />
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java(Compiled Code))<br />
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java(Compiled Code))<br />
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java(Compiled Code))<br />
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1896)<br />
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2608)<br />
at java.lang.Thread.run(Thread.java:571)</p>
<p>有了具体的错误日志后，Google后在IBM的网站上查到原因和解决方案</p>
<p><a href="https://www-304.ibm.com/support/docview.wss?uid=swg21196663">https://www-304.ibm.com/support/docview.wss?uid=swg21196663</a></p>
<p>它说原因是Oracle做什么recover操作的时候没权限。</p>
<p>第一种解决方案试了下，给用户加权限，但是我们试了，不知道是什么原因，错误依旧。</p>
<p>所以继续试第二种方案。</p>
<p>1. 停掉<em>WebSphere Application Server</em></p>
<p>2. 找到 &#8216;<code>\transaction</code>&#8216;目录，位于<em>&lt;WebSphere Application Server_install_root</em>&gt;\profiles\&lt;PROFILE_NAME&gt;\tranlog\&lt;CELL_NAME&gt;\&lt;NODE_NAME&gt;\&lt;SERVER_NAME&gt;\transaction</p>
<p>3. 删掉 &#8217;<code>\transaction</code>&#8216;目录及其子目录</p>
<p>4. 重启<em>WebSphere Application Server</em></p>
<p>然后错误就没了。</p>
<p>&nbsp;</p>
<p  class="related_post_title">随机日志</p><ul class="related_post"><li><a href="http://jianyun.org/archives/331.html" title="手机编年史：诺基亚时代下的沧桑巨变">手机编年史：诺基亚时代下的沧桑巨变</a> (0)</li><li><a href="http://jianyun.org/archives/623.html" title="PC端UMDEditorV2.4.2发布，修复保存封面无效的问题">PC端UMDEditorV2.4.2发布，修复保存封面无效的问题</a> (3)</li><li><a href="http://jianyun.org/archives/486.html" title="FTP连接，调WinAPI [InternetConnect]总是执行错误，返回错误代码12007或0x2ee7">FTP连接，调WinAPI [InternetConnect]总是执行错误，返回错误代码12007或0x2ee7</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/797.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Executing Multiple Select Statements for Oracle</title>
		<link>http://jianyun.org/archives/792.html</link>
		<comments>http://jianyun.org/archives/792.html#comments</comments>
		<pubDate>Wed, 28 Dec 2011 06:26:56 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[编程点滴]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=792</guid>
		<description><![CDATA[使用SQL Server的时候，我们可以传多个Select语句作为CommandText，一次执行，然后通过DataReader的NextResult方法访问多个Select语句返回的结果集，当然也可以用DataAdapter来填充DataSet。 下面的例子就是用一个DBCommand执行多个Select语句的代码片段。 myCommand.CommandText = "UPDATE Books SET Price=Price*0.95 “ + “SELECT BookName, Price FROM Books " + "UPDATE Toys SET Price=Price*0.9 “ + “SELECT ToyName, Price FROM Toys "; SqlDataReader dreader = myCommand.ExecuteReader(); while (dreader.Read()) // process the first result set { Console.WriteLine(dreader.GetString(0) + ": " + dreader.GetSqlMoney(1).ToDouble()); } dreader.NextResult(); // Move on to [...]]]></description>
			<content:encoded><![CDATA[<p>使用SQL Server的时候，我们可以传多个Select语句作为CommandText，一次执行，然后通过DataReader的NextResult方法访问多个Select语句返回的结果集，当然也可以用DataAdapter来填充DataSet。</p>
<p>下面的例子就是用一个DBCommand执行多个Select语句的代码片段。</p>
<blockquote>
<pre>myCommand.CommandText =
	"UPDATE Books SET Price=Price*0.95 “ +
	“SELECT BookName, Price FROM Books " +
	"UPDATE Toys SET Price=Price*0.9 “ +
	“SELECT ToyName, Price FROM Toys ";

SqlDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read()) // process the first result set
{
	Console.WriteLine(dreader.GetString(0) + ": "
		+ dreader.GetSqlMoney(1).ToDouble());
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read()) // process the second result set
{
   Console.WriteLine(dreader.GetString(0) + ": "
     + dreader.GetSqlMoney(1).ToDouble() + "\n");
}

dreader.Close();</pre>
</blockquote>
<p>&nbsp;</p>
<p>而当使用Oracle数据库的时候，这样的写法却会报错：ORA-00911: invalid character</p>
<p>这是因为Oracle不支持Multiple Statements的缘故。</p>
<p>如果你真的要这样写多个select语句而不想用存储过程的话，你可以通过anonymous block和ref cursors的方式来实现，同样，通过DataReader的NextResult方法访问多个Select语句返回的结果集。</p>
<blockquote>
<pre>string strSql = "begin open :refcur1 for select * from emp;" +
"open :refcur2 for select * from dept;" +
"open :refcur3 for select * from salgrade;end;";
myCommand.CommandText = strSql;
myCommand.Parameters.Add("refcur1", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur2", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur3", OracleType.Cursor).Direction = ParameterDirection.Output;

OracleDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read())
{
    //process the first result set
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read())
{
   //process the second result set
}

dreader.NextResult();

while (dreader.Read())
{
   //process the third result set
}

dreader.Close();</pre>
</blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/766.html" title="Oracle中RAW(16)与.Net中GUID字符串的转换">Oracle中RAW(16)与.Net中GUID字符串的转换</a> (0)</li><li><a href="http://jianyun.org/archives/820.html" title="PL/SQL Developer登录时找不到OCI.DLL的问题">PL/SQL Developer登录时找不到OCI.DLL的问题</a> (0)</li><li><a href="http://jianyun.org/archives/775.html" title="[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源">[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/792.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5未来发展的六大趋势</title>
		<link>http://jianyun.org/archives/785.html</link>
		<comments>http://jianyun.org/archives/785.html#comments</comments>
		<pubDate>Tue, 20 Dec 2011 07:17:24 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[互联网络]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=785</guid>
		<description><![CDATA[HTML5从根本上改变了开发商开发Web应用的方式，从桌面浏览器到移动应用，这种语言和标准都正在影响并将继续影响着各种操作平台。 在移动领域，大家争论不休的一个问题就是开发Web应用还是原生应用？而随着HTML5标准的发展，两者之间的差异已经逐渐变得模糊，今天各大媒体都争相报道与HTML5有关的东西，那么，HTML5未来的发展趋势到底是什么？ 　　1） 移动优先 前天，appMobi获选ReadWriterWeb2012最具前途的的公司，作为一家初创公司，这个奖公司首先专注于在移动平台上如何实现HTML5的简单易用和无处不在。 从如今层出不穷的移动应用就知道，在这个智能手机和将平板电脑大爆炸的时代，移动优先已成趋势，不管是开发什么，都以移动为主。 如上文所说，此前一直困扰移动领域的问题就是开发Web应用还是原生应用。而如今，我们看见一些大型企业如《金融时报》在冲着HTM L5进军移动市场过程中，从App Store撤掉iPad原生应用而开发Web应用，同样表现出色。 许多游戏开发商也将在移动Web应用中扮演中重要角色，移动Web应用优先的趋势将会持续到移动设备统治信息处理领域。其实用户根本不在乎你用什么工具开发了什么应用，不管是Web应用还是原生应用，只要好用就可以了。 　　2) 游戏开发者领衔“主演” 其实移动游戏开发商是从HTML5获益最多的一方，他们可利用这个平台逃脱付费游戏须向苹果支付的30%提成。在某种程度上，游戏就是移动平台销量最好的应用，也是吸引人们购买移动设备的一个重要因素。 许多游戏开发商都被Facebook或者Zynga推动着发展，而未来的Facebook应用生态系统是基于HTML5的，尽管在HTML 5平台开发出游戏非常困难，但游戏开发商却都愿意那么做。通过PhoneGap及appmobi的XDK将Web应用游戏打包整合到原生应用中也是一种方式，Facebook差不多就这么干的——基于Web应用及浏览器，但却将之打包整合进原生应用。 　　3) 响应式设计&#38;自动变化的屏幕尺寸 在HTML5真的改变移动开发平台之前，必须要迈出重要一步，那就是“响应式设计”，也就是屏幕可以根据内容而自动调整大小。 响应式设计最好的一个例子就是今年上线的BostonGlobe.com（观看视频），其屏幕能够根据任何内容而调整尺寸大小，在访问过其开发商Filament Group后才了解到，响应式设计也并非易事，一些基本概念设计必须从头开始，比如处理媒体库的RespondJS，而且处理来自第三方的图片和广告也是恼人的问题。 要想做好响应式设计，就必须洞悉内容与屏幕之间的反馈关系，一家来自硅谷的响应式设计公司ZURB称，其实在过去的16年中，开发商就意识到响应式设计就要完全离开“流”，转而注重内容是如何在网页和移动设备中被处理的，这一过程还在继续，HTML5会让它最终成为可能。 　　4 )设备访问 消除Web应用与原生应用界限的最大障碍就是浏览器访问移动设备基本特性的能力，比如照相机，通讯录，日历，加速器等，利用HTML5实现此能力方面，上文中提到的appMobi算是行业翘楚，在感恩节后开源了所有API。Mozilla也一直在努力通过移动浏览器Fennec来将强设备访问能力。 对许多移动开发商来说，提高设备访问能力是HTML5最令人激动的革新，这意味着Web应用能够登陆移动设备而无需做任何PhoneGap式打包，游戏开发商当然最开心，因为某些特性对他们来说是封锁的，比如能整合到游戏中的加速器。 这就开启了另一个可能的世界，比如能与云更好地整合（这有利于应用内购买，消息推送等）并提高游戏可玩性，有了HTML5这个平台，开发商可以不再依赖于Java语言，CSS3，HTML及其它程序语言。 　　5) 离线缓存 这个概念相当新潮，离线情况下，app也能照常运作，算是HTML5充满魔力的一面，今年最好的离线缓存例子就是亚马逊Kindle的云阅读器，可以通过Firefox6以上版本，Chrome11以上版本，Safari5以上版本及iOS4以上版本浏览器将内容同步到所有Kindle系列设备，并能记忆用户在kindle图书馆的一切。 亚马逊就这么实现了离线使用Web应用，许多专家人声称原生应用的末日即将到来，因为Web应用的使用变得简单，无摩擦，适用于任何一个平台或者无需平台。当然Mozilla的触角也伸到了这里，实际上，Mozilla想涉足任何一个HTML5能渗透的领域，从Mozilla的移动蓝图，可以了解更多。 　　6) 开发工具的成熟 在今年八月份，Brian Fling曾写过一篇博文叫HTML5 Web应用开发剖析，提出了几点建议供从事HTML5应用的开发者参考： 　　要耐心，HTML5项目可能比开发其他任何项目好是都要长 　　做好预算，这不像建网站那么简单，可能会耗费你大量资金 　　找对开发者，你要记住，这对许多经验丰富的专家来说都非常难的事，那么你的团队也会觉得困难，所以一定要找对人，找到正确的方向 　　要自食其力，你要知道，开发HTML5项目，许多工具都要自制，不是现成的 　　在技术界，按部就班的教条风格在这里行不通，会花掉许多不必要的资金，在移动领域，没有对与错，只有是否适合，一切以用户体验为重。 在工具方面，除了appMobi提供的工具以外，还有Sencha及Appcelerator提供的框架及IDE供应用开发商们使用，虽然这些工具现在算不上成熟，也不如Android和iOS上的开发商框架及工具那般简单强大，但至少它们在演进，将会变得越来越好用。 　　总结 HTML 5的其它功能，如表单和新标准还在快速演进，而随着标准化工作的进行，HTML5有可能变回HTML。HTML5开发领域的领军人物包括Sencha，Adobe，Appcelerator，appMobi及Facebook，亚马逊，Google三大巨头。 不管你是想开发出新型视频应用的开发商如Brightcover还是想开发新型音频应用的开发商如Soundcloud，不论是桌面应用还是移动应用，HTML5都是创新的主旋律。 英文原文：RWW：Top 6 Trends In HTML5 In 2011 &#160; &#160; 随机日志ArcGIS [...]]]></description>
			<content:encoded><![CDATA[<p>HTML5从根本上改变了开发商开发Web应用的方式，从桌面浏览器到移动应用，这种语言和标准都正在影响并将继续影响着各种操作平台。</p>
<p>在移动领域，大家争论不休的一个问题就是开发Web应用还是原生应用？而随着HTML5标准的发展，两者之间的差异已经逐渐变得模糊，今天各大媒体都争相报道与HTML5有关的东西，那么，HTML5未来的发展趋势到底是什么？</p>
<h3>　　1） 移动优先</h3>
<p>前天，appMobi获选ReadWriterWeb2012最具前途的的公司，作为一家初创公司，这个奖公司首先专注于在移动平台上如何实现HTML5的简单易用和无处不在。</p>
<p>从如今层出不穷的移动应用就知道，在这个智能手机和将平板电脑大爆炸的时代，移动优先已成趋势，不管是开发什么，都以移动为主。</p>
<p>如上文所说，此前一直困扰移动领域的问题就是开发Web应用还是原生应用。而如今，我们看见一些大型企业如《金融时报》在冲着HTM L5进军移动市场过程中，从App Store撤掉iPad原生应用而开发Web应用，同样表现出色。</p>
<p>许多游戏开发商也将在移动Web应用中扮演中重要角色，移动Web应用优先的趋势将会持续到移动设备统治信息处理领域。其实用户根本不在乎你用什么工具开发了什么应用，不管是Web应用还是原生应用，只要好用就可以了。</p>
<h3>　　2) 游戏开发者领衔“主演”</h3>
<p>其实移动游戏开发商是从HTML5获益最多的一方，他们可利用这个平台逃脱付费游戏须向苹果支付的30%提成。在某种程度上，游戏就是移动平台销量最好的应用，也是吸引人们购买移动设备的一个重要因素。</p>
<p>许多游戏开发商都被Facebook或者Zynga推动着发展，而未来的Facebook应用生态系统是基于HTML5的，尽管在HTML 5平台开发出游戏非常困难，但游戏开发商却都愿意那么做。通过PhoneGap及appmobi的XDK将Web应用游戏打包整合到原生应用中也是一种方式，Facebook差不多就这么干的——基于Web应用及浏览器，但却将之打包整合进原生应用。</p>
<h3>　　3) 响应式设计&amp;自动变化的屏幕尺寸</h3>
<p>在HTML5真的改变移动开发平台之前，必须要迈出重要一步，那就是“响应式设计”，也就是屏幕可以根据内容而自动调整大小。</p>
<p>响应式设计最好的一个例子就是今年上线的BostonGlobe.com（观看视频），其屏幕能够根据任何内容而调整尺寸大小，在访问过其开发商Filament Group后才了解到，响应式设计也并非易事，一些基本概念设计必须从头开始，比如处理媒体库的RespondJS，而且处理来自第三方的图片和广告也是恼人的问题。</p>
<p>要想做好响应式设计，就必须洞悉内容与屏幕之间的反馈关系，一家来自硅谷的响应式设计公司ZURB称，其实在过去的16年中，开发商就意识到响应式设计就要完全离开“流”，转而注重内容是如何在网页和移动设备中被处理的，这一过程还在继续，HTML5会让它最终成为可能。</p>
<h3>　　4 )设备访问</h3>
<p>消除Web应用与原生应用界限的最大障碍就是浏览器访问移动设备基本特性的能力，比如照相机，通讯录，日历，加速器等，利用HTML5实现此能力方面，上文中提到的appMobi算是行业翘楚，在感恩节后开源了所有API。Mozilla也一直在努力通过移动浏览器Fennec来将强设备访问能力。</p>
<p>对许多移动开发商来说，提高设备访问能力是HTML5最令人激动的革新，这意味着Web应用能够登陆移动设备而无需做任何PhoneGap式打包，游戏开发商当然最开心，因为某些特性对他们来说是封锁的，比如能整合到游戏中的加速器。</p>
<p>这就开启了另一个可能的世界，比如能与云更好地整合（这有利于应用内购买，消息推送等）并提高游戏可玩性，有了HTML5这个平台，开发商可以不再依赖于Java语言，CSS3，HTML及其它程序语言。</p>
<h3>　　5) 离线缓存</h3>
<p>这个概念相当新潮，离线情况下，app也能照常运作，算是HTML5充满魔力的一面，今年最好的离线缓存例子就是亚马逊Kindle的云阅读器，可以通过Firefox6以上版本，Chrome11以上版本，Safari5以上版本及iOS4以上版本浏览器将内容同步到所有Kindle系列设备，并能记忆用户在kindle图书馆的一切。</p>
<p><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/12/1220_1.jpg" rel="img"><img class="aligncenter size-full wp-image-786" title="1220_1" src="http://jianyun.org/wordpress/wp-content/uploads/2011/12/1220_1.jpg" alt="" width="500" height="199" /></a></p>
<p>亚马逊就这么实现了离线使用Web应用，许多专家人声称原生应用的末日即将到来，因为Web应用的使用变得简单，无摩擦，适用于任何一个平台或者无需平台。当然Mozilla的触角也伸到了这里，实际上，Mozilla想涉足任何一个HTML5能渗透的领域，从Mozilla的移动蓝图，可以了解更多。</p>
<h3>　　6) 开发工具的成熟</h3>
<ul>
<li>在今年八月份，Brian Fling曾写过一篇博文叫HTML5 Web应用开发剖析，提出了几点建议供从事HTML5应用的开发者参考：</li>
<li>　　要耐心，HTML5项目可能比开发其他任何项目好是都要长</li>
<li>　　做好预算，这不像建网站那么简单，可能会耗费你大量资金</li>
<li>　　找对开发者，你要记住，这对许多经验丰富的专家来说都非常难的事，那么你的团队也会觉得困难，所以一定要找对人，找到正确的方向</li>
<li>　　要自食其力，你要知道，开发HTML5项目，许多工具都要自制，不是现成的</li>
<li>　　在技术界，按部就班的教条风格在这里行不通，会花掉许多不必要的资金，在移动领域，没有对与错，只有是否适合，一切以用户体验为重。</li>
</ul>
<p><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/12/1220_2.jpg" rel="img"><img class="aligncenter size-full wp-image-787" title="1220_2" src="http://jianyun.org/wordpress/wp-content/uploads/2011/12/1220_2.jpg" alt="" width="500" height="344" /></a></p>
<p>在工具方面，除了appMobi提供的工具以外，还有Sencha及Appcelerator提供的框架及IDE供应用开发商们使用，虽然这些工具现在算不上成熟，也不如Android和iOS上的开发商框架及工具那般简单强大，但至少它们在演进，将会变得越来越好用。</p>
<h3>　　总结</h3>
<p>HTML 5的其它功能，如表单和新标准还在快速演进，而随着标准化工作的进行，HTML5有可能变回HTML。HTML5开发领域的领军人物包括Sencha，Adobe，Appcelerator，appMobi及Facebook，亚马逊，Google三大巨头。</p>
<p>不管你是想开发出新型视频应用的开发商如Brightcover还是想开发新型音频应用的开发商如Soundcloud，不论是桌面应用还是移动应用，HTML5都是创新的主旋律。</p>
<p>英文原文：<a href="http://www.readwriteweb.com/archives/top_6_trends_in_html5_in_2011p2.php" target="_blank">RWW：Top 6 Trends In HTML5 In 2011</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p  class="related_post_title">随机日志</p><ul class="related_post"><li><a href="http://jianyun.org/archives/403.html" title="UltraEdit 17.00.0.1024 破解汉化绿色版(烈火版)">UltraEdit 17.00.0.1024 破解汉化绿色版(烈火版)</a> (0)</li><li><a href="http://jianyun.org/archives/150.html" title="Windows Phone 7 Xbox Live 游戏名单浮出水面">Windows Phone 7 Xbox Live 游戏名单浮出水面</a> (4)</li><li><a href="http://jianyun.org/archives/334.html" title="类及OO设计原则，设计模式基础">类及OO设计原则，设计模式基础</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/785.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源</title>
		<link>http://jianyun.org/archives/775.html</link>
		<comments>http://jianyun.org/archives/775.html#comments</comments>
		<pubDate>Wed, 14 Dec 2011 08:12:20 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[编程点滴]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[VSTO]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=775</guid>
		<description><![CDATA[在遍历MailItem的Attachments集合的时候发现，不管是真正的附件还是内嵌资源，比如邮件内容中内嵌的图片(Embedded Image)，都是Attachments集合的元素，通过查看attachment元素的属性，并没有发现可以区分它们的方法。 其实如果是Outlook2007及以上的话，可以通过MAPI Attachment Reference for PropertyAcessor取得attachment的ContentID来判断。 比较靠谱的判断方法是， 1）先看attachment的Type属性是不是OlAttachmentType.olByValue，如果不是那么它是内嵌的 2）再通过PropertyAccessor.GetProperty的方法看ContentID(http://schemas.microsoft.com/mapi/proptag/0x3712001E)和ContentLocation(http://schemas.microsoft.com/mapi/proptag/0x3713001E)是不是空的，如果是不为空的字符串，那么它是内嵌的 通常做1）和2）的check就行了，但某些情况下，这样还不保险，可以继续下面的check 3）通过PropertyAccessor.GetProperty的方法看METHOD属性(http://schemas.microsoft.com/mapi/proptag/0&#215;37050003)的值是不是6，类型应该是int，如果是那么它是内嵌的 4）通过PropertyAccessor.GetProperty的方法看FLAGS属性(http://schemas.microsoft.com/mapi/proptag/0&#215;37140003)的值是不是4，类型应该是int，如果是那么它是内嵌的 &#160; 下面是代码判断： private bool isEmbeddedAttachment(Outlook.Attachment attachment) { if(attachment.Type != Outlook.OlAttachmentType.olByValue) { return true; } string ATTACH_CONTENT_ID = @"http://schemas.microsoft.com/mapi/proptag/0x3712001E"; string ATTACH_CONTENT_LOCATION = @"http://schemas.microsoft.com/mapi/proptag/0x3713001E"; if(attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_ID).ToString() != string.Empty &#124;&#124; attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_LOCATION).ToString() != string.Empty) { return true; } string ATTACH_METHOD = @"http://schemas.microsoft.com/mapi/proptag/0x37050003"; if((int)attachment.PropertyAccessor.GetProperty(ATTACH_METHOD) == 6) { return [...]]]></description>
			<content:encoded><![CDATA[<p>在遍历MailItem的Attachments集合的时候发现，不管是真正的附件还是内嵌资源，比如邮件内容中内嵌的图片(Embedded Image)，都是Attachments集合的元素，通过查看attachment元素的属性，并没有发现可以区分它们的方法。</p>
<p>其实如果是Outlook2007及以上的话，可以通过MAPI Attachment Reference for PropertyAcessor取得attachment的ContentID来判断。</p>
<p>比较靠谱的判断方法是，</p>
<p>1）先看attachment的Type属性是不是OlAttachmentType.olByValue，如果不是那么它是内嵌的</p>
<p>2）再通过PropertyAccessor.GetProperty的方法看ContentID(http://schemas.microsoft.com/mapi/proptag/0x3712001E)和ContentLocation(http://schemas.microsoft.com/mapi/proptag/0x3713001E)是不是空的，如果是不为空的字符串，那么它是内嵌的</p>
<p>通常做1）和2）的check就行了，但某些情况下，这样还不保险，可以继续下面的check</p>
<p>3）通过PropertyAccessor.GetProperty的方法看METHOD属性(http://schemas.microsoft.com/mapi/proptag/0&#215;37050003)的值是不是6，类型应该是int，如果是那么它是内嵌的</p>
<p>4）通过PropertyAccessor.GetProperty的方法看FLAGS属性(http://schemas.microsoft.com/mapi/proptag/0&#215;37140003)的值是不是4，类型应该是int，如果是那么它是内嵌的</p>
<p>&nbsp;</p>
<p>下面是代码判断：</p>
<blockquote><pre>
private bool isEmbeddedAttachment(Outlook.Attachment attachment)
{
     if(attachment.Type != Outlook.OlAttachmentType.olByValue)
     {
          return true;
     }

     string ATTACH_CONTENT_ID =
              @"http://schemas.microsoft.com/mapi/proptag/0x3712001E";
     string ATTACH_CONTENT_LOCATION =
              @"http://schemas.microsoft.com/mapi/proptag/0x3713001E";
     if(attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_ID).ToString()
           != string.Empty ||
        attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_LOCATION).ToString()
           != string.Empty)
     {
          return true;
     }

     string ATTACH_METHOD =
              @"http://schemas.microsoft.com/mapi/proptag/0x37050003";
     if((int)attachment.PropertyAccessor.GetProperty(ATTACH_METHOD) == 6)
     {
          return true;
     }

     string ATTACH_FLAGS =
              @"http://schemas.microsoft.com/mapi/proptag/0x37140003";
     if((int)attachment.PropertyAccessor.GetProperty(ATTACH_FLAGS) == 4)
     {
         return true;
     }

     return false;
}
</pre>
</blockquote>
<p>&nbsp;</p>
<blockquote><pre>
int count = item.Attachments.Count;
//删除邮件中的附件，保留内嵌资源
for(int i = count; i > 0; i--)
{
    if(!isEmbeddedAttachment(item.Attachments[i]))
    {
        item.Attachments[i].Delete();
    }
}
</blockquote>
</pre>
</blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/792.html" title="Executing Multiple Select Statements for Oracle">Executing Multiple Select Statements for Oracle</a> (0)</li><li><a href="http://jianyun.org/archives/766.html" title="Oracle中RAW(16)与.Net中GUID字符串的转换">Oracle中RAW(16)与.Net中GUID字符串的转换</a> (0)</li><li><a href="http://jianyun.org/archives/723.html" title="C#三种字符串拼接方法性能浅析">C#三种字符串拼接方法性能浅析</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/775.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>每天两分钟 远离电脑病</title>
		<link>http://jianyun.org/archives/771.html</link>
		<comments>http://jianyun.org/archives/771.html#comments</comments>
		<pubDate>Mon, 28 Nov 2011 05:18:25 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[健康]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=771</guid>
		<description><![CDATA[在电脑前待久了，常常会导致脖子和肩膀僵硬，而且还会产生一些慢性病。当你感觉身体僵硬的时候，做做这些伸展运动吧！放一份在抽屉里，并且在起身在办公室周围散步的时候想到动动胳膊转转身体，你一定会感觉好起来！其实算下来，这个电脑操每次只要两分钟，不少网友转发并收藏该帖子。“没事练练不错啊”、“经常忙到连厕所都忘记上啊”、“最近天天脖子痛，转给各位苦呆的办公族”。具体步骤如何呢？ 动作1：十指交叉前平举 动作要领：坐直，收腹挺胸，十指交叉，目视前方，双手与肩同高向前探出，自然呼吸。保持这个动作10-20秒。 功效：拉伸整个手臂和肩部的肌肉，起到放松、缓解疲劳的效果。 动作2、4：十指交叉头上举 动作要领：坐直，收腹挺胸，十指交叉，目视前方，双手伸直上举，直至与身体为一条直线，维持这个动作10-15秒。 功效：拉伸手臂的肌肉、脊柱以及两侧的竖脊肌，防止腰肌劳损和肩颈酸痛。 动作3：背后拉伸侧颈 动作要领：站姿，双腿开立，与肩同宽，向左侧运动时，左手从后面抓住右手肘关节，向左侧施力，同时头部向左侧下方运动。保持8-10秒，还原，换方向。 功效：拉伸肩颈肌肉、斜方肌，起到放松效果，防止肩周炎等肩颈疾病。 动作5：双肩上耸 动作要领：站姿，双手自然下垂，两肩向上耸起，再放松，在3-5秒的时间里持续3次。 功效：放松肩部肌肉，防止肌肉僵硬等肩部疾病。 动作6：站姿侧腰 动作要领：如图所示，向右侧腰时，两腿开立与肩同宽，收腹挺胸，右手主动施力拉左手手臂，方向是右侧下方。弯下去后保持10-12秒，还原，向左侧腰，同右。 功效：拉伸肩颈部肌肉以及腹侧外肌，起到放松提神的效果，可预防肩部酸痛以及腰肌劳损。 动作7、8：合十屈腕挤压 动作要领：手指朝上时，五指并拢，双手合十，保持双掌相贴不分的情况下，腕关节同时向对方施力，保持10秒，还原；手指朝下时动作要领与朝上时相同。 功效：可锻炼腕关节和肘关节，防止“鼠标手”。 动作9：坐姿直臂振肩 动作要领：坐姿，收腹挺胸，双腿并拢，右手伸直上举至耳际，左手伸直向后伸。动作保持8-10秒，还原，换手。 功效：主要拉伸肩关节的肌肉与韧带，可预防肩周炎。 动作10：叠腿转腰 动作要领：如图所示，坐姿，收腹挺胸，向左侧转腰时，左手绕过背部，抓住固定物，向左侧施力；左腿放于右腿之上，右手扶住左腿膝关节处，向右施力；同时转头，腰部主动向左旋转；保持动作8-10秒，还原。向右时与左相反。 功效：拉伸手臂、腰部、臀部等肌肉，可让血液加速循环，提高身体的免疫能力，预防办公室各种关节疾病。 动作11：坐姿推腰 动作要领：坐姿，收腹挺胸，双手虎口向下放于腰部，主动施力于腰部，使得腰部肌肉拉伸收紧，保持施力过程10-15秒，做2-3组。 功效：可防止腰肌劳损，纠正腰椎等。 动作12：摆动双手 动作要领：这个动作好简单，站立，收腹挺胸，双手自然下垂，摆动两手，保持施力过程8-10秒。 功效：锻炼肘关节，防止“鼠标手”。 科普一下 “电脑病” 职业病专家指出，记者、网络设计师、游戏玩家等长期以电脑为主要工具，堪称“电脑病”的“高危人群”。医学界长期进行电脑操作造成的这种眼、手、腕功能性损伤，称为反复紧张性损伤症又称计算机键盘疲劳综合征。从病因来看，长时间注视荧光屏上的绿色画面，一旦视线离开荧光屏，常能把白色的墙壁看成粉红色。如机房空气中正负离子失去平衡，可使人体内生理活性物质受到影响，进而造成精神活动障碍。室内照光和集光不良，操作时姿势不良，工作时间过久，可导致眼睛疲劳，手、腕、臂、肩功能性损伤。此外，有人深更半夜还挂在网上看视频上微博，其实是患上了“贪网症”，彻夜不眠，白昼长睡不醒或无精打采，睡意绵绵，性情也变得暴躁而阴沉。 其实，预防计算机症候群的关键，是在用计算机时保持计算机屏幕、键盘及人体成一条直线。此外，每次工作一段时间后，应站起来活动片刻。不妨做做这套职场最流行的电脑操。此外，上班族预防电脑病要注意劳逸结合，防止肌腱劳损。注意用眼卫生，多吃新鲜蔬菜和水果；喝绿茶防辐射等等。 随机日志上方山踏青，感受春天的气息 (0)ASP:Menu 在IE8中显示不正确的解决方法 (0)文件名智能排序的规则与算法 (1)]]></description>
			<content:encoded><![CDATA[<p>在电脑前待久了，常常会导致脖子和肩膀僵硬，而且还会产生一些慢性病。当你感觉身体僵硬的时候，做做这些伸展运动吧！放一份在抽屉里，并且在起身在办公室周围散步的时候想到动动胳膊转转身体，你一定会感觉好起来！其实算下来，这个电脑操每次只要两分钟，不少网友转发并收藏该帖子。“没事练练不错啊”、“经常忙到连厕所都忘记上啊”、“最近天天脖子痛，转给各位苦呆的办公族”。具体步骤如何呢？</p>
<p><strong>动作1：十指交叉前平举</strong></p>
<p>动作要领：坐直，收腹挺胸，十指交叉，目视前方，双手与肩同高向前探出，自然呼吸。保持这个动作10-20秒。</p>
<p>功效：拉伸整个手臂和肩部的肌肉，起到放松、缓解疲劳的效果。</p>
<p><strong>动作2、4：十指交叉头上举</strong></p>
<p>动作要领：坐直，收腹挺胸，十指交叉，目视前方，双手伸直上举，直至与身体为一条直线，维持这个动作10-15秒。</p>
<p>功效：拉伸手臂的肌肉、脊柱以及两侧的竖脊肌，防止腰肌劳损和肩颈酸痛。</p>
<p><strong>动作3：背后拉伸侧颈</strong></p>
<p>动作要领：站姿，双腿开立，与肩同宽，向左侧运动时，左手从后面抓住右手肘关节，向左侧施力，同时头部向左侧下方运动。保持8-10秒，还原，换方向。</p>
<p>功效：拉伸肩颈肌肉、斜方肌，起到放松效果，防止肩周炎等肩颈疾病。</p>
<p><strong>动作5：双肩上耸</strong></p>
<p>动作要领：站姿，双手自然下垂，两肩向上耸起，再放松，在3-5秒的时间里持续3次。</p>
<p>功效：放松肩部肌肉，防止肌肉僵硬等肩部疾病。</p>
<p><strong>动作6：站姿侧腰</strong></p>
<p>动作要领：如图所示，向右侧腰时，两腿开立与肩同宽，收腹挺胸，右手主动施力拉左手手臂，方向是右侧下方。弯下去后保持10-12秒，还原，向左侧腰，同右。</p>
<p>功效：拉伸肩颈部肌肉以及腹侧外肌，起到放松提神的效果，可预防肩部酸痛以及腰肌劳损。</p>
<p><strong>动作7、8：合十屈腕挤压</strong></p>
<p>动作要领：手指朝上时，五指并拢，双手合十，保持双掌相贴不分的情况下，腕关节同时向对方施力，保持10秒，还原；手指朝下时动作要领与朝上时相同。</p>
<p>功效：可锻炼腕关节和肘关节，防止“鼠标手”。</p>
<p><strong>动作9：坐姿直臂振肩</strong></p>
<p>动作要领：坐姿，收腹挺胸，双腿并拢，右手伸直上举至耳际，左手伸直向后伸。动作保持8-10秒，还原，换手。</p>
<p>功效：主要拉伸肩关节的肌肉与韧带，可预防肩周炎。</p>
<p><strong>动作10：叠腿转腰</strong></p>
<p>动作要领：如图所示，坐姿，收腹挺胸，向左侧转腰时，左手绕过背部，抓住固定物，向左侧施力；左腿放于右腿之上，右手扶住左腿膝关节处，向右施力；同时转头，腰部主动向左旋转；保持动作8-10秒，还原。向右时与左相反。</p>
<p>功效：拉伸手臂、腰部、臀部等肌肉，可让血液加速循环，提高身体的免疫能力，预防办公室各种关节疾病。</p>
<p><strong>动作11：坐姿推腰</strong></p>
<p>动作要领：坐姿，收腹挺胸，双手虎口向下放于腰部，主动施力于腰部，使得腰部肌肉拉伸收紧，保持施力过程10-15秒，做2-3组。</p>
<p>功效：可防止腰肌劳损，纠正腰椎等。</p>
<p><strong>动作12：摆动双手</strong></p>
<p>动作要领：这个动作好简单，站立，收腹挺胸，双手自然下垂，摆动两手，保持施力过程8-10秒。</p>
<p>功效：锻炼肘关节，防止“鼠标手”。</p>
<p><strong>科普一下 “电脑病”</strong></p>
<p>职业病专家指出，记者、网络设计师、游戏玩家等长期以电脑为主要工具，堪称“电脑病”的“高危人群”。医学界长期进行电脑操作造成的这种眼、手、腕功能性损伤，称为反复紧张性损伤症又称计算机键盘疲劳综合征。从病因来看，长时间注视荧光屏上的绿色画面，一旦视线离开荧光屏，常能把白色的墙壁看成粉红色。如机房空气中正负离子失去平衡，可使人体内生理活性物质受到影响，进而造成精神活动障碍。室内照光和集光不良，操作时姿势不良，工作时间过久，可导致眼睛疲劳，手、腕、臂、肩功能性损伤。此外，有人深更半夜还挂在网上看视频上微博，其实是患上了“贪网症”，彻夜不眠，白昼长睡不醒或无精打采，睡意绵绵，性情也变得暴躁而阴沉。</p>
<p>其实，预防计算机症候群的关键，是在用计算机时保持计算机屏幕、键盘及人体成一条直线。此外，每次工作一段时间后，应站起来活动片刻。不妨做做这套职场最流行的电脑操。此外，上班族预防电脑病要注意劳逸结合，防止肌腱劳损。注意用眼卫生，多吃新鲜蔬菜和水果；喝绿茶防辐射等等。</p>
<p><a rel="img" href="http://jianyun.org/wordpress/wp-content/uploads/2011/11/2011112721304167.jpg"><img class="aligncenter size-full wp-image-773" title="2011112721304167" src="http://jianyun.org/wordpress/wp-content/uploads/2011/11/2011112721304167.jpg" alt="" width="400" height="505" /></a></p>
<p  class="related_post_title">随机日志</p><ul class="related_post"><li><a href="http://jianyun.org/archives/321.html" title="TreeView出现的 TreeView_HoverNode error">TreeView出现的 TreeView_HoverNode error</a> (0)</li><li><a href="http://jianyun.org/archives/266.html" title="那些撕心裂肺的歌词">那些撕心裂肺的歌词</a> (2)</li><li><a href="http://jianyun.org/archives/714.html" title="html meta标签作用及使用说明">html meta标签作用及使用说明</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/771.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle中RAW(16)与.Net中GUID字符串的转换</title>
		<link>http://jianyun.org/archives/766.html</link>
		<comments>http://jianyun.org/archives/766.html#comments</comments>
		<pubDate>Fri, 25 Nov 2011 02:40:37 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[编程点滴]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=766</guid>
		<description><![CDATA[平常从来都没碰到过RAW类型的字段，最近碰到一个需求，就是我们数据库中保存了一个VARCHAR类型的GUID字符串，这个是调用FileNet API保存文档到FileNet Content Engine后返回的一个document id。 现在要利用这个document id直接去FileNet的数据库更新一些数据，经过查看和测试发现DOCVERSION这个表应该就是存储文档的信息的表，进一步发现Object_id应该就对应document id，但是这个字段的类型是RAW(16)，初步看并不匹配。 在网上查了下发现 http://www.robobunny.com/cgi-bin/guid 解释了Oracle 用RAW(16)来表示GUID，而且这个页面提供了RAW(16)和普通的GUID字符串之间的转换。 后来发现RAW(16)和普通的GUID字符串之间的转换可以用如下方法： Oracle中： select * from docversion where substr(object_id,7,2) &#124;&#124; substr(object_id,5,2) &#124;&#124; substr(object_id,3,2) &#124;&#124; substr(object_id,1,2) &#124;&#124; &#8216;-&#8217; &#124;&#124; substr(object_id,11,2) &#124;&#124; substr(object_id,9,2) &#124;&#124; &#8216;-&#8217; &#124;&#124; substr(object_id,15,2) &#124;&#124; substr(object_id,13,2) &#124;&#124; &#8216;-&#8217; &#124;&#124; substr(object_id,17,4) &#124;&#124; &#8216;-&#8217; &#124;&#124; substr(object_id,21,12) = &#8217;64908CFC-2D78-4EC6-A5EF-6AC42B1D3454&#8242; &#160; .Net中： static string DotNetToOracle(string text) { Guid guid [...]]]></description>
			<content:encoded><![CDATA[<p>平常从来都没碰到过RAW类型的字段，最近碰到一个需求，就是我们数据库中保存了一个VARCHAR类型的GUID字符串，这个是调用FileNet API保存文档到FileNet Content Engine后返回的一个document id。</p>
<p>现在要利用这个document id直接去FileNet的数据库更新一些数据，经过查看和测试发现DOCVERSION这个表应该就是存储文档的信息的表，进一步发现Object_id应该就对应document id，但是这个字段的类型是RAW(16)，初步看并不匹配。</p>
<p>在网上查了下发现 <a href="http://www.robobunny.com/cgi-bin/guid">http://www.robobunny.com/cgi-bin/guid</a> 解释了Oracle 用RAW(16)来表示GUID，而且这个页面提供了RAW(16)和普通的GUID字符串之间的转换。</p>
<p>后来发现RAW(16)和普通的GUID字符串之间的转换可以用如下方法：</p>
<h4>Oracle中：</h4>
<blockquote><p>
select * from docversion where substr(object_id,7,2) ||<br />
substr(object_id,5,2) ||<br />
substr(object_id,3,2) ||<br />
substr(object_id,1,2) || &#8216;-&#8217; ||<br />
substr(object_id,11,2) ||<br />
substr(object_id,9,2) || &#8216;-&#8217; ||<br />
substr(object_id,15,2) ||<br />
substr(object_id,13,2) || &#8216;-&#8217; ||<br />
substr(object_id,17,4) || &#8216;-&#8217; ||<br />
substr(object_id,21,12) = &#8217;64908CFC-2D78-4EC6-A5EF-6AC42B1D3454&#8242;
</p></blockquote>
<p>&nbsp;</p>
<h4>.Net中：</h4>
<blockquote><pre>
        static string DotNetToOracle(string text)
        {
            Guid guid = new Guid(text);
            return BitConverter.ToString(guid.ToByteArray()).Replace("-", "");
        }

        static string OracleToDotNet(string text)
        {
            byte[] bytes = ParseHex(text);
            Guid guid = new Guid(bytes);
            return guid.ToString().ToUpperInvariant();
        }

        static byte[] ParseHex(string text)
        {
            byte[] ret = new byte[text.Length / 2];
            for (int i = 0; i < ret.Length; i++)
            {
                ret[i] = Convert.ToByte(text.Substring(i * 2, 2), 16);
            }
            return ret;
        }
</pre>
</blockquote>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/792.html" title="Executing Multiple Select Statements for Oracle">Executing Multiple Select Statements for Oracle</a> (0)</li><li><a href="http://jianyun.org/archives/820.html" title="PL/SQL Developer登录时找不到OCI.DLL的问题">PL/SQL Developer登录时找不到OCI.DLL的问题</a> (0)</li><li><a href="http://jianyun.org/archives/775.html" title="[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源">[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/766.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>光与影以及思维</title>
		<link>http://jianyun.org/archives/745.html</link>
		<comments>http://jianyun.org/archives/745.html#comments</comments>
		<pubDate>Thu, 06 Oct 2011 00:58:28 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[生活感悟]]></category>
		<category><![CDATA[情感]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=745</guid>
		<description><![CDATA[ 孤独是特立独行的赠予！ 一个人的快乐，有时胜过一群人的狂欢！ 躲在世界的一隅，静静享受生活的美！ 美丽的东西总是很少人参与，这是宿命！ 思念铺张，模糊了城市的光！ 麻木的生活并没有麻木我的好奇心，世界对于我仍是一片未知！ 化了妆，决计要吓一吓路人，却最终发现惊吓的只是自己，世界早已远去！ 衣架悬挂了孤单，城市承载了一切！ 阳光下的晕眩，是不可多得的青春纪念！ 你的声音就是温暖，哪怕是大雪弥漫！ 有你便再无恐惧！ 故事的开头总是美丽，为什么结束却总是如此荒凉？ 游弋在城市上空的快乐，俯瞰无奈而又无辜的悲哀！ 相关文章我们今年二十五六岁 (0)网络短片《老男孩》，引发青春记忆，感动无数70、80后 (1)用电脑说爱你！看看程序员如何告白 (1)]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/842736080273518295.jpg" rel="img"><img class="aligncenter size-full wp-image-746" title="842736080273518295" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/842736080273518295.jpg" alt="" width="513" height="385" /></a></p>
<p style="text-align: center;"> 孤独是特立独行的赠予！</p>
<p style="text-align: center;">一个人的快乐，有时胜过一群人的狂欢！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/3281153803517700004.jpg" rel="img"><img class="aligncenter size-full wp-image-747" title="3281153803517700004" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/3281153803517700004.jpg" alt="" width="513" height="513" /></a></p>
<p style="text-align: center;">躲在世界的一隅，静静享受生活的美！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1607785066972557239.jpg" rel="img"><img class="aligncenter size-full wp-image-748" title="1607785066972557239" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1607785066972557239.jpg" alt="" width="513" height="342" /></a></p>
<p style="text-align: center;">美丽的东西总是很少人参与，这是宿命！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1572037744945985844.jpg" rel="img"><img class="aligncenter size-full wp-image-749" title="1572037744945985844" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1572037744945985844.jpg" alt="" width="513" height="148" /></a></p>
<p style="text-align: center;">思念铺张，模糊了城市的光！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1587237393688357018.jpg" rel="img"><img class="aligncenter size-full wp-image-750" title="1587237393688357018" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1587237393688357018.jpg" alt="" width="513" height="340" /></a></p>
<p style="text-align: center;">麻木的生活并没有麻木我的好奇心，世界对于我仍是一片未知！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/2817283041913928596.jpg" rel="img"><img class="aligncenter size-full wp-image-751" title="2817283041913928596" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/2817283041913928596.jpg" alt="" width="513" height="342" /></a></p>
<p style="text-align: center;">化了妆，决计要吓一吓路人，却最终发现惊吓的只是自己，世界早已远去！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1154328879507321716.jpg" rel="img"><img class="aligncenter size-full wp-image-752" title="1154328879507321716" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1154328879507321716.jpg" alt="" width="513" height="344" /></a></p>
<p style="text-align: center;">衣架悬挂了孤单，城市承载了一切！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1709960483519278929.jpg" rel="img"><img class="aligncenter size-full wp-image-753" title="1709960483519278929" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1709960483519278929.jpg" alt="" width="513" height="339" /></a></p>
<p style="text-align: center;">阳光下的晕眩，是不可多得的青春纪念！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/809522033021756406.jpg" rel="img"><img class="aligncenter size-full wp-image-754" title="809522033021756406" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/809522033021756406.jpg" alt="" width="513" height="513" /></a></p>
<p style="text-align: center;">你的声音就是温暖，哪怕是大雪弥漫！</p>
<p style="text-align: center;">有你便再无恐惧！</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1258193145897880628.jpg" rel="img"><img class="aligncenter size-full wp-image-755" title="1258193145897880628" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/1258193145897880628.jpg" alt="" width="513" height="338" /></a></p>
<p style="text-align: center;">故事的开头总是美丽，为什么结束却总是如此荒凉？</p>
<p style="text-align: center;"><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/2586755035972141588.jpg" rel="img"><img class="aligncenter size-full wp-image-756" title="2586755035972141588" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/2586755035972141588.jpg" alt="" width="513" height="513" /></a></p>
<p style="text-align: center;">游弋在城市上空的快乐，俯瞰无奈而又无辜的悲哀！</p>
<p style="text-align: center;">
<p style="text-align: center;">
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/339.html" title="我们今年二十五六岁">我们今年二十五六岁</a> (0)</li><li><a href="http://jianyun.org/archives/274.html" title="网络短片《老男孩》，引发青春记忆，感动无数70、80后">网络短片《老男孩》，引发青春记忆，感动无数70、80后</a> (1)</li><li><a href="http://jianyun.org/archives/136.html" title="用电脑说爱你！看看程序员如何告白">用电脑说爱你！看看程序员如何告白</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/745.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silk和UCWeb</title>
		<link>http://jianyun.org/archives/739.html</link>
		<comments>http://jianyun.org/archives/739.html#comments</comments>
		<pubDate>Wed, 05 Oct 2011 09:47:13 +0000</pubDate>
		<dc:creator>jianyun</dc:creator>
				<category><![CDATA[互联网络]]></category>
		<category><![CDATA[云端]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://jianyun.org/?p=739</guid>
		<description><![CDATA[Amazon Kindle Fire 的 Silk 浏览器到底厉害在哪里？ 是现有云端和本地分离式浏览器的简单抄袭（ Opera , BB , UCWeb），还是真的有一手绝活？ UCWeb的烦恼 UCWeb是在中国很流行的分离式浏览器。也是个估值数亿美金的大生意：搜索引擎握住网络的咽喉？而在使用UCWeb的移动设备上，他可以握住搜索引擎的咽喉。 但是也有很多人觉得他是个缺乏前途的技术。随着iPhone等拥有高性能浏览器的手机的普及，随着移动网络的提速（3G，4G），UCWeb所处的市场将会不断缩小。 Silk抄了UCWeb什么？ 服务器端连接 Loading 一个网页，可能和很多服务器建立很多连接：这个去拿 HTML，那个去拿图片等等。移动设备的运算能力有限，网速也慢，在这种设备上建立很多连接代价很大。 而服务器的运算能力远远超越手机，Aamzon EC2更是光纤接入。在服务器端连接多个服务器取得数据，然后整合起来交给客户端，就要经济很多了。 优化效果？ Amazon的宣传中给出的数据是 1337ms vs 5 ms！（不过，他们似乎没有计算服务器端建立连接取得数据的时间。） 内容优化 给 iPhone 一个 1024×768 的图片其实意义不大。因为超越了他屏幕的分辨率。所以可以在服务器把图片缩小一下。这样可以减少数据传输量，加快页面 Loading 速度。这也是久经考验的移动设备浏览的优化手段了，可以期待。 Silk 微创新了什么？ 服务器端文件缓存 两次 Loading 一个页面，第二次会明显快一些。因为第一次下载的内容已经缓存到了本地。但是，移动设备的存储空间也是有限的。有了云端，可以在服务器上建立更加庞大缓存。 当然，这不是技术难题。 UCWeb 不这么做，可能更多的是由于隐私方面的考虑。 服务器端点击预测 Google Chrome 支持一种点击预测技术:他猜测并且预先下载某些链接，如果你点中，那么几乎瞬间就能打开。 Amazon 把这个技术挪到了 EC2 的服务器上。这样做的结果，是客户端不会因为这种技术产生流量。（但是由于多数缓存不在本地， Amazon的 EC2 [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon Kindle Fire 的 Silk 浏览器到底厉害在哪里？</p>
<p>是现有云端和本地分离式浏览器的简单抄袭（ Opera , BB , UCWeb），还是真的有一手绝活？</p>
<p><a href="http://jianyun.org/wordpress/wp-content/uploads/2011/10/Amazon-Silk.jpg" rel="img"><img class="aligncenter size-full wp-image-740" title="Amazon-Silk" src="http://jianyun.org/wordpress/wp-content/uploads/2011/10/Amazon-Silk.jpg" alt="" width="480" height="319" /></a></p>
<h3>UCWeb的烦恼</h3>
<p>UCWeb是在中国很流行的分离式浏览器。也是个估值数亿美金的大生意：搜索引擎握住网络的咽喉？而在使用UCWeb的移动设备上，他可以握住搜索引擎的咽喉。</p>
<p>但是也有很多人觉得他是个缺乏前途的技术。随着iPhone等拥有高性能浏览器的手机的普及，随着移动网络的提速（3G，4G），UCWeb所处的市场将会不断缩小。</p>
<h3>Silk抄了UCWeb什么？</h3>
<p><strong>服务器端连接</strong></p>
<p>Loading 一个网页，可能和很多服务器建立很多连接：这个去拿 HTML，那个去拿图片等等。移动设备的运算能力有限，网速也慢，在这种设备上建立很多连接代价很大。</p>
<p>而服务器的运算能力远远超越手机，Aamzon EC2更是光纤接入。在服务器端连接多个服务器取得数据，然后整合起来交给客户端，就要经济很多了。</p>
<p>优化效果？ Amazon的宣传中给出的数据是 1337ms vs 5 ms！（不过，他们似乎没有计算服务器端建立连接取得数据的时间。）</p>
<p><strong>内容优化</strong></p>
<p>给 iPhone 一个 1024×768 的图片其实意义不大。因为超越了他屏幕的分辨率。所以可以在服务器把图片缩小一下。这样可以减少数据传输量，加快页面 Loading 速度。这也是久经考验的移动设备浏览的优化手段了，可以期待。</p>
<h3>Silk 微创新了什么？</h3>
<p><strong>服务器端文件缓存</strong></p>
<p>两次 Loading 一个页面，第二次会明显快一些。因为第一次下载的内容已经缓存到了本地。但是，移动设备的存储空间也是有限的。有了云端，可以在服务器上建立更加庞大缓存。</p>
<p>当然，这不是技术难题。 UCWeb 不这么做，可能更多的是由于隐私方面的考虑。</p>
<p><strong>服务器端点击预测</strong></p>
<p>Google Chrome 支持一种点击预测技术:他猜测并且预先下载某些链接，如果你点中，那么几乎瞬间就能打开。</p>
<p>Amazon 把这个技术挪到了 EC2 的服务器上。这样做的结果，是客户端不会因为这种技术产生流量。（但是由于多数缓存不在本地， Amazon的 EC2 服务器不给力的时候，效果就要打折扣了。）</p>
<p>不过，EC2 服务器服务器很容易的比移动设备更快，更多的下载大量页面。他将会显著增加点击预测的命中率。</p>
<p>这个技术有点令人兴奋。如果做得好，点击一个 URL 的感觉和按浏览器的回退按钮差不多。</p>
<h3>Silk 的革命</h3>
<p><strong>动态分割本地内容</strong></p>
<p>但是 Amazon 并不满足于此。他又搞出了一个真正的创新：动态分割（过去的）本地内容。</p>
<p>既然有了在 Kindle Fire 上的 Silk 和在 Amazon EC2 上的云端，以往的本地内容（ HTML ，JS ，CSS 等）放在哪里，就是问题了。</p>
<p>而在 Amazon 的设计中，两边都可以放。而什么内容放在哪一边，是动态调整的。</p>
<p>这个实现起来并不简单，你把文件挪动了位置，动态的要改动一些东西。更要命的，你要设计算法，考虑文件的尺寸，被调用的频繁程度，甚至，调用功能产生的运算量和连接数等等因素。之后，算法才能决定并且动态的调整：什么应该放在 Fire 上，什么放在 EC2 上。</p>
<p><strong>意义</strong></p>
<p>“动态分割本地内容”的本质，是权衡移动设备的“运算能力”和“移动网络的速度”，然后计算出一个最优方案（哪些下载到本地执行，哪些留在 EC2 服务器上调用）。</p>
<p>而因为这个算法是动态的，所以，<strong>他不仅能对应今天的移动设备和网络，他也能对应明天的移动设备和网络！</strong></p>
<p>如果 4G 到来了，那么他可以在服务器那边保留更多内容。如果多核移动设备突然普及了，那么他就可以把一些大运算量的内容拿到本地运算。</p>
<p>网络会变，手机会变，<strong>不变的， Silk 总能得到当前状态下的最优解。</strong></p>
<h3>最后的话</h3>
<p>Mobile Safari 的确给力，但是，利用“动态分割本地内容”，用 Webkit 核心的浏览器提供一样的体验，却在可能的情况下，比 Mobile Safari 快一些。</p>
<p>云端永远不会是负担，怎么运用，存乎一心。</p>
<p>&nbsp;</p>
<p  class="related_post_title">相关文章</p><ul class="related_post"><li><a href="http://jianyun.org/archives/294.html" title="微软首次披露：Windows 8将高坐&ldquo;云端&rdquo;">微软首次披露：Windows 8将高坐&ldquo;云端&rdquo;</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://jianyun.org/archives/739.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

