星期四, 11月 26, 2015

jQuery 民國年小日曆

別再自己搞,這種一定早就有人處理過了不是嗎?但有點不容易弄清楚。首先由這個網站開始,下載之後打開一個名為 calendarsPickerBasic.html 的網頁來玩玩看,預設是回曆,要改成民國年的話就必須增加這一行
  • <script src="jquery.calendars.taiwan.js"></script>
再修改這一行
  • //var calendar = $.calendars.instance('persian');
  • var calendar = $.calendars.instance('taiwan');
如此而已。但如果還要同時以正體中文顯示月份、星期的名稱,必須再增加一行
  • <script src="jquery.calendars.taiwan-zh-TW.js"></script>
剛改過的那一行也要進一步再改成
  • //var calendar = $.calendars.instance('persian');
  • var calendar = $.calendars.instance('taiwan', 'zh-TW');
關鍵應該是「紀年」與「語言」是可以分開處理的,同理,顯示的樣式也是。

星期三, 11月 25, 2015

透過 NLog 寫入資料庫

log4net 已經不流行了,NLog 取而代之,基本概念是 Rule 決定要記什麼,而 Target 決定要記到哪去。基本的使用,只要安裝一個 NLog.Config NuGet 套件,再把範本設定檔的註解打開,使用端的程式寫一寫就好了。進一步若要往資料庫送可以參考這篇(雖然不一定是什麼好主意),除了許多內容可以選擇之外,若還要自訂一些欄位的話可以參考這篇

以 C# 程式產生 Word 檔案

原本直覺是用 NPOI,但實際動手才發現還真不好做。另外有一個 Open XML SDK for Microsoft Office,似乎比較有希望,NPOI 還是專門對付 Excel 就好了。

星期五, 11月 13, 2015

又差點被一個 VirtualBox Image 搞瘋

從某個知名網站抓 VirtualBox 映像檔,CentOS 5.6 x86_64 的鍵盤都亂了,看似歐洲出品,但 locale 都是 en_US?答案在 /etc/sysconfig/keyboard:
  • KEYBOARDTYPE="pc"
  • KEYTABLE="it"
讓 IT 下班就沒事了!

[2015/12/12 補充]
有一種類似的狀況是只有單、雙引號要連按鍵兩次才會出現,而且長相有些奇特,依這篇的說法下指令解救:

setxkbmap -layout us

星期三, 11月 11, 2015

Windows 指令服務化-搭配自動重啟

為了這個目標,原先還蠻高興找到一個官方的 SC.exe 工具,但總是失敗在服務無法啟動。後來才了解到,在 Windows 的世界,可不是一般的程式都可以「服務化」的。好在有善心人士開發了得獎程式,以 Wrapper 的原理讓普通程式都能服務化,真是感謝!這套工具的使用步驟也非常容易:
  • 下載
  • 安裝(其實就是複製幾個執行檔、動態連結函式庫到系統目錄)
  • 撰寫組態設定(可參考快速上手
  • 執行服務註冊(srvstart.exe install MY_SERVICE -c C:\SRVSTART\SRVSTART.INI,大寫處都要依實際狀況調整)
在確認服務可以啟動之後,若也想要掛了之後可以自動重啟,搭配服務本身的設定(還細分為第一、二次、後續的失敗)即可。

[2016/11/29]
看來這個更好用。

星期二, 11月 10, 2015

CentOS 6 指令服務化-搭配自動重啟

使用者抱怨有個常駐型的程式「經常」會自動消失,事實上是有拋出例外,只不過那在標準輸出/錯誤,又沒有重導留下紀錄,所以結果是一定要等有人覺得不對勁,去檢查才知道程式掛了,再重啟來補救。
因為底層很多元件原廠都不再支援,再維護下去也是枉然,所以老闆指示要快速「緩解」,不求根治。找了半天資料,還考慮過 Nagios,後來發現這種事在 Linux 根本是小事一椿:respawn。
這種自動復活的技巧已經發展了三代(參考資料),CentOS 6 是第二代的 Upstart。請在 /etc/init 目錄下新建一個類似 myJob.conf 的檔案,內容框架如下:
  • start on runlevel [2345]
  • stop on shutdown
  • respawn
  • exec your-command args
為了保險起見,我用 Java 寫了一個小程式,輸入參數為延遲秒數,時間到了之後就故意拋個例外出來,也終止程式。通常這種都會開個 console 來跑,但拿掉之後不就非常像上述的症狀?設成開機後自動執行不就更像了?改用上述的啟動方式,可以到 /var/log/messages 取得證明,果真是一再重覆「掛了」又「復活」的戲碼。