2012年6月28日 星期四

你也有一張悠遊卡嗎?分享一個悠遊卡的常識,並了解電子發票

之前有個新聞,一個人的悠遊卡掉了被別人撿去購物,最後撿到的人被抓到且被告侵佔。
我就在想這個失主怎麼追到他自己的卡?
一般的卡(非combo卡)不是都不具名嗎?
昨天我就驗證了我想到的方法,首先去登錄你的卡,怎麼做呢?
到小七(7-11)的ibon,找到該功能拿出你的卡給它"嗶"一下,讓它把你的"悠遊卡號碼"寄到你的e-mail信箱,
這樣你就可以"了解"你的卡了,用你拿到的卡號到電子發票整合服務平台(e-mail內也會有網址)
去看存在裡面的發票號碼和時間就可以知道你的消費記錄,當然你就會開始享有電子發票的好處-自動對獎和線上捐發票喔!

將Java的ArrayList(串列)寫到Mysql資料庫的blob欄位

案例: 收到的request資料中一個JSON格式的資料要保存,但為何不存JSON的字串就好?因為這個資料會不斷變動的,所以收到變動只要取出這個已將JSON轉成list的添加或刪除東西就好,不用再將JSON轉成list再轉回JSON存到DB去。 在Hibernate中是設定該欄位為type="java.sql.Blob",會自動在Mysql中建成DataType為LONGBLOB
下面是把JSON轉成list後,轉成blob型態存入DB
 
ObjectMapper mapper = new ObjectMapper();//用Jackson處理JSON
  Blob blob = null;
  try {
   SongResp dto = mapper.readValue(json, SongResp.class);
   List list = dto.getSongs();
   ByteArrayOutputStream bout = new ByteArrayOutputStream();
   ObjectOutputStream oos = new ObjectOutputStream(bout);
   oos.writeObject(list);
   bout.close();
   oos.close();
   byte[] asBytes = bout.toByteArray();
   blob = Hibernate.createBlob(asBytes);
   
  } catch (JsonParseException e) {
   e.printStackTrace();
  } catch (JsonMappingException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }

以下是把DB中的該欄位取出成當時寫入的list
          

List list;
  Blob b = userDao.getUserData(id, dataType);
  try {
   if (b != null) {
    InputStream in = b.getBinaryStream();

    ObjectInputStream ooi = new ObjectInputStream(in);

    in.close();
    ooi.close();

    list = (List)ooi.readObject();
    return list;
   }
    
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }

2012年6月15日 星期五

在Spring使用JSON遇到null的處理

當物件的屬性是null時預設是會顯示null,如下
{"status":"1","singers":["Jolin","Jolinnnnn"],"songs":null}
但如果想要連songs屬性都不要顯示,希望如下
{"status":"1","singers":["Jolin","Jolinnnnn"]}
就必須在該物件多個Annotation去定義這個行為產生的做法

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class YourJSONobj {...
    private String status;
    private List songs;
    private List singers;

...

2012年5月28日 星期一

Git與Dropbox結合

主要目的當然就是把本地端的東西(Code)透過安裝好Dropbox的客戶端軟體,自動上傳備份到雲端!

環境:
  1. 上傳的東西, Java code在 D:\java\workspace\test
  2. Dropbox安裝目錄, D:\My Dropbox\WorkCode 。WorkCode是自己建的目錄。

開始 :

1.執行git 切換到WorkCode目錄下(注意Dropbox前有一個空白,所以My後面加上backslash及一空白)
$ cd /d/MyDropbox/WorkCode/

2.建立一個遠端repository,習慣命名在專案名稱後面加上.git
$ git init --bare test.git
Initialized empty Git repository in d:/My Dropbox/WorkCode/test.git/

3.切換到要上傳專案的前一目錄
$ cd /d/java/workspace/

4. 在原本已存在的test目錄變成git用途
$ git init test
Initialized empty Git repository in d:/java/workspace/test/.git/

5. 進到test目錄且把其內的東西放到(新增)遠端repository
$cd /d/java/workspace/test
$ git remote add origin /d/My\ Dropbox/WorkCode/test
$git add .
$git commit -m 'first version'
$git push origin master

6. 步驟5事實上是傳到本地端的Dropbox目錄,要同步到"雲端"不要忘了開啟Dropbox Client。

7.測試從本地端的repository(Dropbox目錄)取出專案內容到D:/myrep1
$ cd /d/myrep1/

$ git clone /d/My\ Dropbox/WorkCode/test.git/
Cloning into test...
done.


ps.如果要忽略原本test內的一些檔案或目錄,須步驟5的git add. 之前加上一個.gitignore檔內容類似如下:
CVS/
work/
target/
src/CVS
.settings/
.classpath
.cvsignore
.project
*.avi

2012年5月25日 星期五

用JAXB讀寫XML

Java Architecture for XML Binding (JAXB)

這個 lib已經在jdk 1.6內所以不用額外下載了。

用法很簡單,看官方的文件就很清楚了,由XML轉成(parse、unmarshal)物件,或由物件產生(marsha)XML都可以輕鬆完成。

這邊只是做個記事,在這次的專案用到產生XML的tag是會需要有順序性的,比如說

Content內嵌有Epg,Media,Content(就是Content又包有Content tag) 三個sub tag

Java在定義物件會是

@XmlAccessorType(XmlAccessType.FIELD)

public class Content{

 @XmlElement(name = "Content")
    protected List contents;

@XmlElement(name = "Epg")
    protected List epgs;

@XmlElement(name = "Media")
    protected List media;

...

}

如果需要考慮到出現順序,就要加上

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(propOrder={"epgs", "media","contents"})

...

如此就能控制tag順序為Epg,Media,Content。

注意propOrder要填入的是物件的屬性而非tag名稱

2012年5月6日 星期日

Bugzilla

最近幫公司弄了一套 Issue tracking system , Bugzilla .

發現報個Issue要assign給某個人居然要自己填email , 後來google後發現已有功能可以
讓user選系統上已註冊的人(會出現下拉選單),這個功能預設是關閉的,所以要由管理者去開啟,
PARAMETERS - > USER MATCHING
這邊就是設定的地方 !
 

2012年4月27日 星期五

心情雜記

高中同學還持續有在聯絡的人,都是我認為都是好朋友的人,包括 : 豬仔,睡王,阿臭,阿毛、阿達,大屁,每個人現在都自己職場領域中發揮。
今天得知睡王將在五月主動請調到越南工作,讓我非常驚訝,原因在於才剛擁有第二個女兒的他會在這時跑到國外工作,當然他也是跟家人討論過才做出重大的決定,再詢問他一些細節原因時,給了我許多想法。其中就是當為了達成自己的目標,部份的犧牲是無可避免的。他的目標我是沒細問,而犧牲的部份就是家庭。
雖然到公司的國外分公司工作一定會多賺很多,薪資上一定有補貼(一個月有多個三四萬)、升遷速度也快、分紅績效當然也會比國內多,但家庭的照顧卻會損失,幸好她老婆有支持他的想法,她娘家也在附近,所以照料應該不是問題,說不定未來還會舉家搬到國外。無論是否值得,我都祝福他 !
這個情況對我來說,可能就不會這樣做,因為我實在放不下我的家人,自己跑到外地工作,
或許這就是每個人選擇的人生,每個人對自己目標下的一個賭注以及如何看待自己的未來,
我呢?我的目標在哪?我想要有一個怎樣的未來 ?是該有所行動了?!   2012/04/27 18:00

COVID-19 確診經歷紀實

原本以為真的是天選之人,就算先前家裡兩個小孩都確診都逃過了(可能有中獎但無症狀吧),不過就在2023年六月18日破解自認為天選之人的"心態",為什麼可以確認就是這天中獎的呢?因為在前都是居家上班,到人多的室內場所都會戴口罩,就剛好這天傍晚原本只想說要去附近的國...