Thursday, August 21, 2008

svn authorization

预先的环境是: svn server的IP是: 11.12.13.14, OS是windows 2003 server. repository的目录是D:source, 我们在该repository下建立了两个项目, 分别是Project1和Project2. 建立repository的过程, 见这个blog
常用的Svn访问协议有三种, 第一种是file协议, 第二是svn协议, 第三是https协议.
https协议比较适合于跨广域网的项目开发, 需要有apache的支持, 所以配置比较复杂一些, 可参考网络上的文章 .

  1. Setting up an ASP.NET website development environment using Visual Studio .NET, Subversion, and Windows XP http://www.codeproject.com/KB/aspnet/Subversion.aspx
  2. HOWTO: Subversion for Windows with Apache server - a beginner's guide [version 0.4] http://svn.spears.at/
  3. Setting Up Subversion for One or Multiple Projects http://www.linuxjournal.com/article/7655
file协议最适合一个人的项目, 设置非常简单, 你在你本机开一个svn server, 同时在你本机创建一个repository. 你的svn客户端就可以用file协议访问repository了. 也可以多人一起用, 但必须将repository 的目录共享出来, 所以安全性很差, 不建议在多人项目中使用这种模式.
本机file协议访问project1的url是 file:///D:/source/project1 .
如果是局域网访问的话是, file:/// .12.13.14/source/project1
Svn协议比较适合于局域网内部多人项目的开发, 在svn server建立了一个repository之后, 我们就可以使用svn协议了, URL是 svn://11.12.13.14/source/project1 ,这是因为缺省情况下, 这个repository已经被开启了匿名读权限了, 但写权限被关闭了. 所以任何人都可以读取这个repository的内容. 我们需要为每个人定制不同的访问权限. 需要修改这个repository目录下的三个文件, 它们都在D:harrysourceconf下.
(1) svnserve.conf文件, 你需要处理掉4个label的注释, 分别是authz-db和password-db和anon-access和auth-access.需要注意的是, 确保每行前边没有多余的空格, 否则当你访问svn会报错. 另外最好为realm这个label设置一个有意义的名称, 因为svn client连接server时候, 会显示server的realm名称. 同时如果你想让多个repository共用同一组用户账号, 可以将这几个repository的passwd文件指向同一个文件, 可以使用相对路径来指定passwd文件(相对路径是基准是conf目录), 也可以用绝对路径来指定. 需要注意的, 路径必须使用unix风格的分隔符/, 而不能是.

(2) passwd文件, 在[users]section下定义用户和密码, 每个账号一行,用户名和密码用=号分隔 .
(3) authz文件, 这是最关键的配置文件. 下面是authz文件的配置:
[groups]
Prj1_Dev_Team=harry,helen
Prj2_Dev_Team=tom,peter
Test_Team=sally,mark
QA_Team=andy

[/]
*=r #所有人都能读取这个repository
harry=rw #harry具有这个repository的读写权限

[/project1]
#*=rw #取消所有人的读写权限
@Prj1_Dev_Team=rw
@SE_Team_QA=rw

[/project2]
#*=rw
@Prj2_Dev_Team=rw
@SE_Team_QA=rw
@Test_Team=rw

Saturday, August 16, 2008

Registry requisite tools

Regsnap -registry and windows system folder snapshot tool and analysis tool.
RegMon.exe--product from sysinternal company, it is free tool

Friday, August 15, 2008

SMS sending service for Exchange server

BlackBerry有一个Push mail的功能, 当你有新邮件时候, Blackberry enterprise server(BES) 就将邮件以数据形式发送到你的BlackBerry手机中. 由于在中国, Blackberry的套餐费高的离谱, 同时能提供push mail的邮箱必须是电信运行商的邮箱, 不能是你的企业邮箱账户.
如果能开发一个专门针对企业的Exchange server的短信提示服务器, 市场应该也不错. 首先终端不限(因为所有的手机都有收发短信的功能), 其次你所用的邮箱仍然是你的企业邮箱.
1. 功能

  • 当某个邮件账户接受到新邮件时候, 通过短信将邮件发送到对应的手机上(包括邮件的标题, 附件的大小, 邮件在SMS 服务器上的ID号, 以及简要的邮件body)
  • 用户可以用短信来控制邮件的转发, 比如将邮件转发到其他邮箱中.(通过短信回复前面说的那个ID到sms 服务器)
  • 用户可以通过短信来删除这个邮件(通过短信回复前面说的那个ID到sms 服务器)
  • 用户可以通过短信或网站或Msn机器人来管理邮件短信提示, 包括开启和关闭短信提示, 包括获得操作帮助.

2.目标客户
大企业, (有自己的Exchange mail server)中重要的人物, DBA, CEO, CFO这些人对于某些邮件往往很重视, 比如DBA对于DB的故障邮件, 商务人士对于重要客户的邮件.

Monday, August 11, 2008

routine tortoisesvn operations-2

我自己写了一点关于svn的常用功能, 见http://focuswindows.blogspot.com/2008/08/routine-tortoisesvn-operations-1.html


以下内容摘自http://blog.csdn.net/iNarcissuss/archive/2007/09/16/1787411.aspx

Check-out(检出) 和 Export(导出)
+-------------------------------------------------
从 服务器取得 最新版本(Subversion术语--Head Revision)或某个历史版本的拷贝 复制到本地的某个目录,这个本地的目录有个Subversion专门的术语---working copy(工作拷贝),working copy的特点是自动与服务器关联,并受服务器的版本控制。
所以Subverion的CheckOut相当于VSS的 设定工作路径+签出 。
与CheckOut类似的一个命令是------Export(导出),它能将某个版本复制一份到本机的某个目录,与CheckOut不同的是,这个目录不是woking copy,Export(导出)
后就与服务器没有任何关系了,当然更不会受服务器的版本控制。
TortoiseSVN会在是working copy的目录上加上各种标志,而Export的目录不会有任何标志
SVN Update(SVN 更新) & Get Lock
+-------------------------------------------------
最常用的命令,你可以只CheckOut一次,但是最好经常update,特别是在你修改之前尤其特别一定用Update,以保证本地工作拷贝与服务器项目版本库一致。它的功能是
,从服务器取得最新版本跟新本机工作拷贝,相当于VSS的Get Latest Version,如果习惯VSS,并且对SVN的复制--修改--合并模型不放心的话,可以在Update之后,马上使用
“获取锁定”命令,它的作用是使的别人不可以修改你正在修改的文件,以避免冲突。
Import Export (导入 导出)
+-------------------------------------------------
Import是一种快速批量向服务器添加文件的方法,如果你像把本地的文件或文件夹添加到服务器的某个目录下面,那么在本地目录中,右单击选择Import命令,然后
设定URL即可,这是从别的版本管理系统向VSS迁移的一种方法,在版本浏览器上单击某个目录,会有加入文件和加入文件夹的命令,其中加入文件一次只能加入一个文件
加入文件夹只能加入该文件夹下的所有文件,不能加入子文件夹,你可以根据实际需要使用.需要注意的是, 本机目录导入到服务器后,本机目录没有改变,和服务器也没关联,
并不是工作拷贝。Export命令请在本文其他地方找。
Switch & Relocate (切换和重定位)
+-------------------------------------------------
Switch -----在版本库内改变与当前工作拷贝关联的服务器路径URL(只限于同一个Repository内),应用情景:有时,服务器的目录会有所变化,和你当前工作拷贝
关联的服务器URL改变了,这种改变的直接结果是,你在工作拷贝中所做的修改不能提交到服务器,这时就需要Switch到正确的URL再提交。
Relocate----功能和Switch雷同,差别在于,Relocate实现的是Repository和Repository之间的切换。当服务器地址或Repository名称发生变化时,可以用它来更新
你的工作拷贝。
Create/Apply patch (创建和应用补丁)
+-------------------------------------------------
如果你对某个文件没有修改的权限,但又必须对它进行修改,这时你可以对其创建补丁,然后把补丁发给对此目录有write权限的工作人员,他进行一系列的审核,审核
通过后,他会执行应用补丁命令,可以将你所做的修改提交到服务器上。
copy to working copy...(复制到工作拷贝...)
+-------------------------------------------------
首先,注意这里是working copy ,后面在选择目录时一定不要选错!,当然,选错了tortoisesvn会提示错误的,正确的操作应该是选那些有tortoisesvn标志的目录。
执行此命令会在working copy中增加你copy的目录和文件,然后修改,再commit,repository中就做了相应的变化。
当你需要用到这样一个模块,它与已经存在的某个模块类似,然而又不完全一样,需要有一定改动时,用copy to working copy...命令较为快捷。
Resolved ...(已解决的...)
+-------------------------------------------------
当两个人同时编辑一个文件,一个人先提交后,另一个人再进行提交时就会出现冲突,TortoiseSVN会提出必须更新你的工作拷贝后才能对这个文件进行修改,
Subversion冲突的种类及解决方法
+-------------------------------------------------
--->1.当两个人同时编辑一个文件的不同部分,一个人先提交后,另一个人再进行提交时就会出现冲突
--->解决方法:在冲突的文件上调用命令SVN Update(SVN更新),TortoiseSVN会自动从服务器上下载最新版本,并与本地工作拷贝进行合并,然后调用命令
SVN Commit(SVN 提交),就会自动生成一个新版本传到服务器上。
--->2.当两个人同时编辑一个文件的相同部分,一个人先提交后,另一个人再进行提交时就会出现冲突
--->解决方法:这种情况下调用SVN Update时,由于是同一部分修改,TortoiseSVN不知道应该怎么办,它会自动在发生冲突的文件的目录下生成三个文件,一个
发生冲突文件的基础版本,名称为文件的全名再加上基础版本的版本号,如FileConflict.cpp.r90,另一个是你调用SVN Update时更新的版本,名称也是文件
的全名再加上基础版本的版本号,如FileConflict.cpp.r95,它是别人已经修改好提交的文件, 还有一个是你的本地修改,后缀为.mine,而原文件以一种TortoriseSVN能识别的方式显示冲突的双方,而且这个文件上会出现TortoiseSVN的图标,要解决这种
冲突要求造成冲突的两个人进行沟通,确定最终的修改方案,然后进行修改,具体操作是右击有冲突图标的文件,选择“编辑冲突”命令,这时就可以对出现冲突
的文件进行编辑,TortoiseSVN会打开TortoiseMerge,里面会显示别人的修改、你的修改、最终合并的文件,在最终合并的文件中产生冲突的行上右击,根据弹出
菜单选择使用别人的修改、我的修改还是两个都用,编辑完后保存,关闭TortoiseMerge,然后右击有冲突图标的文件,选择Resolved...(已解决的...)命令后
确定即可。

关于“基础版本”及其命令 ---比较差异,检查更新,显示日志,版本分支图
+-------------------------------------------------+-------------------------------------------------
当我们从服务器上CheckOut某个版本,经过一定的修改后,右击修改的文件(注意,不是目录)会有一个“比较差异”命令,调用它会弹出TortoiseMerge,它列出了
当前修改的工作拷贝与我们CheckOut时用到的版本之间的差异,这个被我们CheckOut的版本称为当前工作拷贝的“基础版本”,注意,基础版本不一定是最新版本,最新版
本也不一定是基础版本,比如另一个人和我们CheckOut同一个版本,它在我们之前提交了一份修改会形成一个最新版本----这时,我们进行提交可能造成冲突。
刚才说过,只有文件才会有“比较差异”命令,而目录没有,有没有办法看到目录的变化呢?--肯定有,是哪个呢?先试一下第一个---“显示日志”,结果不行,它只
显示的是当前工作拷贝对应的服务器目录或文件的版本变化记录,从第一个版本到最新版本,一个也不缺。“版本分支图”也一样,它是“显示日志”命令的图形化显示,
功能和“显示日志”完全一样。答案是----“检查更新”,它比较的是当前工作拷贝相对于基础版本的更新记录,不仅能显示文件的变化,也能显示目录的增减等。
Revert (复原) 和 Update to version
+-------------------------------------------------
当你CheckOut并修改了文件后,如果在提交前发现修改不正确,可以用Revert来取消这次的修改,使文件回到基础版本的状态;如果已经提交,可以用Update to Version
(更新至版本)返回某个旧的版本,或者调用显示日志命令,在任意一处日志上单击,在下方会出现修改记录,右击某一记录,在弹出菜单中选择Save Revision to(保存版本至)
,也可以把原来版本进行存档。需要注意的是,你的本地工作拷贝可以返回到原来的版本,可是服务器上只会记录你对它进行最后一个提交的版本,所以服务器端版本不
会 变化,如果你想把服务器端的文档内容也换为原来的状态,可以用旧版本文件覆盖新版本文件,然后提交,或者使用Revert changes from this revision 和 Revert to this revision命令,她们的用法在本文档中有,自己找找,调用显示日志命令,在任意一处日志上右击,在快捷菜单中会出现这两个命令。
注意,Revert命令很危险,它不向Ctrl-Z命令一样一次只撤销一次修改,它的名字是“还原”,它会把所有的修改全部撤销,直接回到基础版本的状态,如果想只撤销
一 次的修改,我的方法是,使用“检查更新”和“比较差异”命令在TortoriseSVN中修改,TortoriseSVN中的"use this text block ","use other text block ","use both text block "等命令很方便,关于这两个命令在本文中也有介绍,自己找。
Revert changes from this revision 跟Revert to this revision的区别?
+-------------------------------------------------
譬如有个文件,有十个版本,假定版本号是1,2,3,4,5,6,7,8,9,10。

-->1.Revert to this revision(恢复到某个以前的版本): 如果在版本6这里点击“Revert to this revision",表示7~10的修改全部作废,历史倒退到了版本6那个年代。
如果你做了多处修改,然后决定要返回到版本 N,你就可以使用这个命令。再次说明,恢复的修改位于你的工作复本,在你提交之前,并不会影响版本库。
注意,这将会丢弃从那个版本以来的所有修改,使用选中的版本来替换文件/文件夹。

-->2.Revert changes from this revision(还原选中版本所做的修改):如果在版本6这里点击“Revert changes from this revision",表示版本6这个历史事件被抹杀了,只剩下9个历史事件了。 如果同时选择了6,7,8三个历史时期并点击“Revert changes from this revision”,表示抹杀6~8这仨历史时期。同理,如果同时选择7~10,然后点击“Revert changes from this revision”,则效果跟在版本6这里点击“Revert to this revision”是一样的。
还原的内容只在你的工作副本中,所以此操作完全不会影响版本库!要注意的是,这个操作仅仅还原该版本中的修改。不是将整个文件替换成选中的那个版本。
它对于已经做过其它无关修改的还原早期修改非常有用。如果你做了本地修改,此命令将会合并修改到工作副本。
关于“基础版本”及其命令 ---比较差异,检查更新,显示日志,版本分支图
+-------------------------------------------------+-------------------------------------------------
当我们从服务器上CheckOut某个版本,经过一定的修改后,右击修改的文件(注意,不是目录)会有一个“比较差异”命令,调用它会弹出TortoiseMerge,它列出了
当前修改的工作拷贝与我们CheckOut时用到的版本之间的差异,这个被我们CheckOut的版本称为当前工作拷贝的“基础版本”,注意,基础版本不一定是最新版本,最新版
本也不一定是基础版本,比如另一个人和我们CheckOut同一个版本,它在我们之前提交了一份修改会形成一个最新版本----这时,我们进行提交可能造成冲突。
刚才说过,只有文件才会有“比较差异”命令,而目录没有,有没有办法看到目录的变化呢?--肯定有,是哪个呢?先试一下第一个---“显示日志”,结果不行,它只
显示的是当前工作拷贝对应的服务器目录或文件的版本变化记录,从第一个版本到最新版本,一个也不缺。“版本分支图”也一样,它是“显示日志”命令的图形化显示,
功能和“显示日志”完全一样。答案是----“检查更新”,它比较的是当前工作拷贝相对于基础版本的更新记录,不仅能显示文件的变化,也能显示目录的增减等。
Branch & Tag (分支与标记)
+-------------------------------------------------
---->1.定义与理解
-->1.1 Branch and Thunk (分支和主线)
版本控制系统的一个特性是能够把各种修改分离出来放在产品的一个分割线上。这条线被称为Branch(分支)。
分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,产品的分支就可以混合回Thunk(主线)里.

-->1.2 Tag (标记/标签)
版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。这个过程被称作Tag(标记/标签)。
Subversion 没有专门的用于建立分支和标记的特殊命令,它所谓的分支其实就是一个拷贝,把原目录的内容拷到一个新的目录下面。但是这个拷贝的操作不是真正意义
上的拷贝,Subversion称之为"Lean copy"(便宜复制),它类似于Linux的硬链接,实际的操作是建立了一个内部链接,指向那个被建立分支的目录,只有当我们提交一个文件
的修改,才在分支目录下建立一个真实的文件,它的内容就是我们提交的内容,需要注意的时,这时候,除了这个文件以外,其余的文件仍然是作为被建立分支目录下文件的
链接存在的。
采用Lean copy技术的结果是分支和标记能迅速被创建,并且没有在版本库里占据任何额外的空间。
-->1.3 理解Branch
建立分支的情况举例:
a.Project发行版已经完成,正在继续开发Project贺岁版,计划在两个月后发行。不久,客户开始抱怨Project有问题,于是CheckOut(检出)Project的发行版,
找到几个错误,并进行代码更正。但是当前的版本是个不稳定的版本(现在正处于Project2贺岁版的开发中.....),并且在下个月才能有希望稳定下来,这样就没有办法基于
最新的代码去发行一个修复错误的版本。....这种情况下就可以创建一个Branch(分支),分支的所有文件是基于Project发行版的,可以修改这个分支而不影响到主干(即当
前正在开发的Project2贺岁版),当Project2贺岁版完成时,你可以选定是否要把这个分支同主干(Project2贺岁版)合并或继续保留在这个分支里。
b.如果我们在维护一个项目的文档,但有一天,另一个项目也要这份文档,她们有和我们不同的需求,因此要对文档做一些修改才能适应她们的需要,这时,也可以对
这个文档建立一个分支。
c.Branch可以是项目分支,也可以是私有分支。
所谓的项目分支,是指两个项目需要并发开发,它们基于同一个原始版本的拷贝,且这两个项目又互不干扰的进行独立开发,那么这两条开发线对于原来的那个原始版
本来说,就是项目分支,而原始版本就是项目主干。
所谓的私有分支,是指如果多个人共同负责一个模块,当出现两个人同时修改一个文件的同一部分的情况时,就会不断的出现冲突,开发人员就要花大量的时间解决这
些冲突,而在分支上工作避免了频繁的解决冲突,这种分支叫做私有分支,个人可以在主干上建立一个私有分支出来,当开发到一定阶段以后,可以再对自己分支与主干进
行合并,在与主干进行合并的同时,也能关注到其他人在这一段时间内对主干做的修改。
---->2.创建分支
利用TortoiseSVN有两种方法建立分支:
-->1.从本地工作拷贝到服务器建立,在本地工作拷贝右击在弹出菜单中选择“Branch/Tag”会弹出一个对话框,在其中设定要建立分支的URL即可。
-->2.从URL到URL,在Repository Explorer(版本浏览器)中右击要建立分支的目录,在弹出菜单中选择Copy to...(“复制到...”),在弹出对话框设定要建立分支的URL.
---->3.分支的合并
创建分支后一段时间可以根据需要进行Merge(合并)操作,我们既可以将主线的改动合并到分支上,也可以将分支的改动合并到主线上:
-->1.将主线的改动合并到分支上,需要在分支的工作拷贝下进行合并,合并的范围是从主线上上次合并的版本(或建立分支时候的版本)到当前主线上的最新版本,
如果主线和分支都修改了相同的文件的相同部分,合并后会出现冲突,就要进行解决冲突,如果主线修改但是分支没有修改,则主线上合并的变更内容会增加到当前工作
拷贝中,合并的结果会保存到当前的工作拷贝中,提交后改动就会体现在分支中,如果是第一次合并,则起始版本号是上次建立分支的版本号。
-->2.将分支的改动合并到主线中,需要在主线的工作拷贝下进行合并,相关事项与上雷同。
Blame (追溯)
+-------------------------------------------------
这个命令很不错,能显示文件的所有行在哪个版本中被修改及修改的时间,还可以追溯版本库等,有兴趣可以自己研究。

routine tortoisesvn operations-1

接下来, 我们讲一下tortoisesvn的常规操作. update, revert和switch的区别, 这三个命令的图标都是从服务器端到客户端的箭头, 容易搞混.

1. update是最常用的操作, 就是用来更新本地的work copy, 当然, 如果某个文档是基于svn server的最新版本做了修改,那么update并不会从svn server上download这个文档. 如果你的文档是基于svn server上的一个老版本作了修改, tortoisesvn会让启动一个向导让你解决这个conflict.

2. revert, 这个操作忽略本地work copy的任何修改, 它直接从svn server上下载被你修改了的文档.

3. switch, switch是update的一个超强版本, update是从原有的svn folder下取代码的, 而switch可以指定另一个folder的URL(但是仅限于在同一个repository之下的另一个folder), switch操作使得本地的work copy指向新的URL, 同时更新versioned file的footprint信息. 这个操作因为不需要download所有文档的内容, 所以速度很快.

4. checkout, 就是将svn上的某个directory所有文档都下载到一个本地目录,同时下载文档的footprint信息, 它要求本地目录必须是空目录. 也叫作fresh checkout.

移动和复制

当我们对源码结构进行重新组织时, 经常会对versioned file进行复制和移动操作. Tortoisesvn的move和copy命令比较隐蔽, 在tortoisesvn菜单上是找不到这些命令的, 只能是先选中要移动的folder/file, 然后按下鼠标右键, 拖拉到另一个目录, 这时候会出现一个弹出菜单, 其中就有SVN copy和SVN move.

TortoiseSVN合并和回滚操作

合并功能是Subversion最大的亮点. 它甚至是改变了我们的开发模式(和Sourcesafe的checkout-lock-checkin模式相比). 当然合并操作本身是很复杂的. 主要有3种合并模式, 需要提醒的是, 合并操作后, 结果仅仅反映到本地的work copy上了, 这时候还没有在svn server上进行merge. 如果你真的要在server上merge的话, 需要再执行commit操作.

合并模式1-(merge a range of revisions):即同一个branch不同版本的merge, 在这个向导中, 你需要指定一个URL(因为已经有个缺省值, 所以一般情况下你不需关心这个), 然后你要指定一个要merge的版本序列, 这个不好理解, 为什么是一个版本序列呢? 在一般情况下, 你只需要指定一个版本号, 并不需要merge几个版本. 但svn仍然提供了一个让你一次性merge多个版本的功能.

合并模式2-(reintegrate a branch): 这是subserver提供的一个非常有用的功能, 它可以将我们的另一个branch代码和本地的work copy进行merge.

合并模式3-(合并两个树): 这应该是三种合并模式中, 最灵活的一种, 选项也最多, 你可以指定两个repository 的URL, 以及相应的版本号码, 然后merge.

版本回滚: TortoiseSVN的rollback功能放在Show Log的界面上了, 最方便的一个回滚方法是: Revert to this revision, 这个很好理解, 就是将版本回滚到你选定的那个版本上, 点击之后, 会将work copy回滚到刚刚指定的那个版本. 需要commit之后, 才会将这个版本真正地在svn server上了.

Friday, August 8, 2008

MS LiveID registry URL

Register LiveID by your email or hotmail https://accountservices.passport.net/reg.srf?bk=1203928119&cru=http://login.live.com/login.srf&sl=1&vv=550&lc=2057

logon live ID and change password
https://login.live.com/ppsecure/secure.srf?lc=2057&sf=1&id=10&ru=https://accountservices.passport.net/default.srf%3fid%3d10%26vv%3d600%26lc%3d2057&tw=1200&fs=1&kv=7&cb=&cbid=10&seclog=10&wlsu=1

Sign up

https://signup.live.com/signup.aspx?ru=http%3a%2f%2fg.live.com%2f3WCEN-US%2f20&wa=wsignin1.0&rpsnv=10&ct=1232765708&rver=5.5.4177.0&wp=MBI&wreply=http:%2F%2Fwindowslivehelp.com%2FDefault.aspx&lc=1033&id=259655&bk=1232765716&rollrs=12&lic=1

Sunday, August 3, 2008

shareware product web template

奥大软件版权所有
http://www.aodasoft.com/

best pratice for new shareware developer

我一直在努力 -- 送给所有的共享新手

楼主greensleeve(绿袖子)
http://topic.csdn.net/t/20040731/08/3228726.html我一直在努力
经常看到很多同行们对共享软件能否赚到钱感到困惑,虽然大家都知道的周易前辈的MP3 CD Maker创下了月入四万的记录,但这对我们大多数人来说,只是一个很遥远的梦,就好象是水中的月亮,可望不可及。这个也曾经是我投入这个行业是的目标, 虽然到目前我的收入才达到他的四分之一,但我已心滿意足了,回顾两年多的编程生活,总结了一些经验,希望和大家分享,最重要的一点,我将它做为这篇文章的 题目吧,那就是 :我一直在努力。
一 困惑
共享软件能赚到钱吗?怎么才能收到钱?很多朋友在刚入行时都会问这样的问题。其实很多高手都能证明共享软件是可以赚到钱的,这一点是无须置疑的。以国外人 的观念,凡是付出了劳动的东西都是有价值的。对于软件也一样,而且国外由于法律严格,大家都有版权意识,所以对共享软件在国外销售有很大帮助。至于怎么样 才能收到钱,对于一般的用户来说,都是找一家代理公司帮你收钱,每月定期寄支票给你。代理行业在国外已经是一个很成熟的行业了,不用担心代理会不给钱你。 比较大一点的代理:
www.RegNow.com 设施最完备的代理,需要开户费
www.Qwerks.com 免费开户,据说信誉极好,我也用它
www.Shareit.com 最可气的是:客户退货竟然要收手续费
www.RegSoft.com 反应平平

二 心态
在投入这个行业之前,调整好自已的心态非常重要。做共享软件绝不等同于你在公司里打工,只要程序写完了就可以每月按时拿工资了。当你滿怀信心开始一个产品 的开发,经过了无数个不眠之夜,最后产品开发成功,说明书也写好了,网站也做好了,提交到下载站点了,结果怎么样?没有单!不是今天没单,而且是昨天也没 单,这个星期也没单,这个月也没单,连这一年都没单。你会怎么做?如果你不幸真的遇到这种情况,希望这篇文章的标题能帮助你。
现在共享软件市场确实充滿各种各样的作者,大部份人都是本着一个诚实认真的态度,一种互惠互利的态度,也就是说用我们的软件让别人得到帮助后,我们自已也 得到实惠。用一句话说,就是要做一个有用的东西。用自已的特长来做软件是可行的,相反对于那些急于赚到钱,看见别人什么软件赚钱就赶紧照抄无误,完全不考 虑是否是自已的专长的人,他们是肯定赚不到大钱的。

三 技术和素质
1. 熟练掌握一门编程语言是必不可少的,至于什么语言倒不是很重要。常看到有人争论VB和VC哪个厉害,个人观点:两种语言一样厉害。如果一个用VB的人可以 写出和别人用VC写的一样的程序,那这个用VB的人很厉害,如果一个用VC的人不能写出别人用VB写的程序,那这个用VC的人不厉害。
2. 至少两年的编程序经验。这个很重要。通过几年的经历,你会对程序和系统有一个更深的理解。对你以前的课本知识会有一个更深的理解。如果你刚刚毕业或还在校 学习,你会不会觉得数据结构和操作系统这两门课基本上没有用处?曾经有一个刚毕业的小伙子,别人问他什么是线程同步?他回答说:我写过的所有的程序都不用 线程同步就可以完成所有的功能。真是牛啊!所以说新来的大学生永远是各个行业中最牛(英语中第二个字母)的人了。我们也是从这个时候过来的,看到他们的现 在就想起了我们的过去。
3. 责任心
这是各行各业的基本素质,对于做共享软件行业来说,这个尢其重要。你要确保你的产品不会对客户的机器造成损害。客户买不买你的软件你都要负责到底。强烈的责任感会使和客户的关系形成一个良性循环,这是一笔无形的资产。以后再论。
总而言之,如果你准备一个人单打独斗来做共享软件,你至少要会这些东东:
VC or VB or JAVA or other programming language
HTML, ASP or PHP
所有计算机专业的基础课(包括数学)
两年以上的专业经验
FTP软件的使用 (我发现竟然有很多人不会用FTP?)
如果你认为你这些都具备了,让我们开始吧。
四 做什么
这是个问得最多的问题,实际上问这个问题的人是想问:做什么软件能赚到钱?对这个问题最简单有效的回答是:做有用的 软件。试想一下,如果你做的软件连你自已都不准备用它,你会希望别人会用吗?你在做的时候可能就是持着能捞就捞,捞不到拉倒的心态。这样只是浪费时间,劳 而无获。现在很多人抱怨抄的人太多,什么是抄呢?如果你做数据库软件,我也做数据库,这不叫抄。这叫参与行业竟争。所谓抄者,是指那些全完模仿别的人样子 来做软件的人,别人做什么,他就做什么,别人的界面做成什么样,他就做成什么样,别人的网站是什么样,他就做成什么样,别人的网站是:xxx.com ,他的就是 xxx.net . 别人的软件名字叫:AOB,他的软件就叫A0B. 但是对于这些抄者来说,他们的产品就他们的网站和软件名字一样,看起来象,其实是无法比的。用这种方法的人大多是想快速发财的,但结果总是不会令人如意的。
让我们静下心来考虑一下:到底该做什么?
我们在各自的专业领地里已经干了多年了,是不是发现有些事靠人手来做太慢,能不能让它自动化一下?我们当前使用的工具是不是太麻烦或太简单了,能不能简化 一下或增加一些功能?在某一个项目的开发中是不是创造了一种新技术?这样多想想,创意自然就来了。举几个例子:
我们做程序员是不是喜欢一边写程序一边泡MM?INTERNET是少不的了,当我们正聊的火热的时候老板突然朝我的座位走过来怎么办?赶紧切换到VC编缉 器吧,可按MOUSE的次数太多了,声音太响了,动作太大了,任务栏上还有一排按键是关不掉的了。即使老板没看到你在做什么,他也能猜到你在做什么。能不 能有一种程序让我们只按一个键就隐藏所有其它的窗口,只显示我们需要的窗口?当老板向我们走来时,我们可以一边从容镇定地望着他走来,一边悄无声息地按下 我们预设的隐藏键,当老板走到身边时,我们可以目不转睛地盯着他的眼睛问:你要干嘛?于是创意来了,就做这个,就叫做“一键隐藏”。开始做吧?别忙,创意 有了,看有没有人先想到。上网找一下吧,晚了,已经有人做了。再想下一个吧。
九七年我做研究生论文时,是在AutoCAD是做二次开发,为CAD增加三个造形功能。当时的CAD版本还没有这三种功能,当时我花了十个多月的时间研究 CAD的二次开发库,最后实现这三个功能。现在想起来,其实我可以将这个功能包装一下,完全可以变成一个很好的共享软件。可惜那时还没有这种意识。现在的 CAD版本可能已经加上这几个功能了。举这个例子是希望大家能举一反三,多留意身边的事情,从自已专业工作中产生的IDEA比盲目地模妨别人的东西最后产 生的效果要好得多。

五 模妨 VS 抄袭
好不容易想到一个创意,一阵激动过后,上网一查,原来别人早已想到而且类似的软件已滿天飞了。怎么办呢?放弃吗?重新再想吗?这个时候你要冷静下来,对同 类的软件做一些细致的分析,找出他们的优点和不足之处。我们要知道,在现在这样一个时代,要有一个全新的独一无二的创意是很难很难的了,何况人类科技的发 展就是后人踩着前人的肩膀而不断向前的。所在以分析了别的软件后,再仔细考虑一下自已将要做的软件有什么新意,不需要一个全新的东西,只需要有几个亮点就 行。举个例子可能明白一点,现在市面上有很多注册表类软件,谈到在注册表里加一项能够让某个程序能自动启动自已,大多数软件可能都会用到这样一些键:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
等等。但很少有软件会知道这个键也能让程序自已动启动:
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Run
如果你准备做类似的注册表软件,你是否认为你对注册表的了解超过其它的软件呢?如果是的,那就加上这些吧,而且要在说明中大书特书,这就是你竟争的本钱,要不然你的软件就会被淹没在注册表软件的海洋中。
怎么做呢?是不是和别人的一模一样呢?那是抄袭,所有的抄袭只能抄外表,无法抄到里面。我这里谈到的模妨是在研究了别的软件的基础上,总结一下别人组织界 面的方式和设计软件的方法,别人在易用性和直观性上的优点,在这个基础上,加上自已对程序的理解,做出有自已风格的产品。当我们刚入行时,如果我们的软件 是销售到海外的,我们当然应该了解外国人使用软件的习性,学习一些设计得很好的软件的界面,这样更易于提高我们的软件在国外的竟争能力。比方说界面上的一 个BUTTON,当MOUSE移到上面时,会显示一个提示信息告诉用户这个BUTTON是做什么用,这样一种用户友好的界面是受欢迎的。
六 设计与编码
这个是所有程序员都经历过的,也是一个很烦索的过程。不过也是一个很有乐趣的过程。以前在一家软件公司打工,老板很开明,上班时可以听音乐,可以聊天,曾经有一次我们五个人同时泡上一个北京的 美眉,那小妹妹打字非快,以一敌五,真是佩服。老板不在我们还可以打三角洲,常常是公司十来个人打得天混地暗,最后发觉程序还没写完,只好连夜加班赶进 度。如果你已经开始你的共享软件开发了,尽量不要给自已太大的圧力,写程序的时候听听音乐,聊聊天,会给枯燥的编程生活带来很多乐趣。我这儿有一首绝版的 齐秦的歌,歌名叫做:燃烧爱情,生于七十代的朋友可能都听过,现在好象全世界只有我有这个的MP3版,如果感兴趣,发EMAIL给我,我寄给你。
总之,在设计程序时,尽量做到简单易用,要让用户一安装你的软件就会用,不要指望用户会花时间去看你的说明书。几个有用的原则:
1. 尽可能简化操作
2. 尽可能地将结果显示给用户
3. 尽可能在用户第一次使用的时候就能做出一个好的结果
这一点想具体说明一点,比方说你做一个清理注册表的软件,即使用户的注册表是干净的,你也要设法从他的注册表中找一点不干净的东西来。我是意思是说要靠你的技术功底,不是靠欺骗用户。这样当他第二次用你的软件但已过了试用期时,他的购买的冲动就会大一些。

七 网站
通常做共享软件是要申请一个国际域名和一个主机空间的。对于刚开始的朋友,可能经济上的原因,无法达到这一点,那就无妨找一个免费的主机空间,用他的二级 域名,我刚开始时也是用我的ISP提供给我的免费的10M空间存放我的网页,慢慢地积累一些收入,经济上可行了,就马上申请了域名和空间。如果你的软件是 给一些专业用户使用的,那还是一开始就申请域名和主机吧,这个钱不能省的。如果你的软件是给一般计算机用户用的,这些用户对什么域名不是很了解的话,你不 妨用我的方法。当然如果你有钱,就直接进入专业共享的行列吧。
怎么样设计网页呢?要找一个专业人士帮忙吗?个人认为:简单即是美。网页不用很专业,但要实用,也就是说,要让用户一看你的主页,就知道你这个网站是做什 么的,或者知道你的软件是做什么的。这是一个最基本的原则。第二,要考虑一下你的网页的下载速度。你可能用ADSL或CABLE上网,但还有很多用户是用 MODEM的,所在要你的第一页不要加载很多图片。在有图片的地方要加上ALT字段,这样可以让用户知道这是一张什么图片即便图片没有显示出来。
写到这里,我想起了一个IDEA,在设计网站的时候,经常要用FTP把文件传上去,下载下来,久而久之,很可能在服务器上有很多用不到的文件,比方说一些 图象文件,一些临时的文件了,这些东西对于我们维护网站造成很大的麻烦,轻易地删除又可能删掉了有用的文件。所以我想,能不能有这样一种软件,它即有 FTP的功能,又能帮我们检查网站上哪些文件是没有用到的,而且还能帮我们测试网页的下载速度(模拟不同的上网方式)。这种软件可以启名叫:FTP for web developer. 现在世面上FTP的东西太多了,但有这个功能的基本上没有。光凭这个名字,就会有多少WEB DEVELOPER会感兴趣啊。怎么样,你也可以试试这个,做好了别望了给个免费的版本我,这可是我的IDEA呀。再一次证明创意是从工作中来的。
八 提交
经过几个月的努力,程序写好了,文档也做好,网站更是令人滿意,下面就是让用户知道你的软件了。通常的做法是将软件提交到一个下载网站,这类网站种类繁多,质量也参差不齐,好一点下载网站还需要付费。下面介绍一些下载网站:
1.www.download.com
最有名的软件下载站。$79USD 每提交一次,UPDATE一次也要收$79。但它热呀,没办法,如果有钱,一定要提交DOWNLOAD
2.www.tucows.com
这也是一个有名的下载网站,而且会HOSTING你的软件在他们遍布全世界的服务器上。(这里又想起了模妨与抄袭的事,你能说TUCOWS 和DOWNLOAD是谁抄谁的吗?他们各自有各自的特点)
另外,TUCOWS现在还有免费提交的选项,对于经济不宽裕的朋友确实是一个好地方。
3. www.webattack.com
这个网站能在众多竟争者中站住脚,与他们的编缉的良好素质有极大的关系。最低费用是$20吧,这个网站的最大特点就是:他们的编缉会细致地测试你的软件, 并且会详细地告诉你你的软件的不足。根据他们专业经验指点一下,相信你的软件即使被拒收了,也会收益不浅的。
4. www.versiontracker.com
这可能比较热门的免费下载网站之一,它会将你的软件放在首页两天,在这两天中,你可以分析你的软件的热门程度。
5. www.soft32.com
这是一个比较专业的类似于Affiliate性质的网站,就是帮别人卖软件的网站。
还有很多下载网站,当你准备提交你的软件时,请注意以下几点:
1. 你的收入的绝大部分是来自于DOWNLOAD和TUCOWS这样的大网站的。
2. 提交太多的小网站只是浪费带宽。
3. 但越多的小网站有链接到你的网站,你的网站在GOOGLE上的排名会越靠前。(这真是个很难取舍的问题)
4. 写你的软件简介时,一般都有一个短一点的介绍,用一句话说明你的软件是做什么的,在这个地方不要写得太含糊,要让用户一看就懂,就明白。
5. 在要输入你的网站链接的地方一定要输入。

九 等待
最难受的时候到了,这个时候的人们往往会有一种神经质,总是怀疑自已的EMAIL信箱是不是坏了,以致于每隔五分钟就要收一次EMAIL来检查是否有的 ORDER。很有可能,你的软件自提交后就再也没有消息了,似乎提不提交都是一样的。这个时候我希望你想想这篇文章的题目:我一直在努力! 曾几何时,这句话就象古代的节妇用捡黄豆的方法来打发漫漫长夜一样,这句话让我渡过了无数个难熬的等待日子。今天没单,昨天没单,前天没单,这个星期没 单,这个月也没单。第二个月,我收到一单了,$7.75美元。我当时第一个软件定价$10美元,被代理收去最低手续费$2.25美元。这对于我可以一个划 时代的日子,从此我就一头踏进了“我一直在努力”的漫漫征程。做共享近两年的时间,从最初第一个月的$7.75美元,到后来超过$500美元,到现在月入 过万,从最初每天工作至少十小时,从无节假日,到现在每天工作四小时,有节假日。只有那句话能让我能走到今天。
那么当我们限入漫长的等待时,我们该做些什么呢?消极等待是不可取的,除非你觉得这个工作可有可无,反正有铁饭碗在手。在这个时候,我们应该花多一点时间 来改进我们的软件,要知道任何一个软件在刚出来的都是一个丑小鸭,WINDOWS刚出道时才卖出多少份?比比WINDOWS XP和WINDOWS  3.1,真是有天壤之别。如果在这个时候放弃很可能你会失去一个本来可以成名的IDEA和一个可以名扬四海的软件。就好象一个节妇守了二十年寡,等到五十 多岁时却出来给人当二奶,晚节不保,你说她还能快活几年呀?在我们不断地改进我们软件时,我们可能会从起初的创意派生出新的东西来,这是非常宝贵的,因为 这个新派生出来的想法可能是经过我们对实验经验的总结而得出的,是非常实用的。
如果你的软件一年都没收到一单(有这样可怕的事吗),那只能说明你的软件不是有一点问题,而是太有问题了,你的创意不是不好,而是太不好了。你营销的方式 不是不对,而是太不对了。我见过这样一个软件也可以赚到钱:一个随机产生一个10以内的加法让小朋友们回答,难后给出正确如否的评论。如果都对了,就说 “You are so great”,这是男人最喜欢女人对他们说的一句话。象这样一个软件都可以赚到钱,这个创意竟然是我大学时教BASIC的老师给我们的一道上机题。可想而 知,你的创意不好到了什么程度。所以说,每个月不来那么一两单,对心情也不好。我们那口袋也挺紧的。

十 创收
现在每个月可能来几单了,心情也不错了,但口袋还是挺紧的。怎么办?英语中有个词叫PROMOTION,我不知怎么翻译成中文,意思就是说想一些办法来提 高你软件的知名度。说白了就是花钱在一些大网站上做广告。现在广告公司的种类也太多了,我们都希望把钱花在刀刃上,有很多骗人的网站,也是要小心的。下面 介绍这些广告公司的类型。
1. 流量类:这类公司声称会在短时间内给你的网站带来极大的流量,并且根据付款的多少,相应带来不等的流量。对所有这种类型的公司绝对不要理它!表面上你的网 站确实增加了访问量,但我可以告知他们的做法是:将你的网址加入他们的一个客户端软件的列表中,这个客户端软件会不停地以轮回的方式去连接列表中的站点, 一切都在后台运行,坐在那台机器前的人可能正在看黄色网站。他对你的站点没有一点兴趣。
2. 点击付费类
以GOOGLE 的ADWORDS和OVERTURE两家公司最为出名,效果最佳。GOOGLE的每点击费用最低是$0.05美元,OVERTURE的 是$0.1美元。两家公司的效果可以说是旗鼓相当,只是OVERTURE的成本要高一些。个人认为,用收索引擎营销是一种成本极低的方式,而且易于掌控, 你永远不会说:我控制不了你。以目前我的广告的转化率计算:
每天点击 : 300 左右
转化率:   4%
成本:    $20美元左右
收入:    $500美元左右
这样的收益比起提交DOWNLOAD等下载网站的成本要低得多,收入也高得多,以致现在GOOGLE和OVERTURE是我的主要收入来源。
现在DOWNLOAD也提供类似点击付费的广告类型,它是当一个用户完全下载了你的软件时,你才用付钱,最低费用:$0.15美元/下载。真他妈的黑心。我从没做过这类广告,不知效果如何,但我计算过用这个做广告的其中的一个软件,数据如下:
一周下载量: 26000
最低费用:  26000 X $0.15 = $3900
假设的购买率5%(似乎太高了):26000 X 0.05 = 1300
单价:    $40
总收入:   1300 X $40 = $52000
净收入:  $52000 - $3900 = $48100
以上的计算是以假设的购买率为5%来计算的,实际的数字可以比这个低得多,所以不得盲目操作。
下面是一个我所知道的朋友的数据,这个较真实一点:
一周下载量: 5500
费用:     5500 X $0.20 = $1100
购买率(1%)  5500 X 0.01 = 55
单价:     $28
总收入:    55 X $28 = $1540
净收入: $1540 - $1100 = $440
这个朋友每月靠这个软件能赚1000多美元。
3. 按周/月付费类:
这类公司以TUCOWS为代表,他们在自已的网站的预留一定的位置用于显示你的广告,根据位置的不同有不同的价格,当然效果也会不一样,一般放在主页的广 告效果比较明显。我曾在TUCOWS是投过一个星期的栏目广告,收入不是很大,小赚一笔。在SOFT32上做过一个月的首页广告,点击无数,但成交寥寥。 基本上没有保本。
4. 杂志类:
通常你需要写信给他们的编缉,介绍你的软件,然后他们认为合适就会在下期杂志上介绍你的软件。这无疑会带来相当多的收入。但如果你不是英语专业研究生毕业 的,你还是不要写这种信丢咱中国人的脸吧,如果你是英语专业研究生毕业的,我不明白为什么你也会挤到我们这条船上来?哪里找不到一碗饭吃呀。
难道我们就不能用这种方法来提高我们的软件的知名度吗?还是有的,那就是要不断地提高软件质量,一段时间后,自然会有自称某个国家最流行的某本杂志的某个 编缉写信给你,问你是否允许他们将你的软件放入他们下期杂志的CD中。你只要给他们回信说:I authorize XXX magzine to place my software “牛牛牛” in their enclosed CD-ROM. Thank you.
以后你就等着收单吧。写到这里,我想到我的第一个软件,当时不知是哪一家荷兰的杂志上介绍我的软件,他们也不通知我一声,害得我一年以后,还有人写信问 我:他从某杂志上看到我的软件的介绍,问我怎么才能购买?我当时已经把那个软件全部删掉了,连购买链接都没有了,我只好为他专门做了一个购买链接,又赚 了$7.75美元,结果那天吃饭时一高兴多给了人十块小费。

写到这里,差不多把做共享的整个流程都介绍了一遍了,希望对刚入行者有些帮助。做共享并不难,最难的是在遇到困难时不能坚持下去。记住:我一直在努力。本 来想搁笔的,又想起一些大家经常争论的问题,想表达一下自已的看法,以下观点纯属个人意见,如与某些人的观点冲突,请见谅。
1. 破解坏了我的软件吗?
个人认为:破解对你的软件毫无损失。
2. 注册算法越复杂越好吗?
个人认为:天下没有攻不破的盾。最好不要把功夫花在注册算法上,除非你的软件就是帮助别人搞注册算法的。所有的鈅匙只能防君子,防不了小人。所以我觉得, 也是我的经验,注册算法简单一点也无妨,我所有的软件都用一个硬编码的注册码,发现破解时(一般只有那些刚入门的破解者会把这么容易破解的东西拿来眩吆自 已,相反那些高手会对这么简单的注册方式感到是对他们的侮辱)。基本上我的软件一出来就可以找到破解,刚开始时,我只用把注册码改一个字母,那个破解者就 白做了。后来我发现即使到处是破解版,我的收入并不下降反而上升,我也就懒得再改注册码了。有一次我还写信给一个RUSSIAN的破解网站,让他们能不能 把我的破解版的链接指向我的DOWNLOAD的下载链接,好让我的DOWNLOAD下载计数也能因破解版而增加一些,而且我答应无偿提供所有注册码给他 们。结果没音讯。
3. 试用期长一点好还是短一点好?
个人认为:30太长了,7天到10天比较合适。3到5天最好。

Saturday, August 2, 2008

how to spread your share software

青石:我的软件推广成功之路
转载自 IT人网 http://www.iteer.net/modules/doc/article.php?storyid=1722&page=0

[导读]: 本人与大家一样,原来只是一个普通的程序员,靠给软件公司打工谋生。后来感觉这样长期干下去没有什么前途,虽然现在年轻还可以加班加点靠拼身体吃饭,以后 年纪大了怎么办?听说很多人自己单干每年靠共享软件都可以赚几十万,我为什么就不行?仗着自己技术好,并且当时已经有了成熟软件的思路,我就辞职出来加入 共享软件这一行当了。

通过半年多的日夜苦干,软件终于编出来了。由于我觉得自己的软件功能比较新颖,编程的技术也很好,以为只要一发布就会大家抢着注册购买,也可以像那些成名 的共享软件作者一样每月坐拿几万元,结果却是令我想象不到的,在发布后的第一年,只有1个人注册,只得到可怜的几十元。我这下才认识到了软件推广的重要性 — 我们作为技术人员,往往是重技术轻营销,结果是再好的软件也由于无人知晓而只能孤芳自赏。我这时就有意在网上搜索软件推广方面的文章,国内的资料少就到国 外的共享软件论坛去查,另外还结合自己在实际推广中的经验教训不断改进自己的推广技巧,慢慢地在第二年软件推广有了初步起色,拿到了一千多元。接连在共享 软件领域摸爬滚打了几年后,现在终于每月都有近万元入账。虽然比起那些共享大牛们来说这点钱还不足挂齿,但自己认为还算不错了。为了避免程序员们重走像我 当初的很多弯路,现在把自己的经验教训写出来,给大家在软件推广方面一点启示。

第一、 对软件本身的要求。

也许大家会觉得奇怪,不是讲软件怎么推广吗?怎么会讲起软件本身的要求来了呢?
其实一点也不出奇,高楼万丈在于基础是否稳固。没有一个好的软件产品而去空谈什么推广,不要说很少有成功的,即使是推广出去了,客户拿到手之后也会有受骗上当的感觉,退货以及退款,再加上对你的软件的负面宣传会搞得你焦头烂额的。
那么怎么才算是一款好的软件呢?首先你的软件要新颖独特,要有别的软件没有而大家又需要的功能。很多程序员常犯的一个毛病是,他们喜欢从自己的技术出发, 编自己喜欢编的东西,或者干脆就是卖弄自己的编程技术。其实作为用户来说,他们不懂也根本不会关心你的软件中使用了什么先进的编程技术,他们所关心的是这 个软件能给自己带来什么有用的东西。有些程序员没有自己的独特的思路,总是人云亦云,一看到网络上什么软件热门了,马上就进行仿造,现在不是QQ流行吗, 他也跟着编一个聊天软件;不是FlashGet很热门吗,他也随着编一个下载软件。这样的软件能销出去才怪了呢。
在这里我的经验是,如果你不知道编什么样的软件才能好销,你就站在普通电脑用户的角度来考虑问题。要一切从用户观念出发,要从用户的要求入手,只要是用户 需要的功能,那怕软件只有这一个功能,只要别人的软件还没有包含,你在这里就有成功的可能。例如周弈的MP3 CD Maker,功能并不复杂,但大家需要这个功能,而当时的很多流行软件如Nero等并不具有,因此他凭这一点就可以月进上万美金。
还有就是,软件本身必须尽可能完美,也就是没有什么明显的Bug。现在有许多人在软件还没有经过什么测试的情况下就急着发布,结果别人一用到处都是问题, 这样的软件给用户的印象很差,只会给软件造成很大的负面影响。 我的经验是,软件编好后至少要经过两个月的测试。不但是自己要彻底测试,而且要交给你身边的亲戚朋友测试,当然能交给普通的用户测试就更好了。也许你会说 别人会愿意这样做吗?我的经验是只要答应测试完后免费给他们正式版的注册码,他们是很乐意为你测试的。

第二、 软件推广的常用方法

首先,当然是把你的软件发布到大型的软件下载网站,如华军软件园、天空软件站等,至于那些成百个小型的下载网站嘛,就没有必要一个一个发布了。当初我也想 在这些小软件下载站发布,可很多根本就没有发布软件的页面。有的给个Email地址就算不错了(不过我用电子邮件发布软件后也像泥牛入海,杳无音信),有 的干脆只有一个QQ号码。其实据我观察,只要你在华军软件园、天空软件站等发布成功,就会有不少软件下载网站也跟着转载。这样也好,省去了我的不少时间。
其次,是要专门为你的软件建立一个网站。也许你会说,我不是已经把软件发布到其他网站了吗?为什么自己还要费力去做一个网站。原因很简单,别人的网站是别 人的,你自己必须也要专门有个网站来推广,同时这个网站也要负责搜集用户的信息反馈等,另外更重要的是:共享软件重在服务,你还要依靠这个网站来对你的软 件用户提供技术支持等服务。值得特别要提醒的是,你的网站要做得很专业,要使得用户进入你的网站后能产生你们有着强的技术能力的印象。千万不要认为自己是 做软件的,不懂得编网站,就随便制作一个对付了事。我有个朋友,下载某软件试用后曾经想购买正式版,可一进入作者的简陋的网页,就没有了购买的欲望。因为 你的网站做得差,容易使别人联想到你的编程技术以及服务也差。所以说,差的网站不但不能对你的软件起到推广作用,还相反可能把你的潜在客户赶跑。
其实既然你都能够编得出软件,要设计出一个网站也不应该是什么多难的事,关键还是在于你舍不舍得下功夫。如果你实在没有时间学习编写网页,那就花点钱请专 门的网页设计公司帮你制作一个吧。也许你又会说,那我没有钱怎么办。这里,我叫你一个密招(我轻易不会教给别人的),去大型下载网站下载排名TOP 10之内的软件的官方网站中找一个最符合你软件风格的,用Frontpage 把整个网页照搬下来,把文字及图片换成你的,而保留原来网站的布局及CSS样式,这样一个专业的软件推广网站就诞生了。这一招我在当初也使用过,不过后来 自己学习了网站设计方面的知识后,就不断加以改进完善,早已经比原来的别人的网站都专业多了。
网站有了之后,也不是就万事大吉了,网站本身也有个推广的问题。要根据你的软件,设计一些关键字,把这些关键字用在你的网站的标题以及网站内容之中,使得 别人在用这些关键字在GOOGLE等搜索引擎上搜索时,能很快找到你的网站。当然,网站的推广不是我们这里要讨论的话题,你在网络上应该能方便地找到这些 资料。如果你能把有关你软件的关键字做到GOOGLE搜索结果的第一页,那么恭喜你,你离成功不远了。
再次,是有关软件的广告宣传问题。有人会说了,那很简单,找一个流量大的网站如新浪、网易,在上面打广告宣传不就得了。是啊,如果你每月能付得起几万元的 广告费这样做当然无可厚非。不过如果你每月有几万元的收入,我看也就用不着靠共享软件吃饭了。其实打广告是很有学问的,不是单单看网站的流量大小,而是要 针对你的软件的潜在用户的情况来定。关键是你要仔细分析来该网站的浏览者是什么样的人,如果与你软件的潜在用户群相同,及时网站的流量不是特别大,你也可 以在上面打广告。这样你花的钱不多,但正中你的目标用户,广告的效果是很好的。我有个行业应用软件,一开始在一般的软件下载站打广告,但发现效果并不好, 因为这些用户只是来寻找一些常用系统工具软件的,对我的软件并不感兴趣。后来我发现有个软件商务网http://www.bizsofts.com 的浏览者与我软件的用户群相吻合,就在这个网站上打广告了。广告是文字类型的,在网站的“热销软件”栏目中,由于该栏目出现在软件信息的所有的页面中,所 以浏览量也不少。最主要的是广告费不贵,每月才100元,广告发布后效果很不错。现在也有人在做GOOGLE ADWORDS文字广告,不过我还没有试过。

第三、 软件如何推向海外

你的软件已经在国内推广了,还要不要走向海外?回答是肯定的。由于国内存在对盗版解密等活动打击不力的问题,你辛辛苦苦工作出来的劳动成果,给别人破解后 可能全部付诸东流。所以在国内防止软件被破解是一个重大的课题,对付破解的问题我留到下一点再仔细讲。而在国外,由于对于盗版以及破解打击的力度较大,另 外用户的正版意识普遍比国内要高,所以付钱注册购买的人也相对较多。所以你的软件在国外推广是很有必要的。就拿我来说,现在软件收入的大部分就是来自海外 用户。

在海外推广软件的第一步也与国内相类似,也要把软件提交到大型的软件下载网站。国外的大型下载网站主要有两个:一个是www.download.com ,另一个是 www.tucows.com 。与国内软件站不同的是,在download.com 上发布软件是要收费的,每提交一次要收79美金,UPDATE一次也要收79美金。如果你真想把软件推向海外的话,这笔钱是不能省的。因为 download.com 实在是太热了,名符其实是全球第一的软件下载站,如果不在这里发布,你会损失一大半的软件用户。另一个软件下载网站 tucows.com 虽然号称能免费发布,其实你如果真这样做的话,你会大失所望的。我有个软件,一月份就向 tucows.com 提交了,可是到六月份还没有发布,进入作者管理界面一查,是在 8340个待审查的软件中排第 1367 位,可能一两年后才有可能发布。后来干脆花了 59美元“插队费”,结果没过两天就发布了。
另外,在国外一般都是找一家代理公司帮你收钱,每月定期寄支票给你。代理行业在国外已经是一个很成熟的行业了,不用担心代理会不给钱你。比较大一点的代理有:www.RegNow.com 设施最完备的代理,需要开户费。www.Qwerks.com 免费开户,据说信誉极好。还有www.Shareit.com 也是一家不错的软件代理公司。 还有www.RegSoft.com 不过据说反映一般。
除了把软件发布到这些下载或代理网站之外,你自己也要相应有一个英文网站。如果你的英文不是特别好的话,奉劝你找一个英语特别棒的朋友或干脆花钱请专业的英语专家翻译一遍再发布你的网站,否则你的网站不但起不到推广作用,还会给国外用户留下很差的印象。
要想软件推向海外,除了以上介绍的方法之外,重视国外用户的反馈信息以及搞好服务也是特别重要的。我有个软件发布在 download.com 后,大约过了一个月看到上面有一个评论,把我的软件评价为最差,并且加了一大堆评语:说他虽然是个捷克人,英语并不是他的母语,却也发现了我软件中的英语 是terrible English ,充满了错拼的单词,不存在的单词等;另外软件打开以后,界面没有操作提示,根本不知怎么使用,功能也不完善;在1024 x 768的分辨率下无法满屏显示等。总之把我的软件贬得一无是处,用他的话来说是: Terrible, just terrible 。一开始,我也觉得很灰心丧气,但后来我仔细一想,何不趁此改正Bug,并升级软件呢。由于在download.com中找不到评价者的联系方式,我就在 软件的注册者信息中找到他的Email地址,把我改正过后的软件电邮给他,并诚恳地请他继续指正我的错误。果然不久他就回复了我的EMAIL,在邮件中他 一条一条地指出了我的其他错误。我借此机会进一步更正错误并把软件升级到了2.0 ,使我的软件上了一个大台阶。总之,重视用户对你软件的评价及批评,积极面对用户的意见,这样即使是坏事也能变成好事。
另外在国外,是会遇到别人购买你的软件后觉得不满意而要求退款的。PayPal以及其他的付款方式都有几十天内不满意可以要求退款的条文。对于要求退款的 用户,他如果坚持要退是一定可以退的。所以一般都是根据用户要求直接就退给他,并告诉他Keep my software as a gift,反正他已拿到注册码了,你做什么都没用,不如来个顺水人情。即使他退完款后又来信要求你提供技术服务,你也要尽可能帮助他。能做到这点你的服务 才能算真正到家了。

第四、 如何应对软件的破解

在国内推广软件,你要面对的最大问题莫过于软件被破解了。很多软件作者反映说,原来软件在被破解前交费注册的人还不少,但被破解后收入就直线下降,连成本都收不回来。您想,有了免费的东西人们还交那个钱干什么?
在这里,我借鉴了一个软件作者的防破解经验:发行1.0版时2.0版已经写的差不多的。发行1.0版时要把1.0版的防破解或者注册算法写的简单些等着别 人去破解。一但出现1.0的破解,等待几周,这几周的时间足以使网上1.0的破解版遍天下。然后,分析破解过程更改2.0版算法(层层加密,复杂再复 杂),虽无法根除破解但可以浪费破解者的时间和耐力!一般情况下,在网上一搜你的软件已经有破解版了(1.0的)新的破解者很少会再去破解,何况2.0版 本更复杂些。我的一个软件用了此法,推出一月后被破解组织破解,公开破解过程及注册算法,并做成破解教程。其实破解从某种意义上说是帮我宣传了软件。我在 一个月后推出早已经写好的新版本,还注册成了“特别版”以迷惑想要破解版的人。使用上述方法后至少在我更新了几次软件后的今天仍没出现破解。但在网上搜破 解版、特别版、注册版到处都是,可没一个是真的。其实一些破解高手只是想试探自己的能力,破解一个软件后,一般会把目标定在下一个软件上。不过如果你的软 件成为人手必备的工具,此法怕是不灵了。
另外,从技术上讲也有一些防破解的方法。假设你的注册部分有300行,你可以分成30个inline函数调用(一定要inline),func1(), func2()... func30(). 将他们随意放到程序的各个部分,一定不能放在一起。不要用Memcpy等常用系统调用拷贝注册码,尽可能自己写,像Memcpy很好写,性能差点无所谓。 经过编译后inline函数展开,注册部分和其他代码混在一起,他要写出注册机就很困难,因为要向在几十万甚至上百万汇编代码里找出有用的注册部分那简直 就像是在大海里捞针。另外注册码也不要放在一起,假设你的注册码是12位,千万不要用一个12位的数组放注册码,你可以在程序的不同位置定义12个全局字 符变量,每个放一位,这样注册码在内存就不连续了。最好再加密处理一下(简单的字符异或就可以),验证时再解密。只要破解者找不到你验证结束的地方,暴力 和Loader破解也没有可能。很重要的一点是不要用连续内存保存验证用到的变量,尽量将用到的验证临时变量分散定义在程序的不同处,再在验证中,不断转 移一些值到其他变量中,对付暴力和Loader会比较有效。没有必要用复杂的加密算法,更容易成为追踪的目标。只要你将注册部分隐藏的足够好,也没有漏 洞,你花1天写的加密算法,破解者可能会花100-1000倍的时间破解。大部分人都会放弃。你将注册做在一起,就像将你的财宝放在现代保险箱里,虽然非 常坚固难以解密,对于开锁高手两分钟就打开了。对于一些比较专业的破解者采用上面的方法也是很有效的但是,还是要避免一些低级失误例如:不要在内存中直接 出现注册码和明显的注册码比较部分不要给用户太多的有关注册验证的信息,也不要接收到注册码后立刻就进行比较。在软件的不同功能处实现验证时的好处还有就 是不会立刻执行到验证代码注册码,可以分多次验证,也可以分成几部分验证,还可以分成几层验证验证时,可以尽量多执行一些无用的操作,加上一些象递归之类 难于调试追踪的代码,但在其中要穿插实现软件功能的代码,否则人家直接就跳了过去。反正就是越不引人注意越好,亦即越乱越好。
其实要想彻底防止破解也是不现实的,除了研究一下破解方法,在发布前加壳外,并采用以上所说的方法外,不断升级程序也是比较好的方法。
总之,推广软件对于搞惯了技术的软件作者来说一开始会走一些弯路,但只要不断学习成功者的经验,不断吸取自己失败的教训,你也会成功的。最后,祝大家个个都成为共享高手。

wifi tools

第一步, 确定是否有热点(无线网卡没有限制)
工具1. Wifi device scanner:--NetStumbler 0.40, 它支持所有的wireless card, 可以探测出附近的所有热点, 但因为好几年没有新版本, 所以无法用它来准确探知热点的加密的方式
工具2. Wifi Hopper, 这是一个商业软件, 可以免费用15天, 它可以帮助我们获取热点的加密方式

第二步, 抓取wifi和合法网卡的握手包
并不是所有的网络都能用来抓包, 我的TP-Link TL-WN620g(USB无线网卡)就不能用. 支持的网卡有: http://www.wildpackets.com/support/downloads/drivers, 从网上查到,常用可支持网卡:

  • ATHEROS 5212A、BROADCOM 430XMP、Cisco AIR-CB21AG、NEC WL54SC
  • TP-LINK系列:前两个是PCI卡(TL-WN550G,TL-WN551G), 这两个是笔记本PCMCIA卡( TL-WN510G,TLWN610G) TL-WN650G TL-WN65G
  • 芯片系列:AR5001, AR5002, AR5004, AR5005 and AR5006
工具1. WinAircrackPack(俺下载有, http://www.anxz.com)--这个工具应该所包含破解wifi所需的所有工具, include all tools for crack wifi router such as airodump.exe,WinAircrack.exe, airdecap.exe, 另外还包含了大名鼎鼎的NetStumbler
工具2. OmniPeek Personal, 这个工具可以抓包,

第三步, 破解
工具1. WinAircrackPack (俺下载有, http://www.anxz.com)
工具2. Cowpatty for win32,
工具3. 暴力破解字典下载 www.lastbit.com/dict.asp


教程:
1. 中文 http://www.cooaoo.com/article.asp?id=79
2. 中文 http://hi.baidu.com/lktsllj/blog
3. 网站 http://wirelessdefence.org/Contents/coWPAtty_win32.htm

Friday, August 1, 2008

how to get your WAN IP

我的软件, 需要将使用者的IP反馈给我. 接下来的问题是怎样获得使用者的IP地址呢?
google了一下后发现, nirsoft网站上有一个软件ipnetinfo,
同时也可以访问网页http://www.nirsoft.net/show_my_ip_address.php 来获得IP地址.
这个网站的速度很快. 返回的title中包含你的IP地址, Title的格式是:
Your IP address is 116.227.173.137
从上面字符串中, 很容易获得IP.