Debug with dSYM

When you have a crash log sent from Apple AppReview, the file is filled with Symbolic link.

In this scenario, it is very useful to use dSYM file to debug.

dSYM file will help you to map the symbolic file to the line number of the original code.

 

To make XCode 4.3 or above generate dSYM file:

1) Build Settings -> Build Options -> Debug Information Format = DWARF with dSYM

2) Build Settings -> Apple LLVM compilier 3.1 – Code Generation -> Generate Debug Symbols = YES

 

The location of the dSYM file is shown in the following screen captures.

這個slideshow需要JavaScript。

淺談管理:勢篇51

「善戰者,求之於勢,弗責於民。」孫子兵法.勢篇.51

大意是:真正懂戰的人,是在勢上尋求取勝之道,而不㑹苛責部下盡力與否。

管理,如是。
好的上司,是計算好全盤定局,而不是硬推員工 OT。
「多算勝,少算不勝」,管理與用兵一樣,都是運籌帷幄之中,即是,「未戰而勝」,不用打就知是否能勝。要打才知的,是庸才。這等於是準備打敗仗。
不禁想起CY。在特首選舉,他顯有未戰而勝之計。

For developers: random crash debug

Recently discovered a bug of iOS which will cause random crash.

According to researches, the crash will appear in the possibility of range from > 0.1% to 2%.

As most experienced programmer know, this is extremely annoying type of bug.

The annoying-ness is due to the randomness, which is very hard to trace and catch.

This type of bug may spending weeks to solve one.

 

[ Symptom ]

If console is available, the console output should be similar to

<Error>: *** Terminating app due to uncaught exception ‘NSFileHandleOperationException’, reason: ‘*** -[NSConcreteFileHandle writeData:]: Bad file descriptor’
*** First throw call stack:
(0x3302f88f 0x34fd4259 0x3302f789 0x3302f7ab 0x376dcd15 0x376ba2a3 0xb8cfd 0xd19ad 0x3556ecab 0x355687dd 0x35536ac3 0x35536567 0x35535f3b 0x330d322b 0x33003523 0x330034c5 0x33002313 0x32f854a5 0x32f8536d 0x3556786b 0x35564cd5 0x91fff 0x91fb4)
Jun 6 19:46:30 unknown ReportCrash[270] <Notice>: Formulating crash report for process APP_NAME[268]
Jun 6 19:46:30 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.APP_NAME.APP_NAME[0xdd2e]) Job appears to have crashed: Abort trap: 6
Jun 6 19:46:30 unknown SpringBoard[23] <Warning>: Application ‘APP_NAME’ exited abnormally with signal 6: Abort trap: 6
Jun 6 19:46:30 unknown ReportCrash[270] <Notice>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/APP_NAME_2012-06-06-194630_IPAD_NAME.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

The crash log should be like:

Incident Identifier: 16C417D3-236D-473E-B10B-A9072AE69273
CrashReporter Key: e69210ad08c63842187ed72017cd40c0675b8b69
Hardware Model: iPad3,3
Process: APP_NAME [11251]


0 libsystem_kernel.dylib 0x352f8004 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x352f81fa mach_msg + 50
2 CoreFoundation 0x32e053ec __CFRunLoopServiceMachPort + 120
3 CoreFoundation 0x32e04124 __CFRunLoopRun + 876
4 CoreFoundation 0x32d8749e CFRunLoopRunSpecific + 294
5 CoreFoundation 0x32d87366 CFRunLoopRunInMode + 98
6 CFNetwork 0x36b59e14 CFURLConnectionSendSynchronousRequest + 340
7 Foundation 0x374854a6 +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 242
8 APP_NAME 0x0006a6fe 0x26000 + 280318
9 APP_NAME 0x0006a5fa 0x26000 + 280058
10 APP_NAME 0x00068034 0x26000 + 270388
11 APP_NAME 0x00067bc6 0x26000 + 269254
12 UIKit 0x35370ca4 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1176
13 UIKit 0x3536a7d6 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 402
14 UIKit 0x35338abc -[UIApplication handleEvent:withNewEvent:] + 1004
15 UIKit 0x35338560 -[UIApplication sendEvent:] + 48
……
……

 

[Solution]

The cause of the bug, is traceable back to the [NSURLConnection sendSynchronousRequest:returningResponse:error:]

responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

The solution is:

1. Check if the URL opening is a redirecting URL. If so, change it to be non-redirecting.

2. Change the synchronous request to asynchronous request, with delegate.

3. Add this implementation in the handling:

– (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *) redirectResponse{
return request;
}

Done.

隨筆:PM 之二

承上題,有關 PM 與牧養。

從這角度看,㑹有新共通點發現。
男性與女性,需要不同牧養角度;對 PM 的反應也大致相同。

男性較接受 Facilitator 的牧養,也是較接受 Facilitator 的 PM。
女性則較接受 Fatherhood (Motherhood) 的牧養 / PM。

不過,Facilitator 和 Fatherhood 這兩者本身是相違的。大多數人只徧向一樣。需要經驗磨練才兩面都兼顧到。

純粹如是我聞。

隨筆:PM

有時,真的覺得,做PM和在教㑹中做牧養 (e.g. 組長),感覺很像。

好的PM,不是單單使事情做得好和有利,而且當中很重要的是人的元素。

下屬覺得你關心佢,關注佢利益,感受到佢的感受,同佢有理心,和最基本的,當佢係個人,自自然然就㑹同你賣命,出事都唔㑹走左去,而去你共同進退。

好的PM,有點像個大哥哥 / 好爸爸。教㑹中的牧養,也是一樣。:)

Handwriting Input Style installation instruction

Handwriting Input method is a very good function provided as default by Mac.

Below is how they are activated by user:
1. Check the installation of your trackpad.

If no trackpad detected, in Setting->Langauge & Text, the screen should be looked like the picture below.

Noted that there is no choice available about the Handwriting Input Style.

2. If you installed the trackpad correctly,the same dialog box should look like this one instead.

Just check the box next to the Handwriting Style.

Notice how the HotKey change to provide hint of how to activate.

The HotKey means: control+shift+space

Finally, the diagram below provide supplementary information of how you can find the option to install the trackpad.

You must have trackpad installed to activate Handwriting Input Style.

Flurry Agent Version code

I found not much info about flurry version available online. So I decided to write my own.

You can always find your version of Flurry, either in the file name of the downloaded batch, or inside the RELEASE_NOTES.txt file.

 

75 = v.3.0.7

78 = v.3.0.9

79 = v.3.1.0 (which does NOT use UDID)

PM vs BD

今天,討論了新一個課題。
Project Management (PM) 的 Mindset, 和 Business Development (BD) 的 Mindset很不同。

PM, 是一個Science。BD, 是一個藝術。
在PM的語言, 1+1 必定=2。在BD, 1+1 可以等於1, 2, 2.5, 3, 3.14…..任何數字。

對PM 來說,budget 爆了0.1%,時間爆左1%, 也是failure.
對BD 來說,budget 或時間 爆了20%,也還是很滿意,很好。

PM, Project as Planned 是 objective / guideline。是軍隊式的守則,可以用 Mission Accomplished 去形容工作。
BD, it is growing 是 objective / guideline。是栽種式的思考,永遠沒有結束的一天。

原來,當 PM式思考遇上 BD式思考,會有很多不同意見和觀點。大家思考方式背道而馳。
PM要搞生意,也要換成 BD式思考,否則很多搞生意必須有的決定,是不會做的。

隨筆:Employment

老闆很少是壞人,員工卻多是不懂得從老闆角度看事物。

上司的角度,往往從整個機構的生存能力著想。(這裡只包括老實踏實的實業家,不包括貪利者和商業炒作)
員工的角度,往往從個人利益及自由權利著想。
一旦個人利益與群體利益有衝突,員工就堅執個人利益,但有沒有嘗試從群體利益著想?
常見的員工心態,是公司能運作下去,是必然的。就算不做工作,好像公司也能運作下去。

有一個遊戲叫 “Fable 3″,遊戲中談到有個暴君,遊戲前半部主角力盡千山萬水推翻暴君。成功以後,遊戲下半部這個主角取代之成為統治者。這才發現到,原來暴君之所以橫徵暴儉,是因為國家面臨滅亡危機,搞不好會死傷連連,生靈塗炭。主角這時有兩個選擇,一是做個暴君但拯救到國家,一是大做好人但國家滅亡。若是你,會如何選?

自己到現在成為高層,回想廿歲以來工作所學,都有感慨原來很多事從老闆角度看,是很不同的。只需站高一尺,看的便很不同。
(這篇FB上很多廻響)
Like ·
Valen Cheung and 2 others like this.

Ken Chan 世界一定有第三個選擇, 英雄之路… 只係英雄就是要連命仔都押上才可!
May 10 at 12:35pm · Unlike · 1

Ken Chan 好老闆多數從制度著手, 好的制度自然提昇士氣, 增加生產力, 減少怨氣!為之王道!
如果暴君,為救國而實行苛政, 這個公司最好還是選擇自我犧牲好!無為做難市之餘又做死人!
May 10 at 12:41pm · Like
CK Chan 同第二條路有什麼分別?(大做好人但國家滅亡)
May 10 at 12:41pm · Like
CK Chan (先旨聲明,這不是我公司的故事,純粹討論)
Well…制度不一定解決到問題。人類找尋完美政治制度幾千年,幾時找到過?
這是Mathematically proven 的問題: organic management vs inorganic management.
May 10 at 12:44pm · Like
CK Chan 不過,我也不贊成苛政。
我們都是支持cy的,其實cy面對的處境,就會係一個版。
「公司」若是香港,寧願犧牲「香港」嗎?這就是曾蔭權的方向。
寧願冒險實施不是人人理解的政策嗎?這是董建華的方向。
cy 和董較近。但相信他從董身上反思了不少,或許他有人生智慧找到兩者平衡之點。
May 10 at 12:49pm · Like

Desmond Chow 而中層就夾在兩者之間, 既要協助老闆執行公司/群體利益的政策, 同時又要向老闆反映前線員工的訴求, 以求穩定工作環境/產量/質素, 兩邊的角度都很清楚, 但可發揮的空間不多, 很視乎老闆放手的程度
May 10 at 1:30pm · Unlike · 1

Desmond Chow 你的感慨我也有同感, 站高一尺, 看的便很不同, 而且公司能運作下去絕不是必然的
May 10 at 1:33pm · Like
CK Chan ‎Desmond Chow, good sharing.
同意,中層員工很不易。不同老闆性格與信心都很不同。

這樣想,前線員工較幸福嗎?又不是必然。
個人經驗是,只要「各司其職」,各人做好分內,包括老闆,高層,中層,前線,其實自自然然就會剛剛好,剛剛分擔好。
這也是 organic management。中國人早過西洋管理學二千年發現這道理,就即是道家的「無為而治」。
儒釋與基督信仰卻解答了核心問題:人心的好壞是重要過制度,對事情有決定性的影響。
May 10 at 1:41pm · Like

Ken Chan 其實有分別, 制度本身係要有獎有訓,
不同行業要行不同制度, 制度沒有最好只有更好
但只有訓沒有獎一定係差制度…
只為公司利益唔係同員工 WIN WIN 或分享成果, 都係差制度~
May 10 at 1:42pm · Unlike · 1

Ken Chan 成功的公司, 係行WIN WIN 制度.. 同樣有獎懲, 但係公司成功, 員工亦同時取得成功, 其中一樣係派認股權.. 公司上市後可以得到股分~
May 10 at 1:43pm · Unlike · 1
CK Chan 站高一尺,便有 paradigm shift.

@Ken Chan: 士別三日,如隔三秋:)
看來你都是好老闆。
Win-Win 是成功商業必備。
May 10 at 1:45pm · Like

Ken Chan 歷史亦有不少好君主行過不是仁政, 通常係其子孫衰, 不依制度行, 不是原本制度是很好, 很多覺得減稅是對國家不利, 相反
香港低稅制曾為香港帶來更多機遇, 所以苛政不一定最好~
May 10 at 1:45pm · Like

Ken Chan 不過小公司正正係嚴重赤字XDD… 要做D 野
May 10 at 1:46pm · Like

Ken Chan 我公司得PRODUCTION TEAM~ 得我係SALES~
May 10 at 1:49pm · Like

Desmond Chow 我未做過大公司/上市公司, 不了解大公司的做法. 中小企其實長期是危危乎狀況, 老闆為了公司可以繼續經營, 可以養得起班員工而費煞思量. 獎懲制度最實際是bonus / 人工 / 升職機會, 其他福利, 假期, caring之類, 對前線員工而言是bullshit. 不過除了sales team可以貫徹跟員工分享成果, 其他員工的獎勵就很視乎老闆的想法
May 10 at 1:49pm · Unlike · 1

Ken Chan 無好產品, 如何有好SALES, 當明白WIN WIN 重要, 公司才能真正成功~~~
出去了, BYE~
May 10 at 1:50pm · Unlike · 2
CK Chan ‎Ken Chan, 印象中,你做PRODUCTION 都唔錯丫

如何evaluate 非前線員工的價值,一直是很值得思考的問題與值得培養的公司文化。
有好的評估機制,就可以鼓勵到這班核心生產力
May 10 at 3:24pm · Like

Ken Chan 其實好簡單, 前線同開發都有一個按營業額掛扣的機制
大公司可以選派股份當獎金,咁所有資深員工就同公司更加忠心盡力
小公司就直接派錢, 最重要唔係老闆覺得開心就派多少, 最重要有數得計…
老實講很多老闆肯比花紅都唔肯比人知點計出來, 結果開發團隊覺得跟本公司賺10億都只會派一個月花紅, 當然會失去推動力!
如果公司肯抽10% NET PROFIT 做全體員工獎金總數, 結果係公司賺10億, 1億比員工分, 個動力係好唔同~
May 10 at 6:06pm · Like

Ken Chan SALES 應該分多一份, 因為前線很多時係最受氣~~
最多, 年終花紅分番細份D ~
May 10 at 6:07pm · Like

Desmond Chow main point: “老實講很多老闆肯比花紅都唔肯比人知點計出來, 結果開發團隊覺得跟本公司賺10億都只會派一個月花紅, 當然會失去推動力!" 要老闆肯開條數先做得到~
May 10 at 6:07pm · Like

Ken Chan 我肯架… 怕咩喎… 細公司有時無咩秘密~ 我成日估勵員工創業TIM~
May 10 at 6:08pm · Like

Desmond Chow 果然係好老闆!
May 10 at 6:08pm · Unlike · 1

Ken Chan 佢有本事, 又很做, 唔怕辛苦, 由佢做~~~
我會成日講做老闆有好多野要注意, 同很多野要上身 😛
我最驚佢唔做~~~ 公司賺到錢, 我將佢幫公司賺純利的4成投資番比佢公司各佔50%股份都仲得TIM~~
May 10 at 6:10pm · Like

Desmond Chow 不過又要睇下公司的營運模式嘅~
May 10 at 6:11pm · Like

Ken Chan 無架, 細公司很多時你唔講佢都好快摸到方法,隨時個客教佢做~ 中間個客又著數左~
成日防, 員工未走得仲快,應該正面鼓勵佢做老闆!第一件事教佢事事一馬當先,盡快做完做到最好!
第時你做老闆,個各先會返轉頭!
May 10 at 6:13pm · Like

Ken Chan 我做管理, 開公司都無人教過我啦~~~
全部自學, 自己邊做邊學, 樣樣事一馬當先~
May 10 at 6:15pm · Like
CK Chan 基本上,正面和員工 win-win,而不是利用員工,都係其中一樣重要的管理原則。
autonomous, independent, responsible, 呢三樣都係我 in 人時最期望有的質素。
不過,香港呢,想賺細錢既員工,大把。俾高d人工,比正常俾高一兩萬佢好未?但都只係細錢。
但為了細錢,損失了成長和挑戰升級的機會,唔止值幾十萬。
工作和讀書上遇過既人,學到野,成長後找到的,遠多於這個數字。
May 10 at 6:29pm · Like

Ken Chan 在我請人時, 我只考慮能力與態度!
我昇人, 加人工就只考慮,表現, 紀律, 態度, 結果, 但以團隊行先~~~
我唔駛要DR. 唔駛要英雄, 只要團隊. 獎一起獎, 罰一起罰.
May 10 at 6:37pm · Like
CK Chan 都係。「leverage 到團隊」呢種能力,係最有價值的。
因為其個人本身已很需要自主、獨立與負責。
而更加上企業性視野,等於和上司或老闆在同一高度看事。
May 10 at 7:18pm · Like

Ken Chan 不過呢個係一個基本現有基制的做法~~
我有一個超越時代的想法~~
如果第日小弟公司唔覺意發左達有機會試行~~~
就係將公司機制完全MMO化 XDDDD
May 10 at 8:46pm · Unlike · 1