2013-06-07
練英文最好的理由
話說中國人長久受到儒家思想的薰陶,或者應該說是遺毒。通常做十分說七分,對人不吐惡言,對自己或是底下的人的要求標準嚴格。但是我發現在一個與許多不同國家的同事一起共事的環境裡,這未必是件好事。或者說應該適時的調整一下自己的態度。不卑不亢是美德,但該出來Fighting的時候還是不能讓。
事情的緣由是我親愛的以色列同事在過微軟WHCK認證的進度太慢,老闆Push他們總有一堆的理由。搞到對手公司的認證都過了,每次業務去拜訪客戶都被洗臉,業務的處長實在受不了,希望我能在IC回來的空檔,能夠幫忙加速認證的速度。大家都在同一艘船上,雖然不是我分內的事我也答應下來。有趣的事情在後頭,當我拿回來Source Code一看,才發現和我去年11月移交給以色列的版本並無太大的差異,很多認證的部分卡關只是HID的ID不符,修改Bios的設定就可以通過許多項認證。這下子我老闆氣得不得了,為什麼台灣的RD不到一個月時間就通過驗證而以色列不行,想直接把驗證Report寄給以色列的RD Team,質疑他們工作的能力,在我好說歹說總算把這封信壓下來。更有趣的事情在後頭,業務的處長突然打電話問我說問什麼以色列的RD Team說他們已經過了WHCK的認證了?我把mail拿來看,竟然把我reply給我老闆的report原封不動貼到他們的週報上,當場我就跳了起來質疑,反而換我老闆和業務處長安撫我,畢竟同一個產品線,IC賣最重要,大家心知肚明是誰做的就好。我和Team的表現不會因為這樣就被抹滅。
事後我平心靜氣地想,其實我並不在乎要去跟人家爭什麼功勞,而是我這次學到一個教訓。那封質疑以色列表現的信是應該要發出去的。畢竟大家公事公辦,有record事後也不會有這些鳥事發生。我當下選擇息事寧人除了想顧及以色列同事的顏面外,最主要的原因是我不想引起一場e-mail大戰,往返的e-mail除了吵架外,對我來說只是浪費我的時間去回那些官場上的英文書信。只能說怕熱就不要進廚房。這次我真的覺得練英文最大的好處就是吵架不能吵到詞窮,你要打官腔我就奉陪到底。親愛的小乖,爸爸已經決定要從小訓練你的英文,至少吵架不能吵輸喔。
2012-11-04
Brandson Sanderson
這兩部作品依然維持他最令人稱道的風格,就是不抄襲現有的奇幻作品的奇幻元素架構(托爾金魔戒奠定了奇幻文學的框架,想要擺脫他的設定並不是件簡單的事)。迷霧之子的鎔金術與血金術,伊嵐翠的符文描繪,與破戰者的識喚術、駐氣與身體彩氛都是相當創新與有趣的設定。(我強烈懷疑Sanderson的老婆有色彩學的背景,破戰者中奇幻元素用到的名詞,有些沒念過色彩學還不容易翻)。另外Sanderson對於人性的描寫也極其深刻與細膩(與我另一個喜愛的作家R.A. Salvatore一樣),你可以看到故事中的主角們在思考與自省上的成長。伊嵐翠故事中 Derethi的樞機主教,一直對於自己的信仰,與讓亞瑞隆王國皈依Derethi所採取的手段上,無法獲得邏輯上辯證的一致而困擾不已,而發生在其他國家的慘劇更是他心中一直無法抹去的陰霾。破戰者中Vivenna因為自身的傲慢而一直被玩弄於股掌之間不自知,Siri因為旁人的刻意誤導再加上義卓司對於虹譜宗教的刻板印象,而一直對支撐國家與信仰的祭司們有所偏見。這些角色並不是神,但藉由一次次失敗與挫折,更讓讀者對書中人物產生共鳴。
Sanderson也是多重人物分鏡述事的寫作方式的好手。說到這種寫作方式,似乎因為冰與火之歌實在是太紅了,最近看到的某些作品都喜歡用這種方式來敘述小說,不只從單一主角的觀點來敘事的寫作方式,可以讓我們用不同角度來看同一件事,更可以用同理心去探究所謂正派、反派角色的心路歷程。但用不好的話容易失焦,簡單的來說,就是一個緊湊的氛圍好不容易鋪陳起來,就硬生生地被砍斷,分鏡到另一個角色去,而等到焦點再回到這個主角的時候,很多讀者早就忘記上次的劇情進行到哪了。但Sanderson的分鏡角色很少會超過三個,而且起碼都會圍繞在同一個敘事的焦點上,讀起來通順多了。至少比冰與火之歌的後幾部曲好,當初看冰與火第四部A Feast for Crows時,我是跳著章節看的,要不然實在很難想起來這個章節的主角上次到底發生什麼事。
最後,我個人認為看Sanderson作品最大的享受,就在於推理解謎的過程。自認為推理能力不錯的我,也是看到故事快結尾的部分才約略猜出來結局。到底伊嵐翠城為何會在十年前發生崩壞,虹譜的宗教信仰究竟從合而來?我相信這是每個正在看Sanderson書的人,如同上了癮般,欲罷不能地翻著書頁的最大原因。
2012-06-07
MediQ 醫療輕鬆排!
畢竟自己也是新手爸媽,每次帶小乖去小兒科門診時,看到不舒服的小朋友們坐在門診診間前的坐位上,既無聊又怕在醫院交叉感染,如果這軟體能讓小朋友在快到自己的號碼再去醫院就診,既可排解看診的人潮和減少交叉感染的機會,我想這是我做這隻App最大的收穫 :)
2012-04-30
關於iOS ARC三兩事
在iOS5引入ARC之前,舊的記憶體管理機制倒是很直覺。譬如每一個NSObject都擁有一個名為"retainCount"的變量,它表示該Object有多少個引用:
example 1:
NSObject *obj = [NSObject alloc]; //alloc會將obj的retainCount+1
[obj retain]; //retainCount++ 通常在Object賦值之後這樣做,代表它多了一個引用。
[obj release];//retainCount-- 通常在使用完該Object的時候這樣做
而當retainCount為0時,運行時環境會通過調用[obj dealloc] 來釋放obj佔用的記憶體。
example 2:
Test *t1 = [[Test alloc] initWithNum:12];//創建了一個物件,t1是該對象的引用,
//由於調用了alloc此時retainCount為1
Test *t2 = t1;//此時t2也要使用該物件
[t2 retain]; //t2要使用物件 就必須要retain,此時retainCount為2
[t1 release];//t1這時不用該物件了 就release了,也就是放棄了物件的使用權,
//此時retainCount為1
[t2 release];//t2使用完了 就release 此時retainCount為0,立刻會調用dealloc來釋放內存
而關於autorelease的用法:
iOS在global的空間中其實維護了一個型別為NSMutableArray的autoreleasey pool物件。可以利用[[obj alloc] autorelease];
這個函式將把obj加入到autorelease pool的Aarray中(此時obj的retain會+1)
autorelease pool會在系統閒置時,會給在Array中所有的Object發送release(retainCount-1)並從Array中移除物件,如果該物件 原本的retainCount為1,則會因pool呼叫release使retainCount為0,進而呼叫Object的dealloc,以此來實現 Memory釋放。
而obj在執行autorealse後,請不要再次執行retain,使得obj的reatinCount為2,在之後autorelease pool發送release時,obj的retainCount會為1,則會發生memory leak問題。
在iOS5引入ARC後,只要使用alloc來創建物件,則它的刪除與釋放就可以交於系統來處理 (retain release 交由compiler判斷)。ARC多了兩個修飾詞strong,weak來描述物件的指標:
strong :
(擁有該物件,即負責該物件的生命週期)
strong所代表的就像是我們所熟悉的retain-->確保這個成員變數在它的母物件尚未被釋放前都是依然有效的
example 3:
@interface DoctorEntity : NSObject
@property (nonatomic, strong) NSString * docName;
+(DoctorEntity*) doctorWithName:(NSString*) docName;
@end
@implementation DoctorEntity
@synthesize docName = _docName;
+(DoctorEntity*) doctorWithName:(NSString*) docName
{
DoctorEntity* doctor = [DoctorEntity alloc]; //doctor.docName retainCount = 0;
doctor.docName = docName; //doctor.docName retainCount = 2
//與外部生成docName的共享物件
return doctor;
}
在DoctorEntity被解構時,會將doctor.name設為nil 一併釋放
但如果強制將doctor.name設為nil
譬如
example 4:
+(DoctorEntity*) doctorWithName:(NSString*) docName
{
DoctorEntity* doctor = [DoctorEntity alloc]; //doctor.docName retainCount = 0;
doctor.docName = docName; //doctor.docName retainCount = 2
//與外部生成docName的共享物件
doctor.docName = nil;
//不管doctor.docName retainCount為多少,retainCount一律清為0
//進而釋放該物件在heap的記憶體
return doctor;
}
@end
weak:
(不負責其生命周期,純粹使用指標)
weak修飾的指標純粹就是一個指向在Heap物件的指標,但是在物件被釋放後會自動設為nil。
如果不宣告,iOS5預設值都是使用__strong來定義變數,由編譯器幫你在適當的地方加上retain和release(與 autorelease),如果要改變預設指標的修飾詞的話,可以在變數前加上__weak。就像是之前所說的weak,也就是說如果之後沒有其它人再參 照它,它就會被設定成nil。
因此一般的堆疊變數(local variables)如果你把它設定成__weak,而且之後也沒有其它的strong pointer指向它,則它就是一被生成就會自動被回收。
example 5:
__weak NSString name = @"My name is Franky";
NSLog(@"%@",name);
執行的結果會顯示為空白(因為這時name已經被設為nil了)
ARC大大簡化了原本使用MRC所需要的程式碼,但凡事有ㄧ好就沒兩好。ARC在程式有使用Block時,如果不小心,很容易引起retain cycle。
關於這個,又可以再寫一篇文章來論述了。
2012-03-08
未來日記
故事的一開始便是由乃(女主角)在Master的主支線上(一周目),贏得了生存遊戲並殺死了所有的參賽者,取得了神的身分後,將整個世界(伺服器)的時間推回了一年前,藉由殺死了一年前的自己,引發了伺服器Create New Branch(這是版本管理的專有名詞,不知道該怎麼翻)的事件,也就是二周目分支世界的建立,未來日記的主要內容便是發生在這個支線上,藉由這個事件影響了在櫻島市伺服器上的所有人(AI)。
在7月28日世界的毀滅日,雪輝(男主角)知曉了由乃的真實身分之後,身為一周目神的僕人姆魯姆魯便將世界的時間推回了兩年前,藉由雪輝救了被自己父母關在牢籠中兩年前的雪乃,又觸發伺服器建立了三周目的分支,而故事的結局Happy End,就是繼承了一周目神的記憶三周目由乃,打破了三周目與二周目的藩籬,很像版本管理的Merge,將二周目與三周目的分支Merge起來,並成為主版本的運行。就如同神所說的,"人死不能復生",這可能是在這殘酷的設定底下,所能想到的最好的結局了。
先不論我這個偏執的版本管理假設是否正確,這部在前年在日本造成轟動的漫畫,紅到富士電視台已經要在這個月推出日劇,我是直到最近才看動畫認識的。我一直很喜歡科幻類的小說與動畫,尤其是日本的科幻類動畫。其實許多優秀的科幻世界idea始祖都是由日本的動畫來的。士朗正宗的攻殼機動隊,電子腦連上網路的架構,其實就是駭客任務世界的基礎。但是像未來日記這樣結合科幻,推理與黑暗特色的好動畫並不多見,也無怪會在前年造成這樣大的轟動,尤其是黑暗這部分的描寫(我一直認為這是日本人的強項 XD),讓我看完後胸口總覺得悶悶的,有一種說不出來的失落感。
2011-11-30
圍繞小乖行星的小呆衛星與小君衛星
說真的,小乖的報到事前並不在我們的規畫之中。去歐洲度完蜜月後沒多久的一天晚上,小君便打電話跟我說,她懷孕了。剛聽到那句話的時候,其實當下的情緒並沒有太大的起伏,談不上很興奮或是激動。只是呆呆地說『很好呀』,接著就腦筋一片空白地一直傻笑。隨著日子一天天地過去,看到小君的漸漸脹大的肚子,突然覺得生命誕生真的是很奇妙,在媽媽小小的肚子裡竟然能裝下一個活蹦亂跳的小Baby。而隨著預產的日子越來越接近,胎動的次數就越頻繁,晚上夫婦倆的樂趣便是盯著媽咪的肚子,深怕錯過小乖踢小君肚皮的那一瞬間。而小乖的出生,照例地也不在醫生的預期之中,前一天才照過超音波檢查,隔天就比預產期提早了三個禮拜,選擇和小君農曆生日的同一天,來到這世界。剛出生時我抱著哭腫了雙眼的他,對著體重才2900公克的小乖說,『你知道媽咪生你很辛苦嗎?』,小乖沒有回應我,只是哭累了躺在我懷裡,睡的好香好甜。
最近這幾周星期天的傍晚,我和小君準備要從台北回新竹時,小乖都會好像是剛做了 一場噩夢似的,突然驚醒大哭。尤其是這個禮拜,他在小君的懷裡醒來後,就莫名其妙地哭的嘶聲力竭,餵母奶和吃奶嘴等平常會讓他安靜下來的方法都不奏效,我只好把他抱過來不斷地拍背,鼻涕和眼淚流地我的肩膀都是,過了幾分鐘後,大概是哭累了,才趴在肩膀上沉沉地睡著了。我小心翼翼地把他放回嬰兒床上,躡手躡腳地離開房間,生怕發出聲響又把他吵醒。回到新竹後,我打電話給高雄的爸媽,問老媽說『是不是小乖知道我們要回新竹了,捨不得我們走才大哭』,我老媽潑了我這自戀的老爸一頭冷水,『兒子,是你自己想太多了』,ㄟ~~對啦,當父母的誰不是無時無刻為兒女想太多 XD。
2011-08-15
Qt與Nokia漸行漸遠?
不可否認地,QT在NOKIA注入整個集團的資源的這兩年中,有很多驚人的發展與進步,LPGL授權吸引了世界各地開源的高手共襄盛舉,sourcecode一年有150萬次的下載記錄,Linux Embedded Device的GUI系統幾乎是QT的天下了(之前去拜訪電子書OEM廠商,也確定放棄自己發展的GUI系統轉而使用Qt)。但自從今年二月NOKIA擁抱WP7,而WP7不支援Qt決策確定後,就註定了兩者漸行漸遠的命運。
Qt的未來在於跨平台的OS數目越多越好,吸引使用者在開發桌上電腦與行動裝置的AP,能夠做到他們所強調的Qt Everywhere。而NOKIA希望QT只在Symbian或是Meego的平台上,幫助仍忠於其平台的開發者就好(難道自己花大錢把Qt扶植起來,卻被對手公司所用嗎?),這兩家公司的商業利益已經不再一致,即使許多新的技術目前還只是支援Symbian,但是在forum上卻不少開發者成立自己的社群,將Qt延伸到他們所鍾愛的平台上。從Developer自動自發將Qt porting到Android與iOSX上的速度來看,許多開源的Programmers對NOKIA已經失去了耐心,NOKIA將Qt賣給Digia應是遲早的事情了。