What have you found for these years?

2008-08-05

data mapper 的 identity map...

我在測 data mapper 的 identity map, 結果怎麼測都不對!?
我一直覺得是我用法錯誤,因為這麼明顯的問題,怎麼可能沒人發現啊!?

只好一直 trace 到 data mapper 的最核心,看到一堆特製的 query...
應該無關吧?全跳過,不然這看下去就看不完了。我先是找到 model 的:

identity_map.set(key_values, resource)

暴力修改原始檔,印出來看看,嗯,東西有寫入沒問題。
接下來暴力調查:

identity_map = repository.identity_map(model)

結果居然發現每次的 identity map 都是空的!更重要的是,object id 都不同!?
奇怪,沒道理一直重新 allocate identity map 吧?這樣一點都不 identity...
只好追查 repository.identity_map 到底在幹嘛?結果也沒幹嘛,都是很直覺得寫法。

接下來乾脆調查 repository 到底怎麼了?這一查還真是囧,居然 object id
也一直在變 @@ ok, 那麼問題就是 DataMapper.repository 到底在幹嘛了!
結果看到這個就囧了:

    current_repository = if name
Repository.context.detect { |r| r.name == name } || Repository.new(name)
else
Repository.context.last || Repository.new(Repository.default_name)
end


嗯,context 是在幹嘛?也只是:

Thread.current[:dm_repository_contexts] ||= []

啊那 Thread.current 該不會一直變吧?幸好沒有... 不然就真的囧大了。
但是 Thread.current[:dm_repository_contexts] 卻永遠是 []...

那不就是表示 repository 從來沒記錄下來嗎? @@
把上面的 || Repository.new(name) 改成:

Repository.context << Repository.new(name) && Repository.context.last

結果 identity map 就恢復正常啦 ~~~~ 囧。查看了一下 master branch,
這幾段 code 目前還是長得一模一樣,這意味著這是正常行為嗎???

是這樣說,如果我在 client 程式開頭加上:

DataMapper::Repository.context << dm.repository

是可以得到跟修改過後相同的結果沒錯,但真的需要這麼麻煩嗎?
example 也沒有說要做這一步啊!更何況,文件說 setup 回傳 repository,
但是事實上是回傳 adapter!! 這樣真的對嗎!?

來信問問.................. 這真的有囧到。

13 retries:

Poga Po said...

我不喜歡在windows上gem install do_*
還要有VC++的compiler... Orz

Lin Jen-Shin (godfat) said...

是喔,那用 cygwin 呢?

另外聽說 data object 因為 ooo pool 在 windows 上還有問題,包含 cygwin 也同樣有問題,所以 data mapper 在 windows 上跑應該還不行

再等吧 @@

Plumm said...

http://mag.udn.com/mag/digital/storypage.jsp?f_MAIN_ID=322&f_SUB_ID=2920&f_ART_I
D=140344

微軟開發Midori 取代Windows還要好幾年

‧聯合新聞網 2008/08/05
電腦軟體龍頭微軟公司正在開發名為Midori的新作業系統,這個作業系統最大的特色是
以網路為中心,降低應用程式之間以及軟硬體之間的依賴性。


微軟的作業系統Windows系列稱霸個人電腦已久,未來的作業系統可能朝虛擬化、可攜式
發展。 歐新社

電腦軟體龍頭微軟公司正在開發名為Midori的新作業系統,這個作業系統最大的特色是以
網路為中心,降低應用程式之間以及軟硬體之間的依賴性。
Midori的研發先前已有傳聞,但軟體開發時報 (簡稱SDT)日前透露更多訊息。

以往,電腦使用者依賴一台電腦做所有事情,傳統的作業系統囊括Windows軟體所需的元
件,但在行動運算的時代,這種模式無法符合科技和使用方式的發展需求。

資訊業正朝虛擬化 (virtualisation)發展,英國廣播公司(BBC)報導,Midori正是微軟跟
上虛擬化趨勢的努力。

把所有應用程式放在同一台機器上,如果機器需要維修、升級,將會造成使用者不便。以
網路為基礎的虛擬化軟體,則可以隨身帶著走任意使用,而且沒有相容問題。

資訊業專家馬登說,虛擬主機技術現在已經十分普遍,先裝作業系統、再裝應用軟體的做
法將會日益減少。

虛擬化專業公司VMWare新興產品和市場副總丹‧朱 (譯音)表示,未來的電腦可以讓使用
者以虛擬客戶身分,把所需的作業系統和應用軟體打包,這樣的作業系統可能不大,且能
輕易移轉到不同機器使用。

許多人認為,Midori的基本構想就是塑造可和諸多應用軟體搭配的輕量級行動作業系統。
微軟目前的Windows系統並不允許安裝為虛擬電腦。

Midori可能成為Windows時代後的替代作業系統,雖然還要好幾年。微軟目前最大的問題
是,Windows系統目前八成業績來自新電腦配售,以後虛擬化時代,應用軟體不再被作業
系統綁死,微軟要靠什麼賺錢? 【聯合晚報╱國際新聞組╱綜合報導】

Lin Jen-Shin (godfat) said...

這接近乾坤一擲了吧?
失敗就完了,成功就爽了

Hinoris said...

今天看到同學用Java寫的幾個小遊戲。每個都很不錯。其中最有意思的一個是飛機射擊的遊戲。

這遊戲和雷電之類的飛機遊戲很類似,就是飛機在垂直地圖上一直飛,然後螢幕上方不斷飛出小飛機攻擊你。飛機除了普通攻擊外(有冷卻、但條件不高),還可以用死光、招小飛機助陣等特殊技巧。

飛機有HP值。扣光會死。


這遊戲的完成度還很低:敵人只有一種小飛機、沒有魔王也沒有盡頭(他說程式跑到某一個定點會自動當掉),畫面也蠻陽春的。不過當我聽到同學說他這個程式已經寫了三年的時候,還是不得不肅然起敬一下(不過他說因為有bug,可能要全部重寫,他說懶得重弄)。

Hinoris said...

GF,那幾款輕省筆電看得如何呀?

Lin Jen-Shin (godfat) said...

聽起來東西是滿多的,完成度雖然不高,
應該也要不少時間。
但..........三年,開玩笑的吧? @_@
也未免太久了些,可能斷斷續續地吧。

只是有 bug 應該不用重寫吧?可能是架構不對,那就真的要重寫了

*

看起來不錯,你不說價錢的話,還以為會很貴...
不過不知道灌起 linux 如何?如果是 windows 的話,
似乎沒什麼帶著走寫程式的意義...

windows 應該是家用打遊戲用的 XD

Hinoris said...

應該可以裝吧?其實很多輕省筆電為了節省成本,出場就是搭配Linux了。有些官網上也找得到Linux的驅動程式。

這些筆電的效能雖然不好,但要寫程式、處理些小圖檔基本夠用。

你有空可以去附近電腦電用用看。我這邊比較推薦MSI的Wind u100。


你是要安裝什麼Linux啊?有問題的話,在www.mobile01.com上註冊個帳號,然後去筆電-msi板上問問看。

Lin Jen-Shin (godfat) said...

如果可以出廠就是 linux 的話,那當然最好。

如果我有預算的話,我會去看看的。
不過對 msi 沒啥好印象說 XD

我想灌這個:
http://www.archlinux.org/

01 有 linux 玩家嗎?

Hinoris said...

那上面應該是什麼樣個怪物都有= =。你看久就會習慣了。

01在國內算很大的網站。

Plumm said...

用 Java 3 年還寫這樣有點慘,C++ 三年要寫 RPG 都寫得出來了說 @.@

Lin Jen-Shin (godfat) said...

我知道 01 很大,是有名的敗家網 XD

老林 said...

Plumm 不是這樣算的吧 XD ....
完全沒有比較基準這樣比時程也沒有意義 ....

Post a Comment

Note: Only a member of this blog may post a comment.



All texts are licensed under CC Attribution 3.0