Subversion 配置笔记

在决定转向SVN之后,就去下了个Subversion 1.4.6装上,但是默认的情况下,SVN并不像CVSNT那样提供一下基于网络的访问接口,因此在一开始,我只能用TortoiseSVN使用file:///协议来访问版本库。

这样终究不是个办法,因此去网上找了找,发现SVN本身也提供将SVN安装成服务的方法,只要自己添加一下就行了。使用以下命令:

sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
--root c:\repos" displayname= "Subversion" depend= tcpip start= auto

注意,如果你是在Vista下面的话,需要使用管理员权限来添加服务。还有一点就是,在输入命令的时候,属性名称后面跟着=,不能有空格,但是=与后面的值之间必须有一个空格。

配置之后就可以用svn://协议来访问版本库了。

配置网络访问之后,还需要设置一下访问权限,这个在版本库conf目录里的svnserve.conf里配置。

找到 [general] 段,可以从注释里看到配置匿名访问、密码数据库等等选项。其中 anon-access 是用来设定版本库的匿名访问权限,auth-access 是用来设定登录用户的访问权限,password-db 是用来设定用户密码数据库,一般取默认 passwd 就行了,realm 是用来设定版本库的域,如果两个版本库的的域一样,那么它们就会使用同一个用户密码数据库。

用户权限有 none、read、write 三种,我的配置如下:

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = my subversion



阅读全文 »

提高Vista开始菜单文件夹展开速度的小技巧

用了Vista一段时间,总是觉得Vista的开始菜单里的文件夹展开速度很慢,以前配置不是很好,可以理解为配置的原因,但是现在配置应该也不差了吧,怎么会还是这样呢。

某天玩电脑的时候突然想到,会不会是那个“高亮显示新安装的程序”的原因,试了一下,开始菜单里的文件夹展开速度果然快了很多。

如果你的Vista在进入开始菜单,展开文件夹的时候速度也是很慢的话,不妨试试禁止“高亮显示新安装的程序”,步骤是:在开始的微软徽标上右击,选择属性,然后进入“开始”菜单选项卡,点击“自定义”,打开“自定义'开始'菜单”对话框,在列表中找到“突出显示新安装的程序”,取消选中这个项目,然后确定两遍即可。

跟VMware有得比的虚拟机,VirtualBox

新硬盘到手,装好vista,又准备装个Ubuntu 8.04,但是只有镜像没有光盘,又没有空的CD刻录盘,于是就先在虚拟机去体验一把了。

虚拟机到现在我也用过不少了,Virtual PC、VMware、Bochs、QEMU这几个常见的虚拟机都用过,但是就速度和功能上来说,还是首选的VMware。自从Virtual PC被微软收购之后,貌似就没怎么用过了,一方面微软把Guest OSes限制在了Windows系列,虽然安装其他系统也是行,但是总是感觉不太舒服的,另一方面就是Virtual PC的速度有待提高了。

VMware安装Ubuntu非常方便,直接镜像放进去,按正常步骤安装。

在虚拟机里安装好Ubuntu之后,想用用VMware for Linux版的Unity功能,于是就去下了个VMware for Linux 6.5 Beta,弄到虚拟机里。

但是,安装完VMware,在Ubuntu里安装系统的时候才发现,VMware不支持在虚拟机里的虚拟机安装系统……

好吧,既然VMware检测了Host OS是否运行在虚拟机环境里,那么我换个虚拟机总行了吧。

Linux里的虚拟机,以前也玩过,还是知道有个VirtualBox的,然后又想到之前有看到新闻说VirtualBox也支持类似VMware Fusion那样的无缝运行了。赶紧去VirtualBox官方网站下了个v1.5.6的。

安装完VirtualBox启动它,界面很是简洁,左边是虚拟机列表,右边是选中的虚拟机的配置信息,这个布局很像Virtual PC,只不过VPC只有虚拟机列表而已。

图片附件

先装个TinyXP试试。TinyXP安装很快,10分钟左右就搞定了。然后安装附加软件包,重启客户机之后,无缝模式已经可以用了,感觉比较好,效率比VMware高,停顿的感觉没有VMware那么明显。

昨天在VirtualBox官方看到了v1.6.0的changelog,但是却没有找到v1.6.0的下载,还很奇怪,今天能下载了才想起来VirtualBox被Sun收购了,v1.6.0是被Sun收购之后推出的第一个版本,看changelog里改变蛮大的,我比较关注其中有一个就是支持Linux客户机的无缝运行。

下了v1.6.0,重新安装后,把安装好的Ubuntu附加软件升级了一下,无缝模式也可以运行了。

没有运行在无缝模式下的Ubuntu,桌面分辨率可以随窗口大小而改变。

图片附件

运行在无缝模式下的Ubuntu,下面这张图里是Ubuntu的终端和Windows的cmd一起运行的情况。

图片附件

感觉VirtualBox在Linux下的无缝模式还不是很稳定,不过也有可能是因为没有安装好的关系,不过不管怎么说,VirtualBox的速度和功能还是让人比较满意的,等有Ubuntu 8.04的CD之后,也去装一个。

BOM引起的网页布局混乱

页面的上部比正常状态下多出一块空白,而且整个页面的布局完全是混乱的。

一开始以为是服务器上文件版比本地的文件版本旧的原因,比对了一番没找到不同的,然后想到会不会是文件编码的问题。

切换到Zend Studio,找到首页的模板文件,属性里一看,编码UTF-8,对的,但是下面一行字引起了我的注意,“Byte Order Mark is UTF-8 (BOM)”,于是就想是不是这个玩意引起的布局混乱。

打开EditPlus,设置文件保存选项为一直删除BOM,打开首页模板,保存,上传,测试,没有问题!

看来果然是BOM的问题了,接下来的事就比较机械了,在模板文件里看哪些是带了BOM的,直接到EditPlus里走一遭就行了。

解决了这个问题才想起来,有些模板为了转换成UTF-8编码的,就用记事本打开文件,然后另存为UTF-8编码了,但是记事本是会给UTF-8编码的文件加上BOM的,因此就引起了首页布局的混乱。

嗯,问题解决,就这样。

ASP 中实现 MVC 架构

这些天在看《Ruby for Rails》,对RoR起了点兴趣,在想着能不能在ASP里也整个MVC出来,恰好前天在经典看到了一篇帖子《分享一个好东东,动态Include文件 (Dynamic File Includes)》,虽然之前也在BlueIdea看到过动态include,但是那个函数不是很完善,所以也就没怎么注意。

但是这个动态include比较符合需要,常规应用都能应付,刚好看了RoR有点想法,于是就有了ASP MVC的尝试,写了一点简单的东西,为了共享,就放到Google Code上去了~

主页地址:http://code.google.com/p/asp-mvc/

要check out源代码的话,可以使用这个地址:http://asp-mvc.googlecode.com/svn/trunk/

具体怎么使用SVN就请大家自行google了 :)

JavaScript 中为 Date 类实现 DateAdd 方法

JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日期的操作,像加一年,减一个月什么的,这在服务端经常用到,比如设置 Cookie 的到期时间为现在时间的后一年,那么就需要使用这个方法了。

虽然 JavaScript 中没有 DateAdd 方法,但是 Date 类却有设置年月日时分秒的方法,比如 setFullYear、setMonth 之类的,而且,这些个方法的参数是可以为负的,在设置之后, Date 类会自行进行调整,每个月是30天还是31天,年份是不是闰年都不用我们来管了,只管设置值就是。

有了这个特性之后,我们就可以很方便的来为 Date 类添加 add 方法了。之所以不添加一个 DateAdd 方法而是给 Date 类添加一个 add 方法是因为我觉得那样更加方便,当然你也可以将 Date 类的 add 方法转换成为一个全局函数 DateAdd。

为了对每一个 Date 类的实例都有效,这里用到了 prototype 对象。

在 VBScript 里的 DateAdd 方法是用一个字符串来控制所加的量是年还是月还是其他的,所以在这里我也模仿 VBScript 里的 DateAdd 方法,使用一个字符串来控制所加量对应的部分,比如 y …

阅读全文 »

[ASP] 解决 JScript 中使用日期类型数据时出现类型错误的问题

在服务端JScript中,有些时候需要使用日期类型的数据,比如说设置一个cookie的到期时间,更新数据库中的日期字段等。但是按照平常的方法来用js里的date类型数据时,运行时就会发生错误。

例如以下代码:

  • <%@LANGUAGE="JScript" CODEPAGE="65001"%>
  • <script language="JScript" runat="server">
  • Response.Cookies("xujiwei")("name") = "xujiwei";
  • Response.Cookies("xujiwei")("gender") = "male";
  • var expiredDate = new Date(2008, 11, 31);
  • Response.Cookies("xujiwei").Expires = expiredDate;
  • </script>

在浏览器中打开之后,就会出现以下错误:

Microsoft JScript 运行时错误 错误 '800a000d'

类型不匹配

/temp/test.asp,行 6

这就意味着,我们按照类似在VBScript里的使用日期类型数据的方法在JScript不再行得通,但是我们总是需要在服务端中使用日期类型数据的,如果操作数据库是采用参数化Command的方式的话,那么需要使用日期类型数据的地方会更多,总不能因为不能使用常规方法来添加一个日期参数而把它放在SQL语句里吧。

幸好,JScript的设计者们考虑到了这一点。JScript在服务端使用时,往往是做为ASP的另一种脚本语言,而JScript则是微软在JavaScript上发展而来的微软自己的东西,考虑到这一点也是应该的。

在JScript中,解决这一问题的关键就是,Date类型的对象提供了一个函数getVarDate,它在JScript语言参考的说明如下:

当与 COM 对象、ActiveX® 对象或其他以 VT_DATE 格式接受和返回日期值的对象(例如 Visual Basic 



阅读全文 »

Windows 下配置 CVS 服务器

在进行团队项目开发的过程当中,源代码版本控制是不可缺少的部分,我目前用过的代码版本控制工具就两个,Visual Source Safe和CVS,呃,准确来说,CVS是昨天才开始用的。

本来,我是一直用着VSS的,比较方便,直接集成在VSS里面,但是目前在写的XBS是ASP的,Visual Studio里没有ASP的项目,不像PHP可以有个vs.php,所以比较麻烦,一直用EditPlus来写XBS。前两天因为一个项目用PHP的,又想到了Eclipse有个PDT的,就去下了个已经配置好的开发PHP的Eclipse IDE,然后想要弄个代码版本控制工具,就想到了CVS这个开源界鼎鼎有名的东西,立马上网去搜,找到了for Windows的版本:cvsnt。

cvsnt是cvs Windows版本的服务端程序,提供基于 TCP/IP 协议的 CVS 服务,可以在http://www.cvsnt.org/下载到。找到了服务器程序后,找了几天篇教程,就开始配置CVS服务器。

准备工作

从http://www.cvsnt.org/下载cvsnt,我下载的版本是2.5.04。

安装cvsnt

直接双击运行cvsnt安装文件,安装过程中可以选择以经典、自定义和完全三种方式安装,在自定义方式中可以选择安装路径。安装完成后,在控制面板里出现一个CVSNT Server的项目,图标是一条鱼~~

配置cvsnt

安装完成cvsnt后,就可以从控制面板中那条鱼来配置cvsnt了。首先,你要新建一个目录用来存放cvs仓库,我用的是G:\CVSROOT。这里需要先了解两个概念:cvs仓库和模块。我是这样理解的,cvs仓库相当于VS里一个解决方案,它可以包含多个项目,即模块。

打开cvsnt的控制面板后,可以看到7个选项卡,分别是:Server Information,用于查看服务器信息及一些简单的统计信息;Respository configuration,配置CVS仓库,包括添加、删除等;Server Setting,配置服务器运行的一些参数,诸如端口、加密、压缩等选项;Capatiblity Options,有关兼容性的选项,在这里主要配置一个兼容非cvsnt客户端的版本响应为cvs 1.11.2;Plugins,插件配置,安装完成可以不用管的~;Advanced,安装完成后也不用管了;About,在这里可以管理cvsnt服务的状态,停止或启动cvsnt和cvsnt lock服务。

其实简单来说,custom换默认设置安装完成后,要设置的东西只有两个:cvs仓库和服务器设置。

服务器设置:设置Run as为系统管理员帐号Administrator,或者新建一个本地用户,专门用于cvs。使用一个新建的本地帐户的好处是可以使用NTFS的权限控制来保证服务器的安全。

CVS仓库设置:进入Respository configuration选项卡,点击Add,出现添加CVS仓库的对话框,Type选择Standard即可,然后在Location里输入之前新建的用于存放CVS仓库的文件夹,我用的是G:\CVSROOT,在Name里会自动转换成一个可以用的CVS仓库的别名,比如我用的是“/CVSROOT”,其他的都默认,确定后cvsnt会询问你所添加的CVS仓库目录没有初始化,是否进行初始化,点“是”就行了,cvsnt会自动初始化指定的目录,初始化完成之后,可以在里面看到一个CVSROOT的文件夹。

认证设置:配置完CVS仓库后,为了使CVS能使用帐号进行访问而不是使用windows用户,需要修改cvsnt的认证方式,在CVS仓库目录的CVSROOT目录里找到config文件,先把它的只读属性去掉,然后使用文本编辑器打开,将第一行的#SystemAuth=yes改成#SystemAuth=no。

用户设置:在CVSROOT目录里,新建一个passwd文件,用文本编辑器打开,添加两行内容:

cvsroot:

xujiwei:

可以把“xujiwei”改成你要用的用户名。

修改密码:添加了用户之后,最好把密码修改掉。修改密码需要在cmd中进行,首先打开一个cmd,设置一下cvsroot环境变量:

set cvsroot=:pserver:[email protected]/cvsroot

注意,这里的xujiwei是之前添加的用户名,/cvsroot是之前添加的CVS仓库的别名,如果你的设置不同,请把它们替换成自己的值,以后不再说明。

接着登录CVS服务器,因为添加用户时没有设置密码,因此可以不输入密码直接回车登录:

cvs login

修改密码:…

阅读全文 »

解决 ADODB.Stream 0x800A0C93 错误

ADODB.Stream在ASP编程中往往用于无组件上传,并且可以指定文件编码,可以应对各种不同的需要。但是在使用ADODB.Stream过程中,往往会发生这样那样的错误,昨天就碰到了一个0x800A0C93错误,在网上找了半天也没找到解决方法,找到的都是些什么权限的问题,但是在我使用的时候,权限配置并没有问题,因此只好自己琢磨了。

如果要再现这个错误,可以使用以下代码:

  • <script language="jscript" runat="server">
  • var obj = Server.CreateObject("ADODB.Stream");
  • obj.Mode =1;
  • obj.Type = 2;
  • obj.Open();
  • obj.LoadFromFile(Server.MapPath("test.asp"));
  • Response.Write(obj.Read());
  • obj.Close();
  • </script>

因为在使用ADODB.Stream时,我是想用它来读取文件,所以使用了Mode 1 - Read,然后使用LoadFromFile方法载入文件,但就是这里,出现问题了,运行到LoadFromFile的时候,出现错误,提示“应用程序请求的操作不允许出现在该上下文中 ”,弄了半天也没解决。

去网上找,解决方法大都一样,权限设置不对什么的,解决不了我的问题,只好继续自己琢磨。

又折腾了一会之后,想到,会不会是Mode的问题,因为之前这段代码是用得好好的,但是在放到我写的一个类的Read方法中之后,就把Mode改成1 - Read了,又想到,LoadFromFile方法应该是把所指定的文件内容写入到了ADODB.Stream对象的缓冲区当中,所以需要写权限,当下测试:

  • <script language="jscript" runat="server">
  • var obj = Server.CreateObject("ADODB.Stream");
  • obj.Mode = 3;
  • obj.Type = 2;
  • obj.Open();


阅读全文 »

在ASP里面创建GUID

GUID在许多时候做为唯一标识符都很方便,但是在ASP里并没有现成的函数来创建GUID,其实可以使用Scriptlet的类型库来创建一个GUID,代码如下:

JScript

  • function GenerateGuid() {
  • var TypeLib = new ActiveXObject("Scriptlet.TypeLib");
  • return (TypeLib.Guid);
  • }

VBScript

  • Function GenerateGuid()
  • Dim TypeLib
  • Set TypeLib = Server.CreateObject("Scriptlet.TypeLib")
  • GenerateGuid = TypeLib.Guid
  • End Function

如果要在客户端使用的话,VBScript的代码需要稍做修改,即把:

Set TypeLib = Server.CreateObject("Scriptlet.TypeLib")

修改为:

Set TypeLib = CreateObject("Scriptlet.TypeLib")

但是在客户端使用ActiveX的时候,IE默认的安全设置会提示是否允许使用ActiveX,所以并不推荐使用。

希望对你有所帮助。