code_prettify

2014年11月15日 星期六

64-bit 環境中設定 eclipse使用超過 2G記憶體

設定在 eclipse.ini個人試了沒用

啟動 eclipse, 到 Windows>Preference>Java>Installed JREs, 選擇使用的 JER 後點 Edit.
在 Default VM Arguments輸入 -Xms256M -Xmx8192M.
要確認目前運行環境,寫個 main method,看看下面兩個屬性
System.getProperty("sun.arch.data.model")
Runtime.getRuntime().maxMemory();

6 Common Errors in Setting Java Heap Size
這篇文章討論了常見的輸入錯誤
另外提供了 tomcat設定記憶體使用量的設定及幾個 IDE記憶體使用量的設定方式.

Einstein, where are u?

OK.我笨,被陷害了n個小時
一直以來傾向 Entity以單純 JavaBean呈現
所有 logic放在 service中

遇到 hibernate one-to-many中 element怎麼都放不進去
也不是不知道 java.util.Set不允許重複的物件
只是沒想到 n代前手去 override equals......

OK.我知道有一種看法覺得將 entity作業務邏輯封裝是自然的好事
我也承認
有些東西直接封裝到 entity中相當自然且方便
但是
我還是很難接受把 entity搞成帶業務邏輯的物件
讓它就是個單純的 DTO
把邏輯集中到 service是個人比較喜歡的單純化

也許,現在的 model只是更高維度的架構的 projective/affine space
還真期待 model的 4-dimension space會是什麼
Einstein, where are u?

maven使用下載檔案建立 local repository

專案將 datasource以 webapp/META-INF/context.xml設定
用 maven embedded tomcat測試時需要給 embedded tomcat設定 jdbc driver建立連線
maven central repository中並沒有 DB2 driver.

把從 IxM下載的 jar 檔註冊到 local repository 中,指令參考:
mvn install:install-file -DgroupId=com.ibm.db2 -DartifactId=db2jcc -Dversion=3.4.6 -Dpackaging=jar -DgeneratePom=true -Dfile=E:\jdbcDrivers\db2jcc.jar
其中 groupId, artifactId, version可自行設定,方便辨識即可.
-Dfile後面為下載的 jar檔存放路徑.

Compare java.sql.Date

以下的 Date專指 java.sql.Date.

在思考 Date比較時, 如果要用到 after or before, 最好不要用 a.after(b) or a.before(b)的思考邏輯,而是用 !b.before(a) or !b.after(a)的邏輯思考,在企業環境中比較不容易出錯.
Date的 after or before 怎麼比呢?
基本上等同於 a.getTime() > or a.getTime() <.其中沒有等於的空間,也就是沒有 >= or <=.
所以 a.after(b)等同於 a.getTime() > b.getTime(). a.before(b)等同於 a.getTime() < b.getTime().
這並不惱人, 邏輯其實很清楚.
但重點來了: 商用環境中,當你從 DB 拿到一個 Date時,你並不知道這個 Date到底當初是用
Date.valueOf(String)還是 new Date(System.currentTimeMillis())來的(也許有些規劃得很好的系統沒這問題,但是維護前人留下來的系統時,沒那工夫去檢查到底有沒有不一致的做法(甚至有時是不得已: 尤其有些日期是直接由 UI輸入,有些 Date是 current date, 而這兩種 Date須互相比較時.)
以 2014-05-02為例:
Date.valueOf("2014-05-02").getTime() == 1398960000000.
new Date(1399025789901(L)).toString == 2014-05-02.(事實上是2014-05-02 18:16:29.901)
從 DB看, 兩個都是 2014-05-02.
但是 equals絕對 return false.
因此純粹日期比較時要嘛先過一次水讓兩個日期的邏輯一致, 要嘛, 就是用 not after, not before去思考.

ubuntu vim?

6種變形?變形金剛才拍到第 4集耶
jvim-canna
vim-athena
vim-gnome
vim-gtk
vim-nox
vim-tiny(ubuntu 14.04內建)
以上 6種變形金剛vim差異詳見原文 What is the difference between the different vim packages available in Ubuntu

要跑圖形界面 vim直接在 terminal下
gvim
或者到 Search your computer打
text editor
就可以啟動

安裝 docker(on ubuntu)

參考文件:docker官方文件
安裝最新的 ubuntu package(by ubuntu, not by docker.ubuntu提供的最新 package, 不見得是 docker目前最新的 release):
sudo apt-get updatesudo apt-get install docker.io
然後要確認更新到哪個版本,下 docker version
(這應該還需要別的處理,因為到這邊我下 docker version得到的回應是 access denied :P 只能下 sudo docker version)
(欸, sudo apt-get update沒啥必要的感覺,不下這個指令應該也沒差)
然後,如果要啟用 tab快速完成指令(打前幾個字按 tab鍵自動完成)
source /etc/bash_completion.d/docker.io

如果想要用 docker的最新版本
先確認 ubuntu的 APT(Advenced Package Tool)是否支援 https

要確認是否有啟用 https, 找找看有沒有 /usr/lib/apt/methods/https

如果沒有,執行
sudo apt-get update
sudo apt-get install apt-transport-https
啟用 https支援

然後將 docker的 repository key加到系統的 key chain中
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

然後將 docker repository加到 ubuntu的 repository source list中,並且更新 lxc-docker這個 package
sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
最後那個指令如果 ubuntu提示 ...package isn't trusted(未受信任的 package)..
想裝就按 y(yes)
不想裝
return :P
以上哩哩拉拉
可以用一個 script代替
curl -sSL https://get.docker.com/ubuntu/ | sudo sh
ps.歹勢,官網降說,但是本人新安裝的 ubuntu 14.04直接言干言焦(ㄐ一ㄝˊㄑ一ㄠˊ)我說 command not found(加了 sudo也一樣)
沒想試,因為我的 docker正常了 :Q

訐譙我只是在練習罕見字
要確認王子與公主最後是否過著幸福快樂的日子,請下指令
sudo docker run -i -t ubuntu /bin/bash
然後王子跟公主就會被抓到你的電腦裡,試試看是不是過著幸福快樂的日子了

ㄟ,王子跟公主幹嘛一直在我面前晃來晃去不走
OK, 按 ctrl-q叫他倆睡覺去先
然後
sudo docker ps -a
找出他倆的床號 xxxxxx
然後
sudo docker stop xxxxxx
把床拆了 :Q

2014年11月12日 星期三

設定 tomcat startup.bat 視窗標題(command prompt title)

測試環境常需要開好幾個 tomcat佈署程式給 user測試
一堆人一起用,全安裝成 service也很煩
直接用 startup.bat啟動是個好方法
不過一堆 command prompt
又分不清楚哪個是誰的

command prompt有個指令可以設定視窗標題
command: title
example: title Elie Program
Elie Program: 自己想要的視窗標題
不用加引號, title後面的所有文字會全部被當成一個字串做為標題 ㄋ
環境: windows 7

至於 tomcat, catalina.bat中有如下說明
"Do not set the variables in this script. Instead put them into a script
setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
.....
TITLE           (Optional) Specify the title of Tomcat window.
......"
簡單說就是不要直接去改 catalina.bat
省得手殘改壞開不起來浪費時間而是在 catalina.bat所在目錄中增加一個 setenv.bat
裡面打上
set "TITLE=Elie Server 1"
這樣用 startup啟動 tomcat後的 command prompt視窗的標題就會變成Elie Server 1
不只視窗左上角的標題欄,工作列 ICON上的文字也會變成Elie Server 1
全部最小化,誰是誰的誰依然是一目瞭然:Q