What have you found for these years?

2008-05-03

Chomsky hierarchy

我之前寫 regular expression 一直會碰上一個問題——
沒有遞迴。後來我一直在思索究竟 regular expression
可否寫成真正的 parser? 我覺得很難,不如直接用真正的
parser generator, 會比寫 regular expression 容易得多。

根據 Chomsky hierarchy,
基本上大部分的程式語言都是屬於 context-free grammar,
所以通常要寫 parser 也是針對 context-free grammar;
然而,regular expression 僅是屬於 regular grammar,
他的層級比 context-free grammar 低了一層,
也就是說,regular expression 確實不可能能夠 parse 出
所有 context-free grammar 的 language.

而這之間的差異,在於 context-free grammar 可以在
右側置放 nonterminal 和 terminal 的組合;
然而 regular grammar 只能放一個 nonterminal?

至於 context-sensitive grammar 更可以在左側置放
terminal 與 nonterminal 的組合。這邊先不管詳細的定義,
還在試圖理解中... 總之,我想大概這就是為什麼 regular expression
難以表達一些比較複雜的 pattern, 也說明出為什麼 regular expression
會讓我有沒有「遞迴」的感覺,他確實是缺少某種程度上的遞迴。

支援遞迴的話呢?那 regular expression 就不再是 regular expression,
他必然會升級到 context-free grammar...

所以我要求的東西大概是不存在吧 :D
因為那超出其定義的範圍內了,就像超人其實不是人這樣?

==

有時候會貪婪地想知道一切
這也是為什麼會有:The Problem with Wikipedia
吧?

學問的終點無止盡啊!偏偏你又能找到好多相似的道理,看得讓人心癢癢的

latin

「我的拉丁文老師——瑞利太太(她的羅馬生日派對無法挽救
拉丁文的衰微)想要說服我們拉丁文的文法因其確定性、邏輯性
與一致性,會使得心智也變得確定、邏輯與一致(現在這種說法
是出自電腦程式語言的老師之口了)。」

——《語言本能》第四章「語言的運作」p. 123

地球最強 GUI

2008年05月03日 03:27
地球最強 GUI

(附圖是 QtRuby + OpenGL 的材質(texture)貼圖的範例)



首推 Qt! 我真的覺得他搞不好真的領先別人十年。
因緣際會重灌了 QtRuby, 發現 Mac OS 10.5 由於
bundle 了 Ruby, 導致有些安裝會跟 macports 打架...

首先第一點,不要使用 mac 的 framework...
用 port 安裝時,加上 +noframework +ssl +dbus

接著跑 cmake 時,有很多東西要自己設定,
不然他會抓到 mac framework 的東西...

用 ccmake 把路徑修好,全部修成 macports 的路徑。
每一個都要,少改一個就等著 bus error @_@

看看剛剛隨手寫的 hello world:

require 'Qt4'

class AboutButton < Qt::PushButton
slots :about
def about
Qt::MessageBox::about self, 'About', 'Hi, there!'
end
end

app = Qt::Application.new ARGV
btn = AboutButton.new 'Hello, World!'
btn.connect btn, SIGNAL(:clicked), btn, SLOT('about()')
btn.show
app.exec

多簡潔啊。當然有些對 ruby 來說還是多餘了點,
但是去看其他的 gui 套件,如:
FxRuby, wxRuby, CocoaRuby,
我唯一沒試到的是 RubyGTK, 之前安裝失敗 :(
保證都沒有 QtRuby 漂亮!

文件最齊全!
http://doc.trolltech.com/
基本上 QtRuby 幾乎是一對一對應,看這個夠用。
能這樣做的原因很簡單,因為 Qt 夠漂亮,
直接對應到 Ruby 也不會太囉唆!
其他 GUI 套件幾乎都很囉唆,
尤其上次寫 CocoaRuby 快昏倒了,
一堆莫名其妙的設定... 還不如用老牌 wxWidgets.

三大平台完整支援!
Windows, Mac OS X, Linux 全部都有非常完整的支援,
絕對不用東修西補...
不像很多 open source project 常常都是很殘破的。
像是 Rails 我也覺得還有很大的進步空間。

Windows 上安裝也超方便。
抓 Qt 安裝程式,點兩下安裝就可以用了。
連 GCC 都幫你 bundle 好 ~~~

QtRuby 也很好灌,gem install qtruby 一次灌到好。
(不過只有 windows 才有,其他平台要自己 compile)
像附圖的 OpenGL 呢?
gem install ruby-opengl
這樣就能用了。

GLUT 很難用,用 Qt + OpenGL 吧 XD

==

不過對 end-user 來說就比較有負擔了,
光 QtCore + QtGUI 就好幾 MB 了,
而且跑得也確實比其他 GUI 套件慢...
但我也相信這越來越不是問題了 :p

Qt 大好啊!!

2008-05-02

Love/Hate Ratio

不知道為什麼看到 PHP 最低,只有 0.324, 連 C 的一半都不到,
就覺得很爽...

http://www.rubyist.net/~matz/slides/rc2007/mgp00026.html

我承認我現在很討厭 PHP

Chromatron

以前很愛玩的遊戲
http://silverspaceship.com/chromatron/

我記得我好像全破到二代吧,三代有些關卡過不了
四代太新了,沒看過...

我個人認為是滿經典的遊戲,謎題設計非常棒

曾經看有人把三代也全破了
我覺得還滿神的... XD
有些關卡其實真的很難... 我花很長的時間才解得開

看來可以拿這個再來打發不少時間
也看看自己腦袋有沒有變笨了...

Re: T▽T

「寫得很隨意的」

date Thu, May 1, 2008 at 10:37 PM
subject Re: T▽T

真的是很怪!但是這樣真的才是對的。
也許可以這樣說,自然語言中的「擁有」其實是語意不清的。
我說我有這張 CD, 我指的是這張 CD 的音樂,
還是這張 CD 的 copy?「擁有」後面的受詞,
是獨一無二的還是可以被共有的?沒有說明。

但是在 Rails 裡的 has_one, 後面接的東西,
一定要是「獨一無二」的,不能是共有的東西。

其實可以這樣說,has_one 和 belongs_to 根本就不是
從屬語意,照字面上看是會被誤導的...

我個人覺得應該改個名字
至少 belongs_to 換成 belongs_to_one

*

relational database 無法跟 OO 一對一對應,
最多只能做到 OO 的子集而已,而且是很小的子集...

遊戲的 OO model 可複雜了 -_-b
想用 relational database 去 model 我覺得幾乎不可能
不然就是要繞很多圈...

像是 has_many :through 就算解決了一部份多對多關係的問題

*

事實上,has_one 只是幫你增加幾個 method 而已
真正有作用的是 belongs_to,
他會在你的那個 model 裡面多增加一個 foreign key,
(不過要自己加,我覺得要有另外一個 migration 體系可以直接 reflect model)
假設他是 belongs_to :user,
則他的 table 裡會多個 user_id,
表示他這筆資料是「屬於」哪個 user 的
也就是說,他的「主人」必須是獨一無二的,
不能有兩個以上的主人...

這造成了 theme 去擁有 user,
而 user 屬於 theme...
因為獨一無二的是 theme 而不是 user,
user 會有很多 copy XD

2008-04-30

Redlof

我猜他是多次搞爛我電腦的兇手

Redlof

我不知道他是從哪裡來的,
我只知道我以前的網頁全被他毀了
他會在所有的 .html .htm .php 等等底下加上他自己的程式,
非常長一串,完全看不懂在寫什麼
一執行到那一段就中獎了,然後會感染所有上述的檔案

病毒是靠 wscript.exe 運作的,我後來都直接砍掉這個程式
這樣就算中毒了,也不會怎麼樣...

這病毒感染久了最後會無法開機...
害我多次重灌電腦,死了一堆檔案...

查到這個:
vbs.RedLof病毒的解密与分析

原來這程式做過混淆(obfuscate + encode?)
怪不得我當時完全看不懂...
不過現在應該也看不懂,看上文描述還滿複雜的

windows 9x 系列安全性真的有夠低
隨便一個 script 都能搞破壞,真誇張

2008-04-28

if you could have told me

沒什麼,只是忽然想講這句話
中文沒有假設語氣,所以單說「如果」
並不能保證事情到底是發生過還是沒有發生過,
甚至其實是未來的事?中文的歧意實在很多,
所以容易誤解,也容易寫出更令人玩味的句子

你記得嗎
我曾經因為鉛筆盒被刮傷得很慘,
不禁當場哭了起來

我猜你應該沒料到會有這種事
是否感到手足無措啊哈哈哈哈

現在的心情當然跟當時不一樣
不過有一點倒是很近似

我只有難過
沒有生氣
就好像那是必然降臨的災難似的
只是這樣而難過著

雖然常常在回想這件事
但是很早很早我就找不到那鉛筆盒了

我有一種習慣
自己受了傷的東西會收起來
收到自己也找不到的地方去
其實不是故意這樣做的
只是後來總是會忘記到底是收到哪裡去了
可能是因為不想再去想那件事吧?
後來就會忘記

有一把尺也是這樣
一樣的刮傷法
不過那是我自己幹的蠢事
然後我就會當那件事好像不曾發生過

只是別人造成的,好像就比較難這樣當作沒發生過

原來我從小就這麼愛逃避
只是現在除了精神上的逃避,又多加了行動上的逃避
就變得非常明顯了



All texts are licensed under CC Attribution 3.0