<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>范晨鹏的博客（测试版）</title>
	<atom:link href="http://www.labfan.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.labfan.com</link>
	<description>IT生态，IT职业生涯，程序设计，开源欣赏</description>
	<lastBuildDate>Mon, 09 May 2011 03:03:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>在 windows 下建立unix shell 环境</title>
		<link>http://www.labfan.com/2011/04/19/%e5%9c%a8-windows-%e4%b8%8b%e5%bb%ba%e7%ab%8bunix-shell-%e7%8e%af%e5%a2%83/</link>
		<comments>http://www.labfan.com/2011/04/19/%e5%9c%a8-windows-%e4%b8%8b%e5%bb%ba%e7%ab%8bunix-shell-%e7%8e%af%e5%a2%83/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 09:20:50 +0000</pubDate>
		<dc:creator>kusky</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.labfan.com/?p=82</guid>
		<description><![CDATA[使用 Cygwin 建立 SSH 通道：桌面 Unix 仿真程序 链接：http://www.open.collab.net/scdocs/ddSSHGuideCygwin.html.zh-cn Cygwin 是 windows 下的 linux shell 仿真环境。为什么要在 windows 上用 Cygwin 建立仿真环境呢？一个原因是，远程登陆windows进行文件操作太麻烦了。就拿最简单的编辑文本文件来说，使用远程桌面对网络要求高，在广域网环境下比较困难。并且在 windows xp 下 只允许一个人登陆；而windows下没有像 vi 那样的命令行编辑器。于是telnet,ssh等命令行工具不能派上用场。 当然，如果只是简单的应用，还是用 windows远程登陆，telnet 比较方便。 &#160;]]></description>
			<content:encoded><![CDATA[<p>使用 Cygwin 建立 SSH 通道：桌面 Unix 仿真程序</p>
<p>链接：<a href="http://www.open.collab.net/scdocs/ddSSHGuideCygwin.html.zh-cn">http://www.open.collab.net/scdocs/ddSSHGuideCygwin.html.zh-cn</a></p>
<p><a href="http://www.cygwin.com/" target="_blank">Cygwin</a> 是 windows 下的 <a href="Unix shell" target="_blank">linux shell</a> 仿真环境。为什么要在 windows 上用 Cygwin 建立仿真环境呢？一个原因是，远程登陆windows进行文件操作太麻烦了。就拿最简单的编辑文本文件来说，使用<a title="如何使用Windows XP Professional 的远程桌面功能" href="http://support.microsoft.com/kb/315328/zh-cn" target="_blank">远程桌面</a>对网络要求高，在广域网环境下比较困难。并且在 windows xp 下 只允许一个人登陆；而windows下没有像 <a title="screen-oriented text editor" href="http://pubs.opengroup.org/onlinepubs/007908799/xcu/vi.html" target="_blank">vi</a> 那样的命令行编辑器。于是telnet,<a title="open ssh client" href="http://en.wikipedia.org/wiki/PuTTY" target="_blank">ssh</a>等命令行工具不能派上用场。</p>
<p>当然，如果只是简单的应用，还是用 windows远程登陆，telnet 比较方便。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/19/%e5%9c%a8-windows-%e4%b8%8b%e5%bb%ba%e7%ab%8bunix-shell-%e7%8e%af%e5%a2%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache 源码剖析之 content handlers</title>
		<link>http://www.labfan.com/2011/04/14/apache-%e6%ba%90%e7%a0%81%e5%89%96%e6%9e%90%e4%b9%8b-handle/</link>
		<comments>http://www.labfan.com/2011/04/14/apache-%e6%ba%90%e7%a0%81%e5%89%96%e6%9e%90%e4%b9%8b-handle/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 09:01:12 +0000</pubDate>
		<dc:creator>kusky</dc:creator>
				<category><![CDATA[开源，标准]]></category>

		<guid isPermaLink="false">http://www.labfan.com/?p=73</guid>
		<description><![CDATA[1  handle 概述 2 hanle 处理流程 ap_invoke_handler(r); 1 handle 数据结构 2 责任函数 AP_IMPLEMENT_HOOK_RUN_FIRST(int, handler, (request_rec *r), (r), DECLINED) AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup), (r, lookup), DECLINED) 3 　示例:  proxy_handle ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST); ap_run_handle proxy_detect(request_rec *r) proxy_run_scheme_handler(r, worker, conf, &#8230; <a href="http://www.labfan.com/2011/04/14/apache-%e6%ba%90%e7%a0%81%e5%89%96%e6%9e%90%e4%b9%8b-handle/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1  handle 概述</p>
<p>2 hanle 处理流程</p>
<p>ap_invoke_handler(r);</p>
<p>1 handle 数据结构</p>
<p>2 责任函数</p>
<p>AP_IMPLEMENT_HOOK_RUN_FIRST(int, handler, (request_rec *r),<br />
(r), DECLINED)</p>
<p>AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup),<br />
(r, lookup), DECLINED)</p>
<p>3 　示例:  proxy_handle</p>
<p>ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST);</p>
<p>ap_run_handle</p>
<p>proxy_detect(request_rec *r)</p>
<p>proxy_run_scheme_handler(r, worker, conf, url, NULL, 0);</p>
<p>参考资料：</p>
<p>http://httpd.apache.org/docs/current/en/handler.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/14/apache-%e6%ba%90%e7%a0%81%e5%89%96%e6%9e%90%e4%b9%8b-handle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网站淘金之路之一－－域名＋虚拟主机，百元投资建个全功能独立博客</title>
		<link>http://www.labfan.com/2011/04/12/create_your_own_blog_with_low_pay/</link>
		<comments>http://www.labfan.com/2011/04/12/create_your_own_blog_with_low_pay/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 09:11:00 +0000</pubDate>
		<dc:creator>kusky</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[独立IP]]></category>

		<guid isPermaLink="false">http://www.labfan.com/?p=63</guid>
		<description><![CDATA[100块钱买一个空间，搭个便宜的域名。就可以搭建一个自己的博客空间。不用担心删帖，屏蔽的问题。还能获得广告费收益。何乐而不为？ 就像本博客一样。这个像模像样的小窝只花了一百块钱。服务提供商是衡天主机。 1、wordpress 的兴起。 wordpress 是一个个人博客软件包。可以让不懂任何技术的人五分钟之内建好自己的博客。wordpress 在2008年被 infoworld 评为 最有价值开源软件（2008 Best of Open Source Awards） 之后，一路走火。于是逐渐有了专门针对wordpress 的网站服务器提供商。由于博客对服务器的性能要求比较低，服务器提供商乐于提供这样的服务。于是，过于动辄上千元一年的博客服务器租用服务，现在降到了百元左右。 2、服务器空间。 服务器空间，主要考虑空间大小、流量、访问速度、稳定性等几个因素。一般的，刚开始不需要太大的空间。几百兆就够了。流量则因人而异。服务商会告诉你他们的服务器提供多大的空间每月多大的流量。你需要时时关注流量是否用完。 空间和流量是可以量化的，而稳定性和速度就不容易判断了。需要多多打听，多多积累经验。一般的，主机供应商越大，稳定性越好。当然，价格也就越贵。 3、域名： 域名价格不等，有的服务商会送域名。一般的一个新的域名国内１００块钱左右，国外十几美元。不过国外的域名终究要便宜些的。比如 通过 google 注册 godaddy 通常也就 6、7美元。而有时更会有一些给力的活动－－比如这几天 godaddy搞活动，输入优惠码，一个域名立刻变成 1美元。 &#160; &#160; &#160; &#160; 我现在用的这个域名，花了 0.99美元。 4、用 google adsense 创造收益 &#8230; <a href="http://www.labfan.com/2011/04/12/create_your_own_blog_with_low_pay/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>100块钱买一个空间，搭个便宜的域名。就可以搭建一个自己的博客空间。不用担心删帖，屏蔽的问题。还能获得广告费收益。何乐而不为？</p>
<p>就像本博客一样。这个像模像样的小窝只花了一百块钱。服务提供商是<a title="衡天小张,资深WordPress" href="http://hengtian.org/" target="_blank">衡天主机</a>。</p>
<p>1、wordpress 的兴起。</p>
<p>wordpress 是一个个人博客软件包。可以让不懂任何技术的人五分钟之内建好自己的博客。wordpress 在2008年被 <a title="info world" href="http://www.infoworld.com" target="_blank">infoworld</a> 评为 最有价值开源软件（<a href="http://www.infoworld.com/d/open-source/best-open-source-software-awards-2008-785" target="_blank">2008 Best of Open Source Awards</a>） 之后，一路走火。于是逐渐有了专门针对wordpress 的网站服务器提供商。由于博客对服务器的性能要求比较低，服务器提供商乐于提供这样的服务。于是，过于动辄上千元一年的博客服务器租用服务，现在降到了百元左右。</p>
<p>2、服务器空间。</p>
<p>服务器空间，主要考虑空间大小、流量、访问速度、稳定性等几个因素。一般的，刚开始不需要太大的空间。几百兆就够了。流量则因人而异。服务商会告诉你他们的服务器提供多大的空间每月多大的流量。你需要时时关注流量是否用完。</p>
<p>空间和流量是可以量化的，而稳定性和速度就不容易判断了。需要多多打听，多多积累经验。一般的，主机供应商越大，稳定性越好。当然，价格也就越贵。</p>
<p>3、域名：<br />
域名价格不等，有的服务商会送域名。一般的一个新的域名国内１００块钱左右，国外十几美元。不过国外的域名终究要便宜些的。比如 通过 <a href="http://www.google.com/#q=godaddy" target="_blank">google 注册 godaddy</a> 通常也就 6、7美元。而有时更会有一些给力的活动－－比如这几天 godaddy搞活动，输入优惠码，一个域名立刻变成 1美元。</p>
<div id="attachment_85" class="wp-caption alignleft" style="width: 310px"><a href="http://www.labfan.com/wp-content/uploads/2011/04/1dollor.png"><img class="size-medium wp-image-85" title="1dollor" src="http://www.labfan.com/wp-content/uploads/2011/04/1dollor-300x95.png" alt="godaddy  domain .just $1" width="300" height="95" /></a><p class="wp-caption-text">godaddy 促销的一美元域名</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>我现在用的这个域名，花了 0.99美元。</p>
<p>4、用 <a title="google adsense 为您创造收益" href="http://adsense.google.com/" target="_blank">google adsense </a>创造收益</p>
<p>其它：</p>
<p>1、域名解析：</p>
<p>GWF有时会把国外的域名解析服务器(<a title="dns　工作原理" href="http://blogold.chinaunix.net/u3/93994/showart_1943436.html" target="_blank">Domain Name Server</a>)屏蔽。导致网站无法访问。另外，国外域名解析也会比国内的慢一些。所以，申请域名后，把 dsn解析放在国内的服务器比较合适。国内有很多这种免费的服务，我使用的是 <a title="dnspod" href="https://www.dnspod.cn/" target="_blank">dnspod</a>.</p>
<p>2 关于IP。</p>
<p>其实刚建站是不需要关注独立IP这个问题的。只不过在这里发发感慨。在国内，一个独立IP是很贵的。每个月 5000RMB，而且只允许公司或组织申请。（个人是不能申请的。）而在国外，独立IP是很便宜的。比如，在GODADDY, 一个月３美元，折合人民币２０块钱。</p>
<p>有些感慨天朝的物价水平了～～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/12/create_your_own_blog_with_low_pay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>面试题目解析－－TCP的状态字。</title>
		<link>http://www.labfan.com/2011/04/11/%e7%99%be%e5%ba%a6%e9%a2%98%e7%9b%ae%e8%a7%a3%e6%9e%90%ef%bc%8d%ef%bc%8dtcp%e7%9a%84%e7%8a%b6%e6%80%81%e5%ad%97%e3%80%82/</link>
		<comments>http://www.labfan.com/2011/04/11/%e7%99%be%e5%ba%a6%e9%a2%98%e7%9b%ae%e8%a7%a3%e6%9e%90%ef%bc%8d%ef%bc%8dtcp%e7%9a%84%e7%8a%b6%e6%80%81%e5%ad%97%e3%80%82/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 15:04:49 +0000</pubDate>
		<dc:creator>kusky</dc:creator>
				<category><![CDATA[面试题目解析]]></category>

		<guid isPermaLink="false">http://www.labfan.com/?p=65</guid>
		<description><![CDATA[ TCP/IP 协议中，一端发起第一次握手时，其状态字？
频繁地创建并使用 socket ，使得tcp链接快速打开，快速关闭，从而出现了大量了TIME_WAIT状态。
 <a href="http://www.labfan.com/2011/04/11/%e7%99%be%e5%ba%a6%e9%a2%98%e7%9b%ae%e8%a7%a3%e6%9e%90%ef%bc%8d%ef%bc%8dtcp%e7%9a%84%e7%8a%b6%e6%80%81%e5%ad%97%e3%80%82/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p> TCP/IP 协议中，一端发起第一次握手时，其连接状态？<br />
来源：百度搜索引擎研发。<br />
问题的提出：这道题目看起来考得比较偏。一般地，TCP主要考察三次握手描述（ SYN， SYN+ACK，ACK ），差错控制特性，流量控制特性。对状态字的考察，一般比较少。<br /> 一个主要的原因是：状态字太多了，不好记。另一个主要的原因是，平时用得少。<br />
那百度为什么会考察这个知识呢？当然是因为他们在工作中时常用到。<br />
实际上，TCP状态字是分析网络性能时经常用到的东东。比如，在发现网络性能比较低时，一个最简单的办法就是使用 netstat 命令。<br />
参考一个典型的应用：</p>
<p><a href="http://www.iteye.com/topic/807101">聊聊mod_proxy配置过程</a></p>
<p>通过apache ab进行系统压力测试时，发现一个很严重的问题</p>
<p>./ab -k -c 15 -n 50000 http://10.20.156.49:2100/member/signin.htm </p>
<p>-k 指定保持keepalive<br />
-c 并发数<br />
-n 请求数</p>
<p>再通过netstat -nat命令看了下tcp状态，发现近2000左右的TIME_WAIT，在停止ab施压后，发现TIME_WAIT连接很快会得到释放</p>
<p>最后通过tcpdump在服务器上，发现了问题，每个请求都是走了新的socket链接，tcp链接快速打开，快速关闭，因此出现了大量了TIME_WAIT状态。</p>
<p>相关资料：</p>
<p><a href="">linux服务器上的11种tcp状态</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/11/%e7%99%be%e5%ba%a6%e9%a2%98%e7%9b%ae%e8%a7%a3%e6%9e%90%ef%bc%8d%ef%bc%8dtcp%e7%9a%84%e7%8a%b6%e6%80%81%e5%ad%97%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fuck 山西联通！fuck 联通！fuck垄断！！！</title>
		<link>http://www.labfan.com/2011/04/02/fuck_china_unico/</link>
		<comments>http://www.labfan.com/2011/04/02/fuck_china_unico/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 17:12:59 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[天价微博 3G]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=19</guid>
		<description><![CDATA[自从回太原后。使用火狐上网时，浏览器左上角经常会弹出个广告。“长风向东看，广汽有本田”。需要手动刷新一下才能看到页面。一直都没研究广告从哪里来的。今天真的很烦，查了一下源代码。 &#60;html&#62;&#60;head&#62;&#60;!&#8211;title&#62;&#8230; D??  ?? ???  o  30 ?? ?? ? D?? ? D? &#8230;&#60;/title&#8211;&#62;&#60;/head&#62;&#60;script language=JScript&#62;&#60;!llErrors(){return true;} window.onerror = killErrors; &#8211;&#62;&#60;/script&#62;&#60;frameset rows=*,0&#62;&#60;frame src= http://www.ty.sx.cn/wangyi noresize&#62;&#60;frame src= http://218.26.132.90/stat/stat.do?u=tytyad10023989$278$278$30$1301674961014$163158391$3051986568 noresize&#62;&#60;/frameset&#62;&#60; html&#62; 搜索　218.26.132.90，发现了网上一片叫骂声。山西联通这种做法真龌龊。公然进行域名劫持，暴风影音事件比起这样的行为来，又算得了什么！ 联通不是个好东西。以前在东软的时候，就听同事说，联通的官僚主义作风很严重。项目款一拖两三年。为了揽项目，部门的领导、售前、市场都是每人两个手机，一部移动的，用于打电话，一部联通的，用于向联通官员展现对联通的热爱。联通吞并网通后，联通业务支撑系统升级的一大半业务都划给了人人嗤之以鼻的联创（现在叫亚信联创）。联通的技术牛人比移动还多。服务质量呢？实时计费喊了三四年还没搞定。把接不通的ＣＤＭＡ扔给了电信。以为３Ｇ能挖着钱，结果两年来利润直线下降。倒是能发狠财，一条微博4000块钱。 山西联通如此明目张胆地劫持DNS，把别人的网页嵌入到自己的页面中，直踩法律边线。直接原因是利益的驱使，深层原因是由垄断而生的傲慢。垄断的地位，使得婊子也可以满嘴的民族使命，满腹的创收名目。借助垄断的大棒，婊子也敢立起牌坊。 在百度搜索“天价微博”，你得不到有价值的信息。在QQ签名输入“移动乱收费”，无法成功。 体现的是电信运营商对互联网企业的操控能力，还是两者之间的共同的利益立场？ 对比之下，电信运营商权力难以触及，以及没有共同利益体的MSN，google.com，无奈地退出，也就是是必然结局了。 三网整合的大潮已经势不可当。以审查见长的电视，以屏蔽见长的电信运营商业，其触角范围必然伸向互联网。移动的飞信已经和腾讯的QQ短兵相接。三五年后，在垄断的魔杖之下，谁说腾讯不会嫁给移动呢？ 相关链接： 奇艺网遭北京联通劫持插广告]]></description>
			<content:encoded><![CDATA[<p>自从回太原后。使用火狐上网时，浏览器左上角经常会弹出个广告。“长风向东看，广汽有本田”。需要手动刷新一下才能看到页面。一直都没研究广告从哪里来的。今天真的很烦，查了一下源代码。</p>
<p>&lt;html&gt;&lt;head&gt;&lt;!&#8211;title&gt;&#8230; D??  ?? ???  o  30 ?? ?? ? D?? ? D? &#8230;&lt;/title&#8211;&gt;&lt;/head&gt;&lt;script language=JScript&gt;&lt;!llErrors(){return true;} window.onerror = killErrors; &#8211;&gt;&lt;/script&gt;&lt;frameset rows=*,0&gt;&lt;frame src= http://www.ty.sx.cn/wangyi noresize&gt;&lt;frame src= http://218.26.132.90/stat/stat.do?u=tytyad10023989$278$278$30$1301674961014$163158391$3051986568 noresize&gt;&lt;/frameset&gt;&lt; html&gt;</p>
<p>搜索　218.26.132.90，发现了网上一片叫骂声。山西联通这种做法真龌龊。公然进行域名劫持，暴风影音事件比起这样的行为来，又算得了什么！<br />
联通不是个好东西。以前在东软的时候，就听同事说，联通的官僚主义作风很严重。项目款一拖两三年。为了揽项目，部门的领导、售前、市场都是每人两个手机，一部移动的，用于打电话，一部联通的，用于向联通官员展现对联通的热爱。联通吞并网通后，联通业务支撑系统升级的一大半业务都划给了人人嗤之以鼻的联创（现在叫亚信联创）。联通的技术牛人比移动还多。服务质量呢？实时计费喊了三四年还没搞定。把接不通的ＣＤＭＡ扔给了电信。以为３Ｇ能挖着钱，结果两年来利润直线下降。倒是能发狠财，一条微博4000块钱。</p>
<p>山西联通如此明目张胆地劫持DNS，把别人的网页嵌入到自己的页面中，直踩法律边线。直接原因是利益的驱使，深层原因是由垄断而生的傲慢。垄断的地位，使得婊子也可以满嘴的民族使命，满腹的创收名目。借助垄断的大棒，婊子也敢立起牌坊。</p>
<p>在百度搜索“天价微博”，你得不到有价值的信息。在QQ签名输入“移动乱收费”，无法成功。 体现的是电信运营商对互联网企业的操控能力，还是两者之间的共同的利益立场？<br />
对比之下，电信运营商权力难以触及，以及没有共同利益体的MSN，google.com，无奈地退出，也就是是必然结局了。</p>
<p>三网整合的大潮已经势不可当。以审查见长的电视，以屏蔽见长的电信运营商业，其触角范围必然伸向互联网。移动的飞信已经和腾讯的QQ短兵相接。三五年后，在垄断的魔杖之下，谁说腾讯不会嫁给移动呢？</p>
<p>相关链接：</p>
<p><a href="http://tech.hexun.com/2011-04-08/128580028.html" target="_blank">奇艺网遭北京联通劫持插广告</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/02/fuck_china_unico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debug c++ 之拷备构造函数和赋值符号重载</title>
		<link>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b%e6%8b%b7%e5%a4%87%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%92%8c%e8%b5%8b%e5%80%bc%e7%ac%a6%e5%8f%b7%e9%87%8d%e8%bd%bd/</link>
		<comments>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b%e6%8b%b7%e5%a4%87%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%92%8c%e8%b5%8b%e5%80%bc%e7%ac%a6%e5%8f%b7%e9%87%8d%e8%bd%bd/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 15:56:47 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[debug c++]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=40</guid>
		<description><![CDATA[继续上一节的代码，如果别的同事有如下调用： 我们的代码又崩溃了。 但是，即使我们给拷备构造函数加一个空的实现，像处理赋值函数那样。结果依然出乎意料。 实际使用中，拷备构造函数比赋值符重载用得更用广泛也更隐蔽。比如，临时对象的出没，常常留下拷备构造的脚印。于是，我们常常会看到简单的一行代码神奇地跳出“error!”。 小结： 拷备构造函数和赋值构造函数的区别在于：前者是在未初始化的内存上进行操作，后者是在已初始化的内存上进行操作。默认的情况下，编译器会为赋值函数和拷备构造函数生成相同的代码。当对象持有资源时（内存块，文件句柄等等），这些函数会带来麻烦。我们需要自己来处理这些函数。]]></description>
			<content:encoded><![CDATA[<p>继续上一节的代码，如果别的同事有如下调用：</p>
<p>我们的代码又崩溃了。</p>
<p>但是，即使我们给拷备构造函数加一个空的实现，像处理赋值函数那样。结果依然出乎意料。</p>
<p>实际使用中，拷备构造函数比赋值符重载用得更用广泛也更隐蔽。比如，临时对象的出没，常常留下拷备构造的脚印。于是，我们常常会看到简单的一行代码神奇地跳出“error!”。</p>
<p>小结：<br />
拷备构造函数和赋值构造函数的区别在于：前者是在未初始化的内存上进行操作，后者是在已初始化的内存上进行操作。默认的情况下，编译器会为赋值函数和拷备构造函数生成相同的代码。当对象持有资源时（内存块，文件句柄等等），这些函数会带来麻烦。我们需要自己来处理这些函数。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b%e6%8b%b7%e5%a4%87%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%92%8c%e8%b5%8b%e5%80%bc%e7%ac%a6%e5%8f%b7%e9%87%8d%e8%bd%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debug c++之 vector or list</title>
		<link>http://www.labfan.com/2011/04/01/debug-c%e4%b9%8b-vector-or-list-2/</link>
		<comments>http://www.labfan.com/2011/04/01/debug-c%e4%b9%8b-vector-or-list-2/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 15:28:58 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[debug c++]]></category>
		<category><![CDATA[编译*调试*逆向]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=33</guid>
		<description><![CDATA[为什么 vector::front()的值在 push_back 之后不再正确？ class CMyClass { public: int m_first; CMyClass(  ) { m_first = 3; } }; int vector_or_List() { CMyClass temp; vector&#60;CMyClass&#62; vecInt; cout &#60;&#60;  &#8220;temp:&#8221; &#60;&#60;  temp.m_first &#60;&#60; endl; vecInt.push_back( temp ); const CMyClass&#38; shadow_vec_front= vecInt.front(); cout &#8230; <a href="http://www.labfan.com/2011/04/01/debug-c%e4%b9%8b-vector-or-list-2/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>为什么 vector::front()的值在 push_back 之后不再正确？<br />
class CMyClass<br />
{<br />
public:<br />
int m_first;<br />
CMyClass(  )<br />
{<br />
m_first = 3;<br />
}</p>
<p>};<br />
int vector_or_List()<br />
{<br />
CMyClass temp;<br />
vector&lt;CMyClass&gt; vecInt;<br />
cout &lt;&lt;  &#8220;temp:&#8221; &lt;&lt;  temp.m_first &lt;&lt; endl;<br />
vecInt.push_back( temp );<br />
const CMyClass&amp; shadow_vec_front= vecInt.front();<br />
cout &lt;&lt;  &#8220;shadow_vec_front:&#8221; &lt;&lt;  shadow_vec_front.m_first &lt;&lt; endl;<br />
vecInt.push_back( temp);<br />
cout &lt;&lt;  &#8220;shadow_vec_front:&#8221; &lt;&lt;  shadow_vec_front.m_first &lt;&lt; endl;</p>
<p>list&lt;CMyClass&gt; listInt;<br />
cout &lt;&lt;  &#8220;temp&#8221; &lt;&lt;  temp.m_first &lt;&lt; endl;<br />
listInt.push_back( temp );<br />
const CMyClass&amp; shadow_list_front = listInt.front();<br />
cout &lt;&lt;  &#8220;shadow_list_front:&#8221; &lt;&lt;  shadow_list_front.m_first &lt;&lt; endl;<br />
listInt.push_back( temp);<br />
cout &lt;&lt;  &#8220;shadow_list_front:&#8221; &lt;&lt;  shadow_list_front.m_first &lt;&lt; endl;<br />
return 0;<br />
}<br />
int main()<br />
{<br />
vector_or_List();<br />
system( &#8220;pause&#8221; );<br />
return 0;<br />
}</p>
<p>如何改进？</p>
<p>１、vector中存储指针而不是存储变量</p>
<p>２、用 resize　预先分配足够大小的空间</p>
<p>3、多线程环境下，用 list而不用 vector。</p>
<p>扩大地来讲，直接对容器中的对象进行操作，经常是一个比较危险的动作。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/01/debug-c%e4%b9%8b-vector-or-list-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debug c++ 之 &#8220;多用组合，少用继承&#8221;之惑－－默认赋值函数带来了麻烦</title>
		<link>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b-%e5%a4%9a%e7%94%a8%e7%bb%84%e5%90%88%ef%bc%8c%e5%b0%91%e7%94%a8%e7%bb%a7%e6%89%bf%e4%b9%8b%e6%83%91%ef%bc%8d%ef%bc%8d%e9%bb%98%e8%ae%a4%e8%b5%8b%e5%80%bc%e5%87%bd%e6%95%b0/</link>
		<comments>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b-%e5%a4%9a%e7%94%a8%e7%bb%84%e5%90%88%ef%bc%8c%e5%b0%91%e7%94%a8%e7%bb%a7%e6%89%bf%e4%b9%8b%e6%83%91%ef%bc%8d%ef%bc%8d%e9%bb%98%e8%ae%a4%e8%b5%8b%e5%80%bc%e5%87%bd%e6%95%b0/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 04:04:57 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[debug c++]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=25</guid>
		<description><![CDATA[先有如下代码： class A { public: A() { this-&#62;m_byte = (char*)malloc( 1 ); } ~A() { free(  this-&#62;m_byte ); } void show_hello() const { cout &#60;&#60;  &#8220;hello! A object is work!&#8221; &#60;&#60; endl; } private: char* m_byte; }; 经过测试，这是一段没有问题的代码。同时收到同事的反馈：效果不错！我的工作简单多了！ class B &#8230; <a href="http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b-%e5%a4%9a%e7%94%a8%e7%bb%84%e5%90%88%ef%bc%8c%e5%b0%91%e7%94%a8%e7%bb%a7%e6%89%bf%e4%b9%8b%e6%83%91%ef%bc%8d%ef%bc%8d%e9%bb%98%e8%ae%a4%e8%b5%8b%e5%80%bc%e5%87%bd%e6%95%b0/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>先有如下代码：</p>
<p>class A<br />
{<br />
public:<br />
A()<br />
{<br />
this-&gt;m_byte = (char*)malloc( 1 );<br />
}<br />
~A()<br />
{<br />
free(  this-&gt;m_byte );<br />
}<br />
void show_hello() const<br />
{<br />
cout &lt;&lt;  &#8220;hello! A object is work!&#8221; &lt;&lt; endl;<br />
}<br />
private:<br />
char* m_byte;<br />
};</p>
<p>经过测试，这是一段没有问题的代码。同时收到同事的反馈：效果不错！我的工作简单多了！</p>
<p>class B :public A<br />
{<br />
public:<br />
B(const A &amp;a) // B的构造函数<br />
{<br />
}<br />
};</p>
<p>int main()<br />
{<br />
A*  first = new A;<br />
B*  second = new B(*first);<br />
second-&gt;show_hello();<br />
delete first;<br />
delete second;<br />
// system( &#8220;pause&#8221; );<br />
return 0;<br />
}</p>
<p>另一位同事Ｂ提出了不同的意见： second-&gt;show_hello() 报告：　I am A object! 这是多么荒谬的事情！Ｂ同事拿来 砖头厚的 &lt; head first design pattern &gt;，引用其中的原话：多用组合，少用继承。（Favor composition over inheritance）。于是他写出了如下代码：</p>
<p>class B<br />
{<br />
public:<br />
B(const A &amp;a) // B的构造函数<br />
{<br />
this-&gt;m_a = a;<br />
}<br />
private:<br />
A m_a; // 成员对象<br />
};</p>
<p>问题出现了！</p>
<p>原因：没有声明拷备构造的情况下， A　对象的 m_byte的地址并拷备了两份，并被两次释放。</p>
<p>怎样解决：</p>
<p>在Class A 中增加拷备构造函数：</p>
<p>A&amp; operator =( const A &amp;other)<br />
{<br />
return *this;<br />
}</p>
<p>这个函数看起来什么都没有做。是的，它确实什么都没做。让这并不意味着它没有贡献。它的贡献在于：它让编译器不做什么－－声明这个函数后，编译器不再为此类添加默认的 operator = 函数。默认地，c++为为每个类添加四个函数：构造、析构、拷备构造、赋值。</p>
<p>参考资料：</p>
<p>高质量C++/C编程指南（林锐）之九-类的构造函数、析构函数与赋值函数</p>
<p>文章目录：</p>
<p>第一篇：c++导航</p>
<p>1 c++加了什么之一？ this 指针</p>
<p>2 c++ 加了什么之二－－虚表（ virtual table）</p>
<p>3 更加广泛的 const 关键字</p>
<p>第二篇：编译期错误</p>
<p>1、模板参数转为 void?</p>
<p>1、引用( referance  )是个啥玩意儿</p>
<p>2、模板编译的噩梦</p>
<p>第三篇：让人崩溃的运行时错误( c++ run time error )</p>
<p>1、模板参数转为 void*的错误（参考赵工的错误）</p>
<p>2、<a href="http://www.dtdg777.net/?p=33">vector 还是 list</a>。</p>
<p>3：啥都不做带来的灾难－－赋值与拷备构造？</p>
<p>4：默认的不总是对的－－让人崩溃的虚析构函数。</p>
<p>5：临时对象在哪里</p>
<p>如果一个临时性对象被绑定于一个reference，对象将残留，直到被初始化之reference的生命结束，或直到临时对象的生命范畴(scope)结束——视哪一种情况先到达而定。(《深度探索C++对象模型》P275)</p>
<p>这里的“reference的生命结束”和“临时对象的生命范畴(scope)结束”有什么区别？感觉说的是一样的。谁能针对这两种情况，举两个例子？</p>
<p>(To ckt1120 ：我是感觉他说的后半句不对。查了C++标准，对引用这种情况，并没有他说的那种情况)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/04/01/debug-c-%e4%b9%8b-%e5%a4%9a%e7%94%a8%e7%bb%84%e5%90%88%ef%bc%8c%e5%b0%91%e7%94%a8%e7%bb%a7%e6%89%bf%e4%b9%8b%e6%83%91%ef%bc%8d%ef%bc%8d%e9%bb%98%e8%ae%a4%e8%b5%8b%e5%80%bc%e5%87%bd%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OllyDbg 2.01有了更好的源码调试功能</title>
		<link>http://www.labfan.com/2011/03/30/debug_exe_with_ollydbg-2-01/</link>
		<comments>http://www.labfan.com/2011/03/30/debug_exe_with_ollydbg-2-01/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 11:00:10 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[编译*调试*逆向]]></category>
		<category><![CDATA[OllyDbg 　IDA　源码级调试]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=10</guid>
		<description><![CDATA[在 OllyDbg 1.x中，查看源码的功能(view-&#62;source)的功能是不尽完美。今天发现 OllyDbg 2.x 中已经在这方面有更新了。 查看 od 作者主页 的表述： Source debugging is here again, a bit incomplete. It supports only Microsoft compilers via dbghelp.dll. New is support for symbol server, stack walking using dbghelp and names of procedure parameters. &#8230; <a href="http://www.labfan.com/2011/03/30/debug_exe_with_ollydbg-2-01/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在 OllyDbg 1.x中，查看源码的功能(view-&gt;source)的功能是不尽完美。今天发现 <a title="ollydbg" href="http://www.ollydbg.de/version2.html　" target="_blank">OllyDbg 2.x</a> 中已经在这方面有更新了。</p>
<p>查看 <a title="ollydbg " href="http://www.ollydbg.de" target="_blank">od 作者主页</a> 的表述：</p>
<p>Source debugging is here again, a bit incomplete. It supports only Microsoft compilers via dbghelp.dll. New is support for <a title="microsoft symbol server" href="http://msdn.microsoft.com/en-us/library/b8ttk8zy.aspx">symbol server</a>, stack walking using dbghelp and names of procedure parameters.</p>
<p>新版本中通过<a title="Debugging Tools and Symbols: Getting Started" href="http://msdn.microsoft.com/en-us/windows/hardware/gg462988" target="_blank">dgbhelp.dll</a>改善了对微软编译器的支持。能够连接到 <a href="http://msdn.microsoft.com/en-us/library/b8ttk8zy.aspx">微软的 符号服务器</a>下载函数符号信息，能进行栈信息查看，查找程序的 .pdb 文件，能识别 函数参数名称。</p>
<p>这些功能有点像ida, wdb的签名识别功能。当然，还没有 ida　那么强大，它还不能像ida 那样，为 dll生成函数签名。</p>
<p>看看操作界面吧</p>
<p><a href="./wp-content/uploads/2011/03/debugging-data.png"><img class="alignnone size-medium wp-image-30" title="debugging data parameter" src="http://www.dtdg777.net/wp-content/uploads/2011/03/debugging-data-300x265.png" alt="odb 源代码调试参数设置" /></a><br />
可能有人要问：有源代码的情况下，为啥还要用 od 来调试呢？理由很多。与 visual studio 相比，od 能够支持更加丰富的断点－－内存断点（调试内存溢出／内存错误的必杀技），模块 load/unload，线程 start/exit 的断点（大型项目中用得着）；对多线程调试有良好的支持－－od2.x中能够对线程分别进行暂停/运行的操作。此外，visual studio 对宏/模板代码支持不好。比如，stl的代码，我们跟踪进去后，那些奇怪的 -s,_p会把我们弄得晕头转向。这种场合下，结合汇编代码来分析反倒更容易一些。在多CPU环境下，OD可以指定程序使用哪一个/哪几个CPU。而其它的开发级调试器没有这样的功能。<br />
<a href="./wp-content/uploads/2011/03/show_source.png"><img class="alignnone size-medium wp-image-58" title="show_source" src="http://www.dtdg777.net/wp-content/uploads/2011/03/show_source-300x222.png" alt="" /></a></p>
<p>od2.0确实很好用。暂时日常应用中就不需要再开启 ida 了。<br />
od 2.x　目前还没有流行起来，一个很重要的原因是不支持插件。对于它的专长－－病毒分析来说，这是个很大的问题。但对于我们做开发的来说，这不是什么大问题。编写代码时碰上疑难问题时，不妨试试这个工具哈！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/03/30/debug_exe_with_ollydbg-2-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>打造一个开源的博客管理器</title>
		<link>http://www.labfan.com/2011/03/28/13/</link>
		<comments>http://www.labfan.com/2011/03/28/13/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 11:16:43 +0000</pubDate>
		<dc:creator>dtdg777</dc:creator>
				<category><![CDATA[开源，标准]]></category>

		<guid isPermaLink="false">http://www.dtdg777.net/?p=13</guid>
		<description><![CDATA[想把 博客园　的文章搬过来。没有找到合适的免费工具。于是 diy一个。 分析一下，需要的技术，一是 http protrol,二是 html/xml parse。http protrol协议同时需要支持 汉字 url,ssl,cookies，。html不是格式良好的 xml 文档，出于容错的考虑，使用 sax而不用 dom。同时,html parse 也需要支持编码集的转换。utf-8,unicode,gb2312。除此之外，我还想使文章照原来的日期显示。这可能需要用到 mysql的接口。 以前做过一个类似的项目，使用的是 gsoap toolkit。使用时发现的主要问题有： 对汉字标签处理有问题，不能处理格式不符合w3c规范的 html（比如 &#60;br /&#62; 可以被识别，而 &#60;br&#62;会被认为错误）。 从网上找找相关的文章。这次找了下面的套件： &#160; html/xml parse 使用 expat。这玩意是 firefox 用的。使用注册机制来处理结点。想必对格式并不良好的 html有较好的支持。 字符集转换，使用 apache 的 apr-iconv。 &#8230; <a href="http://www.labfan.com/2011/03/28/13/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>想把 博客园　的文章搬过来。没有找到合适的免费工具。于是 diy一个。</p>
<p>分析一下，需要的技术，一是 http protrol,二是 html/xml parse。http protrol协议同时需要支持 汉字 url,ssl,cookies，。html不是格式良好的 xml 文档，出于容错的考虑，使用 sax而不用 dom。同时,html parse 也需要支持编码集的转换。utf-8,unicode,gb2312。除此之外，我还想使文章照原来的日期显示。这可能需要用到 mysql的接口。</p>
<p>以前做过一个类似的项目，使用的是 <a title="gsoap toolkit" href="http://www.cs.fsu.edu/~engelen/soap.html" target="_blank">gsoap toolkit</a>。使用时发现的主要问题有： 对汉字标签处理有问题，不能处理格式不符合w3c规范的 html（比如 &lt;br /&gt; 可以被识别，而 &lt;br&gt;会被认为错误）。</p>
<p>从网上找找相关的文章。这次找了下面的套件：</p>
<p>&nbsp;</p>
<p>html/xml parse 使用 expat。这玩意是 firefox 用的。使用注册机制来处理结点。想必对格式并不良好的 html有较好的支持。</p>
<p>字符集转换，使用 apache 的 apr-iconv。</p>
<p>http协议，使用 apache 的 apr-unit的 socket 库。</p>
<p>&nbsp;</p>
<p>http client 的开发库，<a title="http client library" href="http://curl.haxx.se/libcurl/competitors.html" target="_blank">curl 提供了一个列表</a>，并对各个库做了比较。<a title="http client library" href="http://curl.haxx.se/libcurl/competitors.html" target="_blank">curl 提供的这个列表</a> 有点儿旧，有的已经不再维护了。按照“稳定易用，跨平台”的原则，瞄准了以下 library：</p>
<p>c++　有 <a title="GNU uCommon C++ " href="http://www.gnu.org/software/commoncpp/" target="_blank">GNU Common C++</a> 。这是一个跨平台的库。类似于 apache 的apr-util。其中的class　 URLStream 提供了http/ftp/file 的 get/put方法。能够支持多线程，支持 cookies,proxy,authentication。可以满足简单的 http 应用。似乎没有提供 ssl 的接口。xml方面，class XMLStream 提供了 xml 的 sax读写。似乎有些单薄。没有提供字符集转换、结点注册机制，不支持文件嵌套。因此不适用用来处理复杂的 html。</p>
<p>c 有 <a title="libcurl " href="http://curl.haxx.se/" target="_blank">libcurl</a>,　据称不够“轻量级”。</p>
<p>java <a title="apache 的 httpclient" href="http://hc.apache.org/httpcomponents-client-ga/" target="_blank">apache 的 httpclient</a> 支持插件。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.labfan.com/2011/03/28/13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

