mod_mono_server init script

為了要讓 mod_mono_server 能在開機時自動啟動,就得自行撰寫 script.
自己嘗試了幾次,總是不如己意.大概是自己的 bash script 功力不到家吧~
只能利用 Google 大神去搜尋別人的成果.
很幸運,已經有人寫出來了.有好幾種版本:
1. mono-server.init, 這個 script 相當不錯,已經可以讓你在配置檔(/etc/xsp/mono-xsp-hosts.conf)裡面設定 host 了.同時也已經收錄,作為 Debian 官方 xsp 套件的一部分.
2. local-xsp, 這個 script 也是 for Debian 的,但沒辦法設定 host.
3. mod_mono, 我是在這兒找到的,這個可以在 fedora/red hat 裡面用,沒問題.
我最後是用了 3 的 solution,並加上了一些修改,不過你應該看的出來,更動並不大就是了 🙂

#!/bin/sh
#
# chkconfig: 2345 99 01
# description: Provides ASP.NET functionality for Apache
# mod_mono Start the mod_mono-server
#
NAME=aspnet
MONOPIDFILE=/var/run/aspnet.pid
export MONO_PATH=/usr/lib/mono/1.0/
start_mod_mono() {
tmp=`ps ax | grep -m 1 “/usr/bin/mono”`
tmp=`echo $tmp | grep “/usr/bin/mod-mono-server.exe” | awk ‘{print $1}’`
if [ $tmp ]; then
echo -n “$NAME already started”
else
echo “Starting server $NAME”
#/usr/bin/mono /usr/bin/mod-mono-server.exe –root /usr/local/share/doc/xsp/test/ –applications /mono:. –nonstop &
#/usr/bin/mono /usr/bin/mod-mono-server.exe –root /var/www/html/mono/ –applications /mono:. –nonstop &
/usr/bin/mono /usr/bin/mod-mono-server.exe –root /usr/share/doc/xsp-0.9/xsp/test –applications /mono:. –nonstop &
sleep 3
chmod 666 /tmp/mod_mono_server
fi
}
stop_mod_mono() {
# (MO): Asking for an existing process for the mod-mono-server
# (MO): Abfragen, ob es eine Prozeß für mod-mono-server schon gibt.
tmp=`ps ax | grep -m 1 “/usr/bin/mono”`
tmp=`echo $tmp | grep “/usr/bin/mod-mono-server.exe” | awk ‘{print $1}’`
if [ $tmp ]; then
echo -n “Stopping mod_mono”
tmp=`ps ax | grep “/usr/bin/mono” | grep “/usr/bin/mod-mono-server.exe” | awk ‘{print $1}’`
kill -9 $tmp
else
echo -n “$NAME is not started”
fi
}
case “$1” in
start)
start_mod_mono
;;
stop)
stop_mod_mono
echo
;;
restart)
echo “Restarting $NAME”
stop_mod_mono
echo
sleep 1
start_mod_mono
;;
status)
tmp=`ps ax | grep -m 1 “/usr/bin/mono”`
tmp=`echo $tmp | grep “/usr/bin/mod-mono-server.exe” | awk ‘{print $1}’`
if [ $tmp ]; then
echo “$NAME is running”;
else
echo “$NAME is not runnung”;
fi
;;
*)
echo “Usage: /etc/init.d/$NAME {start|stop|restart|status}”
exit 1
;;
esac
if [ $? -eq 0 ]; then
#echo
exit 0
else
echo ” failed”
exit 1
fi

舊愛還是最美

記得蘇永康剛來台灣的時候並不紅(應該是1994,1995年…),我的同學極力推薦他的歌,但是我並不以為意.
後來在我畢業後,他才大紅,一些舊歌反而都被挖出來.
他的這首歌相當好聽,我蠻喜歡的,大部分歌詞也還記的起來.
特別是這句話,讓我往往深思良久:”兩個對的人卻在錯的時候愛了一回”…
舊愛還是最美
作詞:姚若龍
作曲:陳子鴻
演唱:蘇永康
半夜看 cable 的舊電影寂寞好深
想看自己從前 從前的幸福和愚蠢
電影裡主角回頭的淚痕 那淚痕
忽然好想舊情人的柔軟雙唇
人一輩子常常只有 只有一次緣份
錯過就再也遇不到那麼好的人
於是心裡不時飄浮暖暖那個吻
從此能付出的情愛也不完整
oh~不自禁找尋很像她的情人
但是沒有誰有像她的靈魂
舊愛還是最美 美的東西往往太早枯萎
後悔時的淚水 又特別讓人覺得無力疲憊
舊愛還是最美 有時分手不是誰負了誰
兩個對的人卻在錯的時候愛了一回

內外不一致的尷尬

最近在公司對外電子報所看到的新聞.

小星星車用PMP第二季底登場 瞄準歐美市場(XX時報)
(記者周先生/台北)
為進軍車用多媒體產品市場,小星星近期在德國CeBIT展中推出支援數位導航模組,及數位電視模組等功能的可攜式多媒體播放器(Portable Multimedia Player;PMP)產品線UMC,成為兼具多媒體播放以及導航功能的車用可攜式多媒體播放器,小星星表示,初期產品單價將定位於??美元,在第二季中旬左右導入歐美市場。
目前各大PC業者都已開始研發車用多媒體產品,除小星星外,AA、HH等業者動作也都十分積極,小星星表示,目前多數業者的車用產品設計概念大多是以嵌入式系統產品為主,但此類產品面臨防盜問題考驗,因此初期切入車用市場將以可攜式產品先打頭陣。
小星星表示,UMC可說是PMP產品線MV的延伸概念型產品,除採用7吋液晶面板及內建迷你型硬碟外,另可支援MP3、MPEG4等多媒體播放程式,並且內建USB2.0以及1394等外 接介面,同時也將整合130萬像素數位相機功能。在汽車相關應用功能方面,則是以PCMCIA介面支援標準化的GPS以及數位電視模組,不過GPS以及數位電視模組需要另行採購。
UMC正式上市產品名稱未定,產品報價約??美元,小星星指出,由於歐洲的GPS系統多半仍以文字介面為主,而北美地區市場的車用多媒體市場也仍在起步階段,因此初期將主打歐洲以及北美市場,5月中旬到5月底左右可望正式上市。

如果你是研發人員,而對外新聞稿卻發佈了你不知道會加進去的東西,你會做何感想??
我想流程大概可能會是:
1. 髒話 > 無奈/不爽 > 做
2. 髒話 > 不爽 > 不做
=_=

Pascal Compiler Thoughts

最近 mono-devel-list 的 mailing list 上,有一個討論非常的熱烈,那是關於 Pascal compiler 的.
今天,在 Mono 開發人員的 blog 裡,則看到了這篇文章,並提出了一些建議…
其實我在兩三年前就想寫一個 vfp 的 compiler,讓他能在 .Net 平台上跑, 只是買了一堆書,到現在卻還沒開始…
我想這篇文章倒是可以作為一個很好的參考,指引…

cannot handle TLS data

最近更新了 dag 的 mono RPM 以後,mono 只會說

mono: error while loading shared libraries: libmono.so.0: cannot handle TLS data

令人無奈…去抓官方網站 的 RPM for rh9(因為我用的是WBEL,不能用 Fedore Core 3 的 rpm)之後,也無法使用…
在網路上搜尋了一下,其實所謂的 TLS 有兩種: Transport Layer Security, 或是 Thread-Local Storage. 一開始我被搞混了,我以為是 Transport Layer Security, 所以我更新了 openssl 等等相關的 library, 但是卻於事無補.
後來又多花了一天在找這問題,終於,我才發現是 Thread-Local Storage 搞的.可惡,我心裡想,這個我不搞清楚,那我這兩三年的 Linux 經驗豈不是白混的??又繼續找,看到底是缺了什麼 library,才會這樣…今天我終於找到解答,原因是因為我的 glibc 是 i386 arch 的,並沒包含 tls 的部分,所以必須要更新到 i586/i686 才可以.
對,我承認我膽小,所以我不敢強制把我的 glibc 升到 i586 (我的 linux 是架設在 AMD 350 上…,所以是 i586),於是我退而求其次,我重新下載 DAG 網站上的 mono.spec, 把 revision 改為 2, 重新包裝 source rpm, 然後再編譯一次.這次,當然就可以安裝了~~
嗚嗚嗚~~真是花了我不少功夫啊….
註:
Thread-Local Storage
http://linux.web.cern.ch/linux/scientific3/docs/rhel-gcc-en-3/thread-local.html

反分裂法條文

心裡還是挺好奇的,到底反分裂法裡面有什麼條文呢??
出乎意料的簡單,只有十一條…
有興趣的人可以看這裡:反分裂法條文
本想轉貼在這兒的,但為了避免不必要的麻煩,我看還是免了…
有時候想到兩岸的問題,心裡想,這還真的是很尷尬….台灣的位置實在太巧妙了…
立場很容易就變成兩面不是人…
=_=

喝酒趣事多-喝到脫光

如果你起床的時候,發現身上未著寸縷,旁邊躺著你的朋友,而屁股又很痛的時候,你會想到什麼??是的,我曾經有過這樣的一次經驗.
記得是 1999 年或 2000 年過完年的時候,照慣例和大哥一道去了志成家報到喝春酒~
當然,去志成家,每次都有新玩意,這次是喝大瓶的 Whisky,不是一般那種不到一公升的那種 Whisky 瓶子,它有點像日本月桂冠那種大瓶子…去了以後,當然二話不說,卯起來就邊看電視邊聊天邊喝啦~~然後配志成從韓國帶回來的泡菜還有一些小菜…
喝啊喝~喝啊喝~喝到一半的時候,志成就提議說,”我們去錢櫃邊唱歌邊喝吧~~”
喜歡唱歌的我當然說好囉~可是那時候我其實已經接近喝醉的狀態了~ @_@
那時候政府還沒推行”喝酒不開車,開車不喝酒”的禁令,地主志成就開車載我和大哥去錢櫃…
接下來的事情是由志成和大哥轉述給我聽的.
據說,我一上車就睡著了,到了錢櫃,他們好像把我架去包廂丟著.
唱完之後,再把我載回去,從志成家地下的停車場到志成家的路上,兩個喝醉的人,架著一個已經喝掛的人,一路跌跌撞撞,途中我跌了好幾次 (這是我屁股痛的原因),回去以後,吐了一些在衣服上,比較清醒的志成就把我衣服拿去洗(這是我裸身的原因)…
三個喝掛的人這個時候也應該都睡著了…
隔天,我才經由他們的口中,得知我喝掛的情景,這次應該是最有趣的一次喝醉經驗了…

用 wprintf 輸出 string

wprintf() 要印一個 wchar 字串時,得特別使用 %ls,如果你用 %s, 那表示要印一個一般的 char 字串。
所以這樣會只印出 m

wchar_t* myString=L”music is wonderful!!”;
wprintf( L”%s\n”, myString );

而這樣才會正確的印出 “music is wonderful!”

wchar_t* myString=L”music is wonderful!!”;
wprintf( L”%ls\n”, myString );

NAnt 與 mono

既然已經可以使用 mono 了,於是我也想在 mono 下使用 NAnt
幸運的是,NAnt 已經支援 mono 了。所以只要下載解開以後,執行 make 即可。如果你的 mono 是 1.0.6 而你用的 NAnt 又是最新版的 0.85-rc2,那麼我相信你應該會遇到問題。這個時候你應該到 mono 官方網站 下載 unstable 的 1.1.4,雖說是 unstable,但依據網站上的說明,其實這一版已經相當穩定也整合了更多的東西進來。
下載並安裝之後,應該就可以編譯 NAnt 了。
如果你想用 NAnt 的 rpm 來安裝,也是可以,請先到這裡下載 nant.spec,然後打開 nant.spec,將這幾行刪掉:

Patch0: %{name}-xml_syntax.patch
Patch1: %{name}-PlatformID.patch
%patch0 -p1
%patch1 -p1

因為在最新的 NAnt 的 source 已經 patch 了。
接著把 nant 的 tarball 放到 /usr/src/redhat/SOURCES/,執行

#rpmbuild -bs nant.spec
#rpmbuild –rebuild /usr/src/redhat/SRPMS/nant-0.85-0.rc2.1.src.rpm

就可以在 /usr/src/redhat/RPMS/i386 下找到剛 build 完的 nant rpm 了。