發表文章

[專案]臺北市政府資料開放平台

由不同專案中可以了解不同領域的些許瑣事 網站位置 http://data.taipei.gov.tw 政府單位的資料取之於民,在這個世代各個國家也都逐漸將資料開放出來提供給民眾使用。 英國、美國、澳洲、加拿大...等政府很早就開始著手 Open Data的計畫與規定。 臺北市政府的open data在台灣已經是走在前端的地位,但還是受到不少開發者或者開源社群的抱怨。 抱怨點都很關鍵1.資料內容 2.資料格式 在資料的內容方面,因為官僚制度以及行政流程繁瑣,雖然平台是由資訊局管理,但各業務單位在決定資料開放的程度都有所不同,因應最新的個資法有些單位對資料的保護、開放的資料太少、更新頻率不即時...等。 資料格式方面,為了要讓資料易於使用,Tim Berners-Lee 建議政府open data有五種開放模式,這裡稱之為開放資料五星級。Ref:  http://5stardata.info/    星級的評比取決於資料的易用性,以下節錄至網站內容: ★                make your stuff available on the Web (whatever format) under an open license ★★              make it available as structured data (e.g., Excel instead of image scan of a table) ★★★      use non-proprietary formats (e.g., CSV instead of Excel) ★★★★      use URIs to denote things, so that people can point at your stuff ★★★★★   link your data to other data to provide context 簡單的說,開放的資料用容易給人...

Synology DS 412+ 相關系統設定

Q:利用ez-internet設定防火牆後,mac無法連接到nas網路磁碟機。 A:防火牆中需要允許bonjour服務通過 Q:利用ez-internet設定DDNS後,在網頁輸入domain name:yournasip:5000連不到synology管理介面DSM A:需要設定中華電信黑烏龜router的port forwarding, 用一般使用者user/user登入並修改之。(管理者cht/chtnvdsl無法設定forwarding) Q:家裡NAT網路使用DHCP,內部IP一旦改變就得重新設定router的Port forwarding。 A:在Synology DSM設定手動設定IP,並且在router設定static LAN IP(輸入IP, MAC Addr)即可 Q:更新cron後如何重啟?(no use) A:舊版DSM 4.3前的是 /usr/syno/etc/rc.d/S04crond.sh restart      DSM 5是 /usr/syno/sbin/synoservicectl --restart crond 以下為成功每兩分鐘寫檔範例: */2     *     *     *     *     root     touch /volume1/dragonjohn/devEnv/a$(date +%Y%m%d%s).txt (或許是因為ipkg 安裝的mimms在離開SSH連線後即消失,判斷在DSM系統中的排程也偵測不到有mimms的套件,因此沒有反應。slave thread)

JAVA中Singleton模式實用案例

圖片
工作上為了實作銀行內部使用的存摺磁條讀寫器的程式,因此需要防範不同程式間搶資源的狀況。 架構為多台client連接到同一台server,server上連接一台共用的磁刷機,由同一程式做外部裝置的控管。 為了讓某項周邊裝置同時間只有一個instance可存取,利用Singleton模式可以達到此效果。 網路上的範例: class CommUtils{ //使用Singleton 模式使得一個類別只有能一個實例。用getInstance取得控制權 private static CommUtils instance = null; private CommUtils (){} public static CommUtils getInstance() { if (instance == null){ synchronized( CommUtils .class){ if(instance == null) { instance = new CommUtils (); } } } return instance; } ... } 這寫法,能夠給該物件使private static物件存在唯一的reference位置,此方式在同一個thread當中同時呼叫CommUtils,第一個thread順利取得instance,第二個thread則因為判斷出instance不為null的同一個物件,會回傳同一個instance。 但當不同的process執行時,則因為共用到同一個PORT而先出PortInUseException,不進入到此程式中。 事實上Synchronized內區塊在實測中無測試到。因此可用以下寫法簡化,不需要lazy initialization。 public class CLASS { static private CLASS obj= new CLASS(); private CLASS() { } static public CLASS getIn...

用 C# 控制 Win7 輸入法

圖片
參考網址 - VISTA 與輸入法程式介面 文/黃忠成 http://www.dotblogs.com.tw/code6421/archive/2010/09/27/17909.aspx (感謝上述作者提供此方便的程式,範例可從網站中下載) 由於舊的win32應用程式和.NET FRAMEWORK 2.0有些無法在VISTA以後的作業系統順利執行。控制win7作業系統輸入法亦然,但利用上述參考網址的範例在Visual Studio 2012 Desktop中開啟並執行後,會發生程式直接關閉的情形。輸出訊息最後一行如下所示: '[2672] VistaIMEHelperNet.vshost.exe: Managed (v4.0.30319)' 程式以返回碼 0 (0x0) 結束。 造成此問題是TSFWrapper.cs程式在做記憶體釋放使用到的函式 Marshal.FreeCoTaskMem(ptr) 有問題,詳細原因等待日後深入研究。目前把方法改用Marshal.FreeBSTR(ptr)的方式,即可在Win7 中執行。(後來發現是範例程式雖然是寫FreeCoTaskMem,但網址中的程式碼是寫FreeBSTR) 點擊第一個按鈕"Fetch Input Profile List"後列出所有安裝的輸入法,但只限中文輸入法。若安裝多國不同語言的輸入法,在Form1.cs中 button1_Click函式裡TSFWrapper.GetInputMethodList(langIDs[0])的langIDs可用其他值帶入,langIDs = TSFWrapper.GetLangIDs()可取得所有語言的ID。 例如:langID中文 = 1028;英文 = 1033;日文 = 1041 點選按鈕一列出所有安裝的輸入法 點擊第二項與第三項按鈕分別可切換輸入法與設定回預設英文輸入法。 不過將此做法用於非GUI的方式,也就是非windows form的方式,而是純console介面來呼叫第二與第三個按鈕function會出現crash。以下為跳出錯誤訊息視窗的內容: 類型 'System.Runtime.InteropServices.COMException' 的未處理例外狀況...

在Ubuntu環境用mimms下載mms串流檔

圖片
影音串流protocol - mms類型的檔案(.wma, wmv) 在Ubuntu系統無法直接用wget指令下載。(錯誤訊息: Unsupported scheme mms) 可以安裝mimms軟體來達到下載串流檔的目的。 (主網站  http://savannah.nongnu.org/projects/mimms/  ) 下載 http://download.savannah.gnu.org/releases/mimms/mimms-3.2.1.tar.bz2 解壓縮後會新增一個mimms-3.2.1的資料夾 (程式是用python寫的,因此需要安裝python才能執行安裝 ) 在目錄下鍵入下列指令來建好安裝環境 python setup.py bulid 再執行下列指令安裝 sudo python setup.py install 安裝完畢後可使用指令 mimms 後面空格後接串流檔位置即可下載 mms的串流檔 (eg: mimms mms://**********/******.wma) 當執行時系統回應 找不到 libmms.so.0 檔案 表示mimms需要用到此不在電腦上的library,必須去下載到電腦上。 直型以下指令下載檔案 (主頁面  http://pkgs.org/centos-6-rhel-6/atrpms-i386/libmms-0.6.2-4.el6.i686.rpm.html ) wget http://dl.atrpms.net/el6-i386/atrpms/stable/libmms-0.6.2-4.el6.i686.rpm 由於ubuntu 預設的情況下無法直接安裝.rpm的檔案,出現訊息Please use alien to install packages 先要下載Alien工具,幫忙轉換rpm檔案成可以安裝在Ubuntu上,用以下指令安裝Alien sudo apt-get install alien (rpm檔案是redhat/fedora 系列使用的安裝檔,debian/ubuntu系列則是用deb檔案,所以在使用alien檔案轉換時,可能會出現相容性的問題,因此非必要、重要的package還...

敏捷式開發難以改變傳統專案型軟體公司

敏捷式開發(Agile)的主要概念,節錄至 wiki Individuals and interactions  over processes and tools Working software  over comprehensive documentation Customer collaboration  over contract negotiation Responding to change  over following a plan 開發時以小的功能需求面與較短的時間與客戶緊密配合,經鍋多次的循環而達成最後的產品。短的開發時程與目標讓客戶比較清楚自己想要的產品需求是甚麼,也讓程式設計師不會花太多時間重工,解決工程師每當寫好程式時卻聽到team leader對你說:"可是瑞凡,客戶需求變更了"。 國內許多接專案為主的公司都會有一樣的問題,被規定在一份金額、一定時間內做出目標產品,卻總是在開發中變更規格、更改功能,並認為這是應該辦到的。接案子時資源與預算都已經壓縮到最緊,中間卻不斷冒出問題,吃虧的通常都是以客為尊的開發商,工程師也被無條件加班重工。 敏捷開發是否能解決這類的問題?以下有幾個窘境需要面對。 客戶是否願意與開發者緊密配合? 客戶的工作內容不只有監督產品,還需要處理其他的工作項目,加上有些客戶他們是屬於8點上班17點準時下班的習慣,在配合討論時時間難以完整的配合。 客戶是否願意以產品內容最為出發點考量?而不是時間與金錢。 以往的軟體開發waterfall模式太直觀也太深直人心,太習慣一次性的規劃與一次性的付款,讓客戶較難接受以小功能為一個區間來做的方式。 所以整體來說,除非公司自己開發軟體產品,其他產業想要客制化才能實行,不然傳統專案型軟體公司不是不適合敏捷開發,而是考量到客戶的類型本身不適合。 敏捷開發不只是開發人員對於軟體開發流程觀念的轉換,客戶端也需要做改變。 P.S 或許對於台灣資方來講,最敏捷的開發就是責任制,客戶變更需求就叫員工無薪加班把code重寫,自己也省時間跟上層要資源,也省時間與客戶吵架。

[專案] 銀行端末系統

由不同專案中可以了解不同領域的些許瑣事 台灣有許多銀行,在端末terminal system的架構幾乎差不多。而所謂的櫃員、櫃姊也就是在各櫃檯負責做交易的人員。 (台灣其實可以不必這麼多銀行,這情況並沒有因為競爭而讓使用者受惠,這跟台灣不必這麼多大學一樣,但這就是另外一些故事了..) 會叫做端末系統,是因為古早能下指令command line畫面稱為terminal終端機,操作方式如PTT。 櫃源系統就如機場的系統、醫院的病例系統長年已存在,幾乎是由組合語言、C、COBOL之纇的語言撰寫,再傳遞資訊的方式是以一大量的字串,統稱"電文"的方式傳遞、接收訊息。不同銀行接收資訊的雙方(中心與櫃員)的格式各有不同,以這種方式來傳遞資訊安全、快速且又不容易被外部擷取。(相對於現在網頁之間傳遞訊息,訂立相同的header與該傳到畫面的內容body,讓 不同瀏覽器皆能解析 ) 櫃員在每個櫃台都有一定量的現金來提供顧客臨櫃提款,若是櫃員金額不足,則需要向主管申請提領金額到櫃台。 主管授權分為近端與遠端,近端為自己就可敲入主管櫃員帳號密碼,遠端則是會發送訊息到主管櫃元的電腦中請他做核准。 銀行印表機有不同的形式: 存摺印表機:列印存摺,最大能放得下A4大小的紙 匯兌印表機:大型印表機,能印寬版紙。可放入連續報表紙列印 快速印表機:機型如洗衣機,印表機底下有大櫃子能夠放連續報表紙 ‧‧‧ 銀行代碼共七碼,前三碼為銀行碼,接續三碼為分行碼,最後一碼為檢查碼 代碼查詢  http://www.trdo.gov.tw/mtn201/mtn201.asp 附註: 系統環境:iBranch SDK (包含電文、畫面、列印報表格式、程式邏輯) 遇到困難:無技術上困難 (It's long time to go, coming soon)