最终还是没忍住HHKB的诱惑

刚打开BLOG看了一下,发现上次发文已经是N个月之前的事了,实在是不应该啊,这次趁着新键盘到手的契机,顺便写写最近的一些情况以庆祝。

上一份工作

为什么说是上一份工作哪?原因是,我换工作了,这应该是持续时间最短的一份工作了。

现在想来,上一份工作似乎没做多少事,从3月份到11月份,八个月的时间,真正由我来做的其实就只有两件事,而其中一件还只是进行了设计以及初步的定义相关的编码。

首先是队列系统,主要是用来解决高并发状态时的压力问题,这个项目通过在世界杯项目中的使用,基本上证实了思路的正确,并且在使用中也确实是起到了非常明显的作用,实现了设计目标。

然后是一个数据层系统,设计中这个数据层会解决数据的持久化及缓存的管理及合并,并且向下游用户提供良好的使用接口,实现MySQL协议以降低现有系统数据的迁移难度,就我看来,这个设计是合适的,但是由于公司内部的一些变动,没办法让我把精力放在这个系统的开发上,然后,就没再坚持下去。

新工作

现在的这份工作是在朋友创业公司,这朋友还是王爷介绍认识的(能认识王爷以及几个新朋友是我这次回北京最大的收获),现在是接着做游戏后端相关的工作。

目前来看,现在的工作对我来说又是一个巨大的收获。在项目开始时我就有幸参与进来了,因为时间足够,在后端的设计初期花了大量的时间进行系统的设计,这些设计目前来说还是比较合理的,至少使后期的开发工作极其的便利,关于项目的设计部分以后再专门讨论。

现在这个游戏项目已经到了后期,目前处于跟发行商谈判以及根据发行商要求进行修改的阶段,再有两个月左右的时间应该就可以跟大家见面。

键盘

虽然早就对机械键盘有所了解,但是真正接触的时间并不长,先是用了一把CHERRY的茶轴,然后在对HHKB进行了大量的了解之后,实在没忍住就入了一把,虽然价格上贵了些,拿到手上就对其爱不释手了,这篇博客就是用这个键盘写的第一篇文章,用到现在我只有一个感觉,那就是舒服。

现在看来我真是不会细节描写,除了说舒服我就找不出更合适的词来形容这个键盘了。

在买这个键盘之前我还担心不适应其独特的键盘布局,但是现在看来这个担心是完全没有必要了。原因应该有那么三个吧,一、我把2、3跳线打开了,其它都是默认的,2号是把键盘设置成Mac模式,3号是把BACKSPACE切换成习惯的方式,其它的跟用普通键盘没啥区别。二、我用习惯了Mac,用CTRL配合光标移动对我来说也很熟悉,再加上vi/emacs对我来说更是最常用的编辑器。三、没了。

最后,对于程序员来说,我觉得HHKB确实是值得拥有的一把利器。

繁忙时代

繁忙时代前言

从进入三月份进入新公司,一直到现在,刚看了一下日期,竟然刚好是13号,整整五个月的时间。现在想来,这五个月的时间我自己做起来的项目应该说只有一个半,但是这一个半项目贯穿了公司里多个项目多个部分,毕竟做的是基础开发,这也是必然的吧。

当然了,之所以说繁忙,主要还是因为除了工作我还做了不少其它的事,总之,这段时间我把时间安排的非常紧凑,尽管很忙,但是这也让我过得很充实,下面尽量简单的记一个流水帐。

Install a git server use gitolite over the ssh

闲话

最近这段时间处在封闭开发状态,基本上没什么时间写日志了,不过现在也忙的差不多了,更重要的是,今天需要安装一台Git服务器做为开发之用,而且需要把安装过程整理出一份文档 ,所以,咱就直接写出来,也做为一篇日志发布了吧。

进入正题

建立服务器的软件我这里选用Gitolite,之所以选用Gitolite,一是因为之前曾经使用过Gitolite,再一个是因为Gitolite可配置性更高,而且更为小巧。而且,由于这个服务器只在内部使用,没有必要使用Gitlab这种体积庞大的提供过多的WEB方面功能的程序。

没有特别声明的都为在服务器上执行

  1. Git

    使用系统命令安装git客户端,比如yum install git,版本最好不要太低,1.7以上。

  2. 建立Git帐户

    useradd -d /opt/git -m git,用户目录的位置不做要求,但是由于是专用帐号,最好是放在有备份保证的目录,便于管理。

  3. 生成管理公钥 (管理端)

    ssh-keygen -t rsa -C "Git Admin" -f gitadmin
    这个步骤需要注意的是生成密钥对最好不要加密码,否则有可能出现奇怪的问题。完成这一步后将gitadmin.pub文件传至git的HOME目录中备用。

  4. 同步Gitolite代码

    git clone https://github.com/sitaramc/gitolite,此命令需要在Git用户的HOME目录中执行。

  5. 安装Gitolite

    在用户目录中执行gitolite/install -ln,参数的意思是在$HOME/bin目录中建立指向源代码目录的文件链接,这样做的好处是可以方便的升级gitolite,另外,install命令另一个参数是-to可以指定命令安装到的目录,默认情况下不需要指定。
    需要注意的是,默认安装的时候需要将$HOME/bin加入$PATH,如果指定安装目标需要将$HOME/to_dir加入$PATH。
    执行完install之后需要执行gitolite setup -pk gitadmin.pub
    完成后,需要再检查一下~/.ssh目录和其中的authorized_keys文件的权限,需要将权限控制为仅本人可读写。

  6. 同步管理库(管理端)

    由于管理端或客户端与Git服务器之间的通讯是基于ssh的,所以,为了便于使用,需要对与Git服务器的连接进行单独配置,打开~/.ssh/config,在其中加入单独定义管理时所使用的密钥文件。

host gitadmin

HostName xxx.xxx.xxx.xxx

User git

IdentityFile ~/.ssh/gitadmin

经过以上配置即可以执行git clone gitadmin:gitadmin获取管理库,之后所有对服务器的管理只能通过此管理库进行,严禁直接在服务器上对服务器进行修改。

  1. 修改Gitolite配置及用户管理
    详细使用配置及管理方法请参考源代码目录下的README.txt
  2. 从Subversion向Git做版本迁移
    两种方法

    • git svn clone svn://url.to.svn/repos —no-metadata —authors-file=users.txt
      直接从svn版本库中clone数据到本地,其中
      —no-metadata 指定命令不在git版本库中加入svn版本元数据。
      —authors-file 指定与svn用户相对应的git用户。

    • git svn init svn://url.to.svn/repos —no-metadata

    • git svn fetch —authors-file=users.txt
      这两个命令为一组,第一个命令初始化一个基于svn源的git库,此时可以在该库的.git目录下修改branches和tags信息,完成之后使用第二个命令开始同步代码,此时代码将按照配置把不同分支或标签下的代码提交到git库的指定位置。
      如要迁移的Subversion版本库使用遵循惯例的目录设置,则可以在第一种方法和第二种方法的第一条命令中加入-s选项,本选择可以简化同步的操作。

Windows版客户端TortoiseGit下载地址:http://download.tortoisegit.org/tgit/1.8.8.0/
Pro Git: http://git-scm.com/book/zh/

结束语

Git的使用入门很容易 ,只需要简单的分支、标签管理和版本提交,基本上就可以满足日常的需求,当然,还有更多的特性需要在使用的过程中逐渐的接触和应用。

Get a TexturePacker free license

闲话几句

昨天跟老婆吵了几句,当时确实是非常气愤,不过现在想想真的很划不来,气大伤身不说,昨天也因为这吵架导致了始终静不下心来学习,所以说,这吵架不仅伤身、伤心情,还浪费了时间。
其实本来也没有什么大不了的事情,没有必要非得争个是非黑白,如果确实觉得对方做的不合适,完全可以在对方心情恢复正常之后再换个角度讲给她听,这样在达到目的的同时也避免了伤和气。基本上应该有这个原则,在对方情绪激动的时候最好是避免正面的意见冲突,这不光是在两口子之间的相处之道,在和任何人相处时都是适用的。

说点正题

Texture Packer是一个非常方便的Sprite Sheet生成工具,我在About Sprite Sheet一文中讲到过,那天我在写博文时就发现下面提示还有两天的试用期,于是去到官网上准备,然后就看到下面有个可以申请免费License的链接,看里面的说明,我的博客是符合条件的,于是就试着申请了一下,没想到今天就收到了作者发来的邮件。
Email
同时,下面还附送了一个Physics Editor的授权文件,这个软件我也安装上了,看起来也是非常的强大,尽管我还没有试用,不过我想这对我学习游戏开发的过程一定会很有帮助,在此对作者表示剧烈的感谢。

结语

我想作者愿意为做技术的或跟此相关的人提供免费的授权,一方面是希望能帮助宣传这他的软件以使他能够获得更多的回报,另一方面也是希望他的用户更多,即便是没有得到金钱上的回报,但是由此带来的巨大成就感也是所有软件开发者内心所渴望的。
就像王爷他老人家现在每天熬夜加班费劲巴力的花大量的时间在搞他的一个EF English辅助APP一样,他也没指望能在这个APP上获得什么经济回报,当然能得到经济回报更好,就算得不到,一旦用户多了,我想他也会忍不住请我动吃大吃一顿来庆祝一番的。【千里传音:我说的对吧,王爷?】。

About Sprite Sheet And Tools

闲话

感冒好像有些更严重了,头很不舒服。

下午听王爷说他们发奖金了,虽然不多,但是也是要恭喜一下的,毕竟不管发多少,总比不发强吧,而且现在他的项目进展的也算是顺利。一想到这项目还是会有些郁闷,毕竟是我们哥几个一点点弄出来的,现在却成了别人的孩子,而且还是不太待见的孩子,郁闷。

正文

今天随便说说Sprite Sheet吧,简单来说,这是一个小图片集合。我印象中,这种技术最早用于WEB开发中,当在网页中使用很多小图片时,在访问时,浏览器需要对每个图片发起请求,而每次请求都只传送了一个很小的图片文件,这无形中就浪费了大量的HTTP请求和网络连接,即使在HTTP 1.1的环境中,默认的头Connection保持keep-alive时可以我重用连接,便是多次请求传送的Header也会浪费很多的流量。

因此,就有聪明人发明了这种方式,把多个小图片合成一个大图片,这样不仅减少了请求数、节约了资源,还使数据传输更加有效率,于是人们亲切的称之为Sprite Sheet。

而在游戏开发中,合理的使用Sprite Sheet同样有着积极的作用,比如将相关性较高的图片合并到一张大图片中,不仅可以使图片的渲染过程得到优化,同时还能使图片资源更便于管理(这也是我最近也学到的,:))。

Cocos2D-X learning 4

废话

今天和王爷一起去传说中的车库咖啡见了一个创业团队,跟他们有了一个小时左右的交流时间,交流的详情就不说了,总之,让我和王爷多了一个很好的话题,在回家的路上,我们就这个话题进行了友好、亲切而又愉快的交流,受益匪浅。
不过,最糟心的是,跑这一趟我竟然感冒了,主要是天气热,出了很多汗,而在地铁通道里风太大,晾了汗了,纠结死我了,明天还要去见一个离得比较近的创业团队,我在犹豫到底还要不要去。

概述

今天随便说说在Cocos2D-X开发中,关于对CCSprite方面的优化,总得来说就是尽可能减少渲染次数,这样可以使游戏运行更有效率,能够空出更多的CPU时间做其它的事情,以增加游戏的流畅与体验。

正文

Cocos2D为图片资源批量加载提供了CCSpriteFrameCache类,此类可以通过使用Sprite Sheet文件来减少图片加载次数,简单来说,就是把多个图片拼成一个大图片,之后通过坐标在大文件上取到相应的图片,这个技术被广泛使用在网页设计及游戏开发中。在这里我使用了一个叫做Zwoptex的软件自动生成大图片及相应的.plist,软件的具体使用方法就不在这里细说了(另外,朋友介绍说Texture Packer是可以更好的做这件事的工具,改天尝试一下)。

另外,Cocos2D还提供了一个CCSpriteBatchNode类,这个类主要作用是,当相同图片资源被重复使用时,通过这个类可以减少使相同的图片只渲染一次,具体做法看下面的代码。
PS: 代码基于上一篇BLOG,只对关键部分进行说明。

GameSceneDH.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef __StudyCocos2D__GameSceneDH__
#define __StudyCocos2D__GameSceneDH__

#include <iostream>
#include "cocos2d.h"

using namespace cocos2d;

class GameSceneDH: public CCLayer {
public:
    static CCScene *scene();
    virtual bool init();
    CREATE_FUNC(GameSceneDH);
};