﻿<?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++博客-ngaut-随笔分类-others</title><link>http://www.cppblog.com/ngaut/category/1628.html</link><description>asm/c/c++/......</description><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2009 22:28:41 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2009 22:28:41 GMT</pubDate><ttl>60</ttl><item><title>DbEntry.net 对事务的处理</title><link>http://www.cppblog.com/ngaut/archive/2009/04/05/78990.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 05 Apr 2009 01:37:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2009/04/05/78990.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/78990.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2009/04/05/78990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/78990.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/78990.html</trackback:ping><description><![CDATA[public void UsingTransaction(IsolationLevel il, CallbackVoidHandler callback)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Scope&lt;ConnectionContext&gt;.Current != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConnectionContext et = Scope&lt;ConnectionContext&gt;.Current;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (et.IsolationLevel == il)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewTransaction(callback);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void NewTransaction(CallbackVoidHandler callback)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewTransaction(IsolationLevel.ReadCommitted, callback);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void NewTransaction(IsolationLevel il, CallbackVoidHandler callback)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewConnection(delegate<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConnectionContext cc = ConProvider;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc.BeginTransaction(il);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnBeginTransaction();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc.Commit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnCommittedTransaction();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc.Rollback();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnTransactionError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><img src ="http://www.cppblog.com/ngaut/aggbug/78990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2009-04-05 09:37 <a href="http://www.cppblog.com/ngaut/archive/2009/04/05/78990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>etherboot 编译 来自 http://markmail.org/message/h4eyrkv5bfd5yila#query:Etherboot%20gcc%204.3+page:1+mid:h4eyrkv5bfd5yila+state:results</title><link>http://www.cppblog.com/ngaut/archive/2009/02/04/73027.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Wed, 04 Feb 2009 15:42:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2009/02/04/73027.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/73027.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2009/02/04/73027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/73027.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/73027.html</trackback:ping><description><![CDATA[<table id="headers">
    <tbody>
        <tr>
            <th>Subject:</th>
            <td><a href="http://markmail.org/message/h4eyrkv5bfd5yila" class="subject">[<strong>Etherboot</strong>-developers] [PATCH] move RM_FRAGMENT to the beginning of undi.c</a></td>
            <td class="actions"><span class="actions mklink">Actions...</span></td>
        </tr>
        <tr>
            <th>From:</th>
            <td colspan="2">Glauber Costa (<span>glom<a class="email mklink">...</a>@redhat.com</span>)</td>
        </tr>
        <tr>
            <th>Date:</th>
            <td colspan="2">Oct 14, 2008  9:17:11 am</td>
        </tr>
        <tr>
            <th>List:</th>
            <td colspan="2"><span>net.sourceforge.lists.etherboot-developers</span></td>
        </tr>
    </tbody>
</table>
<p>I'm currently facing a compile problem with <strong>gcc</strong> <strong>4.3</strong>.0 at undi.c
Looking at the generated code, it seems <strong>gcc</strong> is inlining _undi_call into
_undi_call_silent, thus making rm_undi_call be defined twice.
</p>
<p>Using <strong>gcc</strong> option -fno-inline also fixes this, but then the compiler won't
do any kind of inlining, even "good" ones, so this fix seem to do the right<br>thing.
</p>
<p>Signed-off-by: Glauber Costa &lt;<span>glom<a class="email mklink">...</a>@redhat.com</span>&gt;
</p>
<p>---
src/arch/i386/drivers/net/undi.c |   27 ++++++++++++++-------------
1 files changed, 14 insertions(+), 13 deletions(-)
</p>
<p>diff --git a/src/arch/i386/drivers/net/undi.c b/src/arch/i386/drivers/net/undi.c
index 084fc18..1ffea43 100644
--- a/src/arch/i386/drivers/net/undi.c
+++ b/src/arch/i386/drivers/net/undi.c
@@ -33,6 +33,19 @@ $Id$
/* E820 map mangler */
#include "hidemem.h"
</p>
<p>+RM_FRAGMENT(rm_undi_call,
+	"popw %di\n\t"			/* %es:di = routine */
+	"popw %es\n\t"
+	"pushw %cs\n\t"			/* set up return address */
+	"call 1f\n\t1:popw %bx\n\t"
+	"leaw (2f-1b)(%bx), %ax\n\t"
+	"pushw %ax\n\t"
+	"pushw %es\n\t"			/* routine address to stack */
+	"pushw %di\n\t"
+	"lret\n\t"			/* calculated lcall */
+	"\n2:\n\t"			/* continuation point */
+);
+
/* NIC specific static variables go here */
static undi_t undi = {
.pnp_bios         = NULL,
@@ -403,21 +416,9 @@ static PXENV_EXIT_t _undi_call ( uint16_t routine_seg,
{ routine_off, routine_seg }, st0, st1, st2
};
</p>
<p>-	RM_FRAGMENT(rm_undi_call,
-		"popw %di\n\t"			/* %es:di = routine */
-		"popw %es\n\t"
-		"pushw %cs\n\t"			/* set up return address */
-		"call 1f\n\t1:popw %bx\n\t"
-		"leaw (2f-1b)(%bx), %ax\n\t"
-		"pushw %ax\n\t"
-		"pushw %es\n\t"			/* routine address to stack */
-		"pushw %di\n\t"
-		"lret\n\t"			/* calculated lcall */
-		"\n2:\n\t"			/* continuation point */
-	);
</p>
<p> 	/* Parameters are left on stack: set out_stack = in_stack */
-	ret = real_call ( rm_undi_call, &amp;in_stack, &amp;in_stack );
+	ret = real_call ( rm_undi_call, &amp;in_stack, &amp;in_stack );
</p>
<p> 	/* UNDI API calls may rudely change the status of A20 and not
* bother to restore it afterwards.  Intel is known to be
</p>
<div class="footer signature">
<p>--
1.5.5.1
</p>
</div><img src ="http://www.cppblog.com/ngaut/aggbug/73027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2009-02-04 23:42 <a href="http://www.cppblog.com/ngaut/archive/2009/02/04/73027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]udpcast</title><link>http://www.cppblog.com/ngaut/archive/2008/10/27/65265.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 27 Oct 2008 15:39:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/10/27/65265.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/65265.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/10/27/65265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/65265.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/65265.html</trackback:ping><description><![CDATA[<pre>Guofu,<br>  Following is what I got from  Alain long time ago.  Hope this helps.<br>   <br>  Thanks,<br>  Sai<br>   <br>  *****************************************************************<br>  There are no format documents yet about the protocol. The protocol is<br>not based on an RFC, but is homegrown specifically for udpcast.<br><br>Updcast uses two UDP port numbers, 9000 and 9001.<br><br>The receiver listens on 9000 (portbase), the sender on 9001 <br>(portbase+1)<br><br>The protocol runs as follows:<br><br>1. When the sender starts up, it broadcast a CMD_HELLO message to the<br>local network broadcast address<br><br>2. When the receiver starts up, or whenever it receives a CMD_HELLO<br>message, it sends a CMD_CONNECT_REQ address. If the CMD_CONNECT_REQ is<br>sent at startup, it is broadcast; else it is sent to the server's<br>address (as deducted from the CMD_HELLO message).<br><br>This allows the rendez-vous to be established no matter whether the<br>client or the server first starts up. Additionnally, the server can be<br>set up to periodically send its CMD_HELLO message (interesting for<br>asynchronous mode, see below).<br><br><br>3. The server replies to each CMD_CONNECT_REQ with a CMD_CONNECT_REPLY<br>(unicasted to the client who sent the CMD_CONNECT_REQ). The connect<br>reply contains the client number that the server assigned to that<br>client (clNr), the block size (size of packed), a bitmask of<br>capabilities, and the multicast address to be used for the actual data<br>transfer transfer.<br><br>At this stage, server and client know about each other, and are ready<br>to start the transfer. For convenience, the transfer may either be<br>started at the server, or at any participating client.<br><br>4. If transfer start is initiated by a client, it sends the server a<br>CMD_GO message.<br><br>5. If the transfer start is initiated by the server (or, after<br>reception of the CMD_GO message from a client), the server starts<br>transfering data by sending CMD_DATA packets. The reception of the<br>first CMD_DATA packet is a signal to all clients that now the<br>rendez-vous phase is over, and that the transfer has started.<br><br>The data is subdivided into slices, which are themselves subdivided<br>into stripes (only in FEC mode), which are subdivided in network<br>packets, which are made up of bytes.<br><br>A CMD_DATA packet contains the slice number (sliceNo), the block<br>number within that slice (blockNo), and the total number of bytes in<br>the slice, and then the data itself.<br><br>After each slice has been transmitted, lost packets are handled.<br><br>In FEC mode, lost packets are recovered by the client by using the<br>error correction packets included in each slice.<br><br>A CMD_FEC packet contains the number of stripes in the slice, the<br>slice number, the block number, and the number of bytes.<br><br><br>In non-FEC mode, the server asks each client to acknowledge at the end<br>of the slice (CMD_REQACK). The CMD_REQACK contains the identifier of<br>the slice to be acknowleged (sliceNo), the number of bytes in that<br>slice (bytes), and a retransmission counter. The clients reply to the<br>CMD_REQACK either with a CMD_OK (if they received everything) or with<br>a CMD_RETRANSMIT (if packets were missed). Both the CMD_OK and<br>CMD_RETRANSMIT message contain the sliceNo. The CMD_RETRANSMIT message<br>contains also a bitmap of the missed packets, and the retransmit id.<br><br>In response the CMD_RETRANSMIT messages, the server will retransmit<br>packets that have been missed by at least one client, increments the<br>rxmit counter and then send another CMD_REQACK. The rxmit counter is<br>used to discard late CMD_RETRANSMIT messages: indeed, after a round of<br>retransmission, CMD_RETRANSMIT messages from the previous round should<br>be ignored, or else the server may resend packets that have been<br>received in this round.<br><br>Clients may leave a transmission by sending a CMD_DISCONNECT. Sending<br>the CMD_DISCONNECT is important, or else the server will needlessly<br>wait for the acknowledgments of these clients. However, if a client<br>crashes without sending a CMD_DISCONNECT, the server has a timeout to<br>detect this situation, and continue with the other clients ("The<br>client #n has been dropped by the server").<br><br>When all clients have received all packets (i.e. all clients have send<br>a CMD_OK for that slice), the sender moves on to the next slice, until<br>end of file is reached. The server signals end of transfer by sending<br>a slice of zero bytes.<br><br>Including slice size in every packet, and number of stripes in every<br>FEC packet may seem redundant. However, this is needed in order to<br>make the protocol robust in cases of packet loss: if the number of<br>bytes was only in the first or in the last packet, then the loss of<br>that packet would make it hard to recover, because not only the data<br>was lost, but also the meta-data needed to reconstruct that<br>slice. This is especially relevant in FEC mode.<br><br>FEC mode is intended for unidirectional (asynchronous mode). In this<br>mode, there are no acknowledgments, and no retransmissions. This is<br>intended for situations where no receiver-to-sender communication is<br>possible, or where the latency of such a communication would be<br>prohibitively high, such as multicast over satellite.<br><br>The server sends (one or several) CMD_HELLO which includes the<br>multicast address it intends to use, and then starts with the<br>data. Each slice not only contains the data, but also a configurable<br>number of redundant "error correction" packets.<br><br>FEC mode uses an algorithm based on Vandermonde matrices to<br>recalculate the contents of any lost packets. The algorithm is chosen<br>such that all k data packets may be restored as long as the receiver<br>has gotten at least k packets (be it data or FEC). For example, with<br>k-3 data packets, and 3 FEC packets, all k data packets may be<br>reconstructed. K is a parameter of the algorithm, and the higher the<br>value for k, the more computation intensive the algorithm<br>is. Moreover, values of k greater than 128 are not supported. For that<br>reason, each slice (which may be up to 1024 packets) is subdivided in<br>several stripes (of at most 128 packets), which are interleaved<br>(i.e. first comes 1st packet of 1st stripe, than 1st packet of 2nd<br>stripe, ..., then 1st packet of last stripe, than 2nd packet of 1st<br>stripe, etc.) That way a burst loss of packets (for instance, 6<br>packets in a row) won't overly impact one stripe but will rather be<br>spread out among several. Indeed, if udp-sender has been set up to<br>include l redundant packets per stripe, it must be avoided at all cost<br>that more than l packets are lost per stripe, or otherwise the loss in<br>uncrecoverable.<br><br>Additional complications in the protocol arise from the fact that a<br>first version of the protocol used the native byte ordering from Intel<br>processors, rather than use the network byte order. This made udpcast<br>unportable to non-PC architectures. This was changed two years ago;<br>however in order to stay compatible with older versions, the receiver<br>and sender are able to detect that packets with the "wrong" byte order<br>have been received, and are able to correct for that: if the message<br>code (CMD_*) doesn't make sense in network byte order, udpcast tries<br>to interpret it in Intel byte order, and if that matches a known code,<br>the packet is byte-swapped.<br><br><br>Regards,<br><br>Alain<br></pre><img src ="http://www.cppblog.com/ngaut/aggbug/65265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-10-27 23:39 <a href="http://www.cppblog.com/ngaut/archive/2008/10/27/65265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小心vmware6.0和vs2008的冲突</title><link>http://www.cppblog.com/ngaut/archive/2008/10/22/64683.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Wed, 22 Oct 2008 02:35:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/10/22/64683.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/64683.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/10/22/64683.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/64683.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/64683.html</trackback:ping><description><![CDATA[如果安装vmware6.0后，vs2008打开工程后自动关闭，卸载vmware试试，偶被这个问题小郁闷了一把
<img src ="http://www.cppblog.com/ngaut/aggbug/64683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-10-22 10:35 <a href="http://www.cppblog.com/ngaut/archive/2008/10/22/64683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发一个招聘贴</title><link>http://www.cppblog.com/ngaut/archive/2008/09/19/62309.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 19 Sep 2008 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/09/19/62309.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/62309.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/09/19/62309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/62309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/62309.html</trackback:ping><description><![CDATA[要求:<br>1. 熟悉汇编语言，c/c++，熟悉80x86体系架构，实模式，保护模式<br>2. 良好的数据结构与算法基础<br>3. 熟悉MFC或者STL<br>4. 工作地点在武汉<br>5. 学历不限，英语不限，人品良好，有团队精神<br>6. 特别优秀者，只需具备：人品良好，有团队精神<br><br>有以下经验优先：<br>1. os引导程序开发， os开发<br>2. bios开发经验<br>3. 熟悉Linux裁剪，Linux内核<br>4. 有编译器开发经验<br><br>tel:13554674976&nbsp; 刘先生<br><br> <img src ="http://www.cppblog.com/ngaut/aggbug/62309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-09-19 22:06 <a href="http://www.cppblog.com/ngaut/archive/2008/09/19/62309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Bug管理的经验和实践[转载]</title><link>http://www.cppblog.com/ngaut/archive/2008/09/09/61354.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 09 Sep 2008 00:07:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/09/09/61354.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/61354.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/09/09/61354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/61354.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/61354.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: [转载]孟岩：刘振飞，你好。我知道你以前是方正出版印刷系统的核心开发人员，后来来到微软的Office开发组。我认识你的时候你还在微软工作，状态似乎不错。为什么后来又离开微软了呢？&nbsp;刘振飞：93年到96年，我在北大计算机研究所读研。96年毕业后，我留在所里继续从事方正核心产品世纪RIP --- PSPNT的研发、维护、升级（还有外围软件开发比如新女娲补字NewNW、PDF流程系...&nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2008/09/09/61354.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/61354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-09-09 08:07 <a href="http://www.cppblog.com/ngaut/archive/2008/09/09/61354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Driver Development Part 1: Introduction to Drivers [codeproject]</title><link>http://www.cppblog.com/ngaut/archive/2008/04/14/47077.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 14 Apr 2008 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/04/14/47077.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/47077.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/04/14/47077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/47077.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/47077.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Download source files - 10.4 Kb IntroductionThis tutorial will attempt to describe how to write a simple devicedriver for Windows NT. There are various resources and tutorials on theinternet...&nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2008/04/14/47077.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/47077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-04-14 21:38 <a href="http://www.cppblog.com/ngaut/archive/2008/04/14/47077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]打造最快的Hash表(和Blizzard的对话)</title><link>http://www.cppblog.com/ngaut/archive/2008/02/27/43329.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Wed, 27 Feb 2008 03:39:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/02/27/43329.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/43329.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/02/27/43329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/43329.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/43329.html</trackback:ping><description><![CDATA[<p>開元最近学习了一下Blizzard的MPQ文件格式，颇有一些心得，其中一条就是对HastTable的理解，很想写出来给大家共享，感谢Justin Olbrantz的文章《Inside MoPaQ》，大多认识来源于此。 <br><br><br>先提一个简单的问题，如果有一个庞大的字符串数组，然后给你一个单独的字符串，让你从这个数组中查找是否有这个字符串并找到它，你会怎么做？<br><br>有一个方法最简单，老老实实从头查到尾，一个一个比较，直到找到为止，我想只要学过程序设计的人都能把这样一个程序作出来，但要是有程序员把这样的程序交给用户，我只能用无语来评价，或许它真的能工作，但...也只能如此了。<br><br>最合适的算法自然是使用HashTable（哈希表），先介绍介绍其中的基本知识，所谓Hash，一般是一个整数，通过某种算法，可以把一个字符串"压缩" 成一个整数，这个数称为Hash，当然，无论如何，一个32位整数是无法对应回一个字符串的，但在程序中，两个字符串计算出的Hash值相等的可能非常小，下面看看在MPQ中的Hash算法<br><br>unsigned long HashString(char *lpszFileName, unsigned long dwHashType)<br>{ <br>unsigned char *key = (unsigned char *)lpszFileName;<br>unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;<br>int ch;<br><br>while(*key != 0)<br>{ <br>&nbsp;&nbsp;ch = toupper(*key++);<br><br>seed1 = cryptTable[(dwHashType &lt;&lt; 8) + ch] ^ (seed1 + seed2);<br>seed2 = ch + seed1 + seed2 + (seed2 &lt;&lt; 5) + 3; <br>}<br>return seed1; <br>} <br><br>Blizzard的这个算法是非常高效的，被称为"One-Way Hash"，举个例子，字符串"unitneutralacritter.grp"通过这个算法得到的结果是0xA26067F3。<br>是不是把第一个算法改进一下，改成逐个比较字符串的Hash值就可以了呢，答案是，远远不够，要想得到最快的算法，就不能进行逐个的比较，通常是构造一个哈希表(Hash Table)来解决问题，哈希表是一个大数组，这个数组的容量根据程序的要求来定义，例如1024，每一个Hash值通过取模运算 (mod)对应到数组中的一个位置，这样，只要比较这个字符串的哈希值对应的位置又没有被占用，就可以得到最后的结果了，想想这是什么速度？是的，是最快的O(1)，现在仔细看看这个算法吧<br>int GetHashTablePos(char *lpszString, SOMESTRUCTURE *lpTable, int nTableSize)<br>{ <br>int nHash = HashString(lpszString), nHashPos = nHash % nTableSize;<br><br>if (lpTable[nHashPos].bExists &amp;&amp; !strcmp(lpTable[nHashPos].pString, lpszString)) <br>&nbsp;&nbsp;return nHashPos; <br>else <br>&nbsp;&nbsp;return -1; //Error value <br>} <br><br>看到此，我想大家都在想一个很严重的问题："如果两个字符串在哈希表中对应的位置相同怎么办？",毕竟一个数组容量是有限的，这种可能性很大。解决该问题的方法很多，我首先想到的就是用"链表",感谢大学里学的数据结构教会了这个百试百灵的法宝，我遇到的很多算法都可以转化成链表来解决，只要在哈希表的每个入口挂一个链表，保存所有对应的字符串就OK了。<br><br>事情到此似乎有了完美的结局，如果是把问题独自交给我解决，此时我可能就要开始定义数据结构然后写代码了。然而Blizzard的程序员使用的方法则是更精妙的方法。基本原理就是：他们在哈希表中不是用一个哈希值而是用三个哈希值来校验字符串。<br><br>中国有句古话"再一再二不能再三再四"，看来Blizzard也深得此话的精髓，如果说两个不同的字符串经过一个哈希算法得到的入口点一致有可能，但用三个不同的哈希算法算出的入口点都一致，那几乎可以肯定是不可能的事了，这个几率是1:18889465931478580854784，大概是10的 22.3次方分之一，对一个游戏程序来说足够安全了。<br><br>现在再回到数据结构上，Blizzard使用的哈希表没有使用链表，而采用"顺延"的方式来解决问题，看看这个算法：<br>int GetHashTablePos(char *lpszString, MPQHASHTABLE *lpTable, int nTableSize)<br>{ <br>const int HASH_OFFSET = 0, HASH_A = 1, HASH_B = 2;<br>int nHash = HashString(lpszString, HASH_OFFSET);<br>int nHashA = HashString(lpszString, HASH_A);<br>int nHashB = HashString(lpszString, HASH_B);<br>int nHashStart = nHash % nTableSize, nHashPos = nHashStart;<br><br>while (lpTable[nHashPos].bExists)<br>{ <br>&nbsp;&nbsp;if (lpTable[nHashPos].nHashA == nHashA &amp;&amp; lpTable[nHashPos].nHashB == nHashB) <br>&nbsp;&nbsp; return nHashPos; <br>&nbsp;&nbsp;else <br>&nbsp;&nbsp; nHashPos = (nHashPos + 1) % nTableSize;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;if (nHashPos == nHashStart) <br>&nbsp;&nbsp; break; <br>}<br><br>return -1; //Error value <br>} <br><br>1. 计算出字符串的三个哈希值（一个用来确定位置，另外两个用来校验)<br>2. 察看哈希表中的这个位置<br>3. 哈希表中这个位置为空吗？如果为空，则肯定该字符串不存在，返回<br>4. 如果存在，则检查其他两个哈希值是否也匹配，如果匹配，则表示找到了该字符串，返回<br>5. 移到下一个位置，如果已经越界，则表示没有找到，返回<br>6. 看看是不是又回到了原来的位置，如果是，则返回没找到<br>7. 回到3<br><br>怎么样，很简单的算法吧，但确实是天才的idea, 其实最优秀的算法往往是简单有效的算法，<br>Blizzard被称为最卓越的游戏制作公司，不愧于此。</p>
<img src ="http://www.cppblog.com/ngaut/aggbug/43329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-02-27 11:39 <a href="http://www.cppblog.com/ngaut/archive/2008/02/27/43329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Delphi多线程下的ADO编程</title><link>http://www.cppblog.com/ngaut/archive/2008/02/26/43253.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 26 Feb 2008 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/02/26/43253.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/43253.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/02/26/43253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/43253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/43253.html</trackback:ping><description><![CDATA[<p align=center><strong><span>Delphi</span></strong><strong><span>多线程下的</span></strong><strong><span>ADO</span></strong><strong><span>编程</span></strong><strong></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span>前言：</span></strong><strong></strong></p>
<p><span>几个月前接到一个任务：将一后台程序访问数据库的方式从</span><span>BDE</span><span>改为</span><span>ADO</span><span>，原因是由于业务量的增加，通过</span><span>BDE</span><span>不论是向数据库写入数据还是从数据库中读出数据的速度都变得无法忍受，大家都知道</span><span>ADO</span><span>在数据库访问速度方面比</span><span>BDE</span><span>要快的多了（我写了一个测试程序使用</span><span>ADO</span><span>比使用</span><span>BDE</span><span>快了近</span><span>100</span><span>倍</span><span>!</span><span>）。这个任务还不简单嘛，只要将</span><span>BDE</span><span>的控件更换成</span><span>ADO</span><span>的再修改一些代码不就搞定了！我当时确实是这么想的，而且用了不到一个小时就搞定，测试运行一段没问题，大功告成了，我想。谁知道一个恶梦就此开始，我的愚昧无知使我在程序中埋下了一个超级炸弹，它的威力不次于</span><span>9.11</span><span>撞击世贸大厦的两架客机，整个系统被它无情的催跨。程序在运行很长一段时间候捕获到一系列的异常：</span></p>
<p><span>OLE error 800A0E7F</span></p>
<p><span>Access violation at address 00135770. Write of address 005D8B78</span></p>
<p><span>Access violation at address 00178EC6. Read of address FFFFFFFF</span></p>
<p><span>Access violation at address 1F499BDD in module 'msado15.dll'. Read of address 0000000C</span></p>
<p><span>&#8230;&#8230;.</span></p>
<p><span>接下来我们的系统就像世贸大厦一下悲壮的倒下了。</span></p>
<p>&nbsp;</p>
<p><strong><span>为什么？</span></strong><strong></strong></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>为什么？程序在为改动之前使用</span><span>BDE</span><span>运行得好好的，我并没有更改程序的结构啊？我十分的迷惑，当然要想解决问题一切都得从错误代码开始。</span></p>
<p><span><span>&nbsp;&nbsp; </span>OLE error 800A0E7F</span><span>：什么咚咚来的？它什么意思？什么原因引起的？我找了半天也没有在我的系统里找到它的说明，好在现在网络发达，也许有人遇到跟我一样的问题吧，于是我用</span><span>OLE error 800A0E7F</span><span>作为关键字搜了一下，嘿嘿，果真被我找到了：</span></p>
<p><span>&gt;</span><em><span>0x800A0E7F Operation cannot be performed while executing </span></em><span><br><em>&gt; asynchronously.</em></span></p>
<p><span>异步执行时操作不能被执行（完成），还是不太清楚错误的原因，于是我在一个网站发布了帖子求助，一些人告诉我</span><span>ADO</span><span>线程不安全，需要线程同步，事实上我的程序做了同步，而且针对不同的应用使用了多个</span><span>ADOConnection</span><span>，我想我应该自己动手来好好研究一下这个问题了，它很意思。接下来我该好好分析我的程序并做一系列的测试来找到那个炸弹。</span></p>
<p>&nbsp;</p>
<p><strong><span>找出炸弹</span></strong><strong></strong></p>
<p><strong>&nbsp;</strong></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>在我的程序里所有访问数据库都是通过一个</span><span>DataModule</span><span>单元</span><span>TDataModule1</span><span>类提供的接口来完成，共有三个线程使用到了</span><span>TDataModule1</span><span>的对象</span><span>DataModule1</span><span>，</span><span>DataModule1</span><span>是一全局变量，下面是数据库的访问模式的结构模型图。（实际结构要复杂很多）</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><strong><span>数据库：</span></strong></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>ADOConnection1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>ADOConnection2 </span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>Table1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>Table2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOQuery1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>②</span><span>ADOQuery3</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>UpdateQuery</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>③</span><span>ADOQuery2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear=all>
<p align=center><span>图</span><span>1</span></p>
<p><span>说明：</span></p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>UpdateQuery</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<br clear=all>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ADOQuery</span><span>控件用来修改</span><span>table2</span><span>记录，</span><span>①代表为线程</span><span>1</span><span>所有，</span></p>
<p><span>白色代表使用频率很低（颜色越深说明使用频率越高）</span></p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>③</span><span>ADOQuery2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<br clear=all>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>查询</span><span>table2</span><span>，</span><span>③代表为线程</span><span>3</span><span>所有，使用频率较高</span></p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>②</span><span>ADOQuery3</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<br clear=all>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>查询</span><span>table2</span><span>，</span><span>③代表为线程</span><span>2</span><span>所有，使用频率很高</span></p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ADO</span><span>存储过程控件向表</span><span>table2</span><span>插入数据，属于线程</span><span>1</span><span>频繁使用</span></p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<br clear=all>
<p><span>修改</span><span>ADOProcedure1</span><span>插入的记录，属于线程</span><span>1</span><span>频繁使用</span></p>
<p>&nbsp;</p>
<p><span>其中线程</span><span>3</span><span>和线程</span><span>2</span><span>使用</span><span>ADO</span><span>控件时没有加锁，而线程</span><span>1</span><span>的所有访问都加锁了（这样做毫无作用）</span></p>
<p>&nbsp;</p>
<p><span>程序的结构出来了，问题在哪里呢？接下来我写了一个小小的测试程序，该程序的结构与上面相同，它拥有三个线程和一个</span><span>DataMoule</span><span>单元，线程一通过</span><span>ADOQuery1</span><span>查询数据库</span><span>DBTest</span><span>的</span><span>table1</span><span>的记录，线程二通过</span><span>ADOQuery2</span><span>向</span><span>table1</span><span>中插入记录，线程三通过</span><span>ADOQuery3</span><span>修改</span><span>table1</span><span>中最后一条记录的某个字段。</span><span>ADOQuery1</span><span>、</span><span>ADOQuery2</span><span>、</span><span>ADOQuery3</span><span>都通过</span><span>ADOConnection1</span><span>与数据库</span><span>DBTest1</span><span>建立连接，一开始，所有的线程都不做同步，运行，</span><span>OK!</span><span>错误出来了其中两个错误正是我所想要的，这就是我的程序报的错啊。</span></p>
<p>&nbsp;</p>
<p>&#160;</p>
<p align=center><span>图二</span></p>
<p>&nbsp;</p>
<p><span>接下来我将三个</span><span>ADOQuery</span><span>都加上锁，再运行没问题，我又将</span><span>ADOQuery</span><span>分别通过三个不同的</span><span>ADOConnection</span><span>来连接数据库且不加锁也没有问题。看来我是找到那个可恶的炸弹了，怎么拆了它？</span></p>
<p>&nbsp;</p>
<p><strong><span>排除炸弹</span></strong><strong></strong></p>
<p><strong>&nbsp;</strong></p>
<p><span>炸弹找到了，我该怎么拆它？是简单的做线程同步还是每个线程都是用一个</span><span>ADOConnection</span><span>？这下我再也不敢蛮干了，我得好好看看这方面的资料，在</span><span>Delphi</span><span>帮助文档，《</span><span>Using the main VCL thread</span><span>》我找到了下面一段话：</span></p>
<p><span>&#8230;&#8230;</span></p>
<p><span>Data access components are thread-safe as long as each thread has its own database session component. The one exception to this is when you are using Access drivers. Access drivers are built using the Microsoft ADO library, which is not thread-safe.</span></p>
<p><span>&#8230;..</span></p>
<p><span>同样在</span><span>Delphi</span><span>的帮助文档《</span><span>Managing multiple sessions</span><span>》中给我明确的建议：</span></p>
<p><span>&#8230;&#8230;</span></p>
<p><span>If you create a single application that uses multiple threads to perform database operations, you must create one additional session for each thread.</span></p>
<p><span>&#8230;..</span></p>
<p><strong><span>喔找到了：</span></strong><strong><span>ADO</span></strong><strong><span>控件是线程不安全的，所以如果你的程序是使用多线程访问数据库的话你应该确保每个线程都有自己的会话。</span></strong><strong></strong></p>
<p><span>事实上在另外一本书《</span><span>Delphi 4</span><span>编程技术内幕》一书在谈到<em>线程安全数据库访问</em>也有相同的建议，不过台湾李维先生在他的</span><span>《</span><span>Delphi 5.X ADO/MTS/COM+</span><span>高级程序设计篇》却说，<strong>如果你的程序不是连接多个数据库的话，最好同一数据库使用一个连接，不要使用多个连接</strong>。怎么办？谁对谁错？为什么要使用一个连接呢？这主要是从服务器来考虑，因为数据库服务器需要为每个连接分配一定的资源并对其进行维护，连接数越多服务器方所耗的资源就越多，服务器的性能也就越差，所以要尽可能的减少客户端的连接数。好在我的程序是作为服务器程序增加一些连接对数据库服务器的影响不会很大，现在我可以重新设置我的数据库访问结构模型了</span></p>
<p>&nbsp;</p>
<p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><strong><span>数据库：</span></strong></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>ADOConnection1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>ADOConnection2 </span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>Table1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>Table2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOQuery1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>②</span><span>ADOQuery3</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure1</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>ADOProcedure2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>①</span><span>UpdateQuery</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>③</span><span>ADOQuery2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p><span>ADOConnection2</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br clear=all>
<p><span><span>&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align=center><span>图三</span></p>
<p align=center>&nbsp;</p>
<p><span>我增加了一个</span><span>ADOConnection</span><span>以保证每个线程都有一个自己连接</span><span>(</span><span>会话</span><span>)</span><span>，从而避免出现资源冲突，我的问题是不是解决了呢？是的，这个问题已经解决了，将我的程序与数据库放在同一台机器上运行没有问题，但是当程序与数据库服务器不在同一台机器上运行时会出现一个新的问题。</span></p>
<p>&nbsp;</p>
<p><strong><span>[DBNMPNTW]ConnectionWrite(writeFile())</span></strong><strong><span>错误</span></strong><strong></strong></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这个错误不是多线程引起的，而是</span><span>Micrsoft</span><span>自己的一个问题，产生该问题的原因可能是因为网络异常而引起的，可以通过</span><span>SQLServer</span><span>客户端的默认的网络协议</span><span>named pipes network propocol </span><span>改为</span><span> TCP/IP </span><span>Sockets</span><span>，</span><span>具体做法请参考</span><span>Micrsoft</span><span>技术支持网站的《</span><strong><span>Microsoft Knowledge Base Article&nbsp;-&nbsp;Q178040</span></strong><span>》</span></p>
<p>&nbsp;</p>
<p><strong><span>总结</span></strong><strong></strong></p>
<p><strong><span><span>&nbsp;&nbsp; </span></span></strong><span>由于</span><span>ADO</span><span>控件的线程不安全性（事实上这种不安全性是来自</span><span>Micrsoft ADO Library</span><span>，所以在其它开发工具中也存在同样的问题）因此在使用多线程</span><span>ADO</span><span>编程时应该注意一下问题：</span></p>
<p>&nbsp;</p>
<p><strong><span>第一：要保证每个线程都拥有自己的会话。</span></strong><strong></strong></p>
<p><strong><span>第二：作为客户端程序应该尽可能的减少与数据库库服务器的连接数。</span></strong><strong></strong></p>
<p><strong><span>第三：在退出线程之前确保释放所有的资源。</span></strong><strong></strong></p>
<p><strong>&nbsp;</strong></p>
<p><span>参考文献：</span></p>
<p><span>1、</span><span>李维</span><span>《</span><span>Delphi 5.X ADO/MTS/COM+</span><span>高级程序设计篇》</span><span> </span><span>机械工业出版社</span><span> 2000</span><span>。</span></p>
<p><span>2、</span><span>Charlie Calvert</span><span>《</span><span>Delphi 4</span><span>编程技术内幕》潇湘工作室</span><span> </span><span>译</span><span> </span><span>机械工业出版社</span><span> 1999</span></p>
<img src ="http://www.cppblog.com/ngaut/aggbug/43253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-02-26 13:49 <a href="http://www.cppblog.com/ngaut/archive/2008/02/26/43253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost asio 0.39发布了</title><link>http://www.cppblog.com/ngaut/archive/2007/12/16/38634.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 16 Dec 2007 14:04:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/12/16/38634.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/38634.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/12/16/38634.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/38634.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/38634.html</trackback:ping><description><![CDATA[boost asio 0.39发布了，看来即将进入boost 1.35了
<img src ="http://www.cppblog.com/ngaut/aggbug/38634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-12-16 22:04 <a href="http://www.cppblog.com/ngaut/archive/2007/12/16/38634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]今年的十个佳句出炉啦</title><link>http://www.cppblog.com/ngaut/archive/2007/10/23/34936.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 23 Oct 2007 11:14:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/10/23/34936.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/34936.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/10/23/34936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/34936.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/34936.html</trackback:ping><description><![CDATA[<br>1、钱不是问题，问题是没钱。<br>2、钻石恒久远，一颗就破产。<br>3、水能载舟，亦能煮粥。<br>4、一山不能容二虎，除非一公和一母。<br>5、火可以试金，金可以试女人，女人可以试男人。<br>6、烧香的不一定是和尚，还可能是熊猫。<br>7、喝醉了我谁也不服，我就扶墙。<br>8、我就像一只趴在玻璃上的苍蝇，前途光明，出路没有。<br>9、避孕的效果：不成功，便成人。<br>10、问世间情为何物？一物降一物&nbsp; 
<img src ="http://www.cppblog.com/ngaut/aggbug/34936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-10-23 19:14 <a href="http://www.cppblog.com/ngaut/archive/2007/10/23/34936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当asio::async_read与socket的async_read_some的区别</title><link>http://www.cppblog.com/ngaut/archive/2007/06/29/27221.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 29 Jun 2007 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/06/29/27221.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/27221.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/06/29/27221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/27221.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/27221.html</trackback:ping><description><![CDATA[今天用asio写一个简单的server时，<br>当连接成功时做如下工作<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asio::async_read(socket_,&nbsp;asio::buffer(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_packet,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(m_packet)),<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::bind(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tcp_connection::HandleReadCardKey,&nbsp;shared_from_this(),<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asio::placeholders::error));</span></div>
但HandleReadCardKey始终没有被回调，除非remote point断开连接<br><br>最后用下面的代码搞定：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">socket_.async_read_some(asio::buffer(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_packet,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(m_packet)),<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::bind(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tcp_connection::HandleReadCardKey,&nbsp;shared_from_this(),<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asio::placeholders::error));</span></div>
记下，免得以后忘记了<br><br>总结一下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asio::async_read通常用户读取指定长度的数据，读完或出错才返回。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而socket的async_read_some读取到数据或出错就返回，不一定读完了整个包。&nbsp;&nbsp;&nbsp;<br><br>
<img src ="http://www.cppblog.com/ngaut/aggbug/27221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-06-29 15:37 <a href="http://www.cppblog.com/ngaut/archive/2007/06/29/27221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]嵌入式Linux研究－对几种典型的系统的内核配置方案</title><link>http://www.cppblog.com/ngaut/archive/2007/06/20/26713.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Wed, 20 Jun 2007 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/06/20/26713.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/26713.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/06/20/26713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/26713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/26713.html</trackback:ping><description><![CDATA[<h5>
<p><span><font face="Times New Roman">1.</font></span><span>对于一般</span><span><font face="Times New Roman">PC</font></span><span>的普通内核配置</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>对于一般的用户而言，对于</span><span><font face="Times New Roman">Linux</font></span><span>内核的效率和大小的要求都不高。因此一般不对内核重新配置，因为</span><span><font face="Times New Roman">Linux</font></span><span>安装程序会在安装时对大部分设置按照安装的需求和实际的硬件做缺省设置。这样的内核会比实际需要的繁冗，有很多模块加载后根本就没有用到，但是因为现在的</span><span><font face="Times New Roman">PC</font></span><span>的内存一般都是上百</span><span><font face="Times New Roman">MB</font></span><span>，而一个</span><span><font face="Times New Roman">Linux</font></span><span>内核再大也就是几百</span><span><font face="Times New Roman">K</font></span><span>，因此对于一般用户而言，无需再重新编译内核了。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>在一台</span><span><font face="Times New Roman">P3-566</font></span><span>的</span><span><font face="Times New Roman">Dell</font></span><span>机器安装</span><font face="Times New Roman"><span>Red-Hat</span><span>7.2,</span></font><span>内核版本为</span><font face="Times New Roman"><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span>2.4.6</span></st1:chsdate><br><br><span></span></font><span>以下是一些该机的配置：</span><span><br><br></span><span><font face="Times New Roman">Loadablemodulesupport:Y<br><br>Networkingsupport:Y<br><br>PCIsupport:Y<br><br>SystemVIPC</font></span><span>：</span><span><font face="Times New Roman">Y</font></span><span>因为可以做一些基于</span><font face="Times New Roman"><span>System</span><span>V</span></font><span>的程序</span><span><br><br></span><span><font face="Times New Roman">Kernelsupportfora.outbinaries:Y<br><br>KernelsupportforELFbinaries:Y<br><br>Blockdevices</font></span><span>：对此根据该机的硬件做了相应的配置，去除一些本机没有的硬件设备的支持模块。如</span><font face="Times New Roman"><span>:Loopback</span><span>d</span><span>evice</span></font><span><font face="Times New Roman">support<br><br>Networkingoptions:<br><br>Packetsocket:Y<br><br>TCP/IPnetworking:Y<br><br>Networkfirewalls:Y<br><br>TheIPXprotocol:Y<br><br>Networkdevicesupport:<br><br>Networkdevicesupport:Y<br><br>Ethernet(10or100Mb/s):Y<br><br>Characterdevice<br><br>Virtualterminal:Y</font></span><span><br><br></span><span><font face="Times New Roman">Supportforconsoleonvirtualterminal:Y<br><br>Filesystems<br><br>Secondextendedfssupport:Y<br><br>VFATfssupport:m</font></span><span>笔者有时会用到该机上的</span><span><font face="Times New Roman">VFAT</font></span><span>分区</span><span><font face="Times New Roman"><br><br>/procfilesystemsupportY<br><br>ISO9660cdromfilesystemsupport:m<br><br>NetworkFileSystems<br><br>NFSfilesystemsuppor</font></span><span><font face="Times New Roman">t:Y<br><br></font></span><span><font face="Times New Roman">SMBfilesystemsupport:m<br><br>Consoledrivers<br><br>VGAtextconsole:Y<br><br>Videomodeselectionsupport:Y<br><br>VESAVGAgraphicsconsole:Y<br><br>Kernelhacking<br><br>MagicSysRqkey:Y<br><br></font></span><span>还有一些缺省的设置笔者没有改。这样编译出来的版本有</span><span><font face="Times New Roman">700K.</font></span><span>经过笔者调试过没有出现什么问题。</span><span><br><br><font face="Times New Roman">2.PDA</font></span><span>的内核设置</span><span><br><br></span><font face="Times New Roman"><span>PDA(Per</span><span>sonal</span><span>DigitalAssist)</span></font><span>如：手机，快译通，文曲星等等。这类系统要求系统稳定，内核小而且效率高，常常需要一些特殊的硬件支持。对进程调度、文件系统要求单一，有些就是单进程系统。对网络的支持由根据需要确定。</span><span><font face="Times New Roman">RedHat</font></span><span>的内核无法直接用来设计一些特殊要求的</span><span><font face="Times New Roman">PDA,</font></span><span>一般还要加入对硬件的特定模块。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>可作如下设置：</span><span><br><br></span><span><font face="Times New Roman">Networkingsupport:Y:</font></span><span>一般</span><span><font face="Times New Roman">PDA</font></span><span>都支持上网更新功能</span><span><br><br></span><font face="Times New Roman"><span>KernelsupportforELFbinaries:Y<br><br>Compileas</span><span>ELF</span><span>&#8211;ifyourGCCisELF-GCC:Y</span></font><span>这两个设置使系统的执行文件都为</span><span><font face="Times New Roman">ELF<br><br></font></span><span><font face="Times New Roman">AdvancedPowerManagerBiossupport:Y<br><br>Blockdevices:</font></span><span>应该加入对硬件特殊的支持模块</span><span><br><br></span><span><font face="Times New Roman">Networkingoptions<br><br>Packetsocket<br><br>FileSystem<br><br>Secondextendedfssupport:Y<br><br></font></span><span>另外的一些功能为</span><span><font face="Times New Roman">N,</font></span><span>当然一些功能必须选择用来支持上述的模块。编译后为</span><span><font face="Times New Roman">100KB---400KB<br><br>3.</font></span><span>小型嵌入式系统的内核配置</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>一个小型的嵌入式</span><span><font face="Times New Roman">Linux</font></span><span>系统只需要下面三个基本元素：</span><span><br><br></span><span><font face="Times New Roman"><br></font></span><span>引导工具</span><span><font face="Times New Roman"><br>Linux</font></span><span>微内核，由内存管理、进程管理和事务处理构成</span><span><font face="Times New Roman"><br></font></span><span>初始化进程</span><font face="Times New Roman"><span> <br></span><span></span></font><span>如果要让它能干点什么且继续保持小型化，还得加上：</span><span><br><br></span><span><font face="Times New Roman"><br></font></span><span>硬件驱动程序</span><span><font face="Times New Roman"><br></font></span><span>提供所需功能的一个或更多应用程序。</span><font face="Times New Roman"><span> <br></span><span></span></font><span>再增加功能，或许需要这些：</span><span><font face="Times New Roman"></font></span><span>一个文件系统（也许在</span><span><font face="Times New Roman">ROM</font></span><span>或</span><span><font face="Times New Roman">RAM</font></span><span>）中</span><span><font face="Times New Roman">TCP/IP</font></span><span>网络堆栈对该种系统</span><span><font face="Times New Roman">,</font></span><span>做了不同的设置</span><font face="Times New Roman"><span>:<br><br></span><span></span></font><span>不要</span><span><font face="Times New Roman">floppy</font></span><span>；不要</span><span><font face="Times New Roman">SMP</font></span><span>、</span><span><font face="Times New Roman">MTRR</font></span><span>；不要</span><font face="Times New Roman"><span>Network</span><span>ing</span></font><span>、</span><span><font face="Times New Roman">SCSI</font></span><span>；把所有的</span><span><font face="Times New Roman">blockdevice</font></span><span>移除，只留下</span><span><font face="Times New Roman">IDEdevice</font></span><span>；把所有的</span><span><font face="Times New Roman">characterdevice</font></span><span>移除；把所有的</span><span><font face="Times New Roman">filesystem</font></span><span>移除，只留下</span><span><font face="Times New Roman">minix</font></span><span>；不要</span><span><font face="Times New Roman">sound</font></span><span>支援。这样己经把所有的选项都移除了。这样做之后，得到了一个</span><span><font face="Times New Roman">188K</font></span><span>的核心</span><font face="Times New Roman"><span>.<br><br></span><span></span></font><span>把下列两个档案中的</span><span><font face="Times New Roman">-O3,-O2</font></span><span>用</span><span><font face="Times New Roman">-Os</font></span><span>取代。</span><span><br><br></span><span><font face="Times New Roman">./Makefile<br>./arch/i386/kernel/<br>Makefile<br><br></font></span><span>这样一来，整个核心变小了</span><span><font face="Times New Roman">9K</font></span><span>，成为</span><span><font face="Times New Roman">179K</font></span><span>。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>不过这个核心恐怕很难发挥</span><span><font face="Times New Roman">Linux</font></span><span>的功能，因此把网络加回去。把</span><font face="Times New Roman"><span>General</span><span>setup</span></font><span>中的</span><span><font face="Times New Roman">networksupport</font></span><span>加回去，重新编译，核心变成</span><span><font face="Times New Roman">189K</font></span><span>。</span><span><font face="Times New Roman">10K</font></span><span>就加上个</span><span><font face="Times New Roman">TCP/IPstack</font></span><span>。</span><span><font face="Times New Roman"></font></span><span>有</span><span><font face="Times New Roman">stack</font></span><span>没有</span><span><font face="Times New Roman">driver</font></span><span>也是枉然，把</span><span><font face="Times New Roman">embeddedboard</font></span><span>常用的</span><span><font face="Times New Roman">RTL8139</font></span><span>的</span><span><font face="Times New Roman">driver</font></span><span>加回去，</span><font face="Times New Roman"><span>195K.<br><br></span><span></span></font><span>如果你需要</span><span><font face="Times New Roman">DOS</font></span><span>档案系统，那大小成为</span><span><font face="Times New Roman">213K</font></span><span>。如果</span><span><font face="Times New Roman">minix</font></span><span>用</span><span><font face="Times New Roman">ext2</font></span><span>换代，则大小成长至</span><span><font face="Times New Roman">222K</font></span><span>。</span><span><br><br></span><span><font face="Times New Roman">Linux</font></span><span>所需的内存大约在</span><span><font face="Times New Roman">600K</font></span><span>～</span><span><font face="Times New Roman">800K</font></span><span>之间。</span><span><font face="Times New Roman">1MB</font></span><span>内存就可能可以开机了，但不太有用，因为连载入</span><span><font face="Times New Roman">C</font></span><span>程序库都有困难。</span><span><font face="Times New Roman">2MB</font></span><span>内存应该就可以做点事了，但要到</span><span><font face="Times New Roman">4MB</font></span><span>以上才可以执行一个比较完整的系统。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>因为</span><span><font face="Times New Roman">Linux</font></span><span>的</span><font face="Times New Roman"><span>filesystem</span><span></span></font><span>相当大，大约在</span><span><font face="Times New Roman">230K</font></span><span>左右，占了</span><span><font face="Times New Roman">1/3</font></span><span>的体积。内存管理占了</span><span><font face="Times New Roman">80K</font></span><span>，和核心其它部分的总和差不多。</span><font face="Times New Roman"><span>TCP/IP</span><span>stack</span></font><span>占了</span><span><font face="Times New Roman">65K</font></span><span>，驱动程序占了</span><span><font face="Times New Roman">120K</font></span><span>。</span><font face="Times New Roman"><span>SysV</span><span>IPC</span></font><span>占了</span><span><font face="Times New Roman">21K</font></span><span>，必要的话可以拿掉，核心档应该可以再小个</span><span><font face="Times New Roman">10K</font></span><span>左右。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>如果要裁剪核心大小，应该动那里呢</span><font face="Times New Roman"><span>?</span><span></span></font><span>答案很明显，当然是文件系统。</span><font face="Times New Roman"><span>Linux</span><span></span></font><span>的</span><span><font face="Times New Roman">VFS</font></span><span>简化了档案系统的设计，</span><font face="Times New Roman"><span>buffer</span><span>cache,directorycache</span></font><span>增加了系统的效率。但这些</span><span><font face="Times New Roman">embedded</font></span><span>系统根本就用处不大。如果可以把它们拿掉，核心可以马上缩小</span><span><font face="Times New Roman">20K</font></span><span>左右。如果跳过整个</span><span><font face="Times New Roman">VFS</font></span><span>，直接将文件系统写成一个</span><span><font face="Times New Roman">driver</font></span><span>的型式，应该可以将</span><span><font face="Times New Roman">230K</font></span><span>缩减至</span><span><font face="Times New Roman">50K</font></span><span>左右。整个核心缩到</span><span><font face="Times New Roman">100K</font></span><span>左右。</span><span><br><br><font face="Times New Roman">4.</font></span><span>工控机的内核配置</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>对于工控机内核</span><span><font face="Times New Roman">,</font></span><span>对于内核的大小要求并不严格</span><span><font face="Times New Roman">,</font></span><span>关键的是正确性</span><span><font face="Times New Roman">,</font></span><span>健壮性和实时性</span><span><font face="Times New Roman">(</font></span><span>某些机子要求实时性较高</span><span><font face="Times New Roman">).</font></span><span>对文件系统要求单一</span><span><font face="Times New Roman">,</font></span><span>但保证正确性</span><span><font face="Times New Roman">.</font></span><span>网络按需设置。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>可作如下配置</span><span><font face="Times New Roman">:<br><br></font></span><span><font face="Times New Roman">Symmetricmulti-processingsupport:Y<br><br>Loadablemodulesupport:N</font></span><span>工控机一般将可能用到的模块都全部装入内存</span><span><font face="Times New Roman">.<br><br></font></span><span><font face="Times New Roman">Networkingsupport:Y<br><br>SystemVIPC:Y<br><br>KernelsupplyforELFbinaries:Y<br><br>Blockdevices:</font></span><span>根据具体硬件配置</span><span><br><br></span><span><font face="Times New Roman">Networkingoptions<br><br>packetsock</font></span><font face="Times New Roman"><span>et:Y<br><br></span><span></span></font><span>根据具体需要</span><span><font face="Times New Roman">,</font></span><span>一般工控机是通过</span><span><font face="Times New Roman">LAN</font></span><span>连接</span><span><font face="Times New Roman">,</font></span><span>与外界隔离故要</span><span><font face="Times New Roman">IPX</font></span><span>协议</span><span><font face="Times New Roman">,</font></span><span>另外</span><span><font face="Times New Roman">Tcp/ip</font></span><span>一般也需要</span><span><font face="Times New Roman">.<br><br></font></span><span><font face="Times New Roman">QoSand/orfairqueueing:Y<br><br>QoS(QualityOfService)andfairqueueling</font></span><span>是一种排定某种封包先送的网络线程表</span><span><font face="Times New Roman">,</font></span><span>可同时针对多个网络封包处理并依优先处理顺序来排序</span><span><font face="Times New Roman">,</font></span><span>称之为</span><font face="Times New Roman"><span>packet</span><span>schedulers.</span></font><span>此功能特别是针对实时系统时格外重要</span><span><font face="Times New Roman">,</font></span><span>当多个封包同时送到网络设备时</span><span><font face="Times New Roman">,Kernel</font></span><span>可以适当的决定出哪一个封包必须优先处理</span><span><font face="Times New Roman">.</font></span><span>因此</span><span><font face="Times New Roman">Kernel</font></span><span>提供数种</span><span><font face="Times New Roman">packet</font></span><span><font face="Times New Roman">schedulingalgorithm.<br><br>Filesystems<br><br>SecondExtendedfssupport:Y<br><br></font></span><span>其余配置和小型嵌入式系统差别不大</span><span><font face="Times New Roman">.</font></span><span>同一台机器上编译出来的内核大小为</span><span><font face="Times New Roman">800</font></span><span>多</span><span><font face="Times New Roman">KB</font></span><span>。</span><span><br><br><font face="Times New Roman">5.</font></span><span>服务器的内核配置</span><span><font face="Times New Roman">:<br><br></font></span><span><font face="Times New Roman"> <br></font></span><span>服务器的内核对网络设置和进程调度都非常关键</span><span><font face="Times New Roman">.</font></span><span>做如下配置</span><span><font face="Times New Roman">:<br><br></font></span><span><font face="Times New Roman">Symmetricmulti-processingsupport:Y<br><br>Loadablemodulesupport:Y</font></span><span><br><br></span><span><font face="Times New Roman">Networkingsupport:Y<br><br>Networkingoption<br><br>Packetsocket:Y</font></span><span>。</span><span><br><br></span><span><font face="Times New Roman">TCP/IPnetworkeing:Y<br><br>Networkfirewalls:</font></span><span>是否采用网络防火墙。如果计算机想当</span><font face="Times New Roman"><span>firewalls</span><span>server</span></font><span>或者是处于</span><font face="Times New Roman"><span>TCP/IP</span><span></span></font><span>通信协议的网络的网路结构下，这一项要选</span><font face="Times New Roman"><span>[Y]<br><br></span><span>Networkaliasing[Y/m/n/?]:</span></font><span>一台网络上的计算机可以拥有多组</span><span><font face="Times New Roman">IP</font></span><span>地址。如果计算机想拥有多个</span><span><font face="Times New Roman">IP</font></span><span>地址，就选择</span><font face="Times New Roman"><span>[Y].<br><br></span><span>IP:forwarding/gatewaying[Y/m/n/?]:</span></font><span>假如用户想当路由器的话，选择</span><span><font face="Times New Roman">[Y],</font></span><span>但先决条件是有</span><span><font face="Times New Roman">&#8220;</font></span><span>两张</span><span><font face="Times New Roman">&#8221;</font></span><span>网卡，一张对外部网络、一张对内部网络，并且使用的</span><span><font face="Times New Roman">ISP</font></span><span>那一端也必须设定</span><span><font face="Times New Roman">routing</font></span><span>，允许用户这台路由器才行。</span><span><br><br></span><span><font face="Times New Roman">IP:multicasting:</font></span><span>可以一次就完成传送一个</span><span><font face="Times New Roman">packet</font></span><span>到好几台计算机的操作。</span><span><br><br></span><span><font face="Times New Roman">IP:syn_cookies:</font></span><span>一种保护措施，将各种</span><span><font face="Times New Roman">TCP/IP</font></span><span>的通信协议加密，防止</span><span><font face="Times New Roman">Attacker</font></span><span>攻击用户的计算机，并且可以纪录企图攻击用户的计算机的</span><span><font face="Times New Roman">IP</font></span><span>地址。</span><span><br><br></span><span><font face="Times New Roman">IP:firewalling:</font></span><span>该台计算机是否是防火墙服务器。</span><span><br><br></span><span><font face="Times New Roman">IP:firewallpacketlogging:</font></span><span>是否由</span><span><font face="Times New Roman">klogd</font></span><span>记录防火墙服务器到底接收了哪些</span><span><font face="Times New Roman">Packet</font></span><span>。</span><span><br><br></span><span><font face="Times New Roman">IP:masquerading:</font></span><span>可以将内部网络的计算机送出去的封包，通过防火墙服务器直接传递给远端的计算机，而远端的计算机看到的就是接收到的防火墙服务器送过来的封包，而不是从内部的计算机送过来的。这样如果内部只有一台计算机可以上网，其余的机器可以通过这台机子的防火墙服务器向外连线。选择这个选项必需先确定先前的</span><font face="Times New Roman"><span>Network</span><span>FirewallsIP:forwarding/gatewayingIP</span></font><span>：</span><font face="Times New Roman"><span>firewalling</span><span></span></font><span>这三个选项选</span><span><font face="Times New Roman">[Y]</font></span><span>。以及下一个选项</span><span><font face="Times New Roman">IP</font></span><span>：</span><font face="Times New Roman"><span>always</span><span>deframent</span></font><span>也要选</span><font face="Times New Roman"><span>[Y].<br><br></span><span>IP:ICMPmasquerading:</span></font><span>一般</span><font face="Times New Roman"><span>masquerading</span><span></span></font><span>只提供处理</span><font face="Times New Roman"><span>TCP,UDP</span><span>packets,</span></font><span>若要让</span><font face="Times New Roman"><span>masqurerading</span><span></span></font><span>也能处理</span><font face="Times New Roman"><span>ICMP</span><span>packets,</span></font><span>这个选项要选</span><font face="Times New Roman"><span>[Y].<br><br></span><span>IP:alwaysdefragment:</span></font><span>可将接收到的</span><font face="Times New Roman"><span>packet</span><span>fragm</span><span>ents</span></font><span>重新组合回原来那个封包。</span><span><br><br></span><span><font face="Times New Roman">IP:accounting:</font></span><span>统计</span><font face="Times New Roman"><span>IP</span><span>packet</span></font><span>的流量，也就是网络的流通情况。</span><span><br><br></span><span><font face="Times New Roman">IP:optimizeasrouternothost:</font></span><span>可以关闭</span><span><font face="Times New Roman">copy&amp;checksum</font></span><span>技术，防止流量大的服务器的</span><font face="Times New Roman"><span>IP</span><span>packets</span></font><span>丢失。</span><span><br><br></span><span><font face="Times New Roman">IP:tunneling:</font></span><span>可在不同网域中使用</span><span><font face="Times New Roman">linux,</font></span><span>且都不用改</span><span><font face="Times New Roman">IP</font></span><span>就可以直接上网了。适合于笔记本型计算机用户。</span><span><br><br></span><span><font face="Times New Roman">IP:ReverseARP:</font></span><span>主要是提供</span><span><font face="Times New Roman">bootp</font></span><span>的功能，让计算机从可以从网卡的</span><font face="Times New Roman"><span>Boot</span><span>Ram</span></font><span>启动。</span><span><br><br></span><span><font face="Times New Roman">IP:DisablePathMTUDiscovery:</font></span><span>是否取消</span><font face="Times New Roman"><span>Path</span><span>MTUDiscovery.MTU</span></font><span>有助于处理拥挤的网络。</span><span><br><br></span><span><font face="Times New Roman">TheIPXprotocol:IPX</font></span><span>为</span><font face="Times New Roman"><span>Netware</span><span></span></font><span>网络使用的通讯协议。</span><span><br><br></span><span><font face="Times New Roman"></font></span><span>其余根据需要设置。编译出的内核为</span><span><font face="Times New Roman">800K</font></span><span>。</span></p>
</h5>
<img src ="http://www.cppblog.com/ngaut/aggbug/26713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-06-20 20:32 <a href="http://www.cppblog.com/ngaut/archive/2007/06/20/26713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《自己动手写嵌入式操作系统》源代码</title><link>http://www.cppblog.com/ngaut/archive/2007/06/19/26628.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 19 Jun 2007 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/06/19/26628.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/26628.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/06/19/26628.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/26628.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/26628.html</trackback:ping><description><![CDATA[经常有朋友发邮件问我要源代码，一个个的发太麻烦，干脆放上来吧
http://www.cppblog.com/Files/ngaut/HELLOCN_SRCCODE.zip<img src ="http://www.cppblog.com/ngaut/aggbug/26628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-06-19 15:32 <a href="http://www.cppblog.com/ngaut/archive/2007/06/19/26628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决error C2011: 'fd_set' : 'struct' type redefinition问题</title><link>http://www.cppblog.com/ngaut/archive/2007/04/23/22658.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 23 Apr 2007 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/04/23/22658.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/22658.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/04/23/22658.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/22658.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/22658.html</trackback:ping><description><![CDATA[<p>在所有的#include &lt;windows.h&gt;前使用#define WIN32_LEAN_AND_MEAN，如：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;WIN32_LEAN_AND_MEAN</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span></div>
<img src ="http://www.cppblog.com/ngaut/aggbug/22658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-04-23 17:15 <a href="http://www.cppblog.com/ngaut/archive/2007/04/23/22658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>与妻书---林觉民</title><link>http://www.cppblog.com/ngaut/archive/2007/02/24/18944.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sat, 24 Feb 2007 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/02/24/18944.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/18944.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/02/24/18944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/18944.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/18944.html</trackback:ping><description><![CDATA[                                                                              与妻书  <br />  <br />                                                                                                林觉民  <br />  <br /> 意映卿卿如晤：吾今以此书与汝永别矣！吾作此书时，尚为世中一人；汝看此  <br />书时，吾已成为阴间一鬼。吾作此书，泪珠和笔墨齐下，不能书竟，而欲搁笔。又  <br />恐汝不察吾衷，谓吾忍舍汝而死，谓吾不知汝之不欲吾死也，故遂忍悲为汝言之。  <br />  <br /> 吾至爱汝！即此爱汝一念，使吾勇于就死也！吾自遇汝以来，常愿天下有情人  <br />都成眷属，然遍地腥云，满街狼犬，称心快意，几家能够？司马青衫，吾不能学太  <br />上之忘情也。语云，仁者“老吾老以及人之老，幼吾幼以及人之幼”。吾充吾爱汝  <br />之心，助天下人爱其所爱，所以敢先汝而死，不顾汝也。汝体吾此心，于悲啼之余，  <br />亦以天下人为念，当亦乐牺牲吾身与汝身之福利，为天下人谋永福也。汝其勿悲。  <br /> 汝忆否四五年前某夕，吾尝语曰：“与使吾先死也，无宁汝先吾而死。”汝初  <br />闻言而怒，后经吾婉解，虽不谓吾言为是，而亦无辞相答。吾之意盖谓以汝之弱，  <br />必不能禁失吾之悲，吾先死留苦与汝，吾心不忍，故宁请汝先死，吾担悲也。嗟夫，  <br />谁知吾卒先汝而死乎！  <br />  <br /> 吾真不能忘汝也！回忆后街之屋，入门穿廊，过前后厅，又三四折有小厅，厅  <br />旁一室为吾与汝双栖之所。初婚三四个月，适冬之望日前后，窗外疏梅筛月影，依  <br />稀掩映，吾与汝并肩携手，低低切切，何事不语，何情不诉！及今思之，空余泪痕！  <br />又回忆六七年前，吾之逃家复归也，汝泣告我：“望今后有远行，必以告妾，妾愿  <br />随君行。”吾亦既许汝矣。前十余日回家，即欲乘便以此行之事语汝，及与汝相对，  <br />又不能启口；且以汝之有身也，更恐不胜悲，故惟日日呼酒买醉。嗟夫！当时余心  <br />之悲，盖不能以寸管形容之。  <br />  <br /> 吾诚愿与汝相守以死。第以今日事势观之，天灾可以死，盗贼可以死，瓜分之  <br />日可以死，奸官污吏虐民可以死，吾辈处今日之中国，国中无地无时不可以死！到  <br />那时使吾眼睁睁看汝死，或使汝眼睁睁看我死，吾能之乎！抑汝能之乎！即可不死，  <br />而离散不相见，徒使两地眼成穿而骨化石，试问古来几曾见破镜能重圆，则较死为  <br />苦也。将奈之何？今日吾与汝幸双健；天下人人不当死而死，与不愿离而离者，不  <br />可数计；钟情如我辈者，能忍之乎？此吾所以敢率性就死不顾汝也！吾今死无余憾，  <br />国事成不成，自有同志者在。依新已五岁，转眼成人，汝其善抚之，使之肖我。汝  <br />腹中之物，吾疑其女也，女必像汝，吾心甚慰；或又是男，则亦教其以父志为志，  <br />则我死后，尚有二意洞在也，甚幸甚幸！  <br />  <br /> 吾家后日当甚贫，贫无所苦，清静过日而已。  <br />  <br /> 吾今与汝无言矣！吾居九泉之下，遥闻汝哭声，当哭相和也。吾平日不信有鬼，  <br />今则又望其真有。今人又言心电感应有道，吾亦望其言是实，则吾之死，吾灵尚依  <br />依旁汝也，汝不必以无侣悲！  <br />  <br /> 吾生平未尝以吾所志语汝，是吾不是处。然语之，又恐汝日日为吾担忧。吾牺  <br />牲百死而不辞，而使汝担忧，的的非吾所忍。吾爱汝至，所以为汝谋者惟恐未尽。  <br />汝幸而偶我，又何不幸而生今日之中国！吾幸而得汝，又何不幸而生今日之中国，  <br />卒不忍独善其身！嗟夫！巾短情长，所未尽者尚有万千，汝可摹拟得之。吾今不能  <br />见汝矣！汝不能舍吾，其时时于梦中寻我乎！一恸！  <br />  <br /> 辛亥三月念六夜四鼓，意洞手书。  <br />  <br /> 家中诸母皆通文，有不解处，望请其指教。当尽吾意为幸  <br /><img src ="http://www.cppblog.com/ngaut/aggbug/18944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-02-24 15:01 <a href="http://www.cppblog.com/ngaut/archive/2007/02/24/18944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决unresolved external symbol "public: int __thiscall CWnd::KillTimer(unsigned int)" (?KillTimer@CWnd@@QAEHI@Z)问题</title><link>http://www.cppblog.com/ngaut/archive/2007/02/23/18933.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 23 Feb 2007 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/02/23/18933.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/18933.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/02/23/18933.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/18933.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/18933.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解决KillTimer link失败的问题&nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2007/02/23/18933.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/18933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-02-23 23:48 <a href="http://www.cppblog.com/ngaut/archive/2007/02/23/18933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>老老实实从头做起</title><link>http://www.cppblog.com/ngaut/archive/2006/12/24/16798.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 24 Dec 2006 10:40:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/12/24/16798.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/16798.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/12/24/16798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/16798.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/16798.html</trackback:ping><description><![CDATA[记于圣诞前夕2006.12.24晚<img src ="http://www.cppblog.com/ngaut/aggbug/16798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-12-24 18:40 <a href="http://www.cppblog.com/ngaut/archive/2006/12/24/16798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>偶尔的思绪和收获</title><link>http://www.cppblog.com/ngaut/archive/2006/12/18/16577.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 18 Dec 2006 05:22:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/12/18/16577.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/16577.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/12/18/16577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/16577.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/16577.html</trackback:ping><description><![CDATA[
		<p>成功法则：<br />付出终有收获，一点小的付出会带来更多的收获.</p>
		<p> </p>
		<p>我们的学生到底为什么不行，缺乏好的老师，还是努力不够。<br />应该缺乏的是信心和思考，而不是被动的接受。<br /><br /><br />陈安之：<br />当你成为行业第一的时候，金钱和荣誉挡都挡不住。<br /><br /><br /><br /><a href="http://112339223.qzone.qq.com/">思想有多远，我们就能走多远，其实是要个前提的：尽力不停的走</a></p>
<img src ="http://www.cppblog.com/ngaut/aggbug/16577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-12-18 13:22 <a href="http://www.cppblog.com/ngaut/archive/2006/12/18/16577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一点感悟：在一个项目尚未完成时不宜调走项目组成员</title><link>http://www.cppblog.com/ngaut/archive/2006/11/16/15204.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Thu, 16 Nov 2006 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/11/16/15204.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/15204.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/11/16/15204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/15204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/15204.html</trackback:ping><description><![CDATA[当其它成员接受被调走组员的工作的时候，往往有大量的疑问需要请教已经调走的组员，通常因为问得太多导致被调走的组员有较多意见，而接手的组员也因为疑问太多有较多已经，特别是当负责模块差别较大的时候。<img src ="http://www.cppblog.com/ngaut/aggbug/15204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-11-16 10:28 <a href="http://www.cppblog.com/ngaut/archive/2006/11/16/15204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国庆总结</title><link>http://www.cppblog.com/ngaut/archive/2006/10/09/13488.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 09 Oct 2006 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/10/09/13488.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/13488.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/10/09/13488.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/13488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/13488.html</trackback:ping><description><![CDATA[今天的生活是建立在先辈鲜血的基础上的   － 看电视剧《亮剑》有感<br /><br />人还是活得真实点好 － 看电视剧《沙场点兵》有感<br /><br />国庆期间去原来的高中看望几个老师，竟然一个都没有遇到，有的调到其它学校去了，<br />有的不在家，好生郁闷，无聊之下和几个同学去逛街，竟然意外的遇到了一个想拜访的老师。<br />看来人生有缘，不过由于事隔4年，老师已经不认识我们了^_^，看来缘这个东西可遇不可求。<br />但是如果长时间不保持联系，那么缘分可能就尽了，常看看亲人，朋友吧。我的朋友.<br /><img src ="http://www.cppblog.com/ngaut/aggbug/13488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-10-09 15:50 <a href="http://www.cppblog.com/ngaut/archive/2006/10/09/13488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]李开复：算法的力量</title><link>http://www.cppblog.com/ngaut/archive/2006/09/10/12226.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 10 Sep 2006 12:26:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/09/10/12226.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/12226.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/09/10/12226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/12226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/12226.html</trackback:ping><description><![CDATA[算法是计算机科学领域最重要的基石之一，但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解，认为学计算机就是学各种编程语言，或者认为，学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学，但是学习计算机算法和理论更重要，因为计算机算法和理论更重要，因为计算机语言和开发平台日新月异，但万变不离其宗的是那些算法和理论，例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上，有位同学生动地把这些基础课程比拟为“内功”，把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式，没有功力，是不可能成为高手的。 
<p></p><p><br /><b>算法与我</b></p><p>当我在1980年转入计算机科学系时，还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们说：“知道为什么只有你们系要加一个‘科学’，而没有‘物理科学系’或‘化学科学系’吗？因为人家是真的科学，不需要画蛇添足，而你们自己心虚，生怕不‘科学’，才这样欲盖弥彰。”其实，这点他们彻底弄错了。真正学懂计算机的人（不只是“编程匠”）都对数学有相当的造诣，既能用科学家的严谨思维来求证，也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。</p><p>记得我读博时写的Othello对弈软件获得了世界冠军。当时，得第二名的人认为我是靠侥幸才打赢他，不服气地问我的程序平均每秒能搜索多少步棋，当他发现我的软件在搜索效率上比他快60多倍时，才彻底服输。为什么在同样的机器上，我可以多做60倍的工作呢？这是因为我用了一个最新的算法，能够把一个指数函数转换成四个近似的表，只要用常数时间就可得到近似的答案。在这个例子中，是否用对算法才是能否赢得世界冠军的关键。</p><p>还记得1988年贝尔实验室副总裁亲自来访问我的学校，目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍，而且，在扩大至大词汇系统后，速度差异更有几百倍之多。他们虽然买了几台超级计算机，勉强让系统跑了起来，但这么贵的计算资源让他们的产品部门很反感，因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中，我惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是，他们还为此发表了不少文章，甚至为自己的算法起了一个很特别的名字，并将算法提名到一个科学会议里，希望能得到大奖。当时，贝尔实验室的研究员当然绝顶聪明，但他们全都是学数学、物理或电机出身，从未学过计算机科学或算法，才犯了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧！</p><p><br /><b>网络时代的算法</b></p><p>有人也许会说：“今天计算机这么快，算法还重要吗？”其实永远不会有太快的计算机，因为我们总会想出新的应用。虽然在摩尔定律的作用下，计算机的计算能力每年都在飞快增长，价格也在不断下降。可我们不要忘记，需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据（照片，视频，语音，文本等等）。日益先进的纪录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面，随着研究手段的进步，数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别，都需要极大的计算量。在网络时代，越来越多的挑战需要靠卓越的算法来解决。</p><p>再举另一个网络时代的例子。在互联网和手机搜索，如果要找附近的咖啡店，那么搜索引擎该怎么处理这个请求呢？最简单的办法就是把整个城市的咖啡馆都找出来，然后计算出它们的所在位置与你之间的距离，再进行排序，然后返回最近的结果。但该如何计算距离呢？图论里有不少算法可以解决这个问题。</p><p>这么做也许是最直观的，但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆，那么这么做应该没什么问题，反正计算量不大。但如果一个城市里有很多咖啡馆，又有很多用户都需要类似的搜索，那么服务器所承受的压力就大多了。在这种情况下，我们该怎样优化算法呢？</p><p>首先，我们可以把整个城市的咖啡馆做一次“预处理”。比如，把一个城市分成若干个“格子(grid)”，然后根据用户所在的位置把他放到某一个格子里，只对格子里的咖啡馆进行距离排序。</p><p>问题又来了，如果格子大小一样，那么绝大多数结果都可能出现在市中心的一个格子里，而郊区的格子里只有极少的结果。在这种情况下，我们应该把市中心多分出几个格子。更进一步，格子应该是一个“树结构”，最顶层是一个大格——整个城市，然后逐层下降，格子越来越小，这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多，用户可以逐级上升，放大搜索范围。</p><p>上述算法对咖啡馆的例子很实用，但是它具有通用性吗？答案是否定的。把咖啡馆抽象一下，它是一个“点”，如果要搜索一个“面”该怎么办呢？比如，用户想去一个水库玩，而一个水库有好几个入口，那么哪一个离用户最近呢？这个时候，上述“树结构”就要改成“r-tree”，因为树中间的每一个节点都是一个范围，一个有边界的范围（参考:<a class="contentlink" href="http://www.cs.umd.edu/~hjs/rtrees/index.html" target="_blank"><font color="#4455aa">http://www.cs.umd.edu/~hjs/rtrees/index.html</font></a>）。</p><p>通过这个小例子，我们看到，应用程序的要求千变万化，很多时候需要把一个复杂的问题分解成若干简单的小问题，然后再选用合适的算法和数据结构。</p><p><br /><b>并行算法：Google的核心优势</b></p><p>上面的例子在Google里就要算是小case了！每天Google的网站要处理十亿个以上的搜索，GMail要储存几千万用户的2G邮箱，Google Earth要让数十万用户同时在整个地球上遨游，并将合适的图片经过互联网提交给每个用户。如果没有好的算法，这些应用都无法成为现实。</p><p>在这些的应用中，哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如，每天都有十亿以上的用户访问Google的网站，使用Google的服务，也产生很多很多的日志(Log)。因为Log每份每秒都在飞速增加，我们必须有聪明的办法来进行处理。我曾经在面试中问过关于如何对Log进行一些分析处理的问题，有很多面试者的回答虽然在逻辑上正确，但是实际应用中是几乎不可行的。按照它们的算法，即便用上几万台机器，我们的处理速度都根不上数据产生的速度。</p><p>那么Google是如何解决这些问题的？</p><p>首先，在网络时代，就算有最好的算法，也要能在并行计算的环境下执行。在Google的数据中心，我们使用的是超大的并行计算机。但传统的并行算法运行时，效率会在增加机器数量后迅速降低，也就是说，十台机器如果有五倍的效果，增加到一千台时也许就只有几十倍的效果。这种事半功倍的代价是没有哪家公司可以负担得起的。而且，在许多并行算法中，只要一个结点犯错误，所有计算都会前功尽弃。</p><p>那么Google是如何开发出既有效率又能容错的并行计算的呢？</p><p>Google最资深的计算机科学家Jeff Dean认识到，Google所需的绝大部分数据处理都可以归结为一个简单的并行算法：Map and Reduce（<a class="contentlink" href="http://labs.google.com/papers/mapreduce.html" target="_blank"><font color="#4455aa">http://labs.google.com/papers/mapreduce.html</font></a>）。这个算法能够在很多种计算中达到相当高的效率，而且是可扩展的（也就是说，一千台机器就算不能达到一千倍的效果，至少也可以达到几百倍的效果）。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后，它的容错性能异常出色，就算一个server farm宕掉一半，整个fram依然能够运行。正是因为这个天才的认识，才有了Map and Reduce算法。借助该算法，Google几乎能无限地增加计算量，与日新月异的互联网应用一同成长。</p><p><br /><b>算法并不局限于计算机和网络</b></p><p>举一个计算机领域外的例子：在高能物理研究方面，很多实验每秒钟都能几个TB的数据量。但因为处理能力和存储能力的不足，科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道，新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的，在其他任何领域里，算法可以改变人类的生活。例如人类基因的研究，就可能因为算法而发明新的医疗方式。在国家安全领域，有效的算法可能避免下一个911的发生。在气象方面，算法可以更好地预测未来天灾的发生，以拯救生命。</p><p>所以，如果你把计算机的发展放到应用和数据飞速增长的大环境下，你一定会发现；算法的重要性不是在日益减小，而是在日益加强。</p><img src ="http://www.cppblog.com/ngaut/aggbug/12226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-09-10 20:26 <a href="http://www.cppblog.com/ngaut/archive/2006/09/10/12226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作一月小结</title><link>http://www.cppblog.com/ngaut/archive/2006/09/06/12102.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Wed, 06 Sep 2006 12:28:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/09/06/12102.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/12102.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/09/06/12102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/12102.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/12102.html</trackback:ping><description><![CDATA[
		<br />随便写几句吧：<br />不知不觉工作一个多月了，总体而言还可以，但是比自己预期的要差一些，一直以来高估自己了，汗<br /><br />请假回了一趟学校，和同学奢侈几顿，某日吃饭居然吃到一条菜青虫，还是某知名的连锁店，晕。<br /><br />在学校的同学看起来状态不错，衷心预祝他们都能考上研究生，完成自己的现阶段的目标。<br /><br />同时感谢学校的几个老师，感谢程世旭老师的爱护，陈更力老师的指导。<br />从程世旭老师那里学会了认真，从陈更力老师那里学会了做学问的态度(虽然偶现在没有做学问)。<br />还有其它的老师，就不列出来了<br />一直以来偶认为自己是比较自信的，但是偶尔发现自己还是有那么一点自卑，偶老大很早就看出来了，强人啊。<br /><br /><br /><br />最近看一段话，说无论做什么，do it for fun, 但是没有对比可能不一定for fun<br /><br /><br />有点象颁奖典礼，偶废话还真多啊。<img src ="http://www.cppblog.com/ngaut/aggbug/12102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-09-06 20:28 <a href="http://www.cppblog.com/ngaut/archive/2006/09/06/12102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转贴]奋斗5年 从月薪3500到700万（ngaut：看后感动不已，遂贴于此，记之）</title><link>http://www.cppblog.com/ngaut/archive/2006/08/11/11133.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 11 Aug 2006 08:56:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/08/11/11133.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/11133.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/08/11/11133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/11133.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/11133.html</trackback:ping><description><![CDATA[来上海整整五年了，事业上已有了突飞猛进的飞跃，生活方面有过一段段的辛酸。然而，如今回首看来，这五年来也这是这些苦恼最终成为我前进的机遇，让我拥有 了目前还算可以的生活境遇？700万身价，对有些兄弟来说可能是微不足道，但是我想大多数朋友还可能暂时没有达到这个状态——没有半点炫耀的意思，我知道 朋友们很多都会成功，会比我强得多——所以会对我的经历感兴趣，我决定定下心来，好好写点文字，希望不会让朋友们失望。<br />　　<br />　　　　今天 我的心里有一个想法更加清晰，那就是：爱，只有爱，才是一个男人成功的最好动力、最合适的动力。而绝不是自己的虚荣心，或者所谓的雄心壮志。作为一个男 人，首要的一件事是你要有你的真正所爱。它会像原子弹一样激发你的能力，让你爆发无穷的动力，上帝也会为你感动。这样的状态，就是每个人梦寐以求的状态。<br />　　<br />　　　　朋友们，也许你们不同意我的看法，我们先不忙争论，您先看看我的经历，看看是不是有道理。<br />　　<br />　　　　1 上海<br />　　<br />　　　　1999年中，我辞去了刚刚分配的国家机关的工作，从新疆来到了上海。当时我踌躇满志，认为凭借自己的力量和努力一定能够在这个大都市里站稳脚跟，创下一片属于自己的天空。<br />　　<br />　 　　　我是1976年出生在新疆，新疆的日照和高原气候，让我的身材像白杨一样挺拔，相貌虽不敢说英俊非凡，但也让绝大多数人不讨厌。我从小学习可以说是 优异的，大学考上了国家排名前5的重点大学，当时分配是98年，父亲害怕工作难找，一定要我回去做个清闲稳定的机关公务员。我觉得自己也可以历练以下为人 处事，就回到了新疆自治区政府。工作了几个月后，和本部门的同事混得极熟，喝酒、吹牛、查颜观色的本领提高飞快，但是觉得工作实在是研磨青春，浪费生命， 就决定辞职，去上海打拼一下。呵呵，现在我的同学在新疆的也都混得很好。这是个性不同了。<br />　　<br />　　　　我的专业是经济管理类的，当时不懂 事，自视颇高，到了上海我就傻了：这种人企业根本不要，他们要的是有一定技能的人，能干事的人，像我这种实际工作没做过的人根本没人提供培训的机会。同学 和朋友一个个工作都找到了，就我搞不成低不就的，眼看带来的钱慢慢要见底了，这心里越来越急？难道这里还真没有我的用武之地了吗？<br />　　<br />　 　　　3个月后，我终于找到了一个让自己暂时满意的工作，但远远不是自己的专业了。我这个人兴趣比较广泛，精力也充沛，大学里涉猎很多领域，想法也多，文 字功底还可以。正好有一个广告公司招策划文案，我觉得自己能行，结果一试，公司面试者说我虽然没有做过，但是思路和功底还不错，再说毕业的学校名声不错， 就留下我了——现在我还是很感激那位前辈，后面的工作也证明了他的眼光。月薪3500，还好，生活问题暂时解决了。<br />　　<br />　　　　很快我的生活进入了工作状态，我觉得很快乐。2个月过后，一件让我猝不及防发生了，没想到由此开始，我的生活发生了这么大的变化。<br /><br />2 邂逅<br />　　<br />　　　　上班后我对工作极其热忱，也非常努力，一两个月后我已经做过了3个Case，客户和老板还有上司都比较满意。当时我 一则是刚从机关出来，一心想好好干个工作，二则是想报公司识人用人之恩，做事情时即不惜努力，又谦虚肯学，另外因为经过机关的历练，做人上路又大方，经常 请同事喝酒吃饭，他们也愿意帮我，所以很快上手成为部门的骨干。到现在我还在劝年轻的朋友们，工作是应该用全身心来投入的，这项投入从理财的角度说对任何 人来说都不会亏本。呵呵，不过，那段时间存款为0.<br />　　<br />　　　　有一天我去上班，那天早上下小雨，从住的地方要打车去公司那里，要车的人 多，根本打不到车。刚刚轮到我就要上车的时候，一个女孩子从路边冲过来，头发已经淋得不像话了，拉开后门就要上车。我回头刚想出口请她下车，看看她淋得那 样，再说让一个女孩子出去我还说真不出来，她也好像也实在没办法了，看着我脸红红的。我就对她笑了一下，退了出去。<br />　　<br />　　　　第二天早上，我们又在同一个地方见面了。那天是晴天，大家都在等公交车，她一见我就主动向我报以歉意的笑容，我指着快来的公交车笑着说：“你不会把这辆车也抢走吧？”，她呵呵笑了，说：“今天就让给你了！”。<br />　　<br />　　　　就这样，我们认识了。<br /><br />3 热恋<br />　　<br />　　　　她叫芸，来自湖南。她不仅有湘妹子的美丽温婉，也有湖南女子的泼辣和善解人意。她也是刚到上海，在一家贸易公司工作。<br />　　<br />　　　　我们迅速的认识，相知，然后热恋。也许热恋还在相知之前。我至今也有点不明白，为什么会忽然爱的一塌糊涂。也许是刚到一个陌生的地方，刚刚脱离了生存的威胁，也许是我工作后一直嘻嘻哈哈惯了，忽然有个好女孩出现了，也有了真实的感情我就缴械了。<br />　　<br />　 　　　我们因为住的近，下班后每天都在一起，芸说我第一次拥抱她时，她就离不开我了，她说我的体味让她无比迷恋。热恋时我感觉我的精力无穷，每天陪我的芸 到夜里11点12点，灵感来了还去公司加班，那段时间工作效率也很高。朋友们都说我的眼睛熠熠闪光。我们一天不见就如隔三秋。看着她的眼睛我会忘了饥饿， 有很多次我心里碰碰跳着回到住所时，忽然发现自己已经饿得受不了了，呵呵。<br />　　<br />　　　　有一次我去崇明跟项目，因为晚了船班次停了回不 来，所以给她打电话说不回来了。我们一晚上竟然通了50多个电话，不是她打过来就是我打过去。第二天一早我一下船，居然在码头上发现了我的芸——要知道那 里打车也要1个小时的路，她流着眼泪说一夜没睡，一早就来等我了。我们相拥而泣，幸福异常。<br />　　<br />　　　　很快我们双方都认为对方是自己未来家庭里的另一半。到年底的时候，芸说让我去她家见见她家人。我很紧张，但是很高兴，开始准备见面礼。呵呵，那时我们都爱昏了头，根本没有存钱的想法。好在我的薪水涨到了5500，她也有2500，我们还够花。<br />　　<br />　　　　然而没多久，一个消息把我的心情打入了十八层地狱。<br /><br />4 彩礼<br />　　<br />　　　　到年底了，我的礼物也准备的差不多了，一共花了大概4000多。半年多来，我已经成为公司的干将，老板也比较看好 我。因为我一直是西北人的性格，豪爽但不失明智，工作从不计较加班，补助什么的。年底老板还多发了不少，买好礼物手边已经有1万了，感觉自己有钱了，所以 根本没想到钱的事。<br />　　<br />　　　　这时候她的一个表妹从她的老家来了，说是来看看。我想可能主要是她家里人让她来看看我这个未上门的女婿的。她早就给我说过，她家里她妈是老大，决定一切事宜。我们不敢怠慢，带她表妹在上海好好的玩来一遍。最后我感到她表妹对我还是比较满意，我的心也放下来了。<br />　　<br />　 　　　到了临走的前几天，芸忽然告诉我说，这次上门可能比较正式，语言有些闪烁其词。我有点不明白，心里想可能她妈已经初步考察通过了吧。一天，我们三个 人在的时候，她表妹开玩笑的样子对她说，姐，你这么好的条件，彩礼可不能少要啊！姨说了，前街的老李家的闺女都要了男方8万呢，我们决不能少于15万的。 说着还看看我。<br />　　<br />　　　　天啊，我像被电打一下，呆住了。说实话，我从小在新疆长大，风气很开明的，结婚男方有送钱的一般不过4~5万 了不起了，而且还是说明给孩子的。彩礼这个概念只有读小说时接触过，万万没有想到会有朝一日到自己头上。她家里人现在说出这个话，绝对是当真的，说话的方 式都掌握的这么有技巧。我该怎么办？让她嫁改变做法想法？省省吧！凭什么？家里的底子我清楚，决不能向家里伸手。那该怎么办？我还是笑着看看芸和她表妹， 芸有点紧张，我心里更不忍了。“呵呵！看来我要表现诚意了。”，我笑着不置可否的回答。<br />　　<br />　　　　我该怎么办？回去后我翻来覆去地想这个问题。<br /><br />5 诺言<br />　　<br />　　　　这是痛苦的3天，我几乎没怎么睡觉。芸也看出来了，她小心翼翼地不敢惹我。我心里很憋火：怎么弄得嫁女儿跟卖女儿一 样？有时候想干脆吹了算了，可是一想到我们要分开，心里就像刀割一样，眼泪就不由自主的下来。家里一直是清贫的家庭，弟弟还在上大学，不可能向家里伸手 的；自己的工资？天啊，我现在都觉得钱不够话，手边只有1万块钱，这次去还要准备出血，再说我就是攒钱，也要为我们结婚买房作准备啊，15万给了她家，我 们将来怎么办？……<br />　　<br />　　　　这么多年来，我对自己的了解是，我喜欢出奇招。想了3天，我有了一个办法，心就定了。芸有时看着我，不知所措？她知道我的脾气，家境和经济状况，可是，她也知道她无力改变她妈的想法，而且关键的是，她还有一点想法是彩礼是应该给的。我告诉她，别担心，我有办法了。<br />　　<br />　 　　　很快，到了她家了，见面，递上礼物，聊天……她母亲和蔼而精明，父亲稳重而慈爱。很快两天过去了，我们也该走了，这时该来的也该来了。最后的晚餐， 她的母亲说话了：“小D，你在我们这里已经2天了，我们对你还是比较满意的。你是个不错的孩子。如果没有意外，希望你们能今年（新的一年）把婚定了。你看 什么时候把礼节办了？你们商量一下，也和你家里商量一下，好吗？对了，我们这边的风俗你可能还不清楚，也不知阿芸小月给你讲了没有。”<br />　　<br />　　　　我马上接住了话题，笑着说：“谢谢阿姨，伯父，小月和我说了。”这时我看到阿芸紧张的脸都变了，看着我怕得要命。是啊，最后一段千万别搞砸了。我笑笑让她放心。<br />　　<br />　　　　“阿姨，伯父，你们的心情我我理解，养女儿不容易，再说只有一个女儿，我觉得15万如果比比投入，不算多，甚至还根本不够。这个钱我们家应该给。”<br />　　<br />　　　　“我想阿芸也把我家里的情况告诉二位老人了，我是这么想的，也不一定合适，您二位先听听。<br />　　<br />　　　　“15万应该给。但是我觉得既然我工作了，我自食其力了，而且是我娶阿芸，同时你们也觉得我合适，那么这个15万应该由我来给，而不是我家里来给。 <br />　　<br />　　　　“你们和阿芸看中的人，不应该仅仅需要家里有15万，还要有能力，有能力给阿芸将来的生活带来幸福。我想，我有这个能力。我自己不仅要有15万，而且应该向你们证明，我有能力给阿芸幸福。<br />　　<br />　　　　“我只有一个要求，就是给我不长的时间，两年吧。我们还小（阿芸比我小2岁），晚一点结婚也没关系。两年后，我会拿出15万，而且会证明给你们看，我和阿芸有能力生活的幸福。”<br />　　<br />　　　　其实，当天晚上我的语言远远比我的文字精彩，因为有爱在心里，我打动了她家所有人，阿芸的脸也红扑扑的。我们走的时候，他家里人很开心，当然也许只是表面上是，但是至少他妈默认了我的要求。当然从此后，我感觉有个巨大的大山压在了我的心里，我的生活改变了。<br /><br />6 开端<br />　　<br />　　　　回到上海以后，我的心情没有低落，反而有种大战来临时的平静和激动。我心里暗暗下定决心，为了我的爱人，我的未来幸福生活，我要付出比别人几倍的努力，实现我的诺言。我全身心地渴望这样做，而且相信自己一定能够成功。<br />　　<br />　 　　　芸反而很担心，她和我说要不我们搬到一起，生活上可以节省一些，她和我一起攒钱。我拒绝了她。虽然我们早就有了肌肤之亲，但是我不想让她家里人知 道，这样对她不好。而且我也不愿让她一起攒钱，毕竟我说了，这是我的事。我知道一个女孩，生活、衣服、化妆品等等，每个月的花费怎么说也要2000块左右 的。我说，芸这段时间我可能就不能给你买很多衣服和化妆品了，她郑重地点点头。我不知道，以后我是否会为这个决定而后悔。<br />　　<br />　　　　我 的初步想法是这样的：因为我只工作了7个月，而我的薪水已经涨到了5500.如果依照这个速度，半年后我的薪岁至少应该到8000，一年后最不济也应该到 10000左右。我可以什么都作，而且可以往管理方面发展，这样，我每月存下70％的工资，2年下来加上年终奖，也就差不多了。而且，那时候即便把15万 都“上供”了，我的年收入也能够让我们生活的小康。<br />　　<br />　　　　现在回想我那时候想法，心里只有两个字：幼稚。事态的发展果然证实了那句话：计划在现实面前永远是无用的。<br /><br />7 失败<br />　　<br />　　　　很快，现实给了我重重一击。一个偶然的机会，我和大老板聊起来，他告诉我策划和创意人才可以很快赢得中等偏上的薪 资，但是要达到5位数，只有2年的工作经历基本不可能。因为国内的商业条件还不成熟，客户的能力也有限。所有的公司愿意付出一些成本搞定客户，在策划和创 意上达到80％的满意就可以了。而且，公司愿意把高薪给业务人员和管理人员，一个只有2年工作经历的人基本不具备它所需要的人脉资源、操作能力和管理能 力。<br />　　<br />　　　　我明白了老板的意思。我开始在市场上寻找其他的公司。但是现实很快让我失望，要在一年内获得万元以上的月薪根本是不可能 的。好的公司有，但都说2到3年内有希望，如果做得好的话。老天，我的时间不够了！同时，公司知道了我在外面找工作的事情，老板们很不开心，因为平心而论 公司觉得已经待我不薄了。说实话，这条路成功的可能性很大，但是时间不够啊！<br />　　<br />　　　　怎么办？<br />　　<br />　　　　我决定辞职。 三十二岁开始做外贸…<br /><br />艰辛<br />　　<br />　　　　既然已经证明此路不通，再留下去就是浪费时间。我的时间不多了。而且我认为自己如果辞职，就有的是大块的时间，能够接触 更多更深的社会，机会也相应的多了。阿芸不同意，她说这样太不稳定了。我没法说服她，她也没办法说服我。这件事我还是做了，我知道，只能破釜沉舟了。<br />　　<br />　　　　临走时和老板深谈了一次，请他原谅。也把我的处境部分告诉了他。我们谈得很好。老板很惋惜，让我以后有可能还回来工作，我也很依依不舍，但是我已经没有退路了。<br />　　<br />　 　　　我开始了在上海滩到处漫游的经历，骑着一辆破自行车到处在上海转，到处找有限的熟人，问有没有项目做。我身边有1万2千多块钱，觉得还可以支撑半年 吧。我想，这半年里如果有策划项目做，我就辛苦点，把所有的事情都自己做了，应该可以挣个2到3万，多做几个项目就比打工好了。呵呵，如果朋友们谁有我那 时一样的想法，今天我一定劝你千万别！事后想，我太自信了太着急了，真是应该边工作边找机会，时机成熟再干的，否则下海99％是被淹死。我就这样风里来雨 里去，跑了2个月，一个单子也没有跑到，加上有一次丢了包，损失了1000多块钱和手机。住宿、吃饭、交通花了3500块钱，身边只剩7000多块钱了。 可是一点没有转机的迹象出现。<br /><br />9 机遇<br />　　<br />　　　　就在这时候，一个令人不敢相信的、非常好的机会出现了。我以前的一个客户找到我，说是他的一个朋友在上海嘉定那边的 一个镇里做镇长，他们镇上3个月后要办一个“水乡情思”的活动，主要是吸引港台和外籍人士的资金投资。他们要我构思起草一个大型活动的策划书，价格是4万 元。这个客户说以前在我们公司和我合作过，觉得我有这个能力，而且拿到公司去做策划，价格一般要到8万以上。我们合作空间更大，而且如果策划书做的好的 话，活动组织和制作我们还有机会。我很开心，明白他是想自己也赚一些，立刻给了他2000元的好处费。不知道这个习惯有没有影响我，直到现在我都认为机会 来了一定要投入，而不是大多数人认为的不见兔子不撒鹰。<br />　　<br />　　　　我废寝忘食地工作了20多天，每天夜里干到2点，稿子改了4次。然后 又自己贴了400多块钱制作了3本样本。交给那朋友的时候，他非常赞赏，连声说做的太好了，看来后面的制作也没问题了，一周之内我就等着拿钱吧。我也心里 感叹投入没有白投，连忙把这个好消息告诉了芸，她也非常开心。毕竟这是我的第一笔收入啊！而且金额还算不少。<br /><br />10 被骗<br />　　<br />　　　　我万万没有想到，这次看起来不错的机会竟然实际上是碰上了一个骗子。这个客户拿到了我的方案以后，竟然人间蒸发 了！我苦苦等了一周以后，这家伙死活不再和我联系了。我打电话，手机已经停机，跑到他原来公司去找他，公司的人说他早就不做了，现在在和一个人合作开公 司。我又跑到嘉定的那个镇上去找我们以前一起见过的他的镇长朋友，镇长说这个项目早就签约了，他和我那个客户也不是朋友，只是签约公司说策划书部分包给 他，他又找到了我，说我是他的助手。现在策划书已经通过，钱都已经付了。我马上又找到了那家公司，公司说我那个客户不是他们公司的人，只是他让公司把策划 书部分包给他，钱公司和他刚结清了。知道我的情况后，他们表示同情，但没办法：现在他们也找不到人，钱也结清了。<br />　　<br />　　　　这个打击对那时的我是致命的，让我的处境雪上加霜。我已经花了大量的精力不说，原来剩下的7000多块钱已经被我花去了大半，只剩3000多了。更可怕的是我的时间又用去了一个多月。<br />　　<br />　　　　这是后话：那个客户我这几年就再也没有见过。后来听说他过得很不好，很多人都在找他，他又让合作伙伴坑了一次，基本上就再也没有听说在这个行业里做过什么了。<br /><br />11 灰心<br />　　<br />　　　　万分沮丧的我把情况告诉了芸，告诉她的时候我分明听到了一个美丽的泡沫在她心里破碎的声音。她表面上没有说什么， 但我知道她失望极了。我们相拥无言，我只能从她这里得到一丝温暖和安慰。她说，你别急，没关系，我们从头再来。可是，我的爱人，你知道吗，这个打击甚至让 我回头审视自己，怀疑自己：我这样的一个北方人，是不是适合在上海打拼？<br />　　<br />　　　　尽管万分失落和失望，可我不能让我的女孩对我失望。 第二天我强打精神对阿芸说我要重新开始。我考虑了一夜，因为我已经没钱了，不能再租原来的房子了，我必须去找一个民房住，每个月可以省7 ~ 800元左 右。但是这样就不能和芸象以前那样离的那么近了。我说我不能停下来，时间不多了。芸哭着抱着我说，我一定要多来看她，她会很想我，我有经济困难一定要来找 她。我笑着说，你有经济困难也要来找我啊。<br />　　<br />　　　　朋友们，尽管时间已经过去了那么久，可是今天我回忆到这里的时候仍然泪流不止。那时候我已经处于最低谷，生存也成问题，可是我仍然愿意回忆那时的事情。我怎么可能想到，命运老人会让以后的我和她发生那么大的变化？<br /><br />12 初醒<br />　　<br />　　　　我搬到的一个民居是个私房，就是农民自己盖的房子，房子里面夏天热冬天冷，而且只有10个平房大小。我已经很满足了，这里每个月租金才200元，比以前我已经省了800块钱了。<br />　　<br />　　　　搬过来以后，我有很长一段日子不知自己干什么好。我想这是载过跟头的人的通病吧，相信有过类似经历的朋友会有同感。可是不做事情我心里又焦急万分。这种矛盾的感觉真是让我每天心里都不好受。<br />　　<br />　 　　　转眼一个月就要过去了，这个月里我基本上是馒头就咸菜，肚子里油水实在缺的厉害。我决定去买点熟肉解解馋。我这个民房周围有几个新改成的小区，因为 离市区比较远，基本上是一些市内动迁户迁到这里来的，真的购买这里房子的人也都没什么钱，但是这样的人在上海很多，小区外人气还是不错的。这里不像高价 房，高价房是开盘很久了还没见几个人烟。小区之间有条街，人很多但大都是些老人孩子在转悠。熟肉店生意好象不是很好，我要了一些肉又买了一瓶啤酒，在旁边 小店的简易桌上坐下来吃。<br />　　<br />　　　　多年以后我回想那个时刻，还是认为那是上帝给处于绝境的我的一个机遇。就在那时，忽然有人和熟食店 老板说话，在说老板，你这生意不行啊！是啊，那老板说，我下礼拜农忙，准备回家了，不做了。那人说，那你这店怎么办？那老板说，转了呗，这半年没赚什么 钱，还不如做点别的。忽然我有一种苏醒的感觉，我到处找钱赚，可是好高骛远，忽视了这身边的机会，难道自己一直没看见？我马上站起来，让老板再给我一点牛 肉，然后漫不经心地问他转让店面的情况。<br />　　<br />　　　　不过十分钟，我就清楚了：这个店也就10个平方左右，月租金1200，租金他多付了 两个月。转让费他要求不高，不亏就行，带一点简单的设施，2万块钱吧。我说我想接手，但是价格太高，他降到了1万8.我说1万5我今天就要，他回去和他老 婆商量了以下，同意了。我立刻回房拿了我仅剩的3000块钱作为订金付给他，然后当晚立下转让书，当然他同意我7天内把余款付清。<br /><br />13 努力<br />　　<br />　　　　我找到以前公司的老板，请他借给我钱。我还带去了我做的那份策划书，说我送给公司的。老板也多少听说了我的事情， 他详细地了解了我的境况，二话没说借给了我1万5千块钱。我笑着说：“老板，我把身份证押在你这里吧？”，老板也笑着说：“你要不要我的身份证，1万5我 押在你那里？”其实到现在我都一直敬佩我的老板。他的事业现在也做得很好，家资3000多万了。<br />　　<br />　　　　能让我的店面生意大为改观 呢？首先，我回忆到以前的鸡粥店，觉得上海人爱吃鸡，特别是白斩鸡，还有烤鸭，决定经营品种适当变化；另外，饮食业最重要的是卫生（卫生许可证一年一办， 已经有了），我决定彻底打扫店面一天，店面重新贴开业标志，另外买了一个二手的消毒柜，特意摆到台面上让客户看到消毒设施的过程；然后，我找了一个上海老 师傅来指导制作工艺（退休了返聘，很便宜的），再找了2个勤快的四川妹帮忙，允诺给他们业绩5％的提成，但是不行我就换人；等等大概有20多条措施吧，我 当时可是写满了2页纸的，全部做完已经过了近10天了。最后，我买了一些鞭炮，噼哩啪啦一放，人气立刻被我吸引过来了。呵呵，当天忙到夜里11点，一盘点 营业额居然有500多！<br /><br />14 曙光<br />　　<br />　　　　做过生意的朋友都知道，开业的当天生意好不见得以后生意一直会好。因为刚开始客户是好奇，试一试，一旦没有什么特别吸引之处，他们就会立刻忘了你。而你要再吸引他们的注意力就困难得多了。<br />　　<br />　 　　　我明白这个道理，所以第二天开始就在店面前不停的拉人聊天，问味道怎么样，然后不由分说要送他们一些熟食。上海人内外分的很清楚，他们决不会白要别 人的东西，绝大多数都付点钱，当然他们也不会白给别人东西。当然我明白，生意的关键是我的货品要合客户的口味。慢慢的我的小店人气就有了。我还请人在几个 小区里张贴了我们店的广告，也请人故意拎我们的烤鸭在几个小区人多的地方走动，相互之间含喧，巧妙吸引人们注意。通过很多这样的方法，一个月后我的店每天 的营业额可以达到800元左右，而且还在不断上升中。呵呵，我以前的策划功底全部用在这上面了。<br />　　<br />　　　　我这样起早贪黑的忙碌，每天 大概干14、5个小时吧，完全把心思扑在了店面上。作了第一个月的生意后，我盘点了一下，我一共赚了9000元钱；第二个月我赚了12000.把欠的债还 掉后，我又没钱了。但是我感到，我生命中久违的曙光已经来了。说实话，这种感觉真的很美妙。<br /><br />15 做梦<br />　　<br />　　　　我就这样经营着自己的小店，时间又过了3~4个月。其间我忙得每天只睡5、6个小时，一躺下就昏迷不醒的样子。我 和阿芸通过几次电话，她也忙，因为她升职为资深业务了。我们见过几次面，她都让我好好休息一下，我笑着说，把你娶回来再说吧。她说你靠那个门脸赚到钱了？ 我笑笑，决定几个月后给她一个惊喜。<br />　　<br />　　　　4个月后，我已经攒了5万块钱，可是也快到年底了。算算我的时间只剩13个月多一点了。 如果按照现在这个模式发展下去，我完成目标15万的可能性是稳稳的。我每个月只要保持现在的状态，那么一年以后我应该用18~20万。钱是够了，还可以办 个像样的婚礼，不过买房子是暂时不用想的。呵呵，看到这里，不知道又有多少朋友在笑我？楼主的幼稚病又犯了！是啊，如果没有房东的收租事件，我想我会把这 样的梦做下去吧。<br />　　<br />　　　　房东来收过几个月租后，就到年底了。有一天房东忽然出现说是要签明年的租房合同，但是价格贵了一倍。气得我 差点翻脸，这分明是看我生意好了眼红嘛！可是我知道人在屋檐下，不能不低头啊。再说我现在可是一点问题也不能出。我和他好说歹说，又送给他了一些熟食，房 东还是加了我1000块钱。<br />　　<br />　　　　这件事让我意识到危机已经显现。生意做得好了以后，第一房东的房租会涨价，不可能再跌价，各种费 用也会涨；第二，很快竞争者就会出现，出现以后和我的小店是同样规模，势必会分流客户。所以这种赚钱的状态是不会持久的。如果我不动作，最后的结果我想也 想得出：小店几个月后就回到维持生计的地步。那么我该怎么办呢？我一夜没睡，苦思对策。<br />　　<br />　　　　第二天一早，我下定了决心，决定孤注一掷，冒一把大险！<br /><br />16 冒险<br />　　<br />　　　　我的计划是这样的：第一步，在附近的小区再开几家这样的熟食店。地段只要和我现在的店面地段差不多就行了，但是不 能太近了，然后用一样的装修、一样的名字、一样的策划手段，建立起小区居民心目中品牌形象，这样进货价格会便宜很多，还可以逼迫后来者提高投入。这个计划 实施的越快越好。第二步，我觉得现在这个商铺的价格不高，2000多交租不如我把它买下来。上海的朋友都知道，2000年底上海郊区的房子价格只有 2000多，商铺也只有3000多。这一步必须稳步实施，一个一个来。但是这样我就是必须投入我现在所有的5万块钱，如果一旦失败，我的时间、金钱投入可 能会让我的目标彻底无法实现。但是我又想，我不去做，就把希望寄托在别人别来抢生意上，我去做了，希望在我自己身上。相比一下，我愿意把希望寄托在自己身 上。<br />　　<br />　　　　但是我以前所想的给我的芸一个惊喜的计划只能延时了。我心里对自己说，为了她，拿出你所有的劲吧！那是无比艰辛的一个 月。我不仅要照顾一号店的生意，又要为二号店、三号店选址、选人、买设施、店面布置等等。后来我提高了一个一号店店员的提成比例，封他为店长，告诉他1个 月后店里的营业额如果下降5％以上，立刻换店长。这样我就全身心投入到新店的开张。1个月过后，我的二号店、三号店相继开张，我还是无法清闲，又开始了以 前那样的策划造势，而且开始了四号店的准备工作。<br />　　<br />　　　　后面的一个月，我一号店的盈利状况还是不错，达到了12000元，二号店5000元，3号店最好，居然有10000！要知道这是头一个月，人员还不熟呢！我发现原因是一个女孩店员做生意很有天赋，也会招睐客户，我二话没说给她工资翻倍，直接提升为店长。<br />　　<br />　 　　　年底如期到来，我和芸只在一起度过了半天，就不得不忙着自己的店面了。芸要回家去，我不能走，目标没有完成我怎么能见她家人呢？不过我和她妈通了一 个电话，她妈笑着说：“小D，我们知道你是个好样的孩子，我们都盼着你把我家芸芸早点娶走呢！”我知道这话里的意思，也笑着回答说：“我会的，谢谢阿姨和 伯父的信任。”<br />　　<br />　　　　年底年头的2个月，因为过年，节日也多，我的生意好的一塌糊涂。四号店也赶在春节前开了。这两个月每个店平均 一月能赚15000，2个月后我身边的现金达到了12万。元旦前还有一件事，原来的老板给我打电话说，他公司还有一个转入户口的名额，问我要不要，我说 要。他说我什么都不用管了，把资料给他就行了。为了好好感谢他，过年时我去他家给他的孩子送了一个5000块的红包。年后不久我的户口办下来了。我开始逐 步的和各个东房谈要购买铺面，如果他们不卖，我就找别的房东谈，那是很多房子是物业的，比较好拿。而且那时候房价低，再说我找房子前就打的有伏笔，另外我 价格给的稍高一些，前面3家都谈的很顺利，单价大概在3700一个平方吧，一共13万，我全部给的是现金。第四家以一共要5万（生意好啊，房东要挟我）， 我没钱了，但是抵押了前面的一家店作为3万先签了意向书，等到一个月后，资金回笼了，把钱凑齐了把店拿了下来。<br />　　<br />　　　　这时候已经是3月底了，我还剩8个月。生意好象在稳步进行，目标好像越来越近。可是我没想到，一个足以摧毁我的重创也越来越近了。直到今天我回想到这个让我记忆深刻的时间段，还觉得眼眶里泪水未干。<br /><br />17 重创<br />　　<br />　　　　时间又过了3个半月，马上要到7月10日了，我之所以记得这个日子，因为这是芸的生日。我决定在这个日子之前攒足 15万，并把这个消息作为生日礼物送给她。想到她得到这个礼物时候的开心，我的心里别提多激动了。这几个月店面也争气，每个店都能够达到10000多的利 润，这是因为我店多了，进货成本低了，而且房租也不用交了，还有一个最主要的原因就是我用了一个很好的店长小成。<br />　　<br />　　　　小成就是我 前面破格提拔为店长的那个女孩子。这女孩是从浙江来的，只有19岁，人长的清秀漂亮（因为要招徕客户，这是一个比较重要的因素，招人的时候我就特别注意要 找看着舒服的女孩）。因为一般的外来妹大多不是浙江来的，所以我特别留意她。没想到这个女孩在做生意方面真的很有天赋，她一直是很开心的样子，从没见过她 烦过，会说话，人很甜，客户缘很好。而且她很有脑子，开业没几天就把所有的常客的名字记熟了（我估计她是问周围的店主和客户的），还建议我，天气热了，店 面里配点素菜，啤酒，买点简易桌椅，晚上让客户边吃边纳凉。她还把周围的几家饭店的电话弄到了，把饭店的生意也拉了进来。后来我们熟食店里的生意饭店进货 居然占了30％！<br />　　<br />　　　　不过她也有一点不好，就是好像身体太单薄，力气活干不了多久就累得脸发白、出虚汗。小店生意好的时候，这也挺影响的。我考虑了几天，决定扬其长，避其短，在店里又招了一个身强力壮的小伙子给她打下手，告诉她只管招徕客户，管理帐务。<br />　　<br />　 　　　这时候我的一个朋友打电话给我。原来他不知道从什么地方得知我开了几个店，做得还行，而他正在做房产销售，代理一个别墅的盘子，非要我去看看。上海 的朋友都知道，2001年的时候上海的房产还远远不热，房产销售尤其是高价房的销售很难做。他代理的那个别墅房型有180多个平方，周边的配套还不完善， 再说总价要80万朝上，我不想买，就告诉他没那么多钱。他说，你来看看吧，看了肯定喜欢，再说钱的事情好办，贷款就行了。我说那还要首付呢，我首付也没 有。他说没关系，他可以在合同上做点手脚，让我零首付，全部贷款。我没办法只好去看看，没想到看了以后特别喜欢别墅下面的花园，因为我记得芸曾经告诉我 说，她的梦想就是住在花园的上面，每天早上打开窗户就能闻到花的清香。朋友看我有意，就拼命鼓动我说，买了这个房子这个优惠，那个免费的，每月只要付 6000多就可以了。我还是有点犹豫，说我不想每月跑银行。他说，我帮你办，每月自动划款，不用你操心的。我没什么再挑的了，想想就定了一套。不过后来知 道，这小子还是打了埋伏，有些言过其实：窗户就不是他说的双层的，车位也不是免费的，呵呵。<br />　　<br />　　　　7月9日，我拿着那份15万元的 存折卡，兴冲冲地拿着一束花，拎着一品瓶红酒（蛋糕明天叫人送来）赶往芸的住处。之前，我已经给她妈打了一个电话，向她父母亲问好。同时告诉他们，我已经 提前5个月实现了诺言，很快就会娶她家女儿了。我决定先给芸一个惊喜，然后今晚就住在她那里。我特意赶在她下班前一点赶到，准备突然出现，吓得她快乐的大 叫。<br />　　<br />　　　　可是让我始料不及的事情出现了，芸下车时不是一个人，而是和一个男孩一起。他们手拉着手，好像很亲昵。我一下傻了，不知 道怎么办好，他们一起进了小区，我傻乎乎地跟在后面。在光线阴暗处，那男的还一把搂住芸亲了一下。我的脑袋轰的一下，再也受不了了。我大叫着芸的名字，冲 上前去一把抓住芸，然后就要打那个男的。芸吓了一跳，拼命地拉住我，对那个男人说快走，你先走，我跟他解释。男的走了，芸还是拉住我不放，我叫到解释什 么？解释什么？一边眼泪就快下来了。芸看着我，很冷静，冷静的我们好像不认识。她对我说对不起，早该告诉我。但是我今天太不冷静，她希望我先冷静下来，现 在的气氛我们没法谈。我没办法冷静，说不行，今天你就必须给我一个说法。她被我纠缠的没办法了，对我说，D，一直以来，我以为你的素质很高，你今天这样会 让我很失望。我停了下来，看着她，眼泪慢慢地流下来，最后对她说，好，我走，明天来再谈。出了小区，发现花和红酒居然还在手中，一把把他们扔进了垃圾箱。<br />　　<br />　 　　　那夜我一夜无眠，盯着外面发呆，怎么也想不明白事情怎么会到这种地步。第二天一早我在芸的楼下等着。芸下来说我们找个地方吧。我们到了一家茶室，我 呆呆坐下，等她解释。那天她说了很多，我都有些记不清了。她说，其实从我搬走我们就很少在一起了。她知道我很努力，很辛苦，但是经历那么多波折，真的很怀 疑我是不是能够实现15万的诺言。她心里开始很怕，但是又没机会和我说。我的压力又不和她分担。在上海这么长时间，她和我一样做得很辛苦也都没有归宿感， 觉得很累。这时候她的上司，就是那个男孩出现在她身边，男孩是上海人，比她大4岁，在公司职位不错，家里条件也好。芸说和他在一起，她会觉得很安心，很安 定，很有安全感，不像和我在一起，虽然感情曾经很热烈，但是总是不知道我们的将来在那里。她说对不起，真的对不起。我激动的浑身乱颤，说不出话来。好容易 稍微平静一些，我告诉她说，我现在有15万了，你还会爱我吗？她说，对不起，我觉得现在很好，我不能再对不起他了，我们不会再在一起了，希望你将来幸福。 出门的时候我发现了那个男孩，心里又一阵刺痛。约在这里，一定是他们商量的结果。<br /><br />18 怀疑<br />　　<br />　　　　这真是一个巨大的讽刺。一直以来，我以她为努力奋斗的动力，可是等我奋斗到了目标跟前，却发现目标忽然消失了。我 记得那时候，我开始失眠，希望自己赶快入睡，然后梦见芸。可是我一次也没有梦见她，倒是我清醒的时候一刻也没有停止想她。我经常觉得心里刺痛，头皮发麻。 一直以来，我那么小心翼翼地把她放到我心里的一个最温暖、最柔软的地方，没想到最痛苦的打击却由这里产生。<br />　　<br />　　　　有一个朋友曾经回贴问我，怎样才能获得不爱你的女孩的爱，我没有回答。不是我不愿回答，而是我不知道怎样回答。我真的不是这方面的专家，我也曾痛苦无比，希望能够改变我爱的女孩的心。可是我没有什么办法，只有自己默默地退回，独自一人舔着自己的伤口。<br />　　<br />　 　　　那段时间我对自己过去的所作所为产生了怀疑，我这么做到底有什么意义？如果我还在公司工作，每天还有时间，情况就不会这样。如果我不搬家，事情也不 会这样。如果我不开店，就有时间陪她，情况也不会这样。就是开店了，如果我不开分店，也有时间去看她，应该也能阻止她情变。每天我这样乱七八糟的想法充斥 了我的脑海，让我对生意根本提不起兴趣。<br />　　<br />　　　　店里的员工都看出来了，他们小心翼翼的不敢惹我。几个店长都很称职，生怕店里的事情 会引得我大发雷霆。尤其是小成，她主动找到我说她来每天到个家店里盘点，让我忙我自己的事。我很感激她，也相信她的能力，就告诉几个店以后由她来查店。我 知道自己这个状态如果硬让我去，非出事不可。小成很有手段，也有能力，查店每天要多做2个小时，她很快让其他人服服帖帖。还好，有小成和他们的帮助，我的 生意没有什么影响。<br />　　<br />　　　　但是我自己知道，我已经迷失了前进的方向。我不知道怎么再找到这个方向。<br /><br />19 迷失<br />　　<br />　　　　有人说工作累的时候，家里压力大的时候很辛苦，我却不是这样认为。我觉得一个人迷失方向的时候最痛苦，因为你不知 道自己应该做什么，这种状态每天无时无刻不深刻地提醒你不过是一具行尸走肉罢了。那个时候就是我迷失方向的时候。我就像一个被抽去发条的时钟钟摆，每天不 过是由惯性推动我在摆动。我不知道什么时候会停摆。也许在我的内心深处还在暗暗期盼那停摆的时刻。<br />　　<br />　　　　芸的妈妈给我打了一个电 话，接到电话知道是她，我心里真的不知道是什么滋味。她妈对我说，孩子，阿姨知道你很难过。你们年轻人的事真不知怎么搞的。但是阿姨告诉你，你是个好孩 子。你的前途还很远大。阿芸不能和你在一起，是她没福。好好的，我们全家都祝福你。听了这话，我的眼泪又留下来了。以前觉得她是那么固执和势力，今天怎么 觉得她的话那么温暖。我终于能够真正站到一个父母的角度上来看彩礼这件事，是啊，那是要把自己女儿未来幸福生活尽量多地抓到手里的感觉。<br />　　<br />　 　　　在这里我要感谢我的一位大学同学枫，如果不是他凑巧来到上海，要我陪同的话，我不知道我这种状态要持续多久。枫来上海玩，指定我陪，而且说陪得不好 当即给所有哥们打电话说上海没我。我强打精神，枫还是有所察觉。枫一见我就说，你小子怎么减肥减的那么明显，不行不行，我们不能一起照相，否则班花见了照 片，我一点想头都没了。他就是这样，那几天逗得我开心了一些。要走的时候，枫说，说说吧，怎么了。我这才知道，他早看出我有事，所以一直在让我开心。从芸 变心以来，我从没有向人倾诉过。枫听过了之后，很久没有说话。后来一开口就是一句：“好！这是好事！”我听的愣了。<br />　　<br />　　　　枫接着解 释说，我和芸现在分开始好事。因为就是现在不分开，我们早晚要分开。因为我们不是一路人。芸的内心深处时那种安分守己的人，经不起动荡，分开的时间主要视 我波动的强度而定；而我是那种不安分守己的人，越是不利、越是艰难，越能激发我的能力。我适宜在变数中求生存，求发展。而且我不是很在乎物质，所以要的感 情是非常纯粹的，女孩子大多到了要结婚的关键时刻，生活现实和抚育后代的本能让她们不得不物质起来。这不能说不对。这也是为什么当初芸自己也不反对彩礼的 原因。他说，我这样的人，只有物质生活到了一个水准后，交往的女孩子才会有安稳的感觉。现在还不行。但是我应该感谢芸，她激发了我，她放了我是我的幸运， 否则我们在一起，芸一定会成为我的桎梏。他还说，你的奋斗动力就是她？那你的家人，朋友呢？我们呢？你以前的老板呢？你的员工呢？我们还一直以为你能成大 气，为了我们这份信任，你也不应该放弃。而且，说实话，你的这点家业还很小很小，一不小心，很快就败了。<br />　　<br />　　　　他还告诉我要留意小成，这小姑娘太聪明。我就是对女的太迟钝了才栽的跟头。以后绝对不能让她独掌财务大权，我一定要控制住她。最后，他拍拍我说，兄弟，醒过来吧，外面的世界很残酷，也很精彩，但是绝对不是为这个样子的你准备的。<br />　　<br />　　　　枫，今天的你也在看这份贴子吗？如果是的话，我想对你说：哥们，真的谢谢你！<br /><br />20 心意<br />　　<br />　　　　因为那一场直抒胸臆的倾诉和枫的精到劝慰，我终于慢慢开始摆脱失恋的阴影。我特地给家里打了电话，给弟弟也打了电 话，同时也和同学朋友纷纷联系，又去拜访了以前的老板，他们都为我在上海的奋斗状态和所得高兴。我之所以这样做是想提醒自己，我的世界还在，我的生活还 在，我要主动地让他们把我拉回到我的世界里。他们对我的爱也会成为我的动力，这是更绵绵不绝，更持久的动力。<br />　　<br />　　　　同时我也听取了 枫的建议，重新收回了店面的管理权限和财务权限。我把小成和另外一个店长互换了位置，然后仔细的查询了最近的账目，还悄悄地私下和其他人谈了谈，侧面问了 问他们对小成的看法，大家都没说什么有价值的话，除了一号店店长，他的资格最老。一号店长说小成太跋扈，太不尊重人，什么事情都自己定，也不和老板商量， 更别说其他人了。每天的财务帐、现金全是她管，根本不让别人插手，也不知道她是怎么想的。因为我暂时没有查到什么小成的把柄，所以只能安慰一下他，也没有 做什么动作。<br />　　<br />　　　　这时候4号店的小徐（他就是我招的为小成打下手的伙计）找到我，要求要换地方，他要跟小成到一个店里去，否则就 辞职。我一开始很奇怪，后来恍然大悟，明白了小徐的心意：原来小徐已经喜欢上了小成。我同意了小徐的要求，同时更为警惕，因为公司里有一对的话，容易形成 小集体，而且他们容易一起跳槽，成为我新的竞争对手。我不得不暗自多留心小成和小徐。<br /><br />21 真爱<br />　　<br />　　　　我的心意逐渐回到了生意上。不得不承认，小成有一套。她总结出一些管理规范和待客方法很有用处。她的做法比我原来 的做法更细，我比较倾向于策划一些活动和办法，短期效应比较明显，但长期的发展还是需要细化的管理。生意还是缓步发展，我们基本上每半年利润提升20%， 这一方面因为管理的细化，人员的熟悉；另一方面还是得益于这里的人气渐渐旺起来了。这样过了年，到了2002年4月份，我的手头已经有了超过50万的资 金。经过和小成交谈，了解了她的很多想法，我觉得我暂时还时离不开小成。这段时间我发现小成对小徐也是淡淡的，他们的关系好像并没有变得密切起来。<br />　　<br />　 　　　因为对小成的留心，我发现了小成身上的越来越多的细节：她一个人住，爱干净，爱笑，爱看书，很怕冷，尤其害怕感冒，不喜欢猫狗等等。因为生意的缘 故，我和小成的交流越来越多，也就越来越了解她的聪明和能干。有时候我想，这么聪明的女孩因为家庭的原因不能上大学真是可惜了！又转念一想，就是上了大学 又怎么样呢？大学生我自己不就是吗？我见得还少吗？原来戒备心理也可以让人如此留意一个人。<br />　　<br />　　　　有一天我去查店，发现小成没来上 班。我们一般上班很晚，下班也相应晚一些，因为生意一般是在下半天。写到这里，我想到有的朋友怀疑一个10几平方的熟食店一个月的利润怎么会有10000 块钱，我想说，生意人人做，关键看你怎么做。我们的每个店周围都有1000户左右的小区，很多是租户，他们不愿开伙。我们每天晚饭时段一般要做50笔生 意，每笔十几元，这样营业额就有700元左右。食品行业一般利润率一半左右。节假日更好做，还不算饭店的生意。当然，我们不用交房租。而且现在的生意也不 如那时了，这是后话。言归正传，我发现小成没来，就问了一下，有员工说她不舒服，今天不来了。小成没来，小徐也没来，我想想反正上午每什么事，应该去看看 小成是不是病得很严重，就向他们问了地址，出来买了点水果，打车往小成住的地方赶去。<br />　　<br />　　　　小成住的地方我没有来过，到了小区门口 我才发现是个比较高档的小区，这里一室一厅的房子一个月要1000块吧，我边走边想，一边又很不解为什么小成会把月收入的一小半用来租房，尤其是想想自己 才刚从私房里搬出不久，现在的房子也不过是1000元左右。正在胡思乱想，忽然发现小徐从一个门洞里出来，急匆匆的样子，我连忙回避在一旁，看着小徐跨上 自行车往店面的方向赶去。<br />　　<br />　　　　忽然在这里看见了小徐的片刻，我的心里产生了一种很奇怪的滋味。一种很不舒服、心头微酸——好像是 吃醋的感觉，同时觉得一阵懊恼。这种感觉没有经过理智，完全好像是自然而然产生的，只是片刻之后，我忽然一阵震惊——难道我如此在意小成？难道我不知不觉 已经爱上了她？这是一个连我自己都吃惊的发现，因为失恋的很久以来，我一直觉得自己好像已经不会爱、不能爱了，有时候我会接触到一些女孩，可是我根本无法 提起感觉。没想到，我爱的感觉会在小成这里复苏？小成可是我一直提防的人啊！<br />　　<br />　　　　刹那之间，我的脑海里风起云涌，万种思路好像被 同时激活：是我失去了芸，把小成作为一个感情的替代者了吗？不是，和小成在一起的感觉完全和芸不同，我们的交流更平和，因而更交融，我也感到更轻松。和芸 在一起完全是被激情和冲动淹没，我们心灵层面的交流显得更少——如果更多的话，也不致有那样的结果；是我因为她病了而怜惜她吗？不，怜悯和爱我是分得清 的，现在我的心里分明有一种心痛而且甜蜜的感觉；难道是见到小徐引起的男人本能的异性排他性不满？也不是，因为我清清楚楚的知道，我决不是一个把身边所有 女孩都看成情人的情圣………你呀你呀，你经历过感情的痛苦，所以你一定要分辨清楚，这是你的真感情，你的真爱吗？你不要糊里糊涂的再带给自己或别人痛苦 了！<br />　　<br />　　　　可是我越是想，小成的笑脸、话语和我们交流的场景等等印象就越清晰，我就越觉得小成是真正适合我的女孩。她的开朗，她的 平和，她的聪明能干，她的善解人意，还有她为我的事业作的努力和成效，当然还有她可爱的、惹人怜惜的样子——这些我以前都没有明显地感觉到，可是今天我感 觉对我来说就象空气一样不可缺少！<br />　　<br />　　　　爱情的幼苗一旦破土，成长的速度真是惊人！在我伫立楼下不到30分钟的之后，我已经感到我 的心胸开始无法承受它的奔涌，必须要向她倾诉才能缓解。可是我不是一个语言表达爱意的能手，尤其是现在这个令人激动的时刻，我觉得我现在激动的别说讲话 了，连一口气都不能顺畅的呼出。我忐忑不安，但又决定立刻向她说出来？就是现在！<br />　　<br />　　　　敲开她的房门的时候，她的脸色有些苍白，可是她的目光那么平静，柔和，一点也不吃惊。我反而更加慌张，不管了，我必须要说—— “我，我……你，你，你病了……我发现我离不开你！我发现我爱你！小成，你听我说，我爱你。我喜欢你。我要给你说，我离不开你了！”<br />　　<br />　　　　那天我说了很多吧？不知道，记不得了。可是结果我却记得，小成拒绝了我。<br /><br />22 原因<br />　　<br />　　　　在感情方面，我是一个脸皮很薄的人。小成不声不响地听完我语无伦次的表白后，低着头平静地摇头表示不能接受，我就 不知道该怎么做了。为什么？因为你和小徐？我问。她摇摇头，没有说话，但我看到她有眼泪流下。呆了一会，我不知该怎么做，一直惶惶惑惑地。最后，我还是离 开了她的住处。再见到小成，是2天后了。她来上班，我早早等在店里，远处一见她的身影，心里就怦怦跳个不停，可是见了她的面又不知该怎么说话。她看见我， 好像脸红了一下，就再没和我说话。说实话，我觉得她是喜欢我的，尤其是回忆到她以前帮我时那种自告奋勇和尽心尽力，我越发这样认为，但是她为什么拒绝我 呢？我想不明白，哎，真不理解女孩子的心思啊。她工作起来还是那样井井有条效率很高。我不愿打扰，就去其他店了。<br />　　<br />　　　　到了4，5 月份，天气有点热了，因为刚过了年，生意是属于淡季。我们希望再热一些，这样人们愿意出来吃饭；不过因为天热，食品行业风险很大，绝对不能出现食品变质， 否则对生意的伤害是很大的。我们这时候一般加紧和饭店联系，因为饭店要量大，而且可以预知，这样风险小。因为这方面一直是小成负责，所以现在淡季反而她会 比较忙，我也比较放心。没想到，不久小成忽然出了事情——她累得晕倒在了店里。<br />　　<br />　　　　当时我接到电话飞速赶到店里，小徐已经把小成扶在椅子上坐着，根据小成的指点正在给她味药。小成坚决不同意去医院，小徐他们也没办法，看见我来了，都像看到救星一样。我不由分说，对小徐说：你出去打车，我们两把她送医院！小徐一出门，我一把抱起小成就走。<br />　　<br />　 　　　小成在边挣边说不去，我根本不停。我知道，不让小徐他会和我急的，但是我也要和小徐公平竞争。很快送到了市八院——离我们那儿打车要30分钟吧，我 们等在旁边，护士就要开始测血压、测血、停诊了，对站在旁边谁都不肯离去的我和小徐说：“女孩子脱衣服你们小伙子也在旁边吗？”没办法，我们只好出去。<br />　　<br />　 　　　我们等在外面，小徐一直不和我说话。大概他感觉出我对小成的意思，他有些戒备吧。大概过了几十分钟吧，医生出来小声说：“成**，同事还是家属？” 我们都站了起来，医生责备的对我们说，小成有先天性心脏病，根本不能工作劳累、激动，更不能感冒。她的心脏已经比普通人大了，因为小时候没有手术治疗，现 在手术的可能性很小，只能静养。<br />　　<br />　　　　这时候我的脑海里如电光火石一般，一下明白了为什么她一累就脸色发白；为什么她不能干体力 活；为什么她怕冷，不能感冒；为什么她住那样的房子——因为医院近；甚至，我也明白了——为什么她拒绝我。小徐显然也不知道这个真相，他愣在一旁一时有些 不知所措。我抢先冲进急诊室，小成也看见了我，她显然也听见了医生叫我们。她的目光平静，柔和，还有——期待。我走到小成身边，抓住她的手，对她轻声说： 我知道了。你该早点告诉我。<br />　　<br />　　　　我和你一起，我们一起面对，好吗？说着把她的手贴在了自己脸上，小成的眼泪刷地下来了。这时候，小徐进来正好看见。护士着急地说，她不能激动的，你们出去！出去！<br />　　<br />　 　　　我终于得到了小成的认可。她后来对我说，其实她开始是觉得我失恋了，很可怜，愿意帮我多做点事，后来就慢慢喜欢上了我；可是后来她发现我在防她，很 让她伤心；她拒绝我一方面是因为这个——女孩子的报复心，她也有；另一方面，她早知道自己的病，也不想拖累我。最后她在病床边倚着我，泪光闪闪的对我说： “你知道吗？一个女孩子在外面，很多时候真累啊。我晕倒的时候，心里想，真去了，别的没什么，就是好后悔啊，我应该和你爱一场啊。我是不是好自私？我真的 是不甘心。”我什么也没说，只是把她紧紧的搂在怀里。<br />　　<br />　　　　小成还告诉我，其实她是出生就有这个病了，他父母亲一直在做生意，家里人其实不缺钱。<br />　　<br />　 　　　家里人让她读书读到高中，考大学已经考上了，但是担心远没人照顾，死活不让她去上。小成很不愿意自己成为家里人的累赘，自己跑了出来打工，决心自己 养活自己。她以前就和家里人耳濡目染，所以对生意很在行。正好我把她招了进来。她说，小徐一直对她很好，她加班小徐一直陪着，可是她知道他们不可能。<br />　　<br />　　　　没几天小成坚持要出院，她说住了多少次院了，还是家里舒服——不就是静养吗。我们搬在了一起。这是我的坚持要求，我说我一定要照顾好你。小徐要辞职，我没说什么同意了。<br />　　<br />　 　　　最后，我和他一起吃了顿晚饭。他深情黯然的说，没想到她有那么严重的病，我就是愣了一会，哎，你先跑进去了。后来喝了点酒，他又说，你比我有钱，她 当然选你。我一般抓住他，对他说，你胡说，小成不是那种看重钱的人。至于钱，小徐，好好努力，你还年轻，你也会有钱，也许比我还有钱。到那时也许你会明白 小成。<br />　　<br />　　　　3年以后的一个偶然的机会，我又在闵行体育公园附近见到了小徐。不过他早已今昔非比，他对我说，他一直没忘我的话，也 自己憋了一口气。辞职了以后，他先是自己骑三轮车从七宝蔬菜批发市场批蔬菜到小区卖，后来自己租了个摊位，后来卖猪肉，再后来自己买了一辆二手嘉宝，自己 去江苏进猪肉卖。3年以后，刚刚挣了50万，在附近买了一套80平方的房子。他最后说，还是要谢谢你。我想起身边和网上很多朋友不停地抱怨房价飞涨，抱怨 没有工作，抱怨辛苦赚不到钱，抱怨这里抱怨那里——其实他们连一个高中都没有读完的小徐都不如！<br /><br />23 乏术<br />　　<br />　　　　我看到有人在怀疑我的经历的真实性，想要向他们争辩，想想又算了。每个人的生活轨迹不同，想法不同，就是向他们证 实了又能怎么样呢？能改变生活现状吗？我还是写下去，就算是经历了这么多的总结吧。但愿有朋友在看的时候能够获得共鸣，获得激励，产生力量，进而改变你们 自己的人生。如果不信，也没什么，因为我们生活不同，而且都要继续。<br />　　<br />　　　　小成和我的关系定了以后，我们会经常长时间的交谈。她读 书很多，尤其喜欢古诗词。我们很多事情都谈的津津有味，可以就一个事件谈上几个小时。现在我在想，谈恋爱谈恋爱，说谈是有道理的吧。她有时候会从梦里醒 来，一声不响地看我半天。我问她为什么，她说她高兴，睡不着。有时候她会流泪，说是想家了。我要和她家联系，她又不让。我不再让她查店，每天带着她看看就 行了。可是她闲不住，对我说，我要闲着就在家耗着，跑这来干嘛？<br />　　<br />　　　　我也没办法。本想生意就这么发展下去，我们也不会担心未来钱的事。可是这时候生意忽然被一件没有料到的事情影响了。<br />　　<br />　 　　　过了几个月，我们这里要听说要修路了，要打通和大马路接上。因为我们有2家店面是属于临时房，肯定会被拆掉。临时商业房拆掉，市政会补一点钱，但是 对我们来说并不划算，因为附近的铺面已经涨价了，客户也熟悉了。我考虑了很久，也没有什么办法。为了不让小成知道担心，我并没有在她面前表现的压力很大。<br />　　<br />　 　　　同时我也暗暗留心小成的病情，我觉得好像越来越严重了。我也到处查找她的这个病的原因，治疗方式和注意事项。大夫给我说的是对的，这个病一般不能结 婚，更禁止生育，因为她的心脏会受不了。一般在婴儿时期手术解决，成人后手术成功率很低。目前除了静养，不能劳累，尤其不能感冒。除此之外，还没有比较好 的治疗办法。我觉得这个障碍比我以前碰到的任何一个都艰巨、困难，有一种一筹莫展的感觉。<br /><br />24 诀别<br />　　<br />　　　　也许很多朋友的感情经历比我复杂的多，但是一直以来我都认为命运待我不公，一直以来我也在问上苍：为什么不给我一 段长一点的真爱，比如说一辈子。直到不久以前，我才解开这个心结（请看后续章节）。看到这一节的标题，朋友们想必已经知到了结果。原谅我写得这么慢，我不 能平静自己的心情。<br />　　<br />　　　　小成自己也有感觉。她有时候会搂住我说，真不想把你交给另一个人，我让她别胡说。有时候她会说，我走了以 后，你一定要找一个好的。你看，她在不停的矛盾。我觉得她真是普通人，一个平凡女孩的心思和想法她都有，正是这些让我觉得她一个让我无比怜惜的人。她的心 跳越来越快，也不规则了。我不再让她跟我去店里，还找了一个阿姨照顾她。有一天，她对我说，不行，我帮你赚了那么多钱，从来没有做过主妇的感觉，你要把钱 都交出来，我要管钱，做做主妇。我笑着把存折、密码、身份证、房产证都交给了她。有什么不能呢？这些我失去了相信还可以赚回。<br />　　<br />　　　 　到了秋天，天气冷了，小成好象更不好了。她脸色不好，心跳过快，我还是把她送进了医院。我觉得一定要把她的家人叫来。她这次没有拒绝，但是她说她先和家 里人打个电话，不让我听。电话不到2天，她的父母亲就赶来了。不知道她和她的父母说了什么，她的父母见了我特别的亲，一个劲在我面前流泪，还说这孩子脾气 太倔了。我们3个人的时候，她的父母亲会象我自己的父母一样，不停的让我注意身体，多吃一些，多穿一些。<br />　　<br />　　　　我真的不愿意回忆那个日子，12月21号，她住进医院2个月半月的时候。其实她走的时候，心脏已经很大了。医生说，这样的病一般是心脏忽停，突然死亡，象她这样的比较少，她也属于比较严重的了。我留着泪在她床前听到最后的一句话是：难受，胸好闷。谢谢。<br /><br />25 礼物<br />　　<br />　　　　我送走了小成。我不知道怎样描述当时我的悲痛欲绝的心情。因为我不能在她的父母面前表现出来，否则她的母亲根本没 有办法控制自己的感情。想起前面有个朋友问我，如果用我的全部身家去换取真爱，我会怎样选择？我想我在这里可以回答了：朋友，如果你的一只手要离你而去， 代价是你的全部身家，你会怎样选择？如果你有犹豫，那答案很简单——这不是你的真爱。我感觉到我的心已经是不再完整的了。<br />　　<br />　　　　在她的遗物中我发现了以前给她的存折，但是已经少了一个房产证——我的别墅的房产证。<br />　　<br />　　　　当然，我还发现了一封信。其实我早就知道她在写遗书，只是不忍在内心承认罢了。她这么聪明的女孩，一定会想到这些的。<br />　　<br />　　　　遗书里说：对不起，我不能和你一起忙下去了。别太难过，以后就是你要经常想我。遇见你很好，我本来害怕就这样糊里糊涂地走了，现在知道我的生命比我以前的想法好多了，我不那么遗憾了。就是会带给你和我父母痛苦……<br />　　<br />　　　　……<br />　　<br />　 　　　你要坚强，要挺住，你还要走很长的路吧。我把你的别墅给卖了——这是你给另外一个女孩买的，是吗？我做主了，你会怪我吗？因为我们的熟食店不是长久 之计，你也不会甘心一辈子卖肉，是吧？我去定了一个商铺，首付就用别墅卖的钱，剩下的2个店，卖了吧，还有拆迁的店，拿到了补偿，和我们（我用了我们，你 愿意吗？）以前的钱，不少了吧，别乱花。然后到我家去，和我爸交流一下，也许你能够找到机会。他会帮你的，我和他们说过了。你应该有更大的事业。<br />　　<br />　　　　如果我这样替你做主，真的赚了钱，就算是我留给你的礼物吧。亏了，就当我以前为你忙碌卖命，我应得的钱我又拿走了。呵呵，我不想要钱，只想你过的快乐一些，就看你自己的努力了……<br /><br />26 转型<br />　　<br />　　　　小成的事情之后，我的生意大不如前了，可能也和我的心情有关。2003年1月底，我卖掉了我的2个店。又过了3个 月，我拿到了市政补助的资金。加上我手里的钱，一共109.5万。我的别墅，小成以8500左右的单价卖出，用80万左右做首付买了一个300平方左右的 商铺，但是要4个月以后交房。这个地方的商铺，近一年后我在2003年12月时以每平方每天7元出租，一个月能收回6万多块钱，扣除还款我每月还能剩余4 万块钱。这已经基本相当于我以前4个店一个月的盈利了，今年年初，我让评估师估了一下价格，已经到19000左右每平方了。<br />　　<br />　　　　小成，你又一次让我见识了你的聪慧。<br />　　<br />　 　　　想到以前小成每天那么开心，那么充实的样子，现在我明白了：其实她一直处在生命随时会停止的阴影下，所以她的生活态度反而那么豁达，开朗，而又忙碌 充实。这才是生命本来应该有的态度。我也应该这样生活。而且我不能仅靠收租为生。我又开始想着新的事业了，我决定如小成所说，到她家里去一次。我和她父母 联系了一下，他们很热情，让我随时都可以去。我虽然比以前多了100万现金，可是我心里面一点也不轻松，因为这一次我面临着从饮食业到其他行业的转型，其 实也是一种重头再来。<br />　　<br />　　　　2003年4月，我去了小成家。小成的父母在做皮革生意，他们一直在为国外的汽车和家具提供定制的真皮 座椅和包垫。真没想到，他们生意做得很大。而且他们那里家家是作坊，户户是工厂，浙江真是让我见识了民营经济的力量。和她的父母交流之后，我才知道自己这 100万现金根本不够做这个方面。她家人对我说，可以提供资金帮助，我也可以和他们合股做，我愿意留下来也行。但是我拒绝了。我有种感觉，这不是我要找的 那个行业，另外我还是愿意自己奋斗。她的父母认了我为干儿子，我走的那一天，在她家吃饭，我喝醉了。她的母亲又哭了。<br /><br />27 尝试<br />　　<br />　　　　我最终没有接受小成父母的美意，不知道远在天国的小成知道我的这个选择后是满意还是不满意。我想她是理解我的吧， 我一直那么独立，一直以为自己的事情要自己做。虽然没有做她父母的那个行业，但是她父母临走时说的一句话倒是让我思索很久。她父母说，现在他们的产品慢慢 地国内的汽车厂家也开始要货了，这是不是说明这个大行业内还是有机会的呢？<br />　　<br />　　　　2003年4月底我回到上海以后，又以70万总价 70%贷款买了一套商品房，毕竟自己也要住的，付房租不如付贷款了。然后我就主要在考虑下一步的努力方向了。饮食业我是不再考虑了，可能有点伤心的原因在 里面吧。我希望有个崭新的事业，崭新的我。IT业我也认为不好，原因是我看到这几年身边的年轻人开公司有80%选择IT业，竞争太激烈了，而且经营状况并 不理想，我估计还要至少几年淘汰这个行业才会正常。电子加工，服务业什么的，我都考虑过。想来想去比较了很长时间，我决定尝试代理国外品牌做汽车机油和高 档润滑油。我觉得小成的父母给我的启示还是有几分道理的：国内的汽车市场现在才刚刚开始，还会有10几年的高速发展期，这个行业就像10几年前做计算机行 业一样，是值得我投入的。<br />　　<br />　　　　我的习惯是：想法一经决定，行动决不迟疑。5月初，我找好了办公地点，开始招人；5月底，办公家具 和人员进场；6月份，我拿到了营业执照和发票。我开始熟悉这个市场的渠道、客户、产品。那个时候我几乎每天都去吴中路，每天都上网查资料，每天都向国外写 电子邮件询问产品性能，报价，索要样品等等信息。到了8月份的时候，我公司终于定下了一个全权代理和4项一级代理的产品。然后我开始在江浙一带的城市里不 停地奔波，寻找、拜访代理和零售商，以及和他们洽谈。我是这样认为，以我目前的实力在上海的这个行业里撕开口子太难了，我应该先从周边入手。开始我是租车 开，后来10月份的时候，我自己贷款卖了一辆马自达-福美来。我的现金我认为还是应该留着公司发展用。<br />　　<br />　　　　虽然2003年下半年 我做的很辛苦，但是到了年底一算，我的这个公司并没有赚钱，反而亏损了12万？平均每个月2万的亏损。可能有的朋友会问，汽车行业2003年是最热了，你 怎么还亏了呢？这个亏损我却一点也没有心痛和意外，一方面是因为我已经经历了很多生意上的风雨，更重要的是因为这都在我的预想之内。 我这种业务员谁敢 要？<br />　　<br />　　　　做生意有很多种，有的人是以长时间积累的技巧、经验、关系和渠道挣钱？这是以时间换空间；有的人是一招鲜、吃遍天？这是 垄断或是以技术制胜；还有的人是用钱换取技巧、经验、关系和生意流通的渠道，这是以空间换时间？我就是这么做的。我刚进入这个行业，经验、关系、客户基础 和渠道都不行，一进来就赚钱是不太可能的。但是更不能害怕花钱而停止脚步，生意一定要走出去，开发的流程不能停止。这半年来，虽然我出货不多，远远不能养 活公司，但是我一是组织了团队，熟悉了团队，锻炼了团队的力量；二是建立了销售渠道，江浙一带我们开发了70多家下级代理，我们让他们试用先打开市场，还 要熟悉竞争对手，客户公关等等，这一切都进展顺利。2003年汽车销售是很热，但是我认为我们这一块属于汽车保养和维修类会有一个滞后期。我们2003年 底的业绩已经大大好于8月份。对于即将到来的2004年，我胸有成竹。<br /><br />28 归宿<br />　　<br />　　　　公司的实际经营果然是按照我的预想发展。2004年1月份，我们的销量获得了突破，我们已经有些许的盈利了。2月 份因为过节，生意比1月份下降5%.3月份获得30%的大幅增长，这样我们已经净盈利4万了。我加大了激励力度，我的团队志气如虹，一个个宣称今年底要比 3月份的销量翻番。我知道，这是有可能的。因为我们前期搭就的平台完全可以承载这个销量—— 70~ 100个有规模的下级代理，每个月每个代理的销量达 到8000 ~ 10000元并非难事。<br />　　<br />　　　　我的公司里招了几个上海的女孩子。原来我很少和上海女孩打交道——其实我就很少和女 孩打交道，阿芸和小成而已。但是通过和我们公司的上海女孩沟通，合作，熟悉之后，她们让我以前对上海女孩的看法大为改观——我以前是心里有偏见了。她们初 看打扮时髦而又干练，说话快而利落，脑子清楚毫不拖泥带水，对价格非常敏感，你以为她们很势力很在乎金钱。是的，对普通人陌生人是的。可是交往久了，我觉 得她们工作尽职尽责——加班从来都是自己要求的，自己的事自己做完；做事很有责任心——对公司的财物，以及用水用电完全像对自己家的一样；很重感情——我 们公司有不只一个女孩为了男朋友、同学而付出了金钱，时间，甚至家庭的埋怨。也许，外人对他们的误解只是因为大家做事情的方法不同罢了，毕竟，人更重要的 是心灵和思想。<br />　　<br />　　　　可是我的感情生活依旧空白。我觉得现在的我不可能再发展一段恋情——在我的心里小成一刻也不曾离开。每天我都 会看小成给我的那封信，那信其实写得很长。看了之后我总觉得她离我不远，我的心里也觉得很温暖。小成，你的心灵和思维脱离了肉体的羁绊，应该飞的更快更远 了吧。这段时间由于小成的离去，我每天努力的工作回家之后，会觉得失去了归宿感。有时候我会忽然想，我来这里干什么？哪里是我的归宿呢？我努力奋斗，努力 挣钱，挣了很多钱又怎么样呢？<br />　　<br />　　　　这是我第一次考虑这个问题——金钱对我意味着什么。以前生存和事业的压力，以及一个接着一个的 打击和磨砺让我始终无暇顾及这个具有终极意义的话题。是啊，虽然我现在还不是很有钱，但是我有钱了以后怎么办？以前我国传统的精神也只讲过：君子爱财，取 之有道。可是如果取到了有怎么样呢？原谅我的陋学，我没有看到这方面的阐述。很多中国人有钱了以后，生活奢靡、大讲排场、意志低落、胡乱花钱，很多还丧失 了生活的动力，多少人在贫*时坚持的修身养性，成仁取义，在富贵来临时烟消云散。更有很少的人捐钱给慈善事业和救助他人，我想这一切也和我们的传统文化有 关。我坚决不要这样的生活。可是为什么西方人有那么多有钱人，给慈善事业捐钱呢？而且他们一些穷人也有给慈善事业捐钱的习惯呢？<br />　　<br />　　 　　一个偶然的机会我看到了《圣经-马太福音》，里面的阐述让我如梦初醒。那里面说，虽然富人因为上帝给予的机会和能力获得了财富，但是那财富并不是富人 的，只是上帝因为看到财富由于在富人手中增值而让那些富人代为保管的，一旦有需要，应该把财富还给所有人。这就是我所要寻找的原因。我于是如饥似渴地每天 看《圣经》，那里面的文字让我的安静，安定，安心。在这里面，我找到了和我心灵合拍的仁爱心、慈悲心、谦卑心和使命心。<br />　　<br />　　　　我进一步了解到我以前毫无信仰，或者以自己为信仰时的无知、自以为是、狂妄自大和故步自封。朋友，也许你和我信仰不同，请不要在这里争执孰是孰非。也许只有每个人只有经历苦苦思索和重重磨砺，才能接近你所认为的真理。最终我在这里找到了归宿，也找到了问题的答案。<br />　　<br />　　　　我在徐家汇教堂受了洗，成为主的信徒。受洗之后，我每周都要去教堂坐坐。我知道，小成一定会成为天使，主一定也会指引我。我以前认为的爱是我前进的动力，这爱字，今天我才体会到更广泛更宏大的意义。它已经成为了我的使命。<br /><br />29 疑问<br />　　<br />　　　　2005年的1月，我在徐家汇附近，漕溪路旁的那块大空地上停好车出来的时候，忽然意外地发现了芸和她的男朋友 ——现在应该已经是老公了吧，因为他们手里还抱着一个2岁大小的孩子。他们显然也发现了我，但是显然双方都有点错谔。我先打招呼，笑着说，这是你们的孩子 啊？真漂亮！我们之间的气氛一下融洽了。交谈中我得知，他们2001年底结婚，2002年底有了这个可爱的女儿。他们的生活不错，买车买房也是2004年 的事。我衷心的祝福他们。<br />　　<br />　　　　他们问我的情况，我也告诉了他们，我也得到了他们的祝福。我们还约好下次一起吃饭。<br />　　<br />　 　　　我曾经以为，如果我再见到芸，我绝对不会保持平静，甚至我不知道怎么见她。可是我做到了，我不仅做到了心情平静，还做到了如常交流，更做到了绝对真 心地祝福他们，理解他们。经历了那么多，看到了那么多，失去了那么多，我也得到了那么多。穿破围墙，我的心灵获得了更大的空间和放飞的舞台。<br />　　<br />　 　　　我公司的生意到了2004年的9月份已经能够保持每个月70万左右的营业额，12万左右的利润了。10，11，12三个月我们又在原来的基础上开拓 了30家左右的零售店面，基本能够实现每个月15万左右的利润。到年底的时候，我手上的资金加上商铺出租收入，公司原有资金和盈利，已经达到了180万。 我的一个专门做公司投资的朋友说，像我们这样的小公司，只要我能保持公司连续盈利36个月，那么公司的价值一般就是公司60个月的利润总和。他笑着说，算 算你的公司也值四五百万了吧，如果你保持现在的盈利状况。<br />　　<br />　　　　我的心中不相信“保持现状”这句话，以前的经历屡屡说明这一点：没有人能够保持现状。<br />　　<br />　 　　　只有改变现状，才能保持不败。可是我经过粗粗一算之后，心里产生了疑问。因为我要提升目前的经营水准，势必重新打造一个更大更快速的经营平台，管理 要上新台阶，还要进行更严密更系统的市场推广计划——我叫它“重生”计划。这个计划我粗粗算了一下，要求我投入300万左右的资金。我陷入了思考：这样的 计划风险是否太大？如果失败，我会失去现有的所有公司盈利和手上资金，还有我部分的不动产。那么我应该保持现状，这也没什么不好，这样总有其他竞争者先 做，然后我再静观事变吗？如果我实施“重生”计划，完成后如果发挥100%的效果，我9~10个月可以收回成本，公司随后还有应该有更大的发展。如果发挥 70%的效果，我15~18个月可以收回成本。如果发挥50%以下的效果，那就是失败。<br />　　<br />　　　　可是奋斗这种东西已经进入了我的血 液，变成了我的基因。我实在不能忍受自己什么也不做而失去这个成为自己领域内前几位的机会。为主，为小成，为我，为我所有的朋友和家人，还有我的员工，我 决定放手一博。我把买的商品房（现在已经涨价了，达到150万了）和汽车做了二次抵押，贷了120万资金，这样我手上的资金已经有300万了。<br />　　<br />　　　　2004年12月21日夜里11点，我终于完成了17万字的详细的“重生计划”的策划报告。我没有忘了这一天，我一定要在这一天完成这报告。<br />　　<br />　 　　　半夜里我开车从主干道下来，到了以前我和小成三号店的旧址——她是在这里爱上我，我也是在这里爱上她的。这里一切已经今昔非比，再也见不到路边的临 时房了，全部都是宽宽的马路和人行道，谁也不会再关心这里曾经发生的事情了。我停下车，下车来靠着车点燃一只烟。看着天边半满的月亮，我清清楚楚地看见了 小成妍妍的笑脸。我也笑了，只是脸上已经流满了泪水。<br />　　<br />　　　　朋友们，我在上海的奋斗岁月——结束了吗？不，我心里知道，一切才刚刚开始！<br /><br />30 经验（大结局）<br />　　<br />　　　　下面是我自己的感悟和我的经验，权做参考：<br />　　<br />　　　　1，人生就是投资和收益的人 生。如果你有钱，就投入金钱；如果你没有金钱，而有经验和能力，就投入经验和能力；如果你既没有金钱，也没有经验和能力，但是你有热情、勤奋和努力，那就 投入热情、勤奋和努力。如果你既没有金钱，也没有经验和能力，连热情、勤奋和努力也没有，那就别想这些了。<br />　　<br />　　　　2，比赚钱更重要的是找到你自己的赚钱动力；<br />　　<br />　　　　3，比金钱重要的是时间，比时间重要的是时机，比时机重要的是你要抓住时机的决心，动力和准备！<br />　　<br />　　　　4，别好高骛远，机会一般都在你看不起眼的角落里藏着；<br />　　<br />　　　　5，舍得投入；<br />　　<br />　　　　6，决定一下，行动要快；<br />　　<br />　　　　7，永远尽可能准备好资源，随时准备抓住机会，要快！<br />　　<br />　　　　8，待人以诚，对人以善。有时候，机会是别人给的；<br />　　<br />　　　　9，给别人的比别人期待的多一些（这是我抄李嘉诚的，我很喜欢）；<br />　　<br />　　　　10，赚钱有个普遍的法则：多做，快做，动脑筋变着花样做，就是别跟着别人一样做。<br />　　<br />　　　　11，合理规划有钱以后的日子，会让你走的更远；<br />　　<br />　　　　12，有信仰，有原则，有爱心。<br /><img src ="http://www.cppblog.com/ngaut/aggbug/11133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-08-11 16:56 <a href="http://www.cppblog.com/ngaut/archive/2006/08/11/11133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1.要有主动精神 2.把小事当大事做</title><link>http://www.cppblog.com/ngaut/archive/2006/08/04/10832.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 04 Aug 2006 01:28:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/08/04/10832.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/10832.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/08/04/10832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/10832.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/10832.html</trackback:ping><description><![CDATA[主动精神范围很广，主动思考，主动争取自己应得的东西，主动做事等等<br /><br /><br />把小事当大事做说的是一种认真，严谨的态度<img src ="http://www.cppblog.com/ngaut/aggbug/10832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-08-04 09:28 <a href="http://www.cppblog.com/ngaut/archive/2006/08/04/10832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做好小事就做好了大事</title><link>http://www.cppblog.com/ngaut/archive/2006/07/14/9907.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 14 Jul 2006 13:50:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/07/14/9907.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/9907.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/07/14/9907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/9907.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/9907.html</trackback:ping><description><![CDATA[天下无小事<img height="19" src="http://www.cppblog.com/Emoticons/red_smile.gif" width="19" border="0" />，能把小事做好的人也是牛人<img src ="http://www.cppblog.com/ngaut/aggbug/9907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-07-14 21:50 <a href="http://www.cppblog.com/ngaut/archive/2006/07/14/9907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于目标的一点想法</title><link>http://www.cppblog.com/ngaut/archive/2006/07/14/9906.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 14 Jul 2006 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/07/14/9906.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/9906.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/07/14/9906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/9906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/9906.html</trackback:ping><description><![CDATA[
		<p>做事一定要有目标。眼睛要盯着目标，否则很容易失去方向。</p>
		<p>
				<br />试看以下逻辑：</p>
		<p>要达到目标需要那些条件，以开公司为例，至少需要下面的几个条件：<br />1.市场(如果没有市场，开公司就是烧钱)<br />2.资金(这是必然的，没有启动资金的公司只是一个外壳，但是这不是最重要的，没有资金可以想办法融资)<br />3.人才，公司启动后需要人才来推动公司的发展<br />4.管理，服务等等</p>
		<p>为了满足以上条件，我们需要：<br />1.用我们的眼睛去发现市场<br />2.融资<br />3.招聘，挖掘人才等等<br />等等</p>
		<p>以招聘人为例，我们要招一个怎样的人，于是我们对此提出自己的要求：<br />1.有一定的基础(视男女，专业而定)<br />2.有较好的悟性或者有坚韧不拔的毅力<br />3.认真，谨慎(一个程序员应该具备的素质)</p>
<img src ="http://www.cppblog.com/ngaut/aggbug/9906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-07-14 21:49 <a href="http://www.cppblog.com/ngaut/archive/2006/07/14/9906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实习第14天，惊叹Borland C++ for DOS的一个bug</title><link>http://www.cppblog.com/ngaut/archive/2006/07/14/9837.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 14 Jul 2006 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/07/14/9837.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/9837.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/07/14/9837.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/9837.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/9837.html</trackback:ping><description><![CDATA[
		<p>内嵌汇编的代码：<br /></p>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">#define</span>
				<span style="COLOR: #000000"> ASM   _asm</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />ULONG msecond(</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000">)        </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">毫秒数</span>
				<span style="COLOR: #008000">
						<br />
						<img id="Codehighlighter1_48_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_247_Open_Text.style.display='none'; Codehighlighter1_48_247_Closed_Image.style.display='inline'; Codehighlighter1_48_247_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_48_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_247_Closed_Text.style.display='none'; Codehighlighter1_48_247_Open_Image.style.display='inline'; Codehighlighter1_48_247_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span id="Codehighlighter1_48_247_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_48_247_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    UCHAR h;    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">小时</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    UCHAR m;    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">分</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    UCHAR s;    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">秒</span>
						<span style="COLOR: #008000">
								<br />
								<img id="Codehighlighter1_97_164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_164_Open_Text.style.display='none'; Codehighlighter1_97_164_Closed_Image.style.display='inline'; Codehighlighter1_97_164_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_97_164_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_164_Closed_Text.style.display='none'; Codehighlighter1_97_164_Open_Image.style.display='inline'; Codehighlighter1_97_164_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ASM</span>
						<span id="Codehighlighter1_97_164_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_97_164_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV AH, </span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        INT 1AH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (h), CH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (m), CL<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (s), DH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    printf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">time: %d:%d%d\n</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">, h, m, s);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> ((h </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">60</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">60</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> (m </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">60</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> s);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />写成这样就错了：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> ASM   _asm</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />ULONG msecond(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">毫秒数</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_48_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_263_Open_Text.style.display='none'; Codehighlighter1_48_263_Closed_Image.style.display='inline'; Codehighlighter1_48_263_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_48_263_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_263_Closed_Text.style.display='none'; Codehighlighter1_48_263_Open_Image.style.display='inline'; Codehighlighter1_48_263_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_48_263_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_48_263_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    UCHAR h;    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">小时</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    UCHAR m;    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">分</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    UCHAR s;    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">秒</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    ASM<br /><img id="Codehighlighter1_106_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_180_Open_Text.style.display='none'; Codehighlighter1_106_180_Closed_Image.style.display='inline'; Codehighlighter1_106_180_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_180_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_180_Closed_Text.style.display='none'; Codehighlighter1_106_180_Open_Image.style.display='inline'; Codehighlighter1_106_180_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_106_180_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_106_180_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">太夸张了吧</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        MOV AH, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        INT 1AH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (h), CH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (m), CL<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        MOV (s), DH<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">time: %d:%d%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, h, m, s);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> ((h </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">60</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> (m </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> s);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>注意上面大括号的位置。必须紧接在ASM之后<img height="19" src="http://www.cppblog.com/Emoticons/teeth_smile.gif" width="19" border="0" />，老大作出的总结是：实践出真知，汗<br /><img src ="http://www.cppblog.com/ngaut/aggbug/9837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-07-14 10:37 <a href="http://www.cppblog.com/ngaut/archive/2006/07/14/9837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Visual Studio .NET 2003 安装时的1309错误，留着备用^_^</title><link>http://www.cppblog.com/ngaut/archive/2006/07/04/9398.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 04 Jul 2006 13:45:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/07/04/9398.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/9398.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/07/04/9398.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/9398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/9398.html</trackback:ping><description><![CDATA[Visual Studio .NET 2003 安装时的1309错误<div id="excerpt_&lt;$BlogItemNumber$&gt;"><blockquote>ThreeWater 发表于 06-04-27 09:02:00</blockquote></div><div id="content_&lt;$BlogItemNumber$&gt;"><div align="left"><blockquote>最近想学习c++，好不容易从网上下载到Visual Studio .net 2003，可是在安装的过程中却出现了1309错误： <br /><br /><br />Visual Studio .NET Enterprise Architect 2003 - CHS: [2] : ERROR: 错1309。读取文件 i:\Win\Microsoft.NET\Framework\URTInstallPath\zh-CN\AutoProxy.xml 时出错。请验证文件是否存在以及是否可以访问它。<br /><br /><br />安装好多次均出现这样的错误提示，上网查阅，给出的建议均是盘不好，要重新下载。这么大的文件，网上不好找啊！<br /><br /><br />后来仔细察看给出的错误提示，发现在i:\Win\Microsoft.NET\Framework\URTInstallPath\下没有zh-CN目录，只有zh-CNS目录，难怪它提示找不到文件：AutoProxy.xml 。后来在CD2中发现有i:\Win\Microsoft.NET\Framework\URTInstallPath\zh-CN\目录，于是在安装中出现错误提示后，保留画面，换盘CD2，按“重试”按钮，嘿嘿，安装进度条又开始跑起来了。一切OK！<br /><br /><br />TIPS：在有的电脑上当安装完第一张盘后，会提示你换盘。但在有的电脑上不会提示你换盘，这时候你就得手动换盘了。 </blockquote></div></div><img src ="http://www.cppblog.com/ngaut/aggbug/9398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-07-04 21:45 <a href="http://www.cppblog.com/ngaut/archive/2006/07/04/9398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天明白了以前看的一个网络程序里面的一点知识，以太网中帧的大小通常是1514</title><link>http://www.cppblog.com/ngaut/archive/2006/07/02/9285.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 02 Jul 2006 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2006/07/02/9285.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/9285.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2006/07/02/9285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/9285.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/9285.html</trackback:ping><description><![CDATA[记得程序里面定义了一个1514字节的数组，实在不明白为什么是1514，现在终于明白了。又学到了一点东西，高兴ing～<img src ="http://www.cppblog.com/ngaut/aggbug/9285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2006-07-02 15:10 <a href="http://www.cppblog.com/ngaut/archive/2006/07/02/9285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>