这两天在做与某知名一卡通公司的单点登录集成(我们的产品使用Java编写,对方的程序使用.Net编写)其中有一项参数是时间戳。即当前时间相对于公元1970-1-1 00:00:00的秒数。按照他们给出的文档我完成了Java部分的编写,时间戳部分很简单,一句话:
private String createTimestamp( ) //timestamp
{
return System . currentTimeMillis( ) / 1000 + "" ;
}
使用System.currentTimeMillis()方法就能得到自1970年1月1日0时0分0秒的毫秒数,除以1000自然是秒数。但是意外却发生了,我产生的时间戳跟他们公司产生的时间戳差了一大截,查阅资料后发现.Net跟Java在处理时间上有出入。
.Net产生的时间都是当前时区的当前时间,而Java的currentTimeMillis()方法得到的却是相对于GMT来的时间。中国所在时区是+8区,故时间整整差了8小时!
所以当童鞋们再遇到.Net跟Java时间不一致的时候,多往时区方面考虑考虑,说不定就能找到解决办法了 :)
当然我会给出解决方案:
方法一:JVM运行时增加参数,指定时区 -D user.timezone=GMT+08
方法二:直接在程序中设置时区。System.setProperty("user.timezone","GMT +08");
方法三:直接加上28800就好了(8hours*60min*60sec=28800)
今天济南天气超级好,出去走走~
草绿色是我最喜欢的颜色,看着这些绿油油的植物,心情瞬间舒畅不少~~
复古的小桥、清澈的流水、连成片的客船~~外加垂柳的点缀,瞬间春意盎然。
也许看了前两张片子大家还不知道我是去了哪里,但看到这张图,想必对济南有所了解的人一定知道我到了哪里 :)
大家形色匆匆的打青龙桥上而过,你有尝试过走走桥下么?
打水仙花中穿过的石板路,还有几只觅食的麻雀,是不是别有世外桃源的感觉?
《水仙》 嘿嘿
最近在做毕业设计,依然使用了SSH2作为基础框架,同时引入了JBPM来做工作流框架,因为牵扯大量的业务逻辑,故一些Action之间的跳转是在所难免了。
Action之间的跳转主要有两种方法:
1)需要保存前一个Action的属性,我们可以使用
1: <result type=”chain”>action2</result>
2)仅跳转,我们可以使用
1: <result type=”redirect-action”>ActionName</result>
再追根究底一些,我们到底可以使用哪些result类型呢?我们可以参考struts-core-xxxx包中的struts-default.xml文件,里面记录了可以使用的result类型及其实现类。
1: <result-types>
2: <result-type name="chain" class ="com.opensymphony.xwork2.ActionChainResult" />
3: <result-type name="dispatcher" class ="org.apache.struts2.dispatcher.ServletDispatcherResult" default ="true" />
4: <result-type name="freemarker" class ="org.apache.struts2.views.freemarker.FreemarkerResult" />
5: <result-type name="httpheader" class ="org.apache.struts2.dispatcher.HttpHeaderResult" />
6: <result-type name="redirect" class ="org.apache.struts2.dispatcher.ServletRedirectResult" />
7: <result-type name="redirectAction" class ="org.apache.struts2.dispatcher.ServletActionRedirectResult" />
8: <result-type name="stream" class ="org.apache.struts2.dispatcher.StreamResult" />
9: <result-type name="velocity" class ="org.apache.struts2.dispatcher.VelocityResult" />
10: <result-type name="xslt" class ="org.apache.struts2.views.xslt.XSLTResult" />
11: <result-type name="plainText" class ="org.apache.struts2.dispatcher.PlainTextResult" />
12: </result-types>
今天看到一篇文章,蛮有感触,特转载如下。(转载自2012年2月10日 《今晚报》)
人活得平和,才能活出生命真正的滋味来。
平和的人,放得下、看得开,想得明白、过得洒脱。一个人若思想通透了,行事就会通达,内心就会通泰。世俗的名与利,他们不是不要了,而是无论得到得不到、得到的多还是少,都不再计较了。
有欲而不执著于欲,有求而不拘泥于求。活得越平和,就会放下得越多。人平和之后,生活会变得笃定、泰然、从容,疲惫的精神开始一点一点收合,在世俗中挣扎的灵魂开始一点一点归拢。也就是说,只有平和下来,生命才真正找到了回家的路。
我不相信,在欲望的泥淖中挣扎的人会平和下来。贪婪撕咬着他们、折磨着他们,潮欲平而暗流涌动,树欲静而惑风不止。明争暗夺、阴谋阳谋,哭一阵、笑一阵,这样的人是没法平和下来的。所以,平和,首先是内心的平静。
人,平和下来是美的。蹙眉舒展了,苦脸开花了,腰身挺直了,神色朗润了,气质和悦了。人的美若是从内里渗透出来,就会恒久地散发出迷人的魅力。一个真正能平和下来的人,外部的物质世界已经诱惑不了他,挑唆不了他,左右不了他。再急迫的事,也会举重若轻地处理好;再撩人的事,也会云淡风轻地放过去;再痛苦的事,也能轻拢慢捻地跳脱出来。
我认为,至深的平和,一定经过命运浮沉的洗礼,经过爱与恨的煎熬。一切都经过了、走过了、熬过了,生命的底色里增了韧、淬了刚、添了柔。这时的生命,已经沉静到扰不乱、动不摇。
平和,实际上是让一个人的内心,从狭小走向辽阔、从狂乱走向沉静、从复杂走向简单,能容、能让、能忍的过程。
一个人活得幸福,才是王道。幸福之外的任何东西,譬如金钱、权势,都是人生的附属品,风一吹就碎了,云一来就乱了,轻轻一说都倦了,回眸一望全散了。其实,人生的幸福也不全是得到,不全是拥有。在平和者的心底,有一种东西,尽管淡淡的,却更容易让人产生绵延的幸福感和快乐感。那就是,心底里的那份踏实和安详。
今天下午接到大张老师电话,问能不能恢复SQL Server中已经被删除的一条记录,忽然想起若干年前牙牙老师也问过我这个问题,于是放狗搜索了下,找到了解决方案。
因为SQL Server是基于日志管理的数据库系统,每一笔操作都有详细的日志作为记录,这为我们做恢复提供了非常有利的先决条件,通过搜索引擎,我查找到了一款名为“LogExplorer”的商业软件,可以对SQL Server的日志进行分析,并通过日志恢复数据。
这是一款商业软件,未注册版本可以使用30天,安装的时候需要同时安装客户端及服务器端。软件运行界面如下图。
而我们要做的非常简单,点击左侧的“View Log”即可查询所有的日志信息,如下图:
因为我们的日志数量非常多,而日志中又记录了全部的CRUD操作,我们只想筛选某一时间的某种操作,怎么办呢,很简单,点选上图工具栏的第一个图标即可。点击之后,他会让你选择筛选条件,如下图:
除了可以设置筛选的时间之外,我们还可以按照操作进行筛选~如下图:
在这里我仅仅针对删除的记录做筛选,从上图中看出,我们几乎可以对所有的操作进行筛选~筛选完成点击“Apply”。系统便会给出我们筛选结果~
经过我们的筛选,列表中只剩下一条记录啦,经查,这条记录就是被我们误删的记录。那我们想要恢复这条记录,也只是仅仅需要在记录上面点右键,选择“Undo Transaction”如下图。
他的恢复并不是直接作用于数据库,而是生成对应操作的逆操作脚本,所以在选择“Undo Transaction”之后,系统会让你给出脚本的保存位置。系统导出的脚本如下:
最后再通过SQL Server自带的查询分析器执行生成的脚本,即可恢复记录。
点此下载:LogExpress
更多关于Log Explorer的使用,可以参考:
LogExplore的一个详细操作手册
因为服务器区限制,仅有某几台服务器可以上外网,但是Linux服务器时间经常跑偏,于是决定搭建网内的NTP时间服务器,时间搭建服务器的过程我不详述,网上很多,在这里我说说一个奇怪的问题——搭建好的Windows服务器无法与之进行同步,就是在Internet时间那填上服务器地址点同步,老是失败,查看日志报接收到错误的时间数据。
从网上搜了一下,找到一个解决办法,只要在命令提示符内使用如下命令就搞定:
1: net time /setsntp:time.sdyu.edu.cn
2: net stop w32time
3: net start w32time
然后,就搞定啦!嘿嘿
我的ThinkPad x201算算买了也已经一年了,原机标配的320G的日立已经不能满足我这个Programer & Photoer & Downloader & PTer 的需求,故考察了一下硬盘,虽说很想体验下SSD的速度,但是由于升级最紧迫的事情就是为了容量,而且SSD一旦损坏数据很难修复,为了兼顾容量及速度,以及文件的安全性,我选择了希捷最新推出的混合硬盘——ST750LX003,至于这块混合硬盘的性能如何,这留作下篇日志的内容 :)
今天我们的重点是我换下来的这块日立的320G 7200转硬盘该如何处置,当初考虑的就是上个硬盘盒,做成移动硬盘,可因为普通USB 2.0 传输速度也就在30MB/s的样子上,于是我动了USB 3.0的念头。
说干就干,既然想上USB 3.0,那么一款支持USB 3.0的硬盘盒是必不可少的,一开始比较倾向SSK的产品,可后来听某大说元谷的主控要好一些,恰好京东元谷的T250这款盒子又搞促销,嘿嘿,这样的机会对于我这个患有“选择性障碍”的天秤座来说,简直不用选择哇,于是我就有了这款盒子。
看外观确实很有质感,铝合金的外壳在冬天摸起来凉凉的,接口部分仅仅带了USB 3.0跟电源接口,三下五除二的拆开硬盘盒,装入老的硬盘,嘿嘿,硬盘的事情搞定。而让心感觉很爽的就是这个元谷的数据线,真是粗(见本页第一张图片),而蓝色的数据线,蓝色的接口,都散发着USB 3.0的光辉……不过缺点也是有的,这线太粗了,如果往电脑上插的时候发现你的接口正好反了180度,你需要费很大的力气,才能把它转过来 –_- !
哈哈,硬盘盒的问题搞定了,迫切的把它连入计算机,打开HDTune,选中移动硬盘,测速,速度令人无奈——还不到30MB/s !
想了想,对我的ThinkPad x201 上没有USB 3.0的口,怎么可能达到3.0的速度嘛,幸好本本上还有ExpressCard接口,我可以入个ExpressCard转USB 3.0的适配卡。又是一番考察,我发现目前主流的ExpressCard2USB3.0的芯片就两家公司在做NEC与FL,NEC的应用最广泛,但是发热量巨大,FL1000评论很少,而且性价比高一些,发热量信息未知,好吧,为了做实验,忍……京东入手SSK的UH-S401。
看做工一般,下面给张接口的特写。
瞧,也是非常简洁,一个USB 3.0的口,一个额外供电的电源口。细心的同学肯定注意到了,USB3.0跟USB2.0接口很大的一个区别就是2.0只有一排触电,而USB3.0变成了两排。
迫不及待的插到ExpressCard插槽里去,装上驱动,连接上硬盘盒,测速,哇哇!
这速度几乎已经达到了我日立7200转硬盘的传输速度!不过测试完毕我也郁闷了,插ExpressCard的左下角位置已经能感受到些许温度了。而且我发现即使不使用这个USB 3.0的接口,光插上这个扩展卡它也是会发热的,但是跟这传输速度相比,我认为这个缺点可以忽略——大不了文件传输完成我就拔下来呗!
今早接到山青院电话,说需要一个修改DNS为校内DNS,并且清空IE临时文件的脚本,想都没想,用批处理写了一个:
rem programed by Kaisir
@ echo off
echo 本脚本的作用为修改您的DNS为山东青年政治学院专用DNS 222.194.76.2 同时帮您清除了电脑中的临时文件。若有疑问,请致电网络中心。
pause
echo 修改DNS中...
netsh interface ip set dns "本地连接" source=static addr=222.194.76.2
echo DNS已经修改成功,接下来将开始清空ie临时文件...
pause
echo 清除临时文件中...
del /f /s /q "% userprofile % \Local Settings\Temporary Internet Files\*.*"
del /f /s /q "% userprofile % \AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*"
echo 全部操作已成功完成!感谢您的使用。
pause
你瞧,思路很简单,用netsh把dns改了就是了,因为要适应Win7跟Xp临时目录的不同,于是删除语句写了两遍。
但是,仔细想想,这个脚本有很多问题,
1)若用户有多块网卡,这个脚本只会修改“本地连接”的那一个。
2)若用户自己手动修改了临时文件的位置,则这个脚本也无能为力。
于是,有了下面这个vbs版的脚本。
'Program By Kaisir
Const T_NEWDNS1 = "222.194.76.2" 'DNS1
Const T_NEWDNS2 = "8.8.8.8" 'DNS2
set os=createobject("wscript.shell" ) '把wscript脚本执行外壳特性赋予给 os变量
lret = MsgBox ("本脚本可以帮助您修改DNS为山东青年政治学院内部DNS并清空浏览器临时文件,是否运行?" ,vbYesNo)
if lret=vbYes Then
strWinMgmt="winmgmts:{impersonationLevel=impersonate}"
Set NICS = GetObject( strWinMgmt ).InstancesOf("Win32_NetworkAdapterConfiguration" )
For Each NIC In NICS
If NIC.IPEnabled Then '检索所有启用的网卡
NIC.SetDNSServerSearchOrder Array(T_NEWDNS1,T_NEWDNS2)
End If
Next
'开始执行清空临时文件
net_temp=os.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\cache" ) '---通过读取注册表特殊位置获知系统ie浏览器的缓存文件夹位置,并赋值给变量net_temp
MsgBox(net_temp)
'删除目录下的所有文件及文件夹
Const DeleteReadOnly = True
Set objFSO = CreateObject("Scripting.FileSystemObject" )
objFSO.DeleteFile(net_temp&"\*.*" ), DeleteReadOnly
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2" )
Set colSubfolders2 = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & net_temp & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent" )
For Each objFolder2 in colSubfolders2
objFSO.deleteFolder objFolder2.name , DeleteReadOnly
Next
MsgBox("所有操作已成功执行!" )
else
end if
这个就比较智能了,通过winmgmts获取系统中的网卡列表,然后遍历启用的网卡,然后进行修改。而临时文件部分,也是通过读取注册表“HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\cache”项的键值来获取文件夹位置。之后通过创建的fso对象的相应方法给他干掉~
今天在部署FreeNas服务器的时候,设置完用户权限之后,再点击卷的权限设置时出现了上图的错误~~百思不得其解,当时还以为是程序Bug,中午吃饭回来以后突然想到会不会是权限出问题了,以至于他没有权限读取要设置的那个卷~通过ssh登录上FreeNas一瞧,嘿,当前挂载点的用户组竟然是乱码!!经排查,发现之前部署用户组的童鞋的用户组名称全都是中文~~竟然是这个引起了FreeNas奇怪的错误,将所有的组名改为英文,并通过ssh重置挂载点的权限后,故障解决!
总结:使用原生英文版的时候一定要注意,尽可能使用全部英文的描述,不然很容易出莫名其妙的问题。使用英文版软件,出现问题,先从本地化的原因找起,往往能快速解决问题。
这几天一直在忙着ESX下面的虚拟机的迁移,大部分都很顺利,ESX的HA特性决定了他几乎可以在不停机的情况下直接迁移主机跟存储~但是有一台Ubuntu的主机迁移过来之后却认不到网卡,从百度搜索了一下,在“懒人小G的微博”找到了解决方案,现粘贴记录如下:
重启网络报:eth0:ERROR while getting interface flags: No such device
之前重启系统后网络没问题,后来因为做了虚拟机拷贝之后重启系统就找不到网卡了。
原因:
因为直接拷贝虚拟机后,启动系统时会问是copy还是move,选move没事。假如不是选move就会因为网卡mac地址不一样导致系统找不到。