What have you found for these years?

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