Code

2010年12月21日星期二

Kent Ridge Park

今天又去跑Kent Ridge Park的路线了。还是太久没跑了,整个路程都感到好累。进入Park的时候有一个很长,很陡的坡。跑上去的时候感觉好像在只用双腿让自己垂直上升。跑完之后,小腿还疼了好长一会时间。还好全程都没有走,难受的时候也只是放缓速度,保持了我跑步时的一贯作风,哈哈。回来之后用google earth测量了一下全程大概6K吧,我花了将近40分钟跑。很显然这个太慢了,尽管中间有坡路。



最近在考虑要不要加入MR25。据说这个是新加坡最大的跑步爱好者协会。为了保证自己的声誉,他们对会员都要求非常严格。每个月基本上都会有一次长跑在麦里芝蓄水池,其中会有time trial,并将成绩等到网站上。看了一下,12月份的那次最快的5K跑了18分钟,最慢的也有23分钟,水平还是有点高的相对于普通的群众性组织。里面有一个elite squad,一共30个人。都是每年选上达标的人。只有elite squad里的人才能代表MR25参加公开的比赛。如果参加MR25的话,我肯定是想要进这个squad的。虽然有会费,但不是很贵,一年20块。不过我还是有点犹豫,主要是在想时间问题。因为每次比赛在麦里芝蓄水池,离NUS太远了。恩。。再犹豫几天吧。

2010年12月16日星期四

Seven signs you're a healthy man

Fitness
To test your fitness, you don't have to run for miles or do 200 push-ups.

Experts say that the average person should be able to walk a mile in 15 minutes, carry two bags of shopping to the car, and climb the stairs in a house without getting breathless.

But that doesn't take into account age or gender. More specifically, a 30-year-old man with above average strength and fitness should be able to do over 25 push-ups in a minute and over 35 squats.



Vital signs
As long as you have a watch and the ability to count, you can measure a couple of your vital signs from the comfort of your armchair.

A resting pulse of around 70 beats per minute and a respiratory rate of around 16-20 breaths per minute don't make you an athlete, but they do make you a normal, healthy adult.



Nails
Men don't pay much attention to their fingernails, but they can give vital clues to general health.

Yellow nails are suggestive of respiratory disease, spoon-like nails curving outwards can mean iron deficiency anaemia, and lines going across the nails may be a symptom of diabetes.

Go to the doctor if there's any major change in the look or feel of your fingernails. Firm, pink nails, on the other hand, can be evidence of a decent general level of health.



Toilet time
If you're about to have lunch, it might be wise to skip this bit till you've finished. In a word, we're talking stools, because stools can speak volumes about overall health.

It's not so much how often you pass them that's important (unless this suddenly changes) - once a day, three times a day, or even every other day can all be healthy depending on the individual - but consistency and colour.

A good stool is torpedo shaped, soft and easy to pass. Colour can depend on what you've eaten, but it shouldn't generally be grey, very pale, too dark or bright red. A mid-brown stool, passed easily and regularly without any sudden change in bowel habits is one sign of decent digestive health.



Urine
And to continue the theme, if you have pale yellow pee you're drinking enough fluids and - in the absence of other symptoms - probably don't have any urinary tract infections.

A good colour is also a sign that your liver is working efficiently. Don't worry if you drink a lot of water and you're urine turns almost clear - apart from the inconvenience of all those trips to the toilet, that's no problem.

A darker yellow probably just means you've been drinking less - drink more to avoid the symptoms of dehydration.
But dark or red-tinged urine - or pee with a sweet or strange odour - can be a symptom of health problems.



Shiny, healthy hair
A fine and luscious head of shiny hair not only looks good, it's also a sign that good things are happening in your body.

In particular, healthy hair can be a sign of a healthy diet. Dull, dry and brittle hair can be caused by a lack or protein, vitamin E or essential fatty acids. Hair so healthy women want to run their fingers through it may be evidence that you're absorbing plenty of body-friendly nutrients.



Tongue
Doctors can tell a lot from your tongue.

A tongue with a warm, pinkish colour is one clue that you are absorbing sufficient iron, folic acid and vitamin B12.
An overly pale and smooth tongue can be a sign of anaemia, while a yellowish tint can suggest fungal infection.

2010年11月1日星期一

浅谈 potentially visible set (PVS) in Quake

现在一般3D或者2.5D的地图都会有一种划分地图的方式,比如说魔兽地图是将地图划分成小的方块,雷神之锤的用立体的凸面体来划分。这样的做法是整个地图能够更好的被掌控,不然按照一个个多边形划分的话,不仅数量巨大难以掌控,更对电脑性能是一大挑战。

John Carmack在雷神之锤里使用二叉树(BSP)来分割空间。在中间节点里储存分割面,枝头储存空间信息,我们称它为Area。这样搜索地图里一个坐标的Area的位置就非常方便了,只要从树根出发,确定坐标在分割面的那一边,然后到那一边的节点做相同的对比,直到枝头就可以了。自然而然的,Area的连接信息也可以很容易的得到。先找到Area的分割面的节点,然后再找到面的另一边Area。当然这些都是比较费时间的,所以只能在线下处理。而且这些信息都是静止的,所以得到的数据都是不会因为游戏的进行而改变的。

那么计算这些东西有什么用呢?答案是Potential Visible Set,潜在可视集合。这是一个非常有用的东西。它的具体原理很简单,就是为每一个Area计算其他每一个Area的可见度。所以当视角在一个Area的的时候,我们就可以知道周围哪些Area是看得见的了。但这里所谓的PVS是脱离视角的,它只跟Area有关。所以,一个玩家周围360度的Area都可以是在PVS里面。这个东西配合view frustum culling, back surface culling, 和 z-filling/buffering就有完美的quake engine。当年John Carmack绞尽脑汁才想到用这种方法预先计算需要渲染的图像,以达到游戏可运行的帧数。

计算PVS还需要知道Area的虚切面,也就是Area的一个并不存在于多边形集合里的切面。我们叫它Portal。Portal是从一个Area到另一个Area的必经之路,所以要计算从一个Area能不能看到另一Area就要检查它们之间有没有一条直线经过的面都是Portal。 这是我们还需要一个Adjacency Graph 来方便的得到连续的Portal。

然后我们可以用Depth First Search来进行Stabbing Line Checking。这个在3D里面是一个比较难的问题。 就像上面那个图,在三维空间里给你一连串的多边形,你需要判断是否有一天直线贯穿所有多边形。这个问题据说要用pluker coordinates来解决,但现在我还无法理解,等我理解了在写一篇解释一下吧。

一旦这个问题解决了,PVS就可以得到了。由于Area的数量比较多,PVS是Area数量的平方,所以必须compress 才能在游戏中使用。这里John Carmack用的是bit来表示可见度,然后使用run-length encoding。本来20多兆的数据,只剩下20多K。

在Seth Teller 92年的论文里有更详尽的解释,事实上他的algorithm精确到一个像素,所以不会有像素覆盖的现象。

除了在图像渲染方面的应用之外,PVS也可以用做手机游戏能量节省的算法。他的精确度相当高,所以,在一个密度不是很大的游戏里面,玩家有50%以上的时间是可以关闭网卡的。

2010年10月27日星期三

最后的温柔

歌词:
曲:陈小霞 词:李子恒
选自《爱我的 我爱的王杰》专辑
Made By Viking
———————————
最后这一个冬季
就该收拾热情的过去
不要再缱绻北风里
冰冷的双手
也是最后的温柔
啊 你可知否
最后这一个冬季
就是我们感情的年底
不要再留恋过去
哀怨的双眸
也是最后的温柔
只是我不能再接受
不要再编织借口
就让我潇洒的走
虽然你的眼神说明了你依然爱我
这是最后的温柔
(MUSIC)

惦记这一些

王杰:惦记这一些
词/曲:王文清
是否该结束
还是会再继续
把一切都写在胸口
静静地走过
在什么时候
能够再有一些关怀
让我升起心中的太阳
一切都更美好

不要说
别说那角落太孤寂
虽没有你的梦
也会有我的歌

不要说
别说那过过去太拥挤
那很久很久的事
我会
惦记这一些

2010年10月18日星期一

Life is your best teacher!

如题
现在的生活真的是一切都靠自己,我觉得独立是我最自豪的能力,而生活是我最好的老师。

最近太忙,忙着学fuzzy logic, neural network quake's AI。。 发现我真的该好好学习一下quake3 engine。忙着想3D模型该怎么做,maya怎么那么难用。。唉,今天还算有点progress,不错不错。。还忙着陪我的小猫玩,之前她太忙一直都没见面,周末我们就好好补补:)

12月假期准备去penang玩,现在订机票。

2010年9月30日星期四

跟自己加点动力

周鸿祎 from 奇虎360
创业其实是一种精神,是一种心态。创业有很多种形式,不是只有自己办公司、自己当老板才叫做创业。当你的人生还处于起步阶段,你还不具备足够的经验和能力,就需要给人当学徒,需要学习和积累,其实这个过程也是创业。

2010年9月25日星期六

有关自己写常用的数据类型

这两天为了一个vsc++ priority queue 的bug浪费了不少时间。我的pqueue是用来储存struct的pointers。我用下面这种方法创建:

priority_queue<CellNode*, vector<CellNode*>, M_compare> openq;
M_compare也是用常规方法写的,跟官网上完全一样的格式。但我run程序的时候总是给我invalid heap的错误。网上搜一下后好象是说queue里的东西没有initialize或者是queue里的container access invalid address。然后我用vs debugger trace stack,发现在call了好几次我的comparator之后comparator的parameter会变成一个很大的负数,我觉得非常奇怪。看ms debugger源码里的那些程序感觉也不是很对,就很是抓狂。

最后觉悟了,我要的无非是一个简单的priority queue,我不需要很有效率的检索,因为我的数据集不是很大,完全没有必要用heap这么复杂的structure来实现。我也不需要通用,因为就只有我一个人用。 然后我就花10分钟写了一个很简单的pqueue。我用list来做container因为他的insert和remove比较快。在pop()里面我就用了一个linear search来找我的head,这样的complexity也就只有O(n)而已。push()和empty()也就是list自己的push_back和empty。额,感觉这个太简单了。用了一下,run without any error!

用vsc++里面的data structure,好处是不用自己写。但是出问题了是很难debug的。所以今后小的data structure可以先考虑自己写,也许节省的就不只两天的时间了。

2010年9月23日星期四

搬入PGP 新生活的开始

没想到大四的我阴差阳错的有搬回PGP了。在外面住久了才知道原来住PGP是一件这么美好的事情。有自己的个人空间,安静,有好吃的饭菜,早上有早餐吃,凌晨都还有的super snack,最爽的是这边的network刚刚升级,网速比以前快多了,特别是上些国内的网站(可能是因为这里proxy用的中国人比较多)。这些比起我在clementi住的那栋2加1的爽多了。唉。。现在还挺感慨的。想起我大一住PGP block 4的时候,那时还满怀着刚进大学的兴奋感,如今快要毕业的我整天想着今后要做的事业,想着怎么样才能够让自己变得真正的强。感觉,四年来我还是有所成长的吧。现在又回到了PGP,一定要珍惜这个机会,踏实学习,专注自己的梦想。

2010年9月17日星期五

转载: EA看好Android手机游戏市场 增加投入


美国艺电公司(Electronic Arts)的首席财务官埃里克·布朗(Eric Brown)表示公司正在定位其手机业务,未来的几年,在Android操作系统方面的业务将会有所增加。

在德意志银行2010年科技大会上,布朗引用了一份来自IDC的报告,在2014年,相比苹果设备的11%,Android将会有25%的市场占有率。布朗指出:“所以未来我看好Android,我们正在利用这个趋势定位我们的手机业务。”

同时布朗表示对EA目前的智能手机游戏业务每年2-2.25亿美元的收入比较满意,其中主要以销售iPhone游戏为主,但是苹果在市场上的主导地位不会永远持续下去。[来源:GameRes.com]他认为下一个能推动手机领域增长的大浪潮是Android操作系统,所以在德意志银行2010年科技大会上,布朗明确表示从长期考虑,Android将逐渐占取市场份额。

Android操作系统已经有一个应用程序商店,但是布朗希望未来谷歌能够增加其它功能,另外,其他供应商,比如美国一家电信公司Verizon正在开发他们自己的Android应用程序商店。

布朗指出,从上个季度的智能手机硬件销量来看,带有Android操作系统的设备销量首次超过iPhone,证明了未来的趋势,尽管EA的游戏销售还没有反映出这个趋势。

在移动手机市场,从移动电话慢慢转化到智能手机如iPhone和Android就像以前从PS2到PS3的过渡一样。

在最赚钱的iPhone和iPad应用程序榜单中,EA游戏最近频繁出现,例如《老虎伍兹》、《极品飞车》、《FIFA》、《疯狂橄榄球》、《俄罗斯方块》、《大富翁》等,显示出强劲的业绩。

最近游戏开发商id和ngmoco都在招聘Android程序开发人员,看来不是只有EA看好这个新兴的操作系统,Epic在把虚幻3引擎技术带入苹果后,获得了超过100万的下载量,也正在考虑把它带入Android操作系统。

Current Android Phones on Market

2010年9月11日星期六

About Epsilon

前几天去cs4213的lab,做了一个dotproduct的问题,然后跟cosine对比结果。我当时用了"==",对比结果老是不对然后问TA。他说要用epsilon,我不知道是什么,问了好几遍什么是epsilon。最后TA懒得跟我解释就说,你不能这样直接比较,会有error,然后我就用">"比较,最后终于弄对了。

今天突然想起那天他说的epsilon,然后查了一下。原来这是一个学computing都应该知道的东西(汗~~)。这个跟floating point 的precision有关系,下面是从msdn上摘下来的:

Output
The difference between 1 and the smallest value greater than 1
 for float objects is: 1.19209e-007
The difference between 1 and the smallest value greater than 1
 for double objects is: 2.22045e-016
The difference between 1 and the smallest value greater than 1
 for long double objects is: 2.22045e-016

这是machine representation for floating number的局限性。又查了一下,比如说0.1011用十进制是 1/2 + 1/8 + 1/16也就是0.6875。机器能够精确表示的浮点数只有像0.5, 0.25, 0.75, 0.625...和他们的linear combination。这样float是32位,double是64位,long double是128位,他们能表示的最小数就不一样了。

所以在比较浮点数的时候要计算误差,这个误差就叫做epsilon。误差在一定的范围内了,就可以看作是相等了。

从上面可以看出来,float type的误差是在0.0000001和0.0000002之间的。所以epsilon应该是大于0.0000001的,不然就有可能永远无法接近正确值。    这个也是从网上找来的:

#define EPSILON 0.0001  // Define your own tolerance
#define FLOAT_EQ(x,v) (((v - EPSILON) < x) && (x <( v + EPSILON)))
int main()
{
  float a = 2.501f;
  a *= 1.5134f;
  if (FLOAT_EQ(a, 3.7850)) cout << "Expected value" << endl;
  else cout << "Unexpected value" << endl;
}

总结就是,今后做floating point comparison要用epsilon。

2010年9月9日星期四

static variables

今天花了一天的时间教自己了static variable

  1. static variable 自动 initialize to NULL(0)
  2. static variable can pointer to a constant or variable. When pointing to a variable, that variable must be static. Same rule applies to that variable.
  3. when return a value to a static variable from a function or method, the return value should be assigned to a static variable in that function.
  4. VC++ won't tell you your static variable contains rubbish, when it points to a non-static variable.


很简单的一个问题,弄了我一天。这个在eclipse 里面用java写都会有错误提示。

2010年9月8日星期三

王杰新加坡演唱会


跟小猫一起买了10月23号王杰演唱会的票,虽然票价有点贵,但花了这个钱心中还是小有点兴奋与期待的。

据报道,王杰承诺会唱这么几首老歌:《一场游戏一场梦》、《忘了你,忘了我》、《是否我真的一无所有》、《为了爱,梦一生》、《你是我胸口永远的痛》、《谁明浪子心》、《安妮》。这些都是我来新加坡后买的那一套两盘专辑里面的歌,在RI两年我经常听那些老歌,它们每首都充满了一种沧桑感,很朴实,很喜欢。现在有一张不小心弄掉了,剩下另一张我刻在了电脑里。

要是王杰也会唱《回家》就好了,这首我经常唱歌小猫听,她现场听到原唱一定会很高兴的。很期待到时跟着王杰一起哼唱这首歌。我总是在想,我们这些在外漂泊的人其实很可怜,平时不会觉得,唱起这首歌的时候就会觉得。我们还是挺希望有一个安稳的家的。但我是吃得了苦的人,爱听王杰的歌,是因为他的经历比我更苦,他的声音可以让我得到心灵的呼应,在生活中更坚强。小猫也应该多听王杰的歌,呵呵。

我会一直喜欢他的歌,他现在应该才50岁左右,还有很多年可以唱。加油王杰,加油小猫。

有关**ptr的问题

今天恍然大悟,发现昨天想到有关pass **pointer的问题是错误的。

在function 的参数里面我们一般都是pass *ptr,这样比较安全,为什么呢?因为这样只是pass最初那个pointer的value,所以function里可以自己在做一个pointer 然后assign到这个value,然后就可以用了。原来那个pointer很safe,没有被更改,也无法被access到。

然后有一种情况我们需要access原来的pointer,比如要destroy一个queue,这时候需要free所有的指向queue的pointer,这时候就要用两个** pass pointer的address到destroy function里了。这样,原pointer就被完全操纵了。如果不是destroy action,这样pass pointer是非常危险的。如果你改变了它的位子,你就有可能找不到源数据的起始位子了。

昨天我还以为两个**会比较安全,甚至认为c++里面的reference variable也是这样implemment的。今早仔细一想,原来这是不对的。

最近好多deadline,有点stressed了。

2010年9月1日星期三

“狗日的”腾讯 搅局者还是终结者?

“有什么业务是腾讯不做的吗?”美团网CEO王兴的语气中难掩郁闷。

7月9日,腾讯QQ团购网上线,这让王兴如闻惊雷,也如坐针毡。从2003年回国到现在,王兴先后创办了校内、海内、饭否和美团4个网站,而美团网被他视为“最靠谱”的一次创业。3月初上线的美团网是国内第一家团购网站,创立仅仅4个月,美团网已经能够盈亏平衡。

就在这时候,一直悄无声息的腾讯杀了进来,这让王兴完全猝不及防,也让处于草创时期的数百家团购网站倒吸了一口凉气。

谁也不知道,这一次,这个“企鹅仔”将是搅局者、掠食者,还是终结者。

“狗日的”腾讯
别上腾讯盯上其实,王兴应该早就想到会有这么一天。因为在中国互联网发展历史上,腾讯几乎没有缺席过任何一场互联网盛宴。它总是在一开始就亦步亦趋地跟随、然后细致地模仿,然后决绝地超越。比如当初的游戏。

“从QQ游戏平台上线那天起,联众的失败就已经注定了。”多年以后,在北京知春路的一家咖啡馆,联众创始人鲍岳桥谈起当年腾讯对联众的围剿和逼迫,仍然耿耿于怀。在两个小时的采访中,他连续抽了两包烟。

联众是中国最早做游戏平台的公司,一度占有在线棋牌游戏市场85%以上的市场份额,在新浪、搜狐等门户网站亏损缠身的时候,联众是最早实现赢利的中国互联网企业,一时风光无两。

2003年8月,腾讯QQ游戏第[来源:GameRes.com]一个公开测试版本正式发布。鲍岳桥发现,从平台到游戏设计,QQ游戏完全是联众游戏的翻版。愤怒之余,“感到危险很大”的鲍岳桥首先想到的是“主动低头”寻求合作,于是他赶赴深圳,约见马化腾和时任腾讯公司首席运营官的曾李青,但是遭到了腾讯方面的拒绝。

“现在想来,那时候是太天真了。”鲍岳桥说,“与大型网游不同,棋牌类游戏规则固定,没有技术门槛,玩家又与QQ用户高度重合,腾讯很容易模仿。”

2004年9月,QQ游戏平台将联众赶下了中国第一休闲游戏门户的宝座。而在此之后,联众的业绩一路下滑,出售、转型,经历了一系列风波后,联众在中国网络游戏市场份额已不足1%。

腾讯则扶摇直上,在今年一季度,QQ游戏同时在线人数达到了680万。而更重要的是,依托QQ游戏平台,腾讯终于在2009年第二季度超越盛大,坐上了中国网络游戏领域的头把交椅。

对鲍岳桥来说,腾讯就是自己的终结者。2006年底,鲍岳桥离开了江河日下的联众,成为了一名天使投资人。他告诉记者,现在他做投资的原则之一就是:只做腾讯不会做、不能做的项目。所以三年来,他绝对不碰游戏,已经投资的医疗器械和数据存储项目都跟腾讯毫无关联。
而这个终结者又有了新的目标,那就是“站长之王”蔡文胜的4399小游戏平台。

“说不担心QQ竞争那是骗人的。”蔡文胜在微博上表达了自己的忧虑,直接原因就是今年7月初,腾讯旗下小游戏平台3366.com上线公测。
据记者调查,去年蔡文胜买下的4399小游戏平台,通过广告联盟和联合运营网页游戏,月营收已达3000~5000万元,正在筹备国内A股上市。而腾讯刚刚上线的3366,在游戏种类和网站设计上与4399几无二致。

而且这只“企鹅仔”似乎更加来势汹汹。从7月1日开始,不断有网友看到QQ弹窗对这一游戏平台的推广信息,而截止记者发稿时,3366.com同时在线人数已突破10万。

只要是一个领域前景看好,腾讯就肯定会伺机充当掠食者。除了王兴和蔡文胜,腾讯最近还“默默地”动了另外一个人的奶酪,他就是奇虎360董事长周鸿祎。

5 月31日,杀毒领域两大巨头360与金山的一场口水战激战正酣,腾讯的QQ医生3.3升级版却悄然上线。很快人们就发现,这款原本只是用来查杀QQ盗号木马的防护软件,已经了包含云查杀木马、系统漏洞修补、实时防护、清理插件等多项安全防护功能,甚至还搭载了免费半年的诺顿杀毒。

此前,周鸿祎曾在多个公开场合对腾讯创始人马化腾在产品上的功力赞不绝口,同时还声称,腾讯绝不会成为360的竞争对手,因为“腾讯是一个娱乐公司,在安全方面,应该由一个很专业的公司更专注地去解决问题”。

很显然,马化腾毫不客气地给了周鸿祎当头一棒。

在腾讯还没有出手的互联网领域,小企鹅那些潜在的竞争对手们仍是战战兢兢,如履薄冰。比如暴风影音CEO冯鑫。自从2008年9月腾讯发布了本地播放软件 QQ影音首个Beta版本,冯鑫恐怕就没睡过一天好觉。因为这款无广告、无插件播放软件,让暴风影音的盈利模式变得岌岌可危。

而在各大视频网站因为版权打得不可开交,频频对簿公堂之时,同样有一种声音在业内流传:无论你们现在打得多欢实,等市场培育得差不多了,就该轮到腾讯来收场了。事实确实如此,QQLive的平台早就搭好了,拼版权,中国的互联网公司谁敢说自己比腾讯更有钱?

这就是腾讯,中国第一、全球第三大互联网公司,一家全球罕见的互联网全业务公司,即时通讯、门户、游戏、电子商务、搜索等等无所不做。它总是默默地布局、悄无声息地出现在你的背后;它总是在最恰当的时候出来搅局,让同业者心神不定。而一旦时机成熟,它就会毫不留情地划走自己的那块蛋糕,有时它甚至会成为终结者,霸占整个市场。

“某网站贪得无厌,没有它不染指的领域,没有它不想做的产品,这样下去物极必反,与全网为敌,必将死无葬身之地。”6月29日,新浪网总编陈彤以“老沉”为名发布了一则微博,言辞之激烈,让人震惊。这条微博迅速被转发了500多次,无数的人力挺“老沉”。

谈起此事,一位互联网创业者几乎是脱口而出,“狗日的腾讯!”


始终“贪得无厌” “既没有马云那么好的口才,也没有李彦宏那么帅。”马化腾曾经多次自嘲,说自己“很不幸”,“大家都是圈地,他们(马云、李彦宏)圈的都是楼,可以直接住。我们圈到的却是荒地,只能从铲沙、挖土开始,建自己的楼。”

实际上,马化腾算不上纯粹的“草根创业”。据传,在腾讯创立初期,其父马陈术曾开着奔驰前来给儿子做账。在11年的发展历史上,腾讯只是在早期遭遇过资金困局,从获得第一笔融资开始就一直是稳扎稳打,先利用无线增值服务实现盈利,转而依靠互联网增值服务壮大,布局网络游戏和门户业务。2010年最新一季财报显示,腾讯的网络广告业务收入为2990万美元,已经远远超过网易的1340万美元,稳居门户第三。

马化腾在业界以低调、务实著称,这在一定程度上决定了腾讯的企业风格:其疾如风,其徐如林,侵掠如火,不动如山。

2006 年7月,QQ同时在线突破2000万人,腾讯公司内部决定办一个庆功会,会上腾讯联席CTO熊明华问了马化腾一个问题:QQ同时在线人数何时能够到1亿?马化腾一笑:“这辈子我可能看不到了。”事实上,2010年3月5日,他就看到了。熊明华一定很后悔,没有和马化腾打赌“裸奔”。

实际上,马化腾有很多值得“裸奔式”庆祝的理由。目前,腾讯是中国最赚钱的互联网公司,公司现金储备达到15亿美元;拥有中国本土用户量最大的即时通讯软件,账户数近10亿;是中国第一流量的门户;在网络游戏市场排名第一,占据超过20%以上的市场份额;电子邮箱流量也已经超过网易,雄踞榜首。

资本市场对这只彪悍的企鹅也是极力追捧。在香港,腾讯的股价一度高达每股171.80港元,上市6年间腾讯股价上涨了超过了35倍。要知道,被世界公认为近年来最具创新能力的苹果,其股价增幅才只有腾讯的一半。


腾讯为什么还不满足?一只企鹅为何如此贪婪?

是的, “腾讯不是一般的有钱”,但股东的钱不是用来供着的,腾讯必须不断寻找新的利润增长点。蔡文胜就曾表示,腾讯现在什么都想做,从中可以看出它面对快速增长的巨大压力,这个压力终有一天会压垮腾讯。

在美团网创始人王兴看来,腾讯之所以染指团购,是因为这模式已经被证明“能赚钱”。“做团购没有技术门槛,盈利模式又清晰,腾讯没有理由不做。”王兴指出,团购与他之前创办的校内和饭否最大的不同在于,“网站从上线第一天开始就有收入”。——如此唾手可得的生意,腾讯怎么可能放过?

搜索也将是腾讯的下一个目标。今年3月,马化腾与李彦宏在深圳有过一场对话。李彦宏问马化腾,“腾讯凭什么做搜索?”马化腾给出了两点理由:一是用户需要,腾讯这个一站式互联网服务平台中的很多环节都需要搜索功能;二是搜索能赚钱,腾讯拥有全球最大互联网社交网络系统,社区的盈利模式中,除了个人收费以外,未来还要结合页面内容分析,匹配相关性的广告。因此,已有业内人士指出,而在这一类似于Google的AdWords模式的探索过程中,腾讯未来必将对百度正在培育的广告联盟形成威胁。

也许,在马化腾看来,无论是搜索,还是团购,甚至是将来的视频,这些业务都是腾讯水到渠成的业务延伸。因为马化腾为腾讯未来的构想是,一站式互联网服务提供商。——围绕腾讯QQ打造“在线生活社区”,也就是“用户要什么,腾讯就有什么”。百度董事局主席兼CEO李彦宏对腾讯所谓的“在线生活”、“一站式服务”的评价是:基本上就是不给别人任何空间。

在CSDN总裁蒋涛看来,腾讯之所以什么都做,是因为它是一家以人(用户)为中心的企业,同类型的企业还有软件巨头微软,两家公司的产品战略更是惊人的相似。

长期以来,以操作系统为核心的微软也是个典型的“全民公敌”。为了“抓住”用户,微软每个阶段都会根据市场变化,布局新的应用,以巩固其用户终端的垄断地位。在个人消费领域上,微软先后推出了浏览器IE、邮件系统Hotmail、即时通讯MSN、邮件客户端outlook、免费杀毒软件MSE,以及今年5 月刚刚发布的在线版Office软件。

而从另一方面讲,腾讯的进攻也是一种防御。互联网产业往往形势突变,Google市值超越雅虎,Facebook流量超越Google都发生在旦夕之间。腾讯最怕的就是突然冒出一个企业,被一种意想不到的商业模式或竞争策略打败。所以腾讯对于任何一个互联网的新应用都不敢掉以轻心。

“360安全卫士、暴风影音的装机量都已经上亿了,如果周鸿祎或者冯鑫有一天跟新浪合作,也推新闻弹出框,马化腾不就郁闷了?”蒋涛认为,腾讯的产品策略之一就是:所有的互联网应用,只要用户量到了一定级别,腾讯一定要有,别人的产品可以暂时比腾讯做得好,但腾讯绝不会让它不可替代。

当被问及腾讯的核心竞争力时,腾讯CTO熊明华给记者的答案不是超过10亿的QQ的注册用户,也不是某一项产品、技术方面优势,而是“耐心”:懂得在合适的时间推出合适的产品。”
因此,究竟腾讯还会做什么,没有人知道。


腾讯从来不做第一个吃螃蟹的人,却总能在成熟的市场中找到空间,横插一杠子。然而它选择的路径也使其饱受争议,那就是模仿,有时甚至是肆无忌惮地“山寨”。

早在2006年,新浪网创始人王志东就公开指责马化腾是业内有名的“抄袭大王”,而且是明目张胆地抄袭。几年以来,类似的声音一直不绝于耳。直到最近,DCCI互联网数据中心主任胡延平还在质疑腾讯的创新能力,说它不仅不是卓越创新者,反倒是中小互联网企业的“创新天敌”。

从模仿 ICQ推出自己的第一款产品OICQ(腾讯QQ的前身)开始,腾讯似乎就埋下了自己的“模仿基因”——先是从韩国引入了QQ秀和其他一系列增值服务,又模仿新浪建起了门户网站;在网游领域,学联众开发平台,跟着盛大引进国外网友,随着网易自主研发,之后布局的C2C电子商务网站拍拍,以及第三方支付财付通,无一不是“山寨货”,这也是腾讯遭人恨的根本原因。

“微博、杀毒、电子商务到今天的团购,这些领域的商业模式在那儿摆着,人人都在抄,你凭什么要求腾讯高抬贵手,不去挣这个钱了?”互联网资深人士谢文在接受记者采访时表示,业界这种对腾讯的埋怨,就像“小孩儿撒娇”,是五十步笑一百步。

对于模仿的指责,马化腾的回应是:模仿是最稳妥的创新。

“创新可以分为三个层次:技术创新、产品创新和应用创新,产品和应用层面的创新比较容易被人忽略。”一位资深互联网产品经理告诉记者,几乎腾讯的每款产品都能找出市场上其他同类产品所没有的优点,如腾讯QQ的群和显示最近联系人功能,QQ邮箱的超大附件功能,QQ游戏平台一上线就号称能承载上千万的同时在线,QQ还解决了困扰很多IM产品的联通、电信的互联互通问题等等。

事实上,腾讯获得突破的领域往往得益于应用层面的创新,腾讯总是能够通过QQ用户行为习惯的把握,将新产品与腾讯QQ这一核心进行结合,使其用户的优势得到发挥。同为技术出身,奇虎360董事长周鸿祎坦言如果同是做即时通讯,自己在产品细节和技术上能够比马化腾做得好,但很难比QQ成功。因为马化腾是把互联网产品当成服务来做,其成功在于“打动人心”。

CSDN总裁蒋涛在接受本报记者采访时也表示,虽然从商业竞争的角度,腾讯通过复制别人的商业模式进行无限扩张,是无可厚非的,但在客观上必然会扼杀一些创新的好苗头。这也和胡延平的观点一致,从某种程度上说,腾讯是互联网创新者的杀手。

腾讯的麻烦四面制造麻烦的腾讯并非每次都能凯旋而归,甚至给自己惹上了不少麻烦。2009年6月,搜狐就因为输入法将腾讯告上法庭,称腾讯侵犯了其旗下搜狗拼音输入法的软件自主知识产权,并且利用QQ拼音输入法破坏搜狗拼音输入法服务,对搜狗实施不正当竞争,因此请求法院判令腾讯停止不正当竞争行为,并索赔 2000万元。

能够让同为互联网巨头的搜狐撕下脸面,腾讯“与全网为敌”所招致的民愤可见一斑。

不过,身为山寨之王的腾讯也在遭遇“被山寨”。2005年成立的51.com,几乎腾讯每推出一个新的功能与应用,它都会加以“学习”、“消化”,并迅速在自己的平台上开发出来。如目前在51.com平台上的“51商城”、“51群组”、“51秀”、“51问问”,它甚至曾经开发出彩虹QQ,免费提供IP地址探测、显示隐身好友等腾讯QQ的“增值”功能。


“能不能给大家一点建议,怎样才能抗衡腾讯呢?”在2009年游戏产业年会的高峰对话环节,当主持人抛给腾讯游戏总裁任宇昕这样一个问题时,除了任宇昕自己一脸骄傲,举坐皆苦笑。这位中国最大互联网公司的游戏业务负责人也不谦虚: 只有跟腾讯合作,共同把市场一同做大。

在外界看来,腾讯庞大的身躯,依然潜伏着诸多暗流。实际上,因为腾讯在互联网界“无耻模仿抄袭”的恶名,使得腾讯全线树敌,成为众矢之的。当越来越多的互联网企业开始时时提防着腾讯的时候,腾讯将不再像以前那样收放自如。比如,为应对腾讯的搜索,百度就将搜索的提成比例从10%提升到15%。

而且,腾讯还算不上真正强大。互联网资深人士谢文则表示,腾讯的模仿充其量只能让保持强大的现状,却不能使其引领潮流,真正走向伟大。“事实上,如果腾讯一味模仿下去,随着平台上的服务越来越多,单个服务的效率会大幅降低。”谢文表示,“而且,如果腾讯只是针对现有的QQ用户群体开发应用,未来QQ用户的人口特性将被固定在年轻群体的娱乐需求上,随着网民年龄结构的变化,腾讯就会被最终边缘化,而开心网、人人网及新浪微博的崛起已经为腾讯的迟钝敲下了警钟。”

在很多人眼中,腾讯是最近接近Google的一家本土互联网公司。因为虽然Google目前的主要盈利点还是围绕其搜索产品的 AdSense和AdWords,但它也是邮箱、地图、音乐无所不做,腾讯也是如此,虽然号称全民公敌,但它的主要收入仍然来自IM和网络游戏所带来的互联网增值服务。

但谢文却指出这只是表面现象:“腾讯和Google完全不在一个档次上”。他指出,Gmail、Google地图、 Google Earth等产品虽然不赚钱,但是它们之所以被开发都是围绕着一个核心理念:就信息整合与信息呈现。相比之下,腾讯的产品则显得杂乱无章,IM、网游、电子商务与门户业务之间并不必然的关联,其他公司单独做也能成功。据此,谢文认为,腾讯只是利用先发优势抓住了一大批用户,产品研发都是针对用户市场展开,追求短期效益,而对自己的未来缺乏清晰地规划。

“建立在用户群上的腾讯是不牢靠的。”蒋涛认为,一旦未来人们更喜欢用Facebook和Twitter这样的工具彼此联络,不再以IM为中心,腾讯的“大本营”就被攻克了,这意味其虚拟货币系统必将被超越,而网游、门户这些现有盈利点也不能保证一直有市场竞争力。

“如果人们未来都不再依赖PC,改用Ipad和手机的话,微软无疑就完蛋了”蒋涛说。微软的今天可能就是腾讯的明天,IT产业往往形势突变,用户习惯的变化又是在旦夕之间,看看facebook和google所带来的一场场变革,腾讯当以微软和雅虎为戒。

原文地址:http://bbs.ce.cn/forum/viewthread.php?tid=2087&page=1&extra=page%3D1

我觉得,腾讯的做法就是唯利是图。并没有把发展中国互联网作为自己的责任。在中国,腾讯相当实施垄断,这是政府保护政策的结果。没有外国企业进入中国,就没有人能够跟腾讯抗衡。要知道,腾讯有钱也有用户群,做什么都很容易。另一个,我对腾讯扼杀创新的说法非常赞同,腾讯是中国进步的绊脚石。

update

上个礼拜我就觉得cs4213的tutorial有点废。lecturer没有准备跑来给我们上tutorial,先是问了一下essay的上交情况,告诉我们要按时交作业,然后就跟我们聊天问问我们平时玩什么游戏。最后没什么话好说了就放我们走了,整个过程不到20分钟。今天又是他的tutorial,这次他随便挑了一个人让他present上次作业的内容,然后问了他一大堆问题,讨论了一下游戏对人们的影响等等很废的问题。我本以为这门课是介绍游戏引擎,会很有意思,结果tutorial布置的作业都是些essay... wtf lab呢,上个礼拜本来有的,结果因为我们的group人太少,要重新分配而cancel掉了。lecture上讲的虽说是一些跟games有关的东西,但感觉有些乱,有时候讲一些history的东西,有时候讲一些很deep的数学公式。节奏奇快,感觉相当不适应。唉,强烈这个lecturer不适合叫game development这么有意思的module。

话又说回来,最近发现了一个很好的论坛www.gameres.com。它是国内最大的游戏开发者论坛,里面有很多从事游戏行业的人,而且不乏相当有热情抱负的游戏制作者。在里面应该可以学到不少东西。

我的FYP的挖掘阶段差不多结束了,完整的algorithm差不多设计完成了。我也已经开始写我的skeleton code了。 我的algorithm需要用到c queue structure,在想我要不要自己implement一个,应该不难。之前用vs2008感觉挺好的,除了界面有点boring。不过前几天跟小猫改作业的时候装了vs2010,发现vs2010还是挺好用的。于是用2010compile了一下ioquake的code。花了我两个小时configure终于成功compile(之前我一直以为不能用2010compile,其实没有什么是不可能的只是不会configure罢了)。2010的static debugger对于我来说非常好用,而且还有auto-complete功能。auto-complete就是像要include一个header的时候,打一个字母它就会把所有以这个字母开头的file list出来。这些功能在2008中都是没有的。感觉vs越来越像eclipse了。

另外,maya的documentation装好了,里面的东西是相当的齐全。对我最有用的是mel to python API。这么课学mel又学python,真是一举两得,呵呵。

2010年8月26日星期四

start learning Maya scripting

花了一下午时间convert MEL to Python...好像没有很好的documentation,有些东西需要看别人写的source code才知道。。很花时间的一门课。。

2010年8月21日星期六

Clementi -- Jurong run 1 hour / 10K route

Today I explored a new running route as shown below. The road along west coast garden has very little traffic during night hours. I ran on the vehicle track most of the time. There is also no pedestrian track on the AYE, so I have to ran on the expressway.. The speed was fast due to the down-slope.The total journey cost me 56'25 mins. A quite well-done timing for 9.88K. Congrats!


在较大的地图中查看clementi 1-hour route

2010年8月20日星期五

不玩HoN了

玩了这么久的HoN感觉这类游戏非常不适合单个玩家玩。跟dota一样,HoN强调的是团队配合。一个人在没有朋友的情况下很少可以碰到愿意跟自己配合,而且水平又适当的人,所以很多情况下都是孤军奋战。最后输赢跟水平没太大关系,只要分的团队好赢的几率就很大。我有时候就可以连赢好多盘然后又连输好多盘。

其次HoN的积分系统很容易让人上瘾。我玩的时候会下意识的给自己制定一个目标,达到多少多少分。玩玩为了达到这个分数,我需要花上3,4个小时在这个游戏上,而且是不能被打断的小时。这样会让我感到很累,而且也很浪费时间。更重要的是,往往打了几盘之后,感觉自己就盲目了。随便选英雄,随便玩。纯粹是一种茫然的状态。游戏本身并不重要,重要的是我已经可以忘掉所有事情了。说不上这是种什么好的感觉。可能赢了,或者玩到三杀四杀的时候会有点快感,但输时,被别人骂noob, idiot的时候,那种感觉是很不好的。所以,最后我决定把HoN从电脑里删除掉,再不玩这个可恶的游戏了。

不玩HoN我还有很多选择,但总的来说我会prefer单机游戏,或者一些turn based然后一局又不会很长的网络游戏。这样可以一边游戏,一边处理一些另外的事情。

2010年7月24日星期六

urban terror

今天玩了一天的urban terror,颓废了一天。为了在小猫面前掩饰我的心虚,我把玩这个游戏跟FYP扯上关系,美其名曰熟悉游戏。。。
其实这个用quake 3引擎作成的仿CS游戏玩起来还是很不一样的。它加入了很多CS里没有的元素,比如说power slide,体力值,救治等等。这些都是游戏的节奏上有很多不同。刚开始玩的时候还很不适应,感觉怎么敌人速度那么快,自己队友也在天上跳来跳去的,追都追不上。自己当然也是经常拖后腿,K/D 比率低之又低。。今天之所以玩了一整天是因为发现了power slide原来是这么让人上瘾。在掌握了技巧之后,我也可以在屋顶上飞来飞去。边飞还可以边杀人。这个的确非常过瘾。不过,这种游戏如果小猫来玩肯定没完一下就晕了。。恩,节奏很快的一个游戏。
当然,这个游戏跟FYP还是有点关系的。它跟我所研究的ioquake的code base是一样的。所以说游戏里的很多machanism 都在ioquake里可以实现。除了这个之外,对于我找游戏省电的idea也有点帮助。至于有什么帮助,现在还没想出来。
现在脑袋里只有一阵阵枪声。。

2010年7月19日星期一

Bitwise Operation

今天看了一下 bitwise operation的用法与用处,在这里总结一下。

主要语法有四种 &,|,^ 和 <<(>>)
所谓bitwise也就是他们提供给他们的数字都是转化成2进制来计算的。
and(&)
x AND 0 = 0
x AND 1 = x
用法:x = x & 0x5
or(|)
x OR 0 = x
x OR 1 = 1
用法:x = x | 0x5
xor(^)
x XOR 0 = x
x XOR 1 = ~x
shift(<< or >>)
也就是把2进制的往左或者右移动一定数位。
左右补位都用0。
用法:x = x << 2 Bitwise operation的用处有好几个: 一是在计算图像颜色的时候。一般的颜色是32-bit,也就是高8位是alpha,然后是8位红,8位绿,底8位蓝。所以要提去某一种颜色,用一个and去mask一下然后再shift相应的位数就行了。如果要clear一个颜色,用提取颜色的mask的1s complement去mask一下就行了。如果要set一个颜色用or比较efficient。 另一个用处是在用作function flag的时候来轻便的获得状态。比如 #define ANIM_LOOP 1 // (0000 0001) #define ANIM_ONCE 2 // (0000 0010) #define ANIM_MAXSPEED 4 // (0000 0100) #define ANIM_MINSPEED 8 // (0000 1000) #define ANIM_CUSTSPEED 16 // (0001 0000) #define ANIM_LINK 32 // (0010 0000) #define ANIM_LINKALL 64 // (0100 0000) 注意define状态的时候一定要是set 一个bit,而且不能跟其他的状态相同。 Animate(lpdds, 8, ANIM_LOOP | ANIM_MAXSPEED | ANIM_LINK); call的时候就可以得到一个有多个bit set的二进制数。 int Animate(LPDIRECTDRAWSURFACE lpdds, int nFrames, DWORD dwFlags) { // test for looping if ((dwFlags & ANIM_LOOP) > 0)
anim.bLoop = TRUE;

// test for maximum speed
if ((dwFlags & ANIM_MAXSPEED) > 0)
anim.nSpeed = MAX_SPEED;

然后用and test 状态所占的那个bit有没有set。

// ...and so on
}

我觉得这种方法很巧妙。

还有一种更巧妙的用途是在swap number的时候,用bitwise operation可以不用第三个变量。


//  Value of x                         Value of y
// -----------------------------------------------
int x, y;           //  0                                  0
x = CONST_A;        //  CONST_A                            0
y = CONST_B;        //  CONST_A                            CONST_B
x = x ^ y;          //  CONST_A ^ CONST_B                  CONST_B
y = x ^ y;          //  CONST_A ^ CONST_B                  CONST_A ^ CONST_B ^ CONST_B == CONST_A ^ 0 == CONST_A
x = x ^ y;          //  CONST_A ^ CONST_A ^ CONST_B        CONST_A
//  == 0 ^ CONST_B == CONST_B          CONST_A
//  CONST_B                            CONST_A


很牛逼我觉得。

还有一种用处是替代十进制计算,比较方便的有:1.乘以2的阶层 2 (shift left) 2.除以2的阶层 (right shift) 3.对2的阶层求余 (and 2的阶层 - 1)


其实所有计算都可以用bitwise来做,计算机在进行2进制计算的速度是非常快的,所以在C 游戏编程里面一般都会尽量用到bitwise operation。

另外:在C里面数值是不能直接用2进制来表示的,但可以写成16进制的。2进制的数字很容易写成16进制,这使得bitwise operation非常方便。
nValue = 0x3FC;
另外一些以前不是很注意的东西
2 bytes = 16 bits = 1 word
2 words = 32 bits = 1 dword

------------------------------------------------
PS: (2011/3/22)
如果n是2的幂, 那么(i/n) = (i>>log2(n)), (i%n) = (i&(n-1)).
这个property在用1D数组表示2D数据的时候非常有用。CUDA 和 QUAKE3里都有这样的optimization.

2010年7月17日星期六

Ubuntu 10.04

终于,我成功在我的vostro 1720上面装了ubuntu 10.04。两个月前刚出来的时候想装,刻了碟子装,但双系统老出问题。貌似windows 7跟ubuntu 10.04有冲突,可能是他们共享一个启动程序,win 7 启动了几次之后grub就坏掉了,不得不fix mbr 然后删掉ubuntu。

那时装不了不急,但现在要做FYP了,发现必须要装了。顺便提一下我的FYP, 需要compile ioquake的source code。但我的win 7 是64位的,没有出相应的patch,compile时总是出现 "operating system not supported" 的错误。无奈,我想在vm里面装个ubuntu 10.04 i386的,然后在里面跑。折腾了一整天,我终于在vm 里compile成功了。其中有个问题困扰了我很久,error15总是在compile的时候出现。我google了半天终于发现要安装openal 的 library,官网上明明写着optional,靠。compile成功后还要下载地图包,都是些pak.pk3的文件,这些在官网上可以找到。但其中有一个pak0.pk3的文件网上没有,那个本来是要钱买的。不过从idsoftware的官网上下的quake3demo里有这个文件,可以直接拿来用。这个跟cdrom里的不同是不能网上对战,只能局域网对战。好,这些东西都有了,游戏是可以run了,但又有问题了。由于vm上不支持显卡硬件加速,quake3的图像很laggy,而且打开游戏后鼠标也出现问题了。我放弃vm了。

在网上看了些教程,发现国内人好多都用硬盘直接安装。要自己写boot files,自己下grub放在系统盘下,然后重启安装。我照着网上的教程(多是ubuntu cn里)安装,却老是无法摆脱一个叫busybox的程序。我当时快要发疯了,不管怎么改boot files的参数都会看到这个busybox。再后来洗了个澡回来发现,可以用一个叫wubi的程序装。靠,当时发现自己挺sb的。用这个程序花了不到半个小时,没有遇到任何问题,安装成功了。我当时就疯了,折腾了这么久的ubuntu就这么简单就安装成功。

现在可以开始享受ubuntu 10.04了。界面极其凸显简单美,感觉有点像mac,但没有mac华丽。由于在wubi里有set好locale,整个系统已经跟我装好了所有的中文支持,包括有联想功能的输入法。使用过程没有发现任何乱码。在原生的ubuntu里面compile ioquake我没有遇到任何问题,可以全屏流畅的运行。我还装了eclipse for c/c++ 可以直接从eclipse里面compile ioquake, 这个是我之前在vm里面实验没有成功的。最近发现的一款通过ioquake改编的fps游戏 urban terror我也下到的ubuntu里。这个免费的开源的游戏,有点像cs,还可以网上对战,很不错的一款linux游戏。我还下了HoN的客户端,成功运行。我发现在linux上面装东西一般都很方便。没有注册表,隐藏文件,temp文件等等的,并在windows下干净很多。

ubuntu 10.04里的rhythmBox可以很容易的安装mp3 plugin,我记得在ubuntu 8.04的时候还要自己找plugin。empathy通讯程序也很好用,它把im, email, broadcast三个程序整合了,节省了桌面资源。

才用了一天,所以体验不算丰富,但感觉相当不错。今后有新的体验继续写。