Sunday, June 26, 2011

It's still raining in this Beijing without you - by Jiang Mei

After the rock song "Good Night, Beijing" from Wang Feng's Baojiajie, let me try a softer one this time - a folk song from the 80s: It's still raining in this Beijing without you.

It's from Jiang Mei, a female singer, I don't think she's well known, I don't even know how she looks (unlike many shining stars always trying to grab your eyeballs), but this song really touches my heart. Hope you will like it.

(p.s. it's been a challenge to decide what the proper tense is, eventually I picked "present". I imaginarily think this can bring the feel of a "happing story", don't laugh too hard if I'm wrong :)


It's still raining in this Beijing without you
My heart goes into the dim street lights

Passing crowded strangers, trying to pass crowded minds
While you are not around, where your tenderness is

I open my diary at this night without you
Pages of blanks, are all waiting for you


Love's beauty, blooming in fading dreams
Sadly it turns into tears and fading sighs

Morning breeze blows again, I open my eyes
It's still raining in this Beijing without you



Original lyrics

Video (a flash MV by fans I believe)

Saturday, June 25, 2011

Mac 下以虚拟机为 "沙盒", 构造 "洁癖式" 开发环境

(归档自 "每日阅读" 上的该贴)

"苹果下的开发" 可以这样分成两大类:
  1. 苹果自身技术相关的开发,如 iOS app、Mac app,这些装上 XCode 就统统搞定
  2. 非苹果特定技术的开发,如 Python/Django, RoR,这些会需要到安装配置一些开源的工具等等
尽管后者可以通过如 Homebrew, MacPorts 之类的包管理器(回想 Gentoo 的 portage!)来管理安装开源的东东到 Mac OS 里,我还是更喜欢洁癖型的玩法:
  1. 保持我的 Mac 环境 100% 干净,不装任何不需要的东西
  2. 应该有个环境让我能:
    • 随便捣腾
    • 不爽了可以随时 revert
虚拟机成了完美方案,它相当于提供了隔绝于 Mac OS 的一个沙盒,里面跑着总共不过 1G 大小、内存分配 128M 的纯 shell 界面的 debian,但拥有所有我必须的工具,如 screen/vim/git/svn/wget,python 环境等。

首先 debian 的 apt 包管理器让我可以随便捣腾各种工具,例如不久前一次大瘦身就是把以前因项目需要而装的 Java/PHP/MySQL/Apache/Drupal... 统统干掉了。

虚拟机提供快照功能,让我可以保留几个配置好的状态-例如刚装完的无比干净的 debian 做一个快照,然后装了常用工具后一个快照,需要时,哪怕你装了 n 多东西,一键就可以回去。

同时,Parallels 的虚拟机工具装到 debian 里后,你可以很容易地把 Mac 的目录 mount 到 debian 里,成为一个自然的目录!

  1. 所有的实际数据,如你宝贵的源文件,统统放在 Mac 的目录里,然后 debian 里编辑开发
  2. Time machine 自动备份所有东西,自然包括你的代码。所以你捣腾坏了虚拟机、恢复了快照,数据也高枕无忧
  1. 启动 debian 虚拟机,最小化或丢到别的 Space
  2. Mac 里打开 Terminal,ssh 到 debian
  3. 运行 screen + vim 开发 Python/Django
  4. Mac 里用浏览器访问 debian 里的 http 服务
唯一多了的麻烦就是把一个 Linux 装起来,不过,在我们公司里的话,可以直接把我的虚拟机拷过去,超级省事。

Monday, June 20, 2011


"工程" 思想指导 "流程" 实践:
  1. "重用": 做任何事情时都应有意识让此次 practice 成为将来的模范/模板
  2. "优化": Keep it simple, 相信简单的东西最有力, 最有生命力. 追求/探索 best practice, 然后 share 给所有 team

Sunday, June 19, 2011

Good Night, Beijing - by No. 43 in Baojiajie Street

So you want to learn Chinese? Singing a Chinese song is a good show-off to amaze friends. Just like many of us like to sing English songs while learning English.

But, Chinese pop culture might not be as "pop" as other well modernized areas', like Japan, Korea... You might have difficulty picking the "right" song to start.

In this blog series, I'm going to start (slowly) translating some Chinese songs I love, so you can really understand them before investing your energy.

Of course they are picked based on my taste, but I do have a pretty good taste :)

OTOH, though I'm pretty confident that my Chinese is well above many other Chinese people - thanks to my extensive reading/writing history - my English is still at early stage, so please bear with me if any grammar errors or dumb translations.

Here comes the first song: "Good Night, Beijing", by Wang Feng's old band "No. 43 in Baojiajie Street".


Good Night, Beijing

I will fall asleep in tonight's rain
Along with the humming road roller
Along with the cracking wounds
Fall asleep in tonight's rain

Good night, Beijing
Good night, all you sleepless people

Wind will be blowing north in midnight's ringing bell
Along with the begging boy on the street
Along with the broken tire by the side
Blowing north in midnight's ringing bell

Good night, Beijing
Good night, all you sleepless people

Good night, Beijing
Good night, all you lonely people

I've been through many sleepless nights
Falling into the city's gigantic illusion
Falling into a deep hole of my own
Been sleepless on the edge of insanity

Good night, Beijing
Good night, all you sleepless people

I'm sensing my growing tiredness
Hearing the sobbing violin through neighbor's wall
Drinking the meat soup cooked by this world
I'm sensing my growing tiredness

Good night, Beijing
Good night, all you sleepless people

Good night, Beijing
Good night, all you lonely people


Original lyrics:

Original version (note: black screen mostly)

Live version:

Saturday, June 18, 2011

推特集 (2010/05)

  1. We engineers are darn stubborn problem solvers!
  2. You will get paid for what you've done - some ppl want that, some ppl don't.
  3. 北京的夏/依旧地炎热而干燥/路上这许多陌生的面孔/仿佛能和另一个十年继续擦肩//溃烂的会隐隐作痛/掩埋的会渐渐升腾//热浪将不期而至/袭击我们纤弱躯体间的罅隙/燃烧所有可燃的/躁动所有漠然的
  4. 所有代表权力的符号, 都有凌驾一切规则的许可, 扰民, 犯民, 辱民, 戕民.
  5. Bye Jack! I've been following you since I'm 22, now I'm almost 30!! #24Finale
  6. Beat the market means you have been statistically doing better than most of the people most of the time, not once or twice.
  7. Positive attitude makes bad things not that bad, gives you breath to look at new possibilities.
  8. Trees are quiet, they grow, they suffer, they die, they just don't speak.
  9. 遇到靠谱的人不容易, 能和靠谱的人共事不容易, 能和靠谱的人完成点靠谱的事更不容易.
  10. 难题解得好是聪明, 分数拿得多是策略.
  11. Trade both side, trade like an emotionless robot.
  12. 当人与人发生矛盾, 第一反应是联想到权和钱, 关系和人情; 而非理和法, 制度和步骤 - 在这样的社会, 弱势的你会没有怒气怨气, 不感到痛苦压抑?
  13. You don't have to be the smartest, just be honest to have smart guys be honest with you.
  14. 最美, 最长, 最强; 最豪华, 最成功, 最和谐… 他们以权和钱构建最多的最, 最有面子的最; 唯独不见最有人性, 最具良知.
  15. 在一个集体凌驾于个体的国度, 你我都是被统计的对象, 都是小数点后可以被和谐的精确度.
  16. Observe/analyze/understand/express/influence.
  17. If you ignore/disrespect someone's past/achievements, how could you know what makes him today and explore his future? #hr
  18. @ohblog 支持/尊重台湾人为自己的过去/现在/未来做出判断和选择!

推特集 (2010/06)

  1. 天下没有怕 QA 的开发团队,只有尊重 QA 的开发团队. - "叶问" 之开发版.
  2. 尊重, 信任, 理解 - 才能培养出好团队, 好环境.
  3. Try, before doubting.
  4. 新中关午餐遇好心人帮捡端盘子时不慎落地的一张餐巾纸, 心里特感激; 如果这社会里都是这样人, 那该多和谐!
  5. 看着校园里孩子们齐刷刷地立正稍息喊口号, 总会一身冷汗地想到他们有天会被一台巨大的机器以各种名义齐刷刷地收割.
  6. Luck is something good happens before you run out of dollars & patience. #startup

推特集 (2010/07)

  1. Know the "old" things before introducing new ones.
  2. Project management: from thrilling dream to sweaty execution.
  3. A product defines a way of thinking.
  4. 人道主义就是: 看着至今仍隔绝于世, 苦难深重的朝鲜人民, 你很希望自己能做点什么去启发他们帮助他们, 尽管非亲非故, 毫无政治企图.
  5. 十扇紧闭的门, 消极者看到的是满眼的拒绝与无奈; 积极者看到的是十种可能在等待自己去叩开.

推特集 (2010/08)

  1. 以身作则,以真换诚。
  2. Having somebody hate you is not a bad thing, at least it indicates that you are truly holding something.
  3. I want every teammate to grow up like a giant, so someday we together could build something great.
  4. Why money is made by sacrificing users values?
  5. Understand before suggesting.
  6. No email is good news!!

推特集 (2010/09)

  1. A tool should be built/used only if it simplifies things.
  2. Believability is the essence of story telling, movie making, animation, design and many others.
  3. 一个害怕自己历史与现实的政府会有怎样的未来? What future to expect for a government who's afraid of its own history & facts?
  4. Men: true/false; Women: love/hate.
  5. Tell the story slowly/patiently/elegantly/detail oriented... let audience hv time 2 breathe, but take their breath away at the right time.
  6. @jinguoli 建立好公司仍然是必须自上而下对理想对价值观有一致的理解和认可;一要找志同道合的人,二要把人当志同道合的用;@wenbob 的看法应源自现实中常是甲方不会待人用人或是乙方不善诚挚认真。
  7. To dream, to shape, to lead, to execute.
  8. Lots of us are doing things base on the assumption that "I'm going to live long, my kids are going to live well".
  9. 30 是道坎, 前面许多的他们半推半就地过了; 后面许多的你们前赴后继地来 ;-)
  10. Vision: strengthens hearts, tightens people, clears mess, resolves conflicts.
  11. 领导 - 习惯了别人给他绕道让路的动物.

推特集 (2010/10)

  1. How to know your users? Be with them, listen to them, want the things they want, feel the pains they feel.
  2. Spitting at a giant doesn't make you a giant.
  3. When lower your tone, you'll hear more; when lower your head, you'll learn more.
  4. If you insist/imagine you are better than anyone, you will lose any chance to learn, to grow.
  5. Overconfidence makes one stubbornly close-minded & unreasonable.
  6. 断章取义是如此节省脑力又是如此能煽动占人口大多数的简单思维者;这个系统里被简化成"人民"的一群,如此轻松又是如此饥渴地饕餮着传声筒那端不时吐出的皮毛肉屑,群情激昂;看不见悟不到这台巨大的机器屠宰时那具象的、绵长的、摧筋断骨细致入微的疼痛、血腥和恐惧。
  7. 中国媒体:捂着耳朵,蒙着眼睛,嗅着铜臭,昧着良心,张着嘴巴,说着瞎话。
  8. 反日青年们砸国人买的广本,说明一部分人反日是口号,仇富是心理;各种情绪积累太多太久了,就被引导着乘机着宣泄下。
  9. 凤凰卫视就一港版CCAV,好在有个别节目的个别人的个别言论还值得看看。
  10. hard, before you are too "high ranking" to get your hands dirty.
  11. It's the details that make things sophisticated, enjoyable & fascinating.
  12. Matured means you are starting to understand that there are many details of execution from dream to reality.
  13. Having too many private/secret messages is an indicator of likely unhealthy communication.
  14. Work hard, before you become too old and too lazy.
  15. Tools are always needed for breaking boundaries, connecting people, enhancing communications.
  16. You will loose your ground when you are too used to being at the top.
  17. 越无知,越愚昧,越隐忍;越隐忍,越冷漠,越残暴。
  18. A day worths remembering, hope it's day 1 of all the bright days to come; hope we no longer suffers after 99 yrs of struggling. #liuxiaobo
  19. Soup has layers: some are light & clean, some are bold & thick, amaze you with one taste after/within another.
  20. If you don't learn by self the easier way, someone will teach you a lesson the hard way.
  21. To perform, to manipulate.
  22. Focus on different details at different stage.
  23. History takes time to happen, a better time is yet to come.
  24. He who keeps constantly thinking will reach mental places others never been, some are fascinating, some are terrifying.

推特集 (2010/11)

  1. 选举,至少可以淘汰掉不少长相官僚丑陋、凶神恶煞的,对整个队伍是一个重大的形象与面子提升,媒体上露脸时也赏心悦目些。
  2. 赚足了大块的面子, 毁够了细处的人性.
  3. 其实, 脱下制服放开头衔的你们, 也是有血有肉会哭会笑的人哪.
  4. 瓦解民间一切可能的信仰和追求/团结和力量, 保持其一团散沙的状态, 好处不言而喻: 只有在沙漠里, 才能无风时安定和谐一片宁寂; 起风时风舞狂沙卷哪往哪. 绿洲那边纤弱细小但郁郁葱葱的生命们, 只剩对大自然壮丽威仪的感慨惊诧了.
  5. U will have different types/levels of enemies, some're good & smart, some're bad & dumb; build a team to handle, good for good, bad for bad.
  6. viral means not only spreading but also copying/mutating into a phenomenon/trend, until global acceptance, becomes part of cultural language
  7. No matter how hard you pretend, your bad habits are murmuring who you really are; so strive to build good habits from the beginning.

推特集 (2010/12)

  1. 天朝:已过未过,将来未来。
  2. 1. Follow the right guy; 2. Prepared to be worth being followed.
  3. 1. How many problems known to us? 2. How to cover each of them with what solutions? 3. With what reasons a solution is picked/decided?
  4. Patience is your friend, he comes and goes; you will make some differences only when you make him stay.
  5. "What if I can easily..." is where great ideas come from.
  6. 不喜欢去医院或政府机构的一大原因:那里通常是让你感觉自己最接近畜牲的场所。
  7. A big picture is always needed so you won't get lost while struggling with day to day details.
  8. One day, your dream becomes fulfilling other's dreams.
  9. 天朝税收:取之于民,用之于仆。
  10. 现实生活中有太多的懒人和坏习惯让你可以跟随着去放松和放纵,不经意你就成了平庸的大多数。

推特集 (2011/01)

  1. 媒体每次试图说点什么, 就被系统地粗暴地河蟹下去. 你认为这会让他们多些恐惧还是增长些愤恨? 试想, 人嘴一张, 你就扇他一巴, 哪怕街边最孬的阿斗, 能说他没有扯开脖子跟你吼上一嗓子的一次?
  2. idea (virtual value) + execution (real investment) = true money (gain or lose)
  3. 有组织要阻止试图组织的以确保能继续控制无组织的. The organized will prevent those who want to get organized so to stay in control of the unorganized.
  4. Web design: what a big blank screen estate that you can combine every little space/pixel/color to deliver, to manipulate visitors' minds.
  5. If you don't invest for the future, you will be playing catch-up in the future, right?
  6. 五千年文化,丰富得不肖子孙可一代代如此肆意地摧残与糟蹋?
  7. Engineering: everything must be crystal clear, every small detail must be testable, verifiable, explainable.
  8. Good enough is not enough, will there be no market for a truly great product?
  9. Dream, believe, do.
  10. When able to act like professional machine, you can exploit human errors.
  11. 搬走了三座大山,迎来了珠穆朗玛。
  12. 看着孙中山/蒋介石的后人都能过得挺正常的, 颇有些感慨.
  13. 在此文艺史哲皆为政治附庸的环境里,何来孕育独立之思想,自由之精神的土壤?所有聪明的、锋利的、讽喻的、批判的…片言只语在企图前已为盛世和谐,胎死腹中。也难怪春晚这符号性的舞台上有的只是歌功颂德装疯卖傻罔顾左右而言他的嬉皮笑脸一场戏。
  14. Kids are kids, their laughs are laughs, cries are cries; adults are not adults, their laughs could be laughs, cries could be cries.
  15. 一个美国大兵从敌后被救回,感谢的顺序为:上帝,家庭,国家。
  16. 早上看段 TED, 白天读圈 Feeds, 公车学句 Japanese, 睡前啃本 eBook - iPad 式好好学习, 天天向上.
  17. CEOs are those who can always think/act bright, so others can stand strong - what a tough job.
  18. Be straight, so curve differentiates; be bright, so shadow appears.
  19. Your real competitors are those who hv been working as hard as you or harder; the others are just luckier, which is not likely to last long.

Friday, June 17, 2011

推特集 (2011/02)

  1. Do you have the capability to envision the future, and stick to it with great courage, patience & persistence?
  2. A "good" piece of information is one that provoke curiosity/thoughts/talks between people.
  3. If a design "looks" complex/complicated, it could be an early indicator of failure.
  4. Design is about finding/evolving optimum solutions for problems.
  5. 日本的牛奶养起了国民的平均身高,天朝的牛奶喂残了花朵的基本健康。这些狗官奸商们真个八嘎亚路地不怕来世报应。
  6. We are good at consuming/processing graphical info.
  7. Design is about giving out pieces for user to make up a whole story. Wrong pieces selected will misguide user to unintended/broken picture.
  8. 真正解放了的人,是有爱有恨、有喜有悲、能怒会怨的人,而非一直和谐地笑;如同解放了的女人的脚,才有美腿宜人、丑脚驱鬼,而非一色的三寸金莲。
  9. Imagine what it should be in the future; plan w/ acceptable compromises. If none, wait 4 the right fit instead of delivering sth crippled.
  10. "Invest" is betting what the future will be, not what already is.
  11. 同志一声荡九州, 惊雷未下龙蛇守. 埃及烽火连天碧, 长城内外别样红. 童鞋应有惊天志, 南墙不破不回头. 春来百花枝头俏, 一览山河醉重楼! //胡诌一首, 新春快乐 B-)


四肢整洁 不思劳作


两首, 给她





2007.01.02 11:37:10






2007.01.02 22;09:08











因此空空漠漠, 不浮不沉







MP3 里收藏二十二个电台

陪大家去踢球, 负责后勤与看球...





(旧文) 一个好的工程师应有的特点

怎样算是一个好的工程师? 做过工程的朋友想必都有自己的想法和标尺. 这份文档里我提供一些基于自己的经验, 观察和思考之后的心得小结, 欢迎指正 :)


  • 提问前做好功课: 
    • 精读官方文档 (像我们华美汉盛大量使用开源技术, 可能的话, 自己看看源代码), 通常文档里有你想要的各种答案. 而且像 php/mysql 那样的站点文档都让用户可以直接参与讨论, 在这些讨论里有大量的有用的实例, 阐释, 经验可供释疑解惑
    • 善于搜索 - 懒惰的话, 直接上 google. 如果希望更有目的性, 建议先在其官方的论坛/邮件列表上搜索 (像我这个 gentoo 用户, 遇到 gentoo 问题的首选是上其官方论坛, 大部分的问题都能通过论坛的搜索得到答案; 又比如 django, 我通常在其官方邮件列表里搜索, 许多我们会遇到的问题都在这里被解答过了, 也就没必要问了:) (注: 邮件列表的特点在于发出去的都是邮件, 订阅了的才能看到, 这时我们需要一些邮件列表归档服务来协助我们进行搜索, 例如, Gmane 就提供了对许多开源相关邮件列表的归档, 可以在这里进行问题的搜索和查找)
    • 在搜索引擎里搜索时需要学会如何去 "narrow down" (缩小) 你的关键字范围. 假设你英文比较好, 那么就直接用英文描述你的问题 (或者直接拿错误输出往搜索引擎里贴); 如果英文不好, 那就先用中文关键字, 当你定位到某个帖子 (中文/英文的皆可), 可能的话, 从里面找到一些跟你问题更接近的一些关键字 (尤其是英文的), 然后以这些新的关键字带领你继续逼近答案. 例如, 之前我的笔记本在 linux 关机时硬盘会发出 "噔" 的一声, 十分异常, 于是我首先想到的关键字就是 "linux shutdown noise". 当时网上关于这个问题的讨论并不多 (现在不一样了:), 通过这三个关键字出来的资料里, 我大约猜到是因为我的硬盘是较新的 SATA 型的, 接着把它再加到关键字里, 更多的资料将我引向 kernel 中 libata, 于是 libata 也成为我的一个关键字... 最终我定位到内核的这个 bug report - 已经有人在我之前发现问题了 - 于是经过一段时间的等待, 现在, 这个 bug 也修复了. 这次搜索经历带给我很多知识, 比如我知道了声音从何而来, 因何而生, 内核又是最终如何处理这一问题. 尽管我之前对这些毫无概念, 最终我不需要任何提问就得到了问题的答案! 个人感觉是: Linux 下每个问题的发现和解决都是一次奇妙而快乐的历程! :D 
  • 提问前做好准备. 当上面的功课无法解决你的问题了, 说明你很可能真的遇到棘手的了, 那么, 我们在提问前要先做好一些准备工作, 以确保自己的问题够质量:
    • 精心准备好问题的标题. 切忌使用 "求救!!", "紧急!!!" 之类的毫无意义的, "吵闹" 的文字 (英文里切忌使用全部大写). 开源社区里许多工程师通常都在工作之余, 免费地为你做事情, 他们没有义务回答你的问题, 他们更讨厌嚷嚷的人 (工程师都爱安静, 是吧? 呵呵). 我们一定要抓住他们的一大心理特点: 喜欢有趣的, 有挑战的问题 - 因为前者可供娱乐, 后者可秀技能 :) 所以, 我们得让自己的问题变得很有吸引力 - 这就要求我们得做好前面说的 "功课", 使得我们对问题有深刻的理解, 然后通过精简到位的言语, 把问题总结成一句话, 问到点子上. 
    • 提供充分的, 但不冗余的信息. 在我们准备好 "诱人的" 问题标题之后, 就得把问题的内容填充实了. 其中要有条有理地说清楚自己的问题, 如果是 bug 的话, 务必描述清楚完整的重现步骤 (最好自己按这些步骤重现两次以上!), 还有相关的可能有用的系统环境信息, 程序出错时的日志, 命令行的 traceback, debug 程序抛出的信息... 切记把无关紧要的信息清理掉 - 这需要你的知识的判断, 通常各种日志或出错信息都是很长的, 而关键的, 便于定位问题的通常就是某几行 - 例如 gentoo 里 emerge 出错的日志, 通常是倒数 10~15 行内就带着关键原因 - 我们需要做好 "噪音" 信息的过滤工作 - 这也是我们要做的功课 - 信息提供得越精准, 问题得到快速解决的可能性越大. 最后要把自己曾经做过的努力和研究的 "路径" 给提供上 - 这表明你是个 "勤奋的蛋" - 有经验的工程师会喜欢这样的, 而且通过你的 "路径", 通常有经验的工程师可以快速给你指点正确的方向.
    • 怎样算是一个好的问题? 很简单, 好的问题让人一读就懂, 如果你的问题出来之后, 别人还得再找你反复问各个细节, 那么就是一个烂问题 - 别期待别人会免费地为你的问题来回折腾 :)
  • 公司中如何提问? 在公司中我们有个和在网络上生存不同的特点: 时间限制 - 公司项目中, 每个任务通常都得在一定的时间内完成, 不可能给你那么长的时间去慢慢查找/研究. 因而, 一旦我们遇到某个问题, 在着实做了一定研究之后, 仍旧毫无头绪, 这时一定要尽快寻找别人的帮助. 同时, 我们的 Senior Engineer 通常不会直接 "喂" 你答案, 更多是告诉你方向在哪里, 然后需要你通过自己的努力和勤奋, 最终学会解决问题之道 :) 根据我的观察, 经过几次这样的训练之后, 每个工程师最终都能成为自己解决问题的高手 :)
  • 提出问题的同时, 提供你思考过的可能的解决方案 (别等着别人喂你) 
  • 延伸阅读: 经典的 "How To Ask Questions The Smart Way".

2. Open-minded (思想开放)

公司的特点要求我们在有各自的专长之余, 还需要具备很强的学习欲望, 学习能力, 随时掌握新的知识技能. 在遇到新事物新技术的时候, 我们应该有足够开放的思想去接纳它, 学习它, 这里有关键的几点:
  • 先接受 - 相信比你有经验的人的判断和选择
  • 评价前先做足功课 - 先把新东西毫无成见地学习透了, 再和已知的, 自己擅长的技术进行比较 (@TODO: "要喝我的茶, 先得把你杯里的水倒掉"; 切忌以旧套新, 生硬理解)
  • "用什么说什么".

3. Eager to learn, be lazy, be creative, be patient, fear not for failure, be reliable/predictable

4. Good documenting for solved problems (don't repeat your mistake)

5. Always looking for better solution - I can do it better next time!


(旧文) SVN Practice

完全无 SCM 知识/经验

SCM Definition from wikipedia
Software Configuration Management (SCM) is part of configuration management (CM). Roger Pressman (in his book) Software Engineering: A Practitioner's Approach, says that software configuration management (SCM) is a "set of activities designed to control change by identifying the work products that are likely to change, establishing relationships among them, defining mechanisms for managing different versions of these work products, controlling the changes imposed, and auditing and reporting on the changes made." In other words, SCM is a methodology to control and manage a software development project.
从上述引文最后一句我们知道: SCM 是用以控制和管理软件开发项目的一种方法学. 它本质上只完成一件事情 - 管理变更及变更间的关联与关系.
在公司的实际开发活动中, 我们使用了以下工具以完成 SCM:
  • Subversion: 源代码管理软件 - 从源代码层面上对变更进行管理 (lowest level).
  • Trac: 项目活动管理软件, 它提供以下主要功能
    • Tickets: Trac 扩展了像 Bugzilla 这样的软件缺陷 (bug) 跟踪系统中 "Bug" 的概念. 在 Trac 中一个 Ticket, 不单可以是一个 bug, 还可以是一项功能任务, 一次功能增强的需求. 总之, 所有具备 "创建/优先级/指派/处理/解决/关闭" 这样模式的生命周期的事件项 (issue item) 都可以通过 ticket 提供统一的管理 - Ticket 从软件开发中的事件/活动层面上对变更进行管理 (medium level).
    • Wiki: 具备协同创作/版本控制/交叉引用等功能的 wiki 为软件开发活动带来了极大的便利. 在实践中, 我们主要使用 wiki 完成如下任务: (highest level)
      • 生成/管理项目文档 (需求文档, 测试文档, Release Notes... 在文档中, 我们可以通过 Trac 的交叉引用功能在 tickets 和 changesets 之间轻松生成关联链接, 以便跟踪每个具体的事项都涉及哪些层面上的变动)
      • 生成/管理技术文档 (开发过程中针对具体技术的一些知识积累, 分享)
    • 其他: Trac 还提供各种其他功能协助我们管理项目的变更及其相互间的关系:
      • Timeline: 这里是我们所有项目开发活动的鸟瞰图, 它按时间顺序列出 Ticket 更新, Wiki 变动, 源代码提交等活动 - 我们从这里可以快速知道所有变更.
      • Browse Source: Trac 提供了方便的 Web 界面供我们浏览代码仓库中的文件. 我们最常用的功能是浏览一个 Changeset (变更集), 它可以列出某次提交中涉及的文件列表, 以及高亮显示每个文件的具体变动. 我们还可以用它来查看指定 revision 的文件等.
综上所述, 我们公司通过 Trac/Subversion 这两大工具, 将最高层的项目需求, 到中层的任务/缺陷, 以及最底层的源码所涉及的一切变更都管理起来了.
下面我们先就每天都要打交道的源代码管理软件 Subversion 进行了解, 看看在公司的日常开发中, 我们都用到 Subversion 的哪些方面.

用过 VSS

不少 Windows 下的开发人员对 VSS (Visual Source Safe) 并不陌生, 这是微软自己推出的卖钱的源代码管理软件; 而接触开源软件较多的人则可能更常听到 CVS 和 SVN (Subversion), 它们则都是免费的, 源代码开放的自由软件, 开源世界中大量的项目都是通过 CVS 或 SVN 进行源代码管理的.
SVN 是由 CVS 的原作者在总结 CVS 的长短之后的一个新的实现 (?). 我们下面着重讲 SVN. (@TODO, more refs)
SVN 和 VSS 都具备源代码管理软件基本功能, 诸如 check out, check in, diff, update. 而由于两者诞生的环境的不同, 使得 SVN 和 VSS 在 check out/modify/check in 这一主要功能上有不同的实现模式:
  • VSS: lock -> modify -> unlock
  • SVN/CVS: copy ->  modify -> merge
可以看到, VSS 在 check out 一份代码的时候就给代码加锁了,  直接 "断绝" 掉多人同时修改一个文件的情况; 而 SVN 则不是, check out 的代码仍然可以被多人同时修改, 各个改动间自动进行 merge, 如果遇到冲突 (例如两人同时改了同一行代码), 则需要开发人员自己进行交流, 最终手工 merge 彼此的变更.

VSS 和 SVN/CVS 在锁定和非锁定上的处理源自应用环境的不同. 
VSS 产生于微软这样的 close source 的企业, 而在这样的企业里, 开发软件时, 团队成员间通常就在一个办公室里, 文件的锁定/解锁的协调相对容易, 任务也许可以真的分配到一个人就在一个文件上工作; 但, 在开源世界里, 开发人员来自世界各地, 在世界的每个角落/不同时间里参与着项目的开发, 如果你今天在北京把一个文件锁住, 晚上没做完, 没提交, 然后睡觉去, 我们美国的同志们若也参与这个功能的开发, 那么在北京时间凌晨 2:00 的时候, 你尚在美梦中, 而那边已是早上 9:00 的工作点, 这样就没法对这个文件进行修改, 只能等到你呼呼睡醒, 北京时间 9:00 上班, 而美国那边已经是 16:00, 浪费大半天, 该下班了...

那么我们在公司里, 是不是其实应该很适合用 VSS 呢? 举个简单的例子就知道不行了 - g20 项目中我们有个 g20.js 的文件, 所有 ajax 相关的功能都在这个将近 6K 行代码的文件里完成, 我们的同学们经常需要同时并行着做两个以上的功能, 这使得我们不可能采用锁定的模式. 而 SVN 的拷贝-修改-合并模式并没有在现实中带来想像中的那么多 "冲突" - 只要功能拆解得当, 不会出现两个人同时修改同一个文件同一行的情况, 最常见的情况就是你在 200 行后加了个 function, 我在 300 行后编辑了一些条件判断.

关于两种模式的深入比较, 请参看 SVN 的官方文档.

用过 SVN

在实际使用 SVN 时, 我们需要养成一些良好的习惯, 它们有助于 PL/PM 更好地得到项目信息, 减少不必要的询问/确认这样的交流代价; 也让团队成员之间可以明确地知道彼此的开发活动情况.
  • 开工前先 update. 在开始我们一天的开发活动之前请记得 svn up 一下, 以取出代码库中最新的版本. 因为每天你的团队伙伴们和你一样都在代码树的不同指节上做着开发, 一天结束之后, 代码库里都会增加很多修改, 保持自己本地拷贝的新鲜度, 也许昨天存在的某个影响你的 bug, svn up 之后就已经修好了.
  • 提交前先 status/diff. 每次提交前务必确认自己这次修改所涉及的文件/代码行的变动是 *确切的, 必须的, 没有冗余的*. 我们可以用 svn status 列出所有被修改过的文件; 然后以 svn diff 逐个查看修改过的文件中的代码行变动 *是否确实目的明确的, 有意义的*, 我们有时会不小心加多一个空格, 敲多一个换行, 这在 diff 的时候同样会被列出来, 这些 "变动" 属于不必要的 "噪音", 是不应该被记录到源码库里的, 我们在发现这些 "噪音" 之后就应该把它们清除出去 - 手工恢复原状即可.
  • 细粒度, 经常地, 有目的地提交必要的修改. 我们每次修改通常都是有明确目的的, 为了新增一个功能, 为了修复一个 bug. 在对代码进行变动的时候, 我们应该保持完成一个目的之后就进行相应的提交的习惯, 要避免把好几件事情都做了 2 ~ 3 天之后再一口气提交这样的做法 (我们会遇到大量代码需要变动的情况, 例如重构, 这时要用 svn 的另外一个功能来完成: branch, 后面会对这个进行说明). 这样通常会使得你的提交过程痛苦一些, 因为这些天已经有了不少变动, 和你的代码产生冲突的机会也递增了. 另外, 这样会使得你的 check in message 变得不好写, 我们下面来说这一块.
  • 提交时一定要写 message. 所有源代码管理软件在提交时都提示 (而非强制) 你要写一段文本, 藉以对这些代码变动进行必要的说明. 我希望给大家建立一个强烈的概念 - 这样一段文本对项目管理非常非常重要, 千万不要偷懒不写或随便写! 这段文本的主要目的就一个: 说明我为什么做这些代码变动. 当每个 changeset 都有对应的 message 的时候, 作为项目的 PL/PM 就可以轻松地从 Trac 的 Timeline 上知道每个团队成员都在为什么目的做什么变动. 我们再用上  [1234] (changeset), #4321 (ticket) 这样的格式来利用 Trac 的交叉引用功能, 就能达到更好的效果 - PL/PM 可以通过 Timeline 知道哪些 Changesets 之间有关联, 哪些 Changeset 完成了哪些 tickets, PL/PM 可以不用来搔扰你, 打断你的思路就可以知道任务进展情况了; 再者, 写了 check in message, 也方便我们开发人员自己在必要的时候可以快速搜索/定位一些 changesets, 我们有时想回溯/确认某次修改时都做过什么事情, 是否因那次修改引入了某些新的 bug... 这时, 我们在每次 ci 时提交的 message 就会帮到我们, Trac 会对它们进行索引, 我们随时可以通过 Trac 的搜索, 快速找到可能的 Changesets; 对 PL/PM 来说, 这些 message 还有另外一个价值, 那就是在为客户写 Release Notes/Change Logs 的时候, 可以很容易地从这些 message 中整理出来, 而不用回头再搔扰开发人员, 多余地确认你做过的事情. (svn check in message 我们还有自己的约定, 这个另外专题讲述)
  • conflicts 出现时, 务必谨慎地, 细致地进行手工 merge/resolve. SVN 的 copy-modify-merge 模式通常不会带来什么 "麻烦", 我们做 svn update 的大部分时候都会看到自己刚改过的, 尚未提交的文件前头有个 G, 这表示 SVN 聪明地给你自动 mer[G]e 了别人的更新和你当前的改动. 当然, 我们始终会有遇到 [C]onflict 的时候. 但只要遵循了之前的细粒度, 少量的, 多次的提交习惯, 这冲突一般都在 < 20 行内, 很容易可以手工合并的. 遇到冲突时, 我们一定要要非常留心: 千万不要把别人辛勤劳动的结果给覆盖了. Conflict 是正常的, 可轻松解决的, 不存在别人的改动给自己带来任何麻烦的说法. 解决 conflict 很简单, 我们只需打开处于冲突状态中的文件, 找到类似这样的地方:然后做出你的技术判断, 看看到底是将两个块合并, 还是择其一而用之, 或是两部分都改动, 最终合并出一个结果. 通常这时候我们还需要和做了 revsion 2 变动的团队成员进行沟通, 确认他的改动的意图 (你也可以直接看 changeset 的 check in message ;), 确认这部分的合并方案.
    有人可能会好奇, 为什么 SVN 这时就这么笨了? 它为什么不直接合并两个修改部分? 其实, 能自动合并的部分, SVN 已经尽责了, 面对这种两个变动发生在同一处的情况, SVN 认为, 这时候该交给更聪明的人类来解决了 ;)
    在我们手工细致合并完毕之后, 记得 svn resolve 这个文件, 然后做 svn ci 即可. 
  • svn config. 我们看看一些常见的 svn 的相关配置.
    • EOL; (@TODO: Cheng help me with this part?)
    • ignore: 我们在 svn status 的时候, SVN 会把未加入版本控制的文件项列出来, 然后前面加上 ? 号. 当我们有很多像 .pyc, .tmp, .o 文件的时候, 这些会对我们查看全局的变动情况产生 "视觉噪音". 我们可以通过配置让 svn 无视它们的存在 - 编辑 ~/.subversion/config, 找到 global-ignores, 然后把你不想见到的非版本控制中的文件都列上去, 例如: global-ignores = *.swp *.o *.lo *.la *.pyc sess_* default_* (@TODO: how to windows?)
    • proxy server. svn 还可以配置代理服务器, 编辑 ~/.subversion/servers, 在最后的 [global] 部分里加入两行即可:
      http-proxy-host =
      http-proxy-port = 8888
  • branch, merge (rollback)
    • branch: 我们在进行源代码管理的时候通常还会遇到这样的需求 - 一段时间内需要对原有代码进行大量的改动, 而且这些改动可能会让已有功能不能工作 - 例如重构. 当我们遇到这种情况的时候, 就需要利用 svn 的分支功能, 将现有代码拷贝一份出去进行单独的版本管理. 在那个分支上, 我们就可以进行大刀阔斧的改动, 而不必担心影响 trunk 上已有的, 甚至已经给了用户的代码的稳定性. 
    • merge: 我们在一个或多个 branch 上的变更, 到了一定时候, 是可以互相合并的, 包括 branch <-> branch, branch <-> trunk. 例如我们现在对 g20 代码的管理方式是, 到了一个版本, 我们就做一个 branch 出去 (例如, alpha-1.0, alpha-2.0 ...), 而 trunk 保持活跃的开发. 这些独立分出去的代码枝就拥有了自己的生命, 必要时, 我们可以在 branch 上为客户做一些小的修改, 满足一些他们的新需求, 然后再 merge 回 trunk 或者不 merge - 取决于具体情况.
      merge 除了做分支间的 "大动作" 的合并之外, 还可以做单个文件的 revision 之间的合并, 我们可以利用这个功能, 在提交了错误的 changeset 之后, 用 merge 来 undo 你的修改, 例如, revision 1234 是我提交错了的, 那么, 我们只需 svn merge -r 1234:1233 就可以 undo 了, 当然, 最后还需要 svn ci 一次 :)
  • use google code to practice: 要练习 svn 的各种命令, 可以用我们专门为学习 svn 创建的一个Google Code Project 来无风险地练练, 或者自己装上 subversion :)
  • GUI (小乌龟, esvn) (@TODO: Cheng help me with this?)
  • 常用简写/参数:
    • svn ci = svn commit 
    • svn st = svn status
    • svn up = svn update
    • --dry-run: 假装跑一次, 让我们知道什么文件会被更新. 我们在 svn ci, svn  up 等命令的时候可以加入 --dry-run 这个参数, 以便测试实际哪些文件会被动到. 

SVN Check In Message Conventions

 Svn check in format:
<Prefix>: <message goes here>.
The check in message should be short but straight forward for others to understand. We need to ensure that: other developer or the project lead know exactly what you did in this changeset once they read your message, and they don't have to ask you for further explaination. (@TODO: benifits)
  • ADD (Add): adding directories, files
  • BRN (Branch): branching
  • CMT (Comment): comments added to code
  • DEL (Delete): removing directories, files
  • DOC (Document): document related changes
  • FIX (Fix): bug fixing
  • FMT (Format): Code formating changes 
  • INI (Initial): initial import of a project
  • MRG (Merge): merging from revision to revision, branch to trunk, etc.
  • REV (Revision): stable/small changes
  • WIP (Work In Progress): not yet finished changes, for example:
    • you need to check in your code before other developer could work on it for a feature;
    • you need to check in since it's 18:00, you would like to work on it tomorrow, or
    • you need to check in before making to many changes

How to Deal With System-specific Configuration Files

在一个项目的代码中,通常有数个配置文件也被置于版本控制之下。然而,这些文件的特点在于,其中有些配置项在每个系统上是不一样的,例如,每个开发人员 checkout 的目录就不一样,部署到外部服务器上也不一样,如果这个文件仍旧和其他代码文件一样对待,首先在 ci 时就得时时提醒开发人员不要提交你的本地定制,二是每次 svn stat 都会看到配置文件前面有个 M 这样的“噪音”,三则一旦不小心提交了,所有人自己的定制都面临可能有冲突的麻烦,尤其生产服务器上的更是不能随便出问题。


We typically identify files that contain system-specific configuration information, and name the versioned copies of the files with a  supplemental .default suffix. Such files contain clearly-generic values for system paths, DB connection parameters, and the like.

We then make a copy of this file without the suffix, and set up the `svn:ignore` parameters in the parent directory to ignore that file.

Let's examine this approach using a particular file from the project:


Assuming I've checked out the repository to $client's `DEV` server  filesystem, and have cd`d into app/config in the project files, here's  what the process looks like from a terminal session:

 $ svn mv ./ ./

 $ svn propset svn:ignore '' .
  property 'svn:ignore' set on '.'

 $ svn commit . -m ' is no longer under danger of wildly reverting commits.'

From here, I could continue to edit as frequently  (or not) as necessary, and the file--changed or not--will never show  up in svn status queries, nor will changes to its contents ever be  committed into the repository.



Thursday, June 16, 2011

莫联想 (两则)

真人真事, 记下一乐.


某天下班, 尾行两位结伴且衣着清凉的辣妹, 其中一位电话ing: "我要的黄瓜你买了吗?... 哦, 太好了!"


前几天去 7/11 买午餐, 一高大发福, 略微秃顶, 着条纹短袖, 衬衫下摆掖西裤皮带里, 颇有领导范儿的中年男人, 在女生丝袜的架子上来回挑了半天. 一店员 (男性) 过去, 好像和他交流了点什么, 他最终摸摸脑袋, 大踏步走了.


Wednesday, June 15, 2011



1. 简历简单得让你没问头.
2. 水分巨大. 刚面一哥们,

(1) 连 "protected" 都听不懂说不清楚, 技能上写 Java "精通". (我的英语口语算是地道的了, 念了半天 "protected", 哥们没听懂, 直到写白板上, 方恍然大悟: "你说的是保护啊!" - 英文听说读写还说 "良好")
(2) 连 "transaction" 都听不懂不理解, 技能上写 MySQL/Oracle "精通".


(1) 基础要补好
(2) 别随便写 "精通"

Tuesday, June 14, 2011






纪念 5/12 旧作,今年有感于环球时报狗屁倒灶的社论,曾 tweet:




这点故事 顿然撕开
我们 变成了不见的我 和悲伤的们


05/20/2008 公车上
02/05/2009 晚



雨水 踩着夜色高耸的宫殿 纷至沓来
路灯织就的斗篷 在风里猎猎作响
千肢百骸 万木起舞

前方 是无穷无尽的混沌


Python reload() 不会 reload 你的 django model

>> from myapp import models as mymodels
然后试图边改 django 的 models 里的类, 边调试, 以为可以不用 Ctrl + D 退出 iPython, 仅仅
>> reload(mymodels)
就能让改过的类生效, 结果无论如何调代码, 总是报一样的错, 直到把其中一个类改名后, 发现报错时还是旧名字, 才恍然大悟, 丫没给我 reload 啊...

老老实实在改过 models 后, 重开 shell.

(旧文) 小记: 三里屯苹果店换掉膨胀的电池

从某时开始, 就发现自己 Macbook Pro (late 2008) 背面的电池盖有点突出不平, 一直以为是金属受热久了, 变形了,
还自己试图轻微扭扭, 矫正下下.

直到前晚, 打开后发现几乎无法重新盖上, 才意识到: 哇嘞, 电池变肥了! 中间能看到鼓鼓囊囊的, 就是这把电池盖顶歪, 以致难以盖上的.

搜了下, 发现这是个已知问题 - "swollen battery" (06/07 年就有记录了):

然后知道国外不少用户直接跑苹果店, 哪怕过过了保修期, 哪怕没有 AppleCare, 都有成功换新的案例:


找了位 genius, 他很热情地接待了我, 带着歉意的感觉听我说完情况, 正准备要给我换, 看见我的电池是 "可拆的那种", 即最早的
unibody 的 mbp, 他说可能不能换了, AppleCare 只覆盖那些电池不可拆卸版的 mbp. 我表示不解, 他说帮我问问.

一会就跑回来了, 很抱歉地说: 确实不行.
我说: 国外都可以的, 官方论坛上很多用户都是直接去苹果店换的, 哪怕没有 AppleCare 或出了保修期.
他说: 是吗? 我问过我们的 genius 了, 他说不行的.
我说: 我很担心这个电池会不会爆炸, 威胁我的人身安全. 我知道说法是 loadCycle 超过 300 就确实不能换了, 我的只 118.
他说: 嗯... 这样吧, 您预约了吗?
我说: 没, 直接过来的.
他说: 这样, 赶紧给我您的姓名和邮箱, 我给您补约一下, 今天还有一个名额, 7:45 的 (注: 大约 10 分钟后). Genius

我写下信息后, 他很快地就跑去预约好, 还细心地把写着我个人信息的纸条还我: "这纸条您拿好, 上面有您的个人信息." 相当赞.
期间他在帮助其他客户的时候, 还不时替我关注是否到我了.

终于, 远远看到他和另一位高高的 genius 朝我这边指了指, 我就过去了. 那位 genius 拿着电池看了眼, 没说话, 走开了,
回来时手里拆着一个新电池, 递给我. 我装上后, 开机, 他说: "没问题吧?" 我说: "没问题."

启动后, 用 coconutBattery 确认电池基本信息 (loadCycle: 0 - 崭新). 很高兴,
关机时朝在旁边忙着的他道了声谢, 他似乎没听见. 机器休眠好后, 特地举他面前, 再说了声 "没问题了, 谢谢!" 他还是忙着别的,
没反应. 当时有点小郁闷 - 哥们不太 happy? 还是真的太忙? 谢你两次呢, 给个眼神确认下吧? 又或者我过敏?

不过在装好本本离开时, 之前那位 genius 仍旧热情地问了声: 怎么样, 搞定了吗?
我举起大拇指, 很开心地说: 搞定啦!

心情瞬间又好了起来 - 苹果的售后保障和服务还是让人舒心得配得上 "GREAT" 来形容的!



Sunday, June 12, 2011


路人1: …
路人2: 看啥?
路人1: 没啥…
路人2: 那还看啥?
路人1: 听说有点啥…
路人2: 到底有啥?
路人1: 不太清楚是啥…
路人3: 你们在讨论啥?
路人2: 听说这里有点啥.
路人3: 那是啥?
路人1: 还没看出啥…
路人4: 啥时候才能看出点啥?

路人n-1: (都干啥呢?)
路人n: (这~么多人, 都干啥呢??)

警: 喝! 干啥呢?!
众: 没啥…
警: 那都挤这儿干啥!
众: 想看看他们在看啥…
警: 那都看见了啥?!
众: 好像没啥…
警: 没啥还看啥?! 走!
众: 为啥?
警: 不为啥! 走起来!! 不许逗留!!!



推特集 (2011/03)

  1. 二十多年前,日本造的乐声(National)电视,让我家用到去年才以旧换新地健康退休;三十多年后,中国制造仍是低端廉价的代名词,山寨伪劣得连国民都不敢消费。这片大陆究竟怎么了?
  2. 强国断然靠的不是外强中干万年常青的人造树,而是草木竞演四季兴衰的自然林。
  3. 真不是别人对咱有偏见,而是一以贯之的河蟹洗脑,让我们在全球现代化的版图上站得真是很偏。
  4. When patterns found, brain can save energy and stay focused. #design
  5. In PRC, who destruct the most earned the most, who contribute the most suffered the most - holy legacy of the destructive communism?
  6. 在天朝,对社会破坏最大的赚最多的钱;为公民贡献最多的受最大的苦。你让社会人心如何不自私短视、冷漠逐利?
  7. 乡下的野蟑螂,体形硕大、油光黑亮,如同帝都的奥迪,一只只在家里的破墙上横行霸道。
  8. 想让对方爱你一辈子?那就用一辈子的努力让自己增值,证明你值得对方一辈子的投资。别松懈,别偷懒,别让其他价值股、潜力股挤走你占到的仓位。
  9. Stay one dimension first, carefully introduce new dimension only if it enhances understanding. #design
  10. When constrains have been properly laid out, creativity generats the artistic tension by following/breaking them. #design
  11. When find it hard to explain your idea to a none tech designer, could be an early indicator of design failure.
  12. Every design decision must be backed by at least one reason; every reason picked must be derived from one single idea.
  13. Apple taught us how great it can be after building a high quality/smart community (users/developers) surrounding a great product line.
  14. Good music touches feelings, triggers imaginations, and vibrates memories, in a wordless way.
  15. 晨,一哥从瘙痒夹杂着兴奋难耐的梦中醒来,惊见下铺数禽兽正饕餮其玉足,欲唤乘警。众人阻:哥,行行好,广播说闹盐荒了,这车厢里就您的宝脚儿最带劲儿了,让俺们再补补吧!(激灵间重口味原创,请为地球珍惜鸡蛋)
  16. Good design should be easily imaginable without using much mental energy.
  17. 人,有了自由才会活得有自尊,有了自尊才会活得有自信,有了自信才会爱及他人。国人无爱,冷漠势利,病根在此。
  18. 他们的国家, 他们的政府, 他们的高楼大厦, 他们的飞黄腾达; 他们的媒体, 他们的声音, 他们的盛世和谐, 他们的大国崛起; 他们的代表, 他们的会议, 他们的挥斥方遒, 他们的伟业宏图; 他们的给予, 他们的贡献, 他们的恩泽神州, 他们的功德千秋.
  19. Let team understand the vision behind the goals, and to achieve that, you need them w/ all your heart, they are the best you are relying on.
  20. U don't need high IQ 2 be a good lead, what u need R broader understanding of human weaknesses & longer patience to hold strengths together.
  21. 有敌我、没人性的阶级式爱恨教育,培养出多么可怕的一代:欢呼美国 911,庆祝日本大地震-对生命没有基本的敬畏,对人性缺乏厚重的理解,对普世价值更是一无所知。今天,教育方的你们,成功地维系着爱你所爱恨你所恨的一群;明天,历史若为该群标出新的“敌人”,你们,会对他们的人性抱有幻想吗?
  22. The importance of a working prototype: someone needs to start boiling the stone and convincing people before the soup can be made.
  23. Human brain is good at pattern recognition to reduce mental burdens. Good design should incorporate math patterns to exploit this.
  24. A 哥 in need is 帅哥 indeed.
  25. Elements presented reveal the clues/grids your design is following.
  26. Engineers: we build things to change the world.
  27. Don't pretent to "pro" to "control" others or gain admiration, it will make you look even dumber.
  28. Beware of the role you are playing, speak the way your role should be speaking to avoid awkwardness.
  29. 一段关系中,彼此得有些东西是对方想要的,方能持久。
  30. It's coming, again, we all know it, we just don't say it; they are so scared, by the quietness - they built. It's everywhere, it's nowhere.
  31. AEIOU: Observe, understand, abstract, envision, invent.
  32. It takes time for you to be able to ask the right questions.
  33. How about building your confidence this way: you are growing it till the day you die - by then, you are 100% confident that ready to let go.
  34. CNN: go beyond borders. CCTV: harmonized beyond borders.

推特集 (2011/04)

  1. Envision, influence.
  2. No human rights, no human left - 无人权, 无人全.
  3. Business is about fitting many other businesses together.
  4. 好的摄影作品对聚焦的诸多元素有极强的把握和概括能力。
  5. 我想, 企业家的职责, 就是把地耕好, 肥施好, 害除好, 蔬菜们就会自由地疯长.
  6. Paper, pencil, eraser is still the best/cheapest/most efficient way for idea sketching, mental prototyping.
  7. "Live from CNN center"; lie from CCTV center.
  8. 游说, 解释, 寻求共识, 妥协分歧, 推进事情.
  9. 至今记得大学军训时连长同志的一句话:民主是需要滴,但最后还是要集中到我这里来。
  10. Why we are not happier when we already have more? Coz the more we have, the more we are aware of there are more we want to have.
  11. High level design in paper drafts/digi diagrams are very helpful & efficient b4 u get entangled in code level complexities & restrictions.
  12. 无产者看了本书,幡然醒悟,原来只要流氓起来,即可迅速实现权力和财富的重新分配,于是轰轰烈烈地包围城市,翻身有产者。同时,因深谙自身秉性,为防止无产者2.0画瓢,于是:一让经济,碌碌维生;二禁书文,昏昏不省;三促和谐,杜绝流氓。
  13. You are not faking emotion, you are taking up responsibility. #leadership
  14. If u can't build trust upon some solid blocks, u will end up exhausted w/ many details out of ur capability, trashing others in the corner.
  15. The more mental burdens something/someone introduces, the less likely you can stay with for long. #design #life
  16. Math makes art beautiful: beats, rhythms, compositions, proportions... It's everywhere.
  17. It's dangerous that you know little yet want to control.
  18. 他们的能耐永远是不知廉耻、不择手段地倒腾智慧远见优其一等的思想家、知识分子,直到普罗大众都瞅见他们终究破相的丑陋低劣,也就从这戏台锒铛退幕了。
  19. 察天朝官场, 必以貌取人, 皮相欠妥者, 十中九狗官 - 所谓相由心生也.
  20. Beware of implied/missed details that are "concluded" into simple sentences, unless scientifically covered, they can always be questioned.
  21. Don't worry, keep those knowledges in mind, you will understand them as you grow.
  22. 这事的有趣之处是:人们不一定知道,也不一定不知道,但他们一定知道;人们不一定会去,也不一定不去,但他们一定得去。向广大战斗在第一线的工作者致敬!

推特集 (2011/05)

  1. A good product should be simple, useful, responsive... so does a team lead.
  2. Sometimes what you need to do is pat on team's back and remove the uncertainty: go, you are doing it right!
  3. 所有的力量都沉寂着, 它们并非害怕, 并未妥协, 只在激流暗涌地点滴聚集, 静候重新破土, 摧枯拉朽.
  4. Gain the trust from users, prove that it's worth their money & time to grow with you.
  5. 一些日本人敬拜弄死中国人的战犯,我们不理解;海量的咱敬拜弄死中国人的耄,谁、又是怎么理解的呢?-因为能活到今天的都是拜他所赐吧!
  6. If you find it challenging to work with everyone, better find out if you are the challenging one to work with.
  7. 想登上远方那座高峰吗?那就先爬过这些小山坡吧!
  8. 落后不可怕,可怕的是把落后当先进,还说是特色。
  9. Trust cannot be pretended, every small detail you speak & act will be leaking the truth.
  10. Stubbornly arguing your 100% right increases no productivity. U need to let go certain things, including mistakes as team's growing price.
  11. There are always compromises, your job is to gently/smartly/patiently "guide/route" them back to the ultimate goal.
  12. As a lead, you need to be easy to work with, you understand how to drive/assist diff ppl to output her/his most.
  13. Different units: kid's success is measured by minute, adult's by year, dead's by history.
  14. 审视一段关系的时候, 应该问: 我有什么你离不开的? 你又有什么我离不开的? 爱是具体而微的, 不是空口大话的. 如果没啥你离不开说得出的点滴细节, 那真不是什么 "真爱".
  15. 操持臣身先士卒,方略文韬仕良主。滨海岂容麻雀飞,兴邦高墙立千古。
  16. 没洁癖别当程序员撒.
  17. 大国崛起的底气:我们有十三亿随时准备着砸国产日系车、奉拉登为英雄以抗日反美的愚民大军——尊重我们点哦,支持特色的路线哦!不然咱真理部一发飙,就把滔天的口水导向你丫的!!
  18. Kid, this wall is already full of cracks, let's keep scratching, day by day, until it collapses. 孩子, 这墙已满是裂缝, 让我们继续, 一天一点, 把它抠倒.
  19. 长大就是习惯分离,习惯一通电话过去就是几个星期⋯⋯直到有天习惯一种名叫永远的、再也说不上话的分离。
  20. Is life a process of getting used to imperfects?
  21. Only by trial and error, can you find the sweet spot, or be confident to confirm its nonexistence. #startup
  22. 千面中国,只有你一张最有脸的表情;黄土盈尺,找不到一个念得出的名字。
  23. 贵府一直以身作则地上演着和尚打伞、大管小、公踩私、强凌弱的样板戏,成功引导塑造了今时今日的社会生态:弱的想逞强、私的想近公、小的想变大⋯⋯一律的不择手段、泯灭人性,为的就是在被赵太爷、王胡、假洋鬼子修理过后,能调戏一把小尼姑——天朝崛起,喜剧热映,全球观众敬请开怀大笑并适时哭泣。
  24. 会搜索的小鸟有虫吃.
  25. UI assists parameters' collection (for computer to take action w/ them). #design
  26. 懒人多怨言, 想吃那碗饭又吃不得吃到那碗饭的苦, 只好怨怨天尤尤人解解馋.
  27. 内斗内斗再内斗…一朝猛醒,发现所有自由地区的黄皮肤都已畅行在现代化的正轨上,紧着多快好省、不怕牺牲之精神,迅速弄潮、吹起那张圆润饱满、丰盈慈祥的面子,便安然回到大国崛起的甜美梦乡,继续对掐对掐再对掐。
  28. When you are brave, things are no longer as scary as you thought; those who wanted to scare you away, will be scared away by your braveness.
  29. 当你勇敢,将发现一切并无想像中可怕;而那些试图以恐惧让你退缩的人,将因你的勇敢而恐惧退缩。
  30. 路是自己选的, 责任是自己担的.
  31. 摧毁信仰、消灭思想、破坏文化,离间心与心的信任、增加人和人的猜忌,全盘沙化,确实缔造了各种力量无法集结的一片和谐死寂。但是,我们仍旧相信:“沙不怕风吹,在某天定会凝聚”。
  32. If you don't know the weight of death, you won't understand the weight of life.
  33. 国人为何自顾自、对啥都无所谓了呢?因为顾他人、有所谓的那些都被河蟹啦,还是闷声发大财(梦)吧。

Saturday, June 11, 2011

功夫熊猫 2 太反动了,咋就能过审…(敬告:含剧透)



阿宝流亡后,学会了功夫,回来干啥? "Save China"!












Tuesday, June 07, 2011

Hello world, long time no write

Trying to write my first blog after a long time.

How good is blogger?