posts - 25, comments - 69, trackbacks - 0, articles - 2

SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')


 

posted @ 2006-04-02 18:28 壮士日志 阅读(231) | 评论 (0)编辑 收藏

crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序

基本用法:
 1. crontab -l
     列出当前的crontab任务
 2. crontab -d
     删除当前的crontab任务
 3. crontab -e (solaris5.8上面是 crontab -r)
     编辑一个crontab任务,ctrl_D结束
 4. crontab filename
     以filename做为crontab的任务列表文件并载入

crontab file的格式:
    crontab 文件中的行由 6 个字段组成,不同字段间用空格或 tab 键分隔。前 5 个字段指定命令要运行的时间
       分钟 (0-59)
       小时 (0-23)
       日期 (1-31)
       月份 (1-12)
       星期几(0-6,其中 0 代表星期日)
       第 6 个字段是一个要在适当时间执行的字符串

例子:
      #MIN HOUR DAY MONTH DAYOFWEEK COMMAND
      #每天早上6点10分
      10 6 * * * date
      #每两个小时
      0 */2 * * * date    (solaris 5.8似乎不支持此种写法)
      #晚上11点到早上8点之间每两个小时,早上8点
      0 23-7/2,8 * * * date
      #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
      0 11 4 * mon-wed date
      #1月份日早上4点
      0 4 1 jan * date


补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)

 

posted @ 2006-04-02 18:28 壮士日志 阅读(3471) | 评论 (0)编辑 收藏

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

  一、定义配置文件

  其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:

  1.配置根Logger,其语法为:

  log4j.rootLogger = [ level ] , appenderName, appenderName, …

  其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

  2.配置日志信息输出目的地Appender,其语法为:

  log4j.appender.appenderName = fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1 = value1
  …
  log4j.appender.appenderName.option = valueN

  其中,Log4j提供的appender有以下几种:
  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

  3.配置日志信息的格式(布局),其语法为:

  log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1
  …
  log4j.appender.appenderName.layout.option = valueN

  其中,Log4j提供的layout有以下几种:
  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

  Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  %r 输出自应用启动到输出该log信息耗费的毫秒数
  %c 输出所属的类目,通常就是所在类的全名
  %t 输出产生该日志事件的线程名
  %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

  二、在代码中使用Log4j

  1.得到记录器

  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  public static Logger getLogger( String name)

  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

  2.读取配置文件

  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

  BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
  PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
  DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

  3.插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

  Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

 

posted @ 2006-04-02 18:27 壮士日志 阅读(252) | 评论 (0)编辑 收藏

本文给出了一些指导性的意见和建议,用于帮助用户在产品开发中遵循自由软件的许可证条款,并避免出现违反自由软件许可证的情况发生。

1.如果您不接受 GPL/LGPL 许可证,请勿使用任何遵循该许可证条款发布的软件。如果您在自己的产品中使用了 GPL/LGPL 软件,则说明您已经接受了 GPL/LGPL 许可证中定义的所有条款,并有义务向产品的最终用户提供源代码——无论该源代码是否经过您的修改。如果经过了您自己的修改,则必须公开“衍生作品”的源代码,并以相同的许可证条款发布。

2.当您从 GPL/LGPL 软件中拿出 10 行以上的源代码用于自己的作品中时,则您的作品将成为该 GPL/LGPL 软件的衍生作品,无论您的作品的整体代码规模有多大。因此,如果您不打算将自己的作品作为自由软件发布,则应该远离自由软件代码,以免因为受到自由软件代码的影响而编写出和这些软件相类似的代码。

3.如果在您的作品中使用了 GPL/LGPL 软件,但没有对这些软件做任何修改,则可以在产品手册或者其他类似的文档中、程序界面上或者帮助信息中指明您使用的自由软件名称、版权拥有者以及能够获取该自由软件全部源代码的公共网站或第三方。如果因为某种原因,最终用户无法从您提到的第三方或者公共网站上获得该自由软件的源代码,您应该担负提供源代码的责任和义务。

4.GPL/LGPL 条款赋予您修改作品的权利,经修改之后的作品称为“衍生作品”。当您的衍生作品以某种方式发布时(典型情况就是用于您的产品中),您必须依照 GPL/LGPL 许可证发布您的衍生作品。当然,一种更加可取的办法是,将自己所做的修改提交给原始作品的维护者,并由该维护者负责发布,而您在产品中始终使用由维护者发布的作品。

5.自由软件不等于免费。提供自由软件的人可以要求您支付一定的费用,该费用通常有两层含义:第一,自由软件以某种介质发行时,该介质的制作、发布等费用;第二,当您希望获得对某自由软件的技术支持、缺陷修正等服务,要求某个人或组织提供相应的产品质量担保时,该组织或个人可以要求您就质量担保收取服务费用,甚至是专有软件产品惯用的使用许可费用。这里提到的组织或个人是任何遵循上述自由软件许可证条款发布自由软件、并向您提供质量担保的组织或个人,并不限于自由软件作品的作者或主要的版权拥有人。

6.对 LGPL 条款的自由软件(通常是函数库)的“正常使用”,通常的理解是,始终以动态链接的形式链接这个函数库——如果以静态的方式链接,将使该函数库成为您作品的一部分,从而使之成为该函数库的衍生作品。但实质上,LGPL 许可证的宗旨和精神是禁止将自由软件成为专用和独享的软件,而至少应该确保其他软件也能通过某种途径使用这个函数库的接口。当然,静态链接显然违背了上述精神和宗旨,从而是不允许将私有作品和 LGPL 函数库静态链接在一起。但如果您的产品没有提供任何扩展功能,而只能由您自己的私有作品使用其中包含的某 LGPL 函数库,这无异于将该函数库静态链接到您自己的私有作品中。因此,我们认为这种情况下,您的作品是该函数库的“衍生作品”——无论您的作品通过静态链接还是通过动态链接的方式链接该 LGPL 函数库。

上述这种情况经常会出现在嵌入式系统中。在这种情况下,您可以有如下选择:

 * 以动态链接方式链接 LGPL 函数库,并为您的产品提供扩展接口及程序上载接口,
    以便用户或者其他人能够对该产品进行扩展。

 * 最简单的方式:将衍生作品置于 LGPL 条款下发布。

 * 和 LGPL 条款的版权拥有人联系,看看是否能够以其他许可证方式授权您
    在自己的产品中使用该函数库,而不必遵循 LGPL 条款使自己的作品成为
    衍生作品。许多自由软件为商业用户提供另外一种可选的许可方式。

 * 当然,如果您觉得麻烦,可以选择不使用任何自由软件。

 

posted @ 2006-04-02 18:26 壮士日志 阅读(826) | 评论 (0)编辑 收藏

令狐冲十四岁那年进入华山,那年岳琳珊八岁,岳不群白天给两人指点剑法,晚上令狐冲给小师妹讲故事哄她入睡。后来,岳不群陆续收了劳德诺,陆大有等徒弟,又忙于修炼紫霞神功,就没有时间指点徒弟。于是他做了一个HUB,从此华山派实现教育电子化,岳不群在网上同时给每个徒弟授课,这种方法很快在五岳剑派内部推广。为了在五岳剑派之间互连,嵩山派掌门左冷禅研制出路由器,使得五岳剑派之间可以互联互通。令狐冲晚上就通过网络给小师妹讲故事。
  很快,岳琳珊已经十六岁,变成了一个亭亭玉立的小姑娘了。令狐冲发现自己的目光总是不由自主的在小师妹身上停留,每次和小师妹在一起的时候,总能听到自己强烈的心跳声,经过了一段时间的茶饭不思后,终于有一天晚上,令狐冲在网上给小师妹发了一首情意绵绵的诗:你是风儿我是沙,你是蜜蜂我是花,你是梳子我是头发,你是牙膏我是牙刷。
  第二天,华山派开例会,令狐冲怀着忐忑不安的心情来到了会议室,发现小师妹红着脸躲在师父后面,而其它的师弟都在偷偷朝自己笑,开完会,一个调皮的师弟就过来叫牙刷师兄,赶紧蒙面逃走。问陆大有,才知道是劳德诺用一个叫NetXRay的工具把自己在网上的大作全抓了出来。令狐冲悔恨万分,于是,闭门研究RFC,成功的研制出LanSwitch。它能够识别设备MAC地址,这样,令狐冲发送给小师妹的数据只有她一个人能够收到。令狐冲晚上可以在网上放心的给小师妹讲故事,偶尔手痒还能敲几句平时心里想又说不出口的话来过瘾,然后,红着脸想象小师妹看到后的表情。
  // LanSwitch是二层交换设备,它可以理解二层网络协议地址MAC地址。二层交换机在操作过程中不断的收集资料去建立它本身的地址表,这个表相当简单,主要标明某个MAC地址是在哪个端口上被发现的,所以当交换机接收到一个数据封包时,它会检查该封包的目的MAC地址,核对一下自己的地址表以决定从哪个端口发送出去。而不是象HUB那样,任何一个发方数据都会出现在HUB的所有端口上(不管是否为你所需)。这样,LanSwitch在提高效率的同时,也提高了系统的安全性。//
  接下来的一年,岳不群大量招收门徒,华山派得以极大的壮大,所使用的LanSwitch也多次级连。但门徒中难免鱼龙混杂,当时华山派一批三、四代弟子崇拜万里独行田伯光,成立了一个田协,经常广播争论比赛八百米还是一千米很合理的问题;第三代弟子中有一个叫xxx的,每天在华山派内部广播xx大法;更让令狐冲受不了的是,随着师父年龄的增大,变得越来越罗嗦,每句话都要重复二十遍,然后在网上广播。令狐冲想和小师妹,陆大有等人专门使用一个广播域,但如果另外使用一个LanSwitch的话,师父肯定不会同意,于是,他修改了LanSwitch的软件,把小师妹,陆大有等人和自己划成一个虚拟网(VLAN),其它人使用另外的VLAN,广播包只在VLAN内发送,VLAN间通过路由器连接。岳不群也深受田协,xxx其害,但为与左冷禅抗争,用人之际,只能隐忍,知道了这件事,大为高兴,但仍为令狐冲私自修改软件一事,罚他到思过崖面壁一年,一年之内不得下山。 在华山派内重新使用VLAN进行子网划分,分为五个子网,师父和师娘,小师妹还有林平之在一个VLAN,xx功弟子用一个VLAN;田协弟子用一个VLAN,其它弟子用一个VLAN,而思过崖上也有单独的一个VLAN。令狐冲到了思过崖,并不难过,终于,世界安静了,依靠左冷禅的路由器,令狐冲还可以每天在网上给小师妹讲故事,聊天。
  // 局域网交换机的引入,使得网络节点间可独享带宽,但是,对于二层广播报文,二层交换机会在各网络节点上进行广播;同时,对于二层交换机无法识别的MAC地址,也必须在广播域内进行广播。当多个二层交换机级连时,二层交换网络上的所有设备都会收到广播消息。在一个大型的二层广播域内,大量的广播使二层转发的效率大大减低,为了避免在大型交换机上进行的广播所引起的广播风暴,需要在一个二层交换网络内进一步划分为多个虚拟网(VLAN)。在一个虚拟网(VLAN)内,由一个工作站发出的信息只能发送到具有相同虚拟网号(VLANID)的其他站点,其它虚拟网(VLAN)的成员收不到这些信息或广播帧。采用虚拟网(VLAN)可以控制网络上的广播风暴和增加网络的安全性。不同虚拟网(VLAN)之间的通信必须通过路由器进行。//
 
  但是幸福永远是短暂的,接下来总是无尽的烦恼。随着整个五岳剑派势力的增大,路由器的速度越来越慢。令狐冲发现每次给小师妹讲故事时,小师妹的回答总是姗姗来迟,而且话也很少,总是"嗯","噢"或者"我听着呢"。终于有一天,路由器再也PING不通的,令狐冲三天没有得到小师妹的消息,对着空空的显示屏,再也忍不住,在一个下着雪的晚上,偷偷下山找小师妹,到了小师妹窗前,发现小师妹正在网上和小林子热烈的聊天,全没注意一边的自己,内心一阵酸痛,回到思过崖,大病一场。病好后潜心研究,终于有一天,做出来一个路由器,这时,令狐冲发现,此时华山派已经有了三十个VLAN,路由器必须为每个VLAN分配一个接口,接口不够用,而且,两个子网内通过路由器的交换速度远远低于二层交换的速度。
  // 二层交换机划分虚拟子网后,就出现了一个问题:不同虚拟子网之间的转发需要通过其它路由器来实现。二层交换机的不同VLAN节点间的转发需要通过路由器设备来实现大大浪费了端口,而路由器的高成本,低效率又使它无法满足大量子网情况下的三层转发需求,三层交换的概念就在这种情况下被提了出来。//
  这天晚上,令狐冲心灰意懒,借酒消愁,这时,一个黑影出现在他的面前,原来是一个道风仙骨的老人,正是风清扬。风清扬听了令狐冲的疑惑,说:路由器接口不够,把路由器做在LanSwitch内部不就可以了;交换速度慢,是因为路由器查找的是网段路由,而LanSwitch直接查MAC对应出端口,当然速度快。为什么不能直接根据IP地址查到出端口呢?令狐冲一听,大为仰慕,但还是不明白,IP地址那么多,而且经常变化,如何能够直接查到出端口呢?风清扬说:
  "你先坐下,让我来问你,华山派有多少弟子?"
  "一万六千左右。"
  "你全知道他们住哪里吗?"
  "不知道。"
  "岳不群要你找一个不知道住哪里的人,如何去找?"
  "查华山派电话号码查询系统,找到他的地址,然后去找他。"
  "如果你回来后再让你找这个人,又如何去找?"
  "如何.... ,查华山派电话号码查询系统,找到他的地址,然后去找他。"
  "你不知道到这个人的地址吗?"
  "知道,但师父说,华山派的地址那么多,而且经常变化,不用知道地址。"
  "岳不群这小子,把徒弟都教成木头了!我问你,你自己认为应该如何找?"
  "直接去找!"
  "好!你这人还不算太苯。那你知道了一个人的地址后,是不是永远记住了?"
  "有的人记住了。其它的都忘了。"
  "为什么忘了?"
  "因为我记不了那么多人,而且一段时间没有去找他。"
  "华山派电话号码查询系统里的地址是如何获得的?"
  "我在空旷处大喊一声他的名字,他听到后就会来找我,告诉我他的地址。"
  风清扬又问了大把类似脑筋急转弯的问题,然后风清扬说:"现在你明白根据IP地址直接查出端口的道理了吗?等到你明白这个道理,你自然会做出三层交换机来",令狐冲仔细回忆了今天的话,终于明白了和二层转发由MAC地址对应到出端口的道理一样,三层转发也可以直接由IP地址对应到出端口,IP地址的路由可以通过ARP来学习,同样需要老化。这样,VLAN间转发除第一个包需要通过ARP获得主机路由外,其它的报文直接根据IP地址就能够查找到出端口,转发速度远远高于路由器转发的速度。抬头看时,风清扬已经走了。
  一年后,令狐冲下思过崖,成功的推出Quidway S8016路由交换机。实现了VLAN间的互通,并且与嵩山,黑木崖等路由器实现互通。
  // 三层交换机是在二层交换机的基础上增加三层交换功能,但它不是简单的二层交换机加路由器,二而是采用了不同的转发机制。路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现,。而三层交换机的路由查找是针对流的,它利用CACHE技术,很容易采用ASIC实现,因此,可以大大的节约成本,并实现快速转发。
  很多文章会提及三层交换机和路由器的区别,一般的比较是三层交换机又快又便宜。这些话没有错,但场合是汇聚层。我们看到,在汇聚层,面向三层交换机直接下挂的主机,因为能够获得其主机路由,所以三层交换机能够实现快速查找;而对于通过其它路由器连接多个子网后到达的主机,三层交换机和路由器的处理是一样的,同样采用最长匹配的方法查找到下一跳,由下一跳路由器进行转发。
  因此,通常的组网方式是在骨干层使用GSR,汇聚层使用三层交换机。当然,对于一个小型的城域网,也可以直接拿三层交换机组网,不需要GSR。//

posted @ 2006-04-02 18:25 壮士日志 阅读(205) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3