顯示具有 程設 標籤的文章。 顯示所有文章
顯示具有 程設 標籤的文章。 顯示所有文章

2017年12月10日 星期日

使用Jenkins自動建置C#專案

最近剛把一個Library的Unit Test撰寫好,也在整理程式碼的時候發現以前沒發現的問題
,於是就心血來潮把Jenkins安裝起來,想讓Library自動建置與測試

1.環境
首先Library是.Net C#的專案所以需要使用可以安裝編譯器(MSBuild)的平台,於是使用Win7 SP1 x64當作底層OS,硬碟分割60G


2. Jenkins安裝
可以在官網(https://jenkins.io/download/)下載Windows安裝檔,選擇LTS的穩定版本
一直點選下一步即可安裝,安裝完畢後會自動開啟瀏覽器顯示預設密碼說明。
要在安裝目錄中取得預設密碼才能進行下一步,接著建立第一個使用者與選擇模組(可先使用預設值,安裝完成後再進行模組安裝)


3. 安裝Git
Jenkins安裝檔中「沒有包含Git」,需要手動安裝,安裝完畢後需要在「Global Tool Configuration」中設定Git路徑

Git for Windows下載
https://git-for-windows.github.io


4. 安裝MSBuild
可在下列連結取得MSBuild,而不需要安裝完整的VisualStudio

MSBuild 2015
https://www.microsoft.com/zh-TW/download/details.aspx?id=48159

MSBuild 2017
https://www.visualstudio.com/zh-hant/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15


5. 設定MSBuild路徑
在「Global Tool Configuration」中設定路徑



6.新增工作
Jenkins設定的部分到這邊就差不多結束了,剩下的就是設定要執行的工作
詳細的圖文說明可以參考這篇
https://dotblogs.com.tw/jamis/2016/04/05/115537


2017年2月12日 星期日

使用C#抓取PACS系統中的Worklist

PACS系統使用的通訊協定為DICOM,這是一個醫療影像通訊協定,目前大多數實作於TCP/IP基礎上,分為Client (SCU) 與 Server (SCP) 兩種腳色,Server端的認證方式有IP ACL、Port與AE Title,AE Title等同於HL7中的 Sending/Receiving Application 這個資料欄位的用途

Worklist為PACS系統其中的一個組件,可以跟HIS的檢查系統連線取得目前所有開立的檢查項目清單,並提供標準的DICOM協定讓醫療設備或第三方影像軟體可以存取這些資訊

在C#中可以使用fo-dicom這個library https://github.com/fo-dicom/fo-dicom
存取Worklist的動作稱為C-Find,在fo-dicom專案上有提供sample


2013年7月13日 星期六

心電圖資料電子化2

接續上一篇的內容,因為某些原因還是把批次轉換服務寫好了,並且找了dicom receiver測試,結果有些意外,有的可以接收有的會有錯誤,稍微查資料發現DICOM格式除了圖形之外還可以包含文字資料的報告等內容,且各科有已定義的ID(類似LDAP那種GUID分類模式),有的接收器會檢查是否全數的格式都能紀錄才轉換,如果有不認識的就會Reject上載的要求,是一種比較嚴謹的傳輸模式。

另外廠商寄給來的DICOM可以用GIMP開啟(對!就是那套Linux上的繪圖軟體),令人意外的發現,不過使用C# ECG Toolkit轉換的DICOM無法用GIMP開啟,推測裡面包含了一些額外的資料(病例號、機器參數、分析報表....),而廠商寄給來的是已經將這些資料轉換成圖像合併到原有的ECG紀錄上了是一張很單純的影像,所以才會有這種差別。


底下為測試使用的dicom receiver

ITC DICOMpiler
http://itc.wustl.edu/DICOMpiler/index.htm
十分簡易,似乎會過濾掉不認得的內容(接收到的檔案比送出的小)


Conquest DICOM
http://ingenium.home.xs4all.nl/dicom.html
滿完整的,內建Sqlite也可連接MySQL,帶有一個cgi程式可以在網頁中檢索(未測試)



ECG格式會有錯誤需手動調整
http://forum.image-systems.biz/viewtopic.php?f=33&t=13037&p=21124&hilit=ECG




可以在這邊找到更多資訊
http://www.mccauslandcenter.sc.edu/mricro/dicom/

原本想測試PacsOne,但是看起來架構滿龐大的就沒測試了,不過文件資訊很多可以參考PACS要注意哪些
http://www.pacsone.net/conformance.htm


順便補充一下,在C# ECG Toolkit的論壇有人打算製作MFER格式的轉換程式了,然後原作者年初開發了一個Html5介面的ECG Viewer (http://www.vanettinger.info/webecg/)

2013年7月4日 星期四

心電圖資料電子化

因為工作的關係會接觸到醫療資訊的東西,最近遇到一個需求是要將心電圖機的紀錄檔案數位化並上傳至醫院的電子病例系統中,這牽扯到幾個關鍵,首先心電圖機必須有檔案輸出的功能,如果完全無輸出就需要看這篇了。

目前碰到的是FX-8322這款機器,有內建RJ-45的乙太網路接頭可以採用FTP連線上傳檔案(不過V01.04版本韌體的FTP功能是不支援WINDOWS系統的FTP,Bug在工程版已修正),可以輸出的格式為FUKUDA自己的ECG格式、MFER(日系的規格)、FDA XML(美規,某些地方會寫HL7 aECG),因為這幾種輸出格式都是資料數值,而非圖形化的心電圖波形,所以無法直接轉入電子病歷(目前多數醫院的認知:電子病例=紙本掃描,只是將紙本改成顯示在螢幕上而已,與資料再利用或電腦分析無關),所以需要將這些原始數值資料轉換為圖像資訊。

而在醫療領域圖像資訊標準為DICOM,DICOM包含檔案格式與傳輸模式兩個部分,可以利用「C# ECG Toolkit」這工具先將FDA XML轉換成DICOM格式檔案(可用呼叫外部命令的方式),再利用「Fellow Oak DICOM for .NET」將資料上傳至遠端的主機上,因為FX-8322使用FTP上傳檔案,所以必須有一台FTP Server接收這些FDA XML,在利用程式去偵測是否有新的上傳檔案,有的話就轉檔案並作後續的上傳,為了避免人為介入,可以將整個程式寫成背景執行服務來運作。

可使用.net的FileSystemWatcher來偵測目錄內的檔案變動


C# ECG Toolkit
http://sourceforge.net/projects/ecgtoolkit-cs/


Fellow Oak DICOM for .NET
https://github.com/rcd/fo-dicom


Watching Folder Activity in C# .NET
http://www.codeproject.com/Articles/25443/Watching-Folder-Activity-in-C-NET


ITC DICOMpiler
http://itc.wustl.edu/DICOMpiler/index.htm


PACS (醫療影像儲傳系統)
https://zh.wikipedia.org/wiki/%E9%86%AB%E7%99%82%E5%BD%B1%E5%83%8F%E5%84%B2%E5%82%B3%E7%B3%BB%E7%B5%B1


(在此只是提出一個可行的方案的可行性評估,並未實作請不要來要Code)

2011年11月3日 星期四

用python模擬DHCP Client找出區網DHCP Server

在比較大的區域網路中常常會使用DHCP來配發IP,但是有時候遇到私假的DHCP或者接反的IP分享器...
在沒有dhcp snooping設備支援的情況下,往往會造成一些麻煩
所以寫了這個script用UDP廣撥的方式來找出DHCP Server


經實驗發現WINXP系統在設定為DHCP狀態下,會值接套用上次的IP來做續約,不會重新做DHCP Discover的掃描
所以可能會抓錯一次DHCP之後一直都是錯的狀況

2011年7月26日 星期二

使用WMI抓取硬碟資訊

之前就知道WMI可以遠端抓取Windows上的狀態,但是Windows一直不是在下主要的工作所以沒用過
因為某些原因(盤點)需要一個免洗程式來抓硬碟資訊,所以剪貼了一下網路上的片段程式碼弄出這個

P.S 如果遠端是XP可能會採到"簡易檔案共用"的地雷





參考資料
http://itgroup.blueshop.com.tw/nobel12/blog?n=convew&i=8142
WMI的其他項目
http://www.dotblogs.com.tw/jimmyyu/archive/2009/07/02/9074.aspx
http://msdn.microsoft.com/en-us/library/aa394592(v=vs.85).aspx
XP採到的雷
http://anthonyxp.blogspot.com/2010/09/wmixp.html
VBS版本
http://tc.wangchao.net.cn/bbs/detail_41150.html

2011年7月15日 星期五

細節是很重要的

上禮拜買的"MongoDB 權威指南"終於飄洋過海入手了,下午花了點時間把它啃完,雖然是簡體書不過是翻譯的,內容鋪陳上滿順暢的
要是去年就出,也不用花這麼多時間摸索了,雖然如此在索引、排序與記憶體耗用的描述跟使用上的"猜測"是相符的
目前遇到的問題,也提供了適度的解法,例如別用skip來跳過大量資料與使用limit來分頁,很不幸的我都做了XD
補救方式就是改寫查詢流程+AJAX,在巨量資料(千萬筆以上)狀況下有些事情是無法用書上講的去做,保證會採到雷

如何去規劃架構、設計程式...有賴於對於底層運作的了解,而這種校調上的差異往往都是好幾個數量級,實際點說就是會影響到客戶買不買單的問題

2011年4月9日 星期六

利用kickstart在安裝前檢查網路卡數量

最近系統差不多完工了開始製作安裝片,因為設計上最少就需要兩個NIC介面,為了避免裝完後才發現有抓不到網卡的問題,或是使用者想硬裝到只有一張卡的機器上,所已有了安裝前檢查的想法

爬了一下文發現kickstart的%pre區段可以達到這個目的(如下圖)
注意這段程式只適用於文字介面安裝模式


從nmblookup中取得中文名稱

前一陣子在做網頁顯示主機名稱與工作群組時發現中文會無法顯示(下圖藍色的部分),當時在趕進度就沒去詳查當成系統限制結案XD

後來比較空閒後研究了一下這個問題發現在nmblookup的debug全開模式下可以看到中文(下圖紅色的部分),所以應該是nmblookup的bug,另外由Hex的資料內容可以看出是使用big5編碼所以還要用iconv轉成utf8才能在網頁上顯示

2011年1月17日 星期一

轉換子網路遮罩格式

子網路遮罩有兩種表示方式,一種是IP格式,像是255.255.255.0,另一種簡寫是只有一個數值像是24,表示二進位中連續的1個數
Linux中大部分程式都支援兩種,不過也有例外像是/sbin/ip這個命令,一定要使用ip/mask來表示,於是就有了下面這個函數
P.S 在防呆上還不是很完美,不過加減用吧XD

2010年10月15日 星期五

Linux安裝Zend Optimizer

基於某些
自私邪惡確保利益的原則下,所有的客製化與中介程式都要加密
#下載ZendOptimizer並解開,選擇對應的PHP版本,並複製到lib目錄
/usr/lib/php/modules/ZendOptimizer.so

#編輯php設定,加入zend_extension而不是extension
vi /etc/php.ini
zend_extension=/usr/lib/php/modules/ZendOptimizer.so

#驗證看看是否有出現with Zend Optimizer
php -v

PHP 5.1.6 (cli) (built: Mar 31 2010 02:44:37)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

2010年9月29日 星期三

最近玩很兇

又好久沒有Blog了,過的超級充實的,測試了一些WAF設備,也瀏覽一些雲端這個議題,試了一下Ubuntu Cloud跟opennebula,雖然都失敗了XD,也玩了一下mongodb這個noSQL,最近在幫阿凱的實驗室弄虛擬,這次用XenServer來測試(因為ESXi挑硬體)

算是把雲端的三個層級(基礎設施、平台、應用)都看了一次,感覺目前只到基礎設施的程度,也就是虛擬化,在平台與應用方面還沒有什麼足夠的能量去做;在高附載的環境中,也慢慢看到單一設備的極限了,已經不是用硬體可以扛的起來的應用也慢慢出現,像是關聯式資料庫(RDBMS)在處理千萬數量級以上的資料的速度,快速搜尋、計算是個關鍵(例如:splunk),而雲端只是達成目的的方法,雲的架構還是過於複雜,而且無法由現有系統直接轉移,因為在架構上是不相容的。

最後有圖有真相,Show一下C#寫的mongdb查詢畫面

2010年7月18日 星期日

syslog的愛、勇氣與希望...

話說plqadmin第二版已經邁入說好的rev 60但是有些部分還沒修改完畢,像是php寫的syslog接收器
於是今天去加班了,星期五已經把log的解析完成了,也是用動態建立物件的方式來延伸支援的log格式
主流程在接收UDP 514的訊號,原本想說應該可以很快完成的,沒想到遇到syslog無法轉拋到本機的問題
也許你會問為什麼要拋到本機,因為我想接收log來記錄某些事件作為報表

就目前理解的syslog架構為 App -> /dev/log -> syslog demon -> logfile or remote syslog
log轉拋之前實做的經驗是在/etc/syslog.conf加入下列的設定就能轉拋到遠端

*.* @ip

但是今天發現,這個IP如果是本機,就收不到任何的東西,也沒任何錯誤出現
使用debug模式啟動syslog的時發現下面的訊息

Called fprintlog, logging to FORW(UNKNOWN) 127.0.0.1
Forwarding suspension not over, time left: 180


仔細看了一下訊息又發現
syslog只要有要往外拋的設定,他就會使用UDP 514來發送
沒錯就是用來收log的PORT,推論因此無法同時收與發送

forwarding host: 127.0.0.1
Opened UNIX socket `/dev/log'.
Opened syslog UDP port.


不過如果修改/etc/services 內的syslog服務的port為5140
依然無法拋到本機,出現同樣的訊息,原因不明...|||

最後還有一招將log拋到pipe去,在syslog.conf的說明裡面有寫

*.* |/tmp/my.pipe

可以將log丟到具名的管道中,這不為是個好辦法
but管道的證資料,並不會完整的出現,有一些會留在pipe中直到下一次flush才會出現
我想這就跟沖馬桶一樣,總有些東西會卡在裡面

所以接收程式要能判斷log是不是完整的,至於怎麼判斷....
提示:跟\n有關

2009年5月18日 星期一

使用C#連結nusoap撰寫的WebService

這學期有修一門WebService課程,使用的是PHP的nusoap來實作,雖然老師說寫個簡單的查詢就好,但我總喜歡挑戰沒玩過的東西,於是打算寫個SOAP的聊天室,使用nusoap+sqlite當作Server端,用戶端使用C#來撰寫,去年幫學長寫專題時有碰過一點WebService,依稀還記得Web References,不過nusoap無法自動產生WSDL,於是大概花了一個星期的時間到處找定義WSDL的範例,終於讓SharpDevelop可以抓到完整的參考,以上的內容可以參考這份簡單的範例自己玩看看

http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html

接下來的部分就是C#在與nusoap連接時的疑難排解,首先是連接nusoap會出現HTTP 417錯誤,必須在連接前加入以下設定
request.ServicePoint.Expect100Continue = false;

http://www.douban.com/group/topic/5509228/

C#連接nusoap中文會有亂碼,必須在nusoap建立soap server時額外設定
$server=new soap_server();
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8=false;

http://coolstr.cnblogs.com/archive/2005/08/25/222440.html

2009年5月16日 星期六

用PowerShell寫GUI

PowerShell是微軟新的加強版命令提示字元,具有類似Unix-link Shell的功能而且與.NET作結合可直接建立.NET中的物件,不過PowerShell並沒有真正取代命令提示字元,比較像是一個外掛,使用的腳本為.ps1附檔名,預設沒有與PowerShell建立關連性,這樣使用起來有點麻煩,於是參考檔案關聯資料在右鍵選單加入"Run PowerShell Script"選項,使用上比較方便,不過預設PowerShell並無法執行任何Script腳本,必須修改安全層級
set-executionpolicy remotesigned
#如果使用Vista且使用UAC必須使用管理員權限執行

建立檔案關聯(reg機碼)
PowerShell Script參考資料
Creating GUIs in Windows PowerShell 1.0 with WinForms
Windows PowerShell Blog

2008年9月19日 星期五

自行設計Proxy認證

話說有某廠商丟DM到中心,要賣Proxy,目的就是為了讓圖書館買的電子資料庫能在校外存取,號稱能結合POP3、LDAP、AD....一脫拉庫的認 證方式,基本款十萬,還限制40個連線數,含硬體再加六萬,不限制連線數再加六萬,報表外掛六萬,直接升級完整版只要二十萬,還限制只能裝在Unix- like系統上

看到這裡我笑了,但是內心哭了....因為這分明是squid嘛,居然要這麼貴,我繳的學費真是浪費...廠商還說有學校 已經買了(錢太多可以分我們一點好嗎...),於是在下開始研究squid的認證,因為它支援的認證都無法符合我們的要求,中心暨沒有LDAP也沒 AD,Mail又有分學生、老師、Google App代管的....,所以我們想要直接從圖書館的"圖書館自動化系統"取得認證資訊,但是又不能直接存取圖書館的資料庫(死要錢的廠商會說這樣破壞保 固),所以用socket送出HTTP要求的方式去嘗試登入"圖書館自動化系統",透過判斷回傳的頁面來判斷是否成功登入

現在隆重的介紹這個一天內從規劃、撰寫、測試到完工的小東西"easy proxy authentication",英文簡稱"EZPA",中文簡稱"容易趴",就是容易趴掉的意思XD

這 個程式由小弟不負責任出品,保固7小時,改爛自己負責,目前只支援敝校的"圖書館自動化系統",但是程式是可擴充的,只要PHP可以連接的都可以,不管是 MySQL、MSSQL、PGSQL、DB2、甲骨文、sybase、POP3、LDAP、SSO.....都可以,但是您要自己寫:P

2008年2月21日 星期四

用fsockopen模擬瀏覽器送出Basic認證資訊

晚上幫OA寫了一個簡單設定MOSDAN的PHP程式,MOSDAN現有的管理介面是Web的,於是想到模擬瀏覽器的方式使用socket來連結,設定使用GET的方式傳送,而Basic認證是在每次要求網頁時送出帶有帳號密碼(經由BASE64編碼)的表頭,大概就像這樣

$link=fsockopen($mos_host,80,$err,$errstr,$timeout);
fputs($link,'GET / HTTP/1.1'."\r\n");
fputs($link,'Authorization: Basic '.base64_encode($username.':'.$password)."\r\n");

回傳的結果用fgets來接就好,十分容易就可以透過單一介面控制多台MOSDAN

2007年6月25日 星期一

SNMP、AJAX、L2即時流量

週末想不開,於是搞搞L2交換器,用PHP的SNMP命令去抓L2交換器的資料,再透過從m0n0wall挖來的流量圖顯示在網頁上,算是初入AJAX的暖身吧:P

不過流量圖是SVG格式,只支援Firefox :)
P.S 上下傳這麼對稱,是P2P嗎?

2007年6月20日 星期三

New Mail:LogWatch.....

又再一次的看到Google Talk跳出LogWatch的新信訊息,代表著四點了....

奮戰幾天的成果,感謝風痕影贊助LOGO(?)一張


那個鐘實在太棒了,而且整張圖是摟空的,可以看到底下的內容,PNG半透明才是王道啊!

最近,看到不少人在感嘆或回憶過去,讓我也受到一點點的影響,想起了那個屬於我們的年代...赫然從夢中醒來,是對現實的不滿讓我回想過去,還是看著學弟妹畢業而想起當年,亦或只是單純的胡思亂想呢?