2011年09月19日 星期一

java JDK6 日志

Java拥有一个设计良好的类集,用于通过日志系统来控制、格式化以及发布消息。对于一个程序来说,记录错误和状态消息显得非常重要。 实例:
package scy;
import java.util.logging.*;

public class Scy_Str {
	public static void main(String[] args){
		Logger logger=Logger.getLogger("Scy_Str");
		logger.log(Level.INFO, "测试日志功能");
	}
}
结果: 2011-9-19 17:50:22 scy.Scy_Str main 信息: 测试日志功能

2011年09月16日 星期五

标准的通知(5w+2h)

日期 责任人 分享者 更新 一、What?(目标理解) 1、 二、Why?(价值阐述) 1、 三、How?(方法步骤) 1、 四、Who?(相关人员) 1、 五、When?(项目节点) 1、 六、Where?(相关地区) 1、 七、How much?(成本评估) 1、

2011年08月30日 星期二

H2 database translation.properties 中文翻译

发现其中有不少英文没有被翻译,所以心血来潮翻译了一下,使用Google 翻译,人工核对。
#Translation
#Tue Aug
30 11:06:45 CST 2011
.translator
=junheng.song (sjh21 (at) hot mail (dot) com); \u521B\u5EFA\u4EBA JInto - www.guh-software.de - 2006\u5E744\u670810\u65E5\u661F\u671F\u4E00
a.help=\u5E2E\u52A9
a.language
=\u4E2D\u6587 (\u7B80\u4F53)
a.lynxNotSupported
=\u62B1\u6B49, \u76EE\u524D\u8FD8\u4E0D\u652F\u6301Lynx
a.password
=\u5BC6\u7801
a.remoteConnectionsDisabled
=\u62B1\u6B49, \u670D\u52A1\u5668\u4E0A\u7684\u8FDC\u7A0B\u8BA1\u7B97\u673A\u8FDE\u63A5\u88AB\u7981\u7528.
a.title
=H2 \u63A7\u5236\u53F0
a.tools
=\u5DE5\u5177
admin.executing
=\u6267\u884C
a.user
=\u7528\u6237\u540D
admin.ip
=IP\u5730\u5740
admin.lastAccess
=\u6700\u540E\u8BBF\u95EE
admin.lastQuery
=\u6700\u540E\u67E5\u8BE2
admin.no
=\u4E0D\u662F
admin.notConnected
=\u6CA1\u6709\u8FDE\u63A5
admin.url
=URL
admin.yes
=\u662F
adminAllow
=\u5141\u8BB8\u8FDE\u63A5\u7684\u5BA2\u6237\u7AEF
adminConnection
=\u8FDE\u63A5\u5B89\u5168
adminHttp
=\u4F7F\u7528\u975E\u52A0\u5BC6\u7684 HTTP \u8FDE\u63A5
adminHttps
=\u4F7F\u7528\u52A0\u5BC6\u7684 SSL (HTTPS) \u8FDE\u63A5
adminLocal
=\u53EA\u5141\u8BB8\u672C\u5730\u8FDE\u63A5
adminLogin
=\u7BA1\u7406\u5458\u767B\u5F55
adminLoginCancel
=\u53D6\u6D88
adminLoginOk
=\u786E\u8BA4
adminLogout
=\u6CE8\u9500
adminOthers
=\u5141\u8BB8\u6765\u81EA\u5176\u4ED6\u8FDC\u7A0B\u8BA1\u7B97\u673A\u7684\u8FDE\u63A5
adminPort
=\u7AEF\u53E3\u53F7
adminPortWeb
=Web server \u7AEF\u53E3\u53F7
adminRestart
=\u91CD\u542F\u670D\u52A1\u5668\u540E\u4FEE\u6539\u914D\u7F6E\u5C06\u751F\u6548.
adminSave
=\u4FDD\u5B58
adminSessions
=\u6D3B\u52A8\u7684\u4F1A\u8BDD
adminShutdown
=\u5173\u95ED
adminTitle
=H2 \u63A7\u5236\u53F0\u914D\u7F6E
adminTranslateHelp
=\u7FFB\u8BD1\u6216\u6539\u5584\u7FFB\u8BD1\u7684H2\u63A7\u5236\u53F0\u3002
adminTranslateStart
=\u7FFB\u8BD1
helpAction
=\u6D3B\u52A8
helpAddAnotherRow
=\u589E\u52A0\u53E6\u4E00\u884C
helpAddDrivers
=\u589E\u52A0\u6570\u636E\u5E93\u9A71\u52A8
helpAddDriversText
=\u53EF\u4EE5\u901A\u8FC7\u6DFB\u52A0\u7CFB\u7EDF\u73AF\u5883\u53D8\u91CFH2DRIVERS \u6216\u8005 CLASSPATH \u6765\u589E\u52A0\u6570\u636E\u5E93\u9A71\u52A8\u6CE8\u518C\u3002\u4F8B\u5982\uFF08Windows\uFF09\uFF1A\u8981\u589E\u52A0\u6570\u636E\u5E93\u9A71\u52A8C\:/Programs/hsqldb/lib/hsqldb.jar\uFF0C\u53EF\u4EE5\u589E\u52A0\u7CFB\u7EDF\u73AF\u5883\u53D8\u91CFH2DRIVERS\u5E76\u8BBE\u7F6E\u5230C\:/Programs/hsqldb/lib/hsqldb.jar\u3002
helpAddRow
=\u589E\u52A0\u65B0\u7684\u4E00\u884C
helpCommandHistory
=\u663E\u793A\u5386\u53F2SQL\u547D\u4EE4
helpCreateTable
=\u521B\u5EFA\u4E00\u4E2A\u65B0\u8868
helpDeleteRow
=\u5220\u9664\u4E00\u884C
helpDisconnect
=\u65AD\u5F00\u6570\u636E\u5E93\u8FDE\u63A5
helpDisplayThis
=\u663E\u793A\u5E2E\u52A9\u9875
helpDropTable
=\u5982\u679C\u8868\u5B58\u5728\u5220\u9664\u5B83
helpExecuteCurrent
=\u6267\u884C\u5F53\u524DSQL\u8BED\u53E5
helpIcon
=\u56FE\u6807
helpImportantCommands
=\u91CD\u8981\u7684\u547D\u4EE4
helpOperations
=\u64CD\u4F5C
helpQuery
=\u67E5\u8BE2\u8868
helpSampleSQL
=\u6837\u4F8BSQL\u811A\u672C
helpStatements
=SQL \u8BED\u53E5
helpUpdate
=\u6539\u53D8\u4E00\u884C\u6570\u636E
helpWithColumnsIdName
=\u7528ID\u548CNAME\u5217
login.connect
=\u8FDE\u63A5
login.driverClass
=\u9A71\u52A8\u7C7B
login.driverNotFound
=\u6570\u636E\u5E93\u9A71\u52A8\u6CA1\u6709\u53D1\u73B0<br />\u8BF7\u53C2\u8003\u5E2E\u52A9\u53BB\u6DFB\u52A0\u6570\u636E\u5E93\u9A71\u52A8
login.goAdmin
=\u914D\u7F6E
login.jdbcUrl
=JDBC URL
login.language
=\u8BED\u8A00
login.login
=\u767B\u5F55
login.remove
=\u5220\u9664
login.save
=\u4FDD\u5B58
login.savedSetting
=\u4FDD\u5B58\u7684\u8FDE\u63A5\u8BBE\u7F6E
login.settingName
=\u8FDE\u63A5\u8BBE\u7F6E\u540D\u79F0
login.testConnection
=\u6D4B\u8BD5\u8FDE\u63A5
login.testSuccessful
=\u6D4B\u8BD5\u6210\u529F
login.welcome
=H2 \u63A7\u5236\u53F0
result.1row
=1 \u884C
result.autoCommitOff
=\u81EA\u52A8\u63D0\u4EA4\u73B0\u5728\u4E3A\u5173\u95ED
result.autoCommitOn
=\u81EA\u52A8\u63D0\u4EA4\u73B0\u5728\u4E3A\u6253\u5F00
result.bytes
=\u5B57\u8282
result.characters
=\u5B57\u7B26
result.maxrowsSet
=\u6700\u5927\u8FD4\u56DE\u884C\u6570\u88AB\u8BBE\u7F6E
result.noRows
=\u65E0\u8FD4\u56DE\u884C
result.noRunningStatement
=\u5F53\u524D\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684SQL\u8BED\u53E5
result.rows
=\u884C
result.statementWasCanceled
=SQL \u8BED\u53E5\u88AB\u53D6\u6D88
result.updateCount
=\u66F4\u65B0\u884C\u6570
resultEdit.action
=\u6D3B\u52A8
resultEdit.add
=\u589E\u52A0
resultEdit.cancel
=\u53D6\u6D88
resultEdit.delete
=\u5220\u9664
resultEdit.edit
=\u7F16\u8F91
resultEdit.editResult
=\u7F16\u8F91\u7ED3\u679C\u96C6
resultEdit.save
=\u4FDD\u5B58
toolbar.all
=\u5168\u90E8
toolbar.autoCommit
=\u81EA\u52A8\u63D0\u4EA4
toolbar.autoComplete
=\u81EA\u52A8\u5B8C\u6210
toolbar.autoComplete.full
=\u5168\u90E8
toolbar.autoComplete.normal
=\u6807\u51C6
toolbar.autoComplete.off
=\u5173
toolbar.cancelStatement
=\u53D6\u6D88\u5F53\u524D\u7684\u6267\u884C\u8BED\u53E5
toolbar.clear
=\u6E05\u9664
toolbar.commit
=\u63D0\u4EA4
toolbar.disconnect
=\u65AD\u5F00\u8FDE\u63A5
toolbar.history
=\u5386\u53F2SQL\u547D\u4EE4
toolbar.maxRows
=\u6700\u5927\u884C\u6570
toolbar.refresh
=\u5237\u65B0
toolbar.rollback
=\u56DE\u6EDA
toolbar.run
=\u6267\u884C (Ctrl+Enter)
toolbar.sqlStatement
=SQL \u8BED\u53E5
tools.backup
=\u5907\u4EFD
tools.backup.help
=\u521B\u5EFA\u4E00\u4E2A\u6570\u636E\u5E93\u7684\u5907\u4EFD\u3002
tools.changeFileEncryption
=\u66F4\u6539\u6587\u4EF6\u52A0\u5BC6
tools.changeFileEncryption.help
=\u5141\u8BB8\u6539\u53D8\u6570\u636E\u5E93\u6587\u4EF6\u7684\u52A0\u5BC6\u5BC6\u7801\u548C\u7B97\u6CD5\u3002
tools.cipher
=\u52A0\u5BC6\uFF08AES\u6216XTEA\uFF09
tools.commandLine
=\u547D\u4EE4\u884C
tools.convertTraceFile
=\u8F6C\u6362\u8DDF\u8E2A\u6587\u4EF6
tools.convertTraceFile.help
=\u8F6C\u6362\u4E00\u4E2Atrace.db\u6587\u4EF6\u5230java\u5E94\u7528\u7A0B\u5E8F\u6216SQL\u811A\u672C\u3002
tools.createCluster
=\u521B\u5EFA\u7FA4\u96C6
tools.createCluster.help
=\u521B\u5EFA\u4E00\u4E2A\u72EC\u7ACB\u7684\u6570\u636E\u5E93\u96C6\u7FA4\u3002
tools.databaseName
=\u6570\u636E\u5E93\u540D\u79F0
tools.decryptionPassword
=\u89E3\u5BC6\u5BC6\u7801
tools.deleteDbFiles
=\u5220\u9664\u6570\u636E\u5E93\u6587\u4EF6
tools.deleteDbFiles.help
=\u5220\u9664\u5C5E\u4E8E\u4E00\u4E2A\u6570\u636E\u5E93\u7684\u6240\u6709\u6587\u4EF6\u3002
tools.directory
=\u76EE\u5F55
tools.encryptionPassword
=\u52A0\u5BC6\u5BC6\u7801
tools.javaDirectoryClassName
=Java\u76EE\u5F55\u548C\u7C7B\u7684\u540D\u79F0
tools.recover
=\u6062\u590D
tools.recover.help
=\u5E2E\u52A9\u6062\u590D\u635F\u574F\u7684\u6570\u636E\u5E93\u3002
tools.restore
=\u8FD8\u539F
tools.restore.help
=\u6062\u590D\u6570\u636E\u5E93\u5907\u4EFD\u3002
tools.result
=\u7ED3\u679C
tools.run
=\u8FD0\u884C
tools.runScript
=\u8FD0\u884C\u811A\u672C
tools.runScript.help
=\u8FD0\u884CSQL\u811A\u672C\u3002
tools.script
=\u811A\u672C
tools.script.help
=\u5141\u8BB8\u8F6C\u6362\u4E3A\u5907\u4EFD\u6216\u8FC1\u79FB\u6570\u636E\u5E93\u7684SQL\u811A\u672C\u3002
tools.scriptFileName
=\u811A\u672C\u6587\u4EF6\u7684\u540D\u79F0
tools.serverList
=\u670D\u52A1\u5668\u5217\u8868
tools.sourceDatabaseName
=\u6E90\u6570\u636E\u5E93\u7684\u540D\u79F0
tools.sourceDatabaseURL
=\u6E90\u6570\u636E\u5E93\u7684URL
tools.sourceDirectory
=\u6E90\u76EE\u5F55
tools.sourceFileName
=\u6E90\u6587\u4EF6\u540D
tools.sourceScriptFileName
=\u6E90\u811A\u672C\u6587\u4EF6\u7684\u540D\u79F0
tools.targetDatabaseName
=\u76EE\u6807\u6570\u636E\u5E93\u7684\u540D\u79F0
tools.targetDatabaseURL
=\u76EE\u6807\u6570\u636E\u5E93\u7684URL
tools.targetDirectory
=\u76EE\u6807\u76EE\u5F55
tools.targetFileName
=\u76EE\u6807\u6587\u4EF6\u540D
tools.targetScriptFileName
=\u76EE\u6807\u811A\u672C\u6587\u4EF6\u7684\u540D\u79F0
tools.traceFileName
=\u8DDF\u8E2A\u6587\u4EF6\u7684\u540D\u79F0
tree.admin
=\u7BA1\u7406
tree.current
=\u5F53\u524D\u503C
tree.hashed
=\u6742\u4E71\u7684
tree.increment
=\u589E\u52A0
tree.indexes
=\u7D22\u5F15
tree.nonUnique
=\u4E0D\u552F\u4E00
tree.sequences
=\u5E8F\u5217
tree.unique
=\u552F\u4E00
tree.users
=\u7528\u6237
  

2011年12月13日 星期二

与老板的对话,是我们的计划不合理,还是你太幻想了,如果这周项目能验收掉,我就把这篇文章吃掉。

 “这周一定把项目验收”、“这周不验收就把项目终止掉”、“两天搞定”,“时间紧迫”这些几乎成了我们老板的口头语了。每个项目都这样搞。搞的我们开发人员天天熬夜加班,而结果呢?说一周验收的项目搞了8个月,两天搞定的项目,到客户那翻倒重来。他的计划是这么的不靠谱。难道他靠这样的语言来胁迫我们天天加班?。老板给你混了一年,怎么感觉天天像打仗呢。抗日战争才8年,给你混到什么时候是个头呀。
  说一次两次就算了,你他妈的,不长记性,还有脸天天再说。你就不回顾一下,哪次你说的应验了。不是有差别,而是差别到十万八千里去了。今天你还有脸在我们面前提“这周一定把项目验收了”的话,说实话,我们小组真想拿脚呼你。
  回想去年快过年前几天向南京客户汇报,你既然告诉我们说,抓紧搞,把这个功能搞定,后天一定能验收。天是那么的冷,我们连续熬了两天两夜。结果,客户根本不叼,不要说验收了,连根本的设计都不符合他们的要求。哎,当时就是傻呀,不曾想,没几天就过年了,客户怎么可能给你验收。就是系统做的再牛逼也没有时间安排呀。那一次,由于熬了两天,坚持不住了,我坐在四面透风的客车上睡着了,回家过年的时候,生了一场大病。你他妈知不知道,老子把两年的医疗金刷完,才把病治好。
“满纸荒唐言,一把辛酸泪。都云作者痴,谁解其中味?”
  以上感叹因下午与老板对话,有感而发。语言中有个别不雅词语,未成年人请在父母陪伴下阅读。附上与老板的QQ聊天记录,如果正如他所说的,这周能把项目验收掉,我就把这篇文章打印下来,把他吃掉。
 1 LX 12:48:04 
2
3 LX 12:48:08
4 on line?
5 ZQ 12:56:55
6
7 LX 13:01:21
8 情况如何
9 ZQ 13:01:34
10 现在在芜湖客户这呢
11 LX 13:04:21
12 知道,有汇报吗?
13 ZQ 13:04:37
14 准备下午汇报给王局长汇报一下
15 LX 13:04:53
16 已经更新了吗?
17 ZQ 13:05:13
18 还没更新
19 LX 13:05:37
20 那抓紧更新吧,弄好给我留言,我也上去看一下。
21 ZQ 13:06:01
22 好,弄好,告诉你。
23 ZQ 13:06:34
24 奉化的雨水情,库结构有点不一样,我们正在调,调好了,给你更新上去
25 LX 13:07:18
26 没做成sp,比较麻烦了。
27 ZQ 13:08:24
28 没事,我们改java程序,应该就差不多了
29 LX 13:10:00
30 你想将芜湖更新吧
31 LX 13:10:03
32 这个紧迫
33 LX 13:10:14
34 不能让王局长失望!
35 ZQ 13:10:35
36
37 LX 13:11:52
38 大概多长时间更新好?
39 ZQ 13:13:57
40 明天下午
41 LX 13:14:10
42 ?
43 LX 13:14:18
44 不是说今天下午汇报吗?
45 ZQ 13:14:42
46 今天下午给王局长汇报,本我们开发环境上
47 ZQ 13:15:03
48 给他汇报也只是一个大概,具体细节需要调
49 LX 13:15:36
50 关键是要去给夏局汇报
51 LX 13:16:01
52 所以你需要尽快更新,如果有问题我们还好应对
53 LX 13:16:11
54 不要这周还不能验收掉。
55 ZQ 13:22:42
56 我们这周的计划是,今天下午给王局长汇报,看看可符合他的意思。如果符合,抓紧更新到服务器上,先插入部分演示数据,明天下午给夏局长演示,如果他同意的话。工情数据,我们会制作成excel模板,让他们输入数据。后天去南京,下周3再从南京回芜湖,把他们整理的数据全部入库,再让向他们汇报。好的话,给他们协商,验收事宜。
57 LX 13:23:47
58 这个计划很不好
59 LX 13:23:55
60 这周一定要搞定
61 LX 13:24:00
62 不要两头扯这
63 LX 13:24:15
64 在哪儿就做哪儿的事情
65 LX 13:24:31
66 他们也没什么数据
67 LX 13:24:36
68 也没什么人给我们整理
69 LX 13:24:48
70 不用指望有人能替我们整理什么数据
71 LX 13:25:00
72 有什么就展示什么,否则这个项目永远没有结束的时候。
73 LX 13:25:16
74 你现在就更新上服务吧
75 LX 13:25:21
76 我们评估一下进度。
77 ZQ 13:25:18
78 不指望,先把皮球踢给他们,让他们知道没有数据不是我们我们的问题
79 LX 13:25:54
80 不用这么委婉
81 LX 13:26:16
82 你先更新吧,我们先内部review一下整改的结果,好评估一下。
83 ZQ 13:27:20
84 还有南京的问题,周一,黄科长,和司科长,打了3次电话。已经答应他周三过去了。他们还说你很早就让我们这周一过去的。
85 LX 13:27:41
86 不要这样纠结。
87 LX 13:27:46
88 你想更新吧
89 LX 13:28:10
90 一件件事的清
91 ZQ 13:33:39
92


2011年09月19日 星期一

java JDK6的可变参数

Java jdk6像C和C++一样支持了可变参数,使用...点分割,例如:
package scy;

public class Scy_Str {
	public int getSum(int... intsum) {
		int sum = 0;
		for (int i = 0; i < intsum.length; i++) {
			sum = sum + intsum[i];
		}
		return sum;
	}
	public static void main(String[] args){
		Scy_Str s=new Scy_Str();
		int i=s.getSum(1,2,3,4,5);
		System.out.println(i);
	}
}
结果:15
 

2011年02月16日 星期三

复制网页内容到WORD

				$('#eTableWord').click(
						function() {
							var oWD = new ActiveXObject("Word.Application");
							var oDC = oWD.Documents.Add("", 0, 1);
							var oRange = oDC.Range(0, 1);
							var sel = document.body.createTextRange();
							sel.moveToElementText(dataTable);
							sel.select();
							sel.execCommand("Copy");
							oRange.Paste();
							oWD.Application.Visible = true;
						});	

2011年12月05日 星期一

再高学历也没用,老板的性格就决定了他公司的命运

     老板是一位科大博士(据说),计算机专业,信佛,对星座比较有研究,招聘的时候会因为你是处女座做销售,不要你。他比较擅长delphi语言,以前开发了2款专业水文分析软件,公司目前也靠这两个软件增加其他软件的特色。他口才不错,有一定的忽悠能力和销售能力。他喜欢开会,每次开会都要求我们拿笔把他的每句话当成语录记下来。他不吸烟不可喝,有鼻炎,喝酒过敏,哪怕一小杯啤酒。
    他97年毕业,分配在财政局,工作一段时间,就受不了,政府的安稳的环境,下海了。2001年自己开公司,公司一直都不死不活,期间经历了女人的背叛,公司兄弟的背叛等,对人有点不信任,公司目前商务部,财务部都人都是他的外甥女。与人交际比较疏远,很难交心,有点冷漠,经常的一句话是,“有缘就在一起工作,合不来就散”。对管理人才很崇拜,对程序员的态度是:经常在开会的时候对我们说,“给狗一个骨头,狗都会写程序”。这个项目这么简单,我使用 activeX控件两天就把项目验收了。
      2010年10月他只身一人,来到某地开分公司,雄心壮志,招聘了不少人。年底时候,公司人员已经达到了20位(大多是才毕业,实习生的初级开发人员)。我也是其中一员。2011年由于我们小组在外出差,没有受到他管理影响。其他人员在他直接的领导下,人员动荡严重,出差8个月回来,公司几乎没人了。他比较相信使用“程序”管理人,经常更新他的日报周报模板,曾一度推崇他的小i日报系统(delphi版),由于界面,操作性太差,经常奔溃,员工拒绝使用,现在不了了之。
     他比较喜欢,加班熬夜。经常逼迫我们熬夜加班赶项目。他比较小气,每次请我们吃饭,菜点的都不够,还喜欢在饭桌上开会,宣传他的思想,问你他上次开会的语录。
       项目商务几乎不做,项目招标过后,就很少跟客户电话。每次来客户这,把自己定位项目经理,帮我们找BUG,列任务,或直接推翻系统架构,按照他的设计重新做。每个项目都靠现场开发人员不断的磨出来,给了开发人员极大的压力。我这次结束的项目,在我们前面走了3批开发人员。公司目前项目比较多,大多都是烂项目,都是那走了几批人,做了一半的项目,并且与客户关系严重恶化。
       公司资金有点短缺,几个月前,曾一度发不了工资,这个几个月,还是靠上次我们那个验收款坚持。        年底了,在公司看不到,也看不到。公司的发展在何方?我的发展在何方? 另外,我们项目组4人,技术扎实,吃苦耐劳,配合默契,能够独立做项目。希望有志公司把我们小组集体收编了吧!

2011年08月04日 星期四

ArcGIS Google Map 增加虚拟图层

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s
="library://ns.adobe.com/flex/spark"
xmlns:mx
="library://ns.adobe.com/flex/mx"
xmlns:supportClasses
="com.esri.ags.skins.supportClasses.*"
xmlns:flash
="flash.text.*"
xmlns:arcgis
="cn.com.vistech.arcgis.*"
xmlns:esri
="http://www.esri.com/2008/ags">
<fx:Declarations>
<esri:SimpleMarkerSymbol id="citySymbol"
alpha
="0.8"
color
="0xDDDD00"
size
="6"
style
="circle">
<esri:SimpleLineSymbol width="2"
alpha
="1"
color
="0xDD0000"
style
="solid"/>
</esri:SimpleMarkerSymbol>
<esri:SimpleFillSymbol color="0xFFFFFF"
alpha
="0.5"
style
="solid"
id
="mySymbol">
<esri:SimpleLineSymbol color="0xFFFFFF"
width
="0"
alpha
="0.5"
style
="solid"/>
</esri:SimpleFillSymbol>
<esri:TextSymbol id="nanjing"
text
="南京"
placement
="above"
xoffset
="1"
yoffset
="3"
color
="0x666666"
border
="false"
borderColor
="0x000000"
background
="false"
backgroundColor
="0xFFFFFF">
<flash:TextFormat size="13"
font
="宋体"
bold
="true"
italic
="false"
underline
="false"/>
</esri:TextSymbol>
<esri:MapImageLayer id="viso"
alpha
="0.5">
</esri:MapImageLayer>
</fx:Declarations>
<esri:Map id="map"
logoVisible
="false"
openHandCursorVisible
="false"
scaleBarVisible
="false"
zoomSliderVisible
="false"
load
="loadHandler()">
<arcgis:GoogleMapLayer/>
<esri:GraphicsLayer symbol="{citySymbol}">
<esri:Graphic symbol="{nanjing}">
<esri:geometry>
<esri:MapPoint x="13221159.886688277"
y
="3769799.519742769"/>
</esri:geometry>
</esri:Graphic>
<esri:Graphic>
<esri:geometry>
<esri:MapPoint x="13221159.886688277"
y
="3769799.519742769"
id
="js"/>
</esri:geometry>
</esri:Graphic>

<esri:Graphic>
<esri:geometry>
<esri:MapPoint x="12801741.44122646"
y
="3606802.4843253596"/>
</esri:geometry>
</esri:Graphic>
<esri:Graphic>
<esri:geometry>
<esri:MapPoint x="13692297.36757265"
y
="4191093.670273363"/>
</esri:geometry>
</esri:Graphic>

<esri:Graphic>
<esri:geometry>
<esri:MapPoint x="12801741.44122646"
y
="4191093.670273363"/>
</esri:geometry>
</esri:Graphic>
<esri:Graphic>
<esri:geometry>
<esri:MapPoint x="13692297.36757265"
y
="3606802.4843253596"/>
</esri:geometry>
</esri:Graphic>
<esri:Graphic symbol="{mySymbol}">
<esri:Polygon spatialReference="{new SpatialReference(102113)}">
<fx:Array>
<fx:Array>
<esri:MapPoint id="a1"
x
="-20037508.342787"
y
="-20037508.342787"/>
<esri:MapPoint id="b1"
x
="-20037508.342787"
y
="3575001"/>
<esri:MapPoint id="a3"
x
="20037508.342787"
y
="3575001"/>
<esri:MapPoint id="a4"
x
="20037508.342787"
y
="-20037508.342787"/>
</fx:Array>
</fx:Array>
</esri:Polygon>
</esri:Graphic>
<esri:Graphic symbol="{mySymbol}">
<esri:Polygon spatialReference="{new SpatialReference(102113)}">
<fx:Array>
<fx:Array>
<esri:MapPoint id="y1"
x
="-20037508.342787"
y
="4204007"/>
<esri:MapPoint id="y2"
x
="-20037508.342787"
y
="20037508.342787"/>
<esri:MapPoint id="y3"
x
="-20037508.342787"
y
="20037508.342787"/>
<esri:MapPoint id="y4"
x
="20037508.342787"
y
="4204007"/>
</fx:Array>
</fx:Array>
</esri:Polygon>
</esri:Graphic>
<esri:Graphic symbol="{mySymbol}">
<esri:Polygon spatialReference="{new SpatialReference(102113)}">
<fx:Array>
<fx:Array>
<esri:MapPoint id="u1"
x
="-20037508.342787"
y
="4204007"/>
<esri:MapPoint id="u2"
x
="12783210"
y
="4204007"/>
<esri:MapPoint id="u3"
x
="12783210"
y
="3575001"/>
<esri:MapPoint id="u4"
x
="-20037508.342787"
y
="3575001"/>
</fx:Array>
</fx:Array>
</esri:Polygon>
</esri:Graphic>
<esri:Graphic symbol="{mySymbol}">
<esri:Polygon spatialReference="{new SpatialReference(102113)}">
<fx:Array>
<fx:Array>
<esri:MapPoint id="t1"
x
="13703667"
y
="4204007"/>
<esri:MapPoint id="t2"
x
="13703667"
y
="3575001"/>
<esri:MapPoint id="t3"
x
="20037508.342787"
y
="3575001"/>
<esri:MapPoint id="t4"
x
="20037508.342787"
y
="4204007"/>
</fx:Array>
</fx:Array>
</esri:Polygon>
</esri:Graphic>
</esri:GraphicsLayer>
</esri:Map>

<s:Button label="按钮"
click
="button1_clickHandler(event)"
top
="10"
right
="10"/>
<s:Panel x="29"
y
="19"
width
="1082"
height
="200">
<s:Label fontWeight="bold"
text
="Current map extent:"
x
="15"
y
="10"/>
<s:RichEditableText editable="false"
text
='xmin="{map.extent.xmin.toFixed(0)}" ymin="{map.extent.ymin.toFixed(0)}" xmax="{map.extent.xmax.toFixed(0)}" ymax="{map.extent.ymax.toFixed(0)}" (wkid="{map.spatialReference.wkid}")'
x
="9"
y
="135"/>
<s:Label fontWeight="bold"
text
="Current map extent (in geographic):"
x
="23"
y
="53"/>
<s:RichEditableText editable="false"
text
="{showExtentInGeographic(map.extent)}"
x
="10"
y
="110"/>
<s:Label fontWeight="bold"
text
="Current Mouse Coordinates:"
x
="10"
y
="73"/>
<s:RichEditableText id="mousecoords"
editable
="false"
text
="Move the mouse over the map to see its current coordinates..."
x
="10"
y
="93"/>
<s:Label fontWeight="bold"
text
="Current map scale is"
x
="10"
y
="33"/>
<s:RichEditableText editable="false"
text
="1:{map.scale.toFixed(0)} (level {map.level})"
x
="14"
y
="-24"/>
</s:Panel>
<fx:Script>
<![CDATA[
import com.esri.ags.SpatialReference;
import com.esri.ags.events.MapEvent;
import com.esri.ags.geometry.Extent;
import com.esri.ags.layers.supportClasses.MapImage;
import com.esri.ags.utils.WebMercatorUtil;

import mx.controls.Alert;
import mx.core.FlexGlobals;

protected function button1_clickHandler(event:MouseEvent):void
{

var zx:MapPoint
=new MapPoint(114.859, 35.32);
var ys:MapPoint
=new MapPoint(124.155, 41.25);
zx
=WebMercatorUtil.geographicToWebMercator(zx) as MapPoint;
ys
=WebMercatorUtil.geographicToWebMercator(ys) as MapPoint;

viso.removeAll();
var visoMapImage:MapImage
=new MapImage();
visoMapImage.href
="http://10.32.22.250:8080/appServices/emf2vec/visoface-gis.swf?r=" + new Date().getMilliseconds();
var extent:Extent
=new Extent(12783205.393024608, 4204003.347074539, 13827701.37943888, 4989446.834623009, new SpatialReference(102113));
visoMapImage.extent
=extent;
viso.add(visoMapImage);
FlexGlobals.topLevelApplication.map.addLayer(viso);
}

private function loadHandler():void
{
map.centerAt(js);
map.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}

// ... show coordinates of current (mouse) location
private function mouseMoveHandler(event:MouseEvent):void
{
const mapPoint:MapPoint=map.toMapFromStage(event.stageX, event.stageY);
const latlong:MapPoint=WebMercatorUtil.webMercatorToGeographic(mapPoint) as MapPoint;
mousecoords.text
="x,y is " + mapPoint.x.toFixed(0) + "," + mapPoint.y.toFixed(0) + " and Lat/Long is: " + latlong.y.toFixed(6) + " / " + latlong.x.toFixed(6);
}

// convert current projected extent to geographic and show as such
protected function showExtentInGeographic(extent:Extent):String
{
const geoExtent:Extent=WebMercatorUtil.webMercatorToGeographic(map.extent) as Extent;
// return geoExtent.toString() + ".." ;
return " " + geoExtent.xmin.toFixed(6) + ", " + geoExtent.ymin.toFixed(6) + ", " + geoExtent.xmax.toFixed(6) + ", " + geoExtent.ymax.toFixed(6) + " (wkid: " + geoExtent.spatialReference.wkid + ")";
}
]]
>
</fx:Script>
</s:Application>
  

2011年12月12日 星期一

解决远程连接超过最大连接数问题

记不住,每次都百度,很讨厌。还在写在随笔里吧 以如下命令形式即可解决超过最大连接数问题 
运行 mstsc /v:IP /console ,比如 

mstsc /v:211.211.0.5 /console 

就可以连接到远程系统的的会话

2011年11月27日 星期天

Java 编码规范


   

#Top  

0. 规范的规范

  1. 本规范的每一条目必须无二义性,并且可执行。否则作废
  2. 本规范的条目分为两个级别:
    • 规则 -R
    • 建议 -S
  3. 本规范所有的“规则”条目必须被遵守

 

#Top  

1. 代码格式

  1. -使用统一的 Eclipse 的代码格式:http://code.google.com/p/nutz/source/browse/trunk/doc/eclipse/nutz-eclipse-java-code-format-1.0.xml
    • 请从 svn 的 trunk/doc/eclipse/nutz-eclipse-java-code-format-1.0.xml 获得此文件
  2. -非 Eclipse 用户请阅读上述 XML 代码自行遵守
    • 基本上我们没有为非 Eclipse 用户指定规范,我们还没有一个好办法

 

#Top  

2. 命名


 

#Top  

2.1 包

  1. -包名必须全部小写,2个以内单词。
    1. -最好为 1 个单数名词
  2. -所有项目的包要以 “org.nutz” 为父 包 。

 

#Top  

2.2 类和接口

  1. -最好为名词
  2. -命名类和接口时,需要将所有单词的首字母大写。
  3. -接口的命名不采用首字母为 I 或加上 IF 后缀的命名方式 。例 如 :IBookDao 、 BookDaoIF 等 。
  4. -抽象类必须使用 Abstract 作为类名的前缀,而接口建议使用 Interface 作为 接口名后缀。
  5. -异常类应该使用 Exception 做为 名称 后缀。
  6. -如果是运行一次就抛弃的类,以 ing 结尾,比如Rendering
  7. -类名尽量短,但是最好不要缩写,如果缩写,必须为特别常用的类,比如 org.nutz.dao.Cnd
    • 因为调用者书写你的类名太长,他(她)的IDE会自动替他(她)换行,他会觉得有点不爽
  8. -不要和 Java 的标准库中的类名冲突,比如 Class, Object, String 等
    • 如果冲突,就表示你极其藐视 Java 标准库中的那个的设计
    • 调用者需要花更多的时间和代码来明确他使用的是你的类, 而不是标准库中的那个
  9. -以下情况可以允许写奇怪类名 --名称简短,让人一眼不知道什么意思,用了以后一眼就能知道什么意思
    • 类特别常用
    • 类非常特殊,难以归类
    • 私有类或内部类
    • 不推荐其他人调用的 公有、保护、默认类
      • 起个奇怪的名字,就是不想让你关心这个类的代码
  10. -缺省接口实现应该使用 Default 名称 前缀 。例 如 : DefaultEntityMaker。
    • 也可以采用 Impl 作为后缀,表示这个实现为此接口的最优实现或者唯一实现

 

#Top  

2.3 成员变量

  1. -最好为单数名词
  2. -能 private 就不要 default,能 default 就不要 protected,最好不要 public
  3. -如果是集合或数组,用复数名词
    • Map pets, 比 Map petMap 要好
  4. -不要用一个字母,尤其是 i,你可以用 index 或者 cursor 来代替

 

#Top  

2.4 常量

  1. -命名常量(带有 final 修饰符的域)时需分隔。如 : public final int MAX_VALUE = 30 。

 

#Top  

2.5 局部变量

  1. -局域变量名要尽量短,推荐用缩写,比如 StringBuilder sb
  2. -总的来说局部变量请随意命名,越短越好
比如这个就不好
 publicString abc(String str){
       
AbcObjectSet abcObjectSet =newAbcObjectSet();
        abcObjectSet
.setName(str);
       
return abcObjectSet.getBrief();
 
}
而这个就很容易阅读了:
 publicString abc(String str){
       
AbcObjectSet aos =newAbcObjectSet();
        aos
.setName(str);
       
return aos.getBrief();
 
}

 

#Top  

2.6 成员函数和静态函数

    1. -除了 setter / getter,其他的函数采用动词或者动名短语
    2. -以下情况可以允许写奇怪函数 --名称简短,让人一眼不知道什么意思,用了以后一眼就能知道什么意思
      1. 函数特别常用
      2. 函数非常特殊
      3. 私有函数或默认函数
    3. -支持链式赋值的 setter 允许写成 ,并且也可以支持同名 getter
// Setter
publicPet name(String name){
       
this.name = name;
       
returnthis;
}

// Getter
publicString name(){
       
returnthis.name;
}

 

#Top  

3. 注释

  1. -注释必须和代码保持同步 。
  2. -注释中的第一个句子要以(英文)句号、问号或者感叹号结束。 Java成工具会将注释中的第一个句子放在方法汇总表和索引中。
  3. -如果注释中有超过一个段落,用 <P> 标签 分隔。
  4. -如果注释中有多个章节,用 <H2> 标签声明每个章节的标题。
  5. -如果注释需要换行,用 <BR> 标签。
  6. -示例代码以 <PRE></PRE> 包裹。

 

#Top  

3.1 类 Java Doc

  1. -要著名作者,格式为 @Author XiaoMing(xm@gmail.com)
  2. -继承的方法可以省略注释,但是被继承方法必须有注释。

 

#Top  

3.2 函数 Java Doc

  1. -简单的 get/set 方法可以省略注释。
  2. -继承的方法可以省略注释,但是被继承方法必须有注释。

 

#Top  

3.3 字段 Java Doc

  • -没有更多说明了

 

#Top  

3.4 函数内部注释

    • -行注释和块注释都是可以被接受的
    • -不要写 JAVA DOC,没意义
    • -代码质量不好但能正常运行,或者还没有实现的代码用 “ //TODO: ”
    • -在 if ... else .. 分支上做注释格式应该如下:
// comments for case A
if(xxxx){
       
//TODO you code here
}
/*
 * Multipline comments for case B
 */

elseif(xxxxx){
       
//TODO you code here
}
// comments for default case
else{
       
//TODO you code here
}

 

#Top  

4. 编程

  1. -你的每一次提交,必须都是编译通过的
  2. -你的每一次提交,最好都是通过 JUnit 测试的
    • 除非有特别的情况 -- 比如你要和其他人分享的修改
  3. -无论任何时候,同样的功能,一段更短的代码,总比更长的代码要好
    • 这里的“短”,主要指的是“逻辑”短,而不是“字符长度”短
  4. -删掉一段代码的贡献,比增加一段代码的贡献要大,至少不比它小
  5. -避免过度设计
    • 先让代码能工作,然后重构成为优美的代码
    • 你需要知道,“接口”固定了架构,“类” 不是,当它进化为接口的时候就固定了
    • 代码结构设计请遵循《草坪原则 

 

#Top  

5. 单元测试

  1. -用例名请用 "长名 " - 一句话,用下划线_代替空白
    • 通过这个名字,基本可以了解测试是干什么的
  2. -主要接口和实现类要尽可能多的被用例覆盖