随笔-46  评论-54  文章-0  trackbacks-0
  2006年9月1日
在 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 阅读(374) | 评论 (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 阅读(206) | 评论 (0)编辑 收藏
前一家公司经理的思想是,设计好的系统是绝对不会出错的。需要容错,绝对是没设计好。
这个似乎有道理,但完全不考虑,真正实际环境,是涉及到三方交易结算的的东西啊,真替他捏把汗。

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

牢骚两句。
posted @ 2013-07-21 23:19 rox 阅读(272) | 评论 (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 阅读(6526) | 评论 (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 阅读(1070) | 评论 (2)编辑 收藏

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

  

另:

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

下载地址:

posted @ 2010-04-14 17:41 rox 阅读(597) | 评论 (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 阅读(615) | 评论 (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 阅读(429) | 评论 (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 阅读(2836) | 评论 (0)编辑 收藏
     摘要: Java多层目录打包和解压代码(apache commons compress, io, lang)   package zip;   import java.io.BufferedOutputStream; ...  阅读全文
posted @ 2009-11-12 22:53 rox 阅读(3980) | 评论 (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 阅读(351) | 评论 (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 阅读(6646) | 评论 (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 阅读(1766) | 评论 (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 阅读(3103) | 评论 (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 阅读(631) | 评论 (0)编辑 收藏
     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm...  阅读全文
posted @ 2008-12-30 00:08 rox 阅读(20148) | 评论 (2)编辑 收藏

其实,就是类似原来使用磁盘启动然后手动安装Linux。
一、必须要大于光盘镜像images目录中的diskboot.img文件,以rhel5为例,要大于12M,这个应该不难。
二、下载dd for windows,网址:http://www.chrysocome.net/dd
三、C:\>dd if=c:\diskboot.img of=\\.\h: bs=1M --size --progress
四、内网发布一个HTTP目录,把DVD光盘镜像中的全部文件放到发布目录中。
五、设置U盘启动,进入Linux安装界面,F2,然后输入linux askmethod,配置IP,使用HTTP,访问内网的安装目录即可。

备注,参考这篇文章
http://hi.baidu.com/evanlei/blog/item/3c3135103f0244ffc3ce79aa.html
WinImage写入到U盘,不能正常启动。以我的32M为例,使用WinImage写入后,仍然为32M。
但使用dd for windows,就只有12M,其他的空间消失了,却能够正常启动,也使用1GB卡+读卡器成功启动。

如果容量是4G或者8G,完全可以使用UltraISO,把整个文件写入到U盘中启动直接安装,不过还没有测试过。

posted @ 2008-12-18 16:07 rox 阅读(673) | 评论 (0)编辑 收藏

首先拷贝安装文件到服务器的指定目录/data/archive/
mkisofs -o archive.iso -J -r -v -V archive /data/archive/
移动文件到/data/archive/目录
mv ./archive.iso /data/archive/
开始刻录
cdrecord -v -eject speed=16 dev=/dev/cdrom /data/archive/archive.iso
完毕后,删除目录
rm -rf /data/archive/

参考资料:
1、在 Linux 上烧录 CD - 命令行上的 mkisofs 和 cdrecord 使这一切成为可能
http://www.ibm.com/developerworks/cn/linux/l-cdburn/index.html

2、 Linux下刻录CD-R:cdrecord 和cdparanoia(五)
http://www.networkdictionary.cn/software/Linux610.php

posted @ 2008-06-24 11:11 rox 阅读(483) | 评论 (0)编辑 收藏
     摘要: 1、 1cd /data/ 2tar -xzf mysql-5.0.37-linux-i686.tar.gz 3cd ./mysql-5.0.37-linux-i686 4cat ./INSTALL-BINARY  参考以下说明:     1shell> groupadd...  阅读全文
posted @ 2008-06-10 19:33 rox 阅读(917) | 评论 (1)编辑 收藏
1、同步系统时间(可以用的)
1/usr/sbin/ntpdate time.windows.com
2、查询80端口被哪些程序占用
1netstat -antp|grep 80
3、查看目录下各自磁盘占用空间
1du --max-depth=1 -h /appsvr/xjjhr_tomcat-5.5.20/jobhn2/ROOT
4、tar打包和解压
1tar -cvfz ***.tar /sourcefolder
2tar -xvfz ***.tar -C targetfolder
5、编辑iptables
1vi etc/sysconfig/iptables
6、rpm安装、卸载、列表和查询mysql安装
1rpm -ivh 
2rpm -ev --nodeps
3rpm -ql xxx.rpm
4rpm -qa|grep -i mysql
7、查看redhat版本
1cat /etc/redhat_release
8、查看cpu速度
1cat /proc/cpuinfo
9、删除/data/projects/myproject/目录(及其子目录下)的所有.svn目录
1find /data/projects/myproject/ -name .svn |xargs rm -rf
10、修改网卡IP,并重启
1vi /etc/sysconfig/network-scripts/ifcfg-eth0
2service network restart
11、查看tomcat日志文件的最后200行
1tail -200 /apache_tomcat-5.5.20/logs/catalina.out
12、修改当前默认语言
1export LANG=en_US
2export LC_ALL=en_US
3修改系统的:
4cat ~/.bash_profile
13、安装和卸载U盘
1fdisk -l
2mount /dev/sdc1 /mnt
3umount /mnt
4umount -/mnt (等空闲后卸载)
14、修改系统启动参数
1 vi ~/.bash_profile
2 vi /etc/rc.local
3 vi /etc/profile
4 修改后即时生效
5 . ~/.bash_profile
6 . /etc/rc.local
7 . /etc/profile

15、查看8100端口的访问统计

1 netstat -na |grep 8100 |wc -l
2 netstat -tunlap|grep 80
16、修改系统时间
1 date -s "11/20/2003 12:48:00"
2 date +%Y%m%d%T -s "20081225 10:05:00"

17、查看系统IO瓶颈
1 sudo iotop -Pm / 

posted @ 2008-06-04 11:27 rox 阅读(386) | 评论 (1)编辑 收藏

同事在公司论坛里面发的,其实是我接手的一个项目中存在这个问题。
在使用Hibernate分页器时,习惯使用直接把查询语句、页数、分页大小,传给分页器,这样会默认使用last来获取总记录数,效率非常的低。
解决方法,很简单,就是用SQL来count查询条件获得总记录的Query,再给Hibernate分页器(本身就写好了的)。
这样就必须多写几行代码,就是因为自己懒,觉着效果都一样,就简单的写了。
数据量大了以后,就很明显的速度慢下来了。又全部重头改过,很是郁闷。
转载此文,以示提醒!
即使懒得研究Hibernate底层,也要注意它的效率问题。

 

 

我看到一些资料这样说,oracle的jdbc驱动是不支持服务器端的游标的,当你调用resultSet.last()时,jdbc驱动程序会把整个结果集的数据读到内存,然后在内存中进行结果集的遍历。

如果在做分页的时候,用这样的方式获取结果的总记录数:
  rs.last();
  int rowcount = rs.getRow();
在结果集很大的时候,这个性能是相当低下的,并且会用掉很多的内存。

这个问题是昨天在检查人才网的代码时发现的,随着数据增加,原来被掩盖的问题才开始暴露出来。我们用jprofiler对程序进行剖析的情况也间接的证明了上面的说法:1) 连续几次刷新工作列表后,虚拟机的内存被占满了,运行垃圾回收后内存又被释放出来。2) 从页面请求到完成响应,resultSet.last()方法的调用占去了cpu的绝大部分时间。

因为上面提到的分页方法是一种常用的方法,我建议大家考虑一下自己的代码是否存在这样的问题,这对办公系统的稳定运行可能是很重要的。


参考:
http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/rs/CountResult.html
提到了:
如果 ResultSet 非常大,则 resultset.last() 有可能是非常费时的操作,因为它将使用服务器端的更多资源。因此,除非确实需要可滚动结果集,应避免使用这种方法。

http://forum.springframework.org/showthread.php?t=50044&page=2
提到了:
Anyway, if it's a normal behaviour of the oracle driver to keep data in memory when using SCROLLABLE resultset

http://xiongbo.javaeye.com/blog/38481
对几种游标类型做了介绍,并给出了建议

posted @ 2008-05-28 11:26 rox 阅读(4170) | 评论 (4)编辑 收藏
     摘要: 1、float.js  1    var delta=0.35;  2    var collection;  3    var closeB=false;  4   &n...  阅读全文
posted @ 2008-05-28 11:01 rox 阅读(698) | 评论 (0)编辑 收藏
     摘要: Illegal class inheritance loop. 使用JAXB 2.0以上版本,使用schema文件绑定Java对象,并配置了外部配置文件binding.xjb后,出现这个错误。 现已解决,如下: 1、schema文件po.xsd:  1<?xml version="1.0" encoding="utf-8"?>  2...  阅读全文
posted @ 2008-05-02 16:57 rox 阅读(2586) | 评论 (0)编辑 收藏

这两句SQL区别是有没有括号,但却是一个可以查出来,一个几乎查不出来。
一个简单的问题,居然还犯低级错误,留下来提醒自己。

 

1select uj.* from union_job uj , union_company uc where (uj.name like '%职员%' or uj.info like '%职员%'and uj.company_id=uc.id and uc.area= '广东' order by uj.uptime desc

1select uj.* from union_job uj , union_company uc where uj.name like '%职员%' or uj.info like '%职员%' and uj.company_id=uc.id and uc.area= '广东' order by uj.uptime desc
posted @ 2008-04-23 17:33 rox 阅读(159) | 评论 (0)编辑 收藏

1、修改启动文件:
vi /etc/rc.d/rc.local

2、编辑并追加tomcat的启动:
#!/bin/sh
echo "start tomcat">/var/log/tomcatmessages
rm -rf /appserver/gooweb-tomcat-5.5.20/work/
/appserver/gooweb-tomcat-5.5.20/bin/catalina.sh start

注意:JAVA_HOME等环境变量还不会被加载的,这里是使用setenv.sh来加载的。

3、修改计划任务列表:
crontab -e

4、添加重启任务:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 0 * * 0 reboot

定义为每周0点01分重启系统。

5、重启计划任务的服务:
service crond restart

6、查看日志
tail -100 /var/log/cron


另外要非常注意这里所有修改的文件都一定要 chmod +x
不然要吃大亏。呵呵!

posted @ 2007-12-27 16:42 rox 阅读(1489) | 评论 (3)编辑 收藏
浮动广告代码很多了,不介绍了。
但是对于flash或者下拉框,是容易被遮挡的。

1、flash的解决:
    <!--1.设置FLASH为底层-->
    <div style="z-index:-1">
    <!--2.必须把FLASH设置为透明-->
    <param name="wmode" value="transparent">

2、下拉框的解决:
    因为下拉框的index是最高的,怎么调整都没有用。
    所以,浮动层里面要增加一个iframe,里面再src近来一个新页面,这个页面就是广告页面。
   
 1 <!-- 浮云 -->
 2 <div id="fuyun" style="Z-INDEX: 99999999999; LEFT: 4px; WIDTH: 100px; POSITION: absolute; TOP: 372px; HEIGHT: 100px"> 
 3 <align="center">
 4 <iframe height="80" width="80" frameborder="0" scrolling="no" hspace="0" vspace="0" style="padding:0; margin:0" src="ad_kfc/fy_kfc.html">
 5 </iframe>
 6 </p>
 7 </div>
 8 <script language="JavaScript" src="js/fy.js"></script>
 9 <SCRIPT LANGUAGE="JavaScript">
10 <!--
11     start();
12 //-->
13 </SCRIPT>

其中这个src页面代码如下:
1 <html>
2 <head>
3 <title> fy kfc </title>
4 </head>
5 <body style="padding:0; margin:0">
6 <href="/public/enterprise.do?id=29838" target="_blank"><img src="kfc.gif" width="80" height="80" border=0></a>
7 </body>
8 </html>
9 

还是把浮动窗口的js代码贴上来,原来网上找的代码,参数名字过于简单,怕多个js一起调用时会重名。自己改了一下的

 1 var fuyun = document.getElementById("fuyun");
 2 var fy_xPos = 20;
 3 var fy_yPos = document.body.clientHeight;
 4 var fy_step = 1;
 5 var fy_delay = 30
 6 var fy_height = 0;
 7 var fy_Hoffset = 0;
 8 var fy_Woffset = 0;
 9 var fy_yon = 0;
10 var fy_xon = 0;
11 var fy_pause = true;
12 var interval;
13 fuyun.style.top = fy_yPos;
14 function changePos() {
15 fy_width = document.body.clientWidth;
16 fy_height = document.body.clientHeight;
17 fy_Hoffset = fuyun.offsetHeight;
18 fy_Woffset = fuyun.offsetWidth;
19 fuyun.style.left = fy_xPos + document.body.scrollLeft;
20 fuyun.style.top = fy_yPos + document.body.scrollTop;
21 if (fy_yon) {
22 fy_yPos = fy_yPos + fy_step;
23 }
24 else {
25 fy_yPos = fy_yPos - fy_step;
26 }
27 if (fy_yPos < 0) {
28 fy_yon = 1;
29 fy_yPos = 0;
30 }
31 if (fy_yPos >= (fy_height - fy_Hoffset)) {
32 fy_yon = 0;
33 fy_yPos = (fy_height - fy_Hoffset);
34 }
35 if (fy_xon) {
36 fy_xPos = fy_xPos + fy_step;
37 }
38 else {
39 fy_xPos = fy_xPos - fy_step;
40 }
41 if (fy_xPos < 0) {
42 fy_xon = 1;
43 fy_xPos = 0;
44 }
45 if (fy_xPos >= (fy_width - fy_Woffset)) {
46 fy_xon = 0;
47 fy_xPos = (fy_width - fy_Woffset);
48 }
49 }
50 function start() {
51 fuyun.visibility = "visible";
52 interval = setInterval('changePos()', fy_delay);
53 
54 }
55 function fy_pause_resume() {
56 if(fy_pause) {
57 clearInterval(interval);
58 fy_pause = false;
59 }
60 else {
61 interval = setInterval('changePos()',fy_delay);
62 fy_pause = true;
63 }
64 }


不提倡使用浮动广告,现在多半都是悬浮广告了。只是客户指定要,而且还要不被遮挡,在多人的帮助下,终于解决了这个问题。

大家可以到 http://www.jobhn.cn 网站上看看实际的效果。
posted @ 2007-02-14 09:55 rox 阅读(547) | 评论 (2)编辑 收藏
mysql数据库,库名以目录名存在,表名以文件名(后缀为.frm.MYD.MYI)存在。

如test库下user表,在windows中%mysql_home%\data\test\user.frm,windows文件名大小写不敏感,
无论是 select * from test.user 还是 select * from test.USER,都是没有问题的。

而在linux中/var/lib/mysql/test/user.frm,
如果是 select * from test.user 就必须存在 user.frm
如果是 select * from test.USER 就必须存在 USER.frm
这是两个不同的文件,也是两个不同的表名。
同样库名是以目录存在,也存在区分大小写的问题。

相关的官方文档:

http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html


http://dev.mysql.com/doc/refman/5.1/zh/language-structure.html#name-case-sensitivity
posted @ 2007-01-29 09:40 rox 阅读(1667) | 评论 (2)编辑 收藏

这里可以实现类对象数组。方便自己存储和封装数据用。

 1 function MyClass() {
 2   this.myData = 5
 3   this.myString = "Hello World";
 4 }
 5 
 6 var myClassObj1 = new MyClass();
 7 var myClassObj2 = new MyClass();
 8 myClassObj1.myData = 10;
 9 myClassObj1.myString = "Obj1:  Hello World";
10 myClassObj2.myData = 20;
11 myClassObj2.myString = "Obj2:  Hello World"
12 
13 var array = Array();
14 array[0= myClassObj1;
15 array[1= myClassObj2;
16 
17 for (i = 0; i < array.length; i++) {
18     alert(array[i].myData);
19     alert(array[i].myString);
20 }
posted @ 2006-11-29 11:57 rox 阅读(992) | 评论 (0)编辑 收藏
1 < c:import  url ="/site/All.html"  var ="url"   />
2 < c:if  test ="${ not empty url }" >
3      < x:parse  var ="doc"  xml ="${url}"   />
4      < x:forEach  select ="$doc/sites/site"  var ="s" >
5          < x:if  select ="$s/@id = '0'" >
6              < x:out  select ="$s/@id" />
7          </ x:if >
8      </ x:forEach >
9 </ c:if >

 相同结果代码: 

1<c:import url ="/site/All.html"  var ="url"/> 
2<c:if test ="${ not empty url }">
3    <x:parse var="doc" xml="${url}"/> 
4    <x:forEach select="$doc/sites" var="s">
5        <x:out select="$s/site[@id='0']"/>
6        <x:out select="./site[@id='0']"/>
7    </x:forEach> 
8</c:if > 

 



参考URL:

http://java.sun.com/developer/technicalArticles/javaserverpages/faster/

http://www.mokabyte.it/2002/12/jstl-3.htm

http://www.w3school.com.cn/xpath/

posted @ 2006-11-07 10:27 rox 阅读(687) | 评论 (0)编辑 收藏
MySql只支持Union(并集)集合运算,好像也是4.0以后才有的;
但是对于交集Intersect、差集Except,就没有实现了。
一般的解决方案用in和not in来解决,小量数据还可以,但数据量大了效率就很低了。
其实,可以使用Union来实现另外两种的运算,当然是没有办法的办法。

差集Except:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 1

交集Intersect:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 2

不过,上述方法的功能也有限,
只能用来检查某个id是不是A、B表中都存在,
或者只存在于A、B表其中之一,
并不能对id在某表中多次出现做出检查。
而且,差集是有先后之分,这里没有。

posted @ 2006-09-01 09:29 rox 阅读(2617) | 评论 (0)编辑 收藏