15
Feb 13

关于小型研发团队内部沟通的一些思考

游戏开发本质上是一个跨学科的大型协作项目,不同知识背景和思维方式的人在一起完成一个复杂项目想着就觉得很有挑战性, 最大的困难恐怕就来自沟通了,不少公司基本都会陷入会海之中不能自拔(当然之前公司也遇到过以马拉松会议为乐趣和权利象征的制作人,这就是另外的问题了)。但是依靠强大的体能(比如每天工作18小时,一周七天)。也能杀出一条血路来,不过这实在太不健康了。之前也写过相关的博客,这次再整理一下。

基本上我们需要的是三种不同类型的沟通工具

1.快速/实时的信息交流,可以是当面的口头沟通,也可以是任意的即时聊天工具,但是这种交流不适合内容的归档和后续的查阅。

2.非实时/特定话题的持续深入讨论,这个需要能支持交互性比较强的群体讨论工具,并且要能方便的进行归档和追溯。有了这个工具,很多以前用会议讨论的话题,可以用异步的方式进行,节省大家的时间和精力。并且可以有一些更深入的思考,应该能提高讨论的质量。

3.信息的沉淀/整理,也就是协同写作平台,比如各种制作规范的整理和演化。策划最新的设计文档唯一的发布平台。

对于1来说,随便一个聊天工具都可以满足需求,不继续讨论。从2开始,这种需求在以前的公司,一般是通过无尽的会议完成的,同时会产生大量群发的垃圾邮件(主要目的是为了日后相互推托责任时取证之用)。现在看来是效率极其低下的。并且很大程度上并不能真正完成任务。所以一定要革新这个流程。虽然说引入新工具就能一下提高效率的想法看起来有些不现实,因为工具代表的是一种理念,如果无法很快理解就没法真正把工具用起来,不过小团队可能真的能很快的适应新工具带来的流程变化,从而改变做事方法吧。所以这几天乘着春节假期,一直在找有没有适合的,看了很多,最后发现discourse也许是一个不错的选择,下面介绍介绍次世代讨论组框架discourse吧。

discourse是由问答网站Stackoverflow和StackExchange的联合创始人,同时也是著名博客Coding Horror的博主 Jeff Atwood发起的一个开源项目,是一个“100% open source, next-generation discussion platform built for the next 10 years of the Internet.”。在这篇博客里面,Jeff讲述了Discourse的缘起和核心团队的背景。而在Discourse的主页,有详细的特性说明,让我们看看比较关键的革新:

  • 扁平的信息流形式组织帖子,而不是传统的按页面的形式,不需要手动翻页,只需要不断下滚动就会自动刷新出后面的帖子
  • 帖子不是按板块进行分类,而是通过用户自定义的标签进行自动聚合,更有灵活性,但是还是需要前期引导,避免分类过乱。不过一开始可以不提供过多的分类,而是让分类标签慢慢随着讨论平台的成长而成长。
  • 更好的讨论机制:可以用@语法提到其他用户,方便讨论。其他人引用或者回复你的帖子,也会自动接到通知。一个帖子一共有四种通知模式:

   

  • 帖子的分支机制,如果出现偏题的讨论,可以很方便的开一个新帖子,同时能保持新旧帖子的关联性。方便以后来回追溯。结合本身的多元的通知机制,对研发内部讨论平台来说特别适合。

   

  • 其他的一些特性:帖子信息实时更新,不需要重新刷新页面,新帖会出现在顶部。外部链接可以自动展开。直接拷贝粘贴或者拖拽就可以上传图片

从上面的特性来看,确实是比较吸引人的讨论组工具平台。目前discourse已经进行了一年的开发,并且获得了First Round、Greylock 以及 SV Angel的风险投资。盈利模式是提供便宜的托管服务和企业私有服务器定制服务。因为在Github上提供了完整的源码,所以自己搭一个应该也不麻烦,顺便还能学习学习现代的Web前后端技术(Rails/Ember.js/Redis/PostgreSql)。看上去很好,准备年后搭起来试试。

对于第3点需求,也就是协同写作平台,目前看来似乎还是只有Wiki比较适合,但是MediaWiki之类的传统Wiki确实不太友好,看来看去,最后发现atlassian的Confluence可能是一个比较好的方案,虽然要花一点钱,但是易用性上巨大的改进还是值得了。Confluence的客户列表:

主要特点:

从一个Dashboard作为入口,一个项目的文档被放置在不同的Space中,Space可以赋予不同的权限,以便区分内部和外部文档,一个Space包含了两级的页面结构,不同Space中的Page,可以通过标签来进行再次的聚合。方便搜索。页面的编辑非常方便,这也是比普通Wiki强大的地方。可以通过内置的宏系统很方便的嵌入图片和视频以及各种动态内容。感觉使用上会比Wiki简单不少。另外考虑到我们的Bug和问题管理系统也是他们家做的JIRA,原生的整合功能还是很方便的。


08
Oct 12

博客重开一周年了

不知不觉上一篇博客已经是快一个月前写的了,所以这个题目多少让人有点不好意思。但写博客是需要平静的生活的,最近一个月来,团队发生了一些事情。几乎没有心情继续保持每周更新博客了。这个状态估计还得持续一段时间。但是不管怎么样,用博客和照片记录自己的成长和生活的习惯是一定会坚持下去的。从去年10月重开博客到现在,刚好一年。一共写了57篇,考虑到大部分博客更新频率都大于120天(来源在这里:Technorati)。所以给自己打个及格分吧。

不管从什么角度,这一年也算是标准的Gap-Year。工作上没有什么重要的事情或者说进展吧。反而多出不少时间来读书和写博客。前几年跑得太快,魂都丢了。生活上,恋爱十年今年终于有时间带老婆去了一次日本,虽说是“穷游”但还是很有纪念意义的,不过要完成当年大学里许下的各种目的地还是很艰巨的任务(丹麦的古堡可没那么便宜啊)。另外值得欣慰的是今年开始认真的研究摄影技术,至少个人感觉进步还是比较明显的,比如这次日本的照片,我就动用了计算机图形学的高级知识进行后期处理,得到了不错的效果。并且最近开始把所有照片逐步托管到专业的网站上(Smugmug!)这样我就再也不担心丢失照片的问题了。这次国庆回家展示照片都是把笔记本外接到家里的大电视直接用Smugmug的幻灯片功能进行的,效果非常理想。不过暂时还买不起更好的相机让我还是感到有些遗憾。

至于工作上,这一年也许最重要的收获是意识到创业团队成员之间,即使只有一个人开始玩政治,耍心计,基本上这个团队完蛋是迟早的事情。就像这篇尸检报告说的:“把联合创始人之间的关系比喻成婚姻,几乎都有些陈词滥调了,但却是不争的事实。在创业阶段,你和TA见面的时间、和TA协作的时间,要比生命里的任何人都长。如果关系紧张——你们不能好好地搭档,也无法在事业起伏里相互激励——那公司估计也活不长了。不幸的是,你所能做的,只是在确定和TA朝创业目标前进之前,好好地把TA看个清楚。”很遗憾,我们的团队就出了这样的人,这就是成长过程中必须付出的代价吧。大家一直埋头做事,却没有好好看人,所以说“读万卷书,不如行万里路”。学会看人是第一步,做人和做事是分不开的。一个私心很重,贪图小便宜,没有诚信的人,绝对不是一个能够一起走下去的伙伴。发现这样的人,最好的办法不是妥协,而是远远的躲开,重新开始。还好,我们及时的做出了正确的决定。至于其他的,我不准备再多说什么了,让时间来证明一切吧。现在最重要的事情,就是尽快调整好心态,确保一切走能快速走上正轨。当然作为一名严肃的程序员,一想到有这么多有挑战和有趣的问题等着我去解决,并且会议质量和方式终于有望得到本质性的改变时,还是感到十分欣慰的。


05
Sep 12

日本旅行游记汇总(更新完毕)

本来想转载领导的游记的,不过似乎QQ空间的外链很难搞,所以还是直接在帖子里面引用吧:

  1. 日本旅行-准备篇
  2. 日本旅行-关西之大阪
  3. 日本旅行-关西之奈良
  4. 日本旅行-关西之京都寻访
  5. 日本旅行-东京之吉卜力朝圣
  6. 日本旅行-北海道之函馆
  7. 日本旅行–北海道之札幌
  8. 日本旅行-北海道之富良野/美瑛
  9. 日本旅行-北海道之小樽
  10. 日本旅行-归程

另外,最近准备把照片的备份和分享服务从Flickr迁移出来,主要原因是Flickr的速度和对雅虎未来的不信任。对比了很多家,最后还是决定搬到Smugmug上去。这是一家02年就成立的,专注于家庭照片分享和备份的网站,无论是上传还是浏览速度都飞快,并且不限制照片的数量,也能保留高质量原始照片文件,作为备份之用。公司的理念非常简单但是很有力量,让人看了觉得把珍贵的照片托管在这里很放心:

Most Internet companies dream of selling to bigger ones, and getting rich. We do not. We dream of an independent company devoted to nothing but your priceless photos. A company that backs up your precious memories so they are safe and sound. A profitable, debt-free company. That earns your fanatical loyalty. We are living that dream.

这是他们核心团队的照片,蛮有趣的:

最后,这次日本之行的大部分照片我都传到这个相册中了。大家看看体验如何。


26
Aug 12

旅行的照片

这周刚结束11天的旅行,还没有缓过气来,没状态写技术文章,就分享一些照片吧,这次一共照了2000多张,不过水平有限,能看的也就400张左右,感觉这次构图虽然有进步了,但还很差啊,一定要继续努力。不过这几天处理照片还是挺有趣的,写ToneMapping的Shader是一回事,用这个理论来处理照片又是另一回事了。这次只传了很小一部分到flickr上(主要是还没有想好要不要升级成付费帐号)。图片点击之后可以链接到大图。总的来说,这次因为是自由行,所有事情全部要自己安排(不得不说一下我家领导的计划做的真好!),虽然很辛苦,但是收获还是很多的。近距离的观察日本还是让人很感慨的。留到以后游记写吧。

———————————

先从风光开始,下面几张都是在美瑛照的(刚才看新闻这地方好像地震了,不过只有6级)。

IMG_8074_5_6.jpg

个人最喜欢这张,层次很丰富,云层的光感也比较舒服。

IMG_8066_7_8.jpg IMG_8073_tonemapped.jpg IMG_8079_tonemapped.jpg这张做了色调映射,喜欢树的剪影效果 IMG_8100_1_2.jpg这张因为是放在草堆上照的,所以前景不太好,但是云很漂亮,所以还是留下了。 IMG_8105_tonemapped.jpg这张是在住的旅店前面拍的

IMG_8106.jpg因为住的美马牛车站旁边6点以后就没吃饭的地方了(汗。。。),所以晚上坐火车(其实不远。。)到了镇上去吃饭,正好拍到了晚上的美瑛车站,这张没有做色调映射,直接出片就很漂亮了。

IMG_7963_tonemapped.jpg

虽然这次去时间很不好,薰衣草都开过了,不过还是能看到一些很漂亮的花田,这个地方我们去的这一天是最后一天开放,冬季就会变成一个滑雪场

——————————-

IMG_7271_tonemapped.jpg

伏见稻荷大社的狐狸

IMG_7173_4_5.jpg

京都塔,玻璃反光。。

IMG_6839.jpg

穿和服逛街的人们,这种拉车的小伙专门挑这种结伴而行的和服小妹妹搭讪。。。人力车价格非常贵。。。

IMG_6998_6999_7000.jpg

京都的传统建筑都保护的非常好

IMG_7057_8_9.jpg

京都御所的小花园

IMG_7220_1_2.jpg

京都车站顶上一家豆腐料理店拍出去的,玻璃有反光。。。

——————————-

IMG_8276_tonemapped.jpg

札幌的电视塔,也可以上去

IMG_8313_tonemapped.jpg 

小樽的运河IMG_8323_tonemapped.jpg IMG_8338_tonemapped.jpg

这张其实应该取点前景。。。

——————————-

来两张全景图,都是用三张照片合成的,没有带脚架,不过看起来效果还行。

IMG_7950_51_52_全景图_tonemapped.jpg

这张是从富田农场步行到火车站的路上拍的,最好点大图来看。

7688_89_90_全景图.jpg

这张是在函馆拍的

———————————-

最后贴几张旅途中偶遇的喵星人。。

IMG_7583.jpg IMG_7751.jpg IMG_7373.jpg


10
Aug 12

SIGGRAPH 2012 PPT 发布链接

今年SIGGRAPH的PPT也开始陆续放出来了,现在看到的有三个,后面再继续更新:

周日就要和我家领导出发去日本旅行了,算是Gap Year的完美结束吧!估计博客更新会暂停两周。因为没有跟团,两个不懂日语的人自由行所以要准备的东西很多,不过好处是活动范围可以很大(日本高铁专门对外国人短期旅行的通票还是非常划算的)。行程也很自由,希望不要碰上大台风什么的。回来更新游记和照片~~

05
Aug 12

为什么认识自己这么难

因为也许人类思维注定是偏颇的。

最近一直在看《思考,快与慢》这本书,作者是决策领域的大牛,诺贝尔经济学奖得主(虽然他并不把自己当经济学家!)。这是一本让人感觉大开眼界,并且不断意识到自己思维局限性的书。虽然阅读这本书并不能解决我们思维上的缺陷(作者自己也说了连自己也无法克服这些思维缺陷!),但是能意识到这一点并能在以后的生活中做出一些改变也是不错的。说两个由这本书想到的有趣的事情。

1)“C++是垃圾,我们应该用C”

最近微博上看到一年N度的语言大战又开始了,这次是一个C++特性造成的内存泄漏话题引发的,于是正在用C语言的人纷纷表示自从抛弃C++,Bug少了很多,代码质量一下有了质的飞跃,并严重鄙视还在使用C++的人。表示完全无法理解怎么还有人会用这门特性如此之多、如此复杂的语言。这次看到这种争论很自然的想到了Narrative Fallacy,叙事谬误理论认为,能够吸引我们眼球的那些说法往往是很通俗易懂,具体而不抽象的,关注的往往是少数几件已经发生的大事,而不是无数件并没有发生的事情,任何新近发生的有影响的事都有可能成为一个存在因果关系的故事的核心情节。你会不由自主的去处理手头有限的信息,好像这些信息就是全部事实了,我们会最大限度的忽略自己的无知。而人类大脑的局限使得它没有足够的能力重构过去的知识结构或信念。一旦接受了一种新的观点,人们就会丧失很大一部分回忆能力,无法回想自己观点改变之前的那些想法了。

2)“Regression to Mean”

所有表现都会回归平均值,这个原理也是很有意思的,心理学的研究已经证明,在进行技能训练的时候对良好表现的嘉奖比对错误的惩罚更有效。但是很显然很多教练并不这么认为,前段时间刚考过驾照,教我们的教练就经常说:表扬没用要多骂一点才能让大家学得更好,因为很多时候如果一个学员开得不错,稍微表扬了一下,结果往往下一次表现就会变差,而那些被骂的学员,往往下一次就能做的好一些。现在想起来,我们这个教练的观察不正是Regression to Mean么?糟糕的表现常常会有所提高,而好的表现会变差,这跟表扬和惩罚都没有关系,我们不能把不可避免的随机波动和因果解释联系起来!不过能认识到这一点并不容易,直到万有引力和微积分理论出现两百年之后才有科学家发现这一个原理。

“认识你自己”,相传是刻在德尔斐的阿波罗神庙的三句箴言之一,也是其中最有名的一句。现在越发觉得,这真是一件很难的事情。


15
Jul 12

The Art of Doing Science and Engineering

这本书是根据Hamming在美国海军研究院授课的课堂录音整理成的,主要内容是用自己做计算机相关研究的亲身经历讲述科研和工程的心得。对这本书感兴趣纯粹是因为Bret Victor同学给了一个6星级评分。看下来感觉还可以(虽然稍微贵了点。。。)。计算机和通信相关专业的同学对Hamming应该都不陌生,86年就因为在数值方法,自动编码系统,错误检测和纠错码的贡献获得了图灵奖。这本书因为只是课堂录音整理,并且估计也没什么Marketing之类的,所以影响力似乎并不大。中间的一些部分如果不是专业出身可能也比较枯燥,所以我想发行量不会很大。好在这门课程全部数字化了,大部分内容都可以在这里找到,有些章节只是节选,如果不想花31刀买书的话,就看这里的电子版吧。95年的最后一学期讲课的全部录像在这里也能下到,感觉那时候思维还很敏捷啊,怎么96年就挂了。。。他还有一个很有名的演讲,You and Your research,这里有一篇还不错的翻译。下面是一些很有意思的摘要(Kindle做这个还是很方便的,只是因为我经常在PC/手机/Kindle上同时看一本书,多设备同步还是有bug,有时候会覆盖掉。。。)

Education is what, when, and why to do things, Training is how to do it.

In science if you know what you are doing you should not be doing it. In engineering if you do not know what you are doing you should not be doing it.

All of engineering involves some creativity to cover the parts not known, and almost all of science includes some practical engineering to translate the abstractions into practice.
Often it is not physical limitations which control but rather it is human made laws, habits, and organizational rules, regulations, personal egos, and inertia, which dominate the evolution to the future.

you must try to foresee the future you will face. To illustrate the importance of this point of trying to foresee the future I often use a standard story. It is well known the drunken sailor who staggers to the left or right with n independent random steps will, on the average, end up about steps from the origin. But if there is a pretty girl in one direction, then his steps will tend to go in that direction and he will go a distance proportional to n. In a lifetime of many, many independent choices, small and large, a career with a vision will get you a distance proportional to \(\sqrt{n}\), while no vision will get you only the distance In a sense, the main difference between those who go far and those who do not is some people have a vision and the others do not and therefore can only react to the current events as they happen.

To what extent history does or does not repeat itself is a moot question. But it is one of the few guides you have, hence history will often play a large role in my discussions—I am trying to provide you with some perspective as a possible guide to create your vision of your future.

In forming your plan for your future you need to distinguish three different questions: What is possible? What is likely to happen? What is desirable to have happen? In a sense the first is Science—what is possible. The second in Engineering—what are the human factors which chose the one future that does happen from the ensemble of all possible futures. The third, is ethics, morals, or what ever other word you wish to apply to value judgments.

Lastly, in a sense, this is a religious course—I am preaching the message that, with apparently only one life to live on this earth, you ought to try to make significant contributions to humanity rather than just get along through life comfortably—that the life of trying to achieve excellence in some area is in itself a worthy goal for your life.

It has often been observed the true gain is in the struggle and not in the achievement—a life without a struggle on your part to make yourself excellent is hardly a life worth living.
Notice I leave it to you to pick your goals of excellence, but claim only a life without such a goal is not really living but it is merely existing—in my opinion. In ancient Greece Socrates (469–399) said: The unexamined life is not worth living.
Indeed, one of the major items in the conversion from hand to machine production is the imaginative redesign of an equivalent product. Thus in thinking of mechanizing a large organization, it won’t work if you try to keep things in detail exactly the same, rather there must be a larger give-and-take if there is to be a significant success.

You must get the essentials of the job in mind and then design the mechanization to do that job rather than trying to mechanize the current version—if you want a significant success in the long run.
We must not forget, in all the enthusiasm for computer simulations, occasionally we must look at Nature as She is.

The Buddha told his disciples, "Believe nothing, no matter where you read it, or who said it, no matter if I have said it, unless it agrees with your own reason and your own common sense". I say the same to you—you must assume the responsibility for what you believe.

"Almost everyone who opens up a new field does not really understand it the way the followers do". The evidence for this is, unfortunately, all too good.

It has been said in physics no creator of any significant thing ever understood what he had done. I never found Einstein on the special relativity theory as clear as some later commentators.

The reason this happens so often is the creators have to fight through so many dark difficulties, and wade through so much misunderstanding and confusion, they cannot see the light as others can, now the door is open and the path made easy.

Hence I expect a lot of trouble until we do understand human communication via natural languages. Of course, the problem of human-machine is significantly different from humanhuman communication, but in which ways and how much seems to be not known nor even sought for. Until we better understand languages of communication involving humans as they are (or can be easily trained) then it is unlikely many of our software problems will vanish.

There are many things we can do to reduce "the software problem", as it is called, but it will take some basic understanding of language as it is used to communicate understanding between humans, and between humans and machines, before we will have a really decent solution to this costly problem. It simply will not go away.

"Is programming closer to novel writing than it is to classical engineering?" I suggest yes!

Give the same complex problem to two modern programmers and you will, I claim, get two rather different programs. Hence my belief current programming practice is closer to novel writing than it is to engineering. The novelists are bound only by their imaginations, which is somewhat as the programmers are when they are writing software.

What you learn from others you can use to follow; What you learn for yourself you can use to lead.

Mathematics is nothing but clear thinking. Mathematics is the language of clear thinking.

Platonic school (most) formalists When rigor enters, meaning departs. logical school intuitionists constructionists fallacies: 1) we do not actually "prove" theorems! 2) many important programming problems cannot be defined sharply enough so a proof can be given, rather the program which emerges defines the problem!

Man is not a rational animal, he is a rationalizing animal.

I often suspect creativity is like sex; a young lad can read all the books you have on the topic, but without direct experience he will have little chance of understanding what sex is—but even with experience he may still not understand what is going

An expert is one who knows everything about nothing; A generalist knows nothing about everything. In an argument between a specialist and a generalist the expert usually wins by simply (1) using unintelligible jargon, and (2) citing their specialist results which are often completely irrelevant to the discussion.

All impossibility proofs must rest on a number of assumptions which may or may not apply in the particular situation. "If an expert says something can be done he is probably correct, but if he says it is impossible then consider getting another opinion."

What you did to become successful is likely to become counterproductive when applied at a later date. "There is never time to do the job right, but there is always time to fix it later." especially in computer software.

Hamming’s rule: 90% of the time the next independent measurement will fall outside the previous 90% confidence limits!

Most of the time each person is immersed in the details of one special part of the whole and does not think of how what they are doing relates to the larger picture. It is characteristic of most people they keep a myopic view of their work and seldom, if ever, connect it with the larger aims they will admit, when pressed hard, are the true goals of the system. This myopic view is the chief characteristic of a bureaucrat.

Systems engineering is the attempt to keep at all times the larger goals in mind and to translate local actions into global results.But there is no single larger picture

The first rule of systems engineering is: If you optimize the components you will probably ruin the system performance.

Rule 2: Part of systems engineering design is to prepare for changes so they can be gracefully made and still not degrade the other parts.

Rule 3: The closer you meet specifications the worse the performance will be when overloaded.

Westerman believes, as I do, while the client has some knowledge of his symptoms, he may not understand the real causes of them, and it is foolish to try to cure the symptoms only. Thus while the systems engineers must listen to the client they should also try to extract from the client a deeper understanding of the phenomena. Therefore, part of the job of a systems engineer is to define, in a deeper sense, what the problem is and to pass from the symptoms to the causes.

The deeper, long term understanding of the nature of the problem must be the goal of the system engineer, whereas the client always wants prompt relief from the symptoms of his current problem. Again, a conflict leading to a meta systems engineering approach!

You may think the title means if you measure accurately you will get an accurate measurement, and if not then not; but it refers to a much more subtle thing—the way you choose to measure things controls to a large extent what happens.

For example, in school it is easy to measure training and hard to measure education, and hence you tend to see on final exams an emphasis on the training part and a great neglect of the education part


14
May 12

Vision and Art ,The Biology of Seeing 读书笔记(2)

继续上周的读书笔记,今天主要讲色彩的感知原理,为什么战地3可以用Chroma SubSampling来提高渲染效率同时又不对效果有很严重的影响?人眼的感光细胞只有10倍左右的动态范围的情况下,为什么我们能同时看清反差如此之大的各种细节?在颜料能够表现的动态范围很有限的情况下,画家们是如何表现高动态场景的?


色彩的感知原理-三原色(Trichromatic) vs 补色(Color Opponent)


就像光具有波粒二相性一样,对颜色是如何构成的,也有两种理论:
  • 三原色,三色中的任何一色,都不能用另外两种原色混合产生,而其他色可由这三色按一定的比例混合出来,这三个独立的色称之为三原色(或三基色)。视网膜上确实有三种感光细胞,分别对三原色敏感。
  • 补色,这种理论认为人对色彩的感知并不是直接编码三种感光细胞的响应,用三原色合成颜色,而是编码某两种原色的差异,所以叫补色原理,在神经生物学的研究中发现,由于三种感光细胞对光线的反应曲线是有重叠的,所以这种编码差异而不是完整的曲线的方式,信息量更小,通过大脑的处理即可还原所有的信息。
一开始这两种理论被认为是不相容的,并且各自都有实验证据,很有点波粒二相性之争的感觉。后来的科学发展证实,这两种理论适用于人脑处理颜色信息的不同阶段,在第一阶段,感光细胞确实是提供了三原色的响应信号。但是在接下来的Bipolar细胞的处理中,就应用了补色的机制。把三原色信号变成了两元补色(two opponent signals)和亮度(luminance)信号。从处理效率和进化的角度来讲,人类还在低等生物的阶段时,只需要亮度信号就可以进行很多有用的信息处理了(Where系统).这样补色信号和亮度信号的分辨率或者说信息量是不同的,并且由于我们先进化出Where系统,后进化处理对颜色信息进行处理的What系统,所以这样划分也很自然,毕竟对进化来说,推翻重构的成本太高,添加功能式演化是比较自然的。有了这样的认识,很多视觉现象就好解释了,后面很多地方会提到。
比如目前应用非常广的图像压缩算法:Chroma SubSampling。从2011年的SIGGRAPH PPT里面我们可以看到战地3也用了这种算法,通过渲染低分辨率的颜色Buffer来提高效率。所以说,Vision and Art就是做渲染的原点,任何严肃的图形程序员都得好好掌握这些知识。


如何在2D的平面上呈现出3D的效果


视网膜需要从两只眼睛获得的2D图像还原出3D的世界,所以需要不少规则去辅助判定
  • 透视(Perspective)
  • Shading(主要是靠物体的亮度差异,而不是颜色)
  • Occlusion(遮挡关系)
  • Haze(远处的物体会由于雾和大气散射而变得模糊)
  • Steropsis(立体视觉)
  • Relative Motion(相对运动)
对画家来说,需要克服已经被大脑处理好的3D图像,而从中去还原出2D图片,然后让其他有着2D视网膜的人觉得这些平面的画很有3D的效果。而克服直觉是需要花很多功夫的,一些画家借助辅助网格,而一些人本身就是由于生理缺陷,缺乏立体视觉。反而成为画家的一大优势。
而为了增加画作的立体感,也需要模拟人眼感知世界的各种规则。下面列举一些我觉得挺有意思的。


透视

人眼因为要从2D图像重建3D的立体世界,所以透视原理也是被硬编码了。就是我们会认为物体必然是近大远小的,比如下面这个著名的Ames’ Window和Ames’ Room。视频演示在这里。如果想自己做一个纸上模型,可以把这个打印出来


Chiaroscuro(明暗法)


这个术语是来自意大利语,直译就是Light-Dark,是绘画的一种技法,用明暗对比来表现物体的体积感。前面提过,人眼的感光细胞对局部的亮度变化很敏感,并且这部分是古老的高分辨率Where系统所掌管的,所以亮度的对比可以给Where系统很强烈的物体轮廓提示,从而让平面的画作获得立体感。而且由于太阳光总从我们头顶射下,所以“光来自上面”这个规则已经被我们的Where系统硬编码了,所以让物体上部亮,下部暗的时候,我们会觉得这个物体很有立体感,反之则是完全不同的深度感觉,比如下面这些球体:
而一旦我们把球体旋转一个角度,上下的明暗对比没有了:
我们就不会有凹凸的感觉了。
再看一个印象派画家的作品,Monet的Rouen Cathedral:The Portal(in sun)。通过刻意的增加局部的明暗对比,教堂的立体感得到非常大的加强。
再来一张安格尔的:Princess Albert de Broglie,对亮度对比的控制已经牛的不行了。


画家是如何表现HDR(高动态范围)的效果


自然界中,不同的物体之间的亮度差异可能会有成百上千倍,但是我们的眼睛可以毫不费力的同时看到这些东西,而实际上,神经生物学家们发现,感光细胞能够编码的亮度差异也就是10倍左右!(这个我以前还真不知道)人眼会通过局部的对比来自动的调整(上一篇文章提到过的Center/Surround原理)。而对画家们来说,使用的颜料动态范围是非常有限的,显然不可能模拟物理真实的世界如此高的反差,于是画家们也逐渐学会了利用局部的对比来匹配人眼的局部性规则。比如伦勃朗的这幅Philosopher in Meditation。通过使用局部的大反差,用低动态范围的颜料模拟了高动态范围的光照效果。实际上,这中技法在实时渲染里面也是后期效果的标配了。

06
May 12

Vision and Art ,The Biology of Seeing 读书笔记(1)

这本书入手也有一段时间了,术语比较多,读起来比较头疼,不过习惯了到后面就好了。印刷十分精美,各种插图设计也是一流的,看起来还是很享受的。全书的中心思想就是:Vision is information processing, and visual computations are SIMPLE, LOCAL, and OPPONENT。视觉并不是对外部世界的真实还原,在进化的过程中,人脑还形成了很多信息加工的功能,方便快速的获得某种重要信息,比如人脸的识别,深度的感知,颜色从2元到3元以便能识别出有毒的果实之类的。而很多画家其实就是利用了人脑的这些处理信息模式,创造出了经典作品。下面记录一些有意思的地方。

视网膜的构成

视网膜(Retina)的构成如上图所示,列一下从维基百科上拷贝过来的中英文的术语对照,这样后面好理解一些:

  • 视网膜色素上皮 (retinal pigment epithelium)
  • 感光层 (photoreceptor layer,rod,cone) ,包括视杆和视锥细胞
  • 神经节细胞层 (ganglion cell) ,这个层含有神经节细胞的细胞核,视神经从这里开始
  • 内核层 (inner nuclear layer),又称内颗粒层,由双极细胞(Bipolar Cell)、水平细胞(Horizontal Cell)、无长突细胞、Muller细胞的胞核组成
  • 神经纤维层 (nerve fiber layer),主要为神经节细胞的轴突

比较有意思的地方:

  • 感光层居然在Retina的最外层,也就是最后才接收到光线的,也就是这个原因,在中心的Fovea区域,为了最大化分辨率,这里的三层神经节细胞都被移开了,露出了一小块区域,让光线经历的中间细胞少一些
  • 中间的几层神经元细胞会在感光层接受光线刺激产生信号后,对信号做整合预处理
  • 光感受体传递神经信号的方式和普通的神经并不相同,光感受体平时一直处于Potentiate的高电位状态,光线刺激出现的时候才降低电位
  • 视锥细胞工作在比较亮的环境下,而且可以分辨颜色。视杆细胞工作在比较暗的环境下,其分辨率比较低,而且不能分辨颜色

Center/Surround原理

在感光细胞送出神经元信号后,神经节细胞层会对信号进行横向整合,遵循的是著名的Center/Surround原理,也就是在中央区域的光线刺激是+信号,而在边缘区域的光线刺激是-信号。这样的组织下,人眼的中心视觉灵敏度很高,并且对运动和变化的物体反映十分灵敏,也就是对光的变化敏感,而不是总体的亮度。这恐怕也是进化过程中必需的。而且重点编码运动和变化的信息,而不是整体的信息,也是一种信息压缩的手段吧。下面这张图可以让我们直观的感受到Center/Surround预处理的效果,当把视觉焦点放在白线交汇处时,会发现周围的交汇处有黑点闪烁,并且离中心视觉焦点越远越黑,当视线移动时,还能明显感觉到闪烁,这是因为神经信号传递的时间延迟。

中心视觉和边缘视觉

人眼的中心视觉分辨率很高,相对的,边缘视觉则要粗很多,但是比较擅长分辨大的轮廓和重要的元素,比如人脸。下面这张对蒙娜丽莎的脸部分析图可以很直观的解释为什么她的微笑那么神秘。

当你聚焦到她的脸部之后,视觉分辨率很高,看到的都是细节,也就是最右边的效果,所以微笑并不明显,但稍微移动视线,由于边缘视觉是看轮廓的,看到的就是左边的两种效果,所以就会突然觉得笑容更明显了。很多画家都会运用人眼的这种视觉原理去创造出一种变化感和运动感。特别是印象派的。

莫奈的这张Rue Motorgueil in Paris,Festival of June 30 , 1878.也是运用这种原理制作的,创造动感并不是单单的Blur掉。而是精确的模拟人眼的Peripheral Vision的Spatially imprecise的特点。

What and Where System

如上图所示,大脑中有两套处理视觉信息的系统,其中where系统是比较古老的构造,特点是分辨率不高,对反差很敏感,色盲,主要依靠亮度信息来判定深度和物体的运动,人物和地面的分离。而what系统是后期进化出来的,分辨率高,对颜色敏感,低反差。用来进行对象识别,人脸识别和颜色感知。

利用这个特点,我们就有了Equiluminant Color,指色调(Hue)和饱和度(Satureate)不同,但是亮度(Luminance)相同的色彩,用这种色彩组成的画面,会导致人的Where系统无法对其中的形状进行定位,所以会有闪烁,漂浮不定的感觉,也是很多画家利用的一个特点,比如印象派的很多画家

莫奈的这幅日出印象就是典型,也包括梵高的很多作品。从图上可以看到莫奈的太阳有比较特别的动感,但是把颜色去掉之后,我们就发现太阳的Luminance和背景基本是一致的。不过我觉得网上找的图效果都不明显,因为Where系统灵敏度很高,只要有亮度差异,基本就识别出来了。而且和屏幕的校准也有关系,这里有个网站可以实时的调整看效果

今天先写到这里,剩下的下周继续。

Update 2012.5.16,第二部分在这里


19
Feb 12

对有效学习的一些思考

Motivation

今天主要想谈的是一些关于怎么样有效学习的话题,其实只要是从事创造性工作,那么如何不断提升自己的专业能力,就是一个职业发展生涯的重大问题。可能刚毕业的时候还意识不到这一点,那时候工作的要求也很单纯,就是高质量的满足别人给出的需求即可,基本是实现层面的东西,甚至大部分问题别人都已经解决过了。对自己的思维能力要求不高。只要是足够勤奋,不需要什么特别的方法,就可以很容易的超出上级的预期了。但是随着自己的成长,大家恐怕都会发现,是要自己去提出需求了,因为已经没人可以什么事情都帮你分析帮你决策了。而自己在团队中的价值也就在于是否能对公司的产品和发展提出有意义的新方向。从单纯的“业务实现”到了“业务智能”的阶段。这个时候,要面对就不光是具体的技术问题,而是结合了设计与商业的业务问题,这个时候技术之外思维方式就很重要了。比如对游戏来说,海量资源的制作是一个大问题,那么如何能够重构工具管线,提升资源制作效率,这就不光是技术能解决的问题了,从本质上讲,工具就是流程的固化,所以也要涉及各个部门的工作流程,沟通方式的改变,如何架构,推进这种事情也是很复杂的工作。再举一个例子,游戏中新效果的实现,看暴雪的游戏,我们就会发现,技术层面都比较简单(之前也分析过暗黑3的一些算法,比如这里这里),但是结合到游戏中,就是能起到很好的作用,无论是提升打击感,还是增加带入感,怎么样才能有这样的发散和设计能力?

不管怎么说,要解决这个问题,只能通过项目来提升自己能力,并且一定要有意识的提高自己学习的效率,否则再多的经验也是没有意义的,一方面追求技术的广度和深度。一方面开拓视野,了解设计层面的东西,最后再加上对思维能力的刻意训练,我想也许是一条出路。说句题外话,现在回过头来看自己的大学生活,简直是太浪费了,在思维最活跃的黄金年代,学校里面却没有任何思维训练的课程,计算机系的教育方法就是彻头彻尾的瞎搞。这恐怕是中国大学真正的悲哀,也是为什么国外大学本科毕业生就能写出Protocol Buffer这样的库。而在中国却很难。

Methods


刻意练习法

而对学习方法,心理学家们似乎已经有了非常靠谱的结论,并且有了几本经典著作:

The Cambridge Handbook of Expertise and Expert Performance

Development of Professional Expertise:Toward Measurement of Expert Performance and Design of Optimal Learning Environments

简单总结一下:

1. 在“学习区”练习

通常我们都喜欢待在舒适区,用已经掌握的工具和技能去解决问题,但是在舒适区练习是不能提升自己能力的,所以为什么每一个C++程序员都应该学习至少一门函数式语言(比如Scheme,Erlang等)并实际使用这种语言来解决问题。只有使得自己用不同方式思维的语言才是值得学习的。这就是在学习区练习的典型例子。当然,说起来容易,做起来就难了,我就遇到过一些这样的老程序,对新语言新工具毫无兴趣,认为自己在以前某大公司积累的东西就足够用了,为什么要改?

2. 大量重复训练

这也是学习的关键,必须要有大量的练习支撑,才能把技能固化。但是一定是要在学习区的重复训练!

3. 持续获得有效的反馈

这恐怕是离开学校之后最难做到的了,就是除了在学习区不断训练,还需要有获得自己的练习行为是否有效的反馈。这种反馈越即时越好。所以为什么每个软件团队都应该有一个方便的Code Review机制。从自己项目的经验和带新人的经验来看,新人如果有一个每次提交代码都得到审核和具体修改意见的过程,那么成长速度会非常快,对尽快融入团队非常有帮助。而定期的进行重要模块的代码交叉Review,对老程序自己也是一个很好的学习机会。

从另一方面讲,学会从旁观者的角度观察自己的行为,并每天反思,总结,恐怕是一个不错的反馈机制。也就是为什么日记和时间卡片这么管用了。这里推荐一个小软件:ProcastiTracker,可以很方便的记录在电脑上每个应用软件花的时间,比如今天QQ聊天用了多少时间,写代码用了多少时间,看网页又是多少时间,并且可以按时间段形成报表,对反思自己的行为很有帮助。

4. 精神高度集中

刻意练习没有“寓教于乐”这个概念。所以说,这个时候就体现出兴趣的作用了。很难想象没有强烈的兴趣可以坚持枯燥而专注的练习太长时间。

阅读方法

另外一个想讨论的话题是有效阅读,因为知识最廉价以及系统的来源就是书本了,这里要说一下,中国的书真是很便宜的。但是如何阅读也是要注意的,有的书可能只是快速翻阅即可,有的书可能就需要深入下去,这方面技巧最好的恐怕就是How to Read A Book这本书了,初版1940年,后来一直不断再版,可见这本书是很受认可的。下面是我的一些总结,当然阅读的技巧是要不断提升的,我现在也不能做到很好的主题阅读,只是有了这本书指导,前进的方向是很明确的,剩下的,就是不断磨练了。

<How to read a book>

这是一本关于如何阅读的经典著作,提出了如何做一个主动阅读者,让一本书真正属于自己。

阅读的几个层次

  1. 基础阅读,不多写了
  2. 检视阅读,快速的决定这本书是否值得细读,在主题阅读前,这一步是简化书目的关键,并且值得分析阅读的书并不多,没有必要每本书都花上相同的精力
  3. 分析阅读,透视一本书,了解这本书的整体架构,作者的逻辑思路
  4. 主题阅读,以一个主题为依据,通过检视阅读找到相关的书,在阅读的过程中形成自己对这个主题的大框架和术语,把不同的书的内容通过分析阅读统一到这个框架中来,也就是把不同作者对相同术语不同的表达都统一起来,最后获得对一个主题很深入的理解,并能够提升自己的思考能力

如何做一个主动的阅读者

一本好书是不能用很随意的方式来阅读的,至少对缺乏经验的阅读者是这样的,就好像一个初学滑雪的人和一个滑雪大师的区别一样,有经验的阅读者可以把阅读的各种技巧很灵活自然的运用起来,而刚开始意识到需要主动阅读的人还是需要一段比较长的训练期才能比较熟练的掌握主动阅读的技巧的。总的来说,看一本书我们一定要提出四个问题

  1. 整体来说,整本书是讲什么的
  2. 作者细部说了什么,是怎么说的,要对作者主要的论点,想法,声明都能够了解
  3. 这本书说的有道理吗?是全部有道理还是部分由道理
  4. 这本书和我自己的关系,对我的启发等

如何让一本书真正属于自己

对于真正值得读的好书,需要做一份自己的读书笔记,才能完成对这本书智力上的拥有。实际上,很多大师都是不保留书本身,只保留读书笔记的。而且现在网络资源检索很方便的情况下,在只有读书笔记的情况下,一些细节直接上网搜索就能很快的获得了。这么一份笔记才是我们最重要的智力资产啊。不管硬盘上放了多少的电子书,如果没有自己的读书笔记也没意义

三种读书笔记:

结构笔记:这本书是什么样的书?整本书是讲什么的?作者借着怎么样的整体架构来发展他的观点或者陈述他对这个主题的理解? 这种笔记一般是在做捡视阅读时做的。

概念笔记:作者的观点到底是什么?作者对主题表达的一些观点和相关的概念,以及自己对这些疑问的答案。这种笔记需要在分析阅读的层次才能完成。

辩证笔记:这种笔记是针对一场讨论情景的笔记,可能会涉及同一主题的很多书和不同的作者,就某一个主题,把所有的疑问和陈述记录下来。这是主题阅读才能做的笔记。

主题阅读的步骤

0.运用检视阅读的技巧,快速的获得和感兴趣的主题相关的书目

1.在这些书中找到相关的章节,因为对主题阅读来说,主题才是最重要的,而不是完整的去阅读每一本书

2.带领作者与自己达成共识,这一步非常的难,因为值得阅读的书的作者都是比我们自己高明的人,我们会倾向按他的思路走,但是在主题阅读的时候,这样就行不通了,因为每个作者的思路是不一样的,我们必须以自己的概念来统一这些不同的作者的概念。

3.厘清问题,实际上就是建立我们的主旨,一般来说,可以提出一些可以把我们的主题说的比较明白的问题,然后让这些作者来回答这些问题

4.界定议题,在上面一步中,我们提出的问题可能有一些是很清晰的,而所有作者都谈论到了,并且是以不同的方式,那么这种问题就可以成为我们的重点议题了,就好象我们组织了一次这些作者之间的辩论会似的。

5.分析讨论,在把值得讨论的议题都界定出来之后,我们就可以进入到最后一个阶段了。对这些问题的分析讨论。首先是对这些议题的不同答案进行分析,需要清晰的按顺序呈现不同作者对这些问题的观点,并且尽量做到辩证的客观。

时间管理与GTD

我之前写过自己实践GTD的方法,这里再说一下现在遇到的问题:

反思一下最近半年的GTD实践。发现还是没有真正利用好这个方法,时间管理和任务管理上还是有很大问题的

1.任务收集的问题,对任务的划分不够细,导致执行起来可操作性不强

2.任务没有按时间进行分类,地点分的也有问题,导致不能有效的安排任务的执行

3.没有根据自己的状态选择合适的任务,不同的时间段效率是不一样的