Monday, February 26, 2007

Subversion 十分钟上手

Subversion 十分钟上手
一. 什么是Subversion?
Subversion是一个被设计成为CVS继任者的新版本控制系统。
二. 软件下载
首先到http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91下载安装包,这是windows系统下的,其他系统的请到 http://subversion.tigris.org/project_packages.html 去找对应的来下载。
三. 搭建服务器
如果你并不关心服务器端,那你可以直接看第四.章四.使用客户端。
STEP 1:创建版本库(repository)
命令行运行:
svnadmin create d:\svndatabase
D:\svndatabase 就是我指定的版本库的位置了
STEP2:建立用户
打开d:\svndatabase\conf 目录,这个conf目录是第一步建立版本库时创建的。打开svnserve.conf 找到以下两句:
#[general]
#[password-db = passwd]
去掉每行开头的注释符#,其中第二行是指定身份验证的文件名,即passwd文件。打开passwd文件,找到
#[users]
# harry = harryssecret
# sally = sallyssecret
去掉#[users]前的#,下面就是用户了,一行一个,格式是 用户名 = 密码。
STEP3:启动SVN服务
命令行执行
svnserve --daemon --root d:\svndatabase
开着个command窗口总是让人不爽,没关系,你可以用 svnservice.exe 这个程序把svnserve作成服务。
STEP4:把svn作为服务运行(Windows NT)
写到这里发现svnservice.exe 官方网站居然没有了,原来 subversion 从1.4开始本身就集成了Windows服务的工具。详细介绍请参看http://www.subversion.org.cn/index.php?option=com_content&task=view&id=83&Itemid=9http://svn.collab.net/repos/svn/tags/1.4.0/notes/windows-service.txt

四. 使用客户端
客户端有纯命令行客户端,也有GUI客户端。
作为初学者,我认为首先应该使用命令行方式,这样有助于理解,在命令行方式比较熟悉之后再转用GUI客户端。
STEP1:建立项目
首先在一个临时目录下规划好项目的主目录结构:
\temp\project
\temp\project\branches\
\temp\project\tags\
\temp\project\trunk\
\temp\project\trunk\main.cpp
\temp\project\trunk\toolbar.cpp
…………
makefile

现在可以将目录结构和数据导入版本库了
svn import project svn://svnserveraddress/project –m “init import”
如果服务器就是你的本地机器你也可以这样写
svn import project file:///d:/svndatabase/project -m”init import”
执行上面的命令,你当然都要在temp 下。第一次使用 svn 命令时,由于你没有指定username,所以会提示你输入用户名和密码,当然你也可以通过 –username 和 –password 参数来提供。Subversion 会在本机缓存你的用户名和密码,下次使用时就无需再提供用户名和密码了,如果你觉的这样不安全,可以通过 –no-auth-cache参数指定不要缓存用户名和密码。注意上面提到的几个参数都是两个横杠哦。
当屏幕出现
Committed revision 1
说明版本库已经包含你的目录和数据了。现在可以删除这个temp目录了。现在进入下一步了。
STEP2:获取工作拷贝
选择你的工作目录,比如 d:\myproject,命令行执行:
svn checkout svn://svnserveraddress/project/trunck AppName
这样在d:\myproject 目录下就有了一个AppName的目录,他对应的就是版本库里project\trunk目录。现在你就可以在这个目录下开始修改文件了。修改完成以后就可以进入下一步。
STEP3:提交修改
在d:\project\appname 目录下执行
svn commit

当另外的用户对这个项目作了修改并提交后,你就使用下面的命令使你的工作拷贝和版本库同步。
svn update
当你增加了新的文件和目录时可以使用 svn add 命令。

警告
你可以使用任何你喜欢的工具编辑文件,但你不可以在修改目录结构时不通知subversion,需要使用 svn copy 、svn delete、svn move命令修改工作拷贝的结构,使用 svn add 增加版本控制的新文件或目录。
至于GUI客户端,我目前使用TortoiseSVN
五. 分支、标签和合并
为什么要在这里讲分支、标签和合并?很多人包括一些使用版本控制系统有一段时间的人,几乎从来没有用过分支和标签功能,他们实际上只是把版本控制系统当成一个代码备份系统再使用。
以下两种情况都需要使用分支
u 大多数软件存在这样一个生命周期:编码、测试、发布然后重复。这样有两个问题,第一,开发者需要在质量保证小组测试假定稳定版本时继续开发新特性,新工作在软件测试时不可以中断;第二,小组必须一直支持老的发布版本和软件,如果一个bug在最新的代码中发现,它一定也存在已发布的版本中,客户希望立刻得到错误修正而不必等到新版本发布。
u 你可能要对项目做一些复杂的修改,整个修改可能会持续一周或更长的时间,这时团队中其他人还要继续工作,不能应为你的修改导致团队其他人只能停止工作。
上面两种情况版本控制都可以帮助你。具体的介绍请看svn-book. .

六. 网上资源
官方网站
Subversion官方网站
Subversion中文站
客户端
TortoiseSVN

注:本文部分内容摘抄于 http://www.duduwolf.com/post/setting_up_subversion.asp

cabwiz 不能处理中文 - royer的专栏 - CSDNBlog

cabwiz 不能处理中文 - royer的专栏 - CSDNBlog: "Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1515339"

自己的文章,试试Trackback 是怎么回事

中文版安装包的制作问题

问题来了!

我的Roulette Analyzer cab安装包时,悲惨的发现cabwiz 居然不能做中文的。 google了一下,发现到处都在说这个问题,但没有一个是能真正解决的,看来还只能继续搜索。

 

为了解决这个问题,我甚至手工修改了cab 包里的 _setup.xml,<characteristic type="Roulette Analyzer.lnk" translation="install"> 改成了<characteristic type="轮盘分析家.lnk" translation="install">,为了安全起见,在文件头上还加上了<?xml version="1.0" encoding="GB2312" ?>。结果安装的结果是程序组里显示的是一个 我不死心,跑到windows目录下,手工把这个lnk,改成了中文,但是在卸载时这个lnk没有删除。

Friday, February 23, 2007

轮盘赌分析器1.0版算是差不多了


1.0 版有这些功能基本够用了,2.0 版打算把换人的情况也记录下来,然后显示每个落点在轮盘上的分布,可以按人来显示,这样就可以观察这个人扔的是不是会集中这某个范围内,其实最好能记录每次打骰子时轮盘的位置,看看落点和这个起始点是不是有一定的关系,但是这个太难记录了.你坐的位置不一定能看到轮盘.

Tuesday, February 6, 2007

明天开始写轮盘赌了


明天开始写轮盘赌,看看目前的三天打鱼两天晒网的状态下,俺要多少天写完它?

日后再去 Las Vegas ,能用它赚个几万美元回来?哈哈哈。。

我看只要统计出 红、黑,奇、偶,6 个 12 的历史概率就可以了,至于 1-18,19-36 俺反正不常压,就拉倒了。

Monday, February 5, 2007

CeSetUserNotificationEx 工作不正常

真郁闷啊!N天过去了,这个问题居然还是没有解决。看来只能先放一放了。我的要求很简单啊,只是在指定的时间发出声音或振动来提醒。

 

总结一下,这个小程序,其实有两几个问题都悬而未决。

1.       CeGetUserNotificationPreferences 不显示对话框不能实现
下面是MSDN CE_USER_NOTIFICATION 中的 pwszDialogTitle 的说明:
pwszDialogTitle
Pointer to the string that contains the title of the user notification dialog box. If this member is NULL, no dialog is displayed. The CeGetUserNotificationPreferences function ignores this member.
可事与愿违,Dialog 总是显示。仔细看了整个 CE_USER_NOTIFICATION 的说明,在 Windows Mobile Remarks 一节中有如下这段:
Setting the ActionFlags value PUN_DIALOG on a Windows Mobile-based Pocket PC will cause sounds to be played based on the user settings in the Sounds and Notifications Control Panel Application (CPL). In addition, sounds that result from other ActionFlags flags being set are also played. This will result in multiple sounds on the Windows Mobile-based Pocket PC. To avoid multiple sounds, you should not set any other ActionFlags flags on a Windows Mobile-based Pocket PC except PUN_DIALOG.
唉!辜妄听之吧。

2.       CeSetNotificationEx 不能在指定的时间产生通知。
这是最让人抓狂的事了,当然实现这个功能还有很多方法,比如 SHNotficationAdd 应该也能实现(说"应该"是我还没试过). 曾经一度堕落到调 CeRunAppAtTime 来试验,结过还是不能在指定的时间run app.网上查了一些东西,帮助不大,不过记下来,日后看看,今天的我还是流了很多血汗的。


Windows Mobile Pocket PC Smartphone Programming: Pocket PC Power Management Series 6: Request the Device to Run: a Gentle Way

http://www.tech-archive.net/Archive/PocketPC/microsoft.public.pocketpc.developer/2004-04/0621.html

CeRunAppAtTime does not work   CeRunAppAtTime 在很多机型上就是不能正常工作?小比同志工作没做好?

Friday, February 2, 2007

CeSetUserNotifcationEx 的使用

Windows Mobile Pocket PC Smartphone Programming: Pocket PC Power Management Series 6: Request the Device to Run: a Gentle Way

我不想RunApp ,我只是需要能够发声提醒或振动

文章中还是有错误的:
hNotify = CeSetUserNotificationEx(0, ¬ifTrigger, NULL);
这个Handle 文中在该函数调用成功后,就直接调用 CloseHandle 来关闭,至少 Mobile 5.0 中是直接导致程序崩溃的。这点在该文的评论中也有人提及了

Search This Blog