<?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>DBAlife &#187; 软件开发</title>
	<atom:link href="http://www.dbalife.com/archives/category/program/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dbalife.com</link>
	<description>网站系统架构实践</description>
	<lastBuildDate>Wed, 27 Jul 2011 09:57:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OAuth有什么用？为什么要使用OAuth？</title>
		<link>http://www.dbalife.com/archives/546.html</link>
		<comments>http://www.dbalife.com/archives/546.html#comments</comments>
		<pubDate>Fri, 08 Apr 2011 09:01:01 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[软件开发]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/archives/546.html</guid>
		<description><![CDATA[转载自：http://www.thoughtrails.com/episodes/103-oauth OAuth有什么用？为什么要使用OAuth？ 用户希望在第三网站和应用上使用他在SNS网站上的用户信息，这些第三方网站联系SNS网站，但是由于没有用户认证信息，这时这些用户信息是不允许访问的。 举个我们身边国内的例子吧：比如 团购网站 你需要把一条团购信息发到你的新浪微博上并通知你的好友，以前的方法是你需要在团购网站输入你的新浪微博账号，密码才能调用，虽然网站上可能都自谓“不保留新浪微博用户名密码”，但是大家信吗？ OAuth就是为了解决这个问题而诞生的，用户访问第三方资源，不再需要网站提交你的用户名，密码。这样好处自己是安全，而且不会泄露你的隐私给不信任的一方。 在认证和授权的过程中涉及的三方包括： 服务提供方：用户使用服务提供方来存储受保护的资源，如照片，视频，联系人列表。（上述所说的 新浪微博） 用户：存放在服务提供方的受保护的资源的拥有者。（你） 客户端：要访问服务提供方资源的第三方应用，通常是网站，如提供照片打印服务的网站。在认证过程之前，客户端要向服务提供者申请客户端标识。（上述所说的团购网站，也叫第三方网站） 使用OAuth进行认证和授权的过程如下所示: 1第三方网站向SNS网站授权服务发出获取request token的请求。SNS授权服务响应请求，返回一个尚未认证的request token. 2第三方网站获取响应中包含的request token，按照协议规范，附带这个request token，将其重定向到SNS提供的授权页面(User Authorization URL)。如果用户没有登录，用户向普通登录一样，输入用户名和密码完成登录。如果用户已经登录（使用记录Cookie的方式），会出现一个页面，问用户 是否允授权共享他的SNS信息给第三方网站。 3一旦用户选择授权第三方网站，SNS网站将把Web浏览器重定向到第三方网站，同时把SNS的用户信息传递过去。 用户决定允许或拒绝授权给第三方网站，如果用户拒绝授权给此第三方应用，则被重定向到SNS的页面，而不会再回到第三方应用的页面上。 如果用户授权给第三方网站，那么，SNS授权服务接收此请求，将用户重定向到第三方网站提供的页面上，并传递被认证了的request token。这样第三方网站就可以访问SNS网站的用户信息了。 4第三方网站接收到认证的request token后，再次向SNS账号服务发起一次HTTP请求，以换取access token。 SNS 账户授权服务接收请求，验证是否合法。如果合法，则返回一个access token。 OAuth安全机制是如何实现的？ OAuth 使用的签名加密方法有 HMAC-SHA1,RSA-SHA1 （可以自定义）。拿 HMAC-SHA1 来说吧，HMAC-SHA1这种加密码方法，可以使用 私钥 来加密 要在网络上传输的数据，而这个私钥只有 Consumer及服务提供商知道，试图攻击的人即使得到传输在网络上的字符串，没有 私钥 也是白搭。 私钥是：consumer secret&#38;token secret （哈两个密码加一起） 要加密的字符串是：除 oauth_signature 外的其它要传输的数据。按参数名字符排列，如果一样，则按 内容排。如：domain=kejibo.com&#38;oauth_consumer_key=XYZ&#38; word=welcome…………………. 前面提的加密里面都是固定的字符串，那么攻击者岂不是直接可以偷取使用吗？ [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong>转载自：http://www.thoughtrails.com/episodes/103-oauth<br />
</strong></p>
<hr style="width: 100%; height: 2px;" />
<p><strong></strong></p>
<p><strong>OAuth有什么用？为什么要使用OAuth？</strong></p>
<p>用户希望在第三网站和应用上使用他在SNS网站上的用户信息，这些第三方网站联系SNS网站，但是由于没有用户认证信息，这时这些用户信息是不允许访问的。</p>
<p>举个我们身边国内的例子吧：比如 团购网站 你需要把一条团购信息发到你的新浪微博上并通知你的好友，以前的方法是你需要在团购网站输入你的新浪微博账号，密码才能调用，虽然网站上可能都自谓“不保留新浪微博用户名密码”，但是大家信吗？</p>
<p>OAuth就是为了解决这个问题而诞生的，用户访问第三方资源，不再需要网站提交你的用户名，密码。这样好处自己是安全，而且不会泄露你的隐私给不信任的一方。</p>
<p><strong>在认证和授权的过程中涉及的三方包括：</strong></p>
<p><strong>服务提供方：</strong>用户使用服务提供方来存储受保护的资源，如照片，视频，联系人列表。（上述所说的 新浪微博） <strong>用户：</strong>存放在服务提供方的受保护的资源的拥有者。（你） <strong>客户端：</strong>要访问服务提供方资源的第三方应用，通常是网站，如提供照片打印服务的网站。在认证过程之前，客户端要向服务提供者申请客户端标识。（上述所说的团购网站，也叫第三方网站）</p>
<p><strong>使用OAuth进行认证和授权的过程如下所示:</strong></p>
<p>1第三方网站向SNS网站授权服务发出获取request token的请求。SNS授权服务响应请求，返回一个尚未认证的request token.</p>
<p>2第三方网站获取响应中包含的request token，按照协议规范，附带这个request  token，将其重定向到SNS提供的授权页面(User Authorization  URL)。如果用户没有登录，用户向普通登录一样，输入用户名和密码完成登录。如果用户已经登录（使用记录Cookie的方式），会出现一个页面，问用户 是否允授权共享他的SNS信息给第三方网站。</p>
<p>3一旦用户选择授权第三方网站，SNS网站将把Web浏览器重定向到第三方网站，同时把SNS的用户信息传递过去。  用户决定允许或拒绝授权给第三方网站，如果用户拒绝授权给此第三方应用，则被重定向到SNS的页面，而不会再回到第三方应用的页面上。  如果用户授权给第三方网站，那么，SNS授权服务接收此请求，将用户重定向到第三方网站提供的页面上，并传递被认证了的request  token。这样第三方网站就可以访问SNS网站的用户信息了。</p>
<p>4第三方网站接收到认证的request token后，再次向SNS账号服务发起一次HTTP请求，以换取access token。 SNS 账户授权服务接收请求，验证是否合法。如果合法，则返回一个access token。</p>
<p>OAuth安全机制是如何实现的？</p>
<p>OAuth 使用的签名加密方法有 HMAC-SHA1,RSA-SHA1 （可以自定义）。拿 HMAC-SHA1  来说吧，HMAC-SHA1这种加密码方法，可以使用 私钥 来加密 要在网络上传输的数据，而这个私钥只有  Consumer及服务提供商知道，试图攻击的人即使得到传输在网络上的字符串，没有 私钥 也是白搭。</p>
<p>私钥是：consumer secret&amp;token secret （哈两个密码加一起）</p>
<p>要加密的字符串是：除 oauth_signature 外的其它要传输的数据。按参数名字符排列，如果一样，则按  内容排。如：domain=kejibo.com&amp;oauth_consumer_key=XYZ&amp; word=welcome………………….</p>
<p>前面提的加密里面都是固定的字符串，那么攻击者岂不是直接可以偷取使用吗？</p>
<p>不，oauth_timestamp，oauth_nonce。这两个是变化的。而且服务器会验证一个 nonce（混淆码）是否已经被使用。</p>
<p>那么这样攻击者就无法自已生成 签名，或者偷你的签名来使用了。</p>
<p>   <!-- technorati tags begin -->
<p style="font-size:10px;text-align:right;">标签: <a href="http://technorati.com/tag/OAuth" rel="tag">OAuth</a>, <a href="http://technorati.com/tag/%E8%AE%A4%E8%AF%81" rel="tag">认证</a>, <a href="http://technorati.com/tag/%E5%8A%A0%E5%AF%86" rel="tag">加密</a>, <a href="http://technorati.com/tag/%E6%9D%83%E9%99%90" rel="tag">权限</a></p>
<p><!-- technorati tags end --></p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/546.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>优秀应用的7个必备要素</title>
		<link>http://www.dbalife.com/archives/538.html</link>
		<comments>http://www.dbalife.com/archives/538.html#comments</comments>
		<pubDate>Wed, 19 Jan 2011 17:00:35 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[创业]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[应用]]></category>
		<category><![CDATA[手机]]></category>
		<category><![CDATA[移动互联网]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/archives/538.html</guid>
		<description><![CDATA[究竟什么样的应用称得上优秀？许多人从不同角度都给予了定义，例如从用户体验上，优秀移动应用必须易上手难精通，充分利用移动设备特性。又或者从成绩上，必须在口碑相传的情况下拥有5万以上用户。在本文中，开发者Den Delimarsky（Den Delimarsky是位Windows和Windows Phone平台开发者，他还管理着一个技术社区（http://dreamincode.net)和技术播客）从技术角度列出了7条优秀移动应用应该具备的要素，也许看起来非常基础，但当前市面上没有做到这些要求的应用数以万计。 这个7个要素如下： 1. 具备稳定性和可靠性 在应用发布之前，请现在各种情景下对应用进行测试。关闭WiFi、断掉数据链接、将手机设置成飞行模式……测试应用在各种极端情况下的运行情况，因为你不知道用户在使用过程中一定会遇到这样的情况。没有什么比崩溃更降低用户对应用的体验的，它将直接导致用户迅速卸载。 还要确定应用不会过度占用系统资源。如果系统支持后台应用功能，要检查你的应用不至于消耗太多的内存和CPU。 2. 和系统风格保持一致 每个移动平台都有自己的规范，要求应用从UI到用户体验要和所运行的环境变现一致。例如在Windows Phone 7中，你需要用Metro 风格的组件，包括按钮、文字框、Pivot（枢轴视图）和panorama（全景）控件等。如果你在开发的是iPhone应用，你也许就要使用标准菜单栏和导航控件。不遵循这些一致性约束会使用户感到很多的不适，因为他们已经习惯了平台固有的使用习惯。每个用户在使用平台时都有一定的预期，对平台中的应用当然也是如此，这就是对规范的重视必须置于首位的原因。 3. 启动速度要快 老实说，我对一个应用启动时间的等待极限是5-7秒。我理解有些应用的启动需要大块数据，但在这种情况，你应该使用户在主界面看到启动进度，这样用户会知道应用在打开。一个值得学习的例子是Facebook和Twitter在各大移动平台上的客户端——应用在启动主界面时显示与服务相关的行为，同时应用就在通过Web请求来读取消息、通知和回复等。不要在启动阶段运行高能耗的进程而让用户在初始界面上傻等。也许在几次这样的延迟后，你就会失去这个用户。 4. 不要出现界面挂起（UI hangups） 在任何情况下UI进程都不应该被锁定。因为，当出现界面挂起时，用户的直觉反应是“这个应用死机了，我应该关闭它。”大部分用户会遵循他们的直觉而不会去考虑这也许是因为正在操作某些数据。所有的移动平台都支持进程分离技术（thread separation），如果一个工作需要一些时间去执行，为什么不用次级进程来执行这个操作呢？ 5. 不要有广告 这只是个人观点而不是建议，但我真的不愿意在移动应用中看到广告。也许在某些条件下广告有效。但我个人是从不点击广告而且我用都是无广告版本，应用还有其他的收入方式，建议你推出付费版本但没有广告，而不是一个布满展示条的免费版本。 6. 将用户视作消费者 这里我的意思是，有些时候，用户并不愿意为流量付费。所以，如果你的应用太大，给一用户发个提醒信息会显得十分体贴，你可以告诉用户“您好，我们了解到你想下载我们的产品，需要提醒您的是，在3G模式下您也许会因为流量而多承担点费用。” 7. 提供有价值的功能 现在有太多的应用像闪光类、资讯搜集前篇一律，它们有多少机会能吸引到用户的眼球？为什么不添加些特别的功能使其变得与众不同呢？要知道，用户都是非常聪明的，他们不会为那些在移动浏览器上就能轻易获得的服务付费。典型例子是WolframAlpha，它在iPhone平台上的第一个版客户端定价50美元，但你分明可以通过访问它的手机网站免费使用它的计算功能。那推出应用的目是什么呢？（ No related posts.
No related posts.]]></description>
			<content:encoded><![CDATA[<p>究竟什么样的应用称得上优秀？许多人从不同角度都给予了定义，例如从用户体验上，优秀移动应用必须易上手难精通，充分利用移动设备特性。又或者从成绩上，必须在口碑相传的情况下拥有5万以上用户。在本文中，开发者Den  Delimarsky（Den Delimarsky是位Windows和Windows  Phone平台开发者，他还管理着一个技术社区（http://dreamincode.net)和技术播客）从技术角度列出了7条优秀移动应用应该具备的要素，也许看起来非常基础，但当前市面上没有做到这些要求的应用数以万计。</p>
<hr style="width: 100%; height: 2px;" />
<p>这个7个要素如下：</p>
<p><strong>1. 具备稳定性和可靠性</strong></p>
<p>在应用发布之前，请现在各种情景下对应用进行测试。关闭WiFi、断掉数据链接、将手机设置成飞行模式……测试应用在各种极端情况下的运行情况，因为你不知道用户在使用过程中一定会遇到这样的情况。没有什么比崩溃更降低用户对应用的体验的，它将直接导致用户迅速卸载。</p>
<p>还要确定应用不会过度占用系统资源。如果系统支持后台应用功能，要检查你的应用不至于消耗太多的内存和CPU。</p>
<p><strong>2. 和系统风格保持一致</strong></p>
<p>每个移动平台都有自己的规范，要求应用从UI到用户体验要和所运行的环境变现一致。例如在Windows Phone 7中，你需要用Metro</p>
<p>风格的组件，包括按钮、文字框、Pivot（枢轴视图）和panorama（全景）控件等。如果你在开发的是iPhone应用，你也许就要使用标准菜单栏和导航控件。不遵循这些一致性约束会使用户感到很多的不适，因为他们已经习惯了平台固有的使用习惯。每个用户在使用平台时都有一定的预期，对平台中的应用当然也是如此，这就是对规范的重视必须置于首位的原因。</p>
<p><strong>3. 启动速度要快</strong></p>
<p>老实说，我对一个应用启动时间的等待极限是5-7秒。我理解有些应用的启动需要大块数据，但在这种情况，你应该使用户在主界面看到启动进度，这样用户会知道应用在打开。一个值得学习的例子是Facebook和Twitter在各大移动平台上的客户端——应用在启动主界面时显示与服务相关的行为，同时应用就在通过Web请求来读取消息、通知和回复等。不要在启动阶段运行高能耗的进程而让用户在初始界面上傻等。也许在几次这样的延迟后，你就会失去这个用户。</p>
<p><strong>4. 不要出现界面挂起（UI hangups）</strong></p>
<p>在任何情况下UI进程都不应该被锁定。因为，当出现界面挂起时，用户的直觉反应是“这个应用死机了，我应该关闭它。”大部分用户会遵循他们的直觉而不会去考虑这也许是因为正在操作某些数据。所有的移动平台都支持进程分离技术（thread  separation），如果一个工作需要一些时间去执行，为什么不用次级进程来执行这个操作呢？</p>
<p><strong>5. 不要有广告</strong></p>
<p>这只是个人观点而不是建议，但我真的不愿意在移动应用中看到广告。也许在某些条件下广告有效。但我个人是从不点击广告而且我用都是无广告版本，应用还有其他的收入方式，建议你推出付费版本但没有广告，而不是一个布满展示条的免费版本。</p>
<p><strong>6. 将用户视作消费者</strong></p>
<p>这里我的意思是，有些时候，用户并不愿意为流量付费。所以，如果你的应用太大，给一用户发个提醒信息会显得十分体贴，你可以告诉用户“您好，我们了解到你想下载我们的产品，需要提醒您的是，在3G模式下您也许会因为流量而多承担点费用。”</p>
<p><strong>7. 提供有价值的功能</strong></p>
<p>现在有太多的应用像闪光类、资讯搜集前篇一律，它们有多少机会能吸引到用户的眼球？为什么不添加些特别的功能使其变得与众不同呢？要知道，用户都是非常聪明的，他们不会为那些在移动浏览器上就能轻易获得的服务付费。典型例子是WolframAlpha，它在iPhone平台上的第一个版客户端定价50美元，但你分明可以通过访问它的手机网站免费使用它的计算功能。那推出应用的目是什么呢？（</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/538.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JVM调优</title>
		<link>http://www.dbalife.com/archives/385.html</link>
		<comments>http://www.dbalife.com/archives/385.html#comments</comments>
		<pubDate>Wed, 24 Mar 2010 09:20:23 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[系统管理]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[gc]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[调优]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=385</guid>
		<description><![CDATA[堆大小设置 JVM 中最大堆大小有三方面限制：相关操作系统的数据模型（32-bt还是64-bit）限制；系统的可用虚拟内存限制；系统的可用物理内存限制。32位系统下，一般限制在1.5G~2G；64为操作系统对内存无限制。我在Windows Server 2003 系统，3.5G物理内存，JDK5.0下测试，最大可设置为1478m。 典型设置： java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m：设置JVM最大可用内存为3550M。 -Xms3550m：设置JVM促使内存为3550m。此值可以设置与-Xmx相同，以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g：设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m，所以增大年轻代后，将会减小年老代大小。此值对系统性能影响较大，Sun官方推荐配置为整个堆的3/8。 -Xss128k：设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M，以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下，减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的，不能无限生成，经验值在3000~5000左右。 java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0 -XX:NewRatio=4:设置年轻代（包括Eden和两个Survivor区）与年老代的比值（除去持久代）。设置为4，则年轻代与年老代所占比值为1：4，年轻代占整个堆栈的1/5 -XX:SurvivorRatio=4：设置年轻代中Eden区与Survivor区的大小比值。设置为4，则两个Survivor区与一个Eden区的比值为2:4，一个Survivor区占整个年轻代的1/6 -XX:MaxPermSize=16m:设置持久代大小为16m。 -XX:MaxTenuringThreshold=0：设置垃圾最大年龄。如果设置为0的话，则年轻代对象不经过Survivor区，直接进入年老代。对于年老代比较多的应用，可以提高效率。如果将此值设置为一个较大值，则年轻代对象会在Survivor区进行多次复制，这样可以增加对象再年轻代的存活时间，增加在年轻代即被回收的概论。 回收器选择 JVM给了三种选择：串行收集器、并行收集器、并发收集器，但是串行收集器只适用于小数据量的情况，所以这里的选择主要针对并行收集器和并发收集器。默认情况下，JDK5.0以前都是使用串行收集器，如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后，JVM会根据当前系统配置进行判断。 吞吐量优先的并行收集器 如上文所述，并行收集器主要以到达一定的吞吐量为目标，适用于科学技术和后台处理等。 典型配置： java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelGC：选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下，年轻代使用并发收集，而年老代仍旧使用串行收集。 -XX:ParallelGCThreads=20：配置并行收集器的线程数，即：同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。 java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:+UseParallelOldGC：配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。 [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/26.html' rel='bookmark' title='Java日期操作常用方法'>Java日期操作常用方法</a></li>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
<li><a href='http://www.dbalife.com/archives/69.html' rel='bookmark' title='RHEL4U4下的JAVA环境变量配置'>RHEL4U4下的JAVA环境变量配置</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span><strong>堆大小设置</strong></span><br />
JVM 中最大堆大小有三方面限制：相关操作系统的数据模型（32-bt还是64-bit）限制；系统的可用虚拟内存限制；系统的可用物理内存限制。32位系统下，一般限制在1.5G~2G；64为操作系统对内存无限制。我在Windows Server 2003 系统，3.5G物理内存，JDK5.0下测试，最大可设置为1478m。<br />
典型设置：<br />
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k<br />
-Xmx3550m：设置JVM最大可用内存为3550M。<br />
-Xms3550m：设置JVM促使内存为3550m。此值可以设置与-Xmx相同，以避免每次垃圾回收完成后JVM重新分配内存。<br />
-Xmn2g：设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m，所以增大年轻代后，将会减小年老代大小。此值对系统性能影响较大，Sun官方推荐配置为整个堆的3/8。<br />
-Xss128k：设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M，以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下，减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的，不能无限生成，经验值在3000~5000左右。</p>
<p>java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0<br />
-XX:NewRatio=4:设置年轻代（包括Eden和两个Survivor区）与年老代的比值（除去持久代）。设置为4，则年轻代与年老代所占比值为1：4，年轻代占整个堆栈的1/5<br />
-XX:SurvivorRatio=4：设置年轻代中Eden区与Survivor区的大小比值。设置为4，则两个Survivor区与一个Eden区的比值为2:4，一个Survivor区占整个年轻代的1/6<br />
-XX:MaxPermSize=16m:设置持久代大小为16m。<br />
-XX:MaxTenuringThreshold=0：设置垃圾最大年龄。如果设置为0的话，则年轻代对象不经过Survivor区，直接进入年老代。对于年老代比较多的应用，可以提高效率。如果将此值设置为一个较大值，则年轻代对象会在Survivor区进行多次复制，这样可以增加对象再年轻代的存活时间，增加在年轻代即被回收的概论。<br />
<strong><span>回收器选择</span></strong><br />
JVM给了三种选择：串行收集器、并行收集器、并发收集器，但是串行收集器只适用于小数据量的情况，所以这里的选择主要针对并行收集器和并发收集器。默认情况下，JDK5.0以前都是使用串行收集器，如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后，JVM会根据当前系统配置进行判断。<br />
吞吐量优先的并行收集器<br />
如上文所述，并行收集器主要以到达一定的吞吐量为目标，适用于科学技术和后台处理等。<br />
典型配置：<br />
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20<br />
-XX:+UseParallelGC：选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下，年轻代使用并发收集，而年老代仍旧使用串行收集。<br />
-XX:ParallelGCThreads=20：配置并行收集器的线程数，即：同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。</p>
<p>java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC<br />
-XX:+UseParallelOldGC：配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。</p>
<p>java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100<br />
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间，如果无法满足此时间，JVM会自动调整年轻代大小，以满足此值。</p>
<p>java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy<br />
-XX:+UseAdaptiveSizePolicy：设置此选项后，并行收集器会自动选择年轻代区大小和相应的Survivor区比例，以达到目标系统规定的最低相应时间或者收集频率等，此值建议使用并行收集器时，一直打开。<br />
响应时间优先的并发收集器<br />
如上文所述，并发收集器主要是保证系统的响应时间，减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。<br />
典型配置：<br />
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC<br />
-XX:+UseConcMarkSweepGC：设置年老代为并发收集。测试中配置这个以后，-XX:NewRatio=4的配置失效了，原因不明。所以，此时年轻代大小最好用-Xmn设置。<br />
-XX:+UseParNewGC:设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上，JVM会根据系统配置自行设置，所以无需再设置此值。<br />
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection<br />
-XX:CMSFullGCsBeforeCompaction：由于并发收集器不对内存空间进行压缩、整理，所以运行一段时间以后会产生“碎片”，使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。<br />
-XX:+UseCMSCompactAtFullCollection：打开对年老代的压缩。可能会影响性能，但是可以消除碎片<br />
<span><strong>辅助信息</strong></span><br />
JVM提供了大量命令行参数，打印信息，供调试使用。主要有以下一些：<br />
-XX:+PrintGC<br />
输出形式：[GC 118250K-&gt;113543K(130112K), 0.0094143 secs]<br />
[Full GC 121376K-&gt;10414K(130112K), 0.0650971 secs]</p>
<p>-XX:+PrintGCDetails<br />
输出形式：[GC [DefNew: 8614K-&gt;781K(9088K), 0.0123035 secs] 118250K-&gt;113543K(130112K), 0.0124633 secs]<br />
[GC [DefNew: 8614K-&gt;8614K(9088K), 0.0000665 secs][Tenured: 112761K-&gt;10414K(121024K), 0.0433488 secs] 121376K-&gt;10414K(130112K), 0.0436268 secs]</p>
<p>-XX:+PrintGCTimeStamps -XX:+PrintGC：PrintGCTimeStamps可与上面两个混合使用<br />
输出形式：11.851: [GC 98328K-&gt;93620K(130112K), 0.0082960 secs]</p>
<p>-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前，程序未中断的执行时间。可与上面混合使用<br />
输出形式：Application time: 0.5291524 seconds</p>
<p>-XX:+PrintGCApplicationStoppedTime：打印垃圾回收期间程序暂停的时间。可与上面混合使用<br />
输出形式：Total time for which application threads were stopped: 0.0468229 seconds</p>
<p>-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息<br />
输出形式：<br />
34.702: [GC {Heap before gc invocations=7:<br />
def new generation   total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)<br />
eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bd0000)<br />
from space 6144K, 55% used [0x221d0000, 0x22527e10, 0x227d0000)<br />
to   space 6144K,   0% used [0x21bd0000, 0x21bd0000, 0x221d0000)<br />
tenured generation   total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)<br />
the space 69632K,   3% used [0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)<br />
compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)<br />
the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)<br />
ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)<br />
rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)<br />
34.735: [DefNew: 52568K-&gt;3433K(55296K), 0.0072126 secs] 55264K-&gt;6615K(124928K)Heap after gc invocations=8:<br />
def new generation   total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)<br />
eden space 49152K,   0% used [0x1ebd0000, 0x1ebd0000, 0x21bd0000)<br />
from space 6144K, 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)<br />
to   space 6144K,   0% used [0x221d0000, 0x221d0000, 0x227d0000)<br />
tenured generation   total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)<br />
the space 69632K,   4% used [0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)<br />
compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)<br />
the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)<br />
ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)<br />
rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)<br />
}<br />
, 0.0757599 secs]<br />
-Xloggc:filename:与上面几个配合使用，把相关日志信息记录到文件以便分析。<br />
<span><strong>常见配置汇总</strong></span><br />
堆设置<br />
-Xms:初始堆大小<br />
-Xmx:最大堆大小<br />
-XX:NewSize=n:设置年轻代大小<br />
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3，表示年轻代与年老代比值为1：3，年轻代占整个年轻代年老代和的1/4<br />
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如：3，表示Eden：Survivor=3：2，一个Survivor区占整个年轻代的1/5<br />
-XX:MaxPermSize=n:设置持久代大小<br />
收集器设置<br />
-XX:+UseSerialGC:设置串行收集器<br />
-XX:+UseParallelGC:设置并行收集器<br />
-XX:+UseParalledlOldGC:设置并行年老代收集器<br />
-XX:+UseConcMarkSweepGC:设置并发收集器<br />
垃圾回收统计信息<br />
-XX:+PrintGC<br />
-XX:+PrintGCDetails<br />
-XX:+PrintGCTimeStamps<br />
-Xloggc:filename<br />
并行收集器设置<br />
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。<br />
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间<br />
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)<br />
并发收集器设置<br />
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。<br />
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时，使用的CPU数。并行收集线程数。</p>
<p><span><strong>调优总结</strong></span></p>
<p>年轻代大小选择<br />
响应时间优先的应用：尽可能设大，直到接近系统的最低响应时间限制（根据实际情况选择）。在此种情况下，年轻代收集发生的频率也是最小的。同时，减少到达年老代的对象。<br />
吞吐量优先的应用：尽可能的设置大，可能到达Gbit的程度。因为对响应时间没有要求，垃圾收集可以并行进行，一般适合8CPU以上的应用。<br />
年老代大小选择<br />
响应时间优先的应用：年老代使用并发收集器，所以其大小需要小心设置，一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了，可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式；如果堆大了，则需要较长的收集时间。最优化的方案，一般需要参考以下数据获得：<br />
并发垃圾收集信息<br />
持久代并发收集次数<br />
传统GC信息<br />
花在年轻代和年老代回收上的时间比例<br />
减少年轻代和年老代花费的时间，一般会提高应用的效率<br />
吞吐量优先的应用：一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是，这样可以尽可能回收掉大部分短期对象，减少中期的对象，而年老代尽存放长期存活对象。<br />
较小堆引起的碎片问题<br />
因为年老代的并发收集器使用标记、清除算法，所以不会对堆进行压缩。当收集器回收时，他会把相邻的空间进行合并，这样可以分配给较大的对象。但是，当堆空间较小时，运行一段时间以后，就会出现“碎片”，如果并发收集器找不到足够的空间，那么并发收集器将会停止，然后使用传统的标记、清除方式进行回收。如果出现“碎片”，可能需要进行如下配置：<br />
-XX:+UseCMSCompactAtFullCollection：使用并发收集器时，开启对年老代的压缩。<br />
-XX:CMSFullGCsBeforeCompaction=0：上面配置开启的情况下，这里设置多少次Full GC后，对年老代进行压缩</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/26.html' rel='bookmark' title='Java日期操作常用方法'>Java日期操作常用方法</a></li>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
<li><a href='http://www.dbalife.com/archives/69.html' rel='bookmark' title='RHEL4U4下的JAVA环境变量配置'>RHEL4U4下的JAVA环境变量配置</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/385.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用SQL处理多行汇聚问题</title>
		<link>http://www.dbalife.com/archives/379.html</link>
		<comments>http://www.dbalife.com/archives/379.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 04:50:12 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[多行]]></category>
		<category><![CDATA[汇聚]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=379</guid>
		<description><![CDATA[表结构如下： NAME                            Null          Type ------------------------  ---------  ----- N_SEC_CODE                NOT NULL  CHAR(6) C_RESEARCHER_CODE  NOT NULL  VARCHAR2(20) 此表保存了“股票”与“研究员”的对应关系数据，一般而言，对于同一只股票而言，可能有多个研究员对其进行跟踪研究。所以目前遇到一个要求，需查询出每只股票和对应的研究员（研究员代码间，使用逗号分隔）。 例如有如下数据： 000297                            [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/41.html' rel='bookmark' title='sqlplus下如何看执行计划'>sqlplus下如何看执行计划</a></li>
<li><a href='http://www.dbalife.com/archives/6.html' rel='bookmark' title='Oracle分析函数参考手册'>Oracle分析函数参考手册</a></li>
<li><a href='http://www.dbalife.com/archives/39.html' rel='bookmark' title='Statistics Lock导致的IMP问题'>Statistics Lock导致的IMP问题</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>表结构如下：<br />
NAME                            Null          Type<br />
------------------------  ---------  -----<br />
N_SEC_CODE                NOT NULL  CHAR(6)<br />
C_RESEARCHER_CODE  NOT NULL  VARCHAR2(20)</p>
<p>此表保存了“股票”与“研究员”的对应关系数据，一般而言，对于同一只股票而言，可能有多个研究员对其进行跟踪研究。所以目前遇到一个要求，需查询出每只股票和对应的研究员（研究员代码间，使用逗号分隔）。</p>
<p>例如有如下数据：<br />
000297                                    chenpeng           <br />
000297                                    liusu             <br />
合并处理后需显示为：<br />
000297                                    chenpeng,liusu</p>
<p>多行数据汇总聚一行，只需要把SQL中“n_sec_code”换为你的用来汇总的列，“c_researcher_code”替换为需合并文本的列，“m_researcher_stock_rel”替换为你的表名</p>
<p> SELECT n_sec_code,<br />
  TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList<br />
   FROM<br />
  (SELECT ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code, lvl DESC) rn,<br />
    n_sec_code                                                                         ,<br />
    text<br />
     FROM<br />
    (SELECT n_sec_code,<br />
      LEVEL lvl       ,<br />
      SYS_CONNECT_BY_PATH (c_researcher_code,'/') text<br />
       FROM<br />
      (SELECT n_sec_code                      ,<br />
        c_researcher_code AS c_researcher_code,<br />
        ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,c_researcher_code) x<br />
         FROM m_researcher_stock_rel<br />
     ORDER BY n_sec_code,<br />
        c_researcher_code<br />
      ) a CONNECT BY n_sec_code = PRIOR n_sec_code<br />
    AND x - 1                   = PRIOR x<br />
    )<br />
  )<br />
  WHERE rn = 1<br />
ORDER BY n_sec_code;</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/41.html' rel='bookmark' title='sqlplus下如何看执行计划'>sqlplus下如何看执行计划</a></li>
<li><a href='http://www.dbalife.com/archives/6.html' rel='bookmark' title='Oracle分析函数参考手册'>Oracle分析函数参考手册</a></li>
<li><a href='http://www.dbalife.com/archives/39.html' rel='bookmark' title='Statistics Lock导致的IMP问题'>Statistics Lock导致的IMP问题</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/379.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql中的STRICT_TRANS_TABLES</title>
		<link>http://www.dbalife.com/archives/339.html</link>
		<comments>http://www.dbalife.com/archives/339.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 19:39:52 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[数据库管理]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[my.ini]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[STRICT_TRANS_TABLES]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=339</guid>
		<description><![CDATA[在调试php symfony，加载fixture数据时，遇到了错误： SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'log' for column 'tasklog_id' at row 1 这是因为mysql5.5中默认启用了STRICT_TRANS_TABLES参数。 STRICT_TRANS_TABLES的工作方式： 　　· 对于事务性存储引擎，在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。         · 对于非事务性存储引擎，如果错误出现在要插入或更新的第1行，将放弃语句。（在这种情况下，可以认为语句未改变表，就像事务表一样）。首行后出现的错误不会导致放弃语句。取而代之的是，将调整不良数据值，并给出告警，而不是错误。换句话讲，使用STRICT_TRANS_TABLES后，错误值会导致MySQL执行回滚操作，如果可以，所有更新到此为止。 　　要想执行更严格的检查，请启用STRICT_ALL_TABLES。除了非事务性存储引擎，它与STRICT_TRANS_TABLES等同，即使当不良数据出现在首行后的其他行，所产生的错误也会导致放弃语句。这意味着，如果错误出现在非事务性表多行插入或更新过程的中途，仅更新部分结果。前面的行将完成插入或更新，但错误出现点后面的行则不然。 因此，解决方法就是在my.ini里把STRICT_TRANS_TABLES关掉 ?View Code C#Set the SQL mode to strict #sql-mode=&#34;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&#34; sql-mode=&#34;NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&#34; No related posts.
No related posts.]]></description>
			<content:encoded><![CDATA[<p>在调试php symfony，加载fixture数据时，遇到了错误：</p>
<blockquote><p>SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'log' for column 'tasklog_id' at row 1</p></blockquote>
<p>这是因为mysql5.5中默认启用了<em>STRICT_TRANS_TABLES</em>参数。</p>
<p>STRICT_TRANS_TABLES的工作方式：<br />
　　· 对于事务性存储引擎，在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。<br />
        · 对于非事务性存储引擎，如果错误出现在要插入或更新的第1行，将放弃语句。（在这种情况下，可以认为语句未改变表，就像事务表一样）。首行后出现的错误不会导致放弃语句。取而代之的是，将调整不良数据值，并给出告警，而不是错误。换句话讲，使用STRICT_TRANS_TABLES后，错误值会导致MySQL执行回滚操作，如果可以，所有更新到此为止。</p>
<p>　　要想执行更严格的检查，请启用STRICT_ALL_TABLES。除了非事务性存储引擎，它与STRICT_TRANS_TABLES等同，即使当不良数据出现在首行后的其他行，所产生的错误也会导致放弃语句。这意味着，如果错误出现在非事务性表多行插入或更新过程的中途，仅更新部分结果。前面的行将完成插入或更新，但错误出现点后面的行则不然。</p>
<p>因此，解决方法就是在my.ini里把STRICT_TRANS_TABLES关掉</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p339code2'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3392"><td class="code" id="p339code2"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#Set the SQL mode to strict</span>
<span style="color: #339933;">#sql-mode=&quot;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot;</span>
sql<span style="color: #339933;">-</span>mode<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot;</span></pre></td></tr></table></div>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/339.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用插件解决wordpress引号问题</title>
		<link>http://www.dbalife.com/archives/275.html</link>
		<comments>http://www.dbalife.com/archives/275.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 17:31:32 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[quotmarks-replacer]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[引号]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=275</guid>
		<description><![CDATA[ Wordpress默认会将英文标点转换为中文全角标点，单纯写文字的话这是个不错的功能，但是如果文章中包含各种代码，尤其是单双引号，就惨不忍睹了…… Quotmarks Replacer 是一个通过禁用 wptexturize 函数，解决 WordPress 自动将半角的单引号、双引号和省略号转换为全角标点的问题。使后台输入的标点格式与前台读者浏览的标点格式保持一致的插件。 这里下载：http://wordpress.org/extend/plugins/quotmarks-replacer/ Related posts: 为Blog添加了Picasa相册插件
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/234.html' rel='bookmark' title='为Blog添加了Picasa相册插件'>为Blog添加了Picasa相册插件</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p> Wordpress默认会将英文标点转换为中文全角标点，单纯写文字的话这是个不错的功能，但是如果文章中包含各种代码，尤其是单双引号，就惨不忍睹了……</p>
<p>Quotmarks Replacer 是一个通过禁用 wptexturize 函数，解决 WordPress 自动将半角的单引号、双引号和省略号转换为全角标点的问题。使后台输入的标点格式与前台读者浏览的标点格式保持一致的插件。</p>
<p>这里下载：<a href="http://wordpress.org/extend/plugins/quotmarks-replacer/">http://wordpress.org/extend/plugins/quotmarks-replacer/</a></p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/234.html' rel='bookmark' title='为Blog添加了Picasa相册插件'>为Blog添加了Picasa相册插件</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/275.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Palm Mojo SDK keyboard &amp; mouse controls</title>
		<link>http://www.dbalife.com/archives/266.html</link>
		<comments>http://www.dbalife.com/archives/266.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 03:06:16 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[WebOS]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[mojo]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[palm]]></category>
		<category><![CDATA[pre]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=266</guid>
		<description><![CDATA[Palm Pre 采用的web OS系统的SDK（Mojo）已经发布，其中包含有web OS模拟器。Palm Pre的操作有多种形式，本文列出SDK中用键盘和鼠标操作模拟器的方法。 Mojo SDK keyboard &#38; mouse controls -------------------------------------------------------------------------------- Here's my Q&#38;D notes on emulator. Thanks to others for some info. --Keyboard Escape is Back Gesture, Home is Center Button, End is the Flick Up Gesture (like to bring up card view or the launcher), Left/Right arrows switch applications, Shift is [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/158.html' rel='bookmark' title='Ubuntu下同步palm'>Ubuntu下同步palm</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Palm Pre 采用的web OS系统的SDK（Mojo）已经发布，其中包含有web OS模拟器。Palm Pre的操作有多种形式，本文列出SDK中用键盘和鼠标操作模拟器的方法。</p>
<p>Mojo SDK keyboard &amp; mouse controls</p>
<p>--------------------------------------------------------------------------------</p>
<p>Here's my Q&amp;D notes on emulator. Thanks to others for some info.</p>
<p>--Keyboard<br />
Escape is Back Gesture,<br />
Home is Center Button,<br />
End is the Flick Up Gesture (like to bring up card view or the launcher),<br />
Left/Right arrows switch applications,<br />
Shift is Shift (duh!),<br />
Alt is Option (orange),<br />
Left Ctrl+letter does Sym for that letter,<br />
and of course there's the keyboard too.</p>
<p>--Mouse<br />
Left Mouse click is "touching screen".<br />
Left Mouse drag is "dragging on screen". Useful in card view to "swipe up" (close),and drag left right (card view, launcher, etc.).<br />
Left Mouse click and hold will select card in card view for shuffling cards, or changing out Quick Launch applications.<br />
Double left mouse click, is zoom in/out on selected paragraph in browser. Not same as two finger zoom?<br />
To bring up the Quick Launch "wave", drag up from the bottom of the screen. Note that this is hard to get to work, as one has to start in the exact bottom row of pixels.</p>
<p>--Emulator<br />
The "Host" key defaults to Right Ctrl, used for accessing emulator menus. Following is a short list:<br />
Tap and release Host key to return keyboard capture to PC (i.e. done using emulator). Note if using "Activation follows mouse (X-Mouse)", this is not required (see "Tweak UI", MS Power Toy, for info).<br />
Host+F Full screen toggle<br />
Host+N Session information dialog<br />
Host+S Take a snapshot (from emulator)<br />
Host+Q Close emulator</p>
<p>--Helper Batch Files, in "C:\Program Files\Palm\SDK\bin" (I've not tried, YMMV):</p>
<p>palm-emulator.bat - Starts emulator.<br />
palm-generate.bat - Create Application template. Will create directory if it doesn't exist.<br />
palm-inspector.bat - Runs Palm inspector. Appears to be the debugger interface.<br />
palm-install.bat - Installs App on USB connected Prē (usb), or emulator (tcp).<br />
palm-launch.bat - Launch App on USB connected Prē (usb), or emulator (tcp). With debugging options.<br />
palm-package.bat - Package App into ipk format.<br />
Open up "DOS" command shell to use. Installing SDK adds bin directory to your path.</p>
<p>Run batch file with no arguments to get usage.</p>
<p>--Mojo API</p>
<p>TBD<br />
See sample code in "C:\Program Files\Palm\SDK\share\samples" for now.</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/158.html' rel='bookmark' title='Ubuntu下同步palm'>Ubuntu下同步palm</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/266.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>putty for windows源码编译中的几个问题</title>
		<link>http://www.dbalife.com/archives/217.html</link>
		<comments>http://www.dbalife.com/archives/217.html#comments</comments>
		<pubDate>Wed, 18 Feb 2009 15:10:41 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=217</guid>
		<description><![CDATA[开发工具 可选VC或DEV-C++，putty提供了这2个工具的工程文件，非常方便。 编译过程中的错误 遇到windows.c中的FLASHWINFO结构为定义,在google中得知此结构的信息. 在windows.c文件开头加入如下信息: #define  FLASHW_STOP 0 #define  FLASHW_CAPTION 1 #define   FLASHW_TRAY 2 #define   FLASHW_ALL (FLASHW_CAPTION&#124;FLASHW_TRAY) #define   FLASHW_TIMER 4 #define   FLASHW_TIMERNOFG 12 typedef struct _FLASHWINFO { UINT  cbSize; HWND  hwnd; DWORD dwFlags; UINT  uCount; DWORD dwTimeout; } FLASHWINFO; 在winstore.c开头加入: #define SHGFP_TYPE_CURRENT 0 找不到htmlhelp.h 这个头文件没有加在源码包中，google一下下载个添加到工程里就ok No related posts.
No related posts.]]></description>
			<content:encoded><![CDATA[<p>开发工具</p>
<blockquote><p>可选VC或DEV-C++，putty提供了这2个工具的工程文件，非常方便。</p></blockquote>
<p>编译过程中的错误</p>
<p>遇到windows.c中的FLASHWINFO结构为定义,在google中得知此结构的信息.</p>
<p>在windows.c文件开头加入如下信息:</p>
<p>#define  FLASHW_STOP 0<br />
#define  FLASHW_CAPTION 1<br />
#define   FLASHW_TRAY 2<br />
#define   FLASHW_ALL (FLASHW_CAPTION|FLASHW_TRAY)<br />
#define   FLASHW_TIMER 4<br />
#define   FLASHW_TIMERNOFG 12</p>
<blockquote><p>typedef struct _FLASHWINFO {<br />
UINT  cbSize;<br />
HWND  hwnd;<br />
DWORD dwFlags;<br />
UINT  uCount;<br />
DWORD dwTimeout;<br />
} FLASHWINFO;</p></blockquote>
<p>在winstore.c开头加入:</p>
<blockquote><p>#define SHGFP_TYPE_CURRENT 0</p></blockquote>
<p>找不到htmlhelp.h</p>
<blockquote><p>这个头文件没有加在源码包中，google一下下载个添加到工程里就ok</p></blockquote>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/217.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>resin2升级为resin3后遇到的jsp显示问题</title>
		<link>http://www.dbalife.com/archives/189.html</link>
		<comments>http://www.dbalife.com/archives/189.html#comments</comments>
		<pubDate>Mon, 27 Oct 2008 09:36:22 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[jstl]]></category>
		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=189</guid>
		<description><![CDATA[将系统由resin 2.1.17升级为resin 3.0.25后，发现大部分JSP不能正常显示，错误都类似： Caused by: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${user.ID}": Unable to find a value for "ID" in object of class "java.lang.String" using operator "." (null) 这是resin3与jstl的问题，需要将resin自带的jstl1.1禁用。 方法如下 ： 将resin的conf文件中： &#60;servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet"/&#62; 修改为： &#60;servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet"&#62;     &#60;init enable="false"/&#62; &#60;/servlet&#62; 在resin的webapp配置中,添加一个&#60;jsp&#62;标签 &#60;web-app id="/test" document-directory="webapps/test"&#62;     &#60;jsp [...]
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/200.html' rel='bookmark' title='caucho-request的范围'>caucho-request的范围</a></li>
<li><a href='http://www.dbalife.com/archives/126.html' rel='bookmark' title='Apache2与Resin2整合虚拟主机的配置'>Apache2与Resin2整合虚拟主机的配置</a></li>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>将系统由resin 2.1.17升级为resin 3.0.25后，发现大部分JSP不能正常显示，错误都类似：</p>
<p>Caused by: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${user.ID}": Unable to find a value for "ID" in object of class "java.lang.String" using operator "." (null)</p>
<p>这是resin3与jstl的问题，需要将resin自带的jstl1.1禁用。</p>
<p>方法如下 ：<br />
将resin的conf文件中：<br />
&lt;servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet"/&gt;<br />
修改为：<br />
&lt;servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet"&gt;<br />
    &lt;init enable="false"/&gt;<br />
&lt;/servlet&gt;</p>
<p>在resin的webapp配置中,添加一个&lt;jsp&gt;标签<br />
&lt;web-app id="/test" document-directory="webapps/test"&gt;<br />
    &lt;jsp fast-jstl="false"/&gt;      <br />
&lt;/web-app&gt;</p>
<p>最后，将JSP文件中<br />
&lt;%@ taglib prefix=’c’ uri=’http://java.sun.com/jstl/core’ %&gt; <br />
修改为<br />
&lt;%@ taglib prefix=’c’ uri=’http://java.sun.com/jsp/jstl/core’ %&gt; </p>
<p>现在JSP可以正常显示了</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/200.html' rel='bookmark' title='caucho-request的范围'>caucho-request的范围</a></li>
<li><a href='http://www.dbalife.com/archives/126.html' rel='bookmark' title='Apache2与Resin2整合虚拟主机的配置'>Apache2与Resin2整合虚拟主机的配置</a></li>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/189.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu7.10解决JDK1.6中文乱码的问题</title>
		<link>http://www.dbalife.com/archives/84.html</link>
		<comments>http://www.dbalife.com/archives/84.html#comments</comments>
		<pubDate>Thu, 27 Mar 2008 10:48:30 +0000</pubDate>
		<dc:creator>skywalker</dc:creator>
				<category><![CDATA[操作系统]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[乱码]]></category>

		<guid isPermaLink="false">http://www.dbalife.com/?p=84</guid>
		<description><![CDATA[安装完jdk6u2我发现我的Java 应用程序的中文无法显示，呈现方块状。 原因是Java 应用程序无法找到可供显示中文的字体。 解决方法：http://cle.linux.org.tw/fonts/FireFly/fireflysung-1.3.0.tar.gz 下载 fireflysung 1.3.0，地址： 解压后将其中的 ttf 文件放到/usr/share/fonts/truetype中，再用 fc-cache -f -v 跑一遍，让系统知道这个字体。最后，就是转到 JDK 安装目录 ..../jre/lib/fonts sudo mkdir fallback cd fallback sudo ln -s /usr/share/fonts/truetype/fireflysung.ttf sudo mkfontdir sudo mkfontscale ------- --------我是无敌的分割线------------------- 以上为转载，需要注意的地方是：不一定要下载fireflysung字体，任何一个中文字体文件都可以 Related posts: ubuntu7.10 JDK手动安装 Ubuntu7.10 根分区扩容 Netscape Navigator 归来
Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
<li><a href='http://www.dbalife.com/archives/90.html' rel='bookmark' title='Ubuntu7.10 根分区扩容'>Ubuntu7.10 根分区扩容</a></li>
<li><a href='http://www.dbalife.com/archives/94.html' rel='bookmark' title='Netscape Navigator 归来'>Netscape Navigator 归来</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>安装完jdk6u2我发现我的Java 应用程序的中文无法显示，呈现方块状。<br />
原因是Java 应用程序无法找到可供显示中文的字体。<br />
解决方法：http://cle.linux.org.tw/fonts/FireFly/fireflysung-1.3.0.tar.gz<br />
下载 fireflysung 1.3.0，地址：<br />
解压后将其中的 ttf 文件放到/usr/share/fonts/truetype中，再用 fc-cache -f -v 跑一遍，让系统知道这个字体。最后，就是转到 JDK 安装目录 ..../jre/lib/fonts</p>
<p>sudo mkdir fallback<br />
cd fallback<br />
sudo ln -s /usr/share/fonts/truetype/fireflysung.ttf<br />
sudo mkfontdir<br />
sudo mkfontscale</p>
<p>------- --------我是无敌的分割线-------------------</p>
<p>以上为转载，需要注意的地方是：不一定要下载fireflysung字体，任何一个中文字体文件都可以</p>
<p>Related posts:<ol>
<li><a href='http://www.dbalife.com/archives/82.html' rel='bookmark' title='ubuntu7.10 JDK手动安装'>ubuntu7.10 JDK手动安装</a></li>
<li><a href='http://www.dbalife.com/archives/90.html' rel='bookmark' title='Ubuntu7.10 根分区扩容'>Ubuntu7.10 根分区扩容</a></li>
<li><a href='http://www.dbalife.com/archives/94.html' rel='bookmark' title='Netscape Navigator 归来'>Netscape Navigator 归来</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.dbalife.com/archives/84.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

