﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-waterinfire-随笔分类-程序生活</title><link>http://www.cppblog.com/waterinfire/category/3426.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 13:21:07 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 13:21:07 GMT</pubDate><ttl>60</ttl><item><title>学习网络编程的十个步骤</title><link>http://www.cppblog.com/waterinfire/archive/2007/05/11/23904.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Fri, 11 May 2007 08:14:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/05/11/23904.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/23904.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/05/11/23904.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/23904.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/23904.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 经过多年的网络编程实践之后，个人觉得初学网络编程者可以从以下几个步骤开展：<br><br>&nbsp;&nbsp;&nbsp; 1）下载一个可以互动的学习工具，通过这个与这个工具互动，我们可以及时的学到每个api的结果如果。我个人强烈推荐一个互动好工具，即python，下载地址<a  href="http://www.python.org/">http://www.python.org</a> 对于有c/c++或java基础的朋友通过一两个礼拜的时间就可以上手了，另外个人建议初学者可以学习<a  href="http://www.woodpecker.org.cn/diveintopython/">dive into python</a>。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp; 2）掌握网络编程中会用到的几个基本概念和内涵，比如IP地址，port号，socket等<br><br>&nbsp;&nbsp;&nbsp; 3）记住和消化网络编程C/S模型，把server和client端编程的常用模式理解和消化<br><br>&nbsp;&nbsp;&nbsp; 4）花几天时间学习socket api集，api集可以分为下面几大类：<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  创建&nbsp;&nbsp;  socket bind listen accept<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  收发&nbsp;&nbsp;  read/recv/recvfrom&nbsp; write/send/sendto&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  关闭&nbsp;&nbsp;  close shutdown<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  参数&nbsp;&nbsp;  getsockopt/setsockopt<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  地址&nbsp;&nbsp;  gethostbyaddr getaddrbyhost,...<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 在学习这些api时候，可以先关注在函数功能，参数意义上<br><br>&nbsp;&nbsp;&nbsp; 5）结合python互动平台，实践socket api的用法，比如socket函数怎么使用，bind怎么使用等等。在互动过程中，我们可以变换参数，看看调用结果如何。比如，<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  创建一个tcp socket的语法如下：<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  socket(AF_INET,SOCK_STREAM)<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 创建一个udp socket的语法如下：<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  socket(AF_INET,SOCK_DGRAM)<br><br>&nbsp;&nbsp;&nbsp; 6）学习socket server端编程实现简单规约比如echo，time等，然后通过cmd中的telnet来测试。<br><br>&nbsp;&nbsp;&nbsp; 7）学习I/O模型，比如阻塞、非阻塞和反应式（select,poll,WaitForMultipleObject)等<br><br>&nbsp;&nbsp;&nbsp; 8）学习Richard Stevens的《Unix网络编程》，深入学习其中的api原理以及服务端设计原理，并通过代码编写。<br><br>&nbsp;&nbsp;&nbsp; 9）下载高性能网络编程框架<a  href="http://www.twistedmatrix.com/">twisted</a>，笔者强烈推荐，它将使你的网络编程效率提高10倍以上。<br><br>&nbsp;&nbsp;&nbsp; 10）学习设计模式、操作系统知识比如线程、进程、同步等。<br><img src ="http://www.cppblog.com/waterinfire/aggbug/23904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-05-11 16:14 <a href="http://www.cppblog.com/waterinfire/archive/2007/05/11/23904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高速学习socket编程的10个步骤</title><link>http://www.cppblog.com/waterinfire/archive/2007/04/06/21415.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Fri, 06 Apr 2007 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/04/06/21415.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/21415.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/04/06/21415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/21415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/21415.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;socket编程不比单机编程，它至少涉及两个角色即客户端和服务端，在socket的运行中由于它涉及了网络上的n多设备，只要其中的一个设备有问题，就会可能导致程序出问题。<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;作为初学网络编程的程序员来说，我们应该怎么高效地学习网络呢？经过个人几年的学习和实践，我觉得要进行高效的网络编程学习，可以有以下是个步骤：<br><br>&nbsp;&nbsp;&nbsp;1）马上到<a href="http://www.python.org/">www.python.org</a>下下载python，然后花2～3天时间学习基本的python语法。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python是一门优秀的脚本语言，易学易用。这里是一篇<a href="http://wiki.woodpecker.org.cn/moin/WhyPython/WhyPythonZh">为什么要选择python</a>的文章，读者朋友可以参看。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我个人觉得最重要的是在python，我们可以通过交互式来学习网络编程，你敲一个命令就可以马上获得该命令的反应。如果一开始就用c/c++或者java来学习网络编程的话，那将是非常让我泄气的，因为你必须解决编译、链接等问题。<br><br>2）学习C/S交互模型，具体来说客户端的编程模型是怎样的，服务端模型又是怎样的，然后把该模型彻底消化成自己的语言。<br><br>3）学习socket的api，并且在python下不断练习。<br><br>4）和一位同道者结成学习小组，大家共同学习网络编程。比如在一段时间一个人编写客户端，另一个编写服务端；再过一段时间，换一下角色；<br><br>5）参加网上讨论组，比如google上的高性能网络编程组。<br><br>（待续）</p>
<img src ="http://www.cppblog.com/waterinfire/aggbug/21415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-04-06 17:02 <a href="http://www.cppblog.com/waterinfire/archive/2007/04/06/21415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux获得线程信息的办法</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/23/20428.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Fri, 23 Mar 2007 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/23/20428.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/20428.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/23/20428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/20428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/20428.html</trackback:ping><description><![CDATA[
		<p>在linux中，我们可以通过以下命令获得目前使用的thread版本：<br /><br /> getconf GNU_LIBPTHREAD_VERSION<br /><br /> 比如在我的RedHad平台上，得到以下输出：<br />  NPTL 0.60<br /><br />  另外我们还可以通过以下命令获得更多的关于线程的信息：<br />   1) ldd /bin/ls | grep libc.so.6<br />   输出：<br />           libc.so.6 =&gt; /lib/tls/libc.so.6 (0xb749a000)<br /><br />   2) /lib/tls/libc.so.6<br />   输出：<br /><br />GNU C Library stable release version 2.3.2, by Roland McGrath et al.<br />Copyright (C) 2003 Free Software Foundation, Inc.<br />This is free software; see the source for copying conditions.<br />There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A<br />PARTICULAR PURPOSE.<br />Compiled by GNU CC version 3.2.3 20030502 (Red Hat Linux 3.2.3-20).<br />Compiled on a Linux 2.4.20 system on 2003-10-02.<br />Available extensions:<br />        GNU libio by Per Bothner<br />        crypt add-on version 2.1 by Michael Glad and others<br />        <strong><font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">NPTL 0.60 by Ulrich Drepper</font></strong><br />        RT using linux kernel aio<br />        The C stubs add-on version 2.1.2.<br />        BIND-8.2.3-T5B<br />        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk<br />        Glibc-2.0 compatibility add-on by Cristian Gafton <br /><font color="#ff0000"><strong>Thread-local storage support included.<br /></strong></font>Report bugs using the `glibcbug' script to &lt;<a href="mailto:bugs@gnu.org">bugs@gnu.org</a>&gt;.<br /><br /></p>
<img src ="http://www.cppblog.com/waterinfire/aggbug/20428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-23 12:46 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/23/20428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>超级电子书基地</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/12/19660.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Mon, 12 Mar 2007 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/12/19660.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19660.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/12/19660.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19660.html</trackback:ping><description><![CDATA[   最近本人在网上找到一个超级庞大的电子书基地，里面你几乎可以找到你想学习的任何编程知识，比如操作系统、数据库、语言(C#,Java,Php等）、设计等。<br /><br />   <a href="www.flazx.com">www.flazx.com</a><br /><br />  <img src ="http://www.cppblog.com/waterinfire/aggbug/19660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-12 21:33 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/12/19660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从“模式转变”说起？</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/11/19583.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Sun, 11 Mar 2007 14:14:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/11/19583.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19583.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/11/19583.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19583.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19583.html</trackback:ping><description><![CDATA[   “我们怎样才能变得效率更高？我发现，如果你希望慢慢地，逐步地提高，改变你的态度和行为，你就能做到这一点。但是，如果你想以快速的方式——我的意思是说，以剧烈的、革命性的、转型性的方式——如果你想发生量子级的提高，不论是个人还是组织，你都要改变你的参照模式。<br />      改变你对世界的看法，你对人的看法，你对管理和领导的看法。改变你的模式，改变你理解和解释现实某些方面的方法。最大的突破就是打破旧的思考方式。”<br /><br />   以上段落引自美国牛人斯蒂芬.柯维。<br /><br />   作为在亭子间来来往往的程序员，我们何尝不想提高我们的工作效率，提升我们的编程水平。但是经过了n个项目的磨练，n行代码的编写之后，为什么我们的编程水平不见大幅度提高或者发生量子级跃迁呢？<br /><br />   在经过几年的项目磨练之后，我们的编程水平毫无疑问会有所进展，我们的分析、设计和思考能力当然也会有所进步。但是到了一定阶段之后，就会感觉达到了自己能力的瓶颈，每天、每月、每年似乎能在重复做着同一个水平线上的工作，只要工作要求超过此水平线，就会感觉自己无从下手。就像电子的能级一样，只能在同一个能级上飞来飞去，而不能跃迁到一个高的能级。<br /><br />   诚如斯蒂芬所言，“如果你想发生量子级的提高，你要改变你的参照模式。你对人的看法，你对管理和领导的看法。改变你的模式。”如果我们感觉自己每天工作也非常能力，学习也挺卖力，做得项目也不少，但是如果你自我感觉不好的话。那么我们就要观照一下自己的模式，思考人生、社会和宇宙的模式，很有可能是我们自己思考的模式出现了问题。<br /><br />   <br />   <br /><br /><img src ="http://www.cppblog.com/waterinfire/aggbug/19583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-11 22:14 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/11/19583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix调试指导书</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/08/19466.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Thu, 08 Mar 2007 14:13:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/08/19466.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19466.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/08/19466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19466.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19466.html</trackback:ping><description><![CDATA[AIX：<a href="http://www.unet.univie.ac.at/aix/aixprggd/genprogc/toc.htm">http://www.unet.univie.ac.at/aix/aixprggd/genprogc/toc.htm</a><br /><br /><img src ="http://www.cppblog.com/waterinfire/aggbug/19466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-08 22:13 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/08/19466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>精灵是怎样炼成的？</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/08/19461.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Thu, 08 Mar 2007 13:16:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/08/19461.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19461.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/08/19461.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19461.html</trackback:ping><description><![CDATA[
		<p dir="ltr" style="MARGIN-RIGHT: 0px">      许多程序员说精灵(daemon)不是魔鬼(demon)。即使有时似乎象魔鬼，但你的服务器是不会由魔鬼控制的（或许你的某些用户会由魔鬼控制，但你的服务器不会）。<br /><br />      我们把精灵定义为一个在后台运行的程序，用于管理系统的各个功能。该词的字面意思是“介乎神与人的精灵”。诗人威廉.巴特勒.耶茨很喜欢该词的意喻及其对现实二重性的表达。他以人来看待精灵，用精灵来表达人性的另一面。你不会明白，魔鬼不存在该有多好！例如，你怎么知道你这块馅饼是大的？除非你曾有一块比这小的。<br /><br />     事实上，精灵这个术语源自希腊神话。古希腊人称精灵为超人，它充当神与人之间的仲裁者。这是Unix精灵为你所做的一切的最准确描述。实际上，精灵始终呆在后台随时等待调用去执行某些服务。系统上运行的某些精灵执行系统指定的每项服务。但，请不要混淆精灵和进程这两个术语。<br />    <br />    既然精灵介于神人之间，那么人有没有可能变成精灵呢？<br /><br />    在unix的世界中，一般的进程能变成精灵进程吗？答案是肯定的，下面我们就一步一步揭开人到精灵的进化过程。<br /><br /> <strong>  决裂阶段：<br /></strong>   在这个阶段，我们必须脱离父母的怀抱，走向自己的新天地<br />   <br />   /* 父母创造了我们<br />   if(fork() &gt; 0) {<br />      /* 父母给了我们自由 */<br />      exit(0);<br />   }<br /><br />   <strong>创造阶段:<br /></strong>   父母给我们自由身，我们可以创造自己的新天地。为了将来美好的未来，我们要做三件事情：<br />   1）创造新的会话期，我们成为会话期的领导<br />   2）创造新的组织（进程组），我们自己成为该组的组长<br />   3）我们脱离终端的控制<br />   setsid();<br /><br />  <strong> 升华阶段</strong>：<br /><br />   “上善若水，<font color="#cc0033">水</font>善利万物而不争。处众人之所恶，故几于道。”，作为精灵的候选人，创造了自己的组织之后，不能再以组长自居，而应把自己当成普通人。<br />   <br />   signal(SIGHUP,SIG_IGN);<br />   if(fork()&gt;0){<br />      /*毁灭原身*/<br />      exit(0);<br />   }<br /><br />   返璞归真：<br /><br />   chdir("/");<br />   umask(0);<br />   for(i=0;i&lt;64;++i)<br />   {<br />      close(i);<br />   }<br /><br />   圆满阶段：<br />   经过以上各个修炼阶段，在此为止我们已经具备了精灵的各个条件。但是以上很不够，作为一个精灵，最主要的还是我们毛主席那句话：“为人民服务”。<br /><br />   我们应该在这个阶段把我们要做的事启动起来，做以下事情：<br /><br />   int service()<br />   {<br />      /* 有什么要求 */<br />      data = getIncomingRequest();<br /><br />      /* 为人民服务 */<br />      result  = processRequest(data)<br /><br />      /* 对人民的所求有个交代 */<br />      sendResponse(result);<br />   }<br /><br /><br />   </p>
<img src ="http://www.cppblog.com/waterinfire/aggbug/19461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-08 21:16 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/08/19461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>介绍FileMon和Regmon的好文章</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/07/19384.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Wed, 07 Mar 2007 14:01:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/07/19384.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19384.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/07/19384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19384.html</trackback:ping><description><![CDATA[
		<a href="http://download.microsoft.com/download/0/1/3/01381C25-72DA-4AA9-B792-43E02A243C71/SVR333_Russinovich_Solomon.ppt">
				<br />http://download.microsoft.com/download/0/1/3/01381C25-72DA-4AA9-B792-43E02A243C71/SVR333_Russinovich_Solomon.ppt</a>
<img src ="http://www.cppblog.com/waterinfire/aggbug/19384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-07 22:01 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/07/19384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样把代码从unix移植到windows</title><link>http://www.cppblog.com/waterinfire/archive/2007/03/07/19382.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Wed, 07 Mar 2007 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/03/07/19382.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/19382.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/03/07/19382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/19382.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/19382.html</trackback:ping><description><![CDATA[看看:<br /><br /><a href="http://www.microsoft.com/downloads/details.aspx?familyid=6224464a-31aa-42d1-ae0b-dd9b5713b928&amp;displaylang=en&amp;Hash=sYjUTuHJ1seLbY4hHLsEByNWlpud7KKOVvMBDFF8Mdz42aCFbMxFK3ADx1F307uFvCoHZZ3AmnA6fQ90ILvmAg%3d%3d">http://www.microsoft.com/downloads/details.aspx?familyid=6224464a-31aa-42d1-ae0b-dd9b5713b928&amp;displaylang=en&amp;Hash=sYjUTuHJ1seLbY4hHLsEByNWlpud7KKOVvMBDFF8Mdz42aCFbMxFK3ADx1F307uFvCoHZZ3AmnA6fQ90ILvmAg%3d%3d</a><br /><br /><img src ="http://www.cppblog.com/waterinfire/aggbug/19382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-03-07 21:26 <a href="http://www.cppblog.com/waterinfire/archive/2007/03/07/19382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“待伙综合症“</title><link>http://www.cppblog.com/waterinfire/archive/2007/01/15/17657.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Mon, 15 Jan 2007 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/01/15/17657.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/17657.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/01/15/17657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/17657.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/17657.html</trackback:ping><description><![CDATA[
		<br />   如果在日常的工作沟通和家庭生活中别人让你做一件举手之劳小事，而你经常说“待伙”的话。恭喜你，你得了“待伙综合症”。<br />   <br />   该症的症状表现如下，对于举手之劳的事的第一反应是“待伙”，比如“我待伙把文档发给你”，“我待伙帮你做”，“我待伙...”。<br /><br />   在鄙人的日常生活中，常常需要和项目组内兄弟沟通互动，在这之中以下的场景是经常发生的：<br /><br />   “XXX，把xxx文档发给我一下，有个客户需要。”<br /><br />   “好的，我待伙就发给你。”<br /><br />   时间一分一秒过去了，...<br /><br />   到了第二天上班，“XXX，昨天的东西发给我了吗？”<br /><br />   你猜那哥们有什么反应，就我目前经验而言，主要有以下几种类型：<br /><br />   1、木知木觉型<br />   “什么东西，我怎么不知道，好像没跟我说过嘛！”<br /><br />   2、知错就改型<br />   “哦，就发”，后来他确实发了。<br /><br />   3、屡犯屡错型<br />   “哦，待伙发”，可是到了下班也没见到文档。<br /><br />   平时我们编程时都会用到lazy创建对象的习惯用法，该用法可以加快才程序启动速度和减少资源开销，比如以下的c++类例子片断：<br /><br />   class APP<br />   {<br />   private:<br />      Resource*  resource;<br /><br />   public:<br /><br />      APP():resource(NULL){}   //待伙创建resource<br /><br />      int doSth()<br />      {<br />         if(this-&gt;resource == NULL)   //该函数必须要利用resource<br />         {<br />            this-&gt;resource = Resource();<br />         }<br />         <br />        // do sth with resource<br /><br />      }<br />   }<br /><br />   以上的 例子通过“待伙”确实可是获得不少好处，但是在我们平时的工作沟通和家庭生活时，待伙可不是个好习惯。<br /><br />   平时在家里，爸妈也会安排我做些事情，这些事情对我来说一般都是举手之劳，可是我也偶犯“待伙综合症”。<br /><br />   案例一：<br />   “XXX，把厨房地面上的水用拖把拖一下，我先去买菜了。”<br />   “待伙我就去”。<br />   !@#$%^&amp;*<br />   “XXX，怎么回事，我都出去一个多小时，你既然没有拖，真是的。”<br /><br />   案例二：<br />   “XXX，帮我的手机充一下电。”<br />   “待伙”。<br />     ...<br />   “怎么回事，我不是叫你充电吗，你看，就剩一格电了，我今天约了朋友，要用手机联系，你说怎么办吧”，第二天上午气势汹汹的夫人向我咆哮着。<br />   “我，我，我,...”<br /><br />      “待伙综合症”害人害己，如果你希望治疗它，做法其实非常简单，那就是：<br />      <br />      <font color="#ff0000" size="4">马上就做，现在就做，just do it!<br /></font><br />      有兴趣的读者，可以参考阅读：<a href="http://www.dirtsimple.org/2006/07/hidden-meaning-of-just-do-it.html">http://www.dirtsimple.org/2006/07/hidden-meaning-of-just-do-it.html</a>。<img src ="http://www.cppblog.com/waterinfire/aggbug/17657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-01-15 21:43 <a href="http://www.cppblog.com/waterinfire/archive/2007/01/15/17657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>越狱与RUP（一）</title><link>http://www.cppblog.com/waterinfire/archive/2007/01/11/17534.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Thu, 11 Jan 2007 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/01/11/17534.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/17534.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/01/11/17534.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/17534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/17534.html</trackback:ping><description><![CDATA[
		<font size="4">   最近因同事的“怂恿”，我抽空看了看流行的美国电视剧《越狱》。<br /><br />   《越狱》故事其实很简单，就说一个年轻人故意入狱，目的是营救他无辜的哥哥，可是强势的官方力量又希望杀死他的哥哥，而在守候森严的监狱中逃脱却是不易，故事就这样展开了,...<br /><br />   对于具体的情节和人物分析，本人就不在此展开说明，有兴趣的读者可以到越狱中文网</font>
		<a href="http://www.prisonbreak.cn/">
				<font size="4">http://www.prisonbreak.cn</font>
		</a>
		<font size="4">以及越狱论坛上去讨论</font>
		<a href="http://bbs.3e-online.com/forum-72-1.html">
				<font size="4">http://bbs.3e-online.com/forum-72-1.html</font>
		</a>
		<font size="4">。<br /><br />   在此我想从RUP的角度去分析《越狱》中牛人</font>
		<span style="FONT-SIZE: 12px">
				<font size="4">Michael Scofield在越狱中的心路历程。<br /><br />   Michael Scofield和其兄</font>
				<span style="FONT-SIZE: 12px">
						<font size="4"> Lincoln Burrows有迥然不同的性格，Scofield冷静敏感重理性分析，Burrows果敢、冲动、具男子气概，他们俩因他们父亲的特殊职业而过着有别于正常人的生活。<br /><br />   我们可以从Burrows冤枉入狱开始进行分析。Scofield到监狱看望Burrows时的心情应该是非常失望的，因为他当时觉得他有这么个兄弟是丢脸的。后来，</font>
				</span>
		</span>
		<span style="FONT-SIZE: 12px">
				<font size="4"> Veronica和Scofield说他的生活和大学学费是其兄Burrows支付，如果没有当时那笔钱，Scofield根本不可能有现在的优裕生活，而Burrows也不会入狱。从那时开始，Scofield就已经开始感情上接受其兄。后来，Burrows和Scofield说他将由xxx监狱转入Fox River监狱。<br /><br />   Fox River监狱，这句话就像一颗石子抛进Scofield的心湖中，引起了其“煽动”的涟漪，而这涟漪就像初步的“越狱”构想，虽然此时此构想非常小、非常模糊，但是这是剧中剧情发展关键的“导火线”。<br /><br />   我们可以把Scofield营救其兄Burrows越狱成功看成一个我们程序员经历过的或正经历的“死亡之旅”项目。<br /><br />  </font>
				<font size="4">
						<font color="#ff0000"> 初始阶段<br /></font>   在《越狱》中就是以上说明的涟漪引起的。它比较模糊，但它确立了“项目”的范围和目的，那就是要把其兄Burrows从Fox监狱中救出，他当然知道从Fox救出其兄不是那么容易，如果就不出，就要面临自己终生监禁的“项目”风险。不过，在这时有什么具体的“项目”风险，他不是非常清楚的。<br /><br />   </font>
				<font size="4">
						<font color="#ff0000">细化阶段<br /></font>   Scofield做出许多“项目”规划：<br /><br />   1、收集信息<br />      1）到公司实施过Fox River的文件库中收集了其施工图<br />      2）收集了监狱中主要他的犯人资料<br />      3）收集了狱警和狱长的资料<br />      4）收集了女医生</font>
				<font size="4">
						<span style="FONT-SIZE: 12px">Sara的资料<br /><br />   2、信息整理和分析<br />      Scofield把收集到的信息打印出来张贴在其墙上进行“系统级分析”，监狱中有几条下水道，有什么走向，xxx人和yyy人有什么关系，...<br /><br />   3、设计阶段<br /></span>   经过系统分析，他设计出了一张监狱地图和未来越狱计划的“解决方案”。<br />   <br />   “宇宙中不变的事未有变化本身”，Scofield深知其理，因此Scofield设计A计划，B计划，...。计划 不一定会成功，多个计划总归是好事，特别在这种生死攸关的场合。<br /><br />    由于Fox监狱的地下设施比较复杂，凭人脑是非常难记住的，而入狱时肯定是“赤裸裸”的入狱的，根本不可能带纸张进去，那怎么办？<br /><br />   偶然的机会，Scofield看到一个纹身的女孩，Scofield心中一亮，于是我们在剧中看到了Scofield身上比较奇特而且不会引起别人怀疑的纹身。<br /><br />   另外我想 Scofielb还用到了项目管理中的倒推计划好，他假设自己已经监狱，在监狱中要具备哪些东东呢？<br /><br />   1）计时手表<br />   2）绳子（可被塞入西装中）<br />   3）...<br /><br />   而这些东西怎么可能带入监狱呢，Scofield想到可以通过潜入监狱管道，然后到犯人储藏室取回。<br /><br />   另外Scofield又遇到一个难题，潜入管道后要进入储藏室，而进入储藏室必须要有身份卡。Fox工程是公司实施的，拿到身份卡不是难事，难就难在怎么把身份卡带入监狱呢？犯人的物品，狱警要进行严格的检查，若发现有信用卡或什么卡之类的，肯定没收，怎么办？就像我们编程时，发现左也不行，右也不行，怎么也不行，似乎要“投降”了。记得哲人说过，“困难问题的解决不能只停留在原有的问题空间”，也就是说解决不了的问题几乎都可以通过间接层获得解决方案。<br />   自己带入不了，那只有靠别人了。靠谁呢？平时的监狱探望审查非常严，没戏！有了，Scofield发现狱中有夫妻探望时间，其间夫妻间可有私密的肌肤接触。可Scofield没有妻子，怎么办？事情就是这样一层一层展开推演的，偶然的机会Scofield遇到一位风尘女子并在其被人欺负的关键节点挽救了她。为了感激Scofield，风尘女子答应Scofield，为他做一件事情。而这件事情就是，若Scofield入狱请女子以妻子身份探狱并为其送来“信用卡”，而这张“信用卡”就是被Scofield将来要用到的身份卡。<br /><br />   从以上的分析中，我们可以看到Scofield分析问题的缜密性。这一点非常值得我们程序员学习，其中值得一提的就是“为未来编程”，通过预见未来，行动我们的现在。<br /><br />   未来的路还很长，其中会发生很多变数，这一点Scofield非常清楚。那么Scofield将怎样具体实施这个“项目”，将在下篇分解。<br /><br />   <br /> <br /><br /><br />   </font>
		</span>
<img src ="http://www.cppblog.com/waterinfire/aggbug/17534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-01-11 22:06 <a href="http://www.cppblog.com/waterinfire/archive/2007/01/11/17534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2006年回顾（二）—— 代码要"拼凑"</title><link>http://www.cppblog.com/waterinfire/archive/2007/01/10/17510.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Wed, 10 Jan 2007 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/01/10/17510.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/17510.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/01/10/17510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/17510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/17510.html</trackback:ping><description><![CDATA[   一级NB程序员编写伟大的代码。<br /><br />   二级NB程序员“偷借”伟大的代码。<br /><br />   超级NB程序员组合伟大的代码。<br /><br />   汉朝开国大帝刘邦曾说过，““论运筹帷幄之中，决胜于千里之外，我不如张良；论抚慰百姓、供应粮草，我又不如萧何；论领兵百万，决战沙场，百战百胜，我不如韩信。可是，我能做到知人善用，发挥他们的才干，这才是我们取胜的真正原因。至于项羽，他只有范增一个人可用，但又对他猜疑，这是他最终失败的原因。”<br /><br />   <img src ="http://www.cppblog.com/waterinfire/aggbug/17510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-01-10 22:11 <a href="http://www.cppblog.com/waterinfire/archive/2007/01/10/17510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2006年回顾（一）——文档需动脑</title><link>http://www.cppblog.com/waterinfire/archive/2007/01/10/17508.html</link><dc:creator>程序员看世界</dc:creator><author>程序员看世界</author><pubDate>Wed, 10 Jan 2007 13:40:00 GMT</pubDate><guid>http://www.cppblog.com/waterinfire/archive/2007/01/10/17508.html</guid><wfw:comment>http://www.cppblog.com/waterinfire/comments/17508.html</wfw:comment><comments>http://www.cppblog.com/waterinfire/archive/2007/01/10/17508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterinfire/comments/commentRss/17508.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterinfire/services/trackbacks/17508.html</trackback:ping><description><![CDATA[   新年已过几天，自己掐指一算，眨眼间工作快六载。时间过得真快，该静下心来对自己进行总结总结，反省反省了。<br /><br />   作为程序员中的一员，鄙人对新技术、新方法有着狂热的激情，每天都希望自己多看一些资料和多编一些程序，有时自个颇以陶醉于比特世界而自鸣得意。但我们的生活毕竟不是单一的，我们毕竟要在团队中生活，要在“死亡之旅”项目中挣扎前行，在这之中对我造成折磨的一件事，那就是写文档。<br /><br />   写文档，谁都会写，这句话没错。就像每个人都觉得自己可以当皇帝一样，但不见得就可以做个明君。<br /><br />   每当项目中需要什么文档时，鄙人就三下五除二把它“拿下”了，自我感觉自己已经把该写的东西都写全了。但很多时候都是事与愿违，每当进行文档评审或别人参看文档时都会提很多意见，比如：<br />   1）文档没有体系结构<br />   2）前后不呼应<br />   3）没有层次<br />   4）...<br /><br />   最严重的评论是“不知所云”，我拷，我可是花了整整一天时间，<a href="mailto:!@#$%">!@#$%</a>^&amp;。<br /><br />   举个例子，有次领导让我写篇调查文档，针对xxx厂中的信息系统中存在的一些问题进行分析并提出改造方案。接到任务后，没经过仔细思考，就开始埋头写起：<br />   第一段列出了目前存在的所有信息系统，<br />      系统A<br />      系统B<br />      系统C<br />      系统D<br />      系统...<br />      系统Z<br /><br />   第二段列出了它们存在的问题，<br />      问题a<br />      问题b<br />      问题c<br />      问题...<br />      问题z<br /><br />   第三段进行了问题分析<br />   第四段给出了解决对策，<br />      对策1<br />      对策2<br />      对策3<br />      ...<br />      对策n<br /><br />   在会上领导进行了委婉地批评，说文档就像流水账一样，不成体系，没有归纳，没有总结。其中的系统、问题和解决对策就像一盘散沙，给读者的阅读带来极大的困难。经过“批评指正”，我意识到一篇文档要写出结构、写出思路、写出层次，读者才会看下去，不然就像我原来写的文章那样，文档中一大堆信息，谁容易明白，可能时间长了自己也不明白。<br /><br />   经过文档“重构”，我对问题进行了归纳和总结，比如：<br />   <br />   第一段中的信息系统，我根据功能级别把它分类成管理决策层（L4），生产管理层（L3），过程控制（L2），电器仪表层（L1），又根据建设时间把它分成了已建系统（又分成未改造和正申请改造）和在建系统。通过把信息分析，进行归纳之后，信息的理解和消化将变得轻松。<br /><br />   对问题我也是依葫芦画瓢，把问题归纳成系统问题、兼容性、扩展性、管理方便性进行了说明。对解决方案进行了从重要性、操作性和阶段性进行了说明。<br /><br />   经过“重构”，文档得到了领导的认可。自己在文档的编写方法有了一次小飞跃。<br /><br />   写文档不难，写好文档不易。就像我们程序员的程序一样，一定要有好的体系结构，要善于利用设计模式以及惯用法等。对比于文档，我个人觉得，<br /><br />      文档                                                      代码<br /><br />   金字塔原理               &lt;——&gt;              体系结构<br /><br />   归类、排比句           &lt;——&gt;              惯用法 <br /><br />   许多程序设计中的思想都可以用于文档编写，比如：<br /><br />   1）用例驱动，在文档编写中，我们可以关心文档的用户是谁，他们对这篇文档都有什么期望，...。<br />     <br />   2）以体系结构为中心，在文档编写中我们可以按照“金字塔原理”的思想为中心展开我们的编写工作。<br /><br />   3）迭代和增量为过程，在文档编写中，我们可以增量进行编写工作，然后休息一下，把自己换成文档用户的角色通读一下文档，把不满之处记于纸上，然后在把修改意见放入下一轮迭代编写中。<br /><br />   最后，以领导常说的一句话共勉，“凡事要用心”。不过我个人要再添一句，“到时需动脑”，:-)<br /><br />   <br />（注：《金字塔原理》是一本关于写作的书，非常不错，值得拥有）<img src ="http://www.cppblog.com/waterinfire/aggbug/17508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterinfire/" target="_blank">程序员看世界</a> 2007-01-10 21:40 <a href="http://www.cppblog.com/waterinfire/archive/2007/01/10/17508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>