發表文章

目前顯示的是 2009的文章

Link Folder, mklink -- Windows的軟連結

20100323更新:Windows Vista 以上有mklink指令可以用啦Orz,XP的話可以去找junction程式 現在再用DropBox 同步資料,覺得還不錯用~ 我大概有四五台電腦需要同步用,放一些工具程式還不錯,這樣就不用用隨身碟一直帶著 原本是不想改變我的目錄結構的,所以想建立一個捷徑到DropBox的子目錄, 假設是C:\Dropbox\soft\notepad.exe,我建立捷徑到D:\soft連到C:\Dropbox\soft 但Windwos 裡面實作是一個.lnk檔,這樣就沒辦法直接使用命令列執行 D:\soft\notepad.exe 其實subst可以把捷徑建立到 磁碟機去,以上面的例子就是可以把C:\Dropbox\soft 建立到 p:去,這樣就可以使用p:\soft\notepad.exe 但因為我之前的快速鍵的路徑都已經寫好了,不想再大改 這時候,突然覺得Linux的Soft link真好~ 科科,我不相信Windows 做不到,打上link folder windows之後,就找到了"Link Folder"這套軟體,就可 以完成我想要的功能囉~

bash shell pipe 的寫法 input redirect

以前大多使用 | >,較少用到 < 現在看到文章才知道為甚麼以前試都不行 ls | cat = cat <(ls) ls一定要加擴弧,且跟<之間不能有空白

Android Source 互相 sync

剛主管來問說我們central的android source是誰在維護的?我說沒有一個central repository,又不是SVN,為什麼需要Central的呢?剛測試一下,git這部分還滿方便的,先從android抓相同的source,接著修改完之後,使用git status, git commit把檔案commit到本地庫去。 如果我也需要對方的patch的話,就直接下 git pull username@ip:Path [mtube@acer] ~/mydroid_cupcake/frameworks/base $git pull USERNAME @IP:~/mydroid_cupcake/frameworks/base 但相反的,如果對方要直接push到我這邊來的話,他下的指令是沒有用的,可能要用其他方法吧~ [mtube@acer] ~/mydroid_cupcake/frameworks/base $git push USERNAME @IP:~/mydroid_cupcake/frameworks/base

Ubuntu 使用 Bridge 模式, ExtractRootFSFromScratch Ubuntu, chroot

我需要一個Debian ARM (aurel) 版本的 RootFS,這樣就可以用他的裡面的工具程式,所以打算QEMU來安裝一下,於是從網路上下載了 kernel 跟 initrd,就準備使用qemu-system-arm 來安裝了,結果到了要從網路上下載套件來安裝的時候,一直無法抓到遠端套件,進shell看,以為是IP配措之類的,所以打算把Qemu設為 Bridge 模式,雖然我心裡覺得預設的NAT模式應該是可以的。 到 /etc/network/interfaces 原本是 auto eth0 iface eth0 inet dhcp 加上 auto br0 iface br0 inet dhcp    bridge_ports eth0    bridge_maxwait 0 存檔出來之後 apt-get install bridge-utils ifdown eth0 ifup br0 這裡我就不太清楚為甚麼要使用 br0 取得IP 接下來建立 /etc/qemu-ifup #!/bin/sh echo "Executing /etc/qemu-ifup" echo "Bringing up $1 for bridged mode..." sudo /sbin/ifconfig $1 0.0.0.0 promisc up echo "Adding $1 to br0..." sudo /usr/sbin/brctl addif br0 $1 sleep 2 這是 qemu-system-arm 在設定網卡的時候會執行的 script,當然參數裡面也可以加上其他路徑的script qemu-system-arm  xxx   -net nic -net tap 啟動qemu之後,裡面的網卡就可以拿到外面網段的IP了,但很殘念的,我還是沒有辦法下載套件回來安裝。只能判斷是我IP分享器外面的問題,因為我自己的電腦互ping的到。 於是想要使用 DVD 來安裝,沒想到qemu-system-arm 不支援從光碟機開機,google的範例都是要使用網路下載的,且一定要指定kernel參數,聽說就等同於 BIOS。 後來不想用debian了,竟然發現 ubuntu也有ARM版的,且不用安裝,網路上就有直接解出r

wmencbasicedit 元件在Windows 7 32 bit 直接Crash

最近一個程式裡面有用到Windows Media Encoder SDK的WmEncBasicEdit 元件,結果在Windows 7 32 bit 的時後竟然會直接當掉,連偵錯式窗都沒跑出來,trace進去之後看到是在new WmEncBasicEdit Class的時候就直接顯示程式關閉的視窗了~於是上網去搜尋有沒有相關於 WmEncBasicEdit 元件的使用方法,資訊超少的(這也是我決定寫這一篇的原因Orz)。而且在相同的OS下面使用Windows Media Encoder 附的軟體就可以正常使用,他應該也是用相同的元件啊,然後我的同一隻程式在Windows 7 64 bit 就可以跑,啟用程式相容性也不能跑,讓我百思不得其解。 幾天後,強者我同事找到了解法,原來要安裝patch,XD,解決,之前keyword 都下錯了,以後要記得先看看有沒有更新~ keyword: "windows media encoder crash kb" 就可以找到這篇了 http://support.microsoft.com/kb/929182

幹,我會不會被判過失致死罪啊?!

圖片
話說今天去光明新村跟院隊的打球,打了三場之後覺得今天殺球特別有力,有力到對手會看不見我的球一樣(幻想ing),但我感覺球拍怪怪的,好像快斷掉的感覺,殺下去之後感覺球拍會震動,於是我就跟大家說我感覺球拍快斷了,某人就借我一隻Dr.Pro的。再殺了幾球之後,怎麼還是有一樣的感覺,殺球之後球拍會晃晃的。沒想到再殺幾球之後,球拍就斷了,好險這次握把布沒有整個扯斷,所以球拍還在我手上~ 我斷的位置是在握好球拍之後虎口的位置,整個木頭連同裡面的芯也斷掉,現場所有人都說沒有親眼看過從那邊斷的,只有一個球齡有二十幾年的說他有看過甲組的球員會從那邊斷,因為瞬間腕力甩的原因,這樣是說我的腕力跟甲組一樣強嗎?^^。但他說我應該是姿勢的問題,就是我手腕下去之後,又太快往上,就把球拍折斷了XD。我想沒有轉身也有殺,因為沒有轉身,我就單手上下就會有那個動作發生,後來就不太敢殺球了,會有陰影存在啊。話說我之前已經有四次這種恐怖的經驗了,斷的地方都一樣~ 第一次如下: 打羽球發生的智障二三事 , 2007風城盃記事 (現在看真是熱血的青年),現在想想真恐怖,我親眼看著斷掉的一根鐵杆就飛到兩三樓高,然後飛到對面場掉下去,好險沒有直接從人的頭上插下去~這裡我又想到我覺得球友講的好像不太一樣,如果我是下去再上來導致球拍斷掉,球拍應該不會飛這麼遠啊?一定是我下去的時候球拍就直接斷掉,這樣斷掉的那端才有動力飛到對面場去吧? 第二次則是在工研院,跟俊育他們打好像也是要殺球,然後球拍就直接往上飛,剛好對面是牆,就打到牆上掉下來,這次比較不緊張~ 第三次也是在工研院,上禮拜四,這次則是球拍平飛到對場去,好險孫元亨跟黃麟祺站中間,球拍從右邊場飛過去,也是一隻尖尖的殺人武器啊~ 第四次就是今天了,看來劉伯聖有拜拜XD 休息果然是最佳增強實力的方法,我也沒做甚麼腕力的訓練,只是太久沒打,今天就這麼有力,幹,經過今天之後我覺得我有一天會不會被判過失致死啊?!

unsigned 和 signed 的比較 (怪)

unsigned int i=1; int j=-1 if(i>j) printf(“i>j”); else printf(“j>i); 用VS2008 C++竟然出現 j>i。 uint i=1; j=-1; if(i>j) Console.Write(“i>j”); else Console.Write(“j>i); 這次用C#就印出正常的 i>j。 Luse Cheng - Nov. 2, 2009 - Delete C# 跟 C 遇到這種狀況的處理是不太一樣 如果是C 的話 依ISO C99 的 Rule 這樣的狀況 j>i 的確是符合Spec的 如果是C#的話 在Spec內提到這種狀況應該做promotion 所以會有這樣的結果也是對的

原來MicroSD加讀卡機還不是無敵啊

想說一般的USB Flash就是一個讀卡機加上Flash Module而已,沒想到這次在使用USB安裝Windows7時就失敗了,一直回報找不到系統現有分割,無法進行分割,請參閱安裝記錄檔,但進修復模式去又可以正常format系統硬碟,還花了不少時間去研究安裝記錄檔Orz 後來覺得應該是讀卡機Driver的問題,所以再改成使用正常的USB隨身碟就可以安裝了~

非同步呼叫底層的設計,Asynchronous Base Method

  如果有寫過比較大的UI程式,一定需要用到非同步,因為使用者第一接觸就是UI界面,只要使用者感覺UI不順、有Hang住的感覺,一定會抱怨Orz。 之前我在寫的時候,一般都是另外開Thread來做運算,但麻煩的是算完之後要回報給MainThread的處理,都要知道MainThread的Class的名字來Callback,所以都是copy以前的code,ex: if(this.InvokeRequired){} 之類的,這樣都沒有一個通用的解決方案,今天在codeproject看到一個AsyncBaseClass.cs,終於學到怎麼寫通用的非同步呼叫。 流程如下,MainThread呼叫AsyncMethod,會把Dispatcher存起來 CallingDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher,接下來開thread去做 System.Threading.ThreadPool.QueueUserWorkItem(MyMethodThreaded, parameters); 在MyMethodThreaded的最後再使用剛剛的Dispatcher來invoke CallingDispatcher.BeginInvoke(                 new Action<int, object>(FireMyMethodCompleteEvent),                 result,                 parameters.CallerStateObject             ); 這樣FormMain就不會有甚麼很醜的Code了,ex: if(this.InvokeRequired)。 參考資料: http://www.codeproject.com/KB/threads/AsyncDemo.aspx

Dll Injection 簡介

公司最近因為加上了網路控管,之前使用VPN的方式躲過,但實在是太慢了,所以又另找解法,經由強者者同事告知,原來只要製造出假Process就可以順利上網,但要創造出假的Process,我只有想到兩種方法,一種很簡單,一種很複雜,第一種就是你把隨便一隻程式改名,例如把notepad.exe,改為Orz.exe,這樣檢查程式就會以為Orz.exe已經再執行了,缺點是可能會耗一點GDI的資源,雖然執行起來之後就隱藏了,但完美主義的我總是覺得不夠漂亮。 第二種則是現在要講的稱為Dll Injection技術,先講一下用途為何,某支沒有Source的程式呼叫WindowsAPI的時候,你希望可以改寫WindowsAPI的行為,這就需要用到Dll Injection,技術上來說就是對方的程式會改為呼叫你寫的Code,至於要不要繼續呼叫WindowsAPI,就看你的Code怎麼寫。 像上面的需求,一般列出Windows,應該是用EnumWindow,所以我就需要寫一個EnumWindow的取代函式,讓其使用。但要修改這部分則沒有那麼簡單,因為OS有實做Virtual Memory的關係,每個Process都是各自的記憶體空間,所以對方的Process是無法呼叫到你的Process裡面的函式的。DLL在Windows是一個特例,因為DLL Code在記憶中是共用的,所以可以被其他Process映射過去執行。至於要怎麼映射,這裡則是我覺得學Windows API滿精彩的一部分~ 當年接了一個CASE,需求是當USB裝置插入的時候,程式可以得知,一直寫不出來,但手中有一個小程式可以做到這個功能,只是他會跳出MessengeBox來,所以我把小程式隱藏,然後攔截他呼叫的MessageBox函式,再通知我的程式,這樣就OK了~ 下面是我當年的筆記,其實重點就是要知道現在正在執行的Code是在哪一個空間執行,DLL裡面會實做下面幾個函式 int __stdcall HOOK_MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType) 這個是取代MessageBox的函式,也就是小程式會呼叫到這裡 int replace_IAT(const char *pDllName,const char *pApiName,boo

無法刪除的資料夾 or 檔案

今天使用了 FileZilla 抓某部電影,Server 是 Linux ,也不知道出了甚麼問題,看檔名是正常,但就是無法抓下來,結果Windows建立的目錄也無法刪除,使用Unlocker看也沒有甚麼Process Lock住,使用cmd直接del 完整檔名也不行。 於是使用google搜尋了 "no longer located",因為錯誤訊息有這段文字,就看到下面的解法了: 1. Open an command prompt 2. Navigate to the folder where the files are located 3. Run this DOS command: dir /a /x /p 4. You will get a listing of files including the 8.3 file names 5. Delete the file files using the [8.3] file name, example:, leave off the [ ] brackets: 6. [del INBILLB~1] or [del VSXBUI~2.txt] 7. Sometime you can simply try [del *.*] and delete all of the file 我是用 rmdir 8.3FileName 來解決,科科~

人生的風景何必急著壓縮 (轉)

曾經我也希望單單很聰明,快速跳級,賺很多錢養我Orz,但後來還是決定採用費曼他爸爸跟他相處的方式,多跟他在一起接觸大自然,我相信這是他長大之後可以值得回憶的-”我跟老爸做過的事!”,而不是印象中都在學習。老婆買了一堆字卡也沒有強制教他了 (謎之聲:是懶惰吧XD) 昨天應邀去上「今晚哪裡有問題」節目當特別來賓,當集的節目主題是「跳級生」。 主角人物是兩個跳級生的家長:蔡爸爸與蔡媽媽,我和另外一位媒體人、還有在建中任教超過三十年的陳美儒 老師,則是搭配的來賓。 整場錄影,簡直是讓我有「傻眼」的感覺。 蔡爸爸與蔡媽媽本身都是相當高水準的知識份子,蔡爸爸是光武工專電機助教、留美高材生,蔡媽媽本身是家管,師範大學公民教育系畢業。 三個孩子中,老大佩真今年以十六歲的年紀,拿下大學指考第四高分,錄取台大電機系,在就學過程中,她兩度跳級,國小跳一次、國中跳一次。老二也是跳級生。 蔡爸爸、蔡媽媽與大家分享他的「學齡前教育法」。 他們說,兩個大的一出生,24小時內就抱回來餵母乳,還未滿月前,她就開始「字卡教學」。 蔡媽媽手繪各式各樣字卡,還有由圓點點組成的「數目圖卡」,從1到99,在每次餵奶前,寶寶哭鬧、最有精神時,在寶寶眼前晃過卡片,告訴寶寶相關的字、數目,然後再餵奶。 蔡爸爸說,三歲前的寶寶有大腦有百分之七十的未開發區域,先給予字卡再給予喝奶,就是教導他「學習」跟給予「獎勵」。接下來,寶寶還未學會走路,家中牆壁就貼滿了數字、九九乘法表,以及國小國語課本裡的課文。 家中所有的家具都貼上中英文字卡,隨時隨地不忘教學。 因此,在蔡媽媽的耐心教育下,蔡佩真一歲就已經識得數字及國字,會用手指出正確位置,兩歲會說話時,就已經會背完九九乘法表,三歲已經可以自行閱讀中英文故事,並在鄰居教導下,學會基礎日文。 她中班以前已經把小學一、二年級的課程上完。 於是,她小學二年級就隨著媽媽到師院附小上六年級的數學課,四年級時跳級至五年級。 國二下再跳國三下,隨即考上北一女中。 蔡爸爸並分享孩子們生活的點滴,包括喜歡打球、打撲克牌,以及他自創的「十分鐘預習法」及一些聯想記憶術等等。 節目結束後,他並送我一張他個人印製的「學齡前教育」的演講DVD。 我當場只能不停的搖頭讚嘆。 我看到的是,一個優秀的媽媽,將所有的精力都放在兒女的教育上,將所有自我的成就都擺在成就兒女上。 但是,我也看到,蔡家父母將所有的心力放在

叛逆的單單

大概從三個月前,也就是單單快滿兩歲的時候,我就注意到他會故意不聽我的話。例如叫他吃飯,他就趕快落跑,所以我每次都假裝要跟他搶飯吃,然後我老婆再趁機餵他。 後來發現他對 "不要" 這兩個字有特別的反應,大人專心看電視的時候,他會故意把電視關起來,然後走開,我只要一說"你不要把電視打開喔~"他就會立刻轉身,看你一眼,偷笑一下,然後趕快過去把電視打開,哈,真好騙~後來我做甚麼,只要他故意反抗,我就會使用"不要"這兩個字,不知道可以騙多久:) 當他還沒有牙齒的時候,都是我把食物咬一小塊再吐給他,跟他嘴對嘴,雖然岳父岳母,我老婆、我小姨子、我爸媽都不贊成,但我還是這樣做,一樣活那麼大,所以這樣是沒有問題的,但現在單單比較大之後,也不太想跟我親嘴了,以前要出去玩的時候,都會叫他跟我親一下。某天晚上睡覺的時候,叫他跟我親一下不要,然後我就裝睡,然後說了一聲:「你不要偷親拔拔喔~」結果他就一直親我嘴巴了 :) 我一個人無聊的時候,或是看到其他小朋友,就會想到單單的一些動作,常常會讓我不自主的笑起來,像是學我打蚊子的模樣,或是有一次家族出去吃下午茶的時候,他每次都有午覺的習慣,結果我老婆餵他的時候,他低頭吃就順便睡著了,然後睡醒的時候還一臉狐疑樣,想說我怎麼會在這裡,還是想說東西怎麼都被吃完了Orz, 真好笑~ 最近一次我覺得最好笑的事,某個周末我用NB在整理我的光碟包,因為怕單單弄壞我的NB,所以我放在比較高的桌子上,但單單一直要爬上來玩,我就用身體擋住他,然後光碟包放在後面的桌上,沒想到他玩一玩我的光碟包,就把它弄掉到地上去了,是那種200片很大包的那個,我突然聽到他:啊了一聲,轉頭過去看,他已經轉身,然後低頭,雙手一直在互扣手指,好像很無辜不知道怎麼辦的那種感覺,也有點像想要裝做沒事一樣 (心中OS:你以為你老爸那麼笨嗎?這樣就會相信是他自己掉下來的?)。小朋友都知道你叫他不要做,如果他硬要做然後吃虧的話都會惦惦不說話,因為又怕你罵他,所以我就意思意思打他一下屁股了~ 兒子給父母的就是珍貴的回憶,我想我小時候好像沒那麼可愛,因為沒看過我媽想到我小時候笑的樣子,科科~   nan sun - Sept. 30, 2009 - Delete 哈哈,好小子

唐駿在大工演講兩次的經典內容(轉)

再看這篇文章之前,我不認識他,看完之後,覺得他還滿有趣的,演講中真是妙語如珠~但轉貼的理由不指這個,而是他跟最後的演講的講者一樣,會為了達到某個目的,而千方百計完成他,唐駿的例子是出國留學,最近再來找找他的書看~ 唐駿╱2008年6月14日 在大連理工演講的具體內容:(以第一人稱講述) 在北郵追女孩 你們知道在我們那個上大學的年代不像你們這麼豐富多彩。我們那時候除了追女孩外沒有什麼事情可做。(台下暴笑) 你們比我們那時候慘,我們傻,老師讓我們學啥我們學啥,也不管有沒有用;而你們現在明明知道沒有用,卻還要學,所以比較鬱悶。(支持的掌聲) 當然,除了大連理工大學的學科除外,因為盧校長在這。(暴笑)你們學的東西幾乎沒有什麼用。(台下再次更暴笑) 上大學的我平凡的不能再平凡了,那時候什麼都沒有,就長成我這樣的,基本上不用考慮本班的戰場,沒有我的立足之地,我就發展別班的戰場,我看上了一個女生,據聽說還是北郵50校花之一呢。(笑) 你們可別小瞧,50校花之一可了不得,當時我們北郵可有156名女孩呢。(全場爆笑) 你說我那時是弱勢群體,我能做什麼呢,我什麼都做不了,最後想出了一招我能做的事:寫信。 第一封我寫了身高 1米82體重132斤家在江蘇常州,父母是幹什麼的,家有幾個兄弟。 這簡直就是一份簡歷,沒辦法,那時的我沒什麼只有這些,就給她投了簡歷。 她沒有理我。我就開始寫第二封信,為了展現自己的才華,我就介紹了一下國內國際經濟形勢(台下暴笑),我未來會怎麼怎麼做。 還是沒回音。我就寫了第三封,說我知道你不喜歡我,我不要求你做什麼,我只要求你讓我默默的喜歡你就好了。(全場暴笑) 你知道那時的女生"純"那!(純音很重,全場笑)三封信就感動了她,她回信給我。 我就約她看電影,看的什麼電影我不記得了。 之後我們散步,我對她說,要不你嫁給我吧。(全場驚訝) 她很驚訝說唐駿你是認真的?我說是,她說好我嫁給你。(更驚訝) 就這樣,第一次約會,她就嫁給了我,而後我們一起走過了隨後的20多個春秋。(全場熱烈的掌聲) 爭取留學名額 我那時在北京郵電上學,花了兩年時間考研究生,考了全校第一,當時每個重點院校有兩個名額可以保送到美國,但我卻沒被保上。 你們知道我當時是弱勢群體,沒有什麼權利,但我不甘心就這樣,然後四處打聽,打聽到北京廣播學院(中國傳媒大學)還有一個空的名額,我就去北廣

ddwrt的VPN設定

最近公司引進了網路存取管理,其實就是要抓盜版啦,如果不裝MIS的軟體掃描,就無法上網。因為我在宿舍也是用公司的AP,所以今天晚上就沒法連到外網了,突然靈機一動,連到辦公室的電腦,因為那邊有申請例外IP,所以可以透過RDP來上網,但這樣太痴了,我突然想到可以使用VPN,所以就ddwrt的設定打開了,成功上網~ 下面是網路上找到的教學,留存一份 我使用的版本為: DD-WRT v24-sp1 (07/27/08) vpn + PPTP(看起來比較方便) PPTP設定方式: 點選Services頁面,再點選PPTP,預設是Disable,選擇Enable之後,會多出數個選項 首先是 server ip輸入wrt54gs的lan ip,一般應該是192.168.1.1 client ip(s)設定欲分配給遠端登入電腦的ip,可以設定單一ip位址,或者輸入一個範圍如192.168.1.200-240。 chap-secrets輸入登入用的帳號跟密碼,一行為一組。設定得格式為 id * pw * (ex: jian * jian *) 接著就是儲存設定,然後重新啟動wrt54gs。 Windows Client的設定 在控制臺的網路連線,增加VPN網路連線 連線的主機名稱設定為AP的WAN IP。 然後帳號密碼使用 jian 就可以登入了~ OpenVPN設定方式: 在windows下安裝OpenVPN 1.0.3(我使用的版本),準備開始製作static.key 1.cmd模式下鍵入 openvpn --genkey --secret static.key(注意每次鍵入所產生的key會不同喔!),會在目錄下出現一個static.key的檔案,檔案請好好保存。 2.登入AP,USER:root pass:admin 防火牆設定 在command防火牆內鍵入 iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT iptables -I INPUT 1 -p udp --dport 443 -j ACCEPT iptables -I FORWARD -i br0 -o tun0 -j ACCEPT iptables -I FORWARD -i tun0 -o br0 -j ACCEPT iptables -I INPUT 3 -i tu

ntop Service 架設

今天使用了ntop,簡單試一下 ntop –d -L,然後就可以使用 http://localhost:3000 來看了, 但奇怪的是如果要統計區網其他機器的流量,這樣不是都要能聽到他們的封包才行,但現在都已經改為switch,根本就收不到其他電腦的封包,要怎麼辦呢? 查了一下,要ddwrt支援rflow這個功能才行,所以重新抓了ddwrt v2.4 standard (原本用mini),更新之後,在ddwrt的Services裡面就會多一個rflow的service了,啟用他,然後ServerIP就設定為ntop那台的IP,port預設是2055,套用。 接下來去ntop的網頁找plugin裡面會有一個NetFlow,啟用他,然後要設定port為2055 、 Interface Address為 192.168.1.0/255.255.255.0、Flow Aggregation我是設定為 Host。

2009體檢結果--體育檢查

今年27歲 100公尺:13.25 秒 (13.5) 跳遠:4.69 公尺 (4.61) 1500 公尺:沒空跑 鉛球(12磅): 10.06 公尺 (9.4) 沒想到今年變成主辦人了,成績大都有進步,最可惜的還是跳遠,一直在那邊走來走去負責項目,結果一助跑就抽筋,跳出去之後兩腳抽筋,整個手都往後撐,就定在那邊五秒鐘起不來了 明年繼續體檢,一定可以跳到5m的~

最後的演講--讀書心得

好久沒看一般書了,都在看電子小說跟漫畫,上禮拜預約的"最後的演講"來了,應該是在BBS上看到推薦的吧~ 作者是一個學術作的不錯的教授,可能是40歲結婚,41歲才有第一個孩子,總共有三個孩子。47歲的時候突然得了胰臟癌,所以他很想為他的孩子留下一個印象,於是準備了這場演講 書中的描述多了他對他小孩和老婆的感情,可以看到他很想陪他的孩子,這部分在youtube的影片是沒有看到的,昨天看一半的影片,感覺書比較詳細一點,演講中有些片段因為沒時間鋪陳,所以會有點突兀~這本書應該是我印象中兩本比較深刻有講愛的書,第一本是十四堂星期二的課。 下面是書的記錄: 我們改變不了事實,只能決定自己要怎麼因應。我們改變不了上天發給我們的牌,只能決定怎麼打這手牌。 如果你做的不好,可是都沒有人糾正你,那就表示他們已經放棄你了。 磚牆之所以存在,是為了阻擋那些其實沒有那麼想要這件東西的人。磚牆存在的目的就是要排除那些人。書裡面有提到「我一生遇過最難以突破的磚牆才一百六十七公分高,而且美麗無比。」就是她老婆。 「你有保壽險嘛,對不對?」「有,都沒問題。」「嗯,你也需要情感保險。」情感保險所必須繳的保費不是錢而是時間。所以要多花點時間用攝影機拍下和孩子相處的情形。 孩子們,不要浪費時間猜想我希望你們成為什麼樣的人。我希望你們成為你們自己想要成為的那個人。 如果我也可以活到47歲,單單那時候就已經21歲了,科科,這樣我應該不會有作者那麼大的遺憾,看來這是早婚的一個好處啊~   Yuan CHEN - Sept. 3, 2009 - Delete 我也看了,觉得自己和Randy教授最大的不同在于人家不断努力实现孩童时的dream,而我在不断降低自己的dream的标准...毕竟后者是不费吹灰之力的...

20090826 Android上使用觸控面板(TouchScreen)模擬KeyEvent (三)

最後就是模擬Key的部份了,其實比讀取還簡單,這都得歸功於Input Subsystem的設計,Service只要呼叫EventReader.SimulateKey(KeyboardFD, code); 這裡的KeyboardFD 就是/dev/input/eventX,而Code則是可以去看 KernelSource/include/linux/input.h 裡面有提到 Backspace = 14, 下面是c的code 1: JNIEXPORT jint JNICALL Java_ITRI_MTube_EventReader_SimulateKey(JNIEnv *env, jclass c, jstring KbdFD, jshort code) 2: { 3: struct input_event event; 4: int fd; 5: const jbyte *FD; 6: FD = (*env)->GetStringUTFChars(env, KbdFD, NULL); 7: if (FD == NULL) { 8: return NULL; /* OutOfMemoryError already thrown */ 9: } 10: 11: if ((fd = open(FD, O_RDWR)) < 0) { 12: (*env)->ReleaseStringUTFChars(env, KbdFD, FD); 13: return -1; 14: } 15: 16: (*env)->ReleaseStringUTFChars(env, KbdFD, FD); 17: event.type = EV_KEY; 18: event.code = code; 19: //keydown 20: event.value = 1; 21: if (write(fd, &event, sizeof(event)) < 0){ 22:

20090826 Android上使用觸控面板(TouchScreen)模擬KeyEvent (二)

  所以我們的Native Code就是從/dev/input裡面讀資料了,這是有標準寫法的,可以去搜尋evtest,這也是一個好物~Driver回報的時候,最後會使用SYNC Flag,而User Level程式在讀的時候也是這樣子,當Android層的Service呼叫c的ReadPointer時,c會進入一個無窮迴圈直到他讀到sync,如果沒資料就會被block住(Good,不佔用cpu),如果讀到Sync之後,Service就再透過jni去讀取c剛剛從driver讀到的x,y,touch。原理就是這麼簡單,下面是Code,MT的部份是為了支援Linux 2.6.30之後的Multitouch功能,目前用不到。 1: #include "ITRI_MTube_EventReader.h" 2: #define SYN_MT_REPORT 2 3:  4: #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */ 5: #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */ 6: #define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */ 7: #define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */ 8: #define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */ 9: #define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */ 10: #define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */ 11: #define ABS_MT_TOOL_TYP

20090826 Android上使用觸控面板(TouchScreen)模擬KeyEvent (一)

20090826 Android上使用觸控面板(TouchScreen)模擬KeyEvent 最近我們的機器上已經可以跑Android了,使用TI OMAP3530,這顆SOC不錯,網路上有許多人在幫忙porting Android到BeagleBoard上,所以使用人家的beagledroid git就可以了。但如果要使用expansion pin(ex: gpio、mmc、rs232 的bus)時,常常會發生電壓不夠,而需要另外接voltage/level translation,比較麻煩而已,因為TI不一定會想要賣給你幾顆Level Translation的IC,所以我們就必須用要Sample的方式來取得。我們的觸控面板使用dmc的晶片,分析Android Framework的Source Code之後,發現他是讀標準的input subsystem,所以driver要有註冊到input subsystem才行。我拿到兩種觸控板的Driver都沒有,一個是TSC的,一個就是DMC的。 要改Driver成Android可以使用也不是那麼麻煩,只要在probe裡面呼叫 input_register_device,然後再用set_bit、input_set_abs_params就好,這樣在/dev/input下面就會新增一個File Description了,但其實這個File Description是evdev.c弄出來的,evdev真是一個好物,關於Input Subsystem可以去google搜尋,有很多好的分析文章,而且看完之後大有收獲。當註冊完之後,接下來就是要回報了,什麼時候要回報,當然是我們從硬體拿到資料的時候,所以就是在irq函式裡面囉,於是把byte值轉為對應的座標,再使用input_report_XXX來回報至上層。 在修改這部份的時候,有想過校正的問題,這裡解釋一下校正的用意,一般來說觸控板原本的左上右下各會有一個座標,我拿到的dmc是(0,0)跟(2046,2046),但Android系統是(800,480),所以就需要加減乘除,當然如果觸控面板有瑕疵的話,左上也有可能不是(0,0),可能是負的,所以我們每次拿到一支新手機的時候,都要先做校正的動作。 第一版我是直接寫死在IRQ函式裡面,也就是固定左上右下座標,但這樣如果換了解析度就很麻煩

勇敢的單單

  話說單單可能也遺傳到我過敏的體質了,算了,人生在世,本來就不可能十全十美,有氣喘才知道呼吸的可貴。最近他手上長了不少小紅點,看了幾次診所,都沒治好,而且還有擴散的現象,手->眼睛->背->腳。所以這周末帶去馬偕看了,看完之後醫生也只是說濕疹,然後順便去抽個血看一下過敏值有沒有變高但現在還驗不出來過敏原。到了抽血中心的時候,看到小朋友一直在那邊大哭大叫,單單一直很好奇的過去看,然後又看到護士要送的貼紙,單單好像有興趣,我就跟他說等下抽血會痛一下,那你要跟護士阿姨要幾個貼紙,他就說一個,科科。 然後看到某個小姊姊在抽血的時候很勇敢,我就抱他起來跟他說,姊姊好勇敢喔,都沒有哭,等下你也要讓阿姨抽血喔,他靜靜的想著。 我們前一個是一個大概四五歲的小朋友,排隊的時候,一直在地上跑來跑去玩,結果輪到他的時候,他爸把他拉進去,他就一直說不要,想絡跑,還滿好笑的。我想說等下單單會不會又要強力壓制了,跟以前打預防針的時候一樣。 沒想到輪到單單的時候,他就乖乖的讓我抱著,然後右手伸出去讓護士纏住手臂,另一個護士看單單這麼乖,就不幫忙壓了,雖然他們叫我要抓住單單的左手,可是當護士阿姨插進血管的時候,單單因為痛抖了一下,但左手仍然沒有什麼動作,我也就握住他,那一剎那,我突然眼眶紅了,科科,孩子是父母親的驕傲,護士可能也驚訝的說,這麼小就這麼勇敢,於是就從口袋拿出隱藏的紋身貼紙(原本桌上是一些比較醜的XD,沒想到她也有準備大絕招),雖然單單說只要一張就好,但護士還是給了他兩張。

旋轉的羽球發球

  話說最近已經不知道有甚麼球好練了,於是開始練習左手。昨天突然想到兩年前在跟某校隊打球的時候,他的發球會旋轉,發過來之後羽毛會朝向你,讓你只能低手打,於是決定要練這種發球,今天去練了半小時之後,還是抓不到訣竅,但大概可以確定要打羽毛的地方,因為只要一打到球頭,不管球拍的方向,一定都會直直飛。後來問了某個人說有沒有看過這種發球,他跟我說這種發球是犯規的Orz。 回來使用google找了資料,關鍵字如右:羽球 發球 羽毛 中國 發明 禁止 找到下面這篇: http://www.52yuqiu.com/bbs/dispbbs.asp?BoardID=4&replyID=58880&id=10684&skin=1 羽壇「旋風」飄然逝去 只要是球,基本上就能旋轉,而旋轉球也是許多球類項目中常見的技術。但是,在羽毛球比賽中,就絕對不容許旋轉球的出現,這是為什麼呢?想知道這其中的緣故,我們還是先從一次中國的全運會上說起——   1983年10月,第5屆全國運動會在上海舉行。在上海體育館的羽毛球比賽場上,曾獲得1978年曼谷亞運會女子單打冠軍和1979年第4屆全運會女子單打冠軍的劉霞出戰名不見經傳 的浙江選手。一上場,浙江選手突然發起了旋轉球,她發出的球,飛行路線不是正常的軌跡,而是忽上忽下,忽左忽右,並帶著旋轉直向劉霞場內飄來,一直到球落地還在打轉轉。劉霞看著這不斷旋轉的球不知從何下拍,挑輕了下網,挑重了出界,最後竟以0比15、5比15敗下陣來。   旋轉發球又名飄球,20世紀70年代末由馬來西亞羽毛球運動員西德克三兄弟發明使用,故亦稱「西德克發球」。旋轉發球特點是發球時倒拿羽毛球,用反手動作擊打羽毛部分,使球在飛行過程中不斷旋轉,使球的行蹤飄忽不定,從而給接球隊員造成困難,常使人還未回過神就敗下陣來。因用於比賽取得驚人效果,世界羽壇很快就出現了一股「旋風」。國內外一批名將都被這種旋轉球「轉」得「頭暈目眩」,往往只能得幾分,在第一輪就慘遭淘汰。一時間,真可謂談「旋」色變。   與此同時,國際上也就「旋轉發球」展開爭論。丹麥、英國等國認為這種發球「違反規則」應予取消。1981年5月,國際羽聯和世界羽聯聯合後的首次大會上,丹麥、英國等國再次提出要修改規則禁止這種發球,而馬來西亞、印度尼西亞等國反對。中國當時已掌握這種技術,在國際大賽中運用效果很好,因此

費曼

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

選擇下載 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呢?ㄜ,有空再看~

奇怪的程式風格

  應該也看過不少open source的程式吧,今天看到libxnee裡面的 xnee_record.c 時,看到一段code if  ( (xd == NULL)       ||       (xd->control == NULL)       ||       (xd->record_setup == NULL)) 真不習慣的寫法,最近看小朋友的書有一句話--心智顯現其樣貌,就是他的行為就是他的內心,不講話可能就是生氣之類的。 程式顯現其思考模式,為甚麼要分段思考呢?

滿兩年的可愛單

  話說單單最喜歡甚麼,大家一定都會說車車,他有多喜愛車,來講幾個例子: 只要身上穿有車車的衣服,就不給人家脫下來洗澡,非得說車車髒掉了要洗一洗,不然車車就會壞掉了才可以脫下來~ 晚上穿著車車的小外套睡著後,要幫他脫衣服的時候,被他發現,就會生氣一直叫車車,要我們再把拉鍊拉上,麻麻都睡眼惺忪的還要幫他找拉鍊XD 最近玩火車之後,晚上睡覺前一定要把火車接好,放在床的旁邊 阿公讓他開車之後,連拔拔也不要了,整天找阿公 昨天跟漢漢哥哥借了一台十公分的車,結果那台車竟然是可以開門的,我就拿車子吸引他來睡覺,後來發現他一直把腳趾頭舉起來踢車子的門邊,不知道他要幹嘛。突然想到,他不會想要進到車子裡面開車吧,冏rz。問他他還回答是,我又不是小叮噹,可以把他變小。

使用.ashx自動更新圖片

  話說我有img tag在GridView裡面,外面再用一個UpdatePanel包起來,會使用Timer每兩秒更新一次,圖片的src是連到GetScreenshot.ashx去,問題在於每次網址都一樣所以瀏覽器不會更新圖片,會直接使用Cache,熊熊只想到一些讓瀏覽器不要讀Cache的做法,但去查一下,那好像是要html裡面的meta data才可以,content-type=image/jpeg 時根本沒有這些資訊。 突然,靈光一閃,我就在我的img src屬性裡面加上一個TimeToken的參數,反正我的ashx也只用到一個id的屬性,透過連結不同讓瀏覽器去重新下載,比用javascript reload快,測試OK,打完收工~

Ubuntu Linux 上簡單的程式編輯器IDE--Geany

  之前找了一陣子,看有沒有好用的編輯器,但都一直沒找到,我覺得 gedit 好難用啊,按Ctrl+F也不會自己把單字填上,只好轉而使用Eclipse,也學了一陣子eclipse,真是博大精深~ 可是我的PC已經有五年的壽命,開個 Eclipse 可能就要等兩分鐘XD,寫程式的時候更是慢的比烏龜還慢,所以我又回到 Gedit + Terminal的環境了。 現在使用 Geany,發現還不錯,我已經厭煩了 Alt+Tab 在那邊切來切去了,只要有個快速鍵可以讓我快速 Compile,看錯誤訊息就好。然後左邊也有 Symbols Table,這樣找函式就快了,雖然他不能寫大Project,反正我的計畫也不是要寫大Project,所以 Geany,讚~

銅雀臺賦--小喬

  最近有很有名的張馨予版的小喬,我覺得拍的真是不錯, http://a305020.pixnet.net/blog/post/27158196 前天又看到一本話術舉諸葛亮拿銅雀臺賦來激周瑜迎戰,再這樣下去,事實就變成曹操是為了小喬而發兵的。這只能說有可能,但不是絕對吧,根據我之前看到的資料,兩者的先後關係是先打之後才有賦的~ 以下引用自WiKi 諸葛亮 曾引《銅雀台賦》「攬二喬於東南兮,樂朝夕之與共」,爭取 周瑜 聯合抗曹,但這並非史實。(魏史記載中並無此段,疑羅貫中或後代說書人所添。)曹操是在建安十五年(210)冬興建銅雀台的,整整比 赤壁之戰 (208)晚了兩年,而曹植作《銅雀台賦》更在建安十七年(212)之後。

Vista 開機修復

  話說這幾天再備份硬碟,備份完之後的硬碟竟然沒辦法開機,選擇硬碟開機之後,就只看到左上角一個游標在那邊閃,就沒反應了,硬碟也沒繼續動,於是只好使用SPFDisk重新安裝MBR,還是不行,再將SPFDisk安裝到Partition上面去,也不行,後來SPFDisk還搞亂我的ParitionTable配置,真衰,資料都不見,好險有備份。 使用TigerXP附的PartitionMagic,每次讀都說分割表錯誤,看來要使用原版的修復工具了。放進Vista光碟,使用光碟上的Startup Fix,回說沒問題,但還是無法開機。 網路上有人教 bootrect /nt60 C: 沒用,而且64bit沒有 /mbr選項,加上 /flush一樣失敗 再使用bcdedit,發現我的Device怪怪的,使用 “bcdedit /set {bootmgr} device partition=C:”, “bcdedit /set {default} device partition=C:”將其改為 partition=C:,沒想到還是不能開機,我還加上一堆debug的選項,沒想到還是只出現一個游標在左上角閃阿閃啊,都不列出訊息的~ 最後使用大絕招 bootrec,先使用bcdedit /export D:\boot\bcdedit.bak,再使用 bootrec /RebuildBcd,和 bootrec /FixMbr,不知道哪一個是必要的,但我的Vista又可以開機了,爽~

生命

  這兩天的新聞有,十個月的黃小妹妹被丟到滾鍋裡,撐了四天,今天早上不治,還有另外一個是爸爸使用掃把打死兩歲的女孩。 看了,如果細想,去體會的話,眼眶就會濕。 對於生命,我之前也有想過,我覺得是有靈魂存在的,看著單單沉睡在我身旁,為什麼一堆有機體會自己行動,會有思想,為什麼心跳停止幾分鐘之後沒辦法再恢復? 神奇的生命~

有朋自遠方來,不亦樂乎

  三年前的這個時候我剛拿到微軟亞洲研究院實習的機會,在那裏,認識了許多好朋友,昨天終於有一位大陸朋友宇翔來台灣參加會議了。記得離開北京的時候,跟李敏有個十年之約,今年底就已經滿三年,好像還沒有甚麼成就,科科,我想還是好好照顧單單吧 :) 在北京認識的朋友,有熱愛寫程式的(現在也成為MSRA的正式員工了,內地的學生常到國外的網站程式賺錢,我覺得有點像國外公司外包然後以競賽的方式給大家寫),很有自己想法想創業(但現在還是先進公司賺錢)、想炒匯的人(目前去Ricoh賺錢,說先存本金再玩,那時候看他研究的很火熱啊),也有熱愛學術研究的(昨天來的那位,全程參加會議,就不能帶他去玩了) 這次只有帶宇翔去師大夜市吃個火鍋,後來再去吃可麗餅,我不喜歡吃可麗餅,所以四個人點兩個,十五分鐘給一個,等了半小時還沒來,去跟老闆說,結果老闆說送一個,可是原本點的還是沒來,在半個小時之後,又一次送兩個來,所以多送了我們兩個,好險我們也在那邊聊天,才沒有破壞氣氛,後來水煎包也沒有開,就再請他喝一杯大腳桶妹,但因為他熱愛學術研究,所以也沒甚麼感覺 :)

打蚊子---恩~恩~~啪~ 啊!打錯了

  單單一年八個月了,現在對蟲蟲跟螞蟻會害怕,有時候晚上可能被蚊子咬,突然哭起來,我就會說拔拔保護你啊,若還是一直哭個不行就會抱他起來,然後把電燈打開,跟他一起找房間有沒有蟲蟲~ 昨天吃飯的時候,又看到一隻蚊子,後來我就手指指著空氣中,嘴巴發出~恩~恩~~,假裝有蚊子在飛,然後再突然的輕輕拍到他的額頭,說啊!打錯了,這時候他就會大笑出來了。有時候會換成打我自己的額頭或是媽媽的。 沒想到做了大概五六次之後,單單手也舉在空氣中,嘴巴也發出:恩~恩~~的聲音,然後再突然打自己的額頭,超好笑的。 YouTube - 20090308單單學拔拔打蚊子,然後打錯了,打到頭

C# 3.0 Automatic Properties

  新增了一個語法,要宣告Property,只要寫下面這樣 public string FirstName  { get; set; } Compiler就會自動幫你產生類似下面的code string _FirstName; public string FirstName { get { return _FirstName; } set { _FirstName = value; } } 但一定要寫 { get; set; },也就是沒辦法只寫get來產生readonly的Property,第一次看到覺得很奇怪,那這樣我就直接宣告成Field "public string FirstName;" 就好啦~反正也沒有甚麼存取規格,今天看到的說法是 Property 在 Data Bind時跟 Field的行為不一樣。 PS: 補充,若要 readonly要改為 public string FirstName  { get; private set; }

git 切換到其他Branch的方法

  我覺得git還是很難用,每次只會用 git clone,結果今天要切到較穩定的 2.6.24的版本就不會切了,一直在那邊branch來branch去。 後來在 http://www.kernel.org/pub/software/scm/git/docs/user-manual.html 找到答案 使用 git tag-l 然後 git checkout –b  <NewBranchNameCustomString> <branch or tag> 就可以了。 再來用 git branch 就會看到變成新的NewBranchNameCustomString了 http://billy3321.blogspot.com/2009/02/github-howto.html 不錯的參考 http://linuxocarina.blogspot.com/2008/12/git.html 教人家怎麼使用branch修改完檔案之後上傳 後記:雖然不太懂 tag 跟 branch 有甚麼差,但昨天再幫同事切到某tag時,出現了一個錯誤,類似 drivers/KConfig not uptodate. 然後就切不過去,原因是因為他改過這個檔案,所以要先下 git commit –a –m “comment”,之後就可以切換tag了。之後如果要切回原本的branch的話,就不用再建立一個branch了,直接 git checkout OriginalBranchName。 又看到兩篇不錯的文章 http://phoenixtoday.blogbus.com/logs/33458940.html 活靈活現用Git -- 基礎 http://phoenixtoday.blogbus.com/logs/35149540.html 活靈活現用Git -- 技巧

博客來的詐騙集團

  話說剛接到一通 022700xxxx 的電話,問我去年在博客來買的書有沒有收到,念出書名之後我說有,結果就說甚麼便利商店店員拿錯,我簽到匯款單之類的,明天之後會開始扣款,不知道是博客來洩漏資料還是超商洩漏的。但目前詐騙集團還是一直都沒有進步,怎麼大陸口音會那麼重呢?想受騙也沒辦法 Orz 騙:你這樣帳戶會被我們扣款喔? 我:真的啊?那要怎麼辦? 騙:你就這樣…這樣…就可以了。 我:等一下,我怎麼知道你不是詐騙集團? 騙:我們怎麼可能是詐騙集團呢? 我:那你可以證明一下嗎?先匯個一千元到我戶頭試試。 ………… 騙:處理好了,你查一下。 我:耶,真的有耶!那我相信你不是詐騙集團了,可是我是 = =,掰~

網路卡的MAC Address不能亂設

  以前上課的時候只有學到前三個Byte是廠商碼,後面三個Byte是產品碼,而且Windows又可以讓使用者自己改,所以我每次都自己改,至於為甚麼要改,當然是逃避網管的追緝。 話說今天在上課的時候,聽到一個做網通設備的說第一個Byte的最右邊的位元LSB,不能設為1,否則Router就會過不去。當然要驗證一下,於是立刻改,改完之後,疑!還是可以通啊,是時代變了嗎?再使用ipfconfig /all看一下,結果我的網卡 MAC Address並沒有變更。於是再找另一台PC測試,使用的網卡是Intel PRO/1000 PL,沒想到在內容頁就有說明了,高位元組 LSB =1 為多點傳送位址,不能是奇數,當我要強制設定的時候,會出現提示說不能設定。 而在我的NB上的網卡是 Realtek RTL8168B Family的,就不出現提示,但改了是沒作用的就是了,難怪我之前一直以為是Driver沒灌好,沒法改,科科~ 至於甚麼是多點傳送位址,沒學過~ MAC Address為什麼是48 bit的由來,好像有印象是美國和歐洲一邊想要32,一邊想要64,所以後來就協調成48 Orz…

別自以為是的看別人

圖片
  初二在娘家睡覺的時候,晚上又聽到單單在哀哀叫,但都是隔個十幾秒才唉一下,讓我覺得火氣有點上來,因為我不喜歡男孩子整天ㄋㄧㄋㄧㄋㄞㄋㄞ,後來問他要喝奶奶是不是,就泡給他喝了,喝一半之後,不要了,他娘幫他移個位置,竟然哭起來了,還是生氣的哭,越來越不爽,想把他打醒問他要甚麼?因為白天有時候都會耍脾氣,裝哭。但在別人家還是不要好了,不然等下把岳母吵起來。 哭個三十秒之後,我老婆突然說會不會是蚊子,我才突然想起應該是,因為我有被咬,所以就立刻起來看到一隻肥肥的蚊子,把他打死了,接下來就跟單單說:「拔拔把蚊子打死了,好好睡喔~」他就好好睡了。 沒想到之前看過那麼多類似的故事,還是一樣會犯同樣的錯誤,有「辦公室的紅包」、「公車上的讓座事件」等等,原文我沒有留,但大意都是別自以為是的認為別人沒包紅包很不懂得做人,每個人的經濟壓力不一樣,別自以為是的認為年輕人就不能做博愛座,他的雙腳不一定健全。 後記,沒想到幾分鐘後,單單又唉個幾聲,我又起來巡一下房間,發現還有兩隻蚊子,科科,這次沒有錯怪他了。也別以為我對小孩很兇,之前發現有蚊子的時候,都是把手臂露出來,讓它趕快吸完我的血就去休息~ 隨文附上一張可愛單的照片