删除baidu统计 

关于baidu统计脚本被大炮劫持干坏事的事情前段时间闹的沸沸扬扬,前两天偶然来看了一眼自己blog,居然发现随便在页面上一点就跳转到了一个不存在的域名,心头一惊,多半是用的第三方脚本被搞了,果断把百度统计下掉,重新发了一下,果然……一切都好了……

以后不再用百度统计了,免得成为大炮的帮凶,当然这事儿上并不是百度的错。

生病 

前几天脖子后边长了个包块,本来没有怎么在意,甚至没有想过去医院看一下。 刚好老婆要去医院看他的沙眼和灰指甲,就顺便也挂了个号看一下,可是没想到,一看反倒吓了一跳。

做了一堆的检查,CT,B超,增强CT造影,到最后也没有检查出来到底是什么原因,在网上自己做了些功课,基本上两种可能,一种就是个普通的囊肿,建议手术切除;另一种比较常见的情况是各种五花八门的癌转移到这个部位。好在当天的B超检查的时候,医生说看起来应该是个软的东西,良性的可能性比较大。

不过这个小小的包块,也确实让我第一次认真的考虑到死亡,第一次认真的考虑如果我死了,我的家人该怎么办……

跑了两家医院,也咨询了几个作医生的朋友,最终诊断推测是先天性腮裂囊肿,推荐手术治疗,具体是不是,仍需病检确认。于是就做了个手术,住了几天院。好在病检的结果确认是普通的腮裂囊肿,只需要把伤口养好就可以了,没有其它的问题。


谢谢朋友们的关心,真心觉得很温暖。

简报 

好久没有写Blog,在这里做个简单的总结吧。

2013年,我再一次换工作了,呵呵,这次是回到了我的第一家公司,支付宝网络技术有限公司。也许我就是一个怀旧的人吧。

宝宝来了成都,这个可爱的小家伙长得胖胖的,非常好。新房子装修完毕,现在已经顺利的搬进了新家。

工作学习上,随着在iOS平台上开发经验的积累,慢慢的对移动平台的开发模式以及整个移动应用的设计开发模式有了更多的思考和理解,也慢慢的形成了自己的最佳实践。虽然暂时主要精力要离开移动互联网一段时间,但是这些经验还是很有帮助。

认真的重新学习了Clojure,对Clojure的方方面面有更多的理解,也更深入的理解了更多的函数是编程方法。

断断续续的学了点排版知识,有空继续断断续续的看。

下面的两个目标是DSL和机器学习,这会是未来几个月的重点,希望年底前能做点东西出来吧。

更好的阅读体验 实践《写给大家看的设计书》

从昨天开始看《写给大家看的设计书》,看得过程中意识到博客的设计中存在不少有问题的地方,于是就立刻动手优化,我才刚开始看,看到的地方也不多,另外之前没有什么经验,所以这次只是凭感觉简单优化了几个小地方。

  1. 把标题和发布时间靠的更近,在标题和正文间留出足够的空白。
  2. 首页文章间距增大,提供更明确的边界。
  3. 右侧的导航,取消了列表项前边的圆点,并左对齐。
  4. 右侧导航的分组间距的调整,分组更清晰。

修改的依据主要就是这本书前边的两章说表述的「亲密性原则」「对齐原则」,当然,很多地方还是不满意,需要更多的优化改进。随着后面继续读下去,我还会在自己这个博客上做更多的改进。

另外,这本《写给大家看的设计书》(这里)超出我的预期不少,真的是通俗易懂,如果你对设计有点追求,强烈推荐的。

Baby 

baby

2013年3月底,这个可爱的小生命终于来到了我们身边。虽然有九个多月的时间来做思想准备,但是当他真的到来的那个瞬间,依然感动的无以言表。

Github回来了 

不管是为了什么原因,这几天GFW把Github干掉了,不知道是为了什么,也不想去探究。反正朝内同行们纷纷表示活不下去了。

软件相关技术人员确实离不开这个东西,基本上是技术人员与世界接轨的最好通道了,也是最好的学习的地方。

不管怎么样,现在Github君回来了,非常高兴。不会写,简单记录一下。

优化了一下博客的阅读体验 

最近一段时间着手优化了一下博客的阅读体验,虽然我知道,读我博客的人很少,而且这个博客也没有多少有意义的内容,但是我还是要对得起我少有的几个读者,还有我自己。

首先是调整了全站的CSS,现在中文显示效果明显要比以前好很多。这主要是调大了字体大小,微调了字体的比例,还有字的间距和行距以及段落间距。如果你喜欢的话,可以去我的Github取我修改过的bootstrap。

去掉了以前每个页面上都有的没有意义的header,现在直接显示内容。

对文章页面进行了优化,启用了一些浏览器支持的阅读模式,也更方便Pocket这样的软件来抓取。

禁用了页面缓存,坏处是不能离线了,好处是不会遇到我更新了页面内容,如果你不手动刷新看不到更新后的内容的问题。

2013 

2012不知不觉就过去了,我到现在还觉得应该还有四五个月才对呀,可是,今天已经是2013年的1月1日午夜,再过几分钟就是2号了。

2012世界末日没有来,但是我却基本上在说好的末日前办完了人生中重要的几件大事。

2012是毕业3年来读书最多的一年,没有细算到底有没有实现年初的目标,呵呵,感觉上应该差不多吧。

2012是神奇的一年,未来的一些部分在我眼前越来越清晰,另一些部分却越来越迷茫,一些部分让我充满信心,另一些部分却让我越来越觉得害怕。


2013排名第一的事,当然是迎接小宝宝的来临。

2013,压力很大,工作上的事很不顺心,但是记住自己说过的话「无论什么样的环境都有机会,环境越糟,机会越大」,努力加油吧。

2013,保持读书,读更多的书。

2013,如果有可能,我希望能启动一个业余项目。

Hello, 2013,明年元旦写这样的博客的时候,希望会是一份更好的答卷。

奇迹 

今年双十一,一家企业创造的狂欢节。

前同事们创造了新的奇迹,单日交易额191亿,交易笔数1亿零580万笔,每秒钟几十万笔交易事务。这是一个伟大的奇迹。恭喜你们,祝贺你们!

他们在创造奇迹?我呢?加油!

姥爷,走好 

姥爷于昨天晚上走了,终究没有看到他即将出生的另一个重孙。十月份回家结婚的时候去探望他,跟他提起,很快他就要有另一个重孙了,老人家可高兴了,那时候,我有想过他会走,但是当真的来的时候,我还是觉得意外,那一次的相见,居然就是我见他的最后一面。

我也不知道应该说些什么,但是我总觉得我需要写点什么,纪念亲人吧。

如果真的有天堂,姥爷会在那里,他是一个好人。我希望他在那边能永远快乐安康,永远的和姥姥在一起,继续他们这辈子的幸福。

姥爷,走好!

让eclipse支持retina display 

偶然看到eclipse更新了大版本,做为资深码友,怎么能不顺手更新一个呢?于是乎,10分钟的等待后,悲剧发生了……我了个擦,居然不支持retina显示器,我的rMBP表示压力很大啊!难不成要对着一片毛边编程?!

不能,不能这样,于是开始Google,果然看到有人已经给官方提了这样一个BUG,下面的comment里,有个大神给了一个办法解决了这个问题,亲测非常给力啊。

但是呢,貌似没有找到中文版本,为了方便用中文的朋友也能顺利的用上rBMP+eclipse,于是乎,我写了这篇博客。

其实很简单,只需要打开eclipse.app这个目录,在Contents/Info.plist里添加一对键值就好了:

<key>NSHighResolutionCapable</key>
<true/>

把这段代码放到Info.plist文件的最后,</dict></plist>前面。修改后这个文件里后五行是这样的:

   		<key>NSHighResolutionCapable</key>
		<true/>
	</dict>
</plist>

这个时候,你再次打开eclipse是不会生效的,因为MacOS会缓存Info.plist里的信息,建议是复制一份这个Eclipse.app,然后把原来的删除掉,再把这个复制到改回原来的名字。此时再启动就应该是OK了!

好了,enjoy it!


UPDATE: 现在已经放弃Eclipse有一段时间了,现在主要用的IDE是Intellij IDEA,强烈建议你也试试,提升效率刚刚的,即使是免费的社区版。

新工作 半年总结

在新公司工作了也有三个多月了,好快啊。

活跃网络现在的气氛和当年还是有很大的不同,当然,也有一部分原因是现在的工作内容以之前有很大的差异吧。那一年,我还是一个security工作者,现在却已经变成了iOS developer兼职php developer。曾经我相信我这辈子都不会去碰的php现在也变成了我工作里重要的一部分,并且慢慢的我也发现它并不是当初想的那么糟,甚至如果你爱它,你会发现它也还是很可爱的,也或许这就是Unix哲学中的worse is better?

其实觉得现在的工作挺失败的,大家工作的内容不是为了一个好的产品,而所有事情第一个想到的是给老板交差。产品经理不怎么关注用户而是关注于给大老板演示让大老板觉得这个事情靠谱;开发团队关注的是怎么让老板觉得我们做了很多的工作,我们的工作进展OK,大家都很关注自己的job security,工作仅在于自己的task。总结一下可以这么说,整个产品线上,没有任何一个是有ownership,本来我认为是大家的位置没排正,后来我慢慢发现有些人也不愿意有。

在这样的工作环境下,许多时候觉得挺没有成就感,每天在做的都是不知道后天会不会被砍掉,除了让老板高兴,让我自己可以“心安理得”地拿到这个月的工资外几乎没有任何意义的垃圾。当然,就像我一直所坚信的一样,不管什么样的环境下,身边都到处都是机会,没有任何事是完美的,只要有不完美就有很多机会。只是我还没有想好要怎么办。


顺便来个总结吧。

2012对我而言,注定是一平凡的一年,我用了一年的时候做了小半辈子需要做的事,年初在规划原公司的技术团队,没几天就离职了,再没几天我和爱了多年的女友把红本本给拿到了,再后来回到了以前的公司,再后来我们有小宝宝了,再后来我们马上要办婚礼了,再后来今年内要把房子买了…

年初说每个月要读一本书,因为上面的事,也没有完全实现,不过还是读了一些书。

  1. Real world haskell
  2. MySQL 性能调优与架构设计
  3. Linux/Unix 设计思想
  4. Clojure in Action(在读)
  5. Practical Common Lisp(Reading)
  6. 深入理解java虚拟机(在读)
  7. 明朝那些事 

找工作 

想想还真是风云变幻,年初写博客第一篇文章的时间,我还在想怎么把摩奇卡卡的开发团队做强,现在就已经和这个我新手参与创办的公司没有多少关系了。前段时间由于与CEO在一些问题上意见不和从前公司离职休假,最近开始找新工作,但是悲剧的发现成都真不是一个软件产业或是互联网产业发达的地方,要找份比较理想的工作还真是比较纠结。

好吧,顺便打个小广告,有朋友有靠谱公司/职位推荐的请联系我,地点限成都。现在有朋友建议我去北京,在此表示感谢,虽然我暂时没有办法去北京。

UPDATE: 工作已经找到了,我重新回到了成都活跃网络,谢谢朋友们关心。

强大的Make 

每一次用Make都会不禁感叹这个东西有多么的强大,强烈建议所有做开发工作,也推荐不做开发工作,但是有许多各种各样文件需要处理的人深入学习一下Make,当然,简单学习一下其实挺简单的,能做的事也很简单就是了,要强大当然还是要深入的学习。

下面是我的一个模板,比较方便,共享出来给懒人们玩玩。基本上如果是写个简单的项目,这个就满足绝大多数需求了,甚至包含了对头文件依赖的处理,确实非常方便。

CC=clang
CXX=clang++

TARGET=test
C_SRCS=$(wildcard *.c)
C_OBJS=${C_SRCS:%.c=%.o}

CXX_SRCS=$(wildcard *.cpp)
CXX_OBJS=${CXX_SRCS:%.cpp=%.o}

$(TARGET) : .c_depend .cxx_depend $(C_OBJS) $(CXX_OBJS)
	$(CXX) $(LDFLAGS) $(C_OBJS) $(CXX_OBJS) -o $@

.c_depend : $(C_SRCS)
	$(CC) $(CFLAGS) -MM $(C_SRCS) > .c_depend
	
.cxx_depend : $(CXX_SRCS)
	$(CXX) $(CXXFLAGS) -MM $(CXX_SRCS) > .cxx_depend

%.o : %.c
	$(CC) $(CFLAGS) -c $< -o $@

%.o : %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

-include .c_depend .cxx_depend

clean :
	rm *.o $(TARGET) .c_depend .cxx_depend

新主题 

编辑了一下博客的样式表,现在开始使用新的主题,我个人觉得效果还是不错的。

这段时间在学习Haskell,同时粗略的看了一下Go,过几天写篇博客来记录一下。

JavaScript 面向对象编程 

此处省略2万字(JavaScript背景知识)

JavaScript是面向对象的,这一点是没有疑问的,但是我看很多人并没有真正理解JavaScript的面向对象,具体的说,很多人用Java等Class Based的OO思想来想方设法的将JavaScript变成他们熟悉的Java。其实JavaScript采用的是另一种OO实现方式也就是基于原型(Prototype Based)的面向对象编程,借用了Self里的许多思想,关于这个的Prototype Based OO在JavaScript里的详细讲解可以参考 这个.

事实上Prototype Based虽然不是现在面向对象的主流,但是也绝对是非常重要的一种思想方法,甚至一些非常新非常酷的语言(E.g. Io)仍然在沿用这样的技术。

下面就给出一个用JavaScript最原生的OO方法编写的简单实例,供参考:

function _cb(func, context) {
    return function() {
        if (!context) {
           context = this;
        }
        func.apply(context, arguments);
    };
}


function Ajax(success, fail) {
    if (success) this.success = success;
    if (fail) this.fail = fail;
    
    this.xhr = new XMLHttpRequest();
}
Ajax.prototype = {
    init: function() {
        this.xhr.onreadystatechange = _cb(this.readystatechange, this);
    },
    encode: function(data) {
        result = "";
        for (key in data) {
            result += encodeURIComponent(key) + "=" + encodeURIComponent(data[key]) + "&";
        }
        return result;
    },
    get: function(url, data) {
        this.init();
        this.xhr.open("GET", url + "?" + this.encode(data));
        this.xhr.send(null);
    },
    post: function(url, data) {
        this.init();
        this.xhr.open("POST", url);
        this.xhr.send(this.encode(data));
    },
    readystatechange: function() {
        if (this.xhr.readyState == 4) {
            if (this.xhr.status == 200) {
                this.success(this.xhr.responseText);
            } else {
                this.fail();
            }
        }
    },
    success: function(data) {
        console.log("Ajax request finished!");
    },
    fail: function() {
        console.log("Ajax requeset failed!");
    }
};


function AjaxUpdater(element, success, fail) {
    this.element = element;
    if (success) this.updateSuccess = success;
    if (fail) this.fail = fail;
}
AjaxUpdater.prototype = new Ajax();
AjaxUpdater.prototype.success = function(data) {
    this.element.innerHTML = data;
    if (this.updateSuccess) this.updateSuccess();
};


window.addEventListener("load", function() {
    var updater = new AjaxUpdater(document.getElementById("test"));
    updater.get("xproto.js");
}, false);

IrrMob 

最近在Github上发布了之前移植的 Irrlicht ,姑且称作 IrrMob 。IrrMob可以工作在几乎所有的常见平台上,现在已经测试过的有Windows,Linux,Mac,Android,iOS。

Irrlicht在Windows上提供了VisualStudio的工程文件,在Linux和Mac上使用Makefile进行编译,IrrMob统一使用CMake来生成各个平台的工程文件,可以轻松的生成Windows,Linux,Mac上编译所需的工程文件或是Makefile,针对iPhone,也可以直接生成工程文件。Android平台使用StandaloneToolchian来进行编译,因此编译前需要生成目标平台Toolchain,然后用CMake生成Makefile,也可以生成Eclipse工程。

IrrMob中提供了几个Blender的插件,有自己写的,也有直接收集的开源插件,在此感谢原作者。

目前我正在使用IrrMob开发一款针对手机平台的3D游戏,目前看来效果还不错的。当然,画面效果方面Irrlicht的表现与现代的商业渲染引擎是有差距的,再加上,iOS平台上的Irrlicht目前只有GLES1驱动可用,对画面效果也有一定的限制。不过总体来说至少可以做到还不错的效果。

详细的编译过程在此不多说,比较简单,稍微阅读一下根目录下的CMakeLists.txt就可以明白。

第一贴,2012 

2012终于来了,不管是不是世界末日,反正对于我来说是一个不太开心的开端,具体的情况我也不想多讲。

今天下午折腾了一个下午,选了好几套模板,终于选定了现在的这款,并且把博客给架了起来。说来还真不好意思,我都不记得我自己开过几个博客了,每次都命不长久。最早是在新浪博客,那个时候还刚上大学,发表的内容主要是一些基础的编程练习以及自己当时以为很牛逼的作品,现在看来还真是有点呆。后来因为新浪改版,把博客搞得过于娱乐化就放弃了新浪的博客,中间用过BlogBus,用过网易,也用过自己的空间,不过都不长久。再后来是百度出了空间,风格非常对我的味口,就在百度空间安家了一段比较长的时间,再后来百度也改版搞社区化,风格再次变得与我想要的博客格格不入,而且一直不喜欢百度这家公司,所以就删除了所有的文章并再次搬家。最近的一次是在新浪的AppEngine上,每天送云豆基本够用的情况下我觉得这个东西不错,可惜没有多久就再次悲剧,新浪不再对普通用户送云豆了,我觉得不靠谱就再次搬家。试过了HeroKu和Github,最终决定在Github上开博。想想还真是曲折。

费了这么大劲把博客搞起来,主要还是觉得自己也混了这么久了,应该留下点什么。那么就从2012年1月1日开始吧。

2012年要做的几件事:
爱老婆,爱生活。

改进公司的产品研发的效率与质量:现在的开发还基本上处于原始状态,有项目就上手折腾,产品设计不到位,程序设计不到位,边做边整,资源严重不稳定,交叉利用非常严重,产品流程不完善,设计与开发之间步调不协调…这些都是要想办法解决的问题。

员工培训:现在在做,不过因为种种原因中断了将近一个月了,不管什么理由,这个事情一定要坚持推动下去,如果团队不进步,公司的发展是没办法想象的,何况我们现在根本不算优秀,连吃老本的资格都没有。

个人修养:少些怨念,多做些事。坚持完美主义,少些纵容,包括对自己,对同事。

读书:坚持每个月读一本书。

Read older blogs...