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 了。

Simple page on mono xsp

試了一個下午,終於弄出來.
首先我們得釐清幾件事情:
1.ByteFX 該如何使用?
2.從 mono 的範例看來,code是可以與page寫在一起,沒問題。但是 Codebehind 呢?
ByteFX 基本上與其他的 DataProvider 用法相同,只是 Prefix 改為 MySql,而 ConnectString 基本上只有四個重要的 attribute:
1.Data Source:指的就是機器名稱,一般使用 localhost。
2.Database:資料庫名稱。
3.User ID:使用者帳戶。
4.Password:密碼。

using ByteFX.Data.MySqlClient;
//…
MySqlConnection cn;
MySqlCommand cmd;
MySqlDataReader dr;
string myConnectionString=”Database=test;Data Source=localhost;uid=root;pwd=;”;
cn=new MySqlConnection( myConnectionString );
cmd=cn.CreateCommand();
cmd.CommandType=CommandType.Text;
cmd.CommandText=”select * from table1″;
cn.Open();
dr=cmd.ExecuteReader();
// do anything you want.

Codebehind 的用法基本上也與 Windows 上的 asp.net 相同,沒什麼大問題。在這邊花了比較多的時間,原因是因為太久沒用,而且沒有 IDE,只能手動比對以前的 asp.net 程式碼,才對出來。你的頁面最前面必須要有

<%@ Page language=”C#” debug=”true” Codebehind=”your_page.aspx.cs” AutoEventWireup=”false” Inherits=”your_page_class” %>

而你的 your_page.aspx.cs 則應該要有一個 class,叫作 your_page_class,並且繼承 System.Web.UI.Page。
p.s your_page.aspx.cs / your_page_class 這兩個名稱請依自己的需求做替換。
另外有碰到無法編譯,出現 System.Design.dll 找不到錯誤的問題,這是因為沒有安裝 mono-winforms 的緣故,裝上以後就 ok 了。

悠閒地打羽毛球

晴朗的星期天,除了冷以外,大概可以說是無可挑剔的一天了.
這樣的天氣不出去走走實在對不起自己.
可是事先又沒有計劃,想起上次到烘爐地的途中有看到羽球場地,所以就決定到那邊打羽毛球,順便爬爬山.
於是就很悠閒地上了山,很悠閒地打了幾場球.
打球之餘,發現原來小穎以前體育課是羽球組的,真是看不出來…
熱身以後,身手還不錯呢~看來以後可以找他來打打球,也許可以治好她手腳冰冷的毛病…
不過真的是太久沒打了,體力很差,才打了約四、五十分鐘,就下山睡大頭覺去了…

女人的身體

前幾天看了”身體密碼”,正好是介紹女人的月事.
女人的周期真的是很神奇.
月經結束後 2~3 天,就會排卵,再過幾天就進入安全期,直到下次月經開始.
一般來說,排卵期如果進行性交,那麼精卵結合的機率會提高到60%.
如果是非月經期與安全期的精卵結合機率則是15%.
看完以後,我才知道,生個小孩還真是不容易.
如果我太太懷孕了,看來是真的可以去買樂透…