星期四, 12月 30, 2010

回憶與美好

這兩天收到了 Clara 和 eating 寄來的聖誕卡,在此真的要說很謝謝你們,但是另外一個層面也感到抱歉,我忙到忘記這回事了 ...

聖誕節對我而言其實意義不大,但是人們就可以藉由這樣子的節日向身邊的親人或朋友表達感謝之意,說出平常不敢說的話。這想,這就是很多沒意義的節日對我的意義 XD。

其實這兩個朋友對我而言都是很重要的朋友,只是形式不同,我還記得我在很久以前的 blog (懶的翻是那一篇了 XD)寫到 如果可以,我想嘗試的繼續維持這段友情,這是我人生難得遇到不想放棄的人事物。這幾年過下來,很多事情其實會看的很開,看著身邊的人來來去去,似乎是沒有必要強求些什麼,但是對於這段友情,我想我會任性的想要這樣子做吧 (笑)

其實我是一個普通人,但是會在某些事物上有所堅持,這一陣子下來越是做事越是感覺到自己的渺小,也越覺得身邊朋友的重要,我可以享受寂寞,但有朋友的時,也會很開心的相處。我想,這就是我現在的心情吧(笑)。

這些年下來,也是益發不知道怎麼樣在 blog 表達自己的情感了,益發的想要低調過生活,但是總覺得還是有些美好的情感與人事物可以透過冰冷的文字來傳達。在下筆的此時,我已經完成碩論大部分需要的程式 (操了一個月 XD),真的很謝謝這一路上以來相幫的人。也謝謝身邊的朋友容忍我的任性與尖叫(後者應該蠻難以讓人忍受的),從十月到現在,從最糟的狀況變成還不錯的狀況,我想,這不僅僅需要努力,也需要運氣,我覺得現在的我很幸福,很是謝謝大家。


---
要開始寫回顧了嗎 XD。

星期四, 12月 09, 2010

程式架構雜想

最近一直都在嘗試設計對於自己而言一個比較大型的程式,這對我而言算是很充滿挑戰性的事,因為我從來沒有用過正規方法來設計這樣子的一個程式,我一直以來都是且戰且走型,這也難怪我的程式一直都寫不大,不然就是充滿破爛 XD。

庖丁解牛,恢恢乎游刃而有餘。 - 莊子

這大概是我對於設計架構上最大的感想,基本上我還是非常習慣紙筆思考,對我而言,不管是傳統的 OO 設計方式抑或是 eXtreme Programming 的設計方式 (在這幾天終於了解為什麼會叫 eXtreme 了,誤用真的很危險),事前的分析與設計是一定需要的,如果一開始的需求就是固定不太會變動,其實傳統的 OO 設計方式應該是相當的夠用,重點是,如果在途中一半更改需求的時候該如何因應 ? 這是我這次設計程式不會遇到的問題。我想我可以日後再好好的想想,因為我也不覺得用 XP 會是最佳解。

如果是設計演算法的程式時,其實我覺得算是最好設計的,但是在轉換上的時候,必需對數學的 set 要有一定程度的認知及轉換上的經驗(基本上 set 可以表示任何事情,int 也是一個數學的 set,一個 struct 也是一個 set,只是是一個 set * set ...),也就是說,如果轉換到一個夠簡單夠容易處理的模型,要設計起來也相對容易的多。但是對於 set 的轉換,其實到目前還是沒有頭緒,以後想到再補述好了。

架構設計的時候,ycma 建議的是 top-down approach,而我自己使用的是 button-up approach,他很堅持我的方法是錯的,會造成寫程式時候的災難,不過我還是蠻堅持先用 button-up run 過一次,再使用 top-down 把所有東西連起來,因為兩種方法的交錯使用,讓我學到很多事,在此在思考,是否只用 top-down approach 就可以解決呢,我不這樣子覺得,這或許也是等到設計完的時候,會有一些有趣的事發生。

設計架構會遇到的三個主要問題,data consistency, unduplicated code, consider function side effect,最後一個其實是最好解決的(拜 Functional Programming 所賜,現在寫程式很想會觀察 code 之間的相依性,把 code 視為一個 block,雖然這不是 FP 的主意,但是我卻是因為這樣子學會的 ... Orz),data consistency 一開始的設計就很重要,我會嘗試把資料集中放在少數幾個 Class 裡,其他使用 id 存取 (不一定非得用 Pointer or reference,有時候我太執著於用語言的層面來解決這個問題,不過這個問題的確也是還在思考),而 unduplicated code 是最困難的,因為很容易會有相同的功能,這也不是用個 Generic Type 就可以把這個問題處理的很好,這目前還在思考怎麼辦。

基本上算是雜亂的記錄,希望一個月過後,自己再看到這一篇的時候,能給自己一些解答。


---
如果錯的話,就指正吧,我好久沒有寫技術文了,雖然這篇也稱不上技術文就是了 XD。

星期二, 12月 07, 2010

耳機

看到 godfat 發的 HD800,我也忍不住想寫一些東西記錄下來。

我現在在服役中的耳機是 Grado SR80 + AKG K319,耳擴用 FireEye I,其實這兩隻耳機都是一時之選, SR80 應該不用多說,是我跟學弟用二手買來的。而 K319 被稱為 AKG 的耳塞式耳機之王,是為了攜帶方便而買的。

從高中有了第一台 CD 隨身聽到現在,我聽音樂都用 ipod touch, 如果沒有人的話我都會用 YAMAHA MCR-040,雖然我很愛耳機,但是我不愛虐待耳朵。音響不是我要討論的重點,在此先跳過,ipod touch 其實是聽音樂不錯的載體,至少我不用煩心在音樂的管理及同步上。這點我在 iTunes 上花了很多心力。三年前我剛從 Windows 移至 Mac OSX 上的時候,老老實實的花了三個禮拜在整理歌(這中間當然也丟了很多我完全不想聽的歌),只能說現在聽歌對我而言還算是一個方便而享受的事。

老實說,聽歌的話,Perfume 是一定會有的 (笑),其他的話就以外語居多,最近也有人推薦我一些歌(很感謝),大概聽的歌不是電音就是流行音樂吧,還算是很正常的領域,以下的耳機感想是基於聽這些歌這樣子寫出來的,其實聽音樂這種事很主觀,大家看看就好。

買 Grado SR80 的原因是因為我上一付耳機 SJ5 壞了 XD,我很明白的了解,SR80 沒有耳擴會非常的虛,於是去品嘉買了一付隨身耳機 AKG K315,加 399 送耳擴(FireEye I),雖然我知道這耳擴或許普普,不過 SR80 + FireEye I 就這樣子陪伴我渡過一年多。SR80 的聲音其實很順平順,很平淡,但是就是可以見的到其威力,我聽耳機的音量不算大聲 (比較點是去品嘉老闆娘放給我的音量,我總是覺得太大聲了 XD),但是還算是可以聽的很順耳,我真的蠻喜歡這隻耳機的 (除了不好帶以外) XD。

買 AKG K319 的原因是因為我把 K315 弄丟了(雖然後來又找到,但是就送給一個喜歡聽音樂的人了),其實我一直不喜歡耳道式耳機,因為我帶起來會不舒服,所以我就問了品嘉老闆娘說,我要耳塞式耳機,請問老闆娘推薦那一隻呢? 然後就丟了 K319 XDXD (我該說還好那天我錢有帶夠 XD)。這隻耳機燒完之後,其貫沒什麼好挑的,不用耳擴就可以聽到很多細節,辨識能力跟 SR80 不相上下(這是提醒我該換耳擴的時候了嗎 XD),而聲音聽起來比較原始,比較沒有遭到渲染的樣子(我聽 SJ5 再聽這兩隻就有很明顯的感覺),而 K319 加了我現有的耳擴我聽不出有多大差別,所以我出門就大概只帶這隻耳機,雖然隨身附送的盒子稍微大了一點(還附了飛機用的轉接頭,我也不知道我什麼時候會用到 XD),還好我出門都帶背包,這點倒是不構成太大的問題。

以 Perfume 來說, K319 可以聽到很多細節,Perfume 算是我這幾年來聽的高複雜度音樂,電音本身就很複雜,要把這麼多聲音分清楚,不僅耳機,耳朵也要需要有一定的練習才聽的出來。SR80 的話,是可以把 Perfume 的複雜與平順表示出來的,其實我還蠻喜歡用 SR80 聽 Perfume 的感覺的,但是想要聽的清楚且更不帶感情,我會推薦 K319。

其他歌曲的話,通常我抓到什麼耳機就聽什麼耳機耶,其實我也沒有很清楚的分辨,這可能就是要說抱歉的部分,以後再補啦XD (跑)

雜記,記錄一下自己聽音樂的感覺,所以沒什麼章法,請見諒哩


---
生活與音樂

特別

或許,還想讓你相信些什麼。


---
生活。

星期五, 11月 19, 2010

棉花糖 - 陪你到世界的終結


有人推薦,難得我會聽的中文歌 XD?




陪你到世界的終結

我一直以為 我是孤獨的
在遙遠的行星上
一個人生活
一個人唱歌

流完了最後一滴淚
準備把悲傷告別
別懷念灑的麵包屑
趁昨天重來之前

我陪你到世界的終結
就算倒了都要在你的身邊
要陪你到世界的終結
我們擁抱住 相信的死穴

LALALALALA LALALALALA

流完了最後一滴淚
準備把悲傷告別
別懷念灑的麵包屑
趁明天毀滅之前

我陪你到世界的終結
就算倒了都要在你的身邊

要陪你到世界的終結
就算發現了歪斜
你就像是香水
讓香味遍野

你就是絕對
天造的美學
一切的一切
都要為你改寫

我陪你到世界的終結
如果死了都要在你的身邊
要陪你到世界的終結
我們牽手聆聽
萬物正在舉行的和諧

我知道你不會是孤獨的
因為我會
陪你到世界的終結
---

星期二, 11月 16, 2010

無糖拿鐵與熱可可


自從單身之後,心情起起伏伏的,不過,某個程度來說,似乎是一件好事自從某一天答應要幫 Clara 收集萊爾富點數,我就把便利商店架上的老舊金山系列一一試喝 XD。

熱可可: 非常的不錯,苦中帶甜,很符合我的風格,睡前來一杯有益蛀牙(誤)

無糖拿鐵: 難得我會喝的下沒有糖的東西,待會我打算去買個十包回來存貨,喝這個咖啡不會睡不著,反而有益睡眠 XD。

南非國寶茶: 聽說是無咖啡因,喝下去不甚習慣,所以就沒有繼續喝了。

在這樣子的狀況下,反而可以一個人慢慢喝著咖啡看著窗戶(我似乎沒有在看窗戶的時候喝熱可可 XD)。享受筋疲力盡,之後再努力。這是一種會上癮的事 XD。搬到新位子之後,沉思的時間變的更多了,頗不像我的好動個性 XD,不過學弟妹來找我的次數也變多了(這或許是自以為),大概是因為這間有一個地方可以讓大家安靜的討論吧。某個程度來說,越來越喜歡躲在自己的位置上,原因無他,大概需要思考的事是最少吧。這會不會是人群恐懼症呢,我想不是,不過的確是不太喜歡面對陌生的人群,我對於陌生人的裝熟能力越來越趨近於零了,我發現這種狀況,連自己都覺得訝異呢,暫且這樣子過生活下去吧。

有想過一個人旅行,一直在思考,是在這些事情的中間去呢,還是在這些事情結束後再去呢,我的個性是會選擇後者的,不過我不知道事情什麼時候會結束。或許這樣子想,會一直不會成行吧,不過其實也不在乎,就這樣子過生活吧,等到有一天我真的受不了,我就會跑去旅行了 XDXD (MFN 到底什麼時候能去勒,這恐怕需要解決 XD)

聽到朋友提及簡單生活節,裡面似乎有連續好幾天的演唱會。這大概也是我對簡單生活節的印象,我還是搞不太清楚一堆人演唱,辦一個複雜的大型活動跟簡單生活有什麼關係,不過換個角度來說,也不是這麼重要 XD。簡單生活對我而言就是每天盡量做自己想做的事,到底什麼是複雜,我也不知道。科學上的複雜簡單的來說就是一個問題的變因很多,不過通常我們也會簡化到一個可觀察的模型加以解決。簡單生活節的目的是從複雜中創造簡單嗎 XD? 這恐怕就是我不負責任的猜測了 XD(網路上可以找一堆資料,不過我就是懶的看,寧願亂猜 XD)。

標題都寫了無糖拿鐵與熱可可了,似乎不亂扯一下說不過去 XD 以前的我其實喝咖啡,後來因為某些原因,停止了好長一段時間,其實不怎麼喜歡即溶咖啡,因為覺得很甜很苦,有點不知道自己在喝什麼,這次亂買之後,我還蠻喜歡這種微苦帶有些微香氣的咖啡了。熱可可,大概因為自己一直都很愛喝,但是怕胖 XD,或許之後,無糖拿鐵的比例會逐漸加高吧,但是簡單的來說,或許是心情上的轉變,才會開始喝咖啡吧,至於是為什麼,其實自己也說不上來,或許還要等過一段時間才會清楚吧。


---
隨筆

星期二, 11月 02, 2010

Perfume - Secret Secret

啦啦…

本當のキミを 知りたいの
想要了解真實的你

キラキラで目が眩むけど
即使你的閃耀令我刺眼

斜めから戀しながら
從旁開始與你戀愛

その秘密を解いて
邊去解開那個秘密

足りないよ キミを 知りたいの
還不足夠 對你 我還想了解

觸れる指先が切れそうだ
觸摸到的指尖就快要割傷

最高の甘い笑顔で噓ついた
你那最甜蜜的笑容來欺騙我

キミはいつでもシークレット
你無論何時都是個secret


いつか抱きしめたいでしょ
總有一天想要擁抱我吧

駆け引きの見える場所
在能看見進退的地方

うしろ姿が切ない
看著你的背影使我心酸

それはほら気のせいでしょ
那應該是我的多心吧


本當のキミを 知りたいの
想要了解真實的你

キラキラで目が眩むけど
即使你的閃耀令我刺眼

斜めから戀をしてる
從旁開始與你戀愛

その秘密を解いて
邊去解開那個秘密

足りないよ キミを 知りたいの
還不足夠 對你 我還想了解

觸れる指先が切れそうだ
觸摸到的指尖就快要割傷

最高の甘い笑顔で噓ついた
你那最甜蜜的笑容來欺騙我

キミはいつでもシークレット
你無論何時都是個secret

secret secret…

これは運命なんだね
這或許就是命運吧

たしかにそんなようだね
看似確實是這樣

いつも信じているよ
我始終相信這一切

気づかないふりするよ
我會假裝不在意的


本當のキミを 知りたいの
我想了解真實的你

キラキラで目が眩むけど
即使你的閃耀令我刺眼

斜めから戀をしてる
從旁開始與你戀愛

その秘密を解いて
邊去解開那個秘密

足りないよ キミを 知りたいの
還不足夠 對你 我還想了解

觸れる指先が切れそうだ
觸摸到的指尖就快要割傷

最高の甘い笑顔で噓ついた
憑你那最甜蜜的微笑來欺騙我

キミはいつでもシークレット
無論何時你都是個secret


【反复】


本當のキミを 知りたいの
想要了解真實的你

キラキラで目が眩むけど
即使你的閃耀令我刺眼

斜めから戀をしてる
從旁開始與你戀愛

その秘密を解いて
邊去解開那個秘密

足りないよ キミを 知りたいの
還不足夠 對你 我還想了解

觸れる指先が切れそうだ
觸摸到的指尖就快要割傷

最高の甘い笑顔で噓ついた
憑你那最甜蜜的微笑來欺騙我

キミはいつでもシークレット
無論何時你都是個secret

secret secret…

---
一直很喜歡這首歌,所以抄了 allents 的歌詞,是我目前看到感覺最好的歌詞。

星期日, 10月 31, 2010

新生活

這是一張不怎麼起眼的照片,不過卻是我在實驗室每天會看的風景。

首先,很感謝身邊的人及新認識的朋友,新生活要開始哩!!

該怎麼說呢,其實不想透露太多,不過自從偷搬到系上的新位子之後,心情著實好了不少,我想,長假就放到這邊為止吧。接下來,還有很多事等著我去做,雖然數學不好,不過總有一天要讓他變好,雖然很多事都不會,但是總有一天我會一一克服的。


---
我要成為海賊王!

星期一, 10月 11, 2010

Linkin Park - Waiting For The End

Thanks to everyone who helped me to go through the time, It's time to rethink about myself in life, Computer Science and how do I think about the society.




This is not the end
This is not the beginning,
Just a voice like a riot
Rocking every revision
But you listen to the tone
And the violet rhythm
Though the words sound steady
Something empty's within 'em

We say Yeah!
With fists flying up in the air
Like we're holding onto something
Thats invisible there,
Cuz we're living at the mercy of
The pain and the fear
Until we dead it, Forget it,
Let it all dissapear.

Waiting for the end to come
Wishing I had strength to stand
This is not what I had planned
It's out of my control....

Flying at the speed of light
Thoughts we're spinning in my head
So many things were left unsaid
It's hard to let you go...

(Oh!) I know what it takes to move on,
I know how it feels to lie,
All I wanna do
Is trade this life for something new
Holding on to what I haven't got

Sitting in an empty room
Trying to forget the past
This was never meant to last,
I wish it wasn't so...

(Oh!) I know what it takes to move on,

I know how it feels to lie,
All I wanna do
Is trade this life for something new
Holding on to what I haven't got

What was left when that fire was gone?
I thought it felt right but that right was wrong
All caught up in the eye of the storm
And trying to figure out what it's like moving on
And i don't even know what kind of things I've said
My mouth kept moving and my mind went dead
So, picking up the pieces, now where to begin?
The hardest part of ending Is starting again!!

All I wanna do
Is trade this life for something new
Holding on to what i haven't got...

This is not the end
This is not the beginning,
Just a voice like a riot
Rocking every revision
But you listen to the tone
And the violet rhythm
Though the words sound steady
Something empty's within 'em
(Holding on to what i haven't got)

We say Yeah!
With fists flying up in the air
Like we're holding onto something
Thats invisible there,
Coz we're living at the mercy of
The pain and th fear
Until we dead it, Forget it,
Let it all dissapear
(Holding on to what i haven't got!)

星期五, 10月 08, 2010

Perfume - 願い - 願望

最近一直在聽這首歌,或許是平靜的生活吧。

願い 願望

詞曲‧中田Yasutaka


早く目が覚めた今日の 髪をなでる風
一大早醒過來的今天 撫摸著我頭髮的風

キミのことがぼんやりと 浮かぶ雲みたいだね
模模糊糊地閃現出你來 如同那個漂浮的雲彩般

空が高くなってきて 肌寒い空気
天空漸漸地開始升高 令我微寒的空氣

キミは何を思うの? 一人考えていた
你正在想著什麼呢? 我獨自一人思考著

もうすこしの勇気があれば
我哪怕有一點勇氣的話

叶うかもしれないよね
或許就能實現吧

だけど もしかしたらって
但是 說不定呢

距離は平行線
我們的距離是平行線

一番大事な気持ちを
我一直將最重要的真心

後回しにしてきたね
推遲到了今天

2つに分かれた自分
為了能將分開兩半的自己

くっつけるための願い
重新合一的願望

長く眠れた今日の 心地よい風に
今天睡的很好 吹著心情舒暢的風

のせて歌う鼻歌 ラララ ラララ ラララ
配合著節奏唱出的哼唱 啦啦啦 啦啦啦 啦啦啦

空が高くなってきて 肌寒い夜に
天空漸漸的開始升高 在微寒的夜裡

キミは何を思うの? 一人考えていた
你正在想著什麼呢? 我獨自一人思考著

もうすこしの勇気があれば
我哪怕有一點勇氣的話

叶うかもしれないよね
或許就能實現吧

だけど もしかしたらって
但是 說不定呢

距離は平行線
我們的距離是平行線

一番大事な気持ちを
我一直將最重要的真心

後回しにしてきたね
推遲到了今天

2つに分かれた自分
為了能將分開兩半的自己

くっつけるための願い
重新合一的願望

もうすこしの勇気がないと
要是沒有那一點勇氣的話

叶わないことばかりで
願望都會半途而廢

だけど もしかしたらって
但是 說不定呢

距離は平行線
我們的距離是平行線

一番大事な気持ちに
對於我最重要的真心

嘘は付かないと決めた
我決定不再撒謊

遠回りをしたけど
雖然兜了不少圈子

これが本当の願い
但這就是我真正的願望


---

星期二, 10月 05, 2010

yen3 and Josh Ko


My dear friends in Oxford ComLab.


---
For memory.

星期六, 10月 02, 2010

蔡健雅 - 陌生人


---
地球太陽又公轉幾圈了?

星期六, 9月 25, 2010

Haskell Practice - Parenthesis Balance

這題其實用什麼語言寫都差不多其實還是會有差,只是我才疏學淺,T55555 在他的 blog article 中寫出幾個相當好的範例!! 只是剛好出了 Unix 助教作業,就連帶用 Haskell 練習一下


check_string :: String -> Bool
check_string s = check_stack s [] 

check_stack :: String -> String -> Bool
check_stack [] s = length s == 0
check_stack (x:xs) s
    | x == '[' || x == '(' = check_stack xs (x:s)
    | otherwise = case s of
                      [] -> False
                      s:ss -> if (x == ']' && s == '[') || (x == ')' && s == '(') then check_stack xs ss 
                              else False


---
下次該來練習 Tree 了。

星期五, 9月 24, 2010

星期日, 9月 19, 2010

Where'd you go - Fort Minor

今天就聽這首歌吧,對我們而言很別具意義的一首歌。


---
生活

最近

連自己都忘記自己心情不好多久了。我果然還是一個很任性的人 XD。在此還是謝謝很多被我煩的人,我也不知道要花多少時間從這樣子的狀態中爬出來,不過我想不久了。

該怎麼說呢,開學一個禮拜了,自己把生活搞的一團糟,有時候都在想,自己說要接 TA 是因為有自己想做的事,但是我是否能真的勝任嗎 ? 不知道,只能咬著牙苦幹,我最不想認輸的就是自己。

有時候連自己都會覺得說,我是不是在愛情上要求太多了,或許這是一個再值得思考的問題。

在颱風天,心情出乎意外的平靜,聽著音樂,另外一方面也保佑台灣人民沒有事,其實到這個年紀放不放假沒有什麼關係,但是希望全體人民平安比較重要。今天是禮拜日,經由朋友提醒,查了上班上課狀況才發現原來今天台灣放假。突然想到我之前看到別人的 blog 寫說,日本是沒有颱風假的(颱風來啦 上篇 下篇 - 接接在日本),台灣人就這個方面還真的是蠻幸福的,但是也希望能好好珍惜。

下個禮拜幾乎整個禮拜都不在學校,不過這個學期為了很多理由,我把所有的工作環境移殖到 MBP 上,那怕沒有網路我還是可以順利的工作,看來,早點調整成這個樣子還是有許多好處的,壞處就是,其實 MBP 不輕耶,背來背去也是需要練體力的 XD。但是整體而言,我很喜歡 1680*1050 的這個解析度螢幕,我的桌上型螢幕解析度是 1600*1200 ,幾乎相差無幾了,除了真的要寫很大量的程式時,會想要用桌上型螢幕 (雖然解析度差不多,但是字的大小還是有差的 XD),其他部分基本上使用一台筆電就可以完成了。不過另外一件讓人擔心的事是,鍵盤磨損的速度遠超過我的預期,總覺得再過不了多久,我就要把 MBP 送回去換鍵盤了,希望這天不要這麼早到來就是了。


---
記錄廢言與生活。

星期六, 9月 11, 2010

Synopsys Design Compiler Primer

這篇只是單純做個紀錄。最主要還是要感謝 ycma 寫了一個 sample script,我只是從中學習到一些事 XD。

其帢從 shell 底下打 design_vesion 就可以進入 GUI 畫面,但是每次進去都有重覆要設定的,而且重覆修改程式之後每次都用 design_version 的話並不是一個好動作,而 design compiler 提供一個 dc_shell,Synopsys 公司用的都是 tcl script,所以如果會撰寫的話會可以省下相當多的重覆性工作。

那麼寫 dc_shell command 會很困難嗎 ? 其實不會,design_version 打開後執行相對應的動作,都可以看到相對應的指令顯示在最下方,照抄就可以了。根據這個簡單有效的方法(還有記得參考本身的 doc),很快就可以寫出如下的 script


set COMPILEFILE {decoder.v reg.v reg_entry.v}
set MAINMODULE "RegisterFile"

set search_path {., /cad/celllib/CBDK90_UMC_Faraday/CIC/SynopsysDC/db}
set target_library {fsd0a_a_generic_core_bc.db}
set symbol_library {fsd0a_a_generic_core_bc.sdb}
set link_path {fsd0a_a_generic_core_bc.db}
read_file -format verilog $COMPILEFILE
current_design $MAINMODULE
create_clock -name "clk" -period 10 -waveform { 0 5 }  { clk }
compile -exact_map

report_timing
report_area

exit

其實 tcl 蠻好懂也蠻難用的 (汗),這個 script 也算的上是一目了然,大抵上來說讀入三個 Verilog File ,指定主要 Module 為何,指定 clock 訊號線,然後 Compiler 接著報告出 slack time 與晶片使用面積為何。

如果想要知道指令更多的 option,可以在 dc_shell 使用 man ,如果我今天想要知道的 report_area 的話,那麼會出現如下畫面

dc_shell> man report_area
2.  Synopsys Commands                                        Command Reference
                                  report_area

NAME
       report_area
              Displays area information for the current design or instance.
...

可能有需要我才會去查更多的細節吧,暫時先這樣子做個非常粗略的筆記嘍 XD


---
這篇是寫給自己看的,不然品質實在是不怎麼樣 XD

星期一, 8月 30, 2010

LLVM 筆記

如果想要使用 LLVM 來當作其中的 library 的話,其實沒有什麼相當統一的文件,最快的方式就是看別人的 code 及 mailing list,所以我想這會是非常困難的做戰方式 XD

這次有兩件事要筆記,第一件事,盡量不要嘗試自己編譯 llvm-gcc ,這實在是不好編,我編成功沒幾次 XD,建議直接使用 binary 檔,人生會快樂些。

第二件事,如果想要使用 LLVM 裡面的 header file 的話,請使用 llvm-config,以下面的 code 來說

#include "llvm/LLVMContext.h"
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"

#include <string>

using namespace llvm;

int main(int argc, const char *argv[]){
    std::string filename = (argc>2)? argv[1]:"test.bc";

    std::string error;
    LLVMContext Context;
    
    MemoryBuffer *buffer = MemoryBuffer::getFile(filename);
    Module *module = ParseBitcodeFile(buffer, Context);

    outs() << *module << "\n";
    return 0;
}

llvm-config 雖然這只是讀一個 bc 檔之後然後輸出,但是中間會用到 llvm-objects 檔時,我們可以使用 llvm-config 來處理,而 llvm-config 的功能就是幫你生成要連結的函式庫及生成餵給 g++ 東西,如果想要知道更多細節,記得 man llvm-cofig,以這個檔為例,我們可以下這樣子的 command 去 compile

g++ -c -g -O2 -Wall  main.cpp -o main.o `llvm-config --cxxflags --ldflags --libs nativecodegen bitreader bitwriter` 
g++ -g -O2 -Wall  main.o  -o llvm_test  `llvm-config --cxxflags --ldflags --libs nativecodegen bitreader bitwriter`

至於用到什麼 Function/ Class 就該 include 那個檔案,目前我是用暴力法在 llvm doxygen 裡面尋找了 XD。

至於 llvm-config 有多少 lib 可以寫,可以使用 llvm-config --components 來看,得到的結果會相當的壯觀 XDXD

$ llvm-config --components
all alpha ... 


---
是該會用 cmake 了 XD

星期三, 8月 25, 2010

心境


老實說,我認識很多高中就會寫程式的人,而且我認識的每個都寫的比我好。大抵上都是很會寫 ACM,去比賽都可以拿下一定名次的人。而我就是那個很認真寫 ACM,在高中卻沒有拿過任何名次的人 XD(可見我還不夠認真 XDXD)。這其實也不是什麼壞事,在大學的時候也是比了兩次比賽,照樣還是沒有得到名次,就某個程度來看,我不是和比賽得名無緣,我應該是缺少某些東西吧。

我剛進大學的時候,數學不好,英文也不好,這兩點到現在似乎也是沒有多大改善,不過只能說很剛好的是,我不排斥看原文書或英文文件。雖然到現在對我而言,日常生活的英文我仍是苦手,至少混的下去,寫的出別人看的懂卻覺得很怪的東西就是(因為英語系國家的人根本不會這樣子寫啊 XD。)

老實說,很想為自己的 blog 換個標題,因為已經不符現在的心境了,不過暫時想不到要改什麼,就暫時不要改 XD。

該怎麼說呢,日前 ycma 跟我說,他認識很多台灣高中生畢業的程式設計能力和大學畢業沒什麼不同。這當然不是指完全一樣,而是指沒有顯著改變。老實說,我在我大四的時候,也有這種深刻的體會,工程面的問題是很重要,需求明確,的確是有整個程式工藝等待我們去發掘,但是就思考層面來說,我跟剛進大一的時候,沒有什麼不同,應該是說,會用來解決問題的想法就這些,甚至更少了,隨著時間而遺忘的東西可能比我們從這一路上拾起的東西來的多。幾曾何時,我曾經想從規則上的破壞尋找自由,這大概是高中時候的事。要現在的我來說,我想要從規則中重建規則建立自由。一直以來我很難忘懷海賊王的一句話

海賊王是這片大上海上最自由的人。

或許,這個 blog 的文章會繼續,但是不太可能是現在,因為現在的我,程式不會寫,想法不通順,真的要我寫出什麼不通順的東西,我也不知道我要寫什麼。但是不太會封閉,保持自己的與人溝通能力,持續前進吧。至少最近都很認真的在把自己的研究題目串起來。


---
我要成為海賊王~XD

星期三, 8月 18, 2010

最近

不怎麼順 XDXD

不過還好啦,習慣就好了 XD 原本預計三天前就要搬宿舍硬是被拖到了最後一天,我自己也相當無言,算了,今天能早點搬完我就很開心了。

看到 allents 在寫作,自己也想寫作,不過我一向很喜歡確定主題後再寫作。對於自己的主題無法確定,我也對自己感到相當的不耐煩啊 XD

研究的目標完全錯誤了,雖然之前想的東西不至於不能用,但是有一種感覺,要花很多時間橋回來了 XDXD。

戴了七八年的 swatch 表摔到鏡面內部裂了一道縫,還好目前勉強能防水,不知道能不能修就是了,希望可以修。

眼鏡在去看 efang 的時候不見了,配了一付新眼鏡,似乎沒啥人發現 XD。好吧,我自己也承認,我配的這一付正面看起來跟之前沒啥差別啊 XDXD。


---
報帳型式 XD

星期四, 8月 05, 2010

Perfume, allents

想來想去,還是用這個標題好了 :) (這是篇個人情感文,不想看可以趕快跳過 XDXD)

約在一年多前,我認識了 allents,呃,其實嚴格來說,他是我高中社團學長,但是我們其實不熟(就跟我一開始跟 Josh Ko 的情形一樣)。我認識了 allents ,然後他的隨口說說,我邁向了開始聽 Perfume,變成穩定歌迷的路。

如果在一年前的那時候跟我說,我可能會很喜歡 Perfume ,甚至會變成愛好者,我是會相信的,因為我是一個很奇怪的人。

該怎麼說呢,這一年多來,我聽音樂風格有很大的轉變,從以前一開始的 孫燕姿, Mai Kuraki -> Do As Infinity -> 張懸, Linkin Park -> mihimaru GT -> Perfume (各取代表人物),我也蠻想知道我的聽歌風格是怎麼樣,但是就簡單的來說,在台灣的可以開演唱會,在日本的至少可以上 Music Station Super Live,我覺得都還算是蠻正常的路線,而 Perfume 對我而言意義重大的原因是,我一直嘗試在跟別人走不一樣的路,聽歌也盡量聽的越怪越好,但是剛好在聽 Perfume 的時候,給了我一個喘息的機會,好好的思考。

為什麼我要聽音樂,我想聽怎麼樣的音樂。

其實很早就知道音樂是聽不完的,只是不想承認而己,或許聽歌就像解 NP-Complete Problem 一樣,我們沒有辦法找到最佳解,但是我們可以決定一個策略,讓我們很接近最佳解。或許我聽了太久人聲,但是我又不想聽古典樂(並不是我覺得古典音樂不好,而是到目前為止可能還是沒有愛。),很意外的,就在一個這樣子的時間點下遇到了一個恰當的出口。

人的聲音其實很複雜,對我而言,很像把很多個單調的頻率複合(compose)在一起達成一般人所謂不錯的效果(唱歌渾厚,高音怎麼樣怎麼樣的),電音相對簡單,與其實說簡單,不如說固定,一個噹噹噹,一個登登登就是一個聲道,這也造成我聽到某些的電音,必需很仰賴快或起伏強大來造成情感上的變化,因為聲音過於單調,電音變的很難讓人接受。就另外一個點來說,人聲聽久對我而言也是難以接受的,原因就像我之前提的,對於聲音的詮釋,是不是具有可替代性,這個我想到目前為止對我而言也是一個無解的問題。

聲音組合相對乾淨,而人聲冷冷不帶感情,這就是我對 Perfume 的第一感覺。不過這個部分,我想留到以後再說,我還有很多 Perfume 的文章要寫呢 XD。

allents 可以說是我這一年多來認識很重要很重要的朋友也說不定,去掉 Perfume 的話,我們話題會少很多,但是還是剩下很多 (笑) 覺得還蠻難得遇到各方面大想法相像,小部分想法差異甚多的人,這在講話的時候很省力,可以很快的進入正題,把事情好好的討論,而就情感上,我不在訴諸於這裡,只能說,我很感謝感謝他 (如果有看過 Perfume 演唱會,請把 A~Chan 的 "紅豆泥紅豆泥阿里阿豆" 代入,相信會得到一個不錯的映象),在對的時間,認識對的人,遇見對的事,這大概就是我的感覺。

對於我自己而言,我覺得我是一個台客,一個沒有什麼文化的人,我想,就這樣子繼續下去,讓自己的思考趨近於完整,賣弄文字,或許有一天會發現真正的自己其實是簡單自然不過的,我總是對自己說,知道和承認是兩回事的。

下筆的此時,希望自己的接下來一年可以好好的過下去,繼續為 Perfume 撰寫一系列的文章吧。(不怎麼專業的嘴炮文 XD)


---
虎頭蛇尾。

星期日, 8月 01, 2010

更新恐懼症

有一句古老的工程諺語是這樣子說的 ...

如果一個系統沒有壞,那麼就別動它。

對於一般使用電腦的人而言,其實軟體更新一點都不重要 XD。電腦能動就好了,為什麼要更新 ? 這是一般使用者最常見的疑問,而就另外一個層面而言,一般的使用者也不太在乎自己的個人資料是否會外洩(如果有玩線上遊戲可能會比較在乎一些 XD)。那麼到底是為了什麼軟體要有更新呢 ?

這對於沒有寫程式的人而言,到底為什麼要有軟體更新呢 ? 軟體在那邊好好的啊,於是我們會看到有兩種恐嚇方式,一種是,如果你的電腦不更新就會資料外洩啦,駭客攻擊啦 (老實說我還蠻想知道駭客攻擊是什麼 XD),一種是,你不能更新啦,一更新軟體的破解就全沒啦,很麻煩之類的有的沒有的 (這個濫觴我想是從 WGA 和 KAV 開始吧 XD),於是對於更新有所知道的人,要嘛死都不更新,要嘛死都一直更新 XD,不然就是完全不知道有這一回事的存在(這不是電腦自己該處理的部分嗎 XD)。

那麼對於對更新這件事已經有相當了解的人而言,更新其實還是一門苦差事,在 Windows 和 Mac OSX 上,更新其實沒啥大問題,Windows 除了更新時盜版和正版的攻防戰 (這幾年蠻常聽到一更新就變盜版 XD),其實還 ok,Mac OSX 常常會遇到一些神奇的東西(鍵盤韌體更新程式,我第一次看到實在是嚇了一跳),所以會更新的人,大部分都還蠻勤於更新的。會爆炸的機率很低,我是有分別在這兩個系統上一更新後重開機就再起不能的狀況,不過這麼多年來,這兩個系統是分別只有一次而己。不過我勤於更新是從 Windows 的 Blaster 病毒讓我三天睡不了覺之後開始的 (那又是另外一個故事了 ...) XDXD。

那麼在 Linux 上呢 ? 我從頭到尾都不認為 Linux 是給一般使用者用的 XD,每次光看更新列表我就頭皮發麻 (我承認我是在去年才知道 libxxx 和 libxxx-dev 的差別 XD),每次一按 sudo yum update/ sudo apt-get upgrade 然後就看到一堆有如火星文的套件跑出來 XD,這對一般使用者實在是不怎麼友善 XD,其實一般狀況下,我還蠻敢更新的,但是看到一些關鍵性的套件名稱,我也很懷疑我要不要更新 XD 常常會有更新完開不了機,不然就是顯卡再起不能,音效跟你說掰掰的狀況(千錯萬錯,都是驅動程式的錯 XD),真的有如我一開始引述的那一句工程諺語。

更新不見得會你覺得生活更美好,有時候是更糟 XD,這句話在 Linux 上更是重要。

那麼到底要怎麼處理更新這件事 ? 我目前的做法是,在所有平台上還是不要命的更新,炸了我就試著去解決 (在這一行混,總是得自己試著想辦法 XD,這時候我就會常常看 Bugzilla & mailing-list XD),ycma 的作法是,在 Linux 上調到穩定了就不更新,如果真的有必要要更新,一個一個套件慢慢試 (我這個懶人一定做不到 ...),其他人的作法我不知道,知道的人可以告訴我一下嗎 XD。

原本以為自己可以寫的很科普的,結果現在看起來還是一點也不啊 XD。


---
寫開心的嗎 XD

星期二, 7月 13, 2010

文字

如果將情感訴諸於文字,那會是怎麼樣的光景 ?

嘗試在文字中傳達訊息是一種基本,而傳達情感,則落入了解釋,無法確切的表示時。我總是捫心自問,為什麼我要寫出這些無病呻吟的文字呢 ? 因為無聊吧。


---
下一個開始。寫作。

星期六, 7月 10, 2010

MacBook 送修

在 FLOLAC 的時候 ...

godfat: 我的螢幕都亮暗亮暗的。
jaiyalas: 不然你要跟前面螢幕一樣$%^#&^&$ (其實我忘了他說什麼了 XD) (yen3按: 躺著也中槍...)
yen3: 亮暗亮暗還不錯啊,不然你要跟我的螢幕一樣開關開關嗎 XD
(自表結束 XD)

簡單的來說,就是我的 MacBook 的螢幕背光會自動關掉,而且再起不能 ... 到我按了很多次亮度調節為止 XD 於是終於在今天送修了(因為已經壞了七八天了,但是上課還要用到 ...),由於送修了,大概只能用以前的筆電和實驗室的電腦,都是 Linux ,應該會用不太習慣,不過最近比較需要多看書,所以影響應該蠻低的,可以順便練習和 Linux 熟一點

不過樓下那篇文章可能要等個幾天才能補完了...那是我送修前打的,工具用的比較熟 ...


---
我不是富奸(挺)

FLOAC 10 - Program Construction and Reasoning Quiz

這是我個人的答案,基於老師說要練習 (不想被 fire 掉 XD),我就練習了,但是我還不會排這種版型,傷眼就請見諒了 XDXD。


題目很簡單(不過我把寫對的答案擦掉改成錯的答案 XD),寫一個,寫一個滿足 P_0 的 program,這不難寫就是,利用上課教的技巧及 Exercise 3 的第一題,應該可以很快看出來,於是我們很快的就有下列推導。



重點是把 (a[i]-a[n])^2 = a[i]^2 - 2a[i]a[n] + a[n]^2 ,這樣子我們就可以在一個 loop 完成它。


所以這個時候我們就會得到四個變數 P_0, P_1, S_0, S_1,答案就呼之欲出啦。

待補,發現許多錯,先出門 XD


---
寫錯不知道會不會被罵 XD

星期日, 7月 04, 2010

FLOLAC10 Week 1

這週上了很多課,不過不打算在這個時候講感想,打算再過一個禮拜後再一次講。

其實老師人都很好啦,我有一種被洗腦的感覺,詳細解釋可以參考 Josh Ko 的 "邪教檢查表",其中聽到很多很棒的概念,也終於對 Logic 有比較好的概念 (不過我覺得我的邏輯還是不好 XDXD),中間還有認親大會 (我看到大貓(大鳥)了 !!),還有 C. E. W. ,還有 Logan (雖然不熟,我還是努力的裝熟 XD)。

這個禮拜覺得最可惜的事就是禮拜二沒來(在學校期末報告,還好得到了不錯的結果),我看 Functional Programming 的lecture 的 fold & unfold ,似乎跟自己的認知不太一樣,我覺得我自己之前想的太簡單了,是該在好好想想,也有另外一個感想是,我好久沒寫 Haskell 了。而 Operational Semantics 的話,第一堂課沒有聽到確實有很大影響,縱使我知道老師想要表達的是什麼,我也很難抓到什麼是重點,這部分只能說要盡量看書了。

scm 老師的 "Go To 有害大論戰" 在禮拜五的最後一個小時演講,這個部分的解釋可以看看 Josh Ko 的 "前途有望",整個演講以 Dijkstra 的文章為基底而討論了對程式該有的看法,誠如 scm 老師在一開始上課所言,我們是把寫程式變的比較難,但是我們讓寫出錯誤的程式變的更難。如果一開始就寫出對的程式,那麼其實後面就不用做這麼多麻煩的事,Knuth 的 efficient 和 Dijkstra 的 reasoning 都是很重要的事,Josh Ko 比較喜歡 Dijkstra 的看法,但是對我而言,我覺得我比較喜歡 Knuth 吧,但是覺得 Dijkstra 說的也沒有錯,這種事或許不是我現在的程度可以思考的吧 XDXD。

題外話就是,TAOCP 我終於訂了,花了好多錢啊,可能是拿回來拜的,但是我訂了一本 Logic and Structure,希望自己能多懂這些東西,不然每次都覺得自己數學很爛也不是辦法 (上課我要猜 loop invariant 都猜不出來,完全沒有頭緒要猜什麼 ... Orz)


---
中場休息

星期一, 6月 28, 2010

FLOLAC 10 我來了!!

嵐達網的文章還是持續沒更新,看到很多很有趣的新東西,一切都卡著明天的期末報告 ... Orz

不過重要的是,終於把東西都做的差不多,可以順利的第一天去 FLOLAC 10 而不用擔心太多事了 (轉圈圈),大概都把學校的事都完成的差不多了。今天上的是 Logic ,由 Max 上課,其實我還蠻期待這堂課的,因為我的 Logic 概念非常的差,希望能開心了!!

明天整天不能去,看來要找 Josh Ko 幫忙錄音才行了 ...


---
整體而言還是很開心 !!

星期六, 6月 26, 2010

plurk

即日起,plurk 從我的書籤列移掉,也就是暫時的無限期停止更新,如果有需要就請看我的 blog or facebook 了,雖然上面有一些朋友還蠻喜歡的 (fcamel XD),不過以後可能改採單獨看的型式 (或許用 rss 也說不定 XD)。


---
是時候該整合了。

星期日, 6月 20, 2010

期末報告

說是禮拜五晚上要交給 ycma 的東西,硬是遲了一天。

不過就現在來看,應該是有辦法第一天安心的去 FLOLAC 上課了,第二天再行請假(因為第二天要報告),為了確定這一些東西,LLVM 與 Trimaran 與學會 Compiler 的大架構,幾乎耗去了我這學期大半的時間,或許也是因對新東西的害怕吧,不過也沒得選擇,只能硬著頭皮去碰,但是大部分的東西還是他教與給我的,這點還是覺得非常的慚愧 ... Orz

還有一個禮拜就 FLOLAC 了,期末報告大概再改個三次就 ok 了,我想這一切應該是在時間之內。現在回頭想想,下一次能休息的時間竟然是七月中之後了,也是一個有趣的經驗吧 XD 換作是以前的自己,早就炸到翻掉了 XD,不過這陣子有感覺,以前學的時間管理完全得重來,因為我根本沒辦法執行這麼長的時間,學習是馬拉松,不是短跑,雖然知道,卻難以做到。也難怪自己常常成為食言的人了(苦笑)。

說到有趣的事,期末報告發現一些有趣的 Beamer 技巧,有空再補上來 XD。


---
看來標題改成 "最近" 也是無妨的 XD

星期六, 6月 19, 2010

梁靜茹 - 如果沒有

本來想要寫 Love Fool 的,不過後來聽到這首歌,頗有印象,這首歌是在我大學唯二的夜唱時,聽到eating 點的,聽到了覺得還不錯,就加入我的播放清單了。

說到梁靜茹的話,我有一天我聽到她唱的 "我喜歡" 這首歌,我姊剛好看到我在聽,我姊對我說

你好娘


---
這 ... XD

繼續

繼續,需要很大的勇氣,不過我相信我可以。


---
生活啊。

星期四, 6月 17, 2010

買書

這一學期買的書不少,做個記錄

工具或者是學習

  • Compilers: Principles, Techniques, and Tools 2/e
  • Building an Optimizing Compiler - 這本買不到... XD
  • Advanced Compiler Design and Implementation - 是較為適合初學者的
  • Optimizing Compilers for Modern Architectures: A Dependence-based Approach
  • Engineering a Compiler
  • Digital Signal Processing: Principles, Algorithms and Applications 4/e
  • Introduction to Algorithms 3/e
  • Computer Alogirthm 2/e
  • Embedded Linux Primer
  • Pragmatic Version Control Using Git

其他書

  • 全部成為 F - allents 推薦,理科系推理小說
  • 八百萬種死法 - allents 推薦,社會寫實推理小說
  • 微積分的歷史步道 - Josh Ko 推薦,之前已經看了一半
  • 尋找腦中幻影 - Josh Ko 最近提到,也一起訂了回來

Perfume 部分

  • Perfume Second Tour 2009 『直角二等辺三角形TOUR』- 這是演唱會 DVD
  • 不自然なガール - 這是單曲 CD XD

電子書閱讀部分

  • 絕代雙驕
  • 浣花洗劍錄

理論上應該有所遺漏,不過我也懶的想了


---
好多錢 ... Orz

星期二, 6月 15, 2010

Page Rank

不知道什麼時候 Page Rank 變成 3 分了 (2分好多年了 ...) 在不事生產下的狀況還能升還真是 ....


---
記錄

星期三, 6月 09, 2010

睡不著

在這個時間點,睡不著,腦中有無數的想法在衝突,疲累。


---
面對。

星期二, 6月 08, 2010

最近

已經想不起來上次寫作是什麼時候了。

嵐達網的文章也很久沒動了,我知道,太難的寫不出來,簡單的,寫了似乎又沒意義,就一直卡著而讓時間流逝。

學弟妹的事告一段落了(雖然應該說都是學妹的事)。

從 Trimaran 改成 LLVM ,很多事是解決了,但是也有更多問題產生,只能說,自己硬著頭皮上了。

從垃圾變成廢物,感覺似乎不錯的樣子。

還有二十天就要期末報告,現在似乎什麼都沒有。

我不是一個好人,只能說是一個爛人。

語畢,其實,回歸平凡。

不坐以待弊

公佈自己所有的爛行為


---
生活

星期一, 5月 24, 2010

Haskell Learning Source

從 wiki 上移過來,大概會改變寫長文的寫作風格,拆成許多個小篇的來寫。

  • Hayoo, Hoogle - function's type information (include hackageDB's package)
  • hackageDB - package information, we can use cabal command install it.
  • Haskell Cafe – Mailing List. You can google keyword, for example you can use google search like the following
    keyword site:http://www.haskell.org/pipermail/haskell-cafe/

---
持續寫作

中文小說與 Kindle DX

其實 Kindle DX 本身並不支援中文格式,所以如果在不變更任何程式的狀況下,有 pdf 可以選擇,如果想選擇破解的話,可以安裝 Unicode 字型,不過英文字體連帶閱讀起來感覺不好。我以下說說我的做法

目前中文小說網站有兩個比較有名

後者網站我還沒有試過,不過好讀網站的 pdb file 在 Mac OSX 上讓我很頭痛,仔細看看大家都有這個困擾。我簡述步驟如下。
  1. 利用網路上高手所提供的方法先把 pdb 轉成純文字./a.out xxx.pdb > xxx.txt
  2. 得到 xxx.txt 之後,編碼是 Big5 的 Windows DOS file,這時候可以利用內建的 Mac OSX 文字編輯器,編碼時選擇這個打開,之後另存新檔成 utf8 即可(有想過要用 iconv ,這樣子可以寫成一個 script ,但是我不知道相對應的編碼名稱為何 ... Orz)使用iconv -f big5-2003 -t utf8 input.txt > output.txt即可,就可以把 Big5 的檔案轉成 utf8,如果是使用第一個程式製作出來的文字檔在轉換時會出錯,是不用理會的,因為那是第一隻程式所產生的一些資訊。
  3. 得到 txt 之後基本上想做什麼事都可以,Kindle DX 對於 pdf 的支援度不高,而我大部分只是線性閱讀,所以丟到 calibre 中轉成 pdf 即可,行高記得選擇 20 pt ,output 可針對 Kindle DX 最佳化。
  4. 丟到 Kindle DX 上即可閱讀

輸出後在 Kindle DX 上成果大概如下 (對不起,我不會取景...Orz)


預設輸出是黑體,有想過要用 LaTeX 排版,不過這可能要花很多功夫,所以暫時交給 calibre 來做這些事,而我覺得這樣子的輸出結果我可以接受啦。至少字夠大,閱讀起來不太吃力。

---
簡單記錄一下。

Compiler Research: The Next 50 Years

這篇是寫在嵐達網上,在自己的 blog 上做個備份。本文不開放回覆,統一至這篇回覆(寫這麼差...Orz)

Compiler Research: The Next 50 Years
Communication of the ACM - Febuary 2009

這篇是一篇很有趣的文章,在 CACM 上的文章都是接近科普類型,這篇也不例外,所以我花了幾天看懂這篇文章,又著實想了好幾天。

其實在這個領域中,要預測下一個十年比預測下一個五十年容易的多,那麼他覺得下一個 50 年的問題是什麼 ? 簡單的來說就是。 Program Optimization (Mulit-core, Architecture-Specific ... etc) 與 Security & Robust

就 parallel program 來說,multi-core 是一個趨勢(因為 Moore's Law 逼得大家努力的製作 multi-core CPU XD),在過去的三十年來,Compiler 對於 parallel 並沒有一個泛用的方案(General Solution),不管怎麼操作,lock, race condition 都是避免不了的問題,很多人嘗試要提出方案來解決,不過到目前為止沒有成功。

就 Security 來說,現在的 Compiler 勢必得去面對如何讓一個更複雜更為大型的程式保持正確(Corectess)且穩固(Robustic),要用到很多手段報分析,讓一個程式在各個方面都 保持穩定。

回到 parallel 與 Compiler 的關係來說,用一個小故事來開個頭。有一天,我的指導老師問我,在 Embedded System 上,大部分的 CPU 是沒有 Floating Point Unit ,可是勢必得要去處理很多相關的運算,請問是怎麼解決的 ? 我想了很久想不出來,他說,其實解決不了(我被框了 ... Orz),但是如果切割成許多個領域來解決是可以的,以 FFT 來說,在硬體上,只需要數個加法器與乘法器就可以搞定,以某個影像編碼來說,雖然每次都會用到 sin, cos,但是實際上來說,會轉的角度只有九個,所以查表即可解決。

回到正題,parallel programming 對於 Compiler 來說,如果切割成許多個領域來分別進行最佳化,其實到目前為止算是有相當的成果的, MIT 的 StreamIt Programming Langauge & Raw Processor (for streaming),Google 的 Map Reduce (從 Functional Programming 來的 XD),切割開來的時候,每個領域的平行其實都可以用巧妙的方式來解決,但是組在一起卻沒這麼容易。所以這篇文章有嘗試建議一些方法,例如說,撰寫高效能 的平行演算法並加以封裝,而寫程式的人就使用這些封裝的好的演算法來組合(BLAST ?),這大概是目前可以做到的,或者是你可以想出一個全新的方法來解決現在的問題。綜合以上,這篇文章寫了很有趣的話,誰可以在平行上做出突破就可以引領 下一個研究年代。

而針對不同的平台來說,現在寫程式並比較不會這麼局限在單一架構上,你有可能寫程式寫在手機上,一張開發版上,自己的 CPU 上,針對不同的平台要做最佳化,其實是有一定的困難度的,而這也是 Compiler 下一個很重要的事。如果以 Embedded System 來說,多個晶片要協同運作是一個很常見的事,而這件事都需要很多方面來配合 (OS, Programming Langauge, Compiler ...etc)。這也是一個值得著力的點。

要寫出一個安全且穩固的程式是一件相當困難的事,可以就程式語言層面設計出一個更為安全的程式語言,教育程式員怎麼寫,或者是利用 Compiler 去做一些事,program analysis 就 wiki 來說有 Program Optimization 與 Program Correctness ,前者我不清楚,不過現在已經有很多現成工具可以用了,硬體設計上,用以分析出一個電路的 critical path,軟體設計上用以分析耗掉多少記憶體,那邊佔用的時間最多之類的。但是 Program Corectness 來說,我覺得是很重要,但是並不是我所了解的領域(這讓我想到這次 FLOLAC 10 的 Frama-C),要如何保證程式在每個層面皆能正確運作,我相信有許多的議題需要討論。Compiler 在過去這麼多年來越來越重要有一個原因是因為 high-level programming language 受到了廣泛的使用,然而分析這些語言會不會產生更多的問題呢 ? (這個問題是個人猜測)

最後這篇文章提到一些有趣的建議,不外乎是針對 Compiler 設計一連串的專門課程啦,建立一個 Compiler 協會之類的,老實說,我覺得每個領域都會想這樣子建議吧 XD。所以我這個部分就沒有很認真的看了 XD。

題外話: 我的指導老師跟我說,這篇文章提到許多論點是許多傳統做 Compiler 的人不願意接受的,我看起來是覺得很不錯啊,至少我覺得蠻有趣的,他舉了一個例子,你要一個練了許多年武功的人不用這個武功來解決問題是很困難的。老實說 我也不知道是什麼,或許聽了 CHTPC 會有一些感覺吧 ... ?

---
為什麼我覺得我怎麼寫都像寫廢話一樣 ... Orz

星期三, 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

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