振样's profileiThinkBlogListsGuestbookMore Tools Help

iThink

by 
No list items have been added yet.
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.
January 19

匆匆

匆匆

作者: 朱自清

 
  燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:现在又到了哪里呢?
  我不知道他们给了我多少日子;但我的手确乎是渐渐空虚了。在默默里算着,八千多日子已经从我手中溜去;像针尖上一滴水滴在大海里,我的日子滴在时间的流里,没有声音,也没有影子。我不禁头涔涔而泪潸潸了。
  去的尽管去了,来的尽管来着;去来的中间,又怎样地匆匆呢?早上我起来的时候,小屋里射进两三方斜斜的太阳。太阳他有脚啊,轻轻悄悄地挪移 了;我也茫茫然跟着旋转。于是——洗手的时候,日子从水盆里过去;吃饭的时候,日子从饭碗里过去;默默时,便从凝然的双眼前过去。我觉察他去的匆匆了,伸 出手遮挽时,他又从遮挽着的手边过去,天黑时,我躺在床上,他便伶伶俐俐地从我身上跨过,从我脚边飞去了。等我睁开眼和太阳再见,这算又溜走了一日。我掩 着面叹息。但是新来的日子的影儿又开始在叹息里闪过了。
  在逃去如飞的日子里,在千门万户的世界里的我能做些什么呢?只有徘徊罢了,只有匆匆罢了;在八千多日的匆匆里,除徘徊外,又剩些什么呢?过 去的日子如轻烟,被微风吹散了,如薄雾,被初阳蒸融了;我留着些什么痕迹呢?我何曾留着像游丝样的痕迹呢?我赤裸裸来到这世界,转眼间也将赤裸裸的回去 罢?但不能平的,为什么偏要白白走这一遭啊?
  你聪明的,告诉我,我们的日子为什么一去不复返呢?
 
  1922年3月28日
September 27

转:120种让你变得更聪明的方法!



转自:http://blog.sina.com.cn/s/blog_49f6a5930100az02.html

    改善脑力是一件长期的工作,请大家每天坚持看几条、用几条,逐步让自己变得更聪明。、
    另外,这也是提升自己英语水平的绝佳机会 -- 大量的实用单词和句子!
    Here are 120 things you can do starting today to help you think faster, improve memory, comprehend information better and unleash your brain’s full potential.
  1. Solve puzzles and brainteasers.
  2. Cultivate ambidexterity. Use your non-dominant hand to brush your teeth, comb your hair or use the mouse. Write with both hands simultaneously. Switch hands for knife and fork.
    注释:simultaneously  [ˌsiməlˈteinjəsli] ad.同时,一起
  3. Embrace ambiguity. Learn to enjoy things like paradoxes and optical illusions.
  4. Learn mind mapping.
  5. Block one or more senses. Eat blindfolded, wear earplugs, shower with your eyes closed.
  6. Develop comparative tasting. Learn to properly taste wine, chocolate, beer, cheese or anything else.
  7. Find intersections between seemingly unrelated topics.
  8. Learn to use different keyboard layouts. Try Colemak or Dvorak for a full mind twist!
  9. Find novel uses for common objects. How many different uses can you find for a nail? 10? 100?
  10. Reverse your assumptions.
  11. Learn creativity techniques.
  12. Go beyond the first, ‘right’ answer.
  13. Transpose reality. Ask “What if?” questions.
  14. SCAMPER!
  15. Turn pictures or the desktop wallpaper upside down.
  16. Become a critical thinker. Learn to spot common fallacies.
  17. Learn logic. Solve logic puzzles.
  18. Get familiar with the scientific method.
  19. Draw. Doodle. You don’t need to be an artist.
  20. Think positive.
  21. Engage in arts — sculpt, paint, play music — or any other artistic endeavor.
  22. Learn to juggle.
  23. Eat ‘brain foods’.
  24. Be slightly hungry.
  25. Exercise!
  26. Sit up straight.
  27. Drink lots of water.
  28. Deep-breathe.
  29. Laugh!
  30. Vary activities. Get a hobby.
  31. Sleep well.
  32. Power nap.
  33. Listen to music.
  34. Conquer procrastination.
  35. Go technology-less.
  36. Look for brain resources in the web.
  37. Change clothes. Go barefoot.
  38. Master self-talk.
  39. Simplify!
    注释:simplify  [ˈsimplifai] vt.简化,使简明
  40. Play chess or other board games. Play via Internet (particularly interesting is to play an ongoing game by e-mail).
  41. Play ‘brain’ games. Sudoku, crossword puzzles or countless others.
  42. Be childish!
  43. Play video games.
  44. Be humorous! Write or create a joke.
  45. Create a List of 100.
  46. Have an Idea Quota.
  47. Capture every idea. Keep an idea bank.
  48. Incubate ideas. Let ideas percolate. Return to them at regular intervals.
  49. Engage in ‘theme observation’. Try to spot the color red as many times as possible in a day. Find cars of a particular make. Invent a theme and focus on it.
  50. Keep a journal.
  51. Learn a foreign language.
  52. Eat at different restaurants - ethnic restaurants specially.
  53. Learn how to program a computer.
  54. Spell long words backwards. !gnignellahC
  55. Change your environment. Change the placement of objects or furniture — or go somewhere else.
  56. Write! Write a story, poetry, start a blog.
  57. Learn sign language.
  58. Learn a musical instrument.
  59. Visit a museum.
  60. Study how the brain works.
  61. Learn to speed-read.
  62. Find out your learning style.
  63. Dump the calendar!
  64. Try to mentally estimate the passage of time.
  65. “Guesstimate”. Are there more leaves in the Amazon rainforest or neuron connections in your brain? (answer).
  66. Make friends with math. Fight ‘innumeracy’.
  67. Build a Memory Palace.
  68. Learn a peg system for memory.
  69. Have sex! (sorry, no links for this one! :) )
  70. Memorize people’s names.
  71. Meditate. Cultivate mindfulness and an empty mind.
  72. Watch movies from different genres.
  73. Turn off the TV.
  74. Improve your concentration.
  75. Get in touch with nature.
  76. Do mental math.
  77. Have a half-speed day.
  78. Change the speed of certain activities. Go either super-slow or super-fast deliberately.
  79. Do one thing at a time.
  80. Be aware of cognitive biases.
  81. Put yourself in someone else’s shoes. How would different people think or solve your problems? How would a fool tackle it?
  82. Adopt an attitude of contemplation.
  83. Take time for solitude and relaxation.
  84. Commit yourself to lifelong learning.
  85. Travel abroad. Learn about different lifestyles.
  86. Adopt a genius. (Leonardo is excellent company!)
  87. Have a network of supportive friends.
  88. Get competitive.
  89. Don’t stick with only like-minded people. Have people around that disagree with you.
  90. Brainstorm!
  91. Change your perspective. Short/long-term, individual/collective.
  92. Go to the root of the problems.
  93. Collect quotes.
  94. Change the media you’re working on. Use paper instead of the computer; voice recording instead of writing.
  95. Read the classics.
  96. Develop your reading skill. Reading effectively is a skill. Master it.
  97. Summarize books.
  98. Develop self-awareness.
  99. Say your problems out loud.
  100. Describe one experience in painstaking detail.
  101. Learn Braille. You can start learning the floor numbers while going up or down the elevator.
  102. Buy a piece of art that disturbs you. Stimulate your senses in thought-provoking ways.
  103. Try different perfumes and scents.
  104. Mix your senses. How much does the color pink weigh? How does lavender scent sound?
  105. Debate! Defend an argument. Try taking the opposite side, too.
  106. Use time boxing.
  107. Allocate time for brain development.
  108. Have your own mental sanctuary.
  109. Be curious!
  110. Challenge yourself.
  111. Develop your visualization skills. Use it at least 5 minutes a day.
  112. Take notes of your dreams. Keep a notebook by your bedside and record your dreams first thing in the morning or as you wake up from them.
  113. Learn to lucid dream.
  114. Keep a lexicon of interesting words. Invent your own words.
  115. Find metaphors. Connect abstract and specific concepts.
  116. Manage stress.
  117. Get random input. Write about a random word in a magazine. Read random sites using StumbleUpon or Wikipedia.
  118. Take different routes each day. Change the streets you follow to work, jog or go back home.
  119. Install a different operating system on your computer.
  120. Improve your vocabulary.
July 05

C++ 读书列表 (V4.0)

转载自:http://www.zoneheng.com/blog/u/900/archives/2007/1695.html

2006年,国内出版的C++好书不多,不过《Imperfect C++》和《Effective C++ 3e》都是精品,值得推荐。于是,再次更新“C++读书列表”。Ada已经读过所列的全部图书。
目录格式为:作品分类、英文书名、作者、译者、中文版出版社、简介。排名虽然不分先后,但是Ada用红色(注:原文,本文为有下划线者)标出推荐读物(推荐角度各有不同,无需照单全收)。

参考手册
1. The C++ Programming Language (Special Edition), Bjarne Stroustrup
    裘宗燕(译), 机械工业出版社
    C++始创者、一代宗师Bjarne Stroustrup的经典之作,仅次于C++标准的权威书籍。
2. C++ Primer 3e, Stanley B.Lippman, Josee Lajoie
    潘爱民(译), 张丽(译), 中国电力出版社
    C++元老Stanley B.Lippam撰写的C++语法、语义层面的百科全书,极具参考价值。
3. The C++ Standard Library : A Tutorial and Reference, Nicolai M. Josuittis
    侯捷(译), 孟岩(译), 华中科技大学出版社。
    专业C++程序员必备的C++98标准程序库的参考手册,也是新手学习标准库的良好教程。
语言入门
4. Essential C++, Stanley B.Lippman
    侯捷(译), 华中科技大学出版社
    Stanley B.Lippam为C++初学者撰写的入门书,可惜很多国人第一次学C++的时候没有这本短小精悍的教程。


泛型与STL
5. Generic Programming and the STL, Matthew H. Austern
    侯捷(译), 中国电力出版社
    另辟蹊径,揭示了泛型理论的基础,以及STL的实作规格。所有泛型编程的初学者(即使你不学C++)都应该阅读其第一部分。
6. C++ Standard Template Library,P.J.Plauger,Alexander A.Stepanov,Meng Lee,David R.Musser
    王昕(译), 中国电力出版社
    STL始创者介绍STL,学习STL的权威参考。(Ada没有读过该书)
7. STL源码剖析 (The Annotated STL Sources), 侯捷
    华中科技大学出版社
    侯老师的力作,展现STL的实现细节,为进一步深入学习、品位STL实现提供了良好的基础。
8. Modern C++ Design: Generic Programming and Design Patterns Applied, Andrei Alexandrescu
    侯捷(译), 於春景(译), 华中科技大学出版社
    真正的眩技派力作,使所有对泛型一知半解的人瞠目结舌的编程实作。该书的核心—Loki库,已经被收入C++ Builder X。
9. C++ Templates, David Vandevoorde, Nicolai M. Josuttis
    陈伟柱(译), 人民邮电出版社
    真正的C++泛型教程,从基础的语法、语义到强大的解决方案都有详细论述,使泛型编程登堂入室,与OO平起平坐。译文不太流畅。
10. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, David Abrahams, Aleksey Gurtovoy
    全面介绍了C++ template metaprogramming的概念、工具与技术,展现了模板元编程匪夷所思的威力。关于DESL(Domain-Specific Embedded Languages)的论述非常精彩,值得高阶程序员、语言研究者参考。


专家经验
11. Effective C++ 2e, Scott Meyers
    侯捷(译), 华中科技大学出版社
    Scott Meyers的绝妙好书,人手一本的赞誉绝非浪得虚名。
12. Effective C++ 3e, Scott Meyers
    侯捷(译), 电子工业出版社
    Scott Meyers结合未来的C++09与社区的发展,对经典的《Effective C++ 2e》进行了“彻底”的改写。值得所有C++的学习者和实践者参考。
13. More Effective C++, Scott Meyers
    侯捷(译), 中国电力出版社
    较前作Effective C++单纯的工程经验,该书更多地谈论技术解决方案,同样精彩。
14. Effective STL, Scott Meyers
    龚敏敏(译), 电子版

    潘爱民(译), 清华大学出版社
   《Effective C++》和《More Effective C++》的姐妹书,值得注重实效的C++程序员阅读。
15. Exceptional C++, Herb Sutter
    卓小涛(译), 中国电力出版社
    C++大师Sutter与读者面对面的交心之作。关于“异常安全性”、“名字查找”的部分非常精彩。
16. More Exceptional C++, Herb Sutter
    於春景(译), 肖翔(审校), 华中科技大学出版社
    在看过Exceptional C++之后,没有理由错过更加精彩的More Exceptional C++。
17. Exceptional C++ Style, Herb Sutter
    刘未鹏(译), 人民邮电出版社
    Sutter再次与读者推心置腹,把C++的实作细节娓娓道来。对一些“历史典故”和现实问题的描述尤其精彩,有趣而实用。
18. C++ Coding Standards : 101 Rules, Guidelines, and Best Practices, Herb Sutter, Andrei Alexandrescu
    刘基诚(译), 人民邮电出版社
    两位C++世界级大师汇总全球C++社群经验,联袂著此力作(2005年Jolt震撼大奖)。内容翔实,引用完备,提供了C++团队制定编码规范的权威基础。适合所有C++程序员阅读(对C++新手的帮助尤其明显)。
19. Runminatios On C++: A Decade of Programming Insight and Experience, Andrew Koenig, Barbara Moo
    黄晓春(译), 孟岩(审校), 人民邮电出版社
    一对技术伉俪的“沉思之作”,从C++的表皮渐入机理,拍案叫绝之处不胜枚举。
20. C++ Strategies and Tactics, Robert B.Murray
    王昕(译),中国电力出版社
    英文原版发行于1993年,内容略显陈旧,不过作者在书中分享了他在实践中获得的宝贵经验和建议,仍有一定参考价值。此外,阅读此书有助于理解C++语言及技术的发展过程(此书涉及Pimpl等惯用法)。不建议C++老手购买。
21. Applied C++:practical techniques for building better software, Philip Romanik, Amy Muntz
    陈学峰(译),杨健康(译),林琪(译),中国电力出版社
    作为一本贴近实战的指导书籍,体现了C++对于工业级程序设计的强大作用。内容涉及模板、STL、异常、快速原型、单元测试、性能优化等。值得一线的C+ +开发者仔细阅读。

22. Large-Scale C++ Software Design, John lacks
    李师贤等(译), 中国电力出版社
    作者系统的总结了开发大规模C++软件的经验与原则。虽然少量内容略显过时,但仍旧具有重要的参考价值。中译本的翻译质量不高。
23. C++ Common Knowledge : Essential Intermediate Programming, Stephen C.Dewhurst
    荣耀(译), 人民邮电出版社
    本书提供了C++程序员所必须具备的“常识”,对于降低C++学习曲线、快速掌握基本的开发技术,很有帮助。

24. Imperfect C++, Matthew Wilson

     荣耀(译), 刘未鹏(译), 人民邮电出版社

     “为现实世界的程序员提供切合实际的解决方案”!此书不但介绍了大量的实用技术,还展示了一种“注重实效”的编程观念和实践方法,有助于中、高级职业C++程序员的技术积累和境界提升。 

其他
25. The Design and Evolution of C++, Bjarne Stroustrup
    裘宗燕(译), 机械工业出版社
    C++始创者谈C++语法、语义的来龙去脉,是程序语言工作者不能错过的最重要参考书之一。
26. Inside The C++ Object Model, Stanley B.Lippman
    侯捷(译), 华中科技大学出版社
    cfront(第一个C++编译器)的实作者之一Lippman谈C++底层机制的绝妙好书,用短小的篇幅揭示了C++运作的机理。
27. Multi-Paradigm Design for C++, James O.Coplien
    鄢爱兰, 周辉等(译), 中国电力出版社
    原理简单,内容艰深,对于共同性和差异性的论述非常精彩。其方法可以扩展到更多的范型,需要反复实践和思考。译文不太流畅。
28. The Art of C++, Herbert Schildt
    曹蓉蓉(译), 刘小荷(译), 清华大学出版社
    该书包括8个C++实战案例:垃圾内存回收器,多线程开发,译码器,Internet下载工具,财务处理程序,AI搜索,定制STL容器,Mini C++解释程序,展示了C++的强大威力。然而,其代码风格有改进空间,其设计也未能尽显C++之艺术,有些遗憾。

29. Practical Debugging in C++, Ann R.Ford, Toby J.Teorey
    於春景(译), 华中科技大学出版社
    适合C++初学者的程序调试手册。

30. Write Portable Code: An Introduction to Developing Software for Multiple Platforms, Brian Hook
    胡光华(译), 郝春雨(译), 清华大学出版社
     以C/C++为核心,介绍了编写可移植代码的原则、策略与技术。作者将其丰富的跨平台软件开发的经验浓缩在短小的篇幅之内,有助于读者快速确立正确的观念。

31. boost, www.boost.org
    Boost是C++09标准程序库的基础之一,提供了一系列功能强大的通用程序库,能够明显提升C++程序的开发效率。此外,Boost还充分展示了多泛型设计的威力,体现了“语言设计就是程序库设计,程序库设计就是语言设计”的精髓,值得程序员、语言研究者细细品位。

32. Beyond the C++ Standard Library: An Introduction to Boost, Bjorn Karlsson

    一本轻便的入门级读物,用较短的篇幅介绍了Boost中最常用的程序库,适合Boost新手阅读。

33. The Boost Graph Library User Guide and Reference Manual, Jeremy G. Siek, Lie-Quan Lee, Andrew Lumsdaine

    从技术角度,Boost Graph Library (BGL) 在STL的基础上对泛型编程进行了发展,建立了令人惊叹的泛型程序库。此书系BGL的作者亲自上阵,面向普通程序员介绍BGL的用法,有助于缓解陡峭的学习曲线。如果您需要使用C++来编写图论相关的程序,可以参考此书和BGL的文档(两者的差别并不显著)。

软件设计基础
34. Design Patterns: Elements of Reusable Object-Orinted Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
    李英军(译), 马晓星(译), 蔡敏(译), 刘建中(译), 吕建(审校)
    这本不是C++书籍,但是做为OOP的十年经典,任何当代的程序员都“必须”阅读。
35. Agile Software Development: Principles, Patterns and Practices, Robert C. Martin
    邓辉(译), 孟岩(审校), 清华大学出版社
    世界级软件开发专家的力作(2003年Jolt震撼大奖),尽显极限编程、面向对象软件设计、设计模式、物理设计的真谛,值得所有软件开发者参考。
36. Design Patterns Explained: A New Perspective on Object-Oriented Design, Alan Shalloway, James R.Trott
    熊节(译), 清华大学出版。
    一本设计模式的入门读物,由浅入深,循循善诱,尤其适合初学者。该书采用实用、恰当的例子,展示设计模式的威力,即便是软件开发老手也能从中有所收获。
37. Refactoring: Improving the Design of Existing Code, Martin Fowler
    侯捷(译), 熊节(译), 中国电力出版社。
    该书使注重实效的程序员在技术、心理上具备进行软件重构的基本素质。此外,其另一贡献在于:建立起吾人对于“目前和未来之自动化重构工具”的基本理论和实现技术上的认识与信赖(侯捷)。
38. Refactoring to Patterns, Joshua Kerievsky
    详细讨论了以模式为导向的重构技术,更重要的是阐述了安全、有效地进行软件设计的合理思路。值得重构和模式的学习者和实践者参考。(中译本已经出版)

June 22

人生最痛苦的事情

用Google搜索了一下“人生最痛苦的事情”,在前面几页看到了下面的说法,摘记如下:


雅虎知识堂的回答
http://ks.cn.yahoo.com/question/1406031900475.html
人在不同的时间、环境有不同的感受,失恋的人说失恋最痛苦,找工作的人说找工作最痛苦,......但不管是什么人什么时候,以下三种都会让人不愉快:烦恼、争吵、空钱包。

百度_失恋吧
http://tieba.baidu.com/f?kz=403057697
2楼:死了....
3楼:对男人来说是阳痿,对女人来说是不育..嘎嘎~
4楼:...........儿童不宜...
     我选择健康的活...........眼睛该长芥子了......
5楼:寂寞。
6楼:弱弱的顶一下,一天又过去了..
7楼:- -! 对LS彻底没语言勒...败了挖...
8楼:寂寞...............
9楼:你爱的人得不到幸福。。。。
10楼:明明彼此相爱却要互相折磨..
11楼:做男人“挺”好`!
12楼:.. ..
13楼:冷夜巡楼 猥琐人等快快避开 恶意刷帖的小心咯 ..
14楼:最痛苦的事...
      莫过于我天天想他...
      太痛苦了...尚某人....
15楼:最痛苦的事就是太痛苦了
16楼:爱上一个不爱你的人....
17楼:又一次从黑暗的坟墓中爬出来了...
18楼:.............
19楼:~~~~~~~~~~~~~~~~~~唉~~~~~忧啊~``
20楼:得不到自己想要的


CSDN程序人生论坛
http://topic.csdn.net/t/20061010/16/5072630.html
人生最痛苦的事情,莫过于接手一个难以理解、难以维护、难以修改的软件系统。  
   
  只有难以理解的程序代码。  
   
  在中国,很多软件难以理解,难以维护,难以修改,是因为程序员偷懒造成的,但是,也不能怪程序员,程序员为了速度、进度,没办法,只有偷懒才能加快进度,而这进度,一般都是由市场人员规定死的。如果没有SQA小组,后果更严重。  
   
  这就是悲哀。


新浪iask
http://iask.sina.com.cn/b/9208152.html?from=related
人生最痛苦的事情莫过于等待~~~ 悬赏分0分
进不去游戏郁闷中~~~~吃饭先吧?希望回来能知道这是为什么???


百度知道
http://zhidao.baidu.com/question/2770733.html?fr=qrl
已解决
失恋是人生最痛苦的事情,如果你想说,请进QQ群18170313

最佳答案
认为失恋是人生最痛苦的事情的人,是因为他们还没有经历过那些更痛苦可怕的事情,从这个意义上说,他们还是幸福的。

塞翁失马
焉知非福啊!


新浪iask另外一个回答
http://iask.sina.com.cn/b/6395254.html
所谓“最”:
百人千“最”,千人万“最”。俗话说“各家都有难念的经”。比如,我说的是比如...
比如说,当一个人掉水里了,周围什么也抓不到......
又比如,当一个人相爱五年的恋人突然失踪了......
又比如,当一个人的爱儿被仇人所害......
又比如,有一个相依为命的老母亲卧病床前,眼看着却无力可救....
又比如,当一个人家财万贯的时候破产了......
又比如,当一个人大好前程时,突然出车祸了......
又比如,当一个人十年寒窗考中名校时,却交不起学费......

等等,等等,数不胜数,你感觉谁“最”......

其实人生没有绝对的“最”,只是你那一刻的心情“最”罢了~~


----------------------------------------------------------

每个人心中有不同的答案吧,不过对活着的人来说,死亡可能就是最痛苦的事情了,当然也只有那时候才可能比较出什么才是最痛苦的事情,当然就是死亡本身~~
所以好死不如赖活着~~

April 16

好运的简约纳

上周二早上9点45分左右,就在我刚刚到办公桌前坐下不久,听到很多人的吵闹声音:公司于两个月前送去的SL0芯片,现已流片回来快递到了公司。打开真空包装后,全新的芯片被安装了同样全新设计的开发板上了,考验硬件组和系统组的时间到了。

我到实验室看了包装着的芯片后,马上回到坐位上了,心里面似乎没有很多的激动。因为考验公司的时刻才刚刚开始。因为正如之前一天陈老大在公司的动员会上说的,芯片能正常工作才是该庆贺的时候。那时,动员大会上经历过其他公司芯片流片回来的工程师,纷纷说从那时开始的一段时间里面,所有和芯片相关的人都是要忙坏了:) 。有人举例,从芯片流片回来,相关的工程师经过了一周的通宵达旦才让芯片引导成功,另外有人举例说,他们上次的流片总共迭代了三次,每次持续的时间都是一个月左右,才让芯片引导成功。老大似乎也比较认可这种说话,让大家做好接受芯片不能马上工作的准备,并说这样也没有关系,只有大家能定位问题就可以了。老大话让我觉得他真实一个做实事的人。

中饭前,我一直继续忙着自己的事情,没有听到芯片进一步的消息。但是好消息总是来的太快,吃过饭回来,大概在14点左右,我看到邮箱里面躺这一份由系统组老大发在13点40分左右的邮件:主题是芯片在Debug模式下已经能开始工作了,我马上到了实验室,发现那边有很多闲看的人了,原来在芯片正常模式下也可以通过串口输出字符串了,这说明回来的芯片能正常工作。穿过人堆后,发现芯片正由串口输出到超级终端上的“Hello,world”字符串。毫无疑问,这个“Hello,world”是是自己用不同编程语言写过的或看别人写的,运行得到的最能让人激动的“Hello,world!”字符串了。

拍照、欢呼、准备着庆贺的喧闹声音持续了好长的一段时间,在下午15点左右,听得的消息是,芯片在主板上能跑Nucleus OS了,持续时间大概是10分钟左右。这实在是太好的消息了,这完全能说明流片回来的芯片工作是正常的。在自己今天下班回来的时刻,实验室里面还传来了运行在芯片上的MP3声音。

这是我到简约纳后听到的第一个好消息,前面的期望已经实现,现在可以开始新的期盼了。期望公司的芯片能早日量产,早日推向和占领市场。

简约纳第一款芯片的流片成功也创造了几个第一:第一款完全由中国人参与并完全在国内设计的芯片,国内第一款能在流片当天回来能跑OS的芯片(据说Intel保持的记录是7天),似乎也是国内第一款硬件双线程(用Intel的话说是超线程)嵌入式芯片。相信在不久的将来,简约纳还会创造更多的第一的。

Clean Code

上周在小组会议结束的时候,老大推门进来,让我们再等一会儿再出去,同时叫上了其他组的几位同事。老大有话讲。老大开了PPT,给出了下面的代码,然后问大家这段代码有什么问题。

void init_ti_target(void *handle) {
  char soname[12];
  if (Is_Target_Sl1_pcore()) {
    strcpy(soname, "sl1_pcore.so");
  } else if (Is_Target_Sl2_pcore()) {
    strcpy(soname, "sl2_pcore.so");
  } else if (Is_Target_Sl1_dsp()) {
    strcpy(soname, "sl1_dsp.so");
  }else if (Target == TARGET_UNDEF) {
   Is_True(0, ("undefined target"));
  }
  ...

一位眼尖的小姑娘马上指出来说,soname的长度不够,在第4行的时候会有字符串溢出。老大点头说对,这是第一个问题,这个bug让另外的同事debug了2周的时间,因为它藏在100万行左右的大代码中。然后老大让大家再仔细看有什么问题,让大家提自己更好的实现。一会儿有人说这段代码的实现有性能方面的问题,还有定义soname时,其定长可能对后续的扩展带来问题。我给出了下面的实现。

void init_ti_target(void *handle) {
  const char *soname;
  if (Is_Target_Sl1_pcore()) {
    soname = "sl1_pcore.so";
  } else if (Is_Target_Sl2_pcore()) {
    soname = "sl2_pcore.so";
  } else if (Is_Target_Sl1_dsp()) {
    soname = "sl1_dsp.so";
  }else if (Target == TARGET_UNDEF) {
   Is_True(0, ("undefined target"));
  }
  ...

让老大过目后,我认为自己的代码在性能和可扩展性方面都不错,不过...

然后老大给出了下面的几段代码:

void init_ti_target(void *handle) {
  char *soname;
  if (Is_Target_Sl1_pcore()) {
    soname = malloc(strlen("sl1_pcore.so”+1));
    strcpy(soname, "sl1_pcore.so");
  } else if (Is_Target_Sl1_dsp()) {
    char *soname = malloc(strlen("sl1_dsp.so”+1));
    strcpy(soname, "sl1_dsp.so");
  } else if (Target == TARGET_UNDEF) {
    Is_True(0, ("undefined target"));
  }
  …

void init_ti_target(void *handle) {
  char *soname;
  if (Is_Target_Sl1_pcore()) {
    soname = alloca(strlen("sl1_pcore.so”+1));
    strcpy(soname, "sl1_pcore.so");
  } else if (Is_Target_Sl1_dsp()) {
    char *soname = alloca(strlen("sl1_dsp.so”+1));
    strcpy(soname, "sl1_dsp.so");
  } else if (Target == TARGET_UNDEF) {
    Is_True(0, ("undefined target"));
  }
  …

void init_ti_target(void *handle) {
  char *soname;
  if (Is_Target_Sl1_pcore()) {
    soname = alloca(strlen("sl1_pcore.so”+1));
    strcpy(soname, "sl1_pcore.so");
  } else if (Is_Target_Sl1_dsp()) {
    char *soname = alloca(strlen("sl1_dsp.so”+1));
    strcpy(soname, "sl1_dsp.so");
  } else {
    Is_True(0, ("undefined target"));
  }
  …

上面的三段代码粗看上去实现的都差不多,不过在性能和防御错误方面,最后一段代码最佳。倒数第二段代码和最后一段代码之间的差异在于前者使用else if,不能防御不支持的target的错误,而一个只用else,具有更高的错误防御性。

老大认为我的代码实现不错,但是也如上面的说的,不能防御不支持的target情况。因而可以说这样的实现是错误的。然后老大给出了下面的代码,让大家考虑为什么下面的代码比较好。

void init_ti_target(void *handle) {
  const char * soname = Get_target_soname());
  ...
}

inline const char * Get_target_soname() {
  if (Is_Target_Sl1_pcore())
    return "sl1_pcore.so";
  if (Is_Target_Sl1_dsp())
    return "sl1_dsp.so";

  Is_true(0, (“Unsupported core”));
}

最后老大总结的是让大家在任何的编码过程中,要考虑以下几个方面

1. 接口设计    2. 防御性代码    3. 性能    4. 限制条件,如要留意嵌入式系统中的堆栈大小等。

给我带来的思考是,

1. 对大型的系统来讲,软件中很多隐藏的bug起始于开发者未经过仔细考虑的实现,如老大上面提到的用2周的时间调试第一个例子中的bug。应该要有专业级的开发习惯,对任何一段代码,千万不能随意和大意。一个大意的例子是,自己在移植Open64到PowerPC时,在指令展开Open64中的乘加结点过程中,由于对PowerPC ISA中的乘加指令理解错误(将本来是frD=frA*frC+frB的指令用作frD=frA*frB+frC),使得移植的编译器在编译Spec2000的300.twolf时运行错误,定位和修复这个bug花了我和另外一位同学2天左右的时间。这些例子都作为对自己以后书写代码时不要粗心的提醒。

2. 接口是软件设计中最重要的成分,反应了软件开发工程师系统设计的功底。如上面的这些例子中,最后两个实现都是正确、具有防御性和高效的,但个人认为最后的例子在抽象层次和代码可理解性方面比其他都好。

3. 增加防御性的代码可以尽早发现bug,同时在代码实现的时候,最好假定自己的实现都有问题,使用测试用例证明代码没有问题。如老大提的那个bug和我自己发现的那个bug,如果有了很好的测试,这些bug在很早的时候都能被发现了。不过使用测试用例验证有“何时”和“何处”的问题,什么时候测试?在系统的那部分加入测试?在系统中加入测试代码无疑是不可取的,但若书写额外的测试代码时,若一些测试需要很多的条件和预处理时改怎么办?

April 02

眼光和担忧

感叹一下,原来自己的眼光还是不错的,让自己觉得好的女孩子真的是各有各的好。首先她们一个共同的特点是外在不错,包括了外貌和外在表现;其次是各个都比较上进的,或许这也是让我觉得她们不错的一个关键原因,因为自己本已就是非常上进的人,不管她们是各自因为什么而上进的,这都是一件好事;再一点是很自爱,自爱的女孩子自然也容易得到他人的爱惜,就是这样的自爱也不能盲目过头,否则,只能让她们孤芳自赏了。可喜!可惜的是跟她们都不怎么有缘分,碰到一个心动一下接触了然后总是挑刺着犹豫不决着,这样没有太多的动力了没有下文了。

也曾经一度怀疑过自己是不是看人有问题,尤其是在某些时候,很是怀疑着。那些时候,我总会忍不住要担心着她们,最大的当心便是她们的将来,怕她们遇上不善、能力不够的人而受伤或是吃苦。因为若自己知道这样的情况后,肯定会责怪自己当初放弃的太快了。同时,一个人因为如果能力不够,如果骄傲的程度超过自己可以骄傲的资本,在某一个时刻,她们也包括他们总会及时地得到老天给的惩罚的。若这样的惩罚能够及时警醒着她们,那么惩罚还是有效有益的。否则,这些人只会得到从老天那里过来的越来越多越来越大的惩处,直到让使之对生活产生了绝望。如果知道自己喜欢的女孩子受到这样的惩罚,自己是会很心痛的,尽管那时候自己和她们可能天各一方了。

现在看到,我的当心似乎是多余了,作为女孩子,她们有自己的一套生活哲学。碰到问题时,也总能以她们的解决方式解决。同时,女孩子做事似乎都比较用心的,用心的人进步肯定也是很快的,她们决不会在一个问题上吃亏多次了。知道了这些,自己放心多了,原来真的是不用当心别人的。还是先多当心自己吧 ^_^

March 30

找工作的经过(3)

从普天大厦里面走出来,我的自我感觉良好,觉得百度的面试真的不难。这样的情绪一直伴随着自己到清华,晚上和同学交流这次面试的题目和表现,我没有丝毫有自己不能通过百度的面试的情绪。在等待的时间里面,我开始担心,然后让推荐的师兄帮忙看一下情况,师兄告诉我我的应聘结果还在Waiting List里面。11月10左右来自百度另外部门的一个面试通知电话,让我意识到我在PS部门的面试没有通过。百度PS部门面试的失败给了我警钟,让我后续的时间里,意识到需要更认真的态度对待找工作这件事,同时需要更积极的态度和充分的准备参加面试。

10月份的中下旬和11月的上旬,我参加了一些公司的笔试,现在我印象比较深刻的还有网易有道、MS、IBM和Adobe的。对应聘软件工程师职位的人来讲,MS的笔试的重点应该是对计算机系统知识的掌握、软件的设计和实现,也就是试卷的前面第一部分选择题,第二部分设计和实现题目,MS的题目还是有一定的难度的,建议考前要好好复习所有的自己还不太熟悉的计算机知识。IBM的第一部分试题也很有意思,一般在别的公司的笔试中很少出现,这部分试卷有时间限制,包括矩阵图形替换、基础计算和数字找规律。似乎擅长后两者的人,前面部分考的都不会很好,不清楚IBM这部分的试题,到底是考查应聘者的那部分能力,IBM的其他部分试题则包括C/C++的应用试题和UML相关的。Adobe的试题则基本上是考查C++或者Java的基础知识,主要考查你对基本概念的理解和把握。网易有道的笔试在网易北京的办公室里面进行,是小规模的测试。笔试考查了两道编程题,一道是回归数字打印,一道是合并排序算法的实现。我没有做完第一道,对第二道题目的完成也没有完全把握。自然没有了那边的面试通知。想来,自己还是对基础知识把握的不过牢固,加上好长时间没有设计和书写程序,没有做好也是有原因的。

11月份的中下旬开始,陆续参加了前面笔试过的公司的第一轮面试。印象比较深刻的是IBM和Adobe的,IBM的面试确实如网上所说的,让人感到很舒服。开始时,面试官基本上会按照你简历上的问你,到了中间,面试官会问一些跟该职位相关的知识,我被问到的是数据库测试相关的,让我也很faint,因为我在IBM的校园招聘上没有投过测试相关的职位,而面试官毫无疑问的是来自产品测试组的。面试的后部分面试官会让说一段英语。在最后的提问阶段,我不识趣的问了他们是否来自测试部门,他们肯定了我的猜想,最后他们问我是否有兴趣做测试,我愣了一下说自己没有想好。对做测试,我确实没有想好,因为按照自己以前的工作经历和读研期间的项目经验,做测试对我来讲是最末末的选择,除非我非常想进IBM公司,而我也没有这种想法。我还是希望自己工作的内容有意思和有意义的。

Adobe的面试让我感觉Adobe很没有诚心地在招应届生,这可能和他们刚刚到中国建立办公室有关。由于之前曾参观过他们的办公地点,看到员工的办公桌比较宽敞,同时在听到他们几位经理介绍时,那些经理们总是笑着,这个公司给了我较好的印象。面试的经历和后面的思考,让我把这种美好的愿景给丢弃了。第一轮面试基本上是在聊天中度过,面试我的人是Photoshop的产品经理,面试的时候很是热情,笑容开场,一直笑容可掬地让我讲和讨论这我的待遇期望问题,然后微笑地告诉你你的期望是否过高了等等。这位经理跟我谈的主要是集中在待遇问题上,据说是想了解一下毕业生的心理期望价位,当然我给的价位,也完全超出了他的预想。后面当我说起自己比较对Flex产品比较感兴趣时,这位经理马上说你等等,我找那边产品的组长跟你谈一下,这样我被他很高兴地请出了他的办公司。我和那位Flex产品的组长到了另外的办公室,那位组长开始时也是混沌着为什么突然会来一个面试。等到我们两个人平静下来后,他开始介绍Adobe中国这边Flex组做的事情,基本上是做Flex的应用,这跟我原先想的差别也很大,我以为这边Flex有做编译器和虚拟机相关的,但可惜,这两部分工作主要还是在Adobe美国那边。后面那位组长问了一下C++较深层偏应用的知识,如自动指针的类型和实现、Singlten模型在多线程环境下的注意点等,让我产生自己对C++的掌握其实还很不够这样的想法。这也是我在Adobe面试唯一的收获吧。感叹一下,那些总对你笑的人,不一定是对你有好印象的,同理,那些对你紧板着脸的人,也不一定见得是对你很不满意。象Adobe Photoshop的那位产品经理,他在整个面试的过程中,一直是笑着的,但不见得他对我印象就很好,那只是他为人处事的一种策略。

March 28

《疯狂主妇》的冷静解读 - 李子勋 <转>

http://blog.sina.com.cn/s/blog_40d2863e010002if.html   

《疯狂主妇》带给人们的不是疯狂,而是对两性关系的一种冷静思考。主妇玛丽的开枪自杀有一种强烈的隐喻,去世的人就不再那么情愿受传统文化压迫或者道德观的约束了。她用一种女性主义视觉,用娓娓道来的话外音解读红男绿女间生活的真谛。

由于整个故事是在一个女性的视觉和感受中展开的,把贯穿着邻里矛盾、亲子矛盾、夫妻矛盾、爱情纠葛的这部电视剧看成是女性主义杰作一点不为过。男人在这里面只是陪衬,他们面貌平淡、个性索然、可怜、无辜、粗鲁、冲动、精神分裂、多动症……被女性挑逗、利用、支配、哄骗……受累于女性缔造的疯狂世界中。

四个疯狂主妇代表四种女性对男性的攻击范式,这样的技术在现实生活中也累见不鲜。需要提醒的是,下面对剧中人物的心理解读,是针对女性主义的诠释,不代表我个人对男女两性关系的看法。那么,站在一个中立的立场,我感觉是这四对男女彰显了婚姻的四种极端的互动模式:完美与混乱并存、控制与反控制并存、能干与幼稚并存、忠诚与背叛并存。所有平凡的婚姻或多或少会落入其中,婚姻现实只是一种复杂冲突下短暂且脆弱的平衡。要维持这样的平衡,我们要来学习这些女子在复杂婚姻关系中如何把她们的探戈舞蹈跳到极致。

一,完美让男儿伤心哭泣

最具心理学意味的人物要算布丽,精致的面容、仪式般的微笑、优雅得体的举止,无论泰山压顶,依然面不改色。只是在听到丈夫噩耗后,静静的擦拭完餐具后的号啕大哭,才读到这个女人压抑已久深切悲苦的心境。布丽的完美主义有两个心理学涵义:一是心理防御,完美是一种面具,让她可以有勇气继续生活在性变态、情感背叛、孩子逆反、杂乱无章的家庭里。完美是给自己一个错觉,正如电影《美丽新世界》中的父亲给孩子一个游戏的美丽谎言,同时也给自己一个假象一样,布丽找到赖以生存的动力。这就是为什么她害怕甚至恐惧不完美的心理实质。二是缓冲焦虑,完美意味着保持一种清洁、整洁、一丝不苟,而性变态、背叛、孩子吸毒、逆反正好代表不洁、无序和杂乱。布丽在形式上高度要求整洁、秩序是无意识的在处理内心因混乱、失控、出错引发的焦虑,这种对洁净的追求带有明显的强迫性意味。布丽其实很可怜,她不是强者,是弱者,是一个真正没有思想、生活、情感自由的可怜人。

很多观众会恨她,觉得正是她的极端完美主义才造成一家的悲剧:孩子吸毒、逆反、出走、交通肇事,丈夫红杏出墙、离家、心脏衰竭。这里要思考谁是因、谁是果,以及因果循环的问题!假使我们偏离主流价值取向,把这样的家庭冲突、混乱看成一种存在的常态,不去问是非对错,我们立即会发现胜利者是谁。在女性视觉来看,布丽的完美是对男性世界的自私、不洁、脏乱的一种挑战。这种挑战由于能得到主流文化的认同,所以完美就成了一个最锐利的武器,可以把一个好男人变坏,把坏男人折磨死。完美让女性改变了屈从于男人的位置而成为家庭的主宰,让大小男人在这种完美的光照下显出粗俗、幼稚、荒唐的本质来。这一招类试不爽,任何高尚、杰出、文雅的男子在妻子面前都不是那么光彩的,这正是柔弱女子可以击败高大全式男子的决胜武器。

布丽的内心结构:规则大于现实

如何与布丽式的女人相处呢?布丽这样的女子又如何摆脱类似的心理困扰呢?内心的不洁感是人过度追求完美与洁净在心理动力,改变布丽内心的道德秩序,接受生活随意性与多样性比较聪明的办法就是自己保持整洁,也此减轻布丽的不洁焦虑,当她感觉一切都在秩序中,内心的警觉下降,对干净完美的要求会退化到不那么重要的位置。如果你的确是个很懒散的人,那么划分界限也是可操作的办法。让自己的书房成为布丽的禁地,不让她做任何打扫。使她慢慢适应一种缺陷感,干扰她的内心结构,最终可形成一种脱敏。还有一种可能有些损的做法,发动孩子来个爆炸式破坏,让这样的女子感觉终其一生都打扫不完,最终自己选择放弃。

二,性感让男人因欲望而愚蠢

加布里尔的风情和性感身躯的象征意义是本能,本能的力量总是对结构好的伦理世界的一种颠覆。这种颠覆可能让人来不及建构心理防御,被扰动的心会发展一种道德愤怒来掩饰。其实看完电视剧后,舒松内心,点上一支烟,坦诚的面对洋溢内心的本能冲动,才能真切感觉自己还活着。虽然这个角色让电视观众对她印象不佳,不过分析这种厌恶感正好是观众内心并存着性冲动与性压抑的双向情绪导致的。性感的身躯对任何人都有极大杀伤力,不管你是男人还是女人。让道德化的男人觉察到自己的卑俗,让不道德的男人觉察到自己的可怜。美是一种很权威的东西。如果人的内心可以彻底从性欲、物欲、权欲、关系欲、控制欲中解放,以一种崇尚自然的心态来看,完美的身段是人类美感的一种满足,也因此激发同为人类的骄傲。开玩笑的说,一个不为完美女性身体动情的男子只能说是老了,完全不代表他道德。

加布里尔式女子的存在是对男权世界最辛辣的讽刺,对一个以男性文化为主导的现实里,拥有钱、权的男子可以征服世界的一切,但是否可以完全征服一个女人?当男人把女人当作一种社会资源占有的时候,聪明的女子也把男人看成实现女性自由的资源。想象故事《小王子》中的火狐狸对小王子说:“你可以驯服了我,却永远驯服不了我的心!”那么结果是小王子保持人性尊严,火狐狸也不失去野外生活的自在。加布里尔这只聪明的火狐狸正是这样来挫败男人的狂妄自大的。有些男人对不能用物质、情感、武力驯服的女子有一种深层恐惧,这样的女人会破坏男人内心的稳定结构,让他们深陷无助感与孤独中。加布里尔的聪明还不仅如此,她善于挑起男性之间的战争,让一个谦谦君子般的男人变为一只愤怒的公牛去攻击其他男性是很有意义的事。大自然的法则也是这样,你想拥有美丽女人,你得像种牛般强壮和好斗。这个女子严重伤害了男性世界的尊严和价值感,难怪许多男人都厌恶她。玛丽对加布里尔有一种赞赏,把她塑造成一面可以颠倒男女优势地位的女性旗帜。

加布里尔的内心结构:我需要我索取。

和这样的女子生活在一起是极端快感和极端痛苦并存的,幸福很经典,伤痛也很特别。她可以嫁给你,却不要妄想你可以完全拥有她。这样的女子差不多是上帝派来惩罚骄傲的男人的,有时候睁只眼闭只眼更能保持内心宁静。不过,让她多生几个孩子可能会把一种性欲的力量转换成母爱的源泉,那个时候你不仅拥有漂亮的妈妈还有天使般容貌的孩子。

三,奉献让男儿变得平庸幼稚

全职主妇丽奈特演绎的是一个内心坚定,具有献身精神的女子,心理象征意义是拯救。拯救这个被虚荣的、自私的、幼稚的一群男儿搞得乱哄哄的家。很容易让人联想到在男性多动的世界里,只有女性的坚韧、宽容与牺牲可以拯救这个世界。女性主义一直渴望认同是女性在暗自掌管着这个世界,所有掌管着文化、钱财、权力、法律、武力的男子最终还是被一个或多个女子控制,这个女人可以是母亲、妻子、情人、女儿……反正是个女人。看看丽奈特身边的四个男人,一个大小人和三个小大人,多动是一种男性世界的象征,象征男性世界的无序,好斗和不和谐。那么谁来管理这个家庭呢?谁来平衡这个不和谐的世界呢?必须有一个女人甘愿放弃自己的发展,使用聪明才智来统整这个世界。其实,在玛丽眼中,丽奈特邋遢也好,焦头烂额也好,黄脸婆也好,她却是女人世界中最美好的那个人,也是最聪明的那一个。

在玛丽的视觉下,丽奈特是个倍受女性主义责难的传统女性对象,为了家庭她牺牲了理想的前途和事业,把天赋的才干、睿智耗费在三个魔鬼般的孩子和一个孩子般的大人身上。不过用关系视觉看,丽奈特与男人们的关系更体现出亲密与隔离,责任与控制,独立与依赖的复杂性。有的时候这种争斗几乎是白热化的,充满了女性的计谋,甚至不惜使用药物来镇压多动和平缓自己的情绪,尽管劳累却乐此不疲。这是一种女性是否可以通过聪明来与男性世界和平共处,建构一种以母性温柔统帅家庭的有趣尝试。结果看起来还不那么好,可能是她的内心矛盾所致,不甘这样做一个疯狂主妇,还想着职业生涯中的辉煌,使丽奈特不能全情投入关系游戏。

丽奈特的内心结构:我牺牲我控制

客观的说,像丽奈特这样的女子可能是男人最梦想的主妇,却不是男人最梦想得到的爱人。男人并不希望看到一个被家务折磨得焦头烂额的女人,在他的想象中母亲的角色总应该是万能的。另方面,她的甘愿奉献是一种心灵的腐蚀剂,会把男人变得自以为是,觉察不到自己的幼稚无能,这是个双输的结局。好男人应该把这样的女人赶回社会,你不仅会因为她的成就感觉面子有光,她挣来的钱也足够你养三个保姆来对付那三个魔鬼孩子。

四,装傻让男人变得更傻

要解读苏姗就要把她的对手--伊蒂纳入视线。人们可能把伊蒂看成是破坏女性原则,引起女性间战争,从而让男人可以获益、捡便宜的罪魁祸首。很多女性在与男性较量中,真正担心的不是男人的智慧,而是担心身边有伊蒂这样的轻贱自己的女人。这跟集市一样,一个商贩把价压低,其他人相同的货物就被无形中贬值。其实在玛丽的女性主义眼中,情况可能是完全相反的,苏珊和伊蒂只是女人间的游戏,那个男人只是一个游戏中的奖品,一个标示而已。苏珊成为胜利者的聪敏在于她在男人面前的示弱,装傻,让那个男人觉得自己还算是个人物。男人一般喜欢傻气一点的女子,感觉这样的女子容易相处。有了良好的关系感觉,那个男人不上钩都不行。伊蒂使用霍尔蒙战术,直接的性感刺激和挑逗,妄图把男人回归到动物的自然属性。她故意忽视男人干这样的事也是需要维持道貌岸然的样子,相对来说,她更女性主义,直指男性骨子里那种原始情欲,剥除男性的道德尊严。

苏珊与伊蒂角色的象征意义是男性只是女性情欲游戏世界中的猎物,女性世界的精彩性也恰好在于此。如果没有生活之忧,一个女性不想性事,男人是不重要的。这个世界里,男性最大的弱点就是不能没有女人,哪怕你是个同志,还得女人把你生出来。在女性主义看来,男人为什么要那么孜孜不倦的发展竞争,要压制女性的权利,制造不平等,正是基于自己害怕控制不住女人。也只能在物质、权利、力量上占尽优势,才能在与女性的交往中能随心所欲。

苏珊的内心结构:装傻才能获益

装傻虽然可以获益,可是如果不是绝顶的聪慧,装傻得来的利益只是短暂获益。有时候傻有傻福,但在更多的时候傻却会破坏原本看来还算平衡的关系。装傻是否有效要看那个男人是否真正愿意示强,不然,装傻会让男人很烦!处理这样的情爱关系就是提醒她装傻后面骨子里透着的聪明,让她慢慢学会用聪明的语气和精干的行为去直面婚姻。

March 23

水木上的一篇感悟<转>

最近大盘一路向下,工作和感情又诸多不顺利,所以非常沮丧,想休假去散心。。
        刚才在开会讨论,几个竞争的解决方案究竟应该用哪一个,唇枪舌剑好不热闹
        觉得很有趣,也不想去散心了。 我突然顿悟了:
1、一个人就是一个小的entreprenuer/enterprise
        把自己做大的过程,其实跟一个企业从小到大没有区别
        把这个个人企业做大,其实这里面的成就感才是最大的
        比所谓的纸面富贵重要的多
        一个人的所有资源(身体,时间,亲友支持)
        就是把这个企业从0做大的物质资料,要好好地把握,而不是追求无为,0消耗最好
2、所谓的患得患失,其实是看自己如何少付出,如何多得到,不管是不是应得的
        事实上,这是一个庸俗观念里面不劳而获的想法,
        这种想法,通过bbs上面不劳动的家庭主妇的显摆贴传播
        并且通过收入不错但没有老婆,希望通过显摆贴博得未婚女青睐的男生的帖子加强
        可是假如用一个小企业在激烈竞争中建立一席之地的角度来看 个人奋斗的问题
        其实用最小的投入获得几倍于平均的产出,在一个小企业是根本不可能的
        所以,之所以追求这种表面上大众青睐的“睡觉睡到自然醒,数钱数到手抽筋”而不得
        原因就是这根本就是一个无解的命题!
        解决的唯一办法,就是树立正确的人生观,价值观,自食其力,低调做人踏实做事。
        同时近朱者赤,近墨者黑,慎重的选择朋友圈,不跟有不劳而获价值观的人打交道

Unix Power

上上周老大突然让我帮另外一个同事写一个小工具:分析ELF文件,检查函数入口地址是否为16 BYTES对齐,若不是,则提示函数名。函数入口16 BYTES对齐是同事在移植Linux Kernel时发现的,公司的CPU为何有这样的要求的具体原因我还不清楚。老大吩咐的,只能照办了。

思路有两个,1)用C语言使用BFD库实现读写ELF文件信息,通过函数符号表找到函数入口地址,判断该地址是否为16 BYTES对齐。这个思路应该是直接的,问题是a) BFD库函数不容易使用,b) 代码实现和维护会非常罗嗦。应该有另外的办法。2)能否使用GNU Binutils和脚本实现?类似的工具自己以前也没有开发过,不过直觉告诉我这样的方法应该是行得通的。

开始按照第二个思路查找和构思具体的实现方法,开始时,我想用readelf工具,看能否找出elf文件中每一个函数的入口地址,尝试了很多的参数,还是没有找到方法。后来看了下readelf的同胞兄弟objdump,发现这个工具有一个很好的选项-d ,可以将elf文件的反汇编输出。输出以函数为单位组织反汇编代码。objdump -d可以输出函数的入口地址,只是其输出的信息太多了,以至于有用的信息只占了1%还不到,如何找?当然是grep了。仔细看,objdump -d的输出包含函数名的行有如下固定的格式:“0x100080 <kernel_start>:”,前者是函数入口地址,尖括号中间为函数名,那太好办了。用grep可以只将函数入口地址过虑输出。后面应该是判断前面的函数入口地址是16的倍数了,这个也很容易,写一个C语言小程序,输入为十六进制的数和函数名,判断十六进展数是否为16的倍数,若不是,则输出函数名。

现在的问题是如何将这些工具组合在一起了,Unix下将工具组合成一起使用最方便的方式是使用管道和重定向了。不过另外一个工具的组合作用也非同小可:xargs。

最后成的思路是:用objdump -d 输出elf文件的反汇编代码,使用grep工具过虑出其中的函数入口地址和函数名信息,通过xargs将这两个参数传给C程序showit:选择非16字节对齐的地址的函数输出函数名。最后的输出还有一点杂信息:输出中包含“<>:”,那也容易,使用tr -d "<>:"可以删除之。

最后的脚本是:
       objdump -d $1 | grep "<*>:" | tr -d "<>:" >> $1.sym
       cat $1.sym | xargs -n 2 ./showit

用同样的思路写了同样的工具处理Linux内核编译时产生的map文件。map文件是一个纯文本文件,更容易处理,只是其中显示函数入口地址和函数名的格式和objdump -d的输出有点不一样,不过也容易处理。

最后的脚本是:
        grep -i " t " $1 | awk '{print $1 " " $3}' >> $1.sym
        cat $1.sym | tr -d "<>:" |xargs -n 2 ./showit

结论:1)、Unix中提供了很多的小工具,若能正确记忆和快速使用,对解决问题会有很好启发和帮助。2)、Unix解决问题的哲学是将大问题分解成足够小的小问题,解决这些小问题或者可以使用已有的工具,或者你自己书写工具。然后通过组合方法,完整解决原来的问题。自己书写的这些小工具通常容易书写正确、维护简单。

Programming Pearls书中有关于这样解决问题的绝好例子:给定一本英语单词词典,找出所有的变位词集。变位词是指通过改变原单词字母顺序可以得到的另外单词。如"stop", "tops", "pots"互为变位词。算法如下图:

image

我对其算法没有太多的印象了,印象深刻的是原来这样杂乱的问题的解决方法原来是可以这样的。在上面的算法中,自己只需要实现sign和squash程序,两个程序都非常容易正确实现。

March 21

找工作的经过(2)

十一国庆的七天放假,我是在赶毕业论文初稿中昏天暗地地度过的。终于在导师十一放假上班之前,把论文的初稿电邮给了他。初稿几乎不能被正常阅读,格式错误和错别字满页面。可那已经几乎是我9月份一个月专心写论文的全部成果了。在论文答辩完成后,我感叹着,没有经过论文训练的人,写这样毕业论文,是跟女人生孩子是有的一拼的,还好一些材料自己还是“肚中有”的,不然只会比女人生孩子更惨。

在十一前后,我疯狂地在51job、chinahr和ciicjob等招聘网站上投许多企业的校园招聘职位,十月下旬和十一月的我基本上是在修改论文、笔试、面试和准备面试这样的循环过去的。由于之前的工作经历,我的职位申请表格上有了很好的项目经验,这样使得自己提交简历的职位几乎都有笔试机会。现在回想,几乎所有国外知名的企业在这次找工作的过程中我都有了或多或少的接触经验,这也符合我自己这次找工作的初衷,借机接触一下这些闪光的外企中,普通员工的工作格调是什么样子的。外企令人瞩目的纯IT名录中除MS和Google这两个第一集团外,第二集团的如Cisco、Intel、IBM、Oracle、Sybase、Adobe、HP等也有了直接的感触,其他还看到到了索爱、EMC、宝利通、Synopsis、Cadence等行业公司。国内的IT公司中,我提交了3份简历,分别是百度、网易和腾讯,这三家国内最挣钱的IT企业,以事后诸葛亮的心态分析之,他们现在确实很有吸引人之处,主要体现在给技术人员的待遇不错,做的事情也有意思等方面。这也改变了我从前老觉得国内IT企业没有技术、做长久不了的念头。

百度也是一名师兄推荐的,在十一假后的第三天收到面试通知,在10月12日去了中关村普天大厦参加了百度PS部门的面试,因为十一前寝室的同学老杜去过百度面试,加上边上的同学和BBS上的意见总体上对百度的技术面试看法不错:不是特别偏,但能考查基本的数据结构和算法知识。我把殷人昆老大的数据结构书过了一遍算是准备了。百度总共是三面,道上的消息是第一面、第二面基本上面技术,第三面面非技术。我的经历有些不同,也让自己很感叹。

第一面的时候碰到了一位能聊的很好的老兄,基本上他听我说了我的项目经历,他介绍了在百度工作的体会,他的“在百度的PS部门工作,基本上能碰到很难的问题,这些问题是大规模数据处理中新出现到的,因而没有现成的解决方法,基本上需要开发人员不断思考、不断尝试才能得到很好的结果”让我对搜索技术有了新的看法,让我有一种这个岗位工作内容还是蛮有挑战性的念头,最后这位老兄给我出了两三个比较容易的算法,我给了答案后并简单聊了会后他说,你等着,我通知下一位面试官来。这样我做在那个会议室里面等了大概10多分钟,在这10多分钟,我情绪有些高昂了:百度面试好像很容易?

第二位面试官进来后刚刚坐下,我们就被推门进来的人给打断了,说这个会议室已经有预约了。然后我们开始找、找、找面试的会议室,最后还是没有找到可用的会议室,我们到了大厦南面的休闲区,那里一小群一小群的人正在讨论、面试等等。我们找了一个小桌子,开始了进一步的面试。第二位面试官比较有意思,一上来不介绍自己,也不和你闲聊,也不是按照常规的说你先介绍一下你自己和项目经验等。正式打招呼的第一句话是,请用C语言写一个文件拷贝的函数。我问了一下需求,然后磕头在白纸上写代码。他则低头开始看我的简历。几分钟后,我检查了代码说已经写好了,他然后抬头。真正的面试开始了,算法、数据结构的问题比第一位面试官稍微需要多动脑筋些,但还算比较中规中矩的。我觉得这些题目不算很难,发散思维的思考基本上都能答好。可是,这一面我的表现却可能是我后面被拒的主要原因。我的一个事后反省是,可能是在刚刚开始回答某一道题的时候,我的思想还不能集中,那个题目的答案经过他的多次提示后我才给出了比较满意的答案,后面他问说为什么你一开始没有想到最后的方法,我回答说好像我的思路跟着你的提示走了。这应该是在技术面试比较致命的错误回答吧!后面问题的过程中,我的解答也没有特别出色,因而很可能他对我的能力产生了疑问导致他们需要仔细考虑我。不过当时的我情绪还是继续高昂着,因为我觉得他问的问题都答出来了,后来才知道,对于一些公司来讲,你仅仅能给出答案是很不够的,尤其是以Google为甚。

第三面的面试官也是等了好久才来,在等的过程中,我是坐在那里一边高兴着一边旁听边上的一位市场部门的面试,然而,据我的观察,那位被面试者的品味实在不是咋的,对市场和产品的看法象是一名中专毕业生工作几年后的水平。让我产生一种百度真是鱼龙混杂啊的感觉。第三面的面试还是技术,不过是设计类的,那时面试大概已经进行了2个半小时,我感觉自己没有特别的精神来继续了。可惜那位老兄在整个过程中脸上始终是半自然半职业的笑容,让我看不出他对我的设计的态度,没有办法只好继续死坚持着。他问的两个设计问题以“如果让你来设计编译器,你会怎么设计”和“你怎么最简单设计和实现百度的贴吧”为展开。对编译器我还有一点认识,我说若从头开始设计实现编译器的话,首先要设计一个好的IR,在同一个层面或者是不同的层面上提供好的优化支持,然后前端、优化和后端需要设计良好的模块化,使用驱动提供不同的优化编译支持,最后能提供很好的调试支持。我的这些编译实现理念基本上是来自对Open64的认识。可惜这些似乎他也不能很理解。我们花了很多时间讨论后面一个问题,包括数据库如何设计、如何实现用户浏览和添加主题的高效性和分布式数据存储的高效实用性。这些东西我没有直接的经验,所以只能是按构思“侃”了。最后这位老兄问了我对加班熬夜的看法,还没有等我说出我的看法,他说其实你们通过考研的人应该对这些没有什么感觉了对吧。我不合时宜的补充说,我考研的时候作息是很有规律的。最后在我问到他的名字时,他在纸上给我写了拼音,出现了一个比较有意思的事情,他的名字拼音居然是我的名字拼音的文字倒序,六个汉字的拼音是两两一致的,只是文字是倒序。非常有意思~~~

对感情的一些看法

知道了自己为什么喜欢一个人是一件恐怖的事情,几乎当你了解原因时,也是自己对她或他的感情结束时。或者说当自己想要了解为什么会喜欢一个人时,很可能自己已经是对感情产生疑问的时候,而这种疑问无疑是很有破坏性的。在感情中不要问为什么,不要去追求所谓感情的真相是明智的情感处理策略。

一个人若让你产生喜欢的感觉,总有那么一个或者多个原因的,或者是在当时他的某一个笑容吸引了你,或者是他的某一个关心的话语感动了你,或者纯粹是你潜意识中觉得她在你的身边对你会有帮助,等等等等的原因,你却不能去追问自己或者他人为什么喜欢。因为,一旦这种喜欢被了解了,你会疑问怎么可能就他的这一点被吸引了呢?自己也会产生怎么能这么容易被吸引的疑问,同时,这种情况下就少了感情的必配调料-神秘感,这对很多人来说尤其是以感觉为指导的女孩子来说是不可接受的。

对自己曾经而被吸引同时有情感接触过的女孩子,在某一个时候,我也总在疑问,自己为什么被他们吸引了。想来想去,结论是除去外在的,还真的不是因为内在的原因喜欢一个人。因而在这个时候,总是对自己的审美层次产生疑问,也同时在疑问着自己怎么如此的肤浅,不了解一个人而盲目的喜欢之。这和自己一贯深层次的思考问题方式不一致啊!也许有人会说,大部分女孩子是没有内在的,对此我也谨慎地表示同意。还是因为我们就是这样的人,所以接触到的也都是这样的人,或者说我们没有认真去了解?

所以,现在得到的教训是,当对某一个人有好感时,要警告自己不要因为外在的原因而喜欢,因为这种喜欢来得快,去的也会快。这是一个原因,更为重要的是自己不是这种人,自己不能因为外在的美而能被人喜欢。外在的美包含两种情况,一种是外表的美,一种是表现的美。或者正是因为自己外表的美普普通通,表现的美也是一般一般,所以自己总会被这类人吸引。很矛盾的说。解决之道可能是增加自己的这两种美,这样至少先可以吸引与我一般不会表现的人 :)

对感情的小结是,你是什么样的人,你自己的性格怎么样,你的价值观是什么,就去找什么样性格和价值观的人,千万不要抱有改造或者塑造人的想法,太难太难了。倒是可能是两个人在相互吸引、相互信任后,因看到对方的好,一方会潜移默化。

March 19

找工作的经过(1)

从去年的9月24日投出的第一份简历算起,到自己在上个学期末离校前收到的最后一份offer,再到今天正式上班满一个月,分别是过去了4个月和2个月。感叹时间在飞驶,而自己进步的却很慢。写一个总结,记录去年在毕业的最后一个学期里,自己找工作时候的一点体会。这段时间的经历,我相信在我以后的生活中很难再重体验到了。

从研究生第五个学期开学,已经有寝室和实验室的同学在感叹着要赶快找工作了,加上一些大的公司在9月份就开始了进学校的宣讲会,求职的气氛很早就对与要毕业的人来说是相当的浓厚了。那时的我正着手开始写毕业论文,鉴于论文被学校抽查的恐惊,我对论文是改之又改直到11月下旬才确稿,我的求职过程和写改论文的过程是交织着同步进行着的,这段时间很是折磨和历练了自己,回头看看,还是蛮有意思的一段时间。刚开始时,我老跟那些那时候就急着要找工作的同学说:要这么着急找工作干吗,象我们总能收到几个offer的,到时从中选择比较好的一个不就得了吗?事实证明我的这个话自大了一些,尽管最后我自己也正如我说的收到了几个offer并从中选择了比较好的,但是,这些offer中并没有自己最想要的...

若算上所有的口头和正式offer,我总共收到了7个offer,一个国企和六个外企的。按照时间顺序分别是航天五院、高明网络简约纳电子索尼爱立信公司Candance惠普上海GDCC宝利通。很有意思的是,这些收到offer的单位中,除了宝利通是通过校园招聘过程比较烦琐外,其他给我发offer的单位面试的过程都不麻烦,好几家或者是公司的HR、或者是公司的技术负责人或者是通过猎头找到了我的简历而给我面试机会的。这说明了,1) 对于求职者,简历和经历是求职过程中最好的敲门砖;2) 对于对你认识到位并且感觉你适合岗位要求的公司,面试的过程通常不会很麻烦,若过程比较麻烦,只说明了,这个公司对你的岗位要求还需要进一步的考查。同时,也说明了我的自我推销能力极其差劲,只能获取对我有意愿的公司的offer,而不能向一些应聘过的大公司如IBM、Adobe和Cisco等推销自己成功。虽然光就技术水平而言,自我感觉的水平远远地超过了他们对校园招聘的要求:)  当然面试成功与否还是与其他的很多因素相关的。

2007年9月24日,google在清华做宣讲会,我投出了毕业求职的第一份简历。简历被google的HR们以google处理搜索请求的速度处理了,25日我收到26日到google大厦on site writing test的通知,26号晚上收到27号早上9点开始面试的通知,27号面试过后,我着急地等待着下一轮面试的通知,可惜,正如当天面试完担心的一样,27号晚上我没有收到进一步面试的通知,而在十一期间收到google hr 婉据的email。让我感叹万分,为什么明明不可以又偏偏给人希望呢?其实这个结果我应该早料到,之前在google招聘实习生的时候,我也曾有过2次去google面试的机会,但结果都是惨不忍睹,第一次在第一轮被据,第二次在第二轮被拒。惨痛的事实说明了,我离google的算法要求还比较远,鉴于算法几乎是所以国内没有参加过计算机奥赛的学生的软肋,我也不例外,加上之前自己也没有完全很好的准备,所以不能通过面试也是正常的,我这样对自己说也就原谅了自己~~~  去那边面试多了也有一个好处,基本上知道了他们是怎么面试人的。这样的经验也很好。

2007年10月13日,我参加了微软校园招聘的笔试,之前我让在微软的同实验室师兄帮忙推荐面试机会,本已不需要参加MS的笔势,但是我参加之前的念头却有:听说微软的笔势很难,正是证明自己的机会;若考得好成绩的话,可以为面试加分等等。可惜如意算盘全盘落空,在笔试的时候,100的卷面分数,我只完成了50分的部分,最后在11月份出来的成绩也是大大跌了自己的眼镜和面子。不过,不管怎么说,师兄的推荐还是很起作用的,我把简历发给师兄大概过了两周,我就收到了MS 系统组的电面通知,可惜这个电面也是让人不痛快,因为我在电面的时候介绍的编译器后端我觉得面试官听不懂,甚至让我感觉面试官的编译器知识和体会很是来源于书本的,对于工程中关心的问题,他可能很没有经验。所以我介绍的东西他提不起兴趣,我也感觉到了他的态度,因而心冷了越没有兴趣进一步介绍了。后面他的问题是,请你说一下进程和线程的区别,然后电试以你对MS中国有什么问题吗的面试官的匆匆回答结束。后来在吃饭的时候和实验室的同学聊起,我很感慨为什么面试官要问进程和线程之间的区别这样书本面的知识,同学说,一般面试官觉得你没有戏了,他会问你一个比较简单的问题,好再给你一次机会这样。想想,还是有道理的,不过问我这样折腾编译器的人操作系统这样可难可易的问题,还是让我faint了一把。