2015年12月28日 星期一

美食手扎

基隆萬里美食
* 來野柳絕對不能錯過的海產店 *
推薦:清蒸萬里蟹、薑蔥萬里蟹、
蠔油蒸豆腐九孔、清蒸石斑魚、彩椒軟絲

意芳海產大王
地址:新北市萬里區野柳里港東路155號
電話:02-24922175 02-24926465
營業時間:10:00-20:00

評價: 愛評網
http://www.ipeen.com.tw/comment/19665

阿莫品味餐廳
     價格上會比一般的合菜餐廳稍微高一點
地址:桃園縣蘆竹鄉光明路二段226-1號
電話:03-2123222
阿莫品味餐廳官網:http://www.032123222.com.tw/

2015年12月25日 星期五

J2EE 架構 [三層結構]

J2EE的三層結構是指
表示層(Presentation),
業務邏輯層(Business Logic)以及
基礎架構層(Infrastructure),
這樣的劃分非常經典,但是在實際的項目開發法中,
開發者通常對三層結構進行擴展來滿足一些項目的具體要求

一個最常用的擴展就是將三層體系擴展為五層體系,

表示層(Presentation)、
控制/中介層(Controller/Mediator)、
領域層(Domain)、
數據持久層(Data Persistence)和
數據源層(Data Source)。

2015年12月4日 星期五

2015年9月9日 星期三

Centos安裝 Apache 2.4.10步驟 For CentOS 6.X (32bits)

Centos安裝 Apache 2.4.10步驟  For CentOS 6.X (32bits)
.1 安裝 apache 前準備
   1-1.安裝 gcc compiler and library
      yum install gc*
   1-2.下載 Apache 
       http://httpd.apache.org/download.cgi#apache24 (httpd-2.4.10.tar.gz )
   1-3.下載 apr  library
       https://apr.apache.org/download.cgi  (apr-1.5.1.tar.gz)
   1-4. 下載 apr-util  library
       https://apr.apache.org/download.cgi  (apr-util-1.5.4.tar.gz)
   1-5. 下載 PCRE
       http://sourceforge.net/projects/pcre/files/pcre/  (pcre-8.36.tar.gz)
   1-6. 解開各 apr gz
       # cd /home/temp
       # tar zxvf apr-1.5.1.tar.gz        
       # tar zxvf apr-util-1.5.4.tar.gz
   1-7.安裝 pcre
      # cd /home/temp
      # tar zxvf pcre-8.36.tar.gz
      # cd pcre-8.36/
      # ./configure --prefix=/usr/local/pcre
      # make
      # make install

 2.安裝 apache
 # cd /home/temp
 # tar zxvf httpd-2.4.10.tar.gz
 # cd httpd-2.4.10/
 # mv /home/temp/apr-1.4.6  httpd-2.4.10/srclib/apr
 # mv /home/temp/apr-util-1.4.1 httpd-2.4.10/srclib/apr-util
 # ./configure --prefix=/usr/local/apache --enable-so --with-included-apr -with-pcre=/usr/local/pcre
 # make
 # make install

3. 安裝完畢後,為 apache 建立開機自動啟動的 script
#cp build/rpm/httpd.init /etc/init.d/httpd
接著進行修改 /etc/init.d/httpd
> vim /etc/init.d/httpd

修改下列2

60行:httpd=${HTTPD-/usr/sbin/httpd} -> 
改為 -> httpd=${HTTPD-/usr/local/apache/bin/httpd}

61行:pidfile=${PIDFILE-/var/run/${prog}.pid} -> 
改為 -> pidfile=${PIDFILE-/usr/loacal/apache/logs/${prog}.pid}



 /usr/sbin 下建立與 /usr/local/apache/bin/ 的連結

> ln -s /usr/local/apache/bin/* /usr/sbin/

再來建立 log 紀錄檔的連結

> ln -s /usr/local/apache/logs /var/log/httpd

接下來就可以嘗試啟動 apache 

> /usr/local/apache/bin/httpd -k start

  service httpd start

若啟動時出現這個錯誤訊息

Starting httpd: AH00558: httpd: Could not reliably determine 
the server's fully qualified domain name, using localhost.localdomain. 
Set the 'ServerName' directive globally to suppress this message



請修改 /usr/local/apache/conf/httpd.conf  192 行,
 ServerName localhost 的註解拿掉就行了
接著請打開您的瀏覽器,在網址列輸入您的機器 IP (http://{機器ip}/),若頁面出現 It works! 的大字樣就代表安裝成功~~
若發現回應很久之後出現無法連上的狀況,請確定是否你的機器的防火牆是開啟的狀態,輸入以下指令關閉防火牆
Apache 可以執行 cgi-bin,修改 httpd.conf 將下列之前#符號去除,restart Apache
LoadModule cgi_module modules/mod_cgi.so
資料庫的設定 (Apache 2.4.10 )
### ctime ###
ScriptAlias  /ctnewsc/ /HOME/ctnews/
Alias        /ctnewsh/ /HOME/ctnews/
<DIrectory /HOME/ctnews/>
    Options +ExecCGI -MultiViews
    AllowOverride None
        Require all granted
</Directory>



2015年9月8日 星期二

免費網頁樣板 - 快速製作網頁

免費網頁樣板 - 快速製作網頁


http://www.openwebdesign.org/



Login Form
http://designscrazed.org/css-html-login-form-templates/

CSS vs DIV

文章出處: 5iDev - Web開發在線教程
http://www.5idev.com/p-css_table.shtml

如何使用CSS
CSS作用於 html文檔,有如下三種方式:
內崁樣式         : 直接在 HTML 標籤設定, 如: < p style="font-size:12px; color:green;" />
內部樣式表     : 在 HTML <head>標籤中加入設定,
                           <head>
                                  <title>網頁測試</title>
                                            <style type="text/css">
                                                    p{font-size:12px; color:red;}
                                            </style>
                          </head>
外部樣式表     : 連接外部樣式檔案
                          <head>
                          <title>Style 說明</title>
                                     <link rel="stylesheet" href="style/default.css" type="text/css" />
                          </head>

瀏覽器默認樣式
網頁元素還會受一種特殊的樣式影響,就是瀏覽器的默認樣式。
一個例子就是瀏覽器默認超鏈接是有下劃線,如果我們要取消超鏈接的下劃線,就需要單獨應用取消文字下劃線的樣式于超鏈接上。

以上三種方式可以混合使用,但混用可能會使樣式表變得混亂。
在優先級上:內崁樣式 > 內部樣式表 > 外部樣式表 > 瀏覽器默認樣式。


選擇器分類
CSS選擇器分為
類型選擇器
通配選擇器
屬性選擇器
包含選擇器
子對象選擇器
ID選擇器
類選擇器
偽類及
偽對象選擇器 等。

這些選擇器為我們應用CSS樣式于html元素提供了極大的方便和選擇

2015年8月8日 星期六

How to make a servlet to run at startup of the application

文章出處: http://www.coderanch.com/t/554793/Servlets/java/servlet-run-startup-application

add this to the servlet definition at web.xml 


<load-on-startup>1</load-on-startup>

exp:

<servlet>
     <servlet-name>MyServlet</servlet-name>
     <servlet-class>servlet.MyServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
</servlet> 

2015年7月17日 星期五

Java 7七大新功能

原文出處:http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html
作者 : 壹咪阳光

Java 7已經完成的7大新功能:
      1
對集合類的語言支援;
      2
自動資源管理;
      3
改進的通用實例創建類型推斷;
      4
數字字面量下劃線支援;
      5 switch
中使用string
      6
二進位字面量;
      7
簡化可變參數方法調用。

      下面我們來仔細看一下這7大新功能:
      1
對集合類的語言支援
      Java
將包含對創建集合類的第一類語言支援。這意味著集合類的創建可以像RubyPerl那樣了。
     
原本需要這樣:
         List<String> list = new ArrayList<String>();
         list.add("item");
         String item = list.get(0);
  
         Set<String> set = new HashSet<String>();
         set.add("item");
         Map<String, Integer> map = new HashMap<String, Integer>();
         map.put("key", 1);
         int value = map.get("key");
      現在你可以這樣:
         List<String> list = ["item"];
         String item = list[0];
        
         Set<String> set = {"item"};
        
         Map<String, Integer> map = {"key" : 1};
         int value = map["key"];
      這些集合是不可變的。
  
      2
自動資源管理

      Java
中某些資源是需要手動關閉的,如InputStreamWritesSocketsSql classes等。這個新的語言特性允許try語句本身申請更多的資源,
  
這些資源作用於try代碼塊,並自動關閉。
     
這個:
         BufferedReader br = new BufferedReader(new FileReader(path));
         try {
         return br.readLine();
               } finally {
                   br.close();
         }
      變成了這個:
          try (BufferedReader br = new BufferedReader(new FileReader(path)) {
             return br.readLine();
          }
   
     
你可以定義關閉多個資源:
         try (
             InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest))
         {
         // code
         }
     
為了支持這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)介面。
      3 增強的對通用實例創建(diamond)的類型推斷
     
類型推斷是一個特殊的煩惱,下面的代碼:
         Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
      通過類型推斷後變成:
         Map<String, List<String>> anagrams = new HashMap<>();
     
這個<>被叫做diamond(鑽石)運算符,這個運算符從引用的聲明中推斷類型。
  
      4
數字字面量下劃線支援

     
很長的數位可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
         int one_million = 1_000_000;
  
運算時先去除下劃線,如:1_1 * 10 = 110120 – 1_0 = 110
      5 switch中使用string
     
以前你在switch中只能使用numberenum。現在你可以使用string了:
         String s = ...
         switch(s) {
         case "quux":
              processQuux(s);
     // fall-through
         case "foo":
   case "bar":
              processFooOrBar(s);
     break;
         case "baz":
        processBaz(s);
              // fall-through
   default:
              processDefault(s);
            break;
  }
 
      6
二進位字面量

     
由於繼承C語言,Java代碼在傳統上迫使程式師只能使用十進位,八進制或十六進位來表示數(numbers)
     
由於很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b首碼創建二進位字面量:
         int binary = 0b1001_1001;
  
現在,你可以使用二進位字面量這種表示方式,並且使用非常簡短的代碼,可將二進位字元轉換為資料類型,如在byteshort
   byte aByte = (byte)0b001;   
   short aShort = (short)0b010;   
  
      7
簡化的可變參數調用

     
當程式師試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個非安全操作的警告。
   JDK 7
將警告從call轉移到了方法聲明(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。

2015年7月11日 星期六

虛擬伺服器另一選擇 XenServer

下載 : http://xenserver.org/open-source-virtualization-download.html

企業開源 XenServer 基礎建置與管理

原文出處: OpenFoundry
作者:  顧武雄

作者簡介:顧武雄, Microsoft MVP、MCITP與MCTS認證專家、台灣微軟Technet、Tech Day、Webcast、MVA特約資深顧問講師。目前個人Linux著作有Linux企業現場應用系統、Linux私有雲社群網路現場實戰。

引言:如今在企業IT市場中,堪稱能夠與VMware以及Microsoft虛擬化平台技術並駕齊驅的,恐怕只有同樣是老牌子的Citrix XenServer了。因為它不僅兼具高效能、高穩定、高可用性以及最高安全設計之外,更令人讚嘆的是它還是一個Linux核心下的開放原始碼套件。在您準備為公司資訊作業環境,進行全面虛擬化的規劃與導入之前,強烈建議您不妨先參考一下本文的精闢介紹與實戰講解,並完成最新免費XenServer版本的下載與建置評估,再來決定誰是最後入主私有雲的虛擬化基礎平台。

簡介

前一陣子筆者到一家汽車零件公司協助他們IT部門導入協同作業平台,赫然發現此公司大部分的重要伺服器應用系統,皆是部署在以Citrix XenServer為主的虛擬化平台之上,其中的Guest OS也包括了數種版本的Windows Server以及Linux系列的作業系統。
我好奇的問負責的IT人員,為何會選擇使用開源的XenServer,來做為企業私有雲的基礎平台,而不是選用像是VMware的vSphere或是Microsoft 的Hyper-v呢,他只回答:「穩定、簡單、好用」。究竟Citrix開源的XenServer虛擬化平台解決方案,有哪一些吸引人的架構設計,讓如今許多的企業IT單位,仍舊選擇使用它,來建構這錯綜複雜的雲端運算環境呢?
XenServer是知名Citrix公司所推出的一款伺服器虛擬化平台,打從2013年6月左右,便加入了開放原始碼的行列,其核心基礎為Xen Project Hypervisor,這項裸機虛擬化技術提供了可運行在Intel與AMD x86硬體平台上的虛擬機器,有效徹底發揮接近於原生應用系統效能的作業程序,讓廣泛的Linux與Windows作業系統,能夠相容於它的虛擬作業環境並擁有如同在實體電腦主機的效能表現。
在如今私有雲端基礎虛擬化平台上的大量虛擬機器部署需求下,XenServer對於每一部系統的運行,在虛擬化硬體資源的配置支援上,首先在邏輯處理器支援部分就高達了160個,每一個Guest OS可以配置最多32個虛擬處理器(vCPU),當然實際的配額量還得依照作業系統的版本支援來決定。網路部分則是支援了最多16個網路卡的連線,每一個虛擬機器可以配置最多7個網路介面,虛擬磁碟部分可以建立至多16個(包括虛擬DVD-ROM裝置)。而針對每一個Guest OS的記憶體支援則是最多192GB,
Citrix XenServer除了有開放原始碼的授權版本,可以供所有類型的使用者免費下載使用,也有提供須付費的授權版本,就功能特色層面來看,兩者的主要差異就在於免費的版本無法透過XenCenter管理介面,來進行自動化的安全修正程式更新、套件更新、臭蟲修復更新以及維護版本的更新。簡單來說,盡管免費版本的XenCenter,也可以透過XenCenter來進行多主機的集中控管,但卻無法進行補強套件的更新管理。
請注意!XenServer 6.5的架構設計是基於Xen Project Hypervisor v4.4。而最新版本的Xen Project Hypervisor v4.6,則預計在2015年9月左右發行。有關這方面的相關資訊,您可以從http://www.xenproject.org/官方網站得知。
XenServer與Xen Project Hypervisor有何差異?
雖然Citrix XenServer是基於Xen Project Hypervisor核心技術所發展出來的解決方案,但兩者在功能與管理的能力仍然有很大的差別,這包括了XenServer提供了Windows桌面專用的VM圖形管理工具、控制網域(dom0)、建立多樣化的虛擬機器範本功能、支援廣泛的儲存裝置整合功能、進階高效能的Tapdisk3儲存技術、支援透過Open Virtual Switch來建立軟體定義網路(SDN)、vGPU功能、以資源集區管理機制簡化從主機、儲存設備到網路資源的配置管理、提供企業等級的服務支援。

XenServer主機系統需求

XenServer必須建置在以Intel或AMD為基礎的x86之64位元主機上,並且最多可以使用到1TB的實體記憶體、16個網路介面卡以及160個邏輯處理器,其中邏輯處理器最大數量的支援程度,則是根據不同的CPU型號來決定,這部分詳細資訊可以參考XenServer HCL的網頁。至於其它硬體規格的要求,可以參照以下說明。
  • 處理器(CPU):請採用64bit的x86 CPU,至少1.5GHZ以上。2GHZ以上的多核心處理器則是建議配備。
  • 記憶體(RAM):2GB為最小記憶體要求,建議安裝4GB以上的記憶體,以供更多的虛擬機器分配使用。
  • 磁碟空間(Disk Space):可使用連接於本機中的各類儲存裝置,包括了PATA、SATA、SCSI等等,其容量16GB為最小要求,60GB以上的可用空間則是建議。至於其它透過像是SAN或HBA卡所連接的儲存設備,也同樣是支援的。
  • 網路卡(NIC):至少使用100Mbit/s以上的網路卡,採用多個Gigabit網路卡則是建議的。值得注意的是高速網路連線,將有助於往後進行實體轉虛擬化(P2V)、各類資料的匯入與匯出之傳輸、虛擬機器的線上移轉(Live Migration)等運行效能之提升。
在接下來有關XenServer的安裝設定講解,將以6.2的版本來作為示範。緊接著則會講解如何將它升級成最新的6.5版本,以及完成最新補強更新套件的下載與安裝。

2015年3月10日 星期二

全文檢索開發軟體

1. coreseek

http://www.coreseek.cn/news/7/52/
中文版快速安裝
http://www.coreseek.cn/products-install/install_on_windows/


2.Sphinx


Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
Sphinx支持从多种数据源获取待检索的数据,目前包括:

  • MySQL数据库
  • PostgreSQL数据库
  • XML数据管道,允许索引其他用户自定义格式

Mysql全文搜索(Fulltext Search)match against的使用方式

2015年3月4日 星期三

專業SCANER


富士通 ScanSnap iX500 文件影像 掃描器 FUJITSU
★創新改革,功能超越您的想像
★透過WiFi直接把掃描影像傳到隨身裝置iOS/Android
★連結雲端最直接dropbox,evernote
★彩色每分鐘25頁/50面  


2015年3月3日 星期二

文字 INPUT欄位預設文字點擊消失JS效果

文章出處: http://yesdesigning.com/thread-434-1-1.html  數位工作室

如何透過JS實踐點擊清除預設文字,方法如下:

HTML 輸入欄代碼部分
<input type="text" name="tt" id="tt" class="t1" value="自定義預設文字" onfocus="cleartext(this)" onblur="resettext(this)"/>
備註:先寫onfocus, 再寫onblur

JS 功能函數撰寫部分
<script type="text/javascript">
function resettext(id){
           //恢復文字
           if(id.value == "")
           {
                   id.value = id.defaultValue;
                   id.className ="t1";   
           }
}
function cleartext (id){ 
       //清除文字
      id.value ="";
      id.className ="";   
}
</script>




2015年2月24日 星期二

7款超強大的線上UI 設計工具

資料出處:SR網頁設計工作室 http://yesdesigning.com/thread-117-1-1.html

(1)JETSTRAP (網頁製作)
官網:https://jetstrap.com/  (DEMO影片)

 Jetstrap是一款線上網站編輯製作工具,它提供了線上設計面板、工具箱(內建非常多不同用途模組),使用方法很簡單,不需要撰寫艱深的html與css語法也可以輕易完成一個美觀簡約的網站版型。

(2)UI Parade (素材製作)
官網:http://livetools.uiparade.com/index.html
 UI Parade工具是一組免費的在線設計的應用程序,讓您輕鬆地創建自己的UI元素,並且生成CSS 或html,非常小的編碼知識。以及能夠創建自定義的元素,你也可以下載你的作品在您的網站和網絡應用的使用。

(3)Moqups (框線圖製作)
官網:https://moqups.com/ (建議使用GOOGLE瀏覽器,第一次使用請先點擊左上角 install )
 Moqups 是一款以HTML5撰寫用來設計WEB框架、模型框線或是UI概念的線上服務,它內建了超過60套手繪的SVG模板及特性 ! Moqups的所有物件皆已模組化,使用者只需要自由拉動拖曳組合排列,即可完成一款精緻的線框UI設計圖。


(4)FLUID UI (應用程式模型製作)
官網:https://www.fluidui.com/editor/live/
 Fluid UI 是一款可以跨平台、跨設備開發應用程序設計模型的網頁應用程序。用戶可以在運行HTML5的瀏覽器上使用(當前僅支持Chrome和Safari),可以在Windows、Mac、Linux系統上僅向操作,對平台沒有限制,幾分鐘就可以輕輕鬆鬆進行應用程序原型設計。

(5)Draw IO (圖表製作)
官網:https://www.draw.io/
 Draw IO是一款在線圖表編輯工具,可以直接連結Google Drive,線上畫好的圖表可直接存在Google Drive上非常實用!
 而圖檔匯出格式支援 PNG、GIF、JPG、PDF、SVG、XML等格式類型,同時內建相當豐富的圖像元件,足夠應付一般辦公需求的圖表製作,最重要的一點就是完整支援中文輸入。

(6)COLOR.HAILPIXEL (顏色調配)
官網:http://color.hailpixel.com/
 COLOR.HAILPIXEL是一款非常有趣HTML5製作的線上配色工具,可以幫助我們進行顏色搭配試驗,一目瞭然地做各種顏色搭配與預覽。可透過在線調節工具自由調整明亮度、飽和度、色調等等,並且提供顏色代碼方便使用者做紀錄與利用。

(7)Mobile Patterns (手機介面資料庫)
官網:http://www.mobile-patterns.com/
 Mobile Patterns它是一款分享各種手機介面設計的影像資料庫,網站中根據各種手機頁面類型進行分類,提供設計師在設計手機界面時一個非常好的思維參考,給予設計師一個思考與創造的泉源。

2015年2月3日 星期二

電子書規範

草稿

電子書 Publisher 採用HTML5開發,使用者只要在 Webkit 引擎的瀏覽器〈如Chrome、Safari〉上即可操作 電子書Publisher 所有功能,同時也具備跨系統平台特性。

FreeMarker在eclipse中的入門例子

原文出處: FreeMarker在eclipse中的入门例子  -hailang的空间


在我刚接触FreeMarker时,只是简单的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker还不是非常清楚。随着学习的深入,才渐渐对FreeMarker有了更深入的理解。本文将从基础应用着手,以eclipse开发环境为主,分享一个FreeMarker用例的开发经验。
一、在eclipse中创建FreeMarker模板
FreeMarker中模板的概念就是:包含一些由${…}包围的特殊代码的文件。这些特殊代码是FreeMaker指令。
FreeMarker 模板以ftl后缀命名 如本文所示的:
user.ftl
${user.userName}
${user.userPassword}
二、在eclipse中创建FreeMarker数据模型
FreeMarker数据模型:存在于计算机内存中的一种结构,由开发人员创建,向模板提供信息。
注意:FreeMarker数据模型不是文本文件。FreeMarker的数据模型是树状结构的。
如本文所示的:
User.java
  public class User{
 private userName;
 private userPassword;

    …(省略getter setter方法)
}
User对象的树状模型如:
(root)
  |+-user
    |+-userName=“张三”
    |+-userPassword=“123”   
 要访问user对象的userName属性,可以通过点操作符号如:user.userName
三、在eclipse中填充FreeMarker数据模型
FreeMarker的根对象使用Map建立的。将创建好的User对象已键-值对得形式封装到Map中如:
 Map<?,?> root=new HashMap<?,?>();
 root.put(“user”,user);
  至此,我们在eclipse中已经完成了大部分的前期准备工作。
FreeMarker工作原理中讲到: 数据+模型=输出,那么我们该如何获得想要的结果呢。
也许你已经想到了,创建FreeMarker的模板引擎,解析模板。步骤如下:
1.创建和配置Configuration对象,Configuration对象实例负责管理FreeMarker模板的路径加载及模板的创建和缓存。通常应用程序的生命周期中只会创建一个Configuration实例。
Configuration config=new Configuration();
config.setDirectoryForTemplateLoading(new File(“templates”));
config.setObjectWrapper(new DefaultObjectWraaper());
2.获取模板实例,即通过Configuration实例获取Template实例,调用getTemplate()方法。
Template template=config.getTemplate(templateName);
3.合并数据模型和模板
通过调用Template实例的process()方法合并数据模型和模板,方法接受一个数据模型的根和一个writer作为参数,将结果输出到Writer。 为简化起见,本例输出到控制台
Writer out=new OutputStreamWriter(System.out);
template.process(root , out);
out.flush();
out.close();
好了,通过上面的讲解,您已经对FreeMarker的应用有了一定的了解。现在开始我们就来创建属于自己的Freemarker用例吧
本例的开发环境: Eclipse3.2+MyEclipse6.0+JDK5.0+FreeMarker
1)在在eclipse中建立一个web工程:freeMakerTest
2)下载FreeMaker工具包,解压后,在lib目录下拷贝freemark.jar到freeMakerTest工程下的lib目录中。
 下载地址:http://www.freemarker.org/index.html
3)在在eclipse中的src目录下创建如下图所示的目录结构:



templates文件夹存放user.ftl文件。
test/frrmrker/uitl/文件夹下存放Freemarker模板引擎 FreeMarkertUtil.java。
test/client文件夹下存放客户端测试类 ClientTest.java ,User.java
4)在eclipse中编写user.ftl文件,FreeMarkertUtil.java, ClientTest.java ,User.java
源文件的具体内容我已经上传,您可以下载后查看。
希望通过本文,对刚开始或即将开始用eclipse展开FreeMarker旅程的朋友有所帮助。

FreeMarker的優點和缺點

FreeMarker的優點和缺點
原文出處:  FreeMarker的优点和缺点  (  hailang的空间 )
一、 FreeMarker简介
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。
所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 文等。

二、 FreeMarker的优点和缺点(一) FreeMarker的优点
1.使用FreeMarker的优点之一,可以彻底的分离表现层和业务逻辑。
使用JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。
FreeMarker根本不支持Java脚本代码。
FreeMarker的原理就是:模板+数据模型=输出 ,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。
     
2.使用FreeMarker的优点之二,可以提高开发效率。
在我们以往的开发中,使用的都是JSP 页面来展示数据的,即所谓的表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。

3.使用FreeMarker的优点之三,使得开发过程中的人员分工更加明确。
以往用
JSP展现数据时,作为程序员的我们,并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。对两者而言,交替性的工作本身就有难度。有时候稍有不慎,可能会将某个页面元素删除或去掉了某个程序符号,使得页面走样或程序错误,这样就需要双方相互沟通协作,解决出现的问题。有时候因为项目中的时间,任务量等因素的存在,可能这个工作就由一个人来完成,这样就可能加大某一方开发人员的工作量。
使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。

(二)FreeMarker的缺点1.使用FreeMarker的缺点之一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。
2.使用FreeMarker的缺点之二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。
3.使用FreeMarker的缺点之三,FreeMarker的map限定key必须是string,其他数据类型无法操作
4.使用FreeMarker的缺点之四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如
Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。

2015年1月31日 星期六

UX & UI之間的相互關係

原文出處: 國立臺灣大學 計算機及資訊網路中心 電子報 第0027期
                  作者:楊家榮 / 計算機及資訊網路中心程式設計組幹事

日常生活中大家常把「UI」與「UX」混淆使用。UX、UI兩者有何不同呢?本文從網頁設計角度來簡單說明UX & UI之間的相互關係...
前言日常生活中大家常把「UI」與「UX」混淆使用。UX、UI兩者有何不同呢[1]?從字面上解釋,UX是User Experience使用者經驗的簡稱,UI則是User Interface使用者介面的簡稱。UX以使用者為中心,涵蓋範圍極廣,其包含:介面設計、視覺風格、色彩搭配、可使用性、程式效能、功能運作、心理分析等元素,而這眾多元素之間也是相互關聯與影響,無法被分割的。而UI就是使用者與電腦之間進行溝通的介面,利用電腦的功能去「輸入」來達成「輸出」的成果,而輸入與輸出的規劃就是介面,透過介面來操作電腦完成所需。

詳文

2015年1月30日 星期五

UI 設計

原文出處: InSide
UX 設計師寫給 UI 新手的 7 個法則(上)
UX 設計師寫給 UI 新手的 7 個法則(下)

7個法則:
1.光線來自天空
2.黑白優先
3.增加空白空間
4.學會在圖片上呈現文字(第2部分)
5.做好強調和淡化(第2部分)
6.只用好的字體(第2部分)
7.善於借鑒優秀的作品(第2部分)


A Good User Interface: 外國知名設計師Jakub Linowski網站  http://goodui.org/

JavaFX Scene Builder

文章出處: JavaFX Scene Builder : CodeData 黃嘉輝副教授

http://www.codedata.com.tw/java/javafx-scene-builder-fxml/

MySQL 替代品: MariaDB

原文出處: 毫無理由使用MySQL:MariaDB - 自由軟體鑄造場
http://www.openfoundry.org/tw/news/8974

MySQL 曾是(仍是)最受歡迎的開放源碼資料庫,然而在 Oracle 主導下卻正逐漸沒落。出自於 MySQL 創辦人 Michael Widenius "Monty" 的另一套開放源碼資料庫 MariaDB,最近則日漸普及,不僅成為主要開放源碼作業系統的預設資料庫,更在 WikiMedia 等重要組織與企業,取代 MySQL 的地位。日前 SkySQL 與 MariaDB 的總公司 Monty Program Ab 進行合併,擴編了開發者團隊。以下是 Monty 日前進行的專訪,談到了資料庫領域的改變。
問:MySQL 是全球主要專案與企業的預設資料庫,MySQL 如此成功的原因為何?它有哪些特質?是其開放源碼的特性、技術優勢、或是 Sun 的行銷能力?
Monty:MySQL 在被 Sun 買下前就已經很普及了,這也是 Sun 之所以買下它的理由之一。
MySQL 之所以受到如此歡迎的原因是:
  1. 自由軟體/開放源碼
  2. 我們從一開始就對用戶非常友善並且樂意提供協助
  3. 前五年我個人只為了協助用戶就寫了 3 萬封電郵
  4. 雙重授權
  5. 讓我們賺到錢好雇用更多人加入專案
  6. 讓我們吸引到投資者
  7. 從一開始釋出就在大量平台上測試 MySQL 二進位檔案
  8. 當我們開始 MySQL 時,多數自由軟體仍僅有原始碼,也沒有對所有平台做測試
  9. 從一開始我們就設定好,要讓所有人都可以在 15 分鐘內取得並執行 MySQL
  10. 我們很幸運在對的時機推出對的產品
  11. 當我們開始時,市場沒有自由 SQL 資料庫的競爭者


問:兩大開放源碼勢力都出自於芬蘭人之手,也就是 Torvalds 與 Widenius。芬蘭的教育系統是否鼓勵這些行動?
Monty:在這兩個案例中,教育系統對產品並無太多影響。
我想比較多是出自於芬蘭人的本性,我們很固執又討厭放棄,即使其他人都說我們做的事一點用都沒有,而且我們不可能與大公司競爭。
就 Linus Torvalds 與我而言,我們都有一種天分,可以讓和我們談過的開發者,對我們所做的事感到興奮。我們兩個人的母語都不是英語,也許這一點有助於和世界各地的開發者進行溝通,因為從一開始我們不設限加入專案的人必須會說流利英語。
問:你曾對 MySQL 賣給 Oracle 有所疑慮(你的疑慮也成真了)。MySQL 的普及率最近正在下滑。你認為下滑的原因為何?Oracle 做錯了什麼?
Monty:是的,MySQL 近來沒落了,不過它所流失的用戶群,多半都跑向 MySQL 生態系的其他產品,像是 MariaDB。
Oracle 做錯的事有:
  1. MySQL 新的企業延伸套件採取封閉源碼
  2. 資料庫的臭蟲不再公開
  3. 不再積極更新 MySQL 的公開代碼庫
  4. 未能快速傳達或修復安全問題,這一點讓 Linux 散佈套件對 Oracle 很不滿
  5. Oracle 選擇移除功能,而非修正臭蟲
  6. MySQL 5.5 的新程式碼不再有測試案例
  7. 來自 Oracle 的部分新程式碼好的出乎意料,但不幸的是品質參差不齊,相當可觀的一部分在我們納入 MariaDB 前,更需要重新改寫


另外,或許最糟糕的是,社群沒辦法與 Oracle 的 MySQL 開發者合作。因為:
  1. Oracle 不接受程式修補
  2. 沒有公開的發展藍圖
  3. 沒有任何方法可以和 MySQL 開發者討論實作細節以及目前程式碼的運作


問:在此同時 MariaDB 逐漸受到重視,對一般用戶而言,MariaDB 與 MySQL 的差異為何?
簡單來說:
  1. MariaDB 比 MySQL 多了 30 個人年以上的開發工作量
  2. 更多功能
  3. 更快
  4. 更穩定
  5. 安全問題更少


最簡單的答案是,毫無理由不選擇 MariaDB 5.5 來取代 MySQL 5.5,這個答案下一版本依然適用。
問:MariaDB 如何改變資料庫領域?MySQL 仍在 Web 上占有主導地位,有任何鼓勵網路託管服務供應商改用 MariaDB 的計劃嗎?
Monty:有許多網路託管服務供應商已經支援 MariaDB。你只需提出詢問,許多供應商就會提供 MariaDB。
我們正在積極遊說網路託管服務供應商,請他們公開支援 MariaDB。然而這的確是個耗時的工作。
問:MariaDB 可以用來直接取代 MySQL。撇開雙方在技術上的相似性不談,這兩個專案在開發與授權上的主要差異為何?
Monty:MariaDB 是由具有開放發展藍圖的社群所開發,任何人都可以輕易參與其中。MySQL 被發展成一個封閉源碼的專案,只有 Oracle 和少數 Oracle 選出的公司才能參與。MariaDB 和 MySQL 一樣採取 GPL,不過 MariaDB 有給 C 和 Java 用的 LGPL 驅動程式。我們也在開發 LGPL ODBC 驅動程式。如果你使用了這些驅動程式,在大多數情況下,你並不需要購買 MySQL/MariaDB 的授權。
問:從 MySQL 轉移至 MariaDB 的難易度?
Monty:只是小事一樁。只要移除 MySQL,然後安裝 MariaDB。你的所有工具,連接程式都可以如常運作。你也不需要匯出和匯入資料。格式與檔案名稱都是相同的。
問:在 WikiMedia 基金會等組織,或是 openSUSE 與 Fedora 這些 GNU/Linux 散佈套件上,我們已經看到若干採用 MariaDB 的例子,但透過 Monty Program Ab 進行商業部署呢?我的意思是,你公司的營收現況為何?
Monty:Monty Program Ab 從某些公司取得了 MariaDB 的開發資金。此外,Monty Program Ab 也從提供第三級支援給 SkySQL 等公司而獲得資金。
問:SkySQL 如今與 Monty Program Ab 合併,這對 MariaDB 的整個開發者基礎有何影響?
Monty:當最好的 MySQL/MariaDB 開發者、支援者、訓練人員、銷售人員齊聚同一家公司,我們如今更能夠提供最好的服務,給所有的 MySQL 與 MariaDB 用戶。
問:你如何確保 MariaDB 不會有和 MySQL 一樣,被其他公司買下的命運?
Monty:這就是我們創建 MariaDB 基金會的原因。MariaDB 基金會是該社群發展的驅動力,也是 MariaDB 伺服器商標的所有者。如此即可確保再也沒有開出 MySQL 新分支的必要了。MariaDB 永遠會是自由且屬於社群的專案。


相關網址



  1. 毫無理由使用 MySQL:MariaDB、MySQL 創始者 Michael Widenius 的訪談
    http://www.muktware.com/5565/there-no-reason-all-use-mysql-mysql-mariadb-founder-michael-widenius

2015年1月28日 星期三

找回 Windows 8 / Windows Server 2012 的開始按扭

原文出處: 找回 Windows 8 / Windows Server 2012 的经典的开始按钮和开始菜单 (博客: 辛亚平的专栏 )
http://blog.csdn.net/yapingxin/article/details/8519427

坊間傳說的Windows8.1將會重新恢復開始按鈕,但是又見到比較可靠一點的博文說,那個啟動按鈕並不能帶來經典的開始菜單,真是令人空歡喜一場。所以Classic Shell必然繼續成為Windows 8必裝軟件(沒有之一”)。

2015年1月21日 星期三

JPA 技術文章

原文出處: http://www.51140.com/show/1431263.shtml

JPA全稱Java Persistence API.JPA通過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。

Sun引入新的JPA ORM規範出於兩個原因:
其一,簡化現有Java EE和Java SE應用開發工作;
其二,Sun希望整合ORM技術,實現天下歸一。

教學網:  http://www.tutorialspoint.com/jpa/


2015年1月13日 星期二

何謂 SA SD SE

原文出處: 網繹數位科技網頁設計公司 Kevin
http://www.eki.com.tw/news/20080610155758.htm

SA System Analyst, 系統分析師
SD Systems Designer, 系統設計師
SE Systems Engineer, 系統工程師



做軟體開發專案規劃時, 常會碰到助理問我一個問題, SA,SD和SE的差別在那裡 ?




這個問題我以前也有過, 還頗為困擾, 系統分析和系統設計及系統工程到底有什麼差別 ? SA和SD的工作又有何不同 ? 這兩者的養成教育又有何差異 ?在過去, SA,SD及SE的確很難區分, 甚至這些角色常常會透過軟體工程師來混合發展。隨著IT領域的發展, SA,SD及SE漸漸的成為了大型專案必需要的專業分工, 這三者間是有相當的差異的, 不管是養成過程, 甚或是未來的發展, 都大相徑庭, 而要成為一名稱職的PM, 是要能區分出這三者的差異, 才能妥善的安排工作的。




[SA System Analysis,系統分析師]

SA是 System Analysis 的縮寫, 一般稱為系統分析, 主要的工作就是透過一系列的分析工作, 把客戶想要的結果產生方式, 以各種文件表達出來, 讓開發團隊可以根據這些文件實作出這個結果。

這樣的解釋比較文縐縐一點, 用個通俗一點的方式比喻, 就像是要做出一道宮保雞丁時, 就會有食譜一樣, 裡面會介紹需要的材料及做菜的順序, 然後裡面也會強調要以怎樣手法才能產生出某種效果, 以促進色香味。

這樣的過程裡, SA是較為偏重於在工作流程和處理邏輯的, 透過SA, 開發團隊才可以理出整個系統的架構, 一種做事的脈絡, 以及系統和工作間的關連性, 最重要的, 是這些結果都會被SA呈現在文件中, 而非放在少數人的腦袋裡。




SA不僅止是要針對電腦裡的東西去運作及規劃, 還包括了現實世界裡的實體流程及組織。在很多的情況下, 配合新系統的組織及流程, 是要由SA來執行的。總結起來, 在一個開發案裡, SA執行以下的工作:




· 藉由系統需求書, 使用者的現有標準作業流程來建立出符合期望的新作業流程及搭配流程的系統功能及模組規劃

· 依據功能及模組規劃案, 定出初步的資料庫內容及系統與使用者間的權限搭配規範

· 定出各個軟體零件的規範, 如物件, 函數庫, ...等等

· 設計新的標準作業流程, 並把系統功能或模組綁入這些流程中

· S.A依據客戶的環境及需求, 尋找合適的SD來搭配




而SA也有以下的特色:

· 對於系統在怎樣的環境及用什麼開發工具, 並不十分在意, 良好的S.A產生出來的文件, 使用不同的開發工具都應該可以完成, 產生相同的結果, 但那一種最合適, 由SD決定

· SA偏重於流程及執行邏輯的表達

· SA著重於軟體邏輯, 對開發工具的學習並不是十分重要, 所以會一種語言即可, 主要是以該語言工具來實踐邏輯觀。

· SA一定要有全局觀, 也就是不能拘泥於一個角度或是一個局部去思考問題, 這一點是尋找優秀SA時最困難的。因為在規劃模組及功能時, 一定要同時考量到所有直接相關及間接相關的程序及邏輯問題, 因此要有全局觀。

相較於SD, SA更側重在邏輯及工作順序搭配的表達, SA並不需要去關切使用什麼作業系統或是什麼開發工具, 如前特色所述, 好的SA文件, 可以用任何一種開發工具來實現。當然, SA不受限於IT技術, 但卻會有專業領域的限制。

很少有SA同時專精於數個領域的, 熟悉汽車業運作規範的SA, 在金融業的開發案裡, 就很難討好, 反之亦然。但SD沒有這種限制, 基本上SD可以和任何行業的專案開發團隊配合運作。

會如此的原因是SA是偏重於流程及管理分析及重新再造工作的。而作業流程, 除了少數領域裡共通性高, 在核心流程上, 是需要長期鑽研的。前面提及的汽車及金融業就是一例。




所以, 一個SA必需具備以下的能力,資歷及專業訓練:




1. 至少熟悉一種程式開發語言

2. 熟悉軟體工程, 對於開發工具的元素及特色熟悉

3. 對管理制度或作業流程設計熟悉

4. 熟悉UML或類似的系統描述工具

5. 邏輯能力良好

6. 良好的溝通能力, 主要作為瞭解需求之用

7. 相關的業界熟悉度




在三者之中, SA是最接近PM的, 所以SA在做生涯規劃時, 不妨以PM做為下一個發展的專業目標。




[SD Systems Designer, 系統設計師]

一般來說, SD在生涯規劃裡, 並不是SA或是PM。當然, 一定要硬來一次也沒有什麼不可以, 但要走這條路, 就要趁早轉職, 因為SD畢竟是較為幕後的工作, 在與客戶的溝通協調上, 並不會有太高的要求, 也較不需要公司管理層面的全局觀。




表面上看起來, SD沒有SA那麼多的工作要求, 但實際上SD是最需要天賦的工作, 不管是畫面的構成, 操作的手順及調整, 甚至於元件的定義及物件的規範, 全都需要一些天賦。很多軟體, 功能很強, 但怎麼看怎麼不順眼, 或者怎麼用就怎麼憋扭, 功能帶來的效益, 全都被這些毛病給遮蓋掉了, 這就是SD的問題。




另外, SD也扮演了系統最佳化的推手。SA所規劃出來的要求及佈置, 都只是邏輯上的構思, 在不同的工具上, 可能有更好的方法可以表現, 也可能會難以展示, 這都需要藉由SD對使用環境及開發工具的瞭解, 來進行調整和規劃。




舉例來說, 同樣是一套財務軟體, 在WINDOWS XP, MAC, X WINDOWS下, 就會有很不一樣的展現模式和技巧。如果再搭配上不同的開發工具, 如C++, JAVA, .NET, PHP, ...那差異更多。對SA而言, 這些東西他都不用去考慮, 但SD就不同了, 這些不同的地方, 並不僅僅只是如此而已, 有時還會包括了開發成本及時間問題, SD的重要度, 由此可知。




在一個客製化專案裡, SD的工作內容如下:




· 設計畫面元素規範

· 設計頁面結構及規則

· 設計系統操作畫面, 並編定欄位規範及防呆處理

· 設計權限管理與系統操作機制

· 撰寫使用手冊

· 調整DB之各項定義, 使其符合畫面欄位規範及操作搭配

· 配合SA撰寫系統開發文件, 供程式師CODING之用

· 撰寫UI(使用者介面)測試計劃書




而做為一名稱職的SD, 以下的條件, 是必要的:




1. 至少對一個作業系統極為熟悉, 對於這個作業系統的各個元件特性及API, 有充分的瞭解

2. 熟悉2種以上的開發工具, 而專案所需的工具, 必需是其擅長的之一, 其熟悉度包含了標準安裝裡的各個函數庫, 系統常數, 物件定義, 語法, 主要的輔助工具開發廠商, 及重要的工具使用方法

3. 具一定的美學感

4. 至少能使用一種繪圖工具軟體

5. 曾經擔任職業軟體工程師三年以上




可以這樣說, SA給了系統靈魂和神經系統, SD則是給了系統軀體和外觀, 兩者的結合, 才能產生出正確, 美觀又好用的系統。如果你覺得自己是個不太愛和太多人打交道的IT人, 又對使用者介面有那麼點執著及天賦, 那麼, SD絕對是適合你的好選擇。




[SE Systems Engineer, 系統工程師]

就某種角度來看, SE對PM而言, 算是萬金油, 只要做IT專案, 那就一定用得上, 差別只是要選那一個專業的SE而已。系統建置安裝要SE, 使用者環境要SE, 甚至到硬體選擇及佈建, 都要用到SE, 有什麼IT專案跟這個沒有關係呢 ?




當然, 雖然SE是到處都吃得開, 但相對的也是專案裡面最沈默及少有聲音的一群。他們的工作基本上就是建構出一個可以執行系統的環境, 系統要如何展現, SE可以給SA和SD一些建議, 但建議時機通常都是在系統運行出了些非系統可以掌握的問題後。




系統工程師基本條件上, 和SD最為接近, 但有一點不同, 就是不需要有很好的軟體開發經驗, 也就是不太需要會寫程式。但要對作業系統, 服務器系統, 網路運用環境有相當程度的瞭解。




SE通常是三者中最為博學一員, 好的SE雖然不一定要程式寫的呱呱叫, 但卻不能對編程一無所知, 對作業系統及開發工具也要有一定的熟悉度, 甚至部份網管有關的工作也要有所涉獵, 所以算得上是專案裡的萬金油。




在專案裡, SE所要執行的工作如下:




· 規劃及建置系統執行環境

· 安裝及設定使用者端環境

· SERVER安裝及設定

· 提供環境設置竟見給SA及PM

· 最佳化系統可靠度及效度

· 撰寫可靠度及效能測試計劃書

· 對電腦及相關週邊設備有一定熟悉度




而一名SE則有下列基本要求:




1. 至少熟悉一種作業系統, 尤其是讓系統的設定及微調等相關技術

2. 至少熟悉一種網路伺服器作業系統, 對如何設定及最佳化熟悉

3. 曾任軟體工程師職務一年以上或熟悉一種開發工具

4. 對網路環境有一定的認識, 尤其是一些通訊設置

5. 熟悉可靠度及效能的評估方法, 並瞭解與系統環境相關之設定




基本上, 如果擁有了像SD一樣的技術背景及個性, 但在美學上實在令人不敢恭維, 那麼SE算是極佳的選擇了。一般而言, SE的下一個生涯規劃, 會比較偏重於技術性兵種, 像是DBA或是網管, 對於IT產品比較有狂熱或愛好的人, SE是極佳的出路。




[在專案中的運用時機]




基本上SE是萬金油, 只要是IT的案子裡就一定要塞一個SE進去, 因為沒有IT專案不需要使用工程技術的, 差別只在使用何種工程技術而已。在套裝軟體的導入專案裡, SE負責處理軟體使用環境, 解決非系統性問題, 安置及調整資料庫和網路環境, 然後安裝啟動。所有系統運行所需要的條件, 都要由SE來解決和處理, 但這些工作全都不會出現在眾人的面前, 但卻又重要無比, 算得上是幕後的英雄。




會同時運用到SA,SD及SE的專案, 還是以客製化開發為主的。




在開發型專案裡, SA團隊要負責初期的需求調查及整體架構的規劃, 將所有的系統開發工作內容轉化成井井有條的文件, 並且適度的分割及派送, 並確保未來這些被分割的開發結果能夠在未來可以正確運作。




SD則在SA的文件中去尋求系統呈現的一致性, 易用性及保證開發工具可以正確無誤的展現SA的要求結果。所以SD要負責操作界面的外觀設計, 訂定一致的展現規範, 設計系統操作畫面及操作手順, 同時配合SA完成系統開發文件。基本上, 開發文件中, 是包含系統使用手冊初稿的。




SD在設計時, 必需與SA充分配合, 以確保設計的系統符合需求及運作要求。




除了上述的工作內容外, 這三者都要撰寫測試計劃, SA著重在於資料的流動符合原先規劃的順序及結果測試, SD則著重在操作畫面中的防呆測試及操作介面的正確性, 而SE則在系統可靠度上進行規劃。

2015年1月10日 星期六

Appfuse 相關文章


原始檔下載:
http://appfuse.org/display/APF/AppFuse+QuickStart

1.具備 Java & Maven & MySQL 軟體 (MySQL 需ONLINE)
2.執行下載指令
   在任意一個檔案夾下,執行
mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-struts-archetype -DarchetypeVersion=3.0.0 -DgroupId=com.myfuse -DartifactId=myfuse -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfuse




Eclipse + Maven 2 開發

參考文章:  Eclipse + Maven 2 開發 Java SE 專案 - 1  (作者:Lawrence Cheung)
http://pro.ctlok.com/2010/09/eclipse-maven-2-develop-java-se-project.html

以 Eclipse Version: Luna Service Release 1 (4.4.1) 為例:
1.建立 Maven 專案  File -) Maven Project

2.勾選 Create a simple project

3. Group id: package namespace  / Artifact id: 專案名稱(Eclipse Project Name)

4.修改 JRE 的版本(Default 是 1.5)


在Eclipse開啟  pom.xml 檔案 ,加入以下內容, mainclass是設定要執行主程式
      <build>
        <plugins>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-jar-plugin</artifactid>
                <version>2.3.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainclass>com.jazz.Main</mainclass>
                            <packagename>com.jazz</packagename>
                        </manifest>
                        <manifestentries>
                            <mode>development</mode>
                            <url>${pom.url}</url>
                        </manifestentries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>


完整內容如下



















Eclipse 安裝 Maven Plugin 步驟


1.確認 Maven 網址
   http://download.eclipse.org/technology/m2e/releases/

2.開啟Eclipse的Help頁,選擇Install New Sofware

3.填入步驟1 之 URL

2015年1月7日 星期三

Tomcat JavaEE 版本規範

Tomcat JavaEE 版本規範

參考 http://tomcat.apache.org/whichversion.html

Tomcat6: Servlet 2.5、JSP 2.1、EL 2.1
Tomcat7: Servlet 3.0、JSP 2.2、EL 2.2
Tomcat8: Servlet 3.1、JSP 2.3、EL 3.0
Tomcat9: Servlet 4.0、JSP 2.3、EL 3.0









須注意的是各版本所支援 Java 最低版本

2015年1月3日 星期六

Java專有名詞: DAO

原文出處: 王朝網路 :Java入門:淺談DAO模式
http://tc.wangchao.net.cn/bbs/detail_742251.html

DAO : Data access object     (Struts Hibernate) 數據訪問 interface

DAO是Data Access Object資料庫訪問的接口,資料庫訪問:故名思義就是與資料庫庫打交道。夾在業務邏輯與資料庫資源中間。
  DAO的功能:
  1. DAO用來封裝Data Source的..就比如,Connection conn = DAOFacotry.createConnection()..
  就可以把Driver. URL. username, passpword這一些放在DAO中
  以後要更改數據庫的類型.比如要把MSSQL換成Oracle的話..只需要更改DAOFacory裏面的getConnection()裏面的Driver.URL.之類的..
  2. DAO也是把對數據庫的操作(比如最基本的CRUD操作)全部封裝在裏面..
  比如說你要你要插入一個新的用戶..那麽.在DAO中我們只需要提供一個insertUser(User user)這一個方法就可以了..具體的操作是在DAO中實現的...
  那麽對于要調用DAO的時候.我們只要知道insertUser(User)是用來插入一個新的用戶...而不需要知道是如何實現的。
  一般 DAO是與Abstract Factory模式一起來用的...

2015年1月2日 星期五

Google Chrome 瀏覽器開啟新分頁

在一般瀏覽器以Javascript設計開啟新視窗,
使用 window.open( url , "windown_name", "視窗狀態列設定"); 就可達成,
但在 Google Chrome 瀏覽器卻失效( Google Chrome Default 是自動阻擋新視窗)
但可開啟新分頁, 只要調整 javascript 語法即可
 var newwin = window.open();   //此行一定要如此書寫,否則失效
 newwin.location= url;   // url是 cgi 程式或者超連結 html




PhpMyAdmin 無法看資料庫結構的問題解決

無論是單獨安裝 phpmyadmin 或者套件安裝 WAMP ,這個問題皆會存在
原因是 PHP5以後 與作業系統 windows 7/ Linux 版本相容問題

解決方法:
在phpmyadmin 安裝目錄,找到 Util.class.php 這個檔案
如: wamp 之 D:\wamp\apps\phpmyadmin4.1.14\libraries\Util.class.php
修改如下
找到
return strftime($date, $timestamp);
改為
return date("Y-m-d: H:i:s" , $timestamp);

2015年1月1日 星期四

Javamail for google

原文出處: 龍貓 的心情日記
http://supermand9362787.wordpress.com/2008/11/02/javamail-for-google/

利用JavaMail收/發Gmail郵件(SSL)

Gmail目前已經啟用了POP3和SMTP服務,具體情況請看 http://www.javayou.com/showlog.jspe?log_id=490
與其他郵箱不同的是Gmail提供的POP3和SMTP是使用安全套接字層SSL的,因此常規的JavaMail程序是無法收發郵件的,下面是使用JavaMail如何收取Gmail郵件以及發送郵件的代碼:
1. 郵件收取
package lius.javamail.ssl;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
/**
* 用於收取Gmail郵件
* @author Winter Lau
*/
public class GmailFetch {
public static void main(String argv[]) throws Exception {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
  Properties props = System.getProperties();props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.pop3.socketFactory.fallback", "false");props.setProperty("mail.pop3.port", "995");
  props.setProperty("mail.pop3.socketFactory.port", "995");
  //以下步驟跟一般的JavaMail操作相同
  Session session = Session.getDefaultInstance(props,null);
  //請將紅色部分對應替換成你的郵箱帳號和密碼
  URLName urln = new URLName("pop3","pop.gmail.com",995,null,"[郵箱帳號]", "[郵箱密碼]");
  Store store = session.getStore(urln);
  Folder inbox = null;
  try {
      store.connect();
      inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      FetchProfile profile = new FetchProfile();
      profile.add(FetchProfile.Item.ENVELOPE);
      Message[] messages = inbox.getMessages();
      inbox.fetch(messages, profile);
      System.out.println("收件箱的郵件數:" + messages.length);
      for (int i = 0; i < messages.length; i++) {
         //郵件發送者
         String from = decodeText(messages[i].getFrom()[0].toString());
         InternetAddress ia = new InternetAddress(from);
         System.out.println("FROMia.getPersonal()+'(‘+ia.getAddress()+’)’);
         //郵件標題
         System.out.println("TITLEmessages[i].getSubject());
         //郵件大小
         System.out.println("SIZEmessages[i].getSize());
         //郵件發送時間
         System.out.println("DATEmessages[i].getSentDate());
     }
   } finally {
     try {
         inbox.close(false);
     } catch (Exception e) {}
         try {
             store.close();
         } catch (Exception e) {}
     }
   }

   protected static String decodeText(String text)
         throws UnsupportedEncodingException {
    if (text == null)
       return null;
    if (text.startsWith("=?GB") || text.startsWith("=?gb"))
        text = MimeUtility.decodeText(text);
    else
         text = new String(text.getBytes("ISO8859_1"));
     return text;
   }
}
2. 發送郵件
package lius.javamail.ssl;
import java.security.Security;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 使用Gmail發送郵件
* @author Winter Lau
*/
public class GmailSender {
   public static void main(String[] args) throws AddressException, MessagingException {
      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
      // Get a Properties object
      Properties props = System.getProperties();
      props.setProperty("mail.smtp.host", "smtp.gmail.com");
      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
      props.setProperty("mail.smtp.socketFactory.fallback", "false");
      props.setProperty("mail.smtp.port", "465");
      props.setProperty("mail.smtp.socketFactory.port", "465");
      props.put("mail.smtp.authrue");
      final String username = "[郵箱帳號]";
      final String password = "[郵箱密碼]";
      Session session = Session.getDefaultInstance(props, new Authenticator()
      {
          protected PasswordAuthentication getPasswordAuthentication() {
             return new PasswordAuthentication(username, password);
          }
      }
   );
   // — Create a new message –
   Message msg = new MimeMessage(session);
   // — Set the FROM and TO fields –
   msg.setFrom(new InternetAddress(username + "@mo168.com"));
   msg.setRecipients(Message.RecipientType.TO,
   InternetAddress.parse("[收件人地址]",false));
   msg.setSubject("Hello");
   msg.setText("How are you");
   msg.setSentDate(new Date());
   Transport.send(msg);
   System.out.println("Message.");
 }
}

Java 不同編碼字串, 其字串長度大小計算

以 Java 開發專案, 在 DAO 寫入資料庫時, 常遇到JAVA 字串與資料庫編碼不一致, 有時會產生字串過長,導致無法寫入資料庫的情況. 這時就要在入庫前, 先驗證 JAVA 編碼字串是否超出資料庫欄位長度 JAVA 依 不同編碼, 其長度是不一樣的 如: ...