﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-大道无亲 大象无形 大音希声 大巧若拙 大智若愚 大器晚成</title><link>http://www.cppblog.com/CornerZhang/</link><description>生命的隐喻：自我意识产生于躯体，躯体产生于食物，食物源于物质，物质源于太阳辐射能。
&lt;P&gt;http://cyberzei.wordpress.com&lt;/P&gt;
</description><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 19:55:04 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 19:55:04 GMT</pubDate><ttl>60</ttl><item><title>搭建CentOS(Linux)学习环境_日志(01)</title><link>http://www.cppblog.com/CornerZhang/archive/2015/04/04/210245.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 04 Apr 2015 06:02:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2015/04/04/210245.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/210245.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2015/04/04/210245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/210245.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/210245.html</trackback:ping><description><![CDATA[现在使用MacOSX作为开发机的OS, 为了方便在Linux下部署和作一些web应用，用Parallels Desktop建了个CentOS7 的操作系统虚拟机
<div>@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div><br />
</div>
<div>1 安装上了mono环境，mcs和mono命令可以使用</div>
</div>
<div>2 安装go开发环境，同时MacOSX下也ｉｎｓｔａｌｌ了一份</div>
<div>3 去除了CentOS自带的OpenJava runtime，安装上了Oracle最近版的 Java Runtime和Java SDK SE</div>
<div>4 常用的Apache Http(httpd), PHP5.6.6, Python3.4, MySQL, Redis, Nginx 一并装上</div>
<div>5 最后配置好mac下terminal联入CentOS的ssh的远程终端配置．</div><img src ="http://www.cppblog.com/CornerZhang/aggbug/210245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2015-04-04 14:02 <a href="http://www.cppblog.com/CornerZhang/archive/2015/04/04/210245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python学习备忘</title><link>http://www.cppblog.com/CornerZhang/archive/2015/03/22/210125.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 22 Mar 2015 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2015/03/22/210125.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/210125.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2015/03/22/210125.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/210125.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/210125.html</trackback:ping><description><![CDATA[@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div>Compile</div>
编译　.py　(源代码)为　.pyc/.pyo　（字节码,pyo是经过优化的pyc）
<div>eg: python -m py_compile xxx.py</div>
<div>在-m 前加上-O,表示编译时作optimize</div>
<div>eg: python -O -m py_compile xxx.py</div>
<div>当然xxx.py可以改成使用*.py来编译当然目录下的所有.py文件，既然这样可以改成目录试试？</div>
<div>eg: python -O -m py_compile ./&nbsp;<br />
<div>也可通过</div>
</div>
<div><br />
</div>
<div>Run</div>
<div>运行编译好的.pyc/pyo</div>
<div>eg: python -m xxx.pyc</div>
<div>eg: python -m xxx.pyo</div><img src ="http://www.cppblog.com/CornerZhang/aggbug/210125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2015-03-22 12:11 <a href="http://www.cppblog.com/CornerZhang/archive/2015/03/22/210125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于本人接触到的一些技术方案的感想</title><link>http://www.cppblog.com/CornerZhang/archive/2015/03/05/209926.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 05 Mar 2015 01:41:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2015/03/05/209926.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/209926.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2015/03/05/209926.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/209926.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/209926.html</trackback:ping><description><![CDATA[@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
&nbsp;游戏开发行业：
<div>近几年随着移动端市场的兴起，cocos2d[-x], Unity3D变得很火</div>
<div>逼得Epic的ＵＥ４现在都走free路线了，不过这会使得有UE开发经验的Ｃ＋＋程序员变得值钱了！</div>
<div><br />
</div>
<div>app开发:</div>
<div>apple平台的iOS/macosx还是用objective-c比较靠谱，对于新出来的swift，Xcode的支持好对方面还没跟进，就连最新版的XCode6.1.1中，当playground的文件一长，速度就慢的不行，在.swift文件里，代码一长也发生太多语言highlights的问题．而且不论是objective-c还swift，这两个编程语言对于出错处理有太多的不严谨，很难用来作ｓｅｒｖｅｒ端技术了，有谁看到ａｐｐｌｅ的官方文档里有用objective-c和swift的网络ｓｅｒｖｅｒ端的描述么？！用这两个货作app的RAD开发才是ａｐｐｌｅ的战略</div>
<div>google的ａｎｄｒｏｉｄ挺不错，即能用Ｃ＋＋还能用Java，推出的界面设计方案Material Designer很不错</div>
<div><br />
</div>
<div>编程语言：</div>
<div>C++ 11出来了，Clang,VC12,gcc都支持的不错，C++ 14更是要把boost::asio和boost::filesystem成为std::asio, std::filesystem．Ｃ＋＋程序员永远不会被淘汰</div>
<div>html5规范也定义完整了，兼容各类显示设备的特性＼支持流媒体＼支持３Ｄ＼支持矢量图，意味着adobe的flash要失去一部分市场</div>
<div><br />
</div>
<div>世态变迁：</div>
<div>以５年以上的跨度看</div>
<div>* 国内自己研发的Game Engine比不上国外的，技术也无法能跟上国外的步调，不知国内还在作引擎的程序员是该自我鞭策，还是另辟蹊径?</div>
<div>* app开发，除了与已有的ｗｅｂ应用结合，新出来的app与那些个game尽可能走细分市场的路线，精品路线！换一句话说就是，竞争激烈　^^</div>
<div>* game 我只能说它与影视行业很相似，我们玩过了然后忘了，然后等待下一个＂刺激＂！游戏运营商使劲的用广告＼各种营销手段来给产品，催化处一个市场来，大家知道化学中的催化剂的原理就是，把自己消耗掉呗！美国的米高梅影业不也是砸死在大制作上的？！</div>
<div>* 貌似UE这个东西从８０年代到现在发展了很久，Tim用Ｃ＋＋折腾了许久</div>
<div>* apple的硬件更新，objective-c曾经也改了许久，swift不知...</div>
<div>* C++尽管从98标准走到现在将出的14，好在都可以用编译器选项保持对原有代码的兼容，任何严谨的编程任务还得Ｃ＋＋．还能靠他稳稳的赚钱.顺带想到C99也非常的稳定好用</div>
<div>* html5可以使各类浏览器稍统一些吧</div>
<div><br />
</div>
<div>年轻时做加法，年老时做减法！－－能隐隐的发现哪些事物随着岁月在发挥着＂累积＂效应</div><img src ="http://www.cppblog.com/CornerZhang/aggbug/209926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2015-03-05 09:41 <a href="http://www.cppblog.com/CornerZhang/archive/2015/03/05/209926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>仿照Doom3里面的部分代码，给自己的引擎加入了screenshot功能，show一张图</title><link>http://www.cppblog.com/CornerZhang/archive/2012/05/13/174758.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 13 May 2012 06:26:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2012/05/13/174758.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/174758.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2012/05/13/174758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/174758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/174758.html</trackback:ping><description><![CDATA[<img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/screenshot1.png" width="640" height="480" /><br /><br />写了个自己用的小引擎，只显示了mesh，材质和贴图未应用上去<img src ="http://www.cppblog.com/CornerZhang/aggbug/174758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2012-05-13 14:26 <a href="http://www.cppblog.com/CornerZhang/archive/2012/05/13/174758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DoomEd Snapshot</title><link>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173100.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 28 Apr 2012 15:08:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173100.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/173100.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173100.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/173100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/173100.html</trackback:ping><description><![CDATA[<img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/Untitled.png" width="864" height="854" /><img src ="http://www.cppblog.com/CornerZhang/aggbug/173100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2012-04-28 23:08 <a href="http://www.cppblog.com/CornerZhang/archive/2012/04/28/173100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Doom3源代码 code review 01</title><link>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173010.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 28 Apr 2012 01:44:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173010.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/173010.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173010.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/173010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/173010.html</trackback:ping><description><![CDATA[<div>其整体结构不怎么面向对象<br /><br />以一份全局指针的方式访问某个系统模块或管理器，一切沿袭自C版本的idTech设计，如下<br /><br />// FileSystem.h<br /><br /><a title="class" href="http://www.cppblog.com/CornerZhang">class</a> idFileSystem {<br />public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual void&nbsp;&nbsp;&nbsp;Init( void ) = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual void&nbsp;&nbsp;&nbsp;Shutdown( void ) = 0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// methed...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual void&nbsp;&nbsp;&nbsp;ListFiles( ... ) = 0;<br /><br />};<br /><br />extern idFileSystem*&nbsp;&nbsp;&nbsp;fileSystem;<br /><br />// FileSystem.cpp<br />#include "FileSystem"<br /><br /><a title="class" href="http://www.cppblog.com/CornerZhang">class</a> idFileSystemLocal: public idFileSystem {<br />public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;Init( void );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;Shutdown( void );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// methed...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;ListFiles( ... );<br /><br />};<br /><br />idFileSystemLocal&nbsp;&nbsp;&nbsp;fileSystemInstance;<br />idFileSystem*&nbsp;&nbsp;&nbsp;fileSystem = &amp;fileSystemInstance;<br /><br />void&nbsp;&nbsp;&nbsp;idFileSystemLocal::Init( void ) {<br />}<br /><br />void&nbsp;&nbsp;&nbsp;idFileSystemLocal::Shutdown( void ) {<br />}<br /><br />// methed...<br />void&nbsp;&nbsp;&nbsp;idFileSystemLocal::ListFiles( ... ) {<br />}<br /><br />然后其使用端代码如下:<br />fileSysem-&gt;Init();<br /><br />fileSystem-&gt;ListFile( files, .... );<br /><br />fileSystem-&gt;Shutdown();<br /><br />这种手法大量运用，很好的达到了子系统间的解耦！！<br />里面的idCommon, idCmdSystem, idRenderSystem, idSoundSystem, idCVarSystem, idGame等，都是这一套<br /><br />简单而有效的tip，这样以后的某个模块要做成动态库版本，只需通过获得这个接口指针就可</div><img src ="http://www.cppblog.com/CornerZhang/aggbug/173010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2012-04-28 09:44 <a href="http://www.cppblog.com/CornerZhang/archive/2012/04/28/173010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Doom3 编辑器已经运行！！！ ^^</title><link>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173008.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 28 Apr 2012 01:31:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173008.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/173008.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2012/04/28/173008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/173008.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/173008.html</trackback:ping><description><![CDATA[<div>看了眼官网<a href="http://www.iddevnet.com">www.iddevnet.com</a>的Doom3Ed段<br /><br />原文：<br />The easiest way to start the editor is by typing <samp>editor</samp> in the console. If you open the editor a lot, you'll probably want to create a direct short cut to it. </div>
<p>1: Right-Click the Doom 3 short cut and select "Copy" then "Paste" it in the same place (so you get "Copy of Shortcut to Doom" or something similar). 
<p>2: Rename this shortcut to "DOOMEdit" 
<p>3: Right-click the new shortcut and select "Properties". Specify the following for "Target":<br /><samp><span style="background-color: #ffff00">"C:\Doom3\Doom3.exe" +set r_fullscreen 0 +editor +set com_allowConsole 1</span></samp><br />(This of course assumes you have Doom 3 installed in C:\Doom3\) 
<p>The editor does not work with antialiasing turned on, so you may need to add:<br /><samp>+set r_multiSamples 0</samp> 
<p>The first time you open DOOMEdit, you will want to click <kbd>File-&gt;Project Settings</kbd> and change all the paths to point to wherever you have Doom 3 installed (by default they are set to where the level designers here at id have Doom 3 installed). There is a small bug in that dialog box, after you click <kbd>OK</kbd>, you will need to copy the "doom.qe4" into the "base" fo<span>lder. </span></p>
<div><br /><span style="background-color: #ffff00"></span><font style="background-color: #ffff00"><span>关键是黄色部分文字</span></font></div>
<p><font style="background-color: #ffff00"><span></span></font>&nbsp;</p>
<p><font style="background-color: #ffff00"><span></span>&nbsp;</p>
<div><br />改天，放一张运行截图 呵呵<br /></font><br /></div><img src ="http://www.cppblog.com/CornerZhang/aggbug/173008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2012-04-28 09:31 <a href="http://www.cppblog.com/CornerZhang/archive/2012/04/28/173008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iDTech4(Doom3)编译以通过</title><link>http://www.cppblog.com/CornerZhang/archive/2012/03/15/168009.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 15 Mar 2012 11:19:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2012/03/15/168009.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/168009.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2012/03/15/168009.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/168009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/168009.html</trackback:ping><description><![CDATA[呵呵 修改了下几处读取游戏资源包CRC校验码的地方<br />编译出来的release版本 在1.8GB的原作游戏资源上奔跑顺利 而且完整通关！<br /><br />接下来开始调制其内带的编辑器！<br /><br />有遇上问题的朋友，互相交流 ^^<img src ="http://www.cppblog.com/CornerZhang/aggbug/168009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2012-03-15 19:19 <a href="http://www.cppblog.com/CornerZhang/archive/2012/03/15/168009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天开始 有空就看看Doom3.gpl</title><link>http://www.cppblog.com/CornerZhang/archive/2011/11/24/160900.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 24 Nov 2011 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2011/11/24/160900.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/160900.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2011/11/24/160900.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/160900.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/160900.html</trackback:ping><description><![CDATA[<div><font style="background-color: #c0c0c0"><span style="color: #000000">昨天得到了 Doom3.gpl源码</span><br /><span style="color: #000000">开始 研究idTech4</span><br /><br /><span style="color: #000000">技术特性：</span><br /><span style="color: #000000">OpenGL</span><br /><span style="color: #000000">Mega Texture</span><br /><span style="color: #000000">BSP</span><br /><span style="color: #000000">OpenAL</span><br /><br /><span style="color: #000000">此贴留念！</span></font></div><img src ="http://www.cppblog.com/CornerZhang/aggbug/160900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2011-11-24 14:20 <a href="http://www.cppblog.com/CornerZhang/archive/2011/11/24/160900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天搞数据持久化遇到的文件结尾符问题！</title><link>http://www.cppblog.com/CornerZhang/archive/2011/01/25/139274.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 25 Jan 2011 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2011/01/25/139274.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/139274.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2011/01/25/139274.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/139274.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/139274.html</trackback:ping><description><![CDATA[用的C的fopen开一个以"wb"模式的文件。<br>然后，往里写一个char ch = 0;<br>就是：<br>&nbsp;&nbsp;&nbsp;fwrite( file, &amp;ch, 1, 1 );<br>&nbsp;<br>之后，回读这个文件，seek到最后，然后tell后，得到的文件大小是刚才写入的ch处！<br><br>以后要小心的！！！<img src ="http://www.cppblog.com/CornerZhang/aggbug/139274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2011-01-25 13:09 <a href="http://www.cppblog.com/CornerZhang/archive/2011/01/25/139274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【值得一看】恶心的平安保险，希望保持警惕！</title><link>http://www.cppblog.com/CornerZhang/archive/2010/09/13/126536.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Mon, 13 Sep 2010 14:57:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/09/13/126536.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/126536.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/09/13/126536.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/126536.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/126536.html</trackback:ping><description><![CDATA[最近家里来了一位故友，经过一场寒暄，说是他是做平安保险的业务员，本人考虑到家中老母年纪快上去了，虽说已经有了城市保险，考虑到老年人发病率价高，也就顺着话题问了下有何合适妈妈保险产品，出于对老同学的信任遂做了份20年的4k险，给了银行帐号并签了合同给他去给我&#8220;申请保单&#8221;，待我两周后看了下网银，发现是在我给了银行帐号的那第二天就给划款了，心想TMD真狠心，没给key就能扣我的钱，明显的是变相欺诈，平安保险在未经授权的情况下能如此操作，所以在此要提醒各位了。我也立马把我帐号里的余款做了同行转账，以免更多损失。所以在此发了此文，以作警示，也非常希望有懂法律或是认识相关业务的人士给出良好的应对策略。我很想知道，平安保险这样的操作是否违法？可否追回本金？<br><br>从个人情绪来讲，对这样的人和组织深恶痛绝，诅咒他们一辈子。也希望有心人士转贴本文，互相转告！同时也转来下文。<br><br><br><br>以下是转贴：<br><br>我从来不排斥保险，我也买了很多保险公司不同的保险，但是这次平安公司的做法真的让我无语了，可以说是闻所未闻。天涯上平安的保险员们，不要反驳我说假话，我告诉你们几天后我就会到你们公司去，并带上重庆的各大媒体，问问你们领导&#8220;平安保险你是这样教你的业务员的吗？&#8221;<br>　　 <br>　　 我表妹的堂姑，就是表妹亲爹的堂妹，一个从小脑壳就少根弦，初中都没能毕业的人突然做上了平安公司的保险员，在他们家族里大势宣传平安万能险，说这个保险只需要交3年钱，一年4000多，能报销医药费4万，死了还能给子女留6万，于是他们家族有20多个人买了。因为小姨经常生病表妹也就想给她妈（我小姨）买，在她们正犹豫买与不买期间，奇怪的事发生了。。。。。。<br>　　 小姨和表妹的亲爹在20年前就已经离婚，但2年前表妹的亲爹去外地工作，临走前给了表妹一张银行卡，说每个月他给表妹打500元叫表妹帮他存到那张卡上。而怪事就发生在这张卡上。昨天，表妹又去给他亲爹存钱，却发现9月7号那天被扣了4000多，表妹一查说是被平安保险扣的，表妹气死了，给她那个做平安保险的堂姑打电话，人家说&#8220;你反正都要买，什么时候扣都一样&#8221;。而扣的经过特别离奇：她堂姑6号给表妹介绍这个保险，因为小姨已经54岁了，需要体检。10号小姨去体检，只查了个小便，而前几次同样的体检被检查了B超和肝功的项目没有了，小姨询问XXX，她竟然说查不查都没有关系。小姨就打电话问我，网上一查，该保险是终身交费，根本不是她宣传的只交3年。小姨还不信，说他们很多人都买了的，而且XXX那么老实不会骗亲戚。我就叫表妹上网自己查，查后表妹也怀疑。正在犹豫间发现了钱被扣。更离谱的是小姨和表妹没有任何人签过任何字，也没有任何人给过卡号给那个堂姑，她又是怎么扣除卡上的钱的呢？答案只有一个：伪造签名！而扣款的卡是表妹的亲爹一个月前在那个堂妹那买保险用的卡！请问万能的天涯，一个从小被公认老实甚至有点傻的人怎么可能想出这种办法？她才到平安公司不到一年的时间呀！当表妹气愤的询问事，她还能轻描淡写的说&#8220;没有关系&#8221;<br>　　 而表妹亲爹买的时候也很搞笑，保险单下来的时候他本人已经离开了重庆，就委托表妹代签，她拿保险单来时表妹还没有下班，我小姨就叫她放那等表妹回来看了后签，结果她给表妹打电话说保险单拿来了，表妹就叫她放家里回家签了给她送去，结果她挂了电话给小姨说表妹叫小姨签字，结果小姨就老老实实的代签了。曾经我给我老公买其他公司的重疾险时，同样因为保险员来的时候老公不在，怕人家久等我也说我代签，保险员立即阻止，说代签以后真出了问题保险公司有拒赔的理由就是非本人签字，而平安保险却欺骗别人代本人签字，我不知道这个是保险员的问题还是保险公司的问题，若以后真出了问题，平安保险会怎么处理？而小姨被扣的款就是这张20年前就离婚了的前夫的银行卡上的钱，如果他现任的妻子知道了钱被前妻买保险的公司扣了他们之间会发生什么事<br>　　疑问1，银行卡可以不经过本人授权保险业务员冒名代签扣款吗？<br>　　疑问2，保险公司业务员可以鼓励不相干的人代保险人签字吗？<br>　　疑问3，保险公司业务员可以欺骗保险人所够买保险保单的内容吗？<br>　　疑问4，保险公司业务员可以就保单的年限不实虚瞒吗？<br>　　疑问5，保险公司的门槛真的就这么低，半文盲都可以吸收进去？<br>　　疑问6，平安保险，《保险法》真的在你那就如空文一般，你真的就和其他保险公司不一样？<br><img src ="http://www.cppblog.com/CornerZhang/aggbug/126536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-09-13 22:57 <a href="http://www.cppblog.com/CornerZhang/archive/2010/09/13/126536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>寒！用了n年的VC，今天才发现项目设置中加入另一种宏定义的样子！</title><link>http://www.cppblog.com/CornerZhang/archive/2010/08/03/122106.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 03 Aug 2010 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/08/03/122106.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/122106.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/08/03/122106.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/122106.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/122106.html</trackback:ping><description><![CDATA[show个图！看了一目了然，之前只知道蓝色框里的那种。<img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/2010-08-03_2127.png" width=756 height=582><img src ="http://www.cppblog.com/CornerZhang/aggbug/122106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-08-03 21:33 <a href="http://www.cppblog.com/CornerZhang/archive/2010/08/03/122106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发人深省 《攻壳机动队》经典对白</title><link>http://www.cppblog.com/CornerZhang/archive/2010/06/13/117805.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 13 Jun 2010 11:13:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/06/13/117805.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/117805.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/06/13/117805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/117805.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/117805.html</trackback:ping><description><![CDATA[<p>素子:<br>不得不说那的确是部好电影<br>不过无论什么娱乐，基本上都只是一时的，而且也应该如此<br>像这种没有开始也没有结束，只是持续使观众着迷，一点都不肯放过观众的电影<br>不管那让人认为有多好看，终究只是有害无益而已</p>
<p>导演:<br>哦，还真是严厉啊！<br>你是不是想说，我们这些观众有应该回到的现实中去吧？<br>若要剥夺这些观众的梦想，你承担得起这样的责任吗？</p>
<p>素子:<br>承担不起！<br>但正是在现实中打拼，梦想才有意义<br>只是将自己投射在他人的梦里面，跟死又有什么两样</p>
<p>导演:<br>真是个现实主义者<br>哪天你所相信的现实被创造出来的时候，记得来叫我们。到时候我们会离开这个电影院的</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/117805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-06-13 19:13 <a href="http://www.cppblog.com/CornerZhang/archive/2010/06/13/117805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不知道如何用google code上传代码的看这里</title><link>http://www.cppblog.com/CornerZhang/archive/2010/06/07/117318.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Mon, 07 Jun 2010 06:47:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/06/07/117318.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/117318.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/06/07/117318.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/117318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/117318.html</trackback:ping><description><![CDATA[<p>参考：<a href="http://code.google.com/p/infiniteengine/issues/detail?id=7">http://code.google.com/p/infiniteengine/issues/detail?id=7</a></p>
<p>&nbsp;1。首先用你gmail,账号登陆。<br>&nbsp;2。接着打开<a href="http://code.google.com/p/infiniteengine/source/checkout">http://code.google.com/p/infiniteengine/source/checkout</a></p>
<p>&nbsp; 3，你就会看到管理员给你的SVN 下载和上传的地址了。。</p>
<p>&nbsp;你会看到你的SVN 用户名 ：就是 gmail 账号（去掉@gmail.com） 密码：只要点击<br>googlecode.com password. 这个链接就可以看到。。。<br><br>注: 以上，是InfiniteEngine成员兵哥的事物贴上整理<br><br>Fin.</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/117318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-06-07 14:47 <a href="http://www.cppblog.com/CornerZhang/archive/2010/06/07/117318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>注意：有兴趣一起做开源游戏引擎的～看过来！</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116487.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 27 May 2010 09:59:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116487.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/116487.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116487.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/116487.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/116487.html</trackback:ping><description><![CDATA[<p>项目简介：<br>名称 -- 无限引擎（InfiniteEngine）<br>为什么称无限？-- 人生有限，知识无限，所以总有人会创造一个开始，然后传承（接力）</p>
<p><br>参与进来可以做什么？<br>*刚学C++不久的新人 -- 可以看看基础代码部分，可以看到&lt;Effective C++&gt; &amp; &lt;More Effective C++&gt;等书上提到过的编程技术。<br>*稍有经验，想专攻图形技术，或是音频，或是AI，或是物理，或是想写个自己专有的脚本引擎 -- 与我们联系，可以用基础库做一个子系统，然后使得成为&#8220;引擎运行时库&#8221;的一部分。<br>*想做工具 -- 与相关负责人联系，可以使用wx或是QT4之一。<br>*技术大拿 -- 具备独当一面的才能！可以负责关键模块的owner，这里也成为"xxx leader"!</p>
<p>希望有心往游戏研发发展的新人加入：<br>* 在整个开发过程中，可以实践高级的C++编程技术<br>* 互相学习，坦诚、积极的交流和分享知识</p>
<p><br>项目状态：<br>&#215; 初步完成基础库代码，由本人完成，主要参考自IdTech5的部分代码，是本人才充分理解原有代码的基础上加入进来的。近期正在做文档化工作。<br>&#215; 有个初始整体结构，正在细化图形渲染系统的接口定义<br>&#215; 已有五人正在参与！！！</p>
<p><br>代码在哪？<br><a href="http://code.google.com/p/infiniteengine/">http://code.google.com/p/infiniteengine/</a></p>
<p><br>如何联系？<br>到代码站上，看右下角的成员gmail邮件地址吧！</p>
<p><br>FAQ -- 一些个为什么：</p>
<p>* 为什么不使用STL？<br>因为不想随着C++标准走，而且对于一些大型数据结构的定义，以STL的方式不够直白，比如：Tree、遍历用递归更适合。而且，这里不想给编译器带来不必要的编译负担，具备更为自由的定制存储分配策略。</p>
<p>* 为什么不直接使用--c runtime？<br>这一块由inf::math::下的代替了，有些是被间接转换到了c-runtime，这么做是怕今后做的子项目之间发生链接冲突。另一方，我们有更多的针对特定平台的指令优化的机会。</p>
<p>* 为什么不使用boost？<br>太大，而且过多的模板参数推演的技法被使用，这对于一个大规模项目会带来太多的编译负担。</p>
<p>* 会面向商业吗？<br>将来除了工具的关键部分，其余代码将永久开源。</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/116487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-27 17:59 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/27/116487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cryEngine3 技术演示 -- 难得的高清晰版，震撼的要得心脏病</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116444.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 27 May 2010 02:43:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116444.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/116444.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/27/116444.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/116444.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/116444.html</trackback:ping><description><![CDATA[<p>此贴，封闭！
<p>
我的creencast帐号，提示本月带宽已经用完，所以改到tudou上了！<br><br><a href="http://www.tudou.com/programs/view/K0jL1Oe7aGM/">http://www.tudou.com/programs/view/K0jL1Oe7aGM/</a></p><img src ="http://www.cppblog.com/CornerZhang/aggbug/116444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-27 10:43 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/27/116444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非实时视频交流方案 来自screencast.com的方案</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 13 May 2010 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/115282.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/115282.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/115282.html</trackback:ping><description><![CDATA[需求：<br>&nbsp;&nbsp;&nbsp;假设开源项目的成员工作时间不确定，大多数情况下无法约定时间会面，所以保存下自己在计算机上的操作给别人看，有益于问题的排出。<br>&nbsp;&nbsp;&nbsp;同时，也可以定期做点tutorials，作为团队成员培训的材料！^^<br><br>步骤：<br>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Camtasia Studio v7 -- 世界上最优秀的PC视频捕捉方案<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SnagIt 10.0 -- 功能强大的、方便的桌面截图工具<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jing (免费版) -- 一个桌面常住程序，&#8220;小太阳&#8221;。有了它，就可以整合Camtasia Studio v7和SnagIt软件到你的screencast.com的免费帐号上。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于Jing已经具备基本截图功能，所以SnagIt在这里是可选软件<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上软件去<a href="http://www.techsmith.com/">http://www.techsmith.com/</a>下载安装，crack就不说了 ^^<br><br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;去screencast.com注册一个免费帐号。我用自己的live.cn注册了下，获得2GB空间，而且无限期使用！<br><br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建，然后共享：<br>&nbsp;<embed height=480 type=application/x-shockwave-flash width=640 src=http://content.screencast.com/users/Training/folders/Training/media/579ed5b1-a932-4949-84d7-fb8af2b76343/mp4h264player.swf quality="high" bgcolor="#FFFFFF" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Training/folders/Training/media/579ed5b1-a932-4949-84d7-fb8af2b76343/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=480&amp;content=http://content.screencast.com/users/Training/folders/Training/media/579ed5b1-a932-4949-84d7-fb8af2b76343/GettingStartedwithScreencast640.mp4" allowFullScreen="true" base="http://content.screencast.com/users/Training/folders/Training/media/579ed5b1-a932-4949-84d7-fb8af2b76343/" scale="showall"></embed>&nbsp;&nbsp;
<br>&nbsp;&nbsp;<embed height=498 type=application/x-shockwave-flash width=640 src=http://content.screencast.com/users/Training/folders/Training/media/d65322ad-762e-4a38-a7d7-53268ac53260/bootstrap.swf quality="high" bgcolor="#FFFFFF" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Training/folders/Training/media/d65322ad-762e-4a38-a7d7-53268ac53260/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=498&amp;content=http://content.screencast.com/users/Training/folders/Training/media/d65322ad-762e-4a38-a7d7-53268ac53260/GettingStarted.swf" allowFullScreen="true" base="http://content.screencast.com/users/Training/folders/Training/media/d65322ad-762e-4a38-a7d7-53268ac53260/" scale="showall"></embed>&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;<embed height=480 type=application/x-shockwave-flash width=640 src=http://content.screencast.com/users/Training/folders/Training/media/8e8c0d46-cb63-44cb-ac8a-c440c5ad75c2/mp4h264player.swf quality="high" bgcolor="#FFFFFF" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Training/folders/Training/media/8e8c0d46-cb63-44cb-ac8a-c440c5ad75c2/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=480&amp;content=http://content.screencast.com/users/Training/folders/Training/media/8e8c0d46-cb63-44cb-ac8a-c440c5ad75c2/Getting%20Started%20With%20Screencast.com%202.mp4" allowFullScreen="true" base="http://content.screencast.com/users/Training/folders/Training/media/8e8c0d46-cb63-44cb-ac8a-c440c5ad75c2/" scale="showall"></embed> <br><br>4 扩展，由于是非实时交互视频，可以作为教学视频长久保存！以后只要格式转一下就可以放到tudou和youku上去了<br><br>5 Enjoy！<br><br>Fin!<img src ="http://www.cppblog.com/CornerZhang/aggbug/115282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-13 14:38 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用msn live - skydrive (25GB) 作为学习文档存放</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 13 May 2010 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/115280.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/115280.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/115280.html</trackback:ping><description><![CDATA[Q 为什么不用qq群里的空间?<br>&nbsp;&nbsp;&nbsp;A:&nbsp;&nbsp;&nbsp;qq群空间太封闭，里面的内容短期内不会被baidu\google搜索引擎搜到。说到这一点，应该有所明白吧！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而且，只有用qq帐号登入者才可以访问里面的文件<br><br>使用msn live - skydrive的优缺点：<br>&nbsp;&nbsp;&nbsp;1 大公司支持，不会被轻易停止项目<br>&nbsp;&nbsp;&nbsp;2 存储空间够大, 25GB！但是，一个存储文件不得大于25MB<br>&nbsp;&nbsp;&nbsp;3 上下传速度还行，还有访问权限控制，我不想让项目无关的msn聊友看到这些文件<br><br>申请一个hotmail或live或msn账号，就会附带开通这个25GB的skydrive，貌似要等上点时间才可以进入。<br><br>如何访问我上传的文件：<br>&nbsp;&nbsp;&nbsp;0 你也得是msn的用户，用的最好是最新的live messenger<br>&nbsp;&nbsp;&nbsp;1 进入我的live space，就是这里<a href="http://cyberzei.spaces.live.com/">http://cyberzei.spaces.live.com/</a><br>&nbsp;&nbsp;&nbsp;2 展开最上面一排文字选项中的&#8220;更多&#8221;，选里面的&#8220;skydrive&#8221;，然后看图：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/skydrive_entry.png" width=672 height=225><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选&#8220;Files&#8221;<br>&nbsp;&nbsp;&nbsp;3 Welcome！如果一切顺利，微软没有封我的skydrive，你会看到下图：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/skydrive_context.png" width=648 height=318><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后，你可以选择文件来下载了！现在&#8220;InfiniteEngine学习资料"目录是空的，注意下蓝色字，就是权限描述哦！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果，要让别人也能上传文件到这里，就得点选这里的蓝色字，开放上传权限给msn的朋友。<br>&nbsp;&nbsp;&nbsp;4 enjoy!<br><br>&nbsp;&nbsp;&nbsp;Fin！<img src ="http://www.cppblog.com/CornerZhang/aggbug/115280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-13 13:46 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为团队发布对外动态信息</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 13 May 2010 05:12:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/115278.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/115278.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/115278.html</trackback:ping><description><![CDATA[本blog<br>www.cppblog.com<br><br>呵呵！<img src ="http://www.cppblog.com/CornerZhang/aggbug/115278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-13 13:12 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用google code服务</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 13 May 2010 02:39:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/115264.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/115264.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/115264.html</trackback:ping><description><![CDATA[0&nbsp;要有gmail帐号，然后去<a href="http://code.google.com/hosting/">http://code.google.com/hosting/</a>&nbsp; ，点击&#8220;Create a new project&#8221; 建立属于自己的项目，设立好采用的代码管理方式是哪种，我这里是subversion，还有...<br><br>1&nbsp;代码管理配置(subersion)，可以签出初始项目目录了，我就拿svn来举个例子：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a 选项目主页上的Source标签，进入&#8220;Checkout&#8221; 页面，就可以看到如何签出代码的信息了，一般会用TortoiseSVN的就不用多讲了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b 完成初始/trunk的签出后，就可以在本地加入代码，然后"commit"给google code，如果提示要帐户名/密码，进入&#8220;Checkout&#8221;页面，点那个&#8220;googlecode.com password"就可以看到密码，帐户名就是你的gmail<br><br>2&nbsp;事务管理(issues)，可以用来向团队全员发布站务消息，也可以用来做bug历史追踪（但不够自动化）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建&#8220;事务&#8221; -- 进入主页的Issues标签，点选&#8220;New issue&#8220;就可以新建一个"事务"。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;邮箱关联 -- 去Administrator标签里，查看&#8220;<strong><u>Issue tracking</u></strong>&#8220; 页的底下会有提示，比方你的项目名称是&#8220;glSandbox&#8221;，那你的接受邮件帐号是<font face="Courier New"><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#108;&#83;&#97;&#110;&#100;&#98;&#111;&#120;&#64;&#103;&#111;&#111;&#103;&#108;&#101;&#99;&#111;&#100;&#101;&#46;&#99;&#111;&#109;">glSandbox@googlecode.com</a>。把它设置到你的gmail的这里:<img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/cornerzhang/slotIngmail.png" width=1201 height=324><br></font><br>以后，有新的事务时，google code会发一封邮件到你的邮箱里，而且项目代码有变动时也会有提示邮件。这里特别推荐，一起使用googletalk，这么一来不用每天主动去查看，只要开着googletalk，就会有新邮件提示！<br><br>3 邮件列表(mail list) -- 保持团队成员间的平日通信<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个只要去项目主页的&#8220;Project Home&#8221;标签页的右下角一看就知道<br><br>4 Project Home就是项目主页，当然也可以自己建立项目wiki，我还没试过wiki功能<br><br>5 释放版本，一般把一个版本打包后，用"Downloads"上传到google code，也可以用作手动备份功能！<br><br><br>参考项目：<a href="http://code.google.com/p/bullet/">http://code.google.com/p/bullet/</a><br>Fin!<br><img src ="http://www.cppblog.com/CornerZhang/aggbug/115264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-13 10:39 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用现有的免费网络服务管理开源项目 -- 工具篇howto-s</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/12/115202.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Wed, 12 May 2010 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/12/115202.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/115202.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/12/115202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/115202.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/115202.html</trackback:ping><description><![CDATA[<strong>google code:</strong> <br>
<p>subversion (checkout, commit) <br></p>
<p>issues - bug, event message <br></p>
<p>mail list (with google talk) <br></p>
<p>home page &amp; wiki <br></p>
<p><span style="COLOR: #0000ff">url: </span><a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html"><span style="COLOR: #0000ff">http://www.cppblog.com/CornerZhang/archive/2010/05/13/115264.html</span></a><br><strong><br><br>公共信息:</strong> <br>cppblog (text &amp; pic &amp; link) </p>
<p><span style="COLOR: #0000ff">url: </span><a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html"><span style="COLOR: #0000ff">http://www.cppblog.com/CornerZhang/archive/2010/05/13/115278.html</span></a><br><br><strong><br>放文档:<br></strong>msn skydrive </p>
<p><span style="COLOR: #0000ff">url: </span><a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html"><span style="COLOR: #0000ff">http://www.cppblog.com/CornerZhang/archive/2010/05/13/115280.html</span></a><br><strong><br><br>视频交流:</strong> <br></p>
<p>screencast.com帐号 <br></p>
<p>Camtasia Studio v7 <br></p>
<p>SnagIt 10.0 <br>Jing (Free) <br><br><span style="COLOR: #0000ff">url: </span><a href="http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html"><span style="COLOR: #0000ff">http://www.cppblog.com/CornerZhang/archive/2010/05/13/115282.html</span></a><br><br><br></p>
<p><strong>IM:</strong> <br></p>
<p>... </p>
<p><br></p>
<p><br>列出来基本有这些，暂时是个列表，以后连载 ^^!</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/115202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-12 17:09 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/12/115202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需要Google Wave邀请的留言</title><link>http://www.cppblog.com/CornerZhang/archive/2010/05/07/114789.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Fri, 07 May 2010 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/05/07/114789.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/114789.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/05/07/114789.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/114789.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/114789.html</trackback:ping><description><![CDATA[本人使用下来感觉挺爽的，所以这里开闸了 ^^

至于是否要有gmail帐号才能用，我不确定，而且我一次只能发布25个邀请。所以，只能分批发放。

Enjoy!<img src ="http://www.cppblog.com/CornerZhang/aggbug/114789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-05-07 20:24 <a href="http://www.cppblog.com/CornerZhang/archive/2010/05/07/114789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>看了ETQW_SDK的仿函数机制，以及由此实现的Signal/Slot</title><link>http://www.cppblog.com/CornerZhang/archive/2010/04/20/113102.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 20 Apr 2010 15:06:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/04/20/113102.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/113102.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/04/20/113102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/113102.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/113102.html</trackback:ping><description><![CDATA[里面有个概念，基本上Boost里面也有，但有其独到之处。
<p>
基本概念有CallableCaller，Callable，Signal，Connection &amp; ScopedConnection。其特有的是CallableCaller是基于接口实现的，所以可以基于每个特化版本的接口用一个循环来驱动管理，当然，如果使用端code需要完成这样的管理器的话。
</p><p>

它们之间的关系是：CallableCaller被Callable包含，Signal与Callable或CallableCaller链接（Signal&lt;...&gt;::Connect(...)）,Connection和ScopedConnection是Signal做链接时，需要做管理用的小对象，相当于句柄类型，同时Connection是常规版本，而ScopedConnection是在作用域内自动释放连接。
</p><p>

eg:</p><p>
    Functions::Callable<void()> cv(function1); <p>

    Functions::Callable<int()> ci(function1_1);<p>

    cv();</p><p>

    int r = ci();</p><p>


    Functions::Callable<int(int, int)=""> callr(function3_int);<p>

    r = callr(23,23);</p><p>

    Functions::Callable<void(int, int)=""> call(function3);<p>

    call(3,4);</p><p>


    Functions::Signal<int(int,int)> sign1;<p>
    Functions::Signal<void(int,int)> sign2;<p>
    Functions::Connection con = sign1.Connect(callr);</p><p>
    Functions::Connection con2 = sign2.Connect(call);</p><p>
    r = sign1(3,4);</p><p>
    sign2(8,3);</p><p>
    con2.Disconnect();</p><p>
    con.Disconnect();</p><p></p><p>
限制：暂时支持此最多4个参数的函数，暂时不支持成组的信号连接，未考虑线程安全性。
</p><p>
优势: 支持成员函数绑定，由于已经做了适当的代码展开，编译速度比起Loki和Boost中对应的仿函数之类快好多，由此也看出Id Software的Ph.D们务实的作风。在理解所组织的代码后，很容易向更多的参数扩充。控制在有限的代码量内，所以够小。
</p><p></p><p>
本人看懂后，对原来代码稍作了些改进。改进后非常统一，而且语义清晰，但发现Signal类的operator (...)与原来稍有不同了，原因在于这个重载的操作符的返回值上。~   ^^!
</p><p>
这里附上header \ *.lib
http://code.google.com/p/us-engine/downloads/list
</p></void(int,int)></p></int(int,int)></p></void(int,></p></int(int,></p></int()></p></void()></p><img src ="http://www.cppblog.com/CornerZhang/aggbug/113102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-04-20 23:06 <a href="http://www.cppblog.com/CornerZhang/archive/2010/04/20/113102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个乞丐的故事 --！感兴趣的看看 </title><link>http://www.cppblog.com/CornerZhang/archive/2010/01/20/106039.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 19 Jan 2010 16:03:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2010/01/20/106039.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/106039.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2010/01/20/106039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/106039.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/106039.html</trackback:ping><description><![CDATA[http://cyberzei.spaces.live.com/blog/cns!F3A1F03EC3123406!378.entry<img src ="http://www.cppblog.com/CornerZhang/aggbug/106039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2010-01-20 00:03 <a href="http://www.cppblog.com/CornerZhang/archive/2010/01/20/106039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【望管理员置顶】警告贴文 -- 最近我一好友遭遇msn上的网络诈骗，幸好被我等好人协助，得以揭穿，值得这里一帖</title><link>http://www.cppblog.com/CornerZhang/archive/2009/12/29/104378.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 29 Dec 2009 07:53:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/12/29/104378.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/104378.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/12/29/104378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/104378.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/104378.html</trackback:ping><description><![CDATA[<p>为保证朋友名誉，再次贴参考，借以提示：<br />也希望个位保持警觉，也能在各大交友网内传递此文。让这群无良之辈，没有作案市场。让他们堕入十八层地狱。<br /><br />零七年的事居然于零九年年底重演，还望大家广泛传播。<br />这类事件，在 google 里以 "网络欺诈 六合彩 代签"搜索，受害者一堆！<br /><br /><br /><br /><strong><font color="#000066">女子陷网络恋情 被“老公”诱骗签赌香港六合彩<br /></font></strong><br />2007年03月19日 15:30 来源：中国新闻网<br /><br />中新网3月19日电 相信网络上“中奖”信息的网友要注意了，许多网络聊天室利用人性弱点，假借“商业机密”为钓饵，诱骗网友上钩。</p>
		<p>　　据“中央社”报道，台中一位郑姓女子因为网络恋情，相信网络“老公”甜言蜜语，失去理智签赌香港六合彩。警方循线查获此两岸诈骗集团在台活动车手八人，其中两位车手未满20岁。</p>
		<p>　　警方表示，现年35岁、住在台中的郑姓女子，去年11月透过网络聊天室，认识一名自称林祥斌的男子，两人虽未见过面，却陷入网络恋情，彼此以“老公”、“老婆”互称。 
</p>
		<div id="adhzh" name="hzh">
				<table border="0" cellspacing="0" cellpadding="0" align="left">
						<tbody>
								<tr>
										<td>
												<!--Adforward Begin:-->
												<script language="JavaScript1.1" src="http://universalmccannafa.allyes.com/main/adfshow?user=universalmccann|FY07_Linux_Chinanews|News_page_pip_350_250&amp;db=universalmccannafa&amp;border=0&amp;local=yes&amp;js=ie">
												</script>
												<!--Adforward End-->
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
		</p>
		<p>　　未料，在交往2个月后，“老公”见时机成熟，突向郑姓女子透露一个“大好机会”，因林姓男子在香港六合彩公司上班，现在有极高的商业机密要向她透露。林姓男子表示，公司为了打击台湾的地下六合彩组头，要找寻台湾的下注人，中奖号码会由公司决定，只要下注就“稳赚不赔”，“下注愈多中奖愈多”。</p>
		<p>　　林姓男子为了取信这名女子，还从香港传送一份“代签申请书”，并告诉她，“这次活动名额只有15个人，你因认识我才有幸获此名额，千万要把握此难得机会。”</p>
		<p>　　禁不起诱惑与游说的郑姓女子，半信半疑地汇了2万元新台币下注金给林祥斌，未料，三天后，林姓男子又要求汇一笔“银行汇款手续费”，但女子坚持要等领到奖金才汇。事后，女子与朋友讨论后发觉被骗向警方报案。</p>
		<p>　　警方接报后，循线在彰化市、台中市查获此案的车手集团，落网的8人中有5人未满30岁，另有2人未满20岁。这些车手以每领一万元抽取手续费600元代价，专门替人在大陆的诈欺集团领取诈骗所得。作案两个月来，经手诈骗款高达新台币百万元。</p>
		<p>　　警方表示，诈骗歹徒擅长掌握人性弱点，以“中奖”为诱饵，利用网络平台不断传送所谓“商业机密”、“特别名额”等讯息，并且很难查证网友的身份及相关资料。提醒民众切勿轻易汇款，或答应对方留下“视频画面”以免后患无穷。</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/104378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-12-29 15:53 <a href="http://www.cppblog.com/CornerZhang/archive/2009/12/29/104378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>爱与被爱 （2009年就快过去，给剩的人！） ^^!</title><link>http://www.cppblog.com/CornerZhang/archive/2009/12/26/104158.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 26 Dec 2009 15:47:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/12/26/104158.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/104158.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/12/26/104158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/104158.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/104158.html</trackback:ping><description><![CDATA[一种经典的爱的成长是，两小无猜、情同手足从小时候经历过来的情感。人们以此记取，做成诗，写成曲，楔以碑文。

 <br />
而凡间俗物居多，佳缘必是难中求。

 <br />
于是就有，一方曾因爱而受伤，另一方如遇千里佳芳。只因曾经的背判而故作坚强，却因那相似的殷切真心而故设防。
如此境缘，已是天作合。意中人酌情露真言，却那人思量不露芬芳。
当自明心情何物，只怕勇气胜智慧，将心比心牵名份，难中可得人好合。<img src ="http://www.cppblog.com/CornerZhang/aggbug/104158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-12-26 23:47 <a href="http://www.cppblog.com/CornerZhang/archive/2009/12/26/104158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更改VAX的索引数据目录 -- 很实用，可以减少系统盘的开销</title><link>http://www.cppblog.com/CornerZhang/archive/2009/10/13/98477.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Tue, 13 Oct 2009 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/10/13/98477.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/98477.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/10/13/98477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/98477.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/98477.html</trackback:ping><description><![CDATA[到VA的Bug论坛里反映了一下，1626和1640版中文用户名Bug已有解决办法（其实早在去年10月份VA就出了个FAQ，汗啊，估计都没人看过，所以没有人解决这个问题...）。VA的符号库和配置信息默认都是保存在操作系统用户数据文件夹的，在vista下甚至还分开在两个目录，符号库在C:\Users\<username>\AppData\Local\VisualAssist\，AutoText配置文件在C:\Users\<username>\AppData\Roaming\VisualAssist\。如果能修改这个路径，重新设置为全英文的路径下面，这个问题不就迎刃而解了么？呵呵，其实很简单，打开注册表，找到HKCU\Software\Whole Tomato项，在其下新建一个UserDataDir的键，其对应的值就是你要设置的新路径，比如G:\Users\Documents\VisualAssist\。注意设置的时候需要关闭所有IDE。这样重新打开VC，你会欣喜的发现AutoText（VA Snippets）终于能用了。不过先别急，这时候的数据库都是默认配置，需要还原为你修改过的配置，就再把VC关了，把以前用户路径下的AutoText等几个目录拷贝到新路径下，这样数据库就跟以前一模一样了。至于符号库，那个玩意VA会自动重建，拷不拷都行。</username></username><img src ="http://www.cppblog.com/CornerZhang/aggbug/98477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-10-13 14:24 <a href="http://www.cppblog.com/CornerZhang/archive/2009/10/13/98477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>本人正在做的开源游戏引擎，找志同道合的朋友一起开发</title><link>http://www.cppblog.com/CornerZhang/archive/2009/08/22/94084.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sat, 22 Aug 2009 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/08/22/94084.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/94084.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/08/22/94084.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/94084.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/94084.html</trackback:ping><description><![CDATA[最近研究了下IdTech5(来自idSoftware官方)部分源代码，颇有想法，遂在自己已有的开发能力范围内，花了些业余时间，做了个开源游戏引擎，相当一部分代码沿用IdTech5官方的SDK，项目刚开始没多久。在近一周内会出规划文档，特性描述，设计文档，进度表 ^^<br /><br />名称:<br />   想了半天也没想出个Cool的，相到会是多人协同开发，就以"us"打头了，曰: usEngine<br /><br />最终目标:<br />   通用游戏引擎，具备次世代游戏所需的声光表象能力，适合长远技术更新的体系结构<br /><br />近期目标：<br />   完成Windows版本，具备完整的模块结构。这项任务完成后，尽快出一个Editor原型，打算使用QT4做工具界面库<br /><br />必须遵循的原则：<br />   尽可能的避开微软专有的技术，所以，现在图形底层api使用OpenGL 2.1<br /><br />项目host: （使用google的svn代码管理服务)<br />   <a href="http://code.google.com/p/us-engine/">http://code.google.com/p/us-engine/</a><br /><br /><br />参与本项目人员要求：<br />   人数：因为此前没做过开源多人开发，不想因人员过多而带来代码管理上的复杂性，会是几个人的规模<br />   个人能力：大牛是最好的，有一定基础的优质后辈也可以，正好是牛人带新人哦！<br />   知识结构：C++，win32-api经验，有图形学基础<br /><br />最重要的是：<br />   开源项目本身是个互相学习和交流的平台，本项目无时间期限，但规划是要有的，心态最要紧。<br /><br />主要沟通工具：<br />   邮件 + 即时聊天(qq/msn)  + ...<br /><br />重在参与！<br /><br />联系方式: <br />   请到项目host页面上，找第一个gmail<img src ="http://www.cppblog.com/CornerZhang/aggbug/94084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-08-22 13:49 <a href="http://www.cppblog.com/CornerZhang/archive/2009/08/22/94084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C代码中符合标准的方式输出中文</title><link>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89011.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Wed, 01 Jul 2009 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89011.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/89011.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89011.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/89011.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/89011.html</trackback:ping><description><![CDATA[wchat_t str[40] = { L"我的英文名为Corner Zhang!\n" };
<br />
setlocale(LC_ALL, "chs');
<br />
wprintf(L"%s", str);<img src ="http://www.cppblog.com/CornerZhang/aggbug/89011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-07-01 17:58 <a href="http://www.cppblog.com/CornerZhang/archive/2009/07/01/89011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程时经常使用到的标点符号列表!</title><link>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89009.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Wed, 01 Jul 2009 09:44:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89009.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/89009.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/07/01/89009.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/89009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/89009.html</trackback:ping><description><![CDATA[Punctuation type:<br /> ~ -- tilde 波浪线 <br />! -- bang [或 Exclamation mark] 叹号 <br />@ -- at ??? <br /># -- number sign [或 pound sign] 井号 <br />$ -- dollar 美元符 <br />%-- percent 百分号 <br />^ -- accent 幂 <br />&amp; -- and 和 <br />* -- star [或 asterisk] 星号 <br />( -- open round 左括号<br />）-- close round 右括号 <br />+ -- plus 加 <br />- -- sub [或 midline 或 dash] 减 <br />= -- equal 等于 <br />_ -- underline 下划线 <br />\ -- backslash 反斜线 <br />| -- vertical [或 bar] 竖线 <br />{ -- open brace 左花括号 <br />} -- close brace 右花括号 <br />[ -- open quad 左方括号 <br />] -- close quad 左方括号 <br />: -- colon 冒号 <br />; -- semicolon 分号 <br />" -- quote 引号 <br />' -- single quote 单引号 <br />? -- question 问号 <br />/ -- slash 斜线 <br />&lt; -- open angle 左尖括号 <br />&gt; -- close angle 右尖括号 <br />, -- comma 逗号 <br />. -- dot 点号<br /><br />还有空白符: <br />' ' -- space 空格<br />'\n' -- newline 换行<br />'\t' -- table 制表符<br />\r' -- return ？？？<br /><br />至于 "..." 不是单个字符，就不列在上面了，英文名为ellipsis （省略符）<img src ="http://www.cppblog.com/CornerZhang/aggbug/89009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-07-01 17:44 <a href="http://www.cppblog.com/CornerZhang/archive/2009/07/01/89009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的游戏引擎设计</title><link>http://www.cppblog.com/CornerZhang/archive/2009/05/03/81800.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 03 May 2009 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/05/03/81800.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/81800.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/05/03/81800.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/81800.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/81800.html</trackback:ping><description><![CDATA[<p>core – 包含 container, memory, allocator, timer, algorithms, multi-thread, byte-endian checking, math function, linear math,string,dictory,lexer,parser
</p><p>module stub – lunch and manage module systems, like rendersytem/soundsystem … (module 就是对应windows下的dll, linux下的so)
</p><p>framework – 含有整个游戏引擎的条件编译宏，版本信息，和module的定义接口, 等等
</p><p>rendersystem的实现
</p><p>soundsystem的实现
</p><p>inputsystem的实现
</p><p>networksystem的实现
</p><p>resourcesystem的实现 – 统一的资源管理系统
</p><p>filesystem的实现 – 文件的读写,和打包
</p><p>game的实现
</p><p>[需要的时候再加入physics和AI的模块]</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/81800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-05-03 23:12 <a href="http://www.cppblog.com/CornerZhang/archive/2009/05/03/81800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unreal Engine (虚幻) 开发的游戏列表</title><link>http://www.cppblog.com/CornerZhang/archive/2009/04/30/81585.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 30 Apr 2009 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/04/30/81585.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/81585.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/04/30/81585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/81585.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/81585.html</trackback:ping><description><![CDATA[Unreal Engine 1:<br /> Deus Ex （2000） Ion Storm <br />Rune （2000） Human Head Studios <br />Clive Barker's Undying （2001） Dreamworks Interactive （是不是觉得很眼熟） <br />X-COM：Enforcer （2001） MicroProse <br /><br />Unreal Engine 2: <br />LineageII （2002）NC Soft -- 3D 网游 <br />Tom Clancy’s Splinter Cell （2002）Ubisoft <br />Deus Ex：Invisible War （2003）Ion Storm <br />Tom Clancy’s Rainbow Six 3：Reaven Shield （2003）Ubisoft <br />XIII （2003）Ubisoft Thief：Deadly Shadows （2004）Ion Storm <br />Tom Clancy’s Rainbow Six 3：Athena Sword （2004）Ubisoft <br />Tom Clancy’s Splinter Cell：Pandora Tomorrow（2004）Ubisoft <br />Tribes：Venegeance （2004）Irrational Games <br />Advent Rising （2005）GlyphX Games Brother <br />In Arms：Road to Hill 30 （2005）Gearbox Software <br />Jinyong Online 2 （2005）Soft World <br />Star Wars：Repubilc Commando （2005）LucasArts -- 3D 网游 <br />SWAT 4 （2005）Irrational Games <br />Tom Clancy’s Splinter Cell：Chaos Theory （2005）Ubisoft <br />Red Steel （2006）Ubisoft <br />Tom Clancy’s Splinter Cell：Double Agent （2006）Ubisoft <br />Tom Clancy’s Ghost Recon 2 （2006）Ubisoft <br />Tom Clancy’s Ghost Recon Advanced Warfighter （2006）Ubisoft <br />Huang Yi Online （2007）Soft World -- 3D 网游 <br />Ragnarok Online 2：The Gate of the World （2007）Gravity -- 3D 网游 <br />Tom Clancy’s Splinter Cell：Conviction （2008）Ubisoft <br /><br />Unreal Engine 3: <br />Tom Clancy’s Rainbow Six：Vegas （2006）Ubisoft <br />BioShock （2007）2K Bastion/2K Australia <br />Lost Odyssey （2007）Miswalker <br />Medal of Honor：Airborns （2007）Electronic Arts <br />Stranglehold （2007）Midway Chicago<img src ="http://www.cppblog.com/CornerZhang/aggbug/81585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-04-30 18:02 <a href="http://www.cppblog.com/CornerZhang/archive/2009/04/30/81585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(分享) 什么是游戏引擎? What ... Game Engine</title><link>http://www.cppblog.com/CornerZhang/archive/2009/04/14/79844.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Mon, 13 Apr 2009 17:10:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/04/14/79844.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/79844.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/04/14/79844.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/79844.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/79844.html</trackback:ping><description><![CDATA[<p>以下是摘自日本著名杂志《FAMI通》游戏中文版评论杂志</p>
		<p>在阅读各种游戏介绍的时候我们常常会碰见“引擎”（Engine）这个单词，引擎在游戏中究竟起着什么样的作用？它的进化对于游戏的发展产生了哪些影响？希望下面这篇文章能为大家释疑。</p>
		<p>一、什么是引擎</p>
		<p>我们可以把游戏的引擎比作赛车的引擎，大家知道，引擎是赛车的心脏，决定着赛车的性能和稳定性，赛车的速度、操纵感这些直接与车手相关的指标都是建立在引擎的基础上的。游戏也是如此，玩家所体验到的剧情、关卡、美工、音乐、操作等内容都是由游戏的引擎直接控制的，它扮演着中场发动机的角色，把游戏中的所有元素捆绑在一起，在后台指挥它们同时、有序地工作。简单地说，引擎就是“用于控制所有游戏功能的主程序，从计算碰撞、物理系统和物体的相对位置，到接受玩家的输入，以及按照正确的音量输出声音等等。”</p>
		<p>可见，引擎并不是什么玄乎的东西，无论是2D游戏还是3D游戏，无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏，哪怕是一个只有1兆的小游戏，都有这样一段起控制作用的代码。经过不断的进化，如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统，从建模、动画到光影、粒子特效，从物理系统、碰撞检测到文件管理、网络特性，还有专业的编辑工具和插件，几乎涵盖了开发过程中的所有重要环节，以下就对引擎的一些关键部件作一个简单的介绍。首先是光影效果，即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的，折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。</p>
		<p>其次是动画，目前游戏所采用的动画系统可以分为两种：一是骨骼动画系统，一是模型动画系统，前者用内置的骨骼带动物体产生运动，比较常见，后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏，方便动画师为角色设计丰富的动作造型。引擎的另一重要功能是提供物理系统，这可以使物体的运动遵循固定的规律，例如，当角色跳起的时候，系统内定的重力值将决定他能跳多高，以及他下落的速度有多快，子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。</p>
		<p>碰撞探测是物理系统的核心部分，它可以探测游戏中各物体的物理边缘。当两个3D物体撞在一起的时候，这种技术可以防止它们相互穿过，这就确保了当你撞在墙上的时候，不会穿墙而过，也不会把墙撞倒，因为碰撞探测会根据你和墙之间的特性确定两者的位置和相互的作用关系。</p>
		<p>渲染是引擎最重要的功能之一，当3D模型制作完毕之后，美工会按照不同的面把材质贴图赋予模型，这相当于为骨骼蒙上皮肤，最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的，它的强大与否直接决定着最终的输出质量。</p>
		<p>引擎还有一个重要的职责就是负责玩家与电脑之间的沟通，处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话，网络代码也会被集成在引擎中，用于管理客户端与服务器之间的通信。</p>
		<p>通过上面这些枯燥的介绍我们至少可以了解到一点：引擎相当于游戏的框架，框架打好后，关卡设计师、建模师、动画师只要往里填充内容就可以了。因此，在3D游戏的开发过程中，引擎的制作往往会占用非常多的时间，《马科斯·佩恩》的MAX-FX引擎从最初的雏形Final Reality到最终的成品共花了四年多时间，LithTech引擎的开发共花了整整五年时间，耗资700万美元，Monolith公司（LithTech引擎的开发者）的老板詹森·霍尔甚至不无懊悔地说：“如果当初意识到制作自己的引擎要付出这么大的代价的话，我们根本就不可能去做这种傻事。没有人会预料得到五年后的市场究竟是怎样的。”</p>
		<p>正是出于节约成本、缩短周期和降低风险这三方面的考虑，越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏，一个庞大的引擎授权市场已经形成。</p>
		<p>二、引擎的进化</p>
		<p>曾经有一段时期，游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推销给玩家。尽管那时的游戏大多简单粗糙，但每款游戏的平均开发周期也要达到8到10个月以上，这一方面是由于技术的原因，另一方面则是因为几乎每款游戏都要从头编写代码，造成了大量的重复劳动。渐渐地，一些有经验的开发者摸索出了一条偷懒的方法，他们借用上一款类似题材的游戏中的部分代码作为新游戏的基本框架，以节省开发时间和开发费用。根据马老先生的生产力学说，单位产品的成本因生产力水平的提高而降低，自动化程度较高的手工业者最终将把那些生产力低下的手工业者淘汰出局，引擎的概念就是在这种机器化作业的背景下诞生的。</p>
		<p>每一款游戏都有自己的引擎，但真正能获得他人认可并成为标准的引擎并不多。纵观九年多的发展历程，我们可以看出引擎最大的驱动力来自于3D游戏，尤其是3D射击游戏。尽管像 Infinity这样的2D引擎也有着相当久远的历史，从《博德之门》（Baldur’s Gate）系列到《异域镇魂曲》（Planescape：Torment）、《冰风谷》（Icewind Dale）直至今年夏天将要发布的《冰风谷2》，但它的应用范围毕竟局限于“龙与地下城”风格的角色扮演游戏，包括颇受期待的《夜在绝冬城》（Neverwinter Nights）所使用的Aurora引擎，它们都有着十分特殊的使用目的，很难对整个引擎技术的发展起到推动作用，这也是为什么体育模拟游戏、飞行模拟游戏和即时策略游戏的引擎很少进入授权市场的原因，开发者即便使用第三方引擎也很难获得理想的效果，采用《帝国时代2》（Age of Empires）引擎制作的《星球大战：银河战场》（Star Wars：Galactic Battleground）就是一个最好的例子。</p>
		<p>因此，下面对引擎的历史回顾将主要围绕动作射击游戏的变迁展开，动作射击游戏同3D引擎之间的关系相当于一对孪生兄弟，它们一同诞生，一同成长，互相为对方提供着发展的动力。</p>
		<p>引擎的诞生（1992年~1993年）</p>
		<p>1992年，3D Realms公司/Apogee公司发布了一款只有2兆多的小游戏——《德军司令部》（Wolfenstein 3D），稍有资历的玩家可能都还记得初接触它时的兴奋心情，用“革命”这一极富煽动色彩的词语也无法形容出它在整个电脑游戏发展史上占据的重要地位。这部游戏开创了第一人称射击游戏的先河，更重要的是，它在X轴和Y轴的基础上增加了一根Z轴，在由宽度和高度构成的平面上增加了一个向前向后的纵深空间，这根 Z轴对那些看惯了2D游戏的玩家造成的巨大冲击可想而知。</p>
		<p>Wolfenstein 3D引擎的作者是大名鼎鼎的约翰·卡马克，这位id Software公司的首席程序师正是凭借这款Wolfenstein 3D引擎在游戏圈里站稳了脚跟。事实上，《德军司令部》并非第一款采用第一人称视角的游戏，在它发售前的几个月，Origin公司就已经推出了一款第一人称视角的角色扮演游戏——《创世纪：地下世界》（Ultima Underworld），这款角游戏采用了类似的技术，但它与Wolfenstein 3D引擎之间有着相当大的差别，举例来说，《地下世界》的引擎支持斜坡，地板和天花板可以有不同的高度，分出不同的层次，玩家可以在游戏中跳跃，可以抬头低头，这些特性Wolfenstein 3D引擎都无法做到，而且从画面上看，《德军司令部》更接近漫画风格而不是传统的像素画面。</p>
		<p>尽管从技术细节上看，Wolfenstein 3D引擎比不上《创世纪：地下世界》的引擎，但它却更好地利用了第一人称视角的特点，快速火爆的游戏节奏使人们一下子记住了“第一人称射击游戏”这个单词，而不是“第一人称角色扮演游戏”。《德军司令部》后来还发布过一款名义上的续集——《三元的崛起》（Rise of the Triad），这款游戏在Wolfenstein 3D引擎的基础上增加了许多重要特性，包括跳跃和抬头低头等动作。</p>
		<p>引擎诞生初期的另一部重要游戏同样是出自id Software公司的一款非常成功的第一人称射击游戏——《毁灭战士》（Doom）。Doom引擎在技术上大大超越了Wolfenstein 3D引擎，《德军司令部》中的所有物体大小都是固定的，所有路径之间的角度都是直角，也就是说你只能笔直地前进或后退，这些局限在《毁灭战士》中都得到了突破。尽管游戏的关卡还是维持在2D平面上进行制作，没有“楼上楼”的概念，但墙壁的厚度可以为任意，并且路径之间的角度也可以为任意，这使得楼梯、升降平台、塔楼和户外等各种场景成为可能。</p>
		<p>由于Doom引擎本质上依然是二维的，因此可以做到同时在屏幕上显示大量角色而不影响游戏的运行速度，这一特点为游戏创造出了一种疯狂刺激的动作风格，在这方面迄今为止大约只有《英雄萨姆》（Serious Sam）系列能与之相比，除此之外还没有哪款3D引擎能在大批敌人向你涌来的时候依然保持游戏的流畅，这也是为什么如今市面上的大部分第一人称射击游戏都在积极地培养玩家的战术运用能力、提高玩家的射击准确率而拒绝滥砍滥杀的主要原因之一。值得一提的是，尽管Doom引擎缺乏足够的细节度，但开发者仍然在《毁灭战士》中表现出了惊人的环境效果，其纯熟的设计技巧实在令人赞叹。</p>
		<p>不过更值得纪念的是，Doom引擎是第一个被用于授权的引擎。1993年底，Raven公司采用改进后的Doom引擎开发了一款名为《投影者》（ShadowCaster）的游戏，这是游戏史上第一例成功的嫁接手术。1994年Raven公司采用Doom引擎开发《异教徒》（Heretic），为引擎增加了飞行的特性，成为跳跃动作的前身。1995年Raven 公司采用Doom引擎开发《毁灭巫师》（Hexen），加入了新的音效技术、脚本技术以及一种类似集线器的关卡设计，使你可以在不同关卡之间自由移动。 Raven公司与id Software公司之间的一系列合作充分说明了引擎的授权无论对于使用者还是开发者来说都是大有裨益的，只有把自己的引擎交给更多的人去使用才能使引擎不断地成熟起来。</p>
		<p>《毁灭战士》系列本身就相当成功，大约卖了350万套，而授权费又为id Software公司带来了一笔可观的收入。在此之前引擎只是作为一种自产自销的开发工具，从来没有哪家游戏商考虑过依靠引擎赚钱，Doom引擎的成功无疑为人们打开了一片新的市场。</p>
		<p>
				<br />引擎的转变（1994年~1997年）</p>
		<p>在引擎的进化过程中，肯·西尔弗曼于1994年为3D Realms公司开发的Build引擎是一个重要的里程碑，Build引擎的“肉身”就是那款家喻户晓的《毁灭公爵》（Duke Nukem 3D）。《毁灭公爵》已经具备了今天第一人称射击游戏的所有标准内容，如跳跃、360度环视以及下蹲和游泳等特性，此外还把《异教徒》里的飞行换成了喷气背包，甚至加入了角色缩小等令人耳目一新的内容。在Build引擎的基础上先后诞生过14款游戏，例如《农夫也疯狂》（Redneck Rampage）、《阴影武士》（Shadow Warrior）和《血兆》（Blood）等，还有台湾艾生资讯开发的《七侠五义》，这是当时（至今依然是）国内不多的几款3D射击游戏之一。Build 引擎的授权业务大约为3D Realms公司带来了一百多万美元的额外收入，3D Realms公司也由此而成为了引擎授权市场上的第一个“暴发户”。不过从总体来看，Build引擎并没有为3D引擎的发展带来任何质的变化，突破的任务最终由id Software公司的《雷神之锤》（Quake）完成了。</p>
		<p>《雷神之锤》紧跟在《毁灭公爵》之后发售，两者孰优孰劣一时之间成为玩家的热门话题。从内容的精彩程度来看《毁灭公爵》超过《雷神之锤》不少，但从技术的先进与否来看，《雷神之锤》是毫无疑问的赢家。Quake引擎是当时第一款完全支持多边形模型、动画和粒子特效的真正意义上的3D引擎，而不是Doom、Build那样的2.5D引擎。此外Quake引擎还是连线游戏的始作俑者，尽管几年前的《毁灭战士》也能通过调制解调器连线对战，但最终把网络游戏带入大众的视野之中的是《雷神之锤》，是它促成了电子竞技产业的发展。</p>
		<p>一年之后，id Software公司推出《雷神之锤2》，一举确定了自己在3D引擎市场上的霸主地位。《雷神之锤2》采用了一套全新的引擎，可以更充分地利用3D加速和 OpenGL技术，在图像和网络方面与前作相比有了质的飞跃，Raven公司的《异教徒2》（Heretic II）和《军事冒险家》（Soldier of Fortune）、Ritual公司的《原罪》（Sin）、Xatrix娱乐公司的《首脑：犯罪生涯》（Kingpin：Life of Crime）以及离子风暴工作室去年夏天刚刚发布的《安纳克朗诺克斯》（Anachronox）都采用了Quake II引擎。</p>
		<p>Quake II引擎的授权模式大致如下：基本许可费从40万美元到100万美元不等，版税金视基本许可费的多少而定，40万美元的许可费大约需提取10%以上的版税金，100万美元的许可费则提取很少一部分版税金。这样算下来，《雷神之锤2》通过引擎授权所获得的收入至少有一千万美元，尽管游戏本身的销售业绩比起《毁灭战士》来要差很多，大约卖了110多万套，收入在4500万美元左右，但在授权金这一块它所获得的盈利显然要远远高于《毁灭战士》，此时的引擎已经从一种单纯的工具变成了一块令人垂涎欲滴的肥肉。</p>
		<p>俗话说“一个巴掌拍不响”，没有实力相当的竞争者，任何市场都无法发展起来的。正当 Quake II独霸整个引擎市场的时候，Epic Megagames公司（即现在的Epic游戏公司）的《虚幻》（Unreal）问世了。毫不夸张，第一次运行这款游戏的时候，我的确被眼前的画面惊呆了，尽管当时只是在300x200的分辨率下运行的这款游戏（四大悲事之一：玩游戏机器不够劲）。除了精致的建筑物外，游戏中的许多特效即便在今天看来依然很出色，荡漾的水波，美丽的天空，庞大的关卡，逼真的火焰、烟雾和力场等效果。从单纯的画面效果来看，《虚幻》是当之无愧的佼佼者，其震撼力完全可以与人们第一次见到《德军司令部》时的感受相比。 Unreal引擎可能是使用最广的一款引擎，在推出后的两年之内就有18款游戏与Epic公司签订了许可协议，这还不包括Epic公司自己开发的《虚幻》资料片《重返纳帕利》，其中比较近的几部作品如第三人称动作游戏《北欧神符》（Rune）、角色扮演游戏《杀出重围》（Deus Ex）以及永不上市的第一人称射击游戏《永远的毁灭公爵》（Duke Nukem Forever），这些游戏都曾经或将要获得不少好评。</p>
		<p>Unreal 引擎的应用范围不限于游戏制作，还涵盖了教育、建筑等其它领域。Digital Design公司曾与联合国教科文组织的世界文化遗产分部合作采用Unreal引擎制作过巴黎圣母院的内部虚拟演示，Zen Tao公司采用Unreal引擎为空手道选手制作过武术训练软件，另一家软件开发商Vito Miliano公司也采用Unreal引擎开发了一套名为“Unrealty”的建筑设计软件，用于房地产的演示。</p>
		<p>这款与《雷神之锤2》同时代的引擎经过不断的更新，至今依然活跃在游戏市场上，丝毫没有显出老迈的迹象，实属难得</p>
		<p>引擎的革命（1998年~2000年）</p>
		<p>游戏的图像发展到《虚幻》这里已经达到了一个天花板的高度，接下去的发展方向很明显不可能再朝着视觉方面进行下去。前面说过，引擎技术对于游戏的作用并不仅局限于画面，它还影响到游戏的整体风格，例如，所有采用Doom引擎制作的游戏，无论是《异教徒》还是《毁灭巫师》，都有着相似的内容，甚至连情节设定都如出一辙。玩家开始对端着枪跑来跑去的单调模式感到厌倦，开发者们不得不从其它方面寻求突破，由此掀起了第一人称射击游戏的一个新的高潮。</p>
		<p>两部划时代的作品同时出现在1998年——Valve公司的《半条命》（Half-Life）和LookingGlass工作室的《神偷：暗黑计划》（Thief：The Dark Project），尽管此前的《系统震撼》（System Shock）等游戏也为引擎技术带来过许多新的特性，但没有哪款游戏能像《半条命》和《神偷》那样对后来的作品以及引擎技术的进化造成如此深远的影响。</p>
		<p>曾获得无数大奖的《半条命》采用的是Quake和Quake II引擎的混合体，Valve公司在这两部引擎的基础上加入了两个很重要的特性：一是脚本序列技术，这一技术可以令游戏以合乎情理的节奏通过触动事件的方式让玩家真实地体验到情节的发展，这对于诞生以来就很少注重情节的第一人称射击游戏来说无疑是一次伟大的革命；第二个特性是对人工智能引擎的改进，敌人的行动与以往相比明显有了更多的狡诈，不再是单纯地扑向枪口。这两个特点赋予了《半条命》引擎鲜明的个性，在此基础上诞生的《要塞小分队》、《反恐精英》和《毁灭之日》等优秀作品又通过网络代码的加入令《半条命》引擎焕发出了更为夺目的光芒。 在人工智能方面真正取得突破的游戏是Looking Glass工作室的《神偷：暗黑计划》，游戏的故事发生在中古年代，玩家扮演一名盗贼，任务是进入不同的场所，在尽量不引起别人注意的情况下窃取物品。《神偷》采用的是Looking Glass工作室自行开发的Dark引擎，Dark引擎在图像方面比不上《雷神之锤2》或《虚幻》，但在人工智能方面它的水准却远远高于后两者，游戏中的敌人懂得根据声音辨认你的方位，能够分辨出不同地面上的脚步声，在不同的光照环境下有不同的目力，发现同伴的尸体后会进入警戒状态，还会针对你的行动做出各种合理的反应，你必须躲在暗处不被敌人发现才有可能完成任务，这在以往那些纯粹的杀戮游戏中是根本见不到的。如今的绝大部分第一人称射击游戏都或多或少地采用了这种隐秘的风格，包括新近发布的《荣誉勋章：盟军进攻》（Medal of Honor：Allied Assault）。遗憾的是，由于Looking Glass工作室的过早倒闭，Dark引擎未能发扬光大，除了《神偷：暗黑计划》外，采用这一引擎的只有《神偷2：金属时代》（Thief 2：The Metal Age）和《系统震撼2》等少数几款游戏。</p>
		<p>受《半条命》和《神偷：暗黑计划》两款游戏的启发，越来越多的开发者开始把注意力从单纯的视觉效果转向更具变化的游戏内容，其中比较值得一提的是离子风暴工作室出品的《杀出重围》，《杀出重围》采用的是Unreal引擎，尽管画面效果十分出众，但在个体的人工智能方面它无法达到《神偷》系列的水准，游戏中的敌人更多的是依靠预先设定的场景脚本做出反应，例如砸碎弹药盒可能会引起附近敌人的警惕，但这并不代表他听到了什么，打死敌人后周围的同伙可能会朝你站立的位置奔过来也可能会无动于衷，这些不真实的行为即便在《荣誉勋章：盟军进攻》里也依然存在。图像的品质抵消了人工智能方面的缺陷，而真正帮助《杀出重围》在众多射击游戏中脱颖而出的则是它的独特风格，游戏含有浓重的角色扮演成分，人物可以积累经验、提高技能，还有丰富的对话和曲折的情节。同《半条命》一样，《杀出重围》的成功说明了叙事对第一人称射击游戏的重要性，能否更好地支持游戏的叙事能力成为了衡量引擎的一个新标准。从2000年开始3D引擎朝着两个不同的方向分化，一是如《半条命》、《神偷》和《杀出重围》那样通过融入更多的叙事成分和角色扮演成分以及加强游戏的人工智能来提高游戏的可玩性，二是朝着纯粹的网络模式发展，在这一方面，id Software公司再次走到了整个行业的最前沿，他们意识到与人斗才是其乐无穷，于是在Quake II出色的图像引擎的基础上加入更多的网络成分，破天荒推出了一款完全没有单人过关模式的纯粹的网络游戏——《雷神之锤3竞技场》（Quake III Arena），它与Epic公司稍后推出的《虚幻竞技场》（Unreal Tournament）一同成为引擎发展史上的一个转折点。 随着Quake III引擎的大获成功，id Software公司在引擎授权市场上也大赚了一笔。Raven公司再次同id Software公司合作，采用Quake III引擎制作了第一人称射击游戏《星际迷航：精英部队》（Star Trek Voyager：Elite Force），此外这部引擎还被用于制作第三人称动作游戏《重金属F.A.K.K. 2》（Heavy Metal F.A.K.K 2）和《艾丽丝漫游魔境》（American McGee’s Alice）、最近的两款二战题材的射击游戏《重返德军总部》（Return to Castle Wolfenstein）和《荣誉勋章：盟军进攻》，以及开发中的《绝地放逐者：绝地武士2》（Jedi Outcast：Jedi Knight II）。从地牢到外太空，从童话世界到二战年代，从第一人称视角到第三人称视角，充分显示了Quake III引擎的强大潜力。</p>
		<p>Epic 公司的《虚幻竞技场》虽然比《雷神之锤3竞技场》落后了一步，但如果仔细比较一下的话，你就会发现它的表现要略高出后者一筹。从画面方面看两者差不多打成平手，但在联网模式上，它不仅提供有死亡竞赛模式，还提供有团队合作等多种激烈火爆的对战模式，而且Unreal Tournament引擎不仅可以应用在动作射击游戏中，还可以为大型多人游戏、即时策略游戏和角色扮演游戏提供强有力的3D支持。Unreal Tournament引擎在许可业务方面的表现也超过了Quake III，迄今为止采用Unreal Tournament引擎制作的游戏大约已经有20多款，其中包括《星际迷航深度空间九：坠落》（Star Trek Deep Space Nine：The Fallen）、《新传说》（New Legend）和《塞拉菲姆》（Seraphim）等。</p>
		<p>在1998年到 2000年期间迅速崛起的另一款引擎是Monolith公司的LithTech引擎，这款引擎最初是用在机甲射击游戏《升刚》（Shogo）上的。前面说过，LithTech引擎的开发共花了整整五年时间，耗资700万美元，功夫不负有心人，1998年LithTech引擎的第一个版本推出之后立即引起了业界的主意，为当时处于白热化状态下的《雷神之锤2》vs.《虚幻》之争泼了一盆冷水。</p>
		<p>正是由于过于高昂的开发代价，2002年 Monolith公司决定单独成立一个LithTech公司，以LithTech引擎的授权许可作为主要业务，希望借此捞回一些成本。采用 LithTech第一代引擎制作的游戏包括《血兆2》和《清醒》（Sanity）等。2000年LithTech公司推出了引擎的2.0版本和2.5版本，加入了骨骼动画和高级地形系统，给人留下深刻印象的《无人永生》（No One Lives Forever）以及即将上市的《全球行动》（Global Operations）采用的就是LithTech 2.5引擎，此时的LithTech已经从一名有益的补充者变成了一款同Quake III和Unreal Tournament平起平坐的引擎。如今LithTech引擎的3.0版本也已经发布，并且衍生出了“木星”（Jupiter）、“鹰爪” （Talon）、“深蓝”（Cobalt）和“探索”（Discovery）四大系统，其中“鹰爪”被用于开发《异形大战掠夺者2》（Alien Vs. Predator 2），“木星”将用于《无人永生2》的开发，“深蓝”用于开发PS2版《无人永生》，“探索”则将被用来制作一款尚未公布的大型网络游戏。</p>
		<p>LithTech 引擎除了本身的强大性能外，最大的卖点在于详尽的服务，除了LithTech引擎的源代码和编辑器外，购买者还可以获得免费的升级、迅捷的电子邮件和电话技术支持，LithTech公司甚至还会把购买者请到公司进行手把手的培训。而且LithTech引擎的平均价格也不算很高，大约在25万美元左右，同 Quake III引擎的70万美元相比已经是相当低廉了。 </p>
		<p>引擎的明天（2001年~）</p>
		<p>2001年有许多优秀的3D射击游戏陆续发布，其中一部分采用的是Quake III和Unreal Tournament等现成引擎，如《星际迷航深度空间九：坠落》、《重返德军总部》和《荣誉勋章：盟军进攻》，而更多的则采用的是自己开发的引擎，比较有代表性的包括网络射击游戏《部落2》（Tribes 2）、第一人称射击游戏《马科斯·佩恩》、《红色派系》（Red Faction）和《英雄萨姆》等。</p>
		<p>《部落2》采用的是V12引擎，这款引擎虽然无法同Quake III和Unreal Tournament相提并论，但开发者为它制定的许可模式却相当新颖，你只需花上100美元就可以获得引擎的使用权，不过天下没有免费的午餐，随之而来的一系列规定相当苛刻，例如，开发者不能把该引擎用于为其它游戏发行商、其它商业游戏站点等竞争对手制作游戏，开发出来的游戏必须在发行前交给 GarageGames公司（V12引擎的所有者），不能交给任何第三方，GarageGames公司将拥有这些游戏五年的独家发行权等等。尽管如此，对于那些规模较小的独立开发者来说，这个超低价引擎仍然具有非常大的吸引力。</p>
		<p>《马科斯·佩恩》采用的是MAX-FX引擎，这是第一款支持辐射光影渲染技术（Radiosity Lighting）的引擎，这种技术以往只在一些高级的建筑设计软件中出现过，它能够结合物体表面的所有光源效果，根据材质的物理属性及其几何特性，准确地计算出每个点的折射率和反射率，让光线以更自然的方式传播过去，为物体营造出十分逼真的光影效果。MAX-FX引擎的另一个特点是所谓的“子弹时间” （Bullet Time），这是一种《黑客帝国》风格的慢动镜头，在这种状态下甚至连子弹的飞行轨迹都可以看得一清二楚。MAX-FX引擎的问世把游戏的视觉效果推向了一个新的高峰。</p>
		<p>《红色派系》采用的是Geo-Mod引擎，这是第一款可任意改变几何体形状的3D引擎，也就是说，你可以使用武器在墙壁、建筑物或任何坚固的物体上炸开一个缺口，穿墙而过，或者在平地上炸出一个弹坑躲进去。Geo-Mod引擎的另一个特点是高超的人工智能，敌人不仅仅是在看见同伴的尸体或听见爆炸声后才会做出反应，当他们发现你留在周围物体上的痕迹如弹孔时也会警觉起来，他们懂得远离那些可能对自己造成伤害而自己又无法做出还击的场合，受伤的时候他们会没命地逃跑，而不会冒着生命危险继续作战。 </p>
		<p>《英雄萨姆》采用的是Serious引擎，这款引擎最大的特点在于异常强大的渲染能力，面对大批涌来的敌人和一望无际的开阔场景，你丝毫不会感觉到画面的停滞，而且游戏的画面效果也相当出色。此外值得一提的还有《海底惊魂》（AquaNox）所用的Krass引擎，这款引擎被作为GeForce 3的官方指定引擎，专门用于宣传、演示GeForce 3的效果，视觉方面的表现无可挑剔。 </p>
		<p>可以看出，2001年问世的几部引擎依旧延续了两年多来的发展趋势，一方面不断地追求真实的效果，例如MAX-FX引擎追求画面的真实，Geo- Mod引擎追求内容的真实，《军事冒险家》（Soldier of Fortune）的GHOUL引擎追求死亡的真实；另一方面则继续朝着网络的方向探索，如《部落2》、《要塞小分队2》（Team Fortress 2），以及Monolith公司那款尚未公布的大型网络游戏。 </p>
		<p>不过，由于受到技术方面的限制，把第一人称射击游戏放入大型网络环境中的构想至少在目前还很难实现。众所周知，一般的大型网络游戏多为节奏较慢的角色扮演游戏，这些游戏所使用的引擎，无论是《卡米洛特的黑暗年代》（Dark Age of Camelot）使用的NetImmerse引擎，还是《地平线：伊斯塔里亚大陆》（Horizons：Empires of Istaria）使用的Horizons引擎，或是“据说可以保证50万人在同一虚拟世界中尽情游戏而不会有任何滞后感”的Big World引擎，都无法支持一个供数百名玩家同时战斗的大型团队动态环境。正是基于这样的考虑，id Software公司重新把目光放在了单人模式上，去年年底公布的《雷神之锤4》和《毁灭战士3》将重新建构一个以单人游戏为主的引擎。与此同时，老对手 Epic游戏公司也在紧锣密鼓地开发新一代Unreal引擎和《虚幻竞技场2》的引擎。尽管目前关于这几款引擎的具体资料并不多，但从已展示的几段采用新引擎实时渲染的动画片段来看，它们的确完全超越了市面上的其它引擎，预示着一个新的引擎时代的到来。 </p>
		<p>最后需要指出的是，许多优秀的游戏开发者正在退出游戏开发市场，转而进入引擎授权市场，仅靠开发引擎吃饭，这是个危险的信号。尽管引擎的不断进化使游戏的技术含量越来越高，但最终决定一款游戏是否优秀的因素在于使用技术的人而不是技术本身。如前所述，引擎相当于游戏的框架，框架打好后，你只需往里填充内容即可，在这里，框架只是提供了一种可能性，游戏的精彩与否取决于内容如何而非框架如何。正如《无人永生》开发小组所说：“所有问题最终都会归结为一点 ——你的游戏是否好玩。” </p>
		<p>---全文完--- </p><img src ="http://www.cppblog.com/CornerZhang/aggbug/79844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-04-14 01:10 <a href="http://www.cppblog.com/CornerZhang/archive/2009/04/14/79844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 代码技巧 (续 02)</title><link>http://www.cppblog.com/CornerZhang/archive/2009/04/13/79004.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Mon, 13 Apr 2009 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/04/13/79004.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/79004.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/04/13/79004.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/79004.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/79004.html</trackback:ping><description><![CDATA[<p>6 头文件依赖，Pimpl法，加速编译<br />   举个例子:<br />      // File: SoundSystem.h<br /><br />      #include "StreamFilter.h"<br />      #include "Emitters."<br /><br />      <a title="class" href="http://www.cppblog.com/CornerZhang" >class</a> SoundSystem {<br />      public:<br />         // ...<br />      private:<br />         StreamFilter currentFilter;<br />         EmitModeConfig modeConfig;<br />      };<br />   一目了然的是，看得出SoundSystem实现使用了StreamFilter和EmitModeConfig的定义，所以#include 了他们的定义在此SoundSystem.h中，可是随着项目的不断推进，class SoundSystem中依赖的使用类型会增多，它的header被引入到其它模块中，不知不觉的编译时间越来越长，改进之：<br />      // File: SoundSystem.h<br /><br />      <a title="class" href="http://www.cppblog.com/CornerZhang" >class</a> StreamFilter;<br />      <a title="class" href="http://www.cppblog.com/CornerZhang" >class</a> EmitModeConfig;<br /><br />      <a title="class" href="http://www.cppblog.com/CornerZhang" >class</a> SoundSystem {<br />      public:<br />         // ...<br />      private:<br />         StreamFilter* currentFilterPtr;<br />         EmitModeConfig* modeConfigPtr;<br />      };<br /><br />      // File: SoundSystem.cpp<br />      #include "StreamFilter.h"<br />      #include "Emitters."<br /><br />      SoundSystem::SoundSystem() {<br />         //...<br />         currentFilterPtr = new StreamFilter;<br />         modeConfigPtr = new EmitModeConfig;<br />      }<br /><br />      SoundSystem::~SoundSystem() {<br />         delete currentFilterPtr;<br />         delete modeConfigPtr;<br />         //...<br />      }<br />      这么一来，把StreamFilter和EmitModeConfig的#include藏到了SoundSystem的实现代码中，以后对SoundSystem的部分改动不会导致其它模块的rebuild哦，不过由此可能会牺牲一点效率吧!</p>
		<p>      记得，有位微软的C++翘楚人物，Herb Sutter给这种技巧称为Pimpl ( Private Implemention ), 用的恰到好处时，可以提高项目开发速度，同时模块的头文件间的#include关系得以缓解，可以避开循环依赖，而且可以获得一个良好的物理设计。<br /><br />( to be continued )</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/79004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-04-13 17:35 <a href="http://www.cppblog.com/CornerZhang/archive/2009/04/13/79004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 代码技巧 (续 01)</title><link>http://www.cppblog.com/CornerZhang/archive/2009/04/05/79003.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 05 Apr 2009 05:41:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/04/05/79003.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/79003.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/04/05/79003.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/79003.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/79003.html</trackback:ping><description><![CDATA[<p>4 更好的使用标准库中的字符串类 (std::basic_string&lt;class Char, <a title="class" href="/CornerZhang">class</a> CharTraits, <a title="class" href="/CornerZhang">class</a> Alloc&gt;)</p>
		<p>   如果在一个实际的项目中要使用标准库的std::string 或 std::wstring，会发现随着时间的推移，越会产生出重写一个自己的字符串类之冲动，而std::string的接口如此之好用，同时code里到处是std::string这样的东西，有时又要向多字节字符转换。此处有一个比较好的方案，不过最好从项目开始就实施：<br />   typedef unsigned char UChar;<br />   typedef unsigned short UWChar;<br /><br />   typedef std::allocator StringAllocator;   // 使得以后有针对字符串分配优化<br /><br />   typedef std::basic_string&lt; UChar, std::char_traits&lt;UChar&gt;, StringAllocator&lt;UChar&gt; &gt; String;<br />   typedef std::basic_string&lt; UWChar, std::char_traits&lt;UWChar&gt;, StringAllocator&lt;UWChar&gt; &gt; WString; // 宽字符版本<br /><br />然后，在项目中就可以使用这个经过定制的String / WString。<br /><br />5 函数名称重载是C++很好的特性，适当使用会带来很好的效果，有时却会自找麻烦，下面就是一例:<br />   <a title="class" href="/CornerZhang">class</a> EntityDefination {<br />   public:<br />      //...<br />      Entity* GetEntity(const char* name);<br />      Entity* GetEntity(const unsigned id);   // 重载<br />   };<br />   自认为这样很好不是吗？<br />   有一次，我写了这样一行代码:<br />   Entity* result = entDef-&gt;GetEntity(0);<br />   知道，发生什么事吗，这是个对GetEntity(const unsigned id)的调用，虽说这是一行测试代码，但足以说明我的类接口上的信息缺了些，遂做了如下改动:<br />      Entity* GetEntityByName(const char* name);<br />      Entity* GetEntityByID(const unsigned id);<br /><br />然后，看看：<br />     Entity× result = entDef-&gt;GetEntityById(0);   // 哈哈！错误一目了然，眼睛调试 :)<br /><br /><br /><br />(to be continued!)</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/79003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-04-05 13:41 <a href="http://www.cppblog.com/CornerZhang/archive/2009/04/05/79003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 代码技巧</title><link>http://www.cppblog.com/CornerZhang/archive/2009/04/02/78734.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 02 Apr 2009 12:13:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/04/02/78734.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/78734.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/04/02/78734.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/78734.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/78734.html</trackback:ping><description><![CDATA[1 在开发维护代码的过程中，对构造、析构函数的修改比较频繁，所以将它们的实现放在.cpp文件中<br /><br />2 保证 operator = 的不变性，保证对象不会处于部分构造状态:<br />   通常的技巧就是:<br />   T&amp; T::operator = (const T&amp; rhs) {<br />      T temp(rhs);<br />      this-&gt;swap(temp);   // 实现swap<br />      return *this;<br />   }<br /><br />3 整数转字符(int convert to string)<br />   std::string itos_ctm(int num) {<br />      std::stringstream s;<br />      s&lt;&lt;num;<br />      return s.str();<br />   }<br /><br />(to be continued)<img src ="http://www.cppblog.com/CornerZhang/aggbug/78734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-04-02 20:13 <a href="http://www.cppblog.com/CornerZhang/archive/2009/04/02/78734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有人在管制这个国家吗？ [转]</title><link>http://www.cppblog.com/CornerZhang/archive/2009/01/08/71496.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 08 Jan 2009 06:45:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2009/01/08/71496.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/71496.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2009/01/08/71496.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/71496.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/71496.html</trackback:ping><description><![CDATA[<p>转帖 [梁文道] <a href="http://www.bullog.cn/blogs/liangwendao/archives/180823.aspx">http://www.bullog.cn/blogs/liangwendao/archives/180823.aspx</a></p>
		<p>梁文道 @ 2008-9-23 2:43:24 阅读(9027) 评论(63) 引用通告 分类: 未归类 <br />改革开放三十年来的中国就像以往的「东亚四小龙」，国家机器的合法性不是建立在形式保证的民众授权之上(如选举)，而是在于经济增长与人民生活的基本保障。至于大家认识到的民族主义和爱国主义等意识形态，其实只是一道黏合剂，让百姓感到自己生活的富足安定是国家的赐予，民族的自豪。假如民生凋敝，社会不安，再多的爱国宣传也挽救不了统治的危机。</p>
		<p>难怪中国政府一直致力于经济的高速增长，因为这正是官方共产主义破产之后仍然力保政权不坠的不二法门。其中的等式是这样的：经济发展等于百姓生活无忧，百姓生活无忧就等于政府长治久安。</p>
		<p>明乎此，便能了解近日「毒奶事件」的严重了。纵观这件事的来龙去脉，我们看见的不只是商人的贪婪无良，还是各个部门各级政府的集体缺席。</p>
		<p>早 在今年二月，就有消费者向工商局投诉「三鹿」奶粉的质量有问题。但当局的回应竟然是要该名消费者先给两万块钱人民币，才能替他检测相关产品！作风就和救命 得先缴订金的无良医院一样。如果政府连它该尽的本份也要收钱才做，谁还需要政府呢？何不干脆让民间自行开办产品检试实验室？说不定取价还能便宜点呢。</p>
		<p>能 够预先测知并且处理牛奶问题的部门有一大串，但它们全到哪里去了呢？至于地方政府，从石家庄市到河北省都曾接过投诉，他们的响应是什么？就算出动到了新西 兰政府，他们依然默不作声。我很难想象新西兰总理打电话给温家宝，对他说「你们那里的牛奶出事了，他们没告诉你吗？」的情景。我只感到政府好像不见了。这 是不是个体制问题？当然是！但它甚至已经和民主不民主无关了。就算是在「东亚四小龙」式的威权体制之下，这种无政府状态也很难发生。不要搞错，就算是邓小 平式的强人统治，也不大可能出现这种整体管治失效的情况。</p>
		<p>政府已经不能保障人民生命的安全，它还能够维持经济的高速增长吗？由次按风暴引发的全球金融海啸必将打击中国来年的出口贸易，我们的内需再怎么扩大也补不上那巨大的缺口吧？</p>
		<p>如此一来，这个国家的合法性能不遇到空前的危机吗？到底有没有人在管治这个国家呢？肯定有，最起码还要有政府部门勒令媒体不得擅自报道毒奶事件，更不能发布类似这篇文章的评论。这是我最能感到政府存在的环节。<br /></p><img src ="http://www.cppblog.com/CornerZhang/aggbug/71496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2009-01-08 14:45 <a href="http://www.cppblog.com/CornerZhang/archive/2009/01/08/71496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优良C++程序设计的法则</title><link>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69049.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 14 Dec 2008 14:23:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69049.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/69049.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/69049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/69049.html</trackback:ping><description><![CDATA[<p>
				<font style="BACKGROUND-COLOR: #000000" color="#ffffff">1 首先，了解自己。这样才能知道，哪些是与机器打交道的人是可以做到的，而哪些是不能做的<br />2 知识结构中，一定要对计算机这个"二进制编码系统"有所了解，所以为什么好多C/C++大师人物，推荐学习汇编和现代计算机体系结构<br />    因为，虽说现代的优化编译器很好，但是从另一个角度来说，我们所做的所有编码任务最终要被映射到计算机硬件（这个经过"预编码的二进制系统"，而且硬件本身也有缺陷）环境上，所以这样有助于了解程序到底做了什么事，有助于写出便于调试和优化的代码。<br />3 C++语言各个特性对设计产生的影响<br />4 数据结构、算法的熟悉，这是基本功<br />5 确定目标，人员的，与时间表，尽可能早的让市场人员参与进来，所以建立一些个release point and demo<br />6 让项目相关人员一起讨论，统一口头词汇，一些行业背景概念，建立技术规范说明书（不宜晦涩难懂），统一技术词汇，要有个大家都能接受的代码规范说明，和命名规则，以及一些必要的原则，尽可能多的在这个阶段吧每一项都化为白纸黑字。<br />还有，最重要的是工作内容的量化评估系统！<br />7 模块划分时，考虑参与人员的数量和任务分配，如何使他们有利于分配到自己每一天的任务表中。考虑与代码管理系统的整合关系<br />8 良好接口所拥有的特征审查表: （你会发觉，只要当你不断调整你的借口定义来满足以下四项中的三项时，代码重用性很好，因为这是个符合人性的定义，便于记忆！）<br />    a 功能的正交分解<br />    b 最小化的接口<br />    c 最明确的函数调用语义<br />    d 最适合的出错检查机制<br /><br />9 实现接口时，同时写一些用户代码，以此检查功能正确性和用户端代码的编程范型。由此，推动良好接口的产生<br />10 在接口中写下定义这个接口的初衷，它的产生需求，以及限制与开发状态(实现完成度)<br />11 那些不能用代码描述的接口，就该化为文档<br />12 尽可能引诱那些愿意使代码高质量的程序员参与进来<br />13 接下来... ...精益求精ing<br /></font>
		</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/69049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2008-12-14 22:23 <a href="http://www.cppblog.com/CornerZhang/archive/2008/12/14/69049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不满意的这一年</title><link>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69052.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Sun, 14 Dec 2008 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69052.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/69052.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2008/12/14/69052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/69052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/69052.html</trackback:ping><description><![CDATA[<p>
				<font style="BACKGROUND-COLOR: #000000" color="#ffffff">早期完成的两个模块用不上，也就是浪费了，不知当初做的是什么规划，而且拿的还是投资人的钱。至今，还没有一个真能领班的，所以，进度总是缓慢，人心定不下啊。<br /><br />考虑下技术人员的立场，他们随着年纪的增大，照理来说对技术会越来越能把握住，可亲自私下问了几个，他们反而觉得没了方向，不知自己做的这些所谓逻辑程序员的活有啥意义，而且技术能力没有多大增长，就是又多写了些小游戏的游戏逻辑代码，而且看他们又是累死累活的自愿加班，这样下去，造了太多的恶。庆幸的是，不是我做了这样的安排。<br /><br />我知道，我也走过来的，对他们个人而言实在浪费时间，除了那一般的收入之外，而且，健康的支出、对他们亲人的陪伴时间减少（太多年轻人的悲欢离合发生中...），太多的隐患！<br /><br />我就不信，在让整个公司运营起来，有一定的收入的同时，就不能照顾自己的好员工！<br /><br /><br /><br /><br /><br />想了想，现在中国政治的形态就是个“北奥模式"，这个模式将会在今后以不同的形态的于经济实体中复现！ </font>
		</p><img src ="http://www.cppblog.com/CornerZhang/aggbug/69052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2008-12-14 21:27 <a href="http://www.cppblog.com/CornerZhang/archive/2008/12/14/69052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载] NXN -  AlienBrain Server 的安装</title><link>http://www.cppblog.com/CornerZhang/archive/2008/12/04/68543.html</link><dc:creator>Corner Zhang</dc:creator><author>Corner Zhang</author><pubDate>Thu, 04 Dec 2008 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/CornerZhang/archive/2008/12/04/68543.html</guid><wfw:comment>http://www.cppblog.com/CornerZhang/comments/68543.html</wfw:comment><comments>http://www.cppblog.com/CornerZhang/archive/2008/12/04/68543.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/CornerZhang/comments/commentRss/68543.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CornerZhang/services/trackbacks/68543.html</trackback:ping><description><![CDATA[<p class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id="blogtitle_fks_085065087085085070086094081095087095084069085095">[NXN] AlienBrain Server 的安装</p>
		<div class="g_blog_list">
				<div class="g_t_center g_c_pdin g_p_center c07 content" id="blogtext_fks_085065087085085070086094081095087095084069085095" style="WIDTH: 760px">1. 首先需要 Windows Server 版系统，比如 win2000 server<br />2. 安装过程中，要设置一个 Center Server Name，就用本机的 hostname，不要乱改。（以后 NXN Admin 工具 connect to server 的 server name 就要填这个）<br />3. 新建一个 Project，然后设置好 User Management 中每个用户对此 Project 的访问权限，即可。<br /><br />官方上有教程<br /><a href="http://www.softimage.com/products/alienbrain/" target="_blank"><font color="#4f4fa3">http://www.softimage.com/products/alienbrain/</font></a></div>
		</div><img src ="http://www.cppblog.com/CornerZhang/aggbug/68543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CornerZhang/" target="_blank">Corner Zhang</a> 2008-12-04 11:00 <a href="http://www.cppblog.com/CornerZhang/archive/2008/12/04/68543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>