2010年十月

十个利用矩阵乘法解决的经典题目[经典]

今天看poj2778题目时,看到这篇文章,写得很不错!

最让我诧异的是,这哥们居然是北大中文系的,居然把算法搞的这么透彻,佩服!

blog地址:http://www.matrix67.com/blog

更多 >



Linux 系统内核的调试技巧[zz]

调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不可避免地会面对如何调试内核的问题。但是,Linux 系统的开发者出于保证内核代码正确性的考虑,不愿意在 Linux 内核源代码树中加入一个调试器。他们认为内核中的调试器会误导开发者,从而引入不良的修正[1]。所以对 Linux 内核进行调试一直是个令内核程序员感到棘手的问题,调试工作的艰苦性是内核级的开发区别于用户级开发的一个显著特点。

尽管缺乏一种内置的调试内核的有效方法,但是 Linux 系统在内核发展的过程中也逐渐形成了一些监视内核代码和错误跟踪的技术。同时,许多的补丁程序应运而生,它们为标准内核附加了内核调试的支持。尽管这些补丁有些并不被 Linux 官方组织认可,但他们确实功能完善,十分强大。调试内核问题时,利用这些工具与方法跟踪内核执行情况,并查看其内存和数据结构将是非常有用的。

本文将首先介绍 Linux 内核上的一些内核代码监视和错误跟踪技术,这些调试和跟踪方法因所要求的使用环境和使用方法而各有不同,然后重点介绍三种 Linux 内核的源代码级的调试方法。

1. Linux 系统内核级软件的调试技术

printk() 是调试内核代码时最常用的一种技术。在内核代码中的特定位置加入printk() 调试调用,可以直接把所关心的信息打打印到屏幕上,从而可以观察程序的执行路径和所关心的变量、指针等信息。 Linux 内核调试器(Linux kernel debugger,kdb)是 Linux 内核的补丁,它提供了一种在系统能运行时对内核内存和数据结构进行检查的办法。Oops、KDB在文章掌握 Linux 调试技术有详细介绍,大家可以参考。 Kprobes 提供了一个强行进入任何内核例程,并从中断处理器无干扰地收集信息的接口。使用 Kprobes 可以轻松地收集处理器寄存器和全局数据结构等调试信息,而无需对Linux内核频繁编译和启动,具体使用方法,请参考使用 Kprobes 调试内核

以上介绍了进行Linux内核调试和跟踪时的常用技术和方法。当然,内核调试与跟踪的方法还不止以上提到的这些。这些调试技术的一个共同的特点在于,他们都不能提供源代码级的有效的内核调试手段,有些只能称之为错误跟踪技术,因此这些方法都只能提供有限的调试能力。下面将介绍三种实用的源代码级的内核调试方法。

原文地址



对需求管理和范围管理的理解

1. 什么是需求管理

需求是指项目接受并生产出的产品和产品构建。需求管理是为确保各方对需求理解一致而进行的管理和控制活动。

2. 需求管理包含哪些方面

1)         制定计划:准备所需的软硬件资源、跟踪矩阵、变更申请等,便于管理需求并保持需求管理工作一致。

2)         各方对需求达成共识:各方干系人对确立的需求进行确认,建立一致。

3)         控制需求变更:项目进行期间当发生需求变更将对整个项目产生影响,如果需要变更,要先提出申请说明变更需求的来源,相关人员综合各方面因素审核是否实施变更。

3. 什么是范围管理

项目范围管理界定了为成功完成项目所需要的一系列过程,确保项目包含且仅包含必须完成的工作。即定义和控制项目内包含什么,不包含什么。

4. 范围管理包含哪些方面

在软件开发项目管理中,范围通常包括产品范围和项目范围。

产品范围:表示产品或服务的特性和功能。如需求、目标、工作产品、交付成果;

项目范围:指为了完成产品范围内规定的特征和功能,所必须完成的工作,如确定干系人、WBS、资源安排、时间分配等;

产品范围是否完成以产品需求作为衡量标准;项目范围的完成以项目管理计划作为衡量标准。二者相结合确保项目在规定的时间内、使用特定的资源、按照约定的质量交付约定好的成果。

5. 范围管理与需求管理的关系

1)         范围管理包括需求管理:范围管理需要清楚的定义项目的具体工作范围和工作内容。

2)         需求管理为范围管理提供依据:在需求开发确定的项目需求基础上确定项目的范围,制定工作内容、项目预算、估算时间和资源;根据需求的级别安排资源投入工作;当需求有变更时会引起项目范围和时间的变更,对需求变更的管理可以减小项目管理的风险。



pv

yaronspace.cn 一周年

2009-10-27买了yaronspace.cn域名和空间,纪念下~

再接再厉!!

下面是一年来流量变化情况,数据来自google analytics

pvpv2pv3



baidu

yaronli排名还不错

Yaronli 在百度

baidu

Yaronli 在google

google

排名很靠前~~



产品经理能力模型[转]

偶然看到这篇文章,写的很实在,不喜欢理论性太强的,转过来~~

Minijuly 撰写 http://www.minijuly.com/?p=830


随着行业发展,产品经理这个群体在IT行业也越来越受到关注,各种产品交流学习组织蓬勃兴起,作为其中的一员,一直以来就想写写自己对于产品经理这一角色的认识。

俗话说,一个成功的男人身后必然有一个默默的女人,那么一款产品背后是否也有一位潜心学习不断专研的产品经理呢?答案是肯定的,而且经常性的还不只是一位产品经理在支持着一款成功的产品。

业内对于产品经理能力模型的归纳也并不鲜见,因此我只是从个人理解的层面去讲述这些能力,我个人主要倾向于把产品经理能力分为两大部分:A、产品能力;B、管理能力。

  • A、产品能力

一、工具性能力

产品经理对产品负责,相应的产品能力必须是首要的能力,而在这些具体的素质里面,工具性能力又堪称基础性能力,在一个产品策划的生命周期里面,最常见的工具一般有以下几种:word、ppt、mindmanager、visio、axure、excel。

1、Word、excel和ppt,产品经理在策划一款产品的过程中,往往需要同多部门进行沟通协调,于是撰写文档以提高沟通效率便成为一项重要能力,无论是撰写产品需求文档还是市场需求文档、分析后期统计数据都需要熟练使用office系列文件。

2、Mindmanager,作为常用的头脑风暴软件,mindmanager便于产品经理更好的梳理产品管理和逻辑,对于理清产品思路具有重要意义,特别是在绘制产品roadmap其方便快捷的操作可以让产品经理绘制出结构和逻辑性都较好的展示图表。

3、Visio,visio作为一款优秀的流程软件,对于产品经理梳理产品内在逻辑和用户操作流程具有重要意义,特别是在产品文档撰写过程 中,visio绘制的用户操作流程图可以帮助工程师更好理解产品逻辑从而实施产品开发。Visio丰富的插件还可以用户绘制ueser case,方便产 品项目组人员更好的理解用户,从而指导产品设计。

4、Axure,近年来axure凭借其优秀和交互能力和良好的操作性开始逐渐取代visio用于原型绘制,原型绘制作为产品设计的重要一环使得axure的使用能力也成为产品经理的标配能力之一。

二、产品感

“产品感”,一词来源于前辈郭子威,第一次看到这个词的时候我就眼睛一亮,当时看到的想法就是:bingo,这个词才是我心中产品经理需要的核心能 力、一个优秀的产品经理必须对于产品敏感,而这种敏感性就来源于良好的产品感。产品经理是一个综合性角色,即需要有开阔的视野,又必须时刻关注细节,而这 些都包含在产品感里面。当然产品感并不是天生的,良好的产品感来源于长期的产品设计积累和对于互联网产品的大量使用。如果你没有“网瘾”,我觉得产品感会 变成一个无稽之谈。

a、规划力  这是一个产品经理较高层面上的能力,而具备这种能力的产品经理,通常会具备很多思想家的特质。从产品外部体系上,规划力代表了产品经 理对整个价值市场的认同,对企业产品线的布局,对自身产品的定位以及对每一款产品的发展思路。当然,对于大部分产品经理而言,战略层面的东西可能还接触不 到,特别是对于大型公司,决策层对于战略的考虑会大大多于产品经理,而产品经理在这样的情况下对于战略的执行多于对战略的思考。

b、设计力  这里所说的设计能力并不单指对于产品功能和原型的设计,而更大一部分在于是否能够根据公司战略及用户需求找到最好的契合度,规划出即满足公司商业需求又符合市场定位和用户需求的能力。包括产品远景规划和近期的功能规划都属于设计力的范畴。

三、商业感 更多 >



systemTap 工具介绍[zz]

SystemTap 是监控和跟踪运行中的 Linux 内核的操作的动态方法。这句话的关键词是动态,因为 SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具。它通过一个名为Kprobes 的应用编程接口(API)来实现该目的,本文将探索这个 API。我们首先了解以前的一些内核跟踪方法,然后在深入探讨 SystemTap 的架构及其使用。

内核跟踪

SystemTap 与一种名为 DTrace 的老技术相似,该技术源于 Sun Solaris 操作系统。在 DTrace 中,开发人员可以用 D 编程语言(C语言的子集,但修改为支持跟踪行为)编写脚本。DTrace 脚本包含许多探针和相关联的操作,这些操作在探针 “触发” 时发生。例如,探针可以表示简单的系统调用,也可以表示更加复杂的交互,比如执行特定的代码行。清单 1 显示了 DTrace 脚本的一个简单例子,它计算每个进程发出的系统调用的数量(注意,使用字典将计数和进程关联起来)。该脚本的格式包含探针(在发出系统调用时触发)和操作(对应的操作脚本)。

清单 1. 计算每个进程的系统调用的简单 DTrace 脚本

syscall:::entry
{ 

  @num[pid,execname] = count(); 

}

DTrace 是 Solaris 最引人注目的部分,所以在其他操作系统中开发它并不奇怪。DTrace 是在 Common Development and Distribution License (CDDL) 之下发行的,并且被移植到 FreeBSD 操作系统中。

另一个非常有用的内核跟踪工具是 ProbeVue,它是 IBM 为 IBM® AIX® 操作系统 6.1 开发的。您可以使用 ProbeVue 探查系统的行为和性能,以及提供特定进程的详细信息。这个工具使用一个标准的内核以动态的方式进行跟踪。清单 2 显示了 ProbeVue 脚本的一个例子,它指出发出 sync 系统调用的特定进程。

清单 2. 指出哪个进程调用 sync 的简单 ProbeVue 脚本

@@syscall:*:sync:entry
{
  printf( "sync() syscall invoked by process ID %d\n", __pid );
  exit();
}

考虑到 DTrace 和 ProbeVue 在各自的操作系统中的巨大作用,为 Linux 操作系统策划一个实现该功能的开源项目是势不可挡的。SystemTap 从 2005 年开始开发,它提供与 DTrace 和 ProbeVue 类似的功能。许多社区还进一步完善了它,包括 Red Hat、Intel、Hitachi 和 IBM 等。

这些解决方案在功能上都是类似的,在触发探针时使用探针和相关联的操作脚本。现在,我们看一下 SystemTap 的安装,然后探索它的架构和使用。

原文地址

http://www.xmsc.com.cn/InfoView/Article_79967_4.html



主流文本编辑器学习曲线[zz]

有意思

主流编辑器学习曲线图

注1Pico(PIne COmposer)是Unix操作系统中最常见的三种文字处理软件之一,具有文字编辑、搜索、拼写检查、文件浏览和段对齐功能,适合高效地编辑短小的文件。Pico是由华盛顿大学开发的免费软件,随着pine电子邮件处理软件发布。它是在Emacs的基础上以pine的邮件编辑为目标而开发的,所以其指令集是Emacs的子集,但是由于在界面上有提示快捷键,相对于vi和Emacs来说更加容易使用。由于Pico虽然是免费软件,但是它并不是开源软件,所以很多Linux版本并不包含Pico。这些版本通常提供一个界面类似的开源软件nano——Pico的克隆版。

注2:图中的纵横坐标没有标明。我所理解的是——X轴是熟练程度,Y轴是技能。于是对于notepad 来说,技能和熟练程度呈正比。对于VS来说,熟练程度越大,所需要技能先是越来越多,而随着熟练程度的增长,你需要的技能也越少。而对于VI来说,一开始就需要相当大的技能,但一旦掌握这些技能,则你将会越来越熟练。而对于emacs来说,技能和熟练程度是呈旋涡状。

原文地址:http://coolshell.cn/articles/3125.html



osdi 会议链接

http://www.usenix.org/events/osdi10/tech/

里面有GOOGLE  Microsoft 和VMware 等公司的文章,很值得一看,记录下



vim templates模板用法介绍

今天看到一个同学问vim 中新建文件时自动生成如作者、时间等信息的vim 插件,想到之前也试过一些template插件,都没有成功,最后使用doxgen取代之,今天就想试下,google半天终于解决了

下载template.rar 文件,第三方提供

下载地址

1、将文件放入 plugin(~/.vim/plugin/ 或者 $HOME/vimfiles/plugin/)目录

2、.vimrc 加入

let g:template_load = 1

let g:template_tags_replacing = 1

let g:T_AUTHOR = “liyangguang”

let g:T_AUTHOR_EMAIL = “liyangguang@software.ict.ac.cn”

let g:T_AUTHOR_WEBSITE = “http://www.yaronspace.cn/blog”

let g:T_DATE_FORMAT = “%Y-%m-%d %H:%M:%S”

3、新建一个模板文件存为 templates/tpl.c(例如~/.vim/templates/tpl.c)
模板名的取名规则是 tpl.extension,新建*.h的时候,tpl.h 被读入

/*
 * Author: <T_AUTHOR> <<T_AUTHOR_EMAIL>>
 * <T_AUTHOR_WEBSITE>
 *
 * File: <T_FILENAME>
 * Create Date: <T_CREATE_DATE>
 *
 */
int 
main(int argc, char* argv[])
{
    return 0;
}
/* vim: set ts=4 sw=4: */

Ok,启动vim,看看是否加载模板成功

ps: 可能会遇到^M是非法字符的错误,使用vim 打开,在命令模式下输入:set ff=unix :w 重启vim即可