1
import
java.io.BufferedReader;
2
import
java.io.InputStreamReader;
3
import
java.security.MessageDigest;
4
5
import
sun.misc.BASE64Decoder;
6
import
sun.misc.BASE64Encoder;
7
8
public
class
ConvertNounce
{
9
10
//
Digest = H(B64(H(username:password)):nonce)
11
//
b1=B64(H(username:password));
12
//
13
//
14
/** */
/**
15
*
@param
args
16
*/
17
public
static
void
main(String[] args)
throws
Exception
{
18
19
20
21
//
if(args.length!=3) throw new Exception("args is wrong ,there is must by three args :username password nextNounce");
22
23
InputStreamReader reader
=
new
InputStreamReader(System.in);
24
BufferedReader input
=
new
BufferedReader(reader);
25
26
27
System.out.println(
"
input username:
"
);
28
String username
=
input.readLine();
29
System.out.println(
"
input password:
"
);
30
String pwd
=
input.readLine();
31
System.out.println(
"
input nextNounce:
"
);
32
33
String serverNounce
=
input.readLine();
34
String clientNounce
=
null
;
35
36
System.out.println(
""
);
37
38
System.out.println(
"
userName=
"
+
username);
39
System.out.println(
"
password=
"
+
pwd);
40
System.out.println(
"
nextNounce=
"
+
serverNounce);
41
byte
[] b1
=
calculateDigestAndEcode64(username, pwd);
42
43
//
System.out.println("b1="+new String(b1));
44
45
//
server 下来的nounce一定要先做B64的解码,否则算出来的结果对不上
46
serverNounce
=
new
String(
new
BASE64Decoder().decodeBuffer(serverNounce));
47
48
//
System.out.println(serverNounce);
49
50
byte
[] bserverNounce
=
serverNounce.getBytes();
51
52
byte
[] buf
=
new
byte
[b1.length
+
1
+
bserverNounce.length];
53
54
System.arraycopy(b1,
0
, buf,
0
, b1.length);
55
56
buf[b1.length]
=
(
byte
)
'
:
'
;
57
System.arraycopy(bserverNounce,
0
, buf, b1.length
+
1
,
58
bserverNounce.length);
59
MessageDigest md
=
MessageDigest.getInstance(
"
MD5
"
);
60
61
//
System.out.println(new String(buf));
62
63
byte
[] digest
=
md.digest(buf);
64
65
//
System.out.println(new String(digest));
66
67
clientNounce
=
new
BASE64Encoder().encode(digest);
68
System.out.println(
""
);
69
System.out.println(
"
result Nounce=
"
+
clientNounce);
70
73
}
74
75
public
static
byte
[] calculateDigestAndEcode64(String username,
76
String password)
throws
Exception
{
77
78
MessageDigest md
=
MessageDigest.getInstance(
"
MD5
"
);
79
String cred
=
""
;
80
if
(username
!=
null
)
{
81
cred
=
username.trim();
82
}
83
cred
+=
"
:
"
;
84
if
(password
!=
null
)
{
85
cred
+=
password.trim();
86
}
87
//
System.out.println(cred);
88
//
System.out.println(new String(md.digest(cred.getBytes())));
89
return
new
BASE64Encoder().encode(md.digest(cred.getBytes()))
90
.getBytes();
91
}
92
93
94
95
}
96
posted @
2007-01-11 14:57 小小程序程序员混口饭吃 阅读(1351) |
评论 (0) |
编辑 收藏
范伟先生名言:猪撞树上了,你撞猪上了吧
我有4种理解:
1:猪撞树上了,你撞在猪上,猪比较软,你比猪幸运
2:人家猪都撞树上了,你又往人家身上撞,不想让猪活了?
3:猪往树上撞,他智商低,你比不过他,去撞猪泄愤啊?
4:你撞了猪,猪不跟你一般见识,他去撞树
posted @
2006-12-19 09:31 小小程序程序员混口饭吃 阅读(1647) |
评论 (6) |
编辑 收藏
最近写一个东西,在网上看到这个计划书的范本,很不错,抄下来
商业计划书目录
报告目录
第一部分 摘要(整个计划的概括) (文字在2-3页以内)
一. 项目简单描述(目的、意义、内容、运作方式)
二. 市场目标概述
三. 项目优势及特点简介
四. 利润来源简析
五. 投资和预算
六. 融资方案(资金筹措及投资方式)
七. 财务分析(预算及投资报酬)
第二部分 综述
第一章 项目背景
一. 项目的提出原因
二. 项目环境背景
三. 项目优势分析(资源、技术、人才、管理等方面)
四. 项目运作的可行性
五. 项目的独特与创新分析
第二章 项目介绍
一. 网站建设宗旨
二. 定位与总体目标
三. 网站规划与建设进度
四. 资源整合与系统设计
五. 网站结构/栏目板块
六. 主要栏目介绍
七. 商业模式
八. 技术功能
九. 信息/资源来源
十. 项目运作方式
十一.网站优势(资源/内容/模式/技术/市场等)
十二.无形资产
十三.策略联盟
十四.网站版权
十五.收益来源概述
十六.项目经济寿命
第三章. 市场分析
一. 互联网市场状况及成长
二. 商务模式的市场地位
三. 目标市场的设定
四. 传统行业市场状况(网站市场资源的基础)
五. 市场定位及特点(消费群体、消费方式、消费习惯及影响市场的主要因素分析
市场规模、市场结构与划分,特定受众等
六. 市场成长(网站PageView与消费者市场)
七. 本项目产品市场优势(对于特定人群的市场特点的省事、省时、省力、省钱等)
八. 市场趋势预测和市场机会
九. 行业政策
第四章 竞争分析
一. 有无行业垄断
二. 从市场细分看竞争者市场份额
三. 主要竞争对手情况
第五章 商业实施方案
一. 商业模式实施方案总体规划介绍
二. 营销策划
三. 市场推广
四. 销售方式与环节
五. 作业流程
六. 采购、销售政策的制定
七. 价格方案
八. 服务、投诉与退货
九. 促销和市场渗透(方式及安排、预算)
1. 主要促销方式
2. 广告/公关策略、媒体评估
3. 会员制等
十. 获利分析
十一. 销售资料统计和销售纪录方式,销售周期的计算。
十二. 市场开发规划,销售目标(近期、中期),销售预估(3-5年)销售额、占有率及
计算依据
第六章 技术可行性分析
一. 平台开发
二. 数据库
三. 系统开发
四. 网页设计
五. 安全技术
六. 内容设计
七. 技术人员
八. 知识产权
第七章 项目实施
1. 项目实施构想(公司的设立、组织结构与股权结构)
2. 网站开发进度设计与阶段目标
3. 营销进度设计与阶段目标
4. 行政管理部门的建立、职工的招募和培训安排
5. 项目执行的成本预估
第八章 投资说明
一. 资金需求说明(用量/期限)
二. 资金使用计划(即用途)及分期
三. 项目投资构成和固定资产投资的分类
四. 主要流动资金构成
五. 投资形式(贷款/利率/利率支付条件/转股-普通股、优先股、任股权/对应
价格等)
六. 资本结构
七. 股权结构
八. 股权成本
九. 投资者介入公司管理之程度说明
十. 报告(定期向投资者提供的报告和资金支出预算)
十一. 杂费支付(是否支付中介人手续费)
第九章 投资报酬与退出
一. 股票上市
二. 股权转让
三. 股权回购
四. 股利
第十章 风险分析与规避
一. 政策风险
二. 资源风险
三. 技术风险
四. 市场风险
五. 内部环节脱节风险
六. 成本控制风险
七. 竞争风险
八. 财务风险(应收帐款/坏帐/亏损)
九. 管理风险(含人事/人员流动/关键雇员依赖)
十. 破产风险
第十一章 管理
一. 公司组织结构
二. 现有人力资源或经营团队
三. 管理制度及协调机制
四. 人事计划(配备/招聘/培训/考核)
五. 薪资、福利方案
六. 股权分配和认股计划
第十二章 经营预测
一. 网站经营
1.访问人数成长预测
2.会员增长预测
3.行业联盟预测
二. 销售数量、销售额、毛利率、成长率、投资报酬率预估及计算依据
第十三章 财务可行性分析
一. 财务分析说明
二. 财务数据预测
1. 收入明细表
2. 成本费用明细表
3. 薪金水平明细表
4. 固定资产明细表
5. 资产负债表
6. 利润及利润分配明细表
7. 现金流量表
三. 财务分析指标
反映财务盈利能力的指标
a.投资回收期(Pt)
b.投资利润率
c.投资利税率
d.不确定性分析
第三部分 附录
一. 附件
1. 主要经营团队名单及简历
2. 专业术语说明
3. 企业形象设计/宣传资料(标识设计、说明书、出版物、包装说明等)
二. 附表
1. 市场受众分析(人群分布/数量等)表
2. 互联网成长状况表
3. 主要设备清单
4. 互联网市场调查表
5. 预估分析表
6. 各种财务报表及财务预估表
|
posted @
2006-12-18 13:48 小小程序程序员混口饭吃 阅读(10618) |
评论 (2) |
编辑 收藏
1:
下载
cvsnt-2.5.03.2382(http://www.cvsnt.org)
2:
安装完全采用默认就可以了,安装完可以不重启
3
:开始菜单
->CVSNT-> Control Panel .
停止
CVS NT
4
:进入
repository configuration
点击
add
添加一个如图所示:
Localtion
填写一个
D:/CVSRoot
Name
填写
/cvs
5
:进入
server settting
Run as
选择一个
windows
下已有用户比如
(administrator)
,其余不用修改,应用就可以了。
6
:进入
about :CVSNT
启动
. CVS
已经配置完毕,至于安全什么方面的东西我没有弄过。
7:
打开
eclilpse ,file->new->other ,CVS
输入
Host
、
repository path
、用户名、密码
,其余默认,然后
next
Next
Next
Next
一切搞定,你可以建立一个目录然后
就可以commit
了
.
posted @
2006-12-14 16:14 小小程序程序员混口饭吃 阅读(13061) |
评论 (6) |
编辑 收藏
1、长的惊险.....
2、你小时候被猪亲过吧?
3、你长的很 爱guo 很 敬业 很 有骨气
4、长得真有创意,活得真有勇气!
5、你长的真t m 后现代
6、你长的好象车祸现场
7、你长的外形不准 比例没打好
8、你干嘛用屁股挡住脸啊!
9、我觉得世界上就只有两种人能吸引人,一种是特漂亮的 一种就是你这样的
10、你的长相很提神的说!!
11、你需要回炉重造
12、他们怎么能管你叫猪呢??这太不像话了!总不能人家长的像什么就叫人家什么吧!怎么能说你长得像猪呢?那是侮辱了猪。
13、*,你T.M.D.长得太好认了。
14、长的很科幻,长的很抽象!
15、见过丑的,没见过这么丑的。乍一看挺丑,仔细一看更丑!
16、长的很无辜,长的对不起人民对不起党。
17、你长的拖慢网速,你长的太耗内存
18、你光着身子追我两公里 我回一次头都算我是流氓!
19、大哥,把你脸上的分辨率调低点好吗?
20、你长的违...
posted @
2006-12-13 10:49 小小程序程序员混口饭吃 阅读(468) |
评论 (0) |
编辑 收藏
今天看到一篇非常好的文章,忍不住copy下来。
有一天,柏拉图问老师苏格拉底什么是爱情?
老师就让他先到到麦田里去,摘一棵全麦田里最大最金黄的麦穗来,期间只能摘一次,并且只可向前走,不能回头。
柏拉图于是按照老师说的去做了。结果他两手空空的走出了田地。老师问他为什么摘不到?他说:因为只能摘一次,又不能走回头路,期间即使见到最大最金黄的,因为不知前面是否有更好的,所以没有摘;走到前面时,又发决总不及之前见到的好,原来最大最金黄的麦穗早已错过了;于是我什么也没摘。
老师说:这就是“爱情”。
之后又有一天,柏拉图问他的老师什么是婚姻,他的老师就叫他先到树林里,砍下一棵全树林最大最茂盛、最适合放在家作圣诞树的树。其间同样只能砍一次,以及同样只可以向前走,不能回头。
柏拉图于是照着老师的说话做。今次,他带了一棵普普通通,不是很茂盛,亦不算太差的树回来。老师问他,怎么带这棵普普通通的树回来,他说:“有了上一次经验,当我走到大半路程还两手空空时,看到这棵树也不太差,便砍下来,免得错过了后,最后又什么也带不出来。”
老师说:“这就是婚姻!” 人生就正如穿越麦田和树林,只走一次,不能回头。要找到属于自己最好的麦穗和大树,你必须要有莫大的勇气和付出相当的努力
posted @
2006-12-12 13:21 小小程序程序员混口饭吃 阅读(468) |
评论 (1) |
编辑 收藏
FUMO
(Firmware Update Management Object)
手机终端用来固件升级的协议。协议主要规定了一下方面:
1
:
FIRMWARE UPDATE MANAGEMENT OBJECT PARAMETERS.
(路径和节点)
2
:
BEHAVIOR ASSOCIATED WITH THE MANAGEMENT OBJECT
(执行升级和下载的命令以及
ALERT
)
3
:
CLIENT INITIATED FIRMWARE UPDATE (
手机自行发起的固件升级的一些规定
)
1
:
FIRMWARE UPDATE MANAGEMENT OBJECT PARAMETERS
总共定义如上节点
PKNAME:
升级包名字
Pkgversion:
升级包版本
Download
:用来执行初始化下载的节点
PKGURL:
初始化下载时存储的下载地址的节点
Update:
用来执行升级的节点
Pkgdata:
用来提供升级包数据的节点
Downloadnadupdate
:用来初始化下载和升级的节点
Pkgurl
:
:
初始化下载时存储的下载地址的节点
State
:手机当前升级过程中的状态。
Ext
:厂商自己定义的扩展节点
根据实现不同,
FUMO
可以选择
Downloadnadupdate
也可以选择
downd and upate
这
2
个节点的组合来实现固件的升级
(
先下载,把下载的东西放在
X/update/pkgdata
里面,然后执行升级
)
State
有一下状态
升级成功返回
100
,根据返回的不同状态,来与
SERVER
交互。
Fumo
规定的升级过程中的流程
FUMO
从初始化下载到最后成功然后清除掉下来后的升级包的全过程,
2
:
BEHAVIOR ASSOCIATED WITH THE MANAGEMENT OBJECT
FUMO
在执行的开始,假定手机采用先
download
然后
update,
先把升级包的
URL
从
SERVER
发过来
,
手机先自行
replace
命令把
URL
放在
Download/PkgURL
下面,然后执行
exec
命令把包下载到
update/PkgData
下面,(有的
FUMO
实现厂商采用差分包方法升级)在
update
的时候直接执行
exec
执行升级。
以下分别是执行了
2
个
exec
分别在执行
download
和
downloadandupdate.
下图是手机在进行升级过程中返回给
SERVER
的一些结果,都是用数字来表示,
server
可以根据这些返回码来判断终端在升级过程中哪一步执行失败。
下图是一个终端在执行一个
download
过程和一个
update
过程的流程图,此图能够清晰的显示出
DM
的
command
与
fumo
的节点如何交互的。
下图是一个直接的
DownloadAndUpdate
的过程。手机一般会选择这两种的中的一种方式。
3
:
CLIENT INITIATED FIRMWARE UPDATE
其实这是
CP
协议的一部分内容,在下一篇文章会详细的描述
cp
协议的一些东西,
cp
协议想关联有好几协议。
posted @
2006-12-08 15:43 小小程序程序员混口饭吃 阅读(2180) |
评论 (4) |
编辑 收藏
DM并不是一个前沿的技术。据悉,韩国SK电讯、日本NTT DoCoMo、KDDI以及以Vodafone为首的一些欧洲运营商都已经建立起了一定规模的DM体系,它们或根据自行标准,或遵循OMA标准,现在主要提供的是以FOTA(固件更新)为主的基本功能,将来还可支持数据备份、诊断及故障修复、图形用户界面处理,甚至病毒防护等多种功能。
因为设计缺陷,Sony 与 Panasonic 曾经为手机召回蒙受了上亿美元的损失,同时中国建立手机召回制度的呼声越来越高,通信厂商该如何应对?如果因为BUG而召回手机那么岂不损失太大。终端管理在这种情况下应运而生,可以给厂商减少损失。
一句话,只要能上网支持DM的手机未来就可以在线升级操作系统,以及修复BUG等等,手机厂商和运营商会更加方便,节省成本,同时能给客户带来更好的体验。只要手机安装了支持DM协议的软件,同时有一个与之交互的SERVER,一切问题迎刃而解。
FOTA有多种实现方式,DM便是其中的一个协议
Dm
协议
5
个
package.
1: package0 server
发送通知(一般是短信)给
CLIENT
,一般通过
WAP PUSH
下去给手机。
2: package1
手机收到后
wap push
的东西后,根据
WAP PUSH
相关协议,手机会自动回联回
SERVER
,
server
会得到手机的
imei,
厂商、型号等基本信息。
3:package2
Server
收到
client
的回复后,得到手机的
IP
,然后通过
HTTP
请求
client
,发送一个用户确认请求(手机必须能通过
GPRS
等方式上网),
4:package3
手机收到后,如果用户确认
DM
继续进行,如果用户否认
DM
发送给手机一个结束标志。就是说不管
package3
用户是否确认或否认
package4
都会进行下去
5:package4
SERVER
收到用户返回的信息不管是确认还是否认都会回复,如果
server
还想继续进行下去,那么会重复
package2
,只是不再是简单让用户确认的东西,比如其他业务通过
DM
去取用户的版本的信息比如发送一个
GET
的
command
,最后一个
package
永远是没有任何
command
的。就是说
package2,package3
可以重复进行多次
1101:等待用户确认
1200:终端回联SERVER
1201:终端发起
1222:更多的message
1223 :session abort
posted @
2006-12-08 11:21 小小程序程序员混口饭吃 阅读(2456) |
评论 (0) |
编辑 收藏
事务是用来保证数据的一致性( integrity )而锁是保证数据的并发(控制多个事务的并发)( concurrency )。 锁的级别越高,可能会影响数据库的并发。锁的级别越低一般来说数据库的并发越好。 锁在 JDBC,JTA 以及容器管理的事务中的用法基本一样,也有写不同,主要在 JTA 分布式事务上个别又差异。 事务只是用来保证,数据一致性,一致性包括 : 能否保证与其他事务的隔离,以及能否在同一事务中保证重复读,脏读,脏写等等方面。 Oracle 在不是手工加锁的情况下, ORACLE 会自动调度锁。 ORACLE 自动调度锁得执行顺序,一般不会发生死锁现象。有些数据库会自动调度数据库锁得级别,这就增加了死锁的可能, ORACLE 永远不会自动调度锁的级别,死锁发生时, oracle 也会去自动调度,这要延时一段时间, ORACLE 自己的策略,会 ROLLBACK 一个事务,以保证发生死锁的 2 个事务都执行下去。 锁的种类很多,有 DML,DDL 锁以及其他,平时我们开发过程中主要是 DML,DDL 锁。 DML 锁又分很多方面:
RS: row share RX: row exclusive S: share SRX: share row exclusive X: exclusive
( 1 ) RS 可以通过一下声明方式来锁定表的行
SELECT ... FROM table ... FOR UPDATE OF ... ;
LOCK TABLE table IN ROW SHARE MODE;
一旦被 RS 锁定,不允许再对表进行 LOCK TABLE table IN EXCLUSIVE MODE
( 2 ) RX 可以通过一下声明方式来锁定表的行
LOCK TABLE table IN ROW EXCLUSIVE MODE;
一旦通过 RX 锁定了表中的行,不允许对表进行下列操作
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 3 ) s ( share table lock )可以通过以下方式锁定表
LOCK TABLE table IN SHARE MODE (可以说有多个 S 锁定一个表) ;
允许进行的操作,所有的查询以及 SELECT ... FOR UPDATE, 和 LOCK TABLE ... IN SHARE MODE ,只允许本事务内更新数据( update ,这种情况也是只允许当前表上就一个 S 锁)
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
比 S 少了一点,这里只是允许一个 SRX 锁定一个表
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 5 ) X 级别最高的锁定形式: LOCK TABLE table IN EXCLUSIVE MODE;
Table 13-4 Locks Obtained By DML Statements
DML Statement | Row Locks? | Mode of Table Lock |
SELECT ... FROM table | | |
INSERT INTO table ... | X | RX |
UPDATE table ... | X | RX |
DELETE FROM table ... | X | RX |
SELECT ... FROM table ... FOR UPDATE OF ... | X | RS- |
LOCK TABLE table IN ... | | |
ROW SHARE MODE | | RS |
ROW EXCLUSIVE MODE | | RX |
SHARE MODE | | S |
SHARE EXCLUSIVE MODE | | SRX |
EXCLUSIVE MODE | | X |
这个表上很清楚
posted @
2006-11-30 10:36 小小程序程序员混口饭吃 阅读(4517) |
评论 (2) |
编辑 收藏
转自http://www.blogcn.com/user64/5635/index.html
1、很快你就会发现几千元的工资不算什么
2、很快你就会发现金钱的获得是以时间和个人生活的牺牲为代价的
3、很快你就会发现自己有点小钱但不幸福
4、很快你就会讨厌自己,讨厌自己的复杂和世故
5、很快你就会发现你身边的很多人怎么素质这么低,这么俗,而你也快成为这样的 了
6、很快你就会讨厌冬天的,太冷了,太冷清和寂寞了
7、你会不断地觉醒,不断地继续奋斗,然后你老想着辞职休息,或者再读书,或者不再创业
8、你会偶尔去同学录看看,但你已经不想再说话了
9、你会偶尔想起自己以前最好的朋友,然后给他/她打个无聊的电话
10、你会偶尔给自己的初恋情人打个电话,然后你发现自己老了
11、你甚至会发现自己现在成熟得可怕,一件很复杂的事情,你一眼就看穿了,而你的依据是你对黑暗的了解
12、你想幸福就要自己花一生的时间去先痛苦
13、当你工作后发现你喜欢摇滚乐的时候,证明你还在挣扎;当你工作后发现自己喜欢忧郁的轻音乐时,你就快完蛋了; 工作了才知道,有空调的办公室,不如闹哄哄的教室;工作了才知道,大学里爱情是游戏,现在爱情是交易;工作了才知道 有时候一顿饭吃上千块也是一种需要;工作了才知道,学生都是装大款,真正的有钱人都哭穷;工作了才知道,穿什么不取决与品位,取决与场合;工作了才知道,学校三点一线,现在却是画直线;工作了才知道,原来买房子也是个远大的理想;工作了才知道,成为社会精英的几率,和中彩票是一样的;工作了才知道,原来消灭剥削只是一种传说;工作了才知道,自立的代价是失去更多的自由
posted @
2006-11-28 15:57 小小程序程序员混口饭吃 阅读(513) |
评论 (1) |
编辑 收藏