發表文章

費曼

  上禮拜看到比爾蓋茲的新聞是,他以前曾經看過費曼的教學,後來想要讓更多人上費曼的課,所以現在退休後,花了一大筆錢把教學影片的版權買來,然後請微軟研究院的製作一個線上網站,讓大家可以去看。 可是我還是沒去看,我覺得費曼算是一個有趣的人,雖然聽說他的教學也很有趣,但認識他的時候,我已經快把普物讀完了,而且原本就很有興趣,所以有沒有看他的講義是沒有差的。 對於費曼,我印象比較深的是他自傳裡面提到的故事,大意如下-小時候,他爸帶他去森林裡散步,有一次看到一隻鳥,他爸介紹了那隻鳥的叫聲、長相、習性。但費曼跟他說他同學說那隻鳥叫甚麼,他爸就說啦,鳥叫甚麼並不重要,重要的是我們知道他會做甚麼就好。 我羨慕費曼有一個好爸爸,所以我要盡可能閱讀,將來才能多給我的單單知識,晚上念故事給單單聽的時候,我老婆都是照著書上的文字念,因為童話老師說字正腔圓可以練習他講話,但我是比較不喜歡這樣,念書的時候,我都會把書中的角色融入現實,像是書中有一個家庭的,我就會把小朋友名字改為單單,如果看到書上有曾經介紹給單單看過的,我就會順勢提起、再問他,加強他的記憶力,然後也會使用跟主管學的一招:「你確定嗎?」來幫助他思考。 最近才知道工研院羽球院隊有一個我視為對手的人竟然已經51歲啦,他大女兒跟我一樣大,所以他也是跟我同年齡生小孩的,沒想到我竟然還跟我爸爸等級的人認真了XD,將來我51歲的時候,單單會不會偷偷讓我?

麗星郵輪--賭場分析

  第一次進賭場就是在麗星郵輪上,從基隆出發之後,船就會全速前進,有看過賭神的都知道, 陳金城說:「要殺人的時候記得是不是在公海上?」 喔,不是,是在公海上,賭場才會開放~ 賭場裡面有簡單的比大小、21點、百家樂、加勒比海、輪盤、德州撲克、還有一堆吃角子老虎機。 很可惜,船上並沒有舉辦慈善撲克大賽,不然我一定會準備個三百萬美金XD,不然上去還要跟賭俠一樣向壞人借錢。 比大小很簡單,但賭注對我而言還是太大了,從小過年逢賭必輸,而且這裡一盤就要500台幣 晚上看了一下21點,才知道莊家有一個奇怪的規則,他們的牌必須補到超過16點。看了幾場之後,就去換個1000塊台幣,沒辦法,那桌的最低注就是1000,但你可以壓在其他人的牌局,莊家有一次超衰的,連爆七局, 所以我連壓的結果就是賺了1000 * 2的7次方,也就是12萬8台幣,超爽的。 以上是我自己在幻想的,真實的情況是有連爆七次,但我沒壓Orz。所以我開始思考一個問題,像是輪盤之類的都是對莊家有利(因為輪盤有36個點,導致某些壓法的賠率是對莊家有利,可惜的是沒有看到莊家帥氣得丟出鐵球,都只是輕輕劃一下而已。) 對於21點的規則,我的想法是莊家不可能做賠本的生意,那為什麼會有此條規定呢?雖然我剛好看到莊家連爆7次,覺得對他們很不公平,因為一些老手都留著12、13點就PASS了,但在那邊我也沒辦法仔細去算(心中OS:其實我只是要耗時間等日出XD)。 之前看過決勝21點,有去找相關的書籍來看,裡面一堆複雜的推論方式我都忘了,唯一一個重點是書中有算出小於16點的話,補就對了。所以結論是賭場主人沒那麼笨,這都是經過數學推論出來的,莊家就是機械式的玩法,不用動腦筋,只要牌超過16點就不補,即使是玩家19點,莊家18點,雖然莊家直接會認輸沒挑戰性,但看在他是清秀美麗的中國正妹分上,我也不跟他計較了,不要跟我說沒圖沒真相,賭場裡面用照相機,你是要讓我去餵鯊魚嗎?也想過我可以根據牌面上已經出現的牌才決定不同策略,但我想差異可能不大吧,使用的牌是四副牌,每次全都重洗。 輪盤的話,曾經我有一個謬論,我們都知道出現奇數跟偶數的機率是一半一半,那如果100次裡面已經出現99次奇數了,接下來是不是應該出現一次偶數讓平均機率趨近50%? 解答是大數法則,當母體越來越大的時候,偏移的絕對數也會越來越大,假設一百萬次裡面的1%誤差可能就會...

Android Mutlitouch Input Architecture

圖片
  現在的任務是要在Android 上面啟用 Mutlitouch的功能,首先找了一下網路上的做法,要改Synaptics的Driver,因為G1是使用Snaptics的觸控版,在別人patch過的很明顯可以看到Driver可以拿到兩個座標,可是Android所定義的 MotionEvent只能傳遞X, Y, Pressure, Size,Size的定義是觸控版手指頭上面壓下去之後的圈圈大小,這個值可能沒甚麼用,人家就拿來給Mutlitouch應用了。 先說明修改過之後 User看到的是甚麼,如果收到的Size <=1 的話,那麼就是代表是 Single Touch,否則 X, Y 就是兩個點的中心點,Size的左 16 bit 則是 abs(x1-x2), 右 16 bit則是 abs(y1-y2),這樣在User Level就可以得到旋轉跟放大縮小。 目前只有iPhone的SDK是可以直接把點座標全部傳給User Level去,這樣如果要作多人遊戲的話,才可以使用座標,特地看了一下Windows 7 的SDK,看起來在 .Net 新增的 NameSpace: Windows7.Mutlitouch 也是沒有傳遞多點座標,只有Rotate 跟 Zoom 的事件,我沒有實際寫程式試試,可能有辦法取得座標也不一定。 透過Synaptics 的source 發現他是使用 input_report_abs(ts->input_dev, ABS_X, x); 來傳遞值的,所以就找ABS_X是在哪裡定義的,在linux/include/linux/input.h 下面有定所有輸入的值為何,可以看到絕對值系列還有一個ABS_RX,原本是給搖桿用的,但透過這個值,我們應該可以傳遞兩個座標了。 Driver回報上去之後,User Level要怎麼接收呢?我以為是某一個類似scanf的函式,找到就OK了,freedom問file descriptor 是甚麼?我才想到把file operations串起來的就是要透過file descriptor,試了一下G1,發現他的TouchPanel 是 /dev/input/event2,所以我就在Android Source裡面搜尋 /dev/input,發現了 EventHub.cpp 這個檔案,在此檔案...

BeagleBoard OMAP3530 Linux SDIO Expansion Libertas Trace

  這兩個月的工作就是在讓BeagleBoard上面的Expansion Slot可以跑MMC的功能,然後讓SDIO WiFi可以Work。弄了很久,結果發現是硬體的功能好像有問題Orz。 Linux Kernel MMC/SD Source Trace 首先至少會有三個部分,Linux MMC Core (drivers/mmc/core)、MMC Controller 的Driver (drivers/mmc/host/omap_hsmmc.c)、SDIO Card的Driver (drivers/net/wireless/libertas)。 Core 中負責的是 MMC 的Protocol的部分,例如要送甚麼Command,怎麼Parse 卡片回來的Response之類的。這裡也是Bus Driver的所在地,但我對Bus Driver沒有看很懂~ Hsmmc (high speed mmc)則是負責要怎麼送出資料(設定DMA之類的),所以會跟硬體有關。 Libertas則是負責跟SDIO無線網卡的溝通。 drivers/mmc/core/core.c 中的mmc_rescan會去掃描目前的卡片類型,下面是我查到的卡片類型會送出的命令序列,這裡有一份很好的參考文件,可以去找SDIO Simplified Specification Version 2.00.PDF。原本SDIO SPEC是要簽NDA的,但後來釋出簡化版的讓Linux可以將SDIO包到Kernel Source裡面,但有一些比較屬於硬體的Timing過程就沒有公布了~ MMC/SD/SDIO Command 詢問過程 SDIO: 0 8 5(SDIO_SEND_OP_COND) 5 3 7 52 52 52 SD: 0 8 5 55 41 0 8 55 41(SD_APP) 2(Send All CID) 上面都失敗之後就換MMC MMC: 1(MMC_SEND_OP_COND) 上面可以看到SDIO會回第一個5的CMD,而SD不會回應,所以就改為送出55,MMC則是都不回應,最後會回應CMD 1。 如果問到5有回應之後,就會交給 drivers/mmc/core/sdio.c的mmc_attach_sdio、drivers/mmc/core/sd.c的mm...

選擇下載 Android Source 的伺服器

  昨天下載 Android Source的時候,sync repo就一直出現 cannot fetch XXX,想說是伺服器不穩,後來用 while loop 下載一樣不行。 今天freedom就教了一下可能可以解決的辦法,使用 dig android.git.kernel.org,我是看到有三個ip,再試一下,看查詢結果有沒有變,如果只有這三台,接下來就使用repo sync,然後趕快用 netstat –n | grep 9418 (git 的 port),看哪一個IP比較穩,最後再寫到 /etc/hosts 裡面,讓repo只連到這台去抓。 照做之後,我又在home 目錄重新作一次,就可以下載了~

John’s Background Switcher

  科科,桌面王已死,大學的時候只想著要看自己硬碟中的照片,後來桌面有太多圖示,就沒繼續改版。這款軟體做得不錯,可以選擇很多從網路上的Source,可惜沒有加上螢幕保護程式,我是用Google的螢幕保護程式直接從Picasa擷取圖片。 http://www.johnsadventures.com/software/backgroundswitcher/ 這樣家人就可以直接看到我最新的圖片了~

X Window 下的 Hook

  以前在Windows的時候,要攔截全域的滑鼠 or 鍵盤,都有一堆函式可以使用,還有分低階、高階、攔截、紀錄、撥放,沒想到 X Window 好像都沒類似的東西,這次我的程式想要做全域的 MouseGesture,也就是不管我的程式有沒有取得焦點都可以取得滑鼠的事件,查了一下資料,應該只能使用 librecord.so,但這個元件已經很久沒更新了,而且 Xorg 中間 1.5x 的版本還因為安全性的問題曾將其移除,所以我就只好使用 OpenEmbedded重新編譯。 重點是那時候一直以為使用 librecord會比較省資源,因為他是註冊 event 的Callback,可是比較奇怪的是,註冊完Callback之後,Main Thread還需要一個while loop去呼叫他提供的函式來處理Buffer (XRecordProcessRepies),然後他內部再呼叫我剛註冊的函式。結果在Gumstix上面測試的時候CPU一直居高不下,不管我 Sleep 多久。 後來也沒甚麼辦法了,只好試試那時候為了防止沒有 librecord 可用的時候,另外用 XQueryPointer 的一個版本,沒想到CPU竟然只耗 1x% 而已,想說自己 Polling Mouse 應該比使用librecord Callbak 還耗資源說~應該是X Window的架構所導致的吧~ 後記:ㄜ,我錯怪 record module了,後來在source裡面找到有Synchronous的版本,也就是會Block住,這樣幾乎就沒占甚麼CPU了,但主管又接著問我,那設計者怎麼可能會設計出一個很耗CPU的Asynchronous Mode呢?ㄜ,有空再看~