随笔-46  评论-54  文章-0  trackbacks-0
  2009年1月7日
在 Windows 上离线安装 Chrome
https://support.google.com/chrome/answer/126299?hl=zh-Hans
这里链接默认是32位的。
针对所有用户安装版64位完整链接为:
https://www.google.com/chrome/browser/desktop/index.html?system=true&standalone=1&platform=win64

Chorome快捷方式+SwitchyOmega

/Files/rox/chrome.7z
posted @ 2016-05-21 20:52 rox 阅读(336) | 评论 (0)编辑 收藏
参加了国内某知名快递公司的面试,一面就放弃了
自己公司的一个HR经理也曾经教过要换位思考,现在简单的介绍一下面试过程中的一些感想。
1. HR打电话的时候,问周六有没有空?
问题:虽然是专场,但这是很多HR应该规避的,应该尽量说明这是公司的安排,这种周六加班不是企业文化。
建议:曾经遇到过的几个HR都非常注意这一点,特别说明晚上和周末一般都不加班,虽然说HR多半都是骗子,呵呵!
2. 回答都有空,便安排在早晨的第二个时间段
问题:实际上安排了将近50人在早晨面试,可想而知,是面不完的。
      现场有点貌似华为面试,只不过不是在食堂:D
      11点左右HR一面,20分钟,到了12点钟,组织方开始发餐票,到隔壁快餐店用餐。
      没拿餐票,直接回家了。
建议:组织安排上,还算OK,但稍微比较有经验和有能力的HR,应该不会做这样的安排。
      即使是新项目启动,采取这样方式海招,风险比较大,应该是一个相对长期的过程,可以把招聘过程安排的相对宽松点。
      在公司,自己也做技术面试,一般都会面半个小时到一个小时左右,连续面了两个以上,精力和质量就会下降的很厉害。
3. 一面HR的内容,2分钟介绍自己,同时看表,增加面试着的压力。再问了工作和生活上的问题,还有技术问题!
问题:技术问题,比较有意思。
      HR问,最近一年,业界都有那些新技术,回答了Android和iPhone,猜他是想问云计算(面试前调研过,该公司有一直想进电商行业)。
      然后,HR再问Java方面有啥新技术,特意回答没啥新的啊。这个后来被自己朋友批,不知道反问他么!
      这时,HR就做出了一个重大的决定,准备开始对我的职位进行降级。问有没有意向,直接否掉。
      然后就说,各个公司的职位要求不一样,该公司要求更高点,就结束谈话,等待下一轮面试。
      40分钟后,开始发餐票。自己什么都没说就走了,这个其实也是特意做的,后面会有解释。
建议:面试20多分钟,都是HR对面试者进行提问和定位,不留给对方了解相关项目的机会,这个很少见。
      另外,很多初级HR只对项目里面说需要技术单词比较敏感,往往会在面试的时候,就急于问,好进行准确定位。
      但又怕问了以后会让面试者对后面的技术面试有所准备,技巧啊,技巧啊!
另外:解释一下自己没领餐票直接走人,其实想看一下组织方会有哪些动作。
      1. 发餐票的HR妹妹,啥也没问,直接放走。一个已经等了将近三个小时面试者,却不愿意再多等一个小时,没有任何疑问。这种情况发生在自己公司,会被HR经理骂的。呵呵!
      2. 负责一面的HR,大约在一个小时后的确给电话了,你在哪?自己说回家了,然后HR就说那下次有机会再联系吧,就挂了。看来他真的很忙。呵呵!
也参与过自己公司的很多面试,接触HR比较多,从HR经理那里也学到了不少东西,包括压力测试(其实,面试者也可以多给HR一些压力测试)。
感觉这个非常有意思,比和搞技术的打交道有意思。
把自己面试时的一些想法和技巧列出来。
可能还是太片面,而且带着搞技术的那种“坏味道”。
只是希望能为大家提供一点点参考。
posted @ 2013-07-28 11:53 rox 阅读(193) | 评论 (0)编辑 收藏
前一家公司经理的思想是,设计好的系统是绝对不会出错的。需要容错,绝对是没设计好。
这个似乎有道理,但完全不考虑,真正实际环境,是涉及到三方交易结算的的东西啊,真替他捏把汗。

现在的项目,一堆Oracle、腾讯、华为、证券摸爬滚打出来的技术精英,还包括一个纯servlet+jdbc开源项目的作者凑一堆。
不懂Tomcat下为什么要配置filter转码,把这个和虚拟机编码机制混为一谈,最后感慨一句weblogic就没这问题。
也有不懂啥是乐观锁的。
面试的时候,对集合类型及操作考的头头是道,但项目里,一个都没用到。
项目中遇到问题,往往就是解决、解决+解决,不究其原理。
感觉自己像在做硬件拼装的富士康。

牢骚两句。
posted @ 2013-07-21 23:19 rox 阅读(234) | 评论 (0)编辑 收藏
安装64位Ubuntu,方法其实解决方案很简单,不用下载任何的ISO,只要去下载最新的64位包,见下面资源。
拷贝wubi.exe和下载好的ubuntu-12.04-wubi-amd64.tar.xz都拷贝到C盘根目录下,然后执行下面命令即可。

1 wubi.exe --dimagepath=c:\ubuntu-12.04-wubi-amd64.tar.xz

资源:
What is ubuntu-11.10-wubi-amd64.tar.xz ? 

wubi安装Ubuntu11.**正确方法及无限等待下载amd64.tar.xz解决方法

http://cdimage.ubuntu.com/wubi/current/amd64.tar.xz

http://releases.ubuntu.com/12.04/ubuntu-12.04-wubi-amd64.tar.xz
posted @ 2012-07-12 13:26 rox 阅读(6512) | 评论 (4)编辑 收藏
 

参考了这篇the script is not working for any mvc frameworkuri的回复,结合当前Uploadifyv2.1.4版,netbean 6.9.1下编写调试。

        新建grails工程,名为test,并把Uploadify-v2.1.4.zip解压到web-app\uploadify目录下。

        新建grails控制器PictureController,代码如下

package com.test

 

class PictureController {

 

    def index = { redirect(action: "upload") }

 

    def upload = { }

 

    def savePicture = {

       def files = request.getFileMap();

       def path = "c:/test/" + files.get("Filedata").getOriginalFilename();

       files.get("Filedata").transferTo( new File(path))

       render (view:'upload')

    }

}

        新建grails视图upload.gsp,代码如下,注意粗体部分的上下文路径

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>upload file sample</title>

    <link rel="stylesheet" href="/test/uploadify/uploadify.css" type="text/css" />

    <script type="text/javascript" src="/test/uploadify/jquery-1.4.2.min.js"></script>

    <script type="text/javascript" src="/test/uploadify/swfobject.js"></script>

    <script type="text/javascript" src="/test/uploadify/jquery.uploadify.v2.1.4.min.js"></script>

    <script type="text/javascript">

    $(document).ready(function() {

            $("#fileUpload").uploadify({

                'uploader': '/test/uploadify/uploadify.swf',

              'cancelImg': '/test/uploadify/cancel.png',

              'script': '/test/picture/savePicture',

              'folder': 'files',

              'multi': true,

              'buttonText': 'add',

              'displayData': 'speed',

              'simUploadLimit': 2

            });

    });

    </script>

  </head>

  <body>

    <hr width=100% size="1" color="" align="center">

        <h2>Multiple File Upload</h2>

        <p>checkScript, buttonText, simulataneous upload limit</p>

        <div id="fileUpload">You have a problem with your javascript</div>

        <a href="javascript:$('#fileUpload').uploadifyUpload()">Start Upload</a> |  <a href="javascript:$('#fileUpload').uploadifyClearQueue()">Clear Queue</a>

<p></p>

  </body>

</html>

        运行工程,访问http://localhost:8080/test/picture/upload

posted @ 2010-12-06 15:38 rox 阅读(1062) | 评论 (2)编辑 收藏

公司安排研究耶鲁CAS单点登录的实现,并研究了一下它的代理协议,看了N多文档和代码,才大概明白是怎么回事。
为了方便有兴趣的朋友学习,去掉了HTTPS的加密,源代码、webapp包和配置文件都有。
本来打算针对这个写篇文章,不想写了。

  

另:

  • 针对cas-server-2.0.12和cas-client-2.0.11的
  • ppt中部分内容是翻译+自己理解的,中英文水平均有限,请谅解。

下载地址:

posted @ 2010-04-14 17:41 rox 阅读(585) | 评论 (2)编辑 收藏
JasperReports数据库查询父子报表模板



  • 安装并打开iReport,并新建一个报表文件(见图-1)
[图-1]

  • 选择在“c:\test”目录下建立一个find文件(见图-2)
[图-2]

  • 新建一个datasource,选择jdbc连接方式,命名为find。使用HSQLDB(File)方式,url为jdbc:hsqldb:c:/test/find.hsql,用户名为sa,密码为空,测试一下,成功了,保存即可(见图-3、图-4、图-5
[图-3]

[图-4]

[图-5]

  • 设置报表查询语句、字段后,组和结束页面基本跳过(见图-6、图-7、图-8、图-9
[图-6]

[图-7]


[图-8]


[图-9]

  • 其实做到这里,就可以自己制作根据数据库查询报表了,要画图设置一些参数,说起来麻烦,就干脆打开样例模板来看看结果吧。
这里需要说明的是report1.jrxml是主报表、report1_subreport2.jrxml是子报表,主报表查出的每条记录的结果CLASSNAME作为子报表的查询条件参数传递过去(见图-10、图-11、图-12、图-13
[图-10]

[图-11]

[图-12]

[图-13]


参考资料:
  • 样例模板和数据库
http://docs.google.com/leaf?id=0B8vmIM2WmTA2OWE5ZGY0OTktMTkyZC00ZTljLTg1YjMtODA5ZWQ3NjA0MjMz&hl=zh_CN

  • Creating JasperReport subreports
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/index.jsp?topic=/com.ibm.egl.pg.doc/topics/pegl_rep_subreport_create_tsk.html

  • 利用复合的javabean构造基于jasperreports的子报表

本文地址
posted @ 2010-02-26 16:12 rox 阅读(606) | 评论 (0)编辑 收藏

原帖地址:java开发的乱码问题

 

第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。

第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
 <head>
  <title>test</title>
 </head>
 <body>
  我是个好人
 </body>
</html>
会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。

至此,页面应为:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
 <head>
  <title>中文问题</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 </head>
</html>

第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

特别注意:
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/)

2,get提交的数据:
两种情况:
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情况类似.

总结:
1,所有页面使用utf8编码,
2,服务器加上过滤器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
从这里输入.

第六,连接数据库

1、mysql配置文件:
修改mysql在windowsmy.ini里default-character-set=utf-8

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&amp;'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&amp

posted @ 2010-01-05 08:43 rox 阅读(420) | 评论 (0)编辑 收藏

原帖:http://chenyaqiong81081.blog.163.com/blog/static/44622594200791235256255/

一、Runtime.getRuntime().exec()执行命令情况:
       Runtime.getRuntime().exec("cmd /c your command")//2000
       Runtime.getRuntime().exec("command /c your command")//98
       Runtime.getRuntime().exec("sh/ your command")//linux

二、执行.sh文件的情况:
      1、把命令写成a.sh ;执行命令的时候
           Process child = Runtime.getRuntime().exec("bash a.sh,null,new File("//usr/local/mysql/bin/"));
           child.waitFor();
           ........
       2、Process child = Runtime.getRuntime().

                                          exec(new String[] {"/bin/sh","-c","mysqldump -u root -p7788919 axtic_cg" },

                                                   null,
                                                   new File("/usr/local/mysql/bin/"));
            child.waitFor();

            注:waitFor()等待操作完成

posted @ 2009-12-29 17:10 rox 阅读(2799) | 评论 (0)编辑 收藏
     摘要: Java多层目录打包和解压代码(apache commons compress, io, lang)   package zip;   import java.io.BufferedOutputStream; ...  阅读全文
posted @ 2009-11-12 22:53 rox 阅读(3947) | 评论 (1)编辑 收藏

Windows XP增强dos命令

命令:DIR,列文件、目录

增加参数:/-C
参数说明:DIR列文件、目录时显示的文件大小,其数值以千为单位进行分隔,使用此参数即“DIR/-C”将取消显示中的分隔符,以满足部分人的视觉习惯。

增加参数:/Q
参数说明:Windows是多用户操作系统,使用此参数即“DIR /Q”列文件、目录时,将显示出文件、目录的用户属性。

增加参数:/T:C、/T:A、/T:W
参数说明:使用此参数即“DIR/T:C”、“DIR/T:A”、“DIR/T:W”分别显示文件、目录的创建时间、上次访问时间和上次修改时间。

增加参数:/X
参数说明:使用此参数即“DIR/X”列文件、目录时,会对长文件名同时显示“8.3”格式的文件名。

命令:CD,改变目录

增加参数:/D
参数说明:此参数的作用是快速改变当前目录,比如当前目录是C:\Windows,使用命令“CD/D E:\Tools”可快速切换到E:\Tools目录下。注:只有在Win XP的“运行”文本框中输入“CMD”得到的DOS窗口中才能使用此参数。

命令:MD,建立目录

功能说明:此命令并未增加参数,但是增强了功能,它可一次建立多级子目录, 例如使用命令“MD AA\BB\CC\DD”将一次性创建AA、BB、CC、DD四级子目录。而在老版本的DOS中,若不存在AA子目录,便无法直接建立AA下的BB等深层子目录。

命令:RD,删除目录

增加参数:/S
参数说明:使用此参数即“RD/S”用于删除目录树,即删除目录及目录下的所有子目录和文件,相当于以前版本中的DELTREE命令。

增加参数:/Q
参数说明:使用上面的/S参数删除目录树时,系统会要求用户确认是否真的要删除。若同时使用/Q参数即“RD/S /Q”,在进行删除操作时将取消确认,相当于DELTREE命令的/Y参数。

命令:DEL,删除文件或目录

增加参数:/F
参数说明:使用此参数即“DEL/F”可删除只读文件。

增加参数:/S、/Q
参数说明:使用此参数即“DEL/S”作用与“RD/S”完全相同,即删除目录及目录下的所有子目录和文件。同时使用参数/Q,可取消删除操作时的系统确认。

增加参数:/A
参数说明:删除指定属性或指定属性以外的文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件。

命令:ATTRIB,更改文件或目录的属性

增加参数:/D
参数说明:在Win XP中我们不能把文件或文件夹设置为系统属性,只能设为只读、隐藏或存档属性。而带参数/D使用ATTRIB命令可以对文件的所有属性进行设定,设定时必须与参数/S同时使用。例如“ATTRIB /S /D +S D:\Study”,作用是将D:\Study文件夹设置为系统文件夹。

命令:Format,格式化磁盘

增加参数:/FS:filessystem
参数说明:按指定文件系统类型(FAT、FAT32、NTFS)格式化磁盘,例如“Format /FS:NTFS”。

命令:DATE、TIME,显示系统日期和时间

增加参数:/T
参数说明:使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间

Win2000/XP应用之奇技酷招

每个Windows用户都希望Windows的启动速度越快越好,不过,如果你想让Windows启动速度更快些,还要掌握一些加速Windows启动的独门秘技!

1.不容忽视的磁盘IDE通道

Windows XP中有一个非常影响启动速度的设置,那就是磁盘IDE通道。一般来说,Windows XP用户不需要安装主板的IDE驱动或补丁程序,ULTRA DMA功能就已经打开了。也正因为如此,绝大多数用户会让IDE通道处于自动状态,但这会导致Windows XP启动变慢——因为主板可以连接四个IDE设备,但大多数电脑只有两个IDE设备,即硬盘和光驱。少数人可能有单硬盘、双光驱(DVD和刻录机)或双硬盘、单光驱,即便这样也只有三个IDE设备,所以一般都有1~2个IDE通道处于空闲状态。此时,你应该把并不存在的IDE设备设置为“无”,而不是“自动检测”。

提示:设置IDE通道的方法是:单击“开始→控制面板”,双击“系统”,切换到“硬件”选项卡,单击“设备管理器”,再双击“IDE ATA/ATAPI控制器”。双击下面的“主要IDE通道”或“次要IDE通道”。我们可以看到,“设备0”下面的“设备类型”不可选,表明该IDE通道目前已被使用。“设备1”下面的“设备类型”可选,如果你近期内不再添加新的IDE设备,可以将“设备类型”设置为“无”。

2.禁用服务和启用Power User

Windows 2000/XP的启动速度要比Windows 9x/Me慢,众多的服务是重要因素之一,因此普通用户禁用一些无用的服务,对启动速度也有很大帮助:

alerter (用户不在局域网并且不需要管理警报)

clipbook (用户不需要查看远程剪贴簿的剪贴页面)

distributed link tracking client (用户不使用NTFS分区并且没有连入局域网)

distributed transaction coordinator (不需要同时处理多个数据库或文件系统)

fax service (不需要发送或接收传真)

ftp publishing service(你的电脑不做为FTP服务器使用)

iis admin service (你的电脑不做为Web服务器使用)

另外,建议大家创建一个Power User用户,平时用它来登录Windows 2000/XP,因为相比管理员身份,它启动的服务更少同时也更加安全。

3.及时清理日志文件

Windows 2000/XP的日志文件比较容易被用户忽视。其实当我们每次开关机、运行程序、系统报错时,这些信息都会被记录下来,保存在日志文件中。但日志文件会随着时间的增长越来越大,从而影响了系统启动速度。我们可以自己指定日志文件的大小及处理方式:

进入“开始→设置→控制面板→管理工具”,双击“事件查看器”或是单击“开始→运行”,输入“eventvwr.msc”后回车,即可打开“事件查看器”,在右侧窗口中可看到应用程序日志、安全日志和系统日志。在任意一种日志上面右击并选择“属性”,就可以在如图所示的对话框中为日志文件设定最大值,还可以选择当日志满了以后的处理方式——一般来说让它自动覆盖一段时间以前的旧日志,这样日志文件就永远不会超出指定大小。单击“筛选器”选项卡可以指定需要写入日志文件的事件类型。


设置“系统日志”的属性

4.借花献佛加快Windows 2000 启动

Windows XP相比Windows 2000在很多方面进行了优化改进,因而启动速度更快,那么能不能让Windows 2000也可以享受这样的好处呢?其实,只要找到Windows XP相应语言版本文件,然后替换Windows 2000的相应文件即可。这两个文件为NTLDR、NTDETECT.COM,它们都在系统分区的根目录下。当然,为了防止Windows 2000出错,建议用户在替换这两个文件前备份Windows 2000原有的同名文件。

5.让蓝色滚动条只滚动一圈

这是一个适用于Windows XP的秘技。打开“注册表编辑器”,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]分支,然后双击右侧窗口中的DWORD值“EnablePrefetcher”,将其值由“3” 改为“1”。退出注册表编辑器并重启电脑,你会发现进入Windows XP时蓝色滚动条的滚动时间明显减少了!

posted @ 2009-09-23 09:26 rox 阅读(348) | 评论 (0)编辑 收藏

Java解压多重zip压缩包

    -- org.apache.commons.compress.archivers.zip.ZipFile结合ZipArchiveInputStream来实现

针对前一篇文章Javazip-- ByteArrayOutputStreamorg.apache.commons.compress打包后的zip文件如何解压的问题。

部分代码如下:



        File f = new File("c:/test.zip");

        ZipFile zf = new ZipFile(f, "gbk");

        File folder = new File("c:/test");

        if (!folder.exists()) {

            folder.mkdirs();

        }



        for (Enumeration<ZipArchiveEntry> files = zf.getEntries(); files.hasMoreElements();) {



            ZipArchiveEntry zae = files.nextElement();

            String zipname = zae.getName();

            if (zipname.endsWith(".zip")) {

                String innerzip = StringUtils.removeEnd(zipname, ".zip");

                File innerfolder = new File(folder + File.separator + innerzip);

                if (!innerfolder.exists()) {

                    innerfolder.mkdirs();

                }

                ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae), "GBK", true);

                FileOutputStream fos = null;

                ZipArchiveEntry innerzae = null;

                while ((innerzae = zais.getNextZipEntry()) != null) {

                    fos = new FileOutputStream(folder + File.separator + innerzip + File.separator + innerzae.getName());

                    IOUtils.copy(zais, fos);

                }

                zais.close();

                fos.flush();

                fos.close();

            } else {

                ZipArchiveEntry packinfo = zf.getEntry(zipname);

                String filename = folder + File.separator + zipname;

                FileOutputStream fos = new FileOutputStream(filename);

                InputStream is = zf.getInputStream(packinfo);

                IOUtils.copy(is, fos);

                is.close();

                fos.flush();

                fos.close();

            }

        }

        zf.close();



解包后效果如下图:

 



参考资料:

1、《Java打多重zip压缩包 -- ByteArrayOutputStream结合org.apache.commons.compress来实现》

http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6



2Apache Commons Compress

http://commons.apache.org/compress/



3、本文地址

http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn







 

posted @ 2009-07-28 19:02 rox 阅读(6622) | 评论 (0)编辑 收藏

Java打多重zip压缩

    -- ByteArrayOutputStream结合org.apache.commons.compress来实现



也就是很多个zip文件,但是打包的时候,部分要先集中到一个zip文件后,再写入总的zip文件。

可以采用临时文件夹的方式来解决,下面也是一种解决方法,部分代码如下:



        File f1 = new File("C:/boot.ini");

        File f2 = new File("C:/NTDETECT.COM");



        final ByteArrayOutputStream baos = new ByteArrayOutputStream() ;



        //changed @ 20097218:37:41

        //ArchiveOutputStream ostemp = new ArchiveStreamFactory().createArchiveOutputStream("zip", baos);

        ZipArchiveOutputStream ostemp = new ZipArchiveOutputStream(baos);

        ostemp.setEncoding("GBK");



        ostemp.putArchiveEntry(new ZipArchiveEntry(f1.getName()));

        IOUtils.copy(new FileInputStream(f1), ostemp);

        ostemp.closeArchiveEntry();



        ostemp.putArchiveEntry(new ZipArchiveEntry(f2.getName()));

        IOUtils.copy(new FileInputStream(f2), ostemp);

        ostemp.closeArchiveEntry();



        ostemp.finish();

        ostemp.close();





        final OutputStream out = new FileOutputStream("c:/test.zip");

        ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip", out);



        os.putArchiveEntry(new ZipArchiveEntry("打包.zip"));

        baos.writeTo(os);

        os.closeArchiveEntry();



        baos.close();



        os.finish();

        os.close();

[changed @ 20097218:37:41]

当初查资料时,就知道有个乱码错误,自己从没发现过,后来发现是因为winrar 3.8已经解决了这个问题。

但是为了和其他兼容,修改了代码。



打包后效果如下图:

 

参考资料:

1Commons Compress

http://labs.xiaonei.com/apache-mirror/commons/compress/binaries/commons-compress-1.0-bin.tar.gz



2java.io.ByteArrayOutputStream

http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html



3、本文地址

http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6

 

posted @ 2009-07-02 17:04 rox 阅读(1753) | 评论 (0)编辑 收藏

 

  Apache Solr集成至Tomcat

    原有系统已经开发,框架以SSH为基础,页面编码GBK,数据库为oracle,容器为tomcat6,需要整合全文检索,下面只是一个简单的整合测试。

1、嵌入Tomcat

解压 apache-solr-1.3.0.tgz,拷贝apache-solr-1.3.0\example\example-DIH\solr目录到Tomcat的安装目录后,修改solr目录中的solr.xml,屏蔽rss部分的配置,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<solr sharedLib="lib" persistent="true">
 <cores adminPath="/admin/cores">
  <core default="true" instanceDir="db" name="db"></core>
<!--
  <core default="false" instanceDir="rss" name="rss"></core>
 -->
 </cores>
</solr>

  • 删除Tomcat\solr\rss目录
  • Tomcat\solr\db\lib目录下添加必要jarojdbc14.jarslf4j-jdk14-1.5.5.jarslf4j-api-1.5.5.jarsolr-dataimporthandler-1.4-SNAPSHOT.jar
  • 拷贝apache-solr-1.3.0\example\webapps\solr.warTomcat\webapps目录下。
  • 创建Tomcat\conf\Catalina\localhost\solr.xml,内容如下:

<Context docBase="${catalina.home}/webapps/solr.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="${catalina.home}/solr" override="true" />
</Context>

  • 修改Tomcat\conf\server.xml,添加一个端口为8983Connector,内容如下:

<Connector port="8983" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443" URIEncoding="UTF-8"/>





2、配置DataImportHandler

change @ 20097110:19:57

    主要修改Tomcat\solr\db\conf\db-data-config.xmlTomcat\solr\db\conf\schema.xmlTomcat\solr\db\conf\solrconfig.xml,三个配置文件:

  • db-data-config.xml

<dataConfig>

    <dataSource driver="oracle.jdbc.driver.OracleDriver"

    url="jdbc:oracle:thin:@localhost:1521:orcl"

    user="solr" password="solr" batchSize="50"/>

    <document name="contents" >

        <entity name="content" pk="ID"

        query="select * from CONTENT"

        deltaQuery="select ID from CONTENT where to_char(PUBTIME,'yyyy-mm-dd hh24:mi:ss') > '${dataimporter.last_index_time}'"

        transformer="ClobTransformer">

            <field name="title" column="TITLE" />

            <field column="CONTENT" clob="true"/>

            <field name="pubtime" column="PUBTIME" />

        </entity>

    </document>

</dataConfig>

  • schema.xml

    types标签最后,追加fieldtype,名称为text_cjk,中日韩分词分析器;

    ......



    <fieldtype name="text_cjk" class="solr.TextField"> 

      <analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/> 

    </fieldtype>



 </types>



    屏蔽或清除<fields></fields>中的全部代码,并添加如下内容:

 <fields>

   <field name="id" type="slong" indexed="true" stored="true" required="true" /> 

   <field name="title" type="text_cjk" indexed="true" stored="false"/>

   <field name="content" type="text_cjk" indexed="true" stored="true"/>

   <field name="pubtime" type="date" indexed="true" stored="true"/>

   <field name="searchtext" type="text_cjk" indexed="true" stored="false" multiValued="true"/>

 </fields>



    修改默认唯一索引为先前定义的id

 <uniqueKey>id</uniqueKey>



    修改默认搜索字段为先前定义的searchtext,并将要搜索的titlecontent都拷贝到searchtext中,方便统一检索:

......



 <defaultSearchField>searchtext</defaultSearchField>

......



   <copyField source="title" dest="searchtext"/>

   <copyField source="content" dest="searchtext"/>

......

 

add @ 20097110:19:57

  • solrconfig.xml

    修改<dataDir></dataDir>标签中的检索数据存放路径。内容如下:

<dataDir>${catalina.home}/solr/db/data</dataDir>

 

 



3、导入和查询:

  • 完全导入:
    http://localhost:8983/solr/db/dataimport?command=full-import
  • 增量导入:
    http://localhost:8983/solr/db/dataimport?command=delta-import
  • 查询
    http://localhost:8983/solr
    点击db,进入一个搜索页面,填入如下内容:

pubtime:[2007-11-16T00:00:00Z TO 2008-11-28T00:00:00Z]

AND

工作;

pubtime desc

    点击搜索,测试。

4xml解析:

一个简单solr查询结果的辅助搜索类,内容如下:



import java.net.URL;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;



import org.dom4j.Document;

import org.dom4j.Node;

import org.dom4j.io.SAXReader;

import org.apache.commons.lang.time.DateUtils;



public class SolrUtils {

private List<Node> docs = new ArrayList<Node>();

private Number numFound = 0;

private Document doc;

public List<Node> getDocs() {

return docs;

}



public Number getNumFound() {

return numFound;

}

@SuppressWarnings("unchecked")

public SolrUtils(String urlString) {

doc = documentFromURL(urlString);

if (doc != null ) {

docs = (List<Node>)doc.selectNodes("/response/result/doc");

numFound = doc.numberValueOf("/response/result/@numFound");

}

}

public Document documentFromURL(String urlString){

try {

SAXReader reader = new SAXReader();

URL url = new URL(urlString);

       doc = reader.read(url);

       return doc;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}



public static String valueOf(Object obj, String name){

return valueOf(obj, "str", name);

}

public static Date dateValueOf(Object obj, String name){

String[] parsePatterns = new String[]{

"yyyy-MM-dd'T'HH:mm:ss'Z'",

"yyyy-MM-dd'T'HH:mm:ss.S'Z'",

"yyyy-MM-dd'T'HH:mm:ss.SS'Z'",

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",

};

try {

return DateUtils.parseDate(valueOf(obj, "date", name), parsePatterns);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static String valueOf(Object obj, String type, String name){

String path = "./" + type + "[@name='" + name + "']";

if (obj instanceof Node) {

Node n = (Node)obj;

return n.valueOf(path);

}

return "";

}

public static Number numberValueOf(Object obj, String type, String name){

String path = "./" + type + "[@name='" + name + "']";

if (obj instanceof Node) {

Node n = (Node)obj;

return n.numberValueOf(path);

}

return null;

}

public static void main(String[] args) throws Exception {

String url = "http://localhost:8983/solr/db/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on";

SolrUtils su = new SolrUtils(url);

System.out.println(su.getNumFound());

System.out.println(su.getDocs().size());

for (Node doc : su.getDocs()) {

System.out.println(valueOf(doc, "id"));

System.out.println(valueOf(doc, "title"));

System.out.println(dateValueOf(doc, "pubtime"));

}



}



}



参考资料:

1Apache Solr 的新特性

http://www.ibm.com/developerworks/cn/java/j-solr-update/



2Solr开发经验[]

http://www.jinsehupan.com/blog/?p=25



3slf4j-jdk14-1.5.5.jarslf4j-api-1.5.5.jarsolr-dataimporthandler-1.4-SNAPSHOT.jar

https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-jdk14-1.5.5.jar

https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-api-1.5.5.jar

http://people.apache.org/repo/m2-snapshot-repository/org/apache/solr/solr-dataimporthandler/1.4-SNAPSHOT/solr-dataimporthandler-1.4-SNAPSHOT.jar



4、本文地址

http://docs.google.com/View?id=ajfmzbdvh8wz_37f4jv46gb








posted @ 2009-06-28 01:19 rox 阅读(3093) | 评论 (0)编辑 收藏

原帖:http://space.itpub.net/29987/viewspace-51921

有的时候我们看到多个异常的进程需要被kill掉,如果一个一个的去做的话,觉得实在是太慢,下面这里提供有两种方法可以实现对有规律的结果做这个kill的动作。
1.
ps -ef | grep $1| awk '{print $2}' | xargs kill -9
2.
for i in `ps -ef|grep $1|awk '{print $2 }'`
do 
kill -9 $i 
done

另可以把ps语句再增加些参数如下:

ps -ef|grep java| grep -v grep| grep $1| awk '{print $2}'

posted @ 2009-01-07 09:42 rox 阅读(602) | 评论 (0)编辑 收藏