关于作者

用户名:李琳骁
笔名:Leal
地区: 浙江-杭州
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



他者Blog

Links Collection

软件工程

访问统计:
文章个数:19
评论个数:5
留言条数:0




Powered by BlogDriver 2.1

Leal·草原·生活

 

文章

暂停维护本blog
摘要:本blog暂时冻结 查看全文

- 作者: Leal 2005年07月19日, 星期二 14:13  回复(0) |  引用(0) 加入博采

标准模板库(STL)介绍
大概是一月份在winter的blog(http://stl.winterxy.com/html/000013.html)看到他翻译的标准模板(STL)介绍(上),当时看了前面的五六段,感觉不少地方怪怪的,于是留了“...发现这个翻译实在糟糕”的回复,最近重又看到winter的这篇文章,重新对比着winter贴出的英文和其译文,发现硬伤的确不少,如past-the-end的翻译,或许是winter的一时疏忽吧。由此对译文并不满意,于是决定自己译一遍,当然看winter的译文在先,所以必有不少部分基于winter的译文,在此表示感谢,还有介绍了这样一篇不错的STL好文(至少对初学者而言)。原文发表在http://linuxgazette.net/issue34/field.html,
版权信息:
Copyright ? 1998, Scott Field
Published in Issue 34 of Linux Gazette, November 1998

标准模板库(STL)介绍
Introduction to STL, Standard Template Library
By Scott Field

- 作者: 李琳骁 2005年04月9日, 星期六 09:23  回复(1) |  引用(0) 加入博采

To be a Vimer
I love vim!
 
已经记不得什么时候开始接触Vim的,不过一开始便被其简洁的UI(当然是gvim的)吸引,而它小巧的
身躯和强大功能的强烈对比更令人惊叹。 我喜欢小巧精致,又实用的东西,——我会拿他们当宝贝。

Vim是什么?它又能做什么?做不到哪些呢?(编译自http://vim.sourceforge.net/about.php

Vim是个高级的文本编辑器,可用来进行高效的文本编辑;具有强大灵活的可配置性,以符合用户的使用
习惯,试图提供可与事实上的Unix标配 编辑器Vi匹敌的功能,而且支持更多特性。当前stable版本是6.3,
7.0版正在全力开发中。

Vim常被叫作是"程序员的编辑器",其支持编程方面的功能是如此有用,以致许多人认为Vim就是一个完
整的 IDE。当然Vim绝非只为程序员准备,对各种各样的文本编辑来说,Vim几近完美,无论是email的
撰写,还是配置文件的编辑。

当然强大的功能和灵活性也就暗示着需要一定的学习曲线才能有效的使用Vim,毕竟Vim不是为仅和其用
户握握手表示友好而设计的;它是一个工具,必经学习方能利器。 在你打算学习使用Vim之前,我必须
澄清一点

Vim不是字处理器,尽管它能以多种不同形式的高亮和格式显示文本,但并不能对排版文档以所见即所得
的(WYSIWYG)方式进行编辑;不过能很好的支持TeX的编辑。
 
Vim的又一个特点是它的License,Vim是一个慈善软件(charityware),不过其license和GPL兼容,
因此可自由发布Vim,不过你要是发现Vim真 的帮了你很大的忙,Vim作者建议你通过ICCF捐款以帮助
Uganda乌干达的儿童。Vim的license全文见文档。关于慈善软件的更多信息请访问Charity-ware.org

下面链接有个6KB(也就是两三千字:中文)的Vim介绍,几乎涉及Vim的全部主要特点,却言简意赅,
五六分钟便能一览无余。 vim in just six kilobytes

Vim Official Home: http://www.vim.org
                       国内 http://vim.sf.org
                             thousands of scripts,plugins....

Vim Doc :             http://vimdoc.sf.org
                    中文 http://vimcdoc.sf.org

Vim Community :  http://vim.sourceforge.net/community.php

Vi Improved :       http://www.vi-improved.org
                          Very active,found in Vim Community page,I like it

more added later.

- 作者: 李琳骁 2005年03月27日, 星期日 19:34  回复(0) |  引用(0) 加入博采

Doxygen里如何分组

原文来自:http://www.stack.nl/~dimitri/doxygen/grouping.html
              http://www.stack.nl/~dimitri/doxygen/commands.html

编译者:Leal       3/22/2005
说明:除
代码块外,这种颜色的文字都为我的注释

分组

Doxygen有三种机制可供分组。其一,工作在全局层次上(global level),为每个组创建一个新页(指在生成的文档中)。这些组在文档里被称为'modules' 其二,工作在复合实体(enumstruct)的成员列表内,被称为'member groups'。其三,对于pages 有一称为subpaging 的分组机制。

Modules 模块

Modules是将相关事物分组至一个单独页面(指在生成的文档中)的方法。你可以分别文档化一个组的所有成员,也可以整体方式文档化一个组。组的成员可以是files, namespaces, classes, functions, variables, enums, typedefsdefines,以及其它组。

要定义一个组,应在专用注释块里添加\defgroup 命令。该命令的第一个参数是个唯一性标签(label),用来标识一个组。第二个参数是在生成的文档中出现的该组的名字或标题。

    \defgroup (group title)

表明所在注释块包含了一组classes, filesnamespaces的文档说明。 可以对classes, files namespaces进行分类,并文档化这些分类。组可以是其它组的成员,这样可以构建有层次结构的groups

参数必须是单个字(single-word)的标识符。

See also:page Grouping, sections \ingroup, \addtogroup, \weakgroup.

在实体(class, function, etc.)的注释块里添加\ingroup命令,可以把该实体添加到一个特定组里。

为免于要在每个成员的注释块里添加\ingroup命令之苦,也可以在一个组的前面和后面分别放置展开标记(open marker@{和闭合标记(close marker@}两个标记之间的实体都成为该组的成员。这两个标记可以放在组定义的注释块或一个单独的文档注释块里。

    \ingroup ( [ ])

如果一个class, filenamespace 的注释块里有\ingroup命令,则这个class(或其它实体)便会被添加到当前组内,或者由标识的组内。

See also:page Grouping, sections \defgroup, \addtogroup and \weakgroup


 


Groups也可以用这些分组标记进行循环嵌套。

多次使用同一个组标签(group label)会导致出错。如果你不希望受doxygen牵制必须使用唯一性标签,那么可以用 \addtogroup 来替代 \defgroup 。其用法和几乎一致,但是遇到已被定义的组,该命令会悄无声息的自动合并已有文档和新的文档注释。对该命令而言,组的标题是可选的,因此你可以用(全文的注释风格皆已改为Qt风格

/*! \addtogroup */
/*\@{*/
/*\@}*/

把另外的成员加到一个组内,该组更多的内容则是定义在其它地方。

注意,复合实体(如classes, files namespaces等)可被加到多个组内,但成员(如variable, functions, typedefsenums等)只能是某一个组的成员(这一限制是为了避免模棱两可的连接目标,因为class, namespacefile的成员有可能并未加以文档注释,而只是作为一个组的部分才可见)。

Doxygen会把其定义有最高「优先权」的成员加到组里,也就是说一个显式的\ingroup命令会使得由@{@}界定的隐式分组定义无效。除非某个成员的其中一个定义没有任何显式的文档注释,不同组定义内该成员(因为一个实体可能在多个组的定义中出现,尤其是使用@{@})的分组定义优先权一样的话,会引发警告。(Conflicting grouping definitions with the same priority trigger a warning, unless one definition was for a member without any explicit documentation.

下面的示例把VarInA加到组A,并通过把IntegerVariable加到组IntVariables内而悄悄的解决了它引起的冲突,因为IntegerVariable第二次出现时并未加以文档注释(下面示例必读,尤其是我注释的部分:))。

/*!
 * \ingroup A
 */

extern int VarInA;

/*!
 * \defgroup IntVariables Global integer variables
 */

/*@{*/

/*! an integer variable */
extern int IntegerVariable;

/*@}*/

....

/*!
 * \defgroup Variables Global variables
 */

/*@{*/

/*! a variable in group A */
int VarInA;

int IntegerVariable;
//
此处IntegerVariable第二次出现,并且在组Variables定义内,但并未加以
//
文档注释,但组IntVariablesIntegerVarible第一次出现时有文档注释(优
//
先权更高),因此这儿的IntegerVariable并不会因为被包含在@{@}内而加
//
到当前组A内。
//
如果上行代码前加入和前面优先权一样的/*! an integer variable same!*/
//文档注释块,则用doxygen生成文档时会引发警告;
//如果上行代码前加入比前面优先权更高的/*! IntegerVariable will be in
//group Variables! */文档注释块,则IntegerVariable加入组Variables。

/*@}*/

\ref 命令用于参考(提及)一个组,第一个参数应该是要参考组的标签。如果想使用自定义的链接名,可以给这些链接名加上双引号(不能用中文输入法下的),并将其放在第一个参数组标签之后,下面的例子会演示其用法。

总之,用\ref group_label "link"时,点击"link"链接名时便能链接到这个组。

分组定义的优先权从高到低依次为:\ingroup, \defgroup, \addtogroup, \weakgroup。最后那个命令几乎和\addtogroup完全一样,就是优先权更低而已,它的引入是为了允许"懒惰"的分组定义方式:你可以在.h文件里使用优先权更高的命令定义组层次结构,而在.c文件里则用\weakgroup命令,这样就不用非得和.h定义的组层次结构一摸一样。(因为.h里优先权更高的命令会使.c里对应实体的优先权低的分组命令无效。

Example:

/*! \defgroup group1 The First Group
 *  This is the first group
 *  @{
 */

/*! \brief class C1 in group 1 */

class C1 {};

/*! \brief class C2 in group 1 */
class C2 {};

/*! function in group 1 */
void func() {}

/*! @} */ // end of group1

/*!
 *  \defgroup group2 The Second Group
 *  This is the second group
 */

/*! \defgroup group3 The Third Group
 *  This is the third group
 */

/*! \defgroup group4 The Fourth Group
 *  \ingroup group3
 *  Group 4 is a subgroup of group 3
 */

/*!
 *  \ingroup group2
 *  \brief class C3 in group 2
 */
class C3 {};

/*! \ingroup group2

 *  \brief class C4 in group 2
 */
class C4 {};

/*! \ingroup group3
 *  \brief class C5 in @link group3 the third group@endlink.
 */
class C5 {};

/*! \ingroup group1 group2 group3 group4
 *  namespace N1 is in four groups
 *  \sa \link group1 The first group\endlink, group2, group3, group4
 *
 *  Also see \ref mypage2
 */
namespace N1 {};


/*! \file
 *  \ingroup group3
 *  \brief this file in group 3
 */

/*! \defgroup group5 The Fifth Group
 *  This is the fifth group
 *  @{
 */

/*! \page mypage1 This is a section in group 5
 *  Text of the first section
 */

/*! \page mypage2 This is another section in group 5
 *  Text of the second section
 */

/*! @} */ // end of group5

/*! \addtogroup group1
 *
 *  More documentation for the first group.
 *  @{
 */

/*! another function in group 1 */
void func2() {}

/*! yet another function in group 1 */
void func3() {}

/*! @} */ // end of group1

 

单击here 浏览由Doxygen生成的对应HTML文档。

Member Groups 成员组

如果一个复合体(如a classfile)有许多成员,那么通常的做法是对这些成员进行分组。其实Doxygen已经自动根据成员的类型和保护级别(type and protection level)对它们进行分组,但是你可能觉得这还不够好或者缺省分组根本就不对。比如,你会认为不同(语法上的 syntactic)类型的成员应该归类到同一组内(语义上的 semantic)。

成员组由如下块定义(统一使用下面的注释块):

//@{

  ...

//@}

块或者

/*@{*/

  ...

/*@}*/

块,如果更喜欢C风格注释。注意,该组的所有成员必须物理上(即不像模块组那样随意,且有/addgroup等命令)都在这个成员组的体内(即上面的注释块内)。

可以在成员组注释块的展开标记(//@{)之前加一个独立注释块,该注释块里应该含有@name (或\name 统一使用这种写法),用来指定这个组的题头。另外,该注释块也可以包含关于这个组详细描述。

成员组不允许嵌套。

如果一个class内的成员组的所有成员具有相同类型和保护级别(比如都是静态公用成员),那么整个成员组会作为这种类型/保护级别组的子组(subgroup)显示在文档中(比如这个组作为"Static Public Members" sectionsubsection显示)。如果两个或两个以上成员的类型不同,那么这个组会和自动生成的组作为同一层(即不会作为自动生成的组之subsection)显示在文档中。如果你想强行令一个class的所有member-groups都显示在顶层里,则应该在该class的文档注释块里加上\nosubgrouping命令。

Example:

/*! A class. Details */
class Test
{
  public:
    //@{
    /*! Same documentation for both members. Details */
    void func1InGroup1();
    void func2InGroup1();
    //@}

 
    /*! Function without group. Details. */
    void ungroupedFunction();
    void func1InGroup2();

  protected:
    void func2InGroup2();
};

void Test::func1InGroup1() {}
void Test::func2InGroup1() {}

/*! \name Group2
 *  Description of group 2.
 */

//@{
/*! Function 2 in group 2. Details. */
void Test::func2InGroup2() {}

/*! Function 1 in group 2. Details. */
void Test::func1InGroup2() {}
//@}

 
/*! \file
 *  docs for this file
 */

//@{
//! one description for all members of this group
//! (because DISTRIBUTE_GROUP_DOC is YES in the config file)
#define A 1
#define B 2
void glob_func();
//@}

单击 here浏览由Doxygen生成的对应HTML文档。

此处Group1作为"Public Members"的一个subsection显示在文档中,而Group2是作为一个单独section"Public Members"同一层)显示,因为它的成员有不同的保护级别(即publicprotected)。

Go to the next section or return to the index.

Subpaging 分页

\page\mainpage命令可以把信息分组到不同的页面。一般来说,这会生成一组flat(无层次关系的)页面,而所谓的"main"页面会作为该列表第一项显示。

使用section modules里的方法添加结构虽然可行,不过通常更自然方便的方法是用\subpage命令把其它结构添加到不同页面里。

页面A里用\subpage命令添加一个到另一页面B的链接时,会同时使得页面B成为A的一个subpage。这样做的效果可类比于:做两个组GAGB,并且GBGA的一部分,页面A放在组GA里,而页面B放在组GB里。

- 作者: 李琳骁 2005年03月23日, 星期三 12:25  回复(0) |  引用(0) 加入博采

Effective C++/STL
Scott Meyers的Effective系列C++/STL书籍乃是勿庸置疑的经典,尤其是experienced programmer,
更应该时时温故而知新,再结合自己在实战中的经验和体会,一定会有极大的收获。虽然自己还是菜鸟一
个,不过就我的感受,读了一遍C++ Primer,再加上一两个项目的实践之后(哪怕是试验性质的、规模
也不大的项目),便可以一个条目一个条目的研读Effective C++了。最近打算开始熟悉和使用STL,买
了一本Effective STL(影印版),看了将近十个条目,感觉也还不错,不过没有了Effective C++那样的
幽默风趣,总体的写作风格仍旧相似。可惜自己对STL可以说甚至还未入门,所以只能挑着简单的Item
看,另外还备了本The C++ Standard Library - A Tutorial and Reference,可同时打打基础。学习
和使用STL的三种境界可以参考侯捷的网站(pdf),也可以从中发现STL的学习路径。

下面是自己收集的Effective系列书籍的相关链接:
  • Effective C++
  1. 英文版勘误(2nd)
  • Effective STL
    1. 英文版勘误(影印版的勘误修正到英文原版的第三次印刷止)
    2. 含有书中(几乎所有)代码片断的完整例子zip压缩包


- 作者: 李琳骁 2005年03月10日, 星期四 13:09  回复(0) |  引用(0) 加入博采

第二书店购书小记
上周一从第二书店定购了六七本书,今天到。邮递时间倒是快的有点意料之外,不过拿到的书基本都是
满面灰尘,外面的纸包装和内衬的塑料袋都已破损,其中三四本书的书脊一头已经损坏的相当严重。估
计是投递过程中破坏的,不过还是觉得不怎么爽。


- 作者: 李琳骁 2005年03月7日, 星期一 13:14  回复(0) |  引用(0) 加入博采

偶遇
昨晚,我称其为哥的一个远房亲戚和他女友到我家来聊天。刚开始还不敢认,最后发现我哥女友竟是我高一
同班同学。Oh,my God!这世界真的很小啊。想起当年远赴哈尔滨求学的火车上,撞见在同一城市求学的
老同学;想起大学入学的头一年,在漫漫人海中偶遇各奔南北求学的高中室友;想起乘上同一辆公交的旧友
......原来世界不仅小,而且奇妙,不知道这是不是所谓的缘分。

高中,难忘的岁月;同窗,难忘的记忆

- 作者: 李琳骁 2005年03月5日, 星期六 14:23  回复(0) |  引用(0) 加入博采

如何办理杭州的公园卡和公交卡
    [整理自缥缈水云间Holiday版精华区]
    公园卡:04年公园卡只有在南山路61号学士公园办理和续费,坐30路到万松岭路口下,往回走一段即到; 
           所需东东:一寸照片免冠一张,身份证(若不是杭州的需带上学生证),
           50元(卡工本费10元,年费40元,为期一年,到期可再续即40元)
           时间:8:30-16:30,双休日不休。
           联系电话:87065409
    寺庙年票:农业银行解放路分行。(建国中路)电话:85603172                          

    IC卡管理中心地址:延安路(龙翔桥)公交中心站,联系电话:87037620。
           提示:各种优惠卡内设有电子钱包区,乘客可根据需要进行充值,充值金额、使用方法、乘
           坐范围与普通卡(D卡)相同。                                                  



- 作者: 李琳骁 2005年03月4日, 星期五 13:24  回复(3) |  引用(0) 加入博采

《软件工艺》谬误集 (draft )读后小感
http://www.zhangxun.com/reviews/gigix-trans.htm

呵呵,据他自己说跟踪研究熊节已有三年,看这篇谬误集,感觉确是做了仔细认真的对比另外,还有长篇的
论熊节现象与程序员文化 (draft )     http://www.zhangxun.com/reviews/gigix.htm

两篇都还在draft阶段,不过从已有的大部分,我看来是句句在理,逻辑清晰,都有相关证据,甚能服人。

张的本意估计主要在批判当下的熊节现象,而熊节只不过"有幸"被抓为典型,原因一他太引人注目,而且甚
能引人眼球。不过从熊节在china-pub论坛某篇帖子的多篇回帖来看,也在有意避重就轻,未作正面回应。
不知是否是自知人家确实批的在理。
http://www.china-pub.com/computers/bbs/addfollow.asp?id=52243&rootid=2&boardid=1

偶尔看到china-pub上的帖子,写些废话在此,权当各位灌水、饭后之茶点;另外在选择译作还是原版之间,
或者阅读译作时留个心眼。



- 作者: 李琳骁 2005年02月27日, 星期日 17:00  回复(0) |  引用(0) 加入博采

新的一年
2004到2005,就增加了1而已,而对那些19岁的人,则一下子跨入了20岁,29岁的则入而立之年。我还
未到那个关口,却也已经一阵的迷茫,前方的路怎么走?做研发?似乎起步的太晚;做市场则又觉自己个性
不适合......呵呵,事情还没去做,已经恐惧万分。


- 作者: 李琳骁 2005年01月1日, 星期六 20:44  回复(1) |  引用(0) 加入博采