<?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>李新阳 &#124; lxy &#187; programing</title>
	<atom:link href="http://www.lixinyang.com/tag/programing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lixinyang.com</link>
	<description>留下我奔跑过的痕迹</description>
	<lastBuildDate>Sun, 05 Feb 2012 07:36:53 +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>Twitter Boostrap2.0发布</title>
		<link>http://www.lixinyang.com/2012/02/twitter-boostrap2/</link>
		<comments>http://www.lixinyang.com/2012/02/twitter-boostrap2/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 05:51:23 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=2573</guid>
		<description><![CDATA[作为一个程序员，一直为写出来的页面能用但丑陋而烦恼，直到发现了Twitter开源的Bootstrap。Bootstrap是一组css和js，让你可以做出来比较美观的导航、表单、按钮等，非常适合用来做后台和原型。 Bootstrap官网：http://twitter.github.com/bootstrap/ 2.0升级细节：http://twitter.github.com/bootstrap/upgrading.html 可是我第一个用bootstrap写的后台还没有上线，它就做了一次主版本升级，这更新速度也太给力了。 Bootsrap2.0相比于1.4变化很大，并不兼容，css/js的格式都有不少变化，很汗。但粗略看起来2.0似乎更加的规范和丰富。功能更全，样式也更美观，有空的时候升级到2.0吧，在发布前。 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p>作为一个程序员，一直为写出来的页面能用但丑陋而烦恼，直到发现了Twitter开源的Bootstrap。Bootstrap是一组css和js，让你可以做出来比较美观的导航、表单、按钮等，非常适合用来做后台和原型。</p>
<ul>
<li>Bootstrap官网：<a href="http://twitter.github.com/bootstrap/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.github.com/bootstrap/?referer=');">http://twitter.github.com/bootstrap/</a></li>
<li>2.0升级细节：<a href="http://twitter.github.com/bootstrap/upgrading.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.github.com/bootstrap/upgrading.html?referer=');">http://twitter.github.com/bootstrap/upgrading.html</a></li>
</ul>
<p>可是我第一个用bootstrap写的后台还没有上线，它就做了一次主版本升级，这更新速度也太给力了。</p>
<p>Bootsrap2.0相比于1.4变化很大，并不兼容，css/js的格式都有不少变化，很汗。但粗略看起来2.0似乎更加的规范和丰富。功能更全，样式也更美观，有空的时候升级到2.0吧，在发布前。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2012/02/twitter-boostrap2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在SAE运行CodeIgniter</title>
		<link>http://www.lixinyang.com/2011/05/codeigniter-sae/</link>
		<comments>http://www.lixinyang.com/2011/05/codeigniter-sae/#comments</comments>
		<pubDate>Thu, 19 May 2011 01:32:56 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[sae]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=2012</guid>
		<description><![CDATA[昨天试用了phpfog，今天想起来SAE是一个国内的选择哦，就试用了一下。把CodeIgniter放到SAE下运行的过程记录一下。总的来讲：原始版CodeIgniter在SAE运行需要被阉割。但可以到网上找正式的SAE移植版，会work的更好（感谢@文峰186 提醒）。在普通服务器运行的程序很难直接在SAE运行，反之亦然。准备使用SAE的要想好这一点！ 样例见：http://weixiao.sinaapp.com/ci/ CodeIgniter 版本为2.0.2。写的是只有一个controller、一个view、不使用DB的最简单的app，在做了如下“裁剪”后就可以在新浪的SAE环境下运行了。 &#8211; function set_magic_quotes_runtime() is forbidden for SAE security @ line 67, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/core/CodeIgniter.php        注释掉，反正SAE就是php5.3    &#8212; function flock() is forbidden for SAE security @ line 425, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/core/Output.php        注释掉，不就是cache嘛，而且不上锁也不会死人吧？    &#8212; &#8230; <a href="http://www.lixinyang.com/2011/05/codeigniter-sae/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="CodeIgniter, CakePHP and phpfog" href="http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/">昨天试用了phpfog</a>，今天想起来<a title="Sina App Engine" href="http://sae.sina.com.cn/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/sae.sina.com.cn/?referer=');">SAE</a>是一个国内的选择哦，就试用了一下。把CodeIgniter放到SAE下运行的过程记录一下。总的来讲：原始版CodeIgniter在SAE运行需要被阉割。但可以到网上找正式的SAE移植版，会work的更好（感谢<a href="http://weibo.com/anuan" onclick="pageTracker._trackPageview('/outgoing/weibo.com/anuan?referer=');">@文峰186</a> 提醒）。<span style="color: #ff6600;"><strong>在普通服务器运行的程序很难直接在SAE运行，反之亦然。准备使用SAE的要想好这一点！</strong></span></p>
<p><span style="color: #ff6600;"><strong></strong></span>样例见：<a href="http://weixiao.sinaapp.com/ci/" onclick="pageTracker._trackPageview('/outgoing/weixiao.sinaapp.com/ci/?referer=');">http://weixiao.sinaapp.com/ci/</a></p>
<p>CodeIgniter 版本为2.0.2。写的是只有一个controller、一个view、不使用DB的最简单的app，在做了如下“裁剪”后就可以在新浪的SAE环境下运行了。</p>
<blockquote><p>&#8211; function set_magic_quotes_runtime() is forbidden for SAE security @ line 67, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/core/CodeIgniter.php        注释掉，反正SAE就是php5.3    &#8212; function flock() is forbidden for SAE security @ line 425, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/core/Output.php        注释掉，不就是cache嘛，而且不上锁也不会死人吧？    &#8212; function flock() is forbidden for SAE security @ line 58, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/helpers/file_helper.php        注释掉，不上锁不会死人    &#8212; function mysql_pconnect() is forbidden for SAE security @ line 88, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/database/drivers/mysql/mysql_driver.php        删除文件。。。不用它的数据库连接    &#8212; function mail() is forbidden for SAE security @ line 56, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/helpers/email_helper.php        删除文件。。。不发邮件    &#8212; function apc_delete() is forbidden for SAE security @ line 72, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Cache/drivers/Cache_apc.php        删除文件。。。不用apc cache。。。    &#8212; function mail() is forbidden for SAE security @ line 1526, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Email.php        删除文件。。。不发邮件    &#8212; function exec() is forbidden for SAE security @ line 603, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Image_lib.php        删除文件。。。不处理图片    &#8212; function flock() is forbidden for SAE security @ line 101, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Log.php        注释掉。。。不上锁死不了人    &#8212; function fsockopen() is forbidden for SAE security @ line 236, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Trackback.php        删除文件。。。不用这个lib    &#8212; function fsockopen() is forbidden for SAE security @ line 386, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Xmlrpc.php        删除文件。。。不用xmlrpc    &#8212; function flock() is forbidden for SAE security @ line 365, E:\SDKs\SAE_SDK\apps\/weixiao/1/code/ci/system/libraries/Zip.php        注释掉。。。不锁文件死不了人</p></blockquote>
<p>&#8212;-</p>
<p>2011/5/20 update：加入<a href="http://weibo.com/anuan" onclick="pageTracker._trackPageview('/outgoing/weibo.com/anuan?referer=');">@文峰186</a> 的提醒</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/05/debian-php-command-not-found/" title="debian, php: command not found (May 20, 2010)">debian, php: command not found</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/" title="CodeIgniter, CakePHP and phpfog (May 18, 2011)">CodeIgniter, CakePHP and phpfog</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/05/codeigniter-sae/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CodeIgniter, CakePHP and phpfog</title>
		<link>http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/</link>
		<comments>http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/#comments</comments>
		<pubDate>Wed, 18 May 2011 05:31:19 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=2007</guid>
		<description><![CDATA[CodeIgniter、CakePHP都是使用非常广泛的PHP Web框架。都非常优秀，相信任何一个框架都是能满足需求。只是某个应用场景下哪个框架更好，哪个框架更适合的问题。 CakePHP文档很好，但CodeIgniter文档更好。 CodeIgniter更简单、核心框架更小。这是双刃剑，好处是运行性能更高、更灵活，坏处是不像CakePHP那么多现成的东西可以拆箱即用。 由于上面两点，CodeIgniter上手更容易，如果你熟悉php、对MVC有了解，那我打赌你可以在两个小时内上手。CakePHP则不行，需要理解的东西比较多。 对于我来讲，php初级水平、主要为兴趣而学习、无特定目的，CodeIgniter更合适。 phpFog是HeroKu模式在php下的克隆，使用非常顺手，10分钟之内就搭起来一个测试站点，域名也配置好了。http://phpfog.lixy.us/，而且访问速度还挺快的，http访问、git访问都不错。再次表达对美国IT环境的羡慕。 Related posts 在SAE运行CodeIgniter (3) debian, php: command not found (0) 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0)]]></description>
			<content:encoded><![CDATA[<p><a href="http://codeigniter.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/codeigniter.com/?referer=');">CodeIgniter</a>、<a href="http://cakephp.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">CakePHP</a>都是使用非常广泛的PHP Web框架。都非常优秀，相信任何一个框架都是能满足需求。只是某个应用场景下哪个框架更好，哪个框架更适合的问题。</p>
<ul>
<li>CakePHP文档很好，但CodeIgniter文档更好。</li>
<li>CodeIgniter更简单、核心框架更小。这是双刃剑，好处是运行性能更高、更灵活，坏处是不像CakePHP那么多现成的东西可以拆箱即用。</li>
<li>由于上面两点，CodeIgniter上手更容易，如果你熟悉php、对MVC有了解，那我打赌你可以在两个小时内上手。CakePHP则不行，需要理解的东西比较多。</li>
</ul>
<p>对于我来讲，php初级水平、主要为兴趣而学习、无特定目的，CodeIgniter更合适。</p>
<p><a href="https://phpfog.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/phpfog.com/?referer=');">phpFog</a>是HeroKu模式在php下的克隆，使用非常顺手，10分钟之内就搭起来一个测试站点，域名也配置好了。<a href="http://phpfog.lixy.us/" onclick="pageTracker._trackPageview('/outgoing/phpfog.lixy.us/?referer=');">http://phpfog.lixy.us/</a>，而且访问速度还挺快的，http访问、git访问都不错。再次表达对美国IT环境的羡慕。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2011/05/codeigniter-sae/" title="在SAE运行CodeIgniter (May 19, 2011)">在SAE运行CodeIgniter</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/05/debian-php-command-not-found/" title="debian, php: command not found (May 20, 2010)">debian, php: command not found</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse下设置github开发环境</title>
		<link>http://www.lixinyang.com/2011/05/windows-eclipse-github/</link>
		<comments>http://www.lixinyang.com/2011/05/windows-eclipse-github/#comments</comments>
		<pubDate>Tue, 17 May 2011 05:16:07 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=2003</guid>
		<description><![CDATA[在Windows下的Eclipse里使用github配置过程记录如下。 第一，按照github上的指南配置（http://help.github.com/win-set-up-git/）基础的git环境。（留意ssh的pub key等保存到哪里了） 第二，在github上创建一个Repository。 第三，在Eclipse的help菜单里找“Eclipse Marketplaces”，在Market Places里面找egit，安装。 第四，（特别重要）把第一步生成的.ssh目录copy到用户目录下并重命名为ssh，例如我的copy后的目录是C:\user\lxy\ssh\ 第五，Eclipse里File菜单，Import，即可从git导入刚添加到git的项目了。 第六，修改，并提交。在项目上点右键&#8211;&#62;team&#8211;&#62;commit。commit是commit到本机的git库，而push才是同步到github。 &#160; Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p>在Windows下的Eclipse里使用github配置过程记录如下。</p>
<p>第一，按照github上的指南配置（<a href="http://help.github.com/win-set-up-git/" onclick="pageTracker._trackPageview('/outgoing/help.github.com/win-set-up-git/?referer=');">http://help.github.com/win-set-up-git/</a>）<a href="http://help.github.com/win-set-up-git/" onclick="pageTracker._trackPageview('/outgoing/help.github.com/win-set-up-git/?referer=');"></a>基础的git环境。（留意ssh的pub key等保存到哪里了）</p>
<p>第二，在github上创建一个Repository。</p>
<p>第三，在Eclipse的help菜单里找“Eclipse Marketplaces”，在Market Places里面找egit，安装。</p>
<p>第四，（<span style="color: #ff0000;">特别重要</span>）把第一步生成的.ssh目录copy到用户目录下并重命名为ssh，例如我的copy后的目录是C:\user\lxy\ssh\</p>
<p>第五，Eclipse里File菜单，Import，即可从git导入刚添加到git的项目了。</p>
<p>第六，修改，并提交。在项目上点右键&#8211;&gt;team&#8211;&gt;commit。commit是commit到本机的git库，而push才是同步到github。</p>
<p>&nbsp;</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/05/windows-eclipse-github/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Android学习笔记2：获取手机系统信息</title>
		<link>http://www.lixinyang.com/2011/05/android-xitong-xinxi/</link>
		<comments>http://www.lixinyang.com/2011/05/android-xitong-xinxi/#comments</comments>
		<pubDate>Sun, 08 May 2011 00:59:49 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Android学习笔记]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1929</guid>
		<description><![CDATA[Android程序中如果需要获得手机网络信息、系统软件版本、sim卡信息、手机串号等系统信息，可以沿下面路径寻找：（假定在Activity内调用） (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); (WifiManager)this.getSystemService(Context.WIFI_SERVICE) 即，查看Context里面都定义了哪些系统SERVICE，然后用getSystemService()将他们获取到，进而获取相关信息。上面两个分别是获得手机网络、wifi网络的Manager。 Related posts Android学习笔记1：如何将第三方jar文件打入apk文件？ (2) App Inventor试用 (0) 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0)]]></description>
			<content:encoded><![CDATA[<p>Android程序中如果需要获得手机网络信息、系统软件版本、sim卡信息、手机串号等系统信息，可以沿下面路径寻找：（假定在Activity内调用）</p>
<p>(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);</p>
<p>(WifiManager)this.getSystemService(Context.WIFI_SERVICE)</p>
<p>即，查看Context里面都定义了哪些系统SERVICE，然后用getSystemService()将他们获取到，进而获取相关信息。上面两个分别是获得手机网络、wifi网络的Manager。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2011/05/android-jar-apk/" title="Android学习笔记1：如何将第三方jar文件打入apk文件？ (May 8, 2011)">Android学习笔记1：如何将第三方jar文件打入apk文件？</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/09/app-inventor/" title="App Inventor试用 (September 28, 2010)">App Inventor试用</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/05/android-xitong-xinxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android学习笔记1：如何将第三方jar文件打入apk文件？</title>
		<link>http://www.lixinyang.com/2011/05/android-jar-apk/</link>
		<comments>http://www.lixinyang.com/2011/05/android-jar-apk/#comments</comments>
		<pubDate>Sun, 08 May 2011 00:48:04 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Android学习笔记]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1924</guid>
		<description><![CDATA[如果Android程序中使用了非系统提供的lib，那么就需要将对应的第三方Jar文件打包入apk包里，否则程序运行出错。 在Eclipse打包第三方jar入apk包的方法是，以下面方式引用jar文件： Properties -&#62; Java Build Path -&#62; Libraries -&#62; Add External JARs Related posts Android学习笔记2：获取手机系统信息 (0) App Inventor试用 (0) 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0)]]></description>
			<content:encoded><![CDATA[<p>如果Android程序中使用了非系统提供的lib，那么就需要将对应的第三方Jar文件打包入apk包里，否则程序运行出错。</p>
<p>在Eclipse打包第三方jar入apk包的方法是，以下面方式引用jar文件：</p>
<p>Properties -&gt; Java Build Path -&gt; Libraries -&gt; Add External JARs</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2011/05/android-xitong-xinxi/" title="Android学习笔记2：获取手机系统信息 (May 8, 2011)">Android学习笔记2：获取手机系统信息</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/app-inventor/" title="App Inventor试用 (September 28, 2010)">App Inventor试用</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/05/android-jar-apk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redis Presharding</title>
		<link>http://www.lixinyang.com/2011/02/redis-presharding/</link>
		<comments>http://www.lixinyang.com/2011/02/redis-presharding/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 10:08:09 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1810</guid>
		<description><![CDATA[Redis Presharding这篇文章让我倍感新奇。 不在于redis的集群解决方案，因为用redis的人很少，需要redis集群的人更少。 让我感兴趣的是下面两点： 1、作者结合实际情况（每个redis instance只要不到1M的内存），给出了超出常规的解决方案（不是随着规模逐渐增加redis instance，然后解决sharding/resharding的问题。而是从一开始就搞128个instance，服务器硬件增加后迁移instance）。 &#8211; 这样的独立思考和创见是最值得崇拜的，不要墨守成规。大胆假设，小心求证嘛。 2、攻克核心之后，你依然会有很多事情要做。 上面的presharding方案足够简单了。但作者在文章后半段依然指出并探讨了“两个key分在两个instance时查询难以处理”、“容错”等问题。 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p><a href="http://antirez.com/post/redis-presharding.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/antirez.com/post/redis-presharding.html?referer=');">Redis Presharding</a>这篇文章让我倍感新奇。<br />
不在于redis的集群解决方案，因为用redis的人很少，需要redis集群的人更少。</p>
<p>让我感兴趣的是下面两点：</p>
<p>1、作者结合实际情况（每个redis instance只要不到1M的内存），给出了超出常规的解决方案（不是随着规模逐渐增加redis instance，然后解决sharding/resharding的问题。而是从一开始就搞128个instance，服务器硬件增加后迁移instance）。<br />
&#8211; 这样的独立思考和创见是最值得崇拜的，不要墨守成规。大胆假设，小心求证嘛。</p>
<p>2、攻克核心之后，你依然会有很多事情要做。<br />
上面的presharding方案足够简单了。但作者在文章后半段依然指出并探讨了“两个key分在两个instance时查询难以处理”、“容错”等问题。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2011/02/redis-presharding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>不同语言程序员的工作心情</title>
		<link>http://www.lixinyang.com/2010/12/yuyan-fuck/</link>
		<comments>http://www.lixinyang.com/2010/12/yuyan-fuck/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 07:36:48 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[八卦八卦]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1638</guid>
		<description><![CDATA[在cnbeta上看到一个有趣的统计：不同语言的源程序中出现fuck的比例 在Google Code上，针对每个程序语言都搜索了一下“fxxk”一词的出现文件的个数X，以及没有出现fuck一词的文件的个数Y，然後放在Excel里求了一下百分比（X/(X+Y) * 100%），做了一个图。结果，JavaScript语言中出现的次数高达0.56%，名列全部语言之首 对於Javascript程序员的这种行为可以理解，因为IE，因为浏览器嘛，我就不多说了 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p>在cnbeta上看到一个有趣的统计：<a href="http://www.cnbeta.com/articles/128939.htm" onclick="pageTracker._trackPageview('/outgoing/www.cnbeta.com/articles/128939.htm?referer=');">不同语言的源程序中出现fuck的比例</a></p>
<blockquote><p>在Google Code上，针对每个程序语言都搜索了一下“fxxk”一词的出现文件的个数X，以及没有出现fuck一词的文件的个数Y，然後放在Excel里求了一下百分比（X/(X+Y) * 100%），做了一个图。结果，JavaScript语言中出现的次数高达0.56%，名列全部语言之首</p></blockquote>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/12/0710240531949532.jpg"><img class="alignnone size-full wp-image-1640" title="0710240531949532" src="http://www.lixinyang.com/wp-content/uploads/2010/12/0710240531949532.jpg" alt="" width="543" height="303" /></a></p>
<blockquote><p>对於Javascript程序员的这种行为可以理解，因为IE，因为浏览器嘛，我就不多说了</p></blockquote>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/12/yuyan-fuck/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>转载：Foursquare 长达 11 小时的宕机</title>
		<link>http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/</link>
		<comments>http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 11:36:08 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1382</guid>
		<description><![CDATA[转自DBA Notes：Foursquare 长达 11 小时的宕机 “在容量的临界点增加新系统资源，必然导致更多的停机时间” &#8212; 不要对系统冗余太乐观。 “类似 MongoDB 这样的新事物。。。仅仅能够使用是不够的，系统没出问题一切都好，一旦出了异常。。。” &#8212; 我倒不那么保守，因为不会有“一起都准备好”的时候出现。所以只要想清楚了最坏的情况是什么，做好了预案就上吧！ 前几天 Foursquare 经历了长达 11 个小时的宕机，没错，11 个小时。网站官方的解释是 Shard 负载不均匀造成后续的连锁反应。很多人都知道 Foursquare 在线的 DB 是 MongoDB，今天又看到 10gen (MongoDB的开发与支持团队)的 Eliot Horowitz 在得到 Foursquare 许可后，通过邮件组详细介绍了宕机的过程：Foursquare outage post mortem，不用说，也有为 MongoDB 辟谣的意味在里面。 读罢 10gen 团队的介绍（或者说解释）之后，发现这是一个很好的研究样本。值得分享。 为了提高响应速度，Foursquare 使用 MongoDB &#8230; <a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>转自DBA Notes：<strong><a rel="bookmark" href="http://www.dbanotes.net/arch/foursquare_outage.html" onclick="pageTracker._trackPageview('/outgoing/www.dbanotes.net/arch/foursquare_outage.html?referer=');">Foursquare 长达 11 小时的宕机</a></strong></p>
<blockquote><p>“在容量的临界点增加新系统资源，必然导致更多的停机时间” &#8212; <strong>不要对系统冗余太乐观</strong>。</p>
<p>“类似 MongoDB 这样的新事物。。。仅仅能够使用是不够的，系统没出问题一切都好，一旦出了异常。。。” &#8212; <strong>我倒不那么保守，因为不会有“一起都准备好”的时候出现。所以只要想清楚了最坏的情况是什么，做好了预案就上吧！</strong></p></blockquote>
<p>前几天 <a href="http://foursquare.com/" onclick="pageTracker._trackPageview('/outgoing/foursquare.com/?referer=');">Foursquare</a> 经历了长达 11 个小时的宕机，没错，11 个小时。网站官方的<a href="http://blog.foursquare.com/2010/10/05/so-that-was-a-bummer/" onclick="pageTracker._trackPageview('/outgoing/blog.foursquare.com/2010/10/05/so-that-was-a-bummer/?referer=');">解释</a>是 Shard 负载不均匀造成后续的连锁反应。很多人都知道 Foursquare 在线的 <acronym title="Database">DB</acronym> 是 <a href="http://www.mongodb.org/" onclick="pageTracker._trackPageview('/outgoing/www.mongodb.org/?referer=');">MongoDB</a>，今天又看到 <a href="http://www.10gen.com/" onclick="pageTracker._trackPageview('/outgoing/www.10gen.com/?referer=');">10gen</a> (MongoDB的开发与支持团队)的 Eliot Horowitz 在得到 Foursquare 许可后，通过邮件组详细介绍了宕机的过程：<a href="http://groups.google.com/group/mongodb-user/browse_thread/thread/528a94f287e9d77e#" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/mongodb-user/browse_thread/thread/528a94f287e9d77e?referer=');">Foursquare outage post mortem</a>，不用说，也有为 MongoDB 辟谣的意味在里面。</p>
<p>读罢 10gen 团队的介绍（或者说解释）之后，发现这是一个很好的研究样本。值得分享。</p>
<p>为了提高响应速度，Foursquare 使用 MongoDB 存储 Check-in 的数据已经有一段时间了。这部分数据的数据库起初跑在一个 66GB 内存的 Amazon EC2 单实例上（全部在内存里），两个月前，出于对容量增长的考虑，迁移到两台 Shard 集群上。每个 Shard 机器都是 66GB 内存，为了冗余，每个 Shard 都有复制到 Slave 实例。迁移的目标是所有的 Check-in 数据都保存在内存中。数据根据 ID 分成 200 个 Shard 分片，两台机器各占一般，也就说联机数据在每台机器上各使用 33GB 的内存。两个月相安无事。</p>
<p>问题来了，因为 Shard 算法导致的数据分散不均衡，其中一台(Shard0)数据增长到 67GB(另外一台 50GB)，超过了 66GB 的限制，读写部分分散到磁盘上，性能急剧下降。从而，网站宕机。</p>
<p>首先尝试增加第三台 Shard 机器，上线后开始迁移，读取从三台进行，Shard0 的数据迁移到 5% 的时候，但是写操作还是让 Shard0 宕机了。这个时候发现Shard0 存在数据碎片(data fragmentation)，即使数据迁移走，还是会占用原来的内存。每个Check-in 文档大约占用 300 字节，而 MongoDB 是 4KB 的页(Page)，也就说十几个文档会填满一个页，而迁移 5% 反而造成了页更加稀疏，并不是将页全部删除。</p>
<p>这个时候已经到了第二天，随着网站全面宕机，技术团队开始用 MongoDB 的 repairDatabase() 功能来对数据库进行压缩，因为数据库太大和 EBS 慢，也因为 repairDatabase() 不能充分利用多核CPU 的能力，这个过程耗费了 4 个小时。之后这 5% 的内存空间终于释放出来，系统重新上线。</p>
<p>随着 Shard0 修复，第三台成功上线，进而添加了更多的 Shard 服务器，现在数据已经更加的均衡，通过在Slave上运行 repairDatabase()，然后将其切换到 Master ，每台 Shard 内存占用缩减到 20GB左右。整个故障时间已经延续了 11 小时之多。</p>
<p>产生问题的主要原因就是系统过载，前面介绍每台 Shard 承载原来 50% 的压力，到了问题发生的时候，单台 Shard 的负载已经超过 Shard 之前的系统负载，这时候已经积重难返了，在容量的临界点增加新系统资源，必然导致更多的停机时间。暴露了 Foursquare 团队在<strong>容量规划</strong>方面的不足之处，或许也因为业务增长太快了吧。另外，内存碎片化的问题在没有宕机之前，技术团队应该没考虑过这个问题，如果文档的大小超过 4K，碎片化问题就不严重了，这是特定应用场景造成的特定问题。10Gen 现在已经着手研究如何进在线压缩(online compaction)。再次，Shard 键值的顺序和插入顺序是不同的，这造成了迁移数据的时候 Chunk 的迁移不是连续的。</p>
<p>这个过程给我们的启示是：最近 NoSQL 已经成为一个热词，类似 MongoDB 这样的新事物当然值得尝试，但是不能冒进，因为驾驭起来并非易事。仅仅能够使用是不够的，系统没出问题一切都好，一旦出了异常，有足够的技术力量(设想一下 Foursquare 得不到 10gen 团队的支持会如何?) 支持么？<strong>在极端情况下如何控制？</strong> 如果回答不了这个问题，那么还应该暂缓。最好的办法就是&#8230;&#8221;等待&#8221;。</p>
<p>给我的另一个感慨是 Amazon 在云计算领域已经真的成为一个赢家，而且越来越得到 Web 2.0 Startup的信赖。前面说的 66GB 内存，应该指的是EC2 的 &#8220;High-Memory Double Extra Large Instance&#8221;，可提供的最大内存是 68.4 <acronym title="Gigabyte">GB</acronym> 。CPU 和内存能力都是可以接受的，存储方面的性能似乎还有点不足，也就是其中的 EBS ，指的是 Amazon Elastic Block storage。</p>
<p>&#8211;<acronym title="End of File">EOF</acronym>&#8211;</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App Inventor试用</title>
		<link>http://www.lixinyang.com/2010/09/app-inventor/</link>
		<comments>http://www.lixinyang.com/2010/09/app-inventor/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 01:27:44 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1262</guid>
		<description><![CDATA[Google App Inventor是Google提供给的一套Android开发环境，两大特点： 基于网页（Java的） 可视化编程 我申请了一个帐号，前些日子获批了，利用中秋时间体验了一下。可视化编程，非常简单！不需要任何编程基础，不需要写代码，只要按照教程做就能做出简单的Android程序了。我已经完成一个，并在手机里跑了起来，实现发短信查话费功能。 希望能有更强大的Android IDE出现，这样我这个不会写界面的程序员也能做做客户端开发了。 Related posts 支持OpenID的网站 (0) 推荐wurfl机型库 (0) OpenID的替代者 (2) Hadoop笔记 (0) App Inventor体验全纪录 (0)]]></description>
			<content:encoded><![CDATA[<p><a href="http://appinventor.googlelabs.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/appinventor.googlelabs.com/?referer=');">Google App Inventor</a>是Google提供给的一套Android开发环境，两大特点：</p>
<ul>
<li>基于网页（Java的）</li>
<li>可视化编程</li>
</ul>
<p>我申请了一个帐号，前些日子获批了，利用中秋时间体验了一下。可视化编程，非常简单！不需要任何编程基础，不需要写代码，只要按照教程做就能做出简单的Android程序了。我已经完成一个，并在手机里跑了起来，实现发短信查话费功能。</p>
<p>希望能有更强大的Android IDE出现，这样我这个不会写界面的程序员也能做做客户端开发了。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/openid-tidaizhe/" title="OpenID的替代者 (September 14, 2010)">OpenID的替代者</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/06/hadoop-biji/" title="Hadoop笔记 (June 19, 2010)">Hadoop笔记</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/10/app-inventor%e4%bd%93%e9%aa%8c%e5%85%a8%e7%ba%aa%e5%bd%95/" title="App Inventor体验全纪录 (October 2, 2010)">App Inventor体验全纪录</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/09/app-inventor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>腾讯社区开放平台</title>
		<link>http://www.lixinyang.com/2010/09/qq-opensns/</link>
		<comments>http://www.lixinyang.com/2010/09/qq-opensns/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 02:52:06 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[业界故事]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[qq]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1225</guid>
		<description><![CDATA[最近腾讯一做什么大家就骂，我认为这很不公平。人家花了那么多钱，那么多人，做出来不错的产品，有什么不对呢？ 今天看到腾讯社区开放平台上线，特地试玩儿一下。目前开放了三个主要功能： “分享” “喜欢” 应用接入 后两个都需要审查、审批，我已经申请了“喜欢组件”，等待中。“分享”的效果是这样的： 对应的html代码是： &#60;a href=&#8221;javascript:void(0);&#8221; onclick=&#8221;window.open(&#8216;http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=&#8217;+encodeURIComponent(document.location.href));return false;&#8221; title=&#8221;分享到QQ空间&#8221;&#62;&#60;img src=&#8221;http://qzonestyle.gtimg.cn/ac/qzone_v5/app/app_share/btn_share.png&#8221; alt=&#8221;分享到QQ空间&#8221; /&#62;&#60;/a&#62; &#60;a href=&#8221;javascript:void(0);&#8221; onclick=&#8221;window.open(&#8216;http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?to=pengyou&#38;url=&#8217;+encodeURIComponent(document.location.href));return false;&#8221; title=&#8221;分享到朋友社区&#8221;&#62;&#60;img src=&#8221;http://qzonestyle.gtimg.cn/ac/qzone_v5/app/qzshare/to-py.png&#8221; alt=&#8221;分享到朋友社区&#8221; /&#62;&#60;/a&#62; BTW：“腾讯社区开放平台”这个名字也太拗口了些 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) &#8230; <a href="http://www.lixinyang.com/2010/09/qq-opensns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近腾讯一做什么大家就骂，我认为这很不公平。人家花了那么多钱，那么多人，做出来不错的产品，有什么不对呢？</p>
<p>今天看到<a href="http://opensns.qq.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/opensns.qq.com/?referer=');">腾讯社区开放平台</a>上线，特地试玩儿一下。目前开放了三个主要功能：</p>
<ul>
<li>“分享”</li>
<li>“喜欢”</li>
<li>应用接入</li>
</ul>
<p>后两个都需要审查、审批，我已经申请了“喜欢组件”，等待中。“分享”的效果是这样的：<a title="分享到QQ空间" onclick="window.open('http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+encodeURIComponent(document.location.href));return false;" href="javascript:void(0);"><img src="http://qzonestyle.gtimg.cn/ac/qzone_v5/app/app_share/btn_share.png" alt="分享到QQ空间" /></a><a title="分享到朋友社区" onclick="window.open('http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?to=pengyou&amp;url='+encodeURIComponent(document.location.href));return false;" href="javascript:void(0);"><img src="http://qzonestyle.gtimg.cn/ac/qzone_v5/app/qzshare/to-py.png" alt="分享到朋友社区" /></a></p>
<p>对应的html代码是：</p>
<blockquote><p>&lt;a href=&#8221;javascript:void(0);&#8221; onclick=&#8221;window.open(&#8216;http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=&#8217;+encodeURIComponent(document.location.href));return false;&#8221; title=&#8221;分享到QQ空间&#8221;&gt;&lt;img src=&#8221;http://qzonestyle.gtimg.cn/ac/qzone_v5/app/app_share/btn_share.png&#8221; alt=&#8221;分享到QQ空间&#8221; /&gt;&lt;/a&gt;</p>
<p>&lt;a href=&#8221;javascript:void(0);&#8221; onclick=&#8221;window.open(&#8216;http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?to=pengyou&amp;url=&#8217;+encodeURIComponent(document.location.href));return false;&#8221; title=&#8221;分享到朋友社区&#8221;&gt;&lt;img src=&#8221;http://qzonestyle.gtimg.cn/ac/qzone_v5/app/qzshare/to-py.png&#8221; alt=&#8221;分享到朋友社区&#8221; /&gt;&lt;/a&gt;</p></blockquote>
<p>BTW：“腾讯社区开放平台”这个名字也太拗口了些</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/10/tengxun-da-jiangtang-ppt/" title="腾讯大讲堂PPT (October 14, 2010)">腾讯大讲堂PPT</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/09/qq-opensns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID的替代者</title>
		<link>http://www.lixinyang.com/2010/09/openid-tidaizhe/</link>
		<comments>http://www.lixinyang.com/2010/09/openid-tidaizhe/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 14:36:06 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=863</guid>
		<description><![CDATA[前一段写了几篇关于OpenID的调研，结论是OpenID works，但是OpenID用户体验不好。那么有没有用户体验上可以接受的替代者呢？ 我看下面这些私有的connect们就挺合适的： http://www.google.com/friendconnect facebook connect 人人connect 下图是京东商城的登录页面截屏，挺好的，我尝试了QQ过程很顺畅嘛。（京东是通过QQ返利接入QQ号的） Related posts 支持OpenID的网站 (0) 那些不存在的网站 (3) 推荐wurfl机型库 (0) 如何安装Thrift (3) OpenID原理和登录过程 (3)]]></description>
			<content:encoded><![CDATA[<p>前一段写了几篇关于<a href="http://www.lixinyang.com/tag/openid/" target="_blank">OpenID</a>的调研，结论是OpenID works，但是<a href="http://www.lixinyang.com/2010/07/04/openid-yonghu-tiyan/">OpenID用户体验</a>不好。那么有没有用户体验上可以接受的替代者呢？</p>
<p>我看下面这些私有的connect们就挺合适的：</p>
<ul>
<li>http://www.google.com/friendconnect</li>
<li>facebook connect</li>
<li><a href="http://dev.xiaonei.com/wiki/%E4%BA%BA%E4%BA%BAConnect" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dev.xiaonei.com/wiki/_E4_BA_BA_E4_BA_BAConnect?referer=');">人人connect</a></li>
</ul>
<p>下图是<a title="京东商城" href="http://www.360buy.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.360buy.com?referer=');">京东商城</a>的登录页面截屏，挺好的，我尝试了QQ过程很顺畅嘛。（京东是通过<a href="http://fanli.qq.com/mall/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/fanli.qq.com/mall/?referer=');">QQ返利</a>接入QQ号的）</p>
<div id="attachment_1206" class="wp-caption alignnone" style="width: 357px"><a rel="attachment wp-att-1206" href="http://www.lixinyang.com/2010/09/14/openid-tidaizhe/360buy-login/"><img class="size-full wp-image-1206" title="京东商城登陆页" src="http://www.lixinyang.com/wp-content/uploads/2010/09/360buy-login.jpg" alt="360buy" width="347" height="59" /></a><p class="wp-caption-text">京东商城登陆页</p></div>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/bucunzai-de-wangzhan/" title="那些不存在的网站 (September 16, 2010)">那些不存在的网站</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/07/openid-yuanli/" title="OpenID原理和登录过程 (July 4, 2010)">OpenID原理和登录过程</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/09/openid-tidaizhe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sikuli介绍</title>
		<link>http://www.lixinyang.com/2010/08/sikuli-jieshao/</link>
		<comments>http://www.lixinyang.com/2010/08/sikuli-jieshao/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 12:44:46 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1110</guid>
		<description><![CDATA[Sikuli(在墨西哥维乔印第安人的语言里是”上帝之眼”的意思)是由美国麻省理工学院开发的一种最新编程技术,使得编程人员可以使用截图替代代码,从而简化代码的编写流程。从它研究方向上看,是一种编程技术,但是该技术还可以用于进行大规模的程序测试,脚本程序编写使用的是python语言。 上面是对Sikuli一种比较官方的介绍，上周末我下载下来玩儿了一下，直接上图应该可以说明Sikuli有什么功能。（图中是我写的一个Sikuli程序，可以在我的网站里找到搜索框，输入Sikuli，然后点击搜索按钮） 相关网址： 主页：http://groups.csail.mit.edu/uid/sikuli/ 中文ppt介绍：http://wenku.baidu.com/view/f6515c29bd64783e09122bf6.html# 它能干什么实际工作啊？我也说不清。也许可以做下面几个事情吧： 自动测试 自动下载/网页访问脚本 恶作剧 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<blockquote><p>Sikuli(在墨西哥维乔印第安人的语言里是”上帝之眼”的意思)是由美国麻省理工学院开发的一种最新编程技术,使得编程人员可以使用截图替代代码,从而简化代码的编写流程。从它研究方向上看,是一种编程技术,但是该技术还可以用于进行大规模的程序测试,脚本程序编写使用的是python语言。</p></blockquote>
<p>上面是对Sikuli一种比较官方的介绍，上周末我下载下来玩儿了一下，直接上图应该可以说明Sikuli有什么功能。（图中是我写的一个Sikuli程序，可以在我的网站里找到搜索框，输入Sikuli，然后点击搜索按钮）</p>
<p><a rel="attachment wp-att-1112" href="http://www.lixinyang.com/2010/08/26/sikuli-jieshao/sikuli/"><img class="alignnone size-full wp-image-1112" title="sikuli" src="http://www.lixinyang.com/wp-content/uploads/2010/08/sikuli.jpg" alt="" width="640" height="400" /></a></p>
<p>相关网址：</p>
<ul>
<li>主页：<a href="http://groups.csail.mit.edu/uid/sikuli/" onclick="pageTracker._trackPageview('/outgoing/groups.csail.mit.edu/uid/sikuli/?referer=');">http://groups.csail.mit.edu/uid/sikuli/</a></li>
<li>中文ppt介绍：<a href="http://wenku.baidu.com/view/f6515c29bd64783e09122bf6.html#" onclick="pageTracker._trackPageview('/outgoing/wenku.baidu.com/view/f6515c29bd64783e09122bf6.html?referer=');">http://wenku.baidu.com/view/f6515c29bd64783e09122bf6.html#</a></li>
</ul>
<p>它能干什么实际工作啊？我也说不清。也许可以做下面几个事情吧：</p>
<ul>
<li>自动测试</li>
<li>自动下载/网页访问脚本</li>
<li>恶作剧</li>
</ul>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/08/sikuli-jieshao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python VS Ruby</title>
		<link>http://www.lixinyang.com/2010/08/python-vs-ruby/</link>
		<comments>http://www.lixinyang.com/2010/08/python-vs-ruby/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:19:04 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[八卦八卦]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[世界杯]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=1077</guid>
		<description><![CDATA[中午和三火兄饭后百步走的时候聊到Python和Ruby，发现Python的作者是荷兰的，Ruby的作者是日本的。联想起前些日子南非世界杯上日本和荷兰比赛时候的段子： 一个嫖娼业最发达的国家战胜了一个AV业最发达的国家，这个故事告诉我们，实践是检验真理的唯一标准。 Related posts 让Ultraledit成为python开发环境 (0) 开始学习Python (2) 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0)]]></description>
			<content:encoded><![CDATA[<p>中午和<a href="http://li3huo.com" onclick="pageTracker._trackPageview('/outgoing/li3huo.com?referer=');">三火</a>兄饭后百步走的时候聊到Python和Ruby，发现Python的作者是荷兰的，Ruby的作者是日本的。联想起前些日子南非世界杯上日本和荷兰比赛时候的段子：</p>
<p>一个嫖娼业最发达的国家战胜了一个AV业最发达的国家，这个故事告诉我们，实践是检验真理的唯一标准。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/kaishi-xuexi-python/" title="开始学习Python (July 9, 2009)">开始学习Python</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/08/python-vs-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>支持OpenID的网站</title>
		<link>http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/</link>
		<comments>http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 17:14:54 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[GFW]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=893</guid>
		<description><![CDATA[之所以整理这个表格，是因为各家号称支持OpenID的站点常有这样那样的问题，不是一句两句的事情。这不是一个完整表格，只是我感兴趣的和调研了的的一些。可以看到国内对OpenID支持的很不怎么样，如果QQ开发QQ号作为OpenID就好了。 体验了这些站点后一个基本结论是：It works! 但用户体验真是sucks! 无法投入商业使用。但OpenID的一些竞争者可以商业使用。（这个话题找机会详细开一篇文章说。坑填上了，见：OpenID的用户体验） 站点名称 服务 OpenID URL 问题和备注 LiveJournal RP/OP http://username.livejournal.com 发起建立OpenID的人。未测试 Google OP http://www.google.com/profiles/lixinyang https://www.google.com/accounts/o8/id 只允许Google帐号登录别人，不允许别人帐号登录Google Facebook RP NA 只允许别人帐号登录Facebook，不允许Facebook帐号登录别人 Yahoo RP/OP https://me.yahoo.com/lixinyang78 用户在登录过程中收到了Yahoo明确的警告 WordPress OP http://lixinyang.wordpress.com 登录过程慢,不知道是不是RP AOL OP http://openid.aol.com/lixinyang 不知道是不是RP myspace OP www.myspace.com/username 未测试 人人网 &#8230; <a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>之所以整理这个表格，是因为各家号称支持OpenID的站点常有这样那样的问题，不是一句两句的事情。这不是一个完整表格，只是我感兴趣的和调研了的的一些。可以看到国内对OpenID支持的很不怎么样，如果QQ开发QQ号作为OpenID就好了。</p>
<p>体验了这些站点后一个基本结论是：It works! 但用户体验真是sucks! 无法投入商业使用。但OpenID的一些竞争者可以商业使用。（这个话题找机会详细开一篇文章说。坑填上了，见：<a title="Permalink to OpenID的用户体验" rel="bookmark" href="../2010/07/04/openid-yonghu-tiyan/">OpenID的用户体验</a>）</p>
<table border="0" cellspacing="0" cellpadding="0" width="853">
<col width="102"></col>
<col width="52"></col>
<col width="342"></col>
<col width="357"></col>
<tbody>
<tr height="18">
<td width="102" height="18">站点名称</td>
<td width="52">服务</td>
<td width="342">OpenID URL</td>
<td width="357">问题和备注</td>
</tr>
<tr height="18">
<td height="18">LiveJournal</td>
<td>RP/OP</td>
<td><a href="http://username.livejournal.com/" onclick="pageTracker._trackPageview('/outgoing/username.livejournal.com/?referer=');">http://username.livejournal.com</a></td>
<td width="357">发起建立OpenID的人。未测试</td>
</tr>
<tr height="36">
<td height="36">Google</td>
<td>OP</td>
<td width="342">http://www.google.com/profiles/lixinyang</p>
<p>https://www.google.com/accounts/o8/id</td>
<td width="357">只允许Google帐号登录别人，不允许别人帐号登录Google</td>
</tr>
<tr height="36">
<td height="36">Facebook</td>
<td>RP</td>
<td>NA</td>
<td width="357">只允许别人帐号登录Facebook，不允许Facebook帐号登录别人</td>
</tr>
<tr height="54">
<td height="54">Yahoo</td>
<td>RP/OP</td>
<td><a href="https://me.yahoo.com/lixinyang78" onclick="pageTracker._trackPageview('/outgoing/me.yahoo.com/lixinyang78?referer=');">https://me.yahoo.com/lixinyang78</a></td>
<td width="357">用户在登录过程中收到了Yahoo明确的警告</td>
</tr>
<tr height="18">
<td height="18">WordPress</td>
<td>OP</td>
<td><a href="http://lixinyang.wordpress.com/" onclick="pageTracker._trackPageview('/outgoing/lixinyang.wordpress.com/?referer=');">http://lixinyang.wordpress.com</a></td>
<td width="357">登录过程慢,不知道是不是RP</td>
</tr>
<tr height="18">
<td height="18">AOL</td>
<td>OP</td>
<td><a href="http://openid.aol.com/lixinyang" onclick="pageTracker._trackPageview('/outgoing/openid.aol.com/lixinyang?referer=');">http://openid.aol.com/lixinyang</a></td>
<td width="357">不知道是不是RP</td>
</tr>
<tr height="18">
<td height="18">myspace</td>
<td>OP</td>
<td>www.myspace.com/<span>username</span></td>
<td width="357">未测试</td>
</tr>
<tr height="18">
<td height="18">人人网</td>
<td>类OP</td>
<td></td>
<td width="357">不是标准的，应该是私有协议，需要继续调研</td>
</tr>
<tr height="18">
<td height="18">支付宝</td>
<td>类OP</td>
<td></td>
<td width="357">不是标准的，应该是私有协议，需要继续调研</td>
</tr>
<tr height="36">
<td height="36">京东</td>
<td>类RP</td>
<td></td>
<td width="357">它就是一个使用者，别人提供什么协议它就用什么协议接入</td>
</tr>
</tbody>
</table>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/09/openid-tidaizhe/" title="OpenID的替代者 (September 14, 2010)">OpenID的替代者</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/09/bucunzai-de-wangzhan/" title="那些不存在的网站 (September 16, 2010)">那些不存在的网站</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/07/openid-yuanli/" title="OpenID原理和登录过程 (July 4, 2010)">OpenID原理和登录过程</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/03/chinternet/" title="岛国居民 (March 23, 2010)">岛国居民</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID原理和登录过程</title>
		<link>http://www.lixinyang.com/2010/07/openid-yuanli/</link>
		<comments>http://www.lixinyang.com/2010/07/openid-yuanli/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 16:28:08 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[GFW]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=887</guid>
		<description><![CDATA[听闻OpenID好久了，但一直没具体看过它的原理，最近在准备一个互联网产品，周末想起来好好看看OpenID是否可以用。现将学习所得记录一下。 OpenID体系中的参与者和角色，OpenID登录过程中有三种角色： User：网站访问者操作的浏览器 RP：Relying Party，用户要登录的网站 OP：OpenID Provider，提供OpenID帐号的网站，验证用户名密码的一方。 举例：苍井空使用自己的Google帐号登录lixinyang.com。User是苍井空，RP是lixinyang.com，OP是Google.com OpenID的登录过程，我不细讲了，下面三个图都是来说明的，直接上图。需要说明的是这个登录过程导致的几个问题： User/RP/OP三者间网络两两都需要联通，所以它们一定要在“墙”的同侧。中国特色的问题，谁让别人用的是internet，我们用的是chinternet。 用户登录过程中会看到OP的页面，总的来讲这导致用户很不习惯。也有些许好处 &#8212; 通过傍一个NB的大款来增加自己的可信性。（用户在登录lixinyang.com的过程中看到了Google登陆页） 一个登陆过程中User/RP/OP之间有七八次交互，而且经常横跨大洲，所以过程经常很慢。 User似乎一定要是浏览器，而不能是自有客户端。（这条需要进一步调研） Related posts 支持OpenID的网站 (0) OpenID的替代者 (2) 那些不存在的网站 (3) 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3)]]></description>
			<content:encoded><![CDATA[<p>听闻<a title="OpenID主页" href="http://openid.net" target="_blank" onclick="pageTracker._trackPageview('/outgoing/openid.net?referer=');">OpenID</a>好久了，但一直没具体看过它的原理，最近在准备一个互联网产品，周末想起来好好看看OpenID是否可以用。现将学习所得记录一下。</p>
<p>OpenID体系中的参与者和角色，OpenID登录过程中有三种角色：</p>
<ul>
<li>User：网站访问者操作的浏览器</li>
<li>RP：Relying Party，用户要登录的网站</li>
<li>OP：OpenID Provider，提供OpenID帐号的网站，验证用户名密码的一方。</li>
<li>举例：苍井空使用自己的Google帐号登录lixinyang.com。User是苍井空，RP是lixinyang.com，OP是Google.com</li>
</ul>
<p>OpenID的登录过程，我不细讲了，下面三个图都是来说明的，直接上图。需要说明的是这个登录过程导致的几个问题：</p>
<ul>
<li>User/RP/OP三者间网络两两都需要联通，所以它们一定要在“墙”的同侧。中国特色的问题，谁让别人用的是internet，我们用的是chinternet。</li>
<li>用户登录过程中会看到OP的页面，总的来讲这导致用户很不习惯。也有些许好处 &#8212; 通过傍一个NB的大款来增加自己的可信性。（用户在登录lixinyang.com的过程中看到了Google登陆页）</li>
<li>一个登陆过程中User/RP/OP之间有七八次交互，而且经常横跨大洲，所以过程经常很慢。</li>
<li>User似乎一定要是浏览器，而不能是自有客户端。（这条需要进一步调研）</li>
</ul>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/07/openid11.gif"><img class="alignnone size-full wp-image-888" title="openid1" src="http://www.lixinyang.com/wp-content/uploads/2010/07/openid11.gif" alt="" width="470" height="409" /></a><a href="http://www.lixinyang.com/wp-content/uploads/2010/07/openid21.jpg"></a></p>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/07/openid21.jpg"><img class="alignnone size-full wp-image-889" title="openid2" src="http://www.lixinyang.com/wp-content/uploads/2010/07/openid21.jpg" alt="" width="384" height="209" /></a><a href="http://www.lixinyang.com/wp-content/uploads/2010/07/OpenId-google1.png"></a></p>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/07/OpenId-google1.png"><img class="alignnone size-full wp-image-890" title="OpenId-google" src="http://www.lixinyang.com/wp-content/uploads/2010/07/OpenId-google1.png" alt="" width="639" height="329" /></a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/openid-tidaizhe/" title="OpenID的替代者 (September 14, 2010)">OpenID的替代者</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/09/bucunzai-de-wangzhan/" title="那些不存在的网站 (September 16, 2010)">那些不存在的网站</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/07/openid-yuanli/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>推荐wurfl机型库</title>
		<link>http://www.lixinyang.com/2010/07/wurfl-user-agent/</link>
		<comments>http://www.lixinyang.com/2010/07/wurfl-user-agent/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 13:20:59 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[软件开发]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=822</guid>
		<description><![CDATA[今天查看google统计发现，这篇“告诉你User-Agent的含义 是什么”的博文访问量还是很高的，大家都是搜“user- agent是什么 ”来到这个页面的。 既然大家这么关心user-agent，那我顺别推荐一下最近公司应用的开源机型库 &#8212; Wurfl。作为一个机型数据库，wurfl最大的优点是数据全。提供的API也还算清晰方便，Java/PHP API都有，数据结构简单、清晰。各位想写机型库代码的朋友，建议还是以它为基础来做吧，省不少力气。感谢吴晓华的推荐。 BTW：今天Google CEO施密特说“手机已经成为计算技术最热门的领域，最聪明的开发人员在编写应用程序时首先考虑的手机平台，其次才是Windows、Mac 等桌面操作系统”。 Related posts 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 给nginx和haproxy负载均衡集群里添加backup服务器 (0) 支持OpenID的网站 (0) 《硝烟中Scrum和XP》读书笔记 (4) OpenID的替代者 (2)]]></description>
			<content:encoded><![CDATA[<p>今天查看google统计发现，这篇<a title="告诉你User-Agent的含义是什么" rel="bookmark" href="../2009/07/08/user-agent-string/">“告诉你User-Agent的含义 是什么</a>”的博文访问量还是很高的，大家都是搜“<a href="http://www.lixinyang.com/2009/07/08/user-agent-string/">user- agent是什么 </a>”来到这个页面的。</p>
<p>既然大家这么关心user-agent，那我顺别推荐一下最近公司应用的开源机型库 &#8212; <a title="机型库" href="http://wurfl.sourceforge.net/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wurfl.sourceforge.net/?referer=');">Wurfl</a>。作为一个机型数据库，wurfl最大的优点是数据全。提供的API也还算清晰方便，Java/PHP API都有，数据结构简单、清晰。各位想写机型库代码的朋友，建议还是以它为基础来做吧，省不少力气。感谢<a href="http://www.wuxiaohua.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.wuxiaohua.com?referer=');">吴晓华</a>的推荐。</p>
<p>BTW：今天Google CEO施密特说“<a href="http://www.cnbeta.com/articles/115349.htm" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.cnbeta.com/articles/115349.htm?referer=');">手机已经成为计算技术最热门的领域，最聪明的开发人员在编写应用程序时首先考虑的手机平台，其次才是Windows、Mac 等桌面操作系统</a>”。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/10/scrum-xp/" title="《硝烟中Scrum和XP》读书笔记 (October 15, 2009)">《硝烟中Scrum和XP》读书笔记</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/09/openid-tidaizhe/" title="OpenID的替代者 (September 14, 2010)">OpenID的替代者</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/07/wurfl-user-agent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat7.0新特性</title>
		<link>http://www.lixinyang.com/2010/07/tomcat70-xin-texing/</link>
		<comments>http://www.lixinyang.com/2010/07/tomcat70-xin-texing/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:59:25 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=842</guid>
		<description><![CDATA[今天看到Apache发布了Tomcat 7.0，心中竟有一丝唏嘘 &#8212; 原来赖以谋生、每日厮混的Tomcat现在自己竟然如此不在意了，beta都发布了才想着去看它的新特性。摘录几个Tomcat 7.0的新特性吧： Servlet 3.0：有不少新的有趣的东西，比如我比较感兴趣的：异步处理、Servlet可动态部署、内建文件上传支持。还有我不太感兴趣的：注释替代配置、插件体系。详见这里。 JSP 2.2、EL 2.2 增加了web application内存泄露的检测和防护。 详见：tomcat 7.0 change log Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p>今天看到Apache发布了<strong>Tomcat 7.0</strong>，心中竟有一丝唏嘘 &#8212; 原来赖以谋生、每日厮混的Tomcat现在自己竟然如此不在意了，beta都发布了才想着去看它的新特性。摘录几个Tomcat 7.0的新特性吧：</p>
<ul>
<li>Servlet 3.0：有不少新的有趣的东西，比如我比较感兴趣的：异步处理、Servlet可动态部署、内建文件上传支持。还有我不太感兴趣的：注释替代配置、插件体系。详见<a href="http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html?ca=drs-cn-0423" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html?ca=drs-cn-0423&amp;referer=');">这里</a>。</li>
<li>JSP 2.2、EL 2.2</li>
<li>增加了web application内存泄露的检测和防护。</li>
</ul>
<p>详见：<a href="http://tomcat.apache.org/tomcat-7.0-doc/changelog.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/tomcat.apache.org/tomcat-7.0-doc/changelog.html?referer=');">tomcat 7.0 change log</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/07/tomcat70-xin-texing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐一篇介绍Thrift的文章</title>
		<link>http://www.lixinyang.com/2010/06/thrift-jieshao/</link>
		<comments>http://www.lixinyang.com/2010/06/thrift-jieshao/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 11:29:39 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=820</guid>
		<description><![CDATA[http://jnb.ociweb.com/jnb/jnbJun2009.html 写的非常不错的文章，对体系结构、运行时、性能测试、应用场景都有介绍，而且比较客观。而且其中明确回答了几个问题，例如： Thrift客户端运行时候都需要什么，需要C++那堆东西吗？ Thrift生成的代码帮我们解决了哪些问题？它对我们写Service的服务器端提供了哪些帮助？ 一个Server可以提供多个Service吗？ Thrift支持哪些数据传输格式（Protocol）和传输方式（Transport），什么时候该用哪个。 更多内容请阅读这篇文章吧。 Related posts 如何安装Thrift (3) 在Redhat上安装Thrift (1) 各语言的Thrift Runtime (1) Thrift演示代码-Cache服务器 (0) Thrift是什么 (0)]]></description>
			<content:encoded><![CDATA[<p>http://jnb.ociweb.com/jnb/jnbJun2009.html</p>
<p>写的非常不错的文章，对体系结构、运行时、性能测试、应用场景都有介绍，而且比较客观。而且其中明确回答了几个问题，例如：</p>
<ul>
<li>Thrift客户端运行时候都需要什么，需要C++那堆东西吗？</li>
<li>Thrift生成的代码帮我们解决了哪些问题？它对我们写Service的服务器端提供了哪些帮助？</li>
<li>一个Server可以提供多个Service吗？</li>
<li>Thrift支持哪些数据传输格式（Protocol）和传输方式（Transport），什么时候该用哪个。</li>
</ul>
<p>更多内容请阅读这篇文章吧。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/" title="在Redhat上安装Thrift (June 20, 2010)">在Redhat上安装Thrift</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-runtime/" title="各语言的Thrift Runtime (June 20, 2010)">各语言的Thrift Runtime</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/" title="Thrift演示代码-Cache服务器 (June 20, 2010)">Thrift演示代码-Cache服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-shi-shenme/" title="Thrift是什么 (June 11, 2010)">Thrift是什么</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/thrift-jieshao/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Thrift演示代码-Cache服务器</title>
		<link>http://www.lixinyang.com/2010/06/thrift-demo-cache-server/</link>
		<comments>http://www.lixinyang.com/2010/06/thrift-demo-cache-server/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 09:00:40 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=800</guid>
		<description><![CDATA[利用这个周末终于写了个thrift的demo代码：Cache服务器。下面是三部分代码： thrift文件，Java服务器端和客户端代码，Python客户端代码 比较简单，就不逐行讲解了。但是这个代码想要跑起来显然也不是很容易的，因为需要配置thrift运行时，没有动手操作过的同学一定会遇到问题。下面是thrif idl文件，为了演示所以接口定义的有些重复： struct CacheEntry{ 1: i32 key 2: string value } service CacheService { string get(1: i32 key), void put(1: i32 key, 2: string value), CacheEntry getEntry(1: i32 key), void putEntry(1: CacheEntry entry) } BTW：写这个demo的过程中深切感到脚本语言写代码的快速，即使我没看过几眼python，但python demo依然比java写的快。java编译什么的太麻烦。 Related posts &#8230; <a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>利用这个周末终于写了个thrift的demo代码：Cache服务器。下面是三部分代码：</p>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/06/cache.thrift.tar.gz">thrift文件</a>，<a href="http://www.lixinyang.com/wp-content/uploads/2010/06/cache.java_.tar.gz">Java服务器端和客户端代码</a>，<a href="http://www.lixinyang.com/wp-content/uploads/2010/06/cache.py_.tar.gz">Python客户端代码</a></p>
<p>比较简单，就不逐行讲解了。但是这个代码想要跑起来显然也不是很容易的，因为需要<a href="http://www.lixinyang.com/2010/06/20/thrift-runtime/" target="_blank">配置thrift运行时</a>，没有动手操作过的同学一定会遇到问题。下面是thrif idl文件，为了演示所以接口定义的有些重复：</p>
<pre>struct CacheEntry{
1: i32 key
2: string value
}

service CacheService {
string get(1: i32 key),
void put(1: i32 key, 2: string value),
CacheEntry getEntry(1: i32 key),
void putEntry(1: CacheEntry entry)
}
</pre>
<p>BTW：写这个demo的过程中深切感到脚本语言写代码的快速，即使我没看过几眼python，但python demo依然比java写的快。java编译什么的太麻烦。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/06/thrift-jieshao/" title="推荐一篇介绍Thrift的文章 (June 22, 2010)">推荐一篇介绍Thrift的文章</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/" title="在Redhat上安装Thrift (June 20, 2010)">在Redhat上安装Thrift</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-runtime/" title="各语言的Thrift Runtime (June 20, 2010)">各语言的Thrift Runtime</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-shi-shenme/" title="Thrift是什么 (June 11, 2010)">Thrift是什么</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/thrift-demo-cache-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>各语言的Thrift Runtime</title>
		<link>http://www.lixinyang.com/2010/06/thrift-runtime/</link>
		<comments>http://www.lixinyang.com/2010/06/thrift-runtime/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 08:15:48 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=794</guid>
		<description><![CDATA[Thrift安装挺麻烦的，但Runtime很容易，防止大家的畏难情绪特别说明一下。 Thrift Java Rumtime: libthrift.jar，slf4j-api-1.6.0.jar，就这么两个jar包。 Thrift Python Runtime，就是/usr/lib/python2.5/site-packages/thrift/目录下一些python lib 这些运行时其实是不需要安装thrift，而只要在THRIFT_DIR/lib/java，THRIFT_DIR/lib/py目录里就可以直接安装相应语言的运行时。 Related posts 推荐一篇介绍Thrift的文章 (4) 如何安装Thrift (3) 在Redhat上安装Thrift (1) Thrift演示代码-Cache服务器 (0) Thrift是什么 (0)]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lixinyang.com/2010/06/20/redhat-anzhuang-thrift/" target="_blank">Thrift安装</a>挺麻烦的，但Runtime很容易，防止大家的畏难情绪特别说明一下。</p>
<p>Thrift Java Rumtime: libthrift.jar，slf4j-api-1.6.0.jar，就这么两个jar包。</p>
<p>Thrift Python Runtime，就是/usr/lib/python2.5/site-packages/thrift/目录下一些python lib</p>
<p>这些运行时其实是不需要安装thrift，而只要在THRIFT_DIR/lib/java，THRIFT_DIR/lib/py目录里就可以直接安装相应语言的运行时。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/06/thrift-jieshao/" title="推荐一篇介绍Thrift的文章 (June 22, 2010)">推荐一篇介绍Thrift的文章</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/" title="在Redhat上安装Thrift (June 20, 2010)">在Redhat上安装Thrift</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/" title="Thrift演示代码-Cache服务器 (June 20, 2010)">Thrift演示代码-Cache服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-shi-shenme/" title="Thrift是什么 (June 11, 2010)">Thrift是什么</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/thrift-runtime/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在Redhat上安装Thrift</title>
		<link>http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/</link>
		<comments>http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 05:52:46 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=784</guid>
		<description><![CDATA[本来在自己VPS的Ubuntu上安装好了Thrift，但发现那个VPS内存限制太严，用起来不爽，所以还是在公司服务器上安装Thrift吧。公司的机器都是Redhat，所以边装边记录一下安装过程。安装过程参考文档： Thrift依赖的软件：http://wiki.apache.org/thrift/ThriftRequirements 官方安装指南：http://wiki.apache.org/thrift/ThriftInstallation Step1：安装依赖 autoconf版本低需要升级。./configue &#8211;prefix /usr, make, make install经典三步搞定 libtool版本低需要升级。./configue &#8211;prefix /usr, make, make install经典三步搞定 zlib版本低需要升级。./configue, make, make install经典三步搞定 安装boost。./bootstrap.sh, ./bjam, ./bjam install 安装ant。 安装SLFJ，把它的jar包放在类路径下就好了。thrift java api运行的时候需要。 Step2：下载和编译Thrift 下载：wget http://apache.etoak.com/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz tar -zxvf thrift-0.2.0-incubating.tar.gz cd thrift-0.2.0 ./bootstrap.sh ./configure, make, make &#8230; <a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>本来在自己VPS的Ubuntu上安装好了Thrift，但发现那个VPS内存限制太严，用起来不爽，所以还是在公司服务器上安装Thrift吧。公司的机器都是Redhat，所以边装边记录一下安装过程。安装过程参考文档：</p>
<ul>
<li>Thrift依赖的软件：http://wiki.apache.org/thrift/ThriftRequirements</li>
<li>官方安装指南：http://wiki.apache.org/thrift/ThriftInstallation</li>
</ul>
<p>Step1：安装依赖</p>
<ul>
<li>autoconf版本低需要升级。./configue &#8211;prefix /usr, make, make install经典三步搞定</li>
<li>libtool版本低需要升级。./configue &#8211;prefix /usr, make, make install经典三步搞定</li>
<li>zlib版本低需要升级。./configue, make, make install经典三步搞定</li>
<li>安装boost。./bootstrap.sh, ./bjam, ./bjam install</li>
<li>安装ant。</li>
<li>安装SLFJ，把它的jar包放在类路径下就好了。thrift java api运行的时候需要。</li>
</ul>
<p>Step2：下载和编译Thrift</p>
<ul>
<li>下载：wget http://apache.etoak.com/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz</li>
<li>tar -zxvf thrift-0.2.0-incubating.tar.gz</li>
<li>cd thrift-0.2.0</li>
<li>./bootstrap.sh</li>
<li>./configure, make, make install</li>
</ul>
<p>Step3：生成运行时（Runtime）</p>
<ul>
<li>cd ./lib/java</li>
<li>ant 生成libthrift.jar（thrift的java运行时）</li>
<li>cd ../python</li>
<li>python setup.py install（生成python运行时）</li>
<li>cd ../php</li>
<li>php的运行时我没有生成，因为它没有提供自动脚本，而需要手动操作。</li>
</ul>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/06/thrift-jieshao/" title="推荐一篇介绍Thrift的文章 (June 22, 2010)">推荐一篇介绍Thrift的文章</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-runtime/" title="各语言的Thrift Runtime (June 20, 2010)">各语言的Thrift Runtime</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/" title="Thrift演示代码-Cache服务器 (June 20, 2010)">Thrift演示代码-Cache服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-shi-shenme/" title="Thrift是什么 (June 11, 2010)">Thrift是什么</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hadoop笔记</title>
		<link>http://www.lixinyang.com/2010/06/hadoop-biji/</link>
		<comments>http://www.lixinyang.com/2010/06/hadoop-biji/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 03:57:36 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=754</guid>
		<description><![CDATA[今天ibm developworks的有篇介绍Hadoop的入门文章一时感兴趣就读了起来，延后做了一些延展阅读。读着读着一个上午过去鸟，原本想做的写一个Thrift demo也没做。随便记两笔学习笔记吧。 Hadoop集群配置貌似很简单 没有几台机器的话，架设Hadoop就是瞎扯，只能作为练手，而不能用来生产 如果自己的业务和遇到的问题不涉及海量的数据处理也没必要使用Hadoop，不要为了技术而技术。 MapReduce的指南在这里。 MapReduce的API在这里。 Related posts 支持OpenID的网站 (0) 推荐wurfl机型库 (0) OpenID的替代者 (2) App Inventor试用 (0) 陈冠希的价值再发现 (2)]]></description>
			<content:encoded><![CDATA[<p>今天<a href="http://www.ibm.com/developerworks/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.ibm.com/developerworks/?referer=');">ibm developworks</a>的有篇<a href="http://www.ibm.com/developerworks/cn/linux/l-hadoop-1/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.ibm.com/developerworks/cn/linux/l-hadoop-1/?referer=');">介绍Hadoop的入门文章</a>一时感兴趣就读了起来，延后做了一些延展阅读。读着读着一个上午过去鸟，原本想做的写一个<a href="http://www.lixinyang.com/tag/thrift/" target="_blank">Thrift </a>demo也没做。随便记两笔学习笔记吧。</p>
<ol>
<li>Hadoop集群配置貌似很简单</li>
<li>没有几台机器的话，架设Hadoop就是瞎扯，只能作为练手，而不能用来生产</li>
<li>如果自己的业务和遇到的问题不涉及海量的数据处理也没必要使用Hadoop，不要为了技术而技术。</li>
<li>MapReduce的指南在<a title="MapReduce的指南" href="http://hadoop.apache.org/common/docs/current/mapred_tutorial.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/common/docs/current/mapred_tutorial.html?referer=');">这里</a>。</li>
<li>MapReduce的API在<a title="MapReduce API" href="http://hadoop.apache.org/common/docs/current/api/index.html?org/apache/hadoop/mapred/Mapper.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/common/docs/current/api/index.html?org/apache/hadoop/mapred/Mapper.html&amp;referer=');">这里</a>。</li>
</ol>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/openid-tidaizhe/" title="OpenID的替代者 (September 14, 2010)">OpenID的替代者</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/09/app-inventor/" title="App Inventor试用 (September 28, 2010)">App Inventor试用</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2008/03/cgx-baidu/" title="陈冠希的价值再发现 (March 18, 2008)">陈冠希的价值再发现</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/hadoop-biji/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thrift是什么</title>
		<link>http://www.lixinyang.com/2010/06/thrift-shi-shenme/</link>
		<comments>http://www.lixinyang.com/2010/06/thrift-shi-shenme/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 13:46:59 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=718</guid>
		<description><![CDATA[Thrift是什么？我的解释是：替代常见的XML-RPC的方案。而且包含了RPC客户端和服务器端的代码生成，使得Service的开发更快捷。是基于Service的多语言混合编程的首选方案。 官方定义：“Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, &#8230; <a href="http://www.lixinyang.com/2010/06/thrift-shi-shenme/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://incubator.apache.org/thrift/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/incubator.apache.org/thrift/?referer=');">Thrift</a>是什么？我的解释是：替代常见的XML-RPC的方案。而且包含了RPC客户端和服务器端的代码生成，使得Service的开发更快捷。是基于Service的多语言混合编程的首选方案。</p>
<p>官方定义：“Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.”</p>
<p>我认为它适合用在软件系统内部Services的开发。开放给企业外部的Service接口一般不适合用Thrift，同样系统内部用的Service也不应该用XML-RPC。</p>
<p>Thrift由Facebook开发，而后捐给了<a href="http://incubator.apache.org/thrift/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/incubator.apache.org/thrift/?referer=');">apache</a>。Thrift经常和<a href="http://code.google.com/p/protobuf/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/protobuf/?referer=');">Google的Protocol Buffers</a>比较，<a href="http://pickerel.javaeye.com/blog/318734" target="_blank" onclick="pageTracker._trackPageview('/outgoing/pickerel.javaeye.com/blog/318734?referer=');">这是一篇非常好的二者对比</a>。</p>
<p>下图比较好的说明了Thrift在整个系统中应该处在什么位置：</p>
<p><a href="http://www.lixinyang.com/wp-content/uploads/2010/06/facebook.png"><img class="alignnone size-full wp-image-721" title="facebook" src="http://www.lixinyang.com/wp-content/uploads/2010/06/facebook.png" alt="" width="534" height="343" /></a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/06/thrift-jieshao/" title="推荐一篇介绍Thrift的文章 (June 22, 2010)">推荐一篇介绍Thrift的文章</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/" title="如何安装Thrift (June 11, 2010)">如何安装Thrift</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/" title="在Redhat上安装Thrift (June 20, 2010)">在Redhat上安装Thrift</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-runtime/" title="各语言的Thrift Runtime (June 20, 2010)">各语言的Thrift Runtime</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/" title="Thrift演示代码-Cache服务器 (June 20, 2010)">Thrift演示代码-Cache服务器</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/thrift-shi-shenme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何安装Thrift</title>
		<link>http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/</link>
		<comments>http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 11:03:09 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=709</guid>
		<description><![CDATA[总的来讲，在Ubuntu上安装Thrift非常顺利。下面是最有用的一个在线文档：http://wiki.apache.org/thrift/GettingUbuntuPackages 下面是我的安装过程，依次是：安装python头文件、安装thrift依赖包、下载thrift包、解包、编译。（Some other packages depend on what languages you want Thrift to support. For ruby, install ruby-dev.） sudo apt-get install python-dev sudo apt-get install libboost-dev automake libtool flex bison pkg-config g++ wget http://apache.freelamp.com/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz tar -zxvf thrift-0.2.0-incubating.tar.gz cd thrift-0.2.0 ./bootstrap.sh ./configure &#8230; <a href="http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>总的来讲，在Ubuntu上安装Thrift非常顺利。下面是最有用的一个在线文档：http://wiki.apache.org/thrift/GettingUbuntuPackages</p>
<p>下面是我的安装过程，依次是：安装python头文件、安装thrift依赖包、下载thrift包、解包、编译。（Some other packages depend on what languages you want Thrift to support.  For ruby, install <tt>ruby-dev</tt>.）</p>
<pre>sudo apt-get install python-dev
sudo apt-get install libboost-dev automake libtool flex bison pkg-config g++
wget http://apache.freelamp.com/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
tar -zxvf thrift-0.2.0-incubating.tar.gz
cd thrift-0.2.0
./bootstrap.sh
./configure
sudo make
sudo make install
</pre>
<p>我在安装过程中遇到的其他问题：</p>
<ul>
<li>机器没装make，汗。sudo apt-get install make</li>
<li>burstnet比公司内自建的vps快多了，burstnet上make了三遍公司里的还没make完</li>
</ul>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/07/zhichi-openid-de-wangzhan/" title="支持OpenID的网站 (July 4, 2010)">支持OpenID的网站</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-jieshao/" title="推荐一篇介绍Thrift的文章 (June 22, 2010)">推荐一篇介绍Thrift的文章</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2010/06/redhat-anzhuang-thrift/" title="在Redhat上安装Thrift (June 20, 2010)">在Redhat上安装Thrift</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-runtime/" title="各语言的Thrift Runtime (June 20, 2010)">各语言的Thrift Runtime</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/06/thrift-demo-cache-server/" title="Thrift演示代码-Cache服务器 (June 20, 2010)">Thrift演示代码-Cache服务器</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/06/ruhe-anzhuang-thrift/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>debian, php: command not found</title>
		<link>http://www.lixinyang.com/2010/05/debian-php-command-not-found/</link>
		<comments>http://www.lixinyang.com/2010/05/debian-php-command-not-found/#comments</comments>
		<pubDate>Thu, 20 May 2010 11:02:06 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=635</guid>
		<description><![CDATA[先说结果：apt-get install php5-cli，搞定“php: command not found” 再说过程：在debian上安装php：apt-get install php5，之后运行php命令依然带到这个错误“php: command not found”。 原来apt-get install php5并不安装命令行程序。用下面命令可以看到php的命令行是在php5-cli这个package下的。 zerg1:~# apt-cache search php5&#124;grep command php5-cli &#8211; command-line interpreter for the php5 scripting language 很久不写程序、装系统了，这两天在公司的虚机上弄一个debian玩玩儿。Debian比redhat果然管理方便很多了，二者的区别就像王征今天讲的cakePHP和spring MVC的区别，都能用但工作效率差不少。 打算一段时间内所有程序都尽量用php写，以便尽快熟悉这个语言。 Related posts 在SAE运行CodeIgniter (3) CodeIgniter, CakePHP and phpfog &#8230; <a href="http://www.lixinyang.com/2010/05/debian-php-command-not-found/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>先说结果：apt-get install php5-cli，搞定“php: command not found”</p>
<p>再说过程：在debian上安装php：apt-get install php5，之后运行php命令依然带到这个错误“php: command not found”。</p>
<p>原来apt-get install php5并不安装命令行程序。用下面命令可以看到php的命令行是在php5-cli这个package下的。</p>
<p>zerg1:~# apt-cache search php5|grep command<br />
php5-cli &#8211; command-line interpreter for the php5 scripting language</p>
<p>很久不写程序、装系统了，这两天在公司的虚机上弄一个debian玩玩儿。Debian比redhat果然管理方便很多了，二者的区别就像王征今天讲的cakePHP和spring MVC的区别，都能用但工作效率差不少。</p>
<p>打算一段时间内所有程序都尽量用php写，以便尽快熟悉这个语言。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2011/05/codeigniter-sae/" title="在SAE运行CodeIgniter (May 19, 2011)">在SAE运行CodeIgniter</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2011/05/codeigniter-cakephp-phpfog/" title="CodeIgniter, CakePHP and phpfog (May 18, 2011)">CodeIgniter, CakePHP and phpfog</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2010/05/debian-php-command-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转载：消除小型 Web 站点单点故障(Single Point of Failure)</title>
		<link>http://www.lixinyang.com/2009/11/dan-dian-guzhang/</link>
		<comments>http://www.lixinyang.com/2009/11/dan-dian-guzhang/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 01:35:53 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[软件开发]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=458</guid>
		<description><![CDATA[转自：http://www.dbanotes.net/web/web_single_point_of_failure.html 我还没有仔细看完，没时间了，所以转过来，留以后查看。 针对小型站点的技术普及信息，中大型网站的牛人不用看，耽误您的时间我负不起这责任。 用 Windows 做网站的也别看了，不适合。 说起单点故障(Single Point of Failure，SPOF)，倒是可以想起电影 《2012》中，一把焊枪把齿轮卡住，从而导致整个舱门无法关闭，进而整个引擎无法发动。这是个有点生动的例子&#8211;如此庞大的一个系统，居然因为一把小小的焊枪而险些毁于一旦。投入巨大人力物力生产的救命方舟居然做不到高可用(High availability)，这是致命的事情。 大脑对与人来说，就是一个单点，大脑损坏，人也完蛋；手是不是单点? 一只没了，另一只还能日常生活，从这个角度来说，不是单点。消除单点的最常见的做法：增加冗余。比如，人有两只手。其次，层次化。当然，分层的目的是便于隔离问题。电影 《2012》 中的这个问题，不知道谁是总架构师，看起来，隔离做得不太够 一般来说，只要系统能够比较清楚的分出层次来，要消除单点故障还是有章可循的事情。比如，一个网站，从基础的硬件层，到操作系统层，到数据库层，到应用程序层，再到网络层，都有可能产生单点故障。如果要有效的消除单点故障，最重要的一点是设计的时候要尽量避免引入单点，而随着架构的变化，定期审查系统潜在单点也是有必要的。 有人或许会问，假设一个起步中的站点，只有一台服务器，什么东西都在一个盒子里，到底要怎么做呢? 这里的建议是先抛开主板、CPU 、内存这些，首先必须考虑硬盘(存储层)的问题，如果机器只有一块硬盘，即使你备份计划再完善(不要说你的备份也是备份在这块硬盘上的)，还是建议你起码再弄一块。做镜像，让出错的概率降低，这是划算的投入，当然消除单点，成本几乎不可避免的要增加。如果硬盘多，或者有其他备份机制，可选的方法就更多，别刻舟求剑。 第二个要考虑网卡与网线的单点问题。先说网线，如果要问一个系统里面最容易物理损坏的是哪个组件，答案恐怕非网线莫属，对于网线这样多数时候因为距离需要定制的东西，总是购买成品还是有成本的，从我观察到的情况来看，各个 IDC 的网线使用手工制作的比例不小，这个质量几乎很难控制，一根线，两个水晶头，哪一个出问题都不能正常传输。怎么办? 想办法提升网线整体质量还是弄两根网线放在那里? 解决办法早都有了，网卡绑定 (NIC bonding)一个很简单很通用的办法(refer)，但是问题是并非很多人在用。多数 PC 服务器应该都是配置了多块网卡，如果是自己攒服务器，记得网卡多一块成本没多大，但是用处会有很多。如果耐着性子看到这里，先别急着去 Google，还有问题呢，两根网线如何接到上行交换机，什么样的交换机支持绑定，如何确定绑定是真正生效的? 答案是，尝试一下。 然后是什么? 是跑多个数据库，还是跑两个 Web 服务器，一个不行用另一个顶? 对于单台服务器，其它能消除单点的地方恐怕收效也不会特别大，现在少做无用功，或许要重点考虑如何备份，如何优化，以及出现问题的时候如何做到快速恢复。有一个或许会引起争议的建议是，除了SSH 登录之外，要不要留一个 Telnet 登录的服务呢? 毕竟 SSH 服务器端守护进程不是百分百靠谱的事儿，如果 &#8230; <a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>转自：<a href="http://www.dbanotes.net/web/web_single_point_of_failure.html" onclick="pageTracker._trackPageview('/outgoing/www.dbanotes.net/web/web_single_point_of_failure.html?referer=');">http://www.dbanotes.net/web/web_single_point_of_failure.html</a></p>
<p>我还没有仔细看完，没时间了，所以转过来，留以后查看。</p>
<pre style="margin-top: 5pt; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5pt; padding-right: 0px; padding-bottom: 5pt; padding-left: 5pt; word-spacing: normal; font-family: 'Courier New', Courier, mono; font-size: 12px; font-weight: 400; letter-spacing: normal; white-space: pre-wrap; background-color: #efefef; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial;">针对小型站点的技术普及信息，中大型网站的牛人不用看，耽误您的时间我负不起这责任。
用 Windows 做网站的也别看了，不适合。</pre>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">说起单点故障(Single Point of Failure，SPOF)，倒是可以想起电影 《2012》中，一把焊枪把齿轮卡住，从而导致整个舱门无法关闭，进而整个引擎无法发动。这是个有点生动的例子&#8211;如此庞大的一个系统，居然因为一把小小的焊枪而险些毁于一旦。投入巨大人力物力生产的救命方舟居然做不到高可用(High availability)，这是致命的事情。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">大脑对与人来说，就是一个单点，大脑损坏，人也完蛋；手是不是单点? 一只没了，另一只还能日常生活，从这个角度来说，不是单点。消除单点的最常见的做法：<strong>增加冗余</strong>。比如，人有两只手。其次，<strong>层次化</strong>。当然，分层的目的是便于隔离问题。电影 《2012》 中的这个问题，不知道谁是总架构师，看起来，隔离做得不太够 <img src='http://www.lixinyang.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">一般来说，只要系统能够比较清楚的分出层次来，要消除单点故障还是有章可循的事情。比如，一个网站，从基础的硬件层，到操作系统层，到数据库层，到应用程序层，再到网络层，都有可能产生单点故障。如果要有效的消除单点故障，最重要的一点是设计的时候要尽量避免引入单点，而随着架构的变化，定期审查系统潜在单点也是有必要的。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">有人或许会问，假设一个起步中的站点，只有一台服务器，什么东西都在一个盒子里，到底要怎么做呢? 这里的建议是先抛开主板、CPU 、内存这些，首先必须考虑硬盘(存储层)的问题，如果机器只有一块硬盘，即使你备份计划再完善(不要说你的备份也是备份在这块硬盘上的)，还是建议你起码再弄一块。做镜像，让出错的概率降低，这是划算的投入，当然消除单点，成本几乎不可避免的要增加。如果硬盘多，或者有其他备份机制，可选的方法就更多，别刻舟求剑。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">第二个要考虑网卡与网线的单点问题。先说网线，如果要问一个系统里面最容易物理损坏的是哪个组件，答案恐怕非网线莫属，对于网线这样多数时候因为距离需要定制的东西，总是购买成品还是有成本的，从我观察到的情况来看，各个 IDC 的网线使用手工制作的比例不小，这个质量几乎很难控制，一根线，两个水晶头，哪一个出问题都不能正常传输。怎么办? 想办法提升网线整体质量还是弄两根网线放在那里? 解决办法早都有了，网卡绑定 (NIC bonding)一个很简单很通用的办法(<a style="text-decoration: none; outline-style: none; outline-width: initial; outline-color: initial; color: #0082ff; font-weight: normal;" href="http://www.cyberciti.biz/tips/linux-bond-or-team-multiple-network-interfaces-nic-into-single-interface.html" onclick="pageTracker._trackPageview('/outgoing/www.cyberciti.biz/tips/linux-bond-or-team-multiple-network-interfaces-nic-into-single-interface.html?referer=');">refer</a>)，但是问题是并非很多人在用。多数 <acronym style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-style: initial; border-color: initial; border-bottom-style: dotted; border-bottom-color: #bbd0f9; cursor: help;" title="Personal Computer">PC</acronym> 服务器应该都是配置了多块网卡，如果是自己攒服务器，记得网卡多一块成本没多大，但是用处会有很多。如果耐着性子看到这里，先别急着去 Google，还有问题呢，两根网线如何接到上行交换机，什么样的交换机支持绑定，如何确定绑定是真正生效的? 答案是，尝试一下。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">然后是什么? 是跑多个数据库，还是跑两个 Web 服务器，一个不行用另一个顶? 对于单台服务器，其它能消除单点的地方恐怕收效也不会特别大，现在少做无用功，或许要重点考虑如何备份，如何优化，以及出现问题的时候如何做到快速恢复。有一个或许会引起争议的建议是，除了<acronym style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-style: initial; border-color: initial; border-bottom-style: dotted; border-bottom-color: #bbd0f9; cursor: help;" title="Secure Shell">SSH</acronym> 登录之外，要不要留一个 Telnet 登录的服务呢? 毕竟 <acronym style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-style: initial; border-color: initial; border-bottom-style: dotted; border-bottom-color: #bbd0f9; cursor: help;" title="Secure Shell">SSH</acronym> 服务器端守护进程不是百分百靠谱的事儿，如果 IDC 距离较远，需要斟酌一下。好吧，网站有了一点发展，用户量也增加了，感觉需要增加服务器了。再增加一台服务器，抗风险能力一下子加强了许多，毕竟一台机器质量再好，也有出错的时候。现在，Web 服务器、DB 服务器可以考虑引入 HA 的方案，如果单台服务能力够，主备模式也不错。随着网站的发展，服务器数量继续增加&#8230;</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">随着服务器数量的增加，到了必须要自己购买网络设备的时候了。同样的设备，一买恐怕就要买双份，原因无它&#8211;一台总要出错，哪怕是电源被拔错&#8211;而这样的情况实际上并不少见。如果预算不够，那就再等等，但是要记住，<strong>定期审查</strong>，有可能的话，进行弥补总不会错。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">到现在，所有的服务器都还在一个 IDC 呢，IDC 本身也是个单点啊，服务器被黑怎么办? 机房光线被施工工人挖断怎么办? 机房停电怎么办? 找第二个机房吧。现在选 IDC 首先要考虑什么? 中国特色的互联网问题总要考虑吧，&#8221;南北互通&#8221;怎么样&#8230;或许在选择第一个机房的时候已经遇到了类似的问题，或许现在正在受到这个问题的困扰。选好 IDC 之后，首先计划一下数据如何备份过来，然后，网站的配置信息如何同步或备份过来(这是保证第一个 IDC 出了致命问题之后的最基本的恢复要求)。多个 IDC 之后不得不提上议程的要算 <acronym style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-style: initial; border-color: initial; border-bottom-style: dotted; border-bottom-color: #bbd0f9; cursor: help;" title="Domain Name System">DNS</acronym> 这个事儿了。你的 <acronym style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-style: initial; border-color: initial; border-bottom-style: dotted; border-bottom-color: #bbd0f9; cursor: help;" title="Domain Name System">DNS</acronym> 解析商靠谱么? 如果域名提供商遭受攻击，对自己的网站影响能承受么?</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">更多的服务器，提供更多的应用，更多的用户，更多的收入&#8230; 接下来该怎么办呢? 现在，您所面对的已经不是一个小型 Web 站点了，可以不用看这篇文章了。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">到现在，我还没说人的问题，如果这些信息只有一个人知道，万一这个人出了点事情怎么办? 作为老板，还要考虑人的单点问题。</p>
<p style="padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; word-spacing: 0.1em; margin: 0px;">&#8211;EOF&#8211;</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/10/scrum-xp/" title="《硝烟中Scrum和XP》读书笔记 (October 15, 2009)">《硝烟中Scrum和XP》读书笔记</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/11/dan-dian-guzhang/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>给nginx和haproxy负载均衡集群里添加backup服务器</title>
		<link>http://www.lixinyang.com/2009/10/nginx-haproxy-backup/</link>
		<comments>http://www.lixinyang.com/2009/10/nginx-haproxy-backup/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 11:10:50 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[软件开发]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=432</guid>
		<description><![CDATA[场景很简单：一个前端负载均衡器（lb），两个应用服务器（s1，s2），一个备用应用服务器（s3）。 希望实现：正常情况下是s1和s2提供服务，但这两个服务器都down掉的时候由备用服务器s3提供服务。 作为负载均衡器的选择，我测试了nginx、haproxy和apache，nginx和haproxy都非常容易就实现了上面的需求，apache也有文档说可以，但没有测试成功。 nginx的配置文件如下（配置文件里是一个工作的app服务器，一个backup）： upstream mycluster { server 192.168.1.240:8888; server 192.168.1.222:8888 backup; } haproxy的配置文件如下（配置文件里是一个工作的app服务器，一个backup）： listen  appli4-backup 0.0.0.0:10004 option  httpchk #option  httpchk /index.html option  persist balance roundrobin server  inst1 192.168.1.240:8888 check inter 2000 fall 3 server  inst2 192.168.1.222:8888 check inter 2000 &#8230; <a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>场景很简单：一个前端负载均衡器（lb），两个应用服务器（s1，s2），一个备用应用服务器（s3）。</p>
<p>希望实现：正常情况下是s1和s2提供服务，但这两个服务器都down掉的时候由备用服务器s3提供服务。</p>
<p>作为负载均衡器的选择，我测试了nginx、haproxy和apache，nginx和haproxy都非常容易就实现了上面的需求，apache也有文档说可以，但没有测试成功。</p>
<p>nginx的配置文件如下（配置文件里是一个工作的app服务器，一个backup）：</p>
<p>upstream mycluster {<br />
server 192.168.1.240:8888;<br />
server 192.168.1.222:8888 backup;<br />
}</p>
<p>haproxy的配置文件如下（配置文件里是一个工作的app服务器，一个backup）：</p>
<p>listen  appli4-backup 0.0.0.0:10004<br />
option  httpchk<br />
#option  httpchk /index.html<br />
option  persist<br />
balance roundrobin<br />
server  inst1 192.168.1.240:8888 check inter 2000 fall 3<br />
server  inst2 192.168.1.222:8888 check inter 2000 fall 3 backup</p>
<p>当然，其实最后我可能haproxy和nginx都不选，而选LVS，如果LVS提供这种支持。有空继续测试LVS。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/kaishi-xuexi-python/" title="开始学习Python (July 9, 2009)">开始学习Python</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2009/10/scrum-xp/" title="《硝烟中Scrum和XP》读书笔记 (October 15, 2009)">《硝烟中Scrum和XP》读书笔记</a> (4)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/10/nginx-haproxy-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC的No parameter specified for @RequestParam异常</title>
		<link>http://www.lixinyang.com/2009/10/no-parameter-specified-for-requestparam/</link>
		<comments>http://www.lixinyang.com/2009/10/no-parameter-specified-for-requestparam/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 02:20:24 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=429</guid>
		<description><![CDATA[今天测试一个程序发现No parameter specified for @RequestParam argument异常。程序是以annotation的方式使用spring mvc开发的。程序在eclipse开发环境下没有问题，但到了正式环境就出错。 问题的解决：正式环境使用ant编译，给ant的compile命令加上debug=true参数。 原因：ant模式是debug=false，所以编译出来的函数声明里的变量名会改变，例如：public String kill(String pid)编译后成为public String kill(String s1)。 这样spring的绑定参数名就不work了。 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p>今天测试一个程序发现No parameter specified for @RequestParam argument异常。程序是以annotation的方式使用spring mvc开发的。程序在eclipse开发环境下没有问题，但到了正式环境就出错。</p>
<p>问题的解决：正式环境使用ant编译，给ant的compile命令加上debug=true参数。</p>
<p>原因：ant模式是debug=false，所以编译出来的函数声明里的变量名会改变，例如：public String kill(String pid)编译后成为public String kill(String s1)。</p>
<p>这样spring的绑定参数名就不work了。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/10/no-parameter-specified-for-requestparam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《硝烟中Scrum和XP》读书笔记</title>
		<link>http://www.lixinyang.com/2009/10/scrum-xp/</link>
		<comments>http://www.lixinyang.com/2009/10/scrum-xp/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 04:18:00 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=416</guid>
		<description><![CDATA[《硝烟中的Scrum和XP》电子书下载：scrum-and-xp-chinese-version 昨天写一个新项目的开发过程计划，xinbo向我推荐了《硝烟中的Scrum和XP》（Scrum and XP from Trenches）这本书。开始阅读之后就没有停下来，一口气读完，读的非常开心，所以今天写写读书笔记。并推荐大家阅读，理由有三： 可以让人读的非常开心。全书净是下面这样风格的话语：“听起来不错？呵，纯粹扯淡。更糟的是，团队一般都是到了会议结束前才发现他们一直在扯淡，到最后还没把故事看上一遍呢！” 非常实际。这本书就是作者在一个4、50个研发人员的团队中1、2年（2005年下半年到2007年初）的时间实践Scrum和XP的总结，所以其中有很多实际的经验、教训、建议，很细节。 好了，下面是读书笔记，同样如果对于XP或者Scrum的基本名词没有概念的，简单Google一下就好了，了解一下名词和概念就好，别读太多理论读物。 “Scrum的强大和令人痛苦之处就在于你不得不根据自己的具体情况来对它进行调整。。。。一年过去了，我们在公司里从上到下都实现了Scrum。我们试过多种团队尺寸（3-12人）、sprint长度（2-6个星期）；定义“完成”的不同方式；不同形式的产品backlog和sprint backlog（Excel、Jira、索引卡）；多种测试策略、演示方式、多个Scrum团队的信息同步方式……。我们还试验了XP实践——各种各样的每日构建，结对编程，测试驱动开发，等等；还试过把XP和Scrum进行结合。” &#8211; 我深信“持续改进”“自我完善”这是任何一个开发过程中最重要的理念。幸运的是Scrum把过程持续改进作为了其执行的一个内在环节。 “产品backlog是Scrum的核心，也是一切的起源。我们叫它故事（story），有时候也叫做backlog条目。我们的故事包括这样一些字段：ID、Name、Importance、Initial Estimate、How to demo、Note。我们曾试过很多字段，但最后发现，只有上面提到的六个字段我们会一直使用下去。” &#8211; 很简单是吧？简单就对了。把那么多功夫花在这些事情干什么，有空编码去好不好！ “Sprint计划会议非常关键，应该算是Scrum中最重要的活动（这当然是我的主观意见）。要是它执行的不好，整个sprint甚至都会被毁掉。” &#8211; 在Scrum开发过程中“项目会”是那么的少，所以我也相信“Sprint计划会”是Scrum中最重要的活动。 “Sprint计划会议会产生一些实实在在的成果： sprint目标。 团队成员名单（以及他们的投入程度，如果不是100%的话）。 sprint backlog（即sprint中包括的故事列表）。 确定好sprint演示日期。 确定好时间地点，供举行每日scrum会议” &#8211; 我认为“确定好Sprint演示日期”这个最刺激，呵呵。 “假如sprint计划会议接近尾声，但仍然没有得出sprint目标或者sprint backlog，这时该怎么办？我们要打断它么？还是再延期一个小时？或者到时间就结束会议，然后明天继续？这种事情会一再发生，尤其是在新团队身上。你会怎么做？我不知道。但我们的做法是什么？嗯……我通常会直接打断会议，中止它。” “几乎每次sprint计划会议都要确定sprint目标。Sprint目标需要回答这个根本的问题，“我们为什么要进行这个sprint？为什么我们不直接放假算了？”” “在大多数sprint 计划会议上，大家都会讨论产品 backlog中的故事细节。对故事进行估算、重定优先级、进一步确认细节、拆分，等等都会在会议上完成。 我们是怎样实际操作的呢？要想收到好的效果，不妨创建一些索引卡，把它们放到墙上（或一张大桌子上）。” &#8211; 一个Backlog一张纸质卡片，听起来不错，很直观，又让大家获得几个小时离开电脑的时间。 &#8230; <a href="http://www.lixinyang.com/2009/10/scrum-xp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>《硝烟中的Scrum和XP》电子书下载：<a title="硝烟中的Scrum和XP" href="http://www.lixinyang.com/wp-content/uploads/2009/10/scrum-and-xp-chinese-version.pdf">scrum-and-xp-chinese-version</a></p>
<p>昨天写一个新项目的开发过程计划，<a href="http://yuzeli.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/yuzeli.com/?referer=');">xinbo</a>向我推荐了《<a href="http://www.infoq.com/cn/minibooks/scrum-xp-from-the-trenches" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.infoq.com/cn/minibooks/scrum-xp-from-the-trenches?referer=');">硝烟中的Scrum和XP</a>》（<a href="http://blog.crisp.se/henrikkniberg/tags/books/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.crisp.se/henrikkniberg/tags/books/?referer=');">Scrum and XP from Trenches</a>）这本书。开始阅读之后就没有停下来，一口气读完，读的非常开心，所以今天写写读书笔记。并推荐大家阅读，理由有三：</p>
<ol>
<li>可以让人读的非常开心。全书净是下面这样风格的话语：“听起来不错？呵，纯粹扯淡。更糟的是，团队一般都是到了会议结束前才发现他们一直在扯淡，到最后还没把故事看上一遍呢！”</li>
<li>非常实际。这本书就是作者在一个4、50个研发人员的团队中1、2年（2005年下半年到2007年初）的时间实践Scrum和XP的总结，所以其中有很多实际的经验、教训、建议，很细节。</li>
</ol>
<p>好了，下面是读书笔记，同样如果对于XP或者Scrum的基本名词没有概念的，简单<a href="http://www.baidu.com/s?wd=scrum" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.baidu.com/s?wd=scrum&amp;referer=');">Google一下</a>就好了，了解一下名词和概念就好，别读太多理论读物。</p>
<p>“Scrum的强大和令人痛苦之处就在于你不得不根据自己的具体情况来对它进行调整。。。。一年过去了，我们在公司里从上到下都实现了Scrum。我们试过多种团队尺寸（3-12人）、sprint长度（2-6个星期）；定义“完成”的不同方式；不同形式的产品backlog和sprint backlog（Excel、Jira、索引卡）；多种测试策略、演示方式、多个Scrum团队的信息同步方式……。我们还试验了XP实践——各种各样的每日构建，结对编程，测试驱动开发，等等；还试过把XP和Scrum进行结合。”</p>
<p>&#8211; 我深信“持续改进”“自我完善”这是任何一个开发过程中最重要的理念。幸运的是Scrum把过程持续改进作为了其执行的一个内在环节。</p>
<p>“产品backlog是Scrum的核心，也是一切的起源。我们叫它故事（story），有时候也叫做backlog条目。我们的故事包括这样一些字段：ID、Name、Importance、Initial Estimate、How to demo、Note。我们曾试过很多字段，但最后发现，只有上面提到的六个字段我们会一直使用下去。”</p>
<p>&#8211; 很简单是吧？简单就对了。把那么多功夫花在这些事情干什么，有空编码去好不好！</p>
<p>“Sprint计划会议非常关键，应该算是Scrum中最重要的活动（这当然是我的主观意见）。要是它执行的不好，整个sprint甚至都会被毁掉。”</p>
<p>&#8211; 在Scrum开发过程中“项目会”是那么的少，所以我也相信“Sprint计划会”是Scrum中最重要的活动。</p>
<p>“Sprint计划会议会产生一些实实在在的成果：</p>
<ul>
<li>sprint目标。</li>
<li>团队成员名单（以及他们的投入程度，如果不是100%的话）。</li>
<li>sprint backlog（即sprint中包括的故事列表）。</li>
<li>确定好sprint演示日期。</li>
<li>确定好时间地点，供举行每日scrum会议”</li>
</ul>
<p>&#8211; 我认为“确定好Sprint演示日期”这个最刺激，呵呵。</p>
<p>“假如sprint计划会议接近尾声，但仍然没有得出sprint目标或者sprint backlog，这时该怎么办？我们要打断它么？还是再延期一个小时？或者到时间就结束会议，然后明天继续？这种事情会一再发生，尤其是在新团队身上。你会怎么做？我不知道。但我们的做法是什么？嗯……我通常会直接打断会议，中止它。”</p>
<p>“几乎每次sprint计划会议都要确定sprint目标。Sprint目标需要回答这个根本的问题，“我们为什么要进行这个sprint？为什么我们不直接放假算了？””</p>
<p>“在大多数sprint 计划会议上，大家都会讨论产品 backlog中的故事细节。对故事进行估算、重定优先级、进一步确认细节、拆分，等等都会在会议上完成。<br />
我们是怎样实际操作的呢？要想收到好的效果，不妨创建一些索引卡，把它们放到墙上（或一张大桌子上）。”</p>
<p>&#8211; 一个Backlog一张纸质卡片，听起来不错，很直观，又让大家获得几个小时离开电脑的时间。</p>
<p>“在sprint演示会议上，团队自豪地演示了一个新特性，但产品负责人却皱起眉头，“呃，看上去不错，但这不是我要的！”发生这种事情可真是糟透了！<br />
怎样才能让产品负责人和团队对故事有同样的理解？或者保证所有的团队成员对每个故事都有同样的理解？嗯，这可没法做到。不过还是有些简单技术，可以识别出最明显的误解。最简单的办法就是确保每个故事的所有字段都被填满”</p>
<p>“注意——我们在实践TDD（测试驱动开发），所以几乎每个故事的第一个任务都是“编写一个失败的测试”，而最后一个任务是“重构”（提高代码的可读性，消除重复）。”</p>
<p>&#8211; 我们不做TDD，但把“重构”作为最后一个任务也是不错的哈。</p>
<p>“这有个很复杂的问题：技术故事。或者叫做非功能性条目，或者你想叫它什么都行。例如：安装持续构建服务器、重构DAO 层、升级 Jira”</p>
<p>&#8211; 这段太长了，但这个问题太重要，很多技术经理都非常关注，所以还是看原文去吧。在P54</p>
<p>“我们要让整个公司了解我们在做些什么，这件事情至关重要。否则其他人就会发出抱怨，甚或对我们的工作做出臆断。”</p>
<p>&#8211; 这段也太重要了！但是也太长，归纳一下就是：一个展示项目信息的网页、sprint开始和结束都群发邮件、将Sprint信息打印出来贴到开发团队墙上。</p>
<p>“我们发现管理sprint backlog最有效的形式——挂在墙上的任务板！<br />
找一面尚未使用或者充满无用信息（如公司logo、陈旧图表或者丑陋的涂鸦）的大墙。清理墙壁（除非不得已才去请求别人许可）。在墙上贴上一张很大很大的纸（至少2&#215;2平方米，大团队需要3&#215;2平方米）。然后这样规划：。。。。。”</p>
<p>&#8211; 又是“纸质”的东西，嗯，我喜欢纸质的和写在白板上的。原因嘛，还是它可以让我远离电脑，呵呵。</p>
<p>“嘿，该怎样进行跟踪呢？在这种模型中，如果必须跟踪的话，那我能提供的最佳方式，就是每天给任务板拍一张数码照片。我有时也这样干，但一直没用到这些照片。如果你确实需要跟踪任务进度，任务板这种解决方案可能就不太适合你。<br />
不过我建议你应该试着去评估一下，对sprint进行细节跟踪能带给你多大价值。Sprint完成以后，可以工作的代码已被交付，文档也被check in，那还有谁会真的关心sprint的第5天完成了多少故事呢？又有谁会真的关心“为Deposit编写失败测试”曾经的估算量是多少？”</p>
<p>&#8211; 我很同意。一个Sprint只有2、3周的时间，这期间的事情让项目组内部自己搞定吧，外部的人那么不放心干什么。</p>
<p>“在安排座位、布置桌椅这方面，有一件事情怎么强调也不为过。<br />
让团队坐在一起！<br />
说的更清楚一点，我说的是<br />
让团队坐在一起！”</p>
<p>“我们的每日例会跟书中的几乎没啥两样。它们每天都会在同一个地方，同一个时间进行。一般我们都是开站立会议，以防止持续时间超过15分”</p>
<p>&#8211; 我也喜欢站着开会，可以活动一下身体。当然，也能远离电脑。</p>
<p>“一定要做Sprint演示。让演示关注于业务层次，不要管技术细节。注意力放在“我们做了什么”，而不是“我们怎么做的”。不要花太多时间准备演示，尤其是不要做花里胡哨的演讲。把那些玩意儿扔一边去，集中精力演示可以实际工作的代码。”</p>
<p>“在有关回顾的种种一切中，最重要的就是确保回顾能够进行。由于某些原因，团队常常都不太愿意做回顾。如果不给他们点温柔的刺激，我们的大多数团队都会跳过回顾。说句实话，我认为回顾是Scrum中第二重要的事件（最重要的是sprint计划会议），因为这是你做改进的最佳时机！”</p>
<p>“Sprint之间的休整。我们会力求保证不在同一天举行sprint回顾和下一个sprint计划会议。”</p>
<p>“在绝大多数层面上组合使用XP与Scrum，我们都已经尝试过了。有些XP实践直接被Scrum解决掉了，可以被视作二者的重叠。如“整体团队”，“坐在一起”，“故事”和“计划游戏”。在这些情况下我们就直接使用了Scrum。<br />
我们近来开始在一个团队中实施结对编程。效果相当好。虽然其他团队大多数还没有进行太多尝试，但在一个团队中使用了几个sprint之后，我已经有了很高的热情去指导其他团队进行试用。”</p>
<p>“测试驱动开发（TDD）阿门！对我来说，它比Scrum和XP还要重要。你可以拿走我的房子、我的电视还有我的狗，但不要试着让我停止使用TDD！”</p>
<p>&#8211;嗯，我还真没做过TDD</p>
<p>“学到的一课：如果你深陷手工回归测试的泥潭，打算让它自动化执行，最好还是放弃吧（除非做起来特别简单）。首先还是应该想办法简化手工回归测试。然后再考虑将真正的测试变成自动化执行。”</p>
<p>“我们在实施Scrum的时候，所做的第一件事情就是打乱特定于组件的团队（方式1），创建跨组件的团队（方式2）。它减少了诸如“我们没法完成这个条目，因为我们在等server那帮家伙完成他们的工作”之类的情况发生。不过，要是有很强烈的需求，我们也会临时创建针对特定组件展开工作的团队。”</p>
<p>&#8211; 嗯，我也喜欢让一个团队内部搞定尽可能多的事情。跨团队沟通就是麻烦</p>
<p>“每周的全体（嗯，所有参与开发的人）会议。时长15分钟。<br />
什么？15分钟？全体参加？每一个产品所包括的全部团队中的所有人都会参加？这能行么？<br />
是的，能行。只要你（或是其他主持会议的人）严格限定会议的时间不要过长。”</p>
<p>&#8211; 开大会，挺好的。信息要在团队中充分共享嘛。</p>
<p>最后总结一下在实施scrum的团队中的会议有哪些：</p>
<ul>
<li>Sprint计划会（4小时）</li>
<li>Sprint日例会（15分钟）</li>
<li>Sprint演示会（30分钟？）</li>
<li>Sprint回顾会（1、2小时）</li>
<li>研发部周例会（大会）（15分钟）</li>
</ul>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2011/07/zhankeng/" title="知识整理和分享提纲 (July 22, 2011)">知识整理和分享提纲</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2010/07/wurfl-user-agent/" title="推荐wurfl机型库 (July 2, 2010)">推荐wurfl机型库</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/10/scrum-xp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>让Ultraledit成为python开发环境</title>
		<link>http://www.lixinyang.com/2009/07/ultraledit-python/</link>
		<comments>http://www.lixinyang.com/2009/07/ultraledit-python/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 04:19:53 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=341</guid>
		<description><![CDATA[开始学习Python之后一直是用linux下的vi，周日在自己的pc也安装了python，本机也有开发环境了。下面讲一下如何配置自己的Ultraledit使它方便的开发python。 设置语法高亮显示 1、去http://www.ultraedit.com/downloads/extras.html下载wordfile，具体地址是：http://www.ultraedit.com/files/wf/python26.uew 2、编辑你的Ultraledit的wordfile，把上面文件的内容添加到wordfile的最后。你Ultraledit的wordfile通常在： C:\Program Files\IDM Computer Solutions\UltraEdit-32\WORDFILE.TXT 这样语法高亮就设置好了。 设置在Ultraledit中运行python 在Ultraledit的菜单：高级&#8211;》工具配置里配置运行python，我的配置如下（记住，可以用快捷键ctrl+shift+0直接执行，比点鼠标快）： 将.py文件关联到Ultraledit 如果你想双击.py文件就用Ultraledit打开的话你可以将.py文件关联到Ultraledit。 这样Ultraledit就被设置为python的开发环境了。 Related posts 开始学习Python (2) 给nginx和haproxy负载均衡集群里添加backup服务器 (0) Python VS Ruby (0) 软件开发很不同了 (1) 软件小白鼠 (0)]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lixinyang.com/2009/07/09/kaishi-xuexi-python/" target="_blank">开始学习Python</a>之后一直是用linux下的vi，周日在自己的pc也安装了python，本机也有开发环境了。下面讲一下如何配置自己的Ultraledit使它方便的开发python。</p>
<p><strong>设置语法高亮显示</strong></p>
<p>1、去http://www.ultraedit.com/downloads/extras.html下载wordfile，具体地址是：http://www.ultraedit.com/files/wf/python26.uew</p>
<p>2、编辑你的Ultraledit的wordfile，把上面文件的内容添加到wordfile的最后。你Ultraledit的wordfile通常在： C:\Program Files\IDM Computer Solutions\UltraEdit-32\WORDFILE.TXT</p>
<p>这样语法高亮就设置好了。</p>
<p><strong>设置在Ultraledit中运行python</strong></p>
<p>在Ultraledit的菜单：高级&#8211;》工具配置里配置运行python，我的配置如下（记住，可以用快捷键ctrl+shift+0直接执行，比点鼠标快）：</p>
<p><img class="alignnone size-full wp-image-342" title="ue" src="http://www.lixinyang.com/wp-content/uploads/2009/07/ue.jpg" alt="ue" width="441" height="399" /></p>
<p><strong>将.py文件关联到Ultraledit</strong></p>
<p>如果你想双击.py文件就用Ultraledit打开的话你可以将.py文件关联到Ultraledit。</p>
<p>这样Ultraledit就被设置为python的开发环境了。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/07/kaishi-xuexi-python/" title="开始学习Python (July 9, 2009)">开始学习Python</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/08/python-vs-ruby/" title="Python VS Ruby (August 23, 2010)">Python VS Ruby</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2011/02/ruanjian-xiaobaishu/" title="软件小白鼠 (February 10, 2011)">软件小白鼠</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/07/ultraledit-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始学习Python</title>
		<link>http://www.lixinyang.com/2009/07/kaishi-xuexi-python/</link>
		<comments>http://www.lixinyang.com/2009/07/kaishi-xuexi-python/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 04:20:24 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=333</guid>
		<description><![CDATA[有道是，无志者常立志，有志者立志长！为了监督自己，今天公开宣布开始学习Python，作为Java的辅助开发语言。 和Java亲密接触10来年之后终有一些审美疲劳，加之对java的开发部署效率深感不满，所以决定挑选一个语言来学习，作为Java之外的补充。相对于Java这样的编译语言，那自然是挑选一个写起来爽利的脚本语言了。PHP、Ruby、Python是三个当红之选，最终挑选了Python。原因嘛，PHP写出来的程序太乱，Ruby是日本人写的，所以就剩下Python了。当然，最主要的是有同学用Python好几年了，遇到问题可以有人帮我搞定！ 好了，从今天开始，抓空学习Python。 Related posts 让Ultraledit成为python开发环境 (0) 给nginx和haproxy负载均衡集群里添加backup服务器 (0) Python VS Ruby (0) 软件开发很不同了 (1) 软件小白鼠 (0)]]></description>
			<content:encoded><![CDATA[<p>有道是，无志者常立志，有志者立志长！为了监督自己，今天公开宣布开始学习Python，作为Java的辅助开发语言。</p>
<p>和Java亲密接触10来年之后终有一些审美疲劳，加之对java的开发部署效率深感不满，所以决定挑选一个语言来学习，作为Java之外的补充。相对于Java这样的编译语言，那自然是挑选一个写起来爽利的脚本语言了。PHP、Ruby、Python是三个当红之选，最终挑选了Python。原因嘛，PHP写出来的程序太乱，Ruby是日本人写的，所以就剩下Python了。当然，最主要的是有<a href="http://lianqiao.spaces.live.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/lianqiao.spaces.live.com/?referer=');">同学</a>用Python好几年了，遇到问题可以有人帮我搞定！</p>
<p>好了，从今天开始，抓空学习Python。</p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/10/nginx-haproxy-backup/" title="给nginx和haproxy负载均衡集群里添加backup服务器 (October 21, 2009)">给nginx和haproxy负载均衡集群里添加backup服务器</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/08/python-vs-ruby/" title="Python VS Ruby (August 23, 2010)">Python VS Ruby</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2011/02/ruanjian-xiaobaishu/" title="软件小白鼠 (February 10, 2011)">软件小白鼠</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/07/kaishi-xuexi-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>软件开发很不同了</title>
		<link>http://www.lixinyang.com/2009/03/software-develop/</link>
		<comments>http://www.lixinyang.com/2009/03/software-develop/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 00:55:23 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[人生体验]]></category>
		<category><![CDATA[职业生涯]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/?p=233</guid>
		<description><![CDATA[接触软件开发也不算太久，刚过十年；不每天写代码也不算 太久，两年的事情，可软件开发的进展却还是让我时常吃惊。和我学习软件开发的时候，和我自己初次做软件开发的时候很不同了。 昨天技术团队技术交流会，王征介绍了CakePHP web框架，几行代码，没有配置，一个包含了增删改查功能而且不算太丑的页面（其实比我写的要好看很多）就可以用了。Web开发已经和写几个静态页就收费上万的时候不可同日而语了，而那其实也不过是10年前的事情。而各种CMS、BBS、Maillist、CRM等等等等开源软件，也让我们想不到什么东西是需要自己做的了，呵呵。 那么软件工程师们，IT业者们的价值在哪里？在降低吗？依我看没有。我们的价值在于两处： 新的技术都是要人去应用的。过去一直说国内的新技术使用至少比国外晚一年，这在改变。 相比于成型的软件系统，更大量的是变化万千特性各异的业务需求。没有被电子化和规范化的东西是主流，而且恐怕一直会是主流。 Related posts 音乐魅力 (1) 那些网络对外汉语教学的探路者现在怎么样了？ (4) 迎着太阳 (2) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0)]]></description>
			<content:encoded><![CDATA[<p>接触软件开发也不算太久，刚过十年；不每天写代码也不算 太久，两年的事情，可软件开发的进展却还是让我时常吃惊。和我学习软件开发的时候，和我自己初次做软件开发的时候很不同了。</p>
<p>昨天技术团队技术交流会，王征介绍了<a href="http://cakephp.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">CakePHP </a>web框架，几行代码，没有配置，一个包含了增删改查功能而且不算太丑的页面（其实比我写的要好看很多）就可以用了。Web开发已经和写几个静态页就收费上万的时候不可同日而语了，而那其实也不过是10年前的事情。而各种CMS、BBS、Maillist、CRM等等等等开源软件，也让我们想不到什么东西是需要自己做的了，呵呵。</p>
<p>那么软件工程师们，IT业者们的价值在哪里？在降低吗？依我看没有。我们的价值在于两处：</p>
<ol>
<li>新的技术都是要人去应用的。过去一直说国内的新技术使用至少比国外晚一年，这在改变。</li>
<li>相比于成型的软件系统，更大量的是变化万千特性各异的业务需求。没有被电子化和规范化的东西是主流，而且恐怕一直会是主流。</li>
</ol>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2010/03/music/" title="音乐魅力 (March 28, 2010)">音乐魅力</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/03/chinese-learnin/" title="那些网络对外汉语教学的探路者现在怎么样了？ (March 16, 2009)">那些网络对外汉语教学的探路者现在怎么样了？</a> (4)</li>
	<li><a href="http://www.lixinyang.com/2009/03/sun-rising/" title="迎着太阳 (March 26, 2009)">迎着太阳</a> (2)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2009/03/software-develop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>推荐一个朋友写的Java开源数据库缓存系统</title>
		<link>http://www.lixinyang.com/2008/07/java-db-cache/</link>
		<comments>http://www.lixinyang.com/2008/07/java-db-cache/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 03:13:58 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.lixinyang.com/2008/07/23/java-db-cache/</guid>
		<description><![CDATA[原文见：原创，可支持1亿pv/天的数据库缓存系统，首次开源啦！ 这个系统的作者是我以前的同事，很好的朋友，很高兴他把自己研发的Java数据库缓存系统开源出来，也希望朋友们多多参考，多多宣传。 转一部分他介绍文章里的内容： 总结：这种缓存思路可以存储大规模的列表，缓存命中率极高，因此可以承受超大规模的应用，但是需要技术人员根据自身业务逻辑来配置需要做散列的字段，一般用一个表的索引键做散列（注意顺序，最散的字段放前面），假设以userId为例，可以存储N个用户的M种列表，如果某个用户的相关数据发生变化，其余N-1个用户的列表缓存纹丝不动。以上说明的都是如何缓存列表，缓存长度和缓存列表思路完全一样，如缓存象select count(*) from T where topicId=2008这样的长度，也是放到topicId=2008这个散列Map中。如果再配合好使用mysql的内存表和memcached，加上F5设备做分布式负载均衡，该系统对付像1000万IP/天这种规模级的应用都足够了，除搜索引擎外一般的应用网站到不了这种规模。   再次申明：系统到底是不是强大不在系统本身而在于使用该系统的人！！！   这个缓存系统是我和同事几年经验的总结，看似简单，其实也没那么简单，把它作为开源有下面几个目的：第一，真的希望有很多人能用它；第二：希望更多的人能够完善和改进它；第三：希望大家能聚到一起为通用高效数据库缓存构架作出贡献，毕竟，数据库操作是各种应用最常用的操作，也是最容易产生性能瓶颈的地方。   Zip包中包含了配置方法和测试用的jsp，只要把它配置成一个web应用就可以快速调试并看到缓存的力量了，文档和下载地址是http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html。   配置说明文件在docs/开始配置.txt里有说明。   最后啰嗦一句，如果大家真想支持我、支持中国人开源项目，请把该文贴到自己的博客中，记得包含文档的下载链接，thank you and Good luck。 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 &#8230; <a href="http://www.lixinyang.com/2008/07/java-db-cache/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>原文见：<a href="http://groups.csdn.net/shedewang_db_cache/topic/53873edf-91b0-4a1f-8983-15eda1021e44.aspx" target="_blank" onclick="pageTracker._trackPageview('/outgoing/groups.csdn.net/shedewang_db_cache/topic/53873edf-91b0-4a1f-8983-15eda1021e44.aspx?referer=');"><strong><span id="ctl00_ctl00_ctl00_CPH_Content_CPH_Content_CPH_Content_lt_TopicSubject">原创，可支持1亿pv/天的数据库缓存系统，首次开源啦！</span></strong></a></p>
<p>这个系统的作者是我以前的同事，很好的朋友，很高兴他把自己研发的Java数据库缓存系统开源出来，也希望朋友们多多参考，多多宣传。</p>
<p>转一部分他介绍文章里的内容：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><font size="3"><span style="font-family: 宋体">总结：这种缓存思路可以存储大规模的列表，缓存命中率极高，因此可以承受超大规模的应用，但是需要技术人员根据自身业务逻辑来配置需要做散列的字段，一般用一个表的索引键做散列（注意顺序，最散的字段放前面），假设以</span><span><font face="Times New Roman">userId</font></span><span style="font-family: 宋体">为例，可以存储</span><span><font face="Times New Roman">N</font></span><span style="font-family: 宋体">个用户的</span><span><font face="Times New Roman">M</font></span><span style="font-family: 宋体">种列表，如果某个用户的相关数据发生变化，其余</span><span><font face="Times New Roman">N-1</font></span><span style="font-family: 宋体">个用户的列表缓存纹丝不动。以上说明的都是如何缓存列表，缓存长度和缓存列表思路完全一样，如缓存象</span><span><font face="Times New Roman">select count(*) from T where  topicId=2008</font></span><span style="font-family: 宋体">这样的长度，也是放到</span><span><font face="Times New Roman">topicId=2008</font></span><span style="font-family: 宋体">这个散列</span><span><font face="Times New Roman">Map</font></span><span style="font-family: 宋体">中。如果再配合好使用</span><span><font face="Times New Roman">mysql</font></span><span style="font-family: 宋体">的内存表和</span><span><font face="Times New Roman">memcached</font></span><span style="font-family: 宋体">，加上</span><span><font face="Times New Roman">F5</font></span><span style="font-family: 宋体">设备做分布式负载均衡，该系统对付像</span><span><font face="Times New Roman">1000</font></span><span style="font-family: 宋体">万</span><span><font face="Times New Roman">IP/</font></span><span style="font-family: 宋体">天这种规模级的应用都足够了，除搜索引擎外一般的应用网站到不了这种规模。</span></font></em></p>
<p><em><span><font size="3" face="Times New Roman"> </font></span></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><span style="font-family: 宋体"><font size="3">再次申明：系统到底是不是强大不在系统本身而在于使用该系统的人！！！</font></span></em></p>
<p><em><span><font size="3" face="Times New Roman"> </font></span></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><span style="font-family: 宋体"><font size="3">这个缓存系统是我和同事几年经验的总结，看似简单，其实也没那么简单，把它作为开源有下面几个目的：第一，真的希望有很多人能用它；第二：希望更多的人能够完善和改进它；第三：希望大家能聚到一起为通用高效数据库缓存构架作出贡献，毕竟，数据库操作是各种应用最常用的操作，也是最容易产生性能瓶颈的地方。</font></span></em></p>
<p><em><span><font size="3" face="Times New Roman"> </font></span></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><font size="3"><span><font face="Times New Roman">Zip</font></span><span style="font-family: 宋体">包中包含了配置方法和测试用的</span><span><font face="Times New Roman">jsp</font></span><span style="font-family: 宋体">，只要把它配置成一个</span><span><font face="Times New Roman">web</font></span><span style="font-family: 宋体">应用就可以快速调试并看到缓存的力量了，文档和下载地址是</span><span><a href="http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html" onclick="pageTracker._trackPageview('/outgoing/shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html?referer=');"><font face="Times New Roman">http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html</font></a></span><span style="font-family: 宋体">。</span></font></em></p>
<p><em><span><font size="3" face="Times New Roman"> </font></span></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><font size="3"><span style="font-family: 宋体">配置说明文件在</span><span><font face="Times New Roman">docs/</font></span><span style="font-family: 宋体">开始配置</span><span><font face="Times New Roman">.txt</font></span><span style="font-family: 宋体">里有说明。</span></font></em></p>
<p><em><span><font size="3" face="Times New Roman"> </font></span></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><em><font size="3"><span style="font-family: 宋体">最后啰嗦一句，如果大家真想支持我、支持中国人开源项目，请把该文贴到自己的博客中，记得包含文档的下载</span><span style="font-family: 宋体">链接，</span><span><font face="Times New Roman">thank you  and Good luck</font></span><span style="font-family: 宋体">。</span></font></em></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2008/07/java-db-cache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>企业IT系统这回事儿</title>
		<link>http://www.lixinyang.com/2007/12/about-it-system/</link>
		<comments>http://www.lixinyang.com/2007/12/about-it-system/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 10:43:01 +0000</pubDate>
		<dc:creator>李新阳</dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://reggie.cn/2007/12/14/%e4%bc%81%e4%b8%9ait%e7%b3%bb%e7%bb%9f%e8%bf%99%e5%9b%9e%e4%ba%8b%e5%84%bf/</guid>
		<description><![CDATA[分享我在开发和使用企业内部IT系统六年多以来的一些感受。 第一，在我们越来越了解IT系统所在来的好处的时候，我们更应该知道IT系统在大部分时候都不是最佳解决方案，大部分时候都不是。IT系统一般情况下只是将我们已经做好的事情做的更好，而不是将我们做的不好的事情做好。 第二，世界上开发出来的IT系统有一半以上在开发出来之后从来没有被使用过。这是投资者的悲哀，是设计者的悲哀，还是开发者的悲哀？所以我的目标就是：开发出来的每个东西都有用。 所以我就是一个砍开发需求的人。 上面的观点均来自于很有局限的个人经历和观察 Related posts 软件开发很不同了 (1) 转载：消除小型 Web 站点单点故障(Single Point of Failure) (3) 转载：Foursquare 长达 11 小时的宕机 (0) 让Ultraledit成为python开发环境 (0) 腾讯社区开放平台 (0)]]></description>
			<content:encoded><![CDATA[<p><font color="#0c0c0c">分享我在开发和使用企业内部IT系统六年多以来的一些感受。</font></p>
<p dir="ltr" align="left"><span><font color="#0c0c0c" size="2">第一，在我们越来越了解IT系统所在来的好处的时候，我们更应该知道IT系统在大部分时候都不是最佳解决方案，大部分时候都不是。IT系统一般情况下只是将我们已经做好的事情做的更好，而不是将我们做的不好的事情做好。</font></span></p>
<p dir="ltr" align="left"><span></span><font color="#0c0c0c"> </font></p>
<p dir="ltr" align="left"><span><font color="#0c0c0c" size="2">第二，世界上开发出来的IT系统有一半以上在开发出来之后从来没有被使用过。这是投资者的悲哀，是设计者的悲哀，还是开发者的悲哀？所以我的目标就是：开发出来的每个东西都有用。</font></span></p>
<p dir="ltr" align="left"><span></span></p>
<p dir="ltr" align="left"><span>所以我就是一个砍开发需求的人。</span></p>
<p dir="ltr" align="left"><span></span></p>
<p dir="ltr" align="left"><span>上面的观点均来自于很有局限的个人经历和观察</span></p>
<p><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=791745583130878300&amp;page=RSS%3a+%e4%bc%81%e4%b8%9aIT%e7%b3%bb%e7%bb%9f%e8%bf%99%e5%9b%9e%e4%ba%8b%e5%84%bf&amp;referrer=" border="0" height="1" width="1" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=reggielee.spaces.live.com&amp;GT1=ReggieLee" style="position: absolute" height="0" width="0" /></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lixinyang.com/2009/03/software-develop/" title="软件开发很不同了 (March 25, 2009)">软件开发很不同了</a> (1)</li>
	<li><a href="http://www.lixinyang.com/2009/11/dan-dian-guzhang/" title="转载：消除小型 Web 站点单点故障(Single Point of Failure) (November 27, 2009)">转载：消除小型 Web 站点单点故障(Single Point of Failure)</a> (3)</li>
	<li><a href="http://www.lixinyang.com/2010/10/foursquare-mongodb-dangji/" title="转载：Foursquare 长达 11 小时的宕机 (October 8, 2010)">转载：Foursquare 长达 11 小时的宕机</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2009/07/ultraledit-python/" title="让Ultraledit成为python开发环境 (July 13, 2009)">让Ultraledit成为python开发环境</a> (0)</li>
	<li><a href="http://www.lixinyang.com/2010/09/qq-opensns/" title="腾讯社区开放平台 (September 17, 2010)">腾讯社区开放平台</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lixinyang.com/2007/12/about-it-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

