<?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>CNXCT小组的博客</title>
	<atom:link href="http://www.cnxct.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cnxct.com</link>
	<description>技术这个东西如同一个圆 ,刚开始的时候我们就如同站在圆心,一旦投入学习下去 ,圆就慢慢变大 ,圆的边缘以外也就会越来越大,接触的多了 知道的多了, 就会发现自己真的很无知!</description>
	<lastBuildDate>Tue, 31 Jan 2012 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>2011辛卯年总结</title>
		<link>http://www.cnxct.com/summary-of-2011-by-cfc4n/</link>
		<comments>http://www.cnxct.com/summary-of-2011-by-cfc4n/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 10:42:20 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[儿子]]></category>
		<category><![CDATA[读书]]></category>
		<category><![CDATA[骑行]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=804</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2012/01/6a6b7068jw1dow8bnvg5hj.jpg"><img class="alignleft sided inline" title="黄昏" src="http://www.cnxct.com/wp-content/uploads/2012/01/6a6b7068jw1dow8bnvg5hj-150x150.jpg" alt="" width="150" height="150" /></a>2011年度写博客大约6篇，平均2个月一篇，相比以为大牛60篇来说，还是非常非常的少。当然，我跟这位大牛的水平差距也非常的大，我之是他的1/100，甚至不到。2012年，由于我最近比较想读原理类的技能资料，要多多关注鸟哥、春哥两位重点讲述PHP原理与Nginx原理的大牛学习。同时，要做总结自己的学习成果，并记录下来，N年之后，我退休了，这也算是经验之谈，丰富的学习资料，留给我的儿子继承了。今年，我在sina微博跟腾讯微博上发言的次数综合大约为1500次，平均每天5条，这足够可耻了，太浪费时间了。来年要减少微博的使用次数，增加博客的撰写。]]></description>
			<content:encoded><![CDATA[<h1>家庭：</h1>
<h2>为人子</h2>
<p>父母在,不远游，游必有方。但我做不到，为了生活，我只能苟且得生活在大城市，辛勤付出，简单的生活，节省开支，为了房子、房子、房子！！！今年帽帽出生了，母亲过来照顾他，父亲一个人留在老家，吃不好，穿不好。想到这些，更愈加惭愧内疚了。父亲60多岁，一生劳碌，先是为兄弟，后是为子女。他辛勤工作，废寝忘食，从无闲日，更无怨言，总希望子女生活得比自己好。每逢过年过节，总是不让子女回家，担心浪费路费，担心路上安全。其实心底下更多的是希望把子女守在身边，团团圆圆，享受天伦之乐。今年母亲来上海，父亲要一个人在家过年了，儿子太小，没法回家。姐姐也多次表示，车接车送，把我们接回老家，春节之后，再送回上海。但总担心刚满月的儿子不适应老家温度环境，对他身体有影响，还是打算等儿子大了，满两三个月了再回家。值得欣慰的是，姐姐跟外甥、外甥女表示，年三十晚上在自家过，大年初一就到我家，陪陪父亲。</p>
<p>上周周末，网上看了龙应台的《<a title="龙应台-《目送》" href="http://book.douban.com/subject/3995526/" target="_blank">目送</a>》前几篇，以及筷子兄弟的《<a title="筷子兄弟-《父亲-父女篇》" href="http://v.youku.com/v_show/id_XMzM0Mzc2MTAw.html" target="_blank">父亲-父女篇</a>》、《<a title="筷子兄弟-《父亲-父女篇》" href="http://v.youku.com/v_show/id_XMzQwNDY5MDI4.html" target="_blank">父亲-父女篇</a>》(暂时没看)，更是感慨颇多，对父亲思念有加。筷子兄弟的每一步作品，都能跟我们80后产生共鸣，是因为我们都有那么个童年，都有这样的父亲。没有什么比家人团聚更快乐的了。<strong>对于不打算回家的同学，请看完上述两篇短片，再做决定，三思啊。</strong></p>
<h2>为人夫</h2>
<p>2011年正月初六结婚，对于我们来说，或许有点早。可对于我年迈的父母来说，已经非常晚了。我跟我老婆分别是两个省份的人，相离太远，无法完成当天“接亲”的风俗。我们的父母皆为农民，没有轿车楼房，没有达官显贵，婚礼就是那么简简单单扑扑素素的完成。由于我们当地奇怪的风俗习惯，准新娘不能在新郎的亲戚家待。而且，新娘必须12点之前迎娶到新郎家，同时，越早越好。老婆只好跟我一起，在市区的一家宾馆等待到迎娶的那天，被接到老家里。感谢老婆的信任，岳父岳母的理解，使得我这种在大城市最底层、普普通通、卑微的80后，能奢侈的完成真正意义上的裸婚。</p>
<h2>为人父</h2>
<p>2011年12月7号，儿子<a title="陈帽帽的微博" href="http://weibo.com/cfc4n" target="_blank">陈帽帽</a>出生，最高兴的要属我父母了。60多岁的老头老太太，以后不用再羡慕他人，可以每天抱着孙子到处溜达，他们也可以了。可能儿子以后更多的是在我们身边，而不能经常在老家的父母身边，教育啊教育，唉&#8230;</p>
<p>其实，结婚生子，对我来说都太早了，但每次父母的威逼利诱、软硬兼施，搞的我每次回家过年都泪流满面的承诺尽快结婚、尽早生子。</p>
<p>说起儿子的名字，还挺有意思的。“帽帽”是我老婆无意中想到的，叫这个名字的小孩还挺少，基本没有。叫起来也听顺口。关于大名，在帽帽没出生之前，只是想了个女孩名，叫“陈亦初”。妈妈的解释：＂亦＂意为＂也是＂、＂总是＂，比较委婉；＂初＂意为＂刚刚＂、＂第一＂等寓意。比如刘亦菲的＂亦＂，张静初的＂初＂。两个字比较文雅，适合女孩名。爸爸的解释：＂亦初＂谐音＂溢出＂，跟爸爸的工作有关，爸爸是个程序员。男孩的名字还没想好，直到帽帽出生了，出院前必须定好大名，情急之下，就定了“陈亦迅”，跟HK的著名歌手“陈奕迅”名字读音相同，“亦”字不一样。医院的护士跟我说，你家宝宝的名字说一遍我就记住了，哈哈。</p>
<h1></h1>
<h1>工作：</h1>
<h2 id="best-answer-content">朝气蓬勃</h2>
<p>上半年劲头十足，目标明确，专注性能调优、架构设计。温习了正则，阅读熟悉了RFC2616、RFC3875部分章节,对xhprof、httpwatch、charles proxy等工具更加熟悉了。熟悉了浏览器的http并发数在不同http协议、不同浏览器之间的差异。最大的收获是web项目的调试技巧，尤其是后端有反响代理、负载均衡，DB、web不在同一机房，各种奇形怪状的问题。收获颇丰，这当然要感谢同事们的指点协助。尤其是<a title="netxfly的博客" href="http://www.opboy.com/" target="_blank">netxfly</a>、<a title="鸭蛋配洋山芋的微博" href="http://weibo.com/deluxe1983" target="_blank">deluxe1983</a>、<a title="我友博客" href="http://woyoo.org/" target="_blank">ivon_lee</a>等&#8230;</p>
<h2 id="best-answer-content">萎靡不振</h2>
<p>本年度第四季度，稍有放松、士气低落、目标迷失，责任心下降，这跟我本人生活、情绪有关，感谢老大、<a title="zyqq的博客" href="http://zyqq.info/" target="_blank">职业欠钱</a>等信任与包容。使得我能尽快调节自己，跳出低谷，走向正道。计划尽快转入C/C++、LUA、SOCKET相关技术的研究中去，这也是我本人研究学习的新方向。</p>
<h1 id="best-answer-content"></h1>
<h1>生活：</h1>
<h2 id="best-answer-content">精神食量</h2>
<p>本年度读书13-15本，平均每月一本。包括《<a href="http://book.douban.com/subject/6809087/" target="_blank">大话处理器</a>》、《<a title="浪潮之巅" href="http://book.douban.com/subject/6709783/" target="_blank">浪潮之巅</a>》、《<a href="http://book.douban.com/subject/6424904/" target="_blank">大话数据结构</a>》、《<a title="黑客与画家" href="http://book.douban.com/subject/6021440/" target="_blank">黑客与画家</a>》、《<a href="http://book.douban.com/subject/6709809/" target="_blank">暗时间</a>》、《<a href="http://book.douban.com/subject/3224524/" target="_blank">代码之美</a>》、《<a href="http://book.douban.com/subject/4031899/" target="_blank">一线架构师实践指南</a>》、《<a href="http://book.douban.com/subject/6758780/" target="_blank">大规模Web服务开发技术</a>》、《<a href="http://book.douban.com/subject/5320866/" target="_blank">Rework重来</a>》、《<a href="http://book.douban.com/subject/4184775/" target="_blank">企鹅凶猛</a>》、《<a href="http://book.douban.com/subject/3924175/" target="_blank">构建高性能WEB站点</a>》、《<a title="软件随想录" href="http://book.douban.com/subject/4163938/" target="_blank">软件随想录</a>》、《<a href="http://book.douban.com/subject/3652388/" target="_blank">程序员的自我修养</a>》、《<a href="http://book.douban.com/subject/1886174/" target="_blank">数据结构</a>》等。</p>
<ol>
<li>其中《<a title="黑客与画家" href="http://book.douban.com/subject/6021440/" target="_blank">黑客与画家</a>》我个人觉得，并没网上传说的那么好，就是一普普通通的个人从业经验感言，或许我还不到理解背后深层含义的地步。</li>
<li>时间管理类的《<a href="http://book.douban.com/subject/6709809/" target="_blank">暗时间</a>》是非常不错的，值得推荐，适合我这种注意力经常不集中的码农。</li>
<li>技术类《<a href="http://book.douban.com/subject/3652388/" target="_blank">程序员的自我修养</a>》最棒，对操作系统、编译原理、链接、装载、库、运行机制等进行原理性讲解，可惜以我目前的功力，无法全部读懂理解，目前只看了前面几章。计划先补习相关知识再看。</li>
</ol>
<p>最期待的书就属<a title="乱象印迹" href="http://www.luanxiang.org/blog/" target="_blank">余晟</a>老师的《正则指引》了，之前试读过其中的“匹配原理”与“常见问题解决思路”，觉得思维方式很巧妙，我之前从来都没有理清过思路，如何去完成正则表达式的编写，分几步，每一步的目的等等。对于“匹配原理”部分，也有跟我理解不一样的地方。非常期待其他章节。</p>
<p>来年的计划增加数据结构、算法相关技能书的阅读，同时增加点散文类文学作品的阅读，陶冶下情操。同事说我太愤青了，换下视线吧。还有，不打算买书看了，计划到“<a title="青番茄" href="http://www.qingfanqie.cn/" target="_blank">青番茄</a>”?借阅，除非读到非常好的书，才购买收藏。一来节省开支；而来节省空间。每次换房子，搬东西都太麻烦，书又比较重。</p>
<p>今年送给外甥4本书，分别是《夏洛的网》、《窗边的小豆豆》、《昆虫记》、《赛尔号》，其中《昆虫记》是一套，共6本。算是比较经济且实用的礼物了。据他们反映，最喜欢《<a title="夏洛的网" href="http://book.douban.com/subject/1036274/" target="_blank">夏洛的网</a>》。</p>
<h2 id="best-answer-content">运动</h2>
<p>5月初，公司举行一次户外活动，地点是崇明岛的国家森林公园，为期2天，做大巴来回。M哥、<a title="鸭蛋配洋山芋的微博" href="http://weibo.com/deluxe1983" target="_blank">deluxe1983</a>两位骑行爱好者决定骑车到崇明岛，中间做轮渡。我有幸也参与了，由于本人身体素质问题，体力不支，导致进展速度较慢，拖了大家后腿，各种腰酸背痛，屁股红肿&#8230;.还好坚持下来了。同时，感谢<a title="netxfly的博客" href="http://www.opboy.com/" target="_blank">netxfly</a>的爱车。2012年最好再来一次类似的体能消耗较大的户外运动。</p>
<h2 id="best-answer-content">印迹</h2>
<p>2011年度写博客大约6篇，平均2个月一篇，相比以为大牛60篇来说，还是非常非常的少。当然，我跟这位大牛的水平差距也非常的大，我之是他的1/100，甚至不到。2012年，由于我最近比较想读原理类的技能资料，要多多关注<a title="风雪之隅" href="http://www.laruence.com/" target="_blank">鸟哥</a>、<a title="章亦春" href="http://blog.sina.com.cn/openresty" target="_blank">春哥</a>两位重点讲述PHP原理与Nginx原理的大牛学习。同时，要做总结自己的学习成果，并记录下来，N年之后，我退休了，这也算是经验之谈，丰富的学习资料，留给我的儿子继承了。今年，我在<a title="CFC4N's 新浪微博" href="http://weibo.com/cfc4nx" target="_blank">sina微博</a>跟<a title="CFC4N's 腾讯微博" href="http://t.qq.com/cfc4nx" target="_blank">腾讯微博</a>上发言的次数综合大约为1500次，平均每天5条，这足够可耻了，太浪费时间了。来年要减少微博的使用次数，增加博客的撰写。</p>
<p>在第三季度写了两个PPT《<a title="正则表达式匹配原理" href="http://www.cnxct.com/regularexpressions-pptx-pdf-share/" target="_blank">正则表达式匹配原理</a>》与《W<a title="web开发安全与运维安全浅见" href="http://www.cnxct.com/web-development-security-ppt/" target="_blank">EB开发安全与运维安全浅见</a>》，其中背后所需学习的知识点比较大，算是自我批评的一点安慰吧。2012年计划再写一个关于HTTP1.0与1.1相关的PPT，分享下我的学习经验，同时，给自己下目标，鞭策自己。</p>
<h2 id="best-answer-content">善举</h2>
<p>2011年度从善5次，均为不超过20元的小额捐款，总计100左右。捐款对象多为山区失血儿童，还有以为是微博里传的一位白血病患者，好像也是IT从业者，性别男，为其女友发起。具体谁记不清了。明年来继续，额度不小于100元。(本人能力有限，也是社会底层的贫苦大众，富人勿嘲笑)</p>
<h2 id="best-answer-content">败家</h2>
<p>抗得住ipad的诱惑，没扛得住ipad2的诱惑。败家4000RMB，特此反省1年，期间不能购买任何非必须的电子产品。(08年的blackberry 8800我用四年了，也算扛得住诱惑了吧。换个手机，也不为过吧？)</p>
<h2 id="best-answer-content">老友</h2>
<p>老友牧野天涯来访一次，带了他的宝贝女儿。记得上次个他见面时，也是轻松的小夫妻。转眼间女儿就1岁多了，做了导游，逛了中国馆(世博会期间我都没去，一点兴趣都没，不知为啥)，我也是第一次去，场景还凑活吧，没什么 新奇的高科技，人流仍那么凶猛。也感谢他在SEO上的相关指点。这些好友今年通话过：闫超、杲强、朱丽楠，宝发、刘威、董林、李彬、刘亚、大眼、高楠、朝阳、王勇。其他没通话过的好友，你反省，我也反省吧。</p>
<h1 id="best-answer-content">总结：</h1>
<p>本年度评分为50分，满分100，差距较大，尤其是自我充电类计划，完成的不到40%，来年定要认真履行计划，读书15本，技术类10本，非技术类5本。由于我本人性格问题，言语中如有得罪，还请见谅。再次感谢各位同事在工作上的包容帮助。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/summary-of-2011-by-cfc4n/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>php5.3.8中编译pdo_mysql的艰难历程</title>
		<link>http://www.cnxct.com/some-errors-on-compile-php-5-3-8-with-pdo_mysql-and-mysqlnd/</link>
		<comments>http://www.cnxct.com/some-errors-on-compile-php-5-3-8-with-pdo_mysql-and-mysqlnd/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 05:33:26 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqlnd]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[拓展]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=788</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/11/macro_photos_9.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/11/macro_photos_9-150x150.jpg" alt="" title="程序要严谨、细心" width="150" height="150" class="alignleft sided inline" /></a>1，以官方文档为准，一切跟着官方文档来，不轻易采信网络上网友提供的编译参数，包括这边博文。不论对方是老手、大牛，还是其他什么什么有威望的人。他们提供的方法或许跟你当前的环境不一致，时间也相差很大，或许相隔好几年了；2，确认得到的结果是准确的，怎么说呢，文中的例子中php-i的路径不是我们新编译的，而是之前编译，或者yum安装的，一定要到自己编译的程序目录下，用自己新编译的脚本去执行测试，获得测试结果，下结论，不为了偷懒，不敲路径，直接写程序名进行测试；]]></description>
			<content:encoded><![CDATA[<p>我们的一个项目，用了<a href="http://pecl.php.net/package/PDO_MYSQL">PDO_MYSQL</a>拓展，准备迁移服务器，新环境需要编译安装环境。昨天，运维同事抽空编译了一下，一直编译不上pdo_mysql，同时，公司的一款新webgame临近上线，他们实在太忙，我这个三流运维技术的程序员来试试吧。</p>
<p>运维同事描述：<br />
服务器系统版本：Linux version 2.6.32-71.el6.x86_64 (mockbuild@c6b6.centos.org) (gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) ) #1 SMP Fri May 20 03:51:51 BST 2011</p>
<p>编译PHP的参数</p>
<pre class="brush: bash; title: ; notranslate">
...
tar zxvf $soft_dir/php-5.3.8.tar.gz -C $soft_tmp
cd  $soft_tmp/php-5.3.8
 ./configure  --prefix=$soft_install/php --with-config-file-path=$soft_install/php/etc --with-mysql=$soft_install/mysql --with-mysqli=mysqlnd  --with-gd=$soft_install/gd --with-jpeg-dir=$soft_install/jpeg --with-png-dir=$soft_install/png --with-freetype-dir=$soft_install/freetype --enable-bcmath --with-mcrypt  &amp;&amp; make &amp;&amp; make install
...
</pre>
<p>之后再次编译 pdo_mysql 拓展</p>
<pre class="brush: bash; title: ; notranslate">
...
cd $soft_tmp/PDO_MYSQL-1.0.2/
$soft_install/php/bin/phpize
./configure --with-php-config=$soft_install/php/bin/php-config  --with-pdo-mysql=$soft_install/mysql/  &amp;&amp; make &amp;&amp; make install
...
</pre>
<p>之后， shell里执行 php -i 和 php -m都没有看到 pdo_mysql拓展。搜pdo_mysql，在将路径添加到php.ini中，仍找不到这个扩展，判断为编译失败。</p>
<p>这里是将pdo_mysql作为一个拓展引入使用的。在php5.3中，PHP开发组把mysqlnd作为默认的连接MYSQL的数据库驱动来使用，据官方描述，节省内存40%，速度更快，当然或许是为了解决许可协议的问题。之前PHP连接MYSQL，是调用MYSQL官方提供的C/C++编写的lib_mysql的dll/so,来实现。这个类库同样可以给PYTHON等脚本语言调用，只要按照API规范来。我们改用mysqlnd之后，就不用再为了lib_mysql去安装mysql client了。详情见：<a href="http://www.laruence.com/2011/10/05/2192.html" title="mysqlnd插件mysqlnd_ms的介绍" target="_blank">mysqlnd插件mysqlnd_ms的介绍</a>。<br />
两种方法都可以，运维同事都尝试了，由于时间关系，他们没做过多的尝试研究，就转向更紧急的项目了。</p>
<p>运维同事下载使用的PDO_MYSQL拓展的地址是 <a href="http://pecl.php.net/package/PDO_MYSQL">http://pecl.php.net/package/PDO_MYSQL</a> ，里面用很耀眼的颜色，标注如下几行字</p>
<blockquote><p>This package is not maintained anymore and has been superseded. Package has moved to channel http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_mysql/, package ext/pdo_mysql.</p></blockquote>
<p>也就是说，早在2006年5月1(我是根据最后一个打包文件日期猜的，或许不准)之后，PHP已经将这个pdo拓展放到PHP源码的 ext/pdo_mysql下内置了。这里的这个包，将不会在更新维护了。</p>
<p>在PHP官方文档上对<a href="http://www.php.net/pdo_mysql" title="pdo_mysql" target="_blank">pdo_mysql</a>使用<a href="http://www.php.net/manual/zh/mysqlnd.install.php" title="mysqlnd" target="_blank">mysqlnd</a>的时候，是这么描述的<br />
在php5.3中，已经支持mysqlnd作为数据库连接驱动了。而在将来的php5.4中，将变为默认的连接驱动。如图：<br />
<div id="attachment_793" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/11/mysqlnd-pdo_mysql.jpg" rel="lightbox[788]"><img src="http://www.cnxct.com/wp-content/uploads/2011/11/mysqlnd-pdo_mysql-150x150.jpg" alt="" title="mysqlnd-pdo_mysql" width="150" height="150" class="size-thumbnail wp-image-793" /></a><p class="wp-caption-text">mysqlnd-pdo_mysql</p></div></p>
<p>开启这个类库的</p>
<pre class="brush: bash; title: ; notranslate">
./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
</pre>
<p>之后，我的编译参数如下</p>
<pre class="brush: bash; title: ; notranslate">
./configure  --prefix=/usr/local/services/php --with-config-file-path=/usr/local/services/php/etc --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd  --with-iconv-dir=/usr/local/services/libiconv --disable-phar --with-gd=/usr/local/services/gd --with-jpeg-dir=/usr/local/services/jpeg --with-png-dir=/usr/local/services/png --with-freetype-dir=/usr/local/services/freetype --enable-bcmath --with-mcrypt
</pre>
<p>区别是使用php内置的pdo_mysql类库，使用mysqlnd作为连接驱动。</p>
<p>make之后，提示如下错误</p>
<pre class="brush: bash; title: ; notranslate">
soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:1070: undefined reference to `mysql_eof'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:1070: undefined reference to `mysql_fetch_row'
ext/mysql/php_mysql.o: In function `zif_mysql_error':
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:1727: undefined reference to `mysql_error'
ext/mysql/php_mysql.o: In function `zif_mysql_errno':
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:1758: undefined reference to `mysql_errno'
ext/mysql/php_mysql.o: In function `php_mysql_do_connect':
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:705: undefined reference to `mysql_get_client_version'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:963: undefined reference to `mysql_init'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:976: undefined reference to `mysql_options'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:980: undefined reference to `mysql_real_connect'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:1002: undefined reference to `mysql_options'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:706: undefined reference to `mysql_get_client_version'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:844: undefined reference to `mysql_init'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:850: undefined reference to `mysql_options'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:853: undefined reference to `mysql_real_connect'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:871: undefined reference to `mysql_options'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:989: undefined reference to `mysql_error'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:992: undefined reference to `mysql_errno'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:898: undefined reference to `mysql_ping'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:899: undefined reference to `mysql_errno'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:901: undefined reference to `mysql_real_connect'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:911: undefined reference to `mysql_options'
/data/sa/suse-soft/soft_tmp/php-5.3.8/ext/mysql/php_mysql.c:862: undefined reference to `mysql_error'
</pre>
<p>这种错误，让我手足无措，GOOGLE搜了下，也没找到相关案例，而且，一直被墙，打不开国外网页。百度搜的结果，还是算了。(中文还行，E文的话，百度确实不行，尤其是程序相关)<br />
之后，尝试make clean，清除之前的编译结果缓存之类。<br />
再次make，有个小意外</p>
<pre class="brush: bash; title: ; notranslate">
ERROR: invalid PHP executable specified by TEST_PHP_EXECUTABLE  = .....
</pre>
<p>再次搜索，这倒是很多网友遇到过，大部分的建议就是无视这个错误，不影响编译。照做。make install ，一路挺顺畅。</p>
<p>接着，php -i / php -m 也没发现pdo_mysql模块。<br />
郁闷无比，决定看下web下的phpinfo结果，发现居然有了。问题终于解决了。。。万岁。。</p>
<p>可是！！！<br />
1，为啥php -i 、php -m 的结果里看不到呢？ 思考，为什么呢？<br />
结合刚刚的报错，联想到CLI 模式下的php 脚本(以及相关的php.ini)跟刚刚从web下访问的php程序不是同一个。检查环境变量，以及切换到编译好的目录下执行php -i，发现pdo_mysql、mysqlnd等相关添加的模块了。</p>
<p>2，php.ini里没启用pdo_mysql拓展，为什么还能看的到呢？<br />
这次使用的是PHP内置的类库，不是以新拓展方式加载运行的，所以，不用更改php.ini，再添加相关so路径。</p>
<p>综上所述，文章没有高深的东西，只是有几个需要细心的点。<br />
1，以官方文档为准，一切跟着官方文档来，不轻易采信网络上网友提供的编译参数，包括这边博文。不论对方是老手、大牛，还是其他什么什么有威望的人。他们提供的方法或许跟你当前的环境不一致，时间也相差很大，或许相隔好几年了。<br />
2，确认得到的结果是准确的，怎么说呢，文中的例子中php-i的路径不是我们新编译的，而是之前编译，或者yum安装的，一定要到自己编译的程序目录下，用自己新编译的脚本去执行测试，获得测试结果，下结论，不为了偷懒，不敲路径，直接写程序名进行测试。<br />
3，遇到诡异的错误，我总会想要一个全新的系统，进行安装，以确保不被各种冗余、缓存等垃圾文件干扰。例子中用了make clean进行清除相关缓存，来解决文件缓存问题。(感谢<a href="http://weibo.com/ivonlee">@ivon_lee</a> 的帮助)<br />
4，自动安装脚本要及时更新，当然，不是意味着追求最新版本。例子中的pdo_mysql的拓展，官方提供了更好的方式，不论是效率，资源占用，都有更好的提升，为啥不使用呢。</p>
<p>备注：mysqlnd 的相关有点对比见<a href="http://developer.51cto.com/art/200903/115995.htm">http://developer.51cto.com/art/200903/115995.htm</a></p>
<p>PS:文中出现的我搜索无果两次错误，如果有人知道，请告诉我，谢谢。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/some-errors-on-compile-php-5-3-8-with-pdo_mysql-and-mysqlnd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WEB开发安全与运维安全浅见</title>
		<link>http://www.cnxct.com/web-development-security-ppt/</link>
		<comments>http://www.cnxct.com/web-development-security-ppt/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 06:16:33 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[招聘]]></category>
		<category><![CDATA[正则]]></category>
		<category><![CDATA[网络安全]]></category>
		<category><![CDATA[运维]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=764</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/09/62ca611cjw1dlaijihpjaj.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/09/62ca611cjw1dlaijihpjaj-150x150.jpg" alt="" title="62ca611cjw1dlaijihpjaj" width="150" height="150" class="alignleft sided inline" /></a>SESSION与COOKIE到底哪个更安全?去年80sec公布关于NGINX+php的漏洞，跟今年的这次是同一个漏洞？有关系吗？http keep-alive超时时间过长，会带来安全问题吗？设置多少秒合适？腾讯QQ群文件包含漏洞又是怎么一回事呢？借用网友的一句话，作为程序员，尽量要做到“知其然，知其所以然”，多多关注web安全，不要给安全工程师添麻烦，不能丢了程序员的脸。]]></description>
			<content:encoded><![CDATA[<p>前段时间，同事<a href="http://weibo.com/qxsxysxd" title="LeeQueen" target="_blank">LeeQueen</a>为公司同事做了个《安全意识防护》的PPT，效果很好，各位新同事也知道日常公工作中，不太注意到的隐私保护问题。PPT中也提到了一些社会工程学的案例，提到了某团购网站前台人员被声称是新开礼品公司的工作人员，以填写信息就送礼品为由，获取到此团购网站的所有员工联系方式。后此团购网站的高层打电话回访，得知对方是猎头公司[详情见<a href="http://www.wooyun.org/bugs/wooyun-2010-01370" target="_blank">乌云网</a>的链接]。此案例非常典型，讨论也尤为激烈，可谓是非常成功的培训。</p>
<p>此次培训之后，职业欠钱[<a href="http://weibo.com/zyqq" target="_blank">sina微博</a>][<a href="http://t.qq.com/zhiyeqianqian" target="_blank">腾讯微博</a>]让我给我们开发部门的PHP程序员同事们做一次PHP开发、运维时候一些安全注意事项。由于我在安全这块资历较浅，没有经验，我了解的大家都懂，这个话题太高深，我的水平完全不够，没法写这个PPT。而且，同事里有好几位安全界的前辈，我怎可关公面前耍大刀呢。上次写过一次关于<a href="http://www.cnxct.com/regularexpressions-pptx-pdf-share/">正则表达式PPT</a>，也就是一个月之前，深刻的体会到写PPT的痛苦，尤其是排版。实在不想写了。</p>
<p>后来，经常看到网上的安全工程师提到程序员安全意识较差，以至于同样的危险代码，危险程序，却屡次不改。当然，不是程序员不想改，而是程序员不太理解代码形成安全漏洞的原因。为此，我也觉得有必要提高一下我们程序员的安全意识了。</p>
<p>PPT中写了网络上常见的漏洞，形成原因，漏洞原理，防护建议等；也列举了近年来跟WEB相关的安全漏洞，以程序员的视角理解漏洞原理，并给出修复建议。这些建议仅供参考，不是正确答案。  由于本人水平原因，PPT中难免有错误，请见谅。也请安全界工程师指正。</p>
<p>借用网友的一句话，作为程序员，尽量要做到<strong>“知其然，知其所以然”</strong>，多多关注web安全，不要给安全工程师添麻烦，不能丢了程序员的脸。<br />
<div id="attachment_768" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/09/shengxie.jpg" rel="lightbox[764]"><img src="http://www.cnxct.com/wp-content/uploads/2011/09/shengxie-150x50.jpg" alt="" title="做人要有气节，不能丢了我们弄PHP的脸" width="150" height="50" class="size-thumbnail wp-image-768" /></a><p class="wp-caption-text">做人要有气节，不能丢了我们弄PHP的脸</p></div></p>
<p>同时，公司招聘PHP程序员，地点上海，公司规模为150人+，做网络游戏研发、运营。招聘条件以及待遇之类的，可以通过以下方式联系我，我们私聊。</p>
<p><a href="http://weibo.com/cfc4nx">http://weibo.com/cfc4nx</a><br />
<a href="http://t.qq.com/cfc4nx">http://t.qq.com/cfc4nx</a><br />
邮箱：cfc4n@博客域名点COM</p>
<p>最后，PPT是周末两天写的，这两天老婆挺着6个月的大肚子，为我做饭，老婆实在是太辛苦了，感谢我老婆。<br />
PS：讨厌写PPT[流泪]。</p>
<p>在线阅读：</p>
<div style="width:425px" id="__ss_9330286"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/cfc4n/web-9330286" title="Web开发与运维安全浅见">Web开发与运维安全浅见</a></strong><object id="__sse9330286" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110919213025-phpapp02&#038;stripped_title=web-9330286&#038;userName=cfc4n" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse9330286" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110919213025-phpapp02&#038;stripped_title=web-9330286&#038;userName=cfc4n" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/cfc4n">cfc4n</a>.</div>
</div>
<p>下载到本地：<br />
<strong>PPT下载：<a href='http://www.cnxct.com/wp-content/uploads/2011/09/web-development-security-ppt.zip'>web开发与运维安全浅见PPT下载，猛点这里</a></strong><br />
<strong>更多亮点在PPT的备注里，各位一定要看备注。转载的朋友麻烦保留PPT完整，包括招人信息。尤其是备注要保留。</strong><br />
&#8212;&#8212;-<br />
PPT在2011/09/19 更新了，更换匹配NGINX 对URI中PHP脚本的正则，考虑到了拓展名为 .phpa .phpb .phpc之类的情况。主要是更换了正则匹配的图，更改了正则内容。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/web-development-security-ppt/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>YSLOW法则中，为什么yahoo推荐用GET代替POST？</title>
		<link>http://www.cnxct.com/use-get-for-ajax-requests-why/</link>
		<comments>http://www.cnxct.com/use-get-for-ajax-requests-why/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 14:41:09 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[xhr]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yslow]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=735</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/08/zhefu.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/zhefu-150x150.jpg" alt="蜇伏" title="蜇伏" width="150" height="150" class="alignleft sided inline" /></a>Yahoo的优化法则里，有这么一条“Use GET for AJAX Requests”，让我们尽量使用GET来代替POST发起AJAX请求，为什么呢？ 上上周五，公司前端工程师培训，提到前端优化的一些技巧，当然不能少了yahoo yslow的优化法则。其中有这么一条“Use GET for AJAX Requests”，这些法则从最开始的14条，到现在的35条，一直都时刻关注的。可这么一条的原因我却一点都不清楚。在提问的环节里，我对yahoo WEB前端优化法则推荐AJAX中，使用GET代替POST的原因有疑问，便请教前端工程师。我们的工程师说GET的话，浏览器发送一个包，POST会发两个等等。我对这个解释仍带有疑问，甚至怀疑。]]></description>
			<content:encoded><![CDATA[<p><strong>背景：</strong><br />
上上周五，公司前端工程师培训，提到前端优化的一些技巧，当然不能少了<a href="http://developer.yahoo.com/performance/rules.html">yahoo yslow的优化法则</a>。其中有这么一条“Use GET for AJAX Requests”，这些法则从最开始的14条，到现在的35条，一直都时刻关注的。可这么一条的原因我却一点都不清楚。在提问的环节里，我对yahoo WEB前端优化法则推荐AJAX中，使用GET代替POST的原因有疑问，便请教前端工程师。我们的工程师说GET的话，浏览器发送一个包，POST会发两个等等。我对这个解释仍带有疑问，甚至怀疑。培训结束后，我随便搜索了一下，并没有得到理想的结果，可能很少人对Yahoo这么有权威的组织提出的优化法则产生怀疑，也很少人想知道为什么建议这么做，更多的人会唯命是从，墨守成规。之后，我又看了遍优化法则，看到一条是推荐开发者使用AJAX缓存的，这时，一个“伟大”的想法在我脑袋中一闪，莫非是GET请求可以缓存，而POST不可以？接着，我把我这个“伟大”的猜测告诉我的同事们，当初已经是下班时间，好多同事都离开公司，我也匆忙收拾东西下班了，没有仔细查找答案。</p>
<p>    周末期间，脑袋中频繁的闪现这个问题，仍对我的想法有怀疑，Yahoo前端这么牛X的团队的想法，岂是我这样的菜鸟能这么容易的猜测推断到的？我对我当初的推测的怀疑就像“小时候就怀疑小JJ绝对不是只用来撒尿那么简单”一样坚定。但向我这么懒惰的同学，实在找不出一点时间来验证我这个想法，空闲的时间宁愿多打几盘CS。一直拖到现在，台风来了，在家宅两天，头都睡扁了，也找不出不写这篇文章的理由。</p>
<p>验证Yahoo推荐的理由：<br />
验证XHR请求中yahoo推荐用GET代替POST做法的理由</p>
<blockquote><p>POST is implemented in the browsers as a two-step process: sending the headers first, then sending data. So it&#8217;s best to use GET<br />
POST请求分两步：发送http headers，再发送http data</p></blockquote>
<p>HTML+JS代码：</p>
<pre class="brush: php; title: ; notranslate">
 &lt;body&gt;
&lt;script src=&quot;jquery.1.3.2.js&quot;&gt;&lt;/script&gt;
&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;select name=&quot;option&quot; id=&quot;option&quot;&gt;
	&lt;option value=&quot;POST&quot; name=&quot;POST&quot;&gt;POST&lt;/option&gt;
	&lt;option value=&quot;GET&quot; name=&quot;GET&quot;&gt;GET&lt;/option&gt;
&lt;/select&gt;
	&lt;input  id=&quot;button&quot;  type=&quot;button&quot; value=&quot;POST提交&quot;&gt;
&lt;/form&gt;
&lt;script language=&quot;JavaScript&quot;&gt;
&lt;!--
$('#button').click(function(){
	var option = $('#option').val();
	$.ajax({
		type: option,
		url:&quot;cc.php&quot;,
		data: &quot;name=cfc4n&amp;option=&quot;+option,
		success: function(msg){
			alert(msg);
		}
	});
});
//--&gt;
&lt;/script&gt;
 &lt;/body&gt;
</pre>
<p>抓包工具：<a href="http://www.wireshark.org/">wireshark</a><br />
提示：wireshark(1.2.5版)在抓http包的时候，会默认合并packet reassembly选项，记得全部去掉。如下图(edit&#8211;>Preferences)<br />
<div id="attachment_739" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/08/wireshark-http.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/wireshark-http-150x150.jpg" alt="" title="wireshark去掉 packet reassembly选项" width="150" height="150" class="size-thumbnail wp-image-739" /></a><p class="wp-caption-text">wireshark去掉 packet reassembly选项</p></div></p>
<p>我分别发了一个GET、一个POST的XHR(XMLHttpRequest)请求，其数据包如下：<br />
<div id="attachment_740" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-get-post.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-get-post-150x150.jpg" alt="" title="XHR HTTP请求中GET与POST发送的数据包详情" width="150" height="150" class="size-thumbnail wp-image-740" /></a><p class="wp-caption-text">XHR HTTP请求中GET与POST发送的数据包详情</p></div><br />
如上图，GET请求发送的数据包为第一个红框内的结果；POST请求发送的数据包为第二个红框内结果，但多了一个第12条数据包(粉红色框内)，从10.0.0.108(我的PC)发往98.126.129.106(<a href="http://www.cnxct.com">www.cnxct.com</a>的服务器IP,也就是表单提交的目标服务器IP)，wireshark给出的信息是“<strong>Continuation or non-HTTP traffic</strong>”，这个提示就是说，本次数据包是接着上一次的HTTP请求发的，没有HTTP header，只有http data。<br />
详情如下图<br />
XHR HTTP POST请求的header部分数据：<br />
<div id="attachment_741" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-headers.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-headers-150x150.jpg" alt="" title="XHR HTTP POST请求的header部分数据" width="150" height="150" class="size-thumbnail wp-image-741" /></a><p class="wp-caption-text">XHR HTTP POST请求的header部分数据</p></div></p>
<p>XHR HTTP POST 请求的DATA部分：<br />
<div id="attachment_742" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-post-data.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-post-data-150x150.jpg" alt="XHR HTTP POST 请求的DATA部分" title="XHR HTTP POST 请求的DATA部分" width="150" height="150" class="size-thumbnail wp-image-742" /></a><p class="wp-caption-text">XHR HTTP POST 请求的DATA部分</p></div></p>
<p><strong>结论?：</strong><br />
果然，如伟大的YAhoo前端团队所说，XHR HTTP的POST请求会分为两步，先发HTTP HEADER，再发HTTP DATA部分。</p>
<p>然而，新的疑问又来了。为什么要分为两部？谁(例如W3C这种机构)规定的？每个浏览器都是这样的么？分两次比一次的的效率更高吗？</p>
<p><strong>继续：</strong><br />
带这我新的疑问，又进行了如下尝试：先分浏览器，IE8、Firefox5.0、Chrome13分别发送XHR GET 、XHR POST请求，抓包对比结果。<br />
<a href="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-get-post-chrome13-firefox5-ie8.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-get-post-chrome13-firefox5-ie8-150x150.jpg" alt="" title="xhr-get-post-chrome13-firefox5-ie8对比" width="150" height="150" class="aligncenter size-thumbnail wp-image-744" /></a></p>
<p>我惊奇的发现(细心的同学会注意到第三张图中，有椭圆形的框标出那些结果的浏览器是Chrome13)，Firefox5发送POST的数据包确是没有像yahoo前端优化法则中提到的那样，分为两次，两个包发送，而是一次完成http headers和 http data的发送。如下图：<br />
<div id="attachment_745" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-post-firefox5.jpg" rel="lightbox[735]"><img src="http://www.cnxct.com/wp-content/uploads/2011/08/xhr-http-post-firefox5-150x150.jpg" alt="firefox5在发送XHR POST请求时的数据包" title="firefox5在发送XHR POST请求时的数据包" width="150" height="150" class="size-thumbnail wp-image-745" /></a><p class="wp-caption-text">firefox5在发送XHR POST请求时的数据包</p></div><br />
大家可以从图中看到<strong>line-based text data:application/x-www-from-urlcoded</strong>下面就是POST的数据。<br />
这时，又有很多疑问产生了，其他浏览器呢？IE的所有版本都会分两次发么？Firefox的其他版本呢？<br />
当我想一个一个尝试抓包对比的同时，幸运的搜到了关于我这个疑问的PDF(<a href='http://www.cnxct.com/wp-content/uploads/2011/08/Analysis_of_browser_specific_characteristics.pdf'>Analysis_of_browser_specific_characteristics.pdf</a>)<br />
其中，提到firefox大部分版本在XP、WIN7、UBUNTU、MAC OS等系统上都是以1个包来实现的，其他常见浏览器都是分为两个包。</p>
<p>    相比大家很清楚的知道，HTTP(TCP)完成一次事务，通讯次数越多，越有可能出现故障(网络延迟等因素)，开销越大，浏览器(客户端)、服务端都要再进行一次TCP通讯，而且，需要一定的时间。对于我们追求更高的用户体验，需要HTTP通讯都避免到这些缺点，而各大浏览器开发商为何仍这么做呢？firefox的做法是最好的吗？</p>
<p>    上面的PDF里，模拟了各种网络环境，比如网络延迟、网络丢包等情况，分别来对比POST请求的1次包和2次包的优缺点。得出的结论是：当网络环境好的情况下，1次包跟2次包的在时间上差别基本可以无视。而在网络环境差的情况下，(2次包)TCP的验证数据包完整性上，有非常大的优点，客户端先告诉服务端即将发送的数据包大小，MD5等标识，当服务端告诉客户端收到(ACK包)的时候，客户端再次向服务端发送POST 的DATA。假如网络环境不好，网络延迟、丢包的时候，服务端会等待(延迟时)，客户端重发POST的DATA数据到服务单，来确保本次请求的完整性。</p>
<p>撰写这个PDF的作者在他的博客里详细的描述了写这个博客的起因，以及结果，还有一些关于与yahoo yslow前端团队的一些沟通过程，大家可以在这里<a href="http://loadimpact.com/blog/ajax-get-or-post-which-is-best">阅读</a>下(yahoo 的前端团队好像不太友好，哈)。</p>
<p><strong>结论：</strong><br />
通过参考这个PDF，以及我自己做的抓包测试，让我了解Yahoo YSLOW前端团队的这个推荐(他们没详细的说为啥这么推荐，只是简单的提了下GET请求产生TCP一个包；POST请求，产生2个TCP包。甚至都没告诉我们Firefox的多数版本[可能是所有版本]都是发一个TCP包的。更详细、更深层原因也没说，这里还得感谢下http://loadimpact.com的作者)。</p>
<p><strong>备注：</strong><br />
这里提供下我抓包测试时候的数据包(<del datetime="2011-08-07T14:53:16+00:00">截图用到的数据包中包含我的一些cookie，没上传。这里的是我新抓的，各位见谅</del>)，各位可以参考下，如果我的文字、方向有错，欢迎指出。<br />
<a href='http://www.cnxct.com/wp-content/uploads/2011/08/xhr-packet-chrome13-ff5-ie8.zip'>IE8、FF5、Chrome13发起XHR请求数据包</a></p>
<p>当你读到这里时，我承认，我骗了你，文章的内容不光是标题中所写的，为何推荐使用POST代替GET，更多的是抓去TCP、HTTP通讯包来验证各个浏览器是否如YSLOW所述的那样分2次包的过程，以及2次包与1次包的优缺点(PDF中)。希望你看到最后的时候，忘记标题讲的是什么。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/use-get-for-ajax-requests-why/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>《正则表达式》PPT共享(公司内部培训)</title>
		<link>http://www.cnxct.com/regularexpressions-pptx-pdf-share/</link>
		<comments>http://www.cnxct.com/regularexpressions-pptx-pdf-share/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 03:39:24 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[DFA]]></category>
		<category><![CDATA[NFA]]></category>
		<category><![CDATA[ppt]]></category>
		<category><![CDATA[正则表达式]]></category>
		<category><![CDATA[编译原理]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=727</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/07/medium2.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/07/medium2-150x150.jpg" alt="" title="medium2" width="150" height="150" class="alignleft sided inline" /></a>发明BSD、TCP/IP、csh、vi和NFS的SUN首席科学家Bill Joy说过，在计算机体系结构领域里，缓存是唯一称得上伟大的思想的。其他的一切发明和技术不过是在不同场景下应用这一思想而已。在计算机软件领域里，情形也大体相似。如果罗列这个领域的伟大发明，绝对不超过二十项。这些包括分组交换网络、WEB、lisp、哈希算法、UNIX、编译技术、关系模型、面向对象、XML这些大名鼎鼎的家伙，而正则表达式绝对不应该被漏掉。]]></description>
			<content:encoded><![CDATA[<p>近来我越发懒惰，博客很少更新，最近在公司内部做了一个培训，关于正则表达式的，发到博客里来凑数吧，也算分享给其他朋友了。至于正则表达式的重要性，想必不用我说了吧。</p>
<blockquote><p>发明BSD、TCP/IP、csh、vi和NFS的SUN首席科学家Bill Joy说过，在<em>计算机体系结构领域</em>里，缓存是唯一称得上伟大的思想的。其他的一切发明和技术不过是在不同场景下应用这一思想而已。在<em>计算机软件领域</em>里，情形也大体相似。如果罗列这个领域的伟大发明，绝对不超过二十项。这些包括分组交换网络、WEB、lisp、哈希算法、UNIX、编译技术、关系模型、面向对象、XML这些大名鼎鼎的家伙，而<strong>正则表达式</strong>绝对不应该被漏掉。</p></blockquote>
<p>你还记得大学时候的课程编译原理中提到的 NFA\DFA 吗？还有印象吗？你知道PHP编译器扫描你写的PHP代码字符串的时候，是如何区分哪个是变量，哪个是常量的吗？你知道SQL语法分析器是如何判断你的WHERE条件中出现的SELECT\FROM\ WHERE等关键字是字符串，而不是子查询等关键字的？<br />
你知道.ini配置文件跟xml配置文件对程序来说，是如何扫描解析的吗？他们一样吗？如果你想知道，那你务必的熟悉正则表达式，精通正则表达式。不光能写出正则实现功能，还得能写出高效的正则表达式。(编译原理的课程里，有关于NFA\DNA的大篇幅描述，想写出自己的编程语言，正则是躲不掉的。)</p>
<p>不扯淡了，附PPT吧。<br />
(PPT模版是网上网友的，我是借用他的，其中有几张PPT是直接用他的。很好区分，动画效果很炫的(主要是文字层下的颜色，大约10页吧，简单描述那几页)就是原作者的，其他都是我自己写的。作者信息在PPT最后一页有)<br />
PDF也放出来，效果没PPTX好，很多层都被遮住了。</p>
<p><strong><a href='http://www.cnxct.com/wp-content/uploads/2011/07/regularexpressions.zip'>猛击这里下载《正则表达式》PPTX</a></strong></p>
<p>或者您也可以在线阅读：</p>
<div style="width:425px" id="__ss_9434985"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/cfc4n/ss-9434985" title="正则表达式匹配原理" target="_blank">正则表达式匹配原理</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9434985" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/cfc4n" target="_blank">cfc4n</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/regularexpressions-pptx-pdf-share/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>编译xhprof时的一个小意外</title>
		<link>http://www.cnxct.com/you-do-not-have-dot-image-generation-utility-installed/</link>
		<comments>http://www.cnxct.com/you-do-not-have-dot-image-generation-utility-installed/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 08:19:55 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[graphviz]]></category>
		<category><![CDATA[libpng]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php优化]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=709</guid>
		<description><![CDATA[<img src="http://www.cnxct.com/wp-content/uploads/2011/03/xihu-150x150.jpg" alt="you do not have &#039;dot&#039; image generation utility installed. " title="you do not have &#039;dot&#039; image generation utility installed. " width="150" height="150" class="alignleft sided inline" /></a>当我查看[View Full Callgraph]的时候，却提示如下：<strong>Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have 'dot' image generation utility installed.</strong>，这TMD神马玩意？是什么错呢？]]></description>
			<content:encoded><![CDATA[<p>新项目基本开发完毕，剩余收尾工作。趁美工调整新UI的时间，赶紧在测试机上安装PHP的性能检测利器xhprof。<br />
下载地址<a href="http://pecl.php.net/get/xhprof-0.9.2.tgz">http://pecl.php.net/package/xhprof</a>，这里有tar包，我下了<a href="http://pecl.php.net/get/xhprof-0.9.2.tgz">http://pecl.php.net/get/xhprof-0.9.2.tgz</a>，</p>
<pre class="brush: bash; title: ; notranslate">
tar zxvf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib &lt;directory_for_htdocs&gt; # 应用程序所在目录，其中xhprof_lib是生成统计数据用到的类库。xhprof_html是查看统计数据的时候，用到的类库。
cd extension
/usr/local/php/bin/phpize
./configure
make
make install
</pre>
<p>之后，遍完成了。一路很“顺利”。<br />
php.ini如下设置</p>
<p>extension=xhprof.so<br />
; 存放目录，这个目录用来存放统计程序性能生成的数据。要有读写权限。<br />
xhprof.output_dir=/var/xhprof_data</p>
<p>代码中，程序头部如下设置：</p>
<pre class="brush: php; title: ; notranslate">
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
</pre>
<p>程序最下面：</p>
<pre class="brush: php; title: ; notranslate">
$xhprof_data = xhprof_disable();
include_once &quot;./xhprof_lib/utils/xhprof_lib.php&quot;;
include_once &quot;./xhprof_lib/utils/xhprof_runs.php&quot;;
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs-&gt;save_run($xhprof_data, 'xhprof');
echo 'http://&lt;xhprof-ui-address &gt;/index.php?run='.$run_id.'&amp;source=xhprof';//source的值就是save_run的第二个参数的值。其中，网址就是上面保存xhprof_html的路径。
</pre>
<p>之后遍看到统计数据结果了。</p>
<p>可是，当我查看[View Full Callgraph]的时候，却提示如下：<strong>Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have &#8216;dot&#8217; image generation utility installed.</strong>，这TMD神马玩意？是什么错呢？<br />
关于dot的介绍，xhprof在这里写出来了：<br />
<a href="http://mirror.facebook.net/facebook/xhprof/doc.html">http://mirror.facebook.net/facebook/xhprof/doc.html</a></p>
<blockquote><p>dot (image generation utility): The callgraph image visualization ([View Callgraph]) feature relies on the presence of Graphviz “dot” utility in your path. “dot” is a utility to draw/generate an image for a directed graph. </p></blockquote>
<p>GOOGLE了半天，也没找到可用的信息。问了下群里的同学，大牛<a href="http://huoding.com/" title="火丁笔记" target="_blank">老王</a>告诉俺，xhprof绘制的是png图，系统(graphviz-2.24.0)不支持。才知道绘图的dot拓展没装成功。我的操作系统是UBUNTU 10.10 SERVER版的，也就是dot 不支持PNG。赶紧再次编译下graphviz，看看提示信息有什么缺少的。果然：</p>
<pre class="brush: plain; title: ; notranslate">
options:
  cgraph:        No (disabled by default - experimental)
  codegens:      No (disabled by default - deprecated)
  digcola:       Yes
  expat:         No (missing library)
  fontconfig:    No (missing fontconfig-config)
  freetype:      No (missing freetype-config)
  glut:          No (missing GL/glut.h)
  gts:           No (gts library not available)
  ipsepcola:     No (disabled by default - C++ portability issues)
  ltdl:          Yes
  ortho:         No (disabled by default - experimental)
  png:           No (missing png.h)
</pre>
<p>  <strong>png:           No (missing png.h)</strong>果然。。。。<br />
赶紧到libpng官网down分源码，再次编译一下。<br />
SF.NET上地址是 <a href="http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/">http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/</a>,我下的是http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/libpng-1.5.1.tar.gz/download ，一气呵成，很顺利。<br />
再次编译graphviz的时候，提示如下：</p>
<pre class="brush: plain; title: ; notranslate">
 ortho:         No (disabled by default - experimental)
  png:           Yes
</pre>
<p>好了，内牛满面。之后就是 make&#038;make install了。<br />
当打开[View Full Callgraph]的时候，果然是性感的资源占用统计图了。<br />
展示下效果图：<br />
优化前：<br />
<div id="attachment_721" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/03/1.png" rel="lightbox[709]"><img src="http://www.cnxct.com/wp-content/uploads/2011/03/1-150x150.png" alt="xhprof性能监控图优化前" title="xhprof性能监控图优化前" width="150" height="150" class="size-thumbnail wp-image-721" /></a><p class="wp-caption-text">xhprof性能监控图优化前</p></div></p>
<p>找到问题所在，稍微调试：<br />
<div id="attachment_722" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/03/2.png" rel="lightbox[709]"><img src="http://www.cnxct.com/wp-content/uploads/2011/03/2-150x150.png" alt="xhprof性能监控图找到问题，调试中" title="xhprof性能监控图找到问题，调试中" width="150" height="150" class="size-thumbnail wp-image-722" /></a><p class="wp-caption-text">xhprof性能监控图找到问题，调试中</p></div></p>
<p>最终代码优化结果：<br />
<div id="attachment_723" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/03/3.png" rel="lightbox[709]"><img src="http://www.cnxct.com/wp-content/uploads/2011/03/3-150x150.png" alt="xhprof性能监控图优化结果" title="xhprof性能监控图优化结果" width="150" height="150" class="size-thumbnail wp-image-723" /></a><p class="wp-caption-text">xhprof性能监控图优化结果</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/you-do-not-have-dot-image-generation-utility-installed/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>盗梦空间之胡思乱想</title>
		<link>http://www.cnxct.com/%e7%9b%97%e6%a2%a6%e7%a9%ba%e9%97%b4%e4%b9%8b%e8%83%a1%e6%80%9d%e4%b9%b1%e6%83%b3/</link>
		<comments>http://www.cnxct.com/%e7%9b%97%e6%a2%a6%e7%a9%ba%e9%97%b4%e4%b9%8b%e8%83%a1%e6%80%9d%e4%b9%b1%e6%83%b3/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 02:13:26 +0000</pubDate>
		<dc:creator>hello world</dc:creator>
				<category><![CDATA[所谓技术]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=705</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/02/meng.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/02/meng-150x150.jpg" alt="梦是二进制" title="梦是二进制" width="150" height="150" class="alignleft sided inline" /></a>最近没事总爱胡思乱想。昨日看了《初恋50次》，查了一下大脑的记忆系统。发现，原来人脑子里有一个叫“海马体”的东西来负责记忆。 今早开始胡思乱想，梦是什么？想了一段时间得到如下图的结论。那梦是什么状况呢。当人熟睡的时候感观进入休息状态。但是大脑不休息，记忆体不休息。存贮在记忆体里的记忆会和大脑互相传递。这就形成了梦。所以梦是，大脑和记忆体之间互相交流产生的。如果我们破解了记忆体存储记忆的方式。]]></description>
			<content:encoded><![CDATA[<p>     最近没事总爱胡思乱想。昨日看了《初恋50次》，查了一下大脑的记忆系统。发现，原来人脑子里有一个叫“海马体”的东西来负责记忆。</p>
<p>    今早开始胡思乱想，梦是什么？想了一段时间得到如下图的结论。（注：这是本人的胡思乱想。没有啥科学根据。）</p>
<p>    <a href="http://www.cnxct.com/wp-content/uploads/2011/02/11.bmp" rel="lightbox[705]"><img src="http://www.cnxct.com/wp-content/uploads/2011/02/11.bmp" alt="" title="1" class="alignnone size-full wp-image-707" /></a> </p>
<p>     我解释下这个图，当人体的感观系统得到信息时，会以一种编码方式传递给大脑。大脑会把这种编码传递给记忆体。记忆体会短暂存储这种信息，然后会选择是否转换成长期记忆。<strong>这种感观，大脑，记忆互相联通时的状态就是现实。</strong></p>
<p>　　那梦是什么状况呢。当人熟睡的时候感观进入休息状态。但是大脑不休息，记忆体不休息。存贮在记忆体里的记忆会和大脑互相传递。这就形成了梦。<strong>所以梦是，大脑和记忆体之间互相交流产生的。</strong></p>
<p>　　如果我们破解了记忆体存储记忆的方式。（例如硬盘是以二进制的方式存储的）那么我们就可以记忆移植了，盗梦也不再是，只有在科幻片中才可能出现的事了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/%e7%9b%97%e6%a2%a6%e7%a9%ba%e9%97%b4%e4%b9%8b%e8%83%a1%e6%80%9d%e4%b9%b1%e6%83%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员的谦逊编程</title>
		<link>http://www.cnxct.com/%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e8%b0%a6%e9%80%8a%e7%bc%96%e7%a8%8b/</link>
		<comments>http://www.cnxct.com/%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e8%b0%a6%e9%80%8a%e7%bc%96%e7%a8%8b/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 08:17:25 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[代码审查]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=701</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/01/769577eb8b38.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/01/769577eb8b38-150x150.jpg" alt="" title="谦逊编程" width="150" height="150" class="alignleft sided inline" /></a>其实每个程序员或多或少都会有个毛病，就是具有某种有强烈的“优越感”。而这种“优越感” 有可能成为激励自身不断发展的动力，同时也有可能成为其职场中的绊脚石。程序员的这种心态，源自自身掌握的技术、以及多年积累的经验。正如上面所言，这种心态 能使其一切都力求完美、同时准确按照自己的思路行事，能使其技术不断的提升。而另一方 面，如果将这种态度套用给身边其他的人（包括陌生人、同事、朋友甚至家庭），则会发现 他的生活将会如履薄冰 -- 他们只会看见完美的一面而忽略了更多更需要关注的事物。]]></description>
			<content:encoded><![CDATA[<p>译注：开发人员如何从无休止的需求、项目进度中摆脱烦躁的心态，这是每个人都值得思考的话题。无意间看见了<a title="http://mikebernat.com/blog/Egoless_Programming_-_Developing_Without_the_Attitude" href="http://mikebernat.com/blog/Egoless_Programming_-_Developing_Without_the_Attitude">这篇文章</a>，恐于太长遂将其精简翻译，错误之处难免欢迎指正。</p>
<p>同时如果你有有关程序员修身养性的观点和心得，欢迎说说你的看法。</p>
<p><tt>-- Split --</tt></p>
<p>其实每个程序员或多或少都会有个毛病，就是具有某种有强烈的“优越感”。而这种“优越感” 有可能成为激励自身不断发展的动力，同时也有可能成为其职场中的绊脚石。</p>
<p>程序员的这种心态，源自自身掌握的技术、以及多年积累的经验。正如上面所言，这种心态  能使其一切都力求完美、同时准确按照自己的思路行事，能使其技术不断的提升。而另一方  面，如果将这种态度套用给身边其他的人（包括陌生人、同事、朋友甚至家庭），则会发现 他的生活将会如履薄冰 &#8212;  他们只会看见完美的一面而忽略了更多更需要关注的事物。</p>
<p>总而言之，越早发现并解决这一问题，越对自身有利。套用 GeraldWeinberg 在<a title="http://www.amazon.com/exec/obidos/ISBN=0932633420/portlandpatternrA/" href="http://www.amazon.com/exec/obidos/ISBN=0932633420/portlandpatternrA/">《计算机编程心理学》</a>中的一段话</p>
<pre>这种想法是程序员必须解决的，他们对待自己的代码犹如对待自己身体的
一部分，因此他们拒绝所有的负面评价。相反，它们（指代这种心态）应
该及时的引导到正途，使其发挥真正的效用。人非圣贤，这不仅仅是心态
更是精神上的境界，并非所有人都能达到，但仍旧值得去尝试。</pre>
<h2>症状</h2>
<p>那么，你如何得知这种“优越感”正在伤害到自己？除了应付那些没完没了的催促项目进度的 电话，以及给同事擦屁股的优化工程，其它的现象并非显而易见。</p>
<p>其实就我个人而言，时常也会自我责备，这就能窥出事态的严重。例如一方面你对项目疲于 奔命，而同时却忽略身边的人对你表达的看法（该死，这个时候我应该放下手头的工作听他 们说完的）。或者你“假装”静下心来听取他们的意见，但不就繁杂的工作却让你左耳进右耳 出。</p>
<p>其他的些症状</p>
<ul>
<li>如上面所说的，不会妥善处理批评</li>
<li>不放心同伴的代码，经常性地对他们进行代码审查（Review）</li>
<li>报复性的编写大量充斥着错误的代码</li>
<li>个人的消极心态，对自身和团队造成不利的影响</li>
<li>必须要求进行测试，但出发点却是炫耀</li>
<li>对事物的看法仅仅局限于个人或者本职位的角度</li>
</ul>
<p>这不仅仅是你个人的事情，编程以及项目开发实际上是团队活动。了解到这些，你将会意识到 你的心态将会直接影响到你的同事。</p>
<pre>事实就是这样，当我对您的代码提出写意见甚至批评时，你应该听、并且认
真的听，这样你才能理解我的看法。</pre>
<p>有可能最糟糕的情况就是，即便早已经收到其他同事的提醒，当事人已经陷入此泥潭无法自拔。</p>
<h2>准则</h2>
<p>让我们回到文章的题目本身，正如上面的例子中看到，“谦逊编程”不是编程技术本身，而是 种态度，但它的确会比你掌握的某种技术要有用的得多。</p>
<p>行为准则的确能改变人的心态，下面是些不成文的建议，或许你可以尝试下</p>
<ul>
<li>不要草率的宣布你的决定，在大多数情况下，你应该和你们的同事们讨论</li>
<li>不要使用这些论调，这非常让人感到不适：“这是见过的最糟糕的代码了”，换之你可以这样说，“我有个更好的解决方案，要不看看？”</li>
<li>不要轻易认为他们没有考虑到你想的方式，即便很不幸是这样，应该善意的提醒。例如“你觉得我这个看法怎么样&#8230;”</li>
<li>不要无理由的批评你认为很弱智的现象，例如“我觉得 DBA 脑门子被夹了，这个字段竟然使用 INT 型”</li>
</ul>
<p>更多的，可以参考 Tech Republic 中的<a title="http://articles.techrepublic.com.com/5100-10878_11-1045782.html" href="http://articles.techrepublic.com.com/5100-10878_11-1045782.html">“谦逊编程”十条诫律</a>：</p>
<ul>
<li><strong>理解和接受你将犯下的“错误”。</strong><br />
重点是及早的发现你已经犯下的错误，当代码投入使用以后，改动起来就会非常的困难。</li>
<li><strong>你的代码不能代表你的人。</strong><br />
记住始终要 Review 你的代码，即便你已经认为无懈可击，经验证明总能发现些错误。</li>
<li><strong>不管怎么样，有些“奇技淫巧”总能派上用场，而可能这些技巧别人知道的比你更多。</strong><br />
如果你坚持不耻下问，你的同伴总能分享你更多。</li>
<li><strong>不要在完全没有沟通的情况下，自作多情的进行代码重构。</strong><br />
当你确定要更改别人的代码时，必须加上良好的修改记录，这也是出于对他人的种尊重。</li>
<li><strong>对待那些新手要保持充分的尊重、细心以及耐心。</strong><br />
记住当他们成长起来后，能帮你解决的问题会比你想象中的还要多。</li>
<li><strong>唯一不变的是变化。</strong><br />
怀着开放的心态对待变化，对于各种需求、平台甚至开发工具的变更，应该是迅速适应而不是牢骚满腹 &#8212; 这样解决不了问题。</li>
<li><strong>真正的权威来自学识，而不是立场。</strong><br />
权威源自学识、尊重源自权威。</li>
<li><strong>优雅的接受失败。</strong><br />
最终你的一些观点将会被推翻，即便你有能力证明你的观点是正确的，请不要重复的争辩。帮助其他人意识到这点的最好工具，就是你的理解以及时间。</li>
<li><strong>不要成为“办公室男”。</strong><br />
不要在昏暗的办公室里独自喝着可乐敲着代码。当与外界隔绝，离开同伴的视线，也就说明你离开了一个开放、合作的环境。</li>
<li><strong>批判代码而不是编写它的人。</strong><br />
要知道你的意见可以影响到代码也可以影响到其人，如果你想尝试下如何打击别人的自信并造成冲突，那么尝试下吧。</li>
</ul>
<p>此文转载自：<a href="http://www.gracecode.com/archives/2971/">http://www.gracecode.com/archives/2971/</a> ，自勉自勉。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e8%b0%a6%e9%80%8a%e7%bc%96%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>为什么使用ubuntu server的会被鄙视？</title>
		<link>http://www.cnxct.com/%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8ubuntu-server%e7%9a%84%e4%bc%9a%e8%a2%ab%e9%84%99%e8%a7%86%ef%bc%9f/</link>
		<comments>http://www.cnxct.com/%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8ubuntu-server%e7%9a%84%e4%bc%9a%e8%a2%ab%e9%84%99%e8%a7%86%ef%bc%9f/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 03:45:56 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[命令行]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=693</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/01/13.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/01/13-150x150.jpg" alt="" title="忽如一夜春风来，千树万树梨花开" width="150" height="150" class="alignleft sided inline" /></a>由于个人经历原因，我在06年经Dancefire推荐，才认识ubuntu的。时至今日，已有5、6年了。对着ubuntu有着莫名的喜爱。ubuntu桌面版的易用性，友好性，使得我这个菜鸟很容易的入门了。
如今，在公司的svn服务器系统选择上，我也选了ubuntu。]]></description>
			<content:encoded><![CDATA[<p>由于个人经历原因，我在06年经<a href="http://blog.csdn.net/dancefire/">Dancefire</a>推荐，才认识ubuntu的。时至今日，已有5、6年了。对着ubuntu有着莫名的喜爱。ubuntu桌面版的易用性，友好性，使得我这个菜鸟很容易的入门了。<br />
如今，在公司的svn服务器系统选择上，我也选了ubuntu。<br />
   近期，重写了passport系统，出于好奇心，好奇自己的登录程序的并发处理能力、占用资源情况等，想压力测试一下，并不是项目真正完成的时候进行的测试。测试环境一切都是ubuntu的apt之后默认安装的配置。测试中发现瓶颈在DB，顺便让DBA帮看下哪里需要优化的。不想却被一位同事鄙视(善意的鄙视)一番，嘲笑我选择了ubuntu server。我很纳闷，我对linux不熟悉，找不到强有力的理由来反驳。不过，我觉得，不选择ubuntu的理由不能是向他所说的“哪有公司用ubuntu server？”。容我直白的说，如果真的这么想的话，我觉得这可能有些“井底之蛙”了。可能是ubuntu pc版本的界面，比较漂亮，安装软件更傻瓜化，点点鼠标的事情。软件的源很多，基本不用编译等等这些原因，认为使用ubuntu的人都是菜鸟级的。认为全是命令行的界面，所有软件都亲自编译那才叫高手。。。如果要是从内核上找优点，论证这些强项，我会更容易接受你的看法。<br />
   比起快速部署，我想，ubuntu server应该比centos之类redhat系的要快的多吧。至于觉得安装的没有编译的效率高，这些可以通过配置文件来设置吧。ubuntu更新比较频繁，可能在升级生，不会很平滑。<br />
    对于比较那种linux的server比较好的这种比较，就跟比较 asp.net、PHP、jSP、python等脚本语言比较牛B一样没有意义。更多的在于使用者，而不在于语言本身。如何选择，就看哪种自己更熟悉，更习惯。当然，我也是瞎扯了。我对linux基本不熟悉的。</p>
<p>顺便附上2011年-01-19的linux市场份额图：<br />
<div id="attachment_698" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.cnxct.com/wp-content/uploads/2011/01/2011-01-19_linux_market_share.png" rel="lightbox[693]"><img src="http://www.cnxct.com/wp-content/uploads/2011/01/2011-01-19_linux_market_share-150x150.png" alt="" title="2011-01-19_linux_market_share" width="150" height="150" class="size-thumbnail wp-image-698" /></a><p class="wp-caption-text">2011年-01-19的linux市场份额图</p></div></p>
<p>其中，centos占了29%，ubuntu占了12.3%，也算不少了吧。</p>
<p>原文地址：<a href="http://w3techs.com/technologies/details/os-linux/all/all">http://w3techs.com/technologies/details/os-linux/all/all</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8ubuntu-server%e7%9a%84%e4%bc%9a%e8%a2%ab%e9%84%99%e8%a7%86%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>正则表达式与数学（方程式、线性方程）</title>
		<link>http://www.cnxct.com/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e4%b8%8e%e6%95%b0%e5%ad%a6%ef%bc%88%e6%96%b9%e7%a8%8b%e5%bc%8f%e3%80%81%e7%ba%bf%e6%80%a7%e6%96%b9%e7%a8%8b%ef%bc%89/</link>
		<comments>http://www.cnxct.com/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e4%b8%8e%e6%95%b0%e5%ad%a6%ef%bc%88%e6%96%b9%e7%a8%8b%e5%bc%8f%e3%80%81%e7%ba%bf%e6%80%a7%e6%96%b9%e7%a8%8b%ef%bc%89/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 13:21:18 +0000</pubDate>
		<dc:creator>CFC4N</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[分支]]></category>
		<category><![CDATA[回溯]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[方程式]]></category>
		<category><![CDATA[正则]]></category>
		<category><![CDATA[正则表达式]]></category>
		<category><![CDATA[素数]]></category>
		<category><![CDATA[非贪婪]]></category>

		<guid isPermaLink="false">http://www.cnxct.com/?p=687</guid>
		<description><![CDATA[<a href="http://www.cnxct.com/wp-content/uploads/2011/01/Lakeside-Sunset-Michigan.jpg"><img src="http://www.cnxct.com/wp-content/uploads/2011/01/Lakeside-Sunset-Michigan-150x150.jpg" alt="" title="清风不识字，何故乱翻书。" width="150" height="150" class="alignleft sided inline" /></a>大清早的打QQ去，收到一位网友的信息。问得是正则表达式判断素数的。去年看到过，没记录下来。
正则表达式如下：【^1?$&#124;^(11+?)\1+$】可以判断素数（换成n个1的形式，n为数字的大小。比如5转换为11111；3转换为111；2转换为11。）]]></description>
			<content:encoded><![CDATA[<p>大清早的打QQ去，收到一位网友的信息。问得是正则表达式判断素数的。去年看到过，没记录下来。<br />
正则表达式如下：</p>
<blockquote><p>^1?$|^(11+?)\1+$ 可以判断素数（换成n个1的形式，n为数字的大小。比如5转换为11111；3转换为111；2转换为11。）</p></blockquote>
<p><strong>什么是素数？</strong><br />
初中学的吧。我们老师当初教我们的是“质数”。看下概念：<br />
质数又称素数。指在一个大于1的自然数中，除了1和此整数自身外，没法被其他自然数整除的数。<br />
换句话说，只有两个正因数（1和自己）的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。</p>
<p><strong>这个正则表达式是什么意思？</strong><br />
【^1?$|^(11+?)\1+$】中间用【|】分开。【|】在正则语法里，表示“或”，作用于其前后两个单元。(还是不明白的看下面，明白的跳过下面这段)</p>
<blockquote><p>比如【ab|cd】可以匹配“ab”、也可以匹配“cd”，意思是除了“ab”就是“bc”，如果想匹配“abd”、“acd”那【|】的作用域得改下，加个范围<br />
改成【a(b|c)】(匹配结果分配组)或者【a(?:b|c)d】(匹配结果不分配组，<a href="http://www.cnxct.com/php%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e7%9a%84%e6%95%88%e7%8e%87%ef%bc%9a%e5%9b%9e%e6%ba%af%e4%b8%8e%e5%9b%ba%e5%8c%96%e5%88%86%e7%bb%84/">更高效率</a>)。</p></blockquote>
<p>继续刚刚的正则，分为两个<em>分支</em>，其一为【^1?$】和【^(11+?)\1+$】。其中【^】脱字符在正则语法中，除了在中括号【[]】中都是代表开头的意思，在中括号中的表示非。<br />
第一个分支【^1?$】匹配的是“1”或者“”(空字符串)。<br />
第二个分支【^(11+?)\1+$】，先看下括号内的【(11+?)】匹配的是字符“1”后面接着【1+】就是1到无数个1。后面的【?】问号表示<a href="http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/">非贪婪</a>，就是尽量少的匹配。<br />
接着往后看【\1+】中，【\1】表示引用已匹配的第一个组的结果。也就是第一个【()】括号匹配的结果。同理【\2】就是第二个括号捕获的结果。(小提示：上面提到的【(?:)写法就是不分配组，这样引用的话，就引用不到了】)<br />
【+】就是1到无数个了。这个表达式我们可以这么看。【(11+?)】看成数学中的1+n，其中n为大于0的正整数。外面的【\1+】也就是引用前面这个组的次数。理解成m倍，其中m为大于0的正整数。<br />
那整个表达式就是(1+n)*m。因为n、m都大于0，那么1+n肯定大于1，最小为2，最大为无穷大；m最小为1，最大为无穷大。<br />
那么，一个大于2的正整数的任何大于零的倍数永远都是合数，也就是非素数。</p>
<p>再回过头来看看这个表达式。匹配的分别为0个或1个字符串“1”，也就是数字0，数字1。和其他所有合数。整个表达式，如果成功匹配就是非素数，如果不匹配就是质数。这就是对的了。</p>
<pre class="brush: php; title: ; notranslate">
if (preg_match('/^1?$|^(11+?)\1+$/i', $subject)) {
	#不是素数
} else {
	# 是素数
}
</pre>
<p>小提示：<del datetime="2011-01-09T13:11:29+00:00">此鉴定是否为素数方法仅研究学习用，不能用到正式程序中，字符串过长，会造成非常恐惧大的回溯</del>。</p>
<p>英文博客地址：http://blog.stevenlevithan.com/archives/algebra-with-regexes</p>
<p>在上面的博文中，有提到两个方程式与正则表达式，我们一起来研究下。</p>
<ul>
<li>
二元方程17x + 12y = 51，其表达式【^(.*)\1{16}(.*)\2{11}$】。很好理解。【(.*)】也就是0到无数个【.】点号。（这里是接着上文说的，其实，【.】点号想表示的是字符“1”）<br />
也就是0到无数个1,后面【\1】引用一次。后面【{16}】就是16次。作用于前面的【\1】，也就是16次引用。加上开始的【(.*)】一共正好17次。后面一个就不说了，跟这个一样。<br />
正则引擎会依次尝试【(.*)】中0到无数个字符“1”，0个字符“1”，1个字符“1”，2个字符“1”一直增加的尝试。直到成功，否则要尝试完所有字符“1”的最大个数(这里是51个字符“1”)。</li>
<li>
<p>二、三元方程式11x + 2y + 5z = 115，其表达式为【^(.*)\1{10}(.*)\2{1}(.*)\3{4}$】，理解就跟上面那个一样。注意【\2】、【\3】值得是第2，第3个括号捕获的内容，别看花眼了。
</li>
</ul>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
上面几个有意思的数学题都是将整数转换为对应个数的字符“1”。下面这个，是转换为二进制数的。<br />
先吃饭，以后再写。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cnxct.com/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e4%b8%8e%e6%95%b0%e5%ad%a6%ef%bc%88%e6%96%b9%e7%a8%8b%e5%bc%8f%e3%80%81%e7%ba%bf%e6%80%a7%e6%96%b9%e7%a8%8b%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

