SWIG之为C/C++的API生成Python调用接口基础

现在游戏业务的cache基本都是接入tcaplus,以前业务自己拥有cache的时候我们可以很方便去通过脚本去访问玩家的数据,所以最近想能不能对tcaplus生成Python的访问接口,由于tcaplus只提供了C++ API屏蔽了底层的协议数据细节,不太好直接写Python访问接口,偶然间接触到了SWIG,差不多花了一周时间,通过官方手册完成了SWIG对Tcaplus Python 接口的封装。

Read More

你知道svn的needs-lock属性吗

我们都知道svn对于文本文件可以支持多人合作修改,会自动将多人对于同一文件的操作进行合并,但对于二进制文件只能爱莫能助了!

我们游戏开发中,对于数值配置表通常都是通过excel表格进行配置的,很多策划都对同一个表格修改时就会出现冲突,当冲突发生时,就需要将自己的修改保存到其他地方,然后回滚或删除表格,update为最新的后,再次进行修改提交,当然这种做法是不可取的。修改excel的正确姿势是:在对execel表格进行修改时,先get lock,然后进行修改-提交.

Read More

你真的知道常量指针和指针常量吗

C中的由于翻译的问题,有时候我们会混淆常量指针和指针常量的含义,但是我们都知道const char * 和char * const的区别,这里确实需要吐槽一下这两个名字的翻译。

  • 常量指针(const pointer): 指针类型是Type * const,指针变量不可以被修该,但指向的对象可以被修改。
  • 指针常量(pinter to const): 指针类型就是const Type * , 指针变量可以修改,但指向的对象不可以被修改。

是不是觉得上面说的是废话,这个写c的大家都知道呀,那么出一个题目:

Read More

GCC栈溢出检测技术

前一段时间在写ucontext的协程库的时候,遇到了栈空间溢出问题,然后就想到要研究一下堆栈溢出检测的相关技术。
欢迎批评指正,如果对汇编有一个语法问题可以看我之前的一片文章,协程:posix::ucontext用户级线程实现原理分析中的汇编基础一节。
首先我们直接看一段栈空间溢出的代码:

1
2
3
4
5
6
7
void bob(){
int a[4]={0,1,2,3};
*(a + 4) = 4;
}
int main(){
bob();
}

Read More

无产阶级在深圳买房好辛苦

house.jpg

题目本来是中产阶级,我老婆看到说,就你这样的最多只能算个无产!遂改之!

最近一个月都在看房子,各种二手房、新房,深圳的房子真心很贵,看房的过程也真心很累,我和老婆加上公司的安居计划,刚刚好可以在深圳买一个400万的房子,可是现在400万,在深圳的根本买不到什么好房子。
南山不用想了动辄78万的均价,让我望而却步,根本不敢去看,宝安的房子也平均到了56万的水平, 对于一个中产屌丝家庭来说,买一个房子需要考虑太多: 房子大小,学位怎么样,朝向好不好,是否安静!

Read More

一个整数类型转换导致的线上bug

上周做了一个周年庆的抽奖的需求, 抽奖的规则一般就是在概率的基础上, 将奖品按时间跨度均匀分配, 奖励有实物和虚拟奖励. 抽奖代码的核心在:按时间轴均匀分配奖励和严格控制奖励的数量, 不能出现数量的不一致.

昨天上线后, 今天早上发生了一件从来没有想到会发生的bug, 就是抽奖滚屏公告不见了, 就是前台拉取不到中奖滚屏信息了. 果然是万万没想到呀! 通过脚本直接从后台拉取也是同样的结果, 问题出现在哪里?

Read More

协程:posix::ucontext用户级线程实现原理分析

在听完leader的<分布式rpc框架的介绍>课程后,对其中协程的实现方式有了基本的了解,无论的POSIX的ucontex,boost::fcontext,还是libco,都是通过保存和恢复寄存器状态,来进行各个协程上下文的保存和切换。所以有了这篇对ucontext实现原理的分析。
文章首先初略的温习了一下汇编的一些基础知识,其次就是ucontext源码分析,最后是一个ucontext示例极其调试过程。

Read More