TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2007年12月29日 星期六

安裝DSL到硬碟

DSL,全名Damn Small Linux,不是DSLite,也不是Digital Subscriber Line,是一個映象檔大小永遠在50 MB左右徘徊的Linux發行版。簡潔快速小巧基本上就是它的特色,而且它還是能以這樣的大小長駐在DistroWatch.com點閱率第十名上。
50 MB的好處是,幾乎所有普遍的可攜式裝置都可以帶著走,不用再特地準備2GB大的隨身碟,而且其開機速度也是一流[?]
它可以單純當成LiveCD或是LiveUSB用,也可以安裝到硬碟上,或是直接在原有的系統中使用。這次主要是要說安裝到硬碟的方法。
以下假設要安裝的裝置為hda,同時分割方式只是舉例,看懂了應該可以自己分配。
首先自己想辦法到終端機下,輸入:
sudo -s
cfdisk /dev/hda
就會進入分割磁碟畫面,假設需要一個hda1做為swap,hda2做為/,可以選new來創造,建完之後選type就可以更改分割區的種類;swap是82,Linux type是83,其他還有很多,可以自己參考畫面上的列表。
決定完選write就完成更動了。
之後建議是重新開機,再一次進入DSL的Live模式;這次要把swap打開,所以輸入:
sudo -s
mkswap /dev/hda1
swapon /dev/hda1
就完成了分割磁區的設定。
接下來不管是從開始選單或是輸入dsl-hdinstall指令來安裝都無所謂,跟著指示做就可以完成安裝了。
Reference
Preview of DSL 4.2.1

2007年12月26日 星期三

Directory traversal in PHP

好久沒寫有意義的東西了....
這次先丟快兩個月前寫的東西,用來走訪資料夾的內容,並且可以設定最大走訪深度和忽略檔案功能
/**
 * @brief Traverse directories and files.
 * @param $path Start point of traversal.
 * @param $limit Traverse directory level.
 * @param $ignore Regular expression of ignore file.
 */
function listDir( $path = '.', $limit = 0, $ignore = '(^\..*|(.+\.php$)|cgi-bin)' ) {
    static $level = 0;    // Trace back counter.
    if( $limit == 0 || $level < $limit ) {    // If limit is set to zero, or level is lesser than limit, do action.
        $dirHandler = opendir( $path );

        echo "<ul>\n";

        if( !ereg( $ignore, '.' ) || !ereg( $ignore, '..' ) )    // Protection. If '.' or '..' runs recursion, PROGRAM WILL CRASH!
            $ignore = '^\.{1,2}$|'.$ignore;
        while( false !== ( $file = readdir( $dirHandler ) ) ) {
            if( !ereg( $ignore, $file ) ) {
                echo "<li>\n";

                if( is_dir( "$path/$file" ) ) {
                    echo "<strong" . ( ( $level == 0) ? ' class="title"' : '' ) . ">$file<strong>\n";    // First level directory's class is "title"
                    $level++;
                    listDir( "$path/$file", $limit, $ignore );
                    $level--;
                } else {
                    echo '<a href="' . "$path/$file" . '">' . $file . '</a>' . "\n";
                }

                echo "</li>\n";
            }
        }

        echo "</ul>\n";

        closedir( $dirHandler );
    }
}

View by PHP source
如果因為跳出問題很難看的,可以使用上面的連結。
$path為走訪的起點,預設會從當前所在資料夾開始。
$limit是最大走訪深度,0為預設值,代表沒有限制。
$ignore是黑名單的正則表達式,預設會擋'.'和'..'[?],還有*.php以及cgi-bin資料夾。基本上除非很有把握,否則不要擅自更動。
想改輸入效果可以更改echo出來的字串。
為什麼不用Apache?因為它的autoindex實在是看得太清楚了

這次有好一點了

我在期中考前一天知道要期中考。

2007年12月10日 星期一

蒼白的正義

剛剛在某討論版上發現有人挖了冰風之谷一代的神聖復仇者:蒼白的正義的介紹出來,覺得實在是很經典,貼出來給各位分享一下。
鑄造這把劍的目的只有一個:毀滅邪惡。
雖然它是把強大的武器,「蒼白的正義」卻有個相當平凡的出身。

這把樸素的劍是由一位名叫雷諾的人所鑄造,他是一個虔誠的提爾信徒。
雷諾花了三十年的時間將加工金屬的技術練到爐火純青,
也因此他能製造出毫無缺點的刀刃。
就在雷諾完成這把簡樸的武器後,他立刻便將之奉獻給提爾教會。
收到這把劍的牧師將它放在修道院的祭壇上。

牧師要求教會中的弟兄們與他一同向提爾禱告,願祂賦予這把劍神聖的力量。
然而弟兄們卻從來都不碰這把劍,甚至從不提到它。
十年後,當其他牧師們都已放棄對這把劍賦予神力,發起的牧師伊丹,
卻持續默默地禱告著。又過了二十年,提爾依舊沒有顯示任何神蹟。
前來拜訪的海姆牧師嘲笑伊丹盲目地信仰著這把劍。
這時,伊丹突然起身走向祭壇,輕柔地將塵封已久的劍從祭壇上拿下。
海姆的牧師問伊丹,你是不是終於恢復理智了。
伊丹回答說,自己一直都很清醒,然而過去卻對提爾企求了錯誤的事物。
他說提爾早在很久以前就完成了這件事。

海姆的牧師放聲嘲笑伊丹的這番聲明,並叫他的貼身護衛拔出劍來。
海姆守衛手中的華麗武器,護手上鑲嵌著珍珠、刀刃上刻滿了符文,
還鑲有一堆細小的紅寶石。海姆的牧師笑著說:
「你的武器就像是一般士兵帶的刀,跟我們的比起來實在遜色多了。」
伊丹平靜地握住劍柄,將劍揮向海姆守衛的武器。
海姆牧師的笑聲很快地消失了,他只能死盯著守衛的斷劍瞧。
當伊丹放下劍,海姆牧師不發一言地呆立在原處。

伊丹說:「正義跟虛榮、虛有其表的力量相比,本來就是遜色而蒼白的。
然而我卻期待提爾能在這把劍上,以閃電或火焰來彰顯其神蹟。
我早該想起這把劍是如何交到自己手裡的....只是由於單純的博愛與謙卑。
正義適用在每個人身上,不論貧富貴賤,不論知識高低。
不論在農夫的田裡或戰場上,正義無所不在。


伊丹把劍交到當地的武器店裡,訂作了一個木製、包裹皮革的護手。
接著他便把劍交給了一位新任的聖武士,
並教導他永遠要記得人類心中慈愛與良善的潛能。
數據資料:
傷害力:1D8 + 4,對邪惡生物 +7
零級命中值:獲得 +4 改善,對邪惡生物 +7 改善
傷害類型:揮砍
特殊功能:不受恐懼之袍、恐懼術、狂暴魅惑、以及無助法印的影響
重量:5
使用速度:1
武器特長類別:大型劍
種類:單手持用
唯一能使用的職業:聖武士
我一直都很著迷於D&D系列遊戲的背景設定,不外乎是因為其有龐大的設定,且幾乎每個道具都有它自己的來頭,看著那些道具的介紹,就像是在閱讀該世界中英雄的史詩,其中也不乏幽默的道具,這不是其他類型的遊戲能輕易做到的。
甚至連玩家們的幽默感也是相當有趣。在某些人看完Pale Justice的由來之後,甚至開玩笑的說,把Holy Avenger交給菜鳥聖武士應該是教會的慣例,否則玩家不會在一具屍體上撿到Pale Justice,也不會在紅龍的肚子裡找到卡索彌爾了(笑)。只有Cera Sumat的取得過程稍微像樣一點,我相信不少人在打那六個NPC的時候拜了不少次榭夫羅德大神OTZ。
不過偶而也會出現莫名其妙的東西,比方說變性腰帶:
這是一條被詛咒的男性化或女性化束帶。
這物品很罕見,但是常常被大家所討論,上頭附有十分強大的魔法力量。
不小心把它綁到腰上的人馬上會發現自己變性了。
據說還不到五十年前,一個不知情的皇家小丑把這條束帶獻給羅伯蘭公爵的愛人,因此遭到斬首的命運。
以及傳說中的泡褲三部曲(泡褲其實就是當時的內褲):
黃金泡褲:

黃金泡褲在這個世界的歷史十分悠久,它們見過創世時期,當然它們那時的形態跟現在不一樣,所以才「看」得到。
他們的眼睛變成今天的前口袋,牙齒則不知道退化到哪兒去了。
許多泡褲擁有者可以作證,泡褲們現在已沒有視覺也沒有可以活動的四肢,因此主人的臀部才可以保持隱私和純潔。
有部古老的絕版詩集中曾有這麼一段話:「我的褲子硬得像鐵條,不過小腿部分又軟又舒服。」這是在奈色瑞爾沒落時的詩句,那也是泡褲興起的年代,不知是不是就是在形容它。
在美術館中可以看到該時期還有一種叫寬鬆銀長褲的褲子,跟黃金泡褲很類似,常常被人混為一談,不過它不是金色的。現在還有鎳銅褲,不過我所知不多,不能跟諸位詳細解說。

泡褲的作用長期以來一直是個謎,只有發明者才知道。
不過仔細觀察親身試穿後,便可以猜到大概。
例如它的褲襠部分具有違反重力的「上托」特性,不論是作在前面或是後面都十分美觀。
改良後的外形讓人充滿自信,無論是男女穿著都一樣。
不過我大膽猜測,這種自我滿足的虛幻對於正常心理發展恐怕有些許妨礙,這是穿著黃金泡褲時要特別注意的事。
而把金、銀、銅三種泡褲收集完成就會出現Big Metal Unit(BG系列史上最強裝甲):
在我們收集的泡褲,長久被遺忘的口袋中記載著這金屬「戰鬥裝」的傳奇。
高甘塔過去在他深不可測的下層區域中自立為王,直到他兒子潘塔辜羅質疑這統治者的正當性。隨著這弱點被揭露出來,偉大的高甘塔仆街,而潘塔辜羅試圖保護自己,以防他現在的政權失去影響力。有人警告他說人們也許不會給他時間,但他從來不聽,而且還把他的長褲燒掉(破釜沉舟之意)。毫不畏懼地,他(儘管這多麼令人不快)又惡意奪取了他父親的長袍,用自己的雙手塑造出這套金屬「戰鬥裝」。
潘塔辜羅的統治紛亂無章,他的護甲最後終於在褲管的地方出現裂縫,正足以證明了他的敗亡。就好像魚離開了水,太陽離開了天空,他的政權也隨著暴亂而瓦解,那崩潰如此的混亂以至於這金屬「戰鬥裝」下落不明。這護甲的三個部分,也就是史上三大泡褲,便失落在時代的變遷中。
你現在挑起了這金屬戰鬥裝的重大責任。輕柔的褲管,如夢似幻的流線造型,可以抵擋外力的口袋,具有威力的臀部剪裁,以及那閃耀動人的大腿部份。好好地擦拭它,重擔現在落在你身上。
這....要說製作小組的幽默感獨樹一格嗎....= =

2007年12月8日 星期六

宣告

基本上就不久之前和XXSS提到的,我自己有開立一個project的集合,當然成員是開放的,對於每個子項目的成員不一定要相同,也不必全程參與,前提是著作權必須開放,否則到時候很麻煩,如果有人對自己開發的部分很想close掉,那就自己把分支拿走吧。
說是這麼說,其實我覺得應該只會有我一個人吧。自由界的最大特點之一就是很多人都會在無關痛癢的東西上投注精力。話說我也是一個。
綜合上面的結論[!],這個集合暫時定為Foolproof Project,也就是說,笨蛋也會懂的作品集合。因為不知道有沒有人去註冊它,所以是暫時。反正它的精神永遠與我們同在就是了。
基本上,子集的共同特性如下:
  • Unicode:
    基本上不管它到底有沒有多國語言版,它都不會令一個支援Unicode的環境產生亂碼。[?]
  • Cross platform:
    視情況,它應該要能夠在所有平台上執行。當然,如果它的功能原本就被特化在某個平台上就不強求[?]。如果它不符合這項要求,那必須要有非常好的理由[?]
  • FREE and OPEN license:
    這可能在某個程度上複雜化了法律程序[?],但是我依然認為一個自由開放的專案有助於整體發展。基本上我會推薦library或是framework使用LGPL,application使用GPL,其他可以使用CC,不過基本還是尊重作者的意見。如果有人想close或是拿去營利,拿走分支是被允許的。
以下是已經被列入Foolproof Project並已成形的作品。
  • Library:
    • RubyText( JavaScript ): 對於已經標示好注音的字串插入注音文字的HTML標籤。
      最新狀態:svn co https://career.ccu.edu.tw/svn/rubytext/trunk/ rubytext/
  • Application:
    • Rubino( Firefox Extention ): 運用RubyText做出的Firefox擴充套件。
      最新狀態:svn co https://career.ccu.edu.tw/svn/Rubino/trunk/ Rubino/
另外,有未成形但是應該會進去的。
一個是音樂轉檔器,包括管理和ID3整理,預計會使用Qt和FFmpeg等,排程是寒假。
另一個是程式語言開發,非常大的計畫,XXSS目前也有參與協助。目的是做出一個有統一的API,跨平台跨應用的程式語言。排程是無盡的未來。
總之,各位可以把它放在心裡的某個角落,有緣再說吧。
當然,有想一起開發的東西也可以弄進來,說不定有瘋子會一起做:P
最後,不要問我標題是什麼意思,我自己也覺得莫名其妙。

2007年11月27日 星期二

強者大戰

上個星期六跑去參加了這個東西
而參加它的緣由則是上次參加這東西的時候,靠著神手學弟的威能進了前15名。[?]
基本上應該是要好好地準備的,可是實在是不像暑假那樣有整天的時間,加上我也是很散的人....[?]
星期六一大早就起床吃早餐[?]趕客運[?],可是隨後發現這實在不是一個很好的組合,因為搖晃的車身加上胃裡的湯湯水水以及容易暈車的體質,就會造成類暈車反應= =。
路上和學弟有一句沒一句地聊演算法,包括怎麼用prolog寫N皇后[?];中間還在路上看到LG家電的一個標語:
天價收購中古機,有點故障沒關係
....不知道該從哪裡吐糟的標語是也。
接下來跳過無趣的午餐時間,直接快轉到報到好了。
報名的隊伍還真是壯觀啊!
台灣的當然是有台大,台師大之類的,國外的還有日本東京大學,韓國宋熹兒大學,北京上海大學,上海交通大學等等,還有香港和印尼來的....對我這種平凡人來說還真是跑到了神的領域啊。
不過接下來就發生了意外。
直到當場我才搞清楚整個狀況,可是為了讓各位讀者也搞清楚狀況,我想在這裡要先倒帶到一個星期前。
由於在大專盃我們有進入前十五名,是故在單子上的三個人都可以用NCPC的推薦以公費[?]參加ICPC的亞洲區競賽。
當然自費參加也是可以,只是報名費要3500,而且我們學校的確也有另外一組是自費參加,只是我們不知道是誰。
在即將確認名單時,第三個人臨時說他有另一場比賽衝到時間,所以希望我們把候補換上去。OK,所以我們就和指導教授報告,然後他去和負責人周旋;經過有點雞同鴨講的溝通之後,總算是完成人員更換。
然後讓我們再回到報到場地,當進行到確認報名費的流程時,卻發現我們是"未繳費"狀態;在詢問之後才發現原來NCPC的推薦是必須要人員完全一樣才能夠獲得補助,只要人員有更動,就必須要自費。
這種事我完全沒聽過啊!教授!
更讓人無言的是,離隊的那第三個人竟然也是參加同一場比賽,也就是說,他們就是我們學校自費參加的那另外一隊!而我們則因為他的跳糟而失去了公費補助,而當時只剩下二十分鐘報到就結束了。
....被擺了一道是也。
在學弟全力衝剌去領錢之後,總算是無事地上機測試,目的是確認編譯環境的正常以及適應。
這次平台是OpenSUSE,IDE備有eclipse,當然基本的vim和gcc還是有,也有python。[?]
通常測機時都會給你一二個簡單的題目讓你用來測試編輯器,編譯器,還有送出答案的系統。[?]
我們還順便開玩笑地測一下三個人的寫題速度,可是這次還是只有二個人會C++....學弟也忙著寫.vimrc和build程式[?]
之後就是無聊的開幕式,包括比賽注意事項和問答時間。在台師大那裡吃完晚餐後就直接回旅館了。原本還打算在旅館把能用的演算法寫一寫,可是後來大家都在看電視= =。果然電視是會吃人腦的怪物。
睡覺時學弟還去開冷氣....
生命就該浪費在冷氣房
by 學弟
能源就浪費在這種人上
by CA
隔天早上八點左右就開始比了。結果怎樣?
當然被打爆啦....
總共有十題,其中二題基本題幾乎每隊都有寫出來,我們多做了一題,然後就停了。[?]
由於每個學校只能有一隊進前十二名,所以台灣的學校變得很少。日本,韓國,印尼,香港,大陸都有學校進去,大概都是四到七題左右。台大很榮幸地拿到第一名,共七題[?]。學弟的學弟好像也是國手,而且那隊也做了六題[?]....果然都是神的境界。
基本上大部分還是跟圖論有關,同時要用DP來加速,不然有可能會TLE....不過這次真的沒什麼在準備,我錯了!學弟!(汗)
結束之後經過一場無聊的閉幕式,就全部帶去美麗華吃晚宴....當然還是高熱量食物[?]
雖然可以再住一晚隔天再回去,不過實在不是很有興趣,所以我跟學弟吃完之後就直接閃人了。
在客運等車的時候,和學弟他媽喇塞了一個多小時[?],同時終於知道為什麼學弟會來讀我們學校了....因為他大考時英文那科的答案卡沒劃!像我這種平凡人根本不可能會有的戲言。
最後到民雄時己經過十二點了,打電話給室友叫他來接人還被敲了一頓。
沒有人情味的傢伙是也。
我想隔天第一件要做的事應該是去系辦要回經費吧XD

2007年11月22日 星期四

間抜け

當你凌晨三點才發現五個小時後要期中考,還有什麼好說的呢?

2007年11月19日 星期一

幽靈的內褲

昨天晚上洗澡的時候,一如往常地從內褲籃裡抓換洗的內褲,但是手中卻多了從沒碰過的觸感,抓起來一看....竟然是我沒看過的內褲,而且是男用內褲![?]
奇妙的是上次洗完衣服時我並沒有發現這條內褲,它到底是怎麼跑進來的,或是有沒有洗過,可能會是我一生的謎團吧。
附帶一提,那條內褲最後的下場是被我丢到垃圾筒裡了。

2007年11月14日 星期三

Subversion果然是好用....

現在只要是會長期開發的東西大概都會丟上svn了(包括作業...),基本上版本管理系統在單人使用時也是很好用的。
好處是只要有網路的地方你就可以作業,而且一定可以同步,加上無限的備份和分支合併,用得好的話,你的專案就是彩色的。

2007年11月9日 星期五

實在搞不懂這種東西哪裡好用了....

因為學校某堂課的關係,被迫用Rhapsody 6去畫UML的class圖。畫到現在讓我很想婊它。
要錢就算了,反正license也不是我買的,但是憑什麼安裝的時候要偵測有沒有安裝Virtual C++ 6.0[?] 憑什麼我弄個UML就一定要用VC6?更根本的問題是,UML工具幹麻和其他的IDE整合在一起?要整合至少也聰明一點吧?
然後它新增member的方式也很神奇....所有的member新增後的預設值是public,而且不是出現屬性視窗設定,而是直接用打字的方式修改prototype
哪來的白癡會做這種脫褲子放屁的行為啊!
然後data type的設定方式也很奇怪....要是我用Umbrello現在早就畫完了,我靠!
比任何事都要更糟糕的是,助教強迫一定要用Rhapsody 6寫,不得使用其他的工具....你是哪個邪惡組織的爪牙啊?
好吧,喇塞完了,繼續寫作業,因為今天是deadline....

2007年10月14日 星期日

ACM換新主機啦~~

我猜大概是在一個月前換的,其實之前就有在開新主機,不過實在是很亂,新帳號只能在新伺服器上解題,然後舊的跟新的題目又不能通用,但是現在已經完全合併了。
今天為了解決學弟的困擾[?],寫了一份code送上去之後發現它強制轉到新主機上。然後問題就來了....我根本就忘了Username是啥= =!折騰了半天之後才不甘心地選註冊新帳號,最後發現原來註冊那裡就有一欄可以填自己以前的註冊號:
搞了半天不是我忘了Username,而是它根本就不存在啊!
接下來只要在Migrate submissions裡填上自己以前的ID和檢號就好了[?]
現在來看看有什麼不一樣~~這是所有submissions的紀錄,個人覺得以前的比較好,以前只會列出最佳解的紀錄:
這個則是送出結果的總紀錄,這裡就做得很漂亮了:
然後是題目列表,這裡也是很GJ。以前的解題累積紀錄寫得不明不白,可能很少有人知道那個答對率是怎麼算的,現在這樣就一整個簡單明瞭:
送出CODE和該題全球狀態也整合在這頁裡,右上角可以找到這頁,紀錄全球人士的解題狀態還有排名[?]
送出頁面也有很大的改進,改哪裡呢?對!這次它會寫出編譯器狀態了![?]
然後這是現在的即時submissions頁面....總覺得好像沒有以前的還要顯眼易讀。對了,那個ccuxxxx之類的帳號,我懷疑那是學弟的帳號....
總覺得通常是很忙的時候才會去做那些你平常不想做的事,因為有你更不想做的事要做....[?]

2007年10月8日 星期一

C的字串寫入問題

一般說來,C字串的初始化有三種方法:
char * str1 = "All your base are belong to us.";
char str2[] = "All your base are belong to us.";
char str3[32] = "All your base are belong to us.";
是的,學過C的都知道。
但是,它們底下的意義有點不同;有人會說pointer和array在內部是類似的,可是我認為這是非常危險的想法。
我想先從第三個說回去好了。str3的初始化即為:宣告一個長度為32的字元陣列,並把字串常數放進去;由於字串長度為31,加上C字串的結尾字元,總共是32,沒有問題。str2的初始化則是交給編譯器自行決定一個容納字串的陣列,通常會是剛好能容納該字串的大小。但是str1呢?它的意思是,宣告一個字元指標指向某個字串;好吧,問題出在哪裡?
現在問題是,這個字串到底放在哪裡?你真的有宣告出一個空間來置放它嗎?這個字元指標指向的空間真的是一個你可以控制的實體嗎?
我想答案應該在你試圖更改這個字串的內容時就會出現了。
不管是字串常數或是用getenv之類的函式傳回的字串,你都沒有真正的寫入權。當你需要更動它們的值時,請愛用strcpy;否則你就會被Segmentation fault吃到死。
總之,在對指標作操作時,一定要搞清楚:這個指標指向的空間到底是什麼東西?搞不清楚的話你就會下地獄。
這也是為什麼我說指標是邪惡的東西。C的指標運用毫無安全性可言,它也沒有像C++或JAVA或其他近代高階語言一樣有exception handling,C++雖然還是有pointer和iterator,但是至少有exception來避免程式死亡,或是使用smart pointer來取代pointer,C的情況是爆了就是爆了,然後你要花三倍的時間去研究到底是哪裡存取錯誤。
因此有句話說得好:
你想要的,朕會給你;朕不給的,你不能搶!
by 滿城盡帶bra甲

2007年10月3日 星期三

Damn...損真大

前天我的隨身碟不見了...裡面除了八十幾份的ACM CODE之外,還有Firefox Portable所有設定[?],以及重灌Ubuntu時會用到的Bash Shell等等。
其實我的習慣上都會把用完的東西都塞在我的四次元空間袋裡[?],因此到底是怎麼不見的到現在還是個謎團。
算了,還好裡面沒有國防機密....

2007年9月27日 星期四

VirtualBox 1.5 at Ubuntu Gutsy

通常剛裝完virtualbox-ose之後會出現要求執行/etc/init.d/vboxdrv setup的訊息,不過很有趣的是gutsy裡根本找不到這個檔案。
原因是因為這次的kernel不知道為什麼沒包到vboxdrv的模組,但是可以透過一些步驟建立。
sudo apt-get install virtualbox-ose-source
sudo m-a prepare
sudo m-a auto-install virtualbox-ose
應該可以解決。
另外記得把自己加入vboxusers群組。

2007年9月20日 星期四

鬼文模版什麼時候才拿得掉?

我也不知道....
SyntaxHighlighter耍個性,說不動就不動;Prototype framework在Opera上的表現又怪怪的;CSS更是扯到以前的文章問題,目前大概只剩下自己寫的JavaScript是保證好的OTZ....
最近又開始變得很忙了,可能靜下來打文章的時間也很難。

幾個星期前才發現CSIE的標籤跟ACG的標籤數量完全不成比例,那些說我是オタク的人這下知道了吧?我還不夠格呢![?]

2007年9月17日 星期一

工數教授榮獲好人卡一張!!

原本下定決心要修25學分的某NEET少年,赫然發現他的工程數學被退選,理由竟然是....
重複修習相同科目
感到怪異的NEET少年去查看畢業資格審查表發現....
半年前被當掉的工數竟然過了啊!!!!
NEET少年在此謹頒發給教授好人卡一張XD

2007年9月16日 星期日

Debian Etch on server

上星期又重灌了一次Debian Etch[?],趁著還沒忘記的時候留個紀綠好了。
Base System:
進入安裝畫面後,首先選擇的語言是英語,因為要儘可能排除外文支援的問題。之後的地區會自動定標為美洲,記得從Other裡改成Taiwan,因為這會決定預設的套件庫網址。
接下來會詢問是否使用網路的套件庫來源,請選擇yes;至於是否參加套件使用調查計劃,就自行決定吧。
base system裝完後會詢問要安裝哪些整合套件,可以選擇的有桌面環境、基本系統、網路伺服器等,我個人是全部取消,為的是一個乾淨的自訂系統。
全部安裝完成後會要求reboot,請在登入之後立刻更新。
# aptitude update && aptitude upgrade
由於Debian對套件庫的選擇要求很高,因此在stable出現的一定是重要性很高的更新,可以安心的使用。
Firewall:
第一件事當然是建立防火牆。在這裡個人使用的是iptables的前端程式--shorewall。這是一個可以用很簡單的方式去控制iptables的程式。
# aptitude install shorewall
之後到/etc/shorewall/底下去設定它。
一開始應該是只有Makefile和shorewall.conf,先別動它們,先把/usr/share/doc/shorewall/default-config/底下的所有檔案copy到這裡;這是為了防止還沒設定好防火牆之前就被啟動導致無法登入的關係。
首先編輯zones這個檔案;這是定義網路架構各個部分的檔案。像這樣:
#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
fw代表防火牆,net使用ipv4。
然後編輯policy這個檔案;這個檔案算是總規則,沒有在rules裡限制的連線都會被policy限制。範例:
#SOURCE ZONE   DESTINATION ZONE   POLICY   LOG LEVEL   LIMIT:BURST
$FW            net                ACCEPT
net            all                DROP     info
all            all                REJECT   info
從防火牆連出到外部網路的連線全部允許;注意,這是有方向性的,所以不代表外部網路可以連入防火牆。如果不開這個就變成鎖國狀態了。
從外部到所有區域的連線全部丟棄,但是把info的部分寫入syslog[?]
任何區域間的連線完全禁止,同樣把info紀錄下來。因為只有單一網域,不用考慮太多。
接下來設定interfaces,這是定義zones裡的區域是接在哪個界面上。以下請隨機應變:
#ZONE   INTERFACE      BOARDCAST       OPTIONS
net     eth1           detect
由於在zones裡只有net要定義,防火牆是算整台伺服器,所以不用分界面。boardcast的狀況也請自己判定。
最後終於可以設定rules了;這是設定特定連線的檔案,沒有在這裡定義的連線全部會使用policy的定義。
雖然通常會指定連線方式[?]和port,如:
#ACTION         SOURCE    DESTINATION     PROTO       DEST PORT(S)
ACCEPT          net       $FW             tcp         80
即是允許HTTP的連線進入防火牆。
但是為了方便,shorewall也提供了巨集以安全的設定規則。如:
#ACTION         SOURCE    DESTINATION     PROTO       DEST PORT(S)
HTTP/ACCEPT     net       $FW
這個寫法跟上述等義。巨集列表請參照/usr/share/shorewall/macro.*
我自己是這麼定的:
#ACTION         SOURCE    DESTINATION     PROTO       DEST PORT(S)
HTTP/ACCEPT     net       $FW
FTP/ACCEPT      net       $FW
SSH/ACCEPT      net       $FW
Ping/DROP       net       $FW
這樣是開HTTP、FTP、SSH三個服務,然後把所有的ping都drop掉。注意FTP不能因為有兩條通道就同時設定20和21,這會導致FTP出問題;你只需要設定21就好,不然就直接使用巨集。
如此就完成規則設定,接下來要開啟shorewall。首先確認/etc/default/shorewallSTARTUP=1,然後/etc/shorewall/shorewall.confSTARTUP_ENABLED=Yes;這樣才會自動在開機時載入。
接下來只要
# shorewall start
即可。
Reference: ShoreWall
ssh server:
# aptitude install ssh
結束。
ftp server:
FTP server有很多種,可以用apt-cache search ftp-server來查詢;這裡選用proftpd
# aptitude install proftpd
結束。
Web server:
Well,最著名的還是Apache吧;這裡選用2.2[?]。視情況也要安裝PHP,我選擇5[?]MySQL也是。
# aptitude install apache2 php5 mysql-server
接下來要設定apache。
所有設定檔都在/etc/apache2/底下。
從這版開始設定方式改為模組式,不再是httpd.conf一線到底;也就是說各部分的設定被分開到不同的檔案,在需要時才include進去。
以下是值得注意的地方:
conf.d/charset:
設定預設編碼。如果有設定編碼,就會強制網頁使用該編碼,而忽視HTML文件的定義。如果設為Off,就是交給HTML文件去定義。建議AddDefaultCharset Off
mods-available/:
這裡是可用模組,所有可以啟用的設定檔都在這裡。想要啟用就把檔案link到mods-enabled/下即可。
請把php5userdir相關檔案link起來。如果同時有*.conf*.load,都要一起link。
mods-enabled/:
這裡是已經啟用的模組,想更改設定內容來這裡改比較快,存檔時會一起更新原本在mods-available/裡的檔案。只有*.conf的檔案才是可更改的,*.load請勿更動。
記得修改userdir.conf,把OptionsIndexes去掉,這是為了防止你沒有index.html時Apache自動列出所有檔案的目錄。
設定完成後記得重啟Apache。
暫時就這些了。之後可能會再寫一份quota和limit的設定吧。

2007年9月5日 星期三

A8J系列Laptop的音效卡在ALSA無法正常驅動的問題

一直到最近才去找解法。
總之,如果音效卡是SoundMAX Integrated Digital HD Audio,只要編輯/etc/modprobe.d/alsa-base的內容,加上:
options snd-hda-intel position_fix=1 model=3stack
存檔後重新啟動ALSA的服務就好。
只是主聲道不再是PC speaker,可能會因為不同環境而有所不同吧。

施工也是很累的

  前陣子想說來換個版面,結果一不小心把JavaScript和CSS給全洗掉了。
  其實我是有備份的,只是覺得這也不失為一個好機會,因為從零開始整理會比較有系統一點[?]
  整理之下才發現,W3C真的會要了有潔癖的人的命,光是一個<object>我就快搞死了。如果你想殺掉一個網頁設計員,只要叫他用<div>去拼出一個表格就好了;我是說真的!
  目前只做完一半而已,想到還有其他的要改就頭痛....哪個人能教我template要怎麼看啊!!!!

2007年8月23日 星期四

2007年8月20日 星期一

如何寫作makefile

在Unix系統上編譯tarball時,通常需要三步驟:
./configure
make
make install
這中間的make指令便是利用makefile來處理編譯步驟。
Makefile的概念非常像是批次檔,但是它有更強大的能力。
make會查閱每一步驟所需要的檔案,如果沒有便執行指令以產生該檔案,如果已經是最新狀態,就直接跳到下個步驟。撰寫者只要了解原始碼的編譯步驟,就可以依序寫好指令,如此只要有Makefile,不管是誰只要鍵入make就可以成功編譯出檔案。
以最簡單的單一檔案來說,編譯指令應該如下:
gcc helloworld.c -o helloworld
這樣會把helloworld.c編譯為helloworld這個執行檔。
而若要寫為makefile,可以這麼寫:
all: helloworld
	gcc helloworld.c -o helloworld
檔名存為Makefile或是makefile都可以[?],這就是最簡單的makefile。
上面的意義為,要完成all這個目標,需要helloworld這個檔案,如果找不到它,就執行gcc helloworld.c -o helloworld這個指令。
注意,all是個關鍵字,良好的makefile都要有一個all,因為這是預設執行目標。
且一定要用tab縮排,否則它不會認目標底下的指令。換行符號也請用Unix的換行符。
若是要編譯多個檔案呢?比方說現在有三個檔案:application.c, interface.h, implementation.c,application.c引用了interface.h的函式,而implementation.c則是interface.h的實作。
先來看一下平常編譯該怎麼編:
gcc -c application.c
gcc -c implementation.c
gcc implementation.o application.o -o result
這樣編譯出來的result就是可執行檔。
所以來整理一下:result檔需要implementation.o和application.o這兩個檔案,而這兩個檔案分別需要implementation.c和application.c,如此一來就會變成:
all: result
result: implementation.o application.o
	gcc implementation.o application.o -o result
implementation.o: implementation.c
	gcc -c implementation.c
application.o: application.c
	gcc -c application.c
意即:欲完成all需要先完成result目標,欲完成result需要先完成implementation.o和application.o這兩個目標,而要達成implementation.o和application.o則分別需要implementation.c和application.c這兩個檔案。
你也可以選擇只執行其中一個目標,像是make application.o就只會產生application.o檔。
總而言之,makefile的基本型式是:
target: required file or target
	commands to complete this target
底下不限定有多少行指令,只要有用tab縮排即可。
而且目標也不一定要有前置目標,如果執行的目標沒有前置目標的話,代表目標底下的命令一定會執行。
如果你覺得太長,想省略一點,也可以用萬用符號[?]
all: result
result: *.o
	gcc *.o -o result
*.o: *.c
	gcc -c *.c
這個版本可以跟上面的版本達到相同的效果,不過當然有點危險就是了。
當然不只能用來編譯,也許你會希望能夠有清掉過程檔的功能:
all: result clean
result: *.o
	gcc *.o -o result
*.o: *.c
	gcc -c *.c
clean:
	rm -f *.o
這樣在下完make之後會立刻把所有的.o檔清除,或是也可以用make clean除掉。
也許你在編譯完成之後都會執行一次該程式來測試,那麼也可以這麼寫:
all: result clean
result: *.o
	gcc *.o -o result
*.o: *.c
	gcc -c *.c
clean:
	rm -f *.o
test: result input.txt
	./result <input.txt
如此只要輸入make test就會自動執行測試。
當找不到input.txt時,make會自動停止並回報錯誤,因為文件中找不到如何生成input.txt的資訊。
儘管make沒有明定什麼目標該做什麼事,但是在約定成俗的目標上,請按照慣例:
make all要用來生成所有程式。
make install要用來安裝程式。
make clean要用來清除暫時檔。
其他經常用的目標也請不要逆天。
當然這只是最最簡單的makefile,其他如關鍵字聲明之類的,可以去翻make的文件;而automake這套程式可以幫助你生成大型專案的makefile,不過我笨,不會用(汗)。

2007年8月17日 星期五

定Interface果然很不簡單

最近弄個Library就改了好幾次interface...實在是太不健康了
這也證明我的OOP功力不夠
看來還要多練練怎麼定制一個好的API

2007年8月15日 星期三

RubyText (library) 2.3.1 released

Downdoad:

License:

LGPL

Release Note:

  • 2.2.0:
    • Interface changed: 所有功能歸類至RubyText底下:
      • RubyText.generate( string ):創造<ruby>標籤
      • RubyText.restore( string ):移除<ruby>標籤
      • RubyText.clear( string ):移除注音文字
  • 2.2.1:
    • Core improved: 改變尋找子字串方式,現在所有功能都不再依賴其他函式庫。
  • 2.2.2:
    • Bugfix: 修正有可能對非字串元素做處理的問題。
    • Bugfix: 修正此函式庫不使用在網頁上時的通用性問題。
    • Core improved: 改進尋找子字串方式。
  • 2.3.0:
    • Interface changed: 所有正則表達式濾鏡獨立到RubyText.Filter底下,再以語系分類:
      • RubyText.Utility:通用性濾鏡
        • RubyText.Utility.RubyTag:取出<ruby><rb><rp><rt>及其結尾標籤
      • RubyText.Japanese:日文專用濾鏡
        • RubyText.Japanese.KanjiWithHiragana:取出標示平假名的漢字組,格式為「漢字(ひらがな)」
        • RubyText.Japanese.HiraganaRT:取出在半形括號內的平假名,格式為「(ひらがな)」
  • 2.3.1:
    • Bugfix: 修正在IE中運行不正常問題

2007年8月13日 星期一

IE socks...

之前就為了IE一個調CSS調到快瘋掉
沒想到剛才改JavaScript又給我碰到一件鳥事...

由於測試時不管怎麼按IE都沒反應
還以為我有什麼地方寫錯了
結果竟然是IE不支援application/javascript這個MIME type
非得用過時的text/javascript才能執行....

某個角度來說,IE還真是讓我大開眼界....

2007年8月12日 星期日

やっちゃたぜ!

昨天又不小心把伺服器玩爆了....
才剛回來又出包,真茶包的咧!

好吧,反正硬碟有分好,/var和/home應該都沒事
回去再重灌吧....

2007年8月11日 星期六

Ruby Tag Auto Creator 2.1.0.0 released!

Link:

Ruby Tag Auto Creator 2.1.0.0

Release Note:


Library:

  • 更改genRubyTag(), delRubyTag(), delRubyText()的行為,使它們在找不到目標時回傳null,而不會彈出任何信息。
  • 變更rubytext.css的載入方式,rubytext.js不再負責CSS的路徑。請在要使用的網頁的<head>裡加入:
    <link rel="alternate stylesheet" id="RubyText" type="text/css" href="YOUR rubytext.css PATH" />
    <script type="text/javascript" src="YOUR rubytext.js PATH"></script>
    紅標的地方是一定要遵守的,另外,CSS的載入也必須在JavaScript之前。

Page interface:

  • 將所有網頁元件純粹化。
  • 版面設計更動,特別感謝魏藥的大力協助與測試。

Caution:

Safari 2由於其本身若干BUG,如有必要請使用Safari 3 beta以得到最佳效果。

我說你們啊....

要轉載別人空間的東西也給我打一下招呼吧?
一聲不響地就貼別人的連結,想貼的給我自己找空間!
或是我也可以考慮ban掉大陸的IP...

2007年8月9日 星期四

刪除所有子目錄底下的同類檔案

今天在寫Java的makefile的時候,在clean這個項目上遇到了困難。
主要是Java的package一定要用子目錄裝,但是rm -rf *.class這個指令只會把當前目錄的*.class檔刪除而已。

經過一陣子的google之後,發現原來要這麼使:
find . -name "*.class" | xargs rm -f
雖然也可以用find自己的參數-exec,寫成這樣:
find . -name "*.class" -exec rm -f {} \;
不過前者明顯好看很多,而且據說效能也比較好[?]

2007年8月1日 星期三

Ruby text auto creater 2.0.0.0 released

這是啥鬼?
其實就是我將近半年前做的東西
Ruby Tag Auto Creator 2.0.0.0

Release Note:

  1. 真正處理ruby text的部分與網頁分離,函式庫己獨立。
  2. 以CSS實作ruby text呈現,並因應browser不同動態載入CSS;Opera目前未實作、Konqueror無法實作。
  3. 主頁介面更動
  4. 版號系統變更:LibraryMainVersion.LibraryMinorVersion.LibraryPatchVersion.PageChangeVersion

Function Library
Ruby text CSS

API:

Rubytext.Version:

Library的版本。

Rubytext.URL:

rubytext.css的URL,請照實填寫。

genRubyTag( string ):

對string加入ruby tag並回傳。
若是無法處理,彈出警告視窗且不做任何更動,回傳string。

delRubyTag( string ):

將string中已加入的ruby tag刪除後回傳。
若是無法處理,彈出警告視窗且不做任何更動,回傳string。

delRubyText( string ):

刪除string中的ruby text(半形括弧中的假名)並回傳。
若是無法處理,彈出警告視窗且不做任何更動,回傳string。

2007年7月29日 星期日

初試啼聲 on Ruby

出於好奇,我想試試某些號稱是「真正的高階語言」的直譯式語言,初步選定的目標為Perl, Python, Ruby;但是Perl的寫作風格過於自由,Python又太死了,而且我不喜歡它的物件傳遞方式,所以最後用Ruby試著寫了一個質數表。
而開發速度的確是令我相當驚訝,即使這只是一個很簡單的程序。
#!/usr/bin/env ruby

SIZE = 100
prime = Array.new( SIZE, true )
prime[0, 1] = false, false
i = 2
while i ** 2 < prime.length
 if prime[i]
  j = i
  while j * i < prime.length
    if prime[j*i]
     prime[j*i] = false
    end
   j += 1
  end
 end
 i += 1
end

i = 0
prime.length.times do
 if prime[i]
  puts i
 end
 i += 1
end
雖然在這個例子裡把Array初始化,但是其實只要讓直譯器知道該變數是屬於Array這個class就夠了,不論是大小或是型態有沒有宣告都無所謂;因為Ruby[?]是泛型語言,變數並沒有真正的固定型態,而陣列裡也不需要放置相同物件,也可以在裡面放其他的多維陣列,不需對齊。
它的動態性也值得一提,因為你可以在class定義完成後再增減它的成員[?]
但是它的執行速度也同樣地令我吃驚[?];諸君可以試著把上例的SIZE改成20000000,再跑跑看,我相信跑出來的時間會令你印象深刻。
同樣的演算法,用C或是C++來寫大約只要2.3~2.5秒左右,但是Ruby的情況,它可以用到兩分多鐘。
也許是因為直譯器經常要late binding吧,就像是C++的virtual function用多了的後果一樣。
總之,因為以上的結果,在需要複雜計算的時候Ruby並不算是個好選擇....也許哪天我會去試Python吧。

2007年7月22日 星期日

Sorting

這篇的主題主要是針對多筆資料的同時排序。
這樣說也許不太確切吧,比方說,現在有五十個人分別從1編到50號,並給每個人的身長,求以高矮順序排列的座號。
這時候該怎麼寫?
由於C的qsort和C++的sort都只能排一個一維陣列,像這種排序的同時要保留其他資訊的位置時[?],也許有人的做法是建立兩個陣列,一個放身高,另一個放座號,然後自己寫一個sorting function。
不過這樣好像有點麻煩,因為quick sort實在是很煩,bubble有夠慢,而且又有現成的函式可用,像這種問題要怎麼解決?
其實用簡單的資料結構就可以漂亮地解決。
以上述問題為例:
// C version:
typedef struct Prop
{
 double height;
 unsigned int index;
}Prop;
typedef struct Array
{
 Prop *content;
 unsigned int size;
}Array;
// C++ version:
struct Prop
{
 double height;
 unsigned int index;
};
struct Array
{
 Prop *content;
 unsigned int size;
};
先建立一個結構,內容是每個人的資料,也就是double的height[?]和unsigned int的index[?]。然後再建立一個Array的結構把它包起來。
我為什麼不直接就用Prop這個結構去建立陣列呢?其實只是我個人的喜好而已,因為與其另外再宣告一個變數放陣列目前長度,不如直接用結構把它跟陣列本身綁起來,對我來說比較好懂。
使用動態陣列存也只是我個人的喜好,各位高興也可以換成固定陣列。
由於是動態陣列,所以要先建立出陣列空間[?]
Array people;
// C version:
people.content = (Prop*)malloc( sizeof( Prop ) * people.size );
// C++ version:
people.content = new Prop[people.size];
到了這步,我假設你已把資料全部正確的放進陣列裡了。
好了,問題來了,qsort和sort都不認得這個結構的大小判斷,compiler會很直接的發給你一張好人卡,那接下來要怎麼辦?
注意到,sort其實可以放第三個argument,也就是compare function的address,而qsort則是一定要放入compare function。要動手腳的地方就在這裡。
// C version:
int compare( const void *a, const void *b )
{
 return ( ( Prop* )a )->height > ( ( Prop* )b )->height;
}
qsort( people.content, people.size, sizeof( Prop ), compare );
// C++ version:
bool compare( Prop a, Prop b )
{
 return a.height < b.height;
}
sort( people.content, people.content + people.size, compare );
也就是說,其實可以藉由自訂compare function的方式來自訂要用哪個元素排序。
注意,C的qsort和C++的sort排序的條件不同,qsort是當compare為true時做swap,sort則是當compare為false時做swap,當發現sort出來的結果怪怪的時候,請檢查compare function。
最後請記得,有多少個malloc就要有多少個free,有多少個new就要有多少個delete,有借有還,再借不難唄:P
// C version:
free( ( void* )people.content );
// C++ version:
delete[] people.content;

2007年6月24日 星期日

2ch上的動畫歌曲前200名

我也只認得其中的一半左右而已
有很大的原因是因為我沒有碰過鋼彈....另一個原因是我不夠老= =
不過也剛好找到不少以前就想收的歌....奔騰吧!驢子!XD
不過有一首怪怪的....就是EVA的某首....我好像沒聽過說(我不是說劇場版的插入歌)

2007年6月16日 星期六

程式設計期末考

昨天終於迎向第一個該死的期末考....
這次出乎意料的有三分之二都是作業題,早知道我就把作業全部印出來帶進去了= =

555:(30%)(Accepted)

很簡單,但是非常浪費時間的一題。尤其是這題是用pdf存檔,input又很長,結果我每次測試都不能複製貼上,只能慢慢打字;跟助教反應之後,他說:「對哦!沒想到的咧!」
這題我也是用非常鳥的方法,overload了istream又overload operator >....現在都不太想看自己的code= =

568:(20%)(Accepted)

作業題。找N!的最後一個非零數字。原則上不用用到大數,但是只單純去找個位數的話會遇到進位問題,因此要保留部分的位數。

825:(20%)

在迷宮找路徑。雖然是作業,不過我個人很不擅長這類題目,當時就沒做了,這次當然也沒做(汗)。

10017:(20%)

作業題。我強烈希望河內去死一死(笑)。

10409:(20%)(Accepted)

作業題。原則上應該是送分用的....可是助教說答對率比568還低。我想大家應該要養成看過所有題目後再下手寫的習慣的。

10791:(30%)

數學題。應該是這次所有題目裡最有趣的一題,可是我被那個該死的555拖到時間,等我用最後幾分鐘看了這題題目後,就覺得我應該也有辦法寫出來。可是寫了這題我就做不出555了,所以也沒什麼好可惜的。
題目是給你一個正整數N,則你可以找到無限多組其最小公倍數為N的數字集合,目的是要找出數字和最小的集合。我想這題應該跟質因數有關....因為要是乖乖地列出所有的數字,不TLE也很奇怪。有空我可能會去做這題吧。
就這樣,我的總分應該是70....好像不是很理想,如果我有把作業都拿來的話,應該是可以破百說....太可惜了。

2007年6月11日 星期一

C++陣列過大造成stack overflow

如果你有機會在 local 宣告一個夠大的陣列的話,應該會發現雖然編譯無誤,但是在程式甫執行就立刻惡性停止。這是因為區域變數,記憶體會被分配在 stack 區段,而這塊區域一般來說並不夠大,大到可以放巨大陣列,因此只要陣列太大,就會立刻 stack overflow。
解決這個問題的方法有三種,其中一種是把變數設為 global variables。global variables 不會被配置到 stack 區。然而我們知道,不加 const 的全域變數是非常不被鼓勵的寫法,這會使得程式的維護性降低。
第二個方法是在編譯器的選項裡調整 stack 區的大小,這我個人也不推薦。
而第三種方案是,在宣告時不要預先宣告好陣列,而是用 dynamic array 的方式,先宣告好 pointer,再手動分配一段記憶體給它,C++ 用 new,C 就用 malloc。
bool prime[20000000]; //這個會爆
bool* prime = new bool[20000000]; //這個不會
這樣就算設為 local variable 也不會 stack overflow。因為手動配置的區段會被分配在 heap,此區沒有如 stack 區段的大小限制。
最後請記得,自己手動分配出來的記憶體,請自己回收;回收完之後請再養成習慣,把空懸的 pointer 指回 NULL,這就是所謂的小三元(?)[?]
BTW,要對陣列做初始化,不要用 for,這樣速度很慢,C++ 的 <algorithm> 裡有個比較乾脆的函式,就是 fillfill_n,可以直接設定一塊容器的值。C 可用 <string.h> 的 memset。用法請自己問男人或是 Google。
至於 stack 或 heap 是什麼....請去問你們的組合語言或計算機組織的老師吧= =

2007年6月2日 星期六

狗屎運....

實在是沒想到會得獎....有塞到= =
這次題目比上次南程盃預選好多了,比較有鑑別度,上次真的是太誇張了,只有一題是中等,其他全部是難。[?]
這次共八題,涵蓋有演算法、數學、資料結構,三個願望一次滿足。(?)
我到三點半為止(大約是比賽的200分鐘左右)做出四題,不過接下來就再也沒做出來了....[?]
以下是介紹:

10471:

這題題目我當時沒看....Tree我也是非常苦手。
不過這題全世界有試過的人只有三百多個....

10527:(Accepted)

這題很煩....因為題目給的數字最大到1000位數,所以一定要用大數。
換句話說這題是考大數除法....對字串處理不熟的人很容易吃到WA。
最後要注意的是,除到最後還剩二位數以上的話,代表這個數字是不可能被分解了,這時的答案是無解。

10699:(Accepted)

很典型的題型....求有多少個不同的質因數....
這題也沒什麼難度,因為數字限制在1,000,000以下,所以不用建立質數表也可以在時限內跑完。
請記住兩個重點:找質數只需找到N的平方根即可,還有除了2和3以外,其他的質數都是6n+1或6n+5。

10701:

資料結構題。
因為題意好像有點不清,我沒有做這題。

10891:

這題應該要用到演算法吧。
光是要怎麼玩出最佳化玩法就要寫很久了....有想的價值,但是放棄。

10916:(Accepted)

這題乍看之下要用大數寫....其實不用....
首先,晶片的bit數的算法是X - 1940再除以10取整數。所以1960是4-bits,1980是16-bits....以此類推。
然後把它當2的指數就可以得到它最多是幾位數,再做一次2的次方就可以得到最大值。
所以題目的式子是:N! <= 2 ^ ( 2 ^ ( ( X - 1940 ) / 10 ) );求N的最大值。
直接算一定會爆,所以對兩邊取對數:log 1 + ... + log N <= 2 ^ ( ( X - 1940 ) / 10 ) * log 2
這樣兩邊的值都不會超過double,剩下的就是很簡單的迴圈了。
由於只是比大小,不用擔心準確度的問題。
不知道為啥很多人死在這題....
(PS:這題我好像只花了13分鐘....)

11044:(Accepted)

完全是送分題,有來就會對,所以沒什麼講的必要....

11127:

據學弟說他是用暴力法求的....我是一直在想有沒有算術上的解法....看來是沒有= =
這次WA一次[?],其他都是一擊必殺。
比較不利的一點是,因為我是空手到,所以任何的思考都是在小畫家上畫的....
請要比賽的人注意,就算不想帶參考資料也要記得帶紙筆= =
對了,贏我的人不但是學弟,而且他答對六題!
面目無光....

2007年5月28日 星期一

RTFM

有個人問到出現這個問題該怎麼處理:
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.
E: _cache->open() failed, please report.
瞎了嗎?明明解法就寫在上面還問要怎麼解!請不要辯解說英文爛,要比我也不會輸的啦[?]!根本就是看到英文就直接自動無視嘛!明明就是查個字典就能解決的事,別拿來礙眼好嗎?
人腦轉得慢沒關係,但是瞎就不能原諒了。

2007年5月14日 星期一

歷劫歸來的Desktop....

其實我不是故意要拖這麼久沒更新的
只是小看友達和BenQ等公司是會吃大虧哦....
事情又要從我的螢幕說起....
之前我有提過它曾經拿去修兩次吧?
但是拿回來不久後,它又在螢幕上出現一條垂直的"亮線"
好,非常好....我也不知道他到底是怎麼修的,每次修完都會出現新的問題
好吧,我認了,反正有Laptop可以先頂一下,我再拿去給他修一次
OK....這一修就將近一個月....
理由是料件還沒下來,中間有點複雜的企業關係就不說了
反正就是為了等新的料件下來,我排了約三個星期的隊
好死不死我所有的ネタ都在Desktop上....因此我除了ACM的code之外什麼東西都不能動[?]
好吧,等了那麼久,螢幕也回來了,終於可以復活了吧?
就當我這麼想的時候,網路又給它莫名其妙的斷了一天半,原因不明....
非常碰巧的是當天凌晨00:00是我要交作業的deadline
OK....振作起來....開始玩雙刀流了.....
Desktop & Laptop
Windows & Linux
JAVA & C++

2007年5月5日 星期六

I do

Lyrics: Ilaria Graziano
Composition: Yohko Kanno
Vocal: Ilaria Graziano

nell'illusione ho creduto alla mia forza inesorabile
e inevitabilmente sono diventata debole
ora sento gli eventi si transformano e so già
di emozioni che aprono ricordi lontani

nell'anima ritrovo la speranza che nel corpo stanco ormai
ha smesso di vibrare come un fuoco spento dal mio pianto
tra le mani un filo d'acqua porterò con me e
nel deserto un filo d'erba sopravviverà

I do, I do, emergere dal fondo per lottare e poi
salire in alto più che mai
I do, I do, guardare nel futuro e sorridere
senza temere nulla più

in un instante nuove aspirazioni anche se davanti a me
si apre uno scenario di conquiste e smarrimenti,
nel silenzio, riflessi de epoche lasciate via
respirando ne avverto il moto circolare e poi...

il tempo si è fermato per tracciare nuovi confini, ed io
mi spingerò lontano raccogliendo le mie forze nel vento
tra le mani riflessi di epoche lasciate via
camminando ritrovo le tracce indelebili

I do, I do, gridare contro gli occhi spenti e gelidi
per essere sempre di più
I do, I do, oltrepassare mondi inespugnabili
senza temere nulla più...
I do, I do, emeregere dal fondo per lottare e poi
salire in alto più che mai
I do, I do, guardare nel futuro e sorridere
con una nuova identità
fino a quando il sole sorgerà...
I do…

在虛幻中我相信自己無畏的力量
卻軟弱到無法逃避
我現在感受到、我已知道,它在改變
強烈的感情喚醒過去的記憶

疲憊的肉體曾如同被淚水澆熄的火焰般
如今靈魂卻已尋得失去的希望
用雙手掬起吧,哪怕只有一丁點水
這樣沙漠裡就能有些許的草存活下來吧

I do, I do, 掙扎著想要從消沉中振作起來
變的無比堅強
I do, I do, 望著未來微笑
不再有任何畏懼

在我眼前湧現出嶄新的希望
無論獲得或喪生,故事是否發生
在寂靜之中,拋棄時光倒流的想法
一邊呼吸一邊關注著那反覆往來的動向,然後…

為了追尋停止時間的前端,那全新的盡頭
我將自己遠遠地推向前,聚集風中的我的力量
將棄於彼方那無法停止的思念,重新拾回雙手之中
向前尋找無法消除的痕跡

I do, I do, 我對著他寒冷如冰的眼睛哭喊
總有一天會比現在更好
I do, I do, 要超越艱難的世界而去
不再有任何畏懼
I do, I do, 掙扎著想要從消沉中振作起來
變的無比堅強
I do, I do, 望著未來微笑
與全新的自我一起
等到太陽升起的時候…
I do…

這是Ghost In the Shell: Stand Alone Complex 2nd GIG最後一集的插入曲,素子跟久世差點被核彈炸死時播的歌。GIS系列的歌都是歐語系,從Inner Universe到player都是,俄文、拉丁文、英文、義大利文,還有很多不知名語言的配樂。菅野洋子和梶浦由紀大概是兩個最愛用不知名小島方言的作曲家吧XD(附帶一提,這首是義大利文)。
義大利文不在我的守備範圍,所以翻錯也不要找我。

2007年5月4日 星期五

好high的數位系統設計

實習的期中考第一次這麼high啊....OTZ
第一題的CSA,好在考前十分鐘有跟同學把它寫出來= =,不然大概會噴吧。
第二題的ALU要用多工器去執行八個不同的function,說簡單也很簡單,說難也很難。
簡單做就是把output設成register,直接用input下去算就好了。
難的就是自己做出乘法器或除法器....不過case block裡不能call module,所以寫法會變得更複雜= =
真的用邏輯匣把四則運算lay出來的人,我服你!
第三題,其實encoder比想像中簡單,只是課本裡的例子只有給到4 bits,1 byte的要自己想辦法類推出來。
不要想畫K-map,16*16的map不是開玩笑的。
而且因為我不會用always block,所以整個module都是用邏輯匣去lay出來的= =
第四題是有點題意不清。
簡單說就是把a,b,cin放進decoder去解出8條線,再把其中各4條做or gate,出來的當成sum和carry out,最後再把四個1 bit adder合成4 bits adder就好。
基於跟上面相同的理由,這題我也是全部用logic gate layout = =
我做的順序是一三四二,因為ALU看起來真的很嚇人。
最後還要感謝放水放很大的助教!XD(畢竟是陪我們考到12點....)

2007年5月1日 星期二

寫什麼?ACM都不AC啦!

以為一年級的課就很好修的我實在是太天真了....早知道第一堂就來上課,至少還來得及退選= =
WA還好....一直TLE是怎樣?= =
O(n)還不夠快是吧?更!
後記:
後來發現是它會在input的檔尾放一個white space
如果是用EOF做為結束判斷的話會進入無窮迴圈
因為istream::>>雖然會把white space push進來,但是卻不會pop出去
要等到下次的istream::>> calling它才會自動discard掉
問題是要讓istream::>> calling成功的條件是,white space後有資料
因此資料最後接white space再接EOF會造成這個white space不會被drop掉
沒把它drop掉自然就接不到EOF
然後你就無窮迴圈了....

所以說ACM真是陰險....

話說我作的那題用了約二秒半,記憶體約5500左右
有人用0.031秒就做出來了,而且記憶體是minium(汗)

2007年4月23日 星期一

我受夠了迷思的迷思了

  我在打啞謎嗎?不是,我只是對一些國文程度不好又愛亂用辭彙的人感到不爽而已。
  什麼叫做筆電的迷思?點進去一看竟然是在問筆電的事!這種時候要叫疑惑吧!別開玩笑了,「迷思」乃是"myth"的音譯,即為「不切實的概念」,什麼時候可以這樣用了?年輕人的創造力不是用在這種地方吧?這只能視為語文能力低落的愚蠢根源,而且竟然還像瘟疫一樣地傳染出去!
  我只希望腦缺的教育部不會因為年輕一代的誤用又積非成是地把辭典改掉。
「我跟你說啊....人蠢只要閉上嘴巴就不會被抓包,你還是少開口為妙吧?」
--by 伊吹佳奈美「斬首循環」

2007年4月17日 星期二

我的JS好像越來越肥了

  嗯....有用Web Developer的人可以去看一下我用到的JavaScript檔,昨天用得太high,回過神來才發現我已經用了三個函式庫,除了Prototype之外,還有UrMap和SyntaxHighter,加起來大概可以比美一張圖檔了吧。
  希望不會拖慢速度才好。

  追伸:如果發生版面被嚴重破壞的情形,請直接重新整理,還是不能解決的話,請聯絡本網誌管理員--也就是敝人在下小生我,謝謝。

2007年4月3日 星期二

恐怖哦~恐怖到了極點哦~~

  從昨天開始就有一兩個WLM的聯絡人不斷地要傳一個壓縮檔給我,而且模式都是先發一個很像是BOT的留言,再傳一個自稱是相簿的zip檔....
  雖然WLM 8.1似乎沒有收到檔案,可是Kopete卻會出現接收訊息。
  到底是我被hack還是其他人被hack了?

2007年3月28日 星期三

與Linux的第一次戰爭(下)

  前一篇我介紹了如何安裝好一個基本的作業環境,不過對於桌上使用來說,這是很明顯不足的。
  接下來會提到一些桌面應用的教學。
  一般來說,剛裝好的Kubuntu edgy在開機完後會有錯誤訊息,如果你有幸遇到而還能執行動作的話,請立刻把skim這個套件移除。它就是造成錯誤的元兇。
sudo apt-get remove skim
  我也不知道為什麼edgy預設會把這麼危險的東西放進去....(汗)
  首先最基礎的當然就是能看網頁和能看A片看動畫聽音樂。
  KDE的預設影片播放程式是Kaffeine,音樂播放程式是AmaroK;原則上AmaroK和Kaffeine用的都是Xine為底的引擎,不過你如果想用其他的也可以。
  很不幸的是,由於很多codec並不符合GPL,也因此無法包在正式發行版內,在Linux上的只有少數幾個可用,但是大部分的影片和音樂是無法播放的。
  對於音樂來說,你需要的是libxine-extracodecs套件,對於影片來說,你需要的是w32codecs套件;通常只要用台灣社群版的sources.list,就會出現在列表上,不過某些時候似乎會找不到
sudo apt-get install w32codecs libxine-extracodecs
  裝完之後它就會讓所有播放程式都共用同一個解碼庫,不用再去針對軟體做特別設定。
  AmaroK的表現是沒話說的,不過Kaffeine在某些AVI解碼上的表現不好,而且對於外掛字幕相當不友善。所以我又去安裝了VLC player,這套可以拿來播放*.flv,而且對字幕支援良好,缺點是不能播放*.rm*,且對*.wmv支援不佳;不過它的缺點剛好在Kaffeine上不會有,所以說我目前是交互著用這兩套。
sudo apt-get install vlc
  當然你會希望能夠調整每種檔案它的預設開啟程式,不用每次都用右鍵開。其實這也很簡單,在檔案上按右鍵,選屬性,就可以找到它的預設開啟順位。
  如果你有iPod的話,可能會希望有一套像iTunes的管理軟體可以作用在Linux上。是的,這裡有一套還算堪用的軟體:gtkpod
sudo apt-get install gtkpod-aac
  它可以做到很多在iTunes上能做的事,除了新增歌詞和播放音樂。你必須要在perfomance裡設定它的外部播放器,通常它會是AmaroK。另外,也別忘了把文字編碼改成UTF-8。
  事實上AmaroK自己就能夠掛載iPod,不需要任何協助。
  想抓圖的話,只要按下PrintScreen鍵,KDE就會自動呼叫KSnapshot來抓圖。
  KDE桌面還有一個殺手級應用,那就是Kapapult
  在任何地方按下ALT+Space就可以呼叫Kapapult,然後打出你想執行的程式的名字,它就會逐字尋找最可能的程式。
  比方說,輸入fi會叫出Firefox,輸入ama會叫出AmaroK,輸入ka會叫出Kate,輸入kon會出現Konsole等。更誇張的是,如果你正在使用AmaroK,那麼播放清單中的曲名也會在尋找範圍內,可以直接播放該首歌。
  這就是為什麼我很堅持應該使用同一個桌面系統的程式。而Kapapult更是讓我離不開KDE....XD
  我想大概有很多人有看過MAC OS的桌面是多有質感吧?其實Linux上也有類似的套件可以讓桌面變得賞心悅目。以前都是用compiz來美化桌面,後來由於各種問題,變成由beryl主導了。
  由於原文太長,避免囉嗦和抄襲之嫌,請前往以下網址觀看:Beryl 自動安裝!! Nvidia 版!!! @ Ubuntu 正體中文站
  寫得有夠多,其實要做的事很簡單。總而言之,就是要先去安裝Nvidia最新的驅動程式,然後再安裝beryl的套件,就可以作用了。如果你看得出來shell在幹麻,我想應該可以自己手動安裝。
  用過beryl之後,我相信應該沒人會再去屑Vista一眼吧?Vista支持者,我必須要很難過的說一句....Vista SUCKS!
  如果你有想要在開機時就執行的程式,方法有兩個。
  一個是在關機時也留著它,那麼下次開機時KDE也會自動維持紀錄。另一個方法是,在~/.kde/Autostart裡建立該程式的捷徑。以上面提到的beryl manager來說:
ln -s /usr/bin/beryl-manager ~/.kde/Autostart/beryl-manager
  其他程式即如法泡製。
  如果你有兩個以上的硬碟,並且希望它能在開機時掛載的話,必須要去修改/etc/fstab的設定。
  第一個參數是硬體位址,第二個是掛載點,第三個是檔案系統,第四個是其他的雜項設定,五跟六一般都寫0就好了。
  舉例來說,我有三個分割區是/dev/hdd1,/dev/hdd5,/dev/hdd6,想分別掛載在/media/windows/c,/media/windows/d,/media/windows/e裡,檔案系統都是NTFS,而且我希望它支援UTF8檔名和所有人都可以讀取,那要加入的敍述應該是:
/dev/hdd1 /media/windows/c ntfs locale=zh_TW.utf8,umask=0222 0 0
/dev/hdd5 /media/windows/d ntfs locale=zh_TW.utf8,umask=0222 0 0
/dev/hdd6 /media/windows/e ntfs locale=zh_TW.utf8,umask=0222 0 0
  如果打算要寫入NTFS的硬碟,就必須要安裝ntfs-3g這個套件。安裝好之後把檔案系統改為ntfs-3g,再把umask設為0000即可。
  此外,光碟機預設是沒有支持UTF8檔名的,這個也是要去修改fstab才行。在雜項那裡新增一個iocharset=utf8即可。
  中文輸入法的部分,要注意的一點是,6.10所安裝的skim非常容易出錯,因此安裝完之後最好立刻把它移除。
  雖然很多人都推gcin,但是由於gcin對他國的輸入法實在不是挺好用,我還是繼續使用scim。
  如果遇上無法打字的情況,請在該程式的輸入欄裡按右鍵,把input method改成scim。
  另外,輸入法也是很容易跟其他程式相衝的東西,比如前陣子gcin + flash player 9造成死當,及scim和reinlendar相衝的問題。
  而知名的行事曆reinlendar也有Linux版,不過它除了會跟scim相衝之外,還會有背景殘留的問題。
  在網路的應用層上,驢子可以使用amule,BT有Ktorrent,續傳有Kget,BBS有PCmanX可用,而SSH連線就用終端機登入即可。
  特別要一提的是,個人設定檔都會放在家目錄底下,並且是隱藏的。如VIM會有一個.vimrc檔,bash shell會有.bashrc檔等。
  而.bashrc是特別值得調整的東西,比方說,我在其中加入:
alias 'linux' 'ssh account@linux.cs.ccu.edu.tw'
alias 'up' 'sudo apt-get update && sudo apt-get upgrade'
  就會變成,以後我在終端機輸入'linux'就會自動SSH連線到我們學校的工作站,輸入'up'就會自動執行套件更新及安裝。
  其他還有很多,像是環境參數或是文字介面的風格等,都可以在.bashrc裡調整。
  嗯....大概就是如此吧。
  這篇的起草日期是2007/2/2,完成日期是2007/3/28,如果我再不貼出來的話,可能Ubuntu 7.04就出了說(汗)。
  根性のなしは伊達じゃない!

2007年3月19日 星期一

UrMap in blogger....


某MF給的靈感....

靠北啊!真的可以用!
不過我也想不到要拿來幹麻就是了....

2007年3月18日 星期日

2007年3月17日 星期六

NEET少年事件簿--卷一

  為了避免有人認為我根本在放羊吃草,雖然心不甘情不願還是來報告一下某NEET少年的出來事好了。

事件一:

  寒假時原本以為只是去親戚那裡幫個小忙,但這位仁兄完全沒想到他必須要在完全沒有任何ASP及JavaScript的底子的情況下,做出需要連結資料庫及AJAX技術的東西,並且同時認識了職場的黑暗。最後在眾友人及Google大神的幫助下,成功的在遣返荒地前二天完成;真不愧是以隔壁老王的名字發誓的少年。
  另外,在工作時該名少年似乎發生了嚴重的幻視及幻聽;當事人形容,他隱約地看到螢幕上有個戴著鴨舌帽、拿著網球拍、吊眼睛的死小鬼,對著他說「你還有得學呢!」。自此之後他連做夢都會夢到該名人類最強國中生拿著網球拍嗆他的惡夢。

事件二:

  經過了幾場莫名其妙的無駄溝通之後,NEET少年跟著另一名也算脫離常軌的少年飆車回了田中央的隱居之地。
  原本以為會隔幾天才收到行李的少年,卻在隔天早上就接到父母送貨的電話。於是少年開始了清掃房間的迎接工作;正常少年要拿起掃把時,門外敲門聲響起了。
  門外的是拿著行李要搬進來的父母,門內的是一臉囧樣的NEET少年。

事件三:

  行李扺達的隔天,螢幕無預警陷入沉默狀態。
  於是少年只好在螢幕修好之前暫時過著清教徒般的生活。
  等他發現他被效率奇快但粗心無比的維修人員擺了一道時,已經是四天後的事了。

事件四:

  少年在學校某單位的工作由於RAID Card的Driver不齊,因此被迫屈於現實做出不甚完美的處理。
  爾後不久因為某些事件而使自己陷入危機之中,尚未解決。

事件五:

  少年為了某堂自由選修的課本四處奔走。
  中文版學校書局可以代訂,但是原文版書籍由於某些機車理由而無法取得。
  更白目的是明知這種情況還是堅持要訂原文書的NEET少年。
  於是他詢問了代理書商,取得了該書局只出貨給嘉義大學的情報。
  但是在徵詢目前就讀嘉義大學的朋友時,卻發現他完全不知道訂書和查書庫的相關細節。
  少年抱著可能會白跑一趟的決心去了一趟嘉義大學,看到在營業時間卻關門大吉的書局時,他為了自己的預感之準而感動地落淚。
  雖然教授已經教到第三章了,我們卻看到仍為了書而四處奔走的NEET少年。

事件六:

  雖然選修了ACM訓練課程,卻發現自己可能沒那麼多時間寫完的少年,目前為了該不該參加南程盃預選而煩惱中。

事件七:

  由於老家的電腦發生異狀,不得已而回到老家處理的少年卻發現,那是只要備份再重灌的簡單工作。
  想不透為何家人的電腦雖然有裝防毒軟體卻依然不時中毒,自己沒裝任何防護卻毫髮無傷的少年決定,這次該好好教育家人何謂良好的習慣,可能的話不排除使用肉體語言
  在等待更新和掃瞄的無聊時間裡,少年終於開始撰寫他的網誌。但是他卻忽略了老家的電腦有不定時無預警重開機的奇妙習性。沒有儲存草稿的少年在心灰意冷之際,幸運的發現Firefox幫他一字不差的存下文章。少年打從心裡感佩這隻大德大能的火狐狸。
  我想以後我們還是有機會再報導這名NEET少年的平凡一生的。

2007年3月12日 星期一

小事

  嗯....好像很久沒有貼新的東西了,我的惰性還真不是蓋的。並不是想不到東西可寫,而是一但想寫東西就會有如潮水一般地湧上心頭,百川匯流的結果就是資料漏失,畢竟我的緩衝區就如我想的一樣小。可能的話我還真希望能像淡幽那樣寫字。
  基於前陣子有人跟我抱怨過的標題名稱,我想在此作個解釋。
  首先,是那個很引人注目的標題『「 」』。這到底是怎樣?當然想不到名字也是原因之一--其實我最討厭想名字了。當然,中間不是少了什麼字,也不是用了什麼額外字集,只是它一開始就是全形空白。
它是空的
  空的概念跟「零」或是「非」不太一樣。溫度零度並不代表沒有溫度,說某事為「非」也代表了另一事為「是」。要以我最熟悉的語言來描述的話,就是realnumber, boolean, null。
  零終究是一個實數,它可以被運算,有數學上的意義。真假值是一個基準,但是這會扯到很多主觀和客觀的東西,在哲學上它是可以被大加討論的。但是null....它就是什麼都沒有。
  回到剛剛說的好了。為什麼我中間什麼字都沒寫?當你在RSS feed中看到這個標題的時候只要記得一件事:它是空的
  不過還是有人看不爽的樣子。真糟糕啊....有空再想想新的名字吧。
  至於我的慣用帳號為什麼是CA或是legnaleurc
  那又是另一個雕蟲小技了。

2007年3月2日 星期五

我的笑點還滿低的嘛....

  在Bitcomet的官網首頁上看到這句話:
0.84 がリリースされました。0.83は寿命が短かったですね
  我竟然不爭氣的笑了出來....
  然後在下載頁看到這句又非常丟臉的想笑:
最新版のダウンロード(新しもの好き、人柱向け
  是怎樣?M嗎?哈哈
  ....對不起我好像壞掉了

2007年3月1日 星期四

不爽

  實在太靠北了,電腦才剛搬上來不滿一天就掛了螢幕,干!沒螢幕的電腦除了拿來掛BT放音樂以外還能幹麻啊?我還要選課耶!
  快把我螢幕還來啊!!!!
  後記:
  後來我忍不住打了個電話去問一下....
  二個工作天前:
  「多久會好?」
  「大概一兩天吧」
  「會打電話通知我嗎?」
  「對,你的手機有寫正確吧」
  「不然你現在打過來」
  「不用不用」
  二個工作天後:
  「喂?請問我的螢幕好了嗎?」
  「咦?沒有叫你隔天來拿嗎?」
  「....」
  而當我很興奮地拿回螢幕之後,很shook的發現它竟然收不到訊號,檢查之後發現是DVI線自爆了。
  後記的後記:
  在更深入的了解後,發現並不是DVI線爆了,而是螢幕的DVI接頭爆了....也就是說我還要再拿去嘉義修一次。
  這個故事證明了:
「靠北的事永遠有變得更靠北的傾向」
--靠北法則第三條

2007年2月23日 星期五

好戲演不完

  咈咈咈,現實永遠比小說更離奇啊!我實在是太興奮了~
  呂布雖然己死,但是又出現了個魏延;關張己然盡力了,而你覺得你會是臥龍還是鳳雛?她又會是劉備或是阿斗?
  咯咯咯....好好演下去吧,好戲永遠是有人支持的。

2007年2月22日 星期四

ジル

lyrics:六浦館 music:MANYO


四角(しかく)()()られた わずかな(そら)隙間(すきま)
()こえるリラの(おと) (しず)かに(かさ)なる

()()ばし()えるもの (すべ)てを(つつ)()んで
(なつ)かしいぬくもりを (さが)してた

(ゆめ)()たあの() (なに)()わらないはずなのに
どうしてあなたは (はな)れてしまうの

(わたし)(てのひら)に ()()りた欠片(かけら)
そっと そっと (のが)してしまわぬよう

(たたず)(とお)(かげ) (しず)んでゆく(ころ)には
あなたのことも (わす)れゆくでしょう


どこまでも(つづ)く (さが)辿(たど)った(みち)()(まばた)くことない (めぐ)(ほし)のように

(しろ)(すな)()()げて ()ばたいた(つばさ)
きっと きっと 見失(みうしな)わないよう

()こえるリラの(おと) (ひび)()(ころ)には
(わたし)此処(ここ)から ()えゆくでしょう

天空中裁出細小的四角縫隙
聽見了平穩地重複彈奏的豎琴音

伸腰所見視界 將所有映入眼簾
從中尋找那令人懷念的溫度

夢見的那一天 應該是什麼都沒改變
但是為什麼你卻離開了

翩然落入我掌中的碎片
小心 翼翼 別讓它溜走

遠方佇立的身影 消逝的時刻
你也會被遺忘吧


無論到哪裡都持續追尋著道路的盡頭
不容一瞬 如運轉不息的群星般

揮舞的雙翼將白砂揚起
絕對 絕對 不會將它遺失

當耳中的豎琴響聲停止之時
我就會從這裡消失了吧

這首歌就是上一篇曾貼上的MAD: Thought -time- 的配樂,看了看歌詞,嗯~
好像有點寂寞的感覺?
作者的YUCCA Project好像是把這首歌拿來當電子書的配樂,不過因為容量的關係,原檔已砍。
只有寫作詞和作曲,唱的人是誰不知道。
網址就放在清單上,請自己去拜訪吧!
不過故事倒是二年沒更新就是了....
這次的翻譯只花了二個小時,算是很短的了。
下次有力氣再去挑戰其他的歌詞吧!

2007年2月19日 星期一

自動加上ruby的注音標示

  昨天很無聊地晚上不睡用JavaScript把這個東西生出來:Ruby Tag Creater
  首先把要標示注音的日文先貼在Microsoft Word裡,用它的注音標示功能標出注音,再貼到這個網頁上的textarea裡。然後把該加入的html tag加一加,因為加上ruby標示之後會很亂。
  依照First, Second的步驟即可看到效果。用IE或是加上XHTML Ruby Support的Firefox都可以看得到效果。而且不支援的瀏覽器還是可以看到它原本只加上半形括弧的樣子,甚至於複製也可以變成那樣。重點是這是有W3C背書的。
  若是不喜歡後面標的假名,也可以利用底下的刪除功能。但是,這個功能並無法復原,如果反悔就要再重新複製一次。
  如果有人有興趣的話.....我想把它弄成Firefox的套件說....XD

2007年2月18日 星期日

新增模版:計數器

  剛才我在非常無聊的狀態下去弄了一個計數器。其實原本是打算自己寫一個的,不過又要搞成AJAX實在是有夠麻煩....等我哪天開竅了(?)再去寫個計數器好了。
  不過這還真是有夠傷感情的啊....按下去連名次都有....OTZ

2007年2月17日 星期六

繼續閱讀的做法

  這幾天不停在測的就是在文章內加上“繼續閱讀”的做法,並且只限定在首頁上發生作用。可能是我笨不會用別人的模版吧,只好呆呆的自己寫一個。
  要做到這件事,首先要先在head裡加入外部的JavaScript,第一個是很廣泛被使用的prototype.js,第二個是我自己寫的js檔。
  為什麼不把js檔寫在head裡?因為blogger用的是XHTML1.0 strict DTD,script裡的內容會被視為PCDATA,這會對特殊符號造成複雜影響,所以最簡單的方法就是外部引入js檔。
  在head裡任意一處加入以下的文字:
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="myjs.js"></script>
  然後myjs.js的內容如下:
  其中,if( location.pathname.search(/^\/(index\.html)?$/) >= 0 )用了一點Regular Expression的技巧,因為我的目的只要它在首頁上作用即可,在各文章的單一網址內不要作用。
  最後,在body的後面加上onLoad="init();",然後在自己的文章裡,要加入繼續閱讀的地方加入一行:
<span class="detect"></span>
  在要隱藏的文章前後加上:
<div class="stealth">
文章內容
</div>
  即可。
  要注意的是,這兩個tag一定要一起使用,使用的數量不可以不同,否則會發生錯誤。

2007年1月28日 星期日

與Linux的第一次戰爭(上)

  其實我從11月時就一直想重灌了,不過換OS可不是換瀏覽器,這要動的可是根本上的東西,而我實在是沒什麼時間去搞它。
  主要是,單純重灌Windows的話,由於檔案系統不變,以及要用的程式庫我早己準備完成,加上我把硬碟割得很細,因此只要format C就好,反而是更新檔花滿久時間。
  而要是換OS的話,影響可大了。
  第一,檔案系統的不同。Linux雖然可以支援NTFS,不過寫入的地方有點問題,而Windows根本是除了VFAT之外就不認其他檔案系統了。這害我要先把檔案全部都備份一次。而長年BT下來的東西實在是....
  第二,原本能用的程式現在全部要找代用品,包括PieTTY。
  第三,該死的Driver....這方面永遠是Linux的痛腳。
  基於以上的理由,我之前一直都是用VMware試裝Linux,順便摸索一下哪個發行版比較好上手。
  在經過了短暫的討論之後,選了Ubuntu作為踏入Linux的第一步。為什麼選它而不選台灣使用人數最多的Fedora Core?....其實最主要原因是因為....我討厭人多的地方(爆),於是像Ubuntu這種新興的發行版就變成了很適合我的環境。
  當然它也是有其他的優點囉。一個是安裝光碟即附帶了LiveCD的功能,使用LiveCD的時候可以在不安裝入硬碟的狀況下就試用OS,重開機之後又是原本的OS,不過因為是載入記憶體,所以記憶體要夠大才能順,比較鳥的是,CD版的安裝片想安裝的話就一定要先進入LiveCD才能點選安裝
  另外就是它用的是Debian承襲下來的APT套件管理系統,這個實在是方便地沒話說啊!只要簡單的"sudo apt-get update && sudo apt-get upgrade"就可以更新所有套件,而且自動處理好套件的相依問題,害我有點不太習慣RPM的方式....
  然後就是GNOME和KDE之間的選擇了....在兩個都裝過之後,我選了看起來配色比較明亮,圖示比較大的KDE,加上我用Adept比較順手,而且也可以順便玩玩Konqueror,至少它也是通過Acid2的Browser之一啊
  最後當然就是愉快的試裝啦!因為我的CPU是64位元,再加上不太了解Ubuntu的版號關係,就選了"Kubuntu 6.10 desktop amd64"版來裝....
  然後就是麻煩的開始....
  原則上,沒什麼犯難精神的人,就選6.06.1的i386版就好了
  先由最開始來說好了。
  如果你有DVD的話,最好還是去找DVD版。因為CD版我裝起來怪怪的,而且DVD版有直接安裝到硬碟的選項,CD版一定要先進入LiveCD才能安裝。
  記得在選單這裡就要先按F2選你要的語言,因為DVD版的安裝介面不會讓你改語言。
  一開始會先叫你選鍵盤類型,通常台灣都是用美式鍵盤,因此不用讓它自動偵測,直接用預設值即可。
  然後會出現的是第一個小boss:磁碟分割。
  這裡我用CD版安裝時遇到的白痴狀況是,我無法調整分割大小,介面是一片空白。DVD版的純文字介面就沒有任何問題。
  如果你對它的預設配置很滿意,那麼你可以跳過下一段的說明。
  既然你看了這段,就假設你需要自行分配磁碟分割,那麼就有必要先解釋一下Unix系的硬碟分割概念。
  說起來其實不難,分割區主要分為主要分割區延伸分割區邏輯分割區三種。
  主要分割區和延伸分割區加起來不可以超過四個。而延伸分割區只能拿來當成邏輯分割區的容器,邏輯分割區也只能從延伸分割區中建立。基本上如果沒需要割超過四個磁碟區的話,全部都用主要分割就好了。
  Unix對於硬碟都是以給代號的方式辨認,規則如下:
硬體都是掛載於/dev目錄下。
IDE裝置是hd開頭,SCSI和SATA裝置是sd開頭。
第一個裝置會在後面加a,第二個則是b,以此類推。
裝置的第一個分割區的代號為1,第二個是2,以此類推。邏輯分割區會從5開始編。光碟機因為不可能有分割區,故不會加代號。
  舉例來說,我有一個IDE光碟機接在第一個,一個IDE硬碟接在第二個,無分割,一個SATA硬碟,有三個分割區;那麼我的光碟機代號為/dev/hda,IDE硬碟為/dev/hdb1,SATA硬碟分別為:/dev/sda1,/dev/sda2,/dev/sda3。
  了解了這些之後,還要知道,Unix是以資料夾去掛載硬碟,跟Windows用代號來區隔的概念有點差異,但是相去不遠。而Unix在根目錄底下的每個資料夾都有預設的用途,所以在分配磁區的時候就決定了該磁區的用途,因此這邊是需要花心思的地方。
/:根目錄。一定要給它一個分割區,而其他沒有分配到磁區的資料夾也會放到根目錄底下,所以要注意它的容量。一般建議是不要小於4GB。
swap:交換暫存檔,這個也是必要分割。跟Windows上的虛擬記憶體地位相同,不同的是由於Unix對記憶體運用良好,如果有512MB以上的記憶體,常會一天下來沒用到幾MB。我的建議是給個256MB就算很大了。
/boot:開機所用資料。一般不需要大於32MB。
/usr:使用者的應用程式所預設的安裝路徑。最好是8GB以上。
/etc:程式的設定檔會放這裡。1GB也就差不多了。
/var:作業的日誌和紀錄檔會放在這裡。這個要看使用者人數做調整,單人使用的話,不用超過1GB。
/tmp:程式運作的暫存檔。通常是所有人皆可存取,太小的話,會影響到程式的執行。保險的話就給個2GB。
/home:使用者的個人資料夾,通稱「家目錄」。想放什麼都可以,所以當然是多多益善囉!把剩下的空間給它吧。
  一開始我沒有經驗,就給了根目錄50GB的空間,swap 256MB,家目錄用剩的一百多GB。不過後來發現,就算我雜七雜八裝一堆,根目錄也用沒到5G....其實給個20GB就很夠了。
  在檔案系統的選擇方面,沒有特殊需求的話,選ext3就好了,這是Linux最傳統的日誌式檔案系統。其他如xfs等也是不錯的選擇。如果打算要讓資料可以跟Windows互通,就最好選擇FAT。
  磁碟分割作業結束之後,如果你同時有另一個可開機系統的話,會出現詢問要不要把GRUB開機管理寫入MBR裡的訊息。我個人的建議是:不要。
  你甚至要避免在安裝系統的時候裝上其他作業系統的硬碟,因為在我重灌幾次的經驗中,GRUB在MBR經常會發生抓錯硬碟,甚至抓不到的狀況。所以說,如果你有另一顆硬碟裝了Windows,最好把它的電源先拔掉,等裝完之後再插回去,然後用BIOS控制開機硬碟。
  之後會出現的部分是網路設定,這裡就請依照自己的ISP來調整。
  然後應該會出現使用者名稱設定,這裡也是依照自己喜好設定帳號密碼。要注意的是,這裡的使用者帳號會被設定為sudoer,也就是超級使用者,有能力用root的權限下指令,而密碼就是自己的密碼。由於Ubuntu為了安全理由不允許用root身份登入搞清楚誰是sudoer是很重要的
  之後大概就沒什麼阻礙了,等光碟片自動退出之後重開機,就會進入X Window環境。
  從這裡開始,雖然你有了GUI,但是很多時候我們依然需要終端機的協助,所以你必須要知道如何開啟終端機。在KDE下它是konsole,在GNOME下它是terminal。一般的狀況下,直接在X Window環境下開終端機就夠了。不過某些需要關閉X Server的情況下,你就必須用CTRL+ALT+[ F1 ~ F6 ]來使用CLI
  而在純文字模式下編輯文檔的東西,我個人會推薦vim。用慣了之後你真的會愛不釋手。詳細說明,這裡是很好的站:大家來學VIM
  至於文字指令,我想最基本的cd,rm,ls,mv等最好都要會。這個請各位去google或是直接看書比較快,或是我有空會寫出一些說明文件。
  你應該會發現,這時的解析度實在是有夠低。沒錯,第二個中boss來了,就是顯示卡的driver安裝。
  這裡會有兩個解法,而我兩個都有成功過,就端看你的運氣了。對了,ATI的使用者可以跳過這段,因為我是用Nvidia的顯示卡。
  第一個是用別人包好的套件包:nvidia-glx或是nvidia-glx-legacy。
  我個人是先用了nvidia-glx,發現沒用,再用nvidia-glx-legacy的。
  先下指令:
sudo apt-get install nvidia-glx-legacy nvidia-xconfig
  如果這裡出現找不到套件的話,可以先跳到套件更新的介紹再回來看。
  裝完之後,再鍵入指令:
sudo nvidia-xconfig
  如此就會自動設定好/etc/X11/xorg.conf內的設定值,不過依狀況可能還會有要自己修改的可能。無論如何,你都要先按下CTRL+ALT+BackSpace來重啟X Window。
  如果你在捲動頁面時不會延遲,那麼你就成功了。要是沒有呢?請看看我的第二個方法。
  先去Nvidia的首頁找到它的Driver下載頁,下載合適自己系統的Driver。為了要安裝驅動程式,你必須要先把X Window關閉才行。
  首先要先用文字模式登入,按CTRL+ALT+F1可以開啟第一個工作階段,而X Window預設是開在第七個工作階段,你可以用CTRL+ALT+F7來回到這裡。以下是我要打的指令:
sudo /etc/init.d/kdm stop
sudo sh NVIDIA-Linux-x86-1.0-9746-pkg1.run
  一開始會叫你上FTP去找己經編譯好的模組,不過別浪費時間了,選no它就會再編譯一個模組出來。最後會問你要不要自動執行nvidia-xconfig以自動設定/etc/X11/xorg.conf,選yes。
  最後再啟動剛剛關閉的X window:
sudo /etc/init.d/kdm start
  如果有看到Nvidia的logo一閃而過,就恭喜啦!
  然後是要調整螢幕的解析度。如果沒有正確選擇螢幕類型,會無法選擇1024*768以上的解析度。如果是用KDE桌面的話,請在「系統設定->Monitor->硬體」在第一個螢幕那裡選擇自己適合的螢幕型號。基本上只要選到類似的就好了,通常尾部的英文代號只是面板的差異。
  要是不幸地沒有合適的型號,或是找不到在哪裡設定,沒關係,這種時候請去查看/var/log/Xorg.0.log的內容。前面有標示(EE)或是(WW)的就是該注意的錯誤訊息。
  比方說我在log檔裡找到它說螢幕頻率不夠,無法使用1280*1024的解析度,那麼我就要去編輯/etc/X11/xorg.conf的內容,在Monitor的section裡面把螢幕的頻率調整到需求的頻率
  也有可能你裝完Driver之後無法啟動OpenGL,我個人的解法是,在log裡發現了這行:
(EE) GLX is not supported with the Composite extension
就在xorg.conf後加上這個:
Section "Extensions"
Option "Composite" "Disable"
EndSection
  就解了。
  要注意的是,對X server做任何的改動之後,都要按CTRL+ALT+BackSpace才會生效喔。
  好啦,把boss解決之後,接下來要做的事就較為簡單一點了。
  接著要了解的是,Ubuntu跟Debian一樣,都是用apt做套件管理,以dpkg解壓*.deb檔,而套件都會放在網路上的站台,等你需要時再下載回來安裝。所以說,做為站台列表的/etc/apt/sources.list是很重要的。
  對於這個部分,台灣的Ubuntu社群已經提供了在台灣的鏡像站,如此你就不用特地連到國外去下載回來,同時也加入了一些很實用的站台。不過別擔心,這些只是選用列表,不會強制安裝,反正選擇多一點總不是壞事。
  總之,先去找已經寫好的sources.list吧:
cd /etc/apt
sudo wget http://apt.ubuntu.org.tw/sources.list.edgy
sudo mv sources.list.edgy sources.list
  如此就會把列表更新了。記得更新完sources.list之後,還要先讓apt重新掃一次更新的套件,否則它還是會用舊的列表喔:
sudo apt-get update && sudo apt-get upgrade
  眼尖的應該會發現,這次我是把兩個指令打在一行;沒錯,指令可以用&&來連接,這樣它就會依序完成命令。
  這裡可能要看網路速度,要是網路太慢就會拖很久....更新完之後可能會需要重開機。
  為什麼不在裝顯示卡driver前就先更新呢?因為有可能你會安裝失敗,然後又面臨要重新安裝的窘境,這樣的話先更新不就多浪費時間了嗎?XD
  無論如何,到了這步之後,你應該就有一個完整的,乾淨的Ubuntu了!
  到這裡就結束了嗎?錯!戰爭可不是一兩天的事,請期待下集吧!

2007年1月12日 星期五

搞笑漫畫日和

1-01

貼紙

1-02

煬帝生氣了

國書篇

1-03

煬帝生氣了

洛陽篇

1-04

世界末日

1-05

奧之細道

1-06

哈里斯衝擊

1-07

哈里斯衝擊

1-08

御飯團君

1-09

魔法少女

1-10

西遊記

1-11

死去的我向太陽怒吼

1-12

名偵探兔美

2-01

名偵探的活躍!兔美

2-02

家庭教師

2-03

聖德太子的快樂木造建築

2-04

腹肌

2-05

加油浦島太郎

2-06

劍聖大和

2-07

最上川

2-08

明男

2-09

眼帶

2-10

漫力傳說颶風之凖

2-11

黑登山

2-12

LOVE江