2015第一本书 < 皮囊>读后感
这是一本非著名(起码在我认知中,在这本书之前并不知道这个家伙)作家写的非著名散文集.我是在老家回深圳之前的那晚把它看完的,是的,一口气看完.
光荣在于平淡,艰巨在于漫长
这是一篇技术书籍读后感
早在2013年的3月份的时候我就已经在亚马逊购入了CodeComplete2,由于一直的懒惰与本书看起来实在是厚才拖了那么久,在2014年下半年终于对自己的懒惰看不下去了,花了三个月的业余时间把它读薄.今晚终于到了最后一个章节.倒不是说读完一本书是多么值得庆贺的事情,只是读完这本书后让我无法入眠.觉得应该写点目前的想法,以供我想再读一遍的时候前后对比.
不得不说这真的是一本值得我再次回来精读一遍的书,看完本书之后,回头看扉页和书前几页摘录的所有对CodeComplete2的赞誉 三个月前我觉得那更多的可能是对作者花费那么大精力去写一本那么厚的尊重,而现在 我觉得那应该全都是仅仅出于对本书内容的肺腑之言.而现在我更惊叹于我仅仅花了不到100块人民币就已经拥有了它.
终于又到了这一天,回想过去一年 似乎一直都处在生活与工作的双重焦虑中.
关于生活
建房子可能算是我的一家人最大的事情了,这一整年 我的父母 我的每一个家人都为此忙忙碌碌.好在赶在2015到来之前 把最后一块瓷砖安放完毕.在上周算是顺顺利利搬迁进去了.今年最大的变化就是 几乎每一个人都希望我 快点 结婚生子,安居乐业.但是我自个并不希望结婚与生子那么快的到来,在我觉得自己还没成长为最好的那个自己之前.虽然我觉得每个长辈说得都非常有道理.可是有道理不一定要听.我们从小到大都听过很多大道理,可是往往依然过不好这一生.总会有很多很多的遗憾.
开发日志系列(十六)
cocos2d-x lua binding,android-ndk-r9c,eclipse,cygwin,window7 64bit,red mi,Thl9,htc one
项目最近进入高速迭代阶段,版本更新速度比平时加快了几倍,这几天出的版本 莫名的出现频繁崩溃闪退的问题(仅仅Android上),不得已停下逻辑开发工作去fix 这个问题.
问题重现
打开游戏进入场景 频繁切换模块界面的时候 有一定几率崩溃
初步猜测
很大可能是加载销毁UI资源的时候导致C++代码出错.而仅仅在Android上出问题 就有可能是挂在异步加载的线程上.由于 最近两周才做的UI资源分模块管理 和异步加载.所以 异步子线程出的问题非常大.
这个问题的难点在于,C++代码在android上调试比较困难,由于我们的项目(cocos2d-x lua)并非单纯的NDK项目 所以并不能完全用单步调试JNI的方式解决.需要知道问题的根源 还是必须从想办法抓取崩溃最后的打印信息开始.
开发日志系列(十五)
在做游戏剧情展示的时候遇到一种需求把游戏对话逐字显示给玩家,效果如下:
实现这种效果的方式就是把一个字符串逐个中文取出来刷新到屏幕上,研究了各种编码之后发现UTF8的编码非常简单 也很容易逐个/中文/英文/符号 读取.首先看看UTF8非常简单的编码方式:
UTF8编码规则
Unicode符号范围 | UTF-8编码方式 |
---|---|
(十六进制) | (二进制) |
0000 0000-0000 007F | 0xxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
开发日志系列(十四)
cocos2d-x lua binding C/C++
在我目前参与的这款无操回合卡牌手游中,客户端战斗模块是由我实现的,在项目上线之前一直都生怕出现不可逆转的设计问题,所以我把模块流程描述给美术,别的程序同事听 同时尽量写出来.这个模块几乎全部使用C++实现.
战斗流程
解析服务端战斗数据
–创建战斗场景
–创建战斗对象进入场景
–按回合播放战斗特效
–对象退出场景
–显示战斗结果
–销毁回收内存
/重播
这个解析器主要工作是解析和管理战斗初始数据.除此之外不做任何事情,目前项目中一般的战斗数据长度大概是1.5kb(1200~1600字节),在按数据结构(struct)解析数据的时候需要注意 服务端和客户端 的struct定义数据位对其的问题:
#pragma pack(1) define some struct.. #pragma pack()
开发日志系列(十三)
成品预览
环境与工具
cocos2d-x 2.2.3,AngelCode,PhotoShop
在我参与的项目中,由于美术对战斗表现非常苛刻,飘血等飘字的样式否需要逐字自定义,例如上图中的Zzz
,闪避
,反击
,等等,最初他们设想是把所有飘字做成各个散图,用飘图来代替最初的飘文字.这绝对不是一种好的方法.于是我想到了自定义位图字体.在 cocos2d-x源码中发现CCLabelBMFont对位图字体支持的非常不错.因为CCLabelBMFont中仅仅看某个字的矩阵范围,而这个矩阵里是什么 有什么 完全不会干涉.创建位图字体首先需要使用一款叫做AngelCode的工具.步骤如下:
AngelCode的使用
图来自传送门
时光如梭
两年前的今天,我进入到这家手游公司,也正式开始了程序员
这份工作.在这之前都空有写代码的属性
而无用武之地.在这两年的时间里,共参与了两个手游项目,回顾两年来玩过的东西真的不堪入目.
C++Primer
中并没有对const过多的解析,只说明为是一个使变量不可修改的限定符.但是仅仅知道这点对于我来说是远远不够的,const是怎么做到的限制修改?谁在帮const做这个限制?编辑器是怎么实现不可修改的?在认识const之前 我知道C++中唯一不可修改的就是常量,例如:
int i = 1000;
这个1000就是常量,除了修改生成的文件之外 任何方式都无法修改这个1000 .(修改生成的文件是怎么修改?例如生成了exe可执行文件,直接定位到代码区 找到这个变量定义的地方 把 1000的字节码E8 03 00 00改了..).
服务端配置:ubuntu14/32bit
现在把服务端的也说一下,网上也有很多的配置教程,但是和我的配置都有点差别.由于是配置到私人的vps上,所以我希望能限制IP访问.我的vps曾经被攻击过,并被运营方警告,所以这方面得小心翼翼才行.
配置过程中我参考了一下两个地方:
根据这两篇教程配置的在vps应当可以运行SS服务器了.但是由于我需要限制IP使用.所以把端口限制改了一下,首先是安装配置iptables,安装完毕后对shadowsocks端口做出限制访问策略:
// 把端口先全部封掉 // 例如4000 是之前配置服务器设置的端口 iptables -I INPUT -p tcp --dport 4000 -j DROP // 对特定IP允许访问 // 116.*.*.42 为你使用ss客户端的本机IP iptables -I INPUT -s 116.*.*.42 -p tcp --dport 4000 -j ACCEPT // 保存 iptables-save
如此就只有我本机的IP能访问端口进行翻墙了.