Archives
-
I have nothing to say with IE6
I just release Easy Counter, and some friends said that it cannot work with IE6. Oh, what’s up? I checked the code and find out a big mess, window.location cannot work with IE6. Cause it’s a microsoft security issue. That is `MS06-042: Cumulative security update for Internet Explorer`. Why MS made it? Firefox, Opera, Safari [...]
-
Easy counter first version release
I write a simple counter for download or visit hit count. It’s free, no pop-up ADs. Simply register with you email address. You can find it here, http://counter.easyforge.net. It’s on version 0.1(alpha), no more amazing functions but just work. I will continue to improve it. TODO : Add help page. Password recovery. Hit count daily/weekly/… [...]
Jan 21st, 2008 | Filed under easy_counter -
使用svn—-和IDE配合
不知道你有没有过使用IDE来配合Subversion的经历,比如eclipse啊之流。这些IDE为了对自己的项目进行管理,都回生成一些放在项目下的配置文件,比如eclipse的`.classpath`文件。如果你使用svn,一个不小心就会把这些文件传回代码库,对你自己当然是无所谓了,但是别人就惨了。因为别人在checkout的时候,不得不使用你的配置,而如果别人也和你一样的使用eclipse这种和svn的配合方法,他就更惨了。因为up下来的配置文件和本地的冲突,然后最坏的情况就是你的项目死菜了。况且,这些文件并不是开发的项目的一部分,也不应该和代码放在一起。这是一个很普遍的问题,那么如何来解决呢?使用我们前面说的外部定义。svn标准的目录结构为svn://proj/ +trunk +branches +tags在这里我们添加一个管理个人私有文件的目录,privates,当然了,这些IDE的配置文件也是私有文件咯。svn://proj/ +trunk +branches +tags +privates 这个privates目录如何使用呢?我们首先在下面建立自己的目录,比如/privates/yinwm,此时我的所有的私有文件都应该放在这里。然后再根据自己所要开发的目录结构(trunk还是分支)建立对应的目录,比如/privates/yinwm/trunk,/privates/yinwm/dev_1.0。使用IDE,checkout这个目录,此时这个目录下是任何文件都没有的,并且它只属于你自己。当成功的checkout之后,建立外部定义,让一个内部目录(我喜欢起名字叫proj)指向对应的开发目录(trunk或者某一个branch)。再update,你的代码就下来了。此时你再通过IDE上传东西,代码会放在对应的代码区域,而配置文件会放入你自己的私人文件夹。这样就不会相互影响了。 目录结构如下:svn://proj/ +trunk/ +branches/ +dev_1.0 +dev_2.0 +tags/ +privates/ +yinwm/ +trunk/ +.classpath等 (IDE文件) +proj (外部定义,指向trunk) +dev_1.0/ +.classpath等 (IDE文件) +proj (外部定义,指向branches/dev_1.0) +xxx 这样大家就可以方便的工作了。当然,如果你是console+editor达人(我是70%的这类达人,:D,hoho),你就可以直接checkout trunk或者branch开发,反正这里也没有什么私人配置文件的问题。
Jan 19th, 2008 | Filed under subversionTags: svn -
使用svn——项目的目录布局
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/ | +-trunk +-branches +-tags 这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。 对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。第一种方法,使用trunk作为主要的开发目录。一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。按照时间的顺序 1.0开发完毕,代码冻结 基于已经冻结的trunk,为release1.0打tag此时的目录结构为svn://proj/ +trunk/ (freeze) +branches/ +tags/ +tag_release_1.0 (copy from trunk) 2.0开始开发,trunk此时为2.0的开发版 发现1.0有bug,需要修改,基于1.0的tag做branch此时的目录结构为svn://proj/ +trunk/ ( dev 2.0 ) +branches/ +dev_1.0_bugfix (copy from tag/release_1.0) +tags/ +release_1.0 (copy from trunk) 在1.0 bugfix branch进行1.0 bugfix开发,在trunk进行2.0开发 在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等 根据需要选择性的把dev_1.0_bugfix这个分支merge回trunk(什么时候进行这步操作,要根据具体情况) 这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录。 第二种方法,在每一个release的branch中进行各自的开发,trunk只做发布使用。这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是。 1.0开发,做dev1.0的branch此时的目录结构svn://proj/ +trunk/ (不担负开发任务 ) [...]
Jan 18th, 2008 | Filed under subversionTags: svn -
2008,开始自己的主页
申请了yinwm.cn这个域名,准备做自己的网站,并且采用MT做新的blog平台,因为我是一个懒人,还是用MT省心。呵呵,而且,准备开始搭建自己的网站,提高自己的名声。 嘿嘿 而且,这是一个feedsky的测试。
Jan 13th, 2008 | Filed under 随想 -
使用svn——属性
svn的属性可以说是一个非常好的创意,他是代码非常好的一种补充。 属性是外部不可见的,你可以简单的认为他就是一个文件的一个信息,和文件大小之类的信息是一样的,只不过他是通过svn来管理的。 从我个人的角度,我认为绝大多数的属性是给程序看的用的,因为他们更加的亲和svn的工具。比如我可以给文件添加一个属性叫做License,然后把我期望的属性填充进去。 属性相关的操作有propset,propget,proplist,propdel等。具体命令如下 $svn propset prop_name value $svn propget prop_name filename $svn proplist filename $svn propdel prop_name filename 其中对我们来说有一些实际意义的属性是svn提供的一些特殊属性,这些属性是有特殊的含义的。我认为对我来说最常用的是 svn:keywords 给文件定义一些关键字,比如Author,LastChangedDate等 svn:mime-type 给文件定义mime-type,其中如果是二进制的mime-type则svn会针对文件进行二进制操作 svn:eol-stype 给文件定义如何定义行结束符,是windows形式的或者unix形式的,或者根据系统自动选择,一般都是设置成为自动选择,也就是value是native svn:externals 这个昨天我介绍过,就是外部定义,请参阅使用svn——外部定义 一般对于这些属性的定义,可以使用svn propset,但是对于一些属性,比如svn:keywods, svn:eol-style这些几乎每个文件都要定义的属性,如果一个一个的定义,手就残了。bingo,有人想到了写一个shell脚本,的确是个好主 意,但是每次都需要执行,也很烦。svn提供了一个形式,可以让你在对文件进行管理的时候,自动进行属性的添加。也就是修改svn的config文件的 [auto-props]这部分。 svn的config文件请参阅“config”一节才,(文件存放的位置是,linux是$HOME/.subversion/config,windows通常放在是c:\documents and settings\%user%\application data\subverion\config) 一般的,我们需要设置的属性,按照这个形式书写 file-pattern = prop-name=value 例如 .* = svn:eol-style=native 这就是说明无论是什么样子的文件名,都设置上svn:eol-style这个属性,属性的值为native。 这几基本上说了一些关于svn属性的东西,具体的文档可以参阅svn的属性章节 也许有一些同学发现其实svn:keywords这个东西很值得说,是的,但是之所以我这里不表,是因为更多的我认为他应该属于svn规范的一部分,所以稍后再说。如果有同学想看看,那么去这个地方了解一下也好。
Jan 6th, 2008 | Filed under subversion -
使用svn——外部定义
在svn中提供了一个非常好的功能叫做外部定义,简单的说就是可以把外部的svn版本库映射到一个目录。这是一个本身很简单的功能,但是他却能给svn的使用和管理带来很多多变的功能。 首先详细的解释一下外部定义这个功能吧。我们用一个用户的使用场景来说明一下。说的尽量的详细,所以比较啰嗦:)。 假设现在有两个团队,一个是开发组(dev-team),一个是文档组(doc-team),共同开发一个产品。这两个小组各自有各自的管理等等原因,所 以分开使用svn比较好,所以共有两个svn版本库,dev-svn和doc-svn。我们假设这两个版本库都使用标准的组织结构(详细对组织结构的讨论 请看以后的文章),现在的开发都是在trunk进行的。开发组,trunk下的目录组织为src,lib,build等等。 对于两个小组的开发,测试,管理,分开使用没有任何问题,也不会相互的有影响。但是面对最终产品发布的时候,要做安装程序,这时候就必须同时操作两个项 目。而很明显的一个普遍的组织结构就是doc-team开发的文档作为dev-team开发的程序等等的一部分。那么在dev-svn的trunk下,就 应该有一个叫做doc的目录,目录的内容是doc-svn的trunk的内容。 此时,我们就可以利用svn的外部定义功能来完成这个任务。svn的外部定义,其实是给(父)目录加上的一个 属性(svn properties,详情后文介绍),这个属性定义了要引用哪个外部的版本库并且放在(父)目录下的哪个(子)目录中。 给父目录添加一个叫做svn:externals的属性,属性的内容是doc-name svn-url,svn-url表示要引用哪个svn的连接,doc-name表示这个引用放在哪个目录下 在上面的场景中,我们要给dev-svn的trunk目录设置一个属性sv:externals,属性的值是doc http://doc-svn/trunk,这样当你设置完之后,update一下本地工作区,biu的一下,doc就过来了,这时候从dev-svn的 trunk的角度看,就有了完整的内容,包括doc。 完整的命令是,在chechout下来的dev-svn的trunk目录下 #svn propset svn:externals “doc http://doc-svn/trunk” . propset,表示使用propset命令,添加属性 svn:externals,表示要添加svn:externals属性 “doc http://doc-svn/trunk”,表示要给这个属性添加的值,因为这个属性包含空格,所以要用双引号括起来 之后的点,表示要把这个属性添加在本目录上 啰嗦了一通,想必大家看的也是云山雾罩的,自己做个试验就可以了。 一些高级的外部定义的用法,我们对一个目录不但可以定义一个外部定义,还可以定义多个。比如doc来自doc-svn,website来自web-svn等等。这时候我们需要把这些东西都作为svn:externals的属性值。 doc http://doc-svn/trunk website http://web-svn/trunk 注意!这里是需要换行的,这个对于命令行来说,是非常痛苦的,而且外部定义这种值里面还包含空格的需要用双引号括起来的值来说,就是痛苦死了。好吧,我承认我到现在也没有成功的设置过。怎么办?好吧,我们可以用另外的方法来搞定。 svn propset这个命令可以使用一个外部文件的文件内容作为给属性添加的值。命令如下 svn propset svn:externals -F filename . 所以,一般的,凡是需要用到这类用法的地方,我都会生成一个文件叫做LINKS,放到svn上管理。LINKS的内容如下 doc http://doc-svn/trunk website http://web-svn/trunk 这样我们就可以使用svn propset svn:externals -F LINKS . 这个命令来设置了。 [...]
Jan 4th, 2008 | Filed under subversion