<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[]]></title>
<link>http://www.RainCoding.com/blog/</link>
<description><![CDATA[]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[(Rain)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title></title>
	<url>http://www.RainCoding.com/blog/images/logos.gif</url>
	<link>http://www.RainCoding.com/blog/</link>
	<description></description>
</image>

			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=189</link>
			<title><![CDATA[引擎制作计划]]></title>
			<author>(rain)</author>
			<category><![CDATA[我的作品]]></category>
			<pubDate>Mon,23 Jan 2012 14:42:54 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=189</guid>
		<description><![CDATA[　　无论是游戏独立制作人还是出于兴趣写几个经典小游戏练手都需要大量时间花费在上面，那么一款成熟可靠的游戏制作中间件就是必不可少的。几乎所有的开源或免费的游戏引擎都只是对DirectX或OpenGL的包装，很少有涉及到真正制作一款游戏所需要的。虽然对于游戏制作的方方面面基本都有开源实现，但是并不是完整，整体一块的，需要自己写很多粘合代码，这就使得工作量大大提高。鉴于市面上的免费和开源引擎或多或少都不能另我满意，于是决定自己实现一套。<br/>　　对于我自己的游戏引擎首先的要求就是：<br/>　　　1.由于面向PC的Windows平台，所以底层渲染接口选用DirectX且必须是9或以上以实现完全的硬件加速<br/>　　　2.避免重复造轮子且节约时间，选用开源的DirectX包装库（平坦式C接口包装）以简化对DirectX的调用代码<br/>　　　3.面向纯2D实现则需要实现一款游戏所需要用到的方方面面的功能，大概功能如下：<br/>　　　　　　完全面向对象的框架式结构，以符合现代OO设计要求<br/>　　　　　　功能强大的碰撞检测库，适应从RPG到FGT等各类游戏要求<br/>　　　　　　各种游戏所必须的精灵，场景，字体的资源管理。提供强大的精灵引擎，动画引擎。<br/>　　　　　　完全的GUI库，按钮，对话框，滚动条，输入框（支持中文的即时输入）...<br/>　　　　　　资源的多线程后台载入，资源打包加密支持。<br/>　　　　　　Box2D整合。<br/>　　　　　　粒子引擎整合（引擎会自己实现一套完备的粒子引擎），但鉴于有很好的免费和开源的粒子引擎供选择所以先期会提供整合接口供透明使用，如Magic Particles。<br/>　　　　　　各种测试，调试，Profile，Math等类库方便游戏开发使用。<br/>　　　　　　脚本整合，选用市面上游戏专用脚本进行嵌入整合，如Squirrel，AngelScript。<br/>　　　　　　...<br/>　　　4.提供工具辅助，如精灵编辑器，动作编辑器，碰撞编辑器，场景编辑器，粒子编辑器，Box2D编辑器等。<br/><br/>　　以上只是对于首个版本的初步设想，除了第4点外基本在首个Release版本中都会实现，未来版本以及长期计划是把一些3D技术引入到2D中以实现高品质效果,如光照等特效的HLSL后期合成处理支持。根据实际情况可能还会提供网络服务编程模型简化网络通讯实现（低优先级）<br/><br/>　　本游戏引擎专注于2D游戏的实现（未来可能包含3D技术支持），首要目标是提供对2D游戏的高品质实现，其次是高效率。适合独立游戏制作人和高品质2D休闲单机和网游客户端。<br/><br/>　　本游戏引擎命名为Pino(2D),意为黑暗(目前混乱的游戏市场和环境)中最后的希望,最终的幻想?<br/><br/>　　目前实现进度为<br/>　　　　框架骨代码。<br/>　　　　碰撞引擎（点，线，圆，任意凸凹多边形之间任意的高效碰撞检测）<br/>　　　　精灵，高级动画精灵（从目前测试来看同时渲染10000动画精灵在可视区域保持60FPS，还有优化空间）<br/>　　Pino Engine进度请关注本Blog，并会开设单独产品页面。<br/>　　虽然还离完成还遥遥无期且开发进度取决于业余时间的空闲度，也可能是游戏和引擎相互完善完成的互补过程。本Engine鉴于规模较大，授权暂定为免费使用(提供大部分代码)，商业授权。<br/>　　引擎采用C++实现。<br/><br/>　　本引擎出发点是不满世界上所有免费和开源引擎的不给力（没有实现我上面提到的所有功能，大多数只能说是玩具）。我本人非常懒，如有优秀的2D免费引擎也就懒得自己写.有同学推荐请留言告知我们一起分享。<br/>　　　　　]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=188</link>
			<title><![CDATA[经典休闲游戏重制集]]></title>
			<author>(rain)</author>
			<category><![CDATA[我的游戏]]></category>
			<pubDate>Thu,27 Oct 2011 21:26:37 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=188</guid>
		<description><![CDATA[　　对于一些经典游戏我是很感兴趣的，不光源于对游戏的热爱而且还是她们陪我渡过了童年生活。我是一个怀旧的人，喜欢回忆一些曾经的回忆。现在决定利用手头的技术重新制作她们，设想的小游戏包括休闲游戏系列，比如一些流行的Flash游戏重制，魂斗罗或合金弹头系列，1947系列，坦克大战系列，纸牌系列，圆桌武士或名将系列，口袋街霸系列，时空之轮等。可以看到STG，RPG，FTG，ACT等各占之一。当然重制对于完整度取决于时间和精力，有些几乎不可能完全恢复原作（比如时空之轮）只能尽自己所力尽量完成框架和基本功能。下面是对于重制游戏的意义：<br/><br/>1.&nbsp;&nbsp; 网上有很多Flash版本的经典游戏，为何要重制？<br/>　　目前重制采用C++/DirectX/OpenGL，效率得到最大保障且游戏的流畅程度绝不是Flash版本所能达到，但对于游戏的重制基本还是采用原作的图像，当然如果能找到原作的高清版本图像我也不会有意见:-)还有很重要的一点是可能会对游戏的玩法做一些突破希望能让人们有愿意玩的冲动。比如马里奥版的传送门等。<br/><br/>2.&nbsp;&nbsp; 都是2D游戏，为何没有3D游戏，目前不是最流行的吗？<br/>　　的确，3D游戏是我的最爱，但2D更是我的最爱（画面精美流畅，玩起来爽快）。虽然目前虚幻3，Crystal Space 3D都是可以免费使用，但3D游戏的制作对于个人来说不是技术而是素材．2D的素材还可以自己搞搞或者网上找找．3D Model就不那么好找，找到也不那么适合自己的游戏也不会改。且制作的3D游戏在Mobile OS上也比较高端难以大众（至少目前是）<br/><br/>3.&nbsp;&nbsp; 除了追忆回忆，还有什么意义？<br/>　　所有这些重制游戏将选用开发完成度高，可玩度高的移植到Android OS中或将发布到应用商店中免费共享．这样不仅锻炼了技术，也让许多人空闲之余分享到了自己的快乐。<br/><br/>　　鉴于工作任务繁重，此个人爱好将是长期计划。<br/>　　免费重制游戏集将开设独立网站供发布。<br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/>　　目前试水之作是“阿穂钓鱼”，取之于同名Flash游戏，完成度不高仅供练手之用。（主要抠图等美工活累死我了）。鉴于工作繁忙且该游戏也达到了最初的初衷就此发表吧。<br/><br/>*游戏编译于VC++ 2008，需要Dx9最新Runtime library,和VC2008 redist,没有的需要到M$上下载。<br/>*所有素材取之于原作，本作品非商用且不拥有任何权利。（所有素材未加密，任何挪作它用和本作无关）<br/>*鼠标左右控制小船，按住鼠标左键放线，放开收线,鼠标滚轮向前滚动加速收线。<br/><br/><br/><img src="http://www.raincoding.com/images/aSui.png" border="0" alt=""/><br/><br/><a target="_blank" href="http://www.raincoding.com/download/games/aSui.rar" rel="external">下载&#34;阿穗钓鱼&#34;</a><br/><br/>Note:如果提示缺少d3dx9_xx.dll新下载最新DirectX9或网上单独下载该dll。如果提示程序配置不正确请下载并安装VC2008 Redist。]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=187</link>
			<title><![CDATA[万恶的Notepad]]></title>
			<author>(rain)</author>
			<category><![CDATA[资料转载]]></category>
			<pubDate>Fri,27 May 2011 20:52:02 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=187</guid>
		<description><![CDATA[　　在调试一个下载模块(PHP)时本机测试没有问题，但是放到其他机器中测试下载文件总是格式错误。对比下载文件和原始文件Hex发现文件头被插入了EF BB BF，这是典型的Bom tag。由于需要支持多国语言和更好的兼容性，所有文件编码均采用Utf-8 - Bom格式保存。于是检查源代码，没有发现异常。回想问题只出现在测试机上，是否文件复制到测试机发生了编码变化，细细一想大呼被耍了。由于该下载模块有一个配置文件，需要用户设定一些参数，但此配置文件在本机上是去Bom保存的，但Copy到测试机上后我会用Notepad打开该配置文件然后修改一些路径配置信息保存后问题就发生了。其实Notepad是不知不觉把我的配置文件用＋Bom的Utf-8保存，使得系统下载时包含了该配置文件输出了Bom tag导致文件格式异常。当然现在写下来过程轻松愉快，其实排错的过程耗费了不下5小时，其中走了很多弯路，主要是测试文件正好和Bom tag是个倒序，这样正常文件和测试下载回来的文件字节前面十几bit正好相反，导致我犯了迷糊，网络字节序因该还没有到浮出应用层的程度吧。这样后来还怀疑FastCgi和ISAPI，甚至怀疑到了IIS和Apache，嗨，痛并愉快着大概就是这样吧．．．]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=186</link>
			<title><![CDATA[一个非常非常诡异的问题]]></title>
			<author>(rain)</author>
			<category><![CDATA[技术感悟]]></category>
			<pubDate>Wed,25 May 2011 19:59:49 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=186</guid>
		<description><![CDATA[　　所有问题的根源从表象到底层始终是有据可查的，可是这几天遇到一个非常诡异IE Bug问题。问题的表现是这样的：<br/>　　Win7 32bit旗舰版＋IE8,一个纯HTML页面，本地通过IIS访问，此页面有若干Div层，层之间分别设有z-index css属性。如果通过<a href="http://localhost/" target="_blank" rel="external">http://localhost/</a> 或 <a href="http://127.0.0.1/" target="_blank" rel="external">http://127.0.0.1/</a> 访问则无任何问题。但如果通过<a href="http://" target="_blank" rel="external">http://</a>计算机名/ 访问则页面的z-index属性错乱。以前只知道用不同形式的Url访问会有权限的问题，第一次看到还会引起IE对html和css解析有影响。同样用Chrome则无此问题，这样证明应该是IE自身问题。而且此类问题一时还无从下手解决。还真是头疼的IE的兼容性问题...<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=185</link>
			<title><![CDATA[会哭的孩子有奶吃]]></title>
			<author>(rain)</author>
			<category><![CDATA[技术感悟]]></category>
			<pubDate>Thu,06 Jan 2011 17:06:04 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=185</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看到一老外写的文章，比较有意思。原来在外国做IT也有如此纠结之事啊。<br/>[转载]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我是一个软件工程师。对于任何一个从事于这个领域的人，这有一个众所周知而且毫无疑问的事实：最有效率最专业的程序员的产能会比最差的那个高上1000倍。如果这个看起来不太可能，请记住，如果一个程序员写出了很多bug而需要其他程序员去修改，那他的生产率是负的。而且除非他造成的破坏性已经产生后果，否则你很难发现问题所在。我过去曾给专业的程序员上课，即使在我的这些学生中，你也可以很容易的发现这种事实。<br/><br/>　　我没有发现哪个企业，不管在哪——即使在硅谷——也没有一个企业能把对程序员的工资等级差异化到接近一个数量级的程度，更别说三个了。事实上，我们更倾向的做法是辞退或拒绝考虑任何超过35岁的人。给出的理由就是他们要求更多的钱。<br/><br/>　　在某种程度上讲这是有些道理的。如果你不能区分哪一个更好，你就该要那个便宜的。你实在是太难去评估一个程序员的效能了。<br/><br/>　　跟其他的人相比，一个好的程序员能用更精简的代码和更少的时间解决一个问题。所以你不能按代码行数和所花的时间来评估。按Bug数也不行——对于其他程序员，当看到有人漂亮的解决了一个问题后，都会确信自己也会这样的解决这类问题。<span style="color:Red">不止一次的，当我按时的不带一点差错的做完一个任务后，我就会被告知：因为那是个任务太简单。而同时，逾期未完的团队因为一周的通宵加班表现出来的敬业和苦干精神而受到嘉奖。</span>完成了工作的优秀程序员也许并不知道他所解决的问题对于其他的同事来说有多么的困难。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我个人对此评论是:外行领导内行必然产生这种结果!<br/><br/>原文地址:<a target="_blank" href="http://andrewsullivan.theatlantic.com/the_daily_dish/2010/12/pay-the-best-teachers-and-fire-the-worst-ctd-1.html" rel="external">http://andrewsullivan...</a>]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=184</link>
			<title><![CDATA[程序员的十大烦恼]]></title>
			<author>(rain)</author>
			<category><![CDATA[资料转载]]></category>
			<pubDate>Sun,21 Nov 2010 13:25:57 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=184</guid>
		<description><![CDATA[<p><strong>英文原文：<a href="http://www.kevinwilliampang.com/2008/08/28/top-10-things-that-annoy-programmers/">http://www.kevinwilliampang.com/2008/08/28/top-10-things-that-annoy-programmers/</a></strong></p>
<p>每个程序员都有自己烦恼的事。不论这事指的是<a href="http://en.wikipedia.org/wiki/Scope_creep">范围蠕变（scope creep）</a>，还是 指<a href="http://en.wikipedia.org/wiki/Hungarian_notation">匈牙利变量命名 （Hungarian notation）</a>，还是有臭味的同事，我们都明白，这是我们有我们行业里的特定的烦恼。 下面要说的就是十大让程序员们烦恼的事情，这是我从<a href="http://beta.stackoverflow.com/questions/27347/what-annoys-you-as-a-programmer">最近的在StackOverflow上的一个调查里整理出来的</a>，并且掺杂了一些我个人的经验：</p>
<h3>10. 注释 &mdash; 只解释了&ldquo;how&rdquo;却没有解释&ldquo;why&rdquo;</h3>
<p>入门级的编程课程通常会教育学生们写代码前先写注释、而且要尽量多注释。 这种教育的出发点是&ldquo;多注释肯定比少注释好、少注释肯定比没注释好&rdquo;。 可不幸的是，很多的程序员把这当成了一种任务，对<em>每一行代码</em>都注释一下。 这就是为什么会经常看到像Jeff Atwood在他的博客文章<a href="http://www.codinghorror.com/blog/archives/001150.html">Coding Without Comments</a>提到的代码：</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol start="1" class="dp-cpp">
    <li class="alt"><span><span>r&nbsp;=&nbsp;n&nbsp;/&nbsp;2;&nbsp;</span><span class="comment">//&nbsp;让&nbsp;r&nbsp;等于&nbsp;n&nbsp;除以&nbsp;2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;当&nbsp;r&nbsp;-&nbsp;(n/r)&nbsp;大于&nbsp;t&nbsp;时进行循环</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="keyword">while</span><span>&nbsp;(&nbsp;abs(&nbsp;r&nbsp;-&nbsp;(n/r)&nbsp;)&nbsp;&gt;&nbsp;t&nbsp;)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>r&nbsp;=&nbsp;0.5&nbsp;*&nbsp;(&nbsp;r&nbsp;+&nbsp;(n/r)&nbsp;);&nbsp;<span class="comment">//&nbsp;设置&nbsp;r&nbsp;等于&nbsp;r&nbsp;+&nbsp;(n/r)&nbsp;的一半</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>经过这样的注释，你否明白了这段代码是干什么的？的确，我也没明白。 问题就在于，虽然有大量的注释，可它们只是描述了代码是干<em>什么</em>了，却没有说明代码<em>为什么</em>要这样写。</p>
<p>现在，请看一下我们采用另外一种方式对同一段代码进行的注释:</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol start="1" class="dp-cpp">
    <li class="alt"><span><span class="comment">//&nbsp;使用牛顿-Raphson算法求n的平方根近似值</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>r&nbsp;=&nbsp;n&nbsp;/&nbsp;2;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span><span class="keyword">while</span><span>&nbsp;(&nbsp;abs(&nbsp;r&nbsp;-&nbsp;(n/r)&nbsp;)&nbsp;&gt;&nbsp;t&nbsp;)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>r&nbsp;=&nbsp;0.5&nbsp;*&nbsp;(&nbsp;r&nbsp;+&nbsp;(n/r)&nbsp;);&nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>这就好多了！也许我们还是不能完全明白这段代码的作用，但至少是有了一点方向了。</p>
<p>注释是用来帮助读者理解代码的，不是用来解释语法的。 我可以大胆的认为，读者对for循环的工作原理是了解的；所以没必要写这样的注释：&ldquo;// 对客户列表进行for循环操作&rdquo;。 读者不明白的是你的代码是做什么用的，你为什么要采用这种方式实现它。</p>
<h3>9. 干扰</h3>
<p>很少有程序员能在眨眼之间从一种活动中转换到编程的状态中。通常情况下，<strong>我们更类似于需要慢慢启动的火车，而不是能突然加速的 法拉利</strong>; 我们需要一定的时间才能进入工作状态，一旦我们进入稳定有效的工作状态，我们的工作效果和产出会很丰硕。 不幸的是，当思路不断的被客户、经理、以及你的同事打断时，你的大脑很难进入编程的状态。</p>
<p>当我们干一件事情时，有太多的琐事需要我们放在心里，我们需要先放下这个事情，处理那个人事情，回头又干这个事情，还不能有差错。这些干扰会中 断我们的思路，而重新整理清楚思路又要你花费大量的时间，这是让人懊恼的、没有比这更让人泄气、让人有挫折感的过程了。</p>
<h3>8. 范围蠕变（Scope creep）</h3>
<p>来自 <a href="http://en.wikipedia.org/wiki/Scope_creep">Wikipedia</a> 的解释：</p>
<blockquote>
<p>范围蠕变（Scope creep） (也称作焦点蠕变（focus creep）， 需求蠕变（requirement creep）, 功能蠕变（feature creep），以及其它一些乱七八糟的演变词语)，指在项目管理里项目的需求变更失控。 当一个项目的范围没有明确的定义清楚、没有文档化、不受控时就会出现这种现象。 这通常被认为是一种有负面影响的事情，应该尽力避免。</p>
</blockquote>
<p>范围蠕变通常会把一个简单的需求变成一个复杂惊人的需要大量时间的巨无霸。 那些负责需求调研的家伙们只需要敲几下无辜的键盘就能把事情变成这样：</p>
<ul>
    <li>版本 1: 显示这个地区的地图</li>
    <li>版本 2: 显示这个地区的地图，要<strong>三维立体</strong>的</li>
    <li>版本 3: 显示这个地区的地图，要<strong>三维立体</strong>的，而且<strong>能够使用它作为飞行导航图</strong></li>
</ul>
<p>晕倒！一个本来30分钟能完成的任务变成了一项要几百人/天才能完成的超级复杂的系统。更糟糕的是，大多数情况下，需求变更是发生在开发阶段 的，这样一来你需要重写代码，重新回归，有时要把前几天才开发的代码删除。</p>
<h3>7. 管理者 &mdash; 完全不懂编程</h3>
<p>管理工作不是一种简单的工作。人是一种让人很<strong>讨厌</strong>的动物; 我们善变、喜怒无常，我们都自以为天下第一。 想让这样的一群人都感到满意和团结，你需要付出像山一样大的努力。 然而，这并不意味着管理者就可以在对下属的工作毫不理解的情况下进行管理。 当管理者对我们的工作没有一点知识概念时，后果只会是需求频繁变动，不现实的工期，普遍的挫折感（管理者和开发人员）。 程序员们对此的抱怨相当普遍，这也是产生争执不合的根源(就像一个欢闹的<a href="http://www.dilbert.com/">卡 通片</a>).</p>
<h3>6. 写文档</h3>
<p>在说这个条目之前我先承认，我们确实有很多的文档生成工具，但据我的经验，这些工具都是只适合生成API文档，以供其他程序员参考。如果你开发 的软件是平时人们每天都要用的，你必须要写一些外行人(例如你的实施，客服等)都能理解的文档手册。</p>
<p>我们可以很容易的看出，有些事情程序员们极不愿意去做。 你可以简单的回顾一下所有的开源项目。 人们百折不挠的对这些项目的一个索求是什么：文档。</p>
<p>我敢打保票的说，不管在哪里，至少会有一半的程序员当要求写文档时会说：&ldquo;<a href="http://en.wikipedia.org/wiki/Trash_of_the_Titans">不能让其他人去写吗？</a>&ldquo;。</p>
<h3>5. 程序 &mdash; 缺少文档</h3>
<p>我可从来没说过我们程序员是说一套做一套的人。<img src="http://www.RainCoding.com/blog//uploads/img/201008/13130242_EI65.gif" alt=":-)" /> 程序员们经常会在他们的项目里用到第三方的类库和应用。 于是，<strong>我们需要文档</strong>。 很不幸呀，就像我在第6条里说的那样，程序员们痛恨写文档。这戏剧性的事情发生在我们自己身上。</p>
<p><strong>当你需要使用一个第三方类库时发现，至少有一半的API无从知道是干什么好用的，没有任何事情比这个更打击人的了。</strong> 函数 poorlyNamedFunctionA() 和函数 poorlyButSimilarlyNamedFunctionB() 有什么区别？ 在我使用 PropertyX 属性前是否需要测试一下它是不是 null 值？我估计只有通过自己的测试和报错才能弄清楚!可恶。</p>
<h3>4. 硬件</h3>
<p>任何一个曾经被叫去调试一个数据库服务器上奇怪的宕机现象，或是被叫去解决RAID驱动器不能正确的工作的问题的程序员，当发现是硬件问题时， 都会痛苦不已。 人们有一种普遍的误解，认为程序员就是搞电脑的，他们肯定知道如何修理电脑。 不可否认，有些程序员确实是个全才，但我估计，绝大部分程序员都不知道，或者根本不关心当程序被编译成机器码后如何工作的。我们只关心做出来的东西是否符 合需求文档，这样我们才能集中精力去解决这上层的任务。</p>
<h3>3. 含糊不清</h3>
<p>&ldquo;网站宕机了&rdquo;. &ldquo;XX功能工作不正常&rdquo;。 <strong>处理含糊不清的任务是种痛苦</strong>。 每次当非程序员被要求重现他们所遇到的问题时表现出的愤怒都让我吃惊不已。 他们似乎不太明白，仅仅一句&rdquo;它宕机了，修复它！&rdquo;是无法让我们开始工作的，我们需要更多的信息。</p>
<p>软件的运行是(大部分情况下)有迹可寻的。我们也乐见与此。 请迁就我们，帮我们指出是在哪个阶段，什么情况下出的问题，而不是简单的说一句&rdquo;修复它&ldquo;。</p>
<h3>2. 其他程序员</h3>
<p>程序员经常和其他程序员合不来。诧异吗，但这是真的。 这方面的事情我可以轻松的列出十大条，讲细点甚至可以单独写篇博客，所以这里我只列出几个常见的、让其他同事感到懊恼的程序员的特征：</p>
<ul>
    <li>脾气暴躁以至态度极不友好。</li>
    <li>不能明白什么时候该去讨论系统的架构，什么时候是应该去动手去做。</li>
    <li>无法进行有效的沟通，使用易于误解的专业术语。</li>
    <li>自己的事情处理不好。</li>
    <li>对要做的程序和项目缺乏兴趣。</li>
</ul>
<p>那么，这最后的，但不是最糟糕的，序号为1的让程序员们烦恼的&hellip;</p>
<h3>1. 自己写的代码 &mdash; 6个月以后的</h3>
<div style="float: right; margin-left: 20px;">
<p><img src="http://www.RainCoding.com/blog//uploads/img/201008/13130243_vV03.jpg" alt="" /><br />
<em>Don&rsquo;t sneeze, I think I see a bug.</em></p>
</div>
<p>回顾一下自己以前写的代码，是否也会愁眉苦脸？当时怎么会这么愚蠢！怎么能编写成这样的东西！ 烧掉!丢到火里！</p>
<p>哈，好消息。你并不孤单。</p>
<p>现实是，软件技术界是一个不断变化的世界。 今天被看成是最好的方式，明天也许就会过时。 我们不可能写出完美的代码，因为判断我们的程序好坏的标准日新月异。 这令人很不爽，你的作品，今天看来是那么的完美，但也许不久之后就会变成被人嘲笑的对象了。 真是让人沮丧，因为不论我们如何努力的学习最新最棒的开发工具，设计，框架，以及开发方法，我们总是比最新的技术发展趋势慢了一拍。 对于我来说，这是做一个程序员最苦恼的事情了。我们不断的升级技术，是为了让软件更好，但却禁不住感到，我就像一个做<a href="http://en.wikipedia.org/wiki/Sand_mandala">沙毯（sand-painting）的和尚。 </a></p>
<p>好了，全都给写出来了。这十大让程序员烦恼的事情。 依旧，如果你觉得我的文章里有什么疏漏的地方，请让我知道，欢迎留下评论！</p>]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=183</link>
			<title><![CDATA[软件发布形式的演变]]></title>
			<author>(rain)</author>
			<category><![CDATA[技术感悟]]></category>
			<pubDate>Sun,17 Oct 2010 13:13:41 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=183</guid>
		<description><![CDATA[　　本文首发于个人Blog,对于当前业界的一些现象做个简单的个人分析和展望.因能力有限观点和依据难免有失偏颇,还望看官您一笑了之.<br/>=================================================================================================================<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天不谈技术只谈技术宏观面。一个大家可能都没有察觉却时时可能发生潜移默化改变的现象，那就是软件提供服务的理念的转变。<br/>　　计算机软件提供客户以各种各样的信息服务，没有软件计算机就是一堆废铁。很早以前软件的存在形式以各OS系统中自定义的Portable Execute(Windows后缀缩写为exe)中存在，这种软件提供形式的好处是用户自我感觉独立性强，软件以私人财产的形式存放于自己计算机之中只为其个人服务。因国内盗版过于严重，这种形式存在的软件渐渐被Web取代。软件的功能即提供服务，所以只要实现了服务的功能什么样的承载形式对于开发商来说就是一个产品定位的前瞻性问题。现在目前主流的一个体独立的形式Exe形式存放于用户计算机之中和以公共服务器为载体通过浏览器为各客户计算机提供服务的Web形式的各自优缺点简单剖析一下以及未来的趋势。<br/>　　单体形式：<br/>　　　　　　－缺点：安装麻烦(相对于Web)来说，容易破解(Crack)，国内很多用户已习惯Web的操作方式，不易上手(原因后表)<br/>　　　　　　－优点：功能可以做得很强大(依托OS)，UI可以画很很华丽(Web虽然再改善，不过不使用AIR技术等HTML5成熟还遥遥无期)。更为重要的是：一旦使用者习惯了操作方式(尤其是那种操作方式比较复杂)使用者对其的依赖性要远远超过Web(Web由于技术限制，操作一般都比较平化)，也就是用户的黏性大，一旦培养了这些客户基本比较稳定。Exe独有的特性使得再不影响客户任何操作的前提下摸摸的运行(Background Process)这个只针对提供网络服务形式，这样就引发了国内很多厂商的竞争，称之为客户端为王的竞争策略．金山，360，QQ等都是最好的实例．这些产品都是免费，那如何赚钱？很明显，就是利用这些软件都是单体形式安装在用户计算机客户端上的优势，且都是提供网络相关服务（金山是词霸聊天，360号称实时监测漏洞和在线升级，QQ就不提了）这些都有一个共通点。需要用户一直运行着这些软件不被关闭(关闭就不提供服务了)，目前基本计算机都是在线状态，所以给这些厂商提供了二大利润点。首先是广告，客户端可以实时弹出Dialog提供用户某些事或者干脆弹出广告窗口，不过这样比较引起客户反感，现在流行的做法是在UI中嵌入不起眼的广告文字，在客户端安装量基数很大的时候广告费的利润可是数亿级的。第二大也是产商最核心的竞争力就是这些客户端用户的黏性，如果基数过大就可以导向互联网用户的上网习惯甚至影响流行趋势，QQ就是很好的例子，当然他的成功不可复制（有很强的机遇和时代背景），但他称霸至今的主要法宝就是用户的黏性甚至很好的培养了用户的下一代的黏性。前不久的一场隐私大战就是36X和Qx二大厂商利用各自的用户群（群殴），可见被操纵的用户群的威力。所以经分析通用产品市场就是装机量市场就是客户端市场，厂商的操作方式一般都是免费(先吸引大量客户)-&gt;不断增加增值服务(培养黏性)-&gt;不断升级加变态的市场营销（口口相传，国内用户很怕被所谓的out， 老土）。说到这就想起以前的偷菜游戏，以个人观点来看这似乎完全是一场无厘头的闹剧竟然引起很多人的竞相追逐，排除用户之间心理的各种因素厂商的成功营销 和摸准现代都市人的内心心理是很值得学习的。不由得想起互联网的一则经典名言，客户就是用来被愚弄的．你愚弄不过他就被他愚弄．虽然偏激不过在国内浮躁和 特殊的环境下确实有几份道理．<br/> 　　现在再来看看Web形式：<br/>　　　　　　　－缺点：受SandBox限制，要想操作客户端计算机基本没戏(嵌入Com也只能是IE)，这样就不能兼顾另外的40%的浏览器市场，而且IE也在慢慢摒弃这种非常不安全的方式(很多都是给病毒利用了)。好UI比较费劲，需要大量美工，CSS，JS的技术而且更可恶的是各浏览器并不完全统一导致测试的工作量和CSSHack大行其道。处理速度慢(相对于单体形式)，受限于网络和浏览器本身对JS的执行方式决定，开发人员不能做到根本改变。改变以上二点只能使用AIR技术，但AIR技术本身比较新，熟练掌握的人不多也因为HTML5的到来，基本都处于观望时代。但我个人比较看好AIR，未来会和HTML5共同存在。<br/>　　　　　　　－优点：部署在服务端，维护，升级都异常方便。客户操作比较习惯，Web形式的操作基本都一样（只用鼠标左键）。不易被盗版，很多厂商很欣赏这一点。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　虽然Web的服务形式看起来是对使用者和厂商双赢的形式。但仔细研究一下就不难发现其实所谓现代服务提供模式的Web走的是单体模式(Exe)的老路，就是买产品。一份Copy授权几十几百人用，用户的黏性很难培养。厂商都意识到单体盗版的严重从而走向没有盗版的Web，这只是厂商的一种短见的行为。世界上最大的互联网企业Google大肆宣传未来的世界是网络的世界，我们不妨分析一下他是如何明修栈道，暗度陈仓的。他的口号没错，就是打击Windows这种传统的Desktop型OS，如果一切都是网络了那Windows不就玩完了吗？Google一开始想得很好，但是他发现自己主要赢利点在于搜索，而现在的搜索引擎不断的增多，他的市场在被瓜分。为何被瓜分，因为客户黏性不高，今天Google用不了就用Baidu对于用户没什么大不了。再看看QQ，今天QQ用不了就联系不上QQ的好友，不用QQ就用MSN嘛，可MSN上没有我那个QQ好友啊。看，用户离不开QQ了。注意是离不开QQ而不是离不开IM软件。前段时间发生国内政府屏蔽Google事件导致Google退出大陆市场，网民们也就义愤填膺一下，什么不开放，什么政府封建啦。闹一阵子也就结束了。该干嘛干嘛去。可是如果政府封锁QQ不允许网名用QQ你看会发生什么？那肯定是建国以来最大的一次暴动。这说明什么？你Google不行我用其他的，顶多骂骂国家，但是你妨碍了我和MM交流我就和你拼命。这就是粘着性。<br/>　　Google现在想通了，要和Windows竞争靠网络是不会赢的。只有靠有大量用户粘着性的客户端形式来培养用户。所以Google最终的计划就是发布一个计算机最大的客户端，那就是OS，ChromeOS也要马上出炉了。一个互联网公司做什么OS？这就是目的所在，只有这样才能和Microsoft正面较量。再来看看云计算，何谓云计算？其实就是一种服务模式，什么服务模式？就是Web的终极形式，其实已经不叫Web了，已经演变成了Client，Google的终极目标是代替Windows，也就是ChromeOS＋Chrome &lt;-&gt; Google Server。这样把SandBox限制于OS中（因为OS是自己的），使得Web应用大大增强又不失安全性，然后整台计算机的软件都以服务的形式提供与GoogleServer发生互动。不过我个人并不看好这种形式在国内的应用，原因很彻底的能说明问题。国人有一种归属感，占有欲。就像结婚必须属于一套房子一样。除了硬件所有的软件都是在GoogleServer(或者是其他公共服务器)上 的，那怕是免费，对于国人来说就好像命根子始终握在别人手里一样不让人放心。那天房东不高兴把我赶出来我睡马路啊。你有他有不如自己有来得好。对于企业使 用者一些敏感报告数据也很难放心放到他人的服务器上去做处理（云计算）。所以或许国外能成功在国内很难推广，这不是产品的问题而是国人观念的问题，没个50年 很难改变）。那为何云计算那么受人推崇呢？很简单，有利可图。现在是买概念的时代，尤其是云计算对于硬件厂商是一个很好的概念，因为云计算的服务器必须强 大，够劲再配套云计算概念的软件协同出售这样就能获得客户的青睐。利益也大于从前的销售模式，因为客户愿意为强大的未来技术很炫的云计算买单，我们又知道 概念是无价的。所以在这里个人观点是做云计算必须要搭配好硬件厂商做到双赢,目标客户群即是那些了解技术前瞻对新技术充分肯定的新型公司(老公司有太多的 历史包袱,转型对于他们来说风险太大)。这里顺别说一下Java。为何Java产品售价比较高呢?因为Java语言太烂要搭配高端硬件才能跑,这样产品和 硬件都配套买,客户又认同Java在市场上的口碑所以Java产品又好卖利润又多。为何开发人员最多的是Java开发人员呢，因为产品好卖薪水自然就多， 薪水多自然吸引很多人往里挤。至于为何Java语言烂开发出的产品却很稳定导致舆论导向Java的产品都是高端好产品呢？这个是技术问题再这里就不说了。 万事皆有缘由。<br/>　　现在Google又进军手机领域，一个互联网公司为何不务正业去做手机呢？因为手机的用户黏性强，IPhone的粉丝绝不买其他牌子的手机道理是一样的。而且手机的开发人员开发的软件更能或得客户的认可和付款几率(来源于封闭的圈子，找不到盗版，见AppStore模式)越来越多的开发人员进入手机开发领域，因为封闭才能有利可图(迷你垄断形式)，这和互联网的开放是背道而驰的(所以互联网应用赚不到什么钱,用户的选择太多)这很值得深思。<br/>　　好了，说得这么多是想说明技术永远是一个圆。从CS-&gt;BS-&gt;CS的回归充分印证了老祖宗的古训：看山是山，看水是水。看山不是山，看水不是水。看山还是山，看水还是水。万物都有这样的一个发展过程，称为回归本源，只用充分认识到，看透看清事物的本质才能充分挖掘潜能为我所用。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=182</link>
			<title><![CDATA[C#的XmlDocument加载Xml错误(根级别上的数据无效)]]></title>
			<author>(rain)</author>
			<category><![CDATA[技术感悟]]></category>
			<pubDate>Tue,07 Sep 2010 11:04:12 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=182</guid>
		<description><![CDATA[　　工作中使用该类加载一个文档，显示“根级别上的数据无效，行1，列1”。直觉上是文档开头有无法识别的字符。由于XML文档大多都是UTF-8格式，为了方便识别文档编码采用了BOM头写入文档的首地址。于是解决办法就很简单了。网上简单查了查很多网友也碰到类似问题，特此记录下来。]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=181</link>
			<title><![CDATA[更好的SexyAppFramework]]></title>
			<author>(rain)</author>
			<category><![CDATA[资源共享]]></category>
			<pubDate>Sun,15 Aug 2010 12:21:29 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=181</guid>
		<description><![CDATA[　　 Kanji是一款跨平台的游戏引擎，兼容运行于Windows，Mac，iPhone和IPad平台，支持硬件加速，同时支持3D&amp;2D的渲染，I/O,视频回放等。底层可选用OpenGL或DirectX，简单易用的API设计。更棒的是他提供了SexyAppFramework相同的接口来使用Kanji,使得开发者不必为引擎的更改而改动代码同时又为游戏的性能和功能提供了更出色的表现。<br/>　　详细见官方网站:<a target="_blank" href="http://www.kanjiengine.com/cms/" rel="external">http://www.kanjiengine.com/cms/</a>]]></description>
		</item>
		
			<item>
			<link>http://www.RainCoding.com/blog/article.asp?id=180</link>
			<title><![CDATA[电脑硬盘保护点滴]]></title>
			<author>(rain)</author>
			<category><![CDATA[生活随笔]]></category>
			<pubDate>Wed,12 May 2010 21:55:23 +0800</pubDate>
			<guid>http://www.RainCoding.com/blog/default.asp?id=180</guid>
		<description><![CDATA[　　对于开发者来说，电脑硬盘是最最值钱的东西，不光是各种资料和文档，还有海量的源码不光是工作的成果更是心血的结晶。不光做好平时的异地备份工作，实际工作中注意一些细节的东西也是防范于未然的好习惯。基于机械结构的硬盘的读写次数是有限的，对于非正常原因除外的机械故障，尽量减少硬盘的读写次数是延长硬盘寿命的重要任务。现在就我个人常用的软件设置来记录一下可能会对增加硬盘读写数据使用的经验吧。<br/>　　TortoiseSVN：<br/>　　　　我日常比较用的多的版本管理软件，对于本机用户最多使用的是check out网上的开源项目。这样设置<br/><br/><img src="http://www.raincoding.com/blog/software/TortoiseSVN.jpg" border="0" alt=""/><br/><br/>状态缓存对于一般用户选择“Windows外壳”，图标覆盖状态栏中选择&#34;仅在资源管理器和上下文菜单中选择图标&#34;,这样能够保证正常功能外尽量减少资源的消耗。如果状态缓冲选择默认则每过一段时间会运行TSVNCache.exe来检索硬盘，这个动作非常耗时且占用大量硬盘读写时间。针对我自身情况，选择&#34;无&#34;则0占用图标缓冲资源。<br/><br/>　　FireFox：<br/>　　　　平时主要使用的浏览器，请参见以下设置：<br/><br/><img src="http://www.raincoding.com/blog/software/FireFox_Options.jpg" border="0" alt=""/><br/><br/>取消选中&#34;已阻止的攻击伪造站点&#34;，这样FireFox就不会定期检查缓存中所有的站点信息<br/>如果本机没有安装杀毒软件也可以设置：(设置进入方法,在地址栏中输入about:config)<br/><br/><img src="http://www.raincoding.com/blog/software/FireFox_Options2.jpg" border="0" alt=""/><br/><br/>这样下载完成就不需要扫描文件以减少硬盘损耗<br/><br/>　　MySql:<br/>　　　　毕竟开发机不是服务机，不开发时关闭MySql服务也能减少数据读写和系统资源的损耗.<br/><br/>　　对于硬盘杀手来说，Indexing Service绝对算上一个，强烈建议非商业企业和特殊客户关闭此服务。<br/><br/>　　以上都是对硬盘读写具有较大负荷的功能，建议关闭。一次二次无所谓，但如果让这样功能持续运行在你的电脑中2到3年，对于硬盘的破坏性可想而知。]]></description>
		</item>
		
</channel>
</rss>

