What have you found for these years?

2009-11-30

東方 Bad Apple (Shadow Art) (2)

棍... 其實真的有點合。



果然是東方印度華麗...
ナイト・オブ・トゥルトゥルダダダ

Nom Nom Nom Nom Nom Nom Nom

Nom Nom Nom Nom Nom Nom Nom - Parry Gripp

先看上面的,想要音樂的話去作者網站看:
Parry Gripp Song Of The Week.
查 Nom Nom Nom 就有了。

我現在滿腦子 Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom
Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom...

小遊戲板看到的:
This is Why You're Fat
全破後的音樂....

毫無違和感啊!! XD

真慘

看來又要虛耗一整天了...
一不小心又要不耐煩全開 :/

powerset (2)

...該睡了該睡了該睡了...
不過洗澡時忽然在想,但 IO monad 很明顯是從前面開始算啊?
那為什麼 List Monad 卻是從後面開始算?

IO inside

因為後面的 function depend on 前面的 value,
所以要先算後面的 function, 變成要先算前面的 function.

然而對於 List Monad 來說,卻沒有這樣的限制。
所以其實根本不應該說「順序」,只有「結構」而已。
重點是 value, 而不是 order, 非常合理!

這樣就讓我想到之前那個很神奇的 tree,
挖洞在 tree 裡面,然後最後很神奇地數字就算出來了。
我得找一下那程式在哪裡...
但很明顯那絕對不是 strict 語言可以實作出來的,
完全是靠 non-strict 的機制,一點順序都沒有。
想像 value, 不要想像 flow.

powerset

其實我從來沒有真的自己寫過遞迴的 powerset ><
以前寫出來的都是暴力法,例如用 bitset 去 mask...
別人寫的遞迴自己也都看得似懂非懂。

我覺得,其實 recursion 和 monad 有點類似,
都是基本概念很簡單,一步一步拆出來很容易懂,
但就是有種見樹不見林的感覺 :( 覺得地圖還沒畫出來...
我還沒辦法用 recursion 和或 monad 思考,沒有進入那種模式。
目前思考還是很 imperative...

看了 jinjing 的 Haskness code,
覺得一切都是如此神奇...

powerset = filterM (const [True, False])

這實在是簡潔到恐怖的地步了。filterM 很神奇嗎?也沒有...
看起來就是很好想像的 filterM, 就是 filter 作用在 monad 上嘛。

稍微把 filterM 用 bind (>>=) 改寫,因為我還沒辦法用 do 思考...
不過發現自己已經能很輕易地把 do 改寫成 bind, 都很直覺了。
寫出來後就立刻意識到為什麼是從 ys 開始 iterate, 而非 flg.
filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
filterM _ [] = return []
filterM p (x:xs) = do
flg <- p x
ys <- filterM p xs
return (if flg then x:ys else ys)

看這個我直覺會從 flg 開始 iterate, 因此應該是 True, False, True, ...
但改成 bind 就很明顯:
p x >>= (\flg -> (filterM p xs >>= (\ys -> return ...)))
從 ys 開始做,所以當然從 ys 開始 iterate,
因此是 True, True, True, True, False, False, False, False...
do 的順序是反過來的,好像從來沒記住這一點。

這樣就能明顯看出,True 表示把頭接到身體上,False 就是不接。
像是 1 和 [2,3] 取 combo 就是 [1,2],[1,3]...
怪怪的,該怎麼講好 ><
假設我們已經有 [2,3] 的 powerset, 這樣要怎麼推出 [1,2,3] 的 powerset?
很明顯就是兩個 case (True, False), 一個是在每一個 set 上都加上 1 (True),
另一個就是什麼都不要動 (False), 因此 size 是 *2

把這個翻譯成一般的程式,就是:
powerset :: [a] -> [[a]]
powerset [] = [[]]
powerset (x:xs) = concat $ map (powerset') [True, False] where
-- powerset' :: Bool -> [[a]]
powerset' flg = map (\ys -> if flg then x:ys else ys) (powerset xs)

(我不懂為什麼 powerset' 的 type 寫出來會不能過!?有錯嗎??)
(明明寫到外面去就可以用啊...? rigid type variable 是啥..)
(晚了所以下次再 google...)
這樣寫一次,感覺好像就豁然開朗了??
雖然其實我只是在做翻譯而已... :/

感覺這些東西都是說穿了很簡單。但,一開始是怎麼想到可以這樣寫的?
怎麼那麼漂亮就能用這種形式表達..?
這樣似乎就會有某種錯覺,覺得好像這個世界,都是用同一種 pattern 組成...
各個 model 之間都能夠互相轉換似的。

這樣有 category 的味道嗎? XDDD

==
真的覺得最神奇的部份,就是你會發現其實很多看起來毫無關聯的東西,
最後都是有關聯的。雖然說每個人都在這樣說,例如 PhD 這個名稱。
但是不管說得再天花亂墜,自己體會一次還是會有那種讚嘆感...
感覺這種事實在很難用「說服」的。

2009-11-28

FILESYSTEM CHECK FAILED

updated 2009-11-29 01:50 oh yeah, 搞定,加上這行:
(雖然途中又搞壞了 fs 一次... 調 fstab 這麼危險?)
project /home/godfat/mnt vboxsf uid=1000,gid=100 0 0
第一個是 shared name, 第二個是 mount point,
後面 uid 和 gid 就自己查自己的 uid gid, 這樣開機會自動 mount.
測試可讀寫沒問題了,mac 上看得到變化。

**

我真是 linux 白痴...
不知道幹了什麼事,我只是希望不用 root 去 mount shared folder,
所以 google 到說修改 /etc/fstab, 就改了,然後就不能開機了...
(How do I automatically mount my shared folder?)

顯示 FILESYSTEM CHECK FAILED

很擔心是不是要重灌了 orz

照上面的說明,輸入 mount -n -o remount,rw /
把 / remount 成 writable, 然後把 /etc/fstab 改好,重開。

無效 >_<
只好 google, 第一筆就是 Arch forum
Filesystem Check Failed !!!

其實我根本沒細看,看到有指令就照著打了 lol

> e2fsck -p /dev/sda1
> e2fsck -p /dev/sda2
> e2fsck -p /dev/sda3
> e2fsck -p /dev/sda4

全跑一次...
記得 sda2 說什麼不是 ext2 的 filesystem 啥鬼...
沒記錯的話我應該是灌成 ext4, 不知道 ext2 哪來的。
然後 sda1 和 sda3 還 sda4 的什麼東西有錯,
要我去掉 -p 之後重跑一次。看起來是什麼時間有錯,
說什麼是 in the future... 這我之前確實有看到這個錯誤,
但不明白就沒管了,更何況我根本沒去動時間。

總之按 y 說確定要修復,就修復好了...
接著重開機就沒問題了耶。

什麼啊,一頭霧水,這樣為什麼不能幫我修就好了 @@
罷,繼續查怎麼不用 root 去 mount...
我不要用 root 寫 haskell 啊

virtualbox shared folder

vbox vritualbox virtual box shared folder directory
這一堆關鍵字是為了讓日後我比較容易 google 到的...
我發現 google search 還是不太完整,有時候找不到東西。
自力救濟就是關鍵字寫好一點.. 不然要把整個 blog dump 出來 grep.

murmur (16) 有提到要灌 VBoxLinuxAdditions-amd64.run, 這個就不容易
google 到,是我有印象在 Arch on VirtualBox 那篇附近才找到的。

anyway, 剛剛 yaourt -Syu 更新了 kernel,
結果 shared folder mount 不起來。我一直以為是我打錯,
忽然才想到安裝這個 guest additions 好像會動到 kernel,
那我有更新到 kernel 會爛掉也不奇怪吧?
雖然我還是不懂更新 kernel 是什麼意思.... 但反正就這樣。

用 fish 要重做一次步驟還真是超簡單啊。
打 amd 按上就能找到:

> sudo /mnt/dvd/VBoxLinuxAdditions-amd64.run

不過這個跑不起來,因為 dvd 還沒 mount 上去。
打個 dvd 按上也能輕易找到:

> sudo mount /dev/dvd /mnt/dvd/

雖然有一些是我之前嘗試亂按的,例如 -t dvd -t cd -t cdrom 之類的。
但一個個試過去總有一個是對的.....

重灌好之後,再試一次,mount 按上找到:

> sudo mount -t vboxsf tmp /mnt/shared/

發現還是一樣的錯誤訊息,什麼 no such device 之類的。
想到更新 kernel 應該需要重開機吧?就 sudo reboot
重新開好登入之後,再試一次果然就行了。

這次筆記在這,希望之後能快速 google 到。

然後把 ~/project mount 到 Arch Linux 上後,
就能繼續試 Monad (Transformer) 了....

這樣操作實在不太方便,我之前更麻煩,用 copy and paste..
決定直接 mount 上去比較方便。麻煩會造成自己懶得繼續練習,
所以基本環境還是要先打理好。

倒是 vbox 要修改很多設定,都一定要先關機才能調整,很麻煩啊。
就算要重開機才能生效,也至少弄成可以改吧?
不然開機狀態我根本不知道能改什麼選項,關機去看,又沒我要的,很嘔啊。
一天到晚在更新也很麻煩,mac 不是有個超方便的升級 framework?
adium, xld, 還有好幾個都有用,真的很方便,應該要用的。
這種我看到都是立刻更新沒第二句話,還要自己下載那種就幾乎都跳過了。

==
parallels 的 windows 還沒打撈上來...
噢對,還有 guilds wars 的 screenshot 也還沒備份,記得要備。
好久沒打了.... 應該還能開機吧?

recruiters-who-use-grep

雖然我對他的文章並不大感興趣,也因此只看了中文版的,
懶得慢慢看英文了。不過還是有些句子讓我大致認同,
甚至會覺得是個有趣的說法。用 grep 來過濾履歷真是傳神啊。

The recruiters-who-use-grep, by the way, are ridiculed here,
and for good reason. I have never met anyone who can do Scheme,
Haskell, and C pointers who can't pick up Java in two days, and
create better Java code than people with five years of experience
in Java, but try explaining that to the average HR drone.

這讓我想到之前好像也看到一個笑話,像是條件寫要有五年 Scala 經驗...
可惜這笑話也許再過一陣子就不是那麼好笑了。
也因此,我向來對於「你會不會 OOOO 之類的問題」感到不知道該怎麼回答。
這邊多寫兩個 OO 是怕被誤會成「面向對象」 XD

欸,認知差距真的很大啊。
實在很難忘記說「不敢說真的很熟,但大致上還可以」會被認為是不大會。
這種片面的說詞還是省省了吧...

The Perils of JavaSchools
爪哇學校的危害

Purity

Fields arranged by purity

不知道是不是睡太多了(應該是吧?),現在頭超暈的...
以前睡太多時,總是會睡不著,然後很無聊就會爬起來。
後來睡太多時,變成會滾來滾去,然後情緒太複雜而起來...
現在睡太多時,似乎就會一直睡下去,睡到頭很痛..... orz

bones >3

前一陣子 bones 更新到 3.0...

時間先往前拉。我在 source-tools 中弄了 git 的 post-receive 的
script template, 路徑是 t.git/hooks/post-receive.erb
然後在 bones <3 時,不會把這個檔案算在 gem 裡面。因此我 fork 了
bones, 加了個 include 的 config, 希望可以強迫這個檔案加入。
(雖然現在完全改用 github 後,這東西也是可以退休了...)

原本當然是希望改成上述的路徑,不會算到 exclude pattern 中。
不過想了一下,發覺要完全正確判斷根本是不可能的。因為 t.git/hooks/...
確實有可能是真正的 git repository 啊!比方說,submodule + bare
repository 就有可能了。雖然我不知道會不會有這種狀況誕生?

總之送了 pull request 之後,好幾個月過去了...

本來有點失望,不過反正這本來就是奇怪的需求,而且很容易 workaround.
但是後來,大約幾週前吧?開始看到 bones 大量更新,整個架構都改了,
版本就進入 3.0 了。唔,這樣就能想像為什麼不理我的 pull request 了。
畢竟架構都變了,這樣的 patch 就沒有意義了。

幾天又過去了,忽然收到 TwP 的回信,裡面還滿誠懇的,
他說他從來沒想過會有人的檔名裡面有 .git (是的,我也沒想過...)
然後他也針對這點做了修正,請我試試看 3.0 有沒有解決這個問題。

但是他改太多了,我一時三刻沒辦法套上去...
(而且 loquacious 1.4 一開始沒有 rubyforge release...
只有 gemcutter 我猜?雖然現在 rubyforge 也轉到 gemcutter,
意思就是 rubyforge 的 gem hosting, 正式結束了!
這樣也好,gemcutter 也滿方便的,比 github 的 gems 好多了。
同時,rubyforge 的操作真的不是普通的麻煩也是真的。)

剛剛總算一鼓作氣弄清楚狀況了。基本上我是覺得,
多了兩個 dependency 有點討厭... 也因此,
在想是不是應該換一個 solution, 甚至模仿 innate/ramaze
全部自己寫算了?反正我的需求也不多,只是 bones 一小部份而已。

也正好看到 jeweler, 而且還真是有夠多人 watch?
但看了一下,他似乎僅僅提供 gem 相關的 task,
而我至少還需要 rake test 之類的東西。
也希望能有自動作 git tag, 如之前 bones 會做的事情。

然後看到這個
Gem Creation
唔,jeweler 真的遠遠超越其他的。不過看來看去,
感覺他可能也有點 rails style (please don't),
而且 dependency 裡面有 git gem, 不知道要幹嘛...

第二名是 newgem, 對他印象很差,非常差,差到不行 XD
自己看:
> gem dep -r newgem
Gem newgem-1.5.2
activesupport (>= 2.0.2, runtime)
rubigen (>= 1.5.2, runtime)
hoe (>= 2.3.1, runtime)
RedCloth (>= 4.1.1, runtime)
syntax (>= 1.0.0, runtime)
cucumber (>= 0.3.11, development)
hoe (>= 2.3.1, development)
絕對是瘋了才會用這鬼東西,一堆莫名其妙的 dependency.
而且為什麼他自己又用 hoe ??? 還是 runtime dependency...
之前那 picnic 還是 rubycas-server 就有用.... :(
有機會應該把這兩個東西整個全部重寫。(應該沒有機會吧? ...)

第三名就是 bones 囉。但一直用舊版也不是辦法。

第四名 echoe, 這應該也算老牌了吧,不過他可否看成 better hoe?
第五名是 hoe, 我還以為 hoe 會是第一名.. 大概是因為他的統計
是用 github 去排的吧。去查使用者分佈,我想 hoe 應該還是第一吧?
這都要歸功於他一開始的吸血鬼設計 XD
我想 rubygems 會有 development dependency 很可能是因為他。

第六 simple-gem 和第七 inochi 沒聽過。

所以還是回到 bones 了。尤其我喜歡 bones 的一點是,
他的 task 有 namespace. 我討厭 hoe 沒有 namespace.

結論是現在很晚了,又快昏倒了,所以明天再繼續弄。
已經把一小部份的 gem 移到 bones >3 了。
唯一的缺點只有 dependency 多兩個,其他都不錯,
config 變得更簡潔了,rake bones:help 的說明也很清楚。
應該算是值得繼續使用和推薦吧?雖然我還沒試 rake gem:release

另一方面,一大堆小 gem 管理上真的很不方便。
因此集中了一個 gembox, 希望小東西可以丟進去。
反正用 git, 有很簡單的方式可以 merge repository.

還有 dot-rc, 跟我電腦上真正在使用的 config 檔...
source-tools 裡產生給 project 使用的 config 檔,
這些一堆東西也不知道怎麼整合比較好。

如果說真的把整個 home 當成一個 git repository,
這樣 dot-rc 跟真正在使用的就能合併,
但會需要 ignore 掉多少東西啊,不知道這樣對嗎?
還是可以用 .git-not-ignore ..?

==
仔細想想,我跟 ruby 歷史好像也滿熟的 orz
當然很多細節不知道啦,畢竟沒在看 ruby-dev,
連 ruby-talk 也很久沒看了。
而且我用 ruby 根本就沒多久,比起國外很多人都用四年以上了。
但也許是因為 ruby 本身就是個不斷在改變的環境,
只用了這些時間,也記得了很多點點滴滴的變化。

覺得有點意外的是,原本根本就沒有說想這樣投入 ruby.
我原本的心思都在 c++ 上的。結果不知不覺間,
卻走到這條路上了。當然啦,這並沒什麼不好,
甚至是比較好才對。只是覺得很多東西,似乎都不是我的本意就是了。
這樣不免就會想回顧一下,到底是為什麼會漸漸變成這個樣子的。

至少雖然我不滿意 rails, 但很滿意 ruby, 這樣吧。

至於非關程式的事..... 或許只想說別提了吧 XD
what could i say?

2009-11-26

... (3)

...呃,總之

雖然仍然是醒醒睡睡,原因不明,甚至自己也不確定是否是如此。
但醒來時遠比昨天好得多,或許 11 小時足矣..

也夢到很多,大抵上是學校的事,好像小學國中大學同學全部混在一起。
嗯,想不起來有否高中。細節略,記不清楚。
其中一段似乎是畢業前的最後一次,好像捨不得走,
好像希望想做什麼。想起來的是國中打水球那次。

說到這,以前偶爾會有感覺可以主觀行動的夢,
但好幾年沒碰過了,現在都是旁觀者。

然後是當然要略過的...

以前會覺得如果有意願,那某個圈子的解散根本就不是問題。
然而愈是後來,愈能感覺到其實根本就不會有那麼強烈的理由,
也因此,最終也只是散掉,剩下每個人各自不同的記憶罷了。
as if frozen, from that time, til every now on

==
結果現在很焦躁,難得早上還算不錯的,
拖到現在寫就只能用奇怪的語氣...

==
bah, 結果吃過一大飯才送出,情緒都完全變了 XDDDD
算了,就這樣,懶得重整了,有想到什麼時再補吧

2009-11-25

... (2)

不好意思今天都顯得不耐煩,口氣不太好..
不過我想我還是該去睡了,多思無益,現在這樣不能做什麼 :/

...

早上起來超累超想睡...
這兩天都睡得很差,前天是不斷醒來,昨天是忽然焦躁而難睡。
不過還是有夢到有的沒的... 雖然差不多忘光了。

抵達開機後,忽然間有點精神。
但似乎持續不了幾分鐘,到現在都處於非常難受的狀態...

這樣應該是寫不了程式

桌布 (2) 太強惹..

上一篇提到這個:
ごあんにゃいいたします 覺得質感不錯
其實有那麼一點猶豫要不要把這張列出來,因為人的部份不是很喜歡。

剛剛 sengo 傳了一個網站過來,覺得畫得很棒,
翻了一下居然看到上面那張.. 原來這就是那作者的網站啊。
kmr.img

再繼續翻了一下.. 愈看愈覺得真的太強了。我貼 pixiv 的連結,
因為不想 hot link 別人的圖。沒帳號的話去他網站翻..
不眠
ふらここ
海まで 不一樣的風格!
道連れ待ち
裏街道
都会の底 很喜歡
寄り道
迷い子 仿 escher XD
黒に好かれる 很厲害的黑
金曜日 倒影..
みかづき 其實有點可怕
プール
不列了,再列都快全列完了...
作者:


其實本來超累很想睡了。事實上還是很想睡沒錯啦,
不過看著看著就想把他們看完,寫點筆記之類的。

我覺得他有個有趣的地方,人和背景畫法感覺差滿多的。
背景有比較強的延續性,而人比較乾淨俐落,線條也很細,
對比和顏色也往往有所區別。所以很容易就會把注意力放到人身上,
但又有相當的異入感,好像掉到什麼陌生的地方,會有一點不安。

同時,不管是背景或是人物,都異常平靜—至少表面上如此—,
很多都是下方的顏色比較深,用色彩度也都很低,幾乎都是往下沉。

有幾張也有點浮世繪的感覺。

這讓我想到之前上繪本課,老師說為什麼幾米的圖很哀傷,
因為常常是背景很歡樂,然後有一個很靜止的人或物。

另外有幾張會讓我想到梵谷...

不知不覺就會想一張張慢慢看。彷彿能到很多世界似的。

然後又要爬不起來了 ><

==
我想可能是有些類似心情?
另附一張,我可以懷疑這是照片改的嗎... 光澤和陰影也未免太像真的了吧 @@
眠りの中

==
程式大概寫不出這種感覺...
雖然後來又想起 hackers and painters 這本書
或許我可以想想看是不是能有什麼方式

2009-11-24

roodo-rc (4)

總算惱人的小案子結束了?希望啦,不然真的沒辦法專心。
回到這東西之後,細想之下,覺得跟 heroku 比起來,
這樣的作法實在太過於複雜。無奈有幾個原因:

1. roodo 的環境遠比 heroku 複雜,
除了 db 外,還有一狗票 config 要設...

2. 實作 heroku 的環境,以目前人力辦不到

這兩點我是覺得都很 critical... 尤其是二。
一的話還能想辦法做做看,二應該是無解。

總而言之呢,似乎是要放棄分散放置 roodo-rc 的方式,
如果把 roodo-rc 放到 github 上,用 submodule 方式引入,
這樣等於是直接把各種可能的安裝方式,直接以原本就有的解決方法解決。

然後需要統一一下 remote/branch name...
application 用 master/stable,
roodo-rc 則用 t[0-9] 和 stable.

這樣做做看。

2009-11-23

整理

其實自從用了 mac 之後,檔案開始比較有歸類了...
不過我覺得那倒不全然是 mac 的關係,雖然是有部份關係,
像是 10.4 升級 10.5 匯入 10.6, 所以我資料都還在。
再加上比較少亂裝一堆東西到電腦上,硬碟空間變大,
使得每次應該重灌時,可以把整份資料都保留下來。

因此在 archive 之前,有更多的時間可以整理。

另一方面則是,個人檔案還是亂放一通,
真正有差異的是,project 變成一大堆,
也因為很多很多,所以整理變得更重要,就比較有在整理。
或是說,因為增加得太快,之前增加的地方還有記憶,就還能整理。
其他雜物就還是亂七八糟...

未來的希望是全部能放在一顆硬碟裡,這樣整理比較容易。
雖然我可能還是會想保留之前的 archive, 因為這樣找資料也找慣了,
那也是一種歷史紀錄... 整理掉的話,邊翻就沒辦法邊回憶了。
像現在這樣,看著過去的目錄分配,其實一直是能回想到很多事情。

anyway...
總之後來的 project 都放在 ~/projects 裡面。
然後引用 git 了之後,就改放到 ~/projects/gits 裡面。
現在終於下定決心,要把 ~/projects 和 ~/projects/gits 合併,
不要有額外莫名其妙的分類...

然後把一些之前的老 project, 照「圈子」分類。
現在就變成 ~/project/圈子/專案
這樣看起來就清爽乾淨得多了。是的,也把 projects 改為 project.
複數真的有點沒意義,目錄當然就是放一堆東西,一定是複數..

另外有個 ~/project/fork 專門放 fork 或從 trunk 下載的東西。
~/project/test 則專門放零散的一堆雜七雜八的測試程式。
~/project/godfat 則放只跟我自己有關的,或是.. 其他類之類的 @@
~/project/backup 則放一些 server database backup 之類的。

暫時沒辦法全整理完,還有一堆雜七雜八的一時不知道要怎麼處置...

==
雖然有時候會不知道整理這些有什麼意義
但可以的話,還是希望自己的東西能收好
以後還要看 gmail 能不能下載回去...
網路上打的東西,要備份就有點麻煩,以前真的太有毅力了
(其實是太閒吧?)

On Understanding Data Abstraction (1)

想到有幾個期待的聲音... XD
雖然還沒看完,而且這段時間也沒看多少,
但還是稍微筆記一下之前的心得好了,也許這樣比較不需要重看吧。
就像每天睡覺的時候,可以把記憶從短期區移到長期區之類的...

不過剛剛 regular expression 看太久了,這篇只好暫時擱下 @@...

ruby regexp notes

有些特殊的東西,還真是有點難查... 總算找到一個地方有寫:
Ruby Regular Expressions
====
updated:
噢,不過剛剛才找到,這個才真正完整:
Regular Expressions Overview
這樣我應該不用再整理一次了....
====

節錄重點於此:

regexp modifiers: (suffix of regexp literal, e.g. /a/i)
i => case insensitive
m => multi-line, e.g. (.) would match \n
x => ignore whitespace in regexp, e.g. /a b/ == /ab/
u => unicode regexp, 1.8 only i guess, 1.9 is encoding sensitive

group options: (perhaps 1.9 only)
(?i) => toggle on i for rest regexp (so do m, x and so on)
(?-i) => toggle off i for rest regexp

for example:

'aAa' =~ /a(?i)a(?-i)a/

(?:blah) => group without back-reference
that is, it won't be counted in $1, $2, so on so forth.

(?i:blah) => toggle on i in group, and no back-reference too
(?-i) => toggle off i in group, and no back-reference too

(?#blah) => comments embedded in regexp...
(?=blah) => look ahead match (peek)
(?!blah) => look ahead not match
(?<=blah) => look behind match
(?<!blah) => look behind not match

然後是上面那網站上沒列的: named group

(?blah) => you can refer this group in regexp by:
\g. that is, you don't have to use \1, \2, etc.

non-greedy 應該每個人都知道吧? *?

\b => match word boundary (e.g. whitespace)
\B => match non-(word boundary)
\A => beginning of string
\Z => end of string (ignore last newline)
\z => end of string (include last newline)
\G => 還沒完全搞懂....

不過剛剛才發現這網頁寫得很完整,那我就不整理了
Regular Expressions Overview

忽然發覺...

我 ruby 怎麼那麼熟啊。plumm 隨便拿了幾個 ruby 陷阱考題,
就算很不確定,也可以篩到只剩兩個選擇。而且有些在 JRuby,
Rubinius 的行為是會有點不同的... 例如以下:

['foo'].each do |i|
['bar'].each do |i|
print i
end
print i
end

在 1.8 會是 barbar
在 1.9 會是 barfoo
原因是 1.8 的 block 是 assignment,
do |i| 展開是 i = ...
因此內層的結果會影響到外層。但在 1.9 中,就有 scope 的觀念了。
甚至有 block local variable, 用 ; 分隔。
....大概是之前試 Rubinius 和 ruby-core 看很久的關係吧?
常常有不少實作細節的討論。像這些地方,不同實作都很容易有不同。

==
因此這種考題很無聊,真的。平時你也不會寫這種混淆的程式吧?
不過我居然答得出不少 :/

Optima

單純筆記...
忽然發覺這字型也滿好看的 Optima

可以整理一下,之前找到的一些,名字都不記得了
至於中文字型嘛... 太棘手了,先略過

2009-11-22

聯絡我

我順便說一下好了,或許這篇要置頂(底)...?

找我最快的方式是 email, 因為我醒著幾乎都掛在電腦前,
雖然沒用 email 通知的軟體,但常常在檢查。用 gmail 或
godfat.org 都行。________________
公司 email 也行,因為我所有信箱都開在 firefox tab 上,
都是同時檢查有沒有新的。所有的帳號都是 godfat...

每一封 email 除非進到 spam, 或是電子報,不然我都會看,
而且都會回。所以拜託我回的信也要看,曾經有人叫我回信,
結果他自己沒看我回信,老實講,很不爽。還是等到不耐煩打電話過去,
才知道他根本沒看回信。(那你幹嘛強調要我回信!浪費我時間...)

打電話給我沒問題,但接到的機率不高,
原則上除非我確定有急事也知道是誰,不然沒接到不會回撥。
而且如果我不在電腦前,只能接電話,
那接到電話我也不能幹嘛..... 所以拜託優先 email.
部份原因也是我不喜歡講電話,
而且電話告知的東西沒有記錄下來,查無對證這樣不好。

需要會面都沒問題。

大概就是這樣。除了上面那個叫我回信卻不看回信的事以外,
還有一個是不願意把事情寫到 issue tracker 上,
還質疑我會不會去看... 叫你寫到上面當然就是我都會看的意思啊!
真是昏倒....

桌布

其實我根本沒在用桌面了(電腦的),因為不知道為什麼,
我現在就是沒東西在桌面上... ~/Desktop 裡有東西,
但不會顯示出來。我記得自從用了 path finder 後就是這樣了。
沒差...

不過桌面的圖,嗯,我應該把歷年來的桌布整理一下的。
只是之前沒做,早就忘記有哪些。記得最早用過 StarCraft,
Red Alert 之類的遊戲圖。應該是 win95 時代吧。

中間一大段想不起來了。曾經有不用桌布過,就底色而已。

有用過 azu 漫畫大王的大阪,發出あ然後趴在桌上睡覺那張。
頭上有睡貓小睡貓... 如果我沒記錯啦。還有 gurumin 的。

至於 mac 時代嘛,用過大神的,還有之前畫的
ruby object model 那張。後來換成一張奇妙的火狐,
因為覺得畫得很好。其實不知道是不是火狐啦... XD
sengo 丟連結的,打哪來忘記了。

剛剛決定再換這張:
夏物語を待つものばかり
我非常喜歡這種上色和配色!
上面提到的奇妙火狐也有點類似這種風格。

也許可以找個時間翻翻老硬碟的圖,
或許能回想起之前曾經用過哪些桌布。

==
喔對了,順便貼幾張剛剛看到也覺得很好的
和風地霊殿
ごあんにゃいいたします 覺得質感不錯
ひびけジャイアントステップ 超華麗.......
荒野 讓我想到 Wrath of God...
滿可愛的
Halloween-Moon 這讓我想到志方那張 cd 封面 XD
南へ向かう 顏色不錯,變形很有趣
背景 糖果屋(誤
幻想郷ノスタルジア 有點像那個有寫個「雲」的遊戲?
金色廃墟
世界 這上色我也非常喜歡
旧市街・蛇の道通り

快昏倒了,停停停...

almost faint

快昏倒了,不過還是想寫一下
昨先到金鍵盤買了拔鍵器(謝謝 yen3 提醒 XD),
回來一試,果然厲害,一插下去就卡住,平行用力就能提上來。
除了 enter, shift 之類有三顆軸以外的,都很好拉。
比起之前用手暴力拉起來好太多了

順便看到了不少 filco 的鍵盤,連靜電的都看到了 @@
不過... 暫時沒空管那些吧

後來到了松山機場,果然有冒險的感覺啊
迷路也是一定要的 XD
莫名其妙富錦街就這樣斷掉,繞了好大一圈,
都不知道自己跑到哪了,才又莫名其妙接上來。
果然不能假設路都是直的,也不能假設轉個彎就能到。

感覺... 還滿清幽的。沒什麼人類,空氣也比較好。
吹吹風感覺不錯.. 路上經過一所小學,
加上一些旁邊的路人,又覺得好像回到很久以前似的。
現在太累了,很昏,想不太起來那時候還有些啥感覺.....

2009-11-21

rails 2.3.4 encoding bug

Encoding error in Ruby1.9 for templates

用 Hector E. Gomez Morales 的 patch,
不過改成這樣比較好:

source.force_encoding(Encoding.default_external) if
'1.9'.respond_to?(:force_encoding)

不要寫死 utf-8, 用 default_external,
utf-8 愛好者如我,當然是全設成 utf-8, 只是不要寫死...

這樣 rails 可能就能跑在 1.9 下了吧我猜?
你看到 2.3.4 都多久了,還有這麼嚴重的問題...

2009-11-20

2009-11-20

最近幾天心情 ok, 不過現在卻顯得焦躁,原因不明...

2009-11-19

heroku heroku (static file serving)

quite stupid, but.. that's it.

# special branch heroku for heroku specific stuffs
> git checkout -b heroku

# rack static file serving
> echo "use Rack::Static, :urls => ['/']
run lambda{ |dummy_never_called| }" > config.ru

# let's commit
> git add config.ru
> git commit -m '[config.ru] for heroku static file serving'

# start herokuing
> heroku create NAME

# push your heroku branch to heroku remote branch master
> git push heroku heroku:master

# stupid launchy, extra dependency...
> heroku open

agda front-end design thoughts

Hi,

由於我的時間比較零碎一點,暫時還沒辦法很有系統地
閱讀現有程式,並思索是否有個周詳的設計方式。所以
想在這邊丟一點想法出來,看看大家是否有什麼想法?

現在 agda 是用 emacs 做 front-end, 如果要跳脫這個模式,
似乎是得重新設計 front-end 與 back-end 的協定。
現在 http 正大力(誤),因此第一個浮現在腦裡的,
也就是把這樣的協定做在 http 上。極端一點,
就可以有個 browser based agda front-end, 用 browser
寫 agda 之類的。就像很多 virtual private server 的廠商,
也有提供跑在 browser 上的 terminal, 讓你就好像用
ssh client 登入你的 virtual server 那樣。

另一方面,如果做在 http 上,我會希望可以做在 Hack 上:
這是模仿 ruby 的 rack, 而 ruby 的 rack 則是模仿 python 的 wsgi.

他大概的想法是,由於我們可能會有各種 http server,
也會有各種 web framework/application, 因此如果要讓
所有的後者跑在所有的前者上,直接溝通會導致產生
n * m 種組合。但如果中間有個 hack 做橋接,http server
針對 hack 來寫,web framework/application 也針對
hack 來寫,這樣頂多就只需要 n + m 種組合即可。

整個 http request 進入後端的流程大概會像這樣:

request -> happstack -> happstack hack handler ->
hack -> web framework adapter -> web application

因此畫成圖可能會長成這樣:

http server A -> A handler -> hack -> web framework C adapter -> ...
http server B -> B handler _/ \_ web framework D adapter -> ...

其中 handler 和 adapter 的部份,如果 http server 或
framework 直接支援的話,就不需要額外寫。
同時,hack 的介面非常單純,一個 Application 就是:
  type Application = Env -> IO Response

Env 裡面記錄了 query path, query string, request method 等資訊。
最笨的 hello world application, 不管 request 什麼,都回傳 hello world,
只要寫這樣:(from Hack readme
  hello :: Application
hello = \env -> return $ Response
{ status = 200
, headers = [ ("Content-Type", "text/plain") ]
, body = pack "Hello World"
}

另一個重要的元件,則是 Middleware, type 是:
  type Middleware = Application -> Application

middleware 希望做到的是,像是 design pattern 中的
decorator pattern, 透明地讓 middleware 成為 application 的
任意組件。例如計算 Content-Length 的 application,
可以透過串接而使得原本的 application 不需要做此計算,
只需要組合即可享有自動計算 Content-Length 的能力。
  content_length :: Middleware

他會從 target 中抽出 IO Response, 然後根據 body 計算 bytes,
再把 Content-Length 加到 headers 中,最後再吐出去。

於是我們只要做各種 Middleware 和 Application,
即可達到非常理想的模組化程度。

介紹大概到這..

如果把 agda front-end 做到上面,大概會長什麼樣子呢?
例如:
  POST /session/begin

這樣告訴 agda front-end 需要一個新的 session,
如果允許的話,就給予一個有效的 session cookie.
  Set-Cookie: agda-session=a-random-session-id

client 得知 session 開始後,就可以開始 parse 檔案:
  PUT /agda/parse
Cookie: agda-session=a-random-session-id
...整個 agda 檔案內容

agda front-end 應該回傳什麼,需要看一下目前的資料格式...
後端的處理,或許大抵上可以這樣想:

1. 第一次收到 parse request 時,建立完整 parse tree
  data ParseTree = ...

2. 每一次 parse 完,建立完整資訊
  type ParseResult = (SourceCode, ParseTree)

3. 如果不是第一次 parse, 則做 delta parse
  source_diff :: SourceCode -> SourceCode -> SourceDiff
parse_delta :: ParseResult -> SourceDiff -> ParseResult

第一個 ParseResult 是上一次的 parse 結果,
藉此只針對有變動的部份做 parsing.
  parse_delta previousResult
(source_diff (fst previousResult) client_input)

不想玩時,則叫 agda front-end 釋放資源:
  POST /session/end

目前還沒細看 agda source code, 大概想到這裡。
有什麼想法嗎?

2009-11-18

estiah racing

覺得他 racing 的句子很有趣,按了幾場 random race 列出一些。
以 lexical order 排列。順手翻譯自己覺得比較有趣的。
當然,[] 請代入寵物的名字。

A cook abducted [] in a hurry.
A fireball was hurled at []'s direction.
A huge tree fell on [].
A hunter mistook [] for his prey.
[] began to stare at the shiny gold trophy.
(吸血跳蚤開始瞪著閃亮的黃金獎盃)
[] disliked the commotion around it.
[] failed to fuse with its persona
[] failed to transform into Super [].
(吸血跳蚤變身成超級吸血跳蚤失敗了)
[] fell asleep.
[] fell in love with the animal next to it.
[] finally exited the matrix
(吸血跳蚤最終離開了母體)
[] never understood the reason it was there in the first place.
(吸血跳蚤永遠不了解他為什麼會來到這個世上)
[] picked up a shiny coin on the ground for its master.
(吸血跳蚤為他的主人,在地上撿了一個閃亮的硬幣)
[] ran out of breath.
[] refused to run for its master's sake.
[] said something about its master's cruelty.
[] shouldn't have eaten those mushrooms on the way.
(吸血跳蚤不該吃掉路上的蘑菇)
[] slipped on a banana peel.
[] sought the answer to Death, Life and Everything.
(吸血跳蚤開始尋找死亡、生命、還有一切的答案)
[] started to dance.
[] started to meditate about life.
[] stopped in a sulk.
[] stopped to make traps for other runners.
(吸血跳蚤開始對其他跑者設陷阱)
[] stopped to re-evaluate its life's goals
(吸血跳蚤停了下來,並開始重新評估他生命的目標)
[] strayed from the course in search of food.
[] thinks playing is better than running.
[] thought it died for his honorable master's sake.
[] thought the sky was so beautiful.
(吸血跳蚤認為天空是如此的美麗)
[] tripped on its untied shoelaces.
[] wanted to run with scissors
[] was attracted by the cheers of the crowd.
[] was captured and forced to test make-up and perfumes
(吸血跳蚤被強迫抓去測試化妝品和香水)
[] was confident about winning the next day.
(吸血跳蚤對於下次的勝利非常有信心)
[] was distracted by a flower.
[] was foiled by the Roadrunner... again
[] was frozen by a frost spell.
[] was hit by a vicious blue shell.
[] was struck by lightning.
[] was sucked up into an improbable wormhole
[] was surrounded by a horde of monsters.
[] was too hungry to continue.
[] was trapped in a pitfall.


*

[] crossed the goal line under the crowd's applause.
[] finished the race gloriously.
[] proved justice would always prevail.
[] walked over the goal line in triumph.
[] was kicked over the goal line.

2009-11-17

perhaps it's a boring day and a sleepy night.
...enough of english.

一直用英文思考,還是不太順。
寫這種垃圾話還是要隨意一點...腦裡浮現什麼字就丟出什麼字。
雖然可能很對不起讀者.... 不過怎麼說,以前我不知道,
現在只覺得很虛幻,好像一切都是假的。

這真的講過太多次了,太多太多。但現在總覺得,
一來不是每個人都聽過,一來聽過也是會忘記的,
一來則是其實那只是一種省思而已,
一來這也可以當做是一種表達訓練,
一來心中想過和說過和或寫過其實都不一樣,
一來...

總是會被認為一直往自己要的路上走。
如果把層次拉高一點,或許確實是這樣沒有錯。
但如果降到森林裡去,我只看到無止盡的混亂...

不過我卻仍然不把這種事放在心上,
我不覺得相較於其他的事,這種事有比較重要。

可是最近真的不斷讓我思考這些事。
思考自己究竟該走哪條路,自己想要的生活究竟是什麼。
雖然或許那永遠也不會有答案-在現實裡的答案-
但卻仍然不斷迫使我去思索。
我不知道真正的動機是什麼,
也或許只是壓死駱駝的最後一根稻草,
畢竟,我渾渾噩噩的日子,又究竟過了多少年?
我甚至想不起來究竟又有什麼時候,我是清醒著。
永遠永遠,只是期待或不期待明天,然後投注在現在的一分一秒鐘。
甚至是偶爾的出神,好像不知道飄到什麼世界,
現實無法再引起我的任何注意之類...

最近 loop 了梶浦的 Seventh Heaven 很多次。

儘管很累很累,明天還要早起,還有一堆無聊繁瑣的事要做

也許想辦法適應這個世界,根本就不是一個我能走的路
又也許其他的路會有更多更險惡的陷阱(孔明的?)

離題了。思考著,這樣下去真的對嗎?
還是說,反正短暫片段的快樂還是有的,
例如每天打 estiah 的時候,因此其他時候,
根本就無所謂,這樣更能放開一切?

有時候不禁在想,是否痛苦時要想痛苦事,
才能因此覺得無所謂?快樂時也就不要沒事折磨自己了...
但這樣是否又變得更加虛假,所有的情緒都要偽造。

anyway, 真的要睡著了,再說吧...

2009-11-17

Ruby and UAO

~/p/g/ruby master> autoconf
~/p/g/ruby master> ./configure --prefix=~/...
~/p/g/ruby master> make
[...]
converter from Big5 to UTF-8
converter from UTF-8 to Big5
converter from Big5-HKSCS to UTF-8
converter from UTF-8 to Big5-HKSCS
converter from Big5-UAO to UTF-8
converter from UTF-8 to Big5-UAO
[...]

>> s = "\xA1u\xA6\xE6\xC6\xF7\xA1ILoki\xA1I\xA1v\xA1]rocky \xC7\xE9\xC7\xBF\xC7\xA9\xC6\xE3\xA1^\n"
>> puts s.force_encoding('big5-uao').encode('utf-8')
「行け!Loki!」(rocky ロッキー)
>> s = "\xA5\xCD\xA6\xBA\xA5h\x83S\xA1B\xB4\xD7\xC0Y\xB3\xC8\xC0w\xA1B\xA4@\xBDu\x8A\xCA\xAE\xC9\xA1B\xB8\xA8\xB8\xA8\xBDU\xBDU\n"
>> puts s.force_encoding('big5-uao').encode('utf-8')
生死去来、棚頭傀儡、一線断時、落落磊磊


More encoding (Big5 series) support?
Added by Lin Jen-Shin 123 days ago.
Updated about 6 hours ago.

big5-uao 和 big5-hkscs 都能用了。
~/p/g/r/install *master> bin/ruby -v
ruby 1.9.2dev (2009-11-17 trunk 25823) [x86_64-darwin10.2.0]

有機會看要怎麼樣藉此讓 ssh 直接連 ptt.

很無聊

不過平時確實一天到晚在聯想這種無聊笑話

Lin Jen-Shin:
四海遊龍 => 八方雲集 => 十六進位 => 三二位元 => 六四事件 => ?
about an hour ago

A: 果然是真常笑點
B: 真常笑啊 ~
A: 夠了
還2連發

不過這對話不是出自上面那個 XD

==
jaiyalas 應該最熟悉這個 XDD

V470 藍牙雷射鼠

對他除了已經習慣的 delay 問題外,另一點是電池實在很難裝。
有時候裝進去就是會卡住按鍵,使得按鍵變超緊很難按。
我曾經就這樣裝了好幾個小時不知道有沒有???
可是我應該沒那麼多耐心才是?

後來請 nana (007?) 幫我裝,他居然裝上癮了,還要拿去吃飯...

結果半路上居然就裝好了!?我試了一下,還真的對了。
james 說只要在中間壓一下就行了。

...
好厲害。後來我每一次裝電池,真的都是中間用力一壓就行了。
不需要再拆開,測試按鍵,拿出,重新裝入,測試按鍵,拆開...
重複到天荒地老。

真的只要一壓,他就自動定位耶....

特此留念。居然受到這麼不 geeky 的人指導 XD

2009-11-16

pagify for Innate

幾小時前上傳了 pagify 0.7.0, 加上了 Innate helper,
因此順便把一些相同的程式從 Rails helper 中抽出來。

用法非常單純,就 require 'pagify/helper/innate',
然後 controller/node 裡面加上 :pagify 就行了。
例如我用了這些 helper:

helper :xhtml, :form, :flash, :pagify

在 view 裡面就這樣用就好:
pagify_links(@comments)

我在想會不會把結構拆太細了,因為這邊其實套了兩個 helper.
一個是 html helper, 另一個是 innate helper,
前者處理 link 的產生,後者處理 page 與 uri 的問題。

程式也變得愈來愈慢,測試要跑的時間愈來愈長...
有時候會覺得這樣很恐怖。不過反正能動,而且看起來挺好的,
那就先這樣吧。效率的問題,page cache 比較重要對吧?

倒是我急著放出去,然後離開。結果文件都忘記更新.....
算了,反正也只有我在用而已 :/ 慢慢再補就好。

***

另一方面,Innate 的 render_file 不合我預期。
我找不到可以對應 Rails 的 render :partial
居然抓不到目前 action 的 instance variable.

翻翻程式碼..... 我講真的,Innate/Ramaze,
去查手冊,絕對比看程式碼還要慢 @@
Innate/Ramaze 程式碼太簡潔易懂了,看不用幾分鐘就懂了。
文件反而不見得會寫出你想知道的事。

看了幾分鐘就發現他有 sync_variables, 但是沒效果,
因為後面又有 action.variables = variables 蓋掉了。
想了一下,覺得不應該是這樣,就稍微改了一下,順手加上 spec,
噢他的 spec 超乾淨好懂,每個部份都是獨立分開的,
測試都非常簡潔,數量也不是很多。我想數量不多是因為,
行為本身都很單純,所以並不需要複雜的測試!

我 commit 了之後就 send pull request.
幾分鐘後發覺 variables.dup 很不必要,
因此再 commit 了一次,把他拿掉。但這次就沒
send pull request 了,避免 spam.

再幾分鐘後,我就看到 manveru 回應了,而且兩個 patch
都 merge 了。不需要我說,他自己會注意。同時也就是說,
到目前為止我替 Innate 寫的三個 patch, 全部都 merge 了,
而且時間差都非常短,尤其這次只有幾分鐘...

這讓我想到之前替 rubycas-server 寫了一堆 patch,
有 merge 的沒幾個,而且有些修正的 patch 他沒 merge...
這樣變成修一半,中文翻譯會有缺陷 :/
我應該有跟他講過才是,不知道他到底有沒有看到。

天差地遠,天差地遠....

manveru 真好(灑花)

看到這麼乾淨的程式,真自嘆不如 @@
比 DataMapper 或 Merb 都強很多,
但跟 Unicorn 比又是另一種不同的乾淨。
最欣賞的還是 Innate/Ramaze.

也許應該模仿一下他的架構的,
尤其我 test case 幾乎都亂寫的,超亂...... -__-

2009-11-15

銀魂筆記

這樣推薦比較快,畢竟我覺得良率不好... XD

100 話火鍋篇
229 話修行篇(教練篇)
237 話失眠篇

這三篇我都笑滿久的,尤其是後面兩篇。
失眠那篇我每次想到那畫面還是會忍不住笑.....
怎麼能那麼低能 XD

另一個是 274 話,murmur (13) 裡有提到,算是個人因素吧。

estiah skills

updated: 2009-11-15 18:28
順便加上 wiki 的 link, 程式是:

html.css('.skill').select{|s| s.css('.c2 strong')}.map{|s|
title = s.css('.c2 strong').text
link = '<a href="http://estiah.aswt.net/index.php?title='
sprintf('%-20s %-15s %s',
title,
s.css('.percent').text.strip,
s.css('.rank').text.strip).
gsub((title == '' ? /\A\Z/ : title),
"#{link}#{title.gsub(' ','_')}\">#{title}</a>") }


要展示 skills 給別人看滿麻煩的.. 我討厭一直抓圖 @@
隨手寫了個 ruby script 印出來。就把原始檔存在
skills.html 裡,然後用 nokogiri 去 parse,
css selector 抓出想要的內容:
>> html = Nokogiri::HTML.parse(File.read('skills.html'))
>> puts html.css('.skill').select{|s| s.css('.c2 strong')}.
map{|s| sprintf('%-20s %-15s %s',
s.css('.c2 strong').text,
s.css('.percent').text.strip,
s.css('.rank').text.strip) }
Rank
Twin Blades mastered 2
Lightning mastered 2
Spear 156/180 2
Ward 142/180 2
Armor 139/180 2
Holy 87/180 2
Frost 49/180 2
Sword 22/180 2
Fire 18/180 2
Mace 13/180 2
Balance mastered 1
Empowerment mastered 1
Self Defense mastered 1
Tactician mastered 1
Heroism 80/100 1
Survival 78/100 1
Earth 49/100 1
Cheat Death 40/100 1
Sap 30/100 1
Leadership 29/100 1
Spirituality 24/100 1
Quickness 20/100 1
Fist Weapons 17/100 1
Burst 15/100 1
Shadow 14/100 1
Destruction 6/100 1
Defender 3/100 1
Axe 1/100 1
Rank
Animal Friendship 24/220 3
Horse Riding mastered 2
Animal Tamer 70/180 2
Animal Raising 80/100 1
Mentoring 36/100 1
Shop Management 18/100 1
First Aid 7/100 1
Appraisal 6/100 1
Bargain 6/100 1
Rank
Herbalist 108/180 2
Condenser 72/180 2
Miner 36/180 2
Extreme Condenser 24/180 2
Logger 24/180 2
Treasure Hunter mastered 1
Explorer 96/100 1
Extreme Logger 44/100 1
Extreme Miner 40/100 1
Extreme Herbalist 24/100 1
Rank
Sewer Cleaner mastered 1
Spirit Appeaser 24/100 1
Element Soother 18/100 1
Golem Crusher 10/100 1
Pumpkin Delice 5/100 1

尋找問題

日前聽到尋找問題,而非答案,並不是很放在心上。
因為印象中類似的說法聽過滿多次了。

不過剛剛在 ptt Java 板看到 AmosYang 所說的(#1A_pc1o8):

在我的觀念裡,許多人說 OOP 好難懂、 calculous 好難懂、 pointer 好難懂 …
是因為他們還沒有真正遇到需要用到這些工具的問題
一般來說,鑽研工具本身對了解問題的本質並沒有太大的幫助

忽然間回想起自己以前讀 Design Patterns, 真的是每字每句
都看得懂,但全部看過去,不明白為什麼要這樣做,不明白這樣做
能換到什麼,不明白這樣的東西有何價值。

強自去套 pattern, 然後宣稱有 pattern 這種事就別提了。

但後來回過頭再來看時,忽然間就覺得有些作法極其漂亮,
甚至是,有些本來自己就有在用了,只是並沒有給他一個名字,
並沒有把這件事當成一個 pattern 在用,只是一種模糊的概念。

有時候也會覺得,強分這些 pattern 並不是真的很有意義。
例如 template method, factory method, abstract factory,
strategy, state, blah blah, 總覺得概念上其實是相近的,
不需要特別說有這麼多種,也並不是有一個唯一的定義。

或許應該要整理出來的是問題,而非答案。
以答案去尋求問題,似乎本末倒置。

The Hitchhiker's Guide to the Galaxy 裡的最終答案,
找到了答案,卻不知道問題,總覺得也是在嘲諷這種現象。

也許 Monad 也是如此。一直在看 Monad 的定義與作法,
恐怕會迷失掉吧...

On Understanding Data Abstraction (0)

William Cook: 物件 v.s. 抽象資料型別
William Cook 談物件導向與抽象資料型別

全文在這
On Understanding Data Abstraction, Revisited

對這樣的主題很感興趣,一直想細讀,剛剛才找到機會翻了一下前面。
明天希望可以把他看完。怎麼說,我覺得這篇可以把 OO 那套,
跟 functional programming 的 ADT 做出很漂亮的連結。
這應該可以解答很多我以前想過,與不曾想過的疑問。

insightful, i would say

==
看完時講心得

2009-11-14

2009-11-14

為這樣的現實感到悲傷,然而卻也只能活在這樣的現實中
掙扎著等待時間流逝,不知不覺間又有更多的事實誕生
但求一時三刻的心安

2009-11-12

我覺得

今次不早睡,定要仆街了??

重灌筆記 (4)

除了需要 rm 掉
/System/Library/LaunchDaemons/com.apple.audio.coreaudiod.plist
外,還需要 rm 掉
~/Library/Preferences/com.apple.systemuiserver.plist
這樣可以修好 Exposé 超 lag 的問題...
雖然覺得還是不夠順,但比之前那樣昏倒的狀況好太多了。
我還滿仰賴這個功能,所以這個修復滿重要的。

感謝小叮噹常常幫我找到解決怪問題的方法 XDD

另一方面前幾天試 sshd, 終於搞到可以登入了。
不過需要額外設兩個奇怪的設定...
說是奇怪當然是因為我不懂為什麼。

UsePAM yes
ChallengeResponseAuthentication no

這樣就終於可以遠端登入我的 macbook 了 :/
之前不能這樣做,有些東西要弄就很麻煩。

2009-11-11

xterm-256color

這真的是沒事自找麻煩 @@" 花一堆時間,又要晚睡了... :(
翻到 yen3 的 Mac OSX Terminal 256 color,
稍微試了一下,發現 Terminal.app 應該不支援 256 色。
所以重抓回 iTerm.app 試試,發覺可以用這樣。
於是想說看能不能乾脆就切「回去」用 iTerm 算了?

噫,總之幾個問題:

1. margin 不太夠,最下面一行貼到邊框上了,調不開
2. 字的 spacing 也不太夠,但是調大又會變太大 =_=
3. window title 不能依據 current process 調整?
4. 顏色太亮了...
5. 按鍵缺乏 ctrl + 左右,以 word 為單位移動游標
6. cmd + shift + [] 不能切左右 tab

最後三項可以靠修改設定達成。參考這個:
Word Movement in iTerm on OS X

ctrl + cursor left 設 send escape sequence `b'
ctrl + cursor right 設 send escape sequence `f'
然後 High interception 要打勾,原因不清楚,懶得追究。

切 tab 那個就依樣畫狐狸:
cmd + shift + hex code 0x7b 設 previous tab
cmd + shift + hex code 0x7d 設 next tab
hex code 用 irb 分別看:
'{'.ord.to_s 16 # => '7b'
'}'.ord.to_s 16 # => '7d'

顏色... 用他的滴管功能,抽取 Terminal.app 的顏色 :/
bold 的顏色就不管了,先不管啦。
黑色是 000000
紅色是 993333
綠色是 339933
黃色是 999933
藍色是 3333CC
桃色是 993399
cyan 是 669999
前景是 CCCCCC

看看能不能跟 twilight theme 整合?
希望以後就固定都用同一種風格這樣。
晚點看看 vim 256 color 能不能弄到類似 twilight.
先這樣 iTerm 用一陣子看看效果如何。

==
工欲善其事 :/

簡稱塔烏瑪塔

塔烏瑪塔法卡塔尼哈娜可阿烏阿烏歐塔瑪提亞坡凱費努啊奇塔娜塔胡
蘭韋爾普爾古因吉爾戈格里惠爾恩德羅布爾蘭蒂西利奧戈戈戈赫
啊啦啦吧喇紮紮咧哩囉哩咧...

2009-11-10

consideration (2) + git config

bah, 後來東摸西摸之後感覺好多了,真蠢。
可以的話真不想管這種事。不過也沒想到引來不少詢問 @@"

然後時間快到可以走人的時間,就會開始浮躁,
這種狀況下很難做點什麼,因為不專心。
但是一想到回去之後可以專心處理,就覺得比較心安。
什麼鬼。我看這裡根本就變成焦躁之源了 :(

這樣對嗎這樣對嗎...
根本是本末倒置吧。

*

另外翻了一下 git config 的一些設定,
感覺又多出一些選項可以設,真好!
git 進化速度真的很快,而且都是新功能,
不是改變,意味著之前的東西都不用改。
能做到這樣,感覺也滿神奇的。
畢竟會需要 migrate 這種事,通常是一天到晚會發生的。
在開發快速的軟體之中。

lib/source-tools/templates/t.gitconfig.erb

把 diff.renames 改成 copy, 這樣除了偵測 rename 外,
也能偵測 copy. 例如把一個檔案 copy 到多處,
在 diff 下可以顯示 copy, 而不是給你一堆 ++++++

push.default 改成 tracking, 因為 matching 可能
太過暴力,只要同名就算?tracking 應該保險些,
需要手動說明要 track 哪些,而且也能用不同名 branch.
不過我想不到不同名 branch 有哪些好處。

merge.log 改成 true, 這樣 merge log 中,
就不會只顯示 merge, 還會把其他 commit log 彙整起來。
我覺得這很重要,因為一堆 merge commit 很難懂。
有 summary 就能比較明白看出 merge 之間的關係。

早就該開這個的,現在才開希望不會太遲...
之前的應該沒辦法補救吧?

consideration

我是不是該想想下一步該怎麼做了。
事情總不會有想像中的那麼好。

==
難道又會是我的錯嗎? :(

==
只是我真的覺得沒什麼誠意,
很久了,結果還是跟當初差不多。
不簽也不講,現在人又不在是要我怎樣...
從多久以前就該說些什麼吧?

2009-11-09

HFS+ case-sensitive

format 成 HFS+ case-sensitive 的契機是發現
require 'rmagick' 在我的電腦上會動,但是在 linux 上否。
而追查半天之後,才發覺應該是 require 'RMagick',
因為他是 RMagick.so 啊!

終於重灌 10.6 後,format 成這個格式讓我很高興。
這樣按 tab complete 也不會跳出一堆錯誤 case 的 candidates...

結果卻被 Adobe 打了一拳。

Can't install Adobe Creative Suite to
case-sensitive HFS+ formatted hard drive (Mac OS)

這篇是非常官腔的說法,就跟你說不支援,叫你換硬碟...
而且不支援的原因是沒有測試過???這太蠢了吧?
測試一下有很難?沒測過難道又會有問題??
是你寫程式都寫 require 'rmagick'
然後希望等同於 require 'RMagick' 嗎??

case-sensitive filesystems
這篇總算是有一點回應。看來簡單地說就是暫時沒辦法。
什麼鬼 orz
看來得要有「永遠」不支援的心理準備囉..?

roodo-rc (3)

Let's get back to work now...

`roodo-rc' should control all resources for
all other projects, a central resource control.
Here we say resource means a config, an image,
an installing script, and all other things do not
directly relate to the containing project.

The structure of this repository should be
something like the following:
(Demoed projects are `cas' and `photo')

+-.bashrc
+-.profile
+-.gemrc
+-.git/*
+-.gitconfig
+-.ssh/
| +-authorized_keys # Contains all public keys of devs
| +-id_rsa
| +-id_rsa.pub
| +-known_hosts # github...
+-bin/
| +-cas/
| | +-remote_install.sh
| | +-remote_update.sh
| +-photo/
| | +-remote_install.sh
| | +-remote_update.sh
| +-install.sh
| +-start.sh
| +-update.sh
+-config/
| +-cas/
| | +-cas.yaml
| | +-nginx.conf
| +-photo/
| | +-database.yml
| | +-facebooker.yml
| | +-mogilefs.yaml
| | +-nginx.conf
| | +-stomp.yaml
| | +-style.yaml
| +-memcache.yaml
| +-mime.types
+-install.rb

And the containing project's structure should be
something like the following:
+-.git/*
+-.gitignore
+-.gitmouldes
+-.mailmap
+-roodo-rc/*
+-*

To build a fresh service project,
get a fresh cloned `roodo-rc' repository first.
Your developing computer should consist of following:
+-/home/godfat/
| +-.gitconfig
| +-.ssh/
| | +-id_rsa
| | +-id_rsa.pub
| | +-known_hosts
| +-project/
| +-cas/*
| +-photo/*
| +-roodo-rc/*
+-*

Let's suppose you are creating a project named
`warm_fuzzy_thing', you have to do the following:
~> cd ~/project
~/project> mkdir warm_fuzzy_thing
~/project> cd warm_fuzzy_thing
~/p/warm_fuzzy_thing> git init

~/p/w> git submodule add ../roodo-rc roodo-rc
# Note: Perhaps you have to fix repo path yourself
# by editing .gitmodules' path to file://../roodo-rc
# I don't know why git cannot work with this properly

~/p/w> git submodule init
~/p/w> git submodule update
~/p/w> cd roodo-rc
~/p/w/r> git checkout -b your_testing_config_branch \
--track your_testing_config_branch
~/p/w/r> cd ..

~/p/w> ./roodo-rc/install.rb warm_fuzzy_thing
# This should create all symbolic links for you
# according to your project name. For instance:
# ~/p/w> ln -s roodo-rc/bin/warm_fuzzy_thing bin
# ~/p/w> ln -s roodo-rc/.gemrc .gemrc
# ~/p/w> ln -s roodo-rc/.vimrc .vimrc
# and specific config file e.g. database.yml
# and cp roodo-rc/.ssh/* to .ssh/*
# This is because ssh won't work for symbolic link.
# ~/p/w> chmod 700 ssh
# ~/p/w> chmod 600 ssh/id_rsa
# Since git lacking file modes other than 644/755
~/p/w> git add .
~/p/w> git status # check if anything is ok
~/p/w> git commit

Whenever `roodo-rc' updated, you would do the following:
~/p/w> cd roodo-rc
~/p/w/roodo-rc> git pull
~/p/w/roodo-rc> cd ..
~/p/w> ./roodo-rc/install.rb # re-install again
~/p/w> git add . # update submodule and others
~/p/w> git status # check if anything is ok
~/p/w> git commit

`roodo-rc' should be maintained by release manager,
with the help with all other project developers.
As a result, application developers shall concentrate
on their projects and forget about deployment and
any releasing and versioning issue. And now we
could only use `master' branch and `stable' branches
only, without thinking about testing branch.
Create testing branch config in roodo-rc instead.
You don't have to share your local `roodo-rc'
testing branch too.

These should make releasing smoother and less-buggy,
and more controllable and manageable.

Comments welcome...

I do really hate the mess currently we have.
It is growing out of control... annoying, really.

也忘記在做什麼事,下午開始就覺得很想睡...
唔,可能是在整理 github 上的 ruby projects 吧。
上傳了 key_diff, xml_option, 寫了點 testings,
README, 還有更新了日期。

之前很多的東西 README 上是寫 2008, 但早就是 2009 了...
修改時才忽然在想,原來我寫這些東西也一年多了啊。
不過事實上也只有剛開始做時寫比較多,後來都無心去維護。
如果可以,我還滿想專注在這些上。不過在講求快速有功能的地方,
我想這恐怕也是不可能的。

大約七點(十九)左右,發覺難以再思考,都在打瞌睡了,
就跑去洗澡睡覺了...



後來被吵得要死。



有時候想到這裡,就會希望搬到比較安靜的地方。
一路醒醒睡睡到可能是凌晨吧?其實過程還滿苦的。
我居然夢到跑去叫他們安靜點。穿著睡衣爬起來,
連眼鏡都懶得戴了。一拉開門,看著傻眼的一群人。
關上門。再打開門,補充大聲一點無妨,但不要突然大叫之類的。

然後再醒來後,想想我怎麼會做這種事,愣個幾秒,
才意會到其實是做夢。

後來也有一次類似的事,也是在睡夢中做著現實的事。
不過是什麼事我居然忘記了。還有約一兩點時,
外面忽然發出一個很巨大的聲音,就被驚醒了。
但也就這麼一聲,也不知道是不是真有這個聲音,
還是只是自己幻聽,害怕那種半夜房子倒了之類的事。

中間一直在想我會不會因此而爬起來打電腦。

不過大概是因為真的很累,所以儘管一直在醒醒睡睡,
也覺得有點頭痛,仍然是睡到六七點,然後想著就睡到該起來吧。
結果總共大約睡了十四小時。雖然實際上真的有用上的時間是多少,
恐怕沒有人知道吧。

但我現在又有點想睡了...

看到被扣錢 915, 心裡還是覺得很不是滋味。
那我還是光明正大地做起其他事好了?心裡這樣想著。
換個角度,我也不是很希望看起別的東西,
心中還要覺得不安。所以藉此試著更安心些,或許也好。

所以來看 monad 吧(誤)

2009-11-08

The Present of D (2)

呃,跟 D 已經沒有關係了。無意間翻到鳳的另一篇:
Why? Such me.

這篇談到了 _why 的消失。怎麼說呢... 想引用這段:

but when one resurfaces, one brings newly
dived/drived/derived wisdom from other worlds
-- underworlds -- as well.

我也在思索我會不會消失的可能。
或許以前會,但現在想不到理由了。應該是說,
不需要特別把足跡抹掉。雖然我確實曾經幹過不少次。

另一方面。我向來不覺得自己有偶像崇拜,或是說討厭這樣。
但自從從 CSSE 看到一些東西,再加上後來亂看一通,
覺得自己倒不知不覺間有了些偶像崇拜。也不認為這是件壞事。

題外話,每次提到偶像崇拜,就會想到攻殼第一部裡的第七話標題:

〈偶像崇拝 IDOLATER〉

雖然我完全想不起來內容是什麼。
總之。看多了真的不免會有偶像崇拜。
又尤其在網路上,真的要去接觸他們絕對不是不行的。

不過我向來是個旁觀者,自閉者就是了。
像這樣遠遠望著並思索,或許就是一切了。

==
其實從網路上消失也無濟於事就是了
搞不好這才是主因?

2009-11-07

美乃滋章魚燒

日前在 github 上看到鳳上傳了之前的 perl 文言文程式。
猶豫了一下,但還是按下了 watch. 猶豫的原因是總覺得可能不會更新,
只是把他上傳上來而已。不過想來還是當個記錄,就按下了 watch.

不料更新了滿多次了。
其中一次看到 commit message 寫:

* Add dialogue with 美乃滋章魚燒.

讓我感到很困惑,在想這是在影射什麼嗎?
(後來才知道原來這是一個人....)
再加上 Changes 裡加上了一段神秘的文字。

一時三刻看不太出來是指什麼,但總覺得好像說了什麼,
就這樣讓這個 commit 留在 firefox 的 tab 上幾天。

在我找到時間細讀之前,又在 CSSE 裡看到了連結。

心慟凡例 / An Instance of Sinthome

再加上 CSSE 裡的那句話:
「昨天我同事問我能不能將<我的電腦探索>
裡面<十年鑄一劍,今請攖其鋒>譯成英文。」

我想短短這些文字中,應該確實說了很多事。
非常好奇,不過我想我是看不懂。
儘管我不知道這跟 perl 文言文有什麼關係,
或是說這段話是寫這樣東西的原因?

總而言之,其中一個連結是:
遊戲與現實 Playing and Reality
我想弄來看看。雖然說該死的博客來上本書還沒寄給我......
just a random talk/thought 裡提到的 Gödel, Escher, Bach
可笑的是過一段時間博客來就會寄來一封信,
裡面寫著「有給你的新訊息!請來網站上看」
然後不耐煩地算出博客來的密碼,用 safari 登入之後,
看到上面寫著「調貨中」,就這樣重複個四五次。

搞到現在我對博客來覺得有點火大。
調貨中不用每隔幾天,就 email 過來叫我登入去看「調貨中」三個字吧?

總而言之...
就這樣大概記錄一下有機會想參考一下的東西。

Reader Monad (3)

有點不專心地決定 Reader Monad 差不多可以了 @@"
說是有點不專心是因為沒有實際演練,而且一直同時在做別的事。
有時候會覺得 inspect 有沒有懂這件事,並不是那麼容易。
更何況,未來有一天發現之前誤解了一部份的這種事,其實也是常常發生。
所以有時候也確實不用執著於是否完全懂了。

另一方面,後來有種豁然開朗的感覺。不明白之前在不懂什麼。
見樹不見林也是很麻煩的事。發現卡住時,應該要立刻切換角度才對。

非常感謝 jinjing 和 scm 在 Reader Monad (2) 的解釋,
尤其是後者的推衍。唔,也許是我太懶,應該自己手動展開和化簡。
畢竟說來 purely functional 本來就是應該這樣看的不是嗎?
或許是我太執著於希望見林而不願見樹...? 總之大概寫一下目前的心得。

上篇的 comment 中提到我有兩個盲點。
是當時隔天早上搭車時忽然間想到的。
第一點是我忘記了 bind (>>=) 的 type 是:

(>>=) :: (Monad m) => m a -> (a -> m b) -> m b

重點是一開始是 m a, 但後面是 m b,
也就是說 a 和 b 的 type 不見得要一樣。
但在測試的 resolve :: Tem -> Reader Env String 中,
我一直把他想成每一個 bound function 的 return type 都
必須是: `Reader Env String'

然而實際上應該是最後一個 bound function 是就好了。
在這一段時: val <- asks (lookupVar name)
實際上應該是 Reader Env (Maybe String)

也就是說 Reader Monad 中 Reader Env 是不變,
原本的 Env 只會被一直傳下去,似乎沒有去動到他的機會?
r >>= f >>= g
= \e -> f (r e) e >>= g
= \e -> g ((\e -> f (r e) e) e) e
呃,不知道有沒有展開正確,總之這樣看起來 e 確實不會變。

*

第二個盲點是我搞錯 Reader Env String 的 type,
我一直把他想成是擁有兩個值的 data, 類似 pair 那樣。
但實際上 Reader Env String 的 type 應該是 Env -> String.

只要想到這裡就能知道為什麼 ask 在 MonadReader 下就只是 id.
這邊應該會形成一個 Reader Env Env, 因此他的 bound function
才會接收到 env, 而不是原本的 String.

asks 就只是另一個包裝,應該不用額外理解。

*

可能真的是多個 Reader 的 data constructor 就變得比較難懂。
如果是這樣我覺得這說明了兩件事:
1. 雜音確實是會干擾的,再小的雜音都不要小看
2. 我還不熟悉 Haskell 的 Class 和 Instance

也或許是因為物件導向的關係,想到 Class 很容易就想錯邊。
其實這應該也算某種程度的雜音吧...?

==
還不清楚 local 是什麼,晚點看
不過倒是覺得到這裡,monad 真的多懂很多了

2009-11-06

2009-11-06

承上 murmur (27)
好吧,其實沒有關係,我只是想說有更新內容而已。
因為總覺得那篇沒寫完,然後我也懶得繼續寫了。
反正類似的 murmur 都寫了那麼多年了,意思都差不多。
我覺得
我的環境本質上還是差不多的。
不過外部狀況的改變,倒是一直都有,或許也不小。
像是我覺得很高興又可以變得有「忙碌」的感覺,
而不是那種,很難形容... 簡單地用描述的話,
就是你會覺得花了很多時間,沒什麼空閒做休閒,
但卻仍然沒有做什麼事,然後還有很多事該做,
然後也一點都不想做什麼事.....

這種狀況是很沉悶而難受的。
唔,倒還不會想用痛苦來形容,
因為總覺得痛苦才真的是痛苦。
而那比較接近本質的問題。

於是,很多東西真的就只是很多東西的延伸罷了
想到這,就會一直想到 jserv 所說的高中生
也許我什麼也改不了也說不定
至少到目前為止都是這樣
或是說,繞圈圈打轉之類的

*

明天一定要完全解決 Reader Monad !!!!!!
然後大致看一下 Monad Transformer,
接著就要來細看 Agda source code 了。
i wonder if this would succeed,
but i am so familiar with failure you know...

*

對不起我英文不好,只能讀,寫勉強,聽不大懂,說不出來。
總覺得跟以前差好多...... 遊戲少打之後,聽力真的變弱好多。
以前聽是裡面最熟的說...

*

我覺得
良好的環境比什麼都重要
因為那就像基礎建設一樣
有了他,其他東西才比較容易談意義
否則很容易就會變成空泛的假設
而士氣是這裡面很重要的一個部份

改變環境真的很難,尤其對我來說
換一個環境真的是輕鬆愉快太多,太多了...

我仍然想不到一個良好的方法去改善
行之多年的事從來就不是容易改善的
就像老林所說的臭水溝事件 XDDDDDD

但是,一直換環境也不是辦法,是吧?
所以我覺得無論如何還是個需要去面對的課題

*

我不懂 非死不可 肥死不可 facebook
真的一點都不懂。
裡面的很多東西,大部份的東西,都跟我的想法有很大的差異。
但他很紅,而且紅到不可思議,還一直在成長,卻是事實。

不過也罷啦,反正一直是這樣不是嗎...

==
其實這篇是 murmur
不過一天一次打完的,我想用日期當標題

murmur (27)

早上起來覺得有點不舒服
另一方面,覺得好像什麼卡住了
...晚點再講

updated: 2009-11-06 23:30
不知道該從何處講起
總之感覺又是那個拿忙碌來灌腦的日子
無論如何,比無止盡的空虛要來得好就是了

但是當一回過神思索自己的事時
就會覺得好像有什麼不見了
努力想回想起什麼
卻什麼也沒有,或是隱隱約約有什麼
好像被什麼東西阻斷似的

2009-11-05

我覺得我真的只能說

一個人處理一個 service 就夠扯了,
一個人要同時處理一大堆是要怎麼搞 @@

現在連我都想隨便亂測了.......

不過新會員終於可以用朋友了(灑花)

> git tag 2009-11-05-new-member-ok

留念一下 =_=

==
不過我覺得還有一堆地雷.........
雖然有些可能是永遠的未爆彈

bah 好啦隨便弄就隨便弄 orz
這樣才不會搞到最後覺得有什麼遺憾,
因為爆炸是很正常的事呀(遠目)

murmur (26)

2009-11-05 10:50
1. a little better now, with getting up later
2. 每天起來都可以看一堆新訊息覺得很幸福(?)

3. github 居然換版面了,好不習慣啊 @@
是給大螢幕用的嗎?沒有全展開在我的小螢幕上有點擁擠.......

4. 居然到現在還沒看 Reader Monad :(
看來我該安排一下時間,不然光處理其他的就晚了

5. 真真是什麼,我還假假虛虛實實咧.....

2009-11-05 12:00
6. 噫,事情好多,不寫了

2009-11-04

rubycas-server

rubycas-server
我決定正式不考慮提供 patch 給 mainstream 了。
理由如下:

1. 作者動作太慢
2. 原本的程式很亂,下略三萬字... 要維持這種結構,
又要改善程式,難也!不如徹底整頓算了。
3. 作者接受 patch 的比例不是很高

所以我要正式開始大動手術了...
roadmap:

1. refactor (this would be a huge work)
2. remove ActiveSupport dependency
3. provide DataMapper as an alternate to ActiveRecord
4. fix hoe dependency (update or remove)
5. remove newgem dependency (which depends on
SO MANY GEMS, including RedCloth!!!)
6. remove picnic dependency
7. migrate from camping to rack or ramaze
8. etc.

參考:
Poor Authenticator Design
Authenticator setup re-design. See below for detail:

醒來時很焦躁地滾了一陣子。

眼睛覺得有點疲倦。

每天簽時間我不會被煩死嗎...
結果一不小心就把別人桌角拔了一塊下來 @@"
幸好試了一下就知道要怎麼裝回去。

也許是脫軌太久,要重回軌道好像很困難 :(
像之前完全不管好像就還好。

總覺得是從稍微晚到一兩分鐘後開始的。

想到這裡,不免

2009-11-03

The Present of D

ptt PLT 板上看到的。也真的很久沒注意 D 的消息了。

The Present of D

覺得滿意外的,所以想細看多講一些,不過看來是沒有時間...
所以就隨便筆記一下就好了。首先是沒想到 D 的支持者還不少,
而且也算是對他抱有相當不小的期待。

另一方面則是沒想到 D 沒發展起來,居然是因為困難重重?
我一直以為是沒什麼心,或是沒被夠多人看好。

最意外的一點倒是 Walter Bright 居然雇用 Andrei Alexandrescu @@
我真的不知道 Digital Mars 到底在幹嘛的?很賺錢?
除了 Walter Bright 本身還有別人嗎??

以前看 comp.lang.c++.moderated 時,Walter 和 Andrei 的
信件都看過不少了。有時候真的會覺得他們的時間遠多過一般人?
可以寫這麼多這麼多的信件討論,又能做這麼多東西 @@
尤其是 Walter, 感覺整個 DMD 都是他一個人在寫。
雖然我想這也是 D 沒發展起來很大的一個原因之一,
原本的開發模式真的太封閉了。

而 Andrei Alexandrescu 居然快寫完 The D Programming Language
一書 @@ 居然要出書,看來是打算把這本當 spec 和推廣用吧?
以 Andrei 的名氣,我想這招應該是滿有用的沒錯。
會覺得 Andrei 在上面投注這麼多心血而感到意外,
是因為當時有看到他批評 Walter 對 D 的設計,
沒有自己的東西,只是一味去學習與模仿別人的設計。

結果現在倒是變成 Andrei 跟 Walter 一起在開發與設計 D,
而且既然要出書,應該不是玩玩而已吧?
這次要是再不成功,我想 D 應該也不會再有機會了。

討論非常多,有機會想翻一下,看看 D 的開發史...
The state of D programming. Is this situation accurate?!

裡面有一段 Andrei 提到他的其中一篇發言,終於使得寫
The Present of D 的作者 Jarrett Billingsley 決定離開。
Re: dmd support for IDEs
這一篇,而產生出這一篇:
digitalmars.D - Goodbye

呃,Andrei 有時候說話真的尖銳了一點,
而且有些是用暗示的方式去諷刺。很多用字我也看不懂 @@
還要一直查字典... 囧。單就用字有時候很特殊的話,
why the lucky stiff 倒也是這樣。

唔我剛剛才發現 why 在 wikipedia 上居然也有一頁。
他應該還滿活躍的,之前在 github 上 follower 記得有七百多?
是我看過最多的「人」。(rails 不是人,DHH 多少忘了,不在意)
而且有一堆 open source projects 是他開始的,
ruby 的 yaml 也是他寫的,只是後來沒維護了。
他的網站也很有趣,有些怪東西,還有一堆看不懂的漫畫。
(我猜是文化的關係,太地方性了所以看不懂)

wikipedia 上提到,他居然在 twitter 和 github 上自殺 @@
然後有人做 mirror....... =_=b
這個,我是覺得他本人既然要這樣,做 mirror 似乎不是很妥當。
anyway... 真的有問題應該也會有人出來阻止就是了。

我記得我在有用 twitter 的那幾天,還看到 why 有發言。
他說的記得大意是他迷失在他自己建造的迷宮(labyrinth)之類的?
難道那是跡象嗎? @@ 那我還正好有看到他最後幾句話哩?
也怪不得 Matz 在 ruby-core 上是說 _why is missing,
而不是說 why 沒有打算再維護了。而是真的在講 missing...
我就覺得奇怪,就算不打算再維護,說 missing 好像不是很妥當。

能說什麼呢。總之也是奇人一個。

扯遠了... 他們共通點就是常常用我需要查字典的字 XD
然後應該都是名人,不用說程式也都寫得很好。

回主題,Andrei 有時候說話確實不是很柔順,
不過因為這點而要離開,也想必是最後一根稻草。
Andrei 說這是誤會,我想誤會是有的,但應該也不單是這樣。
D 的開發看來還是有很長的路要走,Andrei 和 Walter 究竟
能不能做起來,慢慢等吧 :/ 還要幾年應該跑不掉。

我倒是希望能直接做到 LLVM 上,反正 GDC, DMD 都有問題不是?

p.s. Walter 說 8 年在這行叫做 eternity,
而 Modern C++ Design 這本書,居然還能繼續賣。
我並不想神化此書,但此書看來確實影響不小。
這時我都會想起 reader 那句話:
「當人們把僅僅是模式字典的 Design Patterns, 當作是唯一的
經典時,在你翻開書之前,你已經誤讀了。」(原文參考以下:)
#11ru12dM (CSSE) [ptt.cc] [心得] 走火入魔的 design patter

==
天,我不是說只要稍微筆記

ramaze testing for all 200 OK

日前聽到一個 controller testing 的說法,想想好像滿有道理的。
就是其實也不用寫很細,每一個 URI 都 GET 得一個 200 OK 就好。

這不用花多少功夫,但至少不小心改壞什麼,馬上就會知道,
也不用自己再一個個去看,也不需要用 watir 之類的東西...
詳細且完整的測試,非常耗費時間和功夫,對於經常需要修改,
變動規格的 controller 而言,做完整測試只是在浪費時間而已。

曾經寫過一些,結果發現一天規格變動一次,testing 重寫,
真的是會搞到翻桌。不過如果只是確保能回傳 200 OK,
那倒不是什麼問題,因為這牽涉到流程,比較不會修改,
更何況其實所有的 URI 應該是有辦法自動抓出,不用自己列。

當然,form 之類的 POST request 可能沒辦法測,
但現在所要的,本來就是最簡單,最省力的測試。

0% => 5% 其實也是很大的進步...

ramaze 在這點倒是還真簡單,我才看了幾分鐘而已 @@
拿他 prototype 裡面的 spec/main.rb 去改的。
這邊是在說,取出所有有 template 的 action,
藉此除去 POST action. POST action 絕對不會有 view, 是吧?

def gat uri
get("/festival-of-light#{uri}")
end

def test uri, data
gat(uri).status.should == 200
last_response['Content-Type'].should == 'text/html'
last_response.should =~ data
end

def yellow s
"\033[1;33m#{s}\033[0m"
end

MainController.update_template_mappings # prepare
MainController.update_method_arities.keys.select{ |name|
MainController.find_view(name, 'html')
}.each{ |action|
should sprintf(yellow('%-8s '), action) do
test("/#{action}", /<title>光祭 2009 | 城市之光‧從角落亮起來<\/title>/)
end
}

而經過這次的一些 ramaze 實驗,我發現確實重點都在 innate,
ramaze 快要可以說只是一個 simple wrapper, for helper,
trait 之類的輔助用具。因此寫簡單的程式,其實用 innate 應該也行。

不過這不是重點。重點是 innate/ramaze 的模組化真的做得很好。
在 rails, 其實程式怎麼跑,你很難有什麼概念,除非你願意走入
rails source code 的 labyrinth 裡面。對不起,我放棄了 @@
曾經打算這樣過,但裡面太可怕了。

merb 其實是 better rails, 原則上他跟 rails 很接近。
rails 3 我暫時假設成 better merb, 至於 better 到哪,
等他正式推出時再看看。

然而 ramaze 在 每 一 個 地 方 都很清楚。
我覺得 Michael (manveru) 在這篇說得相當好:
Re: Is Ramaze secure enough to use for an ecommerce app?
如果你能掌控所有的東西,你就會很清楚你的東西是不是安全的。
當然這也是程度問題,我們不可能從 build a OS 開始,
有些東西是需要信任的。在這裡比方說,就是 rack.
rack 單純,簡單,容易證明他是正確且安全的。

rails 複雜,龐大,難以證明,只能期待有人會幫你把關好。
我想 drupal 應該也會面臨這樣的問題。一旦被發現漏洞,
全世界有多少網站受到影響,需要修復?而 drupal 是龐大
複雜的,會有各種問題一點都不奇怪。但 rack 太過於單純,
基本上一段時間沒被發現什麼問題的話,他幾乎就可以說是沒問題的。

我想 innate/ramaze 大概就是類似的概念,但他比 rack 大,
遠比 rails 小,好像跟 sinatra 差不多?

如果要一對一比較 ramaze 與 rails, 那很明顯的是,
rails 裡的一堆功能,ramaze 「全部」都沒有。
rake log:clear? 預設連 log 都沒咧。
ORM integrate? 當然沒有,什麼都沒有 XD
no config/database.yml, no config/blah

rails 的 database.yml 是怎麼讀取的?
他是怎麼連資料庫的?我一點都不知道,也沒興趣知道...
只知道連不上的話,還會卡死整個 passenger.

ramaze 怎麼做?自己寫自己的 config, 自己 setup.
我知道一定很多人只會用 rails, 他不知道 config 怎麼來的,
也不知道 database 怎麼連的。他只知道:

「我設好 config, 其他都會神奇地解決掉」

對於架網站而言,我覺得這樣的心態是沒問題的。
對於開發網站而言,我覺得這樣的心態沒辦法開發出什麼東西。
隨便換個什麼東西,立刻就死在那.....
ptt Ruby 板看到一堆類似的問題,實在很想叫他們重新念書。
還是乖乖學會 +- 再來玩 */ 吧... 這跟建構式數學無關 XD

所以在 ramaze 裡,我很清楚 ramaze 怎麼讀入記憶體,
程式從哪裡開始,(拜託不要把 main 藏起來!這是我覺得
Qt 很棒的一點,你還是可以用 main, 而不是神奇 macro)
controller 何時讀入,model 何時讀入,整個程式流程是什麼?

因此可以有一個很簡單的 ruby script 跑起整個程式,
也可以透過 rackup/unicorn 跑 config.ru,
甚至連 controller 本身,也是 rack middleware!

Node#resolve 做 routing, 得到 Action,
Action 怎麼讀取 template, 最後畫出結果,
程式碼都沒幾行,非常直接且直覺。

我猜可能花不了幾天,可能就能把 innate/ramaze 架構讀完。

我覺得這才是良好的 ruby 程式,這才有 duck typing 的精神。
rails 你隨便換個東西就爛掉,看似模組化,其實是巧妙平衡。
不過或許這也是 trade off, 希望讓使用者啥腦都不用動,
底下就得做很多神奇的事情。就好像猜測人心一樣,不搞得很複雜,
真有可能猜到「每一個人」心裡在想什麼?ramaze 絕對做不到。

或許 rails 神奇迷人的地方在這。

但想走遠一點的話,我覺得還是需要試著往其他地方走。
一個真正的架構,很多時候是需要針對特殊情況去寫的。
我覺得 rails 實在比較適合小專案。如果說需要調教到能用,
需要走很長的路的話,何不一開始就自己開發?

rails routes 實在搞得非常恐怖,走火入魔了。
慚愧,卻曾經覺得很漂亮... 但其實一點都不實際。
這邊我正在改寫,成功改寫完的話,
搞不好可以整個搬到 ramaze 上。
因為我幾乎所有的程式都不是針對 rails 寫的。
(model 有 datamapper 的一份,同時開發的 lol)
再來大概就是 form helper 比較麻煩點,這邊也要全拆掉。

也許 c++ template 也是類似的狀況。

不過我想大概每個會著迷於技術的人,都曾經走過這一段吧(遠目)

總之 innate/ramaze 真的很不錯,應該早點試的。

==
噢對了,rails 的 console 是用 shell 呼叫 irb,
所以如果 irb 不在 PATH 的話,應該會死。
而且 irb 用的 ruby 和 script/console 的 ruby 還會不同。

而 ramaze 雖然沒去看,但應該是讀進記憶體吧?
就完全不會有這種麻煩的問題。library 就是要這樣用啊!
別把程式跟 shell 綁在一起... 移植性會變很差。

updated: 求證了,在這:

require "ramaze"
require "irb"
require "irb/completion"
Ramaze.options.started = true
require "start"
IRB.start
puts "Ramazement has ended, go in peace."

簡單易懂。

Gummy Bear

一開頭一堆 Gummy Bear 時,還有滿想吃的感覺。
The World's Largest Gummy Bear

訂購一隻 XD 只剩綠的有貨囉...

Q: What is the likelyhood that I will
explode from eating this in one sitting?
A: High.

Q: 如果坐下來一次把他吃完,我會爆炸的機率高嗎?
A: 很高。

Q: Do giant gummy bears have souls?
A: Nope.

Q: 巨大小熊軟糖有靈魂嗎?
A: 沒有。

Q: My WLGB has become sentient, and has started eating
children, likely to avenge its millions of ancestors.
How do I handle this situation?
A: Eat it!

Q: 我的「世界最大小熊軟糖」變得有意識,
開始吃小孩,想要為他幾千幾百萬的祖先報仇。
我該怎麼處理這個狀況?
A: 吃掉他!

Q: WOW
A: Yep.

Q: 魔獸世界。
A: 對啊。

==
話說回來,其實我覺得用手抱住有點噁。
用保鮮膜包起來放在冰箱,也有點像冰屍體....

==2
隨機贈送天花板廣告

==3
忽然想到,這風格滿像 iPod Flea 耶?搞不好是同一家做的?

2009-11-02

東方 Bad Apple (Shadow Art)

[HD] Touhou - Bad Apple!! [PV] (Shadow Art)

youtube 就不用嵌入的模式了,nico 是因為嵌入才能不用登入看。
大概吧?有改成完全不用登入嗎?

我覺得做得滿不錯的,很細,雖然我不認得幾個人。


==
結果還沒讀到 Reader Monad 就要敲鐘了 ><
難道要拔一顆鍵盤黑軸下來嗎.. XDDDDD

慘..

雖然說要重新整理 roadmap, 結果今天就沒有遵守到 :/
怎麼說
心裡常常浮現這句話 "we are here to solve the problems"
有時候會覺得好像只是單純打打氣罷了...

面對使用者的問題,回答「對不起,沒有修復的打算」
下一句如果是「請使用最新版」也就算了,那也是很正常的事。
但如果是「沒空修」、「不爽修」、「不會修」之類的回答,
.....我該說什麼咧?

我想還是調整心態看來比較對? :/
不然能怎麼樣?(聳肩)

git merge partial

git merge 其實同時做了兩件事,一個是記錄 branch 與
branch 之間的 merge 資訊,另一個才是真正地執行 "merge"

前者不在乎程式碼之間的差異,只有 true or false.
後者才真正使用 three-way merge 進行程式碼改寫。

然而這兩件事是可以分開的:

1. fast-forward 的情況下,不記錄 merge commit

2. cherry-pick 不記錄 merge commit, 比較像是:
git show COMMIT | git apply; git commit -a
因此 SHA1 會不同,而且沒有 merge commit.

3. rebase 同上,不過可以看成大量的 cherry-pick

以上三者都沒有 merge commit (rebase 不是非常確定),
因此在重跑 merge 時,很可能會再檢查一次 merge 狀況。
有時候也會希望在 merge 時,排除某些 commit,
直接把那些 commit 視為已經 merge 過了,
例如是某個 branch 特定的 config. 如 OS path 設定?

這種時候可以這樣做:

> git merge COMMIT-before-skip
> git merge COMMIT-skip -s ours
> git merge COMMIT-after-skip

中間要 skip 掉的 commit, merge strategy 用 ours,
表示合併時,我們只考慮 HEAD 上的程式,直接捨棄 remote.

這也就是只做一開始提到的前者,和 cherry-pick 正好相反。
以後再 merge 時也不用擔心不小心把那段程式混進去。

這也是為什麼:

> git checkout A; git merge B
Already up-to-date.

> git checkout B; git merge A
Already up-to-date.

> git diff A..B
還是可以生出一堆 diff 出來的緣故..
這種時候如果需要裡面已經被 merge 過的,重新 merge 呢?
cherry-pick 或 rebase 試試....

所以 git 亂玩確實是會玩壞的,要小心啊。
看起來是一樣的東西並不見得會一樣。

2009-11-01

Reader Monad (2)

updated 2009-11-07 23:13:
加個「筆記」標籤,因為 comments 很重要 @@

*

真糟,看半天試半天還是不懂 ask/asks 怎麼取到 Env 的??

data Tem = Txt String | Var Tem deriving Show
type Env = [(String, String)]

lookupVar :: String -> Env -> Maybe String
lookupVar = lookup

resolve :: Tem -> Reader Env String
resolve (Txt str) = return str

重點來了:

resolve (Var tem) = do
name <- resolve tem
val <- asks (lookupVar name)
return (maybe "" id val)
這三者是等價的,但是 ask/asks 怎麼把 Env 變出來的啊??
resolve (Var tem) = resolve tem >>= \name -> asks (lookupVar name)
>>= \val -> return (maybe "" id val)

resolve (Var tem) = resolve tem >>= \name -> (ask >>= \env -> return (lookupVar name env))
>>= \val -> return (maybe "" id val)

Reader 定義在這:
instance Monad (Reader e) where 
return a = Reader $ \e -> a
(Reader r) >>= f = Reader $ \e -> f (r e) e
明明 e 就沒有餵給 f, 怎麼變出來的 @@

是說其實可以把 ask 忘掉,然後記得 asks 可以取得目前 Env,
這樣好像也是可以寫程式..... 但背後完全不懂行嗎? @@

Reader Monad

看這一頁
The Reader monad

寫了個無聊的東西測試:

test :: Reader String Int
test = Reader read >>= \i -> return (i + 10) >>= \i -> return (i * 2)

跑 runReader test "150" 得到 320 :: Int
等價於

test' :: Reader String Int
test' = do
i <- Reader read
ii <- return (i + 10)
return (ii * 2)
這裡應該可以很明顯地看出 return 與 imperative language 裡的
return 是完完全全不一樣的。或許可以想成是一種 base constructor?

前幾天大概看了 List Monad 和 Maybe Monad,
感覺 monad 在基本概念上很簡單,但是組合起來變化很多,
看似簡潔的程式,背後其實透過 monad 的機制,是非常繁複的。

可以理解為什麼這邊是一個門檻,完全搞懂的話,可以做很多事。
simple and abstract :/

電腦線圈

寫完這段就要去睡了。只是翻 suckcomic 忽然間想起來。
節錄 10-26, 五天前的信裡的一小段:

>> 這時候就又可以提到電腦線圈中,劇中人物的反思:
>> 雖然是虛幻的,不具體的,但感覺、心情、經歷卻是真的。
>> 那麼那到底算真的還是假的?

電腦線圈裡來說,確實是當真的哩 :p
但又很巧妙地把他當假的(對大人來說)
沒收眼鏡那段,我覺得是個很棒的轉折

想起來有人說要寫心得(?),卻沒看到後續 XD
anyway.

記得還沒看過電腦線圈時,聽到有人拿來跟攻殼比,
那時心裡在想怎麼可能能跟攻殼比!?不過現在看起來,
也許跟攻殼比,我還更喜歡電腦線圈。也覺得就某些方面,
他們確實講到一些相似的議題,只是角度當然不同就是了。

攻殼我覺得是以相當漂亮的科幻角度出發。
而電腦線圈,則比較像是日本傳統的怪談,或是很普通的幻想類。
比方說,在現有世界中,穿插一個不是現有世界的東西,
以此為出發點。這樣的設定合理性會比較差,
所以我不會想把他當成科幻題材,因為並不平衡。
就像是你能夠使用電腦,但卻沒有引擎這種東西,那樣怪異的感覺。

但攻殼卻有把整個未來的世界觀描繪出來,
而不只是陷在自己的妄想之中。

我想我對攻殼的評價還是比較高,只是可能比較喜歡電腦線圈罷了。

另一方面,我以為電腦線圈會比較容易讓一般人接受,
但事實好像不是這個樣子?仍然想繼續嘗試,
不過這確實讓我覺得有點困惑。科幻本來就算是比較小眾,
而攻殼又非常深入,雖然動作性也不錯,當動作片看也可。
以目前的熱門程度而言,我想攻殼算是不錯了。
我覺得他也有些 Blizzard 那種內行看門道,外行湊熱鬧那種感覺吧 :p

可是電腦線圈是怎麼回事?為什麼會沒名氣成這樣...
難道是卡在中間的問題嗎?例如攻殼一看就有硬派感,
而電腦線圈讓人誤以為溫馨,...也不是不溫馨啦 :/
怎麼說呢...

我覺得電腦線圈應該也是個能夠內行看門道,外行湊熱鬧的動畫才對。
雖然總覺得裡面有相當多的暗示與象徵,但沒有任何隱晦的地方。
應該不是個會讓人看完卻不知道在講什麼的動畫才對。

...也罷,改天邊複習邊寫筆記好了 :/
還滿多東西我會想這樣做的。龍族也是。

==
可能因為很想睡,所以寫得很亂吧(倒
不過我覺得像這樣亂丟思緒,有助於整理
有需要真的成文時,再來重整吧 :/
雖然每次這樣說,永遠都只是寫一半.....

過度

有些時候確實是太過度焦慮了。
不過我覺得這個時代本來就容易如此,下略三萬字...
但當然每一個人能夠適應的時代也不同,
如果問我對這個時代的感言,或許也是又愛又恨吧?
因此也不想說這個時代不適合我之類的。

*

一天到晚被我媽說會考不上學校、不能畢業、找不到工作、
會被開除之類的。我覺得會過度焦慮也有很大一部份是來自於此。
有時候更會因此而想表現得漫不在乎,哪有什麼問題。
不過有時候反而會因此覺得好像都是假的...?
好像其實沒有任何一個容身之處。這感覺挺難形容的。
但絕對不是舒服的感覺就是了。
(mac 版 firefox 還是有嚴重字型亂跳的問題...)

*

話說回來,我猜應該也說過很多次了?大學最後一個學期被二一 XD
還被那時候的導師?是導師嗎?打電話說要約談寫單子之類的。
沒上過他的課。那時候早就跟學校脫節了...

除了道歉這是學校要求外,還一副小心翼翼想試探我什麼似的?
直到我說因為學分已足,所以只是亂選填補最低學分限制而已。
然後就變得更客氣,單子我也沒全寫完,他說剩的他寫就好? XD
我忘記是不是這樣了。總之三兩下就閃人了...

多跑這一趟是挺浪費時間的沒錯。不過卻沒多少怨言很怪?
一方面是想譏笑制度的無聊,另一方面則多少帶著「出差」的感覺 XD
我忘記那天是星期幾了。沒耽擱到什麼就是了。

*

要拿畢業證書的時候,阿婆不信我分數足夠,以為我要補修。
態度不太好,講半天總算拿到了。

*

高中時,被質疑,質疑什麼忘了,總之以為我想消警告。
我才不要消咧,沒帶體育服被記的警告,很有紀念價值。
我記得還曾經差點因此拿小過過。但那人是不是我,忘記了?

幹嘛態度那麼差,好像犯了什麼天大的錯,需要求你赦免之類的...
神經病嘛。學校的工作人員怎麼態度常常都很差?

*

我記得高一時教官也很莫名其妙,只是頭髮比較長比較亂,
不知道在兇惡什麼。但後來又忽然變親切了?覺得很情緒化...
搞不清楚他人到底是好還是不好。

*

國中時的教官也有點莫名其妙。不過至少不兇惡就是了。
記得是要寫什麼悔過書之類的,我當然是寫得毫無悔意 XD
我不覺得忘記帶聯絡簿是有什麼好需要反省之類的。
這些人很喜歡說「以後你 OOXX」什麼之類的。

小學也有過類似的事。那時候明明就是別人先來惹我。
好吧其實不類似 XD 我只是想說很多人是非不分,
沒搞清楚狀況就開始罵人,也絕對聽不進去你說的話,
沒有任何溝通的空間... 然而他們也最自以為有在溝通。

我覺得這些人很多都是看身份在講話的,其他都不放在心上。

*

為什麼變成連環抱怨..................

*

話說回來,改變別人真的太困難了。
改變環境或是自己真的快太多了。(雖然改變自己也是很困難)
這邊說改變環境,不是說改「善」環境,而是換另一個環境的意思。
改「善」的話,環境應該是最難的。
除非太有愛,不然移動真的比改善各方面都要來得好。
但有些時候也是沒辦法移動的,這就是宿命了吧... :/

*

其實我忘了原本想說什麼...

*

但又有不少人覺得我是模範學生、乖寶寶,諸如此類的形容詞。
或許是表面,或許我堅守的線正好符合他們對此形容詞的定義。
例如上課不遲到,作業準時交,還有繫皮帶(不然我褲子會掉...),
不穿拖鞋(我不喜歡),制服不拉出褲子之類的。

不過我被貼叛逆的標籤想想好像還是比較多?
很多名詞解釋或是翻譯也常常不照「正確答案」寫,
有時候會被改錯,有時候會被改對,大概各半吧?
不,被改錯的情況比較多才對。尤其是學生互相批改之類的。

也曾被威脅要當掉我,結果最後卻給我高分 XD(講不膩)

*

我記得國中時也曾經跟實習老師處得不是很愉快過。
怎麼說呢 XD
什麼動宣什麼文宣什麼鬼的...
我還頭一次聽到「動宣」這個詞。

現在想想,覺得這幾個實習老師,
可能對「教學」這件事很有期待吧 XD
年輕人嘛...(遠目)對不起,我有太多特例...
不知道有沒有不小心澆熄他們的某些熱情??

我本來就不適合站在檯面,也對宣傳一點興趣也沒。
但我得承認,那幾次的經驗其實是滿有趣的。

*

呃,看 suckcomic 板看到入迷了,完全忘記這篇的存在...
那就 end 吧 XD

鬼畜王マリオ

這好厲害... 首先他裡面有不少音樂我沒聽過,
也覺得滿好聽的。不知道是原本就有的?哪裡弄來的?
還是自己作曲編曲 @@ 而且很多內容都跟原本遊戲完全不同了。



tag 裡應該有一系列的。鬼畜王マリオ
我沒照順序看到,目前在看 09... 相關動畫裡看到的。

等會把系列連結列一列
嗯,全部在這

改造マリオ 鬼畜王マリオへの挑戦

改造マリオ 鬼畜王マリオへの挑戦 01 [恐竜とマリオとひきこもりレミーと
改造マリオ 鬼畜王マリオへの挑戦 02 [突撃!モートンの奇怪な森]
改造マリオ 鬼畜王マリオへの挑戦 03 [懐かしきワニの住む海底神殿]
改造マリオ 鬼畜王マリオへの挑戦 04 [聖獣とギャル]
改造マリオ 鬼畜王マリオへの挑戦 05 [マリオの奇妙な冒険]
改造マリオ 鬼畜王マリオへの挑戦 06 [レ○社からの使者 登場]
改造マリオ 鬼畜王マリオへの挑戦 07 [最終兵器葉盾]
改造マリオ 鬼畜王マリオへの挑戦 08 [最強ホームレス登場]
改造マリオ 鬼畜王マリオへの挑戦 09 [UFO襲来 カツラ大作戦]
改造マリオ 鬼畜王マリオへの挑戦 10 [THE END?]
改造マリオ 鬼畜王マリオへの挑戦 10+ [ルドウィッグ兄貴]
改造マリオ 鬼畜王マリオへの挑戦 11 [マリオVSメタナイトand?]
改造マリオ 鬼畜王マリオへの挑戦 12 [史上最大の悪夢]
改造マリオ 鬼畜王マリオへの挑戦 13 [新たなる旅へ]
改造マリオ 鬼畜王マリオへの挑戦 14 [友達がいっぱい]
改造マリオ 鬼畜王マリオへの挑戦 15 [姉歯物件を放火せよ!]
改造マリオ 鬼畜王マリオへの挑戦 16[トラウマ迷路]
改造マリオ 鬼畜王マリオへの挑戦 17 [恐怖の月曜日]
改造マリオ 鬼畜王マリオへの挑戦 18 [ワニトカゲ祭り]
改造マリオ 鬼畜王マリオへの挑戦 19 [スーパーマリオワールドX]
改造マリオ 鬼畜王マリオへの挑戦 20 [片翼の配管工]



All texts are licensed under CC Attribution 3.0