- 博客(106)
- 资源 (1)
- 收藏
- 关注
原创 Path环境变量包含不存在的路径时对dll搜索的影响
在Windows中,根据MSDN的文档,某些情况下应用程序运行时会在Path环境变量指定的目录中搜寻它需要的dll。那么如果Path中包含一个不存在的路径,Windows会如何处理这种情况?我本以为这些路径会被忽略,然后Windows会继续搜索,后来发现其实不然。至少在Windows 7上,cmd和Msys的行为不完全是这样。
2014-10-13 09:37:05
4420
原创 过度设计,被教育
昨天完善创建角色的游戏服务端逻辑。创建角色失败时,服务端要告知客户端具体的错误原因——比如角色名不可用,或SQL语句错误等。代码中原有的思路是,向客户端发一个ID为CREATE_PLAYER_ERR的包(这个ID是应用层的协议),包内含有具体的错误码,客户端在CREATE_PLAYER_ERR包的处理函数中根据错误码向玩家显示具体的出错消息。 我们的服务端是由C++和lua
2014-02-19 19:10:55
1600
1
原创 我擦咧!SourceForge真出问题了!
今天收到师兄需求,本打算下班后赶紧给实现了提交到SourceForge上。谁知写好代码后,提交时总是遇到can't open file 'txn-current-lock': permission denied的错误。怎么设置工作目录的权限都没用。查网上发现都是Linux平台的事,而且说的都是Repository的问题。可我这明明是Windows平台下的TortoiseSVN客户端啊!怎么都想不通
2014-02-18 22:49:55
1992
原创 2013年总结
本来2013年底2014年初对我来说是一个很好的总结与审视自己的时机——因为我在2013年最后一天结束了在英佩的工作,也离开了上海,回到了家乡广州,准备在广州开启新的工作;不过这年终总结却迟迟未憋出来。 我回顾了过去的一年,发现自己好像并没有系统而专注地掌握任何一门新技术。年初的时候想学DirectX,跟着一个Tutorial学了几节,但很快因为没有时间加上动力不足而放弃了。后来想学
2014-02-02 18:46:40
1528
2
原创 第一次遇到死锁——记一次程序卡住问题的错误排查过程
10月24日,周四 我负责的游戏启动程序(Launcher)更新上线后,临下班前接到运营消息,反映部分网吧启动Launcher后无反应。跑到客服现场,通过QQ远程桌面观察到如下现象:双击程序图标后,程序出现在任务管理器进程列表里,但无任何其它反应,没有任何界面弹出;然后程序就一直这样无任何响应,只能在任务管理器中把进程杀掉。 于是在现场通过Process Explore
2013-10-31 12:25:26
10132
原创 替人“擦屁股”
在企业工作了一年多,发现经常要替别人“擦屁股”,有时候别人也要替我“擦屁股”。这可能是以前我所在的学术圈(或者说学校)很少发生的事。在实验室里,大家各干各的,相互之间没什么交集。唯一接触过有印象的例子是,分析数据的时候,数据本身就不好,甚至是错误的。这时不管采用再强大的统计模型、再精良的软件都不可能分析出有价值的结果。悲剧的是我们数据分析人员往往是不敢质疑数据提供方的,因为现在是数据为王的时代,研
2013-10-27 23:29:26
3485
原创 好像还是有点浮躁
到这个月底,我进入游戏行业就有一年了。一年时间——也许很多职场新人经过一年之后,新鲜感大都荡然无存,激情也基本消失了。但说实话,我对这个行业,对这份工作的兴趣倒还真的越来越浓厚了。我对游戏制作的各个环节都感到越来越好奇,希望能在各个环节里折腾一番。然而这也给我自己带来了另一方面的担心——我感兴趣的东西似乎也太多了。我对游戏逻辑感兴趣,我对服务端架构感兴趣,我对外挂和反外挂感兴趣,我对客户端渲染感兴
2013-08-03 20:45:54
1193
原创 捣腾数字签名
昨天在公司的代码中,看见一个VC项目的Post Build Step会用signtool给项目生成的exe添加数字签名,而exe的某块代码会调用WinVerifyTrust这个Windows API来验证exe自己的数字签名。正好这几天稍微闲暇一些,在好奇心的驱使下便开始捣鼓起数字签名来。经过一天终于有点收获,大致理解数字签名是怎么一回事,也对公司代码的那两块地方比较理解了,于是做个小结。...
2013-06-23 22:12:29
12333
6
原创 绩效考核
前天迎来了人生第一次绩效考核。领导们对我给予了很大肯定,我也很受鼓励。自夸的话不必多说。倒是在考核中,我和领导们谈到了两个比较困扰的问题。 其实两个问题都可以归结为一个问题:如何有效利用自己极其有限的业余时间来提高自己?工作之后,自由时间远远没有读书时那么多了,下班回到家吃完饭收拾好通常都已经是9点多。一方面,现在工作上的任务越来越重,领导还给了我新的挑战——一人承担已有服务器运维监
2013-04-25 01:32:18
1235
原创 对这几天服务器崩溃的小结
3月28日,《寻龙》不删档测试正式开启。可是才开服几天,服务器就出现了多次崩溃。造成崩溃的代码有三处,其中有两处造成了全服掉线,而且这两处代码都是由我负责的,实在是一大耻辱。 第一处崩溃位于物品拾取逻辑中。怪物死亡掉落物品的时候,服务器会为每件物品创建一个对象。玩家对物品进行掷骰分配时会用到指向这些物品对象的指针。怪物尸体消失的时候,如果尸体里的物品还没有被拾取,物品对象就会随着尸体
2013-03-31 15:07:49
1228
转载 TortoiseSVN和Eclipse使用时需要注意的事项
1 不需要版本控制的目录:bin, genEclipse中新建的Android项目,包含两个不需要也不能版本控制的目录:bin,gen。其中bin就是编译的二进制文件的存放路径,gen是Android需要的资源文件的源文件存放的目录(就是R.java存放的地方,具体是干什么的,可以参照Android的SDK,反正就是一个文件定义一个类,类中的变量对应了程序中的资源ID)。这两个文件夹每次bui
2013-03-22 23:04:51
1550
原创 google-breakpad学习资料
最近一直想研究一下我们项目的程序是如何生成minidump和full dump的。从代码中查到minidump是用google-breakpad生成的,但full dump却不知道是怎么生成的。后来在网上搜了许久,才知道其实full dump也是minidump,只不过是带了额外信息的minidump。所以full dump也是google-breakpad生成的。 google-b
2013-03-19 23:31:16
1485
原创 历史文档——试用期总结
一、具体工作 从2012年8月20日入职至今,我在英佩游戏的试用期已过去了6个月。在这段时间里,我逐步熟悉了《寻龙》项目的情况。一开始只能改改UI脚本和数据,修复很简单的小bug,并且每修一个bug都要花费数天甚至一周多的时间;而现在已经对客户端和服务端的架构和工作方式都有大致了解,熟悉了主要接口,并且一般接到一个bug时已能大致判断从哪方面入手。与此同时,我还有幸得到组内管理者的信任
2013-03-09 23:27:59
1569
3
原创 Multiset(下)——Boost中的bimap和multiset_of
理解了std::multiset之后,理解boost::bimap和boost::bimap::multiset_of就不在话下了。不过在此之前,最好还是先了解下std::multimap: http://blog.csdn.net/believefym/article/details/1627874 http://www.cplusplus.com/reference/map/
2012-12-16 16:21:56
2884
1
原创 Multiset(中)——STL中的multiset
Multiset的中文名是多重集合,其实就是集合的扩展版。唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次。 粗略看了看MSDN,在STL中,multiset和set的成员函数声明也是基本一样的,一些需要注意的地方是:set::insert(key)的返回值是一个pair,其中pair中的bool成员表明了key被插入之前,set中是否已存在相同的k
2012-12-15 17:02:34
16116
原创 Multiset(上)——序
最近在项目代码中看到了boost::bimap, multiset_of, with_info >这样的类型。虽然我用过boost::bimap,可那只是很简单的应用。这个mulstiset_of让我感到了一点困惑。 直接在网上搜multiset_of没找到多少有用的信息,看了两篇提到它的文章,还是有点不清楚这是什么东西。后来感觉可能是因为自己在数学上就没接触过multiset这个概
2012-12-13 14:14:23
2314
原创 Visual Studio的数据断点
晚上在家读《软件调试的艺术》,发现GDB的监视点(watchpoint)非常有用,于是就想看看Visual Studio有没有对应的功能。大致搜索了一下,发现Visual Studio的对应功能应该是数据断点。使用方法是先在程序的入口处设一个断点,然后按F5启动调试。当程序在断点处暂停执行时,在Breakpoints窗口中点击“New”->“New Data Breakpoint...”,如下
2012-10-23 23:16:04
2077
原创 Visual Studio + UnrealScrip IDE调试
这两个月经常在捣腾UnrealScript,因为客户端的很多游戏逻辑都是用它实现的。作为脚本语言,UnrealScript写起来自然是比C++方便很多,可调试起来却颇为麻烦。一开始几位同事给我推荐了nFringe,可不知为什么nFringe在我的开发环境中就是没法使用,而且据说免费版的nFringe只支持调试文件名为UDK.exe的可执行文件,真是让人甚为不爽。于是只好采用最古老的办法——用`lo
2012-10-04 22:30:14
3709
原创 从BUG到TASK
修杂七杂八的小BUG有一个多月了,最近也感觉渐入佳境。大型网游涵盖的技术面真是非常广。从前端的UI、3D引擎,甚至是脚本编译器,到后端的网络和持久层优化、安全……几乎面面俱到。前几天改一个小BUG,发现是因为客户端和服务端对某个条件进行了重复验证,于是就把服务端的验证删掉了。结果黄金哥告诉我:这么改是不行D,服务端验证是必要的,因为我们要防止外挂;客户端进行验证只是出于性能和玩家体验上的考虑。
2012-10-01 07:58:34
1085
3
转载 论游戏中Buff的实现
源地址:http://blog.codingnow.com/2007/11/inertia_thinking.html晚上在办公室晃荡,对面的同事在加班写代码。我凑上去看看在写什么。我向他了解了后明白了,大约是服务器上角色 buff 的实现吧。BUFF 这个术语是现在网络游戏中非常常见的。给角色加一个 BUFF 通常意味着对虚拟角色的一些数值上的临时修正:例如,攻击
2012-09-13 14:30:20
7129
原创 工作三周
上月底,经历了两个月的求职,我如愿以偿地成为了一名职业游戏程序员。如今入职也有三周了。虽然试用期长达六个月,但记得某篇讲述程序员职场的文章写道,公司应在三周内判断一个新程序员是否能干活。因此我想也是时候小结一下。 从学生时代跨入上班阶段,最难适应的可能是作息时间。其实公司的工作时间安排是很合理的:每天9:30——18:30八小时工作制(午休一小时);平常也很少加班,只是最近赶上要交付产
2012-09-09 16:00:55
1454
5
原创 修改Windows Server 2008(非R2)远程桌面连接数
点击“开始”菜单->“运行”,输入gpedit.msc,进入组策略。点击“计算机配置\策略\管理模板\Windows 组件\终端服务\终端服务器\连接”,双击设置“限制连接的数量”。在“开始”菜单->“服务器管理器”->“角色”里添加终端角色,添加角色时把能勾上的选项都勾上,涉及到安全性的选项尽量设得低一点(图省事)。据说有不少人都是只设置了前面两步就觉得大功告成了,实际上根据实验,这步是不可少的
2012-07-27 18:27:40
1398
原创 被NTFS的bug困扰了一个多星期
这事情还得从上上星期说起。最近在跑一个自己写的数据挖掘程序,这程序要跑上两三天,期间要同时向磁盘输出一个220多GB的二进制文件(以下称文件1)和一个450多GB的二进制文件(以下称文件2)。我上上周三就把程序写好了,用的是std::ofstream。 程序跑了两天,到了上上周五早上,我欢欢喜喜地去上班,准备收结果。谁知到了办公楼下,在配电箱上卖力捣腾的电工扭头看见我,对我说:“停电了。”——这段...
2012-05-02 06:32:26
5956
13
原创 别从析构函数往外抛异常
《C++编程规范》第51条:析构(destructor)、释放(deallocation)和交换(swap)永不失败。 我今天中招了。 今天为了做实验而写了个小程序。我在程序中对每个系统调用都进行了错误检查,一旦发现调用失败,就抛出自定义的异常;而main函数的最后会捕捉所有异常,然后向终端输出友好的错误信息。 谁知程序运行了四五个小时后,弹出了一个对话框,说:
2012-04-29 22:13:01
1138
原创 避免重载&&(逻辑与)、||(逻辑或)或,(逗号)操作符
这几天读《C++编程规范》读到第30条:“避免重载&&、||或,(逗号)”,一直不能完全吃透。今天才理解,原来是这么回事: 内建的&&(逻辑与)、||(逻辑或)和,(逗号)操作符总是满足以下性质:从左至右对操作数进行求值;对于&&操作符,若左操作数为假,那么右操作数将不会求值,所以我们可以放心地写下if (p && p->next)这样的代码而不用担心p为0时p->next
2012-04-19 11:17:47
1816
原创 [原创+翻译]《算法导论(第二版)》习题22.1-6:图的通用汇点(Universal Sink)
问题 如果我们用邻接矩阵来存储图,那么绝大多数图算法的运行时间都是Ω(|V|2)(V为一个图的顶点集),但还是有些例外。比如,给定一个有向图G的邻接矩阵A,我们可以在Ο(|V|)时间内判断图G是否包含一个通用汇点,即一个入度为|V|-1出度为0的顶点。请给出这样的算法。 思路 (注:这一段是我从教师手册翻译过来的,和我的思路一样,不过表述和逻辑更清晰。)如果A[i,
2012-04-15 14:52:22
4569
2
原创 解决Visual Studio调试器指错行的问题
我用Visual Studio调试程序时经常会遇到“指错行”的问题。具体现象是这样的:我明明把断点设在了某一条语句上,但程序却断在了离那条语句相差几行甚至十几行的地方;或者当我检测内存泄露或运行单元测试时,从报出的具体错误可看出出错的语句是在某一行,但报错信息中的行号却指向了离那行相隔“十万八千里”的地方。这个问题给我检查和调试程序带来了极大的不便。 后来发现这是由源码文件中行结尾不一
2011-10-31 11:30:25
1996
原创 How to uninstall CUDA driver and toolkit in Mac OS X?
Remove the two directories /usr/local/cuda and /Library/Frameworks/CUDA.framework. If you just want to uninstall the toolkit, remove those two directories and reinstall the driver.
2011-10-29 16:38:50
9411
1
原创 在VC中使用Boost.Test独立(standalone)库自带的main函数的注意事项
在VC中使用Boost.Test的独立库时,若要使用Boost.Test自带的main函数,则必须在链接时加上/SUBSYSTEM:CONSOLE选项,否则会出现 “LINK : fatal error LNK1561: entry point must be defined” 这样的链接错误。 见http://boost.2283326.n4.nabble.com/test-Fata
2011-10-27 23:32:41
1591
原创 Mac吃显存真是惊人
最近我的CUDA程序在Mac中罕见地遇到了显存不足的问题。经过一番调查才发现Mac吃显存真是惊人。在同学的Mac系统中通过cudaMemGetInfo发现:一块GeForce GT 120的Total Memory虽有536MB,Free Memory却只有可怜的21MB。而GeForce 9400上的情况虽然不至于这么让人吃惊,可Free Memory还是比Total Memory少了整整1
2011-10-19 18:25:49
7291
原创 避免使用C++异常规范
以前曾听人说过要避免使用异常规范,而且也听说C++0x已经把异常规范去掉了。不过因为不知这里面道理何在,所以还是一直在项目中大量地使用了异常规范。目前为止倒也还没遇到过大问题,只是在跨编译器时遇到了些小麻烦:VC++虽然接受但却不会实现异常规范,因此并不会检查函数声明中的异常规范
2011-09-18 15:35:10
2357
原创 神奇的wget
今天从一个远程的网络存储服务器(NAS)上下载数据,由于速度非常慢,网络连接又不稳定,只能使用支持断点续传的下载工具。尝试了IE、火狐、WinSCP、Wget,只有Wget可以断点下载那份数据。由于不想为了一个Wget就装配置麻烦的MinGW甚至是庞大缓慢的Cygwin,因此从G
2011-09-15 00:38:05
861
原创 解决IE9和Flash Player 10.3的冲突问题
最近发现我的IE9经常崩溃,不过也没管它,反正火狐还是用得好好的。今天打算从土豆网上下载视频时,IE9再次崩溃。无奈土豆的视频下载不支持火狐,于是我终于忍不住要管管这茬子事儿了。 先在谷歌上搜索“IE 经常崩溃”和“IE9 经常崩溃”,发现许多人反映原因在于迅雷插件。
2011-09-12 19:13:08
3341
原创 C和C++对待全局对象的一个不同之处
今天阅读《深度探索C++对象模型》,得知在C之中,未初始化的全局对象“被视为一个‘临时性的定义’,因为它没有明确的初始化操作。一个‘临时性的定义’可以在程序中发生多次,那些实例会被链接器折叠起来,只留下单独一个实体”(见第197页)。于是我做了做实验,以验证书上说的话。
2011-08-22 18:57:31
1295
原创 Unable to add CUDA files in VS2010 + CUDA 4.0
Too many troubles...Heres the solution:Open the vcxproj file in a text editor, look for or replace it with
2011-06-30 18:14:00
879
原创 Any CPU, x86 and x64
Heres what I learnt after struggling with Interop for more than half a week:A 32-bit process can only load 32-bit libraries; while a 64-bit process can only load 64-bit libraries, it can not load
2011-06-30 15:26:00
2916
原创 又要退回到VS2008编译器
今天在做一个C++ Interop的试验。我用C++/CLI写一个DLL,为一个本地C++写的静态库做一层封装,以便在C#代码中使用该库的功能。这个本地静态库会抛出非托管的异常。而每当我在C++/CLI的DLL中添加代码,以捕捉静态库抛出的异常时,DLL项目都会链接失败,报出一堆“error LNK2034: metadata inconsistent with COFF symbol tab
2011-06-28 19:42:00
1599
原创 消除重复代码的意义
最近一位同是计算机专业背景的同学打算在进展报告中给身为外行的老板和完全没写过程序的同学们讲讲消除重复代码的意义,并打算用生活中的例子使这个讲解通俗易懂。我想了很久都没想到一个很好的生活例子。消除重复代码的必要性其实是由计算机软件的易复制性导致的,而计算机以外的世界鲜有这么容易能复制的东西。因此我觉得这种例子还是在计算机世界中比较好找。(注:以下的话都是假设要讲给非专业人士听的,因此可能
2011-06-26 17:55:00
1955
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅