Code

2011年12月25日星期日

选职业是选人生,选公司是选生活

今天是圣诞节,Spencer把我和文彬带到马林百列的教堂参加圣诞庆祝。5年前我也来过这个教堂,那时的我不太懂宗教什么的,糊里糊涂的就洗礼入教了。后来发现基督的很多想法都是强加在人们身上的,我很难接受就再也没有去参加礼拜。后来小组的人包括两个学长也鲜有联系。今天旧地重游,勾起了许多回忆,也坚定了我后来退出的想法。Loy说的很有道理,神就是一个tag。生活中有无法解释的东西,可以用一些神的概念来tag,这样就可以理清一些思路最后来解决问题。我觉得神的概念是一个商品,有需求了才去膜拜。过分的信奉一样东西让我很反感。

Spencer是我的老板。我有很多老板,大老板Mr Lee,小老板Loy, Daniel,Som和Spencer。四个小老板是从初中就是同学,后来都在国大学计算机系,如今都是不惑之年,做了20多年的朋友到现在还能在一起共事甚是难得。刘灿常在别人面前说我跟他10几年的同学,但不懂为什么很难跟他有一种老友的感觉。也许我们的共同语言只限于初中三年的那些零散的记忆吧。是Spencer面试我,招找我进公司的。Loy, Daniel和Som也有面试我,都对我还比较满意。据Loy说,Spencer和Som都是first class honour。但他们都选择来到小公司工作,也许是不习惯大公司的氛围吧。的确,在公司,每天的生活都是很自在的。而且周围都是好朋友,当然不愿离开。

四个老板都对我很好。Loy平时管一些非技术性的事情,比如营销,客户等等。他很瘦很能说。他和Som, Daniel不常在公司,但他每次来都会关心的问我很多对现在工作的情况和一些生活上的事情。Som和Daniel都是搞技术的,我的工作主要也是向他们报告。他们说话比较少,搞技术的特征。尽管如此,Som还是会在圣诞节跟我说Merry Christmas。哦,Som是一个大肚子印度人。

今天晚上从Century Square骑车回来的路上听了任贤齐的《伤心太平洋》,想到现在的生活,小感伤了一下。现在的公司生活还是很满意的。公司老板同事的关系都处理的还不错,大家都很和谐。对于我这种人选择一个公司不仅是选择一份糊口的工作,也是选择一个朋友圈,一个生活的氛围。一个礼拜7天,5天时间都是从早到晚的待在公司,到了周末我又比较喜欢一个人或是陪陪女友。所以基本上不会有其他的朋友圈,当然我也比较懒。一起工作的人对我生活的影响是相当大的。

Spencer后来又把我跟文彬带去东海岸溜冰。他的三个儿子也一起去了。他们玩的是一种分开式的wave board,新加坡现在还没人玩。所以当他们父子4人在路上一字排开滑着这种新奇的玩意时,相当的拉风。我当然不会,所以花了些功夫学习。不过后来天不作美,只好扫兴而归。新加坡的雨季还是挺可怕的,真的摸不透它的脾气。Spener让我拿了一对滑轮回家,有空的时候可以练练。他告诉我,他老婆是卖这个的60元一对,生意还不错。他以前跟三个儿子经常在大街上滑着这个招摇过市。我想那肯定是相当的神气啊,哈哈。

这是我拿回家的轮子。

2011年12月2日星期五

新工作

上班两个礼拜了,一直都懒得来写篇博客,一个原因是因为每天都太累了。另外也是因为没有心情。现在每天晚上都有点失眠,觉睡不好,白天工作还是得照样用力去做。真的是回到家就只想睡觉了。
这份新工作做得还算舒心。办公室环境不错,有厕所厨房,地毯,每天有清洁工大婶来做清洁,都很干净。我也有自己的格子间。刚刚老板给我配了新的电脑,Dell Inspiron的,i5。还有一个23寸的超薄显示屏,用的爽的没话说,呵呵。老板都对我很好,有什么困难都会帮我。当然他们都希望我尽早能有一些成果给出来,所以还没拿到工作准证的时候就让我开始给他们做了。这个月发钱多给我了1000,挺好的我觉得。比起之前的那家公司Openfeel,我真的舒心很多。
我现在有两个任务,一个是做一个facebook的page,在上面放一些我们的产品。这个跟做一个网页没太大区别,很简单。另外一个是用d3 javascript库来做一个图形化数据。这个是用来放在我们后端让商家用户知道顾客对我们产品的使用情况。这个花了我一个多礼拜的时间来做。主要就是研究d3这个库的用法,及设计跟我们所需数据相符的图形。我写了很多javascript,边写边学。我发现javascript是个很有意思的语言,可以无限扩展,json也是非常简单,方便和有用的一个数据结构。后来用python写一些script的时候,明显的觉得跟javascript有很多地方相似。用这些新奇的东西来自己design的时候,会感到非常兴奋。虽然我的工作看起来只能算是在打杂,但这是我职业生涯的开始,我很满意了。
另外我自己购置了一个共享的网络服务器并申请了一个域名zvaya.com。目前,只是在工作之前的那几天花时间写了个简单的博客,在zvaya.com/cp/ 功能还很不完善,但总算还有个看相。今后写的博客也会在blogger和zvaya这两个地方发布。其实我自己写博客的想法是觉得,blogger不能对逐个的文章进行权限控制,很不方便。如果我有什么不想发布的就只能把它放做draft。这个功能实现起来并不麻烦,于是就想自己写。cakephp写起来还挺快的,本身其实也有几个博客的范例,加以修改就可以很像样了。接下来有时间就准备加入文章权限功能,和网友评论了。
另外我配了副还挺贵的眼镜,单身的生活花起钱来很爽。

2011年10月27日星期四

Wrapper Objects & Object Reference

In JavaScript, primitive types behave like objects. They use dot expression to access certain methods. For example

var str = "abcd";
console.log(str.length); //4


But for object, every property is mutable. If we change the length to 10, it should be changed to 10. However, this is not the case.

str.length =10;
console.log(str.length); //4


This is because, primitive types don't actually have methods or properties. The access of those methods or properties invokes creation of their Wrapper Objects, which are String(), Numeric() and Boolean(). So when str.length is evaluated, something like this line is invoked.

var tmp_str = new String(str); return tmp_str.length; delete tmp_str;

After tmp_str is returned, it is destroyed. This is a wrapper object. It abstract the actual behaviours of primitive types, making it like a read-only object. Attempting to add/modify method or properties of primitive data types results in no effects. (because changes are only made to wrapper objects which are destroyed after access)

Another thing I learned about JS today is that, all objects in Javascript are "pass by reference". All primitive types are "pass by value".
Array are objects. so
var a=[1,2,3];
var b=a;
a[2]=0;
console.log(b); //[1,2,0]

So if there is a need to copy an independent object from another object, we have to write our own copy function.

function copyArr(a) {
    var b=[];
    for (var i=0;i<a.length;i++) {
        b[i] = a[i];        
    }
    return b;
}
var a=[1,2,3];
var b=copyArr(a);
a[2]=0;
console.log(a); //[1,2,0]
console.log(b); //[1,2,3]