移植 quick2.2.3 的项目到 cocos2d-x 3.4 lua

我们的第二个游戏 Lulala 是采用我修改过的 quick 2.2.3 开发的,这个项目已经完成。

Lulala 完成后,我们立项了一个新的游戏 HHL,此时我转向了 cocos2d-x lua,具体原因我在 从 quick 转向 cocos2d-x 3.3 lua 一文中做过介绍。

在 HHL 中,我本想将以前在 quick 中修改的东西,全部移到到 cocos2d-x 3.x 中来,但仔细考虑后放弃了。我修改了太多的 C++ 代码,同样的工作我不可能在 cocos2d-x 3.x 中再来做一遍。

由于 从 quick 转向 cocos2d-x 3.3 lua 中提到的痛苦经历,我现在要保证 cocos2d-x 跟随官方一起更新。我不打算再大幅修改 cocos2d-x 3.4 的 C++ 代码,否则合并 cocos2d-x 官方库一定会出问题。 继续阅读

dragonbonesCPP 在 Android 5.x 上问题的解决

在 cocos2d-x 3.4 上遇到了一个诡异的问题,记录如下。

平台和版本

  • 框架: cocos2d-x 3.4 final
  • 设备: Nexus 4/5/7 with Android 5.0.1/5.0.2
  • NDK version: r9d

问题描述

一个 dragonbonesCPP 骨骼动画,在 iOS、Windows、Mac OS X、Android with 4.x 上表现完全正常,但在 Android 5.x 下表现不正常。

具体表现为解析骨骼动画数据的时候,既不 crash,也没有任何报错信息,整个程序就停住了。 继续阅读

pure-ftpd 530 Login authentication failed

在服务器上,我一直使用的是 vsftpd,但由于 vsftpd 不支持 MLSD ,我开始转向 pure-ftpd

简单配置完毕后,登录一直出现错误。

-> % ftp ssi@xxxx.xx
Connected to xxxx.xx.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 12:08. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User ssi OK. Password required
Password:
530 Login authentication failed
ftp: Login failed

那么,下面是解决方案。 继续阅读

在 IDE 中使用 Vim

作为一个 Vimer ,很可能不会习惯其他的 IDE 中的编辑功能。

但作为一个理性的 Vimer,我们也应该知道并非所有的东西都适合用 Vim 来写。

例如,写后端或许可以只用 Vim(或许 JAVA 除外),但写跨平台的游戏前端,就不太可能了。

作为 cocos2d-x 的使用者,我必须在 Windows/Mac OS X 下不断切换,在 Visual Sudio/Xcode/Eclipse 三个 IDE 中不断辗转。那些坑爹的快捷键,我经常记错。那些纠结的键绑定,我经常搞混。

所以还不如把编辑模式都都改成 Vim 方便。下面是分别针对这三个 IDE 的 Vim 支持插件: 继续阅读

Good Bye, Flash!

最近才在 Robin 的介绍下读到 Keith Peters 的 Flash and Me ,细读后当真是感慨万千。

Robin 在邮件中写道:

从刚接触Flash时看的小小动画、大话三国、小破孩等动画,到闪客帝国、闪吧和后来的瑞研社区、天地会, 岁月好是把快刀啊, 更觉KP的话实在。

人生逆旅,且行且珍惜

既然已经开始感慨了,那就感慨一下: 继续阅读

从 Lighttpd 到 OpenResty

两年前,我写了 从Apache到Lighttpd。现在,是时候又发生改变了。

前段时间,我写了许多关于 OpenResty 的文章,并在公司内网服务器和自己的电脑上开始使用 OpenResty。

现在,我开始在外网部署 OpenResty。

编译和安装

OpenResty 的编译和安装就是老三套:

tar xzvf ngx_openresty-VERSION.tar.gz
cd ngx_openresty-VERSION/
./configure
make
make install

默认情况下,OpenResy 会安装到 /usr/local/openresty 中,编译时会默认使用 luajit。 继续阅读

lua 协程(coroutine)分析

这是一段分析 lua 协程(协同程序,coroutine)的代码,来自 Lua reference manual interface (略有修改):

function foo (a)
    print("foo", a)
    return coroutine.yield(2*a)
end

co = coroutine.create(function (a,b)
   print("co-body1", a, b)
   local r = foo(a+1)
   print("co-body2", r)
   local r, s = coroutine.yield(a+b, a-b)
   print("co-body3", r, s)
   return b, "end"
end)

print("1----")
print("main", coroutine.resume(co, 1, 10))
print("2----")
print("main", coroutine.resume(co, "r"))
print("3----")
print("main", coroutine.resume(co, "x", "y"))
print("4----")
print("main", coroutine.resume(co, "x", "y"))

运行效果如下: 继续阅读

rsyslog/Python/LogAnalyzer 记录和查看日志

在新的项目中,我希望服务端、客户端的所有信息都通过独立的日志系统记录。这样的好处是:

  • 日志可以使用单独的服务器存储和管理,实现权限分离,增强生产服务器的安全性;
  • 使用通用的格式方便分析日志;
  • 所有日志统一处理;
  • 客户端可以直接和日志服务器对话。

RSYSLOG 是一个高效的日志系统,也是目前 Ubuntu 和 CentOS 默认使用的日志系统。

LogAnalyzer 是一个 PHP 写成的 Web 前端,使用它可以分析和查看 RSYSLOG 生成的日志。

经过研究,我准备直接使用这两个系统。本文记录了我在配置这两个系统中遇到的问题。

本文不会详细从头开始介绍 RSYSLOG 的配置,若希望得到这些信息,请参考下面的文章:

我的系统配置:

  • CentOS 6.3
  • RSYSLOG 5.8.10
  • LogAnalyzer 4.1.1(v4-beta)

继续阅读

使用 git post-receive 钩子部署服务端代码

在 git 中提交服务器源码的时候,如果能够直接更新到测试服务器,并且重启服务使其生效,会节省懒惰的程序员们大量的时间。

git 的 Server-side hook (服务端钩子/挂钩)可以用来做件事。

本文以部署基于 OpenResty 的服务端程序为例来介绍我的做法。

技术信息

  • OS: CentOS 6.3
  • 服务器软件: OpenResty
  • 开发语言: Lua

名词解释

  • 服务器: 服务器硬件 + OS
  • 服务端程序: OpenResty 在服务器中的进程
  • 服务端代码: 部署在 OpenResty 中的 Lua 源程序

一、git 服务端钩子类型

Pro git 中介绍了 git 钩子的几种类型,其中和服务端相关的有: 继续阅读

可能是一个程序员