一个关于luasocket使用的很蠢的问题

今天遇到了一个问题,服务端给客户端发包,偶尔会出现客户端无法解析的情况。我们服务端采用的skynet,客户端使用的是luasocket,协议采用的sproto。

照例首先不怀疑库的问题,肯定是自己的原因,而且应该是比较蠢的问题。首先问题出现在某一个协议上,这个协议每次发出去,客户端都无法解析,然而从proto文件里无法看出任何差别,也尝试修改了其他几个协议来尝试,并没有发现使其必现的规律,折腾了半天。最后只好动用VS,单步调试,内存跟踪,最终发现一个问题,服务端发出的包内容和客户端收到后拿给sproto解析的包内容不一致!
继续阅读

cocos2d-x的锚点与坐标

最近被cocos2d-x的坐标问题绕晕了头,这里整理下。

position: 每个node都有一个position,这个position是相对于它的父节点的坐标,所谓的世界坐标可以认为就是直接挂载在scene下的node的坐标。
AnchorPoint:每个node都会有自己的AnchorPoint,它的作用仅在于在设置position时,是将图片中的哪个点设置到那个位置。

需要注意的是
1 position是逻辑位置,而不是实际像素
2 这个坐标系与windows的坐标系的y轴是反的,cocos2d里(0,0)是在左下角,而不是左上角。
3 每个node的position都是相对父节点的(0,0)的位置,与父节点的锚点无关!我就是因为这个问题没搞清楚在这里绕晕了……

金山这几年--程序员的信仰(二)

“信仰是指对一个人(同样的对他的能力)、事物、神、宗教的教条或教导、没有经验证据的观点(例如拥有强烈的政治信仰)抱有信心和信任。” 维基百科如是说。

做为一名程序员,在金山的经历也使我拥有了一种编程信仰,我相信通过正确的方式方法可以写出优质没有bug的程序(是真的没有bug,而不是自己的声称)。只有你相信了它,你才有了这种可能去做到。

PS:至今还没有人从Tex的bug悬赏金中大幅获利给了我们这种教徒以极大的曙光。

继续阅读

金山这几年--program in project(一)

不知不觉在金山已经呆了近五年,这段时间里犯过很多错误,同时也学到了很多东西,既然已经离开,那也该为这段时间好好的做个回顾。今天就先来谈谈在编程技术这块吧。

首先声明,我谈到的技术相关的东西都是指在项目中的经验,那些纯粹的追求技术的人和在学术上追求的人,这些东西可能对你们来说毫无意义。 ^_^

继续阅读

算是个小结

        从今年6月开始,项目就进入了一个加班时期,直至现在,整个人都很疲惫。没什么个人时间,唯一的周日休息只想通过玩玩游戏来放松下绷紧的情绪,进度的压力确实很大。

最近的改变:

1. 代码要注重可测试性:以前意识到了测试驱动开发的重要,但是并未意识到代码可测试性的重要,导致经常会发现单元测试代码会非常难写,以前一直认为是由于逻辑过于复杂所致,现在看来是因为在设计时就未考虑可测试性导致的。

2. 写代码一定不能偷懒省事,出来混,迟早是要还的。一个地方可以写成通用的,就宁可再多敲几十行代码把它抽象出来通用化,也不要图省事就这么先写着等以后需要再来改,以后你会发现累积起来后改起来会远比想象中痛苦。

继续阅读

三省吾己

       荀子曰:“君子日三省乎己”。欲为善,故效之。

       其一,执念甚重。但凡与人讨论,偶及争议,虽彼此不苟同,仍因执念争至面红耳赤方罢休耳,终不了了之。道不同不相为谋,谨记。

       其二,老子曰:上善若水,水利万物而不争,处众人之所恶,故几于道。捎遇不顺之事,哀声叹气,恨不得捶胸顿足之势,与水做比,相去甚远。

       其三,言过于行。虽知应作为,奈何多敌不过懒惰二字矣。人言,一屋不扫,何以扫天下,起居凌乱,应以此示之。

写在2011.5.1前的回顾

        明天是五一,1年前的这时候来到西山居,回顾下这一年。

        首先,项目变更,因为以前工作室的解散,我们都被安插到西山居的项目组里头,有幸被分到一个我喜欢的项目组,做自己喜欢的工作是最重要的。

       先说技术上观念上的一些转变:

        1 对于脚本的看法:脚本很多情况下是不可或缺的。以前一直都觉得脚本是一个辅助,可有可无的东西。来这边之后,由于这边大量的运用Lua,在此之前只是了解但没怎么使用过,一直都觉得C++是王道。使用后,深感Lua之灵活,好用,觉得脚本真是个不可或缺的好东西。

         继续阅读

编写系统模块的经验总结

        前段时间在写一个系统模块,由于是第一次独立的写一个系统模块,经验欠缺,出了很多问题。事后对这次工作做了下总结,大概是以下几点:

        1) 做设计时过于乐观,轻视了设计的作用,只看到宏观上的功能,没想到琐碎的细节实现(有可能因为某些小点会影响整体上设计)。

解决办法:设计功能时,先把测试案例想好,测试驱动开发,不一定要真的去写测试代码,但测试用例提前写好可以避免很多问题(临界问题,异常处理问题,理顺思路)

 

        2) 编码过程中,急于看到实际效果,希望做出一个快速原型,为此导致了编码质量下降以及临时代码。

解决办法:如果是底层的函数,尽量避免临时代码,尽可能编写单元测试文件测试效果。

 

        继续阅读

工作一年的总结

     不知不觉参加工作一年多了,对自己一点总结吧。

 

开源


     还记得来公司的第一天,分配给我的任务就是,花1周的时间看CEGUI的源代码,知道CEGUI的内部流程。这也是我第一次接触开源。说实话,当时看那些代码有点看天书的感觉,头皮发麻,看了一周也就大概弄清楚了个大概的GUI渲染流程,内部的东西还是一点没懂。慢慢的随着工作需要,会经常跟的CEGUI的内部去调试,加上熟悉了抽象的编程方式,开始逐步对CEGUI有所了解,并且发现它的代码写的很cool,就是易用性方面做的确实不太好(所谓学院派的通病),但是代码中运用了很多成熟的面向对象技术,所以基本上后来看《设计模式》的时候经常能在里头找到真实使用案例。

      再后来,项目变动的原因,开始想自己写一个工程了,参考了CEGUI的SampleHelper,自己也试着将一些设计模式带入自己的代码,当写出来的时候感觉真的很cool,想着以前看这种代码都很难看懂,现在也出自自己之手,哈哈,一点点程序员小小的虚荣心。重要的是,从这之后,再看开源的东西已经是豁然开朗了,阅读代码能力得到了很大提升,更重要的是我领略了开源的魅力,想到如果以后我也能写出一个能让人觉得好的东西,并愿意来解读我的代码,这种感觉真的很cool,而这也对代码的美观提出了很大的要求,毕竟是要拿出去给别人看的。

 

游戏


     从小到大,我都很喜欢玩游戏,从FC到街机,PS再到PC,再从单机到网游,玩的游戏也是数不胜数,但那是的身份都只是玩家。大学毕业设计时选了手机游戏,那是第一次领略到做游戏的快感,虽然很没有经验,做出来的游戏也仅仅是一个Demo,但这种感觉我却记得,所以找工作那会觉得如果能进入游戏行业真的很美妙的事情,有幸得偿所愿,而且是做为一名程序员。

     进入游戏行业以后,我却很少玩游戏了,不是因为对游戏的兴趣减了,而是发现了比玩游戏更大的乐趣——编写游戏。虽然在现实生活中我们只是普通的程序员,但在游戏里我们是上帝,一切的一切都掌握在我们的手指之下,每一个NPC或者物品的诞生与消亡的规则都是我们制定的,这是个多么美妙的世界啊!

继续阅读

如何写出好的代码

以下一些是我看书然后结合自己的一些编程经验得出的一些总结,有不妥还望及时予以指出 🙂

 

1. 编码的目标是清晰而不是简洁

2. 在执行期获取的任何资源,必须彻底释放,不要完全指望你的”管家”,它们也不一定是可靠的

3. 需要用到通过其他函数返回的值时,务必在使用前对它们进行检查

4. 不要在多个地方重用一个临时变量,每次都创建一个新的变量,编译器会帮你解决效率问题。

继续阅读