编程
善良的兽人Goodorc
这个作者很懒,什么都没留下…
展开
-
<实践>从“打死也不继承”开始
写一个小界面工具“ImageRuler”,遇到一个问题。有三种类型的参考线,其中“边界参考线”与“图片框参考线”行为基本一致,“按钮参考线”的行为有所不同,我已经将这两种类型抽象成struct,方便使用。他们都有“SetLine”和“FindNearLine”这两种操作。 AreaBorder m_border; //边界参考线 ButtonSplitLines m_bu原创 2012-04-03 17:44:56 · 855 阅读 · 0 评论 -
在shell中启动后台执行程序,然后退出shell会引发 IOError [Errno 5] Input/output error
详见:http://www.iteye.com/topic/1114469http://hi.baidu.com/dalier/item/a6723a0db60b73e2f55ba6fa补充: 今天我也第一次遇到这个问题,还以为是阿里云的BUG,原来shell还有这个毛病,估计职业搞网管的同学比较清楚。 长期运行的服务器,输出需要专门处理转载 2012-11-07 23:25:10 · 3416 阅读 · 0 评论 -
lua调用C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++)
cocos2d-x这个开源引擎目前在移动开发领域挺火,我用了一阵子,非常喜欢它的lua绑定,一旦理解了其工作机制,用起来相比C++有不同的感受。 但是想要用好lua脚本,实在不是件容易的事情。要让lua绑定变得非常好用,可能依然需要大量工作。 这里记录一个很实用的技巧:在lua调用cocos2d-x的接口而导致崩溃时,无法直接看到lua的调用栈,也就无法原创 2012-12-06 23:39:19 · 11711 阅读 · 2 评论 -
Facebook接入ios,要点记录(不回调,info.plist写法等问题)
我遇到的问题是将Facebook接入cocos2d-x项目(iOS平台),下面这篇文章已经说的非常好了,建议先阅读。http://blog.csdn.net/xiadasong007/article/details/8599611这里要记录两个问题:1、项目的Info.plist里,有一个URL Types参数,此参数填法应该是—— fb + AppID,例如你申请的F转载 2013-04-19 10:44:21 · 3094 阅读 · 0 评论 -
【XXXXX】近几个月来完成的工作提纲
从2012年5月底开始,手机游戏《XXXXX》正式开工。我们的技术团队是第一次接触手机游戏项目,现在想起来,一路走来还是做了不少事情的。 10个月的时间,我到底做了哪些事情呢。1、Excel表格读取。 Excel表格(转存为TXT格式)读取方面我至今做了3次,第一次是Python版本,用在数据提取工具上;第二次是C++版本,实现了所有基本的按列的数据类型读取原创 2013-04-05 17:59:37 · 2863 阅读 · 0 评论 -
Python游戏服务器开发日记(八)整体方案改变了……
老大和CTO提出了新的方案,之前的架构被推翻了。 简单来说,就是使用多进程,工作进程启动python环境。 最奇葩的是,我们回到了利用共享内存保存entity的方案。entity里保存纯data,是一个纯的二进制数据块。 Entity在用的时候,包装成PyObject给Python使用。如果修改了,则重新打包成二进制块存回去。原创 2015-10-16 18:27:59 · 2684 阅读 · 0 评论 -
Python游戏服务器开发日记(二)绕过GIL启动多线程Python环境
说道Python和多线程,很容易想到GIL,GIL意味着只要是用Python做的多线程程序,就无法利用多个CPU。 经过一些失败的尝试后,我也一度认为GIL是无解的。我们甚至把注意力转向了IronPython等无锁Python,但是实际上那样问题可能更多,比如我们不熟悉mono,mono也没达到完全成熟的程度。 直到skynet的QQ群里一位朋友介绍了另原创 2015-08-19 17:22:56 · 3412 阅读 · 0 评论 -
Python游戏服务器开发日记(三)用greenlet模拟lua coroutine的研究
分布式系统中,如果一个Entity访问其他Entity,那么这个调用一般都是异步的,也就是说当时不能立即得到返回值。如果用callback的方式实现,函数就会变得很碎。 skynet在核心层处理了这个问题,并提供了skynet.call来做异步调用。 据我研究,Python2.x提供了生成器(generator)模拟coroutine的方法,但是显然是不原创 2015-08-19 17:44:03 · 1868 阅读 · 0 评论 -
Python游戏服务器开发日记(四)scons编译工具、C和C++混合使用
今天在编译python so时出现点问题——把其他C库链接到同一个so里——尝试了一早上发现了方法,已经更新到本系列的第二节里了。 整理了一下工程目录,打算用scons管理。 scons毕竟是一种新型的build工具,比makefile肯定有很大进步,至少更清晰好学,少了很多晕晕的trick。但是相比其他高级工具比如cmake之类的,就不清楚优劣了。原创 2015-08-26 20:57:33 · 2753 阅读 · 0 评论 -
Python游戏服务器开发日记(五)skynet_messagequeue和skynet_timer
最近,skynet群里有同好与我一起讨论skynet底层一些比较难理解的实现细节,乘此机会仔细看了一下源码,我最关心的是skynet_mq和skynet_timer两个我会用到的部分。 本文不想讨论太细节的问题,具体的实现思路我并没有理的非常清晰,还是看代码为好。我这里从实际需求出发,写一些tips,方便新来的小伙伴参考。 skynet的time原创 2015-09-02 22:02:16 · 3702 阅读 · 1 评论 -
Python游戏服务器开发日记(六) 解决GIL难题!——Python再认识
本系列文章的第一章就已经提到,用加载多个python动态链接库的方式,可以巧妙的避开GIL,实现多个python环境运行在同一个进程内。 但是从上一个试验,到思考具体的实际用法,又经过了长达一周多的思考试验。到此时,Meme服务器框架的最底层疑难才彻底明朗。本文将彻底分析多线程下多python环境的使用。原创 2015-09-02 22:09:04 · 2446 阅读 · 0 评论 -
Python游戏服务器开发日记(一)目标
到了新的环境,老大让我有空研究下一代服务器技术,作为一个长期任务。 新的服务器想达到的目标:1、分布式系统,对象(Entity)之间的关系类似于Actor模型。 2、逻辑服务,是单进程、多线程的,对象之间发消息进行通信,但是简单读取属性尽可能做到直接。3、必须使用Python语言。开发方式类似于BigWorld引擎。这个目标还是很宏伟的原创 2015-08-19 17:03:21 · 7144 阅读 · 0 评论 -
Python游戏服务器开发日记(七) 关于协程(greenlet)和C语言的思考
前两周埋头在服务器的具体技术试验里,不断的遇到小问题,不断的解决。 大量的问题核心就是在利用dlfcn库调用python so时,API的用法会有变化。导出符号本身不是什么难题,难在某些Python C API是用宏或者其他方式提供的。最奇葩的是greenlet库,把所有API放在一个全局指针数组里,而且初始化方法也和标准python扩展库不甚相同。后来是采取把greenlet库原创 2015-09-20 23:26:45 · 1824 阅读 · 0 评论 -
Python游戏服务器开发日记(九)近期问题总结。(打酱油中……)
由于领导提出的多进程方案有很多问题,进展缓慢。好在有另一个同事慢慢进展中,我主要是做各种单独的试验,集成各种技术进行尝试。 Python多子进程方案的核心是共享内存,除了mmap方式,还有shm方式,都是linux提供的共享内存方案。 无论哪种共享内存方式,都需要自行申请整块内存,然后在创建对象时,将对象数据放在共享内存区域,实现多进程都能访问的目的。原创 2015-11-12 15:25:39 · 2137 阅读 · 2 评论 -
quake3 code 源代码 编译调试。保证通过。
原地址:http://www.cnblogs.com/roland1982/articles/5045624.htmlquake3 code 源代码 编译调试 。保证通过。Quake3引擎的源码已经公开了,研究过的人都认为虽然它年代比较久远,但是代码写得非常漂亮,非常值得一探究竟。Quake3引擎的源码是完全开源的,但是Quake3这款游戏的资源(声音、图片等)并非免费转载 2015-12-14 16:26:39 · 3878 阅读 · 2 评论 -
用Python操作Named pipe命名管道,实用做法
用Python操作Unix命名管道的实用做法原创 2016-02-01 15:52:43 · 13399 阅读 · 2 评论 -
两个加锁相关的算法,非常基础,带图。原创思路抛砖引玉
算法一:如果需要从一个较慢的地方,比如DB里,隔几秒反复读取配置,如果配置变化了,就更新逻辑里的参数。那么算法一可以参考。 算法一主要是避免了锁的使用。在读取到参数没有变化的时候,不做任何事。如果参数变了,在参数成功更新到逻辑内之前,也不做任何事。算法二:常见的生产者——消费者模型,优点是比较简朴,而且上锁时间非常短,还是比较实用的。原创 2016-04-22 17:30:12 · 1315 阅读 · 0 评论 -
MySQL优化总结
http://tech.it168.com/a2009/0526/577/000000577940_10.shtmlMySQL优化总结,写的非常好,平白易懂,看了前一半,后面的暂时用不到,留着。转载 2012-11-15 11:42:28 · 953 阅读 · 0 评论 -
TXT格式的Excel表格读取问题优化解法(目前我所知的最简洁算法)
做大型游戏的国内公司,据我所知全都在用Excel做数据——程序把数据接口抽象出来,给策划在Excel里填写数据——除不同的编辑器之外,数据的使用方法几乎都是一样的。 把Excel表格存为txt格式,就得到了一个很简单的文本表格。把它拿给程序识别,只需要解决两个问题: 1、正确的按行、列分析读取数据 2、数据存储我打算把这篇博客写的尽原创 2012-10-27 22:33:01 · 1969 阅读 · 1 评论 -
转载——利用map文件调试程序崩溃
转载——利用map文件调试程序崩溃http://blog.csdn.net/goodwinds/archive/2009/05/23/4211654.aspxFrom Wiki帮助系统Jump to: navigation, search2010年2月8日MS-VC 使用MAP文件快速定位程序崩溃代码行 程序员,平时最担心见到的事情就是程序发生了崩转载 2012-04-03 17:57:03 · 645 阅读 · 0 评论 -
[被坑纪念][转帖]Python函数默认参数的一个小陷阱
原文地址:http://www.byywee.com/page/M0/S211/211243.html Python函数默认参数的一个小陷阱 代码def foo(a1, args = []): print "args before = %s" % (args) args.insert(0, 10) args.insert原创 2012-04-03 18:00:33 · 1152 阅读 · 0 评论 -
<想法>C++容易将设计思路引入歧途
C++的面向对象特性,容易将设计思路引入歧途。 首先,以玩家数据管理器为例,基类PlayerDataMngBase,然后PlayerDataMngC和PlayerDataMngS继承它。Base类的实现在客户端、服务器都存在,而且代码必须保持一致。 这种继承关系的出发点是“代码复用”,代码复用在我看来是绝对必须的(DRY)。但使用C++的人,想复用代码的第一反应是“继承”。原创 2012-04-03 17:41:56 · 699 阅读 · 0 评论 -
做了一半又挂起的事情备忘,技术方面的
我有一个毛病,很感兴趣的做一件事情,在做的过程中,发现另一个感兴趣的事情,然后就转向了后一件事情,前面的事情就忘记了。今天有空,在这里做个备忘,希望未来再唤醒挂起的线程。 1、看《程序员的自我修养》,结果学会了Vim。幸好Vim是坚持下来了,一直在用。DLL搞清楚了之后搞定了一个链接方面的问题,比较过瘾。Vim已经熟练了,不过似乎我很难成为完全的键盘党。凡事很难做到极致,奇原创 2012-04-03 17:52:49 · 543 阅读 · 0 评论 -
Unicode入门与剖析——从一个越南文的案例说起
Unicode入门与剖析——从一个越南文的案例说起 写在前面 和大多数人一样,我本来对Unicode也是一知半解。由于从微软的VS2003开始(说起来竟然是8年以前了),Unicode已经是一个默认选项,熟悉的C++语言的char*变成了_TCHAR*,相信大多数人不会去深究其原理,只是将常用的几个字符串函数、基本类型做了相应变化而已。微软已经帮我们做了大量基础工作,大部原创 2012-04-03 17:50:55 · 6898 阅读 · 0 评论 -
Python 正则表达式高级应用举例
首先,写这篇文章的起因,是这两天玩了一个网站 http://www.checkio.org 用Python做题、出题,交流,很有意思也很有挑战。————————————进入正题—————————————————————————— 其中一道字符串处理的题目如下:http://www.checkio.org/missio原创 2012-04-04 21:08:00 · 1443 阅读 · 1 评论 -
DP为王——动态规划法学习笔记
动态规划英文名Dynamic Programming,这个名称总让人有一种时曾相识的感觉,可能是因为容易和“线性规划”之类的概念搞混。 首先,适用动态规划的问题十分广泛和常见——地图路径搜索(深度优先、广度优先、A*),填充容器使价值最大化(例如背包体积固定V,有不同的物体具有各自的体积和价值),文本比较算法(常用的diff工具),以及最短路径之类的求最优解的问题,幕后都原创 2012-04-10 14:49:37 · 5005 阅读 · 1 评论 -
Python源码学习笔记(1 基本数据类型)
Python源码剖析 这本书相当好。 我用Python也有几个月时间了,这时候读Python源码,会对提高C语言水平、Python水平、算法基础都有相当的帮助。 我目前只看了最前面的数据类型基础,也就是网上可以下载到的: Python源码剖析.chm 这个文件。学习心得嘛,就是多看多想,有问题的时候再调试Python源码验证想法。 欢迎留言原创 2012-04-04 21:06:59 · 847 阅读 · 0 评论 -
近期尝试的web技术小结
近期开始做一个比较简单的服务器,核心功能是做小型手机游戏的数据交换和存储。由于这方面经验几乎为0,所以从HTTP服务开始做起。服务器平台为Linux(Ubuntu 11)。1、HTTP服务器:Apache,大名鼎鼎的阿帕奇,使用非常广泛,但是由于功能越来越多被指责不够轻量。Apache附带的服务器负载测试工具ab值得一用。Lighttpd,和Apache同样提供HTTP原创 2012-04-24 02:59:35 · 1279 阅读 · 0 评论 -
笔误,是福是祸?(linux so搜索路径,SWIG等)
这是一篇非常有聊(?)的日记。 昨晚心血来潮,在尝试用SWIG(http://www.swig.org)给C++的库做Python绑定,网上例子非常多,看了几个就动手。后来被动态链接的问题折腾到晚上十二点半,对我这个每天早上7点前起床的人来说有点伤不起。而且,你知道吗,错误原因是我把函数名写错了,测试用源码里的randnum在接口里我写成了rand_num。 S原创 2012-05-06 11:18:19 · 2192 阅读 · 0 评论 -
较难的动态规划问题——付款问题,面值任意,可找零
在超市买东西经常会遇到付款、找钱的问题。 一般来说,我们的货币面值也就 100, 50, 20, 10, 5, 1, 0.5, 0.1 这几种,基本都是单位1或者是5的倍数。如果问:最少要付多少张钞票?这个问题是比较容易的,只要从大往小付款就可以了。 进一步如果可以让服务员找零,并且找零的钞票数量也算在总钞票数里,让总钞票数最少。比如付98元,只需要付100元找原创 2012-04-12 16:15:07 · 2561 阅读 · 0 评论 -
近两日极为纠结——游戏服务器,选择何种技术方案?(Python + SWIG--RakNet + Lua)
需求是:一种移动或web游戏的服务器,要求是尽量保证维护简单,框架尽可能简洁,代码量不宜过多;考虑1人非全职进行服务器维护,不应对运维造成太大难度。 首先,必须使用RakNet,可用的游戏服务器框架很稀有,这是其中一个开源框架,底层提供完整的可靠UDP协议,上层有完整的封装,不得不用。 其次,客户端采用C++、Lua编写,其中逻辑部分完全使用Lua编写。服务器需原创 2012-05-10 08:15:33 · 8629 阅读 · 4 评论 -
异步(延时)逻辑难题,以及采用lua的解决方法
在网游程序里混过一阵子的程序员大都知道,“异步逻辑”是游戏逻辑里最容易失误的地方之一。刷钱、刷经验、不花钱得到道具,然后关服、回档、删号等等等等,其可能造成的危害不胜枚举。而且实际上银行系统之类的地方遇到这种问题就更有趣了:)。 不同团队对此类问题的称呼不同,我喜欢称其为“异步”。它是说这样一类问题: 玩家满足某条件时(比如身上有10金币),与NPC对话触发一个原创 2012-05-11 13:56:14 · 10286 阅读 · 0 评论 -
【忙到没空写博客的程度】表格型配置文件内存优化之一:简单内存分配器
最近是生平第一次全时间投入coding,甚至连写博客的精力都没了。这种感觉不是很好,希望能早日调节过来。努力工作之余深入思考我觉得很重要。 说正题,目前国产大型游戏开发里,经常用到Excel配置文件,这是一种文本文件,用Excel编辑表格后存为txt格式即可。除一些特殊情况外可以认为是用和换行分割的csv文件。这种配置文件的分析和读取不算难写,只要试验清楚Excel对待引号、换原创 2012-06-16 17:16:46 · 1394 阅读 · 1 评论 -
游戏开发培训的两难与探索
游戏开发培训的两难与探索游戏培训的现状说到游戏培训,其实包含的范围比较广。容易想到的一是游戏美术,包括原画、3D美术等几大类;二是游戏编程培训,几年前Cocos2D比较火,现在清一色的Unity3D。CSDN博客 善良的兽人Goodorc EMail:279866129@qq.com打开百度,搜索“游戏培训”,看前几名。可以点进去看看课程介绍。会发现一个问题,不了解行业的人可能察觉不到。后面细说原创 2017-03-13 23:12:39 · 4916 阅读 · 2 评论