顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2018年12月2日 星期日

在CentOS Linux 7上運行.Net Core WebAPI

原本工作上就是寫C#,但是ASP.NET很久沒碰了,最近有需求要做Web後台所以就評估用ASP.NET適用性,發現.Net Core可以運作在Linux主機後,就寫了一個測試的WebAPI做測試

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年8月9日 星期五

自製一個窮舉法測試的小程式(按鍵精靈)

相較於web介面的系統可以直接用HTTP要求去處理,Window介面的系統似乎只能靠按鍵精靈來處理了

最近有個需求是測試一個輸入框從100000到999999的數值輸入

由於不太想撰寫按鍵精靈的Script,於是爬文找了些文章打算自己寫一個簡單的程式來處理

主要流程就是先用FindWindow找到要測試的視窗/子視窗/Form
接著用SetForegroundWindow取得焦點(因為測試的項目只有一個text控制項沒有focus問題)
最後用SendKeys.SendWait將要輸入的字串填入
建議送出後有一個短暫的暫停,否則在高速的迴圈中發送的要求可能會導致RPC失敗

C#模擬滑鼠鍵盤動作
http://roronoa.pixnet.net/blog/post/25312590-c%23-%3A-%E6%A8%A1%E6%93%AC%E6%BB%91%E9%BC%A0%E9%8D%B5%E7%9B%A4%E5%8B%95%E4%BD%9C

send “spacebar key” using SendKeys.sendwait()
http://stackoverflow.com/questions/3153394/send-spacebar-key-using-sendkeys-sendwait

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年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

2009年5月18日 星期一

C#轉換Unix時間與DateTime

習慣於使用PHP的time()與date()函數來轉換時間後,發現C#並無內建函數可以轉換,Google了一下找到這個函數

轉載自
http://www.yaosansi.com/post/1115.html

使用上也很容易
DateTimeConvertTime(1242574440).ToString("HH:mm:ss");
#結果為23:05:00

使用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