<?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>Voland.com.cn &#187; 一起分享</title>
	<atom:link href="http://www.voland.com.cn/category/%e4%b8%80%e8%b5%b7%e5%88%86%e4%ba%ab/feed" rel="self" type="application/rss+xml" />
	<link>http://www.voland.com.cn</link>
	<description>人生百年,诸事记之</description>
	<lastBuildDate>Thu, 02 Feb 2012 23:09:02 +0000</lastBuildDate>
	<language>zh</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>北京十六方数据科技有限公司招聘java开发人员 年薪10W~15W</title>
		<link>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w</link>
		<comments>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w#comments</comments>
		<pubDate>Thu, 02 Feb 2012 23:08:26 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=738</guid>
		<description><![CDATA[公司研发新产品,需要招聘两名java开发人员,公司以前从不加班,但目前公司研发新产品,在产品研发关键时候可能偶尔会有加班,加班一般安排在周末,占用一天时间,大家如有能力有兴趣,请发邮件到job1@16ds.com,这个招聘邮箱为研发部门专用 职位要求分别如下: 职位一:Java Swing 开发工程师 学 历： 大专及以上 招聘人数： 1 人 年薪:10W~15W 任职条件： 有2年及以上Java开发经验； 熟练掌握swing,有实际的swing C/S程序开发经验。对j2ee开发有一定经验 思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力； 具备良好的团队合作精神、性格开朗，优秀的语言表达能力； 有android开发经验者优先考虑。 工作职责： 按美工设计完成产品UI的实现(使用Swing) 理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档； 进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。 职位二:j2ee开发工程师 学 历： 大专及以上 招聘人数： 1 人 年薪:6W~12W 任职条件： 有1年及以上Java开发经验,对j2ee熟练掌握； 熟悉HTML、CSS,javascript的开发知识，熟悉jquery等JS框架为佳； 熟悉MYSQL,需要一定的SQL编写能力 思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力； 具备良好的团队合作精神、性格开朗，优秀的语言表达能力； 工作职责： 按美工设计完成产品WEB页面的实现(html,jquery,css) 理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档； 进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。]]></description>
			<content:encoded><![CDATA[<p>公司研发新产品,需要招聘两名java开发人员,公司以前从不加班,但目前公司研发新产品,在产品研发关键时候可能偶尔会有加班,加班一般安排在周末,占用一天时间,大家如有能力有兴趣,请发邮件到job1@16ds.com,这个招聘邮箱为研发部门专用<br />
职位要求分别如下: <span id="more-738"></span></p>
<p>职位一:Java Swing 开发工程师<br />
学    历： 大专及以上<br />
招聘人数： 1 人<br />
年薪:10W~15W </p>
<p>任职条件：<br />
    有2年及以上Java开发经验；<br />
    熟练掌握swing,有实际的swing C/S程序开发经验。对j2ee开发有一定经验<br />
    思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力；<br />
    具备良好的团队合作精神、性格开朗，优秀的语言表达能力；<br />
    有android开发经验者优先考虑。 </p>
<p>工作职责：<br />
    按美工设计完成产品UI的实现(使用Swing)<br />
    理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档；<br />
    进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。 </p>
<p>职位二:j2ee开发工程师<br />
学    历： 大专及以上<br />
招聘人数： 1 人<br />
年薪:6W~12W </p>
<p>任职条件：<br />
    有1年及以上Java开发经验,对j2ee熟练掌握；<br />
    熟悉HTML、CSS,javascript的开发知识，熟悉jquery等JS框架为佳；<br />
    熟悉MYSQL,需要一定的SQL编写能力<br />
    思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力；<br />
    具备良好的团队合作精神、性格开朗，优秀的语言表达能力； </p>
<p>工作职责：<br />
    按美工设计完成产品WEB页面的实现(html,jquery,css)<br />
    理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档；<br />
    进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>yardvps试用过程中的烦恼</title>
		<link>http://www.voland.com.cn/yardvps-troubles-during-the-trial</link>
		<comments>http://www.voland.com.cn/yardvps-troubles-during-the-trial#comments</comments>
		<pubDate>Mon, 08 Aug 2011 03:32:29 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[yardvps]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=681</guid>
		<description><![CDATA[不得不承认yardvps的VPS便宜,TREE 1为XEN虚拟机512M的内存才$7.95/Month,加上8月有20%的优惠码,忍不住就下手了,因为我想找一个能很好支持java的vps(需要真实内存大,openVZ的主机不太合适),于是注册,下订单,支付宝付钱,一切尽在掌握中&#8230; 好景不长,交钱后,苦苦等了一个晚上才开通,看到自己的独立IP,心里那个高兴呀,马上使用ssh登陆,结果&#8230;你懂的,我中奖了,登陆没有反应!!!于是在ping一下,妈的,不通!!!服务器的状态是绿绿的Online竞然ping不通!!!难道是这个ip被Great Wall了?带个这个疑问,我马上登陆我朋友的国外vps,再ping,还是不通!!!就这样我又是reboot,又是shutdown,又是boot,还是不通,甚至连他提供的在线ssh连接工具也连接不上. 好吧我终于明白,网上的传说是真的,现在我只能发支持单,让他们的技术去解决吧,哥英文不好,不过写的估计他们也看得懂,就这样等了一天问题还是没有解决!没有人理我的支持单,于是哥就与他们的在线人员沟通,告知我他们的技术这会都忙,请我发一个邮件给他们,会处理的!!!这样就又等等了半天. 下午的时候,我忽然想起来他是可以重装系统了,在他们的后台找了半天,没有找到在哪里重装系统,再看他们给我发的开通邮件,原来管理链接发到我邮箱了,赶快登录上去,重新安装系统,再ping,通了,一切正常! 现在VPS使用两三天了,对他还不了解,但发现他是不太稳定,特别是网络,我在VPS上下载他们的测速链接,50M那个使用wget命令,最慢的时候下载速度只有114K(晚上11点了),今天又测试了一下,最快时达到了1.04M,可见网速很不稳定,一般快都称不上,我朋友那个传说垃圾中的战斗机BurstNet(burst)下载速度反而很快,至少有2M以上. yardvps便宜,给的流量又大,但技术支持不好,别人没有空根本不会考虑帮助你,还可能会出一些想不到问题,速度也很不稳定(可能是一台服务器上的VPS太多了),CPU的核心也只有一个,所以真正想做网站的朋友还不不要考虑了.只推荐给入门学习的对稳定性不高又囊中羞涩的朋友,注意,这个是我个人的使用经验,不构成购买与购买建议.]]></description>
			<content:encoded><![CDATA[<p>不得不承认yardvps的VPS便宜,TREE 1为XEN虚拟机512M的内存才$7.95/Month,加上8月有20%的优惠码,忍不住就下手了,因为我想找一个能很好支持java的vps(需要真实内存大,openVZ的主机不太合适),于是注册,下订单,支付宝付钱,一切尽在掌握中&#8230;</p>
<p>好景不长,交钱后,苦苦等了一个晚上才开通,看到自己的独立IP,心里那个高兴呀,马上使用ssh登陆,结果&#8230;你懂的,我中奖了,登陆没有反应!!!于是在ping一下,妈的,不通!!!服务器的状态是绿绿的Online竞然ping不通!!!难道是这个ip被Great Wall了?带个这个疑问,我马上登陆我朋友的国外vps,再ping,还是不通!!!就这样我又是reboot,又是shutdown,又是boot,还是不通,甚至连他提供的在线ssh连接工具也连接不上.<span id="more-681"></span></p>
<p>好吧我终于明白,网上的传说是真的,现在我只能发支持单,让他们的技术去解决吧,哥英文不好,不过写的估计他们也看得懂,就这样等了一天问题还是没有解决!没有人理我的支持单,于是哥就与他们的在线人员沟通,告知我他们的技术这会都忙,请我发一个邮件给他们,会处理的!!!这样就又等等了半天.</p>
<p>下午的时候,我忽然想起来他是可以重装系统了,在他们的后台找了半天,没有找到在哪里重装系统,再看他们给我发的开通邮件,原来管理链接发到我邮箱了,赶快登录上去,重新安装系统,再ping,通了,一切正常!</p>
<p>现在VPS使用两三天了,对他还不了解,但发现他是不太稳定,特别是网络,我在VPS上下载他们的测速链接,50M那个使用wget命令,最慢的时候下载速度只有114K(晚上11点了),今天又测试了一下,最快时达到了1.04M,可见网速很不稳定,一般快都称不上,我朋友那个传说垃圾中的战斗机BurstNet(burst)下载速度反而很快,至少有2M以上.</p>
<p>yardvps便宜,给的流量又大,但技术支持不好,别人没有空根本不会考虑帮助你,还可能会出一些想不到问题,速度也很不稳定(可能是一台服务器上的VPS太多了),CPU的核心也只有一个,所以真正想做网站的朋友还不不要考虑了.只推荐给入门学习的对稳定性不高又囊中羞涩的朋友,注意,这个是我个人的使用经验,不构成购买与购买建议.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/yardvps-troubles-during-the-trial/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>snapnames很给力,域名抢注成功</title>
		<link>http://www.voland.com.cn/snapnames-is-to-force-the-domain-name-registered-by-the-success</link>
		<comments>http://www.voland.com.cn/snapnames-is-to-force-the-domain-name-registered-by-the-success#comments</comments>
		<pubDate>Thu, 05 May 2011 02:10:55 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[人生百味]]></category>
		<category><![CDATA[Godaddy]]></category>
		<category><![CDATA[snapnames]]></category>
		<category><![CDATA[域名抢注]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=617</guid>
		<description><![CDATA[前几天看上了一个域名,5.4号过期,于是动用Godaddy进行抢注,20.99美元就这样进了别人的腰包!然后我又跑到snapnames查看,发现本域名在snapnames预定最低需要$69!,别人不是说只需要59$吗?难道已经有人预定了?本人对域名抢注不熟悉,又怕别人抢走了*******.com这个域名,于是又花了70美元在snapnames预定. 今早7:03分,一短信发来,迷糊中一看,短信的意思大概是我的信用卡在境外消费$70美元.我心中一喜,域名到手了!同时也有不爽,近$100就为了一个域名而消失了,钱与自己想要的东西在某些时候总是冲突,心情也随之像波浪一样,高低起伏. 想要就得到它吧,它会给你好运!我一直是这样想的,所以在这个域名也确实花了不少心思,从域名筛选到预定!!怪不得老婆说比给自己的娃取名还上心.娃就要出生了,希望好的域名也能给老婆及娃带来好运与平安. 刚才看了邮箱,snapnames发过来的贺信,内容如下: Hello **** Congratulations on your successful transaction. We will be processing your payment shortly for *******.com. You can expect an update within 24 hours. Thank you, SnapNames 还得要等上24小时才能拥有它!总结这次抢注,SnapNames果然很给力,当然,也可能是钱给力:)呵呵,反正Godaddy是没有抢到,$70绝胜$20.99,结果就是这样!]]></description>
			<content:encoded><![CDATA[<p>前几天看上了一个域名,5.4号过期,于是动用Godaddy进行抢注,20.99美元就这样进了别人的腰包!然后我又跑到snapnames查看,发现本域名在snapnames预定最低需要$69!,别人不是说只需要59$吗?难道已经有人预定了?本人对域名抢注不熟悉,又怕别人抢走了*******.com这个域名,于是又花了70美元在snapnames预定.</p>
<p>今早7:03分,一短信发来,迷糊中一看,短信的意思大概是我的信用卡在境外消费$70美元.我心中一喜,域名到手了!同时也有不爽,近$100就为了一个域名而消失了,钱与自己想要的东西在某些时候总是冲突,心情也随之像波浪一样,高低起伏.</p>
<p>想要就得到它吧,它会给你好运!我一直是这样想的,所以在这个域名也确实花了不少心思,从域名筛选到预定!!怪不得老婆说比给自己的娃取名还上心.娃就要出生了,希望好的域名也能给老婆及娃带来好运与平安.</p>
<p>刚才看了邮箱,snapnames发过来的贺信,内容如下:<br />
Hello ****<br />
Congratulations on your successful transaction.<br />
We will be processing your payment shortly for *******.com. You can expect an update within 24 hours.<br />
Thank you,<br />
SnapNames<br />
还得要等上24小时才能拥有它!总结这次抢注,SnapNames果然很给力,当然,也可能是钱给力:)呵呵,反正Godaddy是没有抢到,$70绝胜$20.99,结果就是这样!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/snapnames-is-to-force-the-domain-name-registered-by-the-success/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>用生产消费者模式实现数据队列定时或定量的异步存储</title>
		<link>http://www.voland.com.cn/consumer-model-with-production-time-or-quantitative-data-queue-asynchronous-memory</link>
		<comments>http://www.voland.com.cn/consumer-model-with-production-time-or-quantitative-data-queue-asynchronous-memory#comments</comments>
		<pubDate>Sun, 06 Mar 2011 09:13:08 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[一起分享]]></category>
		<category><![CDATA[多线程]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=583</guid>
		<description><![CDATA[需求： 最近在考虑IM软件服务器端编程，有这样一个需求，就是把用户发的信息，全部保存到数据库中，如果是一般的web应用，可能就直接把用户提交的数据写入数据库了，但IM的信息的特点时，需要响应快（实时处理），数据量大，根据这个特点，我设计成接收转发模块与数据写入数据库为不同的模块，很明显，他们满足生产消费者模式，即某个模块负责产生数据，这些数据由另一个模块来负责处理（此处的模块是广义的，可以是类、函数、线程、进程等）。产生数据的模块，就形象地称为生产者；而处理数据的模块，就称为消费者。生产者与消费者并没有构成生产消费者模式，而生产者生产的数据由消费者消费的过程才能构成生产消费者模式。 设计： 生产者和消费者模式实现方式很多，但在实现的时候我们至少需要考虑生产消费解耦、支持并发、支持生产消费忙闲不均的情况。 一、解耦 　　假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法，那么生产者对于消费者就会产生依赖（也就是耦合）。将来如果消费者的代码发生变化，可能会影响到生产者。而如果两者都依赖于某个缓冲区，两者之间不直接依赖，耦合也就相应降低了。这个缓冲区我们可以用一个列队实现。 　　 二、支持并发（concurrency） 　　生产者直接调用消费者的某个方法，还有另一个弊端。由于函数调用是同步的（或者叫阻塞的），在消费者的方法没有返回之前，生产者只好一直等在那边。万一消费者处理数据很慢，生产者就会白白糟蹋大好时光。 　　使用了生产者／消费者模式之后，生产者和消费者可以是两个独立的并发主体。生产者把制造出来的数据往缓冲区一丢，就可以再去生产下一个数据。基本上不用依赖消费者的处理速度。其实当初这个模式，主要就是用来处理并发问题的。这样高并发下，用户感觉响应很快：） 　　 三、支持忙闲不均 　　缓冲区还有另一个好处。如果制造数据的速度时快时慢，缓冲区的好处就体现出来了。当数据制造快的时候，消费者来不及处理，未处理的数据可以暂时存在缓冲区中。等生产者的制造速度慢下来，消费者再慢慢处理掉。 除了以上三个需要考虑的，在我的项目中，我还要考虑与数据库的交互不能太频繁，只能满足一定数据量时，使用批量方式写入数据库（定量写入），这个实现本身很简单，但如果考虑到服务器清闲时，很长时间都达不到这个数据量，但这段时间内可能会停机，没有写入数据库的数据就可能丢失，所以在给定的一段时间里，数据量没有到达给定数据的条件，只要达到时间条件，也需要写入数据库。 实现： 基于以上的想法，我们可以使用java.util.concurrent.BlockingQueue来实现，这里仅分析一些关键代码 1、构造一个用于数据缓冲区的队列 final static BlockingQueue&#60;Message&#62; queue = new LinkedBlockingQueue&#60;Message&#62;&#40;&#41;; 2、生产者生产的数据放入队列 // 本方法由生产者调用，将生产的数据放入队列 public static void add&#40;Message m&#41; &#123; try &#123; queue.put&#40;m&#41;; &#125; catch &#40;InterruptedException e&#41; &#123; e.printStackTrace&#40;&#41;; &#125; &#125; 3、消费者对产生的数据进行消费 @Override public void run&#40;&#41; &#123; try &#123; while &#40;true&#41; &#123; [...]]]></description>
			<content:encoded><![CDATA[<p>需求：<br />
最近在考虑IM软件服务器端编程，有这样一个需求，就是把用户发的信息，全部保存到数据库中，如果是一般的web应用，可能就直接把用户提交的数据写入数据库了，但IM的信息的特点时，需要响应快（实时处理），数据量大，根据这个特点，我设计成接收转发模块与数据写入数据库为不同的模块，很明显，他们满足生产消费者模式，即某个模块负责产生数据，这些数据由另一个模块来负责处理（此处的模块是广义的，可以是类、函数、线程、进程等）。产生数据的模块，就形象地称为生产者；而处理数据的模块，就称为消费者。生产者与消费者并没有构成生产消费者模式，而生产者生产的数据由消费者消费的过程才能构成生产消费者模式。</p>
<p>设计：<br />
生产者和消费者模式实现方式很多，但在实现的时候我们至少需要考虑生产消费解耦、支持并发、支持生产消费忙闲不均的情况。<br />
一、解耦<br />
　　假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法，那么生产者对于消费者就会产生依赖（也就是耦合）。将来如果消费者的代码发生变化，可能会影响到生产者。而如果两者都依赖于某个缓冲区，两者之间不直接依赖，耦合也就相应降低了。这个缓冲区我们可以用一个列队实现。<br />
　　<br />
二、支持并发（concurrency）<br />
　　生产者直接调用消费者的某个方法，还有另一个弊端。由于函数调用是同步的（或者叫阻塞的），在消费者的方法没有返回之前，生产者只好一直等在那边。万一消费者处理数据很慢，生产者就会白白糟蹋大好时光。<br />
　　使用了生产者／消费者模式之后，生产者和消费者可以是两个独立的并发主体。生产者把制造出来的数据往缓冲区一丢，就可以再去生产下一个数据。基本上不用依赖消费者的处理速度。其实当初这个模式，主要就是用来处理并发问题的。这样高并发下，用户感觉响应很快：）<br />
　　<br />
三、支持忙闲不均<br />
　　缓冲区还有另一个好处。如果制造数据的速度时快时慢，缓冲区的好处就体现出来了。当数据制造快的时候，消费者来不及处理，未处理的数据可以暂时存在缓冲区中。等生产者的制造速度慢下来，消费者再慢慢处理掉。 </p>
<p>除了以上三个需要考虑的，在我的项目中，我还要考虑与数据库的交互不能太频繁，只能满足一定数据量时，使用批量方式写入数据库（定量写入），这个实现本身很简单，但如果考虑到服务器清闲时，很长时间都达不到这个数据量，但这段时间内可能会停机，没有写入数据库的数据就可能丢失，所以在给定的一段时间里，数据量没有到达给定数据的条件，只要达到时间条件，也需要写入数据库。</p>
<p>实现：<br />
基于以上的想法，我们可以使用java.util.concurrent.BlockingQueue来实现，这里仅分析一些关键代码<span id="more-583"></span><br />
1、构造一个用于数据缓冲区的队列</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> BlockingQueue<span style="color: #339933;">&lt;</span>Message<span style="color: #339933;">&gt;</span> queue <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LinkedBlockingQueue<span style="color: #339933;">&lt;</span>Message<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>2、生产者生产的数据放入队列</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// 本方法由生产者调用，将生产的数据放入队列</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> add<span style="color: #009900;">&#40;</span>Message m<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			queue.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">InterruptedException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>			
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>3、消费者对产生的数据进行消费</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        @Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				consume<span style="color: #009900;">&#40;</span>queue.<span style="color: #006633;">take</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">InterruptedException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 消费数据，把数据放在list中，便于对数据的批量写入数据库
	 * @param message
	 */</span>
	<span style="color: #000066; font-weight: bold;">void</span> consume<span style="color: #009900;">&#40;</span>Message message<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">synchronized</span><span style="color: #009900;">&#40;</span>list<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>			
			list.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>list.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				insert<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;满足100&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>		
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>4、把数据批量写入数据库</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 因为list可能同时被消费者、定时器操作，所以这里使用对list同步
	 * @param type
	 */</span>
	<span style="color: #000066; font-weight: bold;">void</span> insert<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> type<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">synchronized</span><span style="color: #009900;">&#40;</span>list<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>list.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>type<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">String</span> name <span style="color: #339933;">=</span> <span style="color: #003399;">Thread</span>.<span style="color: #006633;">currentThread</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>Message message <span style="color: #339933;">:</span> list<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				log.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;消费者：&quot;</span><span style="color: #339933;">+</span>message.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; ---&quot;</span><span style="color: #339933;">+</span>name<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">+</span>type<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			list.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>5、满足时间条件时，批量把数据写入数据库</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> TimerInsert <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">TimerTask</span><span style="color: #009900;">&#123;</span>
	Consumer consumer<span style="color: #339933;">;</span>
	TimerInsert<span style="color: #009900;">&#40;</span>Consumer consumer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">consumer</span> <span style="color: #339933;">=</span> consumer<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		consumer.<span style="color: #006633;">insert</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;满足时间&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>	
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>具体代码请参看附件中的代码.<a href="wp-content/uploads/2011/03/task.rar">下载</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/consumer-model-with-production-time-or-quantitative-data-queue-asynchronous-memory/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debian常用操作命令集合</title>
		<link>http://www.voland.com.cn/debian-common-set-of-operating-commands</link>
		<comments>http://www.voland.com.cn/debian-common-set-of-operating-commands#comments</comments>
		<pubDate>Mon, 10 Jan 2011 09:14:17 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=581</guid>
		<description><![CDATA[Debian常用操作命令集合，不定期增加及修改 查看软件xxx安装内容 #dpkg -L xxx 查找软件 #apt-cache search 正则表达式 查找文件属于哪个包 #dpkg -S filename #apt-file search filename 查询软件xxx依赖哪些包 #apt-cache depends xxx 查询软件xxx被哪些包依赖 #apt-cache rdepends xxx 增加一个光盘源 #apt-cdrom add 系统升级 #apt-get update #apt-get upgrade #apt-get dist-upgrade 清除所有删除包的残余配置文件 #dpkg -l &#124;grep ^rc&#124;awk ”{print $2}” &#124;tr ["\n"] [" "]&#124;sudo xargs dpkg -P - 编译时缺少h文件的自动处理 #auto-apt run ./configure 查看安装软件时下载包的临时存放目录 #ls [...]]]></description>
			<content:encoded><![CDATA[<p>Debian常用操作命令集合，不定期增加及修改<br />
查看软件xxx安装内容<br />
#dpkg -L xxx</p>
<p>查找软件<br />
#apt-cache search 正则表达式</p>
<p>查找文件属于哪个包<br />
#dpkg -S filename<br />
#apt-file search filename</p>
<p>查询软件xxx依赖哪些包<br />
#apt-cache depends xxx</p>
<p>查询软件xxx被哪些包依赖<br />
#apt-cache rdepends xxx</p>
<p>增加一个光盘源<br />
#apt-cdrom add</p>
<p>系统升级<br />
#apt-get update<br />
#apt-get upgrade<br />
#apt-get dist-upgrade<br />
<span id="more-581"></span><br />
清除所有删除包的残余配置文件<br />
#dpkg -l |grep ^rc|awk ”{print $2}” |tr ["\n"] [" "]|sudo xargs dpkg -P -</p>
<p>编译时缺少h文件的自动处理<br />
#auto-apt run ./configure</p>
<p>查看安装软件时下载包的临时存放目录<br />
#ls /var/cache/apt/archives</p>
<p>备份当前系统安装的所有包的列表<br />
#dpkg &#8211;get-selections | grep -v deinstall > ~/somefile</p>
<p>从上面备份的安装包的列表文件恢复所有包<br />
#dpkg &#8211;set-selections < ~/somefile<br />
#dselect</p>
<p>清理旧版本的软件缓存<br />
#apt-get autoclean</p>
<p>清理所有软件缓存<br />
#apt-get clean</p>
<p>删除系统不再使用的孤立软件<br />
#apt-get autoremove</p>
<p>查看包在服务器上面的地址<br />
#apt-get -qq --print-uris install ssh | cut -d\'' -f2</p>
<p>查看内核<br />
#uname -a</p>
<p>查看Ubuntu版本<br />
#cat /etc/issue</p>
<p>查看内核加载的模块<br />
#lsmod</p>
<p>查看PCI设备<br />
#lspci</p>
<p>查看USB设备<br />
#lsusb</p>
<p>查看网卡状态<br />
#ethtool eth0</p>
<p>查看CPU信息<br />
#cat /proc/cpuinfo</p>
<p>显示当前硬件信息<br />
#lshw</p>
<p>查看硬盘的分区<br />
#fdisk -l</p>
<p>查看IDE硬盘信息<br />
#hdparm -i /dev/hda</p>
<p>查看STAT硬盘信息<br />
#hdparm -I /dev/sda<br />
或<br />
#apt-get install blktool<br />
#blktool /dev/sda id</p>
<p>查看硬盘剩余空间<br />
#df -h<br />
#df -H</p>
<p>查看目录占用空间<br />
#du -hs 目录名</p>
<p>优盘没法卸载<br />
#sync<br />
#fuser -km /media/usbdisk</p>
<p>查看当前的内存使用情况<br />
#free -m</p>
<p>查看当前有哪些进程<br />
#ps -aux</p>
<p>中止一个进程<br />
#kill 进程号<br />
或 killall 进程名</p>
<p>强制中止一个进程<br />
#kill -9 进程号<br />
或 killall -9 进程名</p>
<p>查看当前进程的实时状况<br />
#top</p>
<p>查看进程打开的文件<br />
#lsof -p</p>
<p>配置 ADSL<br />
#pppoeconf</p>
<p>ADSL手工拨号<br />
#pon dsl-provider</p>
<p>激活 ADSL<br />
#/etc/ppp/pppoe_on_boot</p>
<p>断开 ADSL<br />
#poff</p>
<p>查看拨号日志<br />
#plog</p>
<p>根据IP查网卡地址<br />
#arping IP地址</p>
<p>查看当前IP地址<br />
#ifconfig eth0</p>
<p>查看当前监听80端口的程序<br />
#lsof -i :80</p>
<p>查看当前网卡的物理地址<br />
#arp -a | awk ''{print $4}''<br />
#ifconfig eth0 | head -1 | awk ''{print $5}''</p>
<p>立即让网络支持nat<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
#iptables -t nat -I POSTROUTING -j MASQUERADE</p>
<p>查看路由信息<br />
#netstat -rn<br />
#route -n</p>
<p>手工增加删除一条路由<br />
#route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br />
#route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1</p>
<p>修改网卡MAC地址的方法<br />
#ifconfig eth0 down #关闭网卡<br />
#ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址<br />
#ifconfig eth0 up #然后启动网卡</p>
<p>统计当前IP连接的个数<br />
#netstat -na|grep ESTABLISHED|awk ”{print $5}”|awk -F: ”{print $1}”|sort|uniq -c|sort -r -n<br />
#netstat -na|grep SYN|awk ”{print $5}”|awk -F: ”{print $1}”|sort|uniq -c|sort -r -n</p>
<p>统计当前20000个IP包中大于100个IP包的IP地址<br />
#tcpdump -tnn -c 20000 -i eth0 | awk -F “.” ”{print $1&#8243;.”$2&#8243;.”$3&#8243;.”$4}” | sort | uniq -c | sort -nr | awk ” $1 > 100 ”</p>
<p>屏蔽IPV6<br />
#echo “blacklist ipv6&#8243; | tee /etc/modprobe.d/blacklist-ipv6</p>
<p>添加一个服务<br />
#update-rc.d 服务名 defaults 99</p>
<p>删除一个服务<br />
#update-rc.d 服务名 remove</p>
<p>临时重启一个服务<br />
#/etc/init.d/服务名 restart</p>
<p>临时关闭一个服务<br />
#/etc/init.d/服务名 stop</p>
<p>临时启动一个服务<br />
#/etc/init.d/服务名 start</p>
<p>配置默认Java使用哪个<br />
#update-alternatives &#8211;config java</p>
<p>修改用户资料<br />
#chfn userid</p>
<p>给apt设置代理<br />
#export http_proxy=http://xx.xx.xx.xx:xxx</p>
<p>修改系统登录信息<br />
#vi /etc/motd</p>
<p>转换文件名由GBK为UTF8<br />
#apt-get install convmv<br />
#convmv -r -f cp936 -t utf8 &#8211;notest &#8211;nosmart *</p>
<p>批量转换src目录下的所有文件内容由GBK到UTF8<br />
#find src -type d -exec mkdir -p utf8/{} \;<br />
#find src -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;<br />
#mv utf8/* src<br />
#rm -fr utf8</p>
<p>转换文件内容由GBK到UTF8<br />
#iconv -f gbk -t utf8 $i > newfile</p>
<p>转换 mp3 标签编码<br />
#apt-get install python-mutagen<br />
#find . -iname “*.mp3” -execdir mid3iconv -e GBK {} \;</p>
<p>控制台下显示中文<br />
#apt-get install zhcon<br />
使用时，输入zhcon即可</p>
<p>快速查找某个文件<br />
#whereis filename<br />
#find 目录 -name 文件名</p>
<p>查看文件类型<br />
#file filename</p>
<p>显示xxx文件倒数6行的内容<br />
#tail -n 6 xxx</p>
<p>让tail不停地读地最新的内容<br />
#tail -n 10 -f /var/log/apache2/access.log</p>
<p>查看文件中间的第五行 ( 含 ) 到第 10 行 ( 含 ) 的内容<br />
#sed -n ”5,10p” /var/log/apache2/access.log</p>
<p>查找包含xxx字符串的文件<br />
#grep -l -r xxx .</p>
<p>查找关于xxx的命令<br />
#apropos xxx<br />
#man -k xxx</p>
<p>通过ssh传输文件<br />
#scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上<br />
#scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地</p>
<p>查看某个文件被哪些应用程序读写<br />
#lsof 文件名</p>
<p>把所有文件的后辍由rm改为rmvb<br />
#rename ”s/.rm$/.rmvb/” *</p>
<p>把所有文件名中的大写改为小写<br />
#rename ”tr/A-Z/a-z/” *</p>
<p>删除特殊文件名的文件，如文件名：&#8211;help.txt<br />
#rm &#8212; &#8211;help.txt 或者 rm ./&#8211;help.txt</p>
<p>查看当前目录的子目录<br />
#ls -d */. 或 echo */.</p>
<p>将当前目录下最近30天访问过的文件移动到上级back目录<br />
f#ind . -type f -atime -30 -exec mv {} ../back \;</p>
<p>将当前目录下最近2小时到8小时之内的文件显示出来<br />
#find . -mmin +120 -mmin -480 -exec more {} \;</p>
<p>删除修改时间在30天之前的所有文件<br />
#find . -type f -mtime +30 -mtime -3600 -exec rm {} \;</p>
<p>查找guest用户的以avi或者rm结尾的文件并删除掉<br />
#find . -name ”*.avi” -o -name ”*.rm” -user ”guest” -exec rm {} \;</p>
<p>查找的不以java和xml结尾,并7天没有使用的文件删除掉<br />
#find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;</p>
<p>统计当前文件个数<br />
#ls /usr/bin|wc -w</p>
<p>统计当前目录个数<br />
#ls -l /usr/bin|grep ^d|wc -l</p>
<p>显示当前目录下2006-01-01的文件名<br />
#ls -l |grep 2006-01-01 |awk ”{print $8}”</p>
<p>解压缩 xxx.tar.gz<br />
#tar -zxvf xxx.tar.gz</p>
<p>解压缩 xxx.tar.bz2<br />
#tar -jxvf xxx.tar.bz2</p>
<p>压缩aaa bbb目录为xxx.tar.gz<br />
#tar -zcvf xxx.tar.gz aaa bbb</p>
<p>压缩aaa bbb目录为xxx.tar.bz2<br />
#tar -jcvf xxx.tar.bz2 aaa bbb</p>
<p>详细显示程序的运行信息<br />
#strace -f -F -o outfile</p>
<p>设置日期<br />
#date -s mm/dd/yy</p>
<p>设置时间<br />
#date -s HH:MM</p>
<p>将时间写入CMOS<br />
#hwclock &#8211;systohc</p>
<p>读取CMOS时间<br />
#hwclock &#8211;hctosys</p>
<p>从服务器上同步时间<br />
#ntpdate time.nist.gov<br />
#ntpdate time.windows.com</p>
<p>从mysql中导出和导入数据<br />
#mysqldump 数据库名 > 文件名 #导出数据库mysqladmin create 数据库名 #建立数据库<br />
#mysql 数据库名 < 文件名 #导入数据库</p>
<p>忘了mysql的root口令怎么办<br />
#/etc/init.d/mysql stop<br />
#mysqld_safe &#8211;skip-grant-tables &#038;<br />
#mysqladmin -u user password ”newpassword””<br />
#mysqladmin flush-privileges</p>
<p>#修改mysql的root口令<br />
#mysqladmin -uroot -p password ”你的新密码”</p>
<p>下载网站文档<br />
#wget -r -p -np -k http://www.21cn.com<br />
 -r：在本机建立服务器端目录结构；<br />
 -p: 下载显示HTML文件的所有图片；<br />
 -np：只下载目标站点指定目录及其子目录的内容；<br />
 -k: 转换非相对链接为相对链接。</p>
<p>如何删除Totem电影播放机的播放历史记录<br />
#rm ~/.recently-used </p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/debian-common-set-of-operating-commands/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在debian中安装UnixBench</title>
		<link>http://www.voland.com.cn/how-to-install-byte-unixbench-on-debian-lenny-install-unixbench-in-debain</link>
		<comments>http://www.voland.com.cn/how-to-install-byte-unixbench-on-debian-lenny-install-unixbench-in-debain#comments</comments>
		<pubDate>Wed, 29 Dec 2010 09:50:05 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[UnixBench]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=575</guid>
		<description><![CDATA[UnixBench可以测试UNIX、linux性能测试软件，在debian中安装与运行如下： 第一次运行安装时，需要先安装他依赖的包 #apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules make 安装完成依赖包好，下载unixbench-5.1.2安装并运行 #wget http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz #tar zxvf unixbench-5.1.2.tar.gz #cd unixbench-5.1.2 #./Run]]></description>
			<content:encoded><![CDATA[<p>UnixBench可以测试UNIX、linux性能测试软件，在debian中安装与运行如下：<br />
第一次运行安装时，需要先安装他依赖的包<br />
<code>#apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl  perl-modules make</code></p>
<p>安装完成依赖包好，下载unixbench-5.1.2安装并运行<br />
<code><br />
#wget http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz<br />
#tar zxvf unixbench-5.1.2.tar.gz<br />
#cd unixbench-5.1.2<br />
#./Run<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/how-to-install-byte-unixbench-on-debian-lenny-install-unixbench-in-debain/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>锁定SVN中的二进制文件防止冲突</title>
		<link>http://www.voland.com.cn/using-svn-needs-lock-property-in-svn</link>
		<comments>http://www.voland.com.cn/using-svn-needs-lock-property-in-svn#comments</comments>
		<pubDate>Wed, 15 Dec 2010 02:39:45 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[配置]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[SVN锁定二进制文件]]></category>
		<category><![CDATA[SVN锁定编辑解锁]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=570</guid>
		<description><![CDATA[在SVN中对于二进制文件，或者不太适合合并的文件进行修改时，直接使用默认的”拷贝-修改-合并”工作模式可能造成很多不方便，如出现冲突，可能会无法合并等等，费时费力！这样的情况还是使用VSS“锁定-编辑-解锁”的工作模式比较好。SVN同样支持这种工作方式，但网上的文章对于这种工作模式介绍比较少，基本出于同一文章，而且对这种工作模式的具体使用没有介绍，这文章就是介绍你怎么在SVN中使用”锁定-编辑-解锁”工作模式。 SVN中使用”锁定-编辑-解锁”工作模式的原理很简单，主要通过内置的属性“svn:needs-lock”实现“锁定-编辑-解锁”模型，注意，这个属性只对独立文件有效，对目录不起作用。我以Eclipse为例子，说一下他的使用: 1、设置文件的工作模式为“锁定-编辑-解锁” 选择需要设置为“锁定-编辑-解锁”模式的文件—》点击右键—》Team —》设置属性，出现如下对话框 然后提交到svn服务器，提交后，原来的文件小图标会出来一个红圈包含的减号。说明工作模式已经设置成功！设置好第一步后，所有更新到最新版本的客户端文件，都会出现同样的标记，设置成功后，这个文件被设置为只读模式，在没有取得锁定前，将不可以直接修改保存。 2、锁定文件 在修改文件前，我们需要首先锁定文件才能修改，锁定后，其它人就不能再锁定了。直到锁定人员提交本次修改，或者手工解除锁定，锁定文件过程如下： 选择第一步中已经设置为“锁定-编辑-解锁”工作模式的文件-》点击右键-》Team-》锁定文件，弹出SVN提交对话框，提交后，这样文件将被锁定，然后就可以修改文件了。 3、解锁文件 编辑完成文件，直接提交本次修改，就自动解锁了，当然，有时锁定后，可能并没有修改，如果也需要解锁，则解锁的步骤如下： 选择已经锁定的文件-》点击右键-》Team—》解锁文件。]]></description>
			<content:encoded><![CDATA[<p>在SVN中对于二进制文件，或者不太适合合并的文件进行修改时，直接使用默认的”拷贝-修改-合并”工作模式可能造成很多不方便，如出现冲突，可能会无法合并等等，费时费力！这样的情况还是使用VSS“锁定-编辑-解锁”的工作模式比较好。SVN同样支持这种工作方式，但网上的文章对于这种工作模式介绍比较少，基本出于同一文章，而且对这种工作模式的具体使用没有介绍，这文章就是介绍你怎么在SVN中使用”锁定-编辑-解锁”工作模式。</p>
<p>SVN中使用”锁定-编辑-解锁”工作模式的原理很简单，主要通过内置的属性“svn:needs-lock”实现“锁定-编辑-解锁”模型，注意，这个属性只对独立文件有效，对目录不起作用。我以Eclipse为例子，说一下他的使用:</p>
<p><strong>1、设置文件的工作模式为“锁定-编辑-解锁”</strong></p>
<p><span style="color: #FF5959;">选择需要设置为“锁定-编辑-解锁”模式的文件—》点击右键—》Team —》设置属性</span>，出现如下对话框</p>
<div id="attachment_571" class="wp-caption aligncenter" style="width: 514px"><img class="size-full wp-image-571" title="svn set property" src="http://www.voland.com.cn/wp-content/uploads/2010/12/setproperty.jpg" alt="svn set property" width="504" height="194" /><p class="wp-caption-text">svn set property</p></div>
<p>然后提交到svn服务器，提交后，原来的文件小图标会出来一个红圈包含的减号。说明工作模式已经设置成功！设置好第一步后，所有更新到最新版本的客户端文件，都会出现同样的标记，设置成功后，这个文件被设置为只读模式，在没有取得锁定前，将不可以直接修改保存。</p>
<p><strong>2、锁定文件</strong><br />
在修改文件前，我们需要首先锁定文件才能修改，锁定后，其它人就不能再锁定了。直到锁定人员提交本次修改，或者手工解除锁定，锁定文件过程如下：<span id="more-570"></span><br />
<span style="color: #FF5959;">选择第一步中已经设置为“锁定-编辑-解锁”工作模式的文件-》点击右键-》Team-》锁定文件，弹出SVN提交对话框，提交后，这样文件将被锁定</span>，然后就可以修改文件了。</p>
<p><strong>3、解锁文件</strong><br />
编辑完成文件，直接提交本次修改，就自动解锁了，当然，有时锁定后，可能并没有修改，如果也需要解锁，则解锁的步骤如下：<br />
<span style="color: #FF5959;">选择已经锁定的文件-》点击右键-》Team—》解锁文件。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/using-svn-needs-lock-property-in-svn/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debian系统中使用mrtg监控服务器的cpu、内存、网络等等情况</title>
		<link>http://www.voland.com.cn/debian-system-using-mrtg-monitoring-server-cpu-memory-network-usage</link>
		<comments>http://www.voland.com.cn/debian-system-using-mrtg-monitoring-server-cpu-memory-network-usage#comments</comments>
		<pubDate>Tue, 30 Nov 2010 02:43:04 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[配置]]></category>
		<category><![CDATA[mrtg]]></category>
		<category><![CDATA[mrtg监控CPU]]></category>
		<category><![CDATA[mrtg监控web]]></category>
		<category><![CDATA[mrtg监控内存]]></category>
		<category><![CDATA[mrtg监控网络]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=557</guid>
		<description><![CDATA[如果你是服务器管理员，MRTG会为你做很多事情，如网络流量监控，CPU使用情况及温度监控，内存监控，Web连接数量监控等等，当然，并不是说MRTG有多强大，他也是依赖于snmp服务，也有很多人更喜欢高级点的cacti，但MRTG优点还是很多的，这里就介绍下使用mrtg来监视服务器的性能及状态. 一：安装必须的软件进行流量监控： apt-get install apache2 （这个也是可以用Nginx，这里以apache2为例子，如果已经安装apache2，跳过之！） apt-get install mrtg apt-get install snmpd 编辑snmpd： vim /etc/snmp/snmpd.conf 查找到类似的行，修改为如下所示：（仅仅修改屏蔽或放开） # sec.name source community # com2sec paranoid default public # kommentieren com2sec readonly default public # /etc/mrtg.cfg （注意）如果仅仅监视一个IP地址采用如下命令： cfgmaker public@192.168.0.1 >> /etc/mrtg.cfg 生成mrtg的主页： indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html 访问地址：http://localhost/mrtg/ （所有都用这个地址访问） 二：安装CPU负载监视[以下都为默认5分钟采集一次] 切换到超级用户： sudo -sH 安装软件： apt-get install sysstat 建立CPU脚本： mkdir [...]]]></description>
			<content:encoded><![CDATA[<p>如果你是服务器管理员，MRTG会为你做很多事情，如网络流量监控，CPU使用情况及温度监控，内存监控，Web连接数量监控等等，当然，并不是说MRTG有多强大，他也是依赖于snmp服务，也有很多人更喜欢高级点的cacti，但MRTG优点还是很多的，这里就介绍下使用mrtg来监视服务器的性能及状态.<br />
<a href="http://www.voland.com.cn/wp-content/uploads/2010/11/192.33.92.249_fa4_1-day.png"><img src="http://www.voland.com.cn/wp-content/uploads/2010/11/192.33.92.249_fa4_1-day.png" alt="" title="192.33.92.249_fa4_1-day" width="500" height="135" class="aligncenter size-full wp-image-567" /></a></p>
<p><strong>一：安装必须的软件进行流量监控：</strong><br />
<code>apt-get install apache2 （这个也是可以用Nginx，这里以apache2为例子，如果已经安装apache2，跳过之！）<br />
apt-get install mrtg<br />
apt-get install snmpd</code><br />
编辑snmpd：<br />
<code>vim /etc/snmp/snmpd.conf</code><br />
查找到类似的行，修改为如下所示：（仅仅修改屏蔽或放开）<br />
<code># sec.name source community<br />
# com2sec paranoid default public # kommentieren<br />
com2sec readonly default public # <- auskommentieren<br />
#com2sec readwrite default private</code><br />
重启snmpd服务：<br />
<code>/etc/init.d/snmpd restart</code><br />
重新生成mrtg的配置文件：<br />
<code>cfgmaker public@localhost > /etc/mrtg.cfg</code><br />
（注意）如果仅仅监视一个IP地址采用如下命令：<br />
cfgmaker public@192.168.0.1 >> /etc/mrtg.cfg<br />
生成mrtg的主页：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code><br />
访问地址：http://localhost/mrtg/  （所有都用这个地址访问）<span id="more-557"></span><br />
<br/><br />
<strong>二：安装CPU负载监视[以下都为默认5分钟采集一次]</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
安装软件：<br />
<code>apt-get install sysstat</code><br />
建立CPU脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.cpu<br />
#!/bin/bash<br />
cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk ‘{print $3}’`<br />
cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk ‘{print $5}’`<br />
UPtime=`/usr/bin/uptime | awk ‘{print $3″”$4″”$5}’`<br />
echo $cpuusr<br />
echo $cpusys<br />
echo $UPtime<br />
hostname</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.cpu</code><br />
修改 /etc/mrtg.cfg 在文件最后加入cpu项目<br />
<code>Target[cpu]: `/opt/mrtg/mrtg.cpu`<br />
MaxBytes[cpu]: 100<br />
Options[cpu]: gauge, nopercent, growright<br />
YLegend[cpu]: CPU loading (%)<br />
ShortLegend[cpu]: %<br />
LegendO[cpu]:  CPU us;<br />
LegendI[cpu]: CPU sy;<br />
Title[cpu]: CPU Loading<br />
PageTop[cpu]: CPU Loading</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>三：安装WWW连接数监视</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
建立WWW脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.www<br />
#!/bin/bash<br />
all=`netstat -a | grep www|awk ‘{print $5}’|sort | wc -l|awk ‘{print$1 – 1}’`<br />
user=`netstat -a | grep www|awk ‘{print $5}’|cut -d”:” -f1|sort| uniq |wc -l | awk ‘{print $1 -<br />
1}’`<br />
if [ "$all" = "-1" ]; then<br />
echo 0<br />
else<br />
echo $all<br />
fi<br />
if [ "$user" = "-1" ]; then<br />
echo 0<br />
else<br />
echo $user<br />
fi<br />
UPtime=`/usr/bin/uptime | awk ‘{print $3 ” ” $4 ” ” $5}’`<br />
echo $UPtime<br />
hostname</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.www</code><br />
修改 /etc/mrtg.cfg 在文件最后加入www项目<br />
<code>Target[www]: `/opt/mrtg/mrtg.www`<br />
MaxBytes[www]: 500<br />
Options[www]: nopercent, growright<br />
YLegend[www]: Online Users<br />
ShortLegend[www]: %<br />
LegendI[www]:  Connect :<br />
LegendO[www]: Online :<br />
Title[www]: WWW Connect<br />
PageTop[www]:  WWW Connect<br />
</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>四：安装内存使用监视</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
建立RAM脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.ram<br />
#!/bin/bash<br />
# run this script to check the mem usage.<br />
totalmem=`/usr/bin/free |grep Mem |awk ‘{print $2}’`<br />
usedmem=`/usr/bin/free |grep Mem |awk ‘{print $3}’`<br />
UPtime=`/usr/bin/uptime | awk ‘{print $3″”$4″”$5}’`<br />
echo $totalmem<br />
echo $usedmem<br />
echo $UPtime<br />
hostname</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.ram</code><br />
修改 /etc/mrtg.cfg 在文件最后加入ram项目<br />
<code>Target[ram]: `/opt/mrtg/mrtg.ram`<br />
#Unscaled[ram]: dwym<br />
MaxBytes[ram]: 2048000<br />
Title[ram]:Memory<br />
ShortLegend[ram]: &#038;<br />
kmg[ram]:kB,MB<br />
kilo[ram]:1024<br />
YLegend[ram]: Memory Usage :<br />
Legend1[ram]: Total Memory :<br />
Legend2[ram]: Used Memory :<br />
LegendI[ram]: Total Memory :<br />
LegendO[ram]:  Used Memory :<br />
Options[ram]: growright,gauge,nopercent<br />
PageTop[ram]:Memory</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>五：安装CPU温度监视</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
安装软件：<br />
<code>apt-get install mbmon</code><br />
建立CPU温度脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.temp<br />
#!/bin/bash<br />
/usr/bin/mbmon -c 1 -i -T 4 -u -n<br />
exit 0</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.temp</code><br />
修改 /etc/mrtg.cfg 在文件最后加入cpu项目<br />
<code>Target[temp]: `/opt/mrtg/mrtg.temp`<br />
MaxBytes[temp]: 100<br />
Title[temp]: CPU Temperature<br />
PageTop[temp]: CPU Temperature<br />
Options[temp]: gauge,absolute,unknaszero,growright<br />
YLegend[temp]: Temperature(C)<br />
ShortLegend[temp]: (C)<br />
Legend1[temp]: CPU Temperature<br />
Legend2[temp]: M/B Temperature<br />
LegendI[temp]: CPU Temp.<br />
LegendO[temp]: M/B Temp.</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>六：硬盘读写监视</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
建立硬盘读写脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.disk<br />
#!/bin/bash<br />
hd=sda<br />
disk=/dev/$hd<br />
UPtime=`/usr/bin/uptime |awk ‘{print $3″”$4″”$5}’`<br />
KBread_sec=`iostat -x $disk|grep $hd |awk ‘{print 8$}’`<br />
KBwrite_sec=`iostat -x $disk|grep $hd |awk ‘{print 9$}’`<br />
echo $KBread_sec<br />
echo $KBwrite_sec<br />
echo $UPtime<br />
hostname</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.disk</code><br />
修改 /etc/mrtg.cfg 在文件最后加入硬盘读写<br />
<code>Target[disk]: `/opt/mrtg/mrtg.disk`<br />
Title[disk]: Disk HDA I/O Utilization Report<br />
#Unscaled[disk]: dwym<br />
MaxBytes[disk]: 10240000<br />
PageTop[disk]: Disk I/O Utilization Report<br />
kmg[disk]: KB,MB,GB<br />
LegendI[disk]: Disk I/O KBread/sec<br />
LegendO[disk]: Disk I/O KBwrite/sec<br />
Legend1[disk]: Disk I/O KBread/sec<br />
Legend2[disk]: Disk I/O KBwrite/sec<br />
YLegend[disk]: Megabytes<br />
ShortLegend[disk]: &#038;<br />
Options[disk]: growright,gauge,nopercent</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>七：磁盘使用</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
建立磁盘使用脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.df<br />
#!/usr/bin/perl<br />
foreach $filesystem (`df -kl | grep -v “Filesystem”`)<br />
{<br />
@df = split(/\s+/,$filesystem);<br />
$total += $df[1];<br />
$usage += $df[2];<br />
}<br />
print “$total\n”;<br />
print “$usage\n”;<br />
hostname<br />
</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.df</code><br />
修改 /etc/mrtg.cfg 在文件最后加入<br />
<code>Target[disk]: `/opt/mrtg/mrtg.df`<br />
Title[disk]: Disk Space<br />
Unscaled[disk]: dwym<br />
MaxBytes[disk]: 465247550<br />
kmg[disk]: KB,MB,GB<br />
LegendI[disk]: Total Disk Space<br />
LegendO[disk]: Used Disk Space<br />
Legend1[disk]: Total Disk Space<br />
Legend2[disk]: Used Disk Space<br />
YLegend[disk]: Megabytes<br />
ShortLegend[disk]: &#038;<br />
Options[disk]: growright,nopercent<br />
PageTop[disk]: Disk Space</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>八：交换分区监控</strong><br />
切换到超级用户：<br />
<code>sudo -sH</code><br />
建立交换分区脚本：<br />
<code>mkdir /opt/mrtg<br />
vim /opt/mrtg/mrtg.swap<br />
#!/bin/bash<br />
# This script to monitor the swap usage.<br />
totalswap=`/usr/bin/free |grep Swap |awk ‘{print $2}’`<br />
usedswap=`/usr/bin/free |grep Swap |awk ‘{print $3}’`<br />
echo “$totalswap”<br />
echo “$usedswap”</code><br />
使脚本可以执行：<br />
<code>chmod +755 /opt/mrtg/mrtg.swap</code><br />
修改 /etc/mrtg.cfg 在文件最后加入<br />
<code>Target[swap]: `/opt/mrtg/mrtg.swap`<br />
MaxBytes[swap]: 2048000<br />
Title[swap]:Memory State of Server<br />
ShortLegend[swap]: &#038;<br />
kmg[swap]:kB,MB<br />
kilo[swap]:1024<br />
YLegend[swap]: Swap Usage<br />
Legend1[swap]: Total Swap<br />
Legend2[swap]: Used Swap<br />
LegendI[swap]: Total Swap<br />
LegendO[swap]: Used Swap<br />
Options[swap]: growright,gauge,nopercent<br />
PageTop[swap]:Swap<br />
</code><br />
重新生成索引页面：<br />
<code>indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html</code></p>
<p><br/><br />
<strong>最后，使用htpasswd保护MRTG</strong><br />
1>，首先确定apache是否加载mod_auth.so模块，查看/etc/apache2/mods-enable目录下是否有auth_basic.load，<br />
默认情况我的Debian已经加载此模块。<br />
2>，编辑/etc/apache2/sites-enable/000-default，直接在此文件最下面添加以下内容：<br />
<code><Directory “/var/www/mrtg”><br />
Options Indexes FollowSymLinks MultiViews ExecCGI<br />
AllowOverride AuthConfig<br />
Order allow,deny<br />
Allow from all<br />
</Directory></code><br />
3>，假如我们要设置保护的目录是/var/www/mrtg，那么在/var/www/mrtg新增一个.htaccess文件，添加以下内容：<br />
<code>AuthName “Admin zone”<br />
AuthType “Basic”<br />
AuthUserFile “/var/http.pw”<br />
require valid-user</code><br />
4，添加用户及密码，执行以下命令后要求输入两次密码即可，如果要再添加第多个使用者，不需要加参数”-c”<br />
<code>debian#htpasswd -c /var/http.pw username</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/debian-system-using-mrtg-monitoring-server-cpu-memory-network-usage/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>挑选最适合自己的VPS主机商</title>
		<link>http://www.voland.com.cn/select-the-most-suited-to-their-vps-hosting-providers</link>
		<comments>http://www.voland.com.cn/select-the-most-suited-to-their-vps-hosting-providers#comments</comments>
		<pubDate>Tue, 23 Nov 2010 02:43:08 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[VPS]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=555</guid>
		<description><![CDATA[VPS挑选还真多学问，自己没有用过VPS，不过正打算要用，找到一文章关于选择美国VPS的，这里引用一下： http://zou.lu/how-to-choose-vps-hosting/]]></description>
			<content:encoded><![CDATA[<p>VPS挑选还真多学问，自己没有用过VPS，不过正打算要用，找到一文章关于选择美国VPS的，这里引用一下：</p>
<p>http://zou.lu/how-to-choose-vps-hosting/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/select-the-most-suited-to-their-vps-hosting-providers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>win7无法安装Office2003的解决办法</title>
		<link>http://www.voland.com.cn/how-to-install-office2003-in-windows-7win7-solution-can-not-install-office2003</link>
		<comments>http://www.voland.com.cn/how-to-install-office2003-in-windows-7win7-solution-can-not-install-office2003#comments</comments>
		<pubDate>Mon, 30 Aug 2010 01:42:55 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[常用技术]]></category>
		<category><![CDATA[Win7]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=529</guid>
		<description><![CDATA[前些日子给朋友在win7上安装office2003时出现错误（实际安装2007也会出现类似错误），错误的提示信息大概是由于权限问题，没有办法写入文件到相关的目录，所以可以肯定问题的根本原因是Win7的账户控制。由于Win7账户安全系数加强，以至于写入核心文件夹程序都需要有权限。所以解决问题的关键是给指定的文件夹及用户以写入权限。 解决方案与步骤如下： 1、桌面上右键点击计算机，选中“管理”菜单。 2、进入以后选择“本地用户和组”，并继续选择“用户” 3、看到对应的右边窗口中找到一个名为Administrator的用户，并右键点击“属性”，将“账户已禁用”前面的勾去掉。 4、从开始菜单中选择“切换用户”，以刚才的那个Administrator用户进入 （走到这一步才算是真正以计算机管理员的身份进入Win7） 5、在文件夹选项中选择“显示隐藏文件、文件夹和驱动器”并确定 6、找到ProgramData\Microsoft\Windows\开始菜单\程序，右键点击“程序”文件夹，并选择“属性” （这一步是定位对应的权限文件夹位置，接下来就是要修改权限了） 7、找到“安全”选项卡，并单击“编辑”，在弹出的对话框中选择Everyone，并将下面所有的选项打钩，最后一路确定。 （到这里我们才算是将对应的开始菜单权限修改完毕） 此时我们再运行安装程序，就应该不会出现错误了。]]></description>
			<content:encoded><![CDATA[<p>前些日子给朋友在win7上安装office2003时出现错误（实际安装2007也会出现类似错误），错误的提示信息大概是由于权限问题，没有办法写入文件到相关的目录，所以可以肯定问题的根本原因是Win7的账户控制。由于Win7账户安全系数加强，以至于写入核心文件夹程序都需要有权限。所以解决问题的关键是给指定的文件夹及用户以写入权限。</p>
<p>解决方案与步骤如下：<span id="more-529"></span><br />
1、桌面上右键点击计算机，选中“管理”菜单。<br />
2、进入以后选择“本地用户和组”，并继续选择“用户”<br />
3、看到对应的右边窗口中找到一个名为Administrator的用户，并右键点击“属性”，将“账户已禁用”前面的勾去掉。<br />
4、从开始菜单中选择“切换用户”，以刚才的那个Administrator用户进入<br />
（走到这一步才算是真正以计算机管理员的身份进入Win7）<br />
5、在文件夹选项中选择“显示隐藏文件、文件夹和驱动器”并确定<br />
6、找到ProgramData\Microsoft\Windows\开始菜单\程序，右键点击“程序”文件夹，并选择“属性”<br />
（这一步是定位对应的权限文件夹位置，接下来就是要修改权限了）<br />
7、找到“安全”选项卡，并单击“编辑”，在弹出的对话框中选择Everyone，并将下面所有的选项打钩，最后一路确定。<br />
（到这里我们才算是将对应的开始菜单权限修改完毕）<br />
此时我们再运行安装程序，就应该不会出现错误了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/how-to-install-office2003-in-windows-7win7-solution-can-not-install-office2003/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

