2011年10月

<p></p><p>// ==UserScript==
// @name CodeHighLight
// @namespace http://hi.baidu.com/freezesoul
// @include http://hi.baidu.com/freezesoul/blog/item/79ecce112ac7f516b9127bc4.html
// ==/UserScript==

window.setTimeout(function(){
var stylestr = "white-space: pre-wrap;";
stylestr += "white-space: -moz-pre-wrap;";
stylestr += "white-space: -pre-wrap;";
stylestr += "white-space: -o-pre-wrap;";
stylestr += "word-wrap: break-word;";
stylestr += "display: block;";
stylestr += "background-color: #FEF9CB;";
stylestr += "color: #000000;";
stylestr += "font-size: 12px;";
stylestr += "line-height: 15px;";
stylestr += "margin: 10px;";
stylestr += "padding:8px;";
stylestr += "border-left:8px #808080 solid;";
stylestr += "max-height: 600px;";
stylestr += "overflow: auto;";

function CodeHtml() {
var s,r;
if (document.all) {
s = document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.selection.createRange().htmlText;
r = document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.selection.createRange();
r.pasteHTML("<pre style='" + Highlight.outerStyle + "'>" + s + "</pre>");
} else {
s = document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.getSelection();
r = document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.getSelection().getRangeAt(0);
var cs = r.cloneContents();
r.deleteContents();
var newP = document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.createElement("pre");
newP.setAttribute("style", stylestr);
newP.appendChild(cs);
r.insertNode(newP);
}
}
var isCtrl = false;
var fire = function(e) {
e = e || window.event;
if ((e.keyCode || e.which) == 17) isCtrl = true;
if ((e.keyCode || e.which) == 81 && isCtrl == true) {
CodeHtml();
}
}

if (document.addEventListener) {
document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.addEventListener("keydown",fire,false);
}
else if (document.attachEvent) {
document.getElementById("spBlogText___Frame").contentWindow.document.getElementsByTagName("iframe")[0].contentWindow.document.attachEvent("onkeydown",fire);
} }, 1000);</p>

<p>  很郁闷,今天文档检查了一个多小时才发现,原来function __autoload,这里漏掉了一个下划线 __</p><p>   应该是两个下划线!</p><p>   准确的调用方法:</p><p>  function__autoload($class_name) {<br />&nbsp;&nbsp; <strong>include</strong> $class_name.'.php';
   }</p><p>  //童鞋,一定要记住啊!两个下划线!</p><p> </p><p>  不然的话,就会抛出异常:</p><p>   </p><p>   又发现一个 __construct()</p><p>    此为构造函数!</p>

<p>谈到了连续进行两次按位非运算相当于floor的结果.</p><p>然后我进行了下测试,下面是我的代码:</p>
 这个在我机器的运行的结果是1234567891011$time=<a href="http://www.php.net/microtime">microtime</a>(1);for($i=0;$i&lt;=100000;$i++){ 4.9;}echomicrotime(1)-$time;echo&quot;&lt;br&gt;&quot;;$time=microtime(1);for($i=0;$i<=100000;$i++){<a href="http://www.php.net/floor">floor</a>(4.9);}echo<a href="http://www.php.net/microtime">microtime</a>(1)-$time;<p>0.013797998428345
0.041538000106812</p><p>我们可以看到 用
几乎比floor快了三倍..</p><p>但是我们需要知道为什么就等价于floor了.</p><p></p><p>这里需要涉及到一个进制转换并且取非的过程.</p><p>现在我们需要一个假定条件.我们的变量为有符号的整数5.</p><p>我们现在给它进行按位取非的运算.</p><p>5的二进制为 0000 0101</p><p>按位非之后为 1111 1010</p><p>这时候第一位符号位1表示负数. 负数需要本身取反并+1</p><p>其他位取反为 000 0101 +1之后的结果为 000 0110</p><p>加上前面的符号 所以就为-6了.</p><p>这时候我们我们逐渐的就会发现一个著名的公式 ~num = -(num + 1)</p><p>回到上面的话题.如果上面不是整数,而且是小数5.9呢?</p><p>那么Zend引擎在计算取非的时候就会把小数部分的二进制的舍弃掉.</p><p>所以~5.9就会得到-6了.</p><p>然后再进行一次按位非..按照上面的公式 我们就得到5了..这样的效果就和floor()是一样的.</p><p>什么.你再担心用而舍弃floor会出问题吗?</p><p>这个答案是确定的</p><p>比如你可以用下面的代码测试</p>123echo 99999999999999.99;echo"<br />";echofloor(99999999999999.99);<p>在我的计算机上运行的结果是</p><p>276447231
99999999999999</p><p>我们可以看到.用
的时候很明显的溢出了..</p><p>所以在比较小的数字运算中..还是放心的使用~~来代替floor吧..</p>http://www.skiyo.cn/2010/06/07/double-bitwise-not/
<p></p>

SVN+authz+passwd<p>最近在我用Subversion论坛(http://www.iUseSVN.com/bbs)经常有人提到这样的问题:
为什么我的客户端没有写权限?
为什么我的权限没有起作用?

总结他们的配置,发现
都是用svnserve作为服务器,
都在svnserve.conf中使用了authz-db选项

原因可能如下:

1,配置authz时,没有注意svnserve启动参数-r所指定的目录。
这里有两种情况:
A:-r直接指定到版本库(称之为单库svnserve方式)
比如,有一个库project1,位于D:svnproject1
使用以下命令启动svnserve</p>svnserve -d -r D:svnproject1<p>
在这种情况下,一个svnserve只能为一个版本库工作
authz文件如果配置成下面这样就是错的,</p>[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r<p>
应该配置成</p>[groups]
admin=user1
dev=user2
[/]
@admin=rw
@doc=r<p>
因为[project1:/]表示库project1的根目录,而按上面的启动参数,是没有库的概念的。
使用类似这样的URL:svn://192.168.0.1/ 即可访问project1

B:-r指定到版本库的上级目录(称之为多库svnserve方式)
同样,有一个库project1,位于D:svnproject1
如果使用以下命令启动svnserve</p>svnserve -d -r D:svn<p>
这种情况,一个svnserve可以为多个版本库工作,
这时如果想限制指定库的指定目录,就应该指定具体的库,像这样</p>[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r<p>
如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录
使用类似这样的URL:svn://192.168.0.1/project1 即可访问project1
这样的URL:svn://192.168.0.1/project2 即可访问project2

2,对中文目录进行权限控制时,没有将权限文件authz改为utf-8格式。

svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,
应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8,
我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以设置有无BOM

更多参考文档:
(配置权限控制文件)http://www.iusesvn.com/bbs/thread-6-1-1.html
(中文目录权限控制)http://www.iusesvn.com/bbs/thread-41-1-1.html

(Apache的单库多库问题)http://www.iusesvn.com/bbs/thread-158-1-1.html</p><p>转帖请包含作者等版权信息、并注明来自:我用Subversion - 基于svnserve的服务器,权限文件authz配置的常见问题及解答</p><p></p>

<p>我相信各位都应该对SVN不会陌生吧,我相信绝大多数人都使用过,但是并不是人人都自己配置过SVN服务器。下面就是我配置SVN服务器的步骤,以及在配置过程中碰见的一些问题,在此记录,希望对你有所帮助。</p><p>安装</p><p>双击运行“配套安装程序”目录中Slik-Subversion-1.6.12-win32.msi,安装目录可自定义. 默认安装的目录:C:Program FilesSlikSvn;</p><p>双击运行“配套安装程序”目录中TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi,这是一个将SVN集成到windows shell中的GUI管理工具,推荐使用。</p><p>双击运行“配套安装程序”目录中LanguagePack_1.6.5.16974-win32-zh_CN.msi,这是TortoiseSVN的汉化包。</p><p>创建版本库,该库中存放所有Subversion项目:</p><p>首先,手动创建一个目录,如C:svnDBDB1</p><p>然后,创建版本库:</p><p>第一种方式:在DOS命令行中运行svnadmin create C:svnDBDB1</p><p>第二种方式:在DB1目录中,单击鼠标右键,选择[TotoiseSVN]->[在此创建版本库...]进行创建,</p><p>以上工作完成后,在yxv3目录中可看到以下内容:</p><p>4个目录,两个文件。</p><p> </p><p>其中:</p><p>conf目录存放配置信息;</p><p>db目录就是所有版本控制的数据文件;</p><p>hooks目录放置hook脚本文件的目录;</p><p>locks用来放置Subversion文件库锁定数据的目录, 用来追踪存取文件库的客户端;</p><p>format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号;</p><p>配置</p><p>通过自带服务平台Subserver的实现</p><p>打开/conf/目录,打开svnserve.conf找到以下行,去除每行开头的#:(特别注意不要在行的前面留空格)</p><p>[general]</p><p>anon-access = none              #保证只有认证用户可以访问,即关闭匿名访问</p><p>auth-access = write              #通过认证的使用权限</p><p>password-db = passwd         #指定了用户密码文件</p><p> </p><p>打开/conf/目录,打开passwd文件,增加用户,一行一个,存储格式为“用户名 = 密码”</p><p>[users]</p><p># 定义用户信息</p><p>lvgang = lvgang</p><p>luotong = luotong</p><p> </p><p>创建及启动SVN服务</p><p>打开DOS窗口,使用sc创建windows服务,将当前目录指向到Subversion的bin目录下,输入:</p><p>sc create SVNService binpath= "C:Program FilesSlikSvnbinsvnserve.exe --service -r C:svnDB " displayname= "SVNService" depend= Tcpip start= auto(特别注意=后面有空格)</p><p> </p><p>导入项目版本库</p><p>确定SVN服务(命令行或windows服务)运行后,</p><p>在你需要导入版本库的目录下单击右键选择[TortoiseSVN]-> [导入...],在弹开的窗口的URL框中输入版本库的目录地址(如svn://127.0.0.1/DB1, “DB1”是版本库)</p><p> </p><p>点击 "确定" 执行导入,显示如下对话框,录入用户名及密码后确认</p><p> </p><p>数据就全部加入SVN版本库目录树上了。</p><p> </p><p> </p><p>特别注意事项:</p><p>如果是中文目录的话,authz等文件,必须以utf-8的格式保存,且不能带BOM,而windows自带的记事本按utf-8保存的文件则会加上BOM,所以,如果你以utf-8格式保存好后,提交代码时,svn"section header expected"的错时,则多半是带BOM的。以及开源的Notepad++的格式转换中的“转换为utf-8码(BOM)”等都可以完成这个工作。</p><p></p>