九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

又一本被过于抬高的普通之作 -- 小评代码整洁之道

总有一些书籍会被大家奉为经典, 也总有一些所谓的经典会让我失望, 不得不说, 代码整洁之道 就是其一.
这么说可能有些刻薄了, 毕竟代码整洁之道还是有些内容, 算是一本不错的书, 但是, 远远称不上经典.

写出更好的代码, 这应该是每个有追求的程序员永无止境的追求, 为写出更好的代码这事情, 各个大牛总结了无数的原则, 规则, 法则, 也出了无数的书, 但是其中真正值得一读的却太少.

闲话少说, 具体到这本书吧.

阅读全文....

漫谈好程序员的标准

无数的人问过类似的问题, 怎么样才能做一个好的程序员? 在回答这个问题之前, 首先得明白什么是好的程序员, 这样才有方向和目标, 可是这事情太主观, 可能各人的标准千差万别, 不谈那些传奇性的独自一人做出伟大事情的特例, 也不谈什么上天入地, 上帝大牛的诡论, 以下是我比较认可的, 在通常的项目开发中, 一个好程序员的标准.

阅读全文....

Mac及Android环境下的JNI学习

JNI就是Java Native Interface, 也可以理解为一般脚本语言的C API, 一般情况下这种API的学习都是一种痛苦的精力, 从来如此, 没有太多技术含量, 就是一堆晦涩难以理解的编程模型, 编程接口, 充斥着各种从当前语言到C语言的类型转换. 基本的含义就是用C语言的思维去表示当前的语言, 这个问题在Lua语言中到达了极致. 不管是多么为了效率, 一个纯堆栈操作的编程接口都像汇编语言一样难以使用.
因为最近又开始做Android游戏了, 用的是cocos2d-x, JNI是难以避免了, 以前的使用都是照猫画虎似的写几个函数调用接口, 总感觉有问题, 今天好好的学习学习吧.

阅读全文....

用Rakefile管理工程

游戏项目可能是所有软件项目中需要在编译时处理资源最多的项目, 一般的项目都有下面几种常见需求:

  1. 将文本格式的Json, XML等配置换成二进制
  2. 将Json, XML等配置加密
  3. 将tga, png的图压缩成压 缩比更高的pvr, webp等格式
  4. 用texturepacker等工具打包小图
  5. 将UI编辑器, 动画编辑器的编辑时格式(往往是文本格式)编译成二进制的发布格式.

特别是图片相关的的资源生成, 时间消耗较多, 需要尽量减少重复生成. 此时像makefile这种东西就很有价值了.

阅读全文....

Cocos2d-x 的内存管理漫谈

既然选择了C++作为游戏开发的语言, 手动的管理内存是难以避免的, 而Cocos2d-x的仿Objctive-C的内存管理方式, 事实上让问题变得更加复杂(仅仅是移植更加方便了), 因为你需要很好的掌握两种语言的内存管理方式, 并且在使用时头脑清晰, 不能混用, 不然等待你的就是无穷的噩梦, 因为引用计数的原因, 问题比起纯粹的C++内存泄漏还要难以定位的多. 这里统一的整理一下目前在Cocos2d-x中的内存管理相关的方法和问题. 为了让思路更加清晰, 我提及的不仅仅是具体在Cocos2d-x中怎么用, 也包含一些为啥在Cocos2d-x中应该这么用. 并且, 因为以下讲到的每个点要讲的详细了, 其实都可以写一整篇文章了, 没法在短时间内详述, 这篇文章也就仅仅作为一个引子而已.

阅读全文....

Redis初次学习

NoSQL热了很久了, 很惭愧直到今天我才初次学习NoSQL的东西. 从一开始做C++的后端用了MySQL和SQL Server后, 一直在做游戏客户端, 真是远离数据库相关的东西太久了, 有意思的是, 很久前, 对编程相关知识如饥似渴的时候, 工作中碰到任何相关的知识, 哪怕是一个新领域, 起码都要买一本大部头来学习的, 当时只有数据库是真的点到为止, 没有深入学习, 直到今天我也说不上具体为什么……

阅读全文....

一种语言, 适合任何时候使用 -- Haxe特性杂谈

这个世界有很多的语言, 不同的语言适合不同的情境, Ruby因为很适合开发领域语言(DSL), 所以被大卫选择用于开发Rails, JavaScript因为常用异步模型和方便的回调处理, 被Ryan Dah用于开发node, 而JAVA期望通过JVM一次编写, 随处运行. 各种语言因为不同的目标场景, 也使得语言本身的特性趋于目标场景, 决定了这些语言应该是什么样子, 比如C++因为效率的考虑和兼容C的需求, 决定了C++之所以成为现在的C++.
同时也有很多语言是为生成另外一种语言而生的, 最典型的就是CoffeeScript, 我知道我的语言要更加优美, 但是我也知道我无法彻底替代你, 这是这个世界中习惯和惯性带来的悲哀, 所以, 不能替代你, 那我首先通过生成你来取代你. 这就是Coffee这样语言的思路. 因为JavaScript是如此的不好用和难以简单替代, 所以成为了这类语言的竞技场.
但是, Haxe就更加夸张了, 他也是一种通过生成其他语言而生的语言, 只不过, 他可以生成多达7种不同的语言.

阅读全文....

常见语言的REPL(Read-eval-print-loop)

在一般的新脚本语言中, 有REPL是常态, 因为REPL非常的方便, 谁用谁知道. 最近学的语言已经多到几乎超过我的脑容量了, 所以我更加经常的用REPL来验证一些语法, 所以找到了一些传统不存在REPL语言的REPL环境, 在这里记录和分享一下:

阅读全文....

JavaScript特性杂谈

最近语言学习有些疯狂, 从Ruby到Lisp, 然后是C#, 既然已经疯狂了, 就顺面学习一下JavaScript吧. 对JavaScript的印象一直不佳, 从骂脏话最多的使用者, 到使用者平反的世界上最被误解的语言, 从所谓的让人抓狂的特性, 到世界上任何可以用JavaScript实现的东西, 最终都会被JavaScript实现, 并且, 这是最后一个实现. 出处太多, 不一一列举, 知者已知, 不知者也没有必要为了这些无聊的言论特意找出处了.
其实也不是完全没有用过JavaScript, 以前在开发一个Unity项目的时候用过一下Unity里面的JavaScript, 只不过那个JavaScript我甚至都只能称之为UnityScript. 太多太多自己实现的特性, 而又有些不够完整. 现在, 认识一下真正的JavaScript吧.

阅读全文....