星期三, 5月 12, 2010

FLOLAC 10 - 邏輯、語言與計算 暑期研習營

2010 Formosan Summer School on Logic, Language, and Computation (FLOLAC '10) (課程名稱在左邊,有時候我都會找不到 XD)

基本上,雖然這是一個每年都會告急的活動,大概是標題看起來不吸引人吧 XD 不過誠如嵐達網上所說的

嵐達網是一個為程式語言同好設置的中文社群網站。程式語言學原本即是計算科學之中有悠久傳統的重要類別。近年來,面對諸如並行處理等日益複雜的程式設計挑戰,不論學界或業界都再度對程式語言學感到興趣。

而 FLOLAC 10 就是一個這樣子的積極的嘗試。

我大一學微積分與普物的時候,我時常問我自己一個問題,到底學這些有什麼用呢 ? 其實莊子說了,以無用為大用,並不是學習的每件事物有效用能去學,我們必需去注視,他所能對我們產生質的影響。課程內容真的值得一聽(雖然我在三年前曾經去聽過,聽不太懂 XDXD),對我而言,參加這個課程是可以重新省思日常生活所用的一切。這三個東西對於現在的我而言,每一天都在使用,但是我卻每一天都不了解,我是基於這樣子的理由在參加的。

課程會不會很可怕,應該會吧,不過就參加吧,如果可以用報名費換到一個新的視野,老實說我覺得是非常值得的。我還記得我第一次參加的時候,沒有一個課程名稱是看的懂的 XDXD 現在好一點,只有一個看的懂 XDXDXD 有時候,不太在乎看不看的懂,反正最後去了,了解了就好,不了解了,也嘗試從中抓到一點東西。這個過程對我而言是相當有趣的。

為什麼不說課程在教什麼,第一,我不會,第二,看到這邊的人應該會自己看吧 (我是非常這樣子自以為的 XD),所以有興趣的人不妨試試 :)


---
失敗的廣告文 XD。

星期二, 5月 11, 2010

八百萬種死法

Eight Million ways to die.

紐約是一個有八百萬人的城市,如果有八百萬個故事,理所當然會有他媽的八百萬種死法。

我並不打算描述故事本身的內容有什麼,只是想提出一些有趣的事。一個小說的故事如果接近真實,會比較少人看的,因為冷硬無趣,我在 Perfume 的文章就說過,其實大部分的人生活是很平靜的,沒有什麼特殊之處,我們是不可能硬為自己製造出特殊的故事,大部分的人生活就是如此。而這本小說就是這樣子的小說,真實人生其實充滿了缺陷,然而我們在自己認為的錯誤中不斷的前進。

另外一種常見的小說寫法是,主角相當的不錯,不然就是你不太可能變成那種人,個性上雖然說不上完美,但是也算是非常不錯的,而這種小說的故事通常會比較精采,但是我看完這種小說通常忘了裡面在說什麼 XD。因為我的感官已經麻木了。有的人看小說為的是體驗另外一種生活,我看小說則是希望透過另外一個方式更為接近現實。

一百個華麗故事描述對於一個平靜冷酷的現實述寫。我想,我看到的就是這樣子的一個故事。

還是來寫一些有關推理小說的事好了。其實這本書不算是本格推理(就是你認為該有的元素都要有,有福爾摩斯就要有華生,犯人一定列舉過的,不能有不合理之處,線索不能突然跳出來之類的),推理小說其實後來出了相當多的說法,不過我一點都不在乎,我只在乎,一個小說的故事是不能描述一個符合現實的社會。日本非本格推理的小說我覺得我看過最有印象的大概是 宮部美幸 的 "模仿犯",這兩種完全走向不同的方向,當然,我覺得模仿犯的故事性還是強烈了些。以八百萬種死法來看,我覺得,如果一本書可以用平淡的描述完四百頁,而肯閱讀的狀況下,是相當能夠說服人的。我的文字不行,充滿了組織般的華麗(簡單的來說,就是空洞)


---
結果變成亂寫 XD。

星期一, 5月 10, 2010

寫作

老實說,我一點都不覺得我會寫作,也一點都不覺得我善用文字編織華麗,寫來寫去都是這些東西,這大概是這近一年來發文次數變少的原因,寫個學習心得是 ok 的,寫其他的東西似乎就是如此了。也某個程度證明,我的心境毫無長進,甚至後退了。

簡單的來說,認清現實並且前進,認份和突破是不同的事,先認份的把事情做好,再尋求有所突破,我不知道是不是有所遺漏,不過當下的我只能這樣子做了。


---
認份與突破

星期四, 5月 06, 2010

Precision-Timed Machine

Goal: 大部分的 Hard-real time system define deadline by worest-case exeuction time (WCET) 而現在大部分的 Computer Architecutre 是針對 averange-case 在做改善,所以 deadline time 可能不會改變,甚至變的更糟,於是作者嘗試在 hard-real time 提出一個新的架構讓 WCET 不會這麼糟,採用了 pipeline multi-thread interleaved ,也改進了對於 memory 存取的方式


---
其實看完目的,這篇大概就知道要幹麻了。

星期三, 5月 05, 2010

最近

希望自己的生活可以過的正常一點。

其實有些事也不知道怎麼說,好不容易決定自己要走 Compiler 相關研究了,如果細分的話,我會把 Compiler 分成 From-end, IR optimization, Back-end,但是其實對 Programming Language 的研究真的了解嗎,其實我一無所知 (Josh Ko 說是帶我參觀,不過我懷疑我自己是不是太混了 ...),決定還是該好好的專心研究吧,針對 VLIW Compiler ,邊做邊想 Functional Programming 是否能用 (對,我就是那個有了槌子就什麼都想敲的人 XD),只是邊做邊想會不會很對不起 scm 呢 ? 唉,真是三心二意的娘們啊 ...

IR optimization 本身會拆成數個 phase ,每一個 phase Input/ Ouput 是一樣的,只是重新做一些更動,以 basic block 來分,分為 local shceduing & global scheduling ,而 Instruction Scheduling & Register Allocaiton 是互相問題,通常做完一次之後,要再 rescheduling 一次(其實幾次都可以,只是看有沒有必要性),而在這個領域上可以用的工具大概就是 Graph Theory 與 組合最佳化。其實從這個過程中,認清了自己什麼都不會,沒有辦法深入去解決一個問題是我最大的問題。

Trimaran 的 Elcor 是一個針對 VLIW 的 Compiler ,Target Architecture 是 HPL-PD ,為了學會怎麼改它,竟然因此學會基本的 gdb 與 gdb script (Python Binding 研究中),不過到現在還是不會改,只能說 C 與 C++ 混合的 code ,再加一堆 global variable,實在是難以定義,不過大概有個頭緒了。

Precision-Timed Machine ,不如說是一個 Computer Architecture ,聚集各方大全(就是很多 paper 啦),嘗試在 hard real-time embedded system 做,consider time as a function to predict and repeat. 使用的技巧是 deadline instruction ,但是我抓不到這篇 paper 想要解決什麼問題或目的,因為感覺上我目前所看到的點,利用現有系統就可以解決了,那麼為什麼要造這一個新的 Architecture ,答案仍在尋找中。

嵐達網的文章真的是應該要好好寫,logan 真的寫的很好,我真的覺得是我不夠用心,但是最近竟然覺得自己的英文閱讀能力下降了 (明明讀的比以前多很多啊,怎麼會下降),不要為自己找理由。


---
記錄自己最近。

星期三, 4月 28, 2010

gdb save breakpoints

define bsave
    shell rm -f brestore.txt
    set logging file brestore.txt
    set logging on
    info break
    set logging off
    # reformat on-the-fly to a valid gdb command file
    shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > bps.gdb 
end

其實這是從網路上來的,不過這個 code 在 cgdb, gdbtui 上似乎不可行,看懂 code 之後(大概只有 Perl 那行比較難懂 XD),其實發現蠻暴力的,gdb 在 v7 之後支援 Python Scirpt binding ,是該來研究研究,今天也是試著用很破爛的方法達成 gdb 自動環境設定的方法就是了。大概這幾天持續嘗試之後再說。

gdb note's wiki


---
最近常備份 XD。

星期二, 4月 27, 2010

隨想

在城市中看不到程式,卻在程式中看到城市。


---
隨想。

星期一, 4月 26, 2010

cgdbrc

單純備個份,參考自網路上的,自己單純加了兩行,除非有必要,不然我應該是不會用 gdb 原生 XD (可能連 qemu 例外之類的 XD)。

以下放在 ~/.cgdb/cgdbrc

set arrowstyle=highlight
set autosourcereload
set tabstop=4
set winsplit=top_big
set showtgdbcommands
map <F2> :set<SPACE>winsplit=top_big<CR>
map <F3> :set<SPACE>winsplit=bottom_big<CR>
hi Statement cterm=bold ctermfg=6
hi PreProc cterm=bold ctermfg=4
hi IncSearch ctermfg=2
hi LineHighlight cterm=bold ctermfg=3 ctermbg=4

這樣子按 F2 或 F3 時即可選擇要放大上面視窗,還是放大下面視窗


---

星期四, 4月 22, 2010

Try

Try to explain something, but It's fail.


---
question or problem.

星期日, 4月 18, 2010

Perfume 與偶像

本篇同時在 love the Perfume World 與 No title, no thinking, no meaning 發表。

這個主題想寫很久了,但是寫出來只有一點點 XD

有一天,我和 allxxxxxts 在閒聊,他說有些 Perfume 在 A-Chan 唱歌的時候會一直喊 A~Chan,守住所謂的舊時代的榮光。但是 A~Chan 並不喜歡這樣子,我還蠻好奇的問了為什麼 XD?

因為這樣子 A~Chan 唱歌會不專心 XD

這答案真是出乎意外的簡單 XD,但是其實我對偶像開始思考是有一次我在李玟簽唱會說我的歌迷們,而張懸說聽眾開始想的。到底人們是怎麼看待偶像這回事的 ? 其實答案出乎意外的簡單,大概就跟我們這些寫 blog 的人一樣,寫自己想寫的,我們都很明白的知道寫 blog 的人不可能透露自己全部的事,但是確實也沒有必要將自己完全包裝 (這讓我想到某個日本團體 XXXXX XD),雖然忘了那個哲學家的思維是,沒有全部說出來就是謊謊,然後其實在事實上,我們對於大部分的人是可以接受的。

每個人在他的位置上就做好該位置的事,Perfume 大概就是我覺得很好的例子,可能 Perfume 是現在日本的一線偶像,她們是保持了部分真實在這個世界就可以了,其實我並不是很在乎她們跟我們的距離要多平民 XD 素人偶像其實就很平民,因為本來就從平民出身的 XD。

與其說是追星偶像,倒不如說,我們試著相信這樣子的人。


---
下次來討論 A~Chan, Nocchi, Yuka 三派的現象 XD

星期五, 4月 16, 2010

紀念不事生產的日子

Slide: Programming Tempratory Integrated Distributed Embedded System
僅紀念我這一兩個月不事生產的日子。

在 ycma 的指導下,我終於破破爛爛的讀完這篇 paper 了(還是是想完 XD?) 簡單的來說,就是學習如何建立 programming model ,學習怎麼樣思考問題,建立模型及描述進而解決問題。以後會做相關 paper 的問題嗎? 我想不會,我單純相信,這篇只是單純訓練而己。在這念這篇 paper 的過程中也學了 Haskell ,也決定了下個要念的主題 --- Precision-Time Machine

所有的事情也該繼續前進而不要再裝死了。該寫的 lambdawn, Perfume, Haskell 是該繼續進行了。


---
希望能繼續過著開心的生活。

星期一, 3月 29, 2010

學習雜想

ycma 要我推導的東西,我終於推出一點頭緒來,不過不知道是不是他要的。從這個中間體會到慢即是快,現在竟然非常習慣在紙上書寫所有的想法,以前總是要盡量的把所有東西電子化,其實現在也可以,寫完掃起來就好了,也不是一件很麻煩的事 XD。

現在思考比較不會想要用電腦,習慣靜靜的想,想的過程中也不會想用電腦,很大的原因是,在那個當下,用電腦並不會幫助我思考,所以我可以專心在紙筆上,可能是體會到了一點,我正在想我想要解決的問題,所以脫離是有可能的。也因為這個樣子,希望自己的桌子簡單一些好吧。

這個禮拜一忙起來是要人命,花了一天半的時間在搞 onlinejudge system ,寫程式還是適合集中時間,不過集中時間的同時,每天空兩三個小時下來想問題是必要的。對現在的我而言,用 Python 操作 List 總是會覺得用 Haskell 來操作會來的更好玩些。用 List 會想到我第一次上 Database 時,jdwei 教 Relational Algebra,重新定義了所有 symbol 與其操作方式,每個產生都是一個 table,就可以用這套 Algebra 來做展開或化簡,這是我第一次覺得 Algebra 很好用,Boolean Algebra 沒有辦法給我這樣子的感覺大概是操作的東西比較小,讓我會直覺認為就是如此。而在 Haskell 的 List 操作也讓我有相同的感覺,今天才想到,稍微延伸一下,如果我們把一個 type 及其操作視為一個 Algebra,沒有 side effect 的影響下,這應該是很容易成立的(如果不要轉型的話 XD),只是對於 function 而言,我們可能會得到一個 fun:: a -> b 的映射,這恐怕就要另外再想想了,用我目前的破爛數學大概是想不到什麼東西 XDXD。寫到這裡,突然讓我想到 Josh Ko 提及的一本書 "The Algebra of Programming",不知道要裡面寫了什麼? 算哩,繼續學習吧,就不要想太多了。


---
相當有趣。

星期三, 3月 24, 2010

十年鑄一劍,今請攖其鋒

這其實是唐鳳在以前"我的資訊探索"對自己下的評語,約在四五年前,看到這段文字沒什麼感覺,今日再看,感觸不少。

其實不想再陳腔爛調說自己要多努力之類的,但是可以談談別的,從我開始寫程式的那一刻到現在也很多年了,總是警告自己不要以為自己會了就想飛翔了,總是要忍耐,因為我不知道自己缺少了什麼,在這一陣子,學習如何建立數學模型(到現在還是沒有學會 XD),真的不知道自己會建出怎麼樣的東西,但是在那之前只能等待了。

我的人生對於一般人而言算是相當平順的,這很大的成得要感謝我的爸媽,但是,離我自己的目標,我想就有如這句話吧。

之前跟某個老師聊天時,他說他要玩 Facebook 上的小遊戲,不然做研究會很無聊做不下去,也提及到多看看學生現在做什麼才不會脫節。老實說,我人生對於大部分的人而言己經越來越無聊了,MSN 關的時間比以前長上不少,想事情學習的時間幾乎佔了大部分,休息就是想另外一個問題,煩了就是睡覺。連我自己都很好奇,這樣子的生活我覺得很棒,我不知道別人怎麼想,至少我很喜歡我現在的生活。一切即劍的生活。


---

星期二, 3月 23, 2010

Haskell Practice - Natural Number

其實就照著書上的教學盡量自己推然後寫,大概是看了 fold fusion ,直觀意義大概就是直接代入後可以少一層,然而這樣子做的好處在 function compose 上可能會少一些動作吧。這篇大概是做個紀錄。不過對我自己而言,做這個練習算是讓我體會到很多事,所有的事都可以依靠簡單的元素來完成時,真的是一件很漂亮的事 !!


data Nat = Zero | Succ Nat
    deriving(Show)

createNat :: Integer -> Nat
createNat i = createNat' i Zero

createNat' :: Integer -> Nat -> Nat
createNat' 0 n = n
createNat' i n = createNat' (i-1) (Succ n)

plusNat :: Nat -> Nat -> Nat
plusNat m Zero = m
plusNat m (Succ n) = Succ (m `plusNat` n)

multNat :: Nat -> Nat -> Nat
multNat m Zero = Zero
multNat Zero n = Zero
multNat (Succ m) (Succ n) = (multNat (Succ m) n) `plusNat` (Succ m)

divNat :: Nat -> Nat -> Nat
divNat (Succ m) Zero = undefined
divNat Zero _ = Zero
divNat (Succ m) (Succ n)
    | (Succ m) == (Succ n) = Succ Zero
    | (Succ m) < (Succ n) = Zero
    | (Succ m) > (Succ n) = (Succ Zero) `plusNat` (divNat ((Succ m) `subNat` (Succ n)) (Succ n))

exponNat :: Nat -> Nat -> Nat
exponNat m Zero = (Succ Zero)
exponNat (Succ m) (Succ n) = (exponNat (Succ m) n) `multNat` (Succ m)

instance Eq Nat where
    Zero == Zero = True
    Zero == Succ n = False
    Succ m == Zero = False
    Succ m == Succ n = (m==n)

    Zero /= Zero = not(Zero == Zero)
    Zero /= Succ n = True 
    Succ m /= Zero = True 
    Succ m /= Succ n = not(m==n)

instance Ord Nat where
    Zero < Zero = False
    Zero < Succ n = True
    Succ m < Zero = False
    Succ m < Succ n = (m= Zero = True 
    Zero >= Succ n = False 
    Succ m >= Zero = True 
    Succ m >= Succ n = not(m Zero = False
    Zero > Succ n = False 
    Succ m > Zero = True 
    Succ m > Succ n = (m>n)
    
    Zero <= Zero = True 
    Zero <= Succ n = True 
    Succ m <= Zero = False 
    Succ m <= Succ n = not(m>n)

    max m n = if m > n then m else n
    min m n = if m < n then m else n

subNat :: Nat -> Nat -> Nat
subNat m Zero = m
subNat (Succ m) (Succ n) 
    | (Succ m) < (Succ n) = undefined
    | otherwise = subNat m n

factNat :: Nat -> Nat
factNat Zero = Succ Zero
factNat (Succ m) = (Succ m) `multNat` (factNat m)

fibNat :: Nat -> Nat
fibNat Zero = Succ Zero
fibNat (Succ Zero) = Succ Zero
fibNat (Succ (Succ m)) = (fibNat (Succ m)) `plusNat` (fibNat m)

infinity :: Nat
infinity = Succ infinity


---
不知道這篇會不會破壞版面 XD。

星期日, 3月 21, 2010

Perfume - ナチュラルに恋して (New Single)

本文同時在 *love the Perfume World*No title, no thinking, no meaning 發表

其實 Perfume 已經很久沒有發表新單曲了,去年光靠 One Room Disco 就唱了一整年 XD,能出新單曲我們這些聽歌的人算是可喜可賀 XD

進入正題,一開始的背景音樂讓我覺得有點電子化 (因為這本來就是電音),但是 Perfume 三人聲音之後,可能是把三個人的聲音調的比較機械聲 XD? 這種感覺說不上來,但是很像兩種極端但是互補,所以聽起來相當的輕鬆。

就 PV 而言,我一直覺得三個人在變漂亮,然後我看 A~Chan 在跳舞時,我竟然會想到 Michael Jackson 的月球漫步(掩面),兩個風格是差蠻多的,但是我就是會想到 ... Orz 但是這次的 PV 跟以往的不同是廣告商很有錢電子感覺比較少了(以前或多或少都有電腦動畫,從 ORD 之後好像就比較沒有了?)

歌詞方面就不做感想哩,一方面是不會日文只會看翻譯(歌詞有部分翻譯),一方面是沒看到完整版,就 ... (跑)


---
相當開心聽到這首歌 :)

星期四, 3月 18, 2010

轉換

先提一下,我偷用了 Josh Ko 的 blog subtitle,將這個 blog subtitle 改成 Let's see how far we can go. 我自己也想看看,到底我們能走多遠,我們的其他人是誰呢 ? 其實對我而言也不是這樣重要,人總是會來來往往,在當下的時間與到朋友,或許那就是我們。也是會有持續走下去的朋友,所以我並不擔心。

或許,現在的我還在不斷的轉換吧。人生就是不斷的 Disco Disco Disco XD。

最近一直很閒,也是最忙的時候,因為忙著做想做的事,忙著做研究(我應該是這個字都提不上的人 XD),忙著超越自己,我的人生中很少以別人做目標,就跟我跟 Josh Ko 第一次聊天說的一樣,我沒有把任何人當偶像過,我唯一能做的是不斷的超越自己。或許也是因為這樣子想法,造成我現在的自大與無知吧(笑)

最近無論看什麼書都覺得自己有很長的路要走,老實說,我不怎麼害怕,但是的確有想自己要怎麼走下去,因為現在的我是不怎麼滿意的,雖然每天都會做到事,但是效率太低了。

其實我一點都不懂研究是什麼,想法跟以前一樣,大抵是提出一個創新的想法,或加以改善前人的做法。這樣子講是很空洞的,所以最近不斷的寫(紙筆或這個 blog) 用來學習一件事,藉以探索如何創造想法,不過似乎到目前為止都是失敗的,但是不急,我會持續到有結果再來看下一步吧。


---
似乎跟轉換沒什麼關係 XD。

星期一, 3月 15, 2010

雜想

昨天很晚睡今天卻很早就醒了,看來以後還是少喝飲料店的茶好了,睡不到六個小時的感覺其實不是很好 XD。醒來之後看了看自己的桌上,只有鉛筆,紙,書本,水杯,也很難得桌上只剩這些簡潔的東西了...

這個學期表面上要做的事大幅度的減少了,實際上要做的事卻比以前更多了。所以是時候得跟開學第一個禮拜一樣,過著比較規律的生活。

睡覺前還在想,直到現在還是無法忘記第一次看到 Introduction to Functional Programming using Haskell 的 Chapter 3,只靠著 data Nat = Zero | Succ Nat 再加以其他設定即可描述整個 Natural Number System (Josh 說公設系統都是如此XD),這樣子的簡單可以建構出複雜,真的是一件很感動的事 ! 而 Haskell 對於 List 的操作,Python 幾乎可以依樣畫葫蘆XD,但是對於 data type 的 recursive define,從 Real World Haskell 來說,用 OO 的 Polymorphism 來解也不會這麼簡潔漂亮,Haskell 對於 List 的操作固然是一絕,但是我覺得重點是 data type 還有 function 的操作,我想,我的學習只是剛開始而己。為什麼我要寫 Haskell ,因為這是一個讓我覺得寫作起來最為自由,思考可以很直覺的在操作上的語言。當然有不少的好處與不少的限制,限制之所以成為限制是因為人們不喜歡這個條件,好處則反之,對我而言,就是一堆條件吧 XD。

其實有想過給系上學弟妹做一個演講,談談我對程式設計與電腦的想法,不過大概沒什麼機會也不會有人理我,所以大概是自己在 blog 上寫一篇就收工了 XDXDXD,然後在寫這篇之前,會先寫 Perfume XD


---
其實我也分不出雜想與最近有什麼差別 XD。

星期五, 3月 12, 2010

Haskell Practice - Ugly Numbers

題目就在這,我就不再多做說明了,這題寫完,暫時要停下來,把 scm 老師的信消化,然後鳥書繼續前進 XD。

is_un n
    | n == 1 = True
    | n `mod` 2 == 0 = is_un (truncate (fromIntegral n/fromIntegral 2))
    | n `mod` 3 == 0 = is_un (truncate (fromIntegral n/fromIntegral 3))
    | n `mod` 5 == 0 = is_un (truncate (fromIntegral n/fromIntegral 5))
    | otherwise = False


is_un2 n
    | n == 1 = True
    | n `mod` 2 == 0 = is_un2 (until (\x -> x `mod` 2 /= 0) (\x -> truncate (fromIntegral x/ fromIntegral 2)) n) 
    | n `mod` 3 == 0 = is_un2 (until (\x -> x `mod` 3 /= 0) (\x -> truncate (fromIntegral x/ fromIntegral 3)) n)
    | n `mod` 5 == 0 = is_un2 (until (\x -> x `mod` 5 /= 0) (\x -> truncate (fromIntegral x/ fromIntegral 5)) n)
    | otherwise = False

is_un3 n = foldl judge n [2,3,5] == 1
    where judge n y = until (\x -> x `mod` y /= 0) (\x -> truncate (fromIntegral x/ fromIntegral y)) n

un_list :: [Integer] -> Integer -> [Integer]
un_list (x:xs) n 
    | n == 0 = (x:xs)
    | otherwise = un_list (min:x:xs) (n-1) 
    where min = minimum (filter (>x) [u*v | u<-(x:xs), v<-[2, 3, 5]])

傳說中這題是一行就可以寫完的,但是我不知道怎麼寫,我還是一樣照我的想法寫 XD,剛開始的想法非常簡單,一直除 2, 3, 5,最後的結果不等於 1 就不是,這方法當然很慢,不過練習還是有用的,因為從 is_un 至 is_un3 可以讓我練一下 foldl ,也讓我明確的了解到 foldl 和 foldr 的根本性不同 (沒錯,我之前又完全搞錯了,剩下只有 fold fusion 要搞懂了)

最後一個 un_list 的想法則是比較正面,找到前面 list 乘於 2, 3, 5 然後大於 list 最大的數的數列最小值,這速度顯然快很多 XD。在這樣子的狀況下寫成 tail recursive 比較直覺,但是其實將整個數列反過來算也是 ok 的,所以我就索性反過來算了。測試結果如下 ...

*Main> reverse (un_list [5, 4, 3, 2, 1] 1495)
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,50,54,60,64,72,75,80,81,90,96,100,108,120,125,128,135,144,150,160,162,180,192,200,216,225,240,243,250,256,270,288, ...

同場加映 Python 版,不過真的只能說 Haskell 影響 Python 很深,在 list 操作部分很像,但是沒有 Haskell 來的漂亮 XD

def ugly_number(list_size):
    ug_list = [1]
    for i in range(0, list_size-1):
        ug_list.append(min(filter(lambda x: x>ug_list[len(ug_list)-1], [x*y for x in ug_list for y in [2,3,5]])))
    return ug_list

---
該繼續打底了 ... XD


2010/03/15 05:58 pm 今天晚上可能無法再做練習了,可能要先看一下 paper ,不過初步的破爛想法是

makePrime x = if prime (x+add) then (x+add)
            else makePrime (x+add) 
            where add = if x `mod` 6 == 1 then 4 else 2
primes = 5: map primeCircule2 primes

其實不是沒有想過一次生二個 element (試著寫 let p = 5:7: map (6+) p),但是回傳時一定要產生一個 element,如果不是的時候總不能丟 0 XD,所以只好先交出一個破爛方法,剩下的明天再試。


2010/03/18 11:06 am 後來想到兩個數列分開算再用 merge 即可,不過速度上應該是佔不到便宜就是了 ...

makePrime_plusn n x = if prime (x+n) then (x+n) else makePrime_plusn n (x+6) 
primes = 5: map makePrime primes
primes2 = merge primes_plus2 primes_plus4 
    where primes_plus2 = 5: map (makePrime_plusn 6) primes_plus2 
          primes_plus4 = 7: map (makePrime_plusn 6) primes_plus4

星期四, 3月 11, 2010

Haskell Practice - Merge Sort

老實說我也不太清楚是不是 Merge Sort ,只是照著感覺寫,而且感覺是效率不佳的 Merge Sort ... Orz,其中的 merge 是 scm 老師寫的,他寫了一封信,我很認真的看再很認真的忘掉再重寫中。

insertionSort [] = []
insertionSort (x:xs) = merge [x] (insertionSort xs)

merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys) 
    | x <= y = x : merge xs (y:ys)
    | otherwise = y : merge (x:xs) ys

測試結果如下:

*Main> mergeSort [3,1,5,2,6, -1, 10]
[-1,1,2,3,5,6,10]

---
想要改寫,不過應該是晚上的事了。


事情比想像中更糟,自己推一次,發現根本不是 Merge Sort 啊 ... Orz


上面那個應該是 insertion sort ... 緊急之間寫了下面這個 code 出來,但是會出錯 ... meeting 在即,等回來再說了 ...

mergeSort [] = []
mergeSort x = 
    if length x > 1 then 
        merge (mergeSort (fst (splitAt half x))) (mergeSort (snd (splitAt half x)))
    else x
    where half = truncate ( (fromIntegral (length x))/ (fromIntegral 2))

看起來是沒有出錯了,接下來該開始思考怎麼寫會比較好一點 XD。


2010/03/12 00:09 結果根本就在惡補怎麼操作 list ,發現自己是有看了,但是都忘完了 ... 到目前為止的版本

mergeSort (x:xs) 
    | xs == [] = [x]
    | otherwise = merge (mergeSort (take half (x:xs))) (mergeSort (drop half (x:xs)))
    where half = truncate ( (fromIntegral (length (x:xs)))/ (fromIntegral 2))

2009/03/12 10:19 AM 只是嘗試將 length 帶入 argument 中,實質上並無太大改變,我一直在想著長度的問題 ... 可是腦袋又是空掉了 ...

mergeSort [] = []
mergeSort x = mergeSort' x (length x) 

mergeSort' x l
    | l == 1 = x
    | otherwise = merge (mergeSort' (take half x) half) (mergeSort' (drop half x) (l-half))
    where half = truncate ((fromIntegral l)/(fromIntegral 2))

2009/03/14 11:38 pm 依 scm 在 comments 裡的建議把 uninterleave 寫出來,自己重寫 interleave ,發現有一點不太一樣(還好功能一樣 XD)
interleave [] ys = ys
interleave xs [] = xs
interleave (x:xs) (y:ys) = x:y:(interleave xs ys)
-- interleave (x:xs) (y:ys) = x:(interleave (y:ys) xs)

uninterleave :: [a] -> ([a],[a])
uninterleave [] = ([], [])
uninterleave (x:xs) = uninterleave' (x:xs) [] [] 

uninterleave':: [a] -> [a] -> [a] -> ([a], [a])
uninterleave' [] ys zs = (zs, ys)
uninterleave' (x:xs) ys zs = uninterleave' xs zs (x:ys)

mergeSort2 :: (Ord t) => [t] -> [t]
mergeSort2 [] = []
mergeSort2 (x:[])  = [x]
mergeSort2 xs = merge (mergeSort2 (fst (uninterleave xs))) (mergeSort2 (snd(uninterleave xs)))

星期二, 3月 09, 2010

Haskell Practice - Prime (2)

在寫了一個第一篇之後,scm 老師給予了很多建議

scm 提到...
Interesting code :). Some comments:
  1. 如你所說 isPrime 是 map 加上 foldr (不過這個 isPrime 測的好像是「不是質數」?)。另外,makePrimeList 是 filter.
  2. 其實 (&&) 這個 operator 碰到第一個參數是 False 的時候也並不會去算第二個。isPrime2 和 isPrime 的另一個不同點是碰到 y < sq 就停下來吧?這也可以用先做一個 takeWhile 達成。
  3. 用 makeList 的版本為什麼比較慢不能馬上斷定,一個猜測是和 x ++ [c] 有關係。串列的 (++) 花的時間和第一個參數的長度成正比,所以每產生一個新的 c 都得從最開頭把這個串列旅行一遍。
    另外,由於 makeList 是 tail recursive 的,makePrimeList 必須等到整個 6n+1 6n+5 的串列產生完畢後才能動作。(比較之下 makePrimeList_2 則可以隨到隨做,[2..x] 這個 list 的元素生出來、測試過後,就丟掉了,並不佔空間。)不知道 makeList 會不會使得 heap 使用量變大,GC 變多,程式就慢了。你可寫一個不是 tail recursive 的 makeList 試試看嗎?

所以第一個問題 isPrime 是錯的,因為我一開始是寫 notPrime XD,但是問題算小,我馬上重寫了一下(順帶一提, scm 老師說的 && 特性,我不確定 Haskell 有,現在知道有了,記得這有一個名詞稱呼這種特性,但是忘了是什麼,在寫 C/C++ 時很常用,大部分是用在 pointer check is not null 上。)

prime :: Integer -> Bool
prime x 
    | x == 2 = True
    | otherwise = 
        isPrime x [2..sq]
        where sq = truncate (sqrt (fromIntegral x)) + 1

isPrime :: Integer -> [Integer] -> Bool
isPrime x y
    | x == 2 = True
    | otherwise =
         case y of 
             [] -> True
             y:ys -> (x `mod` y /= 0) && isPrime x ys

這樣子應該就沒有錯了...(汗),然後我們再很快速的寫成 map 格式,也連帶的使用到 lambda function ,因為我不知道怎麼樣寫的比較精簡了 XD

isPrime4 :: Integer -> [Integer] -> Bool
isPrime4 x y
    | x == 2 || y == [] = True
    | otherwise = and (map ( \e -> x `mod` e /= 0) y)
--     | otherwise = and (map (/=0) (map (x `mod`) y)) 

接著我再把稍微改版的程式試著用 takeWhile 改寫(takeWhile 的相對是 dropWhile)

isPrime5 :: Integer -> [Integer] -> Bool
isPrime5 x y 
    | x == 2 = True
    | otherwise =
        isPrime5' x (takeWhile  (< (truncate (sqrt (fromIntegral x)) + 1)) y)

isPrime5' :: Integer -> [Integer] -> Bool
isPrime5' x y =
     case y of
         [] -> True
         y:ys -> (x `mod` y /= 0) && isPrime5' x ys

最後一個問題就是 makeList,我就沒有寫了,我把 makePrimeList 寫成如下型式

makePrimeList4 :: Integer -> [Integer]
makePrimeList4 x = [2, 3] ++ makePrimeList4' 5 x False [] 

makePrimeList4' :: Integer -> Integer -> Bool -> [Integer] -> [Integer]
makePrimeList4' c e b x
    = if c < e then
          if isPrime5 c x then
              makePrimeList4' (c+add) e (not b) (x ++ [c])
          else 
              makePrimeList4' (c+add) e (not b) x
      else x
      where add = if b then 4 else 2

這樣子的 code 就不需要另外產生 list ,因為產生的當下就檢查,不要就丟掉了,然而在生成 prime list 的時候還是 tail recursive ,有嘗試過另外的方法,卻發現快不起來。

如果要將 (x ++ [c]) 變成 ([c] ++ x),我嘗試寫了另外一個 isPrime7

isPrime7 :: Integer -> [Integer] -> Bool
isPrime7 x y 
    | x == 2 = True
    | otherwise =
        isPrime5' x (dropWhile (> (truncate (sqrt (fromIntegral x)) + 1)) y)

這樣子的確可以完全避免掉 tail recursive 的問題,但是速度會比較慢,因為產生的數列是 11 7 5 3 2 這樣子的排序,一般檢查是否為質數是正向檢查,逆向的時候能夠在檢查次數上佔到的便宜其實不多 (如果該數是被 5 整除的話...),所以這樣子寫反而比較慢,目前的想法是,如果想要完全漂亮的解決 tail recursive 問題的話,勢必是得重新設計方法而且更了解這個語言的。

---
可見自己數學真的不好 ... Orz

星期一, 3月 08, 2010

Haskell Pratice - Prime

今日目標算是達成了,明天再繼續。原始想法很簡單,如何寫出一個 prime list ? 於是我就寫了第一版

prime :: Integer -> Bool
prime x 
    | x == 2 = True
    | otherwise = 
            isPrime [2..sq] x
            where sq = truncate (sqrt (fromIntegral x)) + 1

isPrime :: [Integer] -> Integer -> Bool
isPrime x y =
    case x of 
        [] -> False
        x:xs -> (y `mod` x == 0) || isPrime xs

makePrimeList :: [Integer] -> [Integer]
makePrimeList x =
    case x of
        [] -> [] 
        x:xs -> if prime x then  
                    [x] ++ makePrimeList xs
                else 
                    makePrimeList xs

其中的 where sq = truncate (sqrt (fromIntegral x)) + 1 是在 Josh Ko 的幫助下寫出來的,但是我得隔日再戰,我很明確的知道是轉型問題,但是並不是能夠完全說清楚為什麼要這樣做(他有說明,但是我得再看一下書)。

而且在這一版中的 isPrime 實在是太暴力了,其實可以用 map + and (or fold) 寫出來,並不一定要用 recursive 寫,所以我採用了另外一個寫法,即是檢查到 `mod` == 0 就停下來。

isPrime_2 :: Integer -> [Integer] -> Bool
isPrime_2 x y
    | x == 2 = True
    | otherwise =
        case y of
            [] -> True
            y:ys -> if y < sq then
                        if (x `mod` y == 0) then False
                        else isPrime_2 x ys
                    else True 
                    where sq = truncate (sqrt (fromIntegral x)) + 1

速度是明顯快上不少,但這版對我而言只剩最後一個問題,就是每呼叫一次 sq 就要算一次,我目前唯一想到的解法是,把 sq 也當成引數,於是我就寫成

isPrime_3 :: Integer -> [Integer] -> Bool
isPrime_3 x y 
    | x == 2 = True
    | otherwise =
        isPrime_3' x y (truncate (sqrt (fromIntegral x)) + 1)

isPrime_3' :: Integer -> [Integer] -> Integer -> Bool
isPrime_3' x y sq =
    case y of
        [] -> True
        y:ys -> if y < sq then
                    if (x `mod` y == 0) then False
                    else isPrime_3' x ys sq
                else True

最後,再寫一個 makePrimeList 的 code 就搞定了

makePrimeList :: Integer -> [Integer]
makePrimeList x = makePrimeList_2 [2..x] []

makePrimeList_2 :: [Integer] -> [Integer] -> [Integer]
makePrimeList_2 u v =
    case u of 
        [] -> []
        x:xs -> if isPrime_3 x v then
                    [x] ++ makePrimeList_2 xs (v++[x])
                else
                    makePrimeList_2 xs v

最後 run 一下成果

*Main> makePrimeList 100
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

其實還可以更快,但是就明天再來來,依現在的程度寫出的 code ,雖然普通,可是很開心。

---
本週目標:練習 Prime


馬上就打了自己的嘴吧,我試著嘗試產生 6n+1 6n+5 的 list 用以減少 prime 的檢查次數,於是很粗糙的寫了如下的 code

makeList :: Integer -> Integer -> Bool -> [Integer] -> [Integer]
makeList e c b x =
    if c < e then
        if b then
            makeList e (c+4) False (x ++ [c])
        else
            makeList e (c+2) True (x ++ [c])
    else
        x

然後將 makePrimeList 改成如下

makePrimeList :: Integer -> [Integer]
makePrimeList x = makePrimeList_2 ([2, 3] ++ makeList x 5 False []) []

結果速度反而慢到嚇人啊...Orz 完全不知道為什麼,看來要好好研究了 XD。

星期日, 3月 07, 2010

愛的 ... ?

某天我把 Clara 說給我的話說給 gb014388 聽之後,他在白板上是這樣子寫的

Clara: 愛的抱抱相反是冷漠。

---
XD

星期二, 3月 02, 2010

趕工

這幾天一直在用 Python + Django 趕一個小型系統,我本來一點都不會 Django,但是還好會 Session 和 POST 這種很基礎的概念,所以硬幹起來還算快,接下來想辦法把這個系統改寫然後丟到 Apache Server + mod_python 上就算暫時告一段落了,接下來在嵐達網就要繼續正常發文了,這個 blog 的文章也要持續的寫作下去。

如果有關任何 Django 的筆記,我就直接放在 wiki 上,就不轉過來了 XD。

雖然這個系統很趕很破爛,不過我還決定幫這個系統命名一下(寫程式不太行,惡搞倒是很強 XD),Cobra Online Judge System XDXD,可以找個人畫眼鏡娘當作代表圖案嗎 XD


---
不像筆記的記錄 XD。

星期日, 2月 28, 2010

FLOLAC 10

FLOLAC 10
今年應該沒什麼能擋住我了吧 XD?


---
一定要去成 !

星期五, 2月 26, 2010

今日笑話


保護當事人,還有我的本名,我看到我就笑了 XD


---
以後走在路上報本名比較不會被打 XD

星期四, 2月 25, 2010

Django 撰寫

突然之間要我一個禮拜多一點就寫出一個小型的 web service,我立馬想到的是 PHP,但是我實在是不太想用 PHP 寫,大概是對於 weak type 有一種出自本能的害怕 XD,這次改用 Python + Django 撰寫這個 Service ,覺得 MTV (Model-Templat-View) 的架構,其實 PHP 做的出來,只是我之前沒想過,這次寫 Django 就算作給自己的一個全新練習吧 XD。不過我還是不想學 CSS ,這對不會美工的人而言還是太痛苦了 XD。

如果以後有需要,可以重新學一個 CMS 的相關開發或者是 PHP Framework 開發,應該會對這一行不會感到這麼陌生,不過我比較想要關心的是 PHP 的 hit-hop compiler ,但是至少要等這個禮拜過完吧 XDXD。


---
寫到一段落再說 XD。

星期日, 2月 21, 2010

改變與開始

所有的事正要改變嗎? 其實只是一個開始。


---
沒有答案的旅程。

星期六, 2月 20, 2010

mumur

明天就要回學校了,過了十天年假,雖然面對了很多問題,但是能解決的卻很少。

持續了之前的寫作,蠻開心的,只要能持續的學習與寫作就好了,不過,我想還是努力的學習努力的寫作吧。一直到這幾天才想通,要讓自己一天做很多事的要鍵是把事情分割,如果沒有分割到夠小單元,一天內就很容易淪為做一件事造成生產力低落,為此而開了一個 mirror wiki ,至少能讓自己寫完兩篇文字了,第三份也可以慢慢的完成,算是學習寫作的意外收獲吧 XD。

睡眠還是調不太回來,看來自己的身體比起以前差很多了,要開學了,不調回來也不行了。這次跟以前不太一樣的是,以前通常是上學期比較閒,下學期比較忙(就帳面上的資訊來說),這次剛好相反,所以我也不知道,應該是一個很有趣的新挑戰吧 XD。


---
just that XD.

Perfume 與音樂

本篇同時在 love the Perfume World 與 No title, no thinking, no meaning 發表。

改變與否 ?

當有很多人想要對這個世界改變些什麼時,我們只是想為自己留下些什麼。我並不是什麼聽音樂的專業人士,我只是想要開心的聽著音樂過生活 :) 。

名詞,為什麼聽 Perfume

到底名詞是用來解釋還是用來制約的,我一直都不是很懂,我從聽音樂以來,一直聽到不少名詞,Rock, Hip-pop, 英式搖滾,古典還有台灣的獨立音樂,非主流音樂,及流行音樂,一直到我聽到 Perfume 所謂的電音 (Electronic music),我的腦子已經一團亂了,現在的我頂多只能說,很吵的是 Rock(但是英式搖滾聽說又不吵),Hit-pop 就是會有人唱饒舌,獨立音樂就是人很少,那電音呢?

這對我而言一切都是困擾,當我聽到 Perfume 時,其實我已經放棄辨別是什麼音樂很久了,單純只是覺得我聽的下去,可以找到自己的感覺而聽的,我不是什麼事都想搞的很專業的人,雖然照我的個性,很想把很多事都弄清,但是光自己的領域都會被專有名詞搞到吐血時,我想在聽音樂這個方面保有一個單純的心態。

我是抱著這樣子的心情在聽 Perfume 的(笑)。

我所知道的 Perfume 與電音 (Electronic Music)

其實我是聽到 Perfume 才開始聽到這個名詞的。不然其實台灣人大多數對於電音的印象是電音三太子…Orz ,老實說,我不知道電音是什麼,但是 Perfume 的音樂給我這樣子的感受。

當人聲變成樂器成為一種可調控的角色時,和表演樂器平起平坐時,這一切對我而言都變成很有趣。 對我而言,這個世界,素人唱歌未必會比較差,真的嗎 ? 看看超級星光大道就知道了 XD。在這邊浮起一個問題,一般歌手唱的歌是具有可替代性了嗎? 我不知道。就我的觀察是,一首歌簡單的來分是人唱的部分與背景音樂,基本上只要節奏不要太差,唱歌的人夠強,就能夠完成一般所謂的成功詮釋一首歌,就會有人說你唱歌很有味道,蕭敬騰可以唱新不了情,我也不知道原唱是誰,但是我知道他唱的很好 XD。孫燕姿唱橄欖樹被念的很慘,齊豫唱時沒人說不好,一切都來自於感覺。所以如果有另外一個人能夠把感覺唱出來時,其實原歌手的可替代性就出來了(不過每個人都有不可替代之部分,這我也不太清楚怎麼說 XD。)

Perfume 的音樂顯然不是走這條路,如果把人聲視為樂器與其他樂器做交互作用時,基本上每個人的人聲是不盡相同的,再經過電音工作的調整(高八度啦低八度等等的複雜工作),獨一無二的樂器與組合就出來了,那就找到了這個音樂的無可替代性 (不太可能拿別人的聲音來重新合成,我想感覺會差蠻多的。)

Perfume 曾經在訪問時表示,中田ヤスタカ (音樂製作人,Perfume 的歌幾乎都是一手包辦) 要求他們坐在椅子上冷冷的唱。唱歌不帶入情感唱法,老實說,我是第一次遇到,不知道其他電音是不是也是如此 ? 但是因為這樣子,Perfume 表現出來的聲音冷冷的,不帶有感情,所以聽歌不太會有情緒被影響的問題(我每次聽 Linkin Park - Numb 都會覺得心情很糟 XD),人不太會待在同一個情緒有著很長的時間,所以聽 Perfume 的時候,我可以支配自己的情緒,算是意外中的好處吧 :)

電音不會想要製造什麼感覺,唯一能製造的感覺的是來自己的內心。

我們想聽的是什麼 ?

想聽的就是簡單。

前陣子,我認識的老師借與我一本書名為”簡單的法則”,裡面告訴你如何保持簡單,在複雜中保持簡單等等之類的。其實簡單是最複雜的。常常聽到有某些歌手去國外拍 MV 啦,重金請什麼樂團來伴奏,還是錄音很高級之類的。老實說,這些對聽歌的人一點都不重要,我不太在乎一張音樂製作的預算有多少(但是我相信音樂製作人蠻在乎的 XD),我只在乎我聽到了什麼。

很有趣的是,往往有名的歌都是很簡單的誕生的。

Perfume 的歌對我而言是簡單中帶著複雜,簡單的節奏,人聲下去組合,聽不到過多的音樂,但是要把這些元素組合好,需要很大的工夫。我聽歌聽了很多年,台灣的流行音樂的背景是我聽過最複雜的 XD。Perfume 真的很複雜,但是聽起來讓我有簡單的感覺,或許是因為簡單節奏做怪吧 XD。

高度整合的藝術

Perfume 在日本被人稱為近未來電音偶像,老實說我也搞不清楚是不是自稱,不過我很喜歡她們的另外一個稱呼 “奇蹟的女子三人組” :) ,基本上她們今天的成功不是單方面的,從三個人本身開始,服裝(剛開始蠻讓人覺得受到驚嚇的 XD),演唱會,音樂。可以說,我們從 youtube 上較難找到這樣子的組合與表演團體,就很像醫龍漫畫說的,做手術真是很像在高速的跑車上行駛 XD。多方面的合作缺一不可,或許是我覺得 youtube 上的表演達不到的一個吧。

另外一個方面就是,看她們的表演很輕鬆,看演唱會基本上也有一種很輕鬆的感覺,不虛假的感覺,我不知道這感覺以後會不會變,至少現在是存在的(笑)。

---
這次的討論其實很高空鳥瞰,考慮下次寫貼近 Perfume Music 的文字。第一次寫作關於 Perfume 的文字,有問題就請多多指教哩!

星期五, 2月 19, 2010

Josh Ko to go to Oxford University Computing Laboratory.

Trek through Pure Reason --- DPhil at Oxford University Computing Laboratory, Fully Funded!!

簡單的來說 Josh Ko 得到了 Oxford University 的全額獎學金,可以去英國開心做菸酒啦 XDXD。

這是我這一陣子聽到最開心的事啊,開心!! 以後可以跟他伸英國紀念品了,哈哈哈。希望他能開心的投入,然後我就可以開心的炫耀啦 XDXD。

---
本篇不允許回文喔 XD 請去本文回覆 XD

星期四, 2月 18, 2010

Haskell Index

這篇是不定時更新,基本上就只是一個目錄,沒啥內容性 XD 基本上我覺得是自己想整理吧 XD


---
希望有恆心持續整理 XD。

Literate Programming in Haskell

Literate Programming 簡單的來說就是讓你在寫文件和寫程式的同時,能用 programming language compiler(e.g ghc) & typeseeting compiler (e.g. LaTeX) 分別產生文件和程式,通常最常見的是寫書,不過一般的 imperative programming language 要進行這樣子的動作是很困難的(code dependence & side effect),在 Haskell 中,這樣子的問題顯的相對的簡單而且容易處理。

Literal Programming in Haskell 的 programming compiler 通常是選用 ghc,而 typesetting 則是使用 LaTeX (XeLaTeX 也可以,代表你可以寫中文),一個文件的過程大抵如下

  • 寫作一個 latex + Haskell 的 code ,但是 Haskell 的 code 必需寫在 \begin{code}\end{code}
  • 該檔案存成的副檔名是 .lhs (vim 認的出來),而我們在這個時候必需再使用另外一個套件 lhs2TeX 來處理,基本上我們可以使用 cabal 來安裝。
  • 使用 lhs2Tex 將該檔轉成 .tex 檔供 LaTeX 編譯

Document

LaTeX 的寫作就有如 LaTeX XDXD,就請參考其他的 LaTeX 文件嘍,而在 lhs2TeX 的這方面有兩份文件,分別是

Example

以下是從 Slide 中來的 example,sample code 如下

\documentclass{article}
%include lhs2TeX.fmt
%include lhs2TeX.sty
\begin{document}
This is the famous ``Hello world'' example,
written in Haskell:
\begin{code}
main :: IO ()
main = putStrLn "Hello, world!"
\end{code}
\end{document}
  • compile to tex file
    lhs2TeX --tt test.lhs -o test.tex
    pdflatex test.tex
    pdflatex test.tex
    and you will see test.tex
    當然 --tt 可以換成其他的選項,例如 --verb, --math, --poly,細節可以看簡報的說明。
  • compile .lhs to executable
    ghc -o hello.out hello.lhs
    基本上跟一般 compile 程式是相同的。

---
感覺上好像寫了一篇很簡單的說明 XD。draft

星期一, 2月 15, 2010

年假計畫

看到 Josh Ko 貼了年假計畫才想到,我的年假計畫真的是很簡單啊,大概就是看 PTIDES 和 Introduction to Functional Programming using Haskell,不知道能夠看多少,盡量看了。


---
希望有所進展。

星期六, 2月 13, 2010

節目

看來今年不用看新春特別難看節目了,真開心 XD。


---
看人玩 wii XD

星期五, 2月 12, 2010

mumur

已經忘了多久沒有這樣子面對自己的電腦了,不過,這幾天過了很頹廢的生活,認清現實之後,發現思考不用電腦,慢慢用紙筆描述自已的想法,是一件很輕鬆的事。

以前總覺得念這個科系要解決問題是少不了電腦的,但是,面對一個問題或一個最原始的方向,不管有沒有電腦,都是可以解決的。於是,我必需學會讓自己專心在如何學習及如何解決問題上。

面對一個現實就是,我的大學其實沒有學到什麼,大概就只有學到一點點的 imperative programming 的技巧,然而,要解決什麼問題,沒有一個解,也沒有任何專長,現在的我,充其量只是一個不入流的 coder 罷了。

是該把電腦蓋上,好好睡一覺了。

---
相信。

認清事實

從第一顆豆子開始吃吧。


---
不知道來不來的及。

星期四, 2月 11, 2010

寄信

想到一些事,下午可以寄信了。


---
嗯嗯

星期四, 2月 04, 2010

6

對於華人來說,算是個吉祥的數字,對於西方人來說,是個惡魔的數字,對於我來說,是個欠多少稿的數字 XD

想到很多事,睡不著。


---
來睡。

星期日, 1月 31, 2010

murmur

這是從看 godfat 的 blog 得到的靈感,如果沒有意外,應該會取代 "最近" 這個標題吧 XD

這三天只念了四十分鐘的書,莫名奇妙在自己用的 server 上搞了一個 rsync 做備份,今天下午打了籃球,其實很明白,這不是我要的時間管理,也不是我所安排的生活。換句話來說,我對我自己的生活很不滿意。

如果是滿意的生活,或許現在的我就不會這麼狼狽吧。只有一個人過生活的時候,反而寫了比較多的文字。


---
就這樣子吧。

星期四, 1月 28, 2010

未來

一度以為自己對於未來有了一個較好的解釋,其實說穿了,仍是破洞百出。


---
不可抗拒之力。

星期日, 1月 24, 2010

Perfume Second Tour 2009 『直角二等辺三角形TOUR』

寫作的人是一個不專業的評論者, 只是一個普通的老百姓寫出心理的感受 XD, 所以不要期待會有什麼很專業的文字 XDXD。這篇文章的基礎是 Perfume 飯, 如果不是的話可能看的比較吃力 XD, 想要購買的話可以從以下連結, 我沒有收任何廣告費 XD
日本 Amazon - Perfume Second Tour 2009 『直角二等辺三角形TOUR』

老實說, 我 01/13 就收到從日本來的 Fedex 快遞, 很感謝 allents 還有 victoryuy 的一起合購, 不然我也沒有辦法買這張 DVD, 也在此工商服務, 批踢踢上有 Perfume 版, 版名是 "Perfume_desu" 除了可以在主畫面直接按 's' 搜尋之外, 也可以從分類進去

視聽劇場     偶像, 音樂, 廣電            [skydreaming/
   Idols_3JP     人物 Σ哈日藝能宅即便                 [誠徵小組長]
     JP__Groups    日本 Σ*  團 體  用 池  *
       Perfume_desu  日本 ◎Perfume版 三角TOUR DVD冠軍!   a1b2a3g4h/and

回到正題, 收到這張 DVD 真的很開心(也同時收到另外兩張要繼續旅程的 DVD, 希望快點到主人的手上), 但是剛好要期末報告 + 助教期末收尾(就是打成績啦 XD), 一直拖到昨天, 看了真的蠻開心的, 我不打算細細的一一數說那一首歌怎麼樣, 那不是我的專長, 我想說的是整體的感覺。

以整體來看, A-Chan, NOCCHI, Yuka 三個人都有讓人覺得很明顯的改變, A-Chan 變瘦了, 也變的更漂亮, NOCCHI 變的比以前穩定(我看代代木和武道館時, 只要唱到後面, NOCCHI 必然會起瘋 XD), Yuka 會笑了(代代木幾乎沒啥印象有笑啊 XD), 不過最明顯的感覺是

三個人的跳舞的段落感明顯許多, 相較於以前, 真的是沒有拖泥帶水的感覺。

我不知道有多少人有跟我一樣的感覺, 不過看了很多以前的表演, Perfume 的表現, 我一直以為以前就非常的好了, 現在更能百尺竿頭更進一步, 真的是讓人非常驚豔。

若要說印象最深刻的曲子, 大概是 NIGHT FIGHT, Kiss and MUSIC 倒也不是說其他印象不深刻, 而是以前都有看過 XD, 而且我最喜歡的歌都有出現耶(大心), 前者是開場曲, 但是一出場的氣勢跟以前完全不同 XD, Kiss and MUSIC 讓帽子變成了跳舞配件之一, Take me Take me 是用椅子, Zero Gravity 用的東西是骰子(XD?), 前者表現出時尚感, 而後兩者表現出可愛, 其實從這場演唱會中, 看的出 Perfume 與整個團隊的求新求變, 而不僅僅只是在跳舞與歌唱方面, 移動的跳舞塊(對不起, 我不知道怎麼稱呼它 XD), 三個大型的立方體用在 edge-mix , 真的是看的非常的開心的一場。

不過當然也是有些點感覺蠻奇怪的,像 Yuka 眉毛是不是變淡了 XD?,還有就是視角之間的切換,這是我看過最快的一場,切換快也不會怎麼樣,重點是,切換到我竟然看不到完整的舞步,就有點可惜了,但最可惜的是,Perfume 的主持都剪到手沒有了...這叫 A-Chan 飯怎麼能接受啊(翻桌)!因為這是三角才開始的巡迴演唱會,所以選歌比較不像代代木和武道館說來的可以讓一開始接觸 Perfume 的人可以好上手,若真的要我推薦的話,我推薦看的順序是 武道館 -> 代代木 -> Second Tour -> bitter -> GAME ,這樣子對一個新的 Perfume 飯會好一點吧 XD?


---
結果還是寫的支離破碎 XD

星期五, 1月 22, 2010

有感與回顧

這幾天看到 scm 老師寫了 "找出該證的性質,然後證明它" ,這句話真的是一再印證的我生活。

所謂做研究,就是找個好問題,然後解決它。前者通常比後者難。

總觀碩一上,其實我做的不是很好,可能連研究都談不上吧,只能說自己是一個不斷轉動的齒輪,當所有事夾雜在一起時,我才會思考,我是個懶人(笑),從一開始的當助教,到中期的寫一些程式,還有準備 Cyber-Physical System 的問題,其實一切都讓我自己覺得很累很累,不過很快樂(笑)。

到底什麼是做學問,我不知道,不過我倒是蠻清楚的明白,做學問之前很多事要做好,例如說時間管理啦,情緒管理啦之類的。到目前為止,找出一個問題想要解決什麼,目的為何,以至確立整個模型,是非常重要的,有很多問題明確的定義之後,方法通常都很簡單(至少這在 Computer Architecture 是如此),但是也有在很多領域很困難的時候。其實從這邊就可以看出我的膚淺,我總是說我要學會數學證明,然而我想證明的是什麼問題,又處於什麼樣的狀況下 ? 沒有問題,那裡來的方法呢,以前的我顯得相當無知(笑)。在這個學期末準備的報告,原本以為自己好好的對這學期做總結。雖然沒有總結,但是達成了另外一個目的,顯示了自己所有的問題。我想,接下來這一個學期,好好修正這些問題,例如: 時間與情緒管理趨近於零,背景不足,學習方法錯誤,看英文方法不夠彈性,等等。)

對我的當下最重要的是,找到我想解決的問題然後前進。

可以插個題外話,我學期做事還蠻常提如果 Clara, eating 在就好了,可見我以前多依賴她們 XD,以前啊,做簡報,報告啊,我總是慣性裝死,不過現在得全部自己來了,雖然不會用 PowerPoint 做簡報了,但是 ycma 指出我報告能力仍需加強,其實,這個學期學習自己面對了很多事(因為 Josh Ko 去當兵了),最該感謝的是 ycma, scm ,這兩位老師對我真的很好,看來我得把我的問題解決,才會是回報的好方式(笑)。

這學期當了 "Computer Organization", "Computer Organization Lab" 的 TA,其實是一科,ycma 是這兩科的 instructor,而我和 walaske1 很榮幸的合作,他處理了許多我處理不來的事,這群學生過的很開心,其實我真的蠻開心另外一個助教是他的。這中間我常常忙到半夜還在做實驗(因為有時候連 ycma 自己也不知道要做什麼 XD),帶實驗從期中之後每天都到半夜了 XD (註:實驗從下午三點開始),辛苦 ycma 和 walaskel 了,在這邊我不提我對那些學生印象深刻,不然有些沒被提到的應該很傷心 XD。其實可以理解,每個學生都想認真,但是是否容易放棄,以及大學的自我實現,則取決於環境與遇到的人。我個人是蠻幸運的遇到很多人,所以我希望可以把我這份幸運帶下去。不過我還是得說,如果實現自己的人生是一種醒來面對現實的話,並不是每個人都想醒來的,我們都沒有辦法證明沒有目標的過一生會不開心,我們只能說,有自己的人生目標過生活會好一點,到底什麼是自己的人生目標,我們得自己決定。當 TA 的好處是,離學生比較近(ycma 跟學生其實也沒啥距離,很多學生說他很可愛 XD),我們說什麼話,他們比較聽的下去,有學弟妹說,我當助教不是為了賺錢,是為了說廢話給他們聽 XD 或許真的是如此吧 XDXD,遇到了許多很可愛的學弟妹,謝謝你們,這個學期我過的很開心。


---
提了蠻多的,應該拆成兩篇寫才對 XD

星期二, 1月 12, 2010

Kindle DX & BibTeX in Beamer

用 Kindle DX 看書真的會上癮,自從保護套來之後,帶來帶去真的很方便,除了沒有翻書那種質感之外,其他都還蠻 ok 的,當然 two-column paper 還是一個問題,如果真的受不了,我還是會印出來看吧,不過綜合而言,整理算的上是非常方便了。

前幾天做簡報的時候,用 XeLaTeX + BibTeX 在 Mac OSX 上的 TeXShop 上做,TeXShop 非常的方便,把 reference 設好之後,在 TeXShop 中,只要執行 Macro -> AppleScript -> Bibiliogy 就可以把 .bib 順利的丟進去了 (beamer 也可以喔)。不過現在還沒到做簡報的時候,知道這招暫時沒有用吧 XDXD
如果想要用在 beamer 裡的話,示範用法如下( from internet, but I forget source ...Orz)

\section{Reference}
\subsection{Paper and Technical Report}
\begin{frame}[allowframebreaks]{Reference}
    \bibliographystyle{alpha} % you can change to other format acm, plain ...
    \bibliography{reference} % use reference.bib
\end{frame}

---
雜記一下嘍 XD

星期六, 1月 02, 2010

2009 回顧

稍早在 plurk 上其實已經寫了一則,不過我覺得算是很片段的記憶吧。來看看我在 2009 年初的目標是什麼

  • 撐到最後一刻,完成這個該死的研究所考試。
    到底什麼是有撐完什麼是沒撐完我不知道,不過我只覺得我考完了,中途放棄了一些事,導致了現在的結果,我不後悔就是了。
  • 走向Compuer Architecture這條路,由硬到軟去證明Programming Language。
    會寫出這種話代表我還是很蠢,不過,從跟 ycma 老師合作開始(雖然是 SoC Lab,但是我不怎麼做 SoC 有關的事),還有 scm 老師願意收留我,我想我會繼續尋找 Computer Architecture, Programming Language, Compiler 這幾個之間的交叉點。
  • 參加FLOLAC '09,以學員的身份參加,哈哈哈,應該會被當掉XDXD,所以希望不要被當掉XDXD。
    兩年沒去了,又因為一些事不能參加了,今年應該沒有問題了吧(?)
  • 寫出真正能夠幫助人的程式
    這點顯然完全沒達成,都在顧自己的事,雖然做了三份簡報,但是那不算是寫程式。頂多偶爾有人有問題,用 Python 寫寫小程式幫人解決而己,自己這年還是很重著在 C/C++ ,原本預計要參加的 OpenSource Project 一個都沒有,可見自己真的是一個很沒有行動力的人。

那麼今年的目標呢,大抵不會跟 2009 相差太遠,目標如下。

  • 精進自己的能力
    這其實很嘴炮,只是覺得自己在寫嵐達網的文章的時候,不能每次都讓 scm 老師幫我擦屁股而己,這不是什麼好事。
  • 學好 Functional Programming with Haskell
    這沒什麼好講的,我已經知道兩年了,沒有什麼理由好推遲的。
  • 完成碩士論文
    學業很重要,但是我希望不是粗製濫造。
  • 學習 Calculus
    沒為什麼,只是想學而己。
  • 推廣 Haskell, Perfume, VIM
    因為我很喜歡這三個東西,雖然完全不同領域的東西 (Functional Programming Language, 日本的電音偶像團體, a totally flexiable programming editor),就這樣子吧,只是 Perfume 有 allents, vim 有 c9s 在,我想我的貢獻微乎奇微吧 XD (Haskell 本來就很紅啦 !! XD)

希望今年不會再變成嘴炮人了...Orz

---
希望明年此時不要有這麼多遺憾。

星期三, 12月 30, 2009

感謝

謝謝所有人對我的包容,ycma 與 scm 對我很好(讓我沒啥偷懶的理由XDXD),這幾天心情很好,應該會有持續的高產出 XD。


---
keep going.

星期日, 12月 27, 2009

vimgdb



這篇算的上是筆記。


gdb 是一個很用的 debugger ,而在 GUI 上我偏好用 ddd,但是在 Mac OSX 上灌 ddd 不甚方便 (MacPorts),我也不太會用 Xcode(Xcode 可以直接把 std::vector 印出來,超威猛 XD),所以前陣子在逛的時候,Kaie's blog 寫了兩篇相當好的文章,分別是

有了這兩篇之後,應該可以很順利的建立 vimgdb + gdb 7.0 的環境,當然,身為一個初學者的建議是,尤於 vimgdb 與 gdb 7.0 都需要自己 configure && make ,最好是建置在自己的目錄下,然後再 export PATH=$YOUR_BUILD_PATH:$PATH 會比較好。

有關 vimgdb 的設定,可以看看 Kaie 所寫的 gdb_mappings.vim,基本上我沒有在 .vimrc 上如同 vimgdb 的 help doc 寫上設定,建議是把設定全部寫在 gdb_mappings.vim 裡,而我在該檔案參考 Kaie 所寫的檔案加入了下面的數行

"" vimgdb setting
set splitright                  " set gdb windows split in right side
set previewheight=60        " set gdb window initial height or width(if you set splitright)
set asm=0                    " don't show any assembly stuff
set gdbprg=gdb              " set GDB invocation string (default 'gdb')
# ...
if s:gdb_k
    # ...
    nmap <silent> <C-V> :bel 8 split gdb-variables<CR>  " setl ctrl+v show variable window in button

而我們在 ~/.vimrc 下再加入一行

nmap <silent><LEADER>g :run macros/gdb_mappings.vim<cr>

以後在使用 vimgdb 時,按 \g 方啟動 gdb mode,算的上是一個比較方便的做法。而啟動後,可以參照 :help vimgdb 中來操作使用(建議一定要看,蠻多好用的快捷鍵,不然其實直接看 gdb_mappings.vim 也很 ok),比較不一樣的地方是,Kaie 的設定有做 key mapping ,只要 Ctrl + V 就可以打開 variable window,要讓 variable 顯示在 variable window 中,用 visual mode 選擇一個 variable ,之後再按 Ctrl + P ,即可。

其實自己也還在嘗試,希望以後自己就不用開 ddd 了 XD


---
have fun.

最近

醒了,這陣子都睡很多,已經二個禮拜不事生產過著頹廢的日子,是時候該繼續了,雖然在這段期間一一的把學校要求的作業完成,不過自己想要做的事卻沒完成半點,這樣子的生活再也不能過下去了,至於怎麼讓自己過的有意義一點,其實我也不是很清楚,每天盡量看東西練習東西,我還沒有忘了我的短期夢想,用 Haskell 寫 Compiler ,是時候該前進了。

嵐達網的推廣實在是沒個準頭,雖然 pagerank 很高,但是我想我還是得必需寫好一點的文,不然我可能變成降低水準的標的 XD 只能說盡量還是達成一個禮拜二篇的標準,其實我覺得這個要求沒有很難,沒有達成絕對是自己的生活過的太差了。

這個 blog 好久沒有發技術文了,老實說自己雖然在最近學到不少東西,但是不知道要寫什麼,不是說學的太多,而是覺得自己沒有好好的,深入的學習一個東西,這樣子的自己和大學沒有什麼差別,並不是很喜歡這樣子的自己,應該要好好的學習,好好的改變自己才是,不過一旦專心學習,efang 就會覺得我不太理她,可能是自己要找到的一個平衡點。


---
說了這麼多,仍是通篇廢話 XD

星期五, 12月 25, 2009

無題

一種無病呻吟


---
累了

星期三, 12月 09, 2009

請教問題

會寫這最段文字代表我最近水平降低不少 XD
以我最近愛看的鋼之鍊金術師解釋好了 XD

請教別人是一種等價交換,沒有付出就沒有獲得,所以如果程式有問題,請付出相當程度的努力,把努力表現給我看再來問我,我沒有收另外的助教費,所以完全是看自己爽度 XD,沒有人規定會寫這隻程式就一定要教會你,寫程式還是靠自己努力,別人怎麼教都是一時的。

這裡是大學,不是高中,不要有沒事說自己是大學生享受了大學生應有的權利,有事就用高中生的思維要別人幫你忙,不要說沒有人跟你說怎麼當大學生,這種問題應該好好自己想一想吧 XD?


---
寫這段文字應該會被公幹吧 XDXD

星期二, 11月 24, 2009

[工商服務] 最近相關的網站

最近因應自己身處的環境,大概跟這幾個網站有關係。

嵐達網 - 程式語言的同好中文網站
目前和 fire7617 共同負責這個網站,暫時以Lambda the UltimatePlanet Haskell and Haskell Cafe 為主,如果我能看的懂就會盡量寫。我暫時想要先把質顧好,所以對於如何擴充這個站暫無太大計畫。

SoC Lab - at CGUCSIE
目前這個 wiki 是由我維護,但是目前是一個穩定的狀態,所以應該暫時不會有太大改變,我也擔任了其中一科助教 XD。

小眾計算學 | for the few of us.
這是由 scm 老師 maintain 的 blog ,為了能夠推廣 programming language ,希望以後不是 few people 而是 many people。


希望以後能把自己的份內事做好嘍。


---

星期三, 11月 18, 2009

沈潛

難得我會一個人安靜的坐在桌子前,已經不太記得上次這樣子是什麼時候了,唯一美中不足的是,桌子還頗亂的...XD

靜下心來,發現自己最近已經好久沒有專心的處理每一件事了,要專心的時候總是不斷的被插斷,若要完成 multi-tasking 這種生活型態,首要之務是專心在當下把時間所排定的事好好完成(這某個程度代表我得把 msn, twitter, plurk, facebook 在專心時關閉),自己不找人聊天,似乎也越來越少的人來找我聊天了(這或許是好事一件 XD),專心這件事,需要花時間學習。每件事都沒有想像中來的困難,這是我這幾天轉換生活型態的體悟,其實很想要加速這個過程,但是也很明白,欲速則不達,只能讓自己慢慢的習慣這個生活步調。

不過似乎該思考的問題是,為什麼我的時間看似完整,但是卻被很多人切割的很碎,要讓自己的時間維持一個完整性,跟與人互動似乎要找到一個方法,不然有任何的外力就得中斷,得要好好思考解決方法,當然,都不要解決的方法就是,自己一個人在自己的地方做事,做完再出現,這在 Peopleware 及 駭客與畫家 皆有大概相同的看法。當然,Peopleware 還提及了一個人的工作效率和他的工作位子大小及不受干擾程度呈正相關。真的該好好思考解決這個問題了,我四年都沒有解決,我不想拖一輩子 XDXD。

---
結果首要之急是學習時間管理 XD。

星期一, 11月 16, 2009

multi-tasking

是時候學習這種模式了,不然現在的我一事無成,連程式都不想寫了。


---
不知道是好還是壞。

星期五, 11月 13, 2009

Windows 7

不要問我有沒有用過 Windows 7 ,我現在都是用 Mac OSX, Fedora, CentOS ,我很少用 Windows 了 XD


---
所以現在當好人的次數也急速下降 XD

星期三, 11月 11, 2009

programming language 與鬍子

我目前沒有留鬍子啦,不過我從 Facebook, twitter, plurk 留了

為什麼外國寫程式的一堆喜歡留大鬍子 XDXD。
然後接著 fcamel 就寫了
有人研究過程式語言作者鬍子長度和語言發展有正相關, 印象中有幾篇文章逐一比較, 滿有趣的 XD

我還蠻好奇的,所以去查了一下 wikipedia 然後我所知道的 PL 與 鬍子關係 XD

  • Haskell - Philip Wadler - 兩個人其中一個沒留
  • C - Dennis Ritchie - 好大的鬍子啊
  • C++ - Bjarne Stroustrup - 留了之後刮掉了 ...
  • Python - Guido van Rossum - 與 Dennis Ritchie 相比不算大鬍子 XD
  • Java - James Gosling - 也是留了個小鬍子
  • php - Rasmus Lerdorf - 三個發展者裡面唯一一個留了小鬍子的
  • Perl - Larry Wall - 山羊鬍的代表啊 XD
  • Lisp - John McCarthy - 跟 Dennis Ritchie 有得拼了 XD
  • ML - Robin Milner - 大鬍子一個
  • Ruby 的作者一開始沒留鬍子 (很難想像它是1995出來的), 後來留鬍子後 Ruby 開始翻紅, 所以後來再留也是OK的啦 XD (from: fcamel)

然後我看到 C# - Anders Hejlsberg 完全沒有鬍子啊(這代表 ... XD?),然後我把這幾個比較精采的留言摘錄在下面 XD

  • fire7617 - 鬍子先留長,以後發明程式語言就不用煩惱了 XDXD
  • Clara - 因為他們忙著寫程式沒時間刮鬍子XDDD
  • eating - 因為頭禿了總覺得要哪裡得有毛
  • legnaleurc - 因為歪果仁都很有禮貌
  • wanwan722 - 跟爆炸頭造就了拳王是同樣意思.. XDDD
  • jeffhung - 這樣熬夜寫程式後,早上起來就不用擔心忘了刮鬍子了。
  • bluegmn - 他們可能比較有禮貌XD
  • Mr. Daniel - 想要得到震震果實XD (yen3 註: 我要成為世界最強的男人 XD)
  • sang - 鬍子跟能力成正比~XD

scm 隨即在 mailing list 中回覆,,Dijkstra 的鬍子也是有故事的,scm 說 Dijkstra 有設計 Guarded Command Language 但是沒有實作,請看這裡在小眾計算學的文章


---
搏君一笑 XDXD

星期二, 11月 10, 2009

信件


我的 gmail 信箱大概從 2004 年 09 月開始用用到現在,用了五年了,今天突然開始整理信箱,發現也是真的有很多很多回憶就是了,不過這個容量真是嚇人啊 ... 我一直以為我不會用到破 1024 Mb 這個 size ,看來還是當初太天真了 XD

---
做個紀念

星期一, 11月 09, 2009

cgu to sinica

原來去中研院這麼遠啊 ... 這還是自己調過的路徑,自己騎車約 27km 左右,大概要騎一個小時。



在較大的地圖上查看cgu to sinica

---
上次去覺得更遠 ...Orz

星期三, 11月 04, 2009

This is it.

昨天明明在忙到哭爸的狀況下,我還是跟 fire7617 去了一趟電影院看 Michael Jackson 的最後一場演唱會電影。

雖然我最近聽的都是 Perfume ,但是我依然去看了這場對我而言很重要的電影,小時候在父親的影響下,開始接觸 MJ ,這邊不想寫我對他很景仰,但是忘了在那邊看,有段文字寫 "在這樣子的時空背景下所能創造出的天王,大概只有 MJ,而在這時間之後,很難會再有這樣子的人物產生了。" 對我而言,可能只有那一句 The King of Pop - Michael Jackson,很幸運的可以看到這樣子的電影。

前幾天在 ptt PLT 版看到 scm 老師徵人,我一時頭昏就衝了,老師也很快的回信,我卻懷疑了,我怕我會做不好,當炮灰去送死之類的,但是我在 Michael Jackson 的電影一開始看到,很多舞者知道演唱會要徵人,就衝去了,當然不盡然每個人都會美夢成真,但是,至少給我一種感覺,不要讓自己的人生過的後悔,我不知道,所以我會努力的做,做到我撐不下去為止,我不知道我的極限在那裡,或許不存在,或許無法超越,或許已超越了,這些都不是這麼重要,我只想做好每一件事,這樣子就夠了,感謝 scm 老師給我這樣子的機會 !


---
Josh Ko, 我會努力的,不會浪費這次機會。

星期二, 10月 27, 2009

研究雜想

或許以後,這種雜想文而亂無章法的文章也會出現在這裡。

如何達成 hardware parallelism 的目標,最基本的答案是 pipeline ,但是因此產生了 data hazrd, control harzrd, struct hazard,其實這三種 hazard 並不一定會存在,端看設計者如何設計,而每個 program 會存在不可平行的部分,如何跨過不可平行部分,變成一種挑戰。

如果我們先為一個問題建立模型的時候,其實我們是想要解決在 pipeline 下的 data dependency & control dependency ,進而展出種種的方法,所謂的 data dependency 簡單的來說,當你要用時,上一個在使用的指令還沒有使用完(所以會有 RAW, WAW, WAR),進而造成 data hazrd,解決方法以 Computer Organziation and Design 提出的 data forwarding 是最簡單的方法,這是在硬體的方法,其實在現有的 CPU 架構,一個 instruction 進入 pipeline 時,會被拆成數個 microinstruction 來執行,也就是說,如果我們在 Compiler 所解決的 data dependency ,進入 hardware 這層是否會有用,不知道(因為我沒有研讀這方面的資訊),hardware/ software solution 並不一樣,但是是為了相同的目的而存在的。而 control dependency 是為了不要讓 pipeline 空閒,提高 CPI,其實真的是如此嗎,我不覺得,如果把程式的指令視為可平行的部分,那麼 control branch 是不可平行之處,也就是說,就會跟沙漏的中間點一樣,停在那裡,要過那邊之後,又是一個較大的可平行區,解決 control branch 並不單單只是為了那個 stall cycle 而己,最終目的是為了追求高度平行化。

也就是說,就一個現在的架構上再加入 VLIW 與 Superscalar 來討論會產生怎麼樣的模型與問題,要解決這三種的 harzard 分別為何,找到問題就幾乎等於找到解法,所以他媽的我一開始就搞錯方向了,搞懂架構,猜出問題才是主要的解決方法,建立一個主架構,而 hardware 的 out-of-order execution, dynamic branch prediction, hardware specluation 與 sofware(compiler) 的 sofware pipeline, loop unrolling, trace scheduling, 等等,這些方法自然能貼到問題所建立的架構上,因應環境而提出解法。


---
好亂啊...

星期四, 10月 22, 2009

最近

我有空寫 blog 竟然是上課的時候 XD。

最近難得三個禮拜回家兩次,但是接下來什麼時候回家我也不知道 XDXD。每天都是看書,處理雜事,忙碌,從 Computer Organization 看到 Computer Architecture,連續兩個禮拜的腦子中充滿了 parallelism 和 ILP (Instruction Level Pararllelism),一方面驚嘆於 Computer Architecture 的架構美麗,一方面也對自己的無知感到嘲笑,總是要繼續努力前進才是,但是有一點覺得我是不是離 Josh Ko 說的越來越遠,到底什麼是現在的我當下想要的,其實我也不知道。

這學期當了助教,助教有助教的難處,學生也有學生的難處,總而言之,繼續做下去才會知道有怎麼樣的結果就是了,但是簡單的來說,遇到的學弟妹,有些人是想要把事情做好卻好像欠缺了一點元素,我卻不一定能幫忙,我總是會想說,我可以好好處理的,但是卻因為人太多而無法幫忙,我想,我應該會在這個禮拜之後改變做助教的風格。

其實還是很感謝 ycma 的支持,雖然我每天邊看書邊幹譙,說,靠爸,為什麼每件事都跟我猜的不一樣(其實猜的一樣我就有可能變大師,猜的不一樣證明我是普通人 XDXD),連程式都寫的很少,這對我而言是一個很好的現象,因為我總是覺得我不夠會想,背景知識不足,並不是一件好事,但是這也導致我每天幾乎沒有時間休息,我是不太後悔,每天的休息時間大概就是自己一個人躺在床上聽 Perfume (用 ipod touch XD),那是一個真正屬於我自己的時間,說來也神奇,很累的時候,聽歌或者是看 Perfume 的演唱會休息,體力和心力會慢慢的恢復,或許有時候自己真的需要一段緩衝時間吧,哈 XD

一直很想寫有關 Perfume 的介紹,最近在整理 Perfume Wikipedia entry ,希望過一段時間之後,能夠有一個較完整的呈現,上次在 blog 中放的歌是比較沒這紅的,這次來放 Perfume 的經典之作 - Polyrythm


---
結果又變成雜想文啦 XD

星期四, 10月 08, 2009

手機套

從以前開始,我從來不認為我是個念舊的人,因為環境使然,外加自己個性如此,所以我總是很自然的認識很多人,而又很自然的與很多人斷了聯繫 ... 從小到大,很常的印象中是自己一個人走著,到了高中雖然認識很多社團朋友,還是一個人走著聽隨身聽,似乎習慣了這一切。

不過這個狀況一直到了大學之後有所改變,因為在大學真的認識很多很好的朋友,而 eating, Clara 真的是很努力想要維持這段友情,讓我更覺得,或許我可以再嘗試一下,到目前為止,我還不想放棄任何事,就算我再忙再累也一樣。

現在的手機是 nokia 5200,是因為我對前一隻手機太差,在大二暑假換的手機,其實 nokia 的手機對我而言一直都是很耐操的,所以我也很樂得使用,只是已經不清楚在大三上那一天,我就隨口說說我想用手機套,eating 人就很好心的和她男友在逛街時幫我挑了一個很符合我的風格的手機套(絕對不是台客風格,雖然我個人風格有這一項 XDXD),還記得 eating 還打電話來問我說有兩到三個,覺得那一個比較好,當下的我是非常驚慌的,因為真的很少會有人買東西給我,自給自足的生活過慣了 XD 也忘了有沒有付錢,總之,這個手機套用到現在,是蠻喜歡,但是也很多感謝參雜於其中,有時候不見了也是蠻執著於找回來的,所幸現在還在 XD。

兩年多過去了,現在手機有點透逗,不過我想大概還可以用很久,大概等到不能用的時候,我會再努力找一個可以塞進這個手機套的手機吧(標準買櫝還珠的行為 XDXD)。


---
一個感謝的回憶。

星期四, 10月 01, 2009

架 wiki 雜感

這個暑假應 ycma 的要求,架了一個實驗室的 wiki ,一開始不知道要用什麼 wiki ,於是就使用了 MediaWiki ,一開始對於這種 wiki system 實在是不太熟,不過熟了之後其實很好上手,快速架了一個之後,其實還真的覺得蠻方便的,雖然中間問題不斷,我在查 MediaWiki 的問題時,都會特別列出 CentOS 的解法,不知道是很有名還是問題特別多(淚) Orz

這幾個禮拜發現,MediaWiki 的上傳檔案其實蠻亂的,一方面是我不太會用,一方面是 MediaWiki 真的很強大(換言之就是複雜),讓我開始思考是否有其他 Wiki 的解決方案,於是我就看到 FLOLAC09 所使用的 DokuWiki。

DokuWiki 是一個相當輕量級的 wiki system,架設的時候預設背後不需要任何資料庫,當然跟原本的設計理念: 當 wiki system 整個不能動的時候,希望能單靠資料夾的結構就能看出來當初架了什麼,這有好處也有壞處,DokuWiki 本身在上傳檔案的時候是沒有版本管理的,而 MediaWiki 這方面有作(不過後面是一個 Database),而 DokuWiki 在備份上也相當容易,僅把整個資料夾壓縮就備份成功了 XDXD,到其他地方再解壓縮後稍作設定即可,對於我這種對 MySQL 不熟的人相當方便(MediaWiki 背後會用到 Database ,備份時就要把 database 的資料 dump 出來),當然啦,其他地方的使用上也相對簡單。

DokuWiki 相當適合我這種懶人,也相當適用於小型網站,如果說資料很多,有數千到數萬以上的網頁的話,可能還是 MediaWiki 比較適合吧 XD? 但是我目前所要放置的資料沒有這麼多,所以我還是可以繼續懶懶的使用 DokuWiki XDXD。


---
兩個月來的心酸嗎 XD

星期五, 9月 25, 2009

Java 編程語言(第四版)

好友 Josh Ko 與 jjhou 譯的書終於出版了,不來寫一下怎麼可以 XDXD

這本是 The Java Programming Language 4/e 的中譯版,我敢推薦,因為是我朋友吧,等拿到書之後,再說吧 !


---
來買喔!!

星期三, 9月 23, 2009

TA

這個學期,因緣際會之下接了計算機組織&實驗助教 XD,我大概是誤人子弟的一個助教吧 XDXD。

這幾天其實沒念到什麼書,大概就是一直忙關於這科的事,其實第一次當助教,剛開學到第二週,我也不希望發生什麼太大的問題,雖然我一直認為我不太會處理雜務,不過這次助教給了很好的機會,所以 ycma 分配下來的事,自認為勝任愉快 XDXD,希望不會造成他太多麻煩才是,不過幸運的是,這堂課有另外兩門助教,合作應該是蠻愉快的。

其實我也蠻意外的發現,我用 LaTeX 已經可以勝任很多一般的文件了,算是好事一樁,唯獨畫圖,在 10.6 底下不能用 InkSpace,我還是得用傳說中的小畫家,真的應該好好找個時間學習畫示意圖才是,我不想每次都畫 pixmap 啊啊啊。


---
雜事學習很重要!

星期日, 9月 20, 2009

機車

我的機車兩次停在台北忘記拔鑰匙,而且沒有被偷走還被好心人放在隱密的地方,真是太感謝了 !!


---
efang 說我的運氣都用在這個地方了 XD。

星期四, 9月 17, 2009

時間

這學期的課表,時間雖然多,不過慶幸的是蠻集中的,可以把火力集中在禮拜五到禮拜二早上,專心的做長時間需要做的事,而禮拜二下午到禮拜四則專心上課和處理實驗室雜務,想的相當完美,希望也可以執行的如此完美 XDXD。第二個問題就來了,長達四天半的時間(其實可以更長),目的也該好好的規畫一下,不過目前沒有頭緒,就以後再說吧XD。


---
因為平凡所以前進。

星期二, 9月 15, 2009

New Begin

一個人,其實很難有明顯的分界點,歷史依然。

其實我也不知道什麼是新開始,只知道我在當下該怎麼做,未來才不會後悔,當初選擇留下,就是為了不要讓自己浪費時間,這個暑假努力調整作息,努力讓自己無後顧之憂,現在來看,相當幸運的,到目前為止一切順利,感謝所有人的幫助。

其實我離真正的研究還有好大一段距離,或者是說,我永遠達不到,充其量只是拾人遺穗罷了,但是更因為如此,要好好努力,脫離現在所身處的位階,對我而言才是最重要的事,我會不會因為這樣子變成一個很嚴苛冷酷的人呢? 我也不清楚

立足當下,放眼未來,不再迷惘,很多事只能且戰且走。


---
Just a begin.

當小白遇到小黑


因緣之下,朋友買了一台 ThinkPad x200,我幫她重灌時,拍下了這樣子的照片,不甚好看,小白很像在發爐一樣,不過我對 x200 讚不絕口倒是真的。


---
新開始

星期五, 9月 04, 2009

Sixpence None The Richer - Within a Room Somewhere


---
escape the pain, within a room somewhere.

星期四, 9月 03, 2009

Perfume - セラミックガール


想看看大家反應如何,自從被刷姊說過我都喜歡看日系小妹妹中了好大一槍之後,現在都免疫了 XDXD


---
不知道耶 XD

新竹散心

今天一早就搭車去新竹,拜訪好友 Clara,,中午吃飯時再與 eating 會合,吃了一間相當好吃的美式漢堡,三個人不知不覺就聊了一整天,相當的開心,或許就有如 eating 說的,會回憶到之前美好的時光,或許我不再堅持之前的想法,有些美好的時光,真的可以好好回憶,謝謝 Clara, eating 相處美好的一天。


---
非常非常開心。

星期一, 8月 31, 2009

blog 小小修改

由於我已經到了老花眼的年紀了,決定把 blog 字體調大點,然後調整 tag 為 tag clound 的型式,順便問一下,這個 blog 是否還有其他問題 XD?


---
通篇廢話 XD

星期六, 8月 29, 2009

書櫃


gwchen 老師搬家,剛好有多的書櫃可以送我,相當開心,其實一直很想買書櫃,但是摩拖車實在是不太知道怎麼把一個小型書櫃載回來,就拖到現在了,非常謝謝老師送的書櫃! 不過其實還有蠻多書是流落在異鄉或者是在學校的,書多還是蠻麻煩的,總覺得自己該去買一個 Kindle DX 了 XDXD

附帶一提,之前是這樣子過的 XD


---
睡覺的時候終於不用怕地震了 XD

星期二, 8月 25, 2009

這篇單純是抱怨文 XD。

為了要在 Linux 上跑 EDA Tool ,我先把 MacBook 重灌,然後使用 BootCamp 灌 linux,整個過程確定都對了,grub 也確定裝在該磁區了,不能開機就是不能開機,順便也讓我的 Mac OSX 不能開機,要用選的才能開機了,現在的打算是,等 Snow Leopard 出來再重灌好了,我到現在還是覺得,重灌是一件非常浪費生命的事...Orz

在 Mac OSX 上使用 VMware fusion 灌 Fedora ,在 command line 上打個指令都要數秒後才有反應,受不了改用 VirtualBox,速度上是變順了,但是 Altera Quartus II 怎麼樣就是灌不進去,我只好心一橫,現在在用 VirtualBox 灌 Cent OS,希望會成功,今天幾乎快要一整天都在搞這東西,只能唉了 ...Orz

---
抱怨終了XD

星期一, 8月 24, 2009

醒來

又是一個失眠夜,看著天空由深藍色漸漸的變淡到邊際帶有一絲絲的黃,才發覺,我很久沒有好好看著天空過了。

其實這幾年來,自己就像一個機器般投入巨大的旋渦中,我在資訊中沒有專長,興趣又過於廣泛,或許就真的有如 Josh Ko 說的一樣,而能做的只是努力讓自己活的有意義,希望可以在蘇格拉底式的詢問方式下留有一點價值。

這幾年下來,自身的想法與社會中的看法與意義不斷衝突,才發現,我並無太大的改變,而只是把有所堅持的學習與處事自我要求的更為徹底了些,但是說穿了,自己仍是一個簡單而懶惰的人吧。而寫出如此無病呻吟文字的文字更加證明了這一切(笑)。

有著太多不明白卻又想弄懂的事,專心於當下,放眼於未來,就是我所能做的。


---
有感

星期日, 8月 23, 2009

最近

聽說 The Java Programming Language 4/e 中文版終於要出版了(三年過去了...) 可以期待上市了,這次我不打算開團購,有意思的人請自行開團 XDXD。

目前人將要在 NYU Columbia CS 攻讀的 cctsai 學長非常恭喜他,雖然一直跟他不是很熟,不過總算是去美國了,好事一件,日前受他推薦日本的 Perfume,分類是偶像唱電音,老實說,我不知道什麼是電音,不過我覺得我聽的下去,歌曲也 ok ,有興趣的人可以找來聽聽看喔。

學了很久的 Python,雖然手上終於有 Python Essential Reference 3/e ,但是我想回去學 Haskell 了,學了太多程式語言,沒有專精的話,這是絕對的壞事。


---
暫記 XD

星期六, 8月 22, 2009

Mac OSX Terminal 256 color

這篇基本上是參考 yzlin 的 The Tips of Setting Workstation Environment如果是 linux or FreeBSD ,用這份簡報就很足夠哩!
不想這麼快進入正題,為什麼要用出一個 256 color terminal? 我想很大部分的原因是為了舒適度,原本的 8 色或 16 色的功能大部分像是拿來 mark 說,這個字和其他字不太一樣,至少就我看起來,原本的 8 色或 16 色看起來並不是這麼舒服,而用 256 色的時候(我在 Windows 95 就是用 256 色耶 XD),我們有比較多的選擇可以讓自己的眼睛舒服些,那怕給一個 keyword 標定為藍色,也是有差別的

在 Mac OSX 底下要用 256 color terminal 的話,請愛用 iTerm, iTerm 原生支援 256 color ,但是開下去你會感受不到任何差異 XD,不過在這邊我想說一下,iTerm 的半透明效果不要開,開了會非常的 lag,不知道是 bug 還是程式本身的問題,之後在 .bash_profile 加入

export TERM=xterm-256color
重新登入後,還是看不到任何差異,當你打 ls 的時候,ls color 已經寫死了,通常做到這邊,在 linux 底下已經看的到 ls 不太一樣了 XD,所以我們要測試的是 grep ,這個時候,我們對某個檔案做 grep --color include xxx.c就會看到

terminal 基本設定到這邊完成了
VIM
VIM 原生支援 256 color,所以只要環境支援 256 色,再找到一個 256 色的 color 的 scheme 就可以動工了(推薦 yzlin 寫的 yzlin256.vim) 把抓好的 color scheme 放入 ~/.vim/colors/ 底下,然後在 ~/.vimrc 中設定
set syntax=enable
set t_Co=256
color yzlin256
全數搞定,不過詳細的顏色設定可能還要研究一下,在 VIM 出來的成果大概如同下圖

GNU Screen
2011/09/20: 在這個時間點,已經不用自行編譯 screen,安裝 homebrew-alt 之後再行安裝 screen (輸入 brew install [homebre-alt_dic/duplicate]/screen.rb) 即可。
Mac OSX 有原生編譯好的 screen,不過很可惜的就是 256 color syntax 並沒有開啟,如果原生支援的話,在 ~/.screenrc 中寫入
#terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
attrcolor i "+b"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
termcapinfo xterm-color "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
不過由於原生不支援,所以我們得去GNU Screen抓回來自己編譯,而編譯的選項為(參考這裡)
./configure --enable-locale --enable-telnet --enable-colors256 --enable-rxvt_osc
然後當編譯雖有一堆警告(因為 Mac OSX 用的是 utmpx.h 而非 utmp.h) 的時候很快就發現了錯誤 XD
pty.c:38:26: error: sys/stropts.h: No such file or directory
這時候開啟這個檔案一看,我們看到的是 ...
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
#ifdef HAVE_SVR4_PTYS
# include <sys/stropts.h>
#endif
我們用的應該不是 solaris ,所以移掉這幾行,編譯就可以完成了,之後執行我們自行編譯的 screen,我們應該能看到 ..(下圖的測試檔在此可以下載)

到此,iterm, vim, gnu screen 都有 256 色啦 !
如果有常看 man page 的需求,可以將下列設定寫入 ~/.bash_profile 中

# colorful man page
export PAGER="`which less` -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[38;5;167m'
export LESS_TERMCAP_md=$'\E[38;5;39m'
export LESS_TERMCAP_me=$'\E[38;5;231m'
export LESS_TERMCAP_se=$'\E[38;5;231m'
export LESS_TERMCAP_so=$'\E[38;5;167m'
export LESS_TERMCAP_ue=$'\E[38;5;231m'
export LESS_TERMCAP_us=$'\E[38;5;167m'
而 man page 就有類似這樣子的效果出現,當然顏色可以自己慢慢調 XD

---
enjoy the environment. XD

勿忘此時

我們不會忘記

星期三, 8月 19, 2009

學習 VIM

其實標題很難下,所以我就隨興下了一個標題 XD。

要學 VIM 其實不難,網路上四處找的到文章,不過我推薦下列簡報,我也不想在此重寫一篇,因為我不會寫的比 c9s 和 yzlin 來的好 :)

c9s 提的移動方法讓我受惠良多,yzlin 學長(他大概不記得我是誰了 XD) 所提及的不光只是 VIM,還有其他相當多實用的技巧與方法,相當值得讓我這種菜鳥學習。

其實說到使用軟體的觀點,最難的一點就是「認定」,我所謂的「認定」就是你覺得它很好用,可以用很久很久,而且有長久的更新支援,並且足以在你工作平台上有著良好運作。對我而言,要認定任何一個軟體或程式語言都是非常困難的,不過我想就我會使用 VIM 的原因來說明。

基本操作
就基本操作而言,VIM 分成三種模式,基本上在 normal mode,能輸入的字元都有功能,也有人因此做了一張對應表,其實從 c9s 的 slide 可以得知,基本上我們可以用方向鍵 + Page Up/Down or 滑鼠滾輪,來移動至相對位置,但是我們可以利用 vim key mapping 來進行更快速的移動。真的能省下多少時間嗎? 其實不知道,但是對於整體操作的順暢度會有很大的提升,簡單來說,就是操作的很爽,這方面,真的會讓人離開不了 VIM XD。

驚人的設定彈性
其實這個部分我還在摸索,如果真的要能夠完整掌握 vim 特性,唯一建議是,跟官方文件直球對絕吧 :) (pdf 版 有 237頁 XD),一般的 text editor 能夠設定的其實有限,但是 vim 的彈性之高,真是讓我嘆為觀止,我真的很佩服設計 VIM 架構的人,光以 syntax color 而論,或許 syntax file 是很多,但是整個 syntax file setting 和 color setting 的組合實在是非常有趣,而且 synatax file 有疊加的概念,C 的 syntax file 寫完了,C++ 可以接著繼續寫,這點就真的超有趣,更不論你可以針對特定檔案做出特別設定,如果願意,把 vim 最佳化成特定 programming language text editor 也不是一件困難的事 XD。

plugin
老實說我不知道 vim 的 plugin 個數多不多(約 2700 個),有好有壞,c9s 和 yzlin 都有推薦,可以試試看,端看自己是用什麼 programming language ,就看情況裝吧 XD。


學習曲線
c9s 在 slide 中坦言 VIM 的學習曲線很高,我同意,但是我想補充的是,使用者是可以訓練的,如果一開始就訓練到某種程度而可以讓他之後做的事更為順利,我認為這樣子的訓練是有必要的,舉個例子來說,用注音輸入法可以打出字來,但是新酷音輸入法就有詞庫可以預先訓練,讓你打字更方便(此舉是程式被訓練),但是也可以學習嘸蝦米輸入法,讓自己輸入中文更為便利,其實那一種方法好,端看自己。VIM 或許在一開始是較難以入手沒有錯,不過我相信過了陣痛期之後,我相信會帶給比大部分的 text editor 有著更美好的體驗。

Text Editor vs. IDE ?
到底要用 text editor 好還是 IDE 好? 其實兩個一起用也不錯,我因為平台跳來跳去的關係,我現在只有用 VIM + Eclipse ,兩者的共通點就是,跨平台,都有 plugin 網站 XD,沒有什麼一定好壞的選擇,可以兩者結合嗎? 當然可以啊,不過我目前還是可以在 command line 底下完成啊,我就懶了,VIM 在編輯方面有所長,但是整個專案在 Eclipse 底下,使用 基本的 Refactoring 真的蠻方便的,VIM 做的到,只是我懶的找方法了 XD,也沒有必要過度神化或操死一個軟體,不同的狀況下用不同的軟體也不錯 XD。

真的要用 VIM 嗎 XD? 其實你還有 emacs,找到認為最適合自己的 text editor 就是一件很開心的事!


---
似乎寫的有點亂...Orz

星期日, 8月 16, 2009

c_snippets.vim/ cpp_snippets.vim 釋出

起初我在 在 Vim 上使用 Slippery Snippet ( Textmate-Like )看到可以藉由輸入少數的字來完成功能,覺得非常的好用,但是抓下來之後,看了其中的 c_snippets.vim 功能還蠻少的 (latex_snippets.vim 更少,只有三行 ...Orz),然後決定自己用苦工來改,所以我在這個檔案做的事,都只是苦工而己... 於是初步完成品如下

c_snippets.vim
cpp_snippets.vim

我會持續維護這個檔案,雖然是很想開一個 git 來做管理比較好,不過我目前還蠻懶的,還有就是,我想把 C++ 特有的語法移到類似 cpp_snippets.vim 這樣子的檔案去,這大概都是我下一步要做的吧,然後可能還要學一下 vim scripts,希望可以幫助到有在使用的人啦 XD

snippetsemu 在 Google Code 上有專案,所以我上傳了,不知道會得到怎麼樣的回應喔 XD


---
大概只有自己在用吧 XD。

出發

今天要出發前往 COSCUP 2009,不過我的 MacBook 沒有電池(送修中),ipod touch 放在學校,管他的,開心就好,打算去買件「你好,世界」(就是 "Hello World") 來穿啦,這句話不僅對 programmer,對 C/C++ 寫程式的人更是特別有感覺,衝啦衝啦 XD


---
昨天明明一點半睡 ...Orz

星期三, 8月 12, 2009

編輯環境

最近我在調 VIM 調的很開心,網路上文件眾多,官方文件也是相當的齊全。若要說 VIM 為什麼這麼吸引人,或許他的外掛精彩,或許可以完全客製化是重點,不過對我而言,那些很難上手的操作按鍵,但是上手後又相當直覺的操作法,才是吸引我的地方。

對於一般人而言,什麼是合手的文字編輯器? Microsoft Word 是一個很不錯的選擇(雖然它有著不錯的排版功能,但一般人還是把它當成 word processor 居多),LaTeX 是一個很好的編寫論文利器,雖然它的 Beamer 可以撰寫出相當良好的簡報,但是一般狀況下,我想大家還是寧願用 Apple Keynote, Microsoft PowerPoint 來製作簡報。每個軟體都有它的極限,都有好與不好之處,那麼我們又要怎麼尋找 XD?

來說說我所看見的 programmer 在編輯環境的狀況,在 Mac OSX 上利用 TextMate 來撰寫 Ruby (我在 Google Developer Day 看到有人用來寫 Python,也是快到爆炸XD),在 Mac OSX 上可以利用 TeXShop 來撰寫 LaTeX (在 Linux 上有 TeXMaker ,不過我沒用過 XD),我認識的一位朋友愛用 PSPad 寫程式,為了這隻程式,在 linux 上還利用了 wine 灌起來編輯。Eclipse 除了它本身很肥以外,其實是對很多程式語言都是一良好的解決方案,Java, C/C++, Python, balala,Google 發展的 API 也幾乎都是以 Eclipse 為平台做為發展。每個人都有自己的邏輯,我的老師 ycma 就是用 KWrite + 檔案瀏灠器在寫程式的,KDE 裡面有很多方便程式撰寫工具,我覺得這也很棒啊。在 wiki 上,甚至有 text editor 的比較,可見,大家都在努力尋找適合自己的環境,而且這件事顯的相當重要!

一般的狀況我們不提,我好久沒有用 Word 和 PowerPoint 了 XD,我想講的是,身為一個寫程式的人,我們要怎麼找到適合自己的環境 XD? 這是我目前使用的編輯器列表

  • VIM - C, C++, LaTeX, Python, PHP ... etc
  • Eclipse - Java, C++
  • TeXShop - LaTeX
  • Visual Studio - C# (這行很明顯是來亂的,大學專題過後,我幾乎不用 .net 開發程式 XD)

基本上只要是未知的環境,我都習慣用 VIM,而 Java 堅持用 Eclipse,其他倒也還好,我沒有固定用一個文字編輯器的偏好,不然我應該會想辦法把 Eclipse 接到 VIM 上(我知道網路上找到的這種軟體,但是我不打算這樣子做,太瘋狂了 XD),我沒有用過 emacs ,但是這套軟體也是有很多死忠粉絲的 XD。

離題了,那麼什麼是對自己而言最適合的程式撰寫環境? 我不知道,每個人都有自己的需求,而你找到你認為理想的編輯環境了嗎 ?

---
寫完完全不知道自己在寫什麼 XD

星期二, 8月 11, 2009

vim on Mac OSX

在我寫 vim 的 blog 時,我覺得我在 VIM 上裝了太多東西(其實也沒多少啦),但是同樣的設定在 Cent OS 5.3 上卻跑的很順,觀察了一下 Cent OS 5.3 compile vim 的 option 是 -O2,而在 Apple gcc 上是 -O ,我就自己抓了 source code 自行重新編譯然後安裝,果然在 Mac OSX 上也可以跑的很順了 XD。

command 如下:

./configure --enable-gui=no --with-x=no --enable-multibyte
make CC=gcc-4.2 CFLAGS=-O2

其實這只是一個範例,我不想裝 gvim (其實也裝不起來),也不想開一個 vim 就要開一個 x11,我試過 O3 ,不過反而比較慢,所以就可以試試這樣子的編譯選項

若在使用 vim 時,backspace 失效,在 ~/.vimrc 加上

set backspace=indent,eol,start

即可解決。


---
別人在編 Firefox,我在編 vim XD


如果有用 MacPorts 安裝 gcc4.4(要裝很久),也可以試試這樣子的指令
make CC=/opt/local/bin/gcc-mp-4.4 CFLAGS=-O2

Firefox 3.5

我在 Mac OSX 上一直都是用 Firefox ,從買 MacBook 以來就沒有變過。我試用過 Safari,真的順又快很多,但是使用習慣不同,所以也不是很經常使用。

但是從 Firefox 升級到 3.1 之後,我的Firefox 就無法關掉,按 cmd + Q 之後,最常出現的是 "應用程式沒有回應" ... 什麼鬼(翻桌),經過多次測試之後,第一次是發現我用的 Theme 相衝 (iFox),移掉用別的 theme 就沒事了。第二次是 plugin 相衝 (Tab Mix Plus, ... etc) ,移掉就沒事了,這一次,不管怎麼移都不管用,我把歷史記錄全部清掉就沒事了 ... (然後發現,Tab Mix Plus 裝回去也不會當掉了 Orz)

其實我還蠻好奇,這只是個案,還是其他人也是這樣?


---
每天都要測試不同的當掉原因 ...Orz

星期一, 8月 03, 2009

記錄





今天看到 yzlin 學長的 vim slides,照著裡面稍微修改了一下,有空會繼續改,不過我對目前的成果非常的滿意 XD

Mac OSX 10.5 Terminal.app 不支援 256 color,所以我稍微再對 vim 修改一下,然後使用 iTerm 取代 Terminal.app


---
等全部完成後,來做個筆記 XD。

記錄


難得會有這麼忙碌的暑假,紀念一下


---
誰叫我沒事突然跑去修三學分的生物資訊課程 XD

星期六, 8月 01, 2009

感觸

看到 Josh Ko 寫的標籤,感觸很多...

我是長庚大學的學生,很多人聽到我說這個校名,大家就會問我說,你是醫學院的嗎? 我說我是資工系的 XDXD 這其實是一個小事 XD 也有人聽到我是資工系的就會問我說,你會不會修電腦,我是會修電腦,不過似乎跟我進來這個系沒有太大的關係 XDXD

好啦,搞笑結束。其實沒有 Josh Ko 之後,自己一個人在學校學習與研究,是頗寂寞的,雖然我一直沒有聽他的話把 Haskell 學好,我也沒有走 programming language 這條路,但是我一直覺得和 Josh Ko 相處很開心,我常常嫌他給我一些很白爛的建議,我們兩個常常聊的很開心,縱使對於事情的認知相差很多。他提及說,沒有誘因留在台北了,那麼我也會思考,現在的我,還有什麼誘因讓我留下來 XD? 留在這個地方,想法真的很簡單,讓自己能夠符合某個強度之上的訓練,朝下一個目標前進,其他的事對我而言,已經不是這麼重要了。

我不是什麼一般人認為的名校畢業的,所以我沒什麼負擔,大家看到我認為我是一個混吃等死的大學生(我想我也蠻符合這個描述),也因為如此,我可以更集中精神的朝一個目標完成。不可否認的是,這個暑假一個月過了下來,讓我有越來越像一個人的感覺了。

也好,是時候不要成為別人的負擔了,也不要成為這個社會的負擔了。


---
有感

星期三, 7月 29, 2009

最近

Blog title 想改成 A woman in wind gray 不知道大家覺得怎麼樣 XD?

稍微解釋一下,為什麼我明明是男的,卻選擇用一個女性做為 symbol ? 因為我還蠻喜歡柔性的事物,雖然這跟我本人極不相稱 XD,那麼這圖女性的身材相當的好,呃,這不是我可以控制的,可能要問畫這張圖的本人比較好 XD 原本的圖比較好? 這也是有可能的,原本的圖是專家級畫的,不過我覺得這張圖會不錯,應該看久會習慣吧 XD

沒事就在看 Modern C++ Design,雖然就目標上我應該要好好的看 Computer Architecture 的 parallel 部分(這可能分成 mutli-cores, pipeline and superscalar),不過暫時不管他 XD 不過看到現在,我更想學會 Haskell 和 JavaScript 了 XD。

但是不得不說,Modern C++ Design 看到現在覺得相當的精采,可以在 compile time 做到這一堆事,我想等看到告一段落再來說好了。

ycma 都鼓勵我們直接跟上千頁的手冊對幹,就跟 wyshieh 說的投球就要用直球對決一樣,我只能說我現在能力不是很足,看著手冊總是要靠著 Google 到另外的一些教學文件輔助才能看懂一些我想要的東西,看來自己閱讀文件的能力不足,得要繼續努力。

看著 fire7617 有一點感觸,因為他每天都用 Fedora ,結果他用 linux 人真的比很多號稱會的人來的好,之前曾經聽到過,有人在 ubuntu x86-64 上嘗試灌 LAMP,但是 LAMP 好像沒有 x86-64 版本,所以硬是開了相容模式灌了 x86 的 LAMP,我還蠻訝異的,有這麼困難嗎 XD? 我在 Cent OS x86-64 裝 wiki 一堆錯誤還是撐過來了啊 XD 不過我不會 NFS 之類的,我覺得我現在還是不太會灌伺服器就是了。


---
一堆雜感。

星期五, 7月 24, 2009

A woman in wind gray


不是說原本的圖不好,而是沒有版權也不知道是誰,snake 就畫了一張新圖送我,非常感謝她,以後有顯示圖片的地方大概都會用這張圖了。


---
A woman in wind gray.

LaTeX Insert Code - lslisting package

最近剛好有在文件中插入程式碼的需要,使用 lslisting package 讓自己比較好工作,但是原本的 sylte 不甚喜歡,所以稍做調整,範例如下


\begin{lstlisting}[title={hello.cpp},
frameround=tfff,
columns=fullflexible,
numberstyle=\tiny,
stepnumber=5,
frame=single,
basicstyle={\ttfamily \small},
numbers=left,
commentstyle={\sffamily},
language=c++]
#include <iostream>
int main(int argc, char** argv){
std::cout << "Hello World" << std::endl; // print ``Hello World''
}
\end{lstlisting}

出來的結果為 ...

其實我只是想做個筆記,如果有其他的設定也跟我說,總覺得我設定的不是很好。


---
做個筆記 XD。

星期二, 7月 21, 2009

或許

或許,我一直都在摸索怎麼當情人的方式,對於她而言,我不是一個足夠好的男友吧。


---
想一想,真的沒有什麼是好的了

星期一, 7月 20, 2009

beamer template 釋出



原始碼在這裡 (beamer_template.tex)

這是參考 Josh Ko 的 Oxford Color Theme 改的,我原本也想釋出 Oxford Color Theme,不過他人當替代役去了,我想還是等他本人同意再說比較好。

預設的 outer theme 是我相當喜歡的 minipages ,效果如上圖。就原始的 theme 來說,都是做細微的調整,例如說加深顏色對比之類的,比較大的修改都是沿用 Josh Ko 而來,所以還是相當感謝他。

在最後加了一個獻醜的指令,\bigtitles ,能夠更快速的插入大標題與小標題,會做這個功能的原因是我還蠻常用到的。

排版部分,簡報字體使用的是華康黑體W5,而文件使用的是華康明體 W5,預設是使用 \chf{} 才能使用中文,對我影響不大,因為我用中文的機會比較少,也不是不能說把中文字體設為主要的字體,但是,這樣子 Computer Modern Fonts 就會消失了(取而代之的是中文字體裡面的英文字體 ... Orz),所以才會採取這樣子的折衷方法。

雖不能做到盡善盡美,不過我想我會用這樣子的設定用很久很久 XD。


---
不知道會不會有人用 XD。

星期三, 7月 15, 2009

最近

其實沒什麼可以寫的,但是又很想寫些什麼。

很想寫些長文章,但是沒有心思也沒有時間,所以大概只能這樣子渡渡混日子,然後希望自己不要變成廢物,希望明天該死的考試結束之後,我能夠寫一連串有關硬體的相關文字,當作是自己的一個學習筆記,常常覺得自己在越級打怪就是了,希望這一切可以趕快過去也趕快平靜。


---
雜記

星期三, 7月 08, 2009

名詞潮流

昨天有人跟我提 "執行力" 這個名詞,我覺得蠻感興趣的,因為我最近這一陣子還蠻常聽到這個名詞的,於是我無聊就 Google 了一下,沒有猜錯,是天下/ 商週的產物。老實說,我很久沒有看這種雜誌了,我也不是很喜歡看商週,但是對於這本雜誌所帶動的名詞潮流我倒是有點興趣。從 人脈、AQ、紫牛、藍海(還是紅海 XD?)、M型社會、執行力,這些名詞的流行,大概都跟這兩本雜誌脫離不了關係,而這些名詞的後面通常是一本書。其實我比較喜歡看的的是 "第三種猩猩", "槍炮、細菌與鋼鐵" 說 XD。

這些名詞的好與不好我不太會去評論,不過我知道的是,不管這些名詞有沒有被提出來,這些名詞所帶來的背後事實是早就存在了(說事實的原因是,有些是為了創造名詞而扭曲事實,這邊有個例子。),那麼為什麼這些名詞仍會流行 XD?

後來我在 Evil Capitalism Heroes中的 龐克扮高深(revised) 看到了如下文字:

市場經濟最迷人的地方就是
你要什麼
市場就會賣你什麼?
你要扮高深
市場就會賣你扮高深
你要義和團
市場就會賣你義和團

我不知道拿這一段話來解釋名詞潮流合不合適,但是這就是我所認為的答案。其實我說這種事並不是這麼好,因為我還在努力的尋找我的中心思維,一個沒有中心思維以及足夠強的訓練,是很容易在辯證式思考中造成自我混亂,不過仍然得依靠自我訓練以及辯證來達成目的,方法是不是對的,至今仍在摸索中。

那麼我現在到底要怎麼閱讀,我會選擇閱讀經典(但這些經典是怎麼判定的,仍有待商確),不斷的論證吧,至少就我的觀點而言,我只是一個會看著螢幕科科笑的阿宅,我不太需要趕市場的流行 XD 安靜的研究與思考就可以了。


---
繼續努力。

漫談 String Processing

String Processing 方法其實不少,剛好最近有學到,寫出來筆記一下。

C 的 string 其實是 char* 這點是非常顯而易見,若要說為什麼,不在這裡的討論範圍內,不過 C 的 string processing 幾乎是我所認為的基礎,就我所遇到的 programming language ,至少都有 C String library 所提供的功能(當然,大部分來的更多),所以要認識 function 背後所帶來的成本,學 C Standard Library 是一個不錯的選擇。

一般常見的處理方法如下:

  • naive method:
    我想這沒有什麼好解釋的 ... XD
  • Use library provided by programming language:
    其實以 Java, Python 而言,sting's function 可以解決大部分的常見問題,C++ 也可以,只是在操作上沒有這麼直覺(C++ Boost string algo 提供了不少好東西,也可以參考。)。
  • Consider a string as input/ output:
    • C: sscanf/ sprintf
    • C++: istringstream/ ostringstream
    • Java: StringReader/ StringWriter
    • 簡單的來說,就跟操作 scanf 一樣,所以 scanf 有的優點這個方法都有,缺點亦然,但是對於單一格式的字串處理,如果要轉換成 int, double 之類的,算是比較快速的一個選擇。
  • Regular Expression:
    C, C++, Java, Python 皆有相對應的 library 可供使用,這一招的用途非常的廣,通常也接近最後一招了,不過還是有死角,不建議使用 Regular Expression 在 XML 類的文件上。
  • Parser:
    通常就會針對特定文件了,例如說就有 XML parser, HTML paerser,使用這類的 parser 來處理相關格式會有事半功倍的效果。
目前想到的方法大概為這些,做個筆記,歡迎指正或補完哩。


---
想起來很多,寫起來很少 XD

星期二, 7月 07, 2009

vimrc

突然想到自己的 .vimrc 雖然不怎麼值錢,但是不見了也很麻煩,所以備份一下好了。


syntax enable 
set number

""" set encoding to UTF-8
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1
set termencoding=utf-8
set ambiwidth=double

""" set color scheme
set background=dark
set t_Co=256
color yen3

set title
set showmode            " Show current input mode in status line
set cursorline         " Show Cursor Line in Underline
"set showtabline=2
set wildmenu " Show autocomplete menus.
set visualbell

""" enable mouse
set mouse=a
set ttymouse=xterm
set mousemodel=extend

""" Search Setting
set showcmd
set incsearch
set showmatch

set hls

""" Backup Setting
set backup
set backupdir=$HOME/.vim/backup

""" set status bar
set laststatus=2
set statusline=%4*%<\ %1*[%F]
set statusline+=%4*\ %5*[%{&encoding}, " encoding
set statusline+=%{&fileformat}]%m " file format
set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
highlight User1 ctermfg=red
highlight User2 term=underline cterm=underline ctermfg=green
highlight User3 term=underline cterm=underline ctermfg=yellow
highlight User4 term=underline cterm=underline ctermfg=white
highlight User5 ctermfg=cyan
highlight User6 ctermfg=white

""" set folding
set foldnestmax=3
"set foldmethod=syntax
"set foldcolumn=4

""" Set editing Tab
set autoindent
set expandtab
set shiftwidth=4
set softtabstop=8
set tabstop=4
set smarttab
set backspace=indent,eol,start 

""" set help doc
helptags $HOME/.vim/doc 

filetype on
filetype plugin on

""" Key Mapping
nnoremap <silent> <f2> :NERDTree<cr>
nnoremap <silent> <f3> :TlistToggle<cr>
nnoremap <silent> <f6> :set foldmethod=syntax<cr>
nnoremap <silent> <f7> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr>

nmap cr=    $F=lcf;
nmap cl=    $F=hc^

nmap <LEADER>tc :tabnew<CR>
nmap <LEADER>te :tabedit<SPACE>
nmap <LEADER>tm :tabmove<SPACE>
nmap <LEADER>tk :tabclose<CR>
nmap <C-H> :tabprev<CR>
nmap <C-L> :tabnext<CR>

""" 讓我們可以使用 tab 來縮排
nmap <tab> v>
nmap <s-tab> v<
vmap <tab> >gv
vmap <s-tab> <gv

""" let command mode has bash key binding
cmap <c-a> <home>
cmap <c-e> <end>
cnoremap <c-b> <left>
cnoremap <c-d> <del>
cnoremap <c-f> <right>
cnoremap <c-n> <down>
cnoremap <c-p> <up>
cnoremap <esc><c-b> <s-left>
cnoremap <esc><c-f> <s-right>

""" Source Code Formating
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview


""" Tab setting
autocmd TabLeave * let g:LastUsedTabPage = tabpagenr()
function! SwitchLastUsedTab()
    if exists("g:LastUsedTabPage")
        execute "tabnext " g:LastUsedTabPage
    endif
endfunction
nmap tt :call SwitchLastUsedTab()<CR>

""" Auto remove each line-end space 
autocmd FileType c,cpp,java,php,perl,python,ruby,sh,v autocmd BufWritePre  :call setline(1,map(getline(1,"$"),'substitute(v:val,"\\s\\+$","","")'))


com! -bang -nargs=? QFix cal QFixToggle(<bang>0)
fu! QFixToggle(forced)
    if exists("g:qfix_win") && a:forced == 0
        cclose
        unlet g:qfix_win
    else
        copen 10
        let g:qfix_win = bufnr("$")
        en
    endf
nn <leader>m :make<cr>
nn <leader>q :QFix<cr>

nmap <C-c><C-c> :!g++ -g -Wall % -o %:r.out<CR>

---
也可以當成參考 XD

星期四, 7月 02, 2009

最近


一直到今天,期末作業告了一個段落,同時也代表我大四下課程結束,可以繼續完成我的大學總回顧。

為了慶祝大學畢業,買了 FILCO 茶軸鍵盤當成自己的禮物,其實一直都很想買這個鍵盤,只是沒有什麼好理由,如果沒有意外就不會再換了(小白就是遭遇了意外,不見了...Orz),再加上 Logitech MX1100(原來的 MX1000 掛了),還有現役的 DELL 24 吋螢幕,形成現在的工作環境。

不過由於剛完成這些課業一段時間,所以這幾天會好好休息,有事請這幾天後再找我吧,我想也是該稍微停下來一下想想接下來要做什麼了。

花在 plurk 的時間上太多,這也是我要改進的地方,或許應該試著不要堅持把所有的訊息都看完,不然真的很浪費時間,可是又很難的過濾想看的訊息,或許還要試著找一個模式吧。


---
雜記。

星期二, 6月 30, 2009

ACM 532 - CHCRC

今天翻檔案時,翻到我在高中時,寫的 ACM 程式碼,果然有夠醜的,貼出來讓大家笑笑 XD

#include <stdio.h>
#define N 35

char maze[N + 2][N + 2][N + 2];
int a, b, c, fsp = 0, tsp = 0, qt = 0, qf = 0, times = 0;
int i, j, k;

struct use {
int x, y, z;
} sp[N * N * N * N];

int zero() {
for (k = 0; k < N + 2; k++) {
for (j = 0; j < N + 2; j++) {
for (i = 0; i < N + 2; i++) {
maze[i][j][k] = 0;
}
}
}
return 0;
}

int input() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
scanf("%s", maze[i][j]);
}
}
return 0;
}

int start() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
for (k = 0; k < c; k++) {
if (maze[i][j][k] == 'S') {
sp[fsp].x = k;
sp[fsp].y = j;
sp[fsp].z = i;
return 0;
}
}
}
}
return 0;
}

int run() {
i = fsp;
j = tsp;
while (1) {
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x + 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x + 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x - 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x - 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y + 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y + 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y - 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y - 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z + 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z + 1;

}
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z - 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z - 1;

}
if (qt <= 0 && qf == 0) {
times = -1;
return 0;
}
if (qf == 0) {
qf = qt;
qt = 0;
times++;
}
maze[sp[i].z][sp[i].y][sp[i].x] = 'R';
i++;
qf--;
}

return 0;
}

int main() {
zero();
while (scanf("%d%d%d", &a, &b, &c)) {
if (a == 0 && b == 0 && c == 0)
break;
input();
start();
run();
times++;
if (times != 0)
printf("Escaped in %d minute(s).\n", times);
else
printf("Trapped!\n");
fsp = tsp = qt = qf = times = 0;
}
return 0;
}

---
其實大一有重寫,大概 7x 行就結束了 XD

星期日, 6月 28, 2009

CLRS

fr3@KGoogle 分享項目 看到 Introduction to Algorithm (CLRS)把 Multithreaded Algorithms 的章節免費讓人下載之後,連來連去發現

要出第三版啦啦啦啦~出來之後,一定要扛一本精裝版回家(握拳)

這也是繼強者的 blog 說計算機組織聖經 Computer Organization and Design: The Hardware/ Software Interface 4/e 出現之後,最讓我期待的一本書了,已經重量級的兩本書都出了,還會有什麼新書呢,真是令人期待(笑)。


---
什麼時候會有 The C++ PL 4/e XD?

星期六, 6月 27, 2009

返家

從端午節之後一直到現在才返家,姐姐從美國代買的書也到手了,共計有

  • Parallel Computer Architecture: A Hardware/ Software Approach
  • Peopleware: Productive Projects and Teams 2/e
  • Mathematics And Plausible Reasoning Volume I: Introduction and Analogy in Mathematics
  • Mathematics And Plausible Reasoning Volume II: Patterns of Plausible Infference

看來會有個充實的暑假 XD


---
火車誤點 50 分 ...Orz

星期一, 6月 22, 2009

LaTeX 與 Word

每次看到這兩個名詞排在一起時,我有一些想法。LaTeX 做出來的文件很漂亮,也很專業,要變更好也容易,雖然學習門檻較高,但是就我而言,我還是很喜歡用 XeLaTeX 系列來製作文件與簡報。Word (OpenOffice 為 Writter),入門門檻較低,那怕是不太會電腦,也能夠用暴力法做出大部分的人都能接受的漂亮文件。寫到這裡,我不禁思考

養出一個會用 LaTeX 排版的人成本有多高? 而 Word 讓大眾能更輕易的製作文件,是否又有這麼差?

身為一個資訊系學生,我還是義無反顧的為了最高品質而使用了 LaTeX ,但是看過我寫文件的人,有人覺得,很酷捏,寫文件跟寫程式一樣,也要 compile,也有人覺得,為什麼要這麼麻煩的去生成一份文件 XD? 其實沒有什麼絕對的論點,只是,當我們正視電腦所帶來的便利時,為什麼我寧願選擇越活越回去 ?(在這邊假設用 LaTeX 是越活越回去的話 XD),回到其他人的層面而言,我真的覺得 Word 沒什麼不好的,雖然在很多小細節上的處理不佳,但是一般狀況下,真的有人在意嗎?(我們也不能說不在意就是對的) 到底,在新舊技術交錯的時候,身為一個資訊系的學生又處於什麼地位呢 ?

我和 efang 曾經都和 ycma 學過 C Programming, 當然,ycma 的 C programming 是 1978 年的 style,我用的是 1989 年的 C standard,某程度上造成了她的困惑,我最近常常在思考一個問題,從 1990 年到 2009 年也將近 20 年了,想法不可能沒有進步,而 ycma 用 1978 年的寫法也無不好,我只是覺得,身為 2009 年的學生,是不是更應該進步一些 XD? 當然,也沒有任何事可以證明,新的就會比較好,不過身為一個學生,就應該努力嘗試。


---
思考