<?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>浏忙大爆炸 &#187; 技术</title>
	<atom:link href="http://blog.waterlin.org/articles/tag/%e6%8a%80%e6%9c%af/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.waterlin.org</link>
	<description>源于理工科男的烂笔头情结</description>
	<lastBuildDate>Fri, 03 Feb 2012 08:35:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>写了两篇技术小结的笔记</title>
		<link>http://blog.waterlin.org/articles/two-blog-posts-about-db-and-opencv.html</link>
		<comments>http://blog.waterlin.org/articles/two-blog-posts-about-db-and-opencv.html#comments</comments>
		<pubDate>Fri, 09 Sep 2011 13:18:34 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/two-blog-posts-about-db-and-opencv.html</guid>
		<description><![CDATA[最近折腾得够呛，天天写代码，都没时间更新博客了。 总结一下最近碰到的两个问题，写到中文 Wiki 里了，希望对大家有点帮助。 OpenCV 在 Ubuntu 11.04 平台上的编译 最近要迁移大把工作成果到 Linux 平台，即要在 Linux 下大量地折腾与 OpenCV 相关的代码。很久没有在 Linux 上折腾了，时过境迁，同样碰到了不少问题，写成日志《OpenCV 各种安装错误汇总》。 Berkeley DB 数据库的操作还是蛮有技巧的，如果需要把内存里结构比较复杂的数据写到 Berkeley DB 里，我当然拥有我的技巧，以把 IplImage 数据写入到 Berkeley DB 为例，介绍我对这一技术的理解。]]></description>
			<content:encoded><![CDATA[<p>最近折腾得够呛，天天写代码，都没时间更新博客了。</p>
<p>总结一下最近碰到的两个问题，写到<a href="http://cn.waterlin.org">中文 Wiki</a> 里了，希望对大家有点帮助。</p>
<ol>
<li>OpenCV 在 Ubuntu 11.04 平台上的编译
<p>最近要迁移大把工作成果到 Linux 平台，即要在 Linux 下大量地折腾与 OpenCV 相关的代码。很久没有在 Linux 上折腾了，时过境迁，同样碰到了不少问题，写成日志<a href="http://cn.waterlin.org/CVCG/OpenCV-installation-error.html">《OpenCV 各种安装错误汇总》</a>。</p>
</li>
<li>Berkeley DB 数据库的操作还是蛮有技巧的，如果需要把内存里结构比较复杂的数据写到 Berkeley DB 里，我当然拥有我的技巧，以<a href="http://cn.waterlin.org/Database/BerkeleyDB-data-mapping.html">把 IplImage 数据写入到 Berkeley DB</a> 为例，介绍我对这一技术的理解。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/two-blog-posts-about-db-and-opencv.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>笔记：最近使用 OpenCV 碰到的三个问题</title>
		<link>http://blog.waterlin.org/articles/three-problems-while-using-opencv-2-2-0.html</link>
		<comments>http://blog.waterlin.org/articles/three-problems-while-using-opencv-2-2-0.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 09:09:51 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/three-problems-while-using-opencv-2-2-0.html</guid>
		<description><![CDATA[OpenCV2.1 生成视频选择编码的 bug 最近使用 OpenCV2.1 来生成视频，在 Windows 下碰到这样的问题：不管我用什么样的编码，都没有办法直接生成视频，并且会导致程序崩溃。代码如下： _writer = cvCreateVideoWriter( video.c_str(), CV_FOURCC('X','V','I','D'), _fps, cvSize(frameW,frameH), isColor ); 但是，如果我把编码换上 -1 选项来手工选取视频格式，则能顺利生成视频。代码如下： _writer = cvCreateVideoWriter( video.c_str(), -1, _fps, cvSize(frameW,frameH), isColor ); 这个应该是 OpenCV2.1 里的一个 Bug，换成 OpenCV2.2 就没有这个问题了。 OpenCV2.2 的 Visual Studio 2008 问题 官方的 OpenCV2.2 是在 Visual Studio 2010 下编译的二进制包，所以，当你把 OpenCV2.2 嵌入到 Visual Studio 2008 里，可以正常编译相关的代码，但是一运行，一定会提示找不到动态链接库 msvcp100d.dll [...]]]></description>
			<content:encoded><![CDATA[<div class="outline-3">
<h3 id="sec-1.1">OpenCV2.1 生成视频选择编码的 bug</h3>
<div class="outline-text-3">
<p>最近使用 OpenCV2.1 来生成视频，在 Windows 下碰到这样的问题：不管我用什么样的编码，都没有办法直接生成视频，并且会导致程序崩溃。代码如下：</p>
<pre>
_writer = cvCreateVideoWriter( video.c_str(),
                               CV_FOURCC(<span>'X'</span>,<span>'V'</span>,<span>'I'</span>,<span>'D'</span>),
                               _fps,
                               cvSize(frameW,frameH),
                               isColor );
</pre>
<p>但是，如果我把编码换上 -1 选项来手工选取视频格式，则能顺利生成视频。代码如下：</p>
<pre>
_writer = cvCreateVideoWriter( video.c_str(),
                               -1,
                               _fps,
                               cvSize(frameW,frameH),
                               isColor );
</pre>
<p>这个应该是 OpenCV2.1 里的一个 Bug，换成 OpenCV2.2 就没有这个问题了。</p>
</p></div>
</p></div>
<div class="outline-3">
<h3 id="sec-1.2">OpenCV2.2 的 Visual Studio 2008 问题</h3>
<div class="outline-text-3">
<p>官方的 OpenCV2.2 是在 Visual Studio 2010 下编译的二进制包，所以，当你<a href="http://blog.waterlin.org/articles/using-opencv-in-visual-studio-2005.html">把 OpenCV2.2 嵌入到 Visual Studio 2008 里</a>，可以正常编译相关的代码，但是一运行，一定会提示找不到动态链接库 <strong>msvcp100d.dll</strong> 或是 <strong>msvcr100d.dll</strong> 。</p>
<p>这个时候，你可以把这两个 Visual Studio 2010 的动态链接库拷贝到编译好的可执行文件目录里。但是，最好的方式，是你<a href="http://blog.waterlin.org/articles/using-opencv-in-visual-studio-2005.html">在 Visual Studio 2008 里重新编译一下 OpenCV2.2</a>。</p>
</p></div>
</p></div>
<div class="outline-3">
<h3 id="sec-1.3">OpenCV 读取视频帧与 DirectShow 读取视频的步调不一致</h3>
<div class="outline-text-3">
<p>有一些视频，我<a href="http://blog.waterlin.org/articles/opencv-jump-to-video-position.html">用 OpenCV 跳转到指定的时间</a>，和用 DirectShow 跳转到视频指定的时间，理论上来说，应该是一样的。可是，在我这里，偏偏就出现了跳转视频位置不同的情况。而且，原始视频越长，这种误差越大。</p>
<p>是什么原因呢？</p>
<p>仔细研究了一下，我用 OpenCV 读取参数，会显示是 29 帧/秒，大约有 276168 帧；但是用 DirectShow 解码后显示为 30 帧/秒，计算后约为 268946 帧。</p>
<p>解码后的度量时间标准不同，也就导致了上述误差。但是，真实的原因是什么呢？</p>
</p></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/three-problems-while-using-opencv-2-2-0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008 编译程序时的 mt.exe 返回错误</title>
		<link>http://blog.waterlin.org/articles/visual-studio-2008-mt-exe-return-error.html</link>
		<comments>http://blog.waterlin.org/articles/visual-studio-2008-mt-exe-return-error.html#comments</comments>
		<pubDate>Mon, 04 Apr 2011 04:11:15 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/visual-studio-2008-mt-exe-return-error.html</guid>
		<description><![CDATA[今天早上碰到一个很奇怪的事情，昨天明明还能在 Visual Studio 2008 里顺利编译的代码，今天编译的时候，就提示如下错误： 错误 171 错误的结果 -1073741819 (从"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe"返回)。 项目 用英文版的 Visual Studio 2008 应该是显示类似如下的错误信息： Project : error PRJ0002 : Error result 31 returned from 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe'. 这是怎么回事呢？原因我不是很清楚，但是可以用下面的方法来解决： 右键点击工程，选&#8221;属性&#8221;==&#62;&#8221;配置属性&#8221;==&#62;&#8221;链接器&#8221;==&#62;&#8221;清单文件&#8221;==&#62;&#8221;生成清单&#8221;==&#62;设为&#8221;否&#8221; 英文版的 Visual Studio 2008 应该是如下路径： Properties ==&#62; Configuration Properties ==&#62; Linker ==&#62; Manifest File, set Generate Manifest to No. 知其然更要知其所以然，有谁知道原因的？]]></description>
			<content:encoded><![CDATA[<p>今天早上碰到一个很奇怪的事情，昨天明明还能在 Visual Studio 2008 里顺利编译的代码，今天编译的时候，就提示如下错误：</p>
<pre>
错误    171     错误的结果 -1073741819 (从"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe"返回)。   项目
</pre>
<p>用英文版的 Visual Studio 2008 应该是显示类似如下的错误信息：</p>
<pre>
Project : error PRJ0002 : Error result 31 returned from 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe'.
</pre>
<p>这是怎么回事呢？原因我不是很清楚，但是可以用下面的方法来解决：</p>
<p>右键点击工程，选&#8221;属性&#8221;==&gt;&#8221;配置属性&#8221;==&gt;&#8221;链接器&#8221;==&gt;&#8221;清单文件&#8221;==&gt;&#8221;生成清单&#8221;==&gt;设为&#8221;否&#8221;</p>
<p>英文版的 Visual Studio 2008 应该是如下路径：</p>
<p>Properties ==&gt; Configuration Properties ==&gt; Linker ==&gt; Manifest File, set Generate Manifest to No.</p>
<p>知其然更要知其所以然，有谁知道原因的？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/visual-studio-2008-mt-exe-return-error.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>生成 C++ 类文档及关系图的方法</title>
		<link>http://blog.waterlin.org/articles/three-ways-to-generate-class-diagram.html</link>
		<comments>http://blog.waterlin.org/articles/three-ways-to-generate-class-diagram.html#comments</comments>
		<pubDate>Wed, 15 Sep 2010 06:28:19 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/three-ways-to-generate-class-diagram.html</guid>
		<description><![CDATA[写了一大堆的代码，要生成 C++ 类的文档及关系图怎么办呢？对，就是生成 MFC 类库示意图那样让人赏心悦目的东西。 总体来说，生成这种文档有三种思路： 用 Doxygen 来自动生成文档 用 Doxygen 可以跨平台，在维护代码的同时，维护文档，很方便很实用。 如果需要生成类的关系图，可以用 Doxygen 配上 Graphviz，安装好 Graphviz 后，需要把该可执行目录添加到系统的 Path 里，这样在 Doxygen 里就可以用 Graphviz 来生成类的关系图。 如果是在 vim, Emacs 这类文本编辑器里，则可以很自然地使用宏操作来插入 Doxygen 注释；如果是用 Visual Studio 的话呢，也是可以用 DoxyComment add-in for Visual Studio 2005 之类的东西来完成。 用 Doxygen 来生成文档有一个要注意的地方，源代码文件的编码和 Doxygen 选用的字符编码需要一致，否则生成的文档会乱码。现在这个年代，当然是统一用 UTF-8 好一点了。 用 Visual Studio 的 Class Diagram MSDN 上专门有关于使用 [...]]]></description>
			<content:encoded><![CDATA[<p>写了一大堆的代码，要生成 C++ 类的文档及关系图怎么办呢？对，就是生成 MFC 类库示意图那样让人赏心悦目的东西。</p>
<p>总体来说，生成这种文档有三种思路：</p>
<ol>
<li>用 <a href="http://www.stack.nl/~dimitri/doxygen/download.html">Doxygen</a> 来自动生成文档
<p>用 Doxygen 可以跨平台，在维护代码的同时，维护文档，很方便很实用。</p>
<p>如果需要生成类的关系图，可以<a href="http://www.stack.nl/~dimitri/doxygen/diagrams.html">用 Doxygen 配上 Graphviz</a>，安装好 <a href="http://www.graphviz.org/">Graphviz</a> 后，需要把该可执行目录添加到系统的 Path 里，这样在 Doxygen 里就可以用 Graphviz 来生成类的关系图。</p>
<p>如果是在 vim, Emacs 这类文本编辑器里，则可以很自然地<a href="http://blog.waterlin.org/articles/emacs-yasnippet-basic-usage.html">使用宏操作来插入 Doxygen 注释</a>；如果是用 Visual Studio 的话呢，也是可以用 <a href="http://doxycomment.sourceforge.net/vs2005_addin.html">DoxyComment add-in for Visual Studio 2005</a> 之类的东西来完成。</p>
<p>用 Doxygen 来生成文档有一个要注意的地方，源代码文件的编码和 Doxygen 选用的字符编码需要一致，否则生成的文档会乱码。现在这个年代，当然是统一用 UTF-8 好一点了。</p>
</li>
<li>用 Visual Studio 的 Class Diagram
<p>MSDN 上专门有关于使用 <a href="http://msdn.microsoft.com/en-US/library/33864ckt(VS.80).aspx">Class Diagram</a> 的介绍。</p>
</li>
<li>用 Visio 来画 UML 图，纯人肉体力活，累，难与代码同步，不推荐使用。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/three-ways-to-generate-class-diagram.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>测试机器某个 IP 的某个端口是否能用</title>
		<link>http://blog.waterlin.org/articles/how-to-check-ip-port-status.html</link>
		<comments>http://blog.waterlin.org/articles/how-to-check-ip-port-status.html#comments</comments>
		<pubDate>Thu, 29 Apr 2010 11:05:54 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/how-to-check-ip-port-status.html</guid>
		<description><![CDATA[需要测试某台机器的某个端口是否能用，从而可以使用相关的服务，可以用 telnet ip port 这种形式的命令来测试。 清屏后光标一闪一闪说明服务器该端口可连接。]]></description>
			<content:encoded><![CDATA[<p>需要测试某台机器的某个端口是否能用，从而可以使用相关的服务，可以用</p>
<pre>
telnet ip port
</pre>
<p>这种形式的命令来测试。</p>
<p>清屏后光标一闪一闪说明服务器该端口可连接。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/how-to-check-ip-port-status.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>试用 Dabr，墙不住的 Twitter 心</title>
		<link>http://blog.waterlin.org/articles/how-to-build-a-web-twitter-client.html</link>
		<comments>http://blog.waterlin.org/articles/how-to-build-a-web-twitter-client.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 05:08:42 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/how-to-build-a-web-twitter-client.html</guid>
		<description><![CDATA[上新浪玩了一把微博，突然依然觉得应该试一下 Twitter，没办法，虽然上面全是老外，但是我依然对如何在中国访问 Twitter 产生了深厚的技术兴趣。 原来可以用 Dabr 来访问 Twitter，当然，最好是能搭一个 Dabr 在自己国外的服务器上： 把文件解压到你的域名下，比较说 http://t.WaterLin.org 之类的； 重命令 config.sample.php 为 config.php 文件； 修改 config.php 文件里的 ENCRYPTION_KEY 为一个随机字符串，最大为 52 个字符。 这样输入你的 Twitter 帐户和密码就可以访问 Twitter 信息了。可是，我发现我对着 Dabr 依然不知道应该玩些什么。 原创文章，如转载请注明：转载自细节之锤 [ http://blog.WaterLin.org/ ] Copyright © WaterLin.org. All rights reserved.]]></description>
			<content:encoded><![CDATA[<p>上新浪玩了一把微博，突然依然觉得应该试一下 Twitter，没办法，虽然上面全是老外，但是我依然对如何在中国访问 Twitter 产生了深厚的技术兴趣。</p>
<p>原来可以用 <a href="http://code.google.com/p/dabr/">Dabr</a> 来访问 Twitter，当然，最好是能<a href="http://code.google.com/p/dabr/wiki/SetupGuide">搭一个 Dabr 在自己国外的服务器上</a>：</p>
<ol>
<li>把文件解压到你的域名下，比较说 <a href="http://t.WaterLin.org">http://t.WaterLin.org</a> 之类的；</li>
<li>重命令 config.sample.php 为 config.php 文件；</li>
<li>修改 config.php 文件里的 ENCRYPTION_KEY 为一个随机字符串，最大为 52 个字符。</li>
</ol>
<p>这样输入你的 Twitter 帐户和密码就可以访问 Twitter 信息了。可是，我发现我对着 Dabr 依然不知道应该玩些什么。</p>
<p>原创文章，如转载请注明：转载自细节之锤 [ <a href="http://blog.WaterLin.org/">http://blog.WaterLin.org/</a> ]</p>
<p>Copyright © WaterLin.org. All rights reserved.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/how-to-build-a-web-twitter-client.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux 下建立本地的 SVN 版本控制</title>
		<link>http://blog.waterlin.org/articles/create-local-svn-under-linux.html</link>
		<comments>http://blog.waterlin.org/articles/create-local-svn-under-linux.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 02:26:06 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/create-local-svn-under-linux.html</guid>
		<description><![CDATA[Linux 下本地写代码的话，有一个 SVN 版本控制还是会好很多的。安装好 SubVersion 后，就可以直接用 svnadmin 命令来 import 一个本地的文件（以下内容摘自《Subversion 权威指南》中文版），比如说： $ svnadmin create /var/svn/newrepos $ svn import mytree file:///var/svn/newrepos/some/project \ -m "Initial import" Adding mytree/foo.c Adding mytree/bar.c Adding mytree/subdir Adding mytree/subdir/quux.h 路径 file:///F&#124;/Zoundry%20Raven/var/svn/newrepos/some/project 就是你想让 svn 保存有关 svn 版本信息的目录，这样，你的目录 mytree 里的内容就提交到了代码仓库里。 然后你可以查一下是否已经提交了一份代码到所指定的路径里： $ svn list file:///var/svn/newrepos/some/project bar.c foo.c subdir/ 注意，在导入之后，原来的目录树并没有转化成工作拷贝，为了开始工作，你还是需要运行 svn checkout 导出一个工作拷贝。 原创文章，如转载请注明：转载自细节之锤 [ [...]]]></description>
			<content:encoded><![CDATA[<p>Linux 下本地写代码的话，有一个 SVN 版本控制还是会好很多的。安装好 SubVersion 后，就可以直接用 svnadmin 命令来 import 一个本地的文件（以下内容摘自《Subversion 权威指南》中文版），比如说：</p>
<pre>
$ svnadmin create /var/svn/newrepos
$ svn import mytree file:///var/svn/newrepos/some/project \
             -m <span>"Initial import"</span>
Adding         mytree/foo.c
Adding         mytree/bar.c
Adding         mytree/subdir
Adding         mytree/subdir/quux.h
</pre>
<p>路径 <a href="\Zoundry Raven\var\svn\newrepos\some\project">file:///F|/Zoundry%20Raven/var/svn/newrepos/some/project</a> 就是你想让 svn 保存有关 svn 版本信息的目录，这样，你的目录 mytree 里的内容就提交到了代码仓库里。</p>
<p>然后你可以查一下是否已经提交了一份代码到所指定的路径里：</p>
<pre>
$ svn list file:///var/svn/newrepos/some/project
bar.c
foo.c
subdir/
</pre>
<p>注意，在导入之后，原来的目录树并没有转化成工作拷贝，为了开始工作，你还是需要运行 svn checkout 导出一个工作拷贝。</p>
<p>原创文章，如转载请注明：转载自细节之锤 [ <a href="http://blog.WaterLin.org/">http://blog.WaterLin.org/</a> ]</p>
<p>Copyright © WaterLin.org. All rights reserved.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/create-local-svn-under-linux.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code::Blocks 的前后跳转功能</title>
		<link>http://blog.waterlin.org/articles/codeblocks-browse-tracker-plugins.html</link>
		<comments>http://blog.waterlin.org/articles/codeblocks-browse-tracker-plugins.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 02:20:43 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/codeblocks-browse-tracker-plugins.html</guid>
		<description><![CDATA[如果用了 Visual Studio 2005 之类的 IDE 后，对于该类 IDE 提供的前后位置跳转功能，一定会印象很深。 Code::Blocks 也可以装上类似的插件，有一个名叫 Browse Tracker plugins 的插件集合，提供了类似的功能。 Debian/Ubuntu 下可以装上 codeblocks-contrib 这个包，然后就有了 Browse Tracker 的功能。 安装好了以后，可以先通过 Code::Blocks 的菜单 View ==&#62; Browse Tracker ==&#62; Setting，把 Enable BrowseMarks 选上。 默认情况下的使用： 用 Alt-Left 和 Alt-Right 快捷键在编辑器堆栈 ( editor stack ) 里前后跳转； 用 Alt-Up 和 Alt-Down 快捷键来在最近标记 ( marked editor positions ) [...]]]></description>
			<content:encoded><![CDATA[<p>如果用了 Visual Studio 2005 之类的 IDE 后，对于该类 IDE 提供的前后位置跳转功能，一定会印象很深。</p>
<p><a href="http://blog.waterlin.org/articles/setting-codeblocks.html">Code::Blocks</a> 也可以装上类似的插件，有一个名叫 <a href="http://wiki.codeblocks.org/index.php?title=Browse_Tracker_plugins">Browse Tracker plugins</a> 的插件集合，提供了类似的功能。</p>
<p>Debian/Ubuntu 下可以装上 codeblocks-contrib 这个包，然后就有了 Browse Tracker 的功能。</p>
<p>安装好了以后，可以先通过 <a href="http://blog.waterlin.org/articles/setting-codeblocks.html">Code::Blocks</a> 的菜单 View ==&gt; Browse Tracker ==&gt; Setting，把 Enable BrowseMarks 选上。</p>
<p>默认情况下的使用：</p>
<ul>
<li>用 Alt-Left 和 Alt-Right 快捷键在编辑器堆栈 ( editor stack ) 里前后跳转；</li>
<li>用 Alt-Up 和 Alt-Down 快捷键来在最近标记 ( marked editor positions ) 的地方跳转；</li>
<li>需要标记一个阅读标记 ( Browse mark )，可以在需要标记的地方，按住鼠标左键一小会（默认配置是 0.2 秒），即可以在当前位置创建一个阅读标记。以后可以用 Alt + up 或 Alt + down 键来回到这里。标记后，在左边的序号里会显示为省略号 &#8220;…&#8221; 。
<p>原创文章，如转载请注明：转载自细节之锤 [ <a href="http://blog.WaterLin.org/">http://blog.WaterLin.org/</a> ]</p>
<p>Copyright © WaterLin.org. All rights reserved.</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/codeblocks-browse-tracker-plugins.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion 的 patch 功能</title>
		<link>http://blog.waterlin.org/articles/the-patch-function-of-tortoisesvn.html</link>
		<comments>http://blog.waterlin.org/articles/the-patch-function-of-tortoisesvn.html#comments</comments>
		<pubDate>Tue, 27 Oct 2009 06:08:32 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/the-patch-function-of-tortoisesvn.html</guid>
		<description><![CDATA[项目组如果用 SVN 来管理代码，人一多，谁都可以提交 ( check in) 代码的话，代码很快就会变得混乱不堪，永远也稳定不下来。 这个时候，可以用 SVN 的 patch 功能。我们可以根据自己修改的代码，生成一份和原来代码 diff 后的记录文件，保存下来就成了一个 patch 文件了。代码管理者通过这个 patch 文件，可以很好地观看到修改建议，从而决定是否进行提交。 如果是 TortoiseSVN 的话，要生成 patch 文件很简单，从 TortoiseSVN -&#62; Create patch… 即可生成 patch 文件，保存为以 .patch 或 .diff 结尾的文件即可，如下图所示： 代码提交要使用这个 patch，只需要 TortoiseSVN -&#62; Apply Patch… 即可。 详细的信息可以参考 TortoiseSVN 官方文档。 原创文章，如转载请注明：转载自细节之锤 [ http://blog.WaterLin.org/ ] Copyright © WaterLin.org. All rights reserved.]]></description>
			<content:encoded><![CDATA[<p>项目组如果用 SVN 来管理代码，人一多，谁都可以提交 ( check in) 代码的话，代码很快就会变得混乱不堪，永远也稳定不下来。</p>
<p>这个时候，可以用 SVN 的 patch 功能。我们可以根据自己修改的代码，生成一份和原来代码 diff 后的记录文件，保存下来就成了一个 patch 文件了。代码管理者通过这个 patch 文件，可以很好地观看到修改建议，从而决定是否进行提交。</p>
<p>如果是 TortoiseSVN 的话，要生成 patch 文件很简单，从 TortoiseSVN -&gt; Create patch… 即可生成 patch 文件，保存为以 .patch 或 .diff 结尾的文件即可，如下图所示：</p>
<p><img src="http://blog.waterlin.org/wp-content/uploads/250/25015/2009/10/svnpatchcopyright.jpg" alt="svnpatchCopyright.jpg" height="590"></p>
<p>代码提交要使用这个 patch，只需要 TortoiseSVN -&gt; Apply Patch… 即可。</p>
<p>详细的信息可以参考 <a href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-patch.html">TortoiseSVN 官方文档</a>。</p>
<p>原创文章，如转载请注明：转载自细节之锤 [ <a href="http://blog.WaterLin.org/">http://blog.WaterLin.org/</a> ]</p>
<p>Copyright © WaterLin.org. All rights reserved.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/the-patch-function-of-tortoisesvn.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL的Connector C++</title>
		<link>http://blog.waterlin.org/articles/using-mysql-connector-cplusplus-in-visual-studio-2005.html</link>
		<comments>http://blog.waterlin.org/articles/using-mysql-connector-cplusplus-in-visual-studio-2005.html#comments</comments>
		<pubDate>Wed, 08 Jul 2009 04:40:36 +0000</pubDate>
		<dc:creator>waterlin</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://blog.waterlin.org/articles/using-mysql-connector-cplusplus-in-visual-studio-2005.html</guid>
		<description><![CDATA[MySQL提供了C++语言的操作接口，用这个接口可以针对自己的数据库写一个C++的客户端出来，安装的方法请参看官方文档。 这个文章已经把在Visual Studio 2008里如何编写MySQL Connector C++的应用程序进行了详细的说明，此方法是针对MySQL Connector C++的安装包来介绍的。而另一篇文章则介绍了如何从MySQL Connector C++的源码包编译。 这里介绍一下Visual Studio 2005下面，用安装二进制包的方法来使用MySQL Connector C++的方法： 1) 先安装MySQL 记得要把Developer Components &#8211; C Include Files / Lib Files选上。当然，你不安装MySQL而只装这个单独的包也行，不过我还是建议在本地装一个MySQL，否则怎么测试呢？远程测试太麻烦了～～ 2) 下载与Visual Studio 2005相对应的MySQL Connector C++版本 3) 在Visual Studio 2005里创建一个Win32 Console工程 File-&#62;New Project-&#62;Visual C++-&#62;Win32-&#62;Win32 Console Application 注意：&#8221;Application Settings&#8221;里的&#8221;Additional options: Precompiled header&#8221;默认是会被选上的，而我们这里，基本上可以不用这个。 4) 正确地配置工程属性 不管是Debug还是Release，都是用下面的方法设置就可以了，主要是把相关的头文件include到工程，再指定相关的动态链接库所在路径。 (1) 打开&#8221;project&#8221;-&#62;&#8221;properties&#8221;对话框，选择&#8221;configuration properties&#8221; 把MySQL Connector/C++的安装目录添加到Additional [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL提供了<a href="http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html" target="_blank" title="MySQL Connector C++">C++语言的操作接口</a>，用这个接口可以针对自己的数据库写一个C++的客户端出来，安装的方法请参看<a href="http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-installation-binary.html" target="_blank" title="MySQL Connector C++ Installation">官方文档</a>。</p>
<p><a href="http://blog.ulf-wendel.de/?p=215" target="_blank">这个文章</a>已经把在Visual Studio 2008里如何编写MySQL Connector C++的应用程序进行了详细的说明，此方法是针对MySQL Connector C++的安装包来介绍的。而<a href="http://blog.ulf-wendel.de/?p=204" target="_blank">另一篇文章</a>则介绍了如何从MySQL Connector C++的源码包编译。</p>
<p>这里介绍一下Visual Studio 2005下面，用安装二进制包的方法来使用MySQL Connector C++的方法：</p>
<p>1) 先安装MySQL</p>
<p>记得要把Developer Components &#8211; C Include Files / Lib Files选上。当然，你不安装MySQL而只装这个单独的包也行，不过我还是建议在本地装一个MySQL，否则怎么测试呢？远程测试太麻烦了～～</p>
<p>2) 下载与Visual Studio 2005相对应的<a href="http://dev.mysql.com/downloads/connector/cpp/1.0.html" target="_blank">MySQL Connector C++版本</a> </p>
<p>3) 在Visual Studio 2005里创建一个Win32 Console工程</p>
<blockquote><p>File-&gt;New Project-&gt;Visual C++-&gt;Win32-&gt;Win32 Console Application</p>
</blockquote>
<p>注意：&#8221;Application Settings&#8221;里的&#8221;Additional options: Precompiled header&#8221;默认是会被选上的，而我们这里，基本上可以不用这个。</p>
<p>4) 正确地配置工程属性</p>
<p>不管是Debug还是Release，都是用下面的方法设置就可以了，主要是把相关的头文件include到工程，再指定相关的动态链接库所在路径。</p>
<p>(1) 打开&#8221;project&#8221;-&gt;&#8221;properties&#8221;对话框，选择&#8221;configuration properties&#8221;</p>
<p>把MySQL Connector/C++的安装目录添加到Additional Include Directory里：</p>
<blockquote><p>Project-&gt;Properties <br />Configuration Properties -&gt; open tree view <br />C/C++ -&gt; General -&gt; Additional Include Directory</p>
</blockquote>
<p><a href="http://blog.waterlin.org/files/2009/07/1.png"><img src="http://blog.waterlin.org/wp-content/uploads/250/25015/2009/07/zrtn-004n2cd1d68f-tn.jpg" height="348"></a></p>
<p>(2) 让编译器能找到MySQL Connector/C++的libraries，只要把MySQL Connector/C++安装目录里的lib/opt目录添加到搜索路径即可：</p>
<blockquote><p>Linker -&gt; General -&gt; Additional Library Directories</p>
</blockquote>
<p><a href="http://blog.waterlin.org/files/2009/07/2.png"><img src="http://blog.waterlin.org/files/2009/07/zrtn-005n7bf6179c-tn.jpg" height="346"></a></p>
<p>(3) 编译器在编译的时候，让linker去链接MySQL Connector/C++的mysqlcppconn.lib库</p>
<p>把mysqlcppconn.lib添加到这里：</p>
<blockquote><p>Linker -&gt; Input -&gt; Additional Dependencies</p>
</blockquote>
<p><a href="http://blog.waterlin.org/wp-content/uploads/250/25015/2009/07/3.png"><img src="http://blog.waterlin.org/wp-content/uploads/250/25015/2009/07/zrtn-006n3ff0b82d-tn.jpg" height="347"></a></p>
<p>5) 可以试着编译下面的这段最基本的代码：</p>
<pre>
/*
examples/standalone_example_docs1.cpp
*/

/* Standard C++ includes */
#include

#include

/*
Include directly the different
headers from cppconn/ and mysql_driver.h + mysql_util.h
(and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

#include "cppconn/driver.h"
#include "cppconn/exception.h"
#include "cppconn/resultset.h"
#include "cppconn/statement.h"

using namespace std;

int main(void)
{
    cout &lt;&lt; endl;
    cout &lt;&lt; "Running 'SELECT 'Hello World!' AS _message'..." &lt;&lt; endl;

    try {
        sql::Driver *driver;
        sql::Connection *con;
        sql::Statement *stmt;
        sql::ResultSet *res;

        /* Create a connection */
        driver = get_driver_instance();
        con = driver-&gt;connect("tcp://127.0.0.1:3306", "root", "password");
        /* Connect to the MySQL test database */
        con-&gt;setSchema("test");

        stmt = con-&gt;createStatement();
        res = stmt-&gt;executeQuery("SELECT 'Hello World!' AS _message");
        while (res-&gt;next()) {
            cout &lt;&lt; "\t... MySQL replies: ";
            /* Access column data by alias or column name */
            cout &lt;&lt; res-&gt;getString("_message") &lt;&lt; endl;
            cout &lt;&lt; "\t... MySQL says it again: ";
            /* Access column fata by numeric offset, 1 is the first column */
            cout &lt;&lt; res-&gt;getString(1) &lt;&lt; endl;
        }
        delete res;
        delete stmt;
        delete con;

    } catch (sql::SQLException &amp;e) {
        cout &lt;&lt; "# ERR: SQLException in " &lt;&lt; __FILE__;
        cout &lt;&lt; "(" &lt;&lt; __FUNCTION__ &lt;&lt; ") on line " &lt;&lt; __LINE__ &lt;&lt; endl;
        cout &lt;&lt; "# ERR: " &lt;&lt; e.what();
        cout &lt;&lt; " (MySQL error code: " &lt;&lt; e.getErrorCode();
        cout &lt;&lt; ", SQLState: " &lt;&lt; e.getSQLState() &lt;&lt; " )" &lt;&lt; endl;
    }

    cout &lt;&lt; endl;

    return EXIT_SUCCESS;
}
</pre>
<p>如果一切顺序，应该就能连上本地的MySQL进行操作了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.waterlin.org/articles/using-mysql-connector-cplusplus-in-visual-studio-2005.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

