2015年2月3日 星期二

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必裝軟件(沒有“之一”)。

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

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