2014年1月5日 星期日

使用 Joda-Time 轉換成不同時區的時間

Java 原生的 Date 類別,是我一直沒搞明白的東西之一。總是認為它應該是一個集取得、設定時間方法大成的類別,卻奇怪於它的設定方法又少又有一部分不建議使用。而後來發現另一個叫  Calendar 的類別反而有著比較完整的方法,不懂原來的設定者希望開發人員如何使用它們。

後來在一次的技術討論中,聽到 Joda-Time 這個函數庫,說是讓人更方便操作時間資料,接手開發相關公用函數的過程,慢慢抓到它一部分的用法,記錄在這個地方。

查了一下網路資料,發現「Joda」這個字和星際大戰的「尤逹大師」是同一個字,不過作者說,這個專案裡的 J 應該發和 Java 裡的 J 一樣,也因為唸法不同,所以只是一個作來簡化 Java 程式開發的東西,沒有能夠揮舞下光劍的本領(笑)。

2014年1月1日 星期三

最近使用 jQuery Mobile 的一些感想

會使用 jQuery Mobile 這個 javascript 框架,是在花了不少時間去尋找能夠在手機、平板,甚至是在電腦瀏覽器裡執行的程式,最終所定下來的,目標是寫出一個類似 Web App 程式。記得在一開始發現它,就好像發現新大陸,本來不知如何下手的程式介面,在通過看過幾個範例後,利用兩週片斷的時間就完成介面樣式的設計,得到其它人的好評。不過直到開始撰寫程式的時候,才知道它並不如自己想像的那麼容易駕駕馭

簡單介紹這個框架,它可以利用 CSS 套版,將網頁既有的 HTML 變成像是手機程式裡的按鈕、清單,利用 data-xxx 屬性來描述 HTML 元素,可以組合成一個具有手機程式裡「標頭」、「內容」、「頁尾」三個區域,像是 iOS 裡在標頭的返回按鈕的樣式也作得出來,乍看之下還滿有模有樣。許多顯示效果,依照 HTML 元素的位置而有所改變。按照它的想法來撰寫 HTML,真很很省力。

2013年12月28日 星期六

重啟分享

本來想要在開始新工作中間,把一些在前一分工作以及中間在家自修時的心得分享。誰知道新工作要作的事情很多,加上一些有的沒有的雜事,只能勉強把學習篇的部分打完。教學的部分,等到之後有時間再補上了。因為新工作帶來的挑戰,也讓我重新思考自己的學習和教別人的態度是否合適,要經過一段時間的沉澱、驗證它的正確性之後再來作分享,會說得比較具體一些。

2013年10月12日 星期六

談程式學習…初學與教學 — 學習篇(三)

(發現自己習慣的分段寫法,好像不適合 blogger 的顯示,試式改變排版試試。)

底下分享自己經歷過,或是看過一些新手常進入的誤區…

誤區一︰程式只不是寫給「現在的自己」看的…

在指導新人的時候,偶而會聽到「這個程式能跑就好,你不要管我用什麼變數、函數名稱」的回應。如果今天只是一個用來展示,未來將會重寫的程式,換言之就是用完即丢的程式,的確沒有必要要求這些。但是在撰寫程式的過程中,修改、擴充既有的程式,實際上佔絕大多數的時間。既使是常常接外包,作新案子的公司也一樣,總是希望能夠留下一些重複功能的程式片斷,能夠作為函數庫引用,或至少好讓人剪剪貼貼。

面對別人或是幾個月前自己寫程式碼是無法迴避的問題,所以程式碼的可讀性,必要註解的撰寫是重要的。並不是要求剛入門就必須要寫出多優良的程式,而是「替未來看這段程式的人著想的心」,必須一開始養成。否則工作之中除了抱怨別人的程式碼很亂很糟之餘,也在不斷產出「傷害別人的程式」,不論是腦細胞,還是感情。

怎麼寫出優良的程式,這是需要許多經驗累積才能學會的。雖然有這類的專書,但是沒有經歷過那些讓人不愉快的經驗,那些原則很難被讀到心裡。常常思考,這段程式在幾週後的自己,能不能看得懂,慢慢的改進,才能寫出更好的程式。

2013年8月2日 星期五

安裝 Lenovo 的 System Update 程式

最近還原了公司在使用的兩台 Lenovo ThinkPad,系統是 Windows 8。讓我見識到既使是同一個型號,同一組回復媒體所還原的電腦,也能夠有各種不同奇奇怪怪的問題。其一個就是安裝 Lenovo 的 System Update 這套更新系統驅動程式的軟體。自從完成回復後,一升級這套軟體的版本後,問題就發生了。

先是說找不到一個叫作 ConfigService.exe 的檔案,就想說到官網下載程式重新安裝一次,將缺少的檔案重新寫到硬碟裡,安裝時要求先移除之前的版本,同意後卻在將出前安裝歡迎畫面的地方,跳出 Windows Installer 的參數說明視窗,讓人覺得莫名奇妙。a

呼叫 Windows Installer 軟體安裝既使是要帶參數,絕大多數時候都是被寫進安裝程式中,像這樣跳出參數說明,但又沒有讓我輸人參數模式。問題的狀況也不是什麼錯誤代碼,或是一個能夠識別問題的關鍵字可以讓我到 Google 上查詢。只能用無法安裝作為條件去找。

中間查到要先去檢查、刪除 System Update(SUService)的系統服務(由 Lenovo 提供),應該是前一次移除後沒有重開始,因此就留在系統的東西。照作之後問題依然沒有解決。查了幾篇和這個問題接近的討論串,最後都沒有看到成功的解決方式。發生的時間由 2008 年前到現在的自己都遇到。

就在快要放棄,考慮是不是要再重新回復一次的時候,讓我看到對岸這篇文章,試了裡面的參數,在命令列工具中加入參數後,居然就很順利的安裝起來了。雖然仍然不知道到底是什麼原因造成這個問題,但是手上的工作不少,就不多細想,先能夠更新驅動程式再說。

將其中最關鍵的一句話記下來,免得原始網頁不見,就不知道該怎麼辦了。
「systemupdate314-2008-5-15.exe -s -a /s /v"/qn"」

PS. 猜想可能和 Windows 8 系統的某個地方出錯有關係,因為不能順利安裝的除了 System Update 程式,也包含小紅傘防毒,卡了我一天之後只好去找另一套免費的防毒軟體。也許有機會再試試加上這些參數。

Windows 8 在我心中的評價又再低了一些…

2013年7月30日 星期二

MySQL 查詢轉小寫設定

在之之前學習 Drupal 作為網站開發架構的時候,已經習慣了它使用底線(_)來分隔資料表名字的各個單字,一直以來對於全小寫的資料表命名法已經習以為常,只覺得不過是一種風格,並不會認為有什麼特別的原因。 直到最近將外包的網站案子放到 Linux 環境下,被整過之後的才明白,相信未來還是可能遇到這個問題,作個筆記備查。

問題在於 mysql 不分大小寫的特性,還沒來得及深入研究是不是和資料庫的校對設定有關,至少平常常用的「utf8_general_ci」,本身就是表示的不分大小寫(ci)。所以既使在取資料表名字的時候混用大小寫,使用 mysqldump 匯出的時候,仍然會通通被轉換成小寫。

而資料表中的欄位,根據自己觀察,在匯出的時候大小寫是被保留下來的,所以問題主要不會發生在這裡,而是在會被改成全小寫的資料表名稱。因為 MySQL 要依靠程式傳給它的名稱去找到對應的檔案,讀取資料。在 SQL 語法被寫在程式碼中,如果是以原始的資料表名稱(分大小寫)的方式撰寫,而 MySQL 卻已經將之轉換為全小寫,就會有所差異。

如果是在 Windows 這種不分大小寫的作業系統,不會出現什麼問題,因為任何大小寫的方式,通通代表同樣的檔案。但是對於 UNIX Like 的系統,則會產生「找不到資料表」的錯誤。如果不修改程式碼,想要解決這個問題的話,就需要在設定檔中(my.cnf)「[mysqld]」的部分加上…
lower_case_table_names=1

表示所有的查詢都要強制轉換成小寫後才執行。

PS. 印象中, ci = character ignore,詞性有沒有用對不清楚,但確定是這兩個單字,表示忽略大小寫差異。

2013年7月3日 星期三

談程式學習…初學與教學 — 學習篇(二)

每次學習一種新的程式語言,都會讓我有「回到新手」的感覺。
工作上「需要早點應用新技術」的壓力,促使我嘗試用其它語言學到的知識,來解釋新的語言,
就結果而論,還滿不錯的,除了加快學習,上手的速度,也能夠對原來的知識有新的了解。
底下分享一些我學習程式的觀點。

練拳不練功,到老一場空… 那程式的基本功是什麼?


前文提到,理解是學習程式的真理。但是新手常面臨到的問題,卻是看似遠無止境的東西需要理解。
就事實而言,程式語言是一種集體創作的產物,所以總是有新的東西出現,可能是一個研究成果,或是一個框架想法。
因此對於新手,甚至是還沒有入門的人而言,我建議先嘗試去解釋基本規則背後用意,能夠講得出來,就表示有一定的理解。
不用太擔心解譯錯誤,當發現自己的解釋有誤,就去修正,這樣會慢慢的接近正確的想法。。
也許在剛開始的時候,不得不混雜著一些死背東西,當解釋的比例越來越多,需要死背的東西也相對減少。