2008年12月31日星期三

ssh遠程控制

這裏這裏講了怎麼用ssh免密碼登入
裝了sshfs的話可以以FUSE的方式掛載到某個目錄上
命令方式:
sshfs user@host:/ /path/to/mount

也可以寫在/etc/fstab裏,但要設定免密碼輸入,否則無法掛載
sshfs#fong@JuPiTer-Atom:/ /media/Atom fuse defaults,user 0 0


sshfs和NFS比較起來,sshfs可以直接把/掛載了,這樣就能讀取server裏的所有文件
但權限是登入時的user,而且不完全支援Linux的文件系統的所有特性,還有速度比較慢(因為加密了)
NFS速度快,掛載以後和本地的分區基本上沒有分別
但安全性沒sshfs好,始終沒有加密
而且不能跨分區,掛了/也不能訪問其他分區

所以我的Atom主機同時用了兩種方案
存放下載檔案的分區用NFS掛載,只對特定電腦可讀寫,其餘只讀
/用sshfs掛載,用普通使用者登入
順帶一提,正在用deluge拖BT和amule掛騾仔
………………………………
我覺得openssh真的很好用,特別是server(不知道BSD是否一樣?)
由於我的Atom機器沒有接顯示器,也沒有必要
所以X server也是沒必要運行的
但我需要跑GUI的程式,所以有安裝X11(浪費了我好多空間T.T)
用ssh -Y一樣可以運行GUI的程式,server端沒必要跑X
ssh會forward過來的,真的很好用
-X和-Y的分別是X有加密而Y沒有加密
-Y可以執行更多的程式,因為不是所有程式都支援加密

現在我的Atom機器只需要運行deluged和amuled
我可以在平時工作用的電腦用ssh登入啟動deluge和amule的GUI,正常的控制它們
真的很方便~

2008年12月29日星期一

Atom準備中


7號在香港買的Atom主機
擺到今天才開始安裝系統囧
因為星期四才買了新的HDD,為現在用的電腦更換新HDD
轉移資料到昨天才完成
一開始因為想試用ext4,所以拖了兩天。然後星期六不在家
到昨天用ext3格式,半天就搞定了
今天一早起床就開始安裝系統

由於我計劃用Gentoo,需要事先搜集一下Atom的資料和準備一個用來安裝系統的OS
我用的是Prayaya LXDE版,裝在USB上
本身沒有帶ssh,我又沒有多餘的顯示器
在Prayaya上安裝ssh又用了半天(因為apt update花了兩個小時,而且那個audacious的依賴有問題囧)

到吃晚飯的時候才開始編譯內核
現在安裝必需的軟件中………………………………
其實這台Atom主機計劃用來掛機下載的
主要是拖BT和養騾
我給它配備的是舊的250G HDD
應該夠用的了


新買的WD 640G 黑版HDD
性能比舊的那個番了一倍~

2008年12月25日星期四

首届澳門國際動漫節

剛剛從漁人碼頭回來,剛好讓我趕上最後一班巴士

話說剛剛的動漫節,下川的一小時mini concert十分讚~
畢竟是我人生中第一次真真正正的看concert
以前不是沒去過,但總是看一半就走或者睡着了囧
可能本身一小時不算太長,加上站着看
比較集中(雖然我看到一半就在發夢。。。)
………………………………
可惜下川小姐的人氣始終不足
在現場有某人十分熱情的Fans,卻把她的Album「392」寫成『352』
其實她的第一隻和第二隻Album分別是「39」和「392」
因為39的日文發音和英文thank you很相似
我估計那個人都知道的,可能不小心寫錯了吧?
我見他後來都改回392

更可惜的是,下川小姐可能因為舟車勞頓(又可能是吃得太多囧)
喉嚨不太好,高音部分經常唱不到,失聲了
開場之前的彩排已經如此
真的希望她可以好好保護她的聲音,很期待她來澳門或者澳門附近再開mini concert呢~

至於這個動漫節其他的部份
因為太X了
無言以對

2008年12月24日星期三

IPSC

昨天第一次上槍會試玩
感覺果然很爽
不過IPSC的規則很多,而且有幾點我很容易就犯錯
首先槍嘴只可以指着正前方,不能超過上、下、左、右90度。這個雖然我未試過,但我認為換彈匣和跑的時候很容易犯錯
第二是食指只可以在開槍的時候才能放在扳機上,這個我經常錯囧,要練多點

第一次上去打,成績還慘不忍睹呢囧
最快的只要12秒,但我用了38秒。雖然分數一樣
但最終成績是分數除以時間囧

現在打算先練好拔槍和跑的動作,換彈匣就等練熟之後再算

2008年12月17日星期三

Gentoo 的部份問題解決

今天花了一個下午的時間,終於把一些問題解決了
首先是Compiz Fusion
其實一直都能用,只是我不知道要用compiz-manager啟動,而不是以前用的compiz --replace
特效回來了就覺得Gentoo很爽,還裝了cairo-dock

之後是rmvb的問題(見這裏
由於realplayer的開發團體很混亂(post裏講的)
所以Gentoo決定以安全理由block了real這個use
並且同時block掉w32codecs、amd64codecs和realcodecs
結果是不能播放rmvb了T.T
查了半天,現在除了realplayer之外沒有替代品
只好照着froum裏做,unmask了amd64和real use
mkdir -p /etc/portage/profile
echo media-libs/amd64codecs >> /etc/portage/package.unmask
echo media-libs/amd64codecs >> /etc/portage/package.keywords
echo media-video/mplayer -real >> /etc/portage/profile/package.use.mask


重新compile mplayer就可以播放rmvb了
接着要搞的是amarok 2.0,不過在portage裏只有media-sound/amarok-1.90-r1可用
2.0被mask了囧

2008年12月16日星期二

戰積彪炳

有用的東西當然要把它用得很舊,不然十年後拿出來還是新的一樣
它真的有用過麼?

2008年12月14日星期日

超強EeePC

病好了一點,於是上網看看新聞
赫然發現這個超強勁的EeePC
居然帶了張「ATI Radeon HD 3400 系列 256MB」獨立顯卡
還有HDMI輸出,簡直就是一台完美的HTPC
又省電、又可以播高清加上體積細小
B204甚至有「内置电池具有 U.P.S 功能」雖然停電是電視應該開不了,上網多數也不行的了
除了價錢問題外,買回來做HTPC兼掛BT真夠吸引


無奈我已經買了塊Atom板囧
當然價錢比EeePC有壓倒性的優勢,就是耗電量可能比較大
反正都出手了,EeePC就望望算了

2008年12月9日星期二

Atome騾仔機

前兩天在香港買的Atom主板+機箱砌好了
型號是Gigabyte GA-GC230D + in win BM Series Mini-ITX機箱
大小比想像中大得多
希望耗電量不會一樣多吧
主板的CPU沒有散熱風扇,但北橋有
再加上機箱上面的風扇,估計噪音是免不了的啦
只好把它丢在某個角落

這塊Atom板連CPU是Gigabyte出品
找篇全場也只有這塊,Intel的之前見過但消失了
Inte 945GC + ICH7 chip set
945似乎是NoteBook平台用的,但RAM是用PC的
但有HD Audio和一條PCI插槽,再加上全固態電容,這是比較特別的
關於北橋上的風扇,我在雜誌上看過。
如果拔掉電源的話電腦內部的整能温度會上升到系統無法正常工作的水平
不過機箱內也設有風扇,停用北橋風扇應該有可能的。我希望可以最大限度的減低噪音

現在主機是砌好了,但我還未啟動過
因為我感冒了
發冷和喉嚨痛,還有點低燒
要休息一下
其他事就等我回復過來再說

2008年12月8日星期一

超便宜的顯示器

今天過了香港一遊
我的目的其實是Atom騾仔機
不過剛好遇上深水埗電腦節,人山人海囧
買的時候超級辛苦!

但發現了超多售價極低的貨品
中間有沒有甚麼騙人的手段我就不得而知
但我買東西從來都不貪小便宜的,它那個價錢連成本的一半都沒有
我實在是不敢買
當中顯示器,19” $699 22" $1199
真的很嚇人
上個月聽說顯示器的面板要換成16:9的
原因是上游生產面板的廠商更換生產線
以前用來生產LCD TV的舊生產線現在用來生產LCD Display
可能那些商家就趁電腦節一口氣清倉

除了顯示器還有人做「買大送細」的優惠
買一部8999的富士通一體化電腦送Aspire One
真的很可怕,本身8999的價錢已經很恐怖了
再送你Aspire One
實情如何真的要等電腦節結東後問問買了的人

2008年12月5日星期五

Google Reader改版了


今天打看Google Reader一看
發現改版了
好像之前就聽過別人說會改版
可能和Gmail一樣隨機的吧?
改版以後可以把左上角那些好友分享項收起來
版面更加簡潔

2008年12月1日星期一

GTA4

想不到今天有GTA 4的clone版種子了
不過這時候又有一堆人講甚麼E6600 + 8600GT都只有10 FPS
往往一些大作出的時候都總在說甚麼甚麼配置也不能玩,要超高級的電腦才跑得動
到游戲出來以後還不是照樣的玩
怕甚麼?

迷你USB

想不到Buffalo出了隻迷你版USB Flash Disk
大小就像之前ASUS為EeePC推出的藍芽

Via

2008年11月29日星期六

Gentoo Wireless

因為換了新書枱,電腦離電話線太遠了
所以就買多張無線網卡,全屋都用無線上網
初初有點擔心Linux對一般PC用的無線網卡支援不好
上網查了一下,貌似Buffalo的網卡可以用
正好我這裏只有Buffalo、ASUS和TP-LINK的,所以就買了張Buffalo WLI-U2-KG54L-AP
外瞉上寫着Air Station Wireless-G
其實就是幾年前的G54型號,和我老媽現在用的幾乎一模一樣
可能裏面的芯片換了吧

安裝過程其實很簡單,不過我上網查了不少東西
首先在UbuntuForum裏確認Linux對這張網卡的支援
需要的是zd1211rw這個模塊,自己重新編譯內核,加上那個模槐(需要先選上macxxx那個)
再安裝portage裏的zd1211-firmware
然後重啟,修改/etc/conf.d/net
modules=( "wpa_supplicant" )
wpa_supplicant_wlan0="-Dwext"
wpa_timeout_wlan0=15

編輯/etc/wpa_supplicant/wpa_supplicant.conf
# The below line not be changed otherwise we refuse to work
ctrl_interface=/var/run/wpa_supplicant
# Ensure that only root can read the WPA configuration
ctrl_interface_group=0
# Let wpa_supplicant take care of scanning and AP selection
ap_scan=1
network={
ssid="BUF_AS_2000"
psk="http=ToKyo-JuPiTer.Blogspot.com"
priority=5
}

在開機時啟動net.wlan0就搞定了

不過我重啟後試試好像還有些問題
重啟後一開始認不到網卡,要把它拔出來再插一次才認出來
我見portage裏有zd1211 driver,不過被masked
我也不管那麼多了,能用就算

2008年11月25日星期二

用滑鼠編程

今天上課時,無意中聽到有人說
自己一早就不用鍵盤編程,要甚麼code都有現成的
用滑鼠選了複制-貼上就搞定

我想討論的並不是那個人
而是一大部份人
事實上我不是第一次見到有人copy&past
一早就聽聞過那些「網絡達人」說自己是怎麼在網上找code
他們無論面對甚麼問題,都總能很神奇的找到適用的code
當然需要加工一下的
但無容置疑的是他們的code是copy的
而且這裏做的人還不少
某程度來說,一個programmer應該要懂得去哪裏能找到需要的code抄
而不是怎樣寫程式
所以對他們來說,大學甚麼的都只是為了一張證書

此時此刻,我想起了學美的世界
人人都只顧着怎麼去賺錢,眼裏除了錢以外就再也沒有其他
我只能說『他們失去了很多的樂趣』
真是可悲

2008年11月24日星期一

新家俱

上個月北上買了一張新床和一張新書枱
星期二就會送過來
但老媽子發神經昨天就把我的房間清空了囧
結果整天都被她罵過『狗血淋頭』
想找片刻的安靜就只可以離開家裏

其實星期六就已經開始把房間內的東西搬出來
因為床和書枱都要換掉,大衣櫃也要搬去另一個位置
所以整間房間內的東西都要搬出來
清空以後突然發現,原來我的房間面積真大
再看看堆滿整個客廳的雜物,感嘆一下
現在,在我的房間內講話還能聽到回音呢!
………………………………
當然房間清空了,意味着床也沒有了
所以我這兩間都是直接睡在地板,當然很不舒服
床都沒了書枱又怎能幸免
所以工作的地方也變成飯廳
無論工作或是睡覺時,總有「流浪」的感覺
總是覺得這個不是我的家,又或者很想離開這裏
原因應該不是我的房間變了樣,大概是因為老媽子的音波功吧

現在家中的狀況是一個非常特別的狀態
因為我的房間內所有東西都搬到去客廳裏暫時擺放
所以客廳異常混亂
而我的房間就空無一物

在這個十年未曾試過的特殊狀況,我當然用相機拍下來
可是現在看這台DC拍出來的照片都模糊的
和sharp差太遠了
縮小看還行,在電腦裏放大看就太差了
令到我現在很想買一台單反玩

BTW
打標題時想起廣東話有「家俬」二字
於是就上網查一下正字是甚麼
發現原來「家私」在古代已經有家產的意思,可以指家裏面的財產(包括家俱)
而「家俬」可能是近代才出現的俗字,「私」這個字在古代是沒有的。
「家俬」在近代就是專指家俱
當然「家私」!=「家俬」
而正字是甚麼我也不清濋,那就干脆寫「家俱」好了

++++++++++++++++++++++++++
實際上新床送來是星期三
送貨的說負責安裝的師博太忙,他們只是送貨的
裝是在澳門另外請人
所以星期二送到也沒人幫手裝
結果又要睡多一晚囧rz

2008年11月19日星期三

Nicole

今天在澳大見到有個女生
剛好聽到有人叫她Nicole
我第一時間就想起Dead Space
(因為爆機後那個畫面實在被嚇一跳)

回想起來
Nico是不是真的掛掉還是有可疑
看到的只有她打針的影像
並沒有確實的證據說她掛了
如果我沒看前傳的話
我真的會認為The Marker是邪惡的東西
因為Kendra說那是人工造出來的,是它令到最終Boss Hive Mind誔生
我總覺得The Marker不是用來封印Hive Mind
反而是解放它的力量
雖然這樣想很奇怪,明明挖它出來之前沒有那些怪物的
前傳也表明了它只是制造出幻覺
但最後打Hive Mind時,它居然在The Marker快要搬走時才出現
如果The Marker真的是用來封印它的話,應該在主角的飛船一降落就出現呀
為甚麼要等Kendra快要把The Marker搬走時才出場
Kendra把The Marker搬走了不時對Hive Mind更好麼?

我唯一能想到的解釋是
The Marker是有智慧的,知道那個女人也要奸計得逞
所以一口氣解放所有封印,釋出Hive Mind'

順便講下那段小插曲
第9章有一首前來救援的武裝飛船,劇情裏說它只被一首救生艇就搞定了
而且好像一早就守在石村號附近
一早守在石村號附近好易解釋,因為他們是Kendra的back up
只派一個女人就想把The Marker從這個恐怖的Dead Space裏奪走The Marker
政府會這麼天真嗎?
至於被為甚麼輕易就被攻陷,估計是因為前傳時發射出去的那些救生艇。。。。。
我肯定裏面有些甚麼,空空如也的發射出去干麻
不過那又是誰發射的呢?

回到Nicole的詸團上
假定她是幕後黑手,而且有能力控操那些怪物的話。。。。。
甚至她本身就不是人類
游戲裏的很多疑問都能很好的解釋
因為The Marker造出來的幻覺也太真實了吧
好明顯有能力操作電子儀器,這樣太不可思義了吧?
就算是能力有限,不是甚麼都能做
那發射救生艇目的是甚麼?

想到這裏
我突然有個想法
Kendra說The Marker裏面包含着Hive Mind
或者它裏面本身就有不止一隻怪物
神和鬼都是它的話,一樣能解釋那些問題
最後因為Kendra快要帶走The Marker
所以發難跑出來
因為The Marker本身的行為都有點予盾
它有能力操控電子儀器,力量足以阻止石村號離開
(在前傳中它令石村號的引撆都關了,當然這可以用幻覺操控人來實現)
它放出來的幻覺會令人自殺,卻又叫人封印那些怪物
或許它一直都是奸的
因為船上那些怪物太癈殺不死主角,見他快要跑掉了
就騙他回去星球上用最強的Hive Mind干掉他囧

TVB 41週年

今日台慶
當然我只對上面的女人有興趣
但最重要的一件事
J2之前說要播路魯修但放出了idolMaster的片段
之後說要播idolMaster
但現在消失了
完全沒有消息
難道不播了?
實在是太傷心T.T

2008年11月17日星期一

新滑鼠 Logitech G7


昨天買了隻新Mouse
Logitech G7
買的時候還見到G9
不過我想要隻無線的,而且G7比較平宜(可能因為很舊了)
G7雖然舊一點,但差的就只是那個「MicroGear」
雖然那個滑輪好像很吸引,但玩游戲的話那個滑鼠用處不太

G7用離電池,也有預設三段CPI和電量顯示
預設的三段DPI我覺得已經很夠用了
買的時候還有兩塊離電池給你,基本上可以無間斷地用這隻Mouse
一塊用完就用另一塊,沒電的可以直撞插在桌面上的充電器充電
G7的手感我覺得還OK
最重要的是價錢580
我不知道那家是不是黑店,但找遍澳門就只知道它有得賣
G9差不多一千元囧,貴太多了
G7算了

2008年11月15日星期六

Dead Space


昨天把Dead Space完成了
打完最後Boss後坐飛船走時,居然被那隻鬼魂嚇了一跳囧
明明玩的時候都沒怎麼被嚇過的麻
因為有怪物的時候背景音樂都會變了,所以通常都能提早發現怪物

爆機以後覺得這隻游戲確實不錯
絕對是不能錯過的
雖然瞄凖時有緩遲,虐殺怪物時有點不爽
但習慣了還可以,反正怪物都很差。除了那些討厭的BB怪會射火箭之外,都沒甚麼難打的怪
跑得快的那些怪只會直線跑囧
而且一槍就能打停它
游戲裏的迷題也不算太難,動動腦就能過關
所以我也沒怎麼看攻略

這隻游戲的重點是在劇情上
實在太讚了!
我是先看了前傳動畫再玩游戲的
所以對The Marker和石村號上發生的事已有一定的了解
但我對The Marker的作用還是不太明白
因為游戲裏沒具體的講,只是說它會產生那些怪物和最終Boss Hive Mind
但The Marker是否真的像前傳裏講的那樣,用來鎮壓那些怪物、封印着Hive Mind?
游戲裏對Hive Mind的介紹也只有Kyne的資料
還有很多伏筆沒有交待的,所以Dead Space 2估計也不遠了

對於那些不太重要的伏筆,我不怎麼理會
例如前傳的那些人、那些跑龍套的配角
重點當然是放在主角身上
主角的女友Nico也是比較神秘的,至少都講講她和主角是怎麼認識的吧
主角見到的Nico是The Marker制造出來的幻覺,不能反影出Nico的性格
因為我沒有收集齊所有Log,有可能關於Nico的Log收了在某個隱藏的地方吧?
主角Isaac的背景也沒怎麼交待(但網上見到很多人都很清濋他的?難道又是某個隱藏的Log?)

2008年10月23日星期四

以後站着上網

Via
一直都知道坐着太長時間不活動,對身體不好
但想不到站着都能減少脂肪。。。。。。
或者我應該買隻Wiimote當滑鼠用,在客廳用電視站着上網囧
不過打字該怎麼辦?

2008年10月15日星期三

初嘗Gentoo

其實我一直都聽說過Gentoo,第一印像是『超級的難用』
另外就是一切基於源碼,整個系統都是自己編譯的

上星期買了兩條1G ram
因為原來的系統只能認出2G,就重新裝個64bit的Gentoo

安裝時遇到的問題非一般的少
我Google了無數次,上IRC上問人
把Gentoo手册看完又看,才勉強搞定了
首先講講安裝時遇到的問題︰
………………………………
我擇的是amd64版本,其實不同的只是Portage和Stage3
因為其餘的都是編譯出來的,就繹譯內核時的選項分別最大
因為Gentoo可以用USE來設定編譯套件時的選項,所以這個USE比較要注意
Global USE在/etc/make.conf裏
個別的設定就在/etc/portage/package.use下面
make.conf裏的CFLAGS不能用march選項,我也不知道為甚麼
march是用來優化編譯的,反正gcc現在默認是根據我的CPU(遲點i7出來我就要好好的研究研究啦)

第一次安裝完後遇上網卡驅動問題,需要自己在內核裏選擇正確的驅
就在1000M裏面,很容易的
其他硬件也一樣

安裝Nvidia驅動也有問題,裝好後無法啟動X
必需要用eselect,具體就看Gentoo的文檔吧

Compiz、emerald無法啟動 ! (X11lib要xcb use;Metacity要關閉特效;問題尚未解決)
you can get compiz-fusion-0.7.8 from the desktop-effects overlay
這個問題我還未解決,只知道最新的compiz-fusion在desktop-effects overlay裏
overlay要用layman來加入
這些overlay都是用來擺一些還在測試的套件(其實就是套件太多,所以把support分去其他地方)
(還有個gnomeoverlay,裏面才有gnome-2.24)

安裝compiz時還遇到python2.4 need to update(using python-updater)
因為系統裏一些套件用到python 2.5,但另一些同時用到python2.4
update一下就好了,當中應該會遇到某些套件被mass了
在/etc/portage/package.keyword裏加入它們再重新安裝它們,然後繼續update

Gnome nautilus 無法打看jpg,同時沒有預覧(Gpicview:無法識別圖片檔‘...’的圖片格式)加入global use:jpeg
Gnome音量控制無法啟動(找不到音量控制 GStreamer 外掛程式或裝置。)加入global use:gstreamer
這兩個問題在於USE,所以global use的設置要很小心
你加得太多的話就會安裝非常多的東西,太少又沒了很多功能
現在nautilus的預覧還是有點問題,影片沒有預覧

cups(無法用gnome的GUI安裝打印機,打印機只能用300dpi列印彩色,600dpi只能列印黑白)
bluetooth(需要安裝fuse才能用obexfs。順便安裝ssh和sshfs)
bluetooth就沒啥問題的,重點是gnome-2.22裏的bluez-gnome太舊了,根本沒法用
可能需要升級2.24
cups不能使用600dpi
印字就OK,圖片實在差得慘不忍睹
我的Printer是HP Deskjet 810C,五六年前的了
可能是我的Printer太舊,驅動有問題吧
該不會是cups的驅動比我還要舊吧囧

這些問題雖然還未完全解決
但差的就只是Compiz-fusion
我正在嘗試加入opengl global use,或者差的就是這個

雖然我安裝Gentoo時,足足辛苦了一個星期
不停的解決問題
但這個代價絕對值得
一來我更了解這個系統是怎麼運作的
二來性能提升了很多
之前用甚麼都要等待一下,現在執行program完全不用等
以前要等得長時間的操作(例如用nautilus打開一個很多文件的資料夾)
現在等一下就好了
最主要的還是Firefox
加了custom-optimization use重新編譯,速度提升了不止一個數量級
完全不會死機(某程度上是因為沒了Flash Player)
一個視窗開十多個分頁,速度照樣飛快
內存就耗了不了
我總共4G ram
足足用了1.7GB,三個視窗共三十多個分頁
打開htop看看,有九個firefox-bin進程,每個耗了14XXM內存
14XX除8再乘9,起碼1.5GB吧

安裝wine,以前運得程式要等N久,現在一開就搞定(當然原因是字體蔄題)
總之體驗很好
可惜到現在,我基本上只安裝了Gnome、Firefox和deluge
己經吃了5.1GB硬盤空間
但換來的性能提升,值得!

++++++++++++++++++++++++++
在Gentoo的Wiki裏找到cleanup的方法
把/var/tmp/portage/*清掉
這裏的檔案超巨大,我的有足足5GB。都是安裝時編譯用的源碼和編譯後的檔案,有時不會被干掉的
還有/usr/portage/distfiles/*
裏面都是源碼,編譯後基本沒用。我的有1.4GB
干掉這兩個之後就3.7GB,不算太大~
Good~

PS.
今天去換身份證
印手指紋時,那個人足足換了4張紙
不停捉着我的手狂印囧
印了無數次,我見她的樣子像快要吐血似的
雖然我手汗比較多,也想不到印指紋如此艱難。。。。
換了四張紙之後,她終於屈服了
直接印完全張紙就叫我走人

2008年10月14日星期二

OpenOffice.org 3.0

http://www.openoffice.org/
3.0 release後官網居然Crash了,因為下載量太大
真搞笑~
Apologies - our website is struggling to cope with the unprecedented
demand for the new release 3.0 of OpenOffice.org. The technical teams are
trying to come up with a solution.

Thank you for your patience.

2008年10月8日星期三

新KeyBoard



昨天出去打算買隻無線Mouse的,但價格超出了我的預算
見到有隻超薄的鍵盤,看很去上有型
於是就用180元拿回家

這隻鍵盤的按鍵像MacBook似的,每一個鍵都分隔很遠
即使按下去時偏離了原來的鍵,也不容易按到其他鍵
缺點是鍵太硬了,不像MacBook的
軟一點就好了

PS.
剛剛在學校下載軟件,居然有1.1MB/s的速度!

2008年10月3日星期五

VIA Nano登場

Via
初初一見到評測,第一個想法就是
「等了這麼久,終於有實物了!」
但看完評測之後,就是失望

功能耗比Atom高,性能只比Atom好一點點
那我倒不如一早買C7
當時去香港就見到有C7-M,主板連U連機箱火牛才699
這樣一千多就搞定了
當時又有錢,但心想Nano可能更好
於是決定再等,Nano出來了再算,又或者等雙核Atom
因為現在Atom還不是很省電

現在我超級後悔,早買早享受麻
如果當時買了C7,HDD和RAM回來澳門再買
現在已經超級爽了!

所以我見到這個LG的NetBook發佈,也沒覺得笨
現在天天拿回學校用,又輕又方便。
不像別人的又大又笨重,絕對值得!

2008年9月30日星期二

會踩單車的機械人

Via
這兩隻可愛的機械人會踩單車的呢~

剛剛看新聞
上海也可以在地鐵站租單車使用,首三十分鐘免費、廿十四小時不超過六十元
價錢還算可以吧
不知道其他城市何時實行?

北京市也建立了首個大型風力發電場
可能很少人知道,這些看似很環保的發電方式,對大自然的破壞比燒煤更甚
水力發電,建造大霸對環境的破壞一看便知道。四川大地震的元兇也可能是四川的水電站
利用水力發電本身就會改變河流的生態環境
風力發電,用風本來沒甚麼問題。但發電機組本身就會污染環境,發電機內的潤滑油會污染水源
地熱發電,會破壞熱循環。一樣會改變生態環境,污染地下水
利用海底的高速暗流,破壞了海水的冷暖流循環。一樣不行
事實上除了核能太陽能以外,真正綠色的能源幾乎沒有

2008年9月23日星期二

暑假後的大二校園生活

老實說,澳大的校園生活一點也不好
加上在和尚寺裏面
想不成為一個宅男也不行

班上只有一大群『獨男』,找他們介紹些女生認識
自己又太差囧
想認識新朋友,但身邊卻有很多討厭的人
………………………………
那些討厭的人,來來去去都是那些
喜歡『認叻』的人
明明自己不懂,硬要裝着甚麼都會
『吹水』,無所謂
『認叻』才是最討厭!
和那些人說話實在受不了,說不到兩句就在扯
你揭穿他反需罵你,說你甚麼都不知道
實在是討厭!

應付這些人的方法,基本沒有
只有遠離他們
因為時間長了自已反而會受影響
整天都在想這些的話結果只會想壞腦

無奈的是我每天都在想這些,因為身邊實在太多這些人
以前只在網絡上見到,真正在身邊的只有很白痴的
但現在卻出現網絡的『真人版』
本來網絡上的都夠難受了,手段就是block和離線
但真人的不同,你怎麼避始終都要面對他們的
總會有交談的時候
不出兩句就在扯,真叫人難受

幸運的是,還是有正常一點的人在
實在受不了還可以去找其他人一吐不快
最近日本要建造Gundam00裏的軌道升降機
可以把外太空的太陽能傳輸回地球
(其實多年前日本已有這打算,研究用在外太空利用太陽能發電;因為陽光在大氣層外的強度比地面高很多
然後用無線方式送回地面,只是那個「無線」的方法是超高能激光
變相是建造出「無敵激光炮」囧)
我在想,現在跑去啊庫汗或許能混個主角來做囧

2008年9月22日星期一

試行安裝ArchLinux在USB stick

上星期買了隻8GB的USB Flash Disk,打算把Linux安在上面
是安裝一個正常的Linux,並不是Live版
剛開始時,就在安裝過程預到困難
因為在root是在USB上,內核啟動是要先檢測了USB才可以掛載root
Arch的話就在安裝過程中的硬件檢測;會問你是否需要在USB啟動
答是
或者自行在/etc/mkinitcpio.conf裏面的hooks加入usb(要在filesystems之前)

這樣才可以啟動系統
剛開始啟動了系統也沒甚麼問題的
但安裝完Gnome、nvidia驅動、compiz和一些常用的程式後
開機看看
果然I/O Erroe
再研究下,只要在root進行寫入動作
整個分區就會crash
在ttl下看,說XFS internal error xfs_trans_cancle

研究了幾天,暫時還不知道原因
遲點再解決

prism的下載目錄

因為prism裏下載東西直接就丢在桌面上
我不是太喜歡
研究了一下,prism和firefox差不多的
在~/.prism裏有些目錄,分別對應各個不同的「程序」
目錄裏面的目錄是profile,結构和firefox也差不多
prism的profile目錄裏有個prefs.js
在裏面加句
user_pref("browser.download.dir", "/home/fong/Downloads");

這是更改下載的地方

2008年9月10日星期三

安裝OpenOffice

這個OOo的塊頭還真不小呀
先裝個jre就100MB
然後主體再耗你個260MB
加起來就差不多沒了四百MB啊!

2008年9月3日星期三

KDEmod 和 gcin

初初我也不知道是甚麼事
插着電源在KDEmod裏啟動gcin整個KDE會死掉
但我把.profile裏這兩個去掉
export GTK_IM_MODULE=gcin
export QT_IM_MODULE=gcin
變成這樣
export XMODIFIERS=@im=gcin
#export GTK_IM_MODULE=gcin
#export QT_IM_MODULE=gcin

又OK了

2008年8月26日星期二

OO新機發佈




今期Hobby發佈了OO的新機
四台新高達全部登場,特徵和舊機一樣
基本上就是四台舊機的加強版
四位Gundam Mister全員生還()

官網也有圖了,不過裏面的圖看上去都很丑囧

Via

完全変形サイバスタ

看看這個
一隻Cybaster,可以全完變形而且造型不錯
再看看那售價
86100円
萬多元的天價囧
我還是看看好了

2008年8月25日星期一

Nvidia的驅動非常差!?

其實我使用firefox和Qt的程式時經常都得慢
例如Amarok會Lag
Firefox打開很多圖片的網頁等等
我一直以為是它們本身的問題,誰不知原來我一直都怪錯了它們
元兇竟然是Nvidia的驅動!

時移世逆啊
目前AMD的顯卡比Nvidia的性價比更高,驅動也更好
(N卡還有之前次貨的問題呢)

Via

2008年8月23日星期六

Lenovo IdeaPad U8


我一直都在想,如果PSP能安裝一個標準的Linux就好了
因為PS3也可以
………………………………
為甚麼我會這樣想呢?
很簡單,我經常拿着PSP四處跑
大部份時間當然是用來玩游戲,也有不少時間是用來看片
其餘時間都是用來上網
可是PSP有不少缺撼,但這些都應該可以解決的
首先是播片,明明有能力處理720p的影片
雖然要轉換一下格式才可以,但AVC+AAC的720p影片即使在電腦上播也是高清的級數
以這樣格式收藏並無不可
加上PSP-2000可以連接電視,有一定能力成為一台流動播放器
問題是出在PSP本身的軟件,硬件有能力加速解碼
但軟件卻限制了可以播放的影片,需要用第三方軟件!
要知道原生支持和透過Hack支持便利程度差很遠的呢!
還好這個問題容易解決

最要命的是那個瀏覽器
我的E65 CPU比PSP差一點,內存也小很多
瀏覽網頁比PSP好N倍呢!
PSP那個垃圾瀏覽器太差了,有一兩張圖的網頁就無法打開
又不能輸入中文,卻可以輸入日文
隨便做一個中文輸入法總比沒有好吧,又沒要求有多好,能輸入就可以了

所以我一直希望PSP能安裝一個標準的Linux
再多一兩個USB,可以接上Keyboard、Mouse
在Linux裏可以用PSP的硬件來加速解碼720p AVC+AAC影片
又可以很方便的瀏覽網頁,多好~

其實我知道MID差不多能達到這些要求
但MID播放影片的能力應該不太好,電池的使用時間也比PSP差的多吧
最重要的是MID的價錢都很嚇人囧
現在這台U8則解決了價錢的問題
不知道Nvidia的Terga能不能實現我的這些要求呢>?
Via

2008年8月17日星期日

Gundam 00 第二季 PV

井字過三關

今次寫這個井字過三關Program花了不少時間
用python+gtk寫的,可以和電腦對戰
不過電腦比較低能,很容易就能贏它
準備加入聯網對戰功能,雖然井字過三關對戰好像很白痴
………………………………
#! /usr/bin/env python
# -*- coding:UTF-8 -*-

# This is a simple XO game - tic tac toe
# Written by RAh-XePhON @ http://ToKyo-JuPiTer.Blogspot.com
# Version 1.0 @ 080719

import pygtk, gtk, gtk.glade
import pdb

### the glade XML resource
XML = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Sun Aug 17 14:58:58 2008 -->
<glade-interface>
<widget class="GtkWindow" id="window">
<property name="width_request">308</property>
<property name="height_request">364</property>
<property name="border_width">2</property>
<property name="resizable">False</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<signal name="destroy" handler="destroy"/>
<signal name="delete_event" handler="delete_event"/>
<child>
<widget class="GtkFixed" id="fixed1">
<property name="visible">True</property>
<child>
<widget class="GtkMenuBar" id="menubar1">
<property name="width_request">308</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="label" translatable="yes">檔案(_F)</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu1">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="imagemenuitem1">
<property name="visible">True</property>
<property name="label" translatable="yes">新游戲(_N)</property>
<property name="use_underline">True</property>
<signal name="activate" handler="new_game"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image1">
<property name="stock">gtk-new</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="imagemenuitem5">
<property name="visible">True</property>
<property name="label" translatable="yes">gtk-quit</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="destroy"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem3">
<property name="visible">True</property>
<property name="label" translatable="yes">設定(_V)</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu2">
<property name="visible">True</property>
<child>
<widget class="GtkCheckMenuItem" id="menuitem2">
<property name="visible">True</property>
<property name="label" translatable="yes">電腦先行</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<signal name="toggled" handler="comFirst"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem4">
<property name="visible">True</property>
<property name="label" translatable="yes">求助(_H)</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu3">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="imagemenuitem10">
<property name="visible">True</property>
<property name="label" translatable="yes">gtk-about</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkStatusbar" id="statusbar1">
<property name="width_request">308</property>
<property name="height_request">30</property>
<property name="visible">True</property>
<property name="spacing">2</property>
</widget>
<packing>
<property name="y">334</property>
</packing>
</child>
<child>
<widget class="GtkFixed" id="map">
<property name="width_request">308</property>
<property name="height_request">304</property>
<property name="visible">True</property>
</widget>
<packing>
<property name="y">30</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>'''

class Chess:
"""a chess"""
b = None # the corresponding button of the chess
p = "" # The Chess Value, this game should be cross or circle.

class Map:
"""this is the class to imitate chessboard and chess"""
com_first = True

def _chess(self):
"""get a new chess and save it into self.chess"""
if self.chess == 'X':
self.chess = 'O'
else:
self.chess = 'X'

def create_chessboard(self):
"""create an empty chessboard"""
print ">>>>>Start a NEW game~"
self._board = [] # the chessboard data
self.chess = ' ' # the player's chess
self.Winner = "" # the winner in this game
self.puts = 0 # count how many steps already put
for i in range(3):
l = []
for j in range(3):
l.append(Chess()) # create a column
self._board.append(l) # append whole column

def set_chess(self, x, y, chess):
"""set the position of chessboard to a particular chess"""
self._board[x][y].p = chess

def map_chess(self, x, y, P=None):
"""map the position of the chess to the corresponding object, or return the object in chessboard"""
if P:
self._board[x][y].b = P
else:
return self._board[x][y].b

def display(self):
"""print out the chessboard"""
for i in self._board:
print "|",
for j in i:
print j.p.ljust(1),
print "|"

def Put(self, position):
"""put a chess on a position"""
x = position[0]
y = position[1]
if not self._board[x][y].p:
self._chess() # get a new chess
self._board[x][y].p = self.chess
if self.Win():
print "Someone has already WIN!"
self.display()
self.puts += 1
return True
else:
return False

def Win(self):
"""check who win in this game
there has eight possible situation
00 01 02
10 11 12
20 21 22
00 10 20
01 11 21
02 12 22
00 11 22
02 11 20"""
x = y = 1
if self._board[x][y].p == self._board[x+1][y-1].p == self._board[x-1][y+1].p and self._board[x][y].p:
self.Winner = self._board[x][y].p
return True
elif self._board[x][y].p == self._board[x-1][y-1].p == self._board[x+1][y+1].p and self._board[x][y].p:
self.Winner = self._board[x][y].p
return True
x = y = 0
for i in range(3):
if self._board[x][y].p == self._board[x][y+1].p == self._board[x][y+2].p and self._board[x][y].p:
self.Winner = self._board[x][y].p
return True
elif self._board[y][x].p == self._board[y+1][x].p == self._board[y+2][x].p and self._board[y][x].p:
self.Winner = self._board[y][x].p
return True
x += 1
return False

class Computer(Map):
"""This class is imitate player think and put the chess by computer """
_board_in = [] # the chess board in computer's mind
com_chess = [] # the chess which computer should be put

def create_chessboard(self):
"""create a new chessboard"""
Map.create_chessboard(self)
if (self.com_first):
Map.Put(self, [1, 1])

def _display(self):
for i in self._board_in:
print "|",
for j in i:
print j.ljust(1),
print "|"

def Put(self, position):
"""reload Put function, let computer put the chess"""
# spectial for the GUI
if Map.Put(self, position):
# check play has already win or not
self.com_chess = []
if not self.Winner:
# analyzing that which position should be put a chess
self.com_chess = self.canPut()
self.player_win() # check that player will win in the next step
self.com_win() # check that computer will win in the next step
if self.com_chess:
Map.Put(self, self.com_chess)
return True
else:
return False

def player_win(self):
"""check is play will win in next round, if yes computer should avoid it"""
found = False
for i in range(3):
for j in range(3):
self._cp_board() # first copy the chessboard into computer's mind
pos = self.check_win("O", i, j) # and then check win to get the position which should be put
if not found and pos:
found = True
print "Found a possible put"
self._display()
print "%d, %d -----------------------------" % (i, j)
self.com_chess = [i, j]

def com_win(self):
"""check is play will win in next round, if yes computer should avoid it"""
found = False
for i in range(3):
for j in range(3):
self._cp_board() # first copy the chessboard into computer's mind
pos = self.check_win("X", i, j) # and then check win to get the position which should be put
if not found and pos:
found = True
print "Found a possible win put"
self._display()
print "%d, %d -----------------------------" % (i, j)
self.com_chess = [i, j]

def check_win(self, chess, i, j):
"""put a chess in the chessboard which in computer's mind and then check it will win or not"""
if not self._board_in[i][j]:
self._board_in[i][j] = chess
x = y = 1
if self._board_in[x][y] == chess and self._board_in[x][y] == self._board_in[x+1][y-1] == self._board_in[x-1][y+1]:
return [i,j]
elif self._board_in[x][y] == chess and self._board_in[x][y] == self._board_in[x-1][y-1] == self._board_in[x+1][y+1]:
return [i,j]
x = y = 0
for i in range(3):
if self._board_in[x][y] == chess and self._board_in[x][y] == self._board_in[x][y+1] == self._board_in[x][y+2]:
return [i,j]
elif self._board_in[y][x] == chess and self._board_in[y][x] == self._board_in[y+1][x] == self._board_in[y+2][x]:
return [i,j]
x += 1
return []
else:
return []

def canPut(self):
"""This function can found out one possible which can be put a chess on it"""
pp = [] # the possible position
self._cp_board() # copy the chessboard into computer's mind
for i in range(3):
for j in range(3):
if not pp and not self._board_in[i][j]:
pp = [i, j]
return pp

def _cp_board(self):
"""copy the chessboard into computer's mind"""
self._board_in = []
for i in range(3):
l = []
for j in range(3):
l.append( self._board[i][j].p )
self._board_in.append(l)


class GUI(Computer):
"""this class for the GUI"""
def __init__(self):
"""initialize"""
self.resource = gtk.glade.xml_new_from_buffer(XML, len(XML)) # create the window from glade resource
self.window = self.resource.get_widget('window')
self.chessboard = self.resource.get_widget('map')
self.signal = {'destroy':self.destroy, 'delete_event':self.delete_event, 'new_game':self.create_chessboard, 'comFirst':self.set_com}
self.resource.signal_autoconnect(self.signal) # connect the signal

self.create_chessboard() # create the chessboard

def show(self):
"""show the window"""
self.window.show() # show the window
gtk.main() # start gtk loop

def delete_event(self, widget, event, data=None):
"""handle the delete event"""
return False

def destroy(self, widget, data=None):
"""handle the close action"""
gtk.main_quit() # close the window and exit the program

def set_com(self, widget, data=None):
"""set computer put chess first or user first"""
if self.com_first:
self.com_first = False
else:
self.com_first = True
self.create_chessboard()

def create_chessboard(self, widget=None, data=None):
"""this function can create the chessboard"""
Computer.create_chessboard(self)
x = y = 0
for i in range(3):
for j in range(3):
Tbutton = gtk.Button()
Tbutton.set_size_request(100, 100)
Tbutton.connect("clicked", self.Put, [i, j])
Tbutton.show()
self.map_chess(i, j, Tbutton)
self.chessboard.put(Tbutton, x, y)
x += 102
x = 0
y += 102

if (self.com_first):
# the first setp of computer, put the cross in the center
Tbutton = self.map_chess(1, 1)
Tbutton.set_label(self.chess)

def Put(self, widget, data=None):
"""to imitate player put a corss or circle in chessboard"""
if Computer.Put(self, data):
if self.com_first:
chess = 'O'
else:
chess = 'X'
widget.set_label(chess) # set the text which should be show on the button, cross or circle
# now is computer's turn
print "Computer: ", self.com_chess
if self.com_chess:
self.set_chess(self.com_chess[0], self.com_chess[1], self.chess)
Tbutton = self.map_chess(self.com_chess[0], self.com_chess[1])
Tbutton.set_label(self.chess)
if self.Winner:
dialog = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "%s Win!" % self.Winner)
if dialog.run():
dialog.destroy()
self.create_chessboard()
if self.puts == 9:
dialog = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "NO one Win!")
if dialog.run():
dialog.destroy()
self.create_chessboard()


if __name__ == "__main__":
main = GUI()
main.show()

2008年8月16日星期六

香港的學生機


上面這兩台是HP的學生機
價錢便宜了不少呢~
而且還是市面上還未有貨的最新機種!
Centrino 2平台的Pavilion dv5才七千六!

在澳大也有學生機,雖然只有Lenovo
不知道Lenovo的SL400會賣多少?

2008年7月30日星期三

Gmail 3rd theme


要使用這個Gmail的主題先要安裝Stylish
這個擴展可以為網站套上自己寫的css,能改面網站的面貌
(對於「內容、表現、行為」分開的網站特別有用)

安裝後來這裏

2008年7月26日星期六

設定Gmail只用https

昨天發現Gmail可以設定只用https協議登入
用https加密的好處有很多
例如用wifi時不怕別人嗅到你的信息
還有就是,用http時登入有AJAX的界面的話,經常在loading時停了
不過用https又沒問題(真奇怪?)

在國內的話還可以抵禦GFW
(現在上網不加密的話真是問題多多)

2008年7月24日星期四

USB TV Tuner


前兩天去香港還買了隻USB的TV Tuner
支持DMB-TH數碼廣播的!
可以用電腦在家中收看高清電視~
………………………………


買的時候測試過是可以收看高清翡翠台的
但是我回到家中卻無法收看
一開始以為是天線公司並沒有提供高清的訊號
但想想,天線公司有轉換成模擬訊號給我們看,怎可能沒有高清的?
於是跑去買了個放大器
裝好放大器再掃描又找到無線那三個高清台
有J2和高清翡翠台!
可以訊號不太穩定,有時收到有時又收不到
還好我房間裏的舊電視變得很清濋,效果還是明顯的
可惜高清翡翠台和J2一時好一時壞,剛開始收到時的確十分興奮的
因為真的十分清淅
明天找天線公司問問,看看有甚麼解決辦法


試用了三晚,感覺這隻USB TV Tuner只是半完成品
首先,畫面不是真正的高清,只是『清濋』而已
高清台的確比標清台清濋,但畫面解像度連720也沒有
聲道只有雙聲道,5.1甚麼的當然沒有
其次遙控器有幾個按鈕都沒用的,應該是Program的問題
不只硬件是半完成品,就連隨機送的Program也是半完成品(暫時還找不到替代品)
硬件在工作是發熱量十分之高,又是一個問題
估計不久將來我會更換更成熟的産品,而且一定會買Linux support的
目前就暫時用着吧

PS.
還要提一提的是,買的時候店員說是台灣制的
看上去也像,但是雜牌貨
用的是不知名芯片,Linux沒有對應的驅動
打算透過USB用Virtual Box跑XP驅動它,但裝完驅動後報錯
该设备无法启动。 (代码 10)
在裝置管理員裏認出是LMEBDA_DTMB53L5C
上網搜尋沒有發現,放棄了

香港一游

前兩天過了去香港深水埗
當然是為了去黃金和高登
去到時還發現有新高登,之前從來沒去過
真的不知道原來黃金電腦城是如此大!
甚麼都有得賣,而且有很多平價貨~

不過裏面實在太大,用半天時間只能粗略的看看
而且身上沒錢,看到想買的東西又不能買
還好有一間代理VIA産品的店鋪
底板連機箱才699!
店員還說遲些Nano有貨的話有得賣!
實在太好了~
因為澳門完全找不到這秊准系統

好像Intel的Atom也會推出准系統
如果買得到Atom的話我當然會選擇Atom啦
CPU性能應該比Nano好呢
雖然這些都要等到九月份

除了准系統外,我也去了一間聲稱搬迁清倉大平賣
39元的無線Mouse(接收距離超級近而且靈敏度極低)
39元的硅膠KeyBoard(質素還可以)
最可惜是在灣仔電腦城買了一條eSATA插SATA線,要40大元呢!
而且是短的
在黃金有一間39元是長的!
被騙了!
不過這條很普通的線在澳門竟然買不到
在黃金還有很多奇他古靈精怪的東西賣
的確值得一去

2008年7月4日星期五

Linux的新聞

以前常去的幾個講關於Linux的新聞的網站都很少更新了
幾天前Flash Player 10更新了
官網說3D性能加強了
但我試用的最大改善是可以打字了,以前在Flash Player裏是沒法打字的(Firefox3)
雖然不知道會不會是偶爾可以偶爾又不行

另外AMD的顯卡驅動也更新了
終於可以打開compiz fusion
我老媽的NoteBook裝了Ubuntu源裏的驅動後可以打開自帶的特效
現在NoteBook還了人所以沒有更詳細的測試啦,應該compiz是沒問題的

Nvidia的顯卡驅動也更新了,但還未知道有何改變

2008年7月1日星期二

自己校正熒幕(灰階)顏色


我根據 這裏教學畫了張ColorCheck
有興趣的人可以照着調較自己的熒幕
打開了上面那張ColorCheck以後,所有操作都是用熒幕上的按鈕
首先調教色溫,一般亞洲人都是6500K最好
太高顏色會偏藍,太低顏色會偏黃。具體看你的感覺吧
之後調教亮度和對比度
先把背光開到適合的大小(我自己是100%的)
然後把對比度教到盡量大(我一樣用100%)
接着調整亮度,要求可以清濋的看到ColorCheck最上面那行所有灰階
最下面那一大塊的黑色裏面,左右各有一個灰色的正方形
要求兩個灰色正方形和背景的黑色容合在一起(即是看不到正方形的邊緣的直線),但依然看得出是灰色不是黑色

這樣基本上就完成了調教
你的熒幕上可能還有其他設定的,只要能符合上面的要求,你可以隨便弄
畢竟這是靠肉眼來完成的,所以準確度並不是100%
但應該適合熒幕前面的你

2008年6月28日星期六

ICE - Today and no future

昨天過去了,今天又在發生甚麼事?

在那個世界,「ICE」是實驗失敗的産物
想要通過人工受精的方法來生育失敗了
那些女人就想用男人留下來的「地表淨化系統」把地球淨化
但她們實在太愚蠢了
如果「地表淨化系統」有用的話,男人就不會全都掛掉!
這是很簡單的道理吧
………………………………
可能真的是外星生物,「ICE計劃」只能生産出怪物
「地表淨化系統」也只會消滅地球
不單只畫質像90年代的動畫,劇情也像90年代的
很順理成章的有個奸角啟動了「地表淨化系統」
然後順理成章的主角破壞了它,就像理所當然的幾個『正義之士』犠牲自己救了地球

如果整個故事只是這樣,它只不過是三流科幻動畫
到目前為止,我講的都只是FS部份
ICE更為精彩的是百合部份,兩位女主角是瞳和由希
瞳是近衛隊隊長,幾乎是戰爭力最強的女人。她除了劍以外還會使用「男人的武器-火槍」
由希是如月家的人,除了思想比較天真外沒甚麼特別

她們兩人在第一天的「ICE」捕獲行動中相遇,成為『朋友』
某程度上算是一見鐘情吧(畢竟只有三話的OVA,意料之中)

ICE - Yesterday


這部動畫是上年的OVA
前日見到有碟賣,就買了回來
雖然是上年的,但畫質像90年代的動畫
特效卻是超一流!
屬於FS+百合作品
喜歡科幻作品同時又喜歡百合的應該會喜歡

一開始無緣無故有對姊弟出場
那個女人一出場就掛了
接着有一堆無厘頭的場景和對白
………………………………甚麼「還沒出生世界上最後一個男人就死了」
「人類無法正常繁稙下一代」(即是女人冇法生育的意思)
講完一堆沒頭沒腦的話後,直接跳去BIO Terrorist - 即是「ICE」
本來我看到這裏已經十分脱力,差點想放棄
誰不知那些女人的機械人出場後,開始變得有看點了~

「ICE」的實體是怪物
女人因為無法正常生育,所以妄想能利用科學的力量去生小孩........
不過不知道是因為研究用的基因有問題,還是研究員天天都沒睡醒
「ICE」的産品只有怪物,包括那兩個和怪物無異的BB

這OVA總共有三話,以裏面的叫法是三日
yesterday, today and future
劇情的分配快完全配合了這三日
第一日是交代故事背景,第二日是究竟正在發生甚麼事
最後一天,是結局。是一個沒有未來的結局

正如前面所說,地球受到非常嚴重的污染,所有男人也死清光
留下來的女人很多都沒法活下去,又爆發了世界大戰,結果人口急速減少
剩下的人只能依靠城市和科技的力量活下去
由於無法生育,所以有了「ICE」出現
為了消滅生控的怪物,近衛隊要以生命作代價和「ICE」戰鬥
除了近衛隊外還有一班稱作「如月家」的人,她們只希望能順應天命的死去
這個就是故事裏面的世界

http://www.project-ice.com/concept/index.php

2008年6月26日星期四

鉄のラインバレル

10月新番
裏面那部機械人超級有型的說!
原作是漫畫,隨便找找都能找到來看
CM

期待ing

2008年6月25日星期三

nautilus的mime type錯誤

兩天前更新後,gnome的mime type出現了很嚴重的錯誤
全部機案都認成text/plain
全部都使用gedit打開

做成這個問題的原因應該是mime-types這個package更新了
我的解決是先重裝mime-types
#pacman -S mime-types
然後刪除mime cache
$rm ~/.local/share/mime/mime.cache
問題解決了
之前某些動畫沒有預覽圖,mime type更新後全都有預覽圖了
不過rmvb還是有問題,或者我沒有裝totem-xine的關系
totem沒法播放rmvb

2008年6月8日星期日

VirtualBox OSE 1.6

剛剛更新Arch,發現OSE 1.6也release
雖然比非開源版慢了不少,但也release了
算是不錯吧
但OSE少了很多功能
一樣沒有USB
沒有SATA硬盤
沒有1000M網卡
暫時只發現這些分別,幸好圖標有更新
速度感覺不出有區別

奈何我已經裝了非開源版本
想來說要找PKGBUILD
不過我想起下載回來的是bin,根本不用綿編譯,要PKGBUILD來沒用
直接安裝就是了OTL

Gundam 00

某天聽朋友說,每一套Gundam動畫都肯定有一台同名的Gundam
例如Gundam W真的有台W
(雖然Seed和0080的不是。。。。。)
00也真的有一台Gundam 00
現在圖片也出來了,樣子和Exia一模一樣
只是胸口上的角放了上頭頂,兩肩上各有一個太陽爐
沒錯,是直接放在肩膀上!
而且是雙太陽爐!

很明顯,這是超低能勁腦殘剎那所駕駛(和Exia一樣樣的呢。。。。。)
至於實力如何,可以想像得出
又用機體性能來虐殺敵人(真無聊)
via

2008年6月4日星期三

備份正版游戲光碟

星期六買了BattleField2142
正版要把光碟放入電腦裏才能玩,很麻煩
要免CD補丁又會被當成作弊
真想不到支持正版都麻麻煩煩
於是上網研究了一下怎麼備份回來

事實上有些專門用來備份正版游戲光碟的軟件
我用的是Blindwrite
網上有keygen,很容易就能找到的
安裝後直接用讀取把光碟備份下來就可以,格式是Blindwrite專有的BWT
可以用Damontool掛載
不知何解我開BF時說「和虛擬光驅衝突」
可能由於我裝了Achool120%又刪除了
重新開機後就沒有問題,不用停用或拔光碟機

2008年6月2日星期一

榮耀的代價

這個其實是Blassreiter某一話的標題
昔日的賽車冠軍
因為被惡魔襲擊而不能走路
於是自己也化身成惡魔
與惡魔戰鬥

因為不能再比賽,於是想成為英雄
想成為保護人類與惡魔戰鬥的英雄
可是,英雄的榮耀是有代價的
代價是失去自己的意志、好友、最後是生命
………………………………
想要榮耀是有代價的,不單止是榮耀
想要得到就要負出代價
不過我在想的是
為了無意義的榮耀,有必要付出如此巨大的代價嗎?

事實上,前兩天某友人的Windows Vista掛了
主動找我教他用Linux
其實之前都有過這樣的經歴,把NoteBook預裝的Vista刪掉裝Linux
之前那個人找我時我己經警告過他,不必一定要刪了Vista的
雙系統也是可行的方案
但他一意孤行,我也跟他說了後果自負
然而最終他還是埋怨我,說Linux很差很垃圾..........

今次也一樣,原因是BT下載很慢.....
他說他平時下載都超極速的
ISP只是提供5M的下載的256K的上傳頻寬
但他說他平時下載總是超過500KBps
受不了100K的速度所以要重裝自己的Windows
先不論那500K+的速度是否屬實
理信上他上傳的速度是256K,極限也只能提供30KBps的上傳
而他下載時速度有500K,上傳只有5K左右
如果人人都這樣的話哪裏來上傳?
其他人又怎樣下載?

我平時只能提供20K的上傳速度
下載有100K對我來講而經算快
而且是免費的,不用買
能下載回來就足夠了
再者,正如我之前說的那樣
任我速度再快也不能下載完全部的東西,倒不如順其自然
苦海無邊呢
可必強求?
我現在悠悠閒閒的,自得其樂
夫服何求!

2008年5月27日星期二

virtualbox

VirtualBox1.6出來了一段時間,但OSE卻沒有任何反應
Sun收購vbox後的1.6版變化很大
而且OSE不能支持USB,實在想把OSE刪掉換成不開源的版本!

在Arch裏
由於內核更新了,之前vboxdrv失效了。要打補丁
前兩天源裏才出現打了補丁的virtualbox-modules
更新了後vbox才能繼續使用
但我又找不到vbox1.6的PKGBUILD
找到的話一定要換走OSE!

2008年5月9日星期五

掛載mdf/mds影像檔

$ sudo mount -o loop -t iso9660 BF2mini.mdf /media/disk

Linux其實可以很方便的掛載iso,同時也支援mdf
所以和iso一樣照掛上去就可以~
很方便~

不過Arch預設沒有loop
會報錯:
mount: could not find any device /dev/loop#

其實只是內核沒有loop module,掛上去就能解決
$ sudo modprobe loop

2008年4月27日星期日

idolM@ster Xenoglossia


請從7︰00開始看
idolM@ster變了路魯修!
無線把idolM@ster打錯了!
T.T
天呀!
還我Xenoglossia..........

2008年4月21日星期一

低能的井字過三關

為甚麼說低能呢?
其實我並不是說井字過三關是低能
而是我寫了一個低能的井字過三關游戲
因為我寫得確實是超低能,但兩個人是可以玩的

代碼如下:
………………………………
$ cat test.cpp 
/* test.cpp
* just for trying how to use cpp
*/

#include
using std::cout;
using std::cin;
using std::endl;

class TTT
{ /* this just a trying, test how to use class */
public:
/* all functions are here */
void initGame(void)
{ /* initial the array game */
int i, j;
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
game[i][j] = '+';
}
}
}

void PrintGame(void)
{
/* print out the table of the game */
int i, j;

cout << "========================================" << endl;
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
cout << game[i][j];
}
cout << endl;
}
}

void Replace(int i, int j, char T)
{
game[i][j] = T;
}

void hello(void)
{
/* hello word function */
Ten = 10;
cout << "Hello~" << endl;
cout << "Ten is: " << Ten << endl;
}

int Win(char Tag)
{
/* check a winner */
if ((game[0][0] == Tag && game[0][1] == Tag && game[0][2] == Tag) ||
(game[1][0] == Tag && game[1][1] == Tag && game[1][2] == Tag) ||
(game[2][0] == Tag && game[2][1] == Tag && game[2][2] == Tag) ||
(game[0][0] == Tag && game[1][0] == Tag && game[2][0] == Tag) ||
(game[0][1] == Tag && game[1][1] == Tag && game[2][1] == Tag) ||
(game[0][2] == Tag && game[1][2] == Tag && game[2][2] == Tag) ||
(game[0][0] == Tag && game[1][1] == Tag && game[2][2] == Tag) ||
(game[0][2] == Tag && game[1][1] == Tag && game[2][0] == Tag)) {
cout << "The Winner is:" << Tag << endl;
return 0;
}
return 1;
}

int CanPut(int i, int j)
{
/* check the place can put a cross or circle */
if (i >= 0 && i <= 2 && j >= 0 && j <= 2) {
if (game[i][j] == '+') {
return 1;
}
}

return 0;
}

private:
char game[3][3]; /* save the cross or circle of the game */
int Ten;
};

int main(void)
{
/* main function */
int i, j;
char Tag = 'O';

TTT trying;
trying.initGame();
trying.PrintGame();

while (trying.Win('O') && trying.Win('X')) {
cin >> i >> j;
if (trying.CanPut(--i, --j)) {
trying.Replace(i, j, Tag);
trying.PrintGame();
if (Tag == 'O')
Tag = 'X';
else if (Tag == 'X')
Tag = 'O';
}
}

return 0;
}

$ cat Makefile
CC = g++
test:test.cpp

$ ./test
========================================
+++
+++
+++
1 1
========================================
O++
+++
+++
2 3
========================================
O++
++X
+++
2 1
========================================
O++
O+X
+++
2 2
========================================
O++
OXX
+++
3
1
========================================
O++
OXX
O++
The Winner is:O

我連Makefile都寫了,compile只需要$make
雖然那個Makefile只有一句囧
對於C/C++ Makefile真是非常實用~
所以只有一句我都寫了


這本來是year2的練習
不過因為太簡單了,所以我也做了
因為year2是在教C++ & Java
所以我就用C++寫
用上了面向對像的方法
把Data Structure和Algorithm綁在一起,能避開Pointer的使用
Programmer不需要理會Pointer
這就是我所能體會的好處

但如果我對於Pointer的使用很有信心,其實我不需要用上面向對像的方法
所以目前為止我還是喜歡用C
因為Pointer明顯更靈活~

2008年4月19日星期六

Gundam Battle: Universe

Via: http://psp.cngba.com/psp_zx/2008041833119.shtml
Gundam Battle新作消息公佈了!
預定是七月份
太好了~
還以為編年史會是最後一作
Hi-Nu也順利加入了~
PSP上好玩的游戲其實也不算太少吧
還有機戰A呢~

2008年4月17日星期四

Macross Frontier 2


任務代號 VICTOR
今次一開場早乙女就抱着ランカ脱出
並不像SEED,早乙女沒有甚麼超能力
一二三就被敵人打得落花流水~

接着就是ランカ
她一唱歌,另一邊躲着的敵人就即刻出來了
相信她日後一樣會成為歌姬
有可能今次是雙歌姬!
但願今次ランカ能和早乙女走在一起
………………………………

Macross經常都會出現超強勁的大叔
今次也不例外~
這位大叔駕駛VF-25真的超強勁!
除了歌以外,Macross最大的看點就是三角戀和變形戰機!
VF-25的戰鬥真的非常精彩!
加上高清的畫質(1080p啊!)
真是人生一大享受~

話說,VF-25的控制界面設計得不錯~
很有科幻的感覺
而且VF-25居然可作162倍光學變焦..................
真的很想弄一台來玩~
就算不能飛也可以用來當望遠鏡~


嗯.............


想不到.............
早乙女的同學都是秘密地替軍隊工作
雖然ランカ的哥哥也是暪着她戰鬥
但這是否反映了那艘太空船裏的人口實在太少呢?

敵人跑進來才一次,破壞程度相當嚴重
如果來多兩三次估計整架船都要入廠修修了!

最後是官網︰http://www.macrossf.com/


這兩位『歌姬』
三角戀中的女主角
不知道之後的發展會如何呢?
シェソル主動找早乙女,開始有所發展了
早乙女救過ランカ,應該很快就開始發展
早乙女所選擇的會是呢?
真正的『歌姬』又是誰?

2008年4月16日星期三

這台電腦真夠奇...

因為舊的HDD快要壞了
偶不偶會「啫啫啫...」的響
所以星期一就買了隻新的回來

誰不知裝上去後一開機就死機囧………………………………
因為機箱太細的關系,裝HDD時要把顯卡和那張跑不起來的TV Tuner拆下來
RAM也要拆下來
裝好HDD後也好好的裝回主板上
誰不知,一開機就死機........
Linux是跑到udev就掛掉,貌似是loading uevent時掛掉了
Windows則在不知甚麼時候掛掉的

今天我研究為甚麼死機,摸摸顯卡、TV Tunner和RAM
丢隻LiveCD跑MemTest
跑完開機又正常了OTL

實在搞不懂是甚麼問題
不過以前開機一樣有問題的
每天第一次開機都會掛掉的,Reset後又正常
當時以為是HDD的問題
現在則還沒發現掛掉

BTW,那天出去買HDD時坐學校的接䭸巴士
一不小心把裝書的袋遺留在巴士上
竟然被人偷了..........
去問保安說有人拾到是會交給他們的,但沒有我的袋..........
裏面只有十多元的硬幣、一堆紙和一本畫得不似『書』形的英文畫...........
竟然都被人偷了OTL
甚麼世界..........
買HDD也很貴
Seagater的SATA 250GB $440
因為老媽要求,又買了隻Sony的DVD Writer $230
再買隻萬能插和門鐘一個,充值澳門通
一千大元就消失了..............

2008年4月13日星期日

PS3 『手提版』

有個達人把PS3改裝成手提電腦型.......
其實我更想買那台PS3
不過改裝完後好像重7.2KG



Via

2008年4月11日星期五

Solaris 8................

昨天學校的電腦室好像進行系統升級,停機半小時
那個時候碰到負責升級的人
沒事幹就跟他聊起來

他透露,Server用的是Solaris 8
OTL
上維基看看,2000二月Release的..........
八年前的啦
當時我就想講,10好像都出了幾年
不過我不知道到底是哪一年出,所以就沒講出來

其實我講得不止是軟件舊
硬件也很舊
畢竟server是7x24小時運作的
用了起碼8年
也是時候更換了吧?
雖然他說不是很舊,而且我也不知道實際是怎樣
但我覺得用了五年就開始舊的了
因為我的HDD用了才兩三年就跟我說「就黎掛do」.............

Macross Frontier 1


四月新番
新的Macross終於播了~
不過今次的主角十足十偽娘...........
………………………………

Macross必有的三角戀
同樣是兩女一男
男的是那個偽娘,沒甚麼好說的..........
兩位女主角
萌系的ランカ是上面那位
在一家中國餐館工作的~
貌似和異星人也有些甚麼關系
另一位女主角是今次的歌姬

雖然我只看過幾套Macross
但每次萌系的最後都會變成路人
因為男主角選擇的都是歌姬
每次我都比較喜歡萌的女生,但歌姬的存在始終使她變成路人.................
不知今次會否打破這個宿命!

事實上,ランカ的聲優是中島愛
有可能她才是真的歌姬
不過唱歌的確實是シェソル


居然真的把廣告做出來~
這是ランカ工作的中餐館廣告~


歌姬的歌手是中島愛
但今次的OP是坂本真綾和菅野洋子合作的呀!
(我就是因為河森正治和菅野洋子才看Macross的啊!)
為甚麼歌姬不用坂本真綾呢.................
而且直到播出我才知道OP是她唱
然而裏面沒有她配音的角色
總讓人聯想到是臨時找她的...............

還有,之前提早放送的第一話最尾有「可有曾記起愛 remix.
一樣讚!~
總之比歌姬的歌更好就是~


最後附上OP

2008年3月26日星期三

百度Hi

百度也推出它的IM軟件--百度Hi
因為我沒有使用過,也沒有興趣試用
只是它的傳宣方式太『百度』了!
同樣是要邀請才能加入
但要求別人邀請足夠人數才能使用
我所知的只是開群要50人
開第二個則75

這和流氓促銷有甚麼分別?!

PS.
上星期手癢把Gmail改成中文
結果變回舊版了
改成英文還是變不回了新版
剛剛試試英文US
立刻變成新版.................
原來要English US囧

2008年3月23日星期日

digital的教訓

汗.......
digital的Notes是一份份放出來的
但有人問上年的前軰一口氣要了
於是我很聰明的問他拿,一口氣的全部印出來
誰不知........
今年的Notes更新了,有少許的不同OTL
這個教訓告訴我
人不要一步登天
腳踏實地的慢慢來才是最好的方法

2008年3月17日星期一

Iron Man

http://psp.cngba.com/psp_zx/2008031729362.shtml
在CG看到的新聞
先不管它的可信性
Iron Man是一部非常好的作品~
在美式英雄中,他算是比較特別的一個
因為他只是一個普通人,比較有錢而已
穿上他自己制造出來的鋼鐵盔甲就成為了英雄
而且不是靠甚麼奇奇怪怪的力量
而是人類本身的科技力量
貌似任何人都可以成為英雄

2008年3月9日星期日

The First


今天出去買書時,居然給我看到蒙面超人The-First
我當然二話不說還買回來了~


The First的感覺不太像其他蒙面超人,有點像骨頭人
雖然主角是蒙面超人一號和二號,但做型是重新設計過的
所謂的變身也只是摸摸腰帶、戴上頭盔就是了
今次的頭盔口頭是分離式的,可以拆下來
其實是相當有型的~
還有一位女記者,其實也是女主角
一般電視上播的蒙面超人的女主角,通常很少描寫跟主角的感情
是愛人還是友人也是說不清的
但The First裏很明確的講明,一號和二號都同時喜歡那位女記者
一號用自己的力量去保護她,而二號就因為她而背判組織的
………………………………

一號本鄉猛其實是第一位改造成功的人
其他改造人都會因為反噬需要定期換血
連二號都有反噬 ,但本鄉猛卻完全沒這問題
當他想殺死那個女記者的未婚夫時,因為下雪而醒覺了
於是背判組織,暗地裏守護那個女記者

至於二號一文字隼人
他的樣子和那個女記者的未婚夫一模一樣
估計就是組織拿他來改造的~
於是理所當然地背判組織了~


還會擺Pose的~


這個女記者也夠傻的了
開頭因為目擊到怪人而被組織追殺
誰不知因為一號和二號的背判,組織要增加更多的改造人
於是又捉她去改造
都已經把她綁上床了
還是被一號夠走OTL

最傻的是,她把二號當做一號
一號和二號的分別超級大呀OTL

其實可以吐嘈的地方還有更多
但因為它的確很感人,正如骨頭人一樣
最後和一大堆怪人決戰,使出合體技~
最後的蝎子怪人是一男一女的
他們也有很感人的故事,本身是絕症患者
為了繼續生存下去而接受了組織的改造
然後受到一號和二號的重擊而雙雙死亡

本鄉猛他們不知結果又會如何呢?
結束時,因為一號和二號破壞了改造人研究所
組織決定集結所有怪人去消滅背判了的一號和二號
二號因為反噬,不知道還有多長命
本鄉猛則抱得美人歸
期待The Next~

2008年3月6日星期四

新聞透視-電腦黑客

本來想今天回來看無線的新聞透視
但有事要留在學校,回到家就只有一小段

一開電視就見到記者在一間店鋪安裝公用電腦,裏面是裝了監控程式的
這實這樣的程式不是第一天出現的了
就是俗稱木馬的東西

不過如果用電腦的是我,可能會把他們嚇一跳
平時用公用電腦,我都會把我的USB裏的Firefox Portable打開
它會把Cookies那些東西都帶着四處走
這樣登入Gmail都不怕被人知道密碼
至於郵件內容那些,被人知道也沒甚麼大不了的
就算那隻木馬看不了我的熒幕,也有可能其他人直接偷看我的熒幕

遇上USB病毒的話,也不怕的
我平時是用Ubuntu的,有病毒就直接刪了就好啦

嗯,我還是繼續玩戰神去~

2008年2月29日星期五

MacBook Air

唉,澳大的假期太奇怪了
由上年十二月的聖誕假一直放到今個月的十八號
中間只有考試,完全不用上課
結果天天躲在家裏不知道干啥
人都變得十分秃癈

之前老媽的NoteBook要還給別人了
真不捨得,但老媽工作太辛苦受不了
學校也不讓她繼續干下去,沒辦法
結果來去如空
也罷
………………………………
老爸跟我說想買自己買一台就告訴他
但他自己一直想買車都沒錢
哪裏來一萬元OTL
自己又沒工作,真愁
加上Linear又Fail了
下年要重修
第一年就Fail了一科,以後都不知道怎麼辦
明明會寫Program,但成績實在強差人意
唉,前路芒芒

老爸還提起MacBook Air
說在報紙看到,超薄的NoteBook
Apple的市場策略真不賴呢
不止是老爸,我身邊的朋友都有提起
其實超薄的NoteBook它又不是第一台
掛着Apple的名字迴響就那麼大?
如果Sony的宣傳有它一半成功就好了
我朋友告訴我,賣游戲機的老闆都把PSP踩到垃圾不如
但他自己有賣PSP的
在香港賣PS3的鋪頭都叫客人買Wii和NDS
這樣的環境,可想而知Sony有多失敗

其實我一直都覺得Apple的産品賣得太貴
MacBook Air的那個配置
根本不值一萬三千大元
來到澳門時可能還不止萬三呢!
萬三可以買更好的NoteBook呢!

有趣的事,MacBook Air發佈會上
乔老說可以放進envelope
事實上它是從公文袋拿出來的
但全世界都翻譯成從信封拿出來
要知道,中國人對信封的理解和公件袋差很遠的呢~!

2008年2月23日星期六

自己動手寫os

看了標題是不是以為我會寫os呢
當然這是不可能的
只是介紹一本免費的eBook,叫「自己動手寫OS

此書的作者因為看了一本教書OS的書,但裏面用的都是商業軟件
於是他就試着用開源軟件實現書中的例子
最後就自己寫書了
先不管他寫的怎樣
但他這個行為值得學習的~

計算超長位數整數

今個星期開始了第二個學期的課(之前從聖誔開始就一直放假呀OTL)
Data的第一堂科就教了怎麼計算50位整數相加和乘法

花了兩天時間終於寫好了
現在給上代碼
………………………………
/* addtimes.c */
/* this program can do addition and multiplication for two very very long integers,
* the maximum range of digits is 1000, but it can change
* so the longest digits of addition is 1000 and
* the longest digits of multiplication is 500
* because multiply will have most double digits of the result
*
* the base principle of this program is save the long integer in an array
* digits by digits
* so when we need to do the addition
* just add two small integers which is one digits of the very very long integer
* and the multiplication also the same
*
* this program can add tow very very long integers,
* and it can mutiply very long integers
*
* Written by Jimmy DA728071
* @ 080223
* Ver 1.0
*/

#include <stdio.h>

/* define a mirco that is the maximum of the array */
#define MAX 10000

int Isdigit(char cha) {
/* this function can check a character is digital or not
* like the function "isdigit" in ctype.h
*/
int x = 0; /* the return value */

if (cha >= '0' && cha <= '9') {
x = 1; }

return x;
}
void carry(short int numbers[], int n)
{
/* this function can do the carry of an array
* after add or times calculation, can use this function to do carry */

int i; /* the index of an array */

for (i=0; i<n-1; i++) {
/* note that the heighest digit of result array also no need carry */
if (numbers[i] > 9) {
numbers[i+1] += numbers[i] / 10;
numbers[i] = numbers[i] % 10; } }

}

int add(const short int n1[], int nn1, /* the first long integer and the number of digits */
const short int n2[], int nn2, /* the second long integer and the number of digits */
short int result[]) /* the result */
{
/* this function do the add action */
int i, /* the index of two integer arraies */
nru; /* total number in calculate result */

if ( nn1 > nn2 ) {
/* if the integer n1 is longer than n2 */
/* the result should have same digits as the first integer */
nru = nn1;
/* start calculate the sum */
for (i=0; i<nn2; i++) {
/* just put the sum to the result array first */
result[i] = n1[i] + n2[i]; }
for (i=nn2; i<nn1; i++) {
/* get the leavings digit to result */
result[i] = n1[i]; } }

else if ( nn1 <= nn2 ) {
/* if the integer n1 is shorter than n2 */
/* the result should have same digits as the second integer */
nru = nn2;
/* start calculate the sum */
for (i=0; i<nn1; i++) {
/* just put the sum te the result array first */
result[i] = n1[i] + n2[i]; }
/* if two long integer is not as long as same,
* need to get the leavings digit to result */
if ( nn1 != nn2) {
for (i=nn1; i<nn2; i++) {
result[i] = n2[i]; } } }

/* then, check the carry */
carry(result, nru);

/* return the nru */
return nru;
}

int stimes(const short int n1[], int nn1, /* the first long integer */
int nn2, /* the multiplicator */
short int result[]) /* the calculation result */
{
/* this function do tha times action
* a simple multiplication action */
int nru, /* total number in calculate result */
i; /* the index of array */

/* count how many digit of the result integer */
nru = nn1;

/* start calculate, multiply one digit by one digit */
for (i=0; i<nn1; i++) {
/* just put the product to the result array */
/* here is a protype, so only multiply the first digit of n2 */
result[i] = n1[i] * nn2; }

/* then check the carry */
carry(result, nru);

/* return the nru */
return nru;
}

int ctimes(const short int n1[], int nn1,
const short int n2[], int nn2, short int result[])
{
/* this function do the complex multioplication action
* do this complex action, can separate to several simple multioplication
*/

int nru = 0, /* total number of digits in calculate result */
n = 0, /* mark which place of digit in the long integer */
mutor, /* the multiplicator */
nt1,
nt2, /* the number of digits inside temp integer */
i,
j; /* the index of array */
short int tn2[MAX],
tn1[MAX]; /* a temp integer */

/* the result must be had digits which is digits of n1 plus digits of n2 minus 1 */
nru = nn1 + nn2 - 1;

if (nn1 > nn2) {
/* if the first integer is longer than the second integer */

for (i=0; i<nn2; i++) {
/* clean the temp integer, just make it has none digit inside */
nt1 = 0;

/* put some zero after the integer, because after multiply the unidigit
* the multiplicator will have more 0,
* so put the 0 to multiplier make the calculation more easier */
for (j=0; j<n; j++) {
tn1[j] = 0;
nt1++; }
/* than copy the digits inside the first integer to temp integer */
for (j=0; j<nn1; j++) {
tn1[nt1] = n1[j];
nt1++; }
/* get the multiplicator from the second integer */
mutor = n2[i];
/* get the product of temp integer and multiplicator */
nt2 = stimes(tn1, nt1, mutor, tn2);
/* add the product to result */
nru = add(result, nru, tn2, nt2, result);
n++; } }

else if (nn1 <= nn2) {
/* if the first integer is shorter than the second integer
* or as same length as the second integer */

for (i=0; i<nn1; i++) {
/* clean the temp integer, just make it has none digit inside */
nt1 = 0;

/* put some zero after the integer, because after multiply the unidigit
* the multiplicator will have more 0,
* so put the 0 to multiplier make the calculation more easier */
for (j=0; j<n; j++) {
tn1[j] = 0;
nt1++; }
/* than copy the digits inside the second integer to temp integer */
for (j=0; j<nn2; j++) {
tn1[nt1] = n2[j];
nt1++; }
/* get the multiplicator from the first integer */
mutor = n1[i];
/* get the product of temp integer and multiplicator */
nt2 = stimes(tn1, nt1, mutor, tn2);
/* add the product to result */
nru = add(result, nru, tn2, nt2, result);
n++; } }

return nru;
}

void reverse(short int numbers[], int n)
{
/* this function using for reverse an array */
int i, /* the index of the array */
t; /* a temp valuable */

/* exchange the elements */
for (i=0; i<n/2; i++) {
t = numbers[i];
/* because n is the number of the elements,
* the index of the last element is n-1 */
numbers[i] = numbers[n-1-i];
numbers[n-1-i] = t; }

}

int main(void)
{
/* main function */

int nn2 = 0, /* how many numbers that user input in n2 */
nn1 = 0, /* how many numbers that user input in n1 */
nru = 0, /* how many numbers that in claculate result */
i = 0; /* the index of two long integer array */
char op = ' ', /* the operation that user want, read from input */
cha = ' '; /* the charact read from user input */
short int n1[MAX], /* the first long integer, save in an array */
n2[MAX], /* the second long integer */
result[MAX], /* the result of calculate */
mark = 0, /* mark that save the number to n1 or n2 */
over = 0; /* mark that the long integer is over range or not */

/* print out something so that user can know program started running */
printf(": ");

/* initial the n1, n2, result
for (i=0; i<MAX; i++) {
n1[i] = 0;
n2[i] = 0;
result[i] = 0; } */

/* read the input from user, the format like number1 + number2 */
/* because upper has used i, so initial i */
i = 0;
do {
cha = getchar();
if ( Isdigit(cha) && !mark ) {
/* if the charact that read from user is digital,
* put it into the number1's array */
/* because user input is charact, so need to convert into integer */
/* the charact 0 ~ 9 is in order, so just minus charact 0 */
n1[i] = cha - '0';
i++;
nn1++; }
else if ( Isdigit(cha) && mark ) {
/* if mark is true, it means the integer is n2 */
n2[i] = cha - '0';
i++;
nn2++; }
else if ( cha == '+' || cha == '*' ) {
/* if cha is + operation, that is the operation user input */
op = cha;
mark = 1;
i = 0; }
/* check the integer, if it is over range, print out an error message and exit */

} while ( cha != '\n' );

if ( over == 0 ) {
/* reverse the arraies
* infect, it's possible that do not do the reverse
* save the heightest digit in the 0 index
* but i like save it in the heightest index, so reverse it */
reverse(n1, nn1);
reverse(n2, nn2);

/* print out the result */
/* note that the highest digit is at the end of the array,
* because the array have beed reverse
* and the lowest digit should be the total number of digits minus one */
for (i=nn1-1; i>=0; i--) {
printf("%d", n1[i]); }
printf(" %c ", op);
for (i=nn2-1; i>=0; i--) {
printf("%d", n2[i]); }
printf("\n= ");

if ( op == '+' ) {
/* do the addition action */
/* check the two very long integer, confirm that they will NOT over range */
nru = add(n1, nn1, n2, nn2, result); }
else if ( op == '*' ) {
/* do the multiplication action */
/* check the two very long integer, confirm that they will NOT over range */
nru = ctimes(n1, nn1, n2, nn2, result); }

/* note that the result's order as same as two long integers */
for (i=nru-1; i>=0; i--) {
/* print out the calculate result */
printf("%d", result[i]); }

printf("\nProgram Exit!!\n"); }
return 0;
}

回想起某一天
在IRC上,有人問起怎麼計算200位整數開平方根
當時有人給出大大堆Lib叫他用
其實呢,我覺得這樣濫用API是不好的
應該抱着學習心態地去研究怎麼實現,而不應該全都用現成的代碼

不過人各有志~
別人喜歡怎麼做我都沒辦法的
只是見到有些人,因為自己知道有一堆API就以為自己是超厲害的高手
四處『認叻』
真討厭

2008年2月16日星期六

把bmp和png圖像轉換成jpg

寫了個小Script
是nautilus用的
可以把bmp和png格式的圖片轉換成70%質量的jpg
完全是因為壓縮比的關系
使用很簡單,儲存成XXX.sh
然後放到$HOME/.gnome2/nautilus-script/下面即可
在nautilus裏選取需要轉換的圖片(可以選好幾張)
右鍵 Script -> XXX.sh 即可
………………………………

#!/bin/bash
# This Script can convert the images which in png format or bmp format to jpg format with 70% quality
# User can use this Script to Compress the png images or bmp images to the jpg images which has a smaller size, but the jpg format images may not as clear as the original format images

#for i in $1
# get all files' path
# note: the file name can NOT content spaces
for i in $NAUTILUS_SCRIPT_SELECTED_URIS
do
# get the file name without 'file://'
imgne=`echo $i | cut -c8-`
echo $imgne
#zenity --info --text=$imgne
# get the position of the suffix of the file name
declare -i imnw=`echo $imgne | wc -m`-5
declare -i imnww=$imnw+1
# get the file name without suffix
imgnen=`echo $imgne | cut -c-$imnw`
# get the suffix of the file name
iinn=`echo $imgne | cut -c$imnww-`
# check the suffix is png or bmp
if [ "$iinn" = ".png" ]||[ "$iinn" = ".bmp" ]
then
# check that is any jpg file has the same file anme
# if yes, put a number after original file name
declare -i a=0
b='1'
while [ "$b" -eq "1" ]
do
a=$a+1
if [ -e $imgnen".jpg" ]
then
imgnen="$oimgnen""_"`echo $a`
else
b='0'
fi
done
# try to convert the image, and get the error message
mesg=`convert $imgne -format jpg -quality 70 $imgnen".jpg" 2>&1`
if [ "$?" = "0" ]
then
# if it is successful to convert, remove the original image
mv $imgne "$HOME"/.Trash/
else
# if it is not successful, print out an error message
zenity --info --text="[$imgne]Convert Not success!!!\n---\n$mesg"
fi
else
# if the input file is not a support format
zenity --info --text="Image format does NOT support!!!"
fi
done


還有一個Script是壓縮png的
因為mplayer截圖是沒壓縮過的png,太大了
所以要壓一下,但貌似壓縮比不算太過
我用來壓一張網上的圖,原來四百多K。壓完後變了八百多OTL
………………………………

#!/bin/bash
# This Script can compress the png format images
# Because png format is non-lossy compression format, so it can compress to a smaller size without any loss
# but it depend the compression level of the original image
# the highest compression level is 9
# User also can use this script to compress bmp images to png images
# it will NOT loss any details of the original image and the quality is same
# This script also has more one function, that is convert pdf file to png images
# because jpg format is lossy compression algorithm, the words in pdf file will NOT as clear as the original, but pdf does NOT have this problem.

#for i in $1
# get all files' path
# note: the file name can NOT content spaces
for i in $NAUTILUS_SCRIPT_SELECTED_URIS
do
# get the file name without 'file://'
imgne=`echo $i | cut -c8-`
echo $imgne
#zenity --info --text=$imgne
# get the position of the suffix of the file name
declare -i imnw=`echo $imgne | wc -m`-5
declare -i imnww=$imnw+1
# get the file name without suffix
imgnen=`echo $imgne | cut -c-$imnw`
# get the suffix of the file name
iinn=`echo $imgne | cut -c$imnww-`
# check the suffix to decide which command should use
# because png images no need to change the file name, but other images should change the suffix to png
# this is png images
if [ "$iinn" == ".png" ]
then
# try to convert the image, and get the error message
mesg=`convert $imgne -format png -quality 9 $imgne 2>&1`
if [ "$mesg" == "" ]
then
# if it is successful to convert, remove the original image
#mv $imgne "$HOME"/.Trash/
echo "Compress Finished!!!"
else
# if it is not successful, print out an error message
zenity --info --text="[$imgne]Convert Not success!!!\n---\n$mesg"
fi
# this is images which is other format
elif [ "$iinn" == ".bmp" ]||[ "$iinn" == ".pdf" ]
then
# try to convert the image, and get the error message
mesg=`convert $imgne -format png -quality 9 $imgnen".png" 2>&1`
# if the image file is NOT pdf, it should be remove
if [ "$mesg" == '' ]
then
# if it is successful to convert, remove the original image
if [ "$iinn" != ".pdf" ]
then
mv $imgne "$HOME"/.Trash/
fi
echo "Compress Finished!!!"
else
# if it is not successful, print out an error message
zenity --info --text="[$imgne]Convert Not success!!!\n---\n$mesg"
fi
else
# if the input file is not a support format
zenity --info --text="Image format does NOT support!!!"
fi
done

2008年2月15日星期五

仮面ライダーキバ

Kiva
………………………………

新的仮面騎仕-牙
是電王之後的新仮面騎仕
今次的造型相當不錯,主題是蝙蝠
維基,牙是繼555後井上敏樹再次擔壬腳本
而且是石森障太郎70周年記念作
應該不錯的~

不過最重要的是,土豆上有得看!
(剛剛發現,連甲斗都有!)
雖然土豆的速度不怎麼快,但總算有得看~

Vexille - 日本鎖國

日本鎖國,據說是Apple Seed監督的新作
於2007年8月時上映
內容大概就是講日本封鎖國家進行生化實驗
由於科技發達,聯合國禁止生化技術的研究。於是日本就鎖國進行實驗
還用全國國民做實驗體,注射金屬病毒。感染者會慢慢變成生化人
我就不再作甚麼介紹了,想看的話在騾仔上搜vexille吧~
………………………………
看完後覺得不錯~
打鬥部份雖然只有開頭一小段
但我不是為了看他們打打殺殺的
故事性很好,結构完整
與Apple Seed和其他SF作品一樣,最後留下一個耐人尋味的結局
Maria最後說的那句
我覺得像是講「再見」
好明顯,她是想成全SWORD那兩個「幸存者」-- Vexille和Leon
其實我比較感興趣的是,到底Leon有沒有被金屬病毒感染
看那個腦殘大和重鋼社長拿着有病毒的針筒不知干啥
有沒有給Leon注射了都不清濋
如果我是監督,我就會改成Vexille留在日本成為統治者
Leon被病毒感染了,和Maria一起隱居

貌似受感染的人不一定會掛掉,幸運的話會變成完全體
長生不死的~
Leon和Maria會不會掛掉變成垃圾就留代觀眾去想像~

看完後回想起Apple Seed的結尾
デュナン並沒有成功輸入密碼,但最後那些炮台還是停止了
聽說是七老人的禮物
其實我都不清濋
但那時有能力做這件事的似乎也只有七老人了
或者七老人見到她的努力,最後卻還差幾隻字。就幫她輸入完

其實Apple Seed的感覺和Vexille不太一樣
Apple Seed更古怪,伏筆太多而且很多要點都缺了
不過這就是改篇動畫的缺點
由於是改篇的,加上動畫的時間有限,沒法包括原作的全部內容
有缺漏是正常的事
我們觀眾只需要知道當中發生的事就可以了,不必太過考究

中文字支離破碎


看上圖
那些中字都是支離破碎的!
研究了源碼
發現CSS中指定了「新細明體」
Google一下就發現,Linux裏用微軟的新細明體字會爛掉的!
其實可以直接刪掉該字體
不過這裏有一個解決辦法
Firefox 偏好設定 => 內容 => 字型與色彩裏的進階 => 取消勾選優先使用網頁指定的字型

這樣顯示就沒問題了~
試試看吧~

2008年2月2日星期六

M+Y

微軟收購Yahoo了~
看晚間新聞才知道
微軟居然想把這麼大間的Yahoo呑了
其實我不認為這對微軟有利的,難道那個搜尋引擎市場份額真的那麼重要?
老實說,微軟的Live Search真的是超級差,你呑了Yahoo後希望會有所以變吧
………………………………
想起以前YM和MSN互通,有今天的收購是意料中事
(貌似現在還沒完成交易)
而我一直用yahoo的E-mail作為MSN ID也算了合理了(以前一直都想轉回hotmail的)
之前傳的Live Messenger和Gtalk互通,我反而覺得不好
一來現在的Live Messenger能好好的用了
emesene的SVN版已經可以接收檔案
二來互通頂多也是文字互通,意義不大
MSN的語音聊天我覺得很有趣,但互通了也不會帶給Gtalk的
所以現在我最希望的是Skype能加入Gtalk
加入XMPP這個大家庭~
這樣Linux下也能用Gtalk進行視頻聊天了~
現在Linux下只有Skype能進行視頻&語音聊天
所以我一直都很希望能玩Skype
但奈何我的朋友都用Live Messenger的
真的互通了那就有更多人用Skype了~

熱門文章