紫风乱写

除了他眼前的屏幕,这个人什么也没看见。
被周围的电脑簇拥着,他只知道他所创造的现实,但又意识到那是虚幻。
他已经超越了技术。也超越了机器。
posts - 62, comments - 93, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

使用如下Name Space可以让Xml工具对POM元素进行验证
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
</project>
几个相当不错的Maven Repository
<repositories>
        
<repository>
          
<id>maven2-repository.dev.java.net</id>
          
<name>Java.net Repository for Maven</name>
          
<url>http://download.java.net/maven/2/</url>
          
<layout>default</layout>
        
</repository>
        
<repository>
          
<id>jboss.repository</id>
          
<name>JBoss Repository</name>
          
<url>http://repository.jboss.com/maven2/</url>
        
</repository>
        
<repository>
        
<id>maven.search</id>
        
<name>Maven Search Org</name>
        
<url>http://www.mvnsearch.org/maven2</url>
        
</repository>
      
</repositories>

posted @ 2008-03-11 22:18 Justfly Shi 阅读(1150) | 评论 (0)编辑 收藏

  上周去某上市公司面试一个ITIL产品技术经理的岗位,前一轮面试已经谈了不少管理方面的事情了,这次主要集中在谈ITIL的知识。该公司本身在做HP等厂家的ITIL类产品的代理,自己也开发了一套ITIL软件。

  在面谈过程中,该公司的面试人员对我原先服务的理想科技公司Entegor(iEAI)产品在光大银行IT服务管理项目中的作用不以为然,认为只要是加强了IT运维过程中的管理就能起到大幅度减少IT事故。并且认为该项目并不是一个合格的ITIL项目。很是汗颜的是,那天天我居然被该面试人员的ITIL方面的教条熟悉程度以及其对HPIBMBMCCA等厂家的产品了解程度所吓到,认为对方果然是ITIL专家,作为一个连十大流程名字都背不全的我实在是不配谈ITIL。第二天早上醒来,才发现其论点是典型 ITIL教条主义。下面我谈谈基于中国银行业IT建设现状该怎么看待ITIL

  “ITILInformation Technology Infrastructure LibraryIT基础设施库)是英国中央计算机与电信总局(Central Computer and Telecommunications agencyCCTA)于1980年为了解决“IT服务质量不佳的问题而开发的一套IT业界的服务管理标准库,是管理科学在信息技术(IT)中的应 用,是一种基于流程的方式。(来之《现代IT服务管理-基于ITIL的最佳实践) ITIL包括十大流程,五个基于运营层面的服务支持流程,包括服务台、事件管理、问题管理、配置管理、变更管理、发布管理;二是五个基于战术层面的服务提供流程,包括服务等级管理、持续性、可用性、能力和财务管理。以 ITIL为参考,各个厂家都提出了自身的实施模型,其中包括有HPITSMIBMITPM、微软的MOF

  以上是ITIL的一些基本资料,冷一眼看起来的确是非常不错:英国的中央计算机与电信总局各大厂商支持十大流程。于是业内的一些行 家,开口闭口十大流程,但是却忘了IT系统的最基本的要求满足客户需求。作为任何一个服务提供商,你的价值体现在为客户解决现有问题。ITIL只是一个源于英国国内IT管理实践的参考模型而已,并不是一个万能药。

  中国的IT建设有其自身的特点,与英国的IT建设并不一样,不同的文化和不同的种族需要不同的管理方法,来自于英国的管理文化在中国成功的并不不多。同样,来自于英国的IT管理实践在国内也不见得就是好东西,有些情况下还可能是一副毒药。这个情况和ERP最初的实施情况非常类似。

  我在担任长春理想科技Entegor(iEAI)产品研发部门经理期间与多家银行的信息部门管理人员有过交流。总的来说,大家的关注点主要集中在如何保证系统持续良好的运行上。

  那么这个情况是怎么形成的呢,我认为主要是这是国内目前IT建设现状的一个体现。

  国内的IT建设现在处于这么一个情况:IT系统种类丰富,IT系统性能不稳定,管理水平较低。这个情况主要由这么几个因素造成:1、信息系统建设初期缺乏完整的远期的规划,后期随意建设情况较严重;2、高级系统管理人员缺乏,初级维护人员经验不足;3IT部门管理仍有相当部分停留在手工操作水平;4、国外IT产品水土不服、国内IT产品质量欠缺。

  那么国内目前最需要的是什么样的IT管理呢?我总结出来的结论是目前国内所需要的IT管理主要集中在保持系统的稳定运行,保证IT系统的良好运行,提高IT系统、部门的管理水平。从实施的角度来说,需要做好对系统的监控,事故问题的预防、及时解决和经验总结,完善IT系统、部门的信息管理。要做到这个不是单靠背诵ITIL教条,死搬硬套ITIL十大流程就能做到的。需要的是参考成功经验(如ITIL模型及流程),根据企业的管理模式、IT建设现状进行相关系统的开发和实施,相关制度和流程的制订和实施。

  在这个实施过程中,企业IT建设现状和企业管理模式才是我们需要关注的重点,ITIL只是一个参考模型而已。

  我们需要这么来认识ITIL,它是一个泊来的提高IT管理和IT服务水平的参考模型,仅供参考!

posted @ 2007-12-11 00:18 Justfly Shi 阅读(1593) | 评论 (12)编辑 收藏

  作为一个现代的开发人员,你已经习惯了使用版本管理来管理自己的代码和文档。当我们在家里的机器上想对自己的东西做版本管理的时候你需要自己配置一个版本管理服务器,如CVS等。但是很遗憾的是,CVSNT的配置很是麻烦,而且CVS的功能实在是落伍,SVN服务器的配置也实在麻烦,VSS?老古董一边去!网络上申请一个免费的项目空间,如sf.net之类的:那你的文件就都公开了。

  今天我无意中发现原来创建一个个人用的SVN Repository是那么的方便。TortoiseSvn这个小乌龟你一定很熟悉,它本身就有一个创建本地Repository的功能,我以前没有注意到过,不知道你用过没有。我用的版本是 1.4.4,在它的帮助的Chapter4里就提到了这个功能。简单来说操作步骤如下

  第一步,创建一个空白目录,如F:/SVNRepositorys/sample/sampleRepository

  第二步,右键点击该目录,在右键菜单中选择TortoiseSVN->Create repository here...。如下图所示


  第三步,在弹出窗口中选择repository的类型,FSFS是一种新的格式是一种新的类型,速度快,支持网络共享和windows98;BDB类型比较成熟,已经用了很长时间了,比较稳定。选择你想要的,点击OK按钮就可以了。

 


  到此为止我们的工作就完成了,你已经有一个本地的repository可以用来做版本管理了。如果有兴趣的话你可以打开你刚才创建的目录看看里面的内容。我对里面的内容格式并不很清楚,这里就不说了。下面我们可以用Repository Browser看看我们新创建的repository,如下图所示:输入地址file:///F:/SVNRepositorys/sample/sampleRepository你就可以看到新创建的repository了。注意上面的蓝色部分,这里使用的协议是file协议。

 

 

  我原先为自己一些文件的版本管理做过很多的麻烦事,比如搭建CVSNT啊,学习SVN Server的配置啊。但是没有想到可以这么简单的就可以达到自己的目的了。这件事情给了我一个启发:熟练掌握你手里已有的工具,你会发现你其实已经拥有很多。

posted @ 2007-08-29 01:38 Justfly Shi 阅读(7691) | 评论 (4)编辑 收藏

CURRENT=`pwd`
echo $CURRENT

以上两行厉害吧?其实就是使用了反引号而已,注意pwd边上的那两撇不是单引号,是键盘左上角1边上的那个键。

下面是一点相关的资料
来源是http://hi.baidu.com/lzwwqk/blog/item/40a3f41bb4f8b3fbae513358.html

反引号 `

反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:

$ pwd

/home/xyz

$ string=”current directory is `pwd`”

$ echo $string

current directour is /home/xyz

$

shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。

利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如:

$ today=`date`

$ echo Today is $today

Today is Mon Apr 15 16:20:13 CST 1999

$

反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线(\)将其转义。例如:

$ abc=`echo The number of users is \`who| wc-l\``

$ echo $abc

The number of users is 5

$

在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:

$ ls

note readme.txt Notice Unix.dir

$ TestString=”`echo $HOME ` ` ls [nN]*`”

$ echo $TestString

/home/yxz note Notice

posted @ 2007-04-18 21:14 Justfly Shi 阅读(1957) | 评论 (1)编辑 收藏

Remote Debugging with Eclipse说明了远程调试的原理,说明了让java程序支持被远程调用所需要的java参数如下
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
以及如何配置远程调试weblogic、jboss和tomcat,但是里面对如何让tomcat支持远程调用并没有仔细说。再搜索,在tomcat的FAQ就找到了:
How do I configure Tomcat to support remote debugging?
如上面所示,其中的关键在于如何正确的启动tomcat。对于非windows平台下的操作来说,需要把%TOMCAT_HOME%/bin/startup.sh中的最后一行exec "$PRGDIR"/"$EXECUTABLE" start "$@" 中的start改成jpda start。如果的8000端口有其他用处的话,那么还需要修改catalina.sh文件,看其中的说明,添加一行JPDA_ADDRESS=”1044”或者其他你指定的端口。这样就可以通过startup.sh或者catalina.sh jpda start来其中支持远程调试的tomcat了。
在windows平台上是一样的步骤,只不过.sh文件改成了.bat文件了。然后需要注意以下这些地方,
1、 catalina.bat文件默认的JPDA_TRANSPORT是dt_shmem,但是Eclipse只支持dt_socket,所以需要在catalina.bat中添加一行set JPDA_TRANSPORT=”dt_socket”
2、 catalina.bat文件默认的端口是jdbconn,我也不知道这个端口是多少,因此添加一个set JPDA_ADDRESS="1044"

posted @ 2007-02-05 18:34 Justfly Shi 阅读(6754) | 评论 (0)编辑 收藏

资料地址: SSH技术专题|中国IT认证实验室
配置SSH所用密钥的方法
使用ssh-keygen或者ssh-keygen -d(for ssh2)产生密钥对,其中公钥的地址为$HOME/.ssh/id_dsa.pub,私钥的地址为$HOME/.ssh/id_dsa。
把.ssh下面的id_dsa.pub改名为authorized_keys,则可以使用id_dsa作为密钥实现登陆了



ssh-keygen -d调用过程

putty使用密钥登录的方法
putty是一个常用的ssh客户端,通过使用密钥登录,就可以不用每次登录的时候都使用密码了。1、使用puttygen.exe程序,先load上面生成的id_dsa文件,然后Save private key生成一个ppk文件。
2、打开putty,在Connection->SSH->Auth中选中该ppk文件就可以了。

SCP使用密钥登录的命令
scp -i .ssh/id_dsa ./tmp/test.tgz abc@192.168.0.5:/tmp
其中-i .ssh/id_dsa用于指定使用id_dsa做为私钥

posted @ 2007-01-29 20:03 Justfly Shi 阅读(754) | 评论 (0)编辑 收藏

25 测试驱动开发模式


准备两个TODO-List一个用于当前,一个用于最近
当发现有事情要做的时候,对其优先级进行判断,将其放到当前或者以后。
集中注意力于当前要做的事情

断言优先
写Case的时候,一开始就写断言,从测试完成时能通过的断言开始写。

测试数据
测试数据要使用容易让人理解的数据,不要为了编排数据而编排数据
不要用同一个常量来表达多种一丝。另外也可以使用真实数据进行测试。

尽量让测试的行为和数据容易理解,比如不使用常量,而是直接使用数字。在assert中加入断言要测试的目的的文字说明

26 不可运行状态


一步测试(One Step Test)
从计划列表中选择具有指导意义而且有把握实现的测试去完成它。  

启动测试(Starter Test)
从测试某个实质上不做任何工作的操作开始,这样的测试一般能很快工作。而一个做实际工作的功能的测试可能需要等你解决很多问题,比如:这个操作隶属于哪里?正确的输入是什么?对应的正确输出是什么?等等。结果是其长期无法通过。

回归测试(Regression Test)
对于一个错误情况,编写一个针对该错误的,会出错的,尽可能小的测试。

27测试模式


子测试(Child Test)
如果一个测试太大以至于难以运行起来,那么可以先把该测试给分解成几个小的测试,并注释掉本测试。等这些小测试通过之后再继续这个大的测试  

模拟对象(Mock Object)
如何测试一个依赖于昂贵的且复杂的资源的对象?创建一个这些资源的模拟版本。

自分流(self Shunt)
如何测试对象间是否正常交互?让测试对象于测试用例而不是期望的对象进行交互。
需要让测试用例类实现所要交互的类的接口。从而进行测试所实现的方法会被正确的调用。

日志字符串(Log String)
如何才能测试使消息调用顺序是正确的?将日志保存在字符串中,当调用一个消息时,就向字符串尾部追加相应的信息。

清扫测试死角(Crash Test Dummy)
如何测试到不大可能被调用的错误代码呢?使用一种特殊的对象调用它,这个对象抛出一个异常而不做任何实际工作。比如实现一个匿名File子类,只实现其createNewFile方法,方法中抛出一个异常,通过这种方式来测试文件系统满了的情况。

不完整测试(Broken Test)
留下半截句子或者一个没有通过的测试用例可以保证你离开代码一段时间之后依然能较快的回忆起原先的想法。

提交前保证所有测试运行通过
当你在团队中变成时如何结束一段编码工作?让所有测试运行起来。
注释掉一些测试代码使测试套件通过是要严格禁止的。

28可运行模式


伪实现(直到你成功)
测试不能通过时首先应该执行什么?可以返回一个常量。一旦你能使测试运行起来,那个常量就会逐渐换成用变量表示的表达式。这个方法可以从心理上让我们感到满足,可以让我们集中注意力于当前要解决的问题。

三角法(Triangulation)
怎样可以更适当地利用测试推动抽象呢?只有当你有两个或两个以上的例子时,你才能进行抽象。使用两个针对同一个测试目标的测试例子(或断言),在此基础上对该测试目标的实现进行抽象并实现。

显明实现(Obvious Implementation)
直接实现简单的操作。

从一到多(One to Many)
怎样实现一个作用于对象集合体的操作呢?首先在非集合体中实现,然后使之作用于集合体。

32 掌握TDD


什么可以不必测试?
应该测试:条件部分、循环部分、操作部分、多态性。除了不信任,否则不要测试其他来源的代码。

怎样知道自己的测试没有疏漏呢?
一些预示着设计存在这缺陷的特征:
过长的设置代码——如果为了一个简单的断言,需要花费上百行代码创建对象,那么肯定有哪儿不对劲儿。对象太大,需要分割。
冗余的设置代码——如果你无法为公共代码找到一个存放它的公共场所的话,那么就表明有太多的对象过于紧密地联系在一起了。
过长的测试运行时间——这样测试不会被经常运行,同时也暗示着对系统的方方面面进行测试是困难的。这种测试困难是一种设计问题,并且需要在设计时就被提出来。
脆弱的测试——意外中断的测试说明应用的某一部分出人意料地存在对另一部分的影响。你需要对系统进行设计,要么打破联系,要么将两部分合并,直到这种影响消失为止。

你需要多少反馈?
测试驱动的开发对测试的观点就是注重实效。在测试驱动开发中,测试从某种意义上说是一种达到目的的手段——达到充满自信地编写代码的目的。如果我们对实现有充分了解,不用测试就能拥有自信的话,那么就没有必要编写测试了。

什么时候应该删除测试?
如果删除一个测试降低了你对整个系统功能的信心,那么就不要删除。
如果你有两个测试,走的是同一条路,但对读者来说讲述的是不同的情形的话,那么就应该原封不动的保留。
如果有两个测试,它们就自信和沟通而言都是冗余的,那么就删除其中用处最小的那个。

如何中途转向测试驱动开发?
首先限定修改的范围。对于该范围外的可以简化的地方先不动手。
其次,必须打破测试与重构之间的僵局。可以先通过其他方式获取反馈,如系统测试,然后使用这些反馈进行修改。通过这种方式逐渐的让一直在改变的部分转向测试驱动。

posted @ 2006-11-21 00:24 Justfly Shi 阅读(539) | 评论 (0)编辑 收藏

  由于最近需要通过一种跨平台、跨语言的方式来传递需要多层嵌套的数据,因此研究了一下JSON。首先试用JSON-lib做一下测试,但是未能通过测试,于是再找其他几个Java实现,但是也未能通过测试。分别测试对于一个简单的类的序列化和反序列化,对于一个有数组和Map域的对象的序列化和反序列化。对于结果比较失望。
  其中的JSON-lib能通过第一个测试,第二个测试的时候则失败。但是有一个很大的bug,对于存在null域的对象反序列化的时候会失败。该bug已经在主页上了,但是不知道那个版本会修改。
  其中的StringTree只能revert回一个Map对象。而对于一个复杂的对象,则无法revert。在做第二个测试的时候总是停在那里不动了。
  其中的JSON-Tool根本就没有直接的序列化的功能。
  由于测试情况很不理想,因此只进行了两个测试,对于特殊字符、国际化的测试没有进行。
  
  结论:JSON的序列化和反序列化功能还不成熟。
  所有代码下载地址http://www.blogjava.net/Files/justfly/jsonTest.zip
  测试类如下:

 1 /**
 2  * created on 2006-10-2
 3   */

 4 package  cn.shijingjia.justfly.json;
 5
 6 import  java.util.HashMap;
 7 import  java.util.Map;
 8
 9 import  junit.framework.Assert;
10 import  net.sf.json.JSONObject;
11
12 import  org.junit.Before;
13 import  org.junit.Test;
14
15 import  cn.shijingjia.justfly.json.imps.StringTreeImp;
16
17 /**
18  *  @author  Shi Jiemiao
19  * 
20   */

21 public   class  JSonTest  {
22
23      private  SimpleClass simple1  =   new  SimpleClass();
24
25      private  SimpleClass simple2  =   new  SimpleClass();
26
27      private  SimpleClass simple3  =   new  SimpleClass();
28
29      private  IJSonUtil < SimpleClass >  simpUtil;
30
31      private  IJSonUtil < CompositeClass >  compositeUtil;
32
33      /**
34      *  @throws  java.lang.Exception
35       */

36     @Before
37      public   void  setUp()  throws  Exception  {
38         simple1.setAInt( 1 );
39         simple1.setStr( " name1 " );
40         simple2.setAInt( 2 );
41         simple2.setStr( " name2 " );
42         simple3.setAInt( 3 );
43         simple3.setStr( " name3 " );
44
45         simpUtil  =   new  StringTreeImp < SimpleClass > ();
46         compositeUtil  =   new  StringTreeImp < CompositeClass > ();
47     }

48
49      /**
50      * Test if it can format a object and then reverted it back
51       */

52     @Test
53      public   void  simpleTest()  {
54
55         String jsonString  =  simpUtil.toString(simple1);
56         System.out.println( " simpleClass\n "   +  jsonString);
57         SimpleClass revertedObj  =  simpUtil.toBean(jsonString);
58         Assert.assertEquals(simple1, revertedObj);
59     }

60
61      /**
62      * Test if it can format and revert a composite object with array and map
63       */

64     @Test
65      public   void  testComposite()  {
66          //  setup the origin composite class
67         CompositeClass composite  =   new  CompositeClass();
68         composite.setName( " composite Instance " );
69         composite.setSimple(simple2);
70         composite.setSimples( new  SimpleClass[]  { simple1, simple3, simple2 } );
71         Map multiMap  =   new  HashMap();
72         multiMap.put( " simpleObject " , simple3);
73         multiMap.put( " aString " " This is a String " );
74         multiMap.put( " A integer " 297 );
75         composite.setMultiMap(multiMap);
76          //  orgin json object and jsonString
77         String jsonString  =  compositeUtil.toString(composite);
78         System.out.println( " composite class\n "   +  jsonString);
79
80          //  Map atrMap = new HashMap();
81          //  atrMap.put("simpleObject", SimpleClass.class);
82          //  atrMap.put("aString", String.class);
83          //  atrMap.put("A integer", Integer.class);
84
85         CompositeClass revertedBean  =  compositeUtil.toBean(jsonString);
86         Assert.assertEquals(composite, revertedBean);
87     }

88
89 }

90


posted @ 2006-10-03 17:45 Justfly Shi 阅读(3134) | 评论 (3)编辑 收藏

I have talked with my boss last week. Because there is a workflow enginee in our product, my boss don't allow me to release an open source workflow enginee , even the design of my Frontal Sea Workflow Engine is different with the enginee in our product.

posted @ 2006-08-30 23:28 Justfly Shi 阅读(601) | 评论 (0)编辑 收藏

I want to develop a workflow engine together with my girl friend. The purpose of developing a workflow is list below:
1. I was deploy project with workflow or developing workflow product in my three year career, but none of them can satisfy me.
2. I think I can study and practice java 5, spring, Hibernate 3, AJAX, Eclipse EMF etc...
3. With pair programming, I can teach my girl friend how to do professional programming

What is Frontal Sea?
Frontal Sea is the name of a scenic beach in my hometown. Spray waving lightly, the sea breeze blowing softly. It is peaceful; it is full of childhood memories.

posted @ 2006-06-21 00:49 Justfly Shi 阅读(712) | 评论 (0)编辑 收藏

仅列出标题
共6页: 上一页 1 2 3 4 5 6 下一页