互联网软件@产业

JasperZhu's Tech Web
posts - 9, comments - 12, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2012年3月21日

一,在主体和镜像服务器两台机器分别做如下设置,

@新建隶属administrators组的用户,比如sqladmin

@在服务中将MSSqlserver服务改为用sqladmin登陆启动,重启服务;

@一个相同用户名和密码的SQL登陆账号,比如sa

@在防火墙(比如Windows防火墙)中开放端口,14335022.

 

二、备份和还原

@将主体服务器数据库完整备份,事务日志备份;

@如果日志太大在备份前收缩一下;

@在镜像服务器上新建同名数据库,用主体备份还原,然后日志还原,两次还原均需在“选项”中选择“不对数据库执行任何操作,不回滚未提交的事务

 

三、在主体服务器上配置镜像:

@先进行“配置安全性“,选择好主体和镜像服务器(用前面配置的相同的sql账号登陆)后,服务账户设置时,主体和镜像均填写前面配置的相同的sql账号;

@上一步配置完成,不要立即开始镜像,需要设置主题服务器和镜像服务器为

TCP://[ip地址]:5022,然后开始镜像。

 

其他情况:

@如果版本不允许镜像:

DBCC TRACEON(1400,-1)

@失败后删除端点,再重试:

select * from sys.endpoints

drop endpoint [端点名]

posted @ 2012-03-21 14:26 JasperZhu 阅读(1066) 评论(1) 编辑

2011年12月20日

(一)有效进行需求调研的方法

1、明确整体思路

软件项目一般会包含客户的很多种需求,涉及客户的多方面业务和多个部门,因此需求调研一定要有一个明确的思路,从大处着眼,然后逐渐细化,直到详细的需求细节。比如,首 先是客户的整体要求和目标,然后是各个部门的各种业务项目及主要的业务流程,再到业务过程的每一个单据,每一条记录,以及表现形式等等。需求纷繁芜杂,在 需求调用的过程中要经常查看项目规格说明书,明确项目最初提出的目标和范围,主要是为用户解决什么样的问题,这样才能从众多的需求中分清主次,提取用户核心的、主要的业务。

2进行充分准备

无论是面对面的需求会议,还是电话沟通,都应该注意在交流之前尽量取得更 多的信息以准备。每次需求会议前先根据当前掌握的信息和需求列出问题提纲,这样在调研的时候才能问到点上,既提高效率,又增加用户对我们专业素养的信任。 不仅我们要充分准备,也可以先让用户提供一份用户自己写的书面需求,事先做一个较明晰的阐述。另外,还要提醒用户必要的材料和数据准备,这些准备将有助于会议的进行,以免用户在会议开始后再找材料查资料,中断会议的进行,影响调研的效果。

3区分调研对象

对不同的调研对象,询问和讨论的主题和内容应注意区分:一般对于用户的高层领导,不要讨论细节问题,要讨论高层的业务需求,讨论目标、方向等问题,另外要把握好时间,不宜过长;对于用户的业务领导,要多询问一些业务流程方面的问题,他们在这方面最熟悉并有见解,一般来说,软件的大部分需求都是这个层次的人员提出的,和这个层次的人员要注意关系上的协调;对于具体操作人员,可以多询问一些对方的操作习惯、业务处理的细节等问题;对于系统管理员,则可以讨论一些技术上的问题,比如,通过其了解客户公司的软硬件及网络环境,用户的操作水平等。

4详细明确的记录

记录包括会议记录和需求记录。每次沟通都应有详细的书面记录。这是形成需求分析结果的基础和下次需求调研的前提。如果不这样做,结束调研的时候只有一个模糊的印象,需求分析的结果仍然遥不可及,应力争每次需求会议都使需求分析向前推进一个阶段。讨论结束前将记录的文档向客户确认一下,让客户进行评论和更正,以保证没有错误和歧义。记录使用的语言须是用户熟悉的词汇,要使用明确肯定性语句,不要使用模糊的说法。比如,不能描述为一天产生的POS业务流水很多,应该明确到10的3次方的数量级,不能仅记录为要求日结账要快,应该明确到在200秒内完成

5多思考多提问

软件需求是分层次的,用户对我们描述的往往只是用户需求层次的表面问题,只了解这些是不够的,还要理解用户为什么要提出这样的需求,做到知其然又知其所以然。作为需求分析员,必须要深入理解客户的业务逻辑和需求目的。在大多数的软件系统中,最终用户可能都不清楚他的需求是什么。如果只知道用户提出的要求,而不知道其为什么有这个要求,那么很可能会误入歧途,获取不了用户的真正需求。比如针对上述会员多倍积分需求,用户要求在POS断网的时候也能实时执行。事实上如果不采用无线通讯这根本不可能,采用无线成本太高。询问原因后,才知道实际上用户是担心数据丢失,我们只要保证数据不丢失,在网络连接正常后再执行就可以了。

(二)容易忽视的事项

1、确定权利与义务

只有当双方参与者都明白促成当前信息管理系统建设的成功,自己需要做什么,合作方需要做什么时,才能建立起一种好的合作关系。为了需求调研的有效进行,可以在开始之前向客户明确其需求权利和应尽义务。可通过需求权利书规定客户在项目需求调研过程中的合理要求,这些权利同时对应着分析人员和开发人员的义务而通过需求义务书规定客户在需求过程中应承担的义务,当然这些也可以认为是分析人员和开发人员的权利。

2、搜集用户资料

很多时候用户对自己需求的语言描述带有随意性和模糊性,又加上思维角度的不同,往往会造成我们理解上的偏差而企业中的文档资料则真实反应了用户的业务。它们包括,打印出来的各种单据、报表,企业的业务管理规则、制度,内外部考核办法等。这些资料将有助于直观具体高效的获取需求。比如,可以询问用户是否已经制定出多倍积分的书面草案,有没有相关的会员积分政策文档作为参考等。

3到工作现场考察

对于难于理解的用户业务或性能方面的需求,一定要进行操作现场的实地考察,观察正在工作的用户,亲身感受实际业务流程、了解操作情况。现场考察是理解用户需求的最好的方式。主观推断往往和实际的业务操作有很大的出入。比如,有些开发人员不重视快捷键的设置,如果观察超市POS终端操作员的工作,将会明白这非常重要。再如,离岸BPO用来提交业务数据的软件系统对网路传输的速度、操作响应的速度等有非常高的要求,否则操作员难以忍受,并且大大影响工作效率。如果只实现了功能,而不能达到性能要求则远远没有满足客户的需求。

4非功能性需求

非功能性需求包括,客户现有的服务器资源、网络资源及环境、硬件条件、操作系统、操作人员水平、由用户的工作特点决定的对性能的特殊要求等。如果不事先了解这些情况,或事先告知客户进行必要的资源环境准备,可能会导致最终软件无法部署,操作人员无法使用等情况。比如用户服务器用的是免费的Linux操作系统,而我们开发的软件只能在收费的Windows操作系统上运行,将直接宣告项目的阶段性失败。

5旧版本,相关软件系统和接口

如果项目是对原有的软件重新开发或升级,那么一定要仔细研究旧的软件系统的功能,并询问客户旧系统不能满足当前需求的原因,以期在新的系统中得以改善和提高,同时系统中优秀的功能特点要予以保留。如果用户当前已经使用了其他系统,一定要了解这些系统,看有没有重复开发,或功能不 足的补充。还应注意相关系统中的数据编码规范、操作规范,用户操作界面,以便于用户对新系统的适应、培训和维护。如果用户要求软件和现有的系统进行数据交 互或经过调研发现需要数据交互,那么一定要弄清数据接口的规范、接口双方的通信方式、数据存储方式、采用的数据库系统、数据结构等。比如,增加会员多倍积分模块,就要考虑数据接口,通信方式,界面一致性,尤其是POS端快捷键不能冲突等多个方面。

posted @ 2011-12-20 14:41 JasperZhu 阅读(282) 评论(0) 编辑

(一)软件需求分析的定义

IEEE 软件工程标准中将需求分析(Requirement Analysis)定义为:(1)用户为了解决问题或达到某些目标所需的条件或权能 (Capability) 。(2)系统或部件为了满足合同、标准、规范或其它正式规定文档所规定的要求而需要具备的条件或权能。(3)反映上面 (1) (2) 所描述的条件或权能的文档化表述。

需求分析是解决“做什么”的问题,是定义的范围和尺度,是将用户要求我们做什么,变成我们书面承诺为用户做什么的过程。需求分析结果应确保所有的风险承担者都明白其含义,并形成文档,从而作为下一步工作的基础。概括来说,需求分析包括三个要素需求、分析和文档。需求分析员是指负责收集分析客户需求并编写文档,以及负责客户与开发者之间沟通的人。

(二)软件需求的三个层次

软件需求一般分为三个层次:

1业务需求:反映了组织或客户Customer对系统、产品高层次的目标要求。业务需求通常来自项目投资、实际用户的管理者产品策划部门。它们在项目视图与范围文档中予以说明,这些文档通常作为合同的附件。

2用户需求:描述了用户User使用产品必须要完成的任务。它们一般使用用例文档或者方案提纲Scenario予以说明这些文档通常作为需求调研报告。

3功能需求:定义了设计开发人员必须实现的软件功能,使得用户能够通过软件来完成他们的任务,从而也满足了业务需求,用户需求和功能需求。其中也包括非功能性需求,如产品必须遵从的标准、规范、性能要求等。它们一般在软件需求规格说明Software Requirements Specification SRS)中说明

在这里用一个关于超市会员多倍积分的例子来说明需求分析的三个层次:

业务需求:为了提高会员的忠诚度,使会员在其生日及重大节日当天消费可以得到多倍的会员积分。

用户需求:为实现业务需求,需要首先制定会员多倍积分规则,然后将该规则宣传给广大会员;通过在系统中设置会员的多倍积分方案,在会员刷卡消费的时候,系统根据会员资料信息自动执行多倍积分方案;用户要求在POS断网的时候也能执行。

功能需求:根据用户需求,系统中应该实现的功能是:一个设置会员多倍积分规则的界面;利用通讯机制将会员积分方案同步到前台POS;前台POS在会员缴款时自动计算积分;将积分计算结果同步到后台数据库中。相关的非功能需求:用户应该可以自定义通讯的间隔时间(范围:1分到24小时)1000笔销售数据的通讯时间不应该超过2分钟;界面易用性等

(三)需求分析在信息管理软件开发中的重要地位

需求分析是软件工程中最重要的阶段。软件项目的生命周期一般分为计划阶段(项目立项、计划)开发阶段(需求分析、概要设计、详细设计、编码、测试维护阶段(实施投产维护)。需求分析作为项目开发阶段的开端,具有非常重要的作用,可以说是软件工程的真正开始。需求分析是所有软件成功要素发挥作用的前提,它的好坏直接影响着后面的各个阶段,关系着软件的成败。软件项目中百分之四十至百分之六十的问题都是在需求分析阶段留下的隐患 。在软件工程的历史中,很长时间里人们认为需求分析是整个软件工程中最简单的一个步骤,但在实践中人们才越来越认识到它是整个软件生命周期中最关键的一个过程。优秀的信息管理软件产品必须建立在优秀的需求基础之上

需求分析阶段又是在软件工程中所有的风险承担者都关注的阶段。这些风险承担者包括客户、用户、商务业务人员、需求分析员、设计人员、编码人员、测试人员、用户文档编写者、项目经理等。这部分工作如果处理不好,可能导致需求误解、开发挫折、项目延期、甚至纠纷和失败;若处理好了,能开发出很出色的项目,帮助客户实现价值,项目团队成员也有成就感。

posted @ 2011-12-20 14:35 JasperZhu 阅读(707) 评论(0) 编辑

2011年3月28日

FlashPaper是将其他格式(如txt,doc,pdf,jpg,xls)的文档转化为swf文件的工具;

这是在web应用程序/网站中调用FlashPaper.exe转化文件的详细可重复配置。

在此之前从网上找了很多FlashPaper的配置,几乎都没有提出完整的可重复配置的方法。

该配置是在win server 2003,IIS6多次测试成功的,其他环境是否可行未知。

 

基本软件
1.    FlashPaper2.2程序目录
2.    安装Flash player  10.2.152.32 (activex和plugin两个安装程序)
3.    初始化:运行FlashPaper2.2程序目录中的“初始化.bat”
4.    如果转pdf须安装Adobe Reader 9.1或9.2
5.    如果转doc须安装Word 2007

配置方法
1.    检查“Print Spooler”进程开启;
2.    检查“Macromedia FlashPaper”打印机安装正确;
3.    通过本地用户和组管理,将Network service用户(须查找该用户)添加到administrators组中, 执行命令iisrset重启iis;
4.    Word必须是2007,2003需要在DCOM中设置权限,并且不一定能转换成功;

如果仍有问题可能需检查:
1.    转换文档读取和保存的文件夹的读写权限;
2.    打印机权限;
3.    Aspnet用户添加到读写权限;
4.    远程打开word等软件的权限;

关于模板
Flashpaper安装目录下有个Interface文件夹,里边的DefaultViewer2.swf就是模板文件。可反编译DefaultViewer2.swf。生成新的DefaultViewer.swf,替换原来的。比如去掉某个功能,去掉或替换logo等;

测试方法
1.    首先保证将文件直接拖到FlashPrinter.exe可以正确转化,此时可确定FlashPaper本身的配置已经正确;
2.    .txt,.doc,.pdf要分别测试,一个格式的能转换并不一定其他格式可以,与相应用到的应用程序是否安装及访问权限有关

posted @ 2011-03-28 09:58 JasperZhu 阅读(3527) 评论(10) 编辑

2010年11月11日

很多公司或产品开发者一开始就想做一个很大的系统或平台,什么都想做,产品铺的很大,结果通常都折腾的够呛,最后死的很惨。

让我们看看周鸿祎产品经理是怎么做产品的。从2006年7月到现在,仅四年多的时间,360从一个好的切入点--安全卫士入手,精准定位,迅速发展,壮大 后,逐步丰富功能,然后扩展平台,丰富产品线,直到跨界发展。目前已成为仅次于QQ的第二大客户端。360系列软件还创造了中国软件的快速推广记录。

下面是我整理的360产品发展记录,仔细看就能明白360产品是怎么从一到多,从单一操作系统到多个操作系统(我一直使用安全卫士,最初仅支持xp系 统),从安全到杀毒,从PC到手机逐步扩大自己的产品线的。单从产品的角度,360的成功值得我们深入思考学习。当然360的成功有很多其他的因素,关于 360公司的争议也很大,不在本文关注之内,本文只关注360产品的发展。

第一阶段,做精做大安全卫士
2006年7月,360安全卫士正式对外发布。(雅虎之后,周又找到了新的机会,一个新的商业模式开始了)
2007年4月,360安全卫士发布个性化定制版。(不到一年已是安全辅助类软件国内第一)
2007年6月,360安全卫士推出木马程序查杀功能。(基础打好,向杀毒迈进的前奏)
2007年7月,发布360保险箱。保护QQ、网银、网游等软件的账号。(铺垫)
2007年8月22日,奇虎公司CEO周鸿祎称,奇虎绝对不是杀毒软件公司,近期也不会转向做杀毒软件,以后会同瑞星、卡巴斯基等杀毒软件厂商进行深度合作。(商人诈术,先说不做,再做,给自己成长的空间)
2007年10月,360安全卫士用户量超过瑞星、金山,成为国内用户量最大的安全软件。

第二阶段,借安全进军杀毒浏览器领域
2008年5月,360安全卫士发布安全浏览器。(学有余力,做附加题)
2008年7月,360公司顺应安全已成为网络基础服务这一潮流,与国际知名杀毒厂商合作推出了免费的杀毒软件——360杀毒。(终于开做杀毒,还遮遮掩掩)
2009年1月,360安全卫士5.0版正式发布。(核心产品不断更新中)
2009年6月,360安全中心推出“软件管家”。(附属产品)
2009年7月,360安全中心推出360安全浏览器3.0版。(第二个核心产品)
2009年9月,360安全卫士6.0版发布,同步推出具有里程碑意义的云查杀引擎。(强化自己领域内的权威)
2009年10月,360安全中心高调发布永久免费的360杀毒1.0正式版。(已经壮大,具备格局江湖的力量,终于以真面目示人)
2009年12月27日,据国内权威数据监测机构CNZZ出具的一份关于浏览器用户情况的报告显示,360安全浏览器市场份额达到5.75%,超越傲游和腾讯TT,位居国产浏览器榜首。
2010年1月18日,360杀毒的用户规模突破1亿。(借助安全卫士,发展迅猛)

第三阶段,进军手机安全

2010年1月21日,360收购国内第二大手机安全厂商信安易。(通过收购,进军手机平台)
2010年3月4日,360公司宣布正式推出又一款永久免费的安全软件——360手机卫士V1.0版。(第三条产品线--手机平台)
2010年5月11日,360旗下360手机卫士与信安易的总用户市场份额突破50%,占据手机安全市场的半壁江山。

第四阶段,迅速扩张攻城略地
2010年5月21日,360安全卫士正式发布全球首款“木马防火墙”。
2010年6月25日,360杀毒的用户规模突破2亿,市场份额达到一半以上,遥遥领先于其它杀毒产品。(蓄谋已久的野心,终于要爆发了)
2010年9月27日,360隐私保护器。(是360、QQ大战前期重兵布阵)
2010年10月29日,360推出“扣扣保镖”。(对QQ有针对性的产品,这是重型武器,战争时期的临时产品,目前已下线。扣扣保镖创造了72小时下载量突破千万的软件推广记录)

最后,360的巨大野心通过3Q之战我们已经看的出来,也许这个战略,这一天,周在四年前就想到了,但每一步都走的恰到好处,每个时机都把握的很到位。360推出即时通讯软件也许只是时间问题,因为360丰富的产品经验和作为第二大客户端的用户基础已经具备这样的条件。

posted @ 2010-11-11 22:25 JasperZhu 阅读(284) 评论(1) 编辑

查找某个关键词在长字符串中出现的次数:

思路,只要将字符替一下,然后看长度变化就行了,不用拆分,拆分太麻烦。

代码
 1 CREATE function [dbo].[fuc_Common_FindSubStrCount]
 2 (
 3     @StringAll NVARCHAR(2000),
 4     @Keyword NVARCHAR(100)
 5 )
 6 
 7 RETURNS int
 8 /*
 9 查找某个关键词在长字符串中出现的次数
10 ----by JasperZhu 20101111
11 */
12 AS
13 BEGIN
14     declare @tempAll NVARCHAR(2500)
15     set @tempAll=@StringAll
16     set @tempAll=replace(@StringAll,'_','')--必须的
17     set @tempAll=replace(@StringAll,@Keyword,@Keyword+'_')
18     RETURN len(@tempAll)-len(@StringAll)
19 END

这个函数的用途是在关键字搜索时,按关键字出现的频率排序,如,

select SID,Sname,x=dbo.fuc_Common_FindSubStrCount(sName+sSummary+otherFields,@sKeyWord) from yourTable
where 1=1
order by x desc

另外,当用like查找匹配时,这样还比较省劲一点,

select SID,Sname 
from yourTable
where sName+sSummary+otherFields like '%'+@sKeyWord+'%'


 

 

 

posted @ 2010-11-11 17:11 JasperZhu 阅读(206) 评论(0) 编辑

2010年11月8日

本地是指:访问来自本机(127.0.0.1)或IP地址与服务器的相同,或与服务器在同一个局域网内。
一.首先用HttpRequest.IsLocal 属性。如果发出请求方的 IP 地址为 127.0.0.1,或者,如果请求的 IP 地址与服务器的 IP 地址相同,IsLocal 属性就会返回 true。
二.然后,将IP转化为float值,看是否在局域网保留IP的值的范围内。
三类局域网保留IP段:
Class A 10.0.0.0-10.255.255.255
Class B 172.16.0.0-172.31.255.255
Class C 192.168.0.0-192.168.255.255
计算出的值范围:
127.0.0.1 – 值 2130706432
10.0.0.0-10.255.255.255   值范围 167772160 -- 184549375
172.16.0.0-172.31.255.255   值范围 2886729728 – 2887778303
192.168.0.0-192.168.255.255   值范围 3232235520 – 3232301055

IP值计算方法:

IP分为4段后,用256 ^ (4 - i - 1),四个值相加。数据类型应该为double,single类型当值大时精度不够。

代码

代码
        /// <summary>
        
/// 根据一个IPV4地址生成一个IP值,如果地址错误,返回-1
        
/// 需要用double,如果用single后面的位数不准确,变成0了
        
/// by JasperZhu 20101108
        
/// </summary>
        
/// <param name="sIPAddress"></param>
        
/// <returns></returns>
        
public static double GetIPFloatValue(string sIPAddress)
        {
            
double fIPValue = -1;

            
if (sIPAddress.Trim() == string.Empty) return -1;

            string
[] arrIPSec = sIPAddress.Split('.');

            
if (arrIPSec.Length != 4)
            {
                
return -1;
            }
            
else
            {
                
for (int i = 0; i < arrIPSec.Length; i++)
                {
                    
int nowIPSec = -1;
                    try { nowIPSec 
= Convert.ToInt16(arrIPSec[i]); }
                    catch { }
                    
if (nowIPSec != -1)
                    {
                        fIPValue 
+= nowIPSec * System.Math.Pow(256, (4 - i - 1)); //用表达式(256 ^ (4 - i - 1))的结果是错的; 
                    }
                    
else
                    {
                        
return -1;
                    }
                }

                
return fIPValue;
            }
        }

注意:C#中不支持直接用幂符号(^)计算表达式,应该用System.Math.Pow(x,y),如果强用计算出的是错误值。

另外,在SQL中也不支持幂符号(^)计算表达式,应该用power(x,y)。

代码
--error result
select 61*(256^3)+50*(256^2)+136*256+182
--1026721974
select 61*(power(256,3))+50*power(256,2)+136*256+182 
--值较大时
select (cast(192 as float)*power(256,3+168*power(256,2)+255*256+255)


 

posted @ 2010-11-08 17:39 JasperZhu 阅读(451) 评论(0) 编辑

在SQL中通常Order by是这样用的:

普通列排序

SELECT LastName, FirstName FROM Person.Person
WHERE 1=1
ORDER BY FirstName ASC, LastName DESC ;

计算列排序

SELECT SID, convert(varchar(10),RequestTime,120as myTime FROM Site_Visit_Detail
WHERE 1=1
ORDER BY myTime DESC ;


实际上还有很多更灵活,更实用的用法,在实际的需求中会经常遇到,如:

在order by 中使用Case

select * from YourTable
order by case At_Id when 102 then Art_Id when 101 then Art_Order end desc

在order by 中使用Case—9.0及以后的版本. 可以用作在存储过程中将排序字段作为传入的参数

declare @orderby varchar(100)
set @orderby='Art_Name'
SELECT ROW_NUMBER() OVER (ORDER BY (case @orderby when 'Art_Name' then Art_Name enddesc, Art_Order)AS Row,* 
from
(
    
select Art_ID,Art_Name,Art_Source,Art_Order
    
from v_Article_Show
    
where art_id>3000
as myTempTable1

将搜索结果按指定的字段值,如ID,顺序呈现

select * from article
where art_id in (106,102,103,104,105)
order by charindex(rtrim(art_id),'106,104,105,103,102')

 

posted @ 2010-11-08 15:48 JasperZhu 阅读(921) 评论(0) 编辑

2010年11月4日

摘要: 看到很多朋友费很多劲写的分页存储过程,也出来分享一下,其实可以很简单。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1createprocedure[dbo].[sp_GetDataList_Pager]2(3@pagesizeint,--每页大...阅读全文

posted @ 2010-11-04 17:20 JasperZhu 阅读(20) 评论(0) 编辑