2009年1月28日 星期三

真男人就要玩雷電

真男人就一定會玩雷電!全破不知道幾次了,但是就是喜歡玩! 雷電X

回味一下吧!
z: 普通武器
x: 加農砲/精靈炸彈
space/esc:暫停遊戲

第二個是雷電IIS part A

ctrl:普通武器
space:加農砲/精靈炸彈
這個版本的雷電吃哪一種武器都不會改變原有屬性,只會增加;假設三種武器都吃到了,那麼就同時擁有三種武器。

第三個是雷電IIS part B

shift:普通武器
z:加農砲/精靈炸彈

狙擊手

控制手的靈活度,不過還蠻好玩的!

2009年1月26日 星期一

一八九五--客家精神,台灣感動(1895 in FORMOSA)

對於戰爭史詩的電影,我總是容易被其氣節所感動,無論是珍珠港事件、諾曼地登陸、市場花園戰役、硫磺島攻防戰等等;我們台灣終於有了一部屬於自己紀錄、自己追念、自己拍攝的戰爭史實電影--一八九五。十月,當時遇到了許許多多煩人的事情,我跟老婆一起去國賓看海角七號,當時只是瞥見一八九五的預告片段,那種風苦以及台灣精神便深深的感動了我身上的每個細胞;上個月終於如願以償跟老婆一起看了一八九五,那種久久不能自己的感動,我真的實在是以生為台灣而驕傲!今年過年跟全家一起再看一次一八九五的DVD,我只能記下我深深地感謝,作為這塊土地子孫對於祖先捍衛家園的感激與敬意。

====以下摘錄或擷取自維基百科====

中日甲午戰後,清廷兵敗議和,於光緒二十一年(1895)與日本簽訂馬關條約,將台灣、澎湖割讓給日本。消息傳出,全國震憤,台灣各地更紛紛自組義軍,誓死抗戰。徐驤時年三十八歲,首先號召生徒,糾結鄉人盡散家財,組成義軍,與吳湯興、姜紹祖,共同抵禦日寇,聯合作戰,人稱「客家三傑」。

徐驤(1858-1895,年三十八歲),字雲賢,俗稱徐昂。台灣苗栗縣頭份鎮客家子弟,台日乙未戰爭客家籍義勇軍領袖。近年獲台灣史學界肯定為「台灣抗日領袖第一人」。

1894年,日本勢力西進朝鮮,朝鮮之宗主國大清光緒帝決定對日宣戰。甲午戰爭結果,清國失利。1895年4月17日,清國全權代表李鴻章在日本脅迫下,簽約馬關條約,割讓台灣。消息傳至台灣,人心憤慨,台灣民主國成立。台灣民勇組織民軍,企求聯合全島志士,合力抵禦準備來接收台灣主權的日本軍隊。

日軍在艋舺士紳的引導下,首先入主台北城。惟當時台灣各地義軍群起合作,時年三十八歲的客家子弟徐驤散盡家財,號召鄉民組成「田賦軍」與吳湯興、姜紹祖共結義師抗日」。此後徐驤投身於台日乙未戰爭抗日先鋒的行列,全台南北轉戰數次,於吳湯興與姜紹祖壯烈戰死後,徐驤加入南台灣鄉勇,殲滅了許多日本軍人。徐驤最後同眾多民勇與日軍的纏鬥中如願就義。日本軍方對台灣民間如此激烈反抗大感震驚,因而日治時代日本教育談論台人時,時常否定客家子弟的「硬頸精神」。所以在當權者的貶抑下,客家人果敢仗義的原貌與英勇事蹟漸漸被忽略了。

2007年6月間,台灣苗栗地區多次傳聞徐驤等先烈「英魂猶存於世」的消息傳至官方[4],行政院客家委員會主任委員李永得親勘位在徐驤故鄉苗栗頭份鎮的仁愛公園,允諾儘速專案成立『徐驤紀念公園』,認為仁愛公園現址鄰近頭份市區,鎮民使用率高並兼具週圍環境的美化,十分有助苗栗縣民追思英烈徐驤的精神。

誰料大廈傾,乃逢一木當;
香山苖栗間,義軍起如蝗。
鏖戰不得前,敵馬徒披猖;
自言海上來,未遭此頡頏。
倡之者為誰,義士徐吳姜;
用矛赴齊師,爭推為徐驤。

<哀苖山> 臺灣破碎已三載,至今人說徐吳姜,
徐君勇敢推善戰,儒巾結束變戎裝;
腰下長攜三尺刃,手中能擎百丸鎗,
衝鋒獨隊遏強敵,出沒山林成戰場。

姜紹祖(1876年2月26日-1895年7月11日),幼名金韞,字纘堂。世居北埔,為北埔「金廣福大隘」第一代墾戶首姜秀鑾後人,家鉅富。

1895年,清日甲午戰爭,清廷失利,放棄朝鮮宗主權、割讓台灣主權予帝日。日軍依約登陸台灣,接收主權,引起全台士民之憤慨,各地民眾揭竿而起,組織義軍與「台灣民主國」正規軍共同對抗日軍史稱「乙未戰爭」。7月7日姜紹祖與吳湯興、徐驤率領義軍數百人、鍾石妹從竹東募義民軍二營駐紮二重埔,苗栗黃南球進入十八尖山,三支義軍互相呼應,伺機反攻新竹城,但不幸在7月10日於枕頭山被俘,7月11日吞食鴉片就義。姜紹祖殉難三十二天後,遺腹子出生,取名為振驤,即今之新竹國際商業銀行的前身「新竹區合會儲蓄公司」的創辦人之一,並擔任第一任董事長。

姜紹祖遺作《姜纘堂先生遺稿》,據王國璠《台灣先賢著作提要》,稱此書為1928年新竹姜樹人所輯,白報紙謄寫版(日語油印稱謄寫版,故此版為油印本),共收五、七言絕句24首,七律3首,聯語6則,清新可喜,國家圖書館藏有抄本,惟1977年鍾肇政寫《姜紹祖傳》時,想借閱《姜纘堂先生遺稿》已遍尋不著,未知此稿目前是否傳世?幸經鍾肇政搜羅,尚得七言絕句2首,第一首是〈出師贈同學〉:

書幃別出換戎衣,誓逐胡塵建義旂;
士子何辜奔國難,匹夫有責安鄉畿。
傳達不願淪為異族統治,保衛家鄉的決心。第二首是〈自輓〉:
邊戍孤軍自一枝,九迴腸斷事可知;
男兒應為國家計,豈敢偷生降敵夷。
>
寫於被日人俘虜,從容就義前,彰顯臨危不懼,至死不渝的英勇精神。

關於更多姜仙紹祖的照片,請詳見「姜紹祖與1895乙未戰爭」。

吳湯興曾為生員(秀才),亦學習武藝,以行俠仗義聞名於鄉里。1895年4月,清廷因甲午戰爭失敗而簽訂馬關條約,割讓台灣予日本。消息傳至台灣後,人心憤慨,於是台灣民主國成立,各地皆起兵響應。吳湯興亦召集鄉勇,籌備守衛鄉里。

5月29日,日軍近衛師團登陸澳底,乙未戰爭遂起。6月中旬,台北城失陷,吳湯興召集眾人祭旗,面向北方發誓:「是吾等效命之秋也。」眾人皆起而應和。當時,徐驤起義於苗栗,姜紹祖起義於北埔,簡精華起義於雲林,各率領數百至數千人,吳湯興皆派人送信邀請合作抗日[2]。

6月15日(陰曆5月23日),吳湯興領軍500名與姜紹祖部共同北上支援時,於楊梅壢遭遇日軍,兩軍合力攻擊,日軍稍有退卻。其後日軍攻下新竹,圖謀順勢南下。苗栗知縣李烇與吳湯興商議戰情後,派遣徐炳文赴台中告急,而徐驤力守頭份,日軍無法前進。

8月8日(陰曆6月18日),日軍大隊攻新竹,不久城陷。日軍乘勢攻苗栗,該地無城不易防守,吳湯興、徐驤俱退入彰化。8月24日(陰曆7月5日),日軍涉大甲溪,破葫蘆墩(今豐原市),次日攻破台中。 26日,幫辦軍務兼黑旗軍首領劉永福之幕僚吳彭年誓師後,分派各隊任務,以吳湯興、徐驤合守八卦山。28日黎明,日軍攻山,特別以一部隊直撲黑旗營。吳湯興拒戰,徐驤亦奮鬥,而炮火甚為猛烈,支持不下,吳湯興因而陣亡。其妻聞訊後,亦投水死。

黃賢妹,苗栗頭份人,一兄三姊妹,排行第二。父親黃阿龍在現今「六合國小」附近擁有一座靜雅的庭園—「稻香樓」(現今頭份六合國小),賢妹是17歲那年在「稻香樓」的塾房跟吳湯興相見的。當時湯興27歲,是秀才,身為長子,生父出走,必須協助母親、祖母管理家業,只好放棄科舉,在故鄉銅鑼兼職當塾師。 後來戰事急轉直下,吳湯興等眾不克東洋武器大砲攻擊而殉難,戰役之後,黃賢妹在確定吳湯興殉難的消息之後,退到彰化城,在城裡又聽聞銅鑼的家人都日軍殺害了,於是投井求死,後來被進城的日軍醫護兵救起,送回銅鑼樟樹林老家,看完家鄉殘破景象之後,黃賢妹堅決求死不吃不喝,8天後因絕食身亡,當時她才26歲,黃賢妹的殉情,為此這場戰役憑添一段可歌可泣的愛情故事。 關於黃賢妹以及更詳細的抗日細節,請參考:
認識台灣入口網
1895乙未‧八卦山英魂‧吳湯興的故事

這是我最愛的一張照片!
無語問蒼天的無助!
獨坐空床守一人,成全夫君衛家邦!(姜仙紹祖之妻--陳滿妹)

不過,關於史實,我們還是必須正視一些說法;也許事實並不如電影所述,但是捍衛台灣的精神,仍然足以讓我們後代子孫感念萬分。

希望我們台灣的子弟能夠更團結一點,無論是客家人、閩南人、原住民或是從中國來的移民,現在都是台灣的子弟;請一起守護這塊土地,別讓其他國家拿去,也千萬別像從前的那些賣國賊一樣,為了幾個臭錢把國家拱手讓人;別像辜濂松這種敗類狗屁般的打開台北城門讓日軍不費吹灰之力的到手,到現在還是齷齪、弊案纏身;別像「十日總統」唐景嵩,日本人都還在基隆,就嚇得尿失禁,連忙化裝成平民,買通衛兵,漏夜開溜回中國;也別像丘逢甲這鼠輩,只會打嘴炮:

「臣等桑梓之地,義與存亡,願與撫臣誓死守禦。設戰而不勝,請俟臣等死後,再言割地。」「如日酋來收臺灣,臺民惟有開仗。」
這麼義正言詞、慷慨激昂的話,當唐景嵩要求軍援時,丘式鼠輩噤聲;帶著軍糧落跑回他心愛的中國後,後來死於廣東,死時有六位同鄉的舉人作弔聯諷刺他。一位美濃出身的舉人林金城,也寫下這樣諷刺對聯:
「盜臺軍餉,盜粵軍裝,軍法總能逃,事變兩番成大盜、非清人物,非漢人材,人言終不息,心甘一死莫知非。」
至於劉永福算是好一點,起碼對於八卦山之役有所貢獻;不過最後也是在日軍還未攻入台南之前就逃了。抱著他心愛的寵物,化裝成老太婆躲在船上潛回中國。

最後,感謝馬修連恩為這部影片作了如此淒美動人的旋律!無論這部電影如何催生出來,我很感謝作者以及所有工作人員讓我有機會認識自己國家的歷史,對台灣如此重要的事件我們卻因國民黨教育的關係,從來沒有機會觸碰自己土地的過去;更重要的是能夠吸取教訓--只有團結與氣節,才是捍衛國家與尊嚴的不二方法。

文字、照片、資料來源:
http://www.wretch.cc/album/album.php?id=themovie1895&book=1 維基百科

Share

2009年1月23日 星期五

OpenSuSE 11.1使用感想

我用opensuse的經驗尚淺,僅紀錄一些我自己的感覺。

1. skype無音效:
這個問題在討論串哀鴻遍野不絕於耳,至今仍然沒有好的解決方法,沒有聲音就是沒有聲音!我原本以為是這台電腦內建音效卡的問題,於是跟人家A了一片音效卡來裝,還是一樣;回到家裏用自己的電腦來裝,也是一樣,沒有聲音就是沒有聲音!這對於需要用skype網路電話來工作的我,是完全無法接受的。 幸好,問題已經解決了,請參考OpenSuSE skype 無音效問題解決

2.安裝JDK會出現開機卡住的問題:
如果安裝了rpm版本,安裝完成會自動的幫使用者設定好環境變數,相當的方便;不過可怕的事情在後頭:當你重新啟動機器時,他會卡在一個訊息:
Starting jexec services
我也不知道他究竟會卡多久,即使我使用runlevel 1來開機也是一樣。網路上的的討論串認為是因為jdk所包成的rpm大致上是以redhat系列的linux為主,而opensuse有自己的spec,所以雖然是可以安裝,不過進到開機程序時會出現這樣不預期的問題。jexec daemon是每個runlevel都會啟動的,因此逃到single user mode還是難逃卡住的宿命。解決方法如下:
A. 找一片live cd或是用隨身碟開機進入另一套linux,把opensuse的root 分割區mount起來後,修改掉jexec的服務:

mv /etc/rc.d/rc5.d/S01jexec /etc/rc.d/rc5.d/xS01jexec
mv /etc/rc.d/rc5.d/K01jexec /etc/rc.d/rc5.d/xK01jexec
sync
init 6
B. 由於A步驟使開機時跳過了啟動jexec的服務,所以可以順利開機;請把先前安裝的jdk給移除,改安裝非rpm的版本。非rpm的版本只要解壓縮後放在一個固定位置,之後在手動去設定java的環境變數即可,可以成功的避掉這個問題。關於安裝jdk的問題,請參考在OpenSuSE上安裝JDK以及netbeans

3.桌面特效會不預期的自動消失:
工作到一半,畫面就會跳一下;各個桌面的視窗就會全部擠到第一個桌面來!好不熱鬧!後來乾脆不用,還不用被突如其來的閃爍給氣到拍桌。

4.X-window重新啟動的保護措施:
在一般的linux使用經驗裡,我們修改完一些設定需要重新登出時,我們通常都很懶,不喜歡還要點阿點阿再登出;我通常都是直接用crtl+alt+backsapce重新啟動X!不過在opensuse裡,這個方便的功能被拿掉了!為了避免使用者不小心就重新啟動x,opensuse 11以後就要按兩次組合鍵才會生效。
倘若你想要恢復一次就重新啟動x,你可以在xorg.conf裡新增一個option:
Option "ZapWarning" "on"

5.方便的桌面特效:
只要不是特別有名的顯示卡廠牌,安裝完opensuse就能啟動compiz特效;對於許多使用linux的新手實在是非常方便。

6.One Click Installation:
OpenSuSE非常神奇的有一個單鍵安裝的機制。當你找到一個想要的套件名稱,但是不知道如何安裝、下載、甚至不知道去哪裡加新的repo,這時友善的單鍵安裝就可以幫你很多忙。例如我家裡的nvidia顯卡需要安裝驅動程式,我決定用opensuse建議的安裝方式而不是去nvidia官方下載驅動程式自己裝,我只是在google上面輸入「nvidia opensuse」的關鍵字,第一筆就是引導我如何單鍵安裝nvidia的driver。
安裝的過程會要求root密碼,隨後會依據需求新增所需的repo、建立該repo的cache並且安裝起來。整個過程實在是俐落又方便,實在是非常值得推崇的一個linux發行版本。

7.強大而方便的yast
這有點像是大家都知道的優點。因此我才會認為suse以及redhat系列的linux真的是適合佈署在企業環境,使用者介面做得很俐落方便。

8.極為詳盡的設定檔說明:
suse的說明檔裡面的註解非常的詳盡,比起其他套linux而言真是非常的用心。要去編輯一個設定檔需要先去了解該參數的目的及用途,許多套linux有說明等於沒說明;suse的註解說明非常的清楚詳細,看了他的說明幾乎可以不用浪費時間上網google了。

2009年1月19日 星期一

VirtualBox on OpenSuSE 11.1

今天下了一個決定。每次都只能在辦公室的xp上跑虛擬的linux,我覺得實在是很不過癮;一來是使用windows的時間跟機會本來就比較少,二來是沒有出現特效感覺怪怪的,因此檢查了一下硬碟空間的大小後,我決定把一部分的磁區用來安裝linux,再裝個虛擬的xp來跑非windows不可的程式。

我選了opensuse。在我先前的經驗裡面,OpenSuSE 11.0極不穩定,圖形跑一半會突然當機,還有許多大大小小的bugs。於是當時的我對opensuse 11.0的感覺是:除非真的很愛opensuse,否則這是一個白老鼠的版本。事實上我的經驗中,opensuse 10.1, 10.3都是很穩定的版本,似乎OpenSuSE的奇數版本號都是相對穩定的版本。然而這次已經出現了11.1,我除了期望可以有一個穩定的opensuse之外,好歹我也是個NCLP,對於suse linux也算是有一定程度的熟悉;因此我決定改用第二熟悉的linux:OpenSuSE 11.1。

在OpenSuSE上安裝VirtualBox基本上需要安裝pam, kernel headers, make以及gcc以供編譯適合kernel的模組。我的OpenSuSE裡的repos定義了6個,這些repos設定檔放在/etc/zypp/repos.d/裡:

repo-oss.repo
--------------------------------
[repo-oss]
name=openSUSE-11.1-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/oss/
type=yast2
keeppackages=0
-------------------------------

repo-non-oss.repo
-------------------------------
[repo-non-oss]
name=openSUSE-11.1-Non-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/non-oss/
type=yast2
keeppackages=0
--------------------------------

repo-update.repo
--------------------------------
[repo-update]
name=openSUSE-11.1-Update
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/update/11.1/
type=rpm-md
keeppackages=0
--------------------------------

swyear.repo
--------------------------------
[swyear]
name=swyear
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/swyear/openSUSE_11.1/
path=/
type=rpm-md
--------------------------------

packman.repo
--------------------------------
[Packman Repository]
name=Packman Repository
enabled=1
autorefresh=1
baseurl=http://packman.mirrors.skynet.be/pub/packman/suse/11.1
type=rpm-md
keeppackages=0
--------------------------------

utility.repo
--------------------------------
[utility]
name=utility
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/network:/utilities/openSUSE_11.1
path=/
type=rpm-md
keeppackages=0
-------------------------------

anubisg.repo
-------------------------------
[anubisg]
name=anubisg
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

JAVA.repo
-------------------------------
[JAVA]
name=JAVA
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Java:/packages/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

multimedia.repo
------------------------------
[multimedia]
name=multimedia
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/multimedia:/audio/openSUSE_11.1/
type=rpm-md
keeppackages=0
------------------------------

當然以上以可以用yast來作,而且我很建議用yast來作;一方面可以體會yast強大的能力,一方面可以方便你匯入gpg keys。 匯入之後,我的習慣是先讓整個系統升級:
zypper ref
#更新repositories的cache
zypper update --auto-agree-with-licenses
#進行更新

接下來,我們先安裝一些VirtualBox所需要的套件:
zypper in pam-devel kernel-source make gcc lsb
#kernel-headers在suse/redhat系列的套件 都稱之為kernel-source,名稱不同,但是是一樣的東西。

然後我們下載最新版的VirtualBox(2.1.0)來安裝:

rpm -ivh --test VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
沒有錯誤的話,我們再真正進行安裝:
yast2 --install VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
## 例外狀況處理 ##
1. 我自己用到的情況是,OpenSuSE 11.1的函式庫太新了,當我某天更新完之後發現,原本安裝好的VirtualBox又無法開啟了。這時候我重新安裝竟然出現錯誤訊息: 查查看我的系統是否有安裝libpython2.5以上的版本:
zypper se libpython
結果訊息是:
S | Name             | Summary                           | Type
--+------------------+-----------------------------------+--------
i | libpython2_6-1_0 | Python Interpreter shared library | package
原來我們的版本比要求的還新!@@竟然是因為這樣不給裝,真的很討厭。這個問題在opensuse的論壇上已經是哀鴻片野,解決的方式有兩種:第一種方法就是硬裝:
rpm -ivh --nodeps VirtualBox-2.1.0_41146_openSUSE11-1.i586.rpm
很高興的把virtualbox安裝起來了。第二種方法,請詳見本文最後面。

2.不過當你要啟動VBox時還是會失敗,他會告訴你某個virtualbox函式Permission Denied的錯誤訊息。請你把自己加入vboxusers群組:

usermod -A vboxusers maxsolar
記得要重新登入,就可以正常出現VBox了!

3.如果你執行VirtualBox卻沒反應,在終端機輸入VirtualBox卻出現如下訊息:

/usr/bin/VirtualBox: line 72: /usr/lib/virtualbox/VirtualBox: Permission denied
/usr/bin/VirtualBox: line 72: exec: /usr/lib/virtualbox/VirtualBox: cannot execute: Success
但是,由root執行VirtualBox卻可以成功執行。看看到底是甚麼權限問題:
ls -l /usr/lib/virtualbox/VirtualBox
原來,有了suid,卻少了執行的權限。
chmod +x /usr/lib/virtualbox/VirtualBox
就可以成功啟動執行。

4.或者你遇到的問題是:

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
      available for the current kernel (2.6.27.7-9-default) or it failed to
      load. Please recompile the kernel module and install it by

        sudo /etc/init.d/vboxdrv setup

      You will not be able to start VMs until this problem is fixed.
那麼依照指示,你應該重編一個virtualbox的模組:
/etc/init.d/vboxdrv setup

5.打開vbox後赫然發現,事情似乎沒有想像中順利: 查詢google大神的結果,我們似乎可以藉由修改fstab來解決:

/sys/bus/usb/drivers /proc/bus/usb usbfs devmod=664,devgid=1000 0 0
其中的devgid可別照抄!你應該利用id指令來查看自己的gid。 然後手動掛載:
sudo mount /proc/bus/usb
或是重開機以使設定生效。結果令人驚喜,usb設備無法存取的狀況解決了!

6.不過當我們對guest進行設定時,又出現了一個錯誤訊息: 怎會如此屋漏偏逢連夜雨呢?別擔心,問題的解決必須要靠詳細觀察。訊息上提示我們有存取/dev/sr0上的問題。sr0就是光碟機,許多套linux在啟動nero linux時也會出現相同的問題。我們看看/dev/sr0的權限設定: 可以發現光碟機可以存取的是root以及disk群組。可惜我們並不在disk群組。解決的方法很多,你可以利用groupmod -A maxsolar disk把自己加進disk群組裡(也可以直接修改/etc/group)、也可以利用chmod 666 /dev/sr0直接改變others權限。不過我個人並不建議上述作法。 我們可以發現權限後面有一個"+"號,這表示這個檔案具有Access Control List的權限,我們透過setfacl來解決問題才是最恰當的。首先,我們先檢視一下acl裡的權限:

sudo getfacl /dev/sr0
由圖中可以發現user可以給出的最高權限為rw,gdm使用者也是rw。我們也來給使用者maxsolar一個rw的權限吧!
sudo setfacl -m u:maxsolar:rw /dev/sr0
這時,使用者maxsolar已經對於/dev/sr0已經可以有rw的權限了。假設我要移除gdm使用者的權限又該如何作呢?
setfacl -x u:maxsolar /dev/sr0
OK!快樂的在OpenSuSE上使用VirtualBox吧! 參考資料:ACL簡易設定筆記

P.S. 你也可以使用OpenSuSE的vbox套件庫來源:

VirtualBox.repo
-----------------------------
[VirtualBox]
name=VirtualBox
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Virtualization:/VirtualBox/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
----------------------------
refresh套件庫的cache之後,我們便可以略過libpython2.5的相依性要求。
yast -i virtualbox-ose

說真的,弄一個virtualbox來玩,在opensuse上真的蠻累的。相依性的問題,還是在debian上面方便解決多了。
假設你要在guest linux上使用文字終端(ctrl+alt+F1),會發現怎麼用都是切到host的文字終端。在vbox的熱鍵預設為right-ctrl,你可以使用熱鍵+F1~F6去切換guest的文字終端。我都是用這招自訂fedora系列的partitions,不然每次切好放在最前面的swap都會被硬塞到最後面,非常令人討厭;可以利用這招切換到文字終端,自訂fdisk切出想要的分割區在安裝就可以了!
I Love Debian !!!

2009年1月17日 星期六

辦公室性騷擾「防止」法

我覺得還蠻好笑的 哈哈哈!

Bad IPs

網路上不免有許多喜歡到處try機器的傢伙,這樣的人實在是防不勝防。我維護的機器幸好只有一個服務,就是sshd。整體而言我只有安裝ssh加上denyhosts,想不到不到兩個月的時間,就已經有十幾個人來try我的機器了。公佈以下惡劣的ip,你可以把他加進/etc/hosts.deny,也可以把他加進你防火牆的規則裡。

ALL: 113.11.201.30
ALL: 116.114.18.250
ALL: 116.7.255.86
ALL: 117.135.9.34
ALL: 117.25.131.77
ALL: 118.122.178.131
ALL: 118.130.106.50
ALL: 118.219.232.213
ALL: 118.69.211.2
ALL: 121.134.243.7
ALL: 121.15.207.100
ALL: 121.246.104.219
ALL: 122.155.0.9
ALL: 122.160.8.195
ALL: 122.200.105.83
ALL: 122.224.238.154
ALL: 122.252.236.83
ALL: 122.255.101.188
ALL: 123.108.201.204
ALL: 123.233.245.226
ALL: 124.114.130.149
ALL: 124.115.212.2
ALL: 124.193.150.104
ALL: 124.247.197.212
ALL: 124.254.15.169
ALL: 124.7.228.36
ALL: 125.208.3.9
ALL: 125.74.120.243
ALL: 125.76.242.62
ALL: 130.156.178.66
ALL: 132.239.69.51
ALL: 133.5.154.147
ALL: 140.109.82.170
ALL: 140.113.212.144
ALL: 140.113.212.196
ALL: 140.113.214.87
ALL: 140.113.222.145
ALL: 140.113.225.205
ALL: 140.113.7.203
ALL: 140.115.126.10
ALL: 140.115.236.42
ALL: 140.115.52.74
ALL: 140.115.72.72
ALL: 140.116.241.80
ALL: 140.117.171.53
ALL: 140.122.194.167
ALL: 140.122.204.159
ALL: 140.122.66.228
ALL: 140.122.66.77
ALL: 140.123.106.231
ALL: 140.123.115.241
ALL: 140.126.143.206
ALL: 140.126.148.164
ALL: 140.127.198.18
ALL: 140.128.142.187
ALL: 140.134.140.31
ALL: 140.134.26.181
ALL: 140.134.32.92
ALL: 140.136.147.171
ALL: 141.108.38.203
ALL: 148.244.156.135
ALL: 155.230.23.52
ALL: 158.49.50.176
ALL: 159.226.142.172
ALL: 163.178.127.13
ALL: 163.23.227.141
ALL: 164.67.178.90
ALL: 173.45.67.210
ALL: 174.133.56.250
ALL: 189.114.224.36
ALL: 189.162.101.32
ALL: 189.62.127.5
ALL: 190.144.35.98
ALL: 192.248.90.1
ALL: 192.72.80.211
ALL: 193.205.160.180
ALL: 195.138.129.241
ALL: 195.28.66.87
ALL: 195.55.159.104
ALL: 195.7.89.2
ALL: 200.146.202.170
ALL: 200.27.167.50
ALL: 200.48.4.66
ALL: 201.117.193.110
ALL: 201.151.250.86
ALL: 201.48.64.220
ALL: 202.100.219.81
ALL: 202.100.72.253
ALL: 202.100.91.165
ALL: 202.108.29.9
ALL: 202.108.59.112
ALL: 202.115.80.180
ALL: 202.170.220.165
ALL: 202.171.212.13
ALL: 202.194.28.2
ALL: 202.44.47.125
ALL: 202.71.128.100
ALL: 202.75.217.175
ALL: 203.142.86.210
ALL: 203.152.221.106
ALL: 203.171.228.52
ALL: 203.187.177.4
ALL: 203.248.245.224
ALL: 203.255.39.137
ALL: 203.93.0.3
ALL: 204.215.65.203
ALL: 204.9.203.38
ALL: 206.196.113.238
ALL: 207.58.130.97
ALL: 208.100.56.142
ALL: 208.113.108.18
ALL: 210.17.246.25
ALL: 210.243.58.214
ALL: 210.34.48.120
ALL: 210.40.128.31
ALL: 210.43.24.37
ALL: 210.51.10.189
ALL: 210.51.184.105
ALL: 210.51.4.93
ALL: 210.83.79.69
ALL: 211.100.17.87
ALL: 211.147.220.171
ALL: 211.192.64.138
ALL: 211.219.166.69
ALL: 211.48.232.248
ALL: 211.95.72.126
ALL: 212.156.220.175
ALL: 212.175.141.242
ALL: 213.174.151.17
ALL: 216.146.47.62
ALL: 217.170.84.66
ALL: 217.77.130.138
ALL: 218.175.217.134
ALL: 218.204.137.94
ALL: 218.205.242.250
ALL: 218.241.173.40
ALL: 218.241.177.241
ALL: 218.249.75.154
ALL: 218.56.135.34
ALL: 218.56.61.114
ALL: 218.93.205.152
ALL: 219.106.227.154
ALL: 219.137.24.12
ALL: 219.140.164.170
ALL: 219.142.69.203
ALL: 219.143.125.162
ALL: 219.144.186.86
ALL: 219.146.252.203
ALL: 219.153.66.71
ALL: 219.235.224.194
ALL: 219.76.75.6
ALL: 219.95.220.26
ALL: 220.130.50.108
ALL: 220.132.163.163
ALL: 220.168.209.18
ALL: 220.196.74.108
ALL: 220.196.75.120
ALL: 220.229.57.152
ALL: 220.66.64.141
ALL: 221.11.130.5
ALL: 221.122.109.206
ALL: 221.161.43.34
ALL: 221.208.194.172
ALL: 221.208.194.172
ALL: 221.214.166.59
ALL: 221.214.21.82
ALL: 221.238.19.46
ALL: 222.122.227.26
ALL: 222.122.49.18
ALL: 222.188.99.117
ALL: 222.255.28.132
ALL: 222.83.251.84
ALL: 24.226.195.196
ALL: 58.196.29.31
ALL: 58.218.209.21
ALL: 58.254.143.130
ALL: 58.26.137.80
ALL: 58.65.228.4
ALL: 59.185.104.218
ALL: 59.27.51.138
ALL: 59.3.89.62
ALL: 59.77.25.61
ALL: 59.79.164.164
ALL: 60.12.107.159
ALL: 60.191.220.135
ALL: 60.198.212.6
ALL: 60.199.206.253
ALL: 60.220.218.88
ALL: 60.247.103.41
ALL: 60.28.166.169
ALL: 60.50.161.122
ALL: 61.129.68.163
ALL: 61.153.34.150
ALL: 62.2.182.139
ALL: 62.67.246.120
ALL: 62.8.241.156
ALL: 62.93.185.48
ALL: 63.164.108.10
ALL: 64.15.156.43
ALL: 66.221.207.28
ALL: 66.244.236.244
ALL: 66.93.143.3
ALL: 66.96.240.229
ALL: 67.174.223.197
ALL: 67.201.56.37
ALL: 67.202.68.54
ALL: 68.166.118.214
ALL: 69.41.182.214
ALL: 72.232.235.6
ALL: 72.44.54.191
ALL: 74.55.26.178
ALL: 77.104.253.84
ALL: 77.221.155.130
ALL: 77.236.203.123
ALL: 78.186.133.8
ALL: 78.38.35.253
ALL: 80.13.120.105
ALL: 80.233.216.6
ALL: 80.74.155.188
ALL: 80.82.120.248
ALL: 80.86.84.177
ALL: 81.28.97.25
ALL: 82.16.36.219
ALL: 82.67.15.220
ALL: 84.16.252.58
ALL: 84.255.237.248
ALL: 85.12.46.122
ALL: 85.17.137.42
ALL: 85.17.207.237
ALL: 85.5.104.199
ALL: 87.253.155.71
ALL: 88.191.59.73
ALL: 89.248.162.172
ALL: 90.178.14.15
ALL: 91.204.162.245
ALL: 94.102.48.116
ALL: 94.198.99.56
ALL: 94.75.240.159
ALL: 94.75.252.43
ALL: 94.85.28.130
ALL: 99.130.187.245
你也可以看看那些無聊人口是來自哪些國家:
也有一些網站可以讓你查查ip對應的國家: ipfinder iplocationfinder

2009年1月14日 星期三

Java小練習(9)

本程式要作一個猜數字的遊戲 作法及提示: 1. 請使用 Math.random() 產生介於 1 ~ 50 之間亂數值 2. 接受玩家輸入值之後進行判斷 3. 提示比較後的值是過大還是過小 執行後類似: 輸入介於 1 ~ 50 之間亂數: 26 數字太小、請增加 輸入介於 1 ~ 50 之間亂數: 40 數字太大、請減少 輸入介於 1 ~ 50 之間亂數: 35 數字太小、請增加 輸入介於 1 ~ 50 之間亂數: 37 恭禧您猜對了! ##### source code starts #############################
import java.util.*;
public class Lab_8 {
    public static void main(String[] args) {
        Scanner keyin = new Scanner(System.in);
        byte number = 0;//初始值
        byte RANDOM = (byte)(Math.random()*49+1);
        //Math.random()會產生0~1之間的亂數
        System.out.println(RANDOM);
        byte count = 5;


        System.out.println("請輸入1~50之間的整數:");
        System.out.println("您只有5次機會:");
        number = keyin.nextByte();

        do{
            if(number > RANDOM){
                System.out.println("再小一點!");
                --count;
                System.out.println("你還有"+count+"次機會");
                number = keyin.nextByte();
            }else if(number < RANDOM){
                System.out.println("再大一點!");
                --count;
                System.out.println("你還有"+count+"次機會"); 
                number = keyin.nextByte();
            }
        }while( number != RANDOM && count > 1);  
  
        if (number != RANDOM){
            System.out.println("你太遜啦!");
        }else{
            --count;
            System.out.println("你還有"+count+"次機會"); 
            System.out.println("你真厲害!");        
        }
    }
}
##### source code ends ###############################

Java小練習(8)

本程式需要取出一字串內的某些文字。 取出"台南資訊展98年1月8日至13日" 將數字提取出來,不要文字。 #######source code starts ######################
public class Test5 {
    public static void main(String args[]){
        String message = "台南資訊展98年1月8日至13日";
        int index=0;

//       while ( index < message.length()) { 
//取得字串長度( 用length() )
//          if( (int)message.charAt(index) >=48 &&  (int)message.charAt(index) <=57 ){
//               System.out.print(message.charAt(index));//charAt()取得第x個字元,由0開始。
//          }
//           index++;
//       }

        for (index =0 ; index< message.length(); index++){
               if( (int)message.charAt(index) >=48 &&  
                                      (int)message.charAt(index) <=57 ){
               System.out.print(message.charAt(index));
               }
        }
        System.out.println("");
    }
}
由於我不太會改blogspot的template,超過頁面的部份請點html原始碼起來看吧!

Java小練習(7)

輸入西元年及月份求當月天數為何? 潤月規則: A. 年可以被 4 整除但不得同時被 100 整除者 OR B. 年可以單獨被 400 整除者 輸出結果類似: 西元 2004 年 2 月 => 29天 西元 2005 年 12 月 => 31天 ######source code starts ###############
import java.util.Scanner;

public class Lab5{
    public static void main(String args[]){
        System.out.println("本程式可輸入年份及月份求出當月天數 ");
        System.out.print("請輸入年份 ");
        Scanner keyin =new Scanner(System.in);

        int year =  keyin.nextInt();
        System.out.print("請輸入月份 ");
        int month = keyin.nextInt();
        int day = 0;

        switch (month){
            case 1:case 3:case 5:case 7:case 8:case 10:case 12:
               day = 31; break;
            case 2:
               if((year % 4 == 0 && year % 100 != 0) || 
                                              year % 400 == 0){
                  day = 28;//閏月28天
               }else{
                  day = 29;//非閏月29天
               }
             break;
      case 4:case 6: case 9: case 11:
  day = 30; break;
            }
            System.out.println("西元"+year+" "+month+"月共有"
                                                      +day+"天");

        }
}
####### source code ends #########################

Java小練習(6)

撰寫一個程式,使用者可以輸入R、L、U、D來分別顯示向右走、向左走、向上走、向下走。 ######## code starts form here ######################
import java.util.Scanner;

public class Test6 {

    public static void main(String args[]) {
        System.out.println("輸入R、L、U、D來分別顯示
                      向右走、向左走、向上走、向下走");
        System.out.println("ctrl+c以結束程式:");

        Scanner keyin = new Scanner(System.in);
//        System.out.println((int)'A');
//        System.out.println((int)'Z');
//        System.out.println((int)'a');
//        System.out.println((int)'z');
//利用以上得知英文字母大小寫的字元碼
        char input;
        
 do{
     input = keyin.next().charAt(0);
//沒有nextChar()這個方法,因此只好用charAt()取第一個字元傳回input
            if (input == 'R'||input == 'r') {
                System.out.println("向右走");
            } else if (input == 'L'|| input == 'l') {
                System.out.println("向左走");
            } else if (input == 'U'|| input == 'u') {
                System.out.println("向上走");
            } else if (input == 'D'|| input == 'd') {
                System.out.println("向下走");
            } else {
                System.out.println("請輸入R、L、U、D
                                      或是注意大小寫!");
            }
  }while( ((int)input >=65 && (int)input <=90) || 
          ((int)input >= 97 && (int)input <= 122));
        //當輸入為A-Z或是a-z才會繼續執行!
         }
}

######## code ends ##################################

Java小練習(5)

本程式需要讓使用者輸入華氏或攝氏溫度,以進行互換。 #####source code starts ########################
import java.util.Scanner;

public class temptrans {
    public static void main(String[] args){
         
        Scanner input = new Scanner(System.in);
         
        System.out.println("簡易溫度互換程式:");
        System.out.println("1:以攝氏轉華式  2:以華氏轉攝氏");
        byte type = input.nextByte();
         
        if(type == 2 ){
            System.out.println("請輸入華氏溫度");
            float F = input.nextFloat();
            System.out.println("攝氏溫度為:"+((F-32)*5/9));
            System.out.println("絕對溫度為:"+(((F-32)*5/9)+273.15));
        }else if(type == 1 ){
            System.out.println("請輸入攝氏溫度");
            float C = input.nextFloat();
            System.out.println("華氏溫度為:"+(9*C/5+32));
            System.out.println("絕對溫度"+(C+273.15));
        }else{
            System.out.println("請輸入1或2,不要來亂!");
        }
    }
}

Java小練習(4)

本程式需要處理分數等級。使用者輸入分數,能顯示等級。
 條件   輸出結果
##############################################
   分數高於90  分數 ? 分、等級 A+
分數低於90高等於80  分數 ? 分、等級 A
分數低於80高等於70  分數 ? 分、等級 B
分數低於70高等於60  分數 ? 分、等級 C
   分數低於60  分數 ? 分、等級 Failed
##############################################
####### source code starts ###################
import java.util.Scanner;

public class Lab4{
    public static void main(String args[]){
        System.out.println("Please enter your score:");
        Scanner keyin = new Scanner(System.in);
        int score = keyin.nextInt();
        if(score > 90){
            System.out.println("You got A+ !");
        }else if(score >= 80){
            System.out.println("You got A !");
        }else if(score >= 70){
            System.out.println("You got B !");
        }else if(score >= 60){
            System.out.println("You got C !");
        }else{
            System.out.println("Asshole! You failed!");
        }
    }
}

Java小練習(3)

這個程式需要作到電影分級制度檢查處理,輸出結果大致如下要求:
條件   輸出結果
-----------------------------------------------
年齡滿18       年齡 ? 歲、可觀賞限制級電影
年齡滿12未滿18  年齡 ? 歲、可觀賞輔導級電影
年齡6未滿12    年齡 ? 歲、可觀賞保護級電影
年齡未滿6      年齡 ? 歲、可觀賞普通級電影
-----------------------------------------------
//######source code starts ####################
import java.util.Scanner;

public class Lab3 {
   public static void main(String args[]){
       System.out.println("請輸入年齡以得知電影分級:");
       Scanner keyin = new Scanner(System.in);
       int age = keyin.nextInt();

       if (age < 6 ){            
          System.out.println("年齡"+age+", 可看普通級電影");        
       }else if(age < 12){            
          System.out.println("年齡"+age+", 可看保護級電影");        
       }else if(age < 18){            
          System.out.println("年齡"+age+", 可看輔導級電影");        
       }else{            
          System.out.println("年齡"+age+", 可看限制級電影");        
       }    
    }
} 
//###### end of code ###################

Java小練習(2)

某百貨公司舉行週年慶,給消費者的折扣為:購物金額小於2000元打九五折,購物金額滿2000元打九折,滿3000元打八五折,,滿4000元打八 折,滿5000元打七五折。 請撰寫一程式,輸入一購物金額,輸出打折後的需付金額。 看來用簡單的if else就可以解決。 //######## source code starts from here #################
import java.util.Scanner;

public class Lab2{
    public static void main(String args[]){
        System.out.println("請輸入購物金額");
        Scanner keyin = new Scanner(System.in);
        int charge = keyin.nextInt();

        if (charge < 2000){
            int fee = (int)(charge*0.95);
            System.out.println("你的金額是:"+charge+",打折後為 "+fee);
        }else if(charge <3000){
            int fee = (int)(charge*0.9);
            System.out.println("你的金額是:"+charge+",打折後為 "+fee);
        }else if(charge < 4000){
            int fee = (int)(charge*0.85);
            System.out.println("你的金額是:"+charge+",打折後為 "+fee);
        }else if(charge < 5000){
            int fee = (int)(charge*0.8);
            System.out.println("你的金額是:"+charge+",打折後為 "+fee);
        }else{
            int fee = (int)(charge*0.75);
            System.out.println("你的金額是:"+charge+",打折後為 "+fee);
        }

    }
}
//######### source code ends #########################

Java小練習(1)

1. 請設計一程式分別可以接受使用者輸入「國文、英文、數學」分數後, 將總分及平均顯示出來。 //######### source code starts from here #################
import java.util.Scanner;
//因為需要接收使用者輸入,因此因此import  java.util.Scanner這個套件。

public class Lab{
   public static void main(String args[]){
       Scanner keyin = new Scanner(System.in);

       System.out.println("score of chinese");
       float chi = keyin.nextFloat();

       System.out.println("score of English");
       float eng = keyin.nextFloat();

       System.out.println("score of Math");
       float math = keyin.nextFloat();

       float sum = (float)chi+eng+math;
       float avg = sum/3.0F;
       System.out.println("Yor score is "+sum+" and the avg is "+avg);
       System.out.print("this semester is :");
       System.out.println(avg>=60? "Passed!" : "Failed!");
       //二擇一的情況可以不需要用到if/else敘述
   }
}
//##### source code ends ###############

2009年1月13日 星期二

另一個心情

今天算是教書生涯的最後一天了,我的責任也即將完成。 很少人能像我這麼幸運,再如此嚴苛的環境下,能夠毫無空檔的接下另一份工作;雖然薪水蠻低的,不過這個世代,能夠有一份穩定的工作已經是非常寶貴的事情了!我很珍惜,也很感恩。 最近正在尋尋覓覓適合我考雅思的補習班。說真的補出國留學的費用跟電腦認證比起來差不多,不過電腦認證可是可以重複聽一年或三年,而英語認證可是只能上一次而已!所以說起來,還算是蠻貴的。對於目前收入微薄的我,這些錢可真是花得捉襟見肘!申請學校也不是那麼容易,也沒有把握自己是否能通過這層層的關卡,有點茫然。 不過,人生最低朝的時候早就過了。沒有任何一件事情能夠比得上監獄生活的痛苦窒息感,脫離了那人間煉獄,我其實一直都感覺到還蠻快樂的。 最另我欣慰的是學生的熱情!現在我至少了解我在學生心目中的地位是如何,最起碼我是自己心目中的好老師,這樣便以足夠!而且跟學生的互動裡,我得到很多快樂,彷彿自己也年輕了起來!雖然我一直希望能交給他們書本上或是課外的知識,不過很顯然他們不是那種喜歡求知的學生;我也一直在這學期找出自己應該如何定位。原來「只要快樂,不要上課」,才是他們心中的渴望... 真希望能陪伴這些可愛的學生長大!雖然有很多同學真的很不乖,行為舉止也令人搖搖頭;不過大概是因為我年紀也大了,也看過社會上真正的敗類,我反而覺得這些孩子都只是年輕調皮罷了!雖然,他們這樣下去很可能會變成社會敗類... 加油!拿一張SCJP!接下來是CCNA!接下來就是IELTS 6.5分!