顯示具有 How to 標籤的文章。 顯示所有文章
顯示具有 How to 標籤的文章。 顯示所有文章

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


2015年7月19日 星期日

從OpenWebmail遷移帳號至Zimbra

前言

前一陣子受託將OpenWebmail帳號轉移至Zimbra上,在網路上找了一些文件,原以為能直接匯入帳號,等SE安裝完後發現匯入的只能是明文的帳號密碼,而內建的帳號轉移功能不錯能將信箱郵件也匯入不過一樣需要明文的密碼,對於默默轉移的系統IT/MIS而言無法使用,而唯一能匯入密文密碼的方式只有透過LDIF匯入的方式了,而這個Zimbra的LDAP是安裝自帶的非OS本身的LDAP套件


步驟

1. 首先要取得舊有OpenWebmail系統的帳號(passwd)與密碼(shadow),然後利用下面這個PHP Script轉換成LDIF文件(注意:這個Script會將原本停用的帳號也轉換並「啟用」)



2. 取得Zimbra的LDAP連接資訊,剛開始誤以為是使用OS自帶的openLDAP,看LDAP設定檔的rootDN與password卻一直連不上去,後來才發現是自帶的服務,rootDN與password都不同,password是安裝隨機產生的需要使用「zmlocalconfig -s -m nokey zimbra_ldap_password」才能取得,rootDN「uid=zimbra,cn=admins,cn=zimbra」

3. 使用ldapadd命令匯入LDIF,如果匯入的LDIF有問題則會中斷匯入,造成某些帳號匯入某些尚未匯入,這時候就要修改LDIF錯誤以及去除已經匯入的帳號才能繼續進行匯入

2012年5月9日 星期三

Setup Private Git Server like github (RhodeCode)

System info: Debian 6.0、Python 2.7.3、Lighttpd 1.4.28、Rhodecode 1.3.4



系統架構圖

目標:使用者可透過網際網路使用HTTP或HTTPS存取Git版本庫或RhodeCode的專案介面

遇到的問題:

  1. RhodeCode欲使用80 port提供服務必須使用root權限執行,本身不具備啟動後切換身分的功能

  2. RhodeCode內建的Web Server不支援SSL

  3. Git Client使用HTTPS時如果無法驗證憑證(自簽憑證)會終止

2011年11月28日 星期一

python build egg

無意間找到一個python lib感覺應該能用然後就試著裝看看

python setup.py bdist_egg

結果出現

error: invalid command 'bdist_egg'

原來bdist_egg是包含在setuptools中,只要在setup.py中加入就能順利孵出蛋了

from setuptools import setup

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年9月28日 星期三

亂搞的X86 embedded

先聲明,這非正統的embedded作法,完全沒有重編譯任何東西的土砲法
起因於想縮小CentOS的大小跟複雜度,為了方便又需要VBOX上就可以測試所做的嘗試
目前進度是可開機進入無init,而是直接執行busybox的ash

1.建立一個新的虛擬硬碟
2.使用fdisk切割為一個分割區再格式化為ext2
3.將新的分割區掛載到/mnt,並建立boot dev proc sys sbin tmp
4.將現在的核心複製到/mnt的boot中
5.使用mkinitrd建立新的initrd.img
6.使用grub-install將loader安裝製新的硬碟並設定grub.conf
7.複製/sbin/busybox到/mnt的/sbin中

2011年9月21日 星期三

於Trac新增phpdoc文件


之前中秋在家狂寫註解,這次使用phpdoc的格式,可以順利生出看起來像是程式碼的文件[疑!!]
但是code更新後都要人工去renew很煩,既然SVN都能自動sync了為啥phpdoc不能順便產生呢??
再加上嵌在Trac中多方變啊,根本就不會忘了URL是多少XD

安裝PhpDocumentor
pear install PhpDocumentor

#修正樣版編碼
cd /usr/share/php/data/PhpDocumentor/phpDocumentor
find ./ -name '*.tpl' | xargs sed -i 's/iso-8859-1/utf-8/g'


匯出SVN並製做phpdoc
rm -rf /tmp/tipc
svn export file:///data/svn/tipc /tmp/tipc
rm -rf /data/trac/tipc/htdocs/phpdoc
phpdoc --parseprivate -o HTML:frames:earthli -d /tmp/tipc/ -t /data/trac/tipc/htdocs/phpdoc


Trac安裝MenusPlugin
http://trac-hacks.org/wiki/MenusPlugin
#trac.ini設定
[components]
tracmenus.* = enabled

[mainnav]
phpdoc = enabled
phpdoc.parent = browser
phpdoc.href = /tipc/chrome/site/phpdoc/index.html
phpdoc.label = PHPDoc

2011年7月13日 星期三

製做CentOS 6的mini安裝片

CentOS6已經在前幾天Release了,與之前不同這次只有DVD與net-install,沒有CD版了
圖型安裝界面所需的記憶也超過512MB,文字介面安裝少了許多選項(磁碟分割、套件選擇)
不過有加快啟動速度與EXT4的檔案系統

延續之前自訂CentOS安裝片的內容
底下只說明CentOS 6中不同的部分

1.使用net-install當做母片的話,需要複製DVD根目錄中的.discinfo,才會認得安裝片
2.createrepo前,先把repomd.xml改名為comps.xml
3.CentOS6的implantisomd5獨立為isomd5sum套件,位於/usr/bin/implantisomd5

2011年7月3日 星期日

新的待辦事項

一直以來都使用Google行事曆中tasks,不過有個問題就是無法分類
於是找了個簡單的todo List程式
http://www.mytinytodo.net

1.簡潔的AJAX介面,支援MySQL與SQLite
2.可設定公開瀏覽的分類
3.有行動裝置版本UI

P.S 型動UI需要在網址後帶入pda參數,如果想要自動判斷可以在index.php中加入下面的自動轉頁

2011年5月19日 星期四

SVN Hook

最近在發行專案常搞不清楚是哪一版而苦惱,於是想利用SVN的Client Hook來輸出一個版本號檔案到程式根目錄,特此紀錄


2011年5月8日 星期日

Lighttpd enable ipv6

前一陣子有個客戶申請了一個IPV6網段,已經把Web及DNS搬上去了,由我負責的vhost主機因為Lighttpd之前編譯時未啟用ipv6的關係,導致主機有IPV6位址卻沒有服務的情況
下午聽完SA的IPV6之後就手癢玩一下

1.首先確定lighttpd是否支援IPV6,沒有的話需要重新編譯

#lighttpd -V

Features:
+ IPv6 support


2.設定lighttpd,將IPV6與V4的存取記錄分開

server.bind = "0.0.0.0"
$SERVER["socket"] == "[::]:80" {
accesslog.filename = "/var/log/lighttpd/ipv6.access.log"
server.errorlog = "/var/log/lighttpd/ipv6.error.log"
}


3.重新啟動服務,打開瀏覽器測試(因為IPV6使用分號區隔與URL的分號表示port衝突所以位址需要使用中括號框起來)
http://[ipv6 address]

注意1:IE7以上才支援IPV6位址格式
注意2:XP系統DNS需依賴IPV4,可能會造成無法回解IPV6位址的問題

2011年4月15日 星期五

自訂CentOS安裝片

為啥要自訂安裝片呢,起因於LAMP環境需要用好幾片CD光碟,怎不用DVD呢....因為老舊的IBM Server沒有DVD,所以當時都用第一片做最小安裝(就是不會討其他片才能完成的),然後再用yum來安裝所需要的PHP、Apache跟Mysql,久而久之也就習慣了,而且還養成了一種怪僻=>只做最小安裝,直到最近TIPC完成後需要大量佈署到機器上,如果一台一台裝常常會忘東忘西的,還好有寫安裝command筆記的習慣,就慢慢的把這些command寫成script,因為看到另一款軟體使用kickstart來自動安裝完全不需要人工介入(當然還是需要人把光碟片放進去啦),不過是DVD版的全安裝,這讓小弟很無法忍受,於是利用閒暇時間爬文找出如何自訂安裝光碟內容(包含新增移除套件)

必備項目
1.UltraISO Premium Edition
2.CentOS 安裝光碟CD1 or DVD
3.VBOX虛擬機器
4.一點閒暇時間XD
5.具有網路連線(非必要)

一、首先先在VBOX中安裝CentOS,安裝完畢後在/root的底下有個install.log這是這次安裝的rpm套件list,接著掛載安裝光碟到/mnt,然後使用下面的shell script把安裝中真正需要用到RPM複製到硬碟中
#!/bin/sh
if [ "$#" != "3" ];then
        echo "$0 install.log src_rpmdir dst_rpmdir";
        exit 1;
fi

cat $1|grep Installing|awk -F '[ :]' '{system("if [ -f '$2'"$NF".rpm ];then cp -f '$2'"$NF".rpm '$3';else echo '"Can Not find"' "$NF";fi;")}';

使用方式 ./mvrpm.sh /mnt/CentOS /root/mycd/CentOS

接著複製原始的repodata
cp -R /mnt/repodata /root/mycd


二、更新或加入套件(非必要)
如果說安裝後不想更新想預先把新版RPM置換掉可以利用yum的downloadonly插件來下載RPM,取代就是把現有CentOS目錄中舊版本的RPM刪掉再把新版放進去(此人工動作十分耗時,請量力而為)
yum --downloadonly --downloaddir=/root/new update


三、重製repodata
createrepo -g repodata/comps.xml .

這是一個很神奇的步驟,這步小弟就搞了兩個禮拜,務必換到repodata的上一層目錄,並同時可以看到repodata與CentOS(放置RPM)的目錄,如果沒有createrepo這個command請自行安裝

新版本的createrepo會在重建db時加入hash在檔名
早期的安裝程式可能會無法正常載入,可以加上 --simple-md-filenames這個參數
createrepo --simple-md-filenames -g repodata/c6-minimal-x86_64.xml .

四、編輯ISO
現在回到Windows把原本安裝那片ISO使用工具打開然後清空CentOS目錄的內容,在把剛剛在VBOX中的/root/mycd/CentOS中的RPM放進來,接著把剛剛重建的repodata也覆蓋掉光碟中的版本
如果要使用kickstart可以複製到光碟根目錄中然後再修改isolinux目錄底下的isolinux.cfg將第一行的預設參數改成
default linux ks=cdrom:/ks.cfg


五、測試
在經過幾次1-4的步驟與反覆的測試安裝過程後呢,安裝光碟應該可以如預期的行為運作了,最後加上光碟本身的驗證碼讓光碟的自我檢測功能是可以使用的
/usr/lib/anaconda-runtime/implantisomd5 --force /root/my-centos.iso

2011年4月9日 星期六

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

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

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


2009年6月15日 星期一

VGN-TX56TN install Fedora11 and LXDE

週五剛把Arduino做完閒閒沒事就把NB給重灌了,之前就一直想嘗試看看LXDE的速度,之前使用Ubuntu9.04的時候因為抓不到wifi而作罷這次使用Fedora很順利的可以支援wifi了但是Gnome啟動後就用掉400M的記憶體而且稍微緩慢於是改成使用LXDE來當桌面環境,LXDE已經進到Fedora官方套件庫中了安裝十分方便

首先設定sudo
#切換root
su -
visudo
#加入
your_name  ALL=(ALL)       ALL


接著設定yum使用proxy(非必要)
sudo vi /etc/yum.conf
#加入
proxy=http://hostname:3128


安裝LXDE環境
sudo yum groupinstall lxde-desktop

登出後選擇工作環境就有LXDE的選項囉

安裝Lxrandr,用來切換外接的VGA介面給投影機使用
#安裝所需的檔案
sudo yum install gcc gtk2-devel make gettext

#取得lxrandr-0.1.tar.gz
#http://sourceforge.net/project/showfiles.php?group_id=180858&package_id=281362

#解開
tar -xzf lxrandr-0.1.tar.gz
cd lxrandr-0.1
./configure
sudo make install


安裝Flash Player(可使用FF的Flashblock來攔阻Flash,乾脆不要裝Player好了,真矛盾)
#取得Adobe的套件
wget http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
sudo rpm -ivh adobe-release-i386-1.0-1.noarch.rpm
sudo yum install flash-plugin


安裝Arduino IDE
#先安裝Sun版本JAVA
sudo yum install avr-gcc avr-lib

#將使用者加入lock與dialout否則無法使用/dev/ttyUSB0裝置
sudo usermod -a -G lock USER_NAME
sudo usermod -a -G dialout USER_NAME

#下載Arduino IDE解開並編輯啟動腳本
vi arduino
#在CLASSPATH之前加入下列腳本,就可以在其他目錄啟動Arduino
path=`echo $0|awk 'BEGIN{FS="/"}{for(n=1;n<NF;n++)printf$n"/";}'`
cd $path

#建立快速啟動捷徑
vi arduino.desktop

 #加入下列內容
[Desktop Entry]
Name=Arduino IDE
Exec=arduino_start_script_full_path
Categories=Development
Type=Application
Terminal=false
Icon=development

2009年6月4日 星期四

烙鐵初體驗

最近又開始做RFID專題,有部分的PCB板沒把pin銲上去只留個洞再上面,SO只好自己動手來弄,套句我老媽說的話『現在不做的事,可能一輩子都不會去做了』,於是在電料行買了一把便宜的烙鐵($150)與一些錫絲($15),話說台南北門路上的電料行都很小間常常找不到所需的零件,與台中電子街整棟的電料行比起來差很多,由於沒什麼人可以問所以就隨便亂搞,結果雖然可以用但是銲的很醜....

剛剛找之前買單晶片的賣家討論烙鐵的狀況得到了一些資訊,首先烙鐵不能太熱,如果不是控溫的烙鐵需要準備一塊沾水的海綿來控制溫度,尤其是高瓦數的烙鐵,加熱快很容易過熱,一旦發現錫絲碰到落鐵就冒煙表示溫度過高

錫絲的部分要注意成分,我買到的昰外包裝寫著60/40表示錫60%,鉛40%,如果是環保錫絲錫97%,銀0.5%,銅2.5%,不過聽説環保錫絲比較不容易使用,含鉛量越高越好銲,但是也越毒

烙的時候先用烙鐵加熱針角(pin)與PCB上的座子(pad),然後將錫絲靠在pin上使其融解,完成後先拉開錫絲再拉開烙鐵

我則是把錫絲溶解在落鐵上,接著拿去糊在pin上面,不過對於手會抖的人(像是我)可能會碰到旁邊的東西

如果不小心手滑了用了太多的錫在pin上面,可以加熱溶解後用吸錫器(如果有的話)把錫吸起來,或者用烙鐵把錫拉成柱狀冷卻後再用剪刀剪掉

另外如果有不吃錫(實際上我沒看過也不知道是怎麼的情況)的狀況,可以先用酒精擦拭pad的部分(這是教授講的)

2009年5月24日 星期日

Simple Machines Forum(SMF)v1.1.9安裝筆記

最近在整理vhost上的網站,其中orz討論區已經有段時間沒有維護了,趁這個機會升級一下,沒想到一升級就orz了...,原本使用的是1.1.6版的SMF使用的是自訂的佈景,由於之前維護的人也不管了,這個孤兒系統的維護又回到系統管理員小弟身上,未了避免往後維護上的不便,把所有客製化的部分去除,包含自訂的佈景與外掛,以及資料庫編碼由latin1轉為UTF-8

首先在舊系統以管理者登入,強制重設所有使用者的佈景主題為預設值,在模組中升級SMF直到1.1.9版,最後用mysqldump將資料庫整個倒出來,記得修改編碼為UTF-8

重新安裝SMF於新的目錄,清空新建立的資料庫並將舊的資料匯入,將舊有attachments目錄複製到新的目錄,登入管理介面測試

已知問題

1.使用中文化出現"Sorry, the copyright must be in the template.",因為中文化未更新copyright導致的,修改languages底下的index.chinese-traditional-utf8.php檔案,將forum_copyright這個翻譯改為
$forum_copyright = '<a href="http://www.simplemachines.org/" title="Simple Machines Forum" target="_blank">Powered by ' . $forum_version . '</a> | <a href="http://www.simplemachines.org/about/copyright.php" title="Free Forum Software" target="_blank">SMF &copy; 2006-2009, Simple Machines LLC</a>';

2.中文在斷字的時候被切掉變成問號(?),因為PHP無法正確判斷中文字的問題須改用mb_string系列的函數,修改Sources目錄底下的Load.php檔案,將$func = array的substr與strlen這兩個索引內容中的return片斷改為
if(function_exists(\'mb_substr\')){
return $length === null ? mb_substr($string,$start,mb_strlen($string,\'UTF-8\'),\'UTF-8\') : mb_substr($string,$start,$length,\'UTF-8\');
}else{
return $length === null ? implode(\'\', array_slice($ent_arr, $start)) : implode(\'\', array_slice($ent_arr, $start, $length));
}


if(function_exists(\'mb_strlen\')){
return mb_strlen($string,\'UTF-8\');
}else{
return strlen(preg_replace(\'~' . $ent_list . ($utf8 ? '|.~u' : '~') . '\', \'_\', ' . implode('$string', $ent_check) . '));
}

3.中文字看起來太小,因為字體是定義成9pt,可修改Themes目錄中的style.css,在.smalltext區段之後加上
.tborder .bordercolor .windowbg2 b a{
font-size: 1.3em;
}
#upshrinkHeaderIC .windowbg2 b a{
font-size: 1em;
}
#upshrinkHeader2 .titlebg2 span{
font-size: 1.5em
}

.windowbg .smalltext,.windowbg2 .smalltext,.windowbg3 .smalltext{
font-size: 1em;
}

2009年5月22日 星期五

在CentOS使用srpm安裝vsftpd

今天維護VHOST主機時把SFTP轉換成FTP over SSL,使用yum的vsftpd後發現Filezilla可以連線但是無法取得目錄列表,訊息列顯示
Could not read from transfer socket: ECONNABORTED - Connection aborted

Google後發現這是vsftpd的Bug,在2.0.7版後修正了,但是CentOS內建的還是2.0.5,原本打算用Fedora10的rpm安裝,發現有相依性,於是使用Fedora10的srpm重新打包

下載SRPM
wget http://opensource.nchc.org.tw/fedora/linux/releases/10/Fedora/source/SRPMS/vsftpd-2.0.7-1.fc10.src.rpm

解開SRPM
rpm -ivh vsftpd-2.0.7-1.fc10.src.rpm

安裝相依的函式庫
yum install tcp_wrappers pam-devel libcap-devel

編輯spec檔案
vi /usr/src/redhat/SPECS/vsftpd.spec

將第50行由tcp_wrappers-devel改成tcp_wrappers
因為CentOS中tcp_wrappers-devel包還在tcp_wrappers裡面
BuildRequires: tcp_wrappers

打包RPM
rpmbuild -bb vsftpd.spec

打包的結果在
/usr/src/redhat/RPMS/i386/vsftpd-2.0.7-1.i386.rpm

接下來使用rpm指令安裝就好
rpm -ivh /usr/src/redhat/RPMS/i386/vsftpd-2.0.7-1.i386.rpm

2009年5月19日 星期二

在VirtualHost中使用不同的php.ini

今天在更新VHOST主機上的lighttpd順便找了點東西,一直以來PHP上傳的檔案擁有者都是HTTP Server,在計算使用者磁碟配額Quota上十分不便,主要是因為PHP是以HTTP Server的身分執行的關係,這也造成另一個問題,所有的檔案對於HTTP Server都是可讀取(甚至可寫入)的,所以在同一台實體主機上的使用者是可以存取其他人的PHP網頁原始碼,雖然PHP提供了safe_mode的功能但是這項功能即將在PHP6中被移除,移除的主因是,PHP團隊認為安全性的問題應該由系統去負責,於是找了些可以用使用者身分執行PHP的相關資訊,意外的找到在VHost中套用不同的php.ini的方法

http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModFastCGI
http://ssorc.tw/rewrite.php/read-956.html

根據一篇lighttpd官方的討論指出,lighttpd並無法在每個要求切換執行身分(Apache可以作到),但是可以把不同的虛擬主機對應到不同的fastcgi server上,也就是每個fastcgi server都使用不同的身分執行,不過安全性提高了,但卻佔用了更多記憶體

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