Pages

2016-03-31

台灣3+2郵遞區號查詢

相較郵局官網或其他台灣郵遞區號3+2查詢程式,此軟件的主要特色除了綠化免安裝外,它能自己匯入郵局官網下載的郵編3+2 XML檔,方便離線查詢。它不需要繁瑣的鄉鎮下拉選單UI,只需要打入多個交叉查詢關鍵字(中間隔空白),即可以迅速過濾交集資料。

 Main UI

程式直接使用台灣郵局下載專區的「3+2 郵遞區號XML」為來源資料,官方資料會定期更新,你可以在*.exe.config檔裏對映它的XML節點名稱:

   image

「Optimize ZIP XML」功能是將官方XML檔裏刪除無謂的空白字元,讓檔案更小,並且依使用習慣作以下批次規則的轉換。

Optimizing Rules

支援簡體中文的關鍵查詢字串,也可在config中指定輸出字串為繁簡中文及全形、半形。查詢出來的地址,點一下就可複製。

Chinese Support

版本歷史 (Version History)

2016/03/31:

  1. 更新台灣郵局3+2 XML資料版本為Zip32_10501.xml,官網2016/02/15更新(資料量為61,904筆)。
  2. 修正官網下載的Zip32_10501.xml,結束xml節點錯誤的問題。

2015/08/27:

  1. 更新台灣郵局3+2 XML資料版本為2015/08/07(目前有61,663筆)。

2015/02/09:

  1. 地址輸出的繁簡切換及全半形字元的設定值,默認皆改成「None」,代表不轉換而直接使用原生資料。

 

程式下載 (Download)
.NET 4.0 Required, Portable, Size: 502KB,內含郵局官網2016-02-15更新的郵編XML檔
百度雲盤 (TaiwanZipCode_20160331.zip)

2016-03-30

修正LibreOffice Calc加總欄位不會自動更新問題

為了減少對微軟Excel的倚賴,我逐步慢慢把平時常用Excel記帳表轉成免費軟件LibreOffice Calc 5.x軟件,當然我是利用Calc開啟舊Excel檔,經過調整後再另存成Open Document Spreadsheet  (*.ods)格式。有一天發現此檔的加總欄位SUM值,竟然不會在區間欄位值異動時自動計算加總,查了一下原因,原來是Calc對於Excel檔案及其他軟件的ODS檔並不會主動重新計算,算是不相容的理由。
Sum Columns

在Calc的「Tools/Options/LibreOffice Calc」可以看到這樣的開啟選項。此處不需要調整為「自動重計算」,因為不相容的檔案最好保持原來初值就好,強制重算反而會有計算錯誤問題。

Calc Formula

解決之道把目前的ods檔另存(Save a copy)成Excel檔(*.xlsx),然後使用Calc開啟這個另存的xlsx檔,再作一次另存成*.ods檔案(此時就是Calc支援的新ODS版本),就可修正不會自動加總的問題了。

Save as type

若你不是重度使用微軟Excel的財務/會計,或需和別人檔案交換的需求,使用開源免費的LibreOffice是一個不錯的選擇,雖然它的UI介面沒有商業軟件那麼細緻但也趨近了,而且LibreOffice持續維護新版本也有免安版本(不到200MB),很值得推薦。

2016-03-27

了解Weak Reference弱式參考

NET程序的變數(Variable)指向一個Object記憶體,這塊記憶體會在該變數的存活期間一直保存,直到變數離開視野才被GC(Garbage Collector)標記及回收,此種變數與記憶體的參考關係,稱為Strong Reference (強式參考)。ASP.NET裏有一個Cache Collection,它是隨著Web App的生命周期一直存活著,但其集合項目所指向的記憶體久佔不放,因此我們希望能在一個Wek Reference的參考關係,即讓該參考變數一直存活,但其指向的記憶體項目能因為系統GC的回收而自然被釋放。

下圖是WeakReference類別提供的簡單範例,建構子指向一個Target Object記憶體,當GC.Collect()後,該Target Object會變成null, 且IsAlive=False。然而若在GC前有讀取過該Target記憶體(第11行),第15行的結果卻是IsAlive=True。若整段Code貼到一個for loop視野內,Target存活的狀況又變得不一樣了,這些涉及到GC的回收機制(Generation)及適用策略而變得不可預測,所以官方文件裏都會告訴你WeakReference指向的Target記憶體存活狀況不可靠,儘量不要用。

WeakReference Declare

然而有些資料不是那麼重要,而且也無法預知它的內容何時會被釋放,不如就用GC自由掃射,只要我們存取變數值時安全檢查一下就好。以下就是一個簡單的Cache Dictionary集合實作範例:
Cache Dictionary

WeakReference項目GC回收的時機點很難預測,我們該怎麼安全地讀值呢?簡單地說,就是比對一下項目Target值 是否為null值就好,而異動集合項目時配合lock{}也可來達到ThreadSafe。

Dictionary ReadValue
因為讀值需要判斷一堆的,所以新式的ASP.NET Caching內部實作時間Expire存活機制,讓集合的項目 能明確保存一段時間,這會是更好的管理方式。

2016-03-23

解決FtpWebRequest檔案上傳時的中文亂碼

要FTP上傳一個檔案到Server主機,可以簡單使用NET內建的FtpWebRequest類別就能達成,網上都有示範程式碼。然而發現上傳中文檔名會變成亂碼,搜尋網上也未尋到詳細作法。

今天靈光一閃,發現UrlEncode編碼後的中文路徑有些字元不合法,尤其斜線(Slash)及空白(Space)會在UrlEncode後變亂碼,必須把它轉換回來,FtpWebRequest就能正常處理中文檔名。

UrlEncode Replacing

江湖一點訣,當初浪費挺多時間的。

Chinese Result

2016-03-16

第一次使用iPhone就上手

一年前友人借我一隻4S老手機來體驗新款的iOS系統(當時是v8.1,2),對於用慣安卓手機的我來說,第一次使用iPhone要研究目標就是重灌及JB它的系統,是有一些挑戰的。以下是一年後重刷升級為iOS 9.2.1的步驟記錄,因為JB後的系統是無法直接OTA差異升級的。
  1. 打開手機的「Settings/General/Reset/Erase All Content and Settings」,讓手機整個清除內容資料,它會進行重開機並重置內存資料,之後用手機申請一組Apple ID,它類似像Google帳號一樣。
  2. 取得Apple ID之後,你可以在目前的iOS版本賞玩一下,Apple Store安裝APP都是需要該組Apple ID。若想升級手機的iOS版本,只需要在「Settings/General/Software Update」選擇更新,它就會下載約1.5GB的固件Firmware,重開機後就升級至最新iOS 9.2.1。(iOS 9.x之後能提昇4S老機效能,實測是真的比iOS 8.x好)
  3. iPhone手機的資料除了可以在重灌時選擇備份到Apple iCloud空間,也可以安裝iTunes軟件儲存到電腦。iTunes除了能備份資料,也能把音樂檔放入手機,可以說是iPhone的管理軟件了。你可以在官網這兒下載iTunes,它會自動判斷你的連線電腦,選擇適當的版本安裝。
  4. 打開iTunes, 4S接上USB插到電腦去,自然就會被抓取到手機裝置。若沒出現,請重開機或重接上手機USB,往往就OK了(USB線材接觸良好也有關係)。
    iTunes UI
  5. iPhone的音樂都是使用ID3標籤資訊來形成Playing List,跟我在安卓手機習慣以目錄方式播放不同。而且不同APP之間的手機空間是獨立的,代表A軟件下載的音樂檔,B軟件是看不到的,這點很不方便,不過它至少不會像安卓軟件都會亂放目錄路徑,而且要移除iPhone軟件保證是乾乾淨淨的,因為每一個APP都是各自活在自己封閉的空間。
  6. 若你的手機JB越獄過,它設定裏的Software Update功能會設定為不自動更新,這代表你要刷新版本的iOS,就得透過iTunes來刷機了。你可以直接Check for Update從官網下載該固件檔,也可以自己手動先下載好,再按下圖編號2的Restore按鈕(請先按Shift鍵再按鈕)去抓取該固件檔案。由於iPhone的硬體很固定,不像安卓百家爭鳴,所以刷機就是一鍵完成。若有遇到Update/Restore Error號碼,就上網查詢一下錯誤原因,基本上都不會有問題或變磚。我曾遇過Error 14 (USB問題),原來是USB線長期充電折壓,內部線材接觸不良,因此要反方向用手機摺壓,才順利安裝更新至最新固件。
    iTunes Restore
  7. 若手機的Home鍵不靈敏又不想花錢修,可以使用「Settings/Accessibility/Interaction/AssistiveTouch」(稱俗小白點)來代替Home鍵。若有JB越獄者,可安裝「Activator」這個APP來使用不同的實體鍵(如音量鍵)來代替Home鍵。下圖編號2的Siri鈕可以換成多工切換(Multitasking),會比較實用一點。
    Assistive Touch
  8. 要安裝App,iPhone的App Store不怎麼好用,我習慣在電腦安裝大陸iTools軟件,它的功能角色類似iTunes,但若有JB過手機,則可以做更多「方便」的事情。即使不JB,也可以透過iTools安裝它的市場APP(應用兔),它就像Apple Store功能一樣,只是能幫你記住Apple ID密碼及接觸到大量的大陸APP資源,例如「網易雲音樂」這程式能收聽最新音樂及下載MP3。
  9. 最後,以我這種喜歡愛折騰手機性格的人,還是比較喜歡安卓系統,對於iPhone/iOS系統的諸多限制是用不慣的。然而不可否認的,iPhone的硬件品質好,很適合一般大眾Rich End User。
至於要不要JB越獄,我個人越獄1年後的心得,是覺得沒必要。因為iPhone設計本來就很封閉不自由,每個APP的設計理念就是活在自己的小房間,JB後只是能裝一些3-Party市場裏的APP,偏偏它們的檔案維護及iOS版本支援問題很多,沒啥多大用處。

唯一能稱讚的是JB後能安裝「Activator」這種捕捉手機所有事件(Event)觸發時的按鈕及手勢重定義軟件,對於Home鍵不靈敏的老機,可以用音量鍵來代表Home鍵。

2016-03-12

AdSense自點廣告的停權處份

最近在觀察AdSense流量及廣告點擊的收益比較,就有自己點擊廣告圖片的行為,結果就收到Google的停權來信處份了。它沒有說明偵測的依據在哪邊,不過我估計是自己電腦IP有登陸Blogger後台過,它再比對點擊廣告的Client IP發現若是一致,就認為是自點犯規了。

信件內容如下:

AdSense Email

所以,大家不要以身試法了!

2016-03-09

Win2008主機記憶體滿載(System File Cache)問題

機房有一台網頁資料庫Win2008 R2 SP1主機,因為是舊硬件局部升級,只裝載8GB記憶體,系統乾淨時運作約耗1GB RAM,架上網站及資料庫後,初始值是1.6GB左右。當時想省著用,系統8GB RAM應該夠用,但跑了幾天,發現系統操作呈現卡頓,叫出工作管理員(Task Manager)查看,系統記憶體使用量幾乎滿載,CPU使用率卻極低。我統計了所有的處理程序(Process)記憶體總量不到滿載值,又把最可能耗量的SQL Server及IIS服務都Restart,記憶體使用量仍滿載。

重開機只能短暫解決問題,因此我還是把矛頭指向吃RAM最多的SQL Server 2014,將其服務最大Max Memory由預設值(其值挺大的)手動設為4GB,仍沒解決問題。爬了一下Google網文指出,原來是系統檔案快取(System File Cache)耗盡實體體記憶體的問題。當運行服務程序(如SQL Server)需要大量記憶體,系統對應所配置Cache Size也會變大,在32-bit的系統最大不會超過2GB,但64-bit系統的定址會耗盡所有實體記憶體。

要立即解決記憶體耗盡的問題,可以下載「CacheSet」工具把目前的Cache值立刻減少,記憶體佔用量就陡降了,但它只是暫時性的方案。

CacheSet

Task Manager

微軟提出「Microsoft Windows Dynamic Cache Service」永久解決方案,讓你設定最大Cache Size並建立一個Dynamic Cache Service服務背景監控,當超過Cache最大值時自動進行限制。請閱讀ReadMe.docx檔案先安裝服務,並調整DynCache.reg檔中的MaxSystemCacheMBytes值(16進位表示),預設值是0x000 (90%),可設為0x19 = 25% (2GB Cache of 8GB)值,再重新啟動該服務。

image

以上Cache變動,也可透過CacheSet工具看到改變。另外,也順帶檢討了伺服器裏SQL及VM Machine等吃RAM大怪獸服務,若系統只有8GB RAM,最好手動約束其最大Memory使用量(總量之2/3 – 系統運作2GB),否則一旦記憶體滿載,什麼怪現象都可能產生。

2016-03-02

Ball Head 丸子頭

學生時代男生總會喜歡長髮披肩的女孩,不知何時,我開始喜歡女生盤髮往上梳的俐落感。前陣子才知道這種綁髮式叫做「丸子頭」,查了Youtube看到這個教學片:

配合柔和誘惑的背景音樂曲調,欣賞女生這樣撥弄頭髮,倒是一番趣味。以前老覺得女生浪費太多時間在頭髮打理上,現在才懂得去欣賞了解這些女性美感背後的努力及技巧。

附上背景音樂「魯敏宇 Baby」的影片,大多數人都喜歡的。