Rise的自留地

记录生活中的点滴,分享编程技术和游戏开发经验。

0%

团队,究竟是什么制度的?拓展训练据说是要问这个问题的。

在训练的一个游戏上,似乎感悟到了一点东西,不敢藏掖,遂贴于此。

10个人站在两根平行放置的木板上,两根木板很重,一个人抬不起来,每个木板上隔一段距离绑一根绳子,共绑有10根绳子。十个人站在这两根木板上,左右手各自抓握对应的一组绳子,然后向前迈进。

这个游戏的关键是:

1 当十个人同时迈左脚时,必须把重心全部放到右脚上而使左脚悬空,否则通过拉绳子是拉不起来左边的这块木板的。右边的木板也同理。

2 必须有人指挥,否则,即便9个人迈了左脚,只要有一个人迈了右脚,就走不动。

3 只有十个人同时迈左脚,或者迈右脚时,才能走动。

关键就是指挥。

前三个团队都是一个人指挥十个人,我们称这种制度为“民主集中制”。他们都在预定时间完成了任务,最快的一组:1分47秒。

我们团队的制度不同,我们是十个人同时呐喊口号,指挥者反倒晾在一边,这种制度大凡类似于“自由制”。结果是,我们团队速度最快,本可以在1分30秒左右冲线。由于十个人同时呐喊,在呐喊的同时每个人就知道自己该做什么,所以,速度非常快。十个人身形绝对统一,完美,近乎完美。

但,离终点只剩一点的地方,已经1分29秒了,我们遇到了一个小Bug。剩下的事情就……

十个人试图四次同时再次呐喊,但是每次,大家虽然都喊得很统一,但就是有人的身形无法跟上。第五次,不得不由一直被晾在一边的队长重新发令,我们破线的时候已经是2分了。

很可惜。

这似乎也折射出了团队制度的一些问题。

民主集中制,制度是一切,民主商议得到的结果,经由少数人形成决议,并将这些决议形成制度。而所有人,必须按照制度进行工作,不允许任何人有特殊化。民主集中制的结果,取决于决议形成的制度,也就是一开始的参议和决策过程。这个过程只要没有问题,那么最后最起码是能完成一个结果的,只不过可能不尽善尽美,但起码是可以达到的。这是大多数企业使用的管理模式——只不过很多企业是畸形的,参议权没有团队成员的份,少数人参议,少数人决议,少数人独裁——转化成了彻头彻尾的独裁制,在这个行业里混的兄弟姐妹们可不要告诉我你没看到过这种公司。好来不及鄙视他们,因为独裁不是我们的重点,而且这些企业现在都是某些势力的宠儿,别的不说什么,我们还得顾及自己的小命不是~。

民主集中制主要的效率问题是发生在执行期,执行的效率一般都比较低。因为制度和进度表一旦形成,人固有的惰性总会不由自主地向这个进度去靠,即便人们可以自觉自发地完成得更快更好,但是,制度相当于为人们的懒惰提供了法律依据。因此会有人说“项目总会超期,即便认识到这一点也是如此……”。但你如果是单枪匹马做一个小游戏,那么你反倒发现“项目总会早于预期的时间,即便认识到这一点也是如此……”了,这大约就是民主集中制的一些影响吧。^_^

另外,在民主集中制下,团队的凝聚力仅限于参议阶段,而非执行阶段,因此,也大打折扣。但与此同时,大团队的组织才有了可能。10个人的团队可以在执行期互通有无,拚命向前赶进度,但100个人呢?1000个人呢?

而自由制,它的好处是,对于小但素质高的团队、小目标而言,执行期的效率很高,每个人都会知道自己该做什么,也会努力去完成。但是,一旦发生方向性的或者重大的分歧,重新整合的难度会加大。

个人认为,民主集中制更适合正规而项目相对中型的团队,而自由制则适合于小型项目、小而稳定的团队,也就是小作坊。

制度没有好坏,没有最好的制度,没有最坏的制度,只有最适应的制度。一定的情况下,独裁也是好的抉择。用在团队上合适,用在社会上也合适。

制度就如同工具一般,只不过这种工具切换的时候总要有些麻烦,因此有时要刻意避免制度的切换。形而上学地去讨论制度的好坏,倒不如务实地分析自己所处的情况,选择对自己最有利的制度——哪怕是“德国国家社会主义”(考虑到某些神经脆弱的网友的请求,我以后绝对不会再用“纳粹”这个词)制度,在必要的历史时期也是可以选择的。

任何制度都会有弊端,也都会有相应地优点,因此,更重要的是分析自己,而不是盲目地跟随着上个世纪7、80年代的狂徒们一起去叫嚣“XX制度就是好”“XX制度就是不好”。已经21世纪了,我们毕竟应该像个人一样地活着,要有自己的头脑,用自己的分析,获得自己的结果。

嗯,好吧,偶然想到的也就写下来了。其实对于我大凡是没有区别的,作为团队的一员,发挥自己的参议权和主观能动性,在决议之后,按照已经生成的决议完成自己该做的工作,这大凡就是我们应该付出的责任吧。虽然我可能打心眼里喜欢那种狂放不羁的自由(谁不喜欢啊!),但是,或许更需要明白的是身为一个员工,身上沉甸甸的职责!

这是我收藏的一篇文章,每每在遇到挫折的时候就拿出来读一读,总是能给我动力!

这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。

一、底层开发包和工具
1. ::URL::http://www.mesa3d.org
Mesa 是一个类OpenGL( ::URL::http://www.opengl.org  )的开源实现。
2. ::URL::http://openil.sourceforge.net
DevIL (即以前的OpenIL)是一个跨平台的图形处理包,支持
BMP、JPG、GIF 等多种图形文件格式。
二、2D 游戏开发包
1. ::URL::http://www.libsdl.org/
::URL::http://www-900.ibm.com/developerWorks/cn/linux/theme/special/
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体和游戏开
发包,提供2D、音频、事件驱动、多线程和定时器等服务,并有大
量的扩充开发包,如TCP/IP 网络、游戏角色、混音等。SDL 是用C
开发的,但也有Perl、PHP、Delphi 等多种语言的版本。
2. ::URL::http://www.clanlib.org
ClanLib 是一个通用的C++游戏开发包,提供游戏资源操作、网络
对象处理、GUI 主题和游戏脚本等支持。支持Windows 和Linux。
PMT Files – Open Source Game Development
三、3D 引擎和游戏开发包
1. ::URL::http://crystal.sourceforge.net/
Crystal Space 是一个用C++开发的3D 游戏开发包。有丰富的
功能,支持Direct3D、OpenGL、Glide 等。
2. ::URL::http://ogre.sourceforge.net/
OGRE 是一个面向对象的3D 引擎,支持DirectX、OpenGL 和
Glide 等。
3. ::URL::http://hem.passagen.se/opengl/glfw/
GLFW 是一个OpenGL 的应用框架,支持Linux 和Windows。
4. ::URL::http://apocalyx.sourceforge.net/
Apocalyx 是一个基于OpenGL 的3D 引擎。
5. ::URL::http://www.faktiss.net/
Nive 是一个C++ 3D 引擎,基于OpenGL 和
DevIL,支持Windows 和Linux/Xwindow。
6. ::URL::http://plib.sourceforge.net/
Plib 是一个3D 游戏开发包。
7. ::URL::http://alleg.sourceforge.net/ Allegro 是一个跨平台的C/C++游戏开发包,提供2D、3D、声效、用
户输入、文件、压缩、GUI 等功能。
PMT Files – Open Source Game Development
四、游戏和游戏框架
1. ::URL::http://www.freecraft.org/
FreeCraft 是一个实时战略游戏(RTS)框架。
2. ::URL::http://www.worldforge.org/ Worldforge 是一个完整的大型网络RPG 游戏框架。
3. ::URL::http://arianne.info/
Arianne 是一个大型网络RPG 游戏,同时也是一个游戏框架。
五、其他
1. ::URL::http://openai.sourceforge.net/ OpenAI 是一个人工智能的工具包,包括神经网络、遗传算
法、有限状态机等。
一、英文网站
1. ::URL::http://www.flipcode.com/
Daily Game Development News & Resources
2. ::URL::http://www.gamedev.net/
All Your Game Development Needs
3. ::URL::http://www.gamedeveloper.net/
4. ::URL::http://www.gametutorials.com/
Game Programming with Personality, From Start to Finish
5. ::URL::http://www.cfxweb.net/
Demo & Game Development
6. ::URL::http://www.gdse.com
The Game Programming and Design Search Engine
7. ::URL::http://www.2dgame-tutorial.com
8. ::URL::http://www.gamasutra.com/
CMP - The Art & Science of Making Games
9. ::URL::http://www.gdmag.com/
CMP - Game Developer Magazine
二、中文网站
1. ::URL::http://www.gameres.com/
中文游戏开发技术资料和交流
2. ::URL::http://mays.soage.com/
中国游戏开发者
3. ::URL::http://www.gpgame.net
金点工作室
4. ::URL::http://www.codingnow.com
云风工作室
5. ::URL::http://lightwing.myrice.com/
琴心剑胆
6. ::URL::http://www.diamondgarden.net/
钻石花园
7. ::URL::http://www.joynb.com/
无名鸟游戏工作室
8. ::URL::http://www.npc6.com/
何苦做游戏,游戏制作的文化
PMT Files – Game Development Website
三、Linux 游戏及其开发网站
1. ::URL::http://www.happypenguin.org
The Linux Game Tome
2. ::URL::http://linuxgames.com/
Linux Games - For the people
3. ::URL::http://h.webring.com/webring?ring=linuxgp;list
Linux Game Programming Webring

  • 优化
  • /O1 最小化空间 minimize space
  • /Op[-] 改善浮点数一致性 improve floating-pt consistency
  • /O2 最大化速度 maximize speed
  • /Os 优选代码空间 favor code space
  • /Oa 假设没有别名 assume no aliasing
  • /Ot 优选代码速度 favor code speed
  • /Ob 内联展开(默认 n=0) inline expansion (default n=0)
  • /Ow 假设交叉函数别名 assume cross-function aliasing
  • /Od 禁用优化(默认值) disable optimizations (default)
  • /Ox 最大化选项。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
  • /Og 启用全局优化 enable global optimization
  • /Oy[-] 启用框架指针省略 enable frame pointer omission
  • /Oi 启用内建函数 enable intrinsic functions
  • 代码生成
  • /G3 为 80386 进行优化 optimize for 80386
  • /G4 为 80486 进行优化 optimize for 80486
  • /GR[-] 启用 C++ RTTI enable C++ RTTI
  • /G5 为 Pentium 进行优化 optimize for Pentium
  • /G6 为 Pentium Pro 进行优化 optimize for Pentium Pro
  • /GX[-] 启用 C++ 异常处理(与 /EHsc 相同) enable C++ EH (same as /EHsc)
  • /EHs 启用同步 C++ 异常处理 enable synchronous C++ EH
  • /GD 为 Windows DLL 进行优化 optimize for Windows DLL
  • /GB 为混合模型进行优化(默认) optimize for blended model (default)
  • /EHa 启用异步 C++ 异常处理 enable asynchronous C++ EH
  • /Gd __cdecl 调用约定 __cdecl calling convention
  • /EHc extern "C"默认为 nothrow extern “C” defaults to nothrow
  • /Gr __fastcall 调用约定 __fastcall calling convention
  • /Gi[-] 启用增量编译 enable incremental compilation
  • /Gz __stdcall 调用约定 __stdcall calling convention
  • /Gm[-] 启用最小重新生成 enable minimal rebuild
  • /GA 为 Windows 应用程序进行优化 optimize for Windows Application
  • /Gf 启用字符串池 enable string pooling
  • /QIfdiv[-] 启用 Pentium FDIV 修复 enable Pentium FDIV fix
  • /GF 启用只读字符串池 enable read-only string pooling
  • /QI0f[-] 启用 Pentium 0x0f 修复 enable Pentium 0x0f fix
  • /Gy 分隔链接器函数 separate functions for linker
  • /GZ 启用运行时调试检查 enable runtime debug checks
  • /Gh 启用钩子函数调用 enable hook function call
  • /Ge 对所有函数强制堆栈检查 force stack checking for all funcs
  • /Gs[num] 禁用堆栈检查调用 disable stack checking calls
  • 输出文件
  • /Fa[file] 命名程序集列表文件 name assembly listing file
  • /Fo 命名对象文件 name object file
  • /FA[sc] 配置程序集列表 configure assembly listing
  • /Fp 命名预编译头文件 name precompiled header file
  • /Fd[file] 命名 .PDB 文件 name .PDB file
  • /Fr[file] 命名源浏览器文件 name source browser file
  • /Fe 命名可执行文件 name executable file
  • /FR[file] 命名扩展 .SBR 文件 name extended .SBR file
  • /Fm[file] 命名映射文件 name map file
  • 预处理器
  • /FI 命名强制包含文件 name forced include file
  • /C 不吸取注释 don’t strip comments
  • /U 移除预定义宏 remove predefined macro
  • /D{=|#} 定义宏 define macro
  • /u 移除所有预定义宏 remove all predefined macros
  • /E 将预处理定向到标准输出 preprocess to stdout
  • /I 添加到包含文件的搜索路径 add to include search path
  • /EP 将预处理定向到标准输出,不要带行号 preprocess to stdout, no #line
  • /X 忽略"标准位置" ignore “standard places”
  • /P 预处理到文件 preprocess to file
  • 语言
  • /Zi 启用调试信息 enable debugging information
  • /Zl 忽略 .OBJ 中的默认库名 omit default library name in .OBJ
  • /ZI 启用调试信息的"编辑并继续"功能 enable Edit and Continue debug info
  • /Zg 生成函数原型 generate function prototypes
  • /Z7 启用旧式调试信息 enable old-style debug info
  • /Zs 只进行语法检查 syntax check only
  • /Zd 仅要行号调试信息 line number debugging info only
  • /vd{0|1} 禁用/启用 vtordisp disable/enable vtordisp
  • /Zp[n] 在 n 字节边界上包装结构 pack structs on n-byte boundary
  • /vm 指向成员的指针类型 type of pointers to members
  • /Za 禁用扩展(暗指 /Op) disable extensions (implies /Op)
  • /noBool 禁用bool关键字 disable “bool” keyword
  • /Ze 启用扩展(默认) enable extensions (default)
  • 杂项
  • /?, /help 打印此帮助消息 print this help message
  • /c 只编译,不链接 compile only, no link
  • /W 设置警告等级(默认 n=1) set warning level (default n=1)
  • /H 最大化外部名称长度 max external name length
  • /J 默认 char 类型是 unsigned default char type is unsigned
  • /nologo 取消显示版权消息 suppress copyright message
  • /WX 将警告视为错误 treat warnings as errors
  • /Tc 将文件编译为 .c compile file as .c
  • /Yc[file] 创建 .PCH 文件 create .PCH file
  • /Tp 将文件编译为 .cpp compile file as .cpp
  • /Yd 将调试信息放在每个 .OBJ 中 put debug info in every .OBJ
  • /TC 将所有文件编译为 .c compile all files as .c
  • /TP 将所有文件编译为 .cpp compile all files as .cpp
  • /Yu[file] 使用 .PCH 文件 use .PCH file
  • /V 设置版本字符串 set version string
  • /YX[file] 自动的 .PCH 文件 automatic .PCH
  • /w 禁用所有警告 disable all warnings
  • /Zm 最大内存分配(默认为 %) max memory alloc (% of default)
  • 链接
  • /MD 与 MSVCRT.LIB 链接 link with MSVCRT.LIB
  • /MDd 与 MSVCRTD.LIB 调试库链接 link with MSVCRTD.LIB debug lib
  • /ML 与 LIBC.LIB 链接 link with LIBC.LIB
  • /MLd 与 LIBCD.LIB 调试库链接 link with LIBCD.LIB debug lib
  • /MT 与 LIBCMT.LIB 链接 link with LIBCMT.LIB
  • /MTd 与 LIBCMTD.LIB 调试库链接 link with LIBCMTD.LIB debug lib
  • /LD 创建 .DLL Create .DLL
  • /F 设置堆栈大小 set stack size
  • /LDd 创建 .DLL 调试库 Create .DLL debug libary
  • /link 链接器选项和库 linker options and libraries

《Advanced Animation with DirectX》

这本书主要讲的是怎样用DirectX9来完成游戏中的动画,主要是移动、骨骼动画等等,也涉及了不少的3d模型的知识。这本书起步比较的高,没有讲太多的DirectX9的基础,但是章节安排得十分合理,由简入难,是一本初学者和高手都比较适用的书。

其实很简单,但如像我一样不怎么用UltraEdit的朋友们来说,可能不太清楚。首先去UltraEdit的官网下载支持Lua的Wordfiles文件(这里),是个文本文件(lua.txt)。打开UltraEdit安装目录下的wordfile.txt,把lua.txt文件中的内容拷贝粘贴到wordfile.txt的末尾,存盘,OK,于是UltraEdit语法高亮项多出Lua一项,可以选择使用了。其他语言的语法高亮支持与此类似。

直接贴代码吧,保存成**.reg,导入就可以了,感谢cnnod32cn.cn提供服务器.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Eset\Nod\CurrentVersion\Modules\Update\Settings]

“PROFILES_ENABLED”=dword:00000000

“DefaultServerCount”=dword:00000005

“DefaultServer0”=“ http://u1.cnnod32.cn

“DefaultServer1”=“ http://u2.cnnod32.cn

一个人真正睡着觉最多只有两个钟头,其余都是浪费时间,躺在枕头上做梦,没有哪个人不做梦。至于醒来觉得自己没有做梦,那是因为他忘记了。通常一个人睡两个钟头就够了,为什么有人要睡七、八个钟头?那是你赖床躺在枕头上休息的习惯养成的,并非我们需要那么久的睡眠时间,尤其打坐做功夫的人晓得,正午只要闭眼真正睡着三分钟,等于睡两个钟头,不过要对好正午的时间。夜晚则要在正子时睡着,五分钟等于六个钟头。就这个时间的学问又大了,同宇宙法则、地球法则、易经阴阳的道理有关系,而且你会感觉到,心脏下面硬是有一股力量降下来,与丹田(肾上)的力量融合,所谓“水火既济”,豁然一下,那你睡眠够了,精神百倍。所以失眠或真要夜里熬夜的人,正子时的时刻,哪怕   二十分钟也一定要睡,睡不着也要训练自己睡着。过了正子时大约十二点半以后,你不会想睡了,这很糟糕。更严重的,到了天快亮,四、五点钟,五、六点卯时的时候,你又困得想睡,这时如果一睡,一天都会昏头。所以想从事熬夜工作的人,正子时,即使有天大的事也要摆下来,睡它半小时,到了卯时(7:00)想睡觉千万不要睡,那一天精神就够了。不过失眠的人都挨过十二点,在床上翻来覆去睡不着,结果快天亮睡着了,到第二天下午都昏头昏脑,因此你会感觉失眠、睡眠不足,实际上是你没有经验。
大家可以试试看看效果吧。

消息的接收

消息的接收主要有3个函数:GetMessagePeekMessageWaitMessage

  • GetMessage原型如下:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); 该函数用来获取与hWnd参数所指定的窗口相关的且wMsgFilterMin和wMsgFilterMax参数所给出的消息值范围内的消息。需要注意的是,如果hWnd为NULL,则GetMessage获取属于调用该函数应用程序的任一窗口的消息,如果wMsgFilterMin和wMsgFilterMax都是0,则GetMessage就返回所有可得到的消息。函数获取之后将删除消息队列中的除WM_PAINT消息之外的其他消息,至于WM_PAINT则只有在其处理之后才被删除。