紫風(fēng)亂寫

          除了他眼前的屏幕,這個(gè)人什么也沒看見。
          被周圍的電腦簇?fù)碇恢浪鶆?chuàng)造的現(xiàn)實(shí),但又意識(shí)到那是虛幻。
          他已經(jīng)超越了技術(shù)。也超越了機(jī)器。
          posts - 62, comments - 93, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2006年8月30日

          有這么一種神器,英文叫做reference card, 中文我不知道叫什么,就作用來說,可以叫做快捷鍵一頁紙,可以打印出來,放在案頭,然后可以隨時(shí)查閱。百度不容易找到,用谷歌的話可以使用reference card作為關(guān)鍵字查找。

          下面是幾個(gè)例子
          Eclipse 4.6: https://github.com/pellaton/eclipse-cheatsheet/raw/master/eclipse4.6/eclipse-shortcuts-4.6.0.pdf
          Intellij IDEA: https://resources.jetbrains.com/assets/products/intellij-idea/IntelliJIDEA_ReferenceCard.pdf
          Emacs: https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf
          Org-Mode: https://www.gnu.org/software/emacs/refcards/pdf/orgcard.pdf

          posted @ 2016-06-05 14:08 Justfly Shi 閱讀(530) | 評(píng)論 (0)編輯 收藏

               摘要: Emacs Tutorial中提到的快捷鍵以及自己找的一些快捷鍵  閱讀全文

          posted @ 2016-06-02 02:16 Justfly Shi 閱讀(345) | 評(píng)論 (0)編輯 收藏

          修改內(nèi)容:

          posted @ 2015-12-05 21:28 Justfly Shi 閱讀(1958) | 評(píng)論 (0)編輯 收藏


          修改內(nèi)容:

          • 添加BeanQuery.nested()方法,調(diào)用該方法后,具有同樣前綴的屬性或者別名會(huì)被放到一個(gè)Map中返回,詳情請(qǐng)看Allow format result into a map
          • BeanQuery.selectBean方法標(biāo)為@deprecated,并添加同一樣功能的方法,命名為BeanQuery.select

          posted @ 2015-12-05 20:48 Justfly Shi 閱讀(2840) | 評(píng)論 (0)編輯 收藏

               摘要: 在我看來,干活有兩種方式:

          1. 沒想清楚了,貿(mào)貿(mào)然開干,然后各處救火各種解決問題
          2. 想清楚了再開干,無驚無險(xiǎn),安然做完

          本文講講如何在設(shè)計(jì)中系統(tǒng)的思考以避免內(nèi)存溢出,并給出一個(gè)例子講解。  閱讀全文

          posted @ 2015-06-08 19:13 Justfly Shi 閱讀(3977) | 評(píng)論 (4)編輯 收藏

          5月初的時(shí)候,我發(fā)了一個(gè)帖子說要開始講單元測(cè)試,但是20多天過去了,為什么沒有更新呢?
          原因就是我在做視頻公開課,發(fā)現(xiàn)光文字表現(xiàn)的話比較費(fèi)勁,所以我決定錄制視頻,做成公開課。

          第一個(gè)錄制的是JUnit技術(shù),課程地址:http://edu.csdn.net/course/detail/908 歡迎大家觀后留言探討哦。

          posted @ 2015-05-26 22:25 Justfly Shi 閱讀(1635) | 評(píng)論 (4)編輯 收藏

               摘要: 從04年開始,我就開始在項(xiàng)目實(shí)踐中使用單元測(cè)試。十幾年來,參與的項(xiàng)目基本上都或多或少的使用了單元測(cè)試,多的能有100%覆蓋率的要求,少的也要覆蓋主要代碼,發(fā)現(xiàn)這個(gè)實(shí)踐在提高軟件質(zhì)量和開發(fā)速度上還是很有好處的。在和朋友同事的交流中,發(fā)現(xiàn)有很多項(xiàng)目沒有使用單元測(cè)試,也有很多程序員不會(huì)寫單元測(cè)試,但是大家對(duì)這個(gè)都很有興趣。所以我想把自己掌握的關(guān)于單元測(cè)試的技能(架構(gòu)、設(shè)計(jì)和技術(shù))和實(shí)施策略分享一下。  閱讀全文

          posted @ 2015-05-05 00:33 Justfly Shi 閱讀(6046) | 評(píng)論 (4)編輯 收藏

          代碼地址:https://github.com/Jimmy-Shi/bean-query/tree/bean-query-1.1.1

          修改內(nèi)容:
          • 簡(jiǎn)化用戶自定義轉(zhuǎn)換
          例子:
          List<String> bookNames=select(new DefaultSelector<String>() {
                @Override
                public String select(Object item) {
                  return ((Book)item).getName();
                }
              }).executeFrom(bookCollection);

          在Maven項(xiàng)目中引用:
          <dependency>
            <groupId>cn.jimmyshi</groupId>
            <artifactId>bean-query</artifactId>
            <version>1.1.1</version>
          </dependency>

          posted @ 2014-11-23 00:02 Justfly Shi 閱讀(1247) | 評(píng)論 (2)編輯 收藏

          Bean Query是一個(gè)開源的Java工具包,它復(fù)用Apache Commons BeanUtilsApache Commons CollectionsJava Hamcrest 來簡(jiǎn)化對(duì)Bean(集合)的排序,過濾和轉(zhuǎn)換。

          項(xiàng)目地址:

          https://github.com/Jimmy-Shi/bean-query

          http://git.oschina.net/jimmyshi/bean-query

          修改內(nèi)容:

          • 支持用戶自定義排序
          • 支持用戶自定義轉(zhuǎn)換
          • 支持對(duì)一個(gè)對(duì)象進(jìn)行轉(zhuǎn)換和過濾
          • 提供了完整的使用說明文檔

          在Maven項(xiàng)目中引用:

          <dependency>
            <groupId>cn.jimmyshi</groupId>
            <artifactId>bean-query</artifactId>
            <version>1.1.0</version>
          </dependency>

          posted @ 2014-11-21 22:58 Justfly Shi 閱讀(8437) | 評(píng)論 (2)編輯 收藏

          修改內(nèi)容:
          在Maven項(xiàng)目中引用
          <dependency>
            <groupId>cn.jimmyshi</groupId>
            <artifactId>bean-query</artifactId>
            <version>1.0.1</version>
          </dependency>

          posted @ 2014-11-03 21:56 Justfly Shi 閱讀(5554) | 評(píng)論 (3)編輯 收藏

          BeanQuery 是一個(gè)把對(duì)象轉(zhuǎn)換為Map的Java工具庫。支持選擇Bean中的一些屬性,對(duì)結(jié)果進(jìn)行排序和按照條件查詢。不僅僅可以作用于頂層對(duì)象,也可以作用于子對(duì)象。更多詳細(xì)的介紹可以看我的博文: http://www.aygfsteel.com/justfly/archive/2014/10/26/419067.html

          我剛剛發(fā)布了版本1.0.0. 現(xiàn)在已經(jīng)在Sonatype OSS庫上了,2個(gè)小時(shí)后將會(huì)被同步到Maven中央庫上。

          Sonatype OSS 庫下載地址: https://oss.sonatype.org/content/groups/public/cn/jimmyshi/bean-query/1.0.0/

          Github上的代碼: https://github.com/Jimmy-Shi/bean-query/tree/bean-query-1.0.0

          在Maven項(xiàng)目中引用

          <dependency>
            <groupId>cn.jimmyshi</groupId>
            <artifactId>bean-query</artifactId>
            <version>1.0.0</version>
          </dependency>

          posted @ 2014-10-29 02:24 Justfly Shi 閱讀(4466) | 評(píng)論 (0)編輯 收藏

               摘要: BeanQuery 是一個(gè)把對(duì)象轉(zhuǎn)換為Map的Java工具庫。支持選擇Bean中的一些屬性,對(duì)結(jié)果進(jìn)行排序和按照條件查詢。不僅僅可以作用于頂層對(duì)象,也可以作用于子對(duì)象。

          BeanQuery的使用非常簡(jiǎn)單也很直接  閱讀全文

          posted @ 2014-10-26 23:33 Justfly Shi 閱讀(5511) | 評(píng)論 (6)編輯 收藏

               摘要: 作為一個(gè)程序員,我們的日常工作之一就是看Log,從Log中發(fā)現(xiàn)自己所需要的信息,以及對(duì)Log做一些簡(jiǎn)單的分析和統(tǒng)計(jì)。本文分享了我所使用的工具和方法。  閱讀全文

          posted @ 2014-09-17 23:00 Justfly Shi 閱讀(2803) | 評(píng)論 (6)編輯 收藏

               摘要: 本文介紹了在代碼中應(yīng)該在什么時(shí)候需要Log什么信息;使用何種級(jí)別的Log;如何Log異常信息;Log中的一些要點(diǎn)。另外也分析了靜態(tài)Logger變量和對(duì)象Logger變量的優(yōu)劣。  閱讀全文

          posted @ 2014-08-13 23:32 Justfly Shi 閱讀(25942) | 評(píng)論 (7)編輯 收藏

               摘要: 作為《Java程序員修煉之道》博文的第一個(gè)主題Logging,我計(jì)劃中按照如下三篇來寫: 1. Logback的簡(jiǎn)單介紹和配置 2. 在Java代碼中如何使用SLF4J來寫日志以及寫日志的要點(diǎn) 3. 作為一個(gè)程序員,在日常工作中如何分析和挖掘Log。 這個(gè)是第一篇,簡(jiǎn)單介紹一下Logback的配置,適用于開始配置和開始入門,適用于一般情況下的使用。  閱讀全文

          posted @ 2014-08-10 02:46 Justfly Shi 閱讀(19798) | 評(píng)論 (1)編輯 收藏

               摘要: 后來我意識(shí)到,我不能只抱怨,作為一個(gè)寫了10多年代碼,帶過項(xiàng)目、做過業(yè)務(wù)最終還是寫代碼, 有車有房有妻有娃的四有不太牛逼的程序員,我有責(zé)任幫助剛?cè)胄械摹⑷胄袝r(shí)間不短的,還沒車沒房的Java程序員們掌握一些基礎(chǔ)的東西。
          如果你掌握了這些基礎(chǔ)的東西的話,而且英語口語還湊合的話,歡迎來找我?guī)湍銉?nèi)部推薦工作,估計(jì)一萬多的月薪是不成問題的,至于30、40萬的年薪應(yīng)該也是有機(jī)會(huì)的。  閱讀全文

          posted @ 2014-08-03 01:18 Justfly Shi 閱讀(5176) | 評(píng)論 (13)編輯 收藏

          Sorry every body, I am so busy that I can not finish this article on time. I will try to finish this article after I have got a job. You can compare the 2 xml files in the attached zip file to get some idea.

          There are 2 files in the zip file:
          1. google.xml: The original google search plugin
          2. google-oracle.xml: The search plugin that only search the oracle.com web site.

          Usage
          1. Put the google-oracle.xml in your personal firefox searchplugin folder. In windows firefox version 4 it is {FIREFOX_HOME}\distribution\searchplugins
          2. Restart the firefox. Done

          Click here to download the search plugins

          posted @ 2011-04-18 00:13 Justfly Shi 閱讀(1919) | 評(píng)論 (6)編輯 收藏

          If after upgrading your eclipse STS plugin from 2.5.2 to 2.6.0, your grails projects can not be build, and when building it, it always warning that "Errors running builder 'Java Builder' on projec". That might be caused by the old 1.6 groovy compiler.  The solution is to edit the file "eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info" and find the line for org.codehaus.groovy_1.6 and remove it. And then restart the eclipse. you can find that it should be fixed.

          Reference: http://docs.codehaus.org/display/GROOVY/Compiler+Switching+within+Groovy-Eclipse

          posted @ 2011-03-30 22:24 Justfly Shi 閱讀(1511) | 評(píng)論 (0)編輯 收藏

               摘要: 第一章 新的機(jī)會(huì) 第二章 對(duì)抗卡布福斯 第三章 “硅谷” 第四章 CD-ROM工廠 優(yōu)質(zhì)管理的四大要素 l 選擇正確的人 l 為他們分配正確的工作 l 保持他們的積極性 l 幫助團(tuán)隊(duì)凝聚起來并保持團(tuán)隊(duì)的凝聚力 (其他的一切都只是“文案”) 安全和變化 l 除非感到安全,否則人...  閱讀全文

          posted @ 2011-03-26 23:56 Justfly Shi 閱讀(339) | 評(píng)論 (0)編輯 收藏

          上周去一家大型網(wǎng)絡(luò)公司的內(nèi)部系統(tǒng)開發(fā)部門面試,該部門主要是為公司的各個(gè)部門開發(fā)工作中所需要用到的系統(tǒng),比如財(cái)務(wù),人事的一些小系統(tǒng)。面臨著:資源少,任務(wù)多,體現(xiàn)不出部門價(jià)值等問題。面試出來后想了幾點(diǎn),發(fā)給他們了,另外也分享出來,希望對(duì)從事類似工作的同學(xué)們有用。
          1. 統(tǒng)一簡(jiǎn)潔的頁面風(fēng)格和CSS
          因?yàn)槭莾?nèi)部系統(tǒng),所以頁面不需要太華麗和復(fù)雜的界面,所需要的是簡(jiǎn)單易用。因?yàn)槭嵌际莝ohu的內(nèi)部系統(tǒng),所以可以有統(tǒng)一的頁面風(fēng)格。
          統(tǒng)一頁面風(fēng)格帶來以下這些好處:
          a. 只需要采用一套CSS,而不需要在每個(gè)項(xiàng)目都進(jìn)行CSS的開發(fā)
          b. 能減少頁面設(shè)計(jì)的時(shí)間,頁面布局,功能區(qū)域設(shè)置能全部都統(tǒng)一起來
          c. 減低用戶對(duì)于新系統(tǒng)的學(xué)習(xí)曲線
          因?yàn)槭莾?nèi)部系統(tǒng),客戶端與服務(wù)器之間的連接速度能保證。因此可以采用簡(jiǎn)潔的頁面風(fēng)格。
          簡(jiǎn)潔的頁面能帶來以下好處:
          a. 減少頁面的開發(fā)難度,不用在一個(gè)頁面中堆積過非必要的數(shù)據(jù)。
          b. 方便任務(wù)分配
           
          2. 在做需求的時(shí)候同時(shí)完成靜態(tài)頁面的設(shè)計(jì)
          這條的好處是做頁面設(shè)計(jì)的時(shí)候能進(jìn)一步理解用戶的需求,也能同時(shí)從解決方案的角度來考慮問題,從用戶的角度來說,針對(duì)模型進(jìn)行思考能進(jìn)一步的引導(dǎo)他的需求。
          具體的做法就是
          a. 在一邊談需求一邊用紙畫出大概的頁面模型和用戶溝通,初步形成頁面功能的設(shè)計(jì)
          b. 談完需求之后盡快使用統(tǒng)一的CSS做出靜態(tài)的頁面。用頁面跳轉(zhuǎn)代替表單提交。
          c. 用靜態(tài)頁面組成的模型和用戶進(jìn)行初步溝通,在溝通過程中,如果時(shí)間不多的話在紙面上進(jìn)行修改再溝通,如果時(shí)間多的話,快速的修改靜態(tài)頁面,爭(zhēng)取盡可能多的把重點(diǎn)頁面和用戶達(dá)成一致。
          根據(jù)溝通結(jié)果把可以開始做的部分安排開發(fā)人員開始做,還不能確定的和客戶約好時(shí)間再進(jìn)行下一次溝通。
           
          3. 逐步建立可復(fù)用的代碼庫(功能組件)
          這一點(diǎn)說起來容易,做起來需要一定的額外代價(jià),是一個(gè)部門內(nèi)部的積累。前提是第一條建議能夠比較好的實(shí)施。這里的代碼庫(功能組件)大到一個(gè)功能模塊(連接LDAP),小到一個(gè)頁面控件(多層次部門選擇下拉列表)。具體做法是
          a. 在項(xiàng)目開發(fā)中有意識(shí)的把可通用的組件單獨(dú)放到一個(gè)包里
          b. 項(xiàng)目結(jié)束后,花1到2天的時(shí)間整理成可復(fù)用的代碼
          c. 整理完之后再對(duì)相關(guān)技術(shù)人員進(jìn)行培訓(xùn)(這個(gè)很重要,有通用代碼而別人不知道=沒有通用代碼)
          d. 在以后的項(xiàng)目中,在復(fù)用的過程中進(jìn)行完善
          e. 盡量減少?gòu)?fù)制粘貼再修改
           
          4. 收集客戶部門使用系統(tǒng)后的效果,其結(jié)果可用于對(duì)上對(duì)外和對(duì)內(nèi)
          客戶部門應(yīng)該會(huì)有這樣的數(shù)據(jù),因?yàn)樗麄冃枰@些東西來說明他們上新系統(tǒng)的效果。本部門可以用這些數(shù)據(jù)來說明自己的貢獻(xiàn)以獲取公司的認(rèn)同甚至可以去爭(zhēng)取更多的資源
          IT或者運(yùn)維部門應(yīng)該會(huì)有bug數(shù)量的和分布的統(tǒng)計(jì)數(shù)據(jù),如果沒有的話自己可以收集到達(dá)本部門的bug數(shù)量和分布的數(shù)據(jù),通過這些可以在以后的工作中有意識(shí)的避免這些bug
          通過這些數(shù)據(jù)可以在以后的需求分析過程中為客戶部門提供更容易使用的系統(tǒng)

          posted @ 2011-03-02 11:36 Justfly Shi 閱讀(883) | 評(píng)論 (0)編輯 收藏

               摘要: 軟件開發(fā)團(tuán)隊(duì)和測(cè)試團(tuán)隊(duì)之間的關(guān)系是復(fù)雜而有趣的,雙方有共同目標(biāo),又互相競(jìng)爭(zhēng)。雙方的共同目標(biāo)在于減少軟件交付之后缺陷的嚴(yán)重程度和數(shù)量。雙方的利益競(jìng)爭(zhēng)在于測(cè)試人員盡可能的發(fā)現(xiàn)軟件開發(fā)團(tuán)隊(duì)交付的軟件產(chǎn)品的缺陷。在這種情況下,減少無謂的內(nèi)耗,共同保證共同目標(biāo)的實(shí)現(xiàn),才可能實(shí)現(xiàn)雙方的共贏。但是在很多時(shí)候,軟件開發(fā)團(tuán)隊(duì)和測(cè)試人員之間總存在著一種緊張的關(guān)系,并因此無謂的添加了到達(dá)共同目標(biāo)的困難。

          在我經(jīng)歷過的一些開發(fā)過程中,多次因?yàn)榕c測(cè)試人員之間的頗為愉快的合作,實(shí)現(xiàn)了雙贏和共贏。總結(jié)出來幾點(diǎn),拋磚引玉:
          1. 保持良好的心態(tài),提高對(duì)開發(fā)人員與測(cè)試人員之間關(guān)系的認(rèn)識(shí)
          2. 對(duì)于客戶想法的理解,開發(fā)團(tuán)隊(duì)與測(cè)試團(tuán)隊(duì)需要達(dá)成一致并且保持同步。
          3. 互相幫助,共同提高  閱讀全文

          posted @ 2010-10-24 05:07 Justfly Shi 閱讀(1806) | 評(píng)論 (0)編輯 收藏

          1. test if the command notify-send is installed
          notify-send "Hello"
          If the command is not found, install the required package following the tips
          2. vi notify.sh and input the below content into it.
          #!/bin/bash
          DISPLAY=:0.0 /usr/bin/notify-send -30000 "<b>Take a Break!</b>"
          3. chmod +x notify.sh
          4. crontab -e
          5. add the below content as a new line in the opened file. and then save it
          */45 * * * * /home/jimmy/notify.sh
          6. Done!

          posted @ 2010-09-28 15:49 Justfly Shi 閱讀(364) | 評(píng)論 (0)編輯 收藏

          It is only available for one session.
          using the below command before you run your query
          ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
          For more information, refer to the page http://www.oracle.com/technology/products/database/sql_developer/howtos/howto_policy_date_formats.html
          

          posted @ 2010-08-11 16:45 Justfly Shi 閱讀(365) | 評(píng)論 (0)編輯 收藏

          In Ubuntu, key F10 is used to open the first item of the menu bar, but If you use Emacs key binding in eclipse, F10 is used as the redo key. So you need to do the below change.

          Run gconf-editor, browse to /desktop/gnome/interface then scroll down to menubar_accel and delete the F10 value.

          From http://www.h4ck3r.net/2010/04/07/debugging-step-over-f10-eclipse-ubuntu/

          posted @ 2010-07-22 23:35 Justfly Shi 閱讀(334) | 評(píng)論 (0)編輯 收藏

          install jdk via Synaptic package manager, the name of it is sun-java6-jdk
          download the eclipse install file for Linux

          1.Extract the eclipse download and move to opt.

          tar xzf wtp-all-in-one-sdk-1.0-linux-gtk.tar.gz
          sudo mv eclipse /opt/eclipse
          cd /opt
          sudo chmod -R +r eclipse
          sudo chmod +x `sudo find eclipse -type d`

          2. Then create an eclipse executable in your path
          sudo touch /usr/bin/eclipse
          sudo chmod 755 /usr/bin/eclipse
          sudo vi /usr/bin/eclipse

          With this contents
          #!/bin/sh
          export ECLIPSE_HOME="/opt/eclipse"
          export GDK_NATIVE_WINDOWS=1

          $ECLIPSE_HOME/eclipse $*

          3 Then create a gnome menu item
          sudo vi /usr/share/applications/eclipse.desktop

          With this contents
          [Desktop Entry]
          Encoding=UTF-8
          Name=Eclipse
          Comment=Eclipse IDE
          Exec=eclipse
          Icon=/opt/eclipse/icon.xpm
          Terminal=false
          Type=Application
          Categories=GNOME;Application;Development;
          StartupNotify=true


          4 You now have a working eclipse. But run this command first to initialize the set up
          . /opt/eclipse/eclipse -clean

          Then from here on you can run from the menu item applications/programming/eclipse

          posted @ 2010-07-22 23:27 Justfly Shi 閱讀(341) | 評(píng)論 (0)編輯 收藏

          查找包含某字符串的所有文件
          grep -F 'aaa' -R ./

          如何指定輸出文件的某幾行
          想輸出多行用:
          sed -n '1,np' file
          跳著輸出用";"
          sed -n '1p;4p;7p;9p' file

          posted @ 2010-07-22 23:25 Justfly Shi 閱讀(275) | 評(píng)論 (0)編輯 收藏

          open System->Administration->Language support
          1. Install/Remove languages->check 'Chinese(Simplified)
          2. Keyboard input method system->ibus
          open System->Preferences->IBus Preferences->Input method->add "Chinese Pinyin"->move it to the top

          posted @ 2010-07-22 23:23 Justfly Shi 閱讀(422) | 評(píng)論 (0)編輯 收藏

          http://www.linuxsir.org/bbs/thread362467.html
          下面的這個(gè)已經(jīng)不再維護(hù)了。上面的這個(gè)好使。
          http://www.linuxsir.org/bbs/thread320802.html

          posted @ 2010-07-22 23:23 Justfly Shi 閱讀(563) | 評(píng)論 (2)編輯 收藏

          create or edit file /etc/hal/fdi/policy/mouse-wheel.fdi, change its content to below
          <?xml version="1.0" encoding="UTF-8"?>
          <match key="info.product" string="TPPS/2 IBM TrackPoint">
          <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
          <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
          <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
          <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
          <merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>
          <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
          </match>


          then run the below command

          sudo rm /var/cache/hald/fdi-cache
          sudo /etc/init.d/hal restart
          sudo /etc/init.d/gdm restart

          posted @ 2010-07-22 23:21 Justfly Shi 閱讀(393) | 評(píng)論 (0)編輯 收藏

          當(dāng)Eclipse無法找到類,無法正確導(dǎo)入類的時(shí)候,有的時(shí)候是因?yàn)閕ndex出錯(cuò),刪除下面這個(gè)目錄
          .metadata\.plugins\org.eclipse.jdt.core

          posted @ 2010-06-29 15:21 Justfly Shi 閱讀(631) | 評(píng)論 (0)編輯 收藏

          使用如下Name Space可以讓Xml工具對(duì)POM元素進(jìn)行驗(yàn)證
          <?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>
          幾個(gè)相當(dāng)不錯(cuò)的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 閱讀(1156) | 評(píng)論 (0)編輯 收藏

            上周去某上市公司面試一個(gè)ITIL產(chǎn)品技術(shù)經(jīng)理的崗位,前一輪面試已經(jīng)談了不少管理方面的事情了,這次主要集中在談ITIL的知識(shí)。該公司本身在做HP等廠家的ITIL類產(chǎn)品的代理,自己也開發(fā)了一套ITIL軟件。

            在面談過程中,該公司的面試人員對(duì)我原先服務(wù)的理想科技公司Entegor(iEAI)產(chǎn)品在光大銀行IT服務(wù)管理項(xiàng)目中的作用不以為然,認(rèn)為只要是加強(qiáng)了IT運(yùn)維過程中的管理就能起到大幅度減少IT事故。并且認(rèn)為該項(xiàng)目并不是一個(gè)合格的ITIL項(xiàng)目。很是汗顏的是,那天天我居然被該面試人員的ITIL方面的教條熟悉程度以及其對(duì)HPIBMBMCCA等廠家的產(chǎn)品了解程度所嚇到,認(rèn)為對(duì)方果然是ITIL專家,作為一個(gè)連十大流程名字都背不全的我實(shí)在是不配談ITIL。第二天早上醒來,才發(fā)現(xiàn)其論點(diǎn)是典型 ITIL教條主義。下面我談?wù)劵谥袊?guó)銀行業(yè)IT建設(shè)現(xiàn)狀該怎么看待ITIL

            “ITILInformation Technology Infrastructure LibraryIT基礎(chǔ)設(shè)施庫)是英國(guó)中央計(jì)算機(jī)與電信總局(Central Computer and Telecommunications agencyCCTA)于1980年為了解決“IT服務(wù)質(zhì)量不佳的問題而開發(fā)的一套IT業(yè)界的服務(wù)管理標(biāo)準(zhǔn)庫,是管理科學(xué)在信息技術(shù)(IT)中的應(yīng) 用,是一種基于流程的方式。(來之《現(xiàn)代IT服務(wù)管理-基于ITIL的最佳實(shí)踐) ITIL包括十大流程,五個(gè)基于運(yùn)營(yíng)層面的服務(wù)支持流程,包括服務(wù)臺(tái)、事件管理、問題管理、配置管理、變更管理、發(fā)布管理;二是五個(gè)基于戰(zhàn)術(shù)層面的服務(wù)提供流程,包括服務(wù)等級(jí)管理、持續(xù)性、可用性、能力和財(cái)務(wù)管理。以 ITIL為參考,各個(gè)廠家都提出了自身的實(shí)施模型,其中包括有HPITSMIBMITPM、微軟的MOF

            以上是ITIL的一些基本資料,冷一眼看起來的確是非常不錯(cuò):英國(guó)的中央計(jì)算機(jī)與電信總局各大廠商支持十大流程。于是業(yè)內(nèi)的一些行 家,開口閉口十大流程,但是卻忘了IT系統(tǒng)的最基本的要求滿足客戶需求。作為任何一個(gè)服務(wù)提供商,你的價(jià)值體現(xiàn)在為客戶解決現(xiàn)有問題。ITIL只是一個(gè)源于英國(guó)國(guó)內(nèi)IT管理實(shí)踐的參考模型而已,并不是一個(gè)萬能藥。

            中國(guó)的IT建設(shè)有其自身的特點(diǎn),與英國(guó)的IT建設(shè)并不一樣,不同的文化和不同的種族需要不同的管理方法,來自于英國(guó)的管理文化在中國(guó)成功的并不不多。同樣,來自于英國(guó)的IT管理實(shí)踐在國(guó)內(nèi)也不見得就是好東西,有些情況下還可能是一副毒藥。這個(gè)情況和ERP最初的實(shí)施情況非常類似。

            我在擔(dān)任長(zhǎng)春理想科技Entegor(iEAI)產(chǎn)品研發(fā)部門經(jīng)理期間與多家銀行的信息部門管理人員有過交流。總的來說,大家的關(guān)注點(diǎn)主要集中在如何保證系統(tǒng)持續(xù)良好的運(yùn)行上。

            那么這個(gè)情況是怎么形成的呢,我認(rèn)為主要是這是國(guó)內(nèi)目前IT建設(shè)現(xiàn)狀的一個(gè)體現(xiàn)。

            國(guó)內(nèi)的IT建設(shè)現(xiàn)在處于這么一個(gè)情況:IT系統(tǒng)種類豐富,IT系統(tǒng)性能不穩(wěn)定,管理水平較低。這個(gè)情況主要由這么幾個(gè)因素造成:1、信息系統(tǒng)建設(shè)初期缺乏完整的遠(yuǎn)期的規(guī)劃,后期隨意建設(shè)情況較嚴(yán)重;2、高級(jí)系統(tǒng)管理人員缺乏,初級(jí)維護(hù)人員經(jīng)驗(yàn)不足;3IT部門管理仍有相當(dāng)部分停留在手工操作水平;4、國(guó)外IT產(chǎn)品水土不服、國(guó)內(nèi)IT產(chǎn)品質(zhì)量欠缺。

            那么國(guó)內(nèi)目前最需要的是什么樣的IT管理呢?我總結(jié)出來的結(jié)論是目前國(guó)內(nèi)所需要的IT管理主要集中在保持系統(tǒng)的穩(wěn)定運(yùn)行,保證IT系統(tǒng)的良好運(yùn)行,提高IT系統(tǒng)、部門的管理水平。從實(shí)施的角度來說,需要做好對(duì)系統(tǒng)的監(jiān)控,事故問題的預(yù)防、及時(shí)解決和經(jīng)驗(yàn)總結(jié),完善IT系統(tǒng)、部門的信息管理。要做到這個(gè)不是單靠背誦ITIL教條,死搬硬套ITIL十大流程就能做到的。需要的是參考成功經(jīng)驗(yàn)(如ITIL模型及流程),根據(jù)企業(yè)的管理模式、IT建設(shè)現(xiàn)狀進(jìn)行相關(guān)系統(tǒng)的開發(fā)和實(shí)施,相關(guān)制度和流程的制訂和實(shí)施。

            在這個(gè)實(shí)施過程中,企業(yè)IT建設(shè)現(xiàn)狀和企業(yè)管理模式才是我們需要關(guān)注的重點(diǎn),ITIL只是一個(gè)參考模型而已。

            我們需要這么來認(rèn)識(shí)ITIL,它是一個(gè)泊來的提高IT管理和IT服務(wù)水平的參考模型,僅供參考!

          posted @ 2007-12-11 00:18 Justfly Shi 閱讀(1603) | 評(píng)論 (12)編輯 收藏

            作為一個(gè)現(xiàn)代的開發(fā)人員,你已經(jīng)習(xí)慣了使用版本管理來管理自己的代碼和文檔。當(dāng)我們?cè)诩依锏臋C(jī)器上想對(duì)自己的東西做版本管理的時(shí)候你需要自己配置一個(gè)版本管理服務(wù)器,如CVS等。但是很遺憾的是,CVSNT的配置很是麻煩,而且CVS的功能實(shí)在是落伍,SVN服務(wù)器的配置也實(shí)在麻煩,VSS?老古董一邊去!網(wǎng)絡(luò)上申請(qǐng)一個(gè)免費(fèi)的項(xiàng)目空間,如sf.net之類的:那你的文件就都公開了。

            今天我無意中發(fā)現(xiàn)原來創(chuàng)建一個(gè)個(gè)人用的SVN Repository是那么的方便。TortoiseSvn這個(gè)小烏龜你一定很熟悉,它本身就有一個(gè)創(chuàng)建本地Repository的功能,我以前沒有注意到過,不知道你用過沒有。我用的版本是 1.4.4,在它的幫助的Chapter4里就提到了這個(gè)功能。簡(jiǎn)單來說操作步驟如下

            第一步,創(chuàng)建一個(gè)空白目錄,如F:/SVNRepositorys/sample/sampleRepository

            第二步,右鍵點(diǎn)擊該目錄,在右鍵菜單中選擇TortoiseSVN->Create repository here...。如下圖所示


            第三步,在彈出窗口中選擇repository的類型,F(xiàn)SFS是一種新的格式是一種新的類型,速度快,支持網(wǎng)絡(luò)共享和windows98;BDB類型比較成熟,已經(jīng)用了很長(zhǎng)時(shí)間了,比較穩(wěn)定。選擇你想要的,點(diǎn)擊OK按鈕就可以了。

           


            到此為止我們的工作就完成了,你已經(jīng)有一個(gè)本地的repository可以用來做版本管理了。如果有興趣的話你可以打開你剛才創(chuàng)建的目錄看看里面的內(nèi)容。我對(duì)里面的內(nèi)容格式并不很清楚,這里就不說了。下面我們可以用Repository Browser看看我們新創(chuàng)建的repository,如下圖所示:輸入地址file:///F:/SVNRepositorys/sample/sampleRepository你就可以看到新創(chuàng)建的repository了。注意上面的藍(lán)色部分,這里使用的協(xié)議是file協(xié)議。

           

           

            我原先為自己一些文件的版本管理做過很多的麻煩事,比如搭建CVSNT啊,學(xué)習(xí)SVN Server的配置啊。但是沒有想到可以這么簡(jiǎn)單的就可以達(dá)到自己的目的了。這件事情給了我一個(gè)啟發(fā):熟練掌握你手里已有的工具,你會(huì)發(fā)現(xiàn)你其實(shí)已經(jīng)擁有很多。

          posted @ 2007-08-29 01:38 Justfly Shi 閱讀(7705) | 評(píng)論 (4)編輯 收藏

          CURRENT=`pwd`
          echo $CURRENT

          以上兩行厲害吧?其實(shí)就是使用了反引號(hào)而已,注意pwd邊上的那兩撇不是單引號(hào),是鍵盤左上角1邊上的那個(gè)鍵。

          下面是一點(diǎn)相關(guān)的資料
          來源是http://hi.baidu.com/lzwwqk/blog/item/40a3f41bb4f8b3fbae513358.html

          反引號(hào) `

          反引號(hào)(`)這個(gè)字符所對(duì)應(yīng)的鍵一般位于鍵盤的左上角,不要將其同單引號(hào)(’)混淆。反引號(hào)括起來的字符串被shell解釋為命令行,在執(zhí)行時(shí),shell首先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)反引號(hào)(包括兩個(gè)反引號(hào))部分。例如:

          $ pwd

          /home/xyz

          $ string=”current directory is `pwd`”

          $ echo $string

          current directour is /home/xyz

          $

          shell執(zhí)行echo命令時(shí),首先執(zhí)行`pwd`中的命令pwd,并將輸出結(jié)果/home/xyz取代`pwd`這部分,最后輸出替換后的整個(gè)結(jié)果。

          利用反引號(hào)的這種功能可以進(jìn)行命令置換,即把反引號(hào)括起來的執(zhí)行結(jié)果賦值給指定變量。例如:

          $ today=`date`

          $ echo Today is $today

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

          $

          反引號(hào)還可以嵌套使用。但需注意,嵌套使用時(shí)內(nèi)層的反引號(hào)必須用反斜線(\)將其轉(zhuǎn)義。例如:

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

          $ echo $abc

          The number of users is 5

          $

          在反引號(hào)之間的命令行中也可以使用shell的特殊字符。Shell為得到``中命令的結(jié)果,它實(shí)際上要去執(zhí)行``中指定的命令。執(zhí)行時(shí),命令中的特殊字符,如$,”,?等又將具有特殊含義,并且``所包含的可以是任何一個(gè)合法的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 閱讀(1969) | 評(píng)論 (1)編輯 收藏

          Remote Debugging with Eclipse說明了遠(yuǎn)程調(diào)試的原理,說明了讓java程序支持被遠(yuǎn)程調(diào)用所需要的java參數(shù)如下
          -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
          以及如何配置遠(yuǎn)程調(diào)試weblogic、jboss和tomcat,但是里面對(duì)如何讓tomcat支持遠(yuǎn)程調(diào)用并沒有仔細(xì)說。再搜索,在tomcat的FAQ就找到了:
          How do I configure Tomcat to support remote debugging?
          如上面所示,其中的關(guān)鍵在于如何正確的啟動(dòng)tomcat。對(duì)于非windows平臺(tái)下的操作來說,需要把%TOMCAT_HOME%/bin/startup.sh中的最后一行exec "$PRGDIR"/"$EXECUTABLE" start "$@" 中的start改成jpda start。如果的8000端口有其他用處的話,那么還需要修改catalina.sh文件,看其中的說明,添加一行JPDA_ADDRESS=”1044”或者其他你指定的端口。這樣就可以通過startup.sh或者catalina.sh jpda start來其中支持遠(yuǎn)程調(diào)試的tomcat了。
          在windows平臺(tái)上是一樣的步驟,只不過.sh文件改成了.bat文件了。然后需要注意以下這些地方,
          1、?catalina.bat文件默認(rèn)的JPDA_TRANSPORT是dt_shmem,但是Eclipse只支持dt_socket,所以需要在catalina.bat中添加一行set JPDA_TRANSPORT=”dt_socket”
          2、?catalina.bat文件默認(rèn)的端口是jdbconn,我也不知道這個(gè)端口是多少,因此添加一個(gè)set JPDA_ADDRESS="1044"

          posted @ 2007-02-05 18:34 Justfly Shi 閱讀(6765) | 評(píng)論 (0)編輯 收藏

          資料地址: SSH技術(shù)專題|中國(guó)IT認(rèn)證實(shí)驗(yàn)室
          配置SSH所用密鑰的方法
          使用ssh-keygen或者ssh-keygen -d(for ssh2)產(chǎn)生密鑰對(duì),其中公鑰的地址為$HOME/.ssh/id_dsa.pub,私鑰的地址為$HOME/.ssh/id_dsa。
          把.ssh下面的id_dsa.pub改名為authorized_keys,則可以使用id_dsa作為密鑰實(shí)現(xiàn)登陸了



          ssh-keygen -d調(diào)用過程

          putty使用密鑰登錄的方法
          putty是一個(gè)常用的ssh客戶端,通過使用密鑰登錄,就可以不用每次登錄的時(shí)候都使用密碼了。1、使用puttygen.exe程序,先load上面生成的id_dsa文件,然后Save private key生成一個(gè)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 閱讀(769) | 評(píng)論 (0)編輯 收藏

          25 測(cè)試驅(qū)動(dòng)開發(fā)模式


          準(zhǔn)備兩個(gè)TODO-List一個(gè)用于當(dāng)前,一個(gè)用于最近
          當(dāng)發(fā)現(xiàn)有事情要做的時(shí)候,對(duì)其優(yōu)先級(jí)進(jìn)行判斷,將其放到當(dāng)前或者以后。
          集中注意力于當(dāng)前要做的事情

          斷言優(yōu)先
          寫Case的時(shí)候,一開始就寫斷言,從測(cè)試完成時(shí)能通過的斷言開始寫。

          測(cè)試數(shù)據(jù)
          測(cè)試數(shù)據(jù)要使用容易讓人理解的數(shù)據(jù),不要為了編排數(shù)據(jù)而編排數(shù)據(jù)
          不要用同一個(gè)常量來表達(dá)多種一絲。另外也可以使用真實(shí)數(shù)據(jù)進(jìn)行測(cè)試。

          盡量讓測(cè)試的行為和數(shù)據(jù)容易理解,比如不使用常量,而是直接使用數(shù)字。在assert中加入斷言要測(cè)試的目的的文字說明

          26 不可運(yùn)行狀態(tài)


          一步測(cè)試(One Step Test)
          從計(jì)劃列表中選擇具有指導(dǎo)意義而且有把握實(shí)現(xiàn)的測(cè)試去完成它。??

          啟動(dòng)測(cè)試(Starter Test)
          從測(cè)試某個(gè)實(shí)質(zhì)上不做任何工作的操作開始,這樣的測(cè)試一般能很快工作。而一個(gè)做實(shí)際工作的功能的測(cè)試可能需要等你解決很多問題,比如:這個(gè)操作隸屬于哪里?正確的輸入是什么?對(duì)應(yīng)的正確輸出是什么?等等。結(jié)果是其長(zhǎng)期無法通過。

          回歸測(cè)試(Regression Test)
          對(duì)于一個(gè)錯(cuò)誤情況,編寫一個(gè)針對(duì)該錯(cuò)誤的,會(huì)出錯(cuò)的,盡可能小的測(cè)試。

          27測(cè)試模式


          子測(cè)試(Child Test)
          如果一個(gè)測(cè)試太大以至于難以運(yùn)行起來,那么可以先把該測(cè)試給分解成幾個(gè)小的測(cè)試,并注釋掉本測(cè)試。等這些小測(cè)試通過之后再繼續(xù)這個(gè)大的測(cè)試??

          模擬對(duì)象(Mock Object)
          如何測(cè)試一個(gè)依賴于昂貴的且復(fù)雜的資源的對(duì)象?創(chuàng)建一個(gè)這些資源的模擬版本。

          自分流(self Shunt)
          如何測(cè)試對(duì)象間是否正常交互?讓測(cè)試對(duì)象于測(cè)試用例而不是期望的對(duì)象進(jìn)行交互。
          需要讓測(cè)試用例類實(shí)現(xiàn)所要交互的類的接口。從而進(jìn)行測(cè)試所實(shí)現(xiàn)的方法會(huì)被正確的調(diào)用。

          日志字符串(Log String)
          如何才能測(cè)試使消息調(diào)用順序是正確的?將日志保存在字符串中,當(dāng)調(diào)用一個(gè)消息時(shí),就向字符串尾部追加相應(yīng)的信息。

          清掃測(cè)試死角(Crash Test Dummy)
          如何測(cè)試到不大可能被調(diào)用的錯(cuò)誤代碼呢?使用一種特殊的對(duì)象調(diào)用它,這個(gè)對(duì)象拋出一個(gè)異常而不做任何實(shí)際工作。比如實(shí)現(xiàn)一個(gè)匿名File子類,只實(shí)現(xiàn)其createNewFile方法,方法中拋出一個(gè)異常,通過這種方式來測(cè)試文件系統(tǒng)滿了的情況。

          不完整測(cè)試(Broken Test)
          留下半截句子或者一個(gè)沒有通過的測(cè)試用例可以保證你離開代碼一段時(shí)間之后依然能較快的回憶起原先的想法。

          提交前保證所有測(cè)試運(yùn)行通過
          當(dāng)你在團(tuán)隊(duì)中變成時(shí)如何結(jié)束一段編碼工作?讓所有測(cè)試運(yùn)行起來。
          注釋掉一些測(cè)試代碼使測(cè)試套件通過是要嚴(yán)格禁止的。

          28可運(yùn)行模式


          偽實(shí)現(xiàn)(直到你成功)
          測(cè)試不能通過時(shí)首先應(yīng)該執(zhí)行什么?可以返回一個(gè)常量。一旦你能使測(cè)試運(yùn)行起來,那個(gè)常量就會(huì)逐漸換成用變量表示的表達(dá)式。這個(gè)方法可以從心理上讓我們感到滿足,可以讓我們集中注意力于當(dāng)前要解決的問題。

          三角法(Triangulation)
          怎樣可以更適當(dāng)?shù)乩脺y(cè)試推動(dòng)抽象呢?只有當(dāng)你有兩個(gè)或兩個(gè)以上的例子時(shí),你才能進(jìn)行抽象。使用兩個(gè)針對(duì)同一個(gè)測(cè)試目標(biāo)的測(cè)試?yán)樱ɑ驍嘌裕诖嘶A(chǔ)上對(duì)該測(cè)試目標(biāo)的實(shí)現(xiàn)進(jìn)行抽象并實(shí)現(xiàn)。

          顯明實(shí)現(xiàn)(Obvious Implementation)
          直接實(shí)現(xiàn)簡(jiǎn)單的操作。

          從一到多(One to Many)
          怎樣實(shí)現(xiàn)一個(gè)作用于對(duì)象集合體的操作呢?首先在非集合體中實(shí)現(xiàn),然后使之作用于集合體。

          32 掌握TDD


          什么可以不必測(cè)試?
          應(yīng)該測(cè)試:條件部分、循環(huán)部分、操作部分、多態(tài)性。除了不信任,否則不要測(cè)試其他來源的代碼。

          怎樣知道自己的測(cè)試沒有疏漏呢?
          一些預(yù)示著設(shè)計(jì)存在這缺陷的特征:
          過長(zhǎng)的設(shè)置代碼——如果為了一個(gè)簡(jiǎn)單的斷言,需要花費(fèi)上百行代碼創(chuàng)建對(duì)象,那么肯定有哪兒不對(duì)勁兒。對(duì)象太大,需要分割。
          冗余的設(shè)置代碼——如果你無法為公共代碼找到一個(gè)存放它的公共場(chǎng)所的話,那么就表明有太多的對(duì)象過于緊密地聯(lián)系在一起了。
          過長(zhǎng)的測(cè)試運(yùn)行時(shí)間——這樣測(cè)試不會(huì)被經(jīng)常運(yùn)行,同時(shí)也暗示著對(duì)系統(tǒng)的方方面面進(jìn)行測(cè)試是困難的。這種測(cè)試?yán)щy是一種設(shè)計(jì)問題,并且需要在設(shè)計(jì)時(shí)就被提出來。
          脆弱的測(cè)試——意外中斷的測(cè)試說明應(yīng)用的某一部分出人意料地存在對(duì)另一部分的影響。你需要對(duì)系統(tǒng)進(jìn)行設(shè)計(jì),要么打破聯(lián)系,要么將兩部分合并,直到這種影響消失為止。

          你需要多少反饋?
          測(cè)試驅(qū)動(dòng)的開發(fā)對(duì)測(cè)試的觀點(diǎn)就是注重實(shí)效。在測(cè)試驅(qū)動(dòng)開發(fā)中,測(cè)試從某種意義上說是一種達(dá)到目的的手段——達(dá)到充滿自信地編寫代碼的目的。如果我們對(duì)實(shí)現(xiàn)有充分了解,不用測(cè)試就能擁有自信的話,那么就沒有必要編寫測(cè)試了。

          什么時(shí)候應(yīng)該刪除測(cè)試?
          如果刪除一個(gè)測(cè)試降低了你對(duì)整個(gè)系統(tǒng)功能的信心,那么就不要?jiǎng)h除。
          如果你有兩個(gè)測(cè)試,走的是同一條路,但對(duì)讀者來說講述的是不同的情形的話,那么就應(yīng)該原封不動(dòng)的保留。
          如果有兩個(gè)測(cè)試,它們就自信和溝通而言都是冗余的,那么就刪除其中用處最小的那個(gè)。

          如何中途轉(zhuǎn)向測(cè)試驅(qū)動(dòng)開發(fā)?
          首先限定修改的范圍。對(duì)于該范圍外的可以簡(jiǎn)化的地方先不動(dòng)手。
          其次,必須打破測(cè)試與重構(gòu)之間的僵局。可以先通過其他方式獲取反饋,如系統(tǒng)測(cè)試,然后使用這些反饋進(jìn)行修改。通過這種方式逐漸的讓一直在改變的部分轉(zhuǎn)向測(cè)試驅(qū)動(dòng)。

          posted @ 2006-11-21 00:24 Justfly Shi 閱讀(548) | 評(píng)論 (0)編輯 收藏

            由于最近需要通過一種跨平臺(tái)、跨語言的方式來傳遞需要多層嵌套的數(shù)據(jù),因此研究了一下JSON。首先試用JSON-lib做一下測(cè)試,但是未能通過測(cè)試,于是再找其他幾個(gè)Java實(shí)現(xiàn),但是也未能通過測(cè)試。分別測(cè)試對(duì)于一個(gè)簡(jiǎn)單的類的序列化和反序列化,對(duì)于一個(gè)有數(shù)組和Map域的對(duì)象的序列化和反序列化。對(duì)于結(jié)果比較失望。
            其中的JSON-lib能通過第一個(gè)測(cè)試,第二個(gè)測(cè)試的時(shí)候則失敗。但是有一個(gè)很大的bug,對(duì)于存在null域的對(duì)象反序列化的時(shí)候會(huì)失敗。該bug已經(jīng)在主頁上了,但是不知道那個(gè)版本會(huì)修改。
            其中的StringTree只能revert回一個(gè)Map對(duì)象。而對(duì)于一個(gè)復(fù)雜的對(duì)象,則無法revert。在做第二個(gè)測(cè)試的時(shí)候總是停在那里不動(dòng)了。
            其中的JSON-Tool根本就沒有直接的序列化的功能。
            由于測(cè)試情況很不理想,因此只進(jìn)行了兩個(gè)測(cè)試,對(duì)于特殊字符、國(guó)際化的測(cè)試沒有進(jìn)行。
            
            結(jié)論:JSON的序列化和反序列化功能還不成熟。
            所有代碼下載地址http://www.aygfsteel.com/Files/justfly/jsonTest.zip
            測(cè)試類如下:

          ?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 閱讀(3142) | 評(píng)論 (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 閱讀(606) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 梅河口市| 余庆县| 武定县| 库尔勒市| 张家口市| 阜康市| 南昌县| 剑河县| 邵武市| 威海市| 潮安县| 游戏| 剑阁县| 蒲江县| 钟山县| 阿勒泰市| 达日县| 沾益县| 章丘市| 东乌珠穆沁旗| 安陆市| 石首市| 新巴尔虎左旗| 涿鹿县| 宜州市| 海伦市| 漯河市| 剑川县| 房山区| 余干县| 冕宁县| 扎兰屯市| 浦江县| 金寨县| 佛山市| 丹巴县| 永福县| 荔浦县| 莱西市| 丹阳市| 盐城市|