<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[福娃居]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[未曾清贫难成人,不经打击老天真。自古英雄出炼狱,从来富贵入凡尘。醉生梦死谁成气,拓马长枪定乾坤。挥军千里山河在,立名扬威传后人。]]></description>
<link>http://hi.baidu.com/mych</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[10年编程无师自通]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/a8bcd41be3350ddfac6e750a.html]]></link>
        <description><![CDATA[
		
		<strong>原文：</strong><a class="l2" href="http://www.norvig.com/21-days.html" target="_blank"><u>Teach Yourself Programming in Ten Years</u></a><br>
<strong>作者：</strong><a class="l2" href="http://www.norvig.com/index.html" target="_blank"><u>Peter Norvig</u></a><br>
<strong>翻译：</strong>郭晓刚（<a class="l2" href="mailto:foosleeper@163.net" target="_blank"><u>foosleeper@163.net</u></a>）<br>
<strong>最后修订日期：</strong>2004-3-19<br>
2005-01-12增加了新的译本链接。<br>
<br>
本中文译本得到了Peter Norvig的许可。<br>
<br>
<br>
<h3>为什么每个人都急不可耐？</h3>
<br>
走进任何一家书店，你会看见《Teach Yourself Java in 7 Days》（7天Java无师自通）的旁边是一长排看不到尽头的类似书籍，它们要教会你Visual Basic、Windows、Internet等等，而只需要几天甚至几小时。我在<a class="l2" href="http://www.amazon.com/" target="_blank">Amazon.com</a>上进行了如下<a class="l2" href="http://www.amazon.com/exec/obidos/tg/browse/-/468558/104-5938873-6579160" target="_blank"><u>搜索</u></a>：<br>
　　　　<a class="l2" href="http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=+featuredrank&amp;fqp=power%01pubdate:%20after%201992%20and%20title:%20days%20and%20(title:%20learn%20or%20title:%20teach%20yourself)&amp;sz=25&amp;pg=1/ref=s_b_np" target="_blank"><u>pubdate: after 1992 and title: days and (title: learn or title: teach yourself)</u></a><br>
　　　　(出版日期：1992年后 and 书名：天 and （书名：学会 or 书名：无师自通）)<br>
我一共得到了248个搜索结果。前面的78个是计算机书籍（第79个是《<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0781802245/" target="_blank"><u>Learn Bengali in 30 days</u></a>》，30天学会孟加拉语）。我把关键词&ldquo;days&rdquo;换成&ldquo;hours&rdquo;，得到了非常相似的结果：这次有253本书，头77本是计算机书籍，第78本是《<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0028638999/" target="_blank"><u>Teach Yourself Grammar and Style in 24 Hours</u></a>》（24小时学会文法和文体）。头200本书中，有96%是计算机书籍。<br>
结论是，要么是人们非常急于学会计算机，要么就是不知道为什么计算机惊人地简单，比任何东西都容易学会。没有一本书是要在几天里教会人们欣赏贝多芬或者量子物理学，甚至怎样给狗打扮。<br>
让我们来分析一下像《<a class="l2" href="http://www.amazon.com/exec/obidos/ISBN=1556225679/4094-7934802-027992" target="_blank"><u>Learn Pascal in Three Days</u></a>》（3天学会Pascal）这样的题目到底是什么意思：<br>
<ul><br>
    <li><strong>学会：</strong>在3天时间里，你不够时间写一些有意义的程序，并从它们的失败与成功中学习。你不够时间跟一些有经验的程序员一起工作，你不会知道在那样的环境中是什么滋味。简而言之，没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通，而非深入的理解。如Alexander Pope（译注：英国诗人、作家，1688-1744）所言，一知半解是危险的（a little learning is a dangerous thing）。</li>
    <li><strong>Pascal：</strong>在3天时间里你可以学会Pascal的语法（如果你已经会一门类似的语言），但你无法学到多少如何运用这些语法。简而言之，如果你是，比如说一个Basic程序员，你可以学会用Pascal语法写出Basic风格的程序，但你学不到Pascal真正的优点（和缺点）。那关键在哪里？<a class="l2" href="http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html" target="_blank"><u>Alan Perlis</u></a>（译注：ACM第一任主席，图灵奖得主，1922-1990）曾经说过：&ldquo;如果一门语言不能影响你对编程的想法，那它就不值得去学&rdquo;。另一种观点是，有时候你不得不学一点Pascal（更可能是Visual Basic和JavaScript之类）的皮毛，因为你需要接触现有的工具，用来完成特定的任务。但此时你不是在学习如何编程，你是在学习如何完成任务。</li>
    <li><strong>3天：</strong>不幸的是，这是不够的，正如下一节所言。</li>
</ul>
<br>
<br>
<br>
<h3>10年编程无师自通</h3>
<br>
一些研究者（<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0805803092" target="_blank"><u>Hayes</u></a>、<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/034531509X/" target="_blank"><u>Bloom</u></a>）的研究表明，在许多领域，都需要大约10 年时间才能培养出专业技能，包括国际象棋、作曲、绘画、钢琴、游泳、网球，以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径：即使是莫扎特，他4 岁就显露出音乐天才，在他写出世界级的音乐之前仍然用了超过13年时间。再看另一种音乐类型的代表--披头士，他们似乎是在1964年的Ed Sullivan节目中突然冒头的。但其实他们从1957年就开始表演了，即使他们很早就显示出了巨大的吸引力，他们第一次真正的成功之作《Sgt. Peppers》也要到1967年才发行。Samuel Johnson（译注：英国诗人）认为10 年还是不够的：&ldquo;任何领域的卓越成就都只能通过一生的努力来获得；稍低一点的代价也换不来。&rdquo;（Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.） 乔叟（译注：Chaucer，英国诗人，1340-1400）也抱怨说：&ldquo;生命如此短暂，掌握技艺却要如此长久。&rdquo;（the lyf so short, the craft so long to lerne.）<br>
下面是我在编程这个行当里获得成功的处方：<br>
<ul><br>
    <li>对编程感兴趣，因为乐趣而去编程。确定始终都能保持足够的乐趣，以致你能够将10年时间投入其中。</li>
    <li>跟其他程序员交谈；阅读其他程序。这比任何书籍或训练课程都更重要。</li>
    <li>编程。最好的学习是<a class="l2" href="http://www.engines4ed.org/hyperbook/nodes/NODE-120-pg.html" target="_blank"><u>从实践中学习</u></a>。用更加技术性的语言来讲，&ldquo;个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的，但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。&rdquo;（<a class="l2" href="http://www2.umassd.edu/swpi/DesignInCS/expertise.html" target="_blank"><u>p. 366</u></a>），而且&ldquo;最有效的学习要求为特定个体制定适当难度的任务，有意义的反馈，以及重复及改正错误的机会。&rdquo;（p. 20-21）《<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0521357349" target="_blank"><u>Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</u></a>》（在实践中认知：心智、数学和日常生活的文化）是关于这个观点的一本有趣的参考书。</li>
    <li>如果你愿意，在大学里花上4年时间（或者再花几年读研究生）。这能让你获得一些工作的入门资格，还能让你对此领域有更深入的理解，但如果你不喜欢进学校，（作出一点牺牲）你在工作中也同样能获得类似的经验。在任何情况下，单从书本上学习都是不够的。&ldquo;计算机科学的教育不会让任何人成为内行的程序员，正如研究画笔和颜料不会让任何人成为内行的画家&rdquo;，Eric Raymond，《The New Hacker's Dictionary》（新黑客字典）的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历；但他创造出了许多<a class="l2" href="http://www.xemacs.org/" target="_blank"><u>伟大的</u></a><a class="l2" href="http://www.mozilla.org/" target="_blank"><u>软件</u></a>，甚至有讨论他本人的<a class="l2" href="http://groups.google.com/groups?q=alt.fan.jwz&amp;meta=site%3Dgroups" target="_blank"><u>新闻组</u></a>，而且股票期权让他达到我无法企及的富有程度（译注：指<a class="l2" href="http://www.jwz.org/" target="_blank"><u>Jamie Zawinski</u></a>，XEmacs和Netscape Navigator的作者）。</li>
    <li>跟别的程序员一起完成项目。在一些项目中成为最好的程序员；在其他一些项目中当最差的一个。当你是最好的程序员时，你要测试自己领导项目的能力，并通过你的洞见鼓舞其他人。当你是最差的时候，你学习高手们在做些什么，以及他们不喜欢做什么（因为他们让你帮他们做那些事）。</li>
    <li>接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。</li>
    <li>学会至少半打编程语言。包括一门支持类抽象（class abstraction）的语言（如Java或C++），一门支持函数抽象（functional abstraction）的语言（如Lisp或ML），一门支持句法抽象（syntactic abstraction）的语言（如Lisp），一门支持说明性规约（declarative specification）的语言（如Prolog或C++模版），一门支持协程（coroutine）的语言（如Icon或Scheme），以及一门支持并行处理（parallelism）的语言（如Sisal）。</li>
    <li>记住在&ldquo;计算机科学&rdquo;这个词组里包含&ldquo;计算机&rdquo;这个词。了解你的计算机执行一条指令要多长时间，从内存中取一个word要多长时间（包括缓存命中和未命中的情况），从磁盘上读取连续的数据要多长时间，定位到磁盘上的新位置又要多长时间。（<a class="l2" href="http://www.norvig.com/21-days.html#answers" target="_blank"><u>答案在这里。</u></a>）</li>
    <li>尝试参与到一项语言标准化工作中。可以是ANSI C++委员会，也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种，你都可以学到在这门语言中到底人们喜欢些什么，他们有多喜欢，甚至有可能稍微了解为什么他们会有这样的感觉。</li>
    <li>拥有尽快从语言标准化工作中抽身的良好判断力。</li>
</ul>
<br>
抱着这些想法，我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前，我读完了所有&ldquo;怎样……&rdquo;的书，却仍然感到自己是个茫无头绪的新手。30个月后，我第二个孩子出生的时候，我重新拿起那些书来复习了吗？不。相反，我依靠我自己的经验，结果比专家写的几千页东西更有用更靠得住。<br>
Fred Brooks在他的短文《<a class="l2" href="http://citeseer.nj.nec.com/context/7718/0" target="_blank"><u>No Silver Bullets</u></a>》（没有银弹）中确立了如何发现杰出的软件设计者的三步规划：<br>
<ol><br>
    <li>尽早系统地识别出最好的设计者群体。</li>
    <li>指派一个事业上的导师负责有潜质的对象的发展，小心地帮他保持职业生涯的履历。</li>
    <li>让成长中的设计师们有机会互相影响，互相激励。</li>
</ol>
<br>
这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质；要做的只是引导他们前进。<a class="l2" href="http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html" target="_blank"><u>Alan Perlis</u></a>说得更简洁：&ldquo;每个人都可以被教授如何雕塑；而对米开朗基罗来说，能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样&rdquo;。<br>
所以尽管去买那些Java书；你很可能会从中找到些用处。但你的生活，或者你作为程序员的真正的专业技术，并不会因此在24小时、24天甚至24个月内发生真正的变化。<br>
<br>
<br>
<h3>参考文献</h3>
<br>
Bloom, Benjamin (ed.) <a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/034531509X" target="_blank"><u>Developing Talent in Young People</u></a>, Ballantine, 1985. <br>
Brooks, Fred, <a class="l2" href="http://citeseer.nj.nec.com/context/7718/0" target="_blank"><u>No Silver Bullets</u></a>, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19. <br>
Hayes, John R., <a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0805803092" target="_blank"><u>Complete Problem Solver</u></a>, Lawrence Erlbaum, 1989. <br>
Lave, Jean, <a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0521357349" target="_blank"><u>Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</u></a>, Cambridge University Press, 1988. <br>
<br>
<br>
<h3>答案</h3>
<br>
各种操作的计时，2001年夏天在一台典型的1GHz PC上完成：<br>
　　　　执行单条指令　　　　　　　　　　　　1 纳秒 = (1/1,000,000,000) 秒<br>
　　　　从L1缓存中取一个word　　　　　　　　2 纳秒<br>
　　　　从主内存中取一个word　　　　　　　　10 纳秒<br>
　　　　从连续的磁盘位置中取一个word　　　　200 纳秒<br>
　　　　从新的磁盘位置中取一个word（寻址）　8,000,000纳秒 = 8毫秒<br>
<br>
<br>
<h3>脚注</h3>
<br>
T. Capey指出Amazon上面《<a class="l2" href="http://www.amazon.com/exec/obidos/ASIN/0805803092" target="_blank"><u>Complete Problem Solver</u></a>》的页面中，《Teach Yourself Bengali in 21 days》和《Teach Yourself Grammar and Style》被列在了&ldquo;购买此书的顾客还买了以下书籍&rdquo;栏目里面。我猜其中一大部分察看这两本书的人都是从我这里过去的。<br>
<br>
<br>
<h3>译本</h3>
<br>
感谢以下作者将本文翻译成其他语言：<br>
<a class="l2" href="http://www.yamdas.org/column/technique/21-daysj.html" target="_blank"><u>日文</u></a>（Yasushi Murakawa），<a class="l2" href="http://www.javaresearch.org/article/showarticle.jsp?column=451&amp;thread=12568" target="_blank"><u>中文</u></a>（郭晓刚），<a class="l2" href="http://www.open-asm.com/article/tenyears.htm" target="_blank"><u>繁体中文</u></a>（Jason Chen），<a class="l2" href="http://loro.sf.net/notes/21-dias.html" target="_blank"><u>西班牙文</u></a>（Carlos Rueda），<a class="l2" href="http://purl.net/stefan_ram/html/21-tage" target="_blank"><u>德文</u></a>（Stefan Ram），<a class="l2" href="http://pixx.objectis.net/public/21-jours.html" target="_blank"><u>法文</u></a>（P. E. Allary），<a class="l2" href="http://ileriseviye.org/arasayfa.php?inode=programmingtenyears.html" target="_blank"><u>土耳其文</u></a>（&Ccedil;a&#287;&#305;l Ulu&#351;ahin）。<br>
<br>
<br>
<a class="l2" href="http://www.norvig.com/index.html" target="_blank"><u>Peter Norvig (Copyright 2001)</u></a> <br>

 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%C8%ED%BC%FE%CB%BC%CF%EB">软件思想</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/a8bcd41be3350ddfac6e750a.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月19日 星期六  17:00</pubDate>
        <category><![CDATA[软件思想]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/a8bcd41be3350ddfac6e750a.html</guid>
</item>

<item>
        <title><![CDATA[Windows Service下的MessageBox]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/a364a1ef766b991cfcfa3c79.html]]></link>
        <description><![CDATA[
		
		<p><font style="background-color: #b45f06">因为项目的原因今天又搞起了Windows service,由于项目的需求要在windows下show一个messageBox出来.我记得以前曾经搞过,拍胸脯说Ok,这个好办.</font></p>
<p><font style="background-color: #b45f06">我记得windows service call一下win32的MessageBox就搞定了吧</font></p>
<p> </p>
<fieldset>int MessageBox(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;  HWND <em>hWnd</em>,&nbsp;&nbsp;&nbsp;&nbsp;  LPCTSTR <em>lpText</em>,&nbsp;&nbsp;&nbsp;&nbsp;  LPCTSTR <em>lpCaption</em>,&nbsp;&nbsp;&nbsp;&nbsp;  UINT <em>uType</em> );</fieldset><font style="background-color: #b45f06"> </font>
<p> </p>
<p><font style="background-color: #b45f06">DllImport一下,咦,没有反应.囧</font></p>
<p><font style="background-color: #b45f06">查了一下才知道,这个方式在visit之后就不好使了.我们可以通过WTTSendMessage来发送消息.</font></p>
<fieldset><font face="Courier New">BOOL WTSSendMessage(<br>
__in&nbsp;&nbsp;  HANDLE <em>hServer</em>,<br>
__in&nbsp;&nbsp;  DWORD <em>SessionId</em>,<br>
__in&nbsp;&nbsp;  LPTSTR <em>pTitle</em>,<br>
__in&nbsp;&nbsp;  DWORD <em>TitleLength</em>,<br>
__in&nbsp;&nbsp;  LPTSTR <em>pMessage</em>,<br>
__in&nbsp;&nbsp;  DWORD <em>MessageLength</em>,<br>
__in&nbsp;&nbsp;  DWORD <em>Style</em>,<br>
__in&nbsp;&nbsp;  DWORD <em>Timeout</em>,<br>
__out DWORD *<em>pResponse</em>,<br>
__in&nbsp;&nbsp;  BOOL <em>bWait</em><br>
);</font></fieldset><br>
<p> </p>
<p><font style="background-color: #b45f06">安装国际惯例我们包一层供别人更好的使用</font></p>
<p> </p>
<div class="cnblogs_code"><font style="background-color: #b45f06"><span style="color: #008080">1</span><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span></font><font style="background-color: #b45f06"><span style="color: #000000"> MessageBox <br>
</span><span style="color: #008080">2</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span></font><span><font style="background-color: #b45f06"><span style="color: #000000">{ <br>
</span><span style="color: #008080">3</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> IntPtr WTS_CURRENT_SERVER_HANDLE </span><span style="color: #000000">=</span></font><font style="background-color: #b45f06"><span style="color: #000000"> IntPtr.Zero; <br>
</span><span style="color: #008080">4</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> WTS_CURRENT_SESSION </span><span style="color: #000000">=</span></font><font style="background-color: #b45f06"><span style="color: #000000"> WTSGetActiveConsoleSessionId(); <br>
</span><span style="color: #008080">5</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000"> MessageBoxResult Show(</span><span style="color: #0000ff">string</span><span style="color: #000000"> title, </span><span style="color: #0000ff">string</span></font><font style="background-color: #b45f06"><span style="color: #000000"> text, MessageBoxButtons messageBoxButtons) <br>
</span><span style="color: #008080">6</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span></font><span><font style="background-color: #b45f06"><span style="color: #000000">{ <br>
</span><span style="color: #008080">7</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  var style </span><span style="color: #000000">=</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000">)messageBoxButtons; <br>
</span><span style="color: #008080">8</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> resp </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span></font><font style="background-color: #b45f06"><span style="color: #000000">; <br>
</span><span style="color: #008080">9</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
</span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  var result </span><span style="color: #000000">=</span></font><font style="background-color: #b45f06"><span style="color: #000000"> WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, title, title.Length, text, <br>
</span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  text.Length, style, </span><span style="color: #800080">0</span><span style="color: #000000">, </span><span style="color: #0000ff">out</span><span style="color: #000000"> resp, </span><span style="color: #0000ff">true</span></font><font style="background-color: #b45f06"><span style="color: #000000">); <br>
</span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> error </span><span style="color: #000000">=</span></font><font style="background-color: #b45f06"><span style="color: #000000"> Marshal.GetLastWin32Error(); <br>
</span><span style="color: #008080">13</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Marshal.ThrowExceptionForHR(error); <br>
</span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span></font><font style="background-color: #b45f06"><span style="color: #000000"> (MessageBoxResult)resp; <br>
</span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;  }</span></font></span><font style="background-color: #b45f06"><span style="color: #000000"> <br>
</span><span style="color: #008080">16</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
</span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  [DllImport(</span><span style="color: #800000">&quot;</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">&quot;</span></font><font style="background-color: #b45f06"><span style="color: #000000">)] <br>
</span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> WTSGetActiveConsoleSessionId(); <br>
</span><span style="color: #008080">19</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
</span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  [DllImport(</span><span style="color: #800000">&quot;</span><span style="color: #800000">wtsapi32.dll</span><span style="color: #800000">&quot;</span><span style="color: #000000">, SetLastError </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span></font><font style="background-color: #b45f06"><span style="color: #000000">)] <br>
</span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #0000ff">bool</span></font><font style="background-color: #b45f06"><span style="color: #000000"> WTSSendMessage( <br>
</span><span style="color: #008080">22</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  IntPtr hServer, <br>
</span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.I4)] </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> SessionId, <br>
</span><span style="color: #008080">24</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String pTitle, <br>
</span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.U4)] </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> TitleLength, <br>
</span><span style="color: #008080">26</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String pMessage, <br>
</span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.U4)] </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> MessageLength, <br>
</span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.U4)] </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> Style, <br>
</span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.U4)] </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> Timeout, <br>
</span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [MarshalAs(UnmanagedType.U4)] </span><span style="color: #0000ff">out</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span></font><font style="background-color: #b45f06"><span style="color: #000000"> pResponse, <br>
</span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span></font><font style="background-color: #b45f06"><span style="color: #000000"> bWait); <br>
</span><span style="color: #008080">32</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
</span><span style="color: #008080">33</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></font></span><font style="background-color: #b45f06"><span style="color: #000000"> <br>
</span><span style="color: #008080">34</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><br>
</span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">enum</span></font><font style="background-color: #b45f06"><span style="color: #000000"> MessageBoxResult <br>
</span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span></font><span><font style="background-color: #b45f06"><span style="color: #000000">{ <br>
</span><span style="color: #008080">37</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  None, <br>
</span><span style="color: #008080">38</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  OK, <br>
</span><span style="color: #008080">39</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  Cancel, <br>
</span><span style="color: #008080">40</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  Abort, <br>
</span><span style="color: #008080">41</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  Retry, <br>
</span><span style="color: #008080">42</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  Ignore, <br>
</span><span style="color: #008080">43</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  Yes, <br>
</span><span style="color: #008080">44</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  No <br>
</span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></font></span><font style="background-color: #b45f06"><span style="color: #000000"> <br>
</span><span style="color: #008080">46</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><br>
</span><span style="color: #008080">47</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">enum</span></font><font style="background-color: #b45f06"><span style="color: #000000"> MessageBoxButtons <br>
</span><span style="color: #008080">48</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span></font><span><font style="background-color: #b45f06"><span style="color: #000000">{ <br>
</span><span style="color: #008080">49</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  OK, <br>
</span><span style="color: #008080">50</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  OKCancel, <br>
</span><span style="color: #008080">51</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  AbortRetryIgnore, <br>
</span><span style="color: #008080">52</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  YesNoCancel, <br>
</span><span style="color: #008080">53</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  YesNo, <br>
</span><span style="color: #008080">54</span></font><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;  RetryCancel <br>
</span><span style="color: #008080">55</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></font></span><span style="color: #000000"><br>
</span><span style="color: #008080"><font style="background-color: #b45f06">56</font></span><font style="background-color: #b45f06"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><br>
</span><span style="color: #008080">57</span><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span></font></div>
<p> </p>
<p><font style="background-color: #b45f06">使用方法和普通的messagebox没有多少区别,Show方法可以根据自己的喜好重载一下咯,我就不糊代码了!</font></p>
<p> </p>
<p><font style="background-color: #b45f06">参考:</font></p>
<p><a title="http://blogs.msdn.com/yvesdolc/archive/2009/08/20/do-you-still-use-the-messagebox-api-in-your-windows-service.aspx" href="http://blogs.msdn.com/yvesdolc/archive/2009/08/20/do-you-still-use-the-messagebox-api-in-your-windows-service.aspx"><font style="background-color: #b45f06">http://blogs.msdn.com/yvesdolc/archive/2009/08/20/do-you-still-use-the-messagebox-api-in-your-windows-service.aspx</font></a></p>
<p><a title="http://msdn.microsoft.com/en-us/library/aa383842(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/aa383842(VS.85).aspx"><font style="background-color: #b45f06">http://msdn.microsoft.com/en-us/library/aa383842(VS.85).aspx</font></a></p>
<p><a title="http://www.pinvoke.net/default.aspx/wtsapi32/WTSSendMessage.html" href="http://www.pinvoke.net/default.aspx/wtsapi32/WTSSendMessage.html"><font style="background-color: #b45f06">http://www.pinvoke.net/default.aspx/wtsapi32/WTSSendMessage.html</font></a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/windows%20%BF%AA%B7%A2">windows 开发</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/a364a1ef766b991cfcfa3c79.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月12日 星期六  14:32</pubDate>
        <category><![CDATA[windows 开发]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/a364a1ef766b991cfcfa3c79.html</guid>
</item>

<item>
        <title><![CDATA[WPF中使用Expression Encoder SDK开发流媒体]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/71607b1eecc0cafd1ad576e3.html]]></link>
        <description><![CDATA[
		
		<p>微软在09年的7月份发布<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b6c8015b-e5de-46c0-98cd-1be12eef89a8&amp;displaylang=en">Expression Encoder 3</a> 的版本,相比版本2来看多了对Live Encoding Support;Redesigned profile support with full support for H.264 customization;Smooth Streaming;Encoding Multiple Sources Together;Encoding Multiple Sources Together等众多功能.</p>
<p>我今天要做的这个Ddmo就是把media文件或者webcam进行流编码!</p>
<p>在官方的SDK的demo中有一个流编码的实例位于C:\Program Files\Microsoft Expression\Encoder 3\SDK\Samples\Live (假设你的encoder的安装路径是C:\Program Files\Microsoft Expression\Encoder 3\),这个是个console的程序,我们把它改造一下让他跑到我们WPF的工程上去.</p>
<p> </p>
<p>我从那个Console的Demo移植到WPF上相信任何WPF开发者都应该没有问题.我们和Expression Encoder 对比一下功能,它的视频输出预览做的不错,好那我们也添加这个功能吧.</p>
<p>每一个LiveJob类都有一个OutputPreviewWindow 它的结构为</p>
<div class="cnblogs_code">Code<br>
public class PreviewWindow : IDisposable<br>
{ <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Methods<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public PreviewWindow(HandleRef parentWindow);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void Dispose();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected virtual void Dispose(bool disposing);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void SetSize(Size size);</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Properties<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public HandleRef ChildWindow { get; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public bool Visible { get; set; }<br>
}</div>
<p>我们就靠他来呈现我们的视频了.</p>
<p>WPF中要呈现WIN32的东东要用到<a title="http://msdn.microsoft.com/zh-cn/library/system.windows.interop.hwndhost.aspx" href="http://msdn.microsoft.com/zh-cn/library/system.windows.interop.hwndhost.aspx">HwndHost</a>, Msdn中是这样描述它的:</p>
<blockquote>
<p> </p>
<p> </p>
<p> </p>
<fieldset><em>&quot;若要承载 Win32 窗口，请创建一个从 HwndHost 派生的类。重写 </em><a href="http://msdn.microsoft.com/zh-cn/library/system.windows.interop.hwndhost.buildwindowcore.aspx"><em>BuildWindowCore</em></a><em> 方法并将 Win32 窗口创建为传递到该方法的父窗口的子级。&quot;</em></fieldset></blockquote>
<p>是不是很简单呢!</p>
<p>现在我们来完成这个类的创建</p>
<p> </p>
<p> </p>
<div class="cnblogs_code">Code<br>
internal class PostViewHwndHost : HwndHost<br>
{<br>
&nbsp;&nbsp;&nbsp;  private LiveJob m_LiveJob;<br>
&nbsp;&nbsp;&nbsp;  private PreviewWindow m_PreviewWindow;</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;  public PostViewHwndHost(LiveJob liveJob)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_LiveJob = liveJob;<br>
&nbsp;&nbsp;&nbsp;  }</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;  protected override HandleRef BuildWindowCore(HandleRef hwndParent)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_PreviewWindow = new PreviewWindow(hwndParent);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_LiveJob.OutputPreviewWindow = m_PreviewWindow;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return m_PreviewWindow.ChildWindow;<br>
&nbsp;&nbsp;&nbsp;  }</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;  protected override void DestroyWindowCore(HandleRef hwnd)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_PreviewWindow.Dispose();<br>
&nbsp;&nbsp;&nbsp;  }<br>
} <span style="display: none"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"> <br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span></span></div>
<p>具体使用方法,例如Border1.Child = new PostViewHwndHost(LiveJob实例)</p>
<p> </p>
<p>我们发现Expression Encoder 中还有一个预览,那就是webcam的预览.我们类比PostViewHwndHost来写一个PreviewHwndHost,唯一不同的是构造器的参数现在是LiveDeviceSource,因为LiveDeviceSource class中有一个PreviewWindow供我们使用</p>
<p> </p>
<div class="cnblogs_code"><br>
public class PreviewHwndHost : HwndHost<br>
  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private PreviewWindow m_PreviewWindow;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private LiveDeviceSource m_LiveDeviceSource;</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public PreviewHwndHost(LiveDeviceSource liveDeviceSource)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_LiveDeviceSource = liveDeviceSource;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected override HandleRef BuildWindowCore(HandleRef hwndParent)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_PreviewWindow = new PreviewWindow(hwndParent);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_PreviewWindow.Visible = true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_LiveDeviceSource.PreviewWindow = m_PreviewWindow;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return m_PreviewWindow.ChildWindow;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</div>
<div class="cnblogs_code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected override void DestroyWindowCore(HandleRef hwnd)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  m_PreviewWindow.Dispose();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</div>
<div class="cnblogs_code">  }</div>
<div class="cnblogs_code"><span style="display: none"><span style="color: #000000"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span></span></div>
<p>具体使用方法,例如Border2.Child = new PreviewHwndHost (LiveDeviceSource 实例)</p>
<p> </p>
<p>可以run一下试试了哦.!</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/Wpf">Wpf</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/71607b1eecc0cafd1ad576e3.html#comment">查看评论</a>]]></description>
        <pubDate>2009年08月20日 星期四  12:41</pubDate>
        <category><![CDATA[Wpf]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/71607b1eecc0cafd1ad576e3.html</guid>
</item>

<item>
        <title><![CDATA[故事里的事]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/e40fcdef5643c83facafd592.html]]></link>
        <description><![CDATA[
		
		<p><font size="4">我的故事,她在讲述.</font></p>
<p><a href="http://act.hi.baidu.com/story/userpage/?un=lvxiaolin1220"><font style="background-color: #993300" color="#ffffff" size="4">http://act.hi.baidu.com/story/userpage/?un=lvxiaolin1220</font></a></p>
<p><font size="4">喜欢这个故事就投十票吧!（一天一个ip可以连续投10票）!</font></p>
<p><font size="4">原文地址： <a href="http://hi.baidu.com/lxl1220/blog/item/2eb886f335c1f8c20a46e0a8.html">http://hi.baidu.com/lxl1220/blog/item/2eb886f335c1f8c20a46e0a8.html</a></font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%D0%C4%C7%E9%C8%D5%BC%C7">心情日记</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/e40fcdef5643c83facafd592.html#comment">查看评论</a>]]></description>
        <pubDate>2009年07月29日 星期三  18:24</pubDate>
        <category><![CDATA[心情日记]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/e40fcdef5643c83facafd592.html</guid>
</item>

<item>
        <title><![CDATA[不要抱怨生活]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/78ccdbc48819afc238db490b.html]]></link>
        <description><![CDATA[
		
		<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: 12px Times New Roman; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 16px; color: rgb(31,31,31); font-size: 13px" class="Apple-style-span">
<p><font color="#ffcc00">生命中难免有沉重不堪的时候，但它们并非不可承受，抱怨、偷懒、选择舒适的方式也许能获得一时安逸，但遇到考验的时候，你会发现，那个沉重的十字架正是通往欢乐的桥梁。</font></p>
<p><font color="#ffcc00">Just remember, God never send us a cross that our shoulders cannot carry it… Please read till the end.<br>
Fr. Tomas</font></p>
<p><font color="#ffcc00">一定谨记，上帝从来不会给我们一个我们的双肩背负不起的十字架……请坚持读到最后，来自</font><a style="color: rgb(16,92,182); cursor: pointer; text-decoration: none" target="_blank" href="http://fromfathertomasdesk.blogspot.com/2007/11/lord-my-cross-is-too-heavy.html"><font color="#ffcc00">Tomas神父</font></a><font color="#ffcc00">。</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh5.ggpht.com/_YeoaI24Y8Ys/Sjo451XPjjI/AAAAAAAADEo/3YtQSFx0ef8/s512/1.jpg"></font></p>
<p><font color="#ffcc00">我们都背负着生活的十字架……</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh6.ggpht.com/_YeoaI24Y8Ys/Sjo7jiaVQiI/AAAAAAAADEs/I_tnZQTgVuM/s512/2.jpg"></font></p>
<p><font color="#ffcc00">有时它看起来很沉重</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh6.ggpht.com/_YeoaI24Y8Ys/Sjo7zmMV4bI/AAAAAAAADFI/HAnQc5NGNLI/s512/3.jpg"></font></p>
<p><font color="#ffcc00">抱怨是很容易的</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh3.ggpht.com/_YeoaI24Y8Ys/Sjo8PySRwRI/AAAAAAAADFk/zymGvJ6fucQ/s512/5.jpg"></font></p>
<p><font color="#ffcc00">然后就选择了貌似舒适的方式</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh6.ggpht.com/_YeoaI24Y8Ys/SjpAbcpCMXI/AAAAAAAADG0/ewIlPe6tNyg/s512/6.jpg"></font></p>
<p><font color="#ffcc00">总是寻找最简单的终南捷径</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh5.ggpht.com/_YeoaI24Y8Ys/SjpBQz3bomI/AAAAAAAADHQ/Ro7CAISpe4c/s512/8.jpg"></font></p>
<p><font color="#ffcc00">但很快我们就厌烦了并继续抱怨</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh4.ggpht.com/_YeoaI24Y8Ys/SjpCAYpcLhI/AAAAAAAADHs/ZtITKXxfZ-k/s512/9.jpg"></font></p>
<p><font color="#ffcc00">我们想了想，决定自欺欺人，继续选择舒适的方式</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh3.ggpht.com/_YeoaI24Y8Ys/SjpCuKY4HQI/AAAAAAAADII/y4kMdKZ56QU/s512/10.jpg"></font></p>
<p><font color="#ffcc00">不幸的是，有时候我们选错了</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh4.ggpht.com/_YeoaI24Y8Ys/SjpDCt2f5dI/AAAAAAAADIM/-V_iRd5cuPI/s512/11.jpg"></font></p>
<p><font color="#ffcc00">大家继续前进着……你心里也许在偷着乐！</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh5.ggpht.com/_YeoaI24Y8Ys/SjpDRc_F1rI/AAAAAAAADIo/GFTWpqte7v0/s512/12.jpg"></font></p>
<p><font color="#ffcc00">如果你的十字架太过沉重，不要抱怨，上帝一直都在你身边，一直都在！</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh3.ggpht.com/_YeoaI24Y8Ys/SjpD07V56QI/AAAAAAAADJE/j_CXWcgbV_E/s512/13.jpg"></font></p>
<p><font color="#ffcc00">你会发现，很多事情对别人来说很容易，放到你身上就很难，这是为什么呢？</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh6.ggpht.com/_YeoaI24Y8Ys/SjpD83Awu1I/AAAAAAAADJg/BzRqwVUkztY/s512/14.jpg"></font></p>
<p><font color="#ffcc00">原来，是你的承受力太小！</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh4.ggpht.com/_YeoaI24Y8Ys/SjpEQCOxvWI/AAAAAAAADJk/C5CTVD9kRgE/s512/15.jpg"></font></p>
<p><font color="#ffcc00">剩下的，只有崩溃……</font></p>
<p><font color="#ffcc00"><img style="border-right-width: 0px; max-width: 1000px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="不要抱怨生活之重| jiaren.org" alt="不要抱怨生活之重| jiaren.org" src="http://lh5.ggpht.com/_YeoaI24Y8Ys/SjpEYYx9y8I/AAAAAAAADKA/Ev2j5M003us/s512/16.jpg"></font></p>
</span></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%CE%C4%D5%AA%B5%D8%B4%F8">文摘地带</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/78ccdbc48819afc238db490b.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月30日 星期二  16:41</pubDate>
        <category><![CDATA[文摘地带]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/78ccdbc48819afc238db490b.html</guid>
</item>

<item>
        <title><![CDATA[毕业纪念日小记]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/ae690c46baea95006a63e5c5.html]]></link>
        <description><![CDATA[
		
		<p>时间在时钟的滴答声中一秒一秒的流走了.离开大学也整整一年了.</p>
<p>一年的光阴过去了,回首一切都是那么的清晰.毕业仿佛就在昨天.还记得拉着行李回望宿舍那般心酸.</p>
<p>工作了,周一到周五的循环往复,上的总是那一节课,不能逃课,不能迟到....</p>
<p>周末邀同学来做客,更有了几分举杯邀明月的感受.</p>
<p>利用闲暇时间读一些书,沁人心脾. 我庆幸有位好的老婆,能提供给我这么多的闲暇时间.</p>
<p> </p>
<p> </p>
<p> </p>
<p>敲代码之余开小差写!</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%D0%C4%C7%E9%C8%D5%BC%C7">心情日记</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/ae690c46baea95006a63e5c5.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月29日 星期一  16:18</pubDate>
        <category><![CDATA[心情日记]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/ae690c46baea95006a63e5c5.html</guid>
</item>

<item>
        <title><![CDATA[祝姥姥生日快乐!]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/8b7d8bb10423b65c092302b8.html]]></link>
        <description><![CDATA[
		
		<div forimg="1"><a href="http://www.qyhd.com/images/upfile/200682212565430607.jpg" target="_blank"><img border="0" src="http://www.qyhd.com/images/upfile/200682212565430607.jpg" small="0" class="blogimg"></a><br>
又不能回去给她老人家过寿了.真遗憾啊!<br>
<br>
在远方的我祝愿她老人家,福如东海,寿比南山,长命百岁!</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%D0%C4%C7%E9%C8%D5%BC%C7">心情日记</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/8b7d8bb10423b65c092302b8.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月12日 星期五  17:15</pubDate>
        <category><![CDATA[心情日记]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/8b7d8bb10423b65c092302b8.html</guid>
</item>

<item>
        <title><![CDATA[我相信]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/da8644a78c740b9dd1435896.html]]></link>
        <description><![CDATA[
		
		<p>我们年轻路还很长!</p>
<p>困难不是无法克服,也没有想象的那么可怕!</p>
<p>迷路的时候也要给自己找个方向!</p>
<p> </p>
<p><embed style="width: 450px; height: 390px" height="390" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="450" src="http://player.youku.com/player.php/sid/22447058/v.swf" wmode="transparent" play="true" loop="false" menu="false"></embed></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%D0%C4%C7%E9%C8%D5%BC%C7">心情日记</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/da8644a78c740b9dd1435896.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月20日 星期三  14:31</pubDate>
        <category><![CDATA[心情日记]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/da8644a78c740b9dd1435896.html</guid>
</item>

<item>
        <title><![CDATA[欺实马]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/6ca34c907e39df85a977a482.html]]></link>
        <description><![CDATA[
		
		<p>互动百科很了不起敢发表&quot;<a target="_blank" href="http://www.hudong.com/wiki/欺实马">欺实马</a> &quot;</p>
<p>这帮熊孩子,警察叔叔人&quot;很好&quot;.</p>
<p>电视台的很猛,顶一个</p>
<p><embed style="width: 450px; height: 390px" height="390" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="450" src="http://player.youku.com/player.php/sid/22532729/v.swf" wmode="transparent" play="true" loop="false" menu="false"></embed></p>
<p> </p>
<p>外挂:</p>
<p>今天读手机报,宜宾县国税局白花分局长卢玉敏以6000元价格与该县未成年学生何某发生性关系。三个月后，受害人何某在其姑妈的陪同下来到天池派出所报案。警方经过侦查，认为卢玉敏行为属于不知道何某是或可能是不满14周岁幼女而嫖宿不构成犯罪，决定对其给予行政拘留15日并处罚款5000元;牟某涉嫌介绍妇女卖淫被批准逮捕。</p>
<p>搞笑死了!局长很傻很天真!</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%CE%C4%D5%AA%B5%D8%B4%F8">文摘地带</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/6ca34c907e39df85a977a482.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月11日 星期一  12:02</pubDate>
        <category><![CDATA[文摘地带]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/6ca34c907e39df85a977a482.html</guid>
</item>

<item>
        <title><![CDATA[摘录一篇文章,告诉自己人生不能颓废]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/83ec9458e1ae17d69d820436.html]]></link>
        <description><![CDATA[
		
		<p>博文视点的周筠老师最近在做一本书，讲述一些业内朋友走过的路，给自己和给别人以一些借鉴。我也借着这个机会把发生在过去7年中的重要的事情回顾了一下。</p>
<p>=======正文======</p>
<p> 跨进南大校门的第一天，我知道，我自由了。</p>
<p>父亲是个对新事物有强烈兴趣的人，村里第一台电视机是他自己组装的，当时全村人都跑过去看，电视机只能收到一个台，CCTV。座机电话是第一个装的。大哥大刚出现的时候，他也是第一个买来用的，那个时候的移动电话真是贵得离谱。</p>
<p>父亲告诉我的第二件最重要的事情是：遇到任何问题，找书去就行。他在自己的专业中完全是自学的。在不属于自己的专业中（后来买了电脑之后需要学习如何架设公司网站，如何网上营销，如何进行电子财务管理，如何使用各种作图软件制图等等）也全都是靠买书自学。</p>
<p>为什么说到这两件事情，因为这是对我一生影响最重大的两个习惯。第一个习惯给了我学习新东西的强烈动机，有了热忱和兴趣，做事情就不觉得累，就自得其乐。第二个习惯则给了我学习任何新东西的方法&mdash;&mdash;不会么？查书去。（当然，学习一门专业并不完全通过看书就行，但这毫无疑问是至关重要的一个途径。）</p>
<p>高三的时候，父亲买了电脑，我立时对这个神奇的事物产生了强烈的兴趣，每期的《电脑爱好者》和《电脑报》都会买来细细看，有时看到各种小工具、技巧还会摘抄下来，回去在自己家里的机器上捣鼓。那个时候我并不知道这样单纯的兴趣会把我引向一条专业的程序员道路。</p>
<p>高三时间变得越来越紧，分配给兴趣的时间越来越少，但兴趣的火花一直都没有熄灭。</p>
<p>跨进南大校门的第一天，我知道，我自由了。</p>
<p>这个自由并不是说我可以做任何事情了，而是我得到了一个重要的决策的自由权，即关于如何利用我的时间。</p>
<p>高考的时候我报了计算机系，但分数差了几分，失之交臂，被调到第二志愿专业&mdash;&mdash;信息与计算科学。当时以为这个专业跟计算机相关的，结果发现是数学系，后来听不少同学提到都上了同样的当。</p>
<p>这里出现了一个歪打正着的事情：我本意并不是上数学系，如果当时知道这个专业是数学系，我可能就不会填报了。但正是因为这个错误，我在数学系好歹也受了一些数学基本功的训练（尽管这个训练的基础是大一上的不多的几节数学分析课，以及每次临考前宿舍哥们例行的&ldquo;包夜&rdquo;看书），回过头来看这个基本功在后来还是帮了不少的忙，甚至有一阵子我对数学本身到了很感兴趣的程度。不得不说，这段学习的经历是很锻炼抽象和逻辑思维的。另一方面，困难如数学都学了，对其他学科就不觉得难，不会望而却步。</p>
<p>这是我成长过程中的幸运之一。后面还会提到，还有好几次更大的幸运。</p>
<p>大一上学期很快过去，应该是在大一下学期的时候，学校要开一门C++课程。我利用假期先把课本基本啃掉了，当时动机也很简单，先啃掉，就不用上课了嘛。</p>
<p>另一件事情是我经常喜欢去逛书店，看到侯捷的《深入浅出MFC》上面很多人说这本书好，我当时也对C++有一些基础认识和好感，所以就买下来啃了。一方面侯捷先生写的书的确图文并茂，深入浅出，有意思，另一方面理解一样复杂的东西是个智力挑战。所以看着看着倒是觉得兴致盎然。却不知就这么和C++结下了不解之缘。</p>
<p>这是另一个歪打正着：为什么说是&ldquo;歪打&rdquo;呢？因为MFC的设计也并不能说就是C++的Best <br>
Practice，另一方面若是以用为本的话也未必就要把MFC的原理摸个透。所以搞不好现在看来我就不会细看这本书。为什么说是&ldquo;正着&rdquo;呢？因为理解一个费解的东西本身需要长时间投入注意力，无形中练了理解能力和思维体力（专注），另一方面虽然MFC不是最佳设计，但理解里面的代码却加强了对C++本身的认识，这是基本功；也加强了对C++的兴趣，这是动力，后来这个动力驱使了我去看了大量的系统底层知识，从操作系统代码一直看到硬件体系结构。</p>
<p>大二发生了几件重要的事情：一是我在程序员上发表了第一篇技术文章，是剖析Boost源码的。我已经不记得什么时候、通过什么途径知道Boost这个库的了，总之是知道了，然后也是由于受到侯捷先生源码剖析的影响，也去看源代码，发现很难，越是难就越是觉得有趣，跟踪代码到临晨四点居然越看越精神了，后来火速写了一篇源码剖析。发给《程序员》杂志的技术主编孟岩先生，孟岩先生给了很大的鼓励，于是我很来劲。后来一鼓作气分析了N个库，写了一系列的文章，在网上随处可以搜到这个系列。</p>
<p>这是第二个歪打正着，按理来说，研究语言技巧并不是程序员最佳的时间投入方法。所以现在我可能不会去做这件事情，会认为有更好的时间投入途径。但当时就一头扎了进去。为什么说也是正着呢？因为虽然这也许不是最佳的投入时间的办法，但总归比什么都不专注要强得多，至少这么一深入，对语言的缺陷和陷阱有了更深刻的认识、也锻炼了对代码的亲切感、跟踪调试的耐心（是的，耐心，而不是技巧）。</p>
<p>所以后来我在博客上总结自己学习编程中走过的弯路，孟岩先生说到，是不是弯路，不是那么容易界定的。</p>
<p>的确，也许真的有更好的路，但事前真的很难判断哪条路是最优的，我们能做到的，是把一条路走透了、走深了，只要不是一条太不靠谱的路，深入的过程中总会有很多的收获。只要不是太顽固，善于反省，总有一天也会逐渐意识到越来越靠谱的路。</p>
<p>除了发表第一篇技术文章之外，大二我还用业余时间做了一些技术翻译，寒假里我坐在家里每天晚上翻译半章《Effective <br>
C++》，当然，后来我把译稿提交给出版社的编辑时被告知文笔还显生硬。</p>
<p>同一时间，我继续啃N多C++以及底层知识的书，一段时间我的书架上全是这类书，根本不像数学系的学生。非典那阵子，把饭钱都拿来买了书，为什么买得这么疯，也是因为受父亲的一个影响，他告诉我买书不用心疼，因为是长远投资，收益远远大于这点金钱投入。那段时间我边看边写一些代码玩，有模仿Windows核心编程的小程序，也有尝试并失败的小游戏，也有拿来对宿舍玩的游戏文件分析的工具，还有为上机考试写的库，总之玩得不亦乐乎；不像很多知名的程序员在学校里面就写了被广为使用的工具，那个时候我完全没有这个意识，也不知道什么是开源，自己自娱自乐而已，所以没有系统训练编码量和编码素养，比较盲目。</p>
<p>大二下半年还发生了一件重要的事情，我在CSDN上开了一个博客，开始写学习C++和编程的过程中的一些总结。这个博客我一直写到今天，伴随了我整个7年的学习和成长，回过头去看就像时光机一样，能够看到一路过来我都关注了些什么东西，是怎么想的，以及对一些事情的看法是怎么改变的。这些东西如果不记录下来，就会逐渐忘掉，也就无法参照过去的自己，对未来提供更好的借鉴了。所以我一直把记录当做一个很重要的工具。另外我也通过这个博客认识了很多朋友，得到了很多的帮助。</p>
<p>后来，学校提供了转系到软件学院的机会，我立即报名了。后来的两年在软件学院度过。但其实反正我也是自己安排时间，所以无甚区别。</p>
<p>大三大四发生了几件重要的事情：一是荣耀先生邀我合译《Imperfect <br>
C++》，我很乐意的接了下来，可没想到这本书比我想象得要密度大得多，六百页，而且排版也很密，我给自己安排了每天6、7页纸的量，大概花了半年多译完。中间有一段时间停滞，荣耀先生给我鼓劲，告诉我一个重要的方法，如果觉得做不下去了，就硬着头皮坚持做，然后就类似于麻木了，适应了，那种望而却步的感觉会逐渐自动退去。惊人的简单，但事实就是如此，硬着头皮，过了那个情绪上最艰难的时候，也就适应了。这本书译完之后，还是有不少的收获，但我总觉得对性格上的磨练才是最有价值的收获。</p>
<p>二是我开始看英文原版的书。之前，由于高中不靠谱的英语教育的原因，我恨死了英语，大二的校内四级课程还挂了科，直到大四才补考。但对技术本身的热爱压过了对英语的反感，我还是硬把一整本影印版啃下来了，而且津津有味，这本书就是Jeffrey <br>
Richter的《Applied .NET Framework <br>
Programming》。这个事情的重要性在于，后来我就不再反感和恐惧英语了，这是其一，其二是我开始意识到英语世界的技术资料有多么丰富，所以虽然本身看上去不是一个太起眼的事件，但却是我获取信息方式的一个tipping <br>
point，一旦熟练掌握了语言工具，背后就是一扇大门，通向一个海量的信息源。另外还有一个收益后面会提到。</p>
<p>大四快毕业的时候又发生了一件事情，微软的Eric <br>
Jiang通过我的博客找到我，推荐我去微软面试，我随随便便就把粗糙的简历给发过去了，差点因为简历太粗糙被HR直接过滤掉。远程电话面了两轮，远程coding一轮，然后记得就是飞到北京面试，住在北航招待所。北京的面试又面了好几轮，有考察底层知识的、有考察C/C++的、.Net的，还有考察算法的，编码素养的。总之就是公认的基本功考察。最终我还是没能通过面试。个人自己后来总结的结论是算法基本功太差，连什么是动态规划都不知道，编码素养也不够。这部分也是因为本科的学习方法太业余，什么好玩干什么，倒不是说兴趣驱动不好，只是缺乏系统的规划，不清楚也不关心这个领域的蓝图，也弄不清什么是重点。后来在读研的时候恶补了一把算法，好歹弄清了一些基本的概念和思考方法。编码素养的问题也是到了读研的时候才开始思考和学习，现在仍在学习。</p>
<p>另外，在本科阶段，其实也浪费了很多时间，事实上是只花了很小一部分时间来学习。之所以还多少学了点东西，完全是仰赖了专注的习惯。所以每当有人觉得我本科就做了不少事情的时候，我就会说其实我真的本科浪费了很多时间，另一方面也说明，要掌握一门专业知识，其实每天一点时间，专注、积累和持之以恒也就够了。后来研究生阶段才算真正开始惜时了，于是经历了两年密度很高的学习和思考，心智才成熟了不少。</p>
<p>大四的时候，和很多人一样，我也考研，因为一来也很茫然，二来也希望能够继续有一个宽松的环境继续沉浸在自己的兴趣中。但四年来我都是自己安排时间，逃掉了无数的课，已经对模式化的做题考试产生了抵触，所以考研的复习也没怎么认真准备，那年考研的数学题又偏难，一下慌了神，结果居然把一整页题压在稿纸下忘了做了，心理准备有多不充分可见一斑。考完数学我很沮丧，那么大分值的题目没做，数学肯定过不了了，接下来的专业课就没去考了。后来想想其实还是应该去考一考，多少能为下一年积攒经验。</p>
<p>后来就工作了，没去成微软。经同学张振推荐，就去了南京西门子。心里的打算还是边工作边考研，为什么考研，动因也简单，我心理还没准备好，本科只顾着埋头学好玩的，也不看路，不知道自己想要什么样的工作，想做什么样的事情。去西门子之后更加觉得如此，觉得效率很低，做的事情也并不是我乐意的，每天还要在班车上浪费两个小时，于是没过多久就辞掉了工作。打算复习考研。那个时候大概还有半年多的时间才到考研，所以我中途不紧不慢地又翻译了《Exceptional <br>
C++ <br>
Style》，占用了不少时间，到最后时间很紧了，就剩两三个月，我才开始认起真来，回想起来这是糟糕的时间管理。结果我不得不作了最坏的打算：顶多调剂去软件学院读研（我报的是计算机系），考虑到我反正是自己安排时间，差别应该不大。幸运的是，最终一分不差地过了线，算是蹭到了计算机系里。虽然如此，还是觉得这种惊险不要发生的好，以后或者其他事情上就不会有这么幸运了，及早准备总是很重要的。</p>
<p>读研期间的两年半，是我自己觉得心智年龄成长最迅速的一段时间。这里也有几个很幸运的事情。一个事情是我的导师陈家骏先生给了我很大的自主，于是我得以有时间安排一些重要的学习，这段时间对我来说很重要，我学习和思考了很多东西，为个人以后的发展作了很多准备，倒是没帮导师做什么事情。所以，硕士毕业离开的时候是既感激也愧疚。</p>
<p>另一个事情是认识同实验室的师兄陈怀兴，严格来说是他先来找我聊天，可见那个时候我仍然还是没有意识到与人交流的重要性的，后来，建立了TopLanguage讨论组之后越发意识到与他人交流的重要性，也开始主动寻找和参与交流，希望以后自己也能组织交流。陈怀兴对算法很有造诣，也是TopCoder上的常客和牛人，那个时候我也正在为以后的工作面试准备一些算法基础，所以经常找他讨论，获益很多。有一句话说：看一个人，只要看他读的书和见的人。还是很有道理的，这两者是一个人成长中最有价值的信息来源。</p>
<p>研一下半年，女朋友找工作的时候需要用到营销方面的知识，于是我去替她找书，偶遇《影响力》这本书，这本书打开了我的视野，让我开始关注一个很有价值的领域：我们如何思考，如何正确地思考。这个领域有很多有意思和有价值的书，我利用近一年的时间，陆陆续续看了近40本相关的书，对思维的特点以及如何思考有了很多的了解，这些知识后来很大程度上使我更清晰地认识自己，和自己在学习和生活中面临的各种问题。</p>
<p>也是研一下半年，我建立了一个Google <br>
Groups，起名TopLanguage，一开始的时候是因为平常没人讨论问题，憋得难受，希望有人能够说两句，无心插柳柳成荫，后来这个讨论组的交流越来越多，我也从中收益颇多，其中最大的收益有两个：一是和人讨论能够激发自己进一步的思考，也促使自己更清晰地表述自己的观点或问题。倒不是说别人就一定告诉你什么新东西，而是讨论对你自己的思维的刺激。二是交流中认识了不少朋友，后来快毕业的时候也受帮助颇多。我一直把TopLanguage的创建看作研究生阶段做得最有意义的事情之一。</p>
<p>此外，我有意识地提前准备了英语，因为我相信如果想要去好的外企，口语不过关很可能成为一块短板（当然，英语作为承载最多技术知识的平台语言还有更大的价值），包括阅读、书写和口语。我想了一个方案，可以不用额外花时间来学习英语：阅读的训练蕴含在平时的英文技术资料的阅读中，尽量读英文的，一来英文资料更&ldquo;一手&rdquo;和全面，二来也顺便练阅读。书写的训练蕴含在去国外邮件列表发技术贴和自己写的英文博客文章中。口语的训练则蕴含在平时的娱乐中&mdash;&mdash;美剧，有一个暑假我几乎天天开着Friends睡觉，另外学校有国外过来的团队演讲我不再错过，而是主动参加，有一次还带他们出去逛南京，说了一天英语，回头在路上听中文都像英文。虽然和外国友人交流的次数不多，但似乎对口语感觉的提高还挺大。后来在微软亚洲研究院的面试最后一轮就是英语的，而且是偏技术的，好在提前准备了，所以毕竟还是顺利地表达出了想表达的意思。</p>
<p>去微软亚洲研究院面试，是因为幸运地认识了微软亚洲研究院技术创新组项目主管邹欣先生。邹欣先生和他组织的团队在那段时间写了《编程之美》，书中有很多很有意思的题目，而我那段时间恰和陈怀兴讨论算法，在讨论组上也组织了专题的讨论，有了一点粗浅的思考，于是和邹欣先生邮件交流，由于对邹欣先生的技术创新组做的事情很有兴趣，所以找工作的时候便向他毛遂自荐。</p>
<p>承蒙邹欣先生推荐，时隔三年，我再次获得了去微软面试的机会。这一次，由于研究生期间作了一些长远准备，所以心里有底了很多，也就比较冷静了，由于当年知识体系的漏洞被我花功夫补了补，所以面试比较顺利。面试的时候邹欣先生更为详细地介绍了技术创新组的工作，我更加感兴趣了，所以尽管已经有另外几个也不错的选择，但心里还是迅速地做了决定。大约一周后，HR通知Offer，我毫不犹豫就接受了。</p>
<p>我想，虽然有很多人本科就明白自己想做什么，我多花了两年多，总还不算太晚。</p>
<p>-- <br>
刘未鹏(pongba) <br>
Blog | Mind Hacks <br>
<a href="http://mindhacks.cn/">http://mindhacks.cn</a> <br>
TopLanguage <br>
<a href="http://groups.google.com/group/pongba">http://groups.google.com/group/pongba</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%CE%C4%D5%AA%B5%D8%B4%F8">文摘地带</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/83ec9458e1ae17d69d820436.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月08日 星期五  14:21</pubDate>
        <category><![CDATA[文摘地带]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/83ec9458e1ae17d69d820436.html</guid>
</item>

<item>
        <title><![CDATA[十个方法让你快乐工作每一天]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/6bab6d6313c6fa680d33faea.html]]></link>
        <description><![CDATA[
		
		<p><a title="Permalink to http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/" href="http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/"></a></p>
<p>每个人都希望有一个<a class="bodytag" href="http://feed.yeeyan.com/articles/tag/快乐" target="_blank"><font color="#335533">快乐</font></a>的<a class="bodytag" href="http://feed.yeeyan.com/articles/tag/工作" target="_blank"><font color="#335533">工作</font></a>日，你希望在工作的时候能顺利的完成工作，每天你的脸上都可以带着微笑，如果你能够为你的工作提前做好准备的话，你就能够拥有一个快乐的工作日，你需要有一个如何度过快乐工作日的列表。</p>
<p>下面有十个方法能帮助你拥有更加<a class="bodytag" href="http://feed.yeeyan.com/articles/tag/快乐" target="_blank"><font color="#335533">快乐</font></a>的<a class="bodytag" href="http://feed.yeeyan.com/articles/tag/工作" target="_blank"><font color="#335533">工作</font></a>日。</p>
<p><strong>1 吃早饭</strong>&mdash;&mdash;如果你忽略了早饭的话，那你在早晨就无法达到最佳的工作状态，你会因饥饿而一直期盼着午饭时间的到来，而且在中午的时候容易犯困，为了高的工作效率吃点东西吧（合理的吃点东西），以保证有一个顺利的开端。</p>
<p><strong>2 拥有充足的阳光</strong>&mdash;&mdash;早晨的阳光能够唤醒你沉睡过后懒散的身体和大脑。不需要你喝一大杯的Joe，只需要穿上你的鞋子，到户外走走。</p>
<p><strong>3 做一些有氧运动</strong>&mdash;&mdash;在你晒太阳的时候，充分利用灿烂的阳光好好的步行一下或者慢跑一会，运动能减缓压力，让你的血液流动起来，整个人的精神也会焕发起来。</p>
<p><strong>4 在早晨10点前不要阅读RSS，查看电子邮件或者是接电话。</strong>这些事情需要时间和即时的注意力，而此时你的目标和工作目标就会很容易的被搁置在一边或者忽略，如果你能将那些不重要的事情息放到早晨10点或者是10：30过后再去处理的话，你就能抓紧时间及时的完成那些重要的任务。</p>
<p><strong>5 要有积极而非消极的想法</strong>&mdash;&mdash;这也许看起来很简单，但是许多人却无法做到这一点，不要一直想着事情最糟糕的一面，试着看看事情积极的那一面。问问你自己&ldquo;现在的处境对我有什么好处？&rdquo;&ldquo;我能从现在的处境中获得什么，我可以从中学到什么？&rdquo;这都是一些你在逆境中可以问你自己的很好的问题，他们可以帮助你摆脱逆境。</p>
<p><strong>6 休息&mdash;&mdash;如果你<a class="bodytag" href="http://feed.yeeyan.com/articles/tag/工作" target="_blank"><font color="#335533">工作</font></a>的时间太长的话，你的工作效率就不会很高了。</strong>这时候的你很容易感到疲倦和沮丧。所以每过30~45分钟，让你自己休息5分钟。离开你的办公桌，停止你正在进行的工作，让你自己休息一下。你会发现你回来的时候,在工作上有更多好的想法而且精力也更充沛了。</p>
<p><strong>7 中午的时候散散步</strong>&mdash;&mdash;我再次强调要运动。在午饭后散个步（或许只有短暂的十分钟）也会让你整个中午精力充沛许多。当别人还坐在那里消化午餐的时候，你已经恢复充沛的精力了。</p>
<p><strong>8 避免闲谈</strong>&mdash;&mdash;将你一天时间耗费掉的事情就是闲谈。也许闲谈是一件很有趣的事情，它可以让你了解一些你的同事或者是老板的趣文。但是闲谈总是一件很消极的事情。这种无聊的事情会耗费你很多的时间。</p>
<p><strong>9 每天列出5到7个目标，将其中的3项做为你的目标。</strong>列出你要做的事情这是一个好习惯。但是列出太长的单子却不是一件很好的事情。如果你在列表上面的事情多于5项的话，你只需要完成其中的三件事情（你可以在实现制定的目标后根据情况再回来修正你的列表）。但是如果你列出20项你需要完成的任务的话，你自己不会觉得有很大的压力吗？3是一个便于你管理和控制的魔力数字。将你列表中的事情简化到3项吧。每个人都可以做到三件事情不是吗？</p>
<p><strong>10 对别人的&ldquo;紧急&rdquo;请求不要做出过快的反应。</strong>当别人向你求助，要你帮助他们完成一项任务或者是他们有一些紧急的需求需要你帮助的时候，你要学会说&ldquo;你最晚需要在什么时候完成这些事情？或者是你什么时候需要完成这些事情？&rdquo;然后再安排当天的行程。许多问清了上面问题的人都会发现原来事情不是那么的紧急，可以改日再完成。通过这个方法，你就可以继续完成你每日三个目标中的一个活动了。</p>
<a title="Permalink to http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/" href="http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/"></a>
<p><a title="Permalink to http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/" href="http://www.persistenceunlimited.com/2007/07/10-ways-to-have-a-happy-workday/"><font color="#999999">10 Ways to Have a Happy Workday</font></a></p>
<p>Everyone wants to have a great work day.&nbsp;&nbsp;  You want to go to work, get the job done and head for the horizon with a smile on your face.  It&rsquo;s easy to have a good day at work if you prepare in advance and keep a good running list of how to get through with the most happy day.</p>
<p>Here are the top 10 ways to have a happier workday.</p>
<p><strong>1.  Eat breakfast</strong> - If you skip breakfast, you won&rsquo;t be at your best during the morning.  You will more likely gorge yourself at lunch and have a sleepy afternoon.  So eat something, anything (within reason) so you can ensure a smooth start.</p>
<p><strong>2.  Get plenty of sunshine</strong> - Sun in the morning signals the body and mind to wake up.  So instead of reaching for a big cup of Joe, put on your shoes and go outside.</p>
<p><strong>3.  Get Aerobic Exercise</strong> -  while you are getting your sunlight, use it as an excuse to get a good walk or jog in.  Excercise lowers stress, gets your blood moving and wakes you up.<br>
<strong>4.  Avoid RSS, EMAIL or phone before 10 am.</strong>  RSS, email and phone demand immediate attention.  Whereas your goals and work for the day can easily be brushed to the side.  If you can avoid the urgent and uninportant until 10 or 10:30, you&rsquo;ve got a fighting chance at getting all of the important tasks done.</p>
<p><strong>5.  Think positive thoughts not negative</strong> - Seems simple, but many people never do it.  Instead of looking on the worst side, try to see the bright side.  Ask yourself &ldquo;what is the advantage of this situation?&rdquo;  &ldquo;how am I benefitting from this?  What am I learning?&rdquo;  These are all good questions that you can ask in all negative situations to turn them to the positive.<br>
<strong>6.  Take breaks</strong> - If you push on one task for too long you your work starts to suffer.  It&rsquo;s easy to become tired and frustrated.  So every 30 - 45 minutes, take 5.  Get up from your desk, stop what you are doing and get your mind off your work for awhile.  You&rsquo;ll find you&rsquo;ll return with more ideas and renewed energy.</p>
<p><strong>7.  Go for a mid-day walk</strong> - again, I&rsquo;m harping on the excercise.  Getting a brisk walk in over lunch (even if for only 10 minutes) will get you to feeling better about your afternoon.  Where most others are sitting around digesting, you can be energizing.<br>
<strong>8.  Avoid gossip</strong> - One drain on your day is gossip.  It may seem fun and exciting to learn some juicy tidbit about your officemate or boss.  But good gossip is always negative talk.  Negative talk starts the pendulum swinging toward negativity.</p>
<p><strong>9.  List your top 5-7 objectives for the day and break the list down to 3</strong> - It&rsquo;s good to get in the habit of making lists, it&rsquo;s bad to make long lists.  If you&rsquo;ve got more than 5 items on your list, break it down to the top 3 things (you can always go back and edit in another task or two).  But with a list of 20 things, how can you not be overwhelmed?  3 is a managable, magical number.  Break your list down to 3.  Anybody can do just three things right?</p>
<p><strong>10. Be slow to react to other people&rsquo;s &ldquo;urgent&rdquo; requests.</strong>  When someone else asks you for help, to do a project or to meet some other urgent need, practice saying &ldquo;what&rsquo;s your deadline on this?  or when do you need this done?&rdquo;  THen schedule that day.  Most people when asked one of those questions realize it&rsquo;s not as urgent and will set a future date.  That way, you can go back to working on one of your top 3 activities.</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%CE%C4%D5%AA%B5%D8%B4%F8">文摘地带</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/6bab6d6313c6fa680d33faea.html#comment">查看评论</a>]]></description>
        <pubDate>2009年04月30日 星期四  11:27</pubDate>
        <category><![CDATA[文摘地带]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/6bab6d6313c6fa680d33faea.html</guid>
</item>

<item>
        <title><![CDATA[掉在井里的狐狸和公山羊]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/08f6504ed6b85e01b2de05ef.html]]></link>
        <description><![CDATA[
		
		一只狐狸失足掉到了井里，不论他如何挣扎仍没法爬上去，只好呆在那里。公山羊觉得口渴极了，来到这井边，看见狐狸在井下，便问他井水好不好喝？狐狸觉得机会来了，心中暗喜，马上镇静下来，极力赞美井水好喝，说这水是天下第一泉，清甜爽口，并劝山羊赶快下来，与他痛饮。一心只想喝水信以为真的山羊，便不假思索地跳了下去，当他咕咚咕咚痛饮完后，就不得不与狐狸一起共商上井的办法。狐狸早有准备，他狡猾地说：&ldquo;我倒有一个方法。你用前脚扒在井墙上，再把角竖直了，我从你后背跳上井去，再拉你上来，我们就都得救了。&rdquo;公山羊同意了他的提议，狐狸踩着他的后脚，跳到他背上，然后再从角上用力一跳，跳出了井口。狐狸上去以后，准备独自逃离。公山羊指责狐狸不信守诺言。狐狸回过头对公山羊说：&ldquo;喂，朋友，你的头脑如果像你的胡须那样完美，你就不至于在没看清出口之前就盲目地跳下去。&rdquo; 这故事说明，聪明的人应当事先考虑清楚事情的结果，然后才去做。 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%CE%C4%D5%AA%B5%D8%B4%F8">文摘地带</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/08f6504ed6b85e01b2de05ef.html#comment">查看评论</a>]]></description>
        <pubDate>2009年04月29日 星期三  13:22</pubDate>
        <category><![CDATA[文摘地带]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/08f6504ed6b85e01b2de05ef.html</guid>
</item>

<item>
        <title><![CDATA[关于WPF V-VM-M模型的废话]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/6bab6d631158e4680d33fa4c.html]]></link>
        <description><![CDATA[
		
		<div class="postBody">
<p>任何模型的提出都是为了更好的组织自己的代码,更加有效的去测试,当然最终的目的是为了更好的方便我们管理、更改和记忆.</p>
<p>WPF为我们提供了强大的数据绑定功能使我们从界面上解藕。具体的技术在此不探讨，我想说的是我们的代码应该放那里。</p>
<p>先说View，View的粒度不能太小也不能太大，个人经验是一个user control配合ViewModel干好一件事情。如果控件显示数据就用dependency properties,如果想用事件换上Command吧.</p>
<p>再说ViewModel,ViewModel是View的一个映射(可以理解为Viwe是给人看的,ViewModel是给*Unit看的),在此提供Command的具体逻辑,</p>
<p>最后是Model,Model就是我们正常的代码了.他提供了基本的业务逻辑供上层使用,包括数据验证等逻辑.</p>
</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/Wpf">Wpf</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/6bab6d631158e4680d33fa4c.html#comment">查看评论</a>]]></description>
        <pubDate>2009年04月29日 星期三  10:11</pubDate>
        <category><![CDATA[Wpf]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/6bab6d631158e4680d33fa4c.html</guid>
</item>

<item>
        <title><![CDATA[今天是妈妈的生日!]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/e371d339aeba48fb3b87ce01.html]]></link>
        <description><![CDATA[
		
		<p>今天是妈妈的生日,又不能陪着她过了.似乎在我的记忆里就没有陪我妈妈过生日,从上学到现在工作. 今年的五一我还是不能回去,每次打电话都说在外边好好照顾自己别挂牵家里,其实我知道那位父母不是盼望儿女常回家看看.亲情是多么的伟大,爸妈,我永远爱你们!</p>
<p>在此我祝我们妈妈生日快乐,永远健康平安!</p>
<div forimg="1">
<p><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/mych/pic/item/724dc81b76692fd8ae513321.jpg"></p>
<p><embed style="width: 450px; height: 390px" height="390" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="450" src="http://www.56.com/n_v162_/c25_/26_/3_/yilufa888_/zhajm_118959465875_/134000_/0_/18607237.swf" wmode="transparent" play="true" loop="false" menu="false"></embed></p>
</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/%D0%C4%C7%E9%C8%D5%BC%C7">心情日记</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/e371d339aeba48fb3b87ce01.html#comment">查看评论</a>]]></description>
        <pubDate>2009年04月17日 星期五  11:26</pubDate>
        <category><![CDATA[心情日记]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/e371d339aeba48fb3b87ce01.html</guid>
</item>

<item>
        <title><![CDATA[你的灯亮着吗?]]></title>
        <link><![CDATA[http://hi.baidu.com/mych/blog/item/ef513c87cef55322c75cc334.html]]></link>
        <description><![CDATA[
		
		<p><font size="2">杰拉尔德·温伯格大叔总是能把很复杂的道理用很简单的例子诠释给你.同样</font><a target="_blank" href="http://www.douban.com/subject/1135754/?i=0"><font size="2">《你的灯亮着吗?》</font></a><font size="2">把如何找出问题用小故事告诉你，我们应该怎么去找到我们的问题。</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  有时候找到问题比解决问题要难得多。干软件的同行们对此一定是感同身受吧。首先当我们的软件还是个想法的时候，我们就应该去考虑去如何理解问题了，我相信你做软件时间越长把这个问题的重要性就提的越高。你其实很难理解用户想要的是什么，即使是那些领域专家也很难描绘出自己想要的东西，更或者是我们在做我们自己的软件，我们自己做需求自己开发，你仍然不是很清楚有些我们做的功能是不是搭调。</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我最近发现一个问题就是我们真的都很喜欢假设甚至比我以前提到的（</font><a target="_blank" href="http://hi.baidu.com/mych/blog/item/27bdb8094f32a72c6b60fb98.html"><font size="2">点击这里</font></a><font size="2">）更没有根据，你要明白鱼是最后一个看到水的。我们很定性的假设了我们就是我们产品的用户，也很愿意假设用户能有我们的计算机水平。错了。你喜欢软件那是你的事情，用户用为什么要喜欢你的东西。举一个微软的例子，XP可以称的上是微软最成功的产品了（虽然有N多漏洞），在XP嫁接一些主题就能搞得像vista像windows 7.用户很简单如果我用XP速度快，想爽一下windows7 下个皮肤搞得了。我为什么要升级到vista升级的windows7，你们系统更新了给我带来了什么了么，对是安全了。但是你不还是天天搞补丁么。菜单更加易用了，我发现普通用户习惯xp后用windows7根本就不习惯，甚至连我同事（vista用户）来我的机器上操作一下windows7都不会用，微软还可以强调说你可以花半天的时间就会用了。但是用户为什么要花着半天时间呢，微软又有什么理由让用户花半天时间去学习他们新的系统呢？除了我这样的发烧友之外又有多少人愿意把系统换成windows7呢？</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我们还经常犯一个错误，那就是喜欢耍酷，我们的软件功能如何如何的全，你<font color="#ffcc00">只要。。。</font>，Ok，我们为什么要说你只要呢？你不可能说教每一个用户，用户也不喜欢你的说教。用户很懒，真的。再举一个例子，Kmplayer播放器算得上是世界上功能最多的播放器了（我认为比其他的都要好），但是我相信不是每一个读者都知道这个播放器，你在播放器上按一下F2试试，你看到那么多的可选参数你敢碰几个，我自认为比较专业的人都不怎么敢调节它。有时候真的没有必要给用户太多的选择，你在看一下Gom player相对应Kmplayer来说更简单了。但是熟悉这两个软件的人一般更喜欢gom player,因为你不用思考就可以用.注意了<strong>以后讨论问题的时候别说用户只要....</strong></font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;  最后在提一个问题,那就是程序员似乎不喜欢听别人的劝告,总是想着去钻别人的空子,如果你是这样的,那上天赋予了天生做测试工程师的天赋.</font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mych/blog/category/Patterns%20In%20Practice">Patterns In Practice</a>&nbsp;<a href="http://hi.baidu.com/mych/blog/item/ef513c87cef55322c75cc334.html#comment">查看评论</a>]]></description>
        <pubDate>2009年04月12日 星期日  00:53</pubDate>
        <category><![CDATA[Patterns In Practice]]></category>
        <author><![CDATA[CH似水年华]]></author>
		<guid>http://hi.baidu.com/mych/blog/item/ef513c87cef55322c75cc334.html</guid>
</item>


</channel>
</rss>