2014年3月5日 星期三

使用 GraphicsMagick 將圖片轉正

早期數位相機儲存的照片不帶有方向資訊,所以需要再手動把相機撗擺所拍出來照片轉正。而如真新一點的照像機,包含智慧型手機會在檔案裡加入像是焦距、光圈…等資訊,而方向也是其中之一。在這裡可以看到其中的定義,在 Windows 8 或是在 Mac 中看到的圖片縮圖、預覽會先抓取這個資訊預先轉正,所以平常沒有這種感覺。

不過瀏覽器是一個例外,由同事測試得到的資訊,在 iPad 上的 Safari 會自動偵測圖片方向,並作轉正的動作。而其它 PC / Mac / Android 的瀏覽器都還是用圖片原來內容呈現。

這造成一個問題,當使用者利用手持裝置拍照並直接上傳,在瀏覽器所看到的圖片方向是不能被預期的。因此才會有使用 GraphicsMagick 來替所有上傳圖片作轉正的需求。

2014年2月14日 星期五

Zinc 全螢幕功能需要注意的地方

Flash 可以輸出成為執行檔,不依靠 flash player 直接在作業系統中執行。另一種角度來說,就像是把自己寫的程式和 flash player 包在一起。成為執行檔可以打開一些限制,像是能夠同時讀取本機與網路上的資料,或是執行系統命令。不過本來就沒有的寫入檔案功能,並不會因此冒出來。

全螢幕的功能,就是變成執行檔可以使用的功能之一。

在 MDM Zinc 裡,猜想是因為帶入的多視窗的概念,導致既有的方法失效,需要用它所提供 Forms 的方法來達到視窗的最大化、最小化、還原。最大化和全螢幕不同,全螢幕的狀態會把系統工具列、 Dock 等也一併隱藏。

使用 Zinc 開發的專案,很早就發現一個狀況,就是全螢幕的功能正常,但是取消全螢幕的功能卻時好時壞,系統工具列在取消的同時出現,但是程式並沒有回到原來視窗的狀態,還是維持全螢幕的大小,只是上頭多出現了系統工具列。一直到最近才找到時間去研究這個問題。

2014年2月9日 星期日

使用 Joda-Time 取得各時區的時間

話說前陣子研究 Joda-time 來取得各個時區的時間後,就把它應用在專案裡面。不過幾天專案發現出問題,讓我發現它的一個小小的問題。

問題的原因發生在把資料庫的時間轉換成我希望的時區,所以我寫了下面這個函數…
public Date getLocaleTime(Date date, String TimeZoneID) {
  DateTime time;
  if (date == null)
    time = new DateTime(DateTimeZone.forID(TimeZoneID));
  else 
    time = new DateTime(date, DateTimeZone.forID(TimeZoneID));
  return time.toLocalDateTime().toDate();
}

乍看之下沒有什麼問題,不過當選擇到某些特定的時區的時候就會出狀況,說 Joda-Time 不支援這個 TimeZone ID。

2014年2月7日 星期五

使用 MDM Zinc 遇到的兩個問題

MDM Zinc 是一個能夠把 Flash 發佈檔 swf 打包成應用程式,能在 windows, mac, linux  上直接執行,除此之前,藉由呼叫它所提供的函數庫,能讓 Flash 程式具有如同一般應用程式的能力,達到像是寫入檔案、取得網卡 Mac Address…等原本 Flash 不允許作的事情。第一次和它接觸好像是在五,六年前,還是 2.0 的版本,為了作一個單機、展示用的行銷光碟。

幾個月後,因緣之下又接到類似的需求,為了要讓 Flash 能夠寫入檔案,我又再一次選擇了這個工具,只不過不同的是,這次 4.0 的版本反而讓我吃了不少苦頭,花了兩三個星期的工夫才找到問題答案。在此作一下記錄,也許哪個遇到一樣問題的人,有緣看到這篇文章能夠少繞一些路。

這次發佈程式的平台是 mac,使用的是 ActionScript 2 的語法。遇到的問題分別是「文字輸入框裡無法出現游標,退位鍵在刪除一個字後就卡住了」,另一個問題則是「當程式打包成安裝檔,順利安裝到 mac 之後,不管多少支程式,在 launchpad 裡都只有一支程式的圖示」。

2014年1月31日 星期五

新年簡訊

一直以來,自己就不太會主動和別人打交道,好友之間很少主動聯絡,而春節簡訊則是一次都沒有發過,最近為了改變自己的個性,這個農曆年突然有嘗試發個拜年簡訊想法。

不過到了桌子前,卻是一個字也生不出來。不想打些制式的文字,花了簡訊錢只為了告訴對方還沒忘了他。但是要在短短幾句話裡把祝福及心理想說的話講出來,還真是困難。對於平時文章中綴字滿滿的我,突然有抓不到的簡訊重點的感覺。

想了許久沒有頭緒之下,決定到網路找找例子來參考,沒看不打緊,一看突然有種很強烈的感觸,好像突然回到十幾二十年前,好像看到了每年都會遇到一次,寒假作業裡寫吉祥話,猜燈迷的單元。似乎在這個部分並沒有因為時代不同而有太大的改變。

不喜歡寒假作業裡的這個單元,那勾起過往那不愉快的回憶。吉祥話只是照抄既有的、制式的文字,遇到範例寫光自己所會的全部,只能很不情願的苦思新文句。心中沒有祝福,只有應付作業的想法,以及對學校總是出這種虛應故事的題目感到厭煩。

父母很不看重這種「不會考」的東西,所以往往隨口敷衍一下,講一些不怎麼通順的句子。對我來說,那些是文字是不願意,但被強迫放到作業裡面的內容。寫過了,就不會想要再看到它第二遍。

對每件要作的事情認真,是自我的要求,也是努力營造的個人風格。雖然新春簡訊似乎不必要那認真,不過要我把這種文字打到手機上,花錢把它們發出去卻是千百個不願意。

再看看吧!當能夠把握文字,寫出自己能認可的話語後,才會發出吧!也許是明年,又或著這一兩天。再多多磨練~~

2014年1月19日 星期日

文章寫作的一些反思

最近我常常在思考一個問題,要怎麼寫出一篇好的分享文章。 什麼樣長度比較容易接受,而一篇文章中帶有多少概念恰當。隨著一篇篇文章的發表,開始思考 寫出來的 文章,於看 的人而言是不是有幫助。

最大的轉變,在於寫文章的目的,由 單純舒發自己心情,變成希望能夠 利用的文字來改變所及的環境。目前想作的,是把自己的一些心得,分享給其它人。

分享的重點是在於看的人最後得到什麼,而不是作者隨心所欲講些自己才看得懂的東西。 所以就看教學一樣, 需要把想法的順 序作一些的轉換,需要一些鋪陳、一些舉例,找出讓其它人容易了解的寫作方式。

2014年1月6日 星期一

對於 Java Date 類別的小測試

在打完關於 Joda-Time 心得之後,突然心中產生一個疑問。Java 原生的 Date 類別,輸出時候既然包含了時區的資訊,那麼是不是可以經過某一種設定,達到轉換時區的目的?在寫了一些程式測試之後,發現某些層面上來看是可行的,只不過其可用性還是得視當時的環境而定。

測試的方式,一樣使用固定的字串作為時間的參數,並且以 System.out.println() 方便觀察結果。基於觀察原生 Java 類別的目的,所以完全不使用 Joda-Time 相關類別,下面是最開始的程式…
public static void main(String[] args) {
  try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
    Date date = sdf.parse("2013-12-26 18:48:24 UTC");
    System.out.println(date);
  } catch (Exception ex) {
    ex.printStackTrace();
  }
}