﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Maple's World</title><link>http://www.blogjava.net/ywjcy/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:05:26 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:05:26 GMT</pubDate><ttl>60</ttl><item><title>背后的故事:技术人员成功转型的三大要素</title><link>http://www.blogjava.net/ywjcy/archive/2007/12/29/171465.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Sat, 29 Dec 2007 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/12/29/171465.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/171465.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/12/29/171465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/171465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/171465.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有的时候我们对一款产品表现出难以名状的喜爱之情，往往我们就会想像做出这样功能的程序员他应该是多么的伟大，是什么样的天才，对他就如同造物主一般的崇拜，所以很多人会把成为一个程序员作为自己的理想，然而很少有人会知道，在这样一款产品的背后，其实还有一个更加强健的团队在护送着他前行。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而这个团队的领军人物就是产品经理。近日，我们都很熟悉的暴风影音发布了它最新的3.1版本，这距离上次的3.0版仅过了45天。暴风影音做为一个日使用量在千万级别之上的客户端软件，产品里的任何一个角落有瑕疵，任何一个细节有Bug，被用户识别到的几率非常大，这和普通的应用软件是不能比的。所以需要做大量的用户反馈，数据分析，数据挖掘的工作，来提升软件本身的性能，那么，如果作为暴风影音的产品经理，他的身上又发生着什么样的故事呢？我们带着这样的好奇心采访了暴风影音的产品经理王志鹏。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王志鹏是一个很健谈的人，但在倾听的时候却很真诚。&#8220;也许这就是做一名产品经理所必备的基本素质。&#8221;王志鹏对我们的赞赏这样回答道，&#8220;判断自己适不适合做一名产品经理，你需要为自己做一个这样的测试，如果有十个人分别提出了十种功能改进的方案，那么你是否能够发自内心的把这十套方案都耐心、认真的听完，并且能够真正领会到他们的意图，即使这其中有不切实际的方案、有令人哭笑不得的方案，但是如果你是有兴趣去做这件事，而且付出的都不会成为你的心理负担，那么你就具备了成为一名产品经理的基本素质&#8221;。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在做产品经理之前王志鹏也是一名技术人员，他也很喜欢做技术，那么是什么让他实现了从一名技术人员到一名产品经理这样的一次转型呢？&#8220;其实我很早就立志我要做技术开发，大学毕业以后我在一家公司做ERP软件，由于ERP软件的特殊性，是需要跟很多的业务部门进行沟通来了解他们的运作状况之后才能够编写软件代码的，所以渐渐的我发现，我的编程技术或者说是一些技巧并不是最好的，但我是最懂得我们业务人员需求，最懂得他们要什么的人。&#8221;也许就是这样的一段时间，让王志鹏考虑了自己的特长可能会在这里有更好的发挥。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也许就是凭着良好的沟通和理解能力，不久，王志鹏就被一家知名的国际软件厂商看中收入麾下，并担任项目管理的工作。&#8220;这段时间里我主要是在做项目甲方和乙方之间的桥梁，做时间、人员和资源方面的协调分配&#8221;王志鹏说，&#8220;在这段时间里我已经不做具体代码的编写工作了，这也让我有机会在抽离了具体的代码编写工作之后看清楚了一名技术人员在项目实施过程中会出现的问题，更重要的是让我深刻的体验到了这样的一家国际软件厂商他在软件产品生产的过程中积累下来的流程和规则，在这样的流程和规则下运作的软件生产活动，不管是谁都可以很好的完成高质量的产品&#8221;。也正是在这里，王志鹏完成了他的转型。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;其实在这个转变的过程中，我也有过挫败感的时候。&#8221;王志鹏说，&#8220;曾经我认为从一个技术人员转型到产品经理是容易的，其实不然。在有过失败之后，我开始反思我这样的想法，非常幸运的是我找到了出口&#8221;。从王志鹏感悟中我们找到了转型过程中最核心的三点：<br />
<br />
1、敬畏之心。无论是技术人员面对产品经理还是产品经理面对技术人员，大家一定要抱有敬畏之心，要尊重和重视别人的意见，不要认为自己就是正确的，一个人提出任何一种想法一定是经过了思考的，不能单纯的认为这个想法&#8220;幼稚&#8221;、&#8220;不可能&#8221;，更多要想的是为什么他会有这种想法。<br />
<br />
2、主动沟通。技术人员和产品经理其实各自运行的是两套逻辑。技术人员在考虑问题的时候最先是从后台着眼，继而考虑架构然后开始编写代码的过程；而产品经理在考虑问题的时候首先是从用户开始，继而是用户体验、完全以市场驱动为主导。这样两种完全不同的思考方式造就了不同的工作习惯。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序员完全可以只考虑自己技术实现的这一部分，做到精美、高效那他就是一个合格的技术人员，而产品经理需要的是Open的方式，需要和不同的人沟通他们各自的感受，因为代码的对和错有明显的界限，而用户体验没有对和错，只有好和更好，而自己的习惯并不能代表大家习惯，所以要通过主动的沟通和倾听来知道各种各样的体验是怎样的。<br />
<br />
3、大量阅读。不仅仅要阅读相关专业类书籍更要有广泛阅读的习惯。因为这样能够培养人文的思维习惯，这也是单一研究理工科类的技术人员所欠缺的，编程需要逻辑思维的缜密，而阅读能够让你看事情的时候更换另一种逻辑，也让你的思维变得更加全面。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获得成功是每个人都需要的，但是成功并没有一条可以遵循的路线可以走。并不是说程序员到了一个规定的阶段就一定需要转型，一定需要专向产品经理，或者一定需要出去创业。&#8220;我并不赞同每个技术人员都要考虑自己该如何转型，真正要考虑的是看请自己突出的特点在哪里。&#8221;王志鹏说，&#8220;在我们的工作过程中，并不是像升学考试一样，要一张桌子四条腿一样长，所谓的全面发展，如果数学能考120分，语文能考60分，而继续学数学就能考130分，同样的力气学语文可能可以靠90分，那毫不犹豫的应该去学语文；但是在工作中，如果我写代码能得80分的认可，做管理、做沟通能得60分的认可，而继续努力写代码就能到95分，继续努力尝试管理和沟通能得到80分，那么，奉劝大家还是要继续向95分的代码去努力。因为这就是你的特长，如果为了全面而放弃了你的特长，将是一个巨大的浪费。&#8221;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王志鹏的经验令我觉得这应该就是社会分工的规律所在，每个人都有自己的角色，要认清的是自己的核心竞争力，而在这里木桶效应是失效的。如果要打破这种规律的话，那可能会付出很大的代价。 <br />
<br />
原文出处:http://news.csdn.net/n/20071228/112243.html
 <img src ="http://www.blogjava.net/ywjcy/aggbug/171465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-12-29 12:32 <a href="http://www.blogjava.net/ywjcy/archive/2007/12/29/171465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>subversion和apache,apr,apr-util的关系</title><link>http://www.blogjava.net/ywjcy/archive/2007/12/14/167746.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Fri, 14 Dec 2007 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/12/14/167746.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/167746.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/12/14/167746.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/167746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/167746.html</trackback:ping><description><![CDATA[<p>作者：PCplayer</p>
<p>来自：我用Subversion - <a href="http://www.iusesvn.com/">http://www.iUseSVN.com</a></p>
<p>时间：2007.3.8</p>
<p>修改时间：2007.10.26</p>
<p>很多朋友初次接触Subversion时不是很理解subversion和apache的关系。</p>
<p>我在这里简单说明一下svn服务器和客户端的安装说明。</p>
<p><strong>服务器</strong></p>
<p>subversion服务器是不需要apache的，但是可以使用apache，视具体情况来选择。</p>
<p>1、如果只要通过file://或svn://来访问，则不需要apache，只安装svn即可，使用svnserve来作为服务。</p>
<p>2、如果你要建立一个可以通过http://或https://来访问的版本库服务器，则你需要使用apache。</p>
<p>基于apache配置，请看<a href="http://bbs.iusesvn.com/thread-158-1-1.html">http://bbs.iusesvn.com/thread-158-1-1.html</a> 。</p>
<p><strong>客户端</strong></p>
<p>在windows下，不管你要访问的是什么类型的服务器，只要安装一个TortoiseSVN就可以了，开发者已经帮你搞定一切。</p>
<p>在类Linux系统下，如果你通过file://或svn://来访问，则只要编译安装svn就可以，</p>
<p>如果通过http://访问，则要同neon编译，</p>
<p>如果通过https://访问，则要同带ssl支持的neon编译，</p>
<p>不论怎样，都要同apr和apr-util编译。</p>
<p>neon、apr、apr-util也很容易获得，目前发布的subversion代码都会有一个叫做subversion-deps-xxx的文件，比如1.4.3的就是subversion-deps-1.4.3.tar.bz2</p>
<p>对于访问国外网站比较慢的朋友，下载Subversion和客户端，可以到 <a href="http://www.iusesvn.com/">http://www.iUseSVN.com</a>，因带宽和流量有限，网站只对注册用户开放下载，这点有点麻烦，但是很值得，一是下载速度的确相当快，二是里面有很多热于与大家交流的Subversion爱好者。</p>
 <img src ="http://www.blogjava.net/ywjcy/aggbug/167746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-12-14 13:12 <a href="http://www.blogjava.net/ywjcy/archive/2007/12/14/167746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现精细的目录访问权限控制（v1.0 更新于2006.12.05）</title><link>http://www.blogjava.net/ywjcy/archive/2007/12/14/167745.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Fri, 14 Dec 2007 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/12/14/167745.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/167745.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/12/14/167745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/167745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/167745.html</trackback:ping><description><![CDATA[================<br />
Subversion之路<br />
================<br />
----------------------------<br />
实现精细的目录访问权限控制<br />
----------------------------<br />
<br />
<br />
:作者: 郑新星<br />
:联系: zhengxinxing &lt;AT&gt; gmail &lt;DOT&gt; com<br />
:状态: 正稿<br />
:版本: 1.0<br />
:修订: $Id: The.Road.to.Subversion_authz.rst 1749 2006-12-05 08:05:59Z zhengxinxing $<br />
:版权:&nbsp;&nbsp;作者保留对本文的一切修改、发布等权力。任何人想要转载本文部分或全部内容时，必须保留包括作者、联系、状态、版本、修订、版权，共六项信息，并给出出处。对本文的参考引用，则不受限制。<br />
<br />
:关键词: Subversion 目录访问 权限<br />
<br />
:献辞:<br />
<br />
&nbsp; &nbsp; 仅以本文，献给中国广大的自由软件爱好者们<br />
<br />
:摘要:<br />
<br />
&nbsp; &nbsp; 本文从一个实际的例子入手，介绍了如何利用 Subversion 自带的目录管理功能，来实现对项目目录的精细访问权限的控制。同时描述了在配置的过程中，需要注意的一些地方，如对中文的处理等。<br />
<br />
<br />
.. section-numbering::<br />
.. contents:: 目 录<br />
&nbsp; &nbsp;:backlinks: top<br />
<br />
<br />
<br />
前言<br />
====<br />
<br />
Subversion 权限简介<br />
-------------------<br />
<br />
在 Subversion 的使用当中，存在&#8220;认证&#8221;、&#8220;授权&#8221;两个概念。认证，即 authentication，是指用户名与密码的认证。授权，即 authorization ，是指某用户对某个目录是否具备读、写权限的一种审核。这两者配合作用，就组成了 Subversion 的整个帐户管理体系。<br />
<br />
在实际的工作当中，我们有时候会遇见需要控制项目目录的访问权限的情况，比如说对项目的一些关键模块进行限制，仅允许少数授权人士才可以修改等。由于项目的目录本身就是作为版本库的一个部分被 Subversion 所收管，所以我们无法利用操作系统的帐户权限体系，来实现授权控制。因此，这个问题就只有让svn自己来解决了。<br />
<br />
Subversion 提供了面向目录的帐户权限管理功能，通过它，我们就可以很精确地实现项目目录的访问控制。不过在 1.2 及其以前的版本，我们只能利用 mod_authz_svn.so 模块，结合 Apache 服务器来实现目录访问控制，这对于对 Apache 的配置与使用不是很熟悉的人来说，就不是很方便了。而Subversion终于在 1.3 版本上，在 svnserve.exe 服务器里面添加了这一功能，方便了很多人。<br />
<br />
<br />
其他信息<br />
--------<br />
<br />
本文面向那些 Subversion 的管理员，或者任何对 Subversoin 有兴趣的人们。本文假定读者对Subversion有一定的了解，因此不打算对所有涉及到的安装、使用，做一个细节性的描述。若对于文章中描述的其他细节方面有所疑问，请访问&#8220;参考文献&#8221;一节里面的参考资料。如果你对本文任何地方有什么意见，或者发现本文有着大大小小的错误，请联系 zhengxinxing &lt;AT&gt; gmail &lt;DOT&gt; com 。<br />
<br />
<br />
本文是基于 Subversion 1.3.2、MS Windows 2003 Server Edition 平台来编写的，且 Subversion 服务器是利用 svnserve.exe 来架设的。不过，本文讲述到的绝大多数内容，都是不仅与操作系统平台无关，而且与是采用 svnserve(.exe) 还是使用 Apache 来作为 Subversion 服务器也基本无关。因此为免罗嗦，本文就以 svnserve(.exe) 为例进行描述，而略过 Apache 服务器相关的内容，有兴趣的读者可以参考其他文章来在 Apache 服务器下实现类似的功能。<br />
<br />
本文是利用 reST 格式来编写的，如果你对它感兴趣，请访问 <a href="http://docutils.sourceforge.net/rst.html" target="_blank">http://docutils.sourceforge.net/rst.html</a> 。如果想要看到更好的html格式，你可以通篇复制本文到一个文本文件里，然后利用 docutils 的 rst2html.py 脚本编译它，当然，首先你必须安装 python。<br />
<br />
本文的获得方式：<br />
<br />
&nbsp;&nbsp;- 原始发布点： <a href="http://iusesvn.com/bbs/thread-6-1-1.html" target="_blank">http://iusesvn.com/bbs/thread-6-1-1.html</a><br />
&nbsp;&nbsp;- 完整源文件，请利用 svn 命令来获取，命令为&nbsp;&nbsp;``svn co svn://cvs.woodpecker.org.cn/woodpecker/zqlib/tangle/michael.zheng/road2svn``<br />
&nbsp;&nbsp;- HTML版式文件，请访问 <a href="http://zhengxinxing.googlepages.com/The.Road.to.Subversion_authz.html" target="_blank">http://zhengxinxing.googlepages. ... bversion_authz.html</a> （推荐） 或 <a href="http://swjr.blog.com.cn/archives/2006/TheRoadToSubversion1authz.shtml" target="_blank">http://swjr.blog.com.cn/archives ... version1authz.shtml</a> <br />
<br />
<br />
<br />
致谢<br />
====<br />
<br />
非常感谢 iusesvn.com 站的站长 PCplayer ，他在本文编写过程中，给我提出了很多宝贵的意见与建议。<br />
<br />
感谢 woodpecker.org.cn 提供的 Subversion 空间，让更多的人可以通过 svn 获得本文件。<br />
<br />
感谢 google 公司提供的免费主页空间，让我可以放置完全定制的 HTML 文件。<br />
<br />
<br />
实战<br />
====<br />
<br />
本章先直接给出需求及其最终的结果，如果你觉得对配置有什么疑问，或者看不懂，请不要着急，我会在后面的章节详细描述的。<br />
<br />
<br />
背景假设<br />
--------<br />
<br />
厦门央瞬公司是一家电子元器件设备供应商，其中有个ARM部门，专门负责ARM芯片的方案设计、销售，并在北京、上海各设立了一个办事处。对于工作日志，原先采用邮件方式发给经理，但是这种方式有个缺点，那就是不具备连续性，要看以前的日志必须一封一封邮件去查看，很麻烦。于是就想到利用 Subversion，让员工在自己电脑上编辑日志，然后利用svn传送回来，既方便员工自己编写日志，又方便对日志的归档处理，而且提交日志的时候只需要执行一下 svn commit 即可，比发送邮件还要简单的多。<br />
<br />
- svn服务器相关信息<br />
<br />
&nbsp;&nbsp;- 服务器地址： 192.168.0.1<br />
&nbsp;&nbsp;- 服务器OS： MS Windows 2000 Server Edition 中文版<br />
&nbsp;&nbsp;- 用于存放日志的代码库本地目录： ``D:\svn\arm``<br />
<br />
- arm部门文档的目录结构如下::<br />
<br />
&nbsp; &nbsp; arm&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;部门名称<br />
&nbsp; &nbsp; ├─diary&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;工作日志目录<br />
&nbsp; &nbsp; │&nbsp;&nbsp;├─headquarters&nbsp; &nbsp; 总部工作日志目录<br />
&nbsp; &nbsp; │&nbsp;&nbsp;├─beijing&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;北京办日志目录<br />
&nbsp; &nbsp; │&nbsp;&nbsp;└─shanghai&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;上海办日志目录<br />
&nbsp; &nbsp; ├─ref&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 公司公共文件参考目录<br />
&nbsp; &nbsp; └─temp&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;临时文件目录<br />
<br />
- 人员情况<br />
<br />
&nbsp;&nbsp;- morson，公司总经理，不习惯使用电脑，更喜欢传统的纸与笔，以及面对面的交流<br />
&nbsp;&nbsp;- michael，arm事业部的部门经理，没事的时候喜欢弄点儿新技术，用svn来管理日志，就是他想出来的主意<br />
&nbsp;&nbsp;- scofield，北京办人员，老员工，为人油滑难管<br />
&nbsp;&nbsp;- lincon，上海办人员，老员工，大老实人一个<br />
&nbsp;&nbsp;- linda，总部协调员、秘书，文笔不错，长得也不错<br />
&nbsp;&nbsp;- rory，单片机技术员，技术支持<br />
<br />
- 访问权限需求分析<br />
<br />
&nbsp;&nbsp;- 允许总经理、部门经理读取所有文件。顺便给他们开放写权限，以便体现对他们职位的尊重，虽然对于某些文件来说，他们若拥有&#8220;写&#8221;权限其实也没什么用处<br />
&nbsp;&nbsp;- 除部门经理外，所有其他人员，均只能看到本办事处人员工作日志<br />
&nbsp;&nbsp;- 不允许匿名访问<br />
&nbsp;&nbsp;- ref目录只允许经理和秘书读写，对其他人只读<br />
&nbsp;&nbsp;- temp目录人人都可以随意读写<br />
<br />
<br />
使用 svnserve.exe 作为 Subversion 服务器<br />
----------------------------------------<br />
本节描述如何利用 svnserve.exe 来作为代码库服务器端，实现上述功能。至于另外一种代码库服务器端，即利用 Apache 结合 mod_dav_svn.so 来实现的代码库服务器端，由于其对于本文叙述的内容&#8220;实现精细的目录访问权限控制&#8221;而言，与前者没有太大的区别，故而略过不提。它们二者只是在初次安装、配置方面存在一些不同，有兴趣的读者，可以参考其他文档，重新实验下述步骤。<br />
<br />
<br />
启动 Subversion 服务<br />
````````````````````<br />
在服务器端，打开一个命令行窗口，用CD命令进入 Subversion 安装目录下的 bin 目录，运行如下指令::<br />
<br />
&nbsp; &nbsp; svnserve -d -r d:\svn<br />
<br />
其中的 -d 参数表示 svnserve.exe 将会作为一个服务程序运行在后台，而 -r 参数表示将 ``D:\svn`` 目录指定为代码库的根目录。这样，当客户端使用类似 svn://192.168.0.1/foo 这样内容的 URL 来访问服务器时候，其所访问到的真实代码库，其实就是 ``D:\svn\foo``<br />
<br />
用上述命令行方式启动的 svn 服务有个小缺点，就是在本试验过程中，服务器端必须要一直开着那个运行了上述命令的DOS窗口，不能关闭它。如果不想看到这个窗口，可以将 svnserve 安装成 windows 的一个 services，安装方式请参考其他文章。<br />
<br />
<br />
建立代码库<br />
``````````<br />
在服务器端的 ``D:\svn`` 目录下，建立一个名为 arm 的代码库，命令如下::<br />
<br />
&nbsp; &nbsp; D:\svn&gt;svnadmin create arm<br />
<br />
使用上述命令之后，如果不出问题的话，在 ``D:\svn`` 目录下就会多出一个叫做 ``arm`` 的目录，其下具备 conf、dav、hooks、locks、db 等子目录或文件，此即 **一个名为arm的代码库** 。从此，通过 ``svn://192.168.0.1/arm`` 这样的 URL，我们就可以对这个代码库进行访问了。接下来就要进入本文的正题了，也就是权限配置部分了。<br />
<br />
其实进入 ``arm\conf`` 目录你就会发现，它下面已经存在三个写了一些帮助信息和示例的配置文件，以帮助用户尽早掌握其配置方法。这三个默认的配置文件分别是 svnserve.conf、passwd、authz 。其中后两者没有后缀，对于 windows 系统的用户来说，看起来总是有些怪异，所以在接下来的章节里面，我将它们两个都给添加了个 conf 后缀，以便管理。<br />
<br />
<br />
编辑代码库基础配置文件<br />
``````````````````````<br />
在服务器端，编辑代码库的 ``arm\conf\svnserve.conf`` 文件，如下::<br />
<br />
&nbsp; &nbsp; [general]<br />
&nbsp; &nbsp; password-db = passwd.conf<br />
&nbsp; &nbsp; anon-access = none<br />
&nbsp; &nbsp; auth-access = write<br />
&nbsp; &nbsp; authz-db = authz.conf<br />
<br />
<br />
管理用户帐号<br />
````````````<br />
在服务器端，新建 ``arm\conf\passwd.conf`` 文件，如下::<br />
<br />
&nbsp; &nbsp; [users]<br />
&nbsp; &nbsp; morson = ShowMeTheMoney<br />
&nbsp; &nbsp; michael = mysecretpassword<br />
&nbsp; &nbsp; scofield = hellolittilekiller<br />
&nbsp; &nbsp; lincon = asyouknows111<br />
&nbsp; &nbsp; rory = 8809117<br />
&nbsp; &nbsp; linda = IlikeWorldCup2006<br />
<br />
<br />
建立目录访问权限控制文件<br />
````````````````````````<br />
在服务器端，新建 ``arm\conf\authz.conf`` 文件，内容如下::<br />
<br />
&nbsp; &nbsp; [groups]<br />
&nbsp; &nbsp; g_vip = morson<br />
&nbsp; &nbsp; g_manager = michael<br />
&nbsp; &nbsp; g_beijing = scofield<br />
&nbsp; &nbsp; g_shanghai = lincon<br />
&nbsp; &nbsp; g_headquarters = rory, linda<br />
&nbsp; &nbsp; g_docs = linda<br />
<br />
&nbsp; &nbsp; [arm:/]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; * = r<br />
<br />
&nbsp; &nbsp; [arm:/diary/headquarters]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_headquarters = rw<br />
&nbsp; &nbsp; @g_vip = r<br />
&nbsp; &nbsp; * =<br />
<br />
&nbsp; &nbsp; [arm:/diary/beijing]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_beijing = rw<br />
&nbsp; &nbsp; @g_vip = r<br />
&nbsp; &nbsp; * =<br />
<br />
&nbsp; &nbsp; [arm:/diary/shanghai]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_shanghai = rw<br />
&nbsp; &nbsp; @g_vip = r<br />
&nbsp; &nbsp; * =<br />
<br />
&nbsp; &nbsp; [arm:/ref]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_docs = rw<br />
&nbsp; &nbsp; * = r<br />
<br />
&nbsp; &nbsp; [arm:/temp]<br />
&nbsp; &nbsp; * = rw<br />
<br />
<br />
导入代码<br />
````````<br />
在客户机 ``F:\temp`` 目录下，建立好前述&#8220;背景假设&#8221;一节中描述的目录结构，然后用命令 ``F:\temp&gt;svn import arm svn://192.168.0.1/arm --username michael --password mysecretpassword`` 导入整个目录结构。<br />
<br />
这条指令的精确意思是，将 arm 目录下面的所有东西，导入到那个名叫 arm 的代码库中去。如果你不指定源目录，则 svn 会默认将当前目录作为源目录。比如说，你处于 ``F:\temp`` 目录下的时候，直接执行 ``svn import svn://192.168.0.1/arm`` ，那么当你取出你的代码的时候，你会发现，居然多了一层名为 arm 的目录。结果，你就必须使用类似&nbsp;&nbsp;``svn://192.168.0.1/arm/arm`` 这样怪异的URL，才能够正确访问到你的代码们。<br />
<br />
这一点粗看好像不是特别重要，不过联想到前述的目录授权规则，可都是按照标准的项目目录结构来设计的。突然之间，你项目的根目录之上，多出了一个名为 arm 的目录，那么我们的所有目录授权规则，基本上都要全部改过了，否则除了根目录，你永远会得到一个莫名其妙的&#8220;access denied&#8221;。由于 Subversion 在这一步骤上的界面不够人性化，因此这是初学者很容易弄混的地方之一。<br />
<br />
<br />
测试<br />
````<br />
在服务器上，打开一个 DOS Prompt 窗口，输入如下指令::<br />
<br />
&nbsp; &nbsp; svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117<br />
<br />
我们应该得到如下目录结构::<br />
<br />
&nbsp; &nbsp; arm<br />
&nbsp; &nbsp; ├─diary<br />
&nbsp; &nbsp; │&nbsp;&nbsp;└─headquarters<br />
&nbsp; &nbsp; ├─ref<br />
&nbsp; &nbsp; └─temp<br />
<br />
然后修改ref目录下任意文件并提交，服务器将会报错&#8220;Access denied&#8221;，Bingo!
<div class="t_msgfont">&nbsp;</div>
<div class="t_msgfont"><font face="宋体">&nbsp;深入<br />
====<br />
<br />
本章将详细介绍前一章所涉及的两个配置文件， svnserve.conf 和 authz.conf，通过对配置逐行的描述，来阐明其中的一些细节含义。除此之外的其他配置、安装等内容，不是本文重点，读者若有什么疑问，请参考后面&#8220;参考文献&#8221;中列出的一些文档。<br />
<br />
这里首先要注意一点，任何配置文件的有效配置行，都 **不允许存在前置空格** ，否则程序可能会出错，给你一个 ``Option expected`` 的提示。也就是说，如果你直接从本文的纯文本格式中拷贝了相关的配置行过去，需要手动将前置的4个空格全部删除。当然了，如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使，那么也许 UltraEdit 的&#8220;Column Mode&#8221;编辑模式，可以给你很大帮助。<br />
<br />
<br />
svnserve.conf<br />
-------------<br />
<br />
``arm\conf\svnserve.conf`` 文件，是 svnserve.exe 这个服务器进程的配置文件，我们逐行解释如下。<br />
<br />
首先，我们告诉 svnserve.exe，用户名与密码放在 passwd.conf 文件下。当然，你可以改成任意的有效文件名，比如默认的就是 passwd::<br />
<br />
&nbsp; &nbsp; password-db = passwd.conf<br />
<br />
接下来这两行的意思，是说只允许经过验证的用户，方可访问代码库。 那么哪些是&#8220;经过验证的&#8221;用户呢？噢，当然，就是前面说那些在 passwd.conf 文件里面持有用户名密码的家伙。这两行的等号后面，目前只允许 read write none 三种值，你如果想实现一些特殊的值，比如说&#8220;read-once&#8221;之类的，建议你自己动手改源代码，反正它也是自由软件::<br />
<br />
&nbsp; &nbsp; anon-access = none<br />
&nbsp; &nbsp; auth-access = write<br />
<br />
接下来就是最关键的一句呢，它告诉 svnserve.exe，项目目录访问权限的相关配置是放在 authz.conf 文件里::<br />
<br />
&nbsp; &nbsp; authz-db = authz.conf<br />
<br />
当然，svn 1.3.2 引入本功能的时候，系统默认使用 authz 而不是 authz.conf 作为配置文件。不过可能由于鄙人是处女座的，据说有着强烈的完美主义情结，看着 svnserve.conf 有后缀而 passwd 和 authz 没有就是不爽，硬是要改了。<br />
<br />
上述的 passwd.conf 和 authz.conf 两个文件也可以作为多个代码库共享使用，我们只要将它们放在公共目录下，比如说放在 ``D:\svn`` 目录下，然后在每个代码库的 svnserve.conf 文件中，使用如下语句::<br />
<br />
&nbsp; &nbsp; password-db = ..\..\passwd.conf<br />
&nbsp; &nbsp; authz-db = ..\..\authz.conf<br />
<br />
或者::<br />
<br />
&nbsp; &nbsp; password-db = ../../passwd.conf<br />
&nbsp; &nbsp; authz-db = ../../authz.conf<br />
&nbsp; &nbsp; <br />
这样就可以让多个代码库共享同一个用户密码、目录控制配置文件，这在有些情况下是非常方便的。<br />
<br />
<br />
authz.conf 之用户分组<br />
---------------------<br />
<br />
``arm\conf\authz.conf`` 文件的配置段，可以分为两类， ``[group]`` 是一类，里面放置着所有用户分组信息。其余以 ``[arm:/]`` 开头的是另外一类，每一段就是对应着项目的一个目录，其目录相关权限，就在此段内设置。<br />
<br />
首先，我们将人员分组管理，以便以后由于人员变动而需要重新设置权限时候，尽量少改动东西。我们一共设置了5个用户分组，分组名称统一采用 ``g_`` 前缀，以方便识别。当然了，分组成员之间采用逗号隔开::<br />
<br />
&nbsp; &nbsp; [groups]<br />
&nbsp; &nbsp; # 任何想要查看所有文档的非本部门人士<br />
&nbsp; &nbsp; g_vip = morson<br />
<br />
&nbsp; &nbsp; # 经理<br />
&nbsp; &nbsp; g_manager = michael<br />
<br />
&nbsp; &nbsp; # 北京办人员<br />
&nbsp; &nbsp; g_beijing = scofield<br />
<br />
&nbsp; &nbsp; # 上海办人员<br />
&nbsp; &nbsp; g_shanghai = lincon<br />
<br />
&nbsp; &nbsp; # 总部一般员工<br />
&nbsp; &nbsp; g_headquarters = rory, linda<br />
<br />
&nbsp; &nbsp; # 小秘，撰写文档<br />
&nbsp; &nbsp; g_docs = linda<br />
<br />
注意到没有， linda 这个帐号同时存在&#8220;总部&#8221;和&#8220;文档员&#8221;两个分组里面，这可不是我老眼昏花写错了，是因为 Subversion 允许我这样设置。它意味着，这个家伙所拥有的权限，将会比他的同事 rory 要多一些，这样的确很方便。具体多了哪些呢？请往下看！<br />
<br />
<br />
authz.conf 之项目根目录<br />
-----------------------<br />
<br />
接着，我们对项目根目录做了限制，该目录只允许arm事业部的经理才能修改，其他人都只能眼巴巴的看着::<br />
<br />
&nbsp; &nbsp; [arm:/]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; * = r<br />
<br />
- ``[arm:/]`` 表示这个目录结构的相对根节点，或者说是 arm 项目的根目录。其中的 arm 字样，其实就是代码库的名称，即前面用 svnadmin create 命令创建出来的那个 arm。<br />
<br />
- 这里的 ``@`` 表示接下来的是一个组名，不是用户名。因为目前 g_manager 组里面只有一个 michael，你当然也可以将 ``@g_manager = rw`` 这一行替换成 ``michael = rw`` ，而表达的意义完全一样。<br />
<br />
- ``*`` 表示&#8220;除了上面提到的那些人之外的其余所有人&#8221;，也就是&#8220;除了部门经理外的其他所有人&#8221;，当然也包括总经理那个怪老头<br />
<br />
- ``* = r`` 则表示&#8220;那些人只能读，不能写&#8221;<br />
<br />
<br />
authz.conf 之项目子目录<br />
-----------------------<br />
<br />
然后，我们要给总部人员开放日志目录的读写权限::<br />
<br />
&nbsp; &nbsp; [arm:/diary/headquarters]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_headquarters = rw<br />
&nbsp; &nbsp; @g_vip = r<br />
&nbsp; &nbsp; * =<br />
<br />
这个子目录的设置有些特色，因为从需求分析中我们知道，这个子目录的权限范围要比其父目录小，它不允许除指定了的之外其他任何人访问。在这段设置中，我们需要注意以下几点：<br />
<br />
- 我敢打赌，设计svn的家伙们，大部分都是在类 unix 平台下工作，所以他们总喜欢使用 ``/`` 来标识子目录，而完全忽视在 MS Windows 下是用 ``\`` 来做同样的事情。所以这儿，为了表示 ``diary\headquarters`` 这个目录，我们必须使用 ``[arm:/diary/headquarters]`` 这样的格式。当然如果你一定要用 ``\`` ，那么唯一的结果就是，Subversion 会将你的这部分设置置之不理，全当没看到。<br />
<br />
- 这里最后一行的 ``* =`` 表示，除了经理、总部人员、特别人士之外，任何人都被禁止访问本目录。这一行是否可以省略呢？不行，因为 **权限具备继承性** ，子目录会自动拥有父目录的权限。若没有这一行，则所有帐号都可以读取 ``/diary/headquarters`` 目录下的文件。因为虽然我们并没有设置这个目录的父目录权限，可是默认的规则使得 ``/diary`` 目录的权限与根目录完全一样，从而让其余帐号获得对 ``/diary/headquarters`` 目录的 r 权限。所以简单来说， ``* =`` 这一句的目的，就是割断权限继承性，使得管理员可以定制某个目录及其子目录的权限，从而完全避开其父目录权限设置的影响。<br />
<br />
- 之所以这儿需要将 ``@g_vip = r`` 一句加上，就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力，则他会和其他人一样，被 ``* =`` 给排除在外。<br />
<br />
- 如果众位看官中间，有谁玩过防火墙配置的话，可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样，那就是各个配置行之间，没有 **先后顺序** 一说。也就是说，如果我将本段配置的 ``* =`` 这一行挪到最前面，完全不影响整个配置的最终效果。<br />
<br />
接下来我们看看这一段::<br />
<br />
&nbsp; &nbsp; [arm:/ref]<br />
&nbsp; &nbsp; @g_manager = rw<br />
&nbsp; &nbsp; @g_docs = rw<br />
&nbsp; &nbsp; * = r<br />
<br />
这里的主要看点，就是 g_docs 组里面包含了一个 linda 帐号，她也同时在 g_headquarters 组里面出现，这就意味着， linda 将具备对 ``/ref`` 和 ``diary\headquarters`` 两个目录的读写权限。<br />
<br />
<br />
authz.conf 之目录表示法<br />
-----------------------<br />
在前面的描述中，我们都采用 ``[repos:/some/dir]`` 这样的格式来表示项目的某个目录，比如上一小节中的 ``[arm:/diary/headquarters]`` 。而实际上，Subversion 允许你采用 ```[/some/dir]`` 这样的格式，即不指定代码库的方式来表示目录，此时的目录就匹配所有项目。<br />
<br />
对于使用 svnserve 的用户来说，只有当 svnserve 运行的时候使用了 ``-r`` 参数，并且让多个代码库共享同一个目录权限文件（即 authz.conf 或 authz）时，不指明代码库名称才有可能惹麻烦。一般情况下，我们对每个代码库都会独立使用配置文件，毕竟每个项目的目录结构，都有很大不同，混在一起意义不大。因此一般来说，为简洁起见，都可以不指明代码库名称。本文全都指明了代码库名称，主要是为了将来扩展成同一个配置文件，以方便配合 Apache 服务器。<br />
<br />
对于使用 Apache 的用户来说，它们二者可有着很大的不同，因为此时往往习惯于使用一个公共的目录权限配置文件。如果你使用了 SVNParentPath 指令，则指定版本库的名字是很重要的，因为假若你使用后者，那么 ``[/some/dir]`` 部分就会与所有代码库项目的 ``[/some/dir]`` 目录匹配。如果你使用 SVNPath 指令，则这两种表示方式就没有什么区别了，毕竟只有一个版本库。<br />
<br />
<br />
authz.conf 的其他注意点<br />
-----------------------<br />
<br />
1. 父目录的 ``r`` 权限，对子目录 ``w`` 权限的影响<br />
<br />
把这个问题专门提出来，是因为在1.3.1及其以前的版本里面，有个bug，即某个帐号为了对某个子目录具备写权限，则必须对其父目录具备读权限。因此现在使用了1.3.2及其更高的版本，就方便了那些想在一个代码库存放多个相互独立的项目的管理员，来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志，叫做 diary，而arm事业部只是其中一个部门，则可以这样做::<br />
<br />
&nbsp; &nbsp; [diary:/]<br />
&nbsp; &nbsp; @g_chief_manager = rw<br />
<br />
&nbsp; &nbsp; [diary:/arm]<br />
&nbsp; &nbsp; @g_arm_manager = rw<br />
&nbsp; &nbsp; @g_arm = r<br />
<br />
这样，对于所有arm事业部的人员来说，就可以将 svn://192.168.0.1/diary/arm 这个URL当作根目录来进行日常操作，而完全不管它其实只是一个子目录，并且当有少数好奇心比较强的人想试着 checkout 一下 svn://192.168.0.1/diary 的时候，马上就会得到一个警告&#8220;Access denied&#8221;，哇，太酷了。<br />
<br />
<br />
2. 默认权限<br />
<br />
如果说我对某个目录不设置任何权限，会怎样？马上动手做个试验，将::<br />
<br />
&nbsp; &nbsp; [diary:/]<br />
&nbsp; &nbsp; @g_chief_manager = rw<br />
<br />
改成::<br />
<br />
&nbsp; &nbsp; [diary:/]<br />
&nbsp; &nbsp; # @g_chief_manager = rw<br />
<br />
这样就相当于什么都没有设置。在我的 svn 1.3.2 版本上，此时是禁止任何访问。也就是说，如果你想要让某人访问某目录，你一定要显式指明这一点。这个策略，看起来与防火墙的策略是一致的。<br />
<br />
<br />
<br />
3. 只读权限带来的一个小副作用<br />
<br />
若设置了::<br />
<br />
&nbsp; &nbsp; [arm:/diary]<br />
&nbsp; &nbsp; * = r<br />
<br />
则 Subversion 会认为，任何人都不允许改动 diary 目录，包括删除、 **改名** ，和 **新增** 。<br />
<br />
也就是说，如果你在项目初期创建目录时候，一不小心写错目录名称，比如因拼写错误写成 dairy，以后除非你改动 authz.conf 里面的这行设置，否则无法利用 svn mv 命令将错误的目录更正。<br />
<br />
<br />
4. anon-access 属性对目录权限的影响<br />
<br />
你想将你的代码库开放给所有人访问，于是你就开放了匿名访问权限，在 svnserve.conf 文件中添加一行： ``anon-access=read`` 。可是对于部分目录，你又不希望别人看到，于是针对那些特别目录，你在 authz.conf 里面进行配置，添加了授权访问的人，并添加了 ``* =`` 标记。你认为一切OK了，可是你缺发现，那个特别目录却无法访问了，总是提示 ``Not authorized to open root of edit operation`` 或者 ``未授权打开根进行编辑操作`` 。你再三检查你配置的用户名与密码，确认一切正确，还是无法解决问题。<br />
<br />
原来，Subversion 有个小 bug ，当 ``anon-access=read`` 并且某个目录有被设置上 ``* =`` 标记，则会出现上述问题。这个 bug 在当前最新版本上（v1.4）还存在，也许在下一版本内可以被改正吧。<br />
<br />
解决的办法是，在 svnserve.conf 中，将 anon-access 设置成 none 。<br />
<br />
<br />
<br />
改进<br />
====<br />
<br />
对中文目录的支持<br />
----------------<br />
<br />
上午上班的时候，Morson 来到 Michael 的桌子前面，说道：&#8220;你是否可以将我们的北京办、上海办目录，改成用中文的，看着那些拼音我觉得很难受？&#8221; Michael 心想，还好这两天刚了解了一些与 unicode 编码相关的知识，于是微笑地回答：&#8220;当然可以，你明天下午就可以看到中文目录名称了。&#8221;<br />
<br />
1. 使用 svn mv 指令，将原来的一些目录改名并 commit 入代码库，改名后的目录结构如下::<br />
<br />
&nbsp; &nbsp; arm<br />
&nbsp; &nbsp; ├─工作日志<br />
&nbsp; &nbsp; │&nbsp;&nbsp;├─总部人员<br />
&nbsp; &nbsp; │&nbsp;&nbsp;├─北京办<br />
&nbsp; &nbsp; │&nbsp;&nbsp;└─上海办<br />
&nbsp; &nbsp; ├─公司公共文件参考目录<br />
&nbsp; &nbsp; └─临时文件存放处<br />
<br />
2. 修改代码库的 authz.conf 文件，将相应目录逐一改名<br />
<br />
3. UTF-8 格式的 authz.conf 文件，以及 BOM<br />
<br />
&nbsp; &nbsp;将配置文件转换成 UTF-8 格式之后，Subversion 就能够正确识别中文字符了。但是这里需要注意一点，即必须保证 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的缩写，指 UNICODE 文件头部用于指明高低字节排列顺序的几个字符，通常是 ``FF FE`` ，而将之用 UTF-8 编码之后，就是 ``EF BB BF`` 。由于 UTF-8 文件本身不存在字节序问题，所以对 UTF-16 等编码方式有重大意义的 BOM，对于 UTF-8 来说，只有一个作用——表明这个文件是 UTF-8 格式。由于 BOM 会给文本处理带来很多难题，所以现在很多软件都要求使用不带 BOM 的 UTF-8 文件，特别是一些处理文本的软件，如 PHP、 UNIX 脚本文件等，svn 也是如此。<br />
<br />
&nbsp;&nbsp;目前常用的一些文本编辑工具中，MS Windows 自带的&#8220;记事本&#8221;里面，&#8220;另存为&#8221;菜单保存出来的 UTF-8 格式文件，会自动带上 BOM 。新版本 UltraEdit 提供了选项，允许用户选择是否需要 BOM，而老版本的不会添加 BOM。请各位查看一下自己常用的编辑器的说明文件，看看它是否支持这个功能。<br />
<br />
&nbsp;&nbsp;对于已经存在 BOM 的 UTF-8 文件，比如说就是微软&#8220;记事本&#8221;弄出来的，我们可以利用 UltraEdit 来将 BOM 去掉。方法是，首先利用&#8220;UTF-8 TO ASCII&#8221;菜单将文件转换成本地编码，通常是GB2312码，然后再使用&#8220;ASCII TO UTF-8(UNICODE Editing)&#8221;来转换到 UTF-8 即可。当然，这么操作之前，你肯定得先保证，你的 UltraEdit 保存出来的 UTF-8 文件的确是不带 BOM 的。<br />
<br />
&nbsp;&nbsp;Subversion 为什么讨厌 BOM 呢？我不知道，毕竟我也只是一个普通用户，不是开发人员。如果你感兴趣，并且英文够好的话，不妨参考一下这个讨论： <a href="http://subversion.tigris.org/servlets/ReadMsg?list=users&amp;msgNo=51334" target="_blank">http://subversion.tigris.org/ser ... ers&amp;msgNo=51334</a><br />
<br />
参考文献<br />
========<br />
- Subversion官方文档， <a href="http://svnbook.red-bean.com/" target="_blank">http://svnbook.red-bean.com</a><br />
- Subversion 1.3变更记录， <a href="http://subversion.tigris.org/svn_1.3_releasenotes.html" target="_blank">http://subversion.tigris.org/svn_1.3_releasenotes.html</a><br />
- Subversion FAQ， <a href="http://subversion.tigris.org/faq.html" target="_blank">http://subversion.tigris.org/faq.html</a><br />
- UTF-8 常见问题， <a href="http://unicode.org/faq/utf_bom.html" target="_blank">http://unicode.org/faq/utf_bom.html</a><br />
<br />
<br />
历史轨迹<br />
========<br />
- 2006.06.04， v0.1<br />
<br />
&nbsp;&nbsp;* 在 <a href="http://www.iusesvn.com/bbs" target="_blank">http://www.iusesvn.com/bbs</a> 首次发布<br />
<br />
- 2006.07.07， v0.4<br />
<br />
&nbsp;&nbsp;* 加入 <a href="http://www.woodpecker.org.cn/" target="_blank">www.woodpecker.org.cn</a> 的 OBP 项目<br />
<br />
- 2006.10.11， v0.5<br />
<br />
&nbsp;&nbsp;* 修正部分错误，调整部分章节顺序<br />
<br />
- 2006.12.05， v1.0<br />
<br />
&nbsp;&nbsp;* 添加&#8220;权限简介&#8221;一节<br />
&nbsp;&nbsp;* 调整&#8220;实战&#8221;章的章节顺序，添加一些说明，使之更具可读性<br />
&nbsp;&nbsp;* 删除一些与 apache 服务器相关的说明<br />
&nbsp;&nbsp;* 添加&#8220;目录表示法&#8221;一小节<br />
&nbsp;&nbsp;* 重写了&#8220;authz.conf 之项目子目录&#8221;一小节</font></div>
 <img src ="http://www.blogjava.net/ywjcy/aggbug/167745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-12-14 13:10 <a href="http://www.blogjava.net/ywjcy/archive/2007/12/14/167745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CXO必知:二十五条金句 助你在职场上成功</title><link>http://www.blogjava.net/ywjcy/archive/2007/12/13/167560.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Thu, 13 Dec 2007 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/12/13/167560.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/167560.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/12/13/167560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/167560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/167560.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、正确的思考
<p>　　先正确的评判自己，才有能力评断他人。你是否欺骗别人，或是自己?想清楚再回答。三思而后行的人，很少会做错事情。企图说服不用大脑的人，是徒劳无功。认为整个世界都错的人，极可能错在自己。</p>
<p>　　2、行动</p>
<p>　　观察走在你前面的人，看看他为何领先，学习他的做法。忙碌的<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u4EBA_u624D";KeyGate_ads.ShowGgAds(this,"_u4EBA_u624D",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BbxyiUO9gR-u9J5DS6QP25qHRAqS42TLUstPLBMCNtwHQ2REQDRgNIK2F0A0oFDgAUNz2vs0HYJ3R14HABaoBCjIwMDAwMzYxMjeyAQ1uZXdzLmNzZG4ubmV0yAEB2gEraHR0cDovL25ld3MuY3Nkbi5uZXQvbi8yMDA3MTIwNS8xMTE0MTQuaHRtbKkCJpfkfq02gj7IArD30QOoAwHoA_EC6APUA_UDAAQAAA&amp;num=13&amp;adurl=http://www.cjol.com/&amp;client=ca-pub-5186439242807756");GgKwClickStat("人才","www.cjol.com/","afc","2000036127");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u4EBA_u624D"'>人才</strong></nobr>能把事情做好，呆板的人只会投机取巧。优柔寡断的人，即使做了决定，也不能贯彻到底。善意需要适当的行动表达。</p>
<p>　　3、相信</p>
<p>　　相信你做得到，你一定会做到。不断告诉自己某一件事，即使不是真的，最后也会让自己相信。</p>
<p>　　4、警觉</p>
<p>　　对于那些使狗和儿童感到畏惧的人应提高警觉。警觉过度犹如不及，使人变得多疑。不要羡慕邻居的篱笆更绿，或许荆棘多于青草。对于满口&#8220;别人都说-----&#8221;的人，问他&#8220;别人&#8221;是谁，就会看到他张口结舌的窘态。陌生人过分热心帮你做事时 ，当心他别有居心。</p>
<p>　　5、挑战</p>
<p>　　如果你想要更上一层楼，就为别人提供超出预期更多更好的<nobr><strong class="kgb" onmouseover='isShowAds = true;isShowAds2 = true;KeyGate_ads.Move(this,"","%u4E00%u6B3E%u5F00%u6E90%u7684%u6027%u80FD%u6D4B%u8BD5%u5DE5%u5177","-100849","服务","%u5C06%20Ajax%20%u7528%u4E8E%u591A%u5A92%u4F53","http%3A//ibm.csdn.net/ISN_J.aspx%3Faction%3DJMP%26pointid%3D2473", event)' style="border-top-width: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; cursor: hand; color: #0000ff; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://s4.17luntan.com/ClickPortal/WebClick.aspx?id=-100849&amp;k=%u670D%u52A1&amp;siteid=0098295a-e262-40f7-ae50-7a6fbbdb678b&amp;url=http%3A//news.csdn.net/n/20071205/111414.html&amp;gourl=http%3A//ibm.csdn.net/ISN_J.aspx%3Faction%3DJMP%26pointid%3D2473&amp;parm=6D8FCF37D4A87DEE5B2917F15FF22291B7289829985AB799&amp;alliedsiteid=0");' onmouseout="isShowAds = false;isShowAds2 = false">服务</strong></nobr>。每一次都尽力超越上次的表现，很快你就会超越周遭的人。亨利福特悬赏2.5万元，征求有办法让他在每一台汽车上节省一个螺钉和螺冒的人。你让我工厂的每个环节节省10分钱，我让你平步青云。如果你一直保持现状，10年后将会如何?在你有把握做得更好之前，不要破坏任何东西。</p>
<p>　　6、主要目标</p>
<p>　　你的人生想要什么?你能付出什么作为回馈?成功的人只想自己要的――而非自己不要的。不要管过去做了什么，重要的是你将来要做什么?如果你不知道你自己的一生要的是什么，你还想得到什么?智者除了有所为，还能有所不为。为自己想要的忙碌，如此即无暇担忧你不想要的。不要怕目标定得太高，你可能需要退而求其次。如果你不会知道自己要什么，别说你没有机会。</p>
<p>　　7、合作</p>
<p>　　请求比命令能得到更好的结果。善于下命令的人，必定能够服从命令并且执行。乐意合作产生支持的力量，强迫服从导致失败的结果。告诉上司你想要什么，看他是否愿意帮助你去排除障碍。友善的合作比煽动更得人心。合作必须从部门领导开始，效率亦然。狼狈为奸绝非合作。除非你自己愿意被别人伤害，否则没有人能够伤害你。</p>
<p>　　8、勇气</p>
<p>　　勇敢的承认自己不知道的事情，才能学习并进步。勇气只是多跨一步超越恐惧。抱怨自己没有机会的人，多半没有勇气冒险。</p>
<p>　　9、批评</p>
<p>　　一事无成的无名小卒才能免于批评。不要怕不公正的批评，但要知道哪些是不公正的批评。不要批评你不了解的人，要趁机向他学习。不要怕受人批评。当你提出新的观念，就要准备受人批评。不要批评别人的行为，除非你知道他为何那么做。你在同样的情况下也可能会如此。不能忍受批评，就无法尝试新事物。如果你经常批评别人，何不试着赞美别人?开始批评之前，最好先略加赞美。如果你想要更受人欢迎，尽量多赞美，少批评。</p>
<p>　　10、行为</p>
<p>　　真正伟大的人，别人会从他的善行感受出来。一天没有臆见善行，就是白过了。奖章和头衔不能让你上天堂，善行才能增加你的分量。建设性的行为才能服人，言语的吹嘘无益。不要说你想要什么，用行为表达。善行是赞美自己最好的办法。如果你比别人更具智慧，别人会从你的行为看出来。</p>
<p>　　善意的回应是惩罚对你不义的人最安全的方式。对不喜欢你的人不要多费口舌。花钱想要上天堂的人，一定后悔没有多行善。善行比滔滔雄辩更能打动人心。墓志铭不如善行更另人怀念。</p>
<p>　　世界不会因为所知给你勋章，而会因你的善行而给你荣耀。善行不需要言语的粉饰。</p>
<p>　11、明确的目标 </p>
<p>　　明确的了解自己想要什么，致力追求。一个人没有明确的目标，就象船没有罗盘一样。</p>
<p>　　智者都有清晰思考的习惯。意志力缘于持续的行动、自动自发、明确的目标。诚实与努力的工作，需要明确的目标引导才能成功。缺乏明确的目标，一生将庸庸碌碌。坚定的目标是成功的首要原则。</p>
<p>　　12、教育或学习</p>
<p>　　教育是开发内在的力量。所有的教育都靠自己的体会;没有人能够教育另外一个人。你从工作中学到的，比眼前得到的报酬更可贵。倾听才能学习，说话无益。好老师一定是好学生。不一定把所有的知识都记在心里，能够取得所需的知识即可。研究一个人良好的观念，剩过挑剔他的缺点。知识必须加以运用，才能产生力量。努力把事情做得比别人更好，你就会忘了财务的困扰。</p>
<p>　　如果你不努力向上司学习，就虚掷了升迁及更好的工作机会。哲学家从犯错的人身上找出人类所犯的错误。</p>
<p>　　善于发问使苏格拉底成为当时的智者。明智的运用知识，吸引更伟大的知识。你自工作中学到的越多，赚得越多。自工作学习的人，等于别人付钱让他上学。</p>
<p>　　知识必须经由行动产生利益，否则无用。</p>
<p>　　13、言之有物</p>
<p>　　记住，别人从你所说的每一个字，了解你所知的多寡。你怎么说和你说什么同样重要。人们在有所求时，语气特别不同。语气委婉别人比较听得进去。口不择言往往造成尴尬的场面。刻薄的话伤人最甚。思考可以随心所欲，表达想法则必须谨慎小心。</p>
<p>　　14、热诚</p>
<p>　　当热诚变成习惯，恐惧和忧虑即无处容身。缺乏热诚的人也没有明确的目标。热诚使想象的轮子转动。</p>
<p>　　一个人缺乏热诚就象汽车没有汽油。善于安排玩乐和工作，两者保持热诚，就是最快乐的人。热诚使平凡的话题变得生动。</p>
<p>　　15、多做一点</p>
<p>　　每次你多做一些，别人就欠你一些。让别人做得更好，同时提升自己的价值。善于钓鱼的人选用鱼喜欢的饵。你不能让所有的人喜欢你，却能减少别人讨厌你的原因。与人协商而不产生摩擦，是有待学习的一大课题。多做一些，机会将随之而来。为别人服务最多的人最富有。服务的道路才能通往快乐的城市。</p>
<p>　　16、失败</p>
<p>　　爱迪生失败一万次才发明灯泡。失败一次不必担心。&#8220;一般人&#8221;只失败一次就放弃。所以&#8220;一般人&#8221;者众，而爱迪生只有一个。漫无目的，随波逐流是失败的首要原因。横逆中能找出顺逆中所没有的机会。</p>
<p>　　让孩子小时侯&#8220;好过&#8221;，长大之后经常会&#8220;难过&#8221;。批评别人错误时，更要加入一些赞美。失败和暂时的挫折有极大的差别，了解两者的不同，才能成功。不因一时的挫折停止尝试的人，永远不会失败。</p>
<p>　　许多人只需要再多支持一分钟，多做一次努力，就能反败为胜。成功招揽成功，失败招揽失败。</p>
<p>　　企图不劳而获的人，往往一事无成。别人的错误不是你犯错的借口。如果你尽力而为，失败并不可耻。</p>
<p>　　不要责怪孩子不好，怪那些没有教好孩子的大人。错误象花园中的杂草，若未及时铲除，就会到处蔓生。</p>
<p>　　自怜是让人上瘾的麻醉剂。智者注意自己的缺点，一般人吹嘘自己的优点。失败若能将人推出自满的椅子，迫使他做更有用的事情，则是一种福气。失败是一种让人承担更大责任的准备。了解自己为何失败，则失败是资产。</p>
<p>　17、公平 </p>
<p>　　不要忽视小节，宇宙由原子构成。得到帮助最好的方式是开始帮助别人。</p>
<p>　　18、信心</p>
<p>　　信心愈用愈多。除非你愿意，没有人能破坏你对任何事情的信心。所有伟大的奇迹都只是信心的力量。</p>
<p>　　不幸很少会纠缠有希望和信心的人。信心需要立足点，恐惧却能凭空存在。信心缘于明确的目标及积极的态度。信心是一种态度，常使&#8220;不可能&#8221;消失于无形。信心不能给你需要的东西，却能告诉你如何得到。</p>
<p>　　19、恐惧</p>
<p>　　虚张声势往往显示极深的恐惧。不要因为恐惧而犹疑，前进就能消除恐惧。恐惧是魔鬼最大的武器，人类最大的敌人。意识清楚的人很少畏惧任何东西。信心可以克服恐惧。把你的恐惧留给自己，别人有别人的恐惧。坏运气喜欢怕他的人。希望和恐惧不会同行。恐惧贫穷的人永远不会富有。</p>
<p>　　20、朋友</p>
<p>　　有求于人才会去找朋友，很快就没有朋友。如果你愿意要朋友，先做别人的朋友。</p>
<p>　　不要让帮助你自消沉中振作的朋友失望。朋友是了解你并尊重你的人。</p>
<p>　　友谊需要经常表达才能长存.友谊是看出朋友的缺点却不张扬。</p>
<p>　　21、抱怨</p>
<p>　　如果你非要抱怨，那么你小声一些，以免吵到别人。不要太苛求抱怨的人，他把自己的日子弄得够难过的了。</p>
<p>　　22、健康和习惯</p>
<p>　　如果你感觉无精打采，等到饿了再去吃东西。生病之前就应该看医生。只吃八分饱不断想着疾病，你就会不断生病，健康亦然。新鲜的水果和蔬菜是永远不会过量的健康食品。不要头痛医头，找出病因才是根本之道。吃得多不一定健康。注意饮食习惯，省下看医生的花费。</p>
<p>　　23、残障</p>
<p>　　一位中国西北大学的盲生以速记抄录讲义，卖给视力正常的同学，完成学业。如果你感到泄气，想想又瞎、有盲、又聋，一生过得充实愉快，著书鼓励更多人的海伦`凯勒。从顶端开始的人是极大的不幸，因为他只能往往是向下滑。</p>
<p>　　24、快乐</p>
<p>　　有些人累积金钱换取财富，智者累积快乐，与人分享仍取之不竭。快乐在于行动，不只是拥有。剥夺别人的快乐不能使自己快乐。微笑使人更美丽、更愉快，却不费分文。热情比怨恨更得人心。慷慨的给予快乐，自己更快乐。</p>
<p>　　25、和谐</p>
<p>　　和谐使宇宙运转不停。机器的摩擦耗费成本，人际间的摩擦损耗心灵。如果你不同意别人的说法，至少不要和他人争执。促进和平的人受人景仰，挑起摩擦的人遭人嫌恶。记住，至少要两个人才能争执。两个人以上为明确的目标同心协力，将产生无穷的力量。彼此信任是良好人际关系的基础。人际关系良好的人永远不愁没有朋友。喜欢和谐的人通常知道该如何维系。持久的成功建立在和谐的人际关系之上。尽量充当和事佬，就没有太多纷争。趁机浑水摸鱼的人才会挑起人事纷争。</p>
 <img src ="http://www.blogjava.net/ywjcy/aggbug/167560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-12-13 17:29 <a href="http://www.blogjava.net/ywjcy/archive/2007/12/13/167560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Zend Debugger 5.2.10 + Zend Studio 5.5.0调试web</title><link>http://www.blogjava.net/ywjcy/archive/2007/12/13/167559.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Thu, 13 Dec 2007 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/12/13/167559.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/167559.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/12/13/167559.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/167559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/167559.html</trackback:ping><description><![CDATA[<a onclick="javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target="_self"><u><strong>工作</strong></u></a>平台是windows，所以我下载的是为windows编译的dll。<br />
<a onclick="javascript:tagshow(event, 'Zend');" href="javascript:;" target="_self"><u><strong>Zend</strong></u></a> Debugger 5.2.10下载地址：<a href="http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.10-cygwin_nt-i386.tar.gz">http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.10-cygwin_nt-i386.tar.gz</a><br />
解压下载的ZendDebugger-5.2.10，目录结构如下：<br />
<p>4_3_x_comp<br />
4_4_x_comp<br />
5_0_x_comp<br />
5_1_x_comp<br />
5_2_x_comp<br />
5_2_x_nts_comp</p>
<p>dummy.php<br />
Inventory.xml<br />
README.txt</p>
根据你<a onclick="javascript:tagshow(event, '%B0%B2%D7%B0');" href="javascript:;" target="_self"><u><strong>安装</strong></u></a>的php版本，选择相应的文件。5.2.x有2个编译好的dll，其中5_2_x_nts_comp是&#8220;non-tread safe&#8221;的，因此我使用5_2_x_comp内的dll。<br />
下面是具体的操作步骤。<br />
1、请将ZendDebugger.dll复制到您的php安装目录下，比如：d:\do\php\。<br />
2、然后将下面的4行内容加到您的php.ini：<br />
[Zend]<br />
zend_extension_ts=D:/do/php/ZendDebugger.dll<br />
zend_debugger.allow_hosts=192.168.1.25<br />
zend_debugger.expose_remotely=always<br />
<br />
其中，192.168.1.25是远程调试的文件所在机器的IP；我是本地web调试，我机器的IP是192.168.1.25。<br />
<br />
3、将dummy.php复制到apache的document root目录。<br />
<br />
4、重启apache。<br />
打开浏览器运行：http://192.168.1.25/phpinfo.php，您会看到：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/ywjcy/23673/r_1.png" border="0" /><br />
<br />
ok，Zend Debugger配置完毕。下面配置Zend Studio 5.5.0。<br />
1、行Zend Studio 5.5.0，菜单：Tools &gt; Preferences，然后选择&#8220;debug&#8221;项，&#8220;Debug Mode&#8221;选择&#8220;Server&#8221;，然后将&#8220;Debug Server URL&#8221;中的&#8220;Server_Address/&#8221;替换为：192.168.1.25。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/ywjcy/23673/r_2.png" border="0" /><br />
<br />
2、菜单：Debug &gt;&gt; Debug URL，然后输入要调试的url。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/ywjcy/23673/r_3.png" border="0" /><br />
<br />
OK，可以调试了吧？<br />
<br />
引用自：http://www.phpchina.com/html/31/25831_itemid_16775.html<br />
<img src ="http://www.blogjava.net/ywjcy/aggbug/167559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-12-13 17:28 <a href="http://www.blogjava.net/ywjcy/archive/2007/12/13/167559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse+JDK+API中文帮助文档的java开发环境搭建</title><link>http://www.blogjava.net/ywjcy/archive/2007/06/29/126988.html</link><dc:creator>雨夜清枫</dc:creator><author>雨夜清枫</author><pubDate>Fri, 29 Jun 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/ywjcy/archive/2007/06/29/126988.html</guid><wfw:comment>http://www.blogjava.net/ywjcy/comments/126988.html</wfw:comment><comments>http://www.blogjava.net/ywjcy/archive/2007/06/29/126988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywjcy/comments/commentRss/126988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywjcy/services/trackbacks/126988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 文章内的图片,已经上传到本地,可保证不会出现图片无法显示的错误!&nbsp;&nbsp;<a href='http://www.blogjava.net/ywjcy/archive/2007/06/29/126988.html'>阅读全文</a><img src ="http://www.blogjava.net/ywjcy/aggbug/126988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywjcy/" target="_blank">雨夜清枫</a> 2007-06-29 09:49 <a href="http://www.blogjava.net/ywjcy/archive/2007/06/29/126988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>