May 16, 2013

招聘 Windows/Linux SA 一名

最近我们代理的游戏 狂刃 开始二测了,忙坏了我们的 SA Aply 同学。

Aply 是我的大学校友,低我一届,在学校门口的网吧认识,到现在已经有十多年。前年底我们的公司 简悦 成立时,他就找到我想一起干点事情。我们正好缺一个 SA ,他便从程序员转职了。从开始的各种不熟悉,他迅速的承担了所有 SA 的工作,得到全公司同事的认可。从今年开始,狂刃一步步发展,已经不再是一两台服务器的管理工作,一个人做这些事情已经显得太繁重了。

为了让 Aply 同学能有正常的假期和休息时间,我们想再招聘一名系统管理员,协助 Aply 同学的工作。职责主要是负责狂刃游戏的服务器运维。

狂刃的服务器暂时工作在 Windows 下(我们正在协助移植到 Linux 平台,但需要一段时间),所以需要有 Windows 平台的系统管理经验。

我们公司未来自研发项目全部在 Linux 下,所以也需要用 Linux 平台的经验(不必须特别丰富,但需要有学习的热情)

对这个职位的要求是:

  1. 有系统管理员工作经验三年以上。
  2. 熟悉 Windows 平台,对 Linux 有一定了解。
  3. 懂得如何批量部署,监控多台服务器(工具不限)。
  4. 懂得如何编写脚本(不限语言和工具)进行系统管理工作。
  5. 了解基本的网络协议。
  6. 可以 24 小时响应突发事件,并能承受突发事件带来的额外工作强度。

有兴趣的同学可以 email 和我联系了解更多细节。

介绍几个和 Lua 有关的东西

最近有份工作是需要把 Lua 中的数据结构以某种特定的格式输出为文本的,所以就用到了 Lust 这是个代码生成工作的利器。

可能是用的人不多,所以还略显不完整。用的时候发现一些个小问题,原来以为是 bug,读了源代码后发现是个 feature 。但是觉得这个 feature 不太合理,就上 github 上留言。作者倒挺爽快,马上表示赞同并去掉了。


第 2 个是 luaffi 。这个东西原本是 luajit 的一部分,可好多人确是冲着 ffi 库去用 luajit 的。

luajit 目前尚有不少的局限性,比如内存只能用 32 位寻址,不支持 lua 5.2 的 api 等。另外,从稳定性上来说,也不如原版的 lua 更让人放心。

据我所之,我们合作的狂刃 的服务器端就为了 ffi 使用了 luajit ,却担心稳定性问题,把 jit 功能关闭了。

还有 luaclang 这类项目,未必是稀罕 luajit 的性能,更多的是贪图用 ffi 写 binding 的便捷才启用 luajit 的。

阅读全文 "介绍几个和 Lua 有关的东西" »

May 06, 2013

招聘 Lua 开发人员一名

5 月 16 日 注:由于已经收到足够多的简历,所以招聘提前终止,谢谢大家的热情。


我们公司 简悦 招聘网络游戏服务端开发人员一名(截至到 2013 年 6 月 1 日)。

基本要求:有至少原创 1000 行以上 Lua 语言编程经验,一万行 C/C++ 语言编程经验。有网络服务开发经验:可以独立解决问题(包括但不限于设计合理的通讯协议,评估其效率及安全性)。

有游戏行业从业经验两年以上可以加分。

有兴趣且满足基本要求的同学,可以 email 和我联系获得更详细的信息。

May 05, 2013

XOR 链表

前两天阿楠同学想用链表实现一个消息队列,虽说是链表,但是没有从中间删除节点或添加节点的需求。只需要先压入的消息先处理。为了完成这个需求,最后实现了一个双向链表。

当然这个东西是用 Lua 写的,做一个双向链表也不算复杂。采用单向链表也可以做到,只需要多记录一个尾节点。不过今天想说的是,如果这个玩意在 C 里实现的话,其实只需要用一个指针的空间就可以搞定一个双向队列,可以从任意一头进出数据,可以以两个方向遍历,而实现需要的代码量却和单向链表类似。因为算法非常有趣,在 C 语言之外很少见到,知道并使用过的人也就不太多了。这就是所谓的 XOR Linked List

阅读全文 "XOR 链表" »

April 17, 2013

Lua 5.2.2 中的一处 Bug

前几天, Lua 5.2.2 发布了, 主要是修复了 4 个 Lua 5.2.1 中已知的 bug . 其中包括前段时间一个同学和我在 email 交流中讨论的一个问题.

我把 Lua 5.2.2 更新到公司项目的主干上,同时需要对我的那本 《Lua 源码欣赏》做一些更新,需要把这次的代码更改同步到书里去。这个工作很繁琐,但有它的价值。比如我发现了 Lua 5.2.2 比 5.2.1 的更改远不只官方宣布了 4 处 bugfix ,还有一些小调整,让 Lua 的源码更规整一些。

阿楠同学因为这段时间一直在维护 UniLua 这个 C# 版的 Lua 项目,我就随便和他通告了一下这次的一些代码变更,方便他同步到 UniLua 项目中去。

讨论之中,他提到 luaD_precall 函数的实现有些诡异之处,没有看明白。我顺着他指出的位置又仔细阅读了一下,果然发现这里存在一个隐藏很深的 Bug 。

阅读全文 "Lua 5.2.2 中的一处 Bug" »

April 16, 2013

树结构的一点想法

数据结构中的树结构在抽象复杂事物时非常常见,在图形引擎中,多用于场景以及 sprite 的层级管理。在 GUI 相关的模块中也是必备的结构。其它领域,比如对程序源码本身的解释翻译,以及对数据文件的组织管理,都离不开树结构。

我觉得,这是因为一个对象,除了它自身的属性(例如大小、形状、颜色等)之外,还需要一些外部属性(例如位置、层次、方向等)需要逐级继承。每个对象都可以分解成更细的对象组合而构成、这些对象在组成新的对象后,它们的聚合体又体现出和个体的相似性(至少具有类似的外部属性)。这使得采用树状数据结构最容易描述它们。

我最近的一些工作代码做了很多这方面的工作,回想这些年里,我不只一次的思考类似的问题(参看 2009 年的一篇 blog),而每次最后解决问题的代码的都有些不同,编程风格也有一些变化。总结一下这段时间的思考,今天再写这么一篇 blog 。

树结构的基本操作无非是遍历整棵树、遍历一层分支、添加节点、移动节点、删除节点这些。但在大部分应用环境下,我们最多用到的只是遍历,而非控制树的结构本身。

阅读全文 "树结构的一点想法" »

April 15, 2013

WM_CREATE 引起的 bug 一则

今天在维护一个 Windows 程序时,发现一个 bug ,记录一下。

这是一个简单的 Windows 程序,在注册给窗口的 WinProc 回调函数中处理了 WM_CREATEWM_PAINT WM_TIMER 等消息。

bug 的现象是,WM_CREATE 的流程没有走完就开始处理 WM_TIMER 等消息了。表现起来仿佛 WinProc 被重入了。

仔细排查后发现,不知道什么奇怪的原因,我的 Win7 系统在处理 WM_CREATE 消息时,默认捕获了异常。导致消息处理的流程没有走完,但进程却没有崩溃,窗口也被正确创建出来了。然后这个窗口可以继续接收 WM_TIMER 等消息。

阅读全文 "WM_CREATE 引起的 bug 一则" »

Misc

Categories

Archives

Recent Comments