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

<channel>
	<title>海王星</title>
	<atom:link href="http://blog.boatwinds.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.boatwinds.com</link>
	<description>神恩如海</description>
	<lastBuildDate>Mon, 13 Feb 2012 09:01:17 +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>生活，生活</title>
		<link>http://blog.boatwinds.com/life_life/</link>
		<comments>http://blog.boatwinds.com/life_life/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 09:01:01 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=944</guid>
		<description><![CDATA[去超市随意购物品，挑瓶比较顺眼的酒，心情不错时胡乱调制一番，小饮酌情。 常与朋友网上吹水，聊些各自与朋友们的状况，不时约出来谈天说地，当浮一大白。 看着家里的东西逐渐变乱变脏，于是挑个时间，卷起衣袖，整理一翻，于是小窝又变得干净整齐。 待闷了，则离开小窝，只是闲逛。看清晨的雾气，晒午后的阳光，听黄昏的闹市，吹夜里的清风。 …… 这些似乎都不难。 只是似乎自己都已经遗忘，甚至可悲地需要学习着去做，甚至将生活当成一种投资。 …… 我一直告诫自己，生活是目的，而不是过程，更不是工具。我一直在想，人的毕生追求说不定就只是一种生活形态。我一直认为，所谓事业健康爱情家庭，都不过是生活的一部分。 只是似乎，反被生活压得有些喘不过气，反而遗忘了不少东西，比如，“怎么生活”。就算，我的目标很简单，只是为了更好的生活。 生活似乎又不似逆水行舟，似乎只要满足于现状，总能很好地继续下去？ 只是又似乎生活实在太容易被些事情打断、甚至撕扯得支离破碎。 可能这就是为什么总有这么些像我这样的人，总想获取足够的力量，来真正地去保护自己的美好生活。所谓保护自己与身边的人，也只是自己生活的一部分。人大抵都是自私的。 只是，一直这样下去，大概是没有尽头的。人的野心只会越来越大。 告诉自己，适可而止。 …… “我们都觉得，生活没那么严重，做自己反而比较心安理得。” “不去想自由，反而更轻松，愿意感动就是种享受。” “生活、生活，会快乐也会寂寞。生活、生活，明天我们好好地过。”]]></description>
			<content:encoded><![CDATA[<p>去超市随意购物品，挑瓶比较顺眼的酒，心情不错时胡乱调制一番，小饮酌情。</p>
<p>常与朋友网上吹水，聊些各自与朋友们的状况，不时约出来谈天说地，当浮一大白。</p>
<p>看着家里的东西逐渐变乱变脏，于是挑个时间，卷起衣袖，整理一翻，于是小窝又变得干净整齐。</p>
<p>待闷了，则离开小窝，只是闲逛。看清晨的雾气，晒午后的阳光，听黄昏的闹市，吹夜里的清风。<br />
<span id="more-944"></span><br />
……</p>
<p>这些似乎都不难。</p>
<p>只是似乎自己都已经遗忘，甚至可悲地需要学习着去做，甚至将生活当成一种投资。</p>
<p>……</p>
<p>我一直告诫自己，生活是目的，而不是过程，更不是工具。我一直在想，人的毕生追求说不定就只是一种生活形态。我一直认为，所谓事业健康爱情家庭，都不过是生活的一部分。</p>
<p>只是似乎，反被生活压得有些喘不过气，反而遗忘了不少东西，比如，“怎么生活”。就算，我的目标很简单，只是为了更好的生活。</p>
<p>生活似乎又不似逆水行舟，似乎只要满足于现状，总能很好地继续下去？</p>
<p>只是又似乎生活实在太容易被些事情打断、甚至撕扯得支离破碎。</p>
<p>可能这就是为什么总有这么些像我这样的人，总想获取足够的力量，来真正地去保护自己的美好生活。所谓保护自己与身边的人，也只是自己生活的一部分。人大抵都是自私的。</p>
<p>只是，一直这样下去，大概是没有尽头的。人的野心只会越来越大。</p>
<p>告诉自己，适可而止。</p>
<p>……</p>
<p>“我们都觉得，生活没那么严重，做自己反而比较心安理得。”</p>
<p>“不去想自由，反而更轻松，愿意感动就是种享受。”</p>
<p>“生活、生活，会快乐也会寂寞。生活、生活，明天我们好好地过。”</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/life_life/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backbone框架浅淡</title>
		<link>http://blog.boatwinds.com/backbone_preview/</link>
		<comments>http://blog.boatwinds.com/backbone_preview/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 15:59:10 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[开发]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[架构]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=932</guid>
		<description><![CDATA[最近用Backbone用得很多，谈下我的一些感受。 首先，Backbone是什么东西？ Backbone是这么定位自己的：它对一些重Javascript应用（javascript-heavy application）提供了结构支撑。 这结构支撑的核心组件是：有键值模型支持的Model、有丰富可枚举操作的Collection，和宣言式事件声明的View。 具体的介绍有豆瓣的MVC实践的PPT：http://www.slideshare.net/taobaoued/mvc-8584291 Backbone的确是个好东西，他有着很多优点： underscore完整实用的编程API支持 各类型组件良好的封装接口 集合化对象操作，这方面跟underscore配合是神器 全事件化操作，发挥JS的优势 默认对RESTFUL接口的全面支持与扩展接口 对微框架支持很好，主要是jQuery和mootools。 （而且可以随便进行扩展与改写，里面的模块化与解耦是做得很赞的 ） 局限 可惜，必然不会所有人都喜欢Backbone。 因为它的思路很偏向于架构师思维，的确可以做到极高的可维护性，但却使得编码效率有所降低，而且入门门槛会比较高。 它的门槛主要在于，Javascript，和事件化的面向对象机制。 个人感觉，如果没了事件化的支持，那Backbone就只是堆麻烦的条条框框，没有了任何的价值。 所以…… 对于只关注于算法、语言结构优化、传输优化、浏览器渲染这类的前端程序员来说，他会不喜欢这么多的限制，而只想用原生的方式，因为那样能完整地对计算机处理进行控制； 对于只关注于语义化、新标准、风格系统、视觉展现、交互设计这类的前端设计师来说，他也会不喜欢，因为可能HTML、基于jQuery的JS对他们来说已经很麻烦，而对象化编程对于他们来说不是同一个次元的东西。 而对于纯粹的后端程序员、云端架构师、DBA或是运维人员什么的来说，也许这些MVC架构、事件模型什么的他们会很清楚，可是……GUI是什么鬼东西？ 还好，前端的人们跨界的也是特别多的。而这种架构基础，对于比较大规模的复杂交互的应用来说，肯定是不可或缺的。 对比 就我的经验而言，这应该是——应用结构支撑型框架。 他只是一个支撑，在这个支撑下GUI组件和模型可以有比较好的分层与接口，也可以以事件地方式比较好的组织他们之间的交互。 它跟其它框架不同： 比如jQuery,mootools,prototype，这类属于DOM及兼容性框架，是WEB应用的底层框架； 而像EXTJS,jQueryUI, dojo这类属于GUI框架，是极其高层的框架，代价也就是极多的代码量和比较高的学习成本，当然好处也很明显，上手了就能马上做出应用，而不用再去研究什么HTML/CSS/兼容性/各种细节实现。 它也不是具体的库： 现在多数的库会写好调用并接进jQuery.prototype，以便 DOM 直接进行调用，或是提供特定业务的封装接口。如果硬要说库的话，Backbone里面的router会比较像一个具体业务的实现库，提供了WEB应用对hash的路由，能部分解决AJAX造成的SEO问题。只是个人感觉它还是不太够完美，只支持path而没原生的query支持。这个可能也是见仁见智吧。 总之，现在WEB端的东西算是越来越百花齐放了，这真是让我心花怒放啊！]]></description>
			<content:encoded><![CDATA[<p>最近用Backbone用得很多，谈下我的一些感受。</p>
<div class="wp-caption aligncenter" style="width: 461px"><img src="http://documentcloud.github.com/backbone/docs/images/backbone.png" alt="" width="451" height="80" /><p class="wp-caption-text">Backbone.JS</p></div>
<h2>首先，Backbone是什么东西？</h2>
<p><a href="http://documentcloud.github.com/backbone/">Backbone</a>是这么定位自己的：它对一些重Javascript应用（javascript-heavy application）提供了<strong>结构支撑</strong>。</p>
<p><span id="more-932"></span></p>
<p>这结构支撑的核心组件是：有键值模型支持的Model、有丰富可枚举操作的Collection，和宣言式事件声明的View。</p>
<p>具体的介绍有豆瓣的MVC实践的PPT：<a href="http://www.slideshare.net/taobaoued/mvc-8584291">http://www.slideshare.net/taobaoued/mvc-8584291</a></p>
<p>Backbone的确是个好东西，他有着很多优点：</p>
<ol>
<li>underscore完整实用的编程API支持</li>
<li>各类型组件良好的封装接口</li>
<li>集合化对象操作，这方面跟underscore配合是神器</li>
<li>全事件化操作，发挥JS的优势</li>
<li>默认对RESTFUL接口的全面支持与扩展接口</li>
<li>对微框架支持很好，主要是jQuery和mootools。 （而且可以随便进行扩展与改写，里面的模块化与解耦是做得很赞的 ）</li>
</ol>
<h2>局限</h2>
<p>可惜，必然不会所有人都喜欢Backbone。</p>
<p>因为它的思路很偏向于架构师思维，的确可以做到极高的可维护性，但却使得编码效率有所降低，而且入门门槛会比较高。</p>
<p>它的门槛主要在于，Javascript，和事件化的面向对象机制。</p>
<p>个人感觉，如果没了事件化的支持，那Backbone就只是堆麻烦的条条框框，没有了任何的价值。</p>
<p>所以……</p>
<p>对于只关注于算法、语言结构优化、传输优化、浏览器渲染这类的前端程序员来说，他会不喜欢这么多的限制，而只想用原生的方式，因为那样能完整地对计算机处理进行控制；</p>
<p>对于只关注于语义化、新标准、风格系统、视觉展现、交互设计这类的前端设计师来说，他也会不喜欢，因为可能HTML、基于jQuery的JS对他们来说已经很麻烦，而对象化编程对于他们来说不是同一个次元的东西。</p>
<p>而对于纯粹的后端程序员、云端架构师、DBA或是运维人员什么的来说，也许这些MVC架构、事件模型什么的他们会很清楚，可是……GUI是什么鬼东西？</p>
<p>还好，前端的人们跨界的也是特别多的。而这种架构基础，对于比较大规模的复杂交互的应用来说，肯定是不可或缺的。</p>
<h2>对比</h2>
<p>就我的经验而言，这应该是——<strong>应用结构支撑型框架。</strong></p>
<p>他只是一个支撑，在这个支撑下GUI组件和模型可以有比较好的分层与接口，也可以以事件地方式比较好的组织他们之间的交互。</p>
<p>它跟其它框架不同：</p>
<p>比如jQuery,mootools,prototype，这类属于DOM及兼容性框架，是WEB应用的底层框架；</p>
<p>而像EXTJS,jQueryUI, dojo这类属于GUI框架，是极其高层的框架，代价也就是极多的代码量和比较高的学习成本，当然好处也很明显，上手了就能马上做出应用，而不用再去研究什么HTML/CSS/兼容性/各种细节实现。</p>
<p>它也不是具体的库：</p>
<p>现在多数的库会写好调用并接进jQuery.prototype，以便 DOM 直接进行调用，或是提供特定业务的封装接口。如果硬要说库的话，Backbone里面的router会比较像一个具体业务的实现库，提供了WEB应用对hash的路由，能部分解决AJAX造成的SEO问题。只是个人感觉它还是不太够完美，只支持path而没原生的query支持。这个可能也是见仁见智吧。</p>
<p>总之，现在WEB端的东西算是越来越百花齐放了，这真是让我心花怒放啊！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/backbone_preview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如果四十岁——《红猪》观感</title>
		<link>http://blog.boatwinds.com/red-pig-watched/</link>
		<comments>http://blog.boatwinds.com/red-pig-watched/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:13:11 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[电影]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=926</guid>
		<description><![CDATA[看《红猪》之后，似懂非懂之后翻了些影评，感慨颇多。 宫崎骏先生说，人到了四十岁都会变成猪。 这好玩了，总有很多女人们却喜欢四十岁上下的大叔。为什么她们会喜欢猪？ 事实上从我对社会的认知看来，大叔们不见得就比青年们要有才，不见得就比青年们要强。他们或许适应了社会，但却多数正被潮流埋汰。就算是优秀的飞行员波哥也不例外。 大叔看似宠辱不惊，其实步履阑珊饱受生活的风吹雨打；大叔沉默少言，其实对社会已经无言以对；大叔离不开空荡荡的天空，只因他已经不知道在哪里才能安身立命。大叔很有闲情，只因为他已经没有了目标。 水浒中的王婆为西门庆总结泡妞五大要点，潘驴邓小闲，是说像潘安一样美感，驴大哥一样性感，钱多得跟汉代大富翁邓通似的，还要小心翼翼地呵护女人，对她们体贴有加，有较多的时间陪着女人的男人。 大叔的确很能符合。只是那岁月留下的痕迹让大叔多少变得胆小。 安家立命，或许男人的最终目标始终只有这俩——但我所见那么多的大叔们，立命似乎都不敢想了。或许立命对他们太奢侈，又或许他们自以为他们已经立命，接下来只要安家即可。（脑子突然就冒出听某大叔曾说的话，一等男人家外有家，二等男人家外有花……） 如果这是所谓的成熟稳重，那或许青年们，无论是普通还是文艺还是2B，都注定毛躁。 毛躁又如何？所以，有如乔布斯虽锐不可挡，但脾气却真是暴躁无比。那样的成熟稳重，不要也罢。 我要做有意义的冒险，我要失败，我也要成功。]]></description>
			<content:encoded><![CDATA[<p>看《红猪》之后，似懂非懂之后翻了些影评，感慨颇多。</p>
<p>宫崎骏先生说，人到了四十岁都会变成猪。</p>
<p>这好玩了，总有很多女人们却喜欢四十岁上下的大叔。为什么她们会喜欢猪？</p>
<p>事实上从我对社会的认知看来，大叔们不见得就比青年们要有才，不见得就比青年们要强。他们或许适应了社会，但却多数正被潮流埋汰。就算是优秀的飞行员波哥也不例外。</p>
<p><span id="more-926"></span></p>
<p>大叔看似宠辱不惊，其实步履阑珊饱受生活的风吹雨打；大叔沉默少言，其实对社会已经无言以对；大叔离不开空荡荡的天空，只因他已经不知道在哪里才能安身立命。大叔很有闲情，只因为他已经没有了目标。</p>
<p>水浒中的王婆为西门庆总结泡妞五大要点，潘驴邓小闲，是说像潘安一样美感，驴大哥一样性感，钱多得跟汉代大富翁邓通似的，还要小心翼翼地呵护女人，对她们体贴有加，有较多的时间陪着女人的男人。</p>
<p>大叔的确很能符合。只是那岁月留下的痕迹让大叔多少变得胆小。</p>
<p>安家立命，或许男人的最终目标始终只有这俩——但我所见那么多的大叔们，立命似乎都不敢想了。或许立命对他们太奢侈，又或许他们自以为他们已经立命，接下来只要安家即可。（脑子突然就冒出听某大叔曾说的话，一等男人家外有家，二等男人家外有花……）</p>
<p>如果这是所谓的成熟稳重，那或许青年们，无论是普通还是文艺还是2B，都注定毛躁。</p>
<p>毛躁又如何？所以，有如乔布斯虽锐不可挡，但脾气却真是暴躁无比。那样的成熟稳重，不要也罢。</p>
<p>我要做有意义的冒险，我要失败，我也要成功。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/red-pig-watched/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>胡说成熟</title>
		<link>http://blog.boatwinds.com/joking_mature/</link>
		<comments>http://blog.boatwinds.com/joking_mature/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 15:31:06 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=923</guid>
		<description><![CDATA[P.S. 胡乱说点什么吧。其实我还真怀念高中时的文思泉涌。 人总喜欢做些成熟不成熟的论断，可真要说个成熟的定义，估计很多人都说不出个所以然。只会给出一堆莫须有的论断，说成熟的人应该怎么怎么样。成熟的人就应该怎么样么？就应该给套上那么多条条框框？还是说，划地为牢的人才成熟？ 我想，成熟只需要对世界有相对够清晰的认知，能找到适合自己的步伐，并开始有所追求并有所行动。 我相信，我眼里的这成熟，其实是需要顿悟的。一昧活在惯性之下的人们根本谈不上成熟，但他们却能有很多很多的经验，然后试图把你拉到他们熟悉的那一小方土壤上，把你摔个狗啃屎。而没有顿悟，根本摆脱不了这些惯性。 我想，我的最大顿悟，就在于高中时的某一天，看自己过去的日记时，没有了对过去的摒弃或厌恶，取而代之的是以对等的姿态看待过去的自己，甚至与过去的自己对话。我发现，有时，现在的自己甚至不如过去的自己。于是，也因此学会珍惜，。 不断地向前迈进，从二局走出新塘，走到广工，走到腾讯……似乎我一直在挑战着迈向一个自己所不了解的更高层的世界，也因此失去很多同龄人会有的经历。不断地离开旧世界，前往新世界，的确挺寂寞的。 有时不禁想到那个猎人与军官的故事：军官问猎人，你为什么不去城市追求荣华富贵？猎人问，有了荣华富贵又如何？军官说，有了荣华富贵，你就可以做自己想做的事，比如悠闲享受灿烂阳光，比如偶尔出去打猎嬉戏。猎人笑：我现在不就已经这样了么？ 如果，如果刚开始我就能知道自己终点在哪，直接大踏步走到终点就此停下，那多好？可惜，那样的话，也许我会更不甘心，因为我知道世界远不止终点那一小块弹丸之地。这问题或许无解。也许也因此，才有那句话，男人因寂寞而优秀。 大多数人都没尝试改变，只是随波逐流。老实说，我觉得那些人未曾成熟却已衰老。]]></description>
			<content:encoded><![CDATA[<p>P.S. 胡乱说点什么吧。其实我还真怀念高中时的文思泉涌。</p>
<p>人总喜欢做些成熟不成熟的论断，可真要说个成熟的定义，估计很多人都说不出个所以然。只会给出一堆莫须有的论断，说成熟的人应该怎么怎么样。成熟的人就应该怎么样么？就应该给套上那么多条条框框？还是说，划地为牢的人才成熟？</p>
<p><span id="more-923"></span></p>
<p>我想，成熟只需要对世界有相对够清晰的认知，能找到适合自己的步伐，并开始有所追求并有所行动。</p>
<p>我相信，我眼里的这成熟，其实是需要顿悟的。一昧活在惯性之下的人们根本谈不上成熟，但他们却能有很多很多的经验，然后试图把你拉到他们熟悉的那一小方土壤上，把你摔个狗啃屎。而没有顿悟，根本摆脱不了这些惯性。</p>
<p>我想，我的最大顿悟，就在于高中时的某一天，看自己过去的日记时，没有了对过去的摒弃或厌恶，取而代之的是以对等的姿态看待过去的自己，甚至与过去的自己对话。我发现，有时，现在的自己甚至不如过去的自己。于是，也因此学会珍惜，。</p>
<p>不断地向前迈进，从二局走出新塘，走到广工，走到腾讯……似乎我一直在挑战着迈向一个自己所不了解的更高层的世界，也因此失去很多同龄人会有的经历。不断地离开旧世界，前往新世界，的确挺寂寞的。</p>
<p>有时不禁想到那个猎人与军官的故事：军官问猎人，你为什么不去城市追求荣华富贵？猎人问，有了荣华富贵又如何？军官说，有了荣华富贵，你就可以做自己想做的事，比如悠闲享受灿烂阳光，比如偶尔出去打猎嬉戏。猎人笑：我现在不就已经这样了么？</p>
<p>如果，如果刚开始我就能知道自己终点在哪，直接大踏步走到终点就此停下，那多好？可惜，那样的话，也许我会更不甘心，因为我知道世界远不止终点那一小块弹丸之地。这问题或许无解。也许也因此，才有那句话，男人因寂寞而优秀。</p>
<p>大多数人都没尝试改变，只是随波逐流。老实说，我觉得那些人未曾成熟却已衰老。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/joking_mature/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用Nginx搭建WSGI应用仓库</title>
		<link>http://blog.boatwinds.com/build_nginx_wsgi_depo/</link>
		<comments>http://blog.boatwinds.com/build_nginx_wsgi_depo/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 08:07:38 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[开发]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[uwsgi]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=912</guid>
		<description><![CDATA[首先，如果对这些名词不熟悉，就不用读下去了： nginx,python,uwsgi。 然后，如果还要疑问uwsgi+nginx怎么搭建，请先Google。 对于现在热门的易部署的WEB SERVER搭建方式，其实选择没多少：不外PHP与PYTHON。相信很多人都像我一样纠结在PHP与Python之间吧？ 其实相对来说，PYTHON还是比纯目录结构的PHP要难部署了许多，给调试带来了很多不方便。 但咱是谁？咱是程序员！无论是什么样的麻烦！都能用程序或策略变得简单！ 顺便吐个槽，或许，对程序员来说时间能解决的都不是问题，问题是没有时间……所以咱才搞出时空转换之类的概念来。 只要需求明确就好！ 那么，我的初衷就是：使用nginx与uwsgi这两个算比较常用的python应用部署软件来搞出一个能方便我直接以文件的方式部署服务器的地方。 其实方法也很简单，就是，在域名中使用正则表达式，然后将把script设为匹配的内容。 代码如下： server { listen 80 ; server_name ~(.*)\.py\.mydomain\.com$; location /{ uwsgi_pass unix:///tmp/uwsgi.sock; uwsgi_param UWSGI_PYHOME /path/to/py/home/; uwsgi_param UWSGI_CHDIR /path/to/uwsgi/apps/dir/; uwsgi_param UWSGI_SCRIPT $1; include uwsgi_params; } } 此外，uwsgi默认是不会自动重启的，所以就算添加了目录或是修改了文件，也不会立马体现在服务器上。 因此，需要在uwsgi中添加一个参数： touch-reload = /path/to/app/path/ 这样，每当APP目录下的文件有变动时，它就都会自动reload gracefully啦 似乎安全性容易出问题……假设别人知道你这里有啥脚本的话。但是，域名里本来对字符串的限制就多得数不清，又能怎样呢？ 这也只是个思路，其实在正则表达式里做些对字符串的限制，基本就万无一失了。]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">首先，如果对这些名词不熟悉，就不用读下去了： nginx,python,uwsgi。</span></p>
<p><span style="color: #ff0000;">然后，如果还要疑问uwsgi+nginx怎么搭建，请先Google。</span></p>
<p>对于现在热门的易部署的WEB SERVER搭建方式，其实选择没多少：不外PHP与PYTHON。相信很多人都像我一样纠结在PHP与Python之间吧？</p>
<p>其实相对来说，PYTHON还是比纯目录结构的PHP要难部署了许多，给调试带来了很多不方便。</p>
<p>但咱是谁？咱是程序员！无论是什么样的麻烦！都能用程序或策略变得简单！</p>
<p><span id="more-912"></span></p>
<p>顺便吐个槽，或许，对程序员来说时间能解决的都不是问题，问题是没有时间……所以咱才搞出时空转换之类的概念来。</p>
<p>只要需求明确就好！</p>
<p>那么，我的初衷就是：使用nginx与uwsgi这两个算比较常用的python应用部署软件来搞出一个能方便我直接以文件的方式部署服务器的地方。</p>
<p>其实方法也很简单，就是，在域名中使用正则表达式，然后将把script设为匹配的内容。</p>
<p>代码如下：</p>
<pre>server {
    listen 80 ;
    server_name ~(.*)\.py\.mydomain\.com$;
    location /{
        uwsgi_pass unix:///tmp/uwsgi.sock;
        uwsgi_param UWSGI_PYHOME /path/to/py/home/;
        uwsgi_param UWSGI_CHDIR /path/to/uwsgi/apps/dir/;
        uwsgi_param UWSGI_SCRIPT $1;
        include uwsgi_params;
    }
}</pre>
<p>此外，uwsgi默认是不会自动重启的，所以就算添加了目录或是修改了文件，也不会立马体现在服务器上。</p>
<p>因此，需要在uwsgi中添加一个参数：</p>
<pre>
touch-reload = /path/to/app/path/
</pre>
<p>这样，每当APP目录下的文件有变动时，它就都会自动reload gracefully啦</p>
<p>似乎安全性容易出问题……假设别人知道你这里有啥脚本的话。但是，域名里本来对字符串的限制就多得数不清，又能怎样呢？</p>
<p>这也只是个思路，其实在正则表达式里做些对字符串的限制，基本就万无一失了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/build_nginx_wsgi_depo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>编程语言迷思</title>
		<link>http://blog.boatwinds.com/thinking_programming_languages/</link>
		<comments>http://blog.boatwinds.com/thinking_programming_languages/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 16:30:49 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[开发]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=900</guid>
		<description><![CDATA[P.S：非程序员勿入，大量专业词汇出没注意 前两天培训时Herman讲后台开发，他说后台开发有个好处，就是更新得没前端什么的那么快，学一个技术可以用很多年。但我总觉得，满足于传统，其实也是在给自己设限。gcc的确鲜有变化，而gnu阵营却无比混乱，无时无刻不在进行着剧烈的化学变化与物理碰撞，这是不是也能说明点什么东西？ 的确gcc鲜有变化，C/C++似乎永不过时；但重点不在于他们的一成不变，重点在于以他们为基石繁衍出了那么丰富的GNU世界，就算对封闭的软件世界也造成不可磨灭的巨大影响。 我听到一个阵营在说，所有语言其实都是一样的；我听到另一个阵营又在说，每种语言其实都不一样，否则为什么会有那么多语言的诞生。QUORA曾看到人说，如果你问一个优秀的程序员：哪种语言才是最好的？他的回答多是一笑置之、不予评价。因为，这问题上实在吵了太久。我相信优秀的与时俱进的人做出的选择，会是因为适用场景和个人品味，而绝对不会孤独求败似地只认为C++无敌。 《黑客与画家》专门就有章是《编程语言解析》，里面如是说： “一些黑客只喜欢自己用的语言，反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间的确有差别，但是很难确定地说哪一种语言是最好的。这个领域依然还在快速发展。” “语言设计者之间的最大分歧也许就在于，有些人认为编程语言应该防止程序员干蠢事，另一些人则认为程序员应该可以用编程语言干一切他们想干的事。JAVA是前一个阵营的代表，Perl则是后一个。（美国国防部很看中JAVA也就不足为奇了）” 也许，现在后者的代表应该换成RUBY了吧，哈哈。 EXAMPLES 俺前阵子有缠着maomao问shell和python的区别，他说这两门语言完全不可比，被我穷追猛打以后（我是比较崇尚于python），他举了两个例子： mysql -uroot -p &#60; xxx.sql ls -a&#124;grep xxx 唔，好吧，这的确是可以让我闭嘴了……结果很杯具的是，我的语言比较维度又多了一个：贴近系统的程度。 不过，除了运维人员或是系统级的开发，谁关心那个啊？累不累？ 嗯，反正我是最关心程序可读性和维护性的了，这个倒好办，维基上的“快速排序”词条就能说明很多问题：http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F 动态语言完胜！哈哈！ 这些东西还真是争论不休的。至少我们都得承认，编程语言正处于高速发展的阶段（相对于传统工业……当然还是无法跟互联网行业比），而且它的高速发展肯定有他的道理，也不见得就是坏事。 In my opinion: 今天也跟阳杰也聊起语言，胡说八道了一把，也拿出来让大家都讨论讨论吧，先说明，这纯粹是个人见解： C语言：擅长处理硬件问题，“堪称可移植的汇编语言” C++：对系统的把控比较强 （多泛式这是好事，但C++的语言复杂度也太恐怖了……） JAVA：企业级开发（毕竟他的可用组件是最丰富的（由SUN支撑），语言上的受限也是最多的：要求只能用面向对象这个范式编程） PYTHON：代码可读性最强（这个俺感觉没有“之一”。） JS：@帝归 说丫是个披着C外皮的LISP，好吧，不过反正浏览器端脚本也只有这个选项，真是舍我其谁啊 PHP：HTML混合式编程最强（应该也没有“之一”）。他生来就是做HTML生成的。 其它有些我不熟悉的语言，俺说下俺的印象： Perl/Ruby ：最自由，想怎么玩都行，也可能导致混乱不堪的代码（我感觉ruby应该算是进化版的Perl？但就没Perl那么靠近系统吧，大概……但据说最自由的其实是LISP，这个俺就不评价了……） Lisp ：最高层次抽象的语言，大概是编程语言之神（总之我还没到那层次去理解他的好……我还停留在函数式编程、动态语言的层面吧……） VB/Asp ：菜鸟上手速度最快（其实俺初中时学过，但基本忘光了……） C#.NET  ：windows编程最强。（也许C# 生在了.net上实在是鲜花插在狗屎上……虽然我还真不明白C#到底有哪些好？） Haskell：可能FP风格编程是这个比较强？不晓得跟JS差别在哪…… 还有些乱七八糟的不是编程语言的语言： SQL：对于关系型数据的操作与读取没有比这个更强的了 Markup Language：对结构化信息的组织肯定是这个最好哈哈（最典型的就是HTML和XML了，其它的像BB码、WIKI格式这些也是挺实用的，JSON甚至CSS大概也能纳入这个范畴？除了信息组织之外，这些玩意也越来越多用在程序配置文件上了） CSS：有人说它是排版的未来，谁知道呢？（其实它就是张表格，拿来描述信息在视觉上应该如何展现，果然纯粹的东西总是威力巨大呐） 传输协议：这个大概也能算语言？像TCP、HTTP啥的，其实里面也算是对结构化和流式传输有很强的能力吧。 一路写来，真是深有感触：黑客真伟大啊！ 面对这很多各有千秋的语言，就算是有一万小时天才理论摆在那，我也不敢说一万小时后我就能得心应手。 程序员是吃青春饭的？ 让这句话见鬼去吧！ 晚安 [...]]]></description>
			<content:encoded><![CDATA[<p>P.S：非程序员勿入，<span style="color: #ff0000;"><strong>大量专业词汇出没</strong></span>注意</p>
<p>前两天培训时Herman讲后台开发，他说后台开发有个好处，就是更新得没前端什么的那么快，学一个技术可以用很多年。但我总觉得，满足于传统，其实也是在给自己设限。gcc的确鲜有变化，而gnu阵营却无比混乱，无时无刻不在进行着剧烈的化学变化与物理碰撞，这是不是也能说明点什么东西？</p>
<p><span id="more-900"></span></p>
<p>的确gcc鲜有变化，C/C++似乎永不过时；但重点不在于他们的一成不变，重点在于以他们为基石繁衍出了那么丰富的GNU世界，就算对封闭的软件世界也造成不可磨灭的巨大影响。</p>
<p>我听到一个阵营在说，所有语言其实都是一样的；我听到另一个阵营又在说，每种语言其实都不一样，否则为什么会有那么多语言的诞生。QUORA曾看到人说，如果你问一个优秀的程序员：哪种语言才是最好的？他的回答多是一笑置之、不予评价。因为，这问题上实在吵了太久。我相信优秀的与时俱进的人做出的选择，会是因为适用场景和个人品味，而绝对不会孤独求败似地只认为C++无敌。</p>
<p>《黑客与画家》专门就有章是《编程语言解析》，里面如是说：</p>
<blockquote><p>“一些黑客只喜欢自己用的语言，反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间的确有差别，但是很难确定地说哪一种语言是最好的。这个领域依然还在快速发展。”</p>
<p>“语言设计者之间的最大分歧也许就在于，有些人认为编程语言应该防止程序员干蠢事，另一些人则认为程序员应该可以用编程语言干一切他们想干的事。JAVA是前一个阵营的代表，Perl则是后一个。（美国国防部很看中JAVA也就不足为奇了）”</p></blockquote>
<p>也许，现在后者的代表应该换成RUBY了吧，哈哈。</p>
<h2>EXAMPLES</h2>
<p>俺前阵子有缠着maomao问shell和python的区别，他说这两门语言完全不可比，被我穷追猛打以后（我是比较崇尚于python），他举了两个例子：</p>
<ul>
<li>mysql -uroot -p &lt; xxx.sql</li>
<li>ls -a|grep xxx</li>
</ul>
<p>唔，好吧，这的确是可以让我闭嘴了……结果很杯具的是，我的语言比较维度又多了一个：贴近系统的程度。</p>
<p>不过，除了运维人员或是系统级的开发，谁关心那个啊？累不累？</p>
<p>嗯，反正我是最关心程序可读性和维护性的了，这个倒好办，维基上的<a href="http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F">“快速排序”词条</a>就能说明很多问题：<a href="http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F">http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F</a></p>
<p>动态语言完胜！哈哈！</p>
<p>这些东西还真是争论不休的。至少我们都得承认，编程语言正处于高速发展的阶段（相对于传统工业……当然还是无法跟互联网行业比），而且它的高速发展肯定有他的道理，也不见得就是坏事。</p>
<h2>In my opinion:</h2>
<p>今天也跟阳杰也聊起语言，胡说八道了一把，也拿出来让大家都讨论讨论吧，先说明，这纯粹是个人见解：</p>
<ul>
<li><strong>C语言</strong>：擅长处理硬件问题，“堪称可移植的汇编语言”</li>
<li><strong>C++</strong>：对系统的把控比较强 （多泛式这是好事，但C++的语言复杂度也太恐怖了……）</li>
<li><strong>JAVA</strong>：企业级开发（毕竟他的可用组件是最丰富的（由SUN支撑），语言上的受限也是最多的：要求只能用面向对象这个范式编程）</li>
<li><strong>PYTHON</strong>：代码可读性最强（这个俺感觉没有“之一”。）</li>
<li><strong>JS</strong>：@帝归 说丫是个披着C外皮的LISP，好吧，不过反正浏览器端脚本也只有这个选项，真是舍我其谁啊</li>
<li><strong>PHP</strong>：HTML混合式编程最强（应该也没有“之一”）。他生来就是做HTML生成的。</li>
</ul>
<p>其它有些我不熟悉的语言，俺说下俺的印象：</p>
<ul>
<li><strong>Perl/Ruby</strong> ：最自由，想怎么玩都行，也可能导致混乱不堪的代码（我感觉ruby应该算是进化版的Perl？但就没Perl那么靠近系统吧，大概……但据说最自由的其实是LISP，这个俺就不评价了……）</li>
<li><strong>Lisp</strong> ：最高层次抽象的语言，大概是编程语言之神（总之我还没到那层次去理解他的好……我还停留在函数式编程、动态语言的层面吧……）</li>
<li><strong>VB/Asp </strong>：菜鸟上手速度最快（其实俺初中时学过，但基本忘光了……）</li>
<li><strong>C#.NET  </strong>：windows编程最强。（也许C# 生在了.net上实在是鲜花插在狗屎上……虽然我还真不明白C#到底有哪些好？）</li>
<li><strong>Haskell</strong>：可能FP风格编程是这个比较强？不晓得跟JS差别在哪……</li>
</ul>
<p>还有些乱七八糟的不是编程语言的语言：</p>
<ul>
<li><strong>SQL</strong>：对于关系型数据的操作与读取没有比这个更强的了</li>
<li><strong>Markup Language</strong>：对结构化信息的组织肯定是这个最好哈哈（最典型的就是HTML和XML了，其它的像BB码、WIKI格式这些也是挺实用的，JSON甚至CSS大概也能纳入这个范畴？除了信息组织之外，这些玩意也越来越多用在程序配置文件上了）</li>
<li><strong>CSS</strong>：有人说它是排版的未来，谁知道呢？（其实它就是张表格，拿来描述信息在视觉上应该如何展现，果然纯粹的东西总是威力巨大呐）</li>
<li><strong>传输协议</strong>：这个大概也能算语言？像TCP、HTTP啥的，其实里面也算是对结构化和流式传输有很强的能力吧。</li>
</ul>
<p>一路写来，真是深有感触：黑客真伟大啊！</p>
<p>面对这很多各有千秋的语言，就算是有一万小时天才理论摆在那，我也不敢说一万小时后我就能得心应手。</p>
<p>程序员是吃青春饭的？</p>
<p>让这句话见鬼去吧！</p>
<p>晚安 :D</p>
<p>原文地址：<a href="http://itswater.com/thinking_programming_languages/">http://itswater.com/thinking_programming_languages/</a> 转载请注明出处 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/thinking_programming_languages/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>人群中的进化</title>
		<link>http://blog.boatwinds.com/innovation_in_crow/</link>
		<comments>http://blog.boatwinds.com/innovation_in_crow/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 17:03:23 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[发展]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=890</guid>
		<description><![CDATA[中国这现状，其实挺讲究优胜劣汰的。可能因为家境或是其它什么原因，起跑点会有些许不一样，但中间的过程却是真真无可厚非。 人群也像丛林，优胜劣汰。金字塔的底层或许会成为整个生态圈的基石，但却也是整个生态圈底部的食物罢了。 狮子永远都是狮子，丛林之王可以不受很多约束，甚至可以为所欲为。 狮子也不会一直都是狮子，王候将相宁有种乎？一个不小心，他们就会被其它特种淘汰。 人群。 不管如何，我们总是离不开人群，我们总在人群里。 这群人各方面总是参差不齐，三人行必有我师，也必有我所恨。 有些人会在人群间不断地迁徙：从而能找到真正适合自己的群落与位置； 也有些人会定居于某个人群中，怡然自得，也无可厚非。 问题在于，我们应该怎么看待这样的人群？应该怎么做？ 进化。 当然，并不会所有人都想进化的，当然也有许多人倾向于安于现状，就算一事无成； 但我还是倾向于认为，人们刚开始总会不满足于现状，一是想脱离束缚，二则是想开眼看世界。 世界那么精彩，活得那么拘束岂非可惜？世界那么大，不出去看看岂非可惜？ 所以我们要进化。 会有很多人说，要有权有势，要认清自我，要打败自己，要自由潇洒。这些或许都算进化？ 可是，参照物又在哪呢？ 或许，进化的第一步，都来自于比较。把自己摆出来，比较身边的人，比较你所崇拜的人，比较心目中的愿景。比较心中愿景貌似是最靠谱的，问题是，很多人刚开始心中根本没有愿景。（就像，把目标定为年薪百万，这根本不能算个目标。） 所以刚开始或许很简单，先追求同质，再追求拔萃，再追求出类。 我的意思是： 首先，你要能做到其它普通人也能做到的事； 然后，这些事你要能做得比其它一般人更漂亮； 最后，你已经跟其它人都不是一类人了，你做着他们根本无法做到、甚至想像的事。 在这个时候，也许就已经应该开始在人群中迁徙了。你可能面临更多变的环境，面临更多的选择，面临更优秀的人群。当然，也可能更糟。 只是我多半觉得，众人皆醉我独醒的感觉并不好受。 这时或许又出现两种选择： 一是你成为一群比你弱的人的LEADER，你带领人群一起进化。难、烦。 二是你进入一群优秀的人的行列，大家一起合作做最优秀的事。可遇而不可求吧？ 于是，也许那些怀才不遇的老兄们需要做的是第三种选择： 审视自己，用积极的心态看待身边的人，合理利用自己能利用的一切资源，达成自己的目标。 没有目标？ 一个优秀的人，一定会有目标。 想到这里，我才突然觉得，其实我也还没认清自己，也没看清身边。 革命尚未成功呐……]]></description>
			<content:encoded><![CDATA[<p><a href="http://itswater.com/wp-content/uploads/2011/11/shutterstock_8127067.jpg"><img class="aligncenter size-large wp-image-891" title="shutterstock_8127067" src="http://itswater.com/wp-content/uploads/2011/11/shutterstock_8127067-640x201.jpg" alt="" width="640" height="201" /></a></p>
<p>中国这现状，其实挺讲究优胜劣汰的。可能因为家境或是其它什么原因，起跑点会有些许不一样，但中间的过程却是真真无可厚非。</p>
<p>人群也像丛林，优胜劣汰。金字塔的底层或许会成为整个生态圈的基石，但却也是整个生态圈底部的食物罢了。</p>
<p>狮子永远都是狮子，丛林之王可以不受很多约束，甚至可以为所欲为。</p>
<p>狮子也不会一直都是狮子，王候将相宁有种乎？一个不小心，他们就会被其它特种淘汰。</p>
<p><span id="more-890"></span></p>
<h2>人群。</h2>
<p>不管如何，我们总是离不开人群，我们总在人群里。</p>
<p>这群人各方面总是参差不齐，三人行必有我师，也必有我所恨。</p>
<p>有些人会在人群间不断地迁徙：从而能找到真正适合自己的群落与位置；</p>
<p>也有些人会定居于某个人群中，怡然自得，也无可厚非。</p>
<p>问题在于，我们应该怎么看待这样的人群？应该怎么做？</p>
<h2>进化。</h2>
<p>当然，并不会所有人都想进化的，当然也有许多人倾向于安于现状，就算一事无成；</p>
<p>但我还是倾向于认为，人们刚开始总会不满足于现状，一是想脱离束缚，二则是想开眼看世界。</p>
<p>世界那么精彩，活得那么拘束岂非可惜？世界那么大，不出去看看岂非可惜？</p>
<p>所以我们要进化。</p>
<p>会有很多人说，要有权有势，要认清自我，要打败自己，要自由潇洒。这些或许都算进化？</p>
<p>可是，参照物又在哪呢？</p>
<p>或许，进化的第一步，都来自于比较。把自己摆出来，比较身边的人，比较你所崇拜的人，比较心目中的愿景。比较心中愿景貌似是最靠谱的，问题是，很多人刚开始心中根本没有愿景。（就像，把目标定为年薪百万，这根本不能算个目标。）</p>
<p>所以刚开始或许很简单，先追求同质，再追求拔萃，再追求出类。</p>
<p>我的意思是：</p>
<ol>
<li>首先，你要能做到其它普通人也能做到的事；</li>
<li>然后，这些事你要能做得比其它一般人更漂亮；</li>
<li>最后，你已经跟其它人都不是一类人了，你做着他们根本无法做到、甚至想像的事。</li>
</ol>
<p>在这个时候，也许就已经应该开始在人群中迁徙了。你可能面临更多变的环境，面临更多的选择，面临更优秀的人群。当然，也可能更糟。</p>
<p>只是我多半觉得，众人皆醉我独醒的感觉并不好受。</p>
<p>这时或许又出现两种选择：</p>
<ol>
<li>一是你成为一群比你弱的人的LEADER，你带领人群一起进化。难、烦。</li>
<li>二是你进入一群优秀的人的行列，大家一起合作做最优秀的事。可遇而不可求吧？</li>
</ol>
<p>于是，也许那些怀才不遇的老兄们需要做的是第三种选择：</p>
<p style="padding-left: 30px;"><strong>审视自己，用积极的心态看待身边的人，合理利用自己能利用的一切资源，达成自己的目标。</strong></p>
<p>没有目标？</p>
<p>一个优秀的人，一定会有目标。</p>
<p>想到这里，我才突然觉得，其实我也还没认清自己，也没看清身边。</p>
<p>革命尚未成功呐……</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/innovation_in_crow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python的优势及短板</title>
		<link>http://blog.boatwinds.com/python-twosides/</link>
		<comments>http://blog.boatwinds.com/python-twosides/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:47:34 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[开发]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=882</guid>
		<description><![CDATA[俺个人来说，是大爱PYTHON的，他有很多很让人迷人的地方，却也有着一些让人很纠结的弊病。 其实我个人不是特别关注PYTHON的性能问题，在我看来这类问题都是等出了问题再去作考虑的，但总有很多人的确很关注…… 而最近看了些文章，也开始觉得，其实性能问题也不是那么大的问题，只不过的确PYTHON在性能上有些短板，在某些条件下的时候要去避免。 所幸的是，多范式的支持使得PYTHON还是可以做到像这样的一些性能优化的。 闲话少说，开始正题： 【优势】 语言简洁直观易学易维护 支持很多高级语言才有的特性（最核心的莫过于FP特性） 调试方便 有丰富成熟的类库支持 【短板】 海量循环时PYTHON表现极差，因为这时总需要有比较好的内存管理； 多线程间通信开销比较大，而使用共享内存似乎又没有很好的结构方案；（其实简单点的用GIL貌似就不错了？） 函数调用开销比较大，海量循环尽量使用内联方法； 对unicode支持实在有限… 3.0以后有改善，但3.0的类库却没跟上，这个很让人纠结。耐心等待稳定吧。（maomao说其实一直很好，但俺反正是没这感觉……） 【优化】 首先当然是避免上面的短板，看是否能优化到足以接纳的程度 复杂结果的产生尽量使用Generator，这样比循环生成高效很多 字符串插补的方式比较低效，在计算量大时应该用原生的&#8221;str1&#8243;+&#8221;str2&#8243;代替 尽量使用一些用C实现的标准/非标准库 原生dict十分高效，有性能问题的时候优先考虑能否Hash表解决 有些比较难避免的，尝试使用ctype进行模块或函数改写，然后去调用 外部变量调用比内联变量调用要慢，有时调用前不妨先创建个内联变量 避免循环引用（这个貌似还有点难，之后俺再想想……） 【策略】 永远别忘了：Why Python??? 你选PYTHON到底是什么原因？快速原型？还是可读性？ 如果你的目标是快速原型，那推荐还是使用C，V8，或是其它什么高效的、或是原生的语言来重写实现吧； 如果你的目标是可读性，那做一切优化的时候你都得考虑下：代码的可读性是不是有受到影响？如果受到影响，是不是有足够清晰明确的接口或是文档给予说明？ 【随想】 我想，人们无论做出哪种选择，都有着不同的追求，也有着不同的局限。有时我们的确不能放弃追求，也的确难以突破局限，于是我们做出了不同的选择。 编程语言的选择如是。 上面的策略在我看来，是那么的理所当然，所以我大爱PYTHON，现在简直有些爱不释手。我想我大概明白一些自己的追求，也明白一些自己的局限。 不了解其它语言也许不是什么可耻的事情，但IT界不需要所有人都变成通才，只需要大家的尊重。 尊重别人的选择，就是在尊重别人的追求与局限。所以，还是别认为哪种语言最好，因为每种语言的存在与流行都有他们的道理，都有着每种语言与生俱来的追求与局限。 大家都还是开放地支接纳吧，在这个急剧变化的IT业界。 P.S.性能瓶颈及优化主要参考资料都来自网上： http://simple-is-better.com/news/729 http://www.jobbole.com/showthread.php/5630]]></description>
			<content:encoded><![CDATA[<p><a href="http://itswater.com/wp-content/uploads/2011/10/import_python.jpg"><img class="aligncenter size-large wp-image-887" title="import_python" src="http://itswater.com/wp-content/uploads/2011/10/import_python-640x200.jpg" alt="Zen of Python" width="640" height="200" /></a></p>
<p>俺个人来说，是大爱PYTHON的，他有很多很让人迷人的地方，却也有着一些让人很纠结的弊病。</p>
<p>其实我个人不是特别关注PYTHON的性能问题，在我看来这类问题都是等出了问题再去作考虑的，但总有很多人的确很关注……</p>
<p>而最近看了些文章，也开始觉得，其实性能问题也不是那么大的问题，只不过的确PYTHON在性能上有些短板，在某些条件下的时候要去避免。</p>
<p>所幸的是，多范式的支持使得PYTHON还是可以做到像这样的一些性能优化的。</p>
<p><span id="more-882"></span></p>
<p>闲话少说，开始正题：</p>
<p>【优势】</p>
<ol>
<li>语言简洁直观易学易维护</li>
<li>支持很多高级语言才有的特性（最核心的莫过于FP特性）</li>
<li>调试方便</li>
<li>有丰富成熟的类库支持</li>
</ol>
<p>【短板】</p>
<ol>
<li>海量循环时PYTHON表现极差，因为这时总需要有比较好的内存管理；</li>
<li>多线程间通信开销比较大，而使用共享内存似乎又没有很好的结构方案；（其实简单点的用GIL貌似就不错了？）</li>
<li>函数调用开销比较大，海量循环尽量使用内联方法；</li>
<li>对unicode支持实在有限… 3.0以后有改善，但3.0的类库却没跟上，这个很让人纠结。耐心等待稳定吧。（maomao说其实一直很好，但俺反正是没这感觉……）</li>
</ol>
<p>【优化】</p>
<ol>
<li>首先当然是避免上面的短板，看是否能优化到足以接纳的程度</li>
<li>复杂结果的产生尽量使用Generator，这样比循环生成高效很多</li>
<li>字符串插补的方式比较低效，在计算量大时应该用原生的&#8221;str1&#8243;+&#8221;str2&#8243;代替</li>
<li>尽量使用一些用C实现的标准/非标准库</li>
<li>原生dict十分高效，有性能问题的时候优先考虑能否Hash表解决</li>
<li>有些比较难避免的，尝试使用ctype进行模块或函数改写，然后去调用</li>
<li>外部变量调用比内联变量调用要慢，有时调用前不妨先创建个内联变量</li>
<li>避免循环引用（这个貌似还有点难，之后俺再想想……）</li>
</ol>
<p>【策略】</p>
<ul>
<li>永远别忘了：Why Python??? 你选PYTHON到底是什么原因？快速原型？还是可读性？</li>
<li>如果你的目标是快速原型，那推荐还是使用C，V8，或是其它什么高效的、或是原生的语言来重写实现吧；</li>
<li>如果你的目标是可读性，那做一切优化的时候你都得考虑下：代码的可读性是不是有受到影响？如果受到影响，是不是有足够清晰明确的接口或是文档给予说明？</li>
</ul>
<p>【随想】</p>
<p>我想，人们无论做出哪种选择，都有着不同的追求，也有着不同的局限。有时我们的确不能放弃追求，也的确难以突破局限，于是我们做出了不同的选择。</p>
<p>编程语言的选择如是。</p>
<p>上面的策略在我看来，是那么的理所当然，所以我大爱PYTHON，现在简直有些爱不释手。我想我大概明白一些自己的追求，也明白一些自己的局限。</p>
<p>不了解其它语言也许不是什么可耻的事情，但IT界不需要所有人都变成通才，只需要大家的尊重。</p>
<p>尊重别人的选择，就是在尊重别人的追求与局限。所以，还是别认为哪种语言最好，因为每种语言的存在与流行都有他们的道理，都有着每种语言与生俱来的追求与局限。</p>
<p>大家都还是开放地支接纳吧，在这个急剧变化的IT业界。</p>
<p>P.S.性能瓶颈及优化主要参考资料都来自网上：</p>
<p>http://simple-is-better.com/news/729</p>
<p>http://www.jobbole.com/showthread.php/5630</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/python-twosides/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lighter is Better</title>
		<link>http://blog.boatwinds.com/lighter-is-better/</link>
		<comments>http://blog.boatwinds.com/lighter-is-better/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 11:56:58 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[发展]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=876</guid>
		<description><![CDATA[最近老惦念着Macbook Air，简直有些走火入魔。余故知，她肯定没想像中那么好，但却轻巧。 最近跟朋友吃饭时有聊起过各种工具软件，我说我不喜欢Eclipse，不喜欢JAVA，不喜欢Windows……总而言之，就是不喜欢各种重量级的工具，而喜欢各种脚本语言，vim/notepad++，wsgi，等等。他笑笑说，看来你是个有强迫症的人。 呀，他这么一说我才省悟过来，这还真真是强迫症呐。 也许这也是业界里的一种返璞归真，螺旋式地就绕了回去，开始针对复杂问题去简化来解决。 从586，到奔腾，到双核，这种提升当然永无止境。但我们真的需要那么多么？iPad的出现终于让大家省悟过来：噢，其实我想做的只是写写文档，做做幻灯片，看看网页，听听音乐，再玩儿会游戏。真的不需要那么多。 我只是不想被那么多东西束缚住，最终却把初衷都给遗忘了。话说回来，其实我选择 11&#8242; AIR也还是有些显得贪婪：我还想编编程序，想折腾会Adobe的玩意儿们。我自我安慰：这真的是我的核心需求。 就像我放弃了单反而选了微单一样。我只是不想因为那重量而冷落了它。 我只需要知道自己要的到底是什么，然后别奢求太多，多好？ 在这之后，轻巧，解放。 轻装上阵迈向远方，多好？ 现在我的目标很简单： 上阵，远方。]]></description>
			<content:encoded><![CDATA[<p>最近老惦念着Macbook Air，简直有些走火入魔。余故知，她肯定没想像中那么好，但却轻巧。</p>
<p>最近跟朋友吃饭时有聊起过各种工具软件，我说我不喜欢Eclipse，不喜欢JAVA，不喜欢Windows……总而言之，就是不喜欢各种重量级的工具，而喜欢各种脚本语言，vim/notepad++，wsgi，等等。他笑笑说，看来你是个有强迫症的人。</p>
<p>呀，他这么一说我才省悟过来，这还真真是强迫症呐。</p>
<p>也许这也是业界里的一种返璞归真，螺旋式地就绕了回去，开始针对复杂问题去简化来解决。</p>
<p>从586，到奔腾，到双核，这种提升当然永无止境。但我们真的需要那么多么？iPad的出现终于让大家省悟过来：噢，其实我想做的只是写写文档，做做幻灯片，看看网页，听听音乐，再玩儿会游戏。真的不需要那么多。</p>
<p>我只是不想被那么多东西束缚住，最终却把初衷都给遗忘了。话说回来，其实我选择 11&#8242; AIR也还是有些显得贪婪：我还想编编程序，想折腾会Adobe的玩意儿们。我自我安慰：这真的是我的核心需求。</p>
<p>就像我放弃了单反而选了微单一样。我只是不想因为那重量而冷落了它。</p>
<p>我只需要知道自己要的到底是什么，然后别奢求太多，多好？</p>
<p>在这之后，轻巧，解放。</p>
<p>轻装上阵迈向远方，多好？</p>
<p>现在我的目标很简单：</p>
<p><strong>上阵，远方。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/lighter-is-better/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在做弓箭手的日子里</title>
		<link>http://blog.boatwinds.com/days_being_archer/</link>
		<comments>http://blog.boatwinds.com/days_being_archer/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:08:34 +0000</pubDate>
		<dc:creator>watert</dc:creator>
				<category><![CDATA[发展]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://itswater.com/?p=863</guid>
		<description><![CDATA[我没玩过DOTA，顶多玩会星际啥的，作为这样的一个广工人，我感觉我有罪，于是我跑去玩撸啊撸…… 我玩艾希是因为我想玩个远程，想玩个菜鸟也不至于玩得太烂的，加上看她比较顺眼。嗯，好吧，最后一点比较重要。 虽然我讨厌射手座（宅男们，你们懂的），但我相当喜欢当个弓箭手： 像以前打CS，我就总喜欢揣着把AWP躲猫猫； 像小时候玩RO，做个玩鸟射箭的猎人放风筝； 像前不久玩WOW，牵只豹四处SOLO。 也许是因为我只是位冷静的观察者。 弓箭手们 弓箭手们总要看得很远很远，要不怎么射得远…… 弓箭手们的每支箭出去都相当珍贵，每支箭希望能有价值。（然后偶尔还能玩把万箭齐发 XD） 弓箭手们身骨板总是脆得很，要找个靠谱的憨厚的肉盾，站在后面放箭，不时帮个大忙。 弓箭手们都是一位位猎人，总躲在一边，在最恰当的地方陷住猎物，冷箭放血斩首。 弓箭手们却常常用了大力却没中目标，那总是让咱像吃了SHI一样难受，还让咱回味老久，WTF 弓箭手们总是让人惦记着，逮着机会报仇时绝不手软。 咱们 咱是细水长流与一鸣惊人的矛盾结合体。潜伏好久才能射出一箭。 咱们总要警醒冷静，不想什么时候猎人变猎物。有时忍不住迷茫：我到底是助攻，是猎人，还是刺客…… 咱们总期待有个靠谱的战士队友，但也许有时实在无法强求。 以正合以奇胜？咱认为，以奇胜也是以正合的一部分。 孤独的时候擦擦箭养养弓玩玩小刀，雕个像聊胜于无。 What Ever. 咱就这样挺好的。]]></description>
			<content:encoded><![CDATA[<div id="attachment_864" class="wp-caption aligncenter" style="width: 650px"><a href="http://itswater.com/wp-content/uploads/2011/08/201104191341584831-2.jpg"><img class="size-large wp-image-864" title="201104191341584831-2" src="http://itswater.com/wp-content/uploads/2011/08/201104191341584831-2-640x273.jpg" alt="Ashe" width="640" height="273" /></a><p class="wp-caption-text">Ashe</p></div>
<p><span id="more-863"></span></p>
<p>我没玩过DOTA，顶多玩会星际啥的，作为这样的一个广工人，我感觉我有罪，于是我跑去玩撸啊撸……</p>
<p>我玩艾希是因为我想玩个远程，想玩个菜鸟也不至于玩得太烂的，加上看她比较顺眼。嗯，好吧，最后一点比较重要。</p>
<p>虽然我讨厌射手座（宅男们，你们懂的），但我相当喜欢当个弓箭手：</p>
<ul>
<li>像以前打CS，我就总喜欢揣着把AWP躲猫猫；</li>
<li>像小时候玩RO，做个玩鸟射箭的猎人放风筝；</li>
<li>像前不久玩WOW，牵只豹四处SOLO。</li>
</ul>
<p>也许是因为我只是位冷静的观察者。</p>
<h2>弓箭手们</h2>
<p>弓箭手们总要看得很远很远，要不怎么射得远……</p>
<p>弓箭手们的每支箭出去都相当珍贵，每支箭希望能有价值。（然后偶尔还能玩把万箭齐发 XD）</p>
<p>弓箭手们身骨板总是脆得很，要找个靠谱的憨厚的肉盾，站在后面放箭，不时帮个大忙。</p>
<p>弓箭手们都是一位位猎人，总躲在一边，在最恰当的地方陷住猎物，冷箭放血斩首。</p>
<p>弓箭手们却常常用了大力却没中目标，那总是让咱像吃了SHI一样难受，还让咱回味老久，WTF</p>
<p>弓箭手们总是让人惦记着，逮着机会报仇时绝不手软。</p>
<h2>咱们</h2>
<p>咱是细水长流与一鸣惊人的矛盾结合体。潜伏好久才能射出一箭。</p>
<p>咱们总要警醒冷静，不想什么时候猎人变猎物。有时忍不住迷茫：我到底是助攻，是猎人，还是刺客……</p>
<p>咱们总期待有个靠谱的战士队友，但也许有时实在无法强求。</p>
<p>以正合以奇胜？咱认为，以奇胜也是以正合的一部分。</p>
<p>孤独的时候擦擦箭养养弓玩玩小刀，雕个像聊胜于无。</p>
<p>What Ever.</p>
<p>咱就这样挺好的。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boatwinds.com/days_being_archer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

