﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-loop_in_codes-随笔分类-像少年啦飞驰</title><link>http://cppblog.com/kevinlynx/category/6390.html</link><description>低调做技术__
C/C++\MMORPG服务器\模块架构__ TODO：linux env/read more books __Kevin Lynx</description><language>zh-cn</language><lastBuildDate>Fri, 15 Feb 2013 19:51:42 GMT</lastBuildDate><pubDate>Fri, 15 Feb 2013 19:51:42 GMT</pubDate><ttl>60</ttl><item><title>开始记录编程方面的技巧</title><link>http://www.cppblog.com/kevinlynx/archive/2012/07/18/184093.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Wed, 18 Jul 2012 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/kevinlynx/archive/2012/07/18/184093.html</guid><wfw:comment>http://www.cppblog.com/kevinlynx/comments/184093.html</wfw:comment><comments>http://www.cppblog.com/kevinlynx/archive/2012/07/18/184093.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/kevinlynx/comments/commentRss/184093.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kevinlynx/services/trackbacks/184093.html</trackback:ping><description><![CDATA[<p>原文地址:<a href="http://codemacro.com/2012/07/18/start-to-write-tips/">http://codemacro.com/2012/07/18/start-to-write-tips/</a></p>
<p>回首上篇博客的发表时间，又2个月时间过去了。在我博客生涯的过去两三年里，总会有好几个月的时间没有编写任何文章。我觉得这真是一个不好的习惯。这个情况的产生，有很多原因。例如自己太懒、工作偶尔忙、自己偶尔处于混沌时期、自己偶尔怀疑人生，如是种种。但最大的原因还是，不敢写。</p>
<p>在刚出来工作那会，作为一个懵懂的青年，接触个什么新技术都内心激动骄傲，然后就特别有动力将所学记录下来，注意下言辞还能折腾个像那么回事的教程出来。后来慢慢地，我就觉得，这些东西太肤浅。先别说教人用个什么IDE，配置个什么数据库，就算你是学个新语言，好好研究下TCP，甚至还能折腾个IOCP框架，这些都还是他妈的特肤浅。你说任何一个有那么点经验和学习能力的程序员，谁花点时间整不出来这些？谁他妈要你在这里装逼卖萌，甚至贻笑大方。除此之外，我个人也觉得无聊了。</p>
<p>另一方面我觉得写博客还有个好处就是帮助自己记录技术，以便将来万一又需要曾经学习过的技术了，回头温习一下就好。但是后来慢慢地我又觉得，这也是没必要的事情。因为反正需要这个技术的时候，也花不了多少时间。</p>
<p>基于这些乱七八糟的原因，我虽然经常打开自己的博客，看看有没人评论啊，留言啊，但发表博客的频率始终上不去。</p>
<!-- more -->
<p>后来呢，在google reader上断断续续也看了些别的程序员的故事。例如有傻逼坚持1年每天一篇博客，后来竟然写了本书；例如有傻逼坚持每天翻译一篇英文文章。我琢磨着这些人该有多么大的毅力啊，就算是翻译文章，这从找文章筛选文章到最好发表出来这尼玛又该睡觉了啊亲。心生佩服之余，我觉得自己应该向这些傻逼们学习。作为一个已经没有那么多青年时光的青年，试想以后每天下班回家带娃的日子，而曾经竟碌碌无为地磨过每一个工作日耍过每一个工作日晚上，这是件比带娃更悲剧的事情。</p>
<p>所以，我也决定坚持干一件虽一日不用一次但也望每周那么几次的事情。我决定在博客上记录一些编程方面的技巧(tips)，集中于某个小问题的解决、某个小功能的实现。这些技巧相比前文说的，就更肤浅了，肤浅到你一google出来的结果你都吓一跳的程度。但是我依然觉得这是有用的，就像我用rails做网站，每一个小功能我都得google一遍，然后积累于心，然后一段时间后忘掉。为了不忘掉，为了查阅起来简单，我决定记录下来。但是仅靠我自己的经验，是肯定无法做到频繁地更新的，所以，我决定上stackoverflow上随机找些问题/答案翻译出来。stackoverflow非常适合满足这种需求，我发现我google某个rails技巧时，基本是从stackoverflow上获取下来的。</p>
<p>这样，我的博客<a href="http://codemacro.com">http://codemacro.com</a>的rss输出可能会繁杂点，这对于某些人而言估计会起到恶心的效果。而我自己的博客可能也会变得不那么像个人博客。我也想过单独做个网站出来，但仔细想想还是制止自己少瞎折腾了。如有建议欢迎批评。</p>
<p>好，就这样，没了。</p>
<img src ="http://www.cppblog.com/kevinlynx/aggbug/184093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2012-07-18 17:52 <a href="http://www.cppblog.com/kevinlynx/archive/2012/07/18/184093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>博客迁移</title><link>http://www.cppblog.com/kevinlynx/archive/2011/04/24/144906.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Sun, 24 Apr 2011 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/kevinlynx/archive/2011/04/24/144906.html</guid><wfw:comment>http://www.cppblog.com/kevinlynx/comments/144906.html</wfw:comment><comments>http://www.cppblog.com/kevinlynx/archive/2011/04/24/144906.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/kevinlynx/comments/commentRss/144906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kevinlynx/services/trackbacks/144906.html</trackback:ping><description><![CDATA[<div id="id1" class="document">
<h1 class="title">博客迁移</h1>
<p>3年前我从CSDN博客迁移到CPPBLOG写博客。然后我乱七八糟地写一篇博客声明。那个时候还
没把写博客当一回事，纯碎是出于为自己做记录的目的。如今写博客一半还是出于记录，另
一半则是出于在外面自我表现，还有那么一点点说出来觉得崇高的理由就是分享自己的知识
。</p>
<p>这回我倒不是迁移出CPPBLOG。CPPBLOG整体上是个更低调做技术的圈子，一如我博客的副标
题。自己建了个独立博客，主要还是因为学习Lisp的原因。</p>
<p>在过去的若干年中，有各种各样的技术点因为长久的疏远，一个一个淡出于大脑。虽说技术
点不大重要，学习能力、方法才是终生受用的东西。但完全忘记，也算是一大遗憾。Lisp不
应该被我忘记，一个程序员至少应该在他常用的语言之外，熟悉另一门语言。而这另一门语
言应该是更&#8220;快速的&#8220;、更&#8220;方便的&#8220;，它能在你需要的时候更快速地构建你的想法。虽然出于
工作原因，我得时不时地捣鼓下Lua。</p>
<p>Anyway，这个独立博客就是我用Lisp搭建的。从Web server到博客系统。其中博客系统也有
我很大一部分代码在其中，在可预见的未来，在Lisp应用方面我将主要用于构建这个博客系
统。靠自己写的代码（虽然只有一部分）搭建出来的博客就是爽啊。如果要我用个现成的，
我还真懒得去独立门户。</p>
<p>程序员嘛，只有在不断地自我折腾（简写自虐）中，才能成长。最后，请求大家（+强迫）
移步我的新博客 <a href="http://codemacro.com/" class="reference external">codemacro.com</a> 。要参考技术信息的，可以 <a href="http://codemacro.com/blog/about" class="reference external">参考这里</a> ，要看看我使用
Lisp是如何捣鼓出这个博客系统的，可以 <a href="http://codemacro.com/blog/display?id=5" class="reference external">点这里</a> 。当然，在可预见的未来，我还是会在
CPPBLOG同步更新的。
。</p>
</div><img src ="http://www.cppblog.com/kevinlynx/aggbug/144906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2011-04-24 17:30 <a href="http://www.cppblog.com/kevinlynx/archive/2011/04/24/144906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>玩了一下alienbrain的EventsScript</title><link>http://www.cppblog.com/kevinlynx/archive/2009/02/28/75179.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Sat, 28 Feb 2009 08:48:00 GMT</pubDate><guid>http://www.cppblog.com/kevinlynx/archive/2009/02/28/75179.html</guid><wfw:comment>http://www.cppblog.com/kevinlynx/comments/75179.html</wfw:comment><comments>http://www.cppblog.com/kevinlynx/archive/2009/02/28/75179.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/kevinlynx/comments/commentRss/75179.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kevinlynx/services/trackbacks/75179.html</trackback:ping><description><![CDATA[<p><font size=2>从我接触的UNIX文化中我知道，要学会更好地去使用工具去组合工具来完成日常的工作。项目使用alienbrain作为源代码管理工具。每次在VC里有些代码文件里总会写些并不想签入到代码服务器上的代码，例如我经常#include "vld.h"来检测内存泄漏。但是真的等到签入代码时，又经常忘记删除这些代码。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>于是我想，如果每次在我签入代码前，VC或者alienbrain或者其他工具能根据我的设置检查我的代码中是否存在这种不想签入的代码，然后提示我。问了一下向来很熟悉工具的<a href="http://www.yulefox.com/" target=_blank>FOX</a>（很抱歉，我甚至不会使用WORD，我真不敢相信我的坦率:D），结果他也不知道。今天闲来无事翻了下alienbrain附带的文档，发现EventsScript。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>alienbrain里的EventScript总的来说是一种让用户定制更多功能的机制。它定义诸如签入签出获取版本等动作为event，然后用户可以使用alienbrain支持的VBScript和JavaScript脚本来处理这些事件。例如，当你签出一个文件时，ab(alienbrain)会调用你的脚本，让你来处理这一事件）。当脚本返回时，ab继续处理刚才的操作（如果你实在想中止这一动作也可以）。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>这正是我需要的一种机制。迅速地看完了EventScript这一节的文档。再想想我的需求，大体思路就是：给check in挂个脚本，让该脚本调用一个外部程序，处理将要check in的文件，分析这个文件。我可以规定在我的代码中凡是不想签入的代码都可以附加一个tag，例如：#include "vld.h" //DUMMY，分析该代码文件时，发现代码中有//DUMMY字符串，就提示我说该代码文件有不想被签入的代码，位于某某行。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>看来我似乎需要一个grep工具，万恶的是windows只有find。不过find基本可以满足我的需求，但是find的输出结果看起来并不是那么友好，并不是可以被另一个程序处理的格式。（linux下通过建立标准的输入输出格式，从而可以轻松地让多个程序协作起来更好地完成很多事）无论如何，我需要使用ab提供给我的接口来试验下我的想法。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>然后噩梦开始了。先是发现NxNLauncher（ab提供的一个接口，大致是这样拼写的，现在机器上没ab）的Exec接口是异步执行进程，从而StdOut属性及ExitCode总是得不到正确的值。后来一不小心在ab的wiki上看到，说Exec有个隐藏参数，用来标识是同步执行进程还是异步执行，显然，这个隐藏参数undocumented。- -!</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>再然后是每次执行find后，find程序倒是被执行起来了，结果却崩溃了。万恶的是我执行其他程序却很正常。google了一下居然发现没人遇到这个问题。最近我的windows总是崩溃各种程序，visual stdio, word, find。但是，我并不打算自己写个find，即使是简化版的。于是我决定写个findwrapper，让ab来调用我自己写的程序，然后我这个程序调用find。然后为了搞定两个程序的通信，又想起了管道pipe。当然，这里的通信很简单，我只需要让find的输出重定向到我的findwrapper，然后我的findwrapper又会被重定向到ab，然后我的ab脚本就可以捕获这些输出，然后再分析这些输出就可以了。- -！</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>其实，最简单的解决方法，就是我自己写个撇脚的程序，自己去分析要签入的文件是否含有//DYMMY字符串。但是很显然，我更喜欢证明我最初的想法是否正确。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>然后，在我的findwrapper里，再一次让find崩溃。经过几次试验，显然问题出在共享管道上。find和ping的不同在于，find可以从标准输入里获取输入，而ping只需要一个标准输出（也许还有stderr）。在CreateProcess里传入的startup info结构体里，需要提供标准输入、标准输出、及错误输出三个handle。显然，问题出在标准输入上，我提供了错误的值。按照一般的接口设计，我以为我如果不提供输入句柄，find就会忽略。但是find显然没那么聪明，或者说，find更喜欢直接*ptr = 10而不是if( ptr != 0 ) *ptr = 10。无论如何，当我把输入句柄填为输出句柄后，findwrapper可以捕获find的输出了，当然，find也不崩溃了。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2>我总觉得折腾windows api有点噩梦的感觉。我记得几年前刚学windows编程的时候很多函数总要试验很多次才能得到正确的结果，基本上我要尝试各个参数的诸多组合。这还不包括上下文的影响，你要RegisterClass出了问题，CreateWindow楞是不会给你一点点有意义的error code，OMG。</font></p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2></font>&nbsp;</p>
<p><font size=2></font></p>
<img src ="http://www.cppblog.com/kevinlynx/aggbug/75179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2009-02-28 16:48 <a href="http://www.cppblog.com/kevinlynx/archive/2009/02/28/75179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>