tag:blogger.com,1999:blog-70430669762838753452024-03-05T15:42:18.104+08:00Edward in ActionYour business model journey guide.Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.comBlogger159125tag:blogger.com,1999:blog-7043066976283875345.post-25415627098105826502020-02-20T09:23:00.002+08:002020-02-20T09:33:35.448+08:00從使用者體驗談桌遊設計 2020.02 版<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-n3E-NUN1MeA/Xk3gMzy4gNI/AAAAAAAANqg/dyGsYhsnw4Q5-7Nd_n59ya9ci2xQZw58ACLcBGAsYHQ/s1600/IMG_7356.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-n3E-NUN1MeA/Xk3gMzy4gNI/AAAAAAAANqg/dyGsYhsnw4Q5-7Nd_n59ya9ci2xQZw58ACLcBGAsYHQ/s640/IMG_7356.HEIC" width="640" /></a></div>
<br />
坐在家裡陽台看著天邊,領悟出幾個要點,在一個好的藝術作品,不論是手機 App、畫作、遊戲,要成為一個所謂人稱大師,要有幾個條件:主架構要穩,小細節要有學問,要能夠通俗讓大眾理解同時,又能完成整個作品、產品想要表達的核心精神。<br />
<h2>
設計資產:手邊要有設計模式寶庫與詞條</h2>
如果要帶驚悚感,那麼生命與兇殺元素就要加入。要帶入旅行感,那麼疆土與路線與路上遭遇元素要有。要帶入探險感,那麼不確定與驚喜和運氣元素要帶入。最近領悟到 PS4 遊戲死亡擱淺的設計師小島秀夫的木棍與繩,這是連接感,可以串起此點與那點,那麼可以運用在時空上的接觸,可以運用在人與人之間,但是不同時空的接觸,例如過去人蓋的道路,現今旅客可以走過,過去種的樹,今天路過的人可以躲太陽躲雨乘涼使用。在軟體開發技術上學習,網路上也有很多元件展示庫,例如一個按鈕有超多種效果與使用,一個下拉選單可以有多少種變化。<br />
所以不論是自己想要創作,或者受人委託,手邊的收藏庫是要有的,而且能夠分門別類,自己在整理過程整理這些知識道理,而之後要使用時候,能快速導入運用與嘗試。<br />
<h2>
魚骨頭主架構</h2>
<div>
在整理主架構會用 Xmind 製作心智圖,先完成背景的蒐集,這個主題在當代、古代時候碰到環境是怎麼樣,當時登場的人事時地物有哪些,在這個過程除了知識上學習之外,也能整理出意想不到事情。近日在研究晚清時代當下,為何朝廷的敗弱,當時的老百姓會碰到哪些生靈塗炭,而只要研究慈禧太后,她歷經了 5 位皇帝。就能了解幾乎全貌。</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3qR1w5-e37C4xx-e42U68-_u7vgmrjttqM752C0oCFvI2qmkVIVBk37_0D3gZxRp-C8KhtqNaEiRn-msFZ6pgcIlbmFZPgXHArVFu5KOCgtb3okaDpIytpZ73Wuqa1Hq9HMazI3jf728/s1600/Screen+Shot+2020-02-20+at+9.13.25+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1043" data-original-width="1600" height="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3qR1w5-e37C4xx-e42U68-_u7vgmrjttqM752C0oCFvI2qmkVIVBk37_0D3gZxRp-C8KhtqNaEiRn-msFZ6pgcIlbmFZPgXHArVFu5KOCgtb3okaDpIytpZ73Wuqa1Hq9HMazI3jf728/s640/Screen+Shot+2020-02-20+at+9.13.25+AM.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">故事背景收集</td></tr>
</tbody></table>
<div>
在主軸不變下,無數個桌遊玩法被砍掉重練後,設計桌遊主軸是不會變,於是用了 Xmind 也畫出了一個魚骨頭,開始在分支上填寫各個重點。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQEzPOzittBlBM2xyZEJkQuycDrAm7GF9Z5e7N9X-4ppxAHP05F1qxYgRjWXn_NtvrGmZYhwNmRYeHiXI9Isuv6L2VGDpn-9nkkmFaGtk6ludz06LGHKxfKSK5ySThjWARfskuZK-CM4/s1600/Screen+Shot+2020-02-20+at+8.19.16+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="1600" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQEzPOzittBlBM2xyZEJkQuycDrAm7GF9Z5e7N9X-4ppxAHP05F1qxYgRjWXn_NtvrGmZYhwNmRYeHiXI9Isuv6L2VGDpn-9nkkmFaGtk6ludz06LGHKxfKSK5ySThjWARfskuZK-CM4/s640/Screen+Shot+2020-02-20+at+8.19.16+AM.png" width="640" /></a></div>
<div>
<br /></div>
<h3>
詢問遊戲願景的為什麼 Vision and why</h3>
<div>
這款遊戲是要帶給玩家的使命感是什麼,當帶領玩家進入這款遊戲,想要從什麼地方開始,這時候的心情是什麼。</div>
<h3>
遊戲目標 Goal</h3>
<div>
希望帶給玩家什麼樣的目標,在經歷了 20 分鐘遊玩、 30 分鐘遊玩,他們在探索什麼東西,目標完成哪些事情。</div>
<div>
<br /></div>
<div>
以上兩點是帶起玩家的遊玩動力、動機與興趣。</div>
<h3>
如何設置 How to setup</h3>
<div>
這款遊戲局面如何打開,要怎麼擺放,需要花多久時間,需要參考說明書嗎?怎麼樣形式開局,開局是固定的,講究玩家技巧,還是開局是隨機性,講究給玩家探索的氛圍。</div>
<h3>
如何開局 How to begin</h3>
<div>
開局玩家拿著什麼。這點還蠻有趣的,大家常說誰誰誰開局拿到什麼,誰誰誰開外掛,起點就跟別人不一樣。有什麼你是否在遊戲過程就能體驗人生,你開局享有特權比別人多,比別人更多選擇更多優勢,後面隨便怎麼玩都能贏,是件很快樂很爽的感覺。但是如果目標不變,而當到尾聲後起玩家崛起,在過彎超車時候,這時候無名英雄才是那個會被登上大劇的主人翁,而享有優勢的那位會變成不勝唏噓的苦笑對象。所以如何開局,讓玩家拿的東西是剛剛好,又能從手上的資源,來學習這個桌面上的世界觀。</div>
<h3>
每一回合要做哪些事情 What to do in each round</h3>
<div>
每個玩家在一個輪數裡面可以做哪些事情,來影響這個局面,而這個順序會花費多少時間思考,多少時間行動,每一個行動是否順利且容易上手,不需要一直翻閱說明書。而在旁邊等候的玩家在做什麼事情,是在幫助這位玩家呢?還是奸詐狡猾看著行動玩家偷笑呢?還是已經無聊到在滑動自己手機新不在焉了。這個部分會是遊戲設計內容重點,1 人遊玩、2 人遊玩到派對型人數遊玩都非常重要。</div>
<h3>
玩一場要多久時間 How long will it take</h3>
<div>
一場遊戲如果要花很長時間,那麼比較能給玩家有沈浸感覺,完成一件了不起的事情,例如羅馬共和桌遊,跟朋友扮演著市議員一起討論羅馬外患以及內政,上手後遊戲推進也不快,一場下來要 1 小時,而被打開的頻次也因此降低許多,變成不容易推廣流傳。過去也觀察到,朋友們在介紹一款新桌遊放在桌上即將要開的時候,也有人會先問,請問這款要多久時間,因為我等下幾點有事要先走。(哈哈,講到這裡覺得遊戲設計師都要三條線頭上飛過去烏鴉了)所以為了避免設計大師推出後的失望,這個在設計過程就要考量。</div>
<div>
光榮出的三國志 PC 版非常的紅,一場下來要玩非常非常的久,但是很喜歡它的小劇本模式,例如我的偶像是諸葛孔明,就有一篇短劇本是蜀國恢復漢室,那關要完成征服南蠻,然後北伐進軍長安與洛陽。這樣的一個遊戲遊玩不會太長,又能立刻跳到一個小而巧的局面。</div>
<h3>
如何完成遊戲 How to get to the end</h3>
<div>
遊戲怎麼樣做結束,這是每一種玩家開始玩之後都最期待想知道的答案。希望到時候的局面長什麼樣子,希望留給每一位玩家在心裡有的最後樣貌,誰贏了,誰輸了,誰的技巧不錯,誰是這場的 MVP。</div>
<h2>
桌遊大師的醍醐灌頂</h2>
<div>
我在大概在 2019 年 12 月底起了頭,開始進入除了所謂桌遊設計,覺得還不如說有 80% 時間是在美勞設計,三天兩頭跑書局文具店,在架上找自己要的文具,口紅膠、膠帶座檯比較好黏貼作業、切割刀好好切比美工刀慢慢割好多了、護貝套、色筆。</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY8G5cG0u-amZHpifY07STLBz9ycVuki94vREh7y6mpzWCYlhfAmzh5RDzgN4DiLVFa8tE7rUIDjQ6jCZXcJZUqimOZeW4U0waTFo38-nVkNRgA7Lqk7Rt46HOXOW7qwutIaLkOMkoZyY/s1600/IMG_0272.HEIC" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY8G5cG0u-amZHpifY07STLBz9ycVuki94vREh7y6mpzWCYlhfAmzh5RDzgN4DiLVFa8tE7rUIDjQ6jCZXcJZUqimOZeW4U0waTFo38-nVkNRgA7Lqk7Rt46HOXOW7qwutIaLkOMkoZyY/s640/IMG_0272.HEIC" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">這版本在拿給朋友們測試前已經改掉了。想要表達不用手寫手撕,這階段可以做到程度。</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
<br /></div>
<div>
幾個人跟我說,這個階段拿紙跟文字寫寫畫畫就好了拉!對不起,如果真的亂畫亂撕,我真的端不出來,萬萬不敢拿出來欺負騷擾侵害偉大的遊戲測試家遊玩的心情。</div>
<div>
<br /></div>
<div>
東西整齊、清楚、甚至防飲料水或者手汗的保護套膜都會上。文字都是用印表機列印,不要自己手寫到昏倒。</div>
<div>
<br /></div>
<div>
當自己很用心的研究兩個月,自己碰到撞牆期,卡住砍掉重練,經過多次測試修改測試修改,最後很不容易的端出了 v1.0 版本後,自己心裡還是沒有很踏實。</div>
<div>
<br /></div>
<div>
很認真並且用心的預約了一位桌遊出版社大師,他也很用心的開門招待,我就在邊擺設遊戲過程邊介紹規則邊玩了,過程細節以及產業以後有機會分享,今天這邊談設計,先講大師給予的指導。</div>
<h3>
還是圈外人,要能擠進圈內</h3>
<div>
兩個月時間還是太短,雖然 Edward 我有遊玩桌遊的 8 年以上經驗,但是總是那幾款,對於市場桌遊沒有全部很透徹,遊戲題目很有想法,但是遊玩方式就跟某些大作撞在一起,如果遊戲玩法跟大作太像太像,那麼大師以及玩家腦海裡就會拿那個大作來跟眼前相比,這是一個非常危險的事情,因為這個階段設計很難跟世界級的比較,而且人家都已經做好無數測試了,玩家這時候為什麼要玩這個。除非除非就是像中國的山寨遊戲了,拿國外的玩法來套過內的 IP (Intellectual Property,智慧財產),但是這樣的市場只能在這地區,走不出去。市面上有太多例子,就像三國殺很難紅到國外,國外人是玩西部牛仔的 Bang 遊戲一樣。那麼這樣的遊戲就很能商業化推廣。</div>
<h3>
設局模式可以,微創新不容易</h3>
<div>
我就舉手請問了,那如果新手很難很難原創一款遊戲玩法,那麼如果從微創新呢,拿某某遊戲來微改。其實這題大師沒有很正面回答,但是我們應該多少有點答案。但是大師說設計模式可以,很多的玩法被驗證過可行,就可以導入。於是這邊就呼應到上面提到的設計模式寶庫,怎麼樣的遊玩,就要用怎麼樣的形式來帶入。</div>
<h3>
成本考量</h3>
<div>
新手像我往往為了想要目標向大作靠攏,所以不斷的對遊戲添加再添加,但是就會要加入非常多的遊戲周邊與指示物。大師會談過程不斷問這個成本成本,原來他說的成本是製作這個東西的方式,也舉了許多市面上產品的例子,如果是要以銷售為考量,成本低,售價就不用太高,玩家可購買意願可以變多些,然後怎麼在成本下降設計巧而美,又能讓玩家想要購買,便於攜帶,其實是這邊一個很大重點。聽到這,望著著桌上這 v1.0 遊戲,內心也不斷在思考哪邊可以減。</div>
<h3>
可圈可點</h3>
<div>
遊戲大師講出了非常多之前遊戲測試好友玩過程皺眉頭地方,變成了設計道理出來,收穫最大與最驚艷。這款遊戲賣點在這邊,那麼這邊就保留著,而遊戲玩法跟大作撞到就直接砍掉重練,另外遊戲流程上有些區塊有不確定感,容易給玩家怎麼樣怎麼樣,就在這樣過程把自己 v1.0 劃分了,保留區、強化區、砍掉區、大改區這樣結束這次醍醐灌頂的會談了。</div>
<div>
<h2>
OmniGraffle 設計</h2>
<div>
我會用 OmniGraffle 而不是 Sketch 原因在於,OmniGraffle 可以做到實體 cm, mm,這對於列印出來剪裁要製作成多少大小很重要。Sketch 是講究向量,雖然 Sketch 有幾個 cm, mm 轉換小插件,但是還是不符合現在想用,所以在這階段選擇 OmniGraffle,調整起來已經很熟悉了。</div>
<div>
<br /></div>
<div>
已經來到設計稿第五版。</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://1.bp.blogspot.com/-MdBnmmhBaL4/Xk3fEcCDtxI/AAAAAAAANqE/Cm3jzIyVjm0l13LuQVneGWORltJhspKFACLcBGAsYHQ/s1600/Screen%2BShot%2B2020-02-20%2Bat%2B9.20.27%2BAM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1223" height="320" src="https://1.bp.blogspot.com/-MdBnmmhBaL4/Xk3fEcCDtxI/AAAAAAAANqE/Cm3jzIyVjm0l13LuQVneGWORltJhspKFACLcBGAsYHQ/s320/Screen%2BShot%2B2020-02-20%2Bat%2B9.20.27%2BAM.png" width="244" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;">建設板塊</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoWwM7k4Tuh1MkUrOWxn03vLkQohdLumovrbhlffPFtJFa9q2VnAl6FhuY-H8SkGG7FA5PTI3BclY-LmwaPXe5WgGNMQtyjAJgjZ-cwm1hwvJKR7tuYKsBUZMn5W9K7MMeVDLck9DRntk/s1600/Screen+Shot+2020-02-20+at+9.20.39+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="600" data-original-width="1140" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoWwM7k4Tuh1MkUrOWxn03vLkQohdLumovrbhlffPFtJFa9q2VnAl6FhuY-H8SkGG7FA5PTI3BclY-LmwaPXe5WgGNMQtyjAJgjZ-cwm1hwvJKR7tuYKsBUZMn5W9K7MMeVDLck9DRntk/s320/Screen+Shot+2020-02-20+at+9.20.39+AM.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;">市鎮板塊</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://1.bp.blogspot.com/-8CZPb72cHT0/Xk3fEZaPdqI/AAAAAAAANp8/J68lo_6r5CIuU_euhNO9A720DFG9vjxagCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-02-20%2Bat%2B9.20.51%2BAM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1070" data-original-width="1600" height="214" src="https://1.bp.blogspot.com/-8CZPb72cHT0/Xk3fEZaPdqI/AAAAAAAANp8/J68lo_6r5CIuU_euhNO9A720DFG9vjxagCLcBGAsYHQ/s320/Screen%2BShot%2B2020-02-20%2Bat%2B9.20.51%2BAM.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;">標價指示物</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHUCtOV36PrHtWQV5T4qRXOkyq7XDSruFTLyWONn7vz_jlcAfFDVjgXvmUF1UAZOgTlISaavNMBYua08cgHS26yUzDWOBa8IVtqyRTn8-AoOo3WRevj6kSaGVbAVBLB00i6_A8bdeLDwg/s1600/Screen+Shot+2020-02-20+at+9.21.05+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1064" data-original-width="1590" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHUCtOV36PrHtWQV5T4qRXOkyq7XDSruFTLyWONn7vz_jlcAfFDVjgXvmUF1UAZOgTlISaavNMBYua08cgHS26yUzDWOBa8IVtqyRTn8-AoOo3WRevj6kSaGVbAVBLB00i6_A8bdeLDwg/s320/Screen+Shot+2020-02-20+at+9.21.05+AM.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;">藥材,商貨其中一種</td></tr>
</tbody></table>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0UT4iW4OLs-5Z1lwXMFv2U6_uH3GIqvutDRH4E7q-xWvZGyab1wTgVV9nrlN7l9XuvUURsfV4pHAi2HUfx1UEKp8onMeyCT0RxST3oGV7VYf_i36p9e0thdP4sJxEceXtWUS7IaIMfAc/s1600/IMG_4203.HEIC" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0UT4iW4OLs-5Z1lwXMFv2U6_uH3GIqvutDRH4E7q-xWvZGyab1wTgVV9nrlN7l9XuvUURsfV4pHAi2HUfx1UEKp8onMeyCT0RxST3oGV7VYf_i36p9e0thdP4sJxEceXtWUS7IaIMfAc/s640/IMG_4203.HEIC" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">朕的江山 - 砍掉重練的新玩法的一角而以喔</td></tr>
</tbody></table>
現在大改版的大架構桌遊底已經出來了,兩個月前起頭的理念沒變,題目沒變,玩法變了,設計變了,現在正在思考上面設計模式,想要帶個玩家什麼遊樂感覺,就要帶入哪些設計元素。Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-40030931222843800572020-01-15T21:52:00.000+08:002020-01-16T02:15:25.250+08:003D Printing - 初次列印,多多指教<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-AlaTeTJwq-k/Xh8TmKQ1PpI/AAAAAAAANnM/ekWGNw_3gnE5_aiPM3jb3IhglWbaaZ2DwCLcBGAsYHQ/s1600/IMG_5372.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-AlaTeTJwq-k/Xh8TmKQ1PpI/AAAAAAAANnM/ekWGNw_3gnE5_aiPM3jb3IhglWbaaZ2DwCLcBGAsYHQ/s640/IMG_5372.HEIC" width="640" /></a></div>
<br />
近日採購了 3D Print 非常入門款,買最初階就跟買空拍機心情一樣,如果買太貴等下從高空摔下來怎麼辦,買太貴等下 3D Printer 機器玩壞怎麼辦。所以選了一台小而美,外型好看,來邊摸索邊學習。目前需求是業餘的做雛型設計使用。<br />
<br />
動機是近日跟好朋友在設計自己的桌遊,桌遊除了背景探索、遊戲規則設計,下一步就是進入雛型設計了 Prototyping,一般桌遊可以用紙板加上些簡單圓形方形木頭,用不同顏色來做區分。但是如果要有一個形體,設計成本就會上升了。上網找了 3D print 好的小公仔,費用不低、還要運費、還要等候時間,無法試錯。快速試錯快速調整是在科學實驗裡面最重要一環結。因為過程有可能題目不對,規則不對,種種影響,所以試錯是一個重要環節,也是一個過程挑戰與樂趣跟學習。<br />
<br />
綜合考量下來,起步先添購一台 3D Printer,然後到網路上找 3D model 原檔直接列印,其實這樣的試錯、設計的過程是比較理想中長期發展的方向。<br />
<br />
這台叫做 da Vinci nano w 在 PCHome 24hrs 買的。<br />
<br />
<h2>
組裝階段</h2>
這段還算容易,拆箱後照著 Youtube 官方影片步驟一起操作是沒問題的。 <a href="https://www.youtube.com/watch?v=ts6KLFl7HK4" target="_blank">https://www.youtube.com/watch?v=ts6KLFl7HK4</a><br />
<br />
跟印表機一樣,先用 USB 跟它連接做初始化設定,也是先將無線上網功能先設定好,這樣筆電就可以拿著到處移動,不會被綁在列印機旁邊。<br />
<br />
<h2>
進材料階段</h2>
覺得這段還蠻有意思的,所以製作了一個記錄影片。可以看到素材從後面透過輸送管輸送,一路到前面進入讀頭,最後從出口流出後,就可以按下進料關閉按鈕。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/KDt10EAACD8/0.jpg" frameborder="0" height="480" src="https://www.youtube.com/embed/KDt10EAACD8?feature=player_embedded" width="640"></iframe></div>
<br />
<h2>
列印過程碰到問題</h2>
<h3>
玻璃片抽不出來</h3>
底部玻璃片我抽不出來,卡槽已經解開了,還是取不出來。看它前後都扣著。真的不是可以硬拆的方式。所以貼紙只好自己硬貼,貼的有氣泡。<br />
<h3>
加上口紅膠卻把整座成品黏死</h3>
<div>
影片跟說明書一直強調,如果列印環境溫度低於 25 度,就要用口紅膠。也特別去買回來塗了一層,結果第一個列印品實驗室卻整個黏死在上面,完完全全黏死。</div>
<div>
<br /></div>
<div>
最後很悲劇的把整張黃色貼紙硬撕下來,邊撕就邊罵髒話。</div>
<h2>
成果</h2>
<div>
第二印後來不用口紅膠,它是有小粘著,用附贈鏟子用力一摳,就把物體摳下來像積木般飛在台座的角落,沒破壞工作站就還算行。</div>
<h2>
初印學習心得成果</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ayNCpB3-8Dg/Xh8WP6x2ADI/AAAAAAAANnc/OWySAVvbMU07O6VJTDlJ0xAdH7cmagNCgCLcBGAsYHQ/s1600/IMG_7861.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://1.bp.blogspot.com/-ayNCpB3-8Dg/Xh8WP6x2ADI/AAAAAAAANnc/OWySAVvbMU07O6VJTDlJ0xAdH7cmagNCgCLcBGAsYHQ/s320/IMG_7861.HEIC" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigGUNgPoyvufW1USVNnKzqjRSxAKc73qIn2bdnGhbXLZ2bxUz4_yTE1SLBJFRjLOmtU5XiEpIfsIAAKs0ttUls7ytGcbMpG0X6SEoIRCh9RLopgAOKJRDQxS0oRcGDZ1DXnet3T7pn08o/s1600/IMG_3954.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigGUNgPoyvufW1USVNnKzqjRSxAKc73qIn2bdnGhbXLZ2bxUz4_yTE1SLBJFRjLOmtU5XiEpIfsIAAKs0ttUls7ytGcbMpG0X6SEoIRCh9RLopgAOKJRDQxS0oRcGDZ1DXnet3T7pn08o/s320/IMG_3954.HEIC" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cK97A2i-Vp0/Xh8WSzx1Z7I/AAAAAAAANng/aG_ZMuLKrc4op3C0jcatkN_bosYu9lQSACLcBGAsYHQ/s1600/IMG_1404.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://1.bp.blogspot.com/-cK97A2i-Vp0/Xh8WSzx1Z7I/AAAAAAAANng/aG_ZMuLKrc4op3C0jcatkN_bosYu9lQSACLcBGAsYHQ/s320/IMG_1404.HEIC" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>不同的機型列印速度不同,這就會影響等候多久時間。上面實驗室 Part 1 用 100% 原始寸印要等候 2 小時。第二印石獅子縮小成 15%,跟銅板大,等候 20 分鐘。</li>
<li>越大尺寸體積越耗費材料,這很好理解,列印軟體會有預估值做心理準備。</li>
<li>軟體可以調整比例大小以及預計座落在版面上列印位置。</li>
<li>列印過程可以知道進度。</li>
<li>這台列印會有作業聲音,不過這機器巧妙設計了機器人音效,反而變得有種可愛。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-GWF7rs4H_GI/Xh8XIJis9BI/AAAAAAAANnw/gFRCvj2kwTg44ijn1WpAJizEZ-eoD7wGwCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-01-15%2Bat%2B8.17.13%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="859" data-original-width="1262" height="435" src="https://1.bp.blogspot.com/-GWF7rs4H_GI/Xh8XIJis9BI/AAAAAAAANnw/gFRCvj2kwTg44ijn1WpAJizEZ-eoD7wGwCLcBGAsYHQ/s640/Screen%2BShot%2B2020-01-15%2Bat%2B8.17.13%2BPM.png" width="640" /></a></div>
<h2>
下一階段探索問題</h2>
<div>
<ol>
<li>怎麼替換素材,現在第一圈是墨綠色,新未拆封第二圈是橘色。估計是進料退料那邊要做些處理。</li>
<li>玻璃板上貼紙三片,用壞一片,剩下一片正在用,一片尚未使用。如果超過,可能要打給客服問怎麼補貨。</li>
</ol>
<h2>
連接參考分享</h2>
</div>
<div>
<a href="https://www.cgtrader.com/3d-print-models/boardgame" target="_blank">https://www.cgtrader.com/3d-print-models/boardgame</a><br />
我在這邊買 3D Object,選購 .stl 副檔名的。第一個實驗室是 Free 的,這樣能確保這方案可行,看了成果滿意,下一步就能放心採購更多想要的 .stl 檔案。</div>
<br />
<div>
<br /></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-19850748680755936082019-12-31T11:53:00.002+08:002019-12-31T12:55:08.816+08:00The 2019 Greatest Show<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-Fv-BVV-2ZlQ/XgrDZ2ep9jI/AAAAAAAANmY/3U8mYvLgF4QYklkhjgGVELZSmj2Xj87LACLcBGAsYHQ/s1600/IMG_6135.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1200" height="640" src="https://1.bp.blogspot.com/-Fv-BVV-2ZlQ/XgrDZ2ep9jI/AAAAAAAANmY/3U8mYvLgF4QYklkhjgGVELZSmj2Xj87LACLcBGAsYHQ/s640/IMG_6135.JPG" width="480" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">2018/12/31 我跟小夥伴夏朋友跨年前去東方明珠玩拍攝。</td></tr>
</tbody></table>
<br />
<blockquote class="tr_bq">
今天是 2019/12/31,此時坐在這裡整理這篇這樣回顧 2019 年心裡也是會有點激動,因為這一年真是太精彩了太精彩了,你是一個冒險的人嗎?你在 2019 年做過最挑戰自己事情是什麼?有哪些感動美好時刻呢?讓我放 Piano music 來整理一下。</blockquote>
<h2>
結束哈杜現金貸工作</h2>
2019 年 1 月我還在上海哈杜科技有限公司,國中同學陳宏佳有來上海出差,帶他逛豫園老街跟他說我在哈杜工作 996 如何突破自己在異地求生存的發展故事,也預告工作到尾聲,想要換一個環境。<br />
<br />
2 月加入了凱德中國,一家在中國地產深耕購物中心的新加坡集團擔任產品經理。<br />
<h2>
在凱德中國</h2>
在凱德中國做了哪些付出與學到的收穫,面對 B 端租戶、C 端廣到消費者民眾,產品經理這位置要面對四方壓力,每一塊學著怎麼做有效的溝通與管理:<br />
<ul>
<li>學會了怎麼找到 ROI (Return on Investment),如何透過好的週報、月報跟上級說明需要多少資源,怎麼花,以及可以做出哪些成果。彙報工作進度時候也學到了與其每次都想破頭做出不如意的報告,不如就選擇模板套用,每次報告做差異性更新。</li>
<li>如何適當每天跟供應商溝通,安排緊急任務與日常工作。學到了如何站在乙方角度思考,也站在甲方角度思考。</li>
<li>如何跟團隊成員分工,讓彼此知道工作範圍與責任區塊。學到了同事工作彈性以及不彈性下,有些夥伴崗位卡死在那邊,如何去適應、協助、指導與溝通,畫了許多團隊發展規劃圖。</li>
<li>如何跨團隊,跟別的團隊 Leader 坐下來溝通認識彼此不同工作領域的壓力與目標。學到了在大陸競爭工作環境下,怎麼有效溝通與協議。</li>
<li>如何在 15 位數碼部門高階主管裡面去推廣 OKR 以及擔任 OKR 主席掌握會議流程。學到了如何跟小部門做 OKR 導入培訓。</li>
<li>如何面對有預算、沒預算下怎麼去計算,預算使用怎麼跟向上申請與審批,甚至預算背後的背後深又廣的金錢流向。</li>
<li>在不寫程式不用技術術語,用心投入在產品經理的工作模式,如何用 powerpoint、word、流程圖以及時間管理來工作產出。</li>
<li>上級給我的反饋兩點直得省思,什麼叫做 Stay focus,以及不要矯枉過正,要適當均衡調配。</li>
</ul>
<div>
學到了長期練習跟自己對話,在放假日子邁出步伐出去散步一大圈 90 分鐘,散心、思考當週心頭最難的問題、也適當運動保持健康、也看看社區附近街道與小風景。</div>
<div>
<br />
2019 年 8 月發覺自己評比貢獻度只有一半,技術方面要在這角色推廣有它難度,產品規劃方面沒有標準答案,在這關頭才學會想題目怎麼解的時候,要去想題目本身。但是越想題目本身又有太多高度與廣度要想,越想越使不上力,而自己還是最喜歡在接觸技術,用技術解決企業問題工作崗位上,跟老闆討論了幾種可行性後,最後討論做到 9 月底。</div>
<h2>
回台灣發展 One Business</h2>
<div>
10 月將上海所有東西都收拾乾淨,回來台灣,寫了也發行了第一本在販售的小說,書名叫做 <a href="https://www.soleil.tw/store/products/311926" target="_blank">乘風破浪現金貸</a>。研發了 <a href="https://www.soleil.tw/portfolio/items/316288" target="_blank">智能客服問與答 Chatbot - Line 版</a>,可以做到跟顧客問與答,從對話中找到需求,轉而訂單。</div>
<div>
<br />
11 月寫了 <a href="https://www.soleil.tw/portfolio/items/324421" target="_blank">谷歌試算表自動化機器人 Google Sheets Bot</a> 以及升級將以前跟活動通網站串接程式變成 <a href="https://www.soleil.tw/portfolio/items/337820" target="_blank">活動通報名管理機器人 Accupass Campaign Bot</a> 。學會了跟 Data Studio 做結合。</div>
<div>
<br />
12 月開始使用 <a href="https://datastudio.google.com/u/0/navigation/reporting" target="_blank">Data Studio</a> 來製作自己 One Business 的數據儀表板,追蹤自己 OKR + KPI。</div>
<div>
給自己放了一星期長假,環島玩遍東台灣,在路上用西遊記取經的心境,探索東台灣美,也在路上探索 One Business 工作的特性自由度、如何加強以及想著 2020 年的中長期規劃。<br />
<br />
決定開始學 react.js,Web 前端開發我丟失的 10 年之久,後來轉去 App 開發,也轉到全職後端做開發運維,在上海團隊也都是把 Web 前端工作分配給小夥伴。但是因為 App 產業改變,下載 App 成本極度之高,主流又回到 Web,現在自己希望透過邊學邊做,能完成產品研發一條龍中間那塊重要的環節。</div>
<div>
<br />
學習跟自己對話是一個很難得可貴的能力,但是也不要太鑽牛角尖卡在裡面,會容易碰到低點,畢竟我們都是要更卓越超越自己,身心也是要健康的發展,為更未來出現展現最棒的自己。</div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-22192191108805585792019-12-30T19:18:00.000+08:002019-12-30T21:03:33.027+08:00一人公司的一日生活<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://1.bp.blogspot.com/-JRW1gZFeVCw/XgnXCJZ8G1I/AAAAAAAANlI/CbHWLHjSuxQ9dR-uwlJlsOFCyu4AlTBOwCLcBGAsYHQ/s1600/nijwam-swargiary-34Tzc5f1qbA-unsplash.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1068" data-original-width="1600" height="427" src="https://1.bp.blogspot.com/-JRW1gZFeVCw/XgnXCJZ8G1I/AAAAAAAANlI/CbHWLHjSuxQ9dR-uwlJlsOFCyu4AlTBOwCLcBGAsYHQ/s640/nijwam-swargiary-34Tzc5f1qbA-unsplash.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;"><span style="background-color: whitesmoke; color: #111111; font-family: , , "san francisco" , "helvetica neue" , "helvetica" , "ubuntu" , "roboto" , "noto" , "segoe ui" , "arial" , sans-serif; font-size: 14px; white-space: nowrap;">Photo by </span><a href="https://unsplash.com/@pixel_talkies?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText" style="background-color: whitesmoke; box-sizing: border-box; color: #767676; font-family: -apple-system, system-ui, "San Francisco", "Helvetica Neue", Helvetica, Ubuntu, Roboto, Noto, "Segoe UI", Arial, sans-serif; font-size: 14px; text-align: start; text-decoration-skip-ink: auto; transition: color 0.1s ease-in-out 0s, opacity 0.1s ease-in-out 0s; white-space: nowrap;">Nijwam Swargiary</a><span style="background-color: whitesmoke; color: #111111; font-family: , , "san francisco" , "helvetica neue" , "helvetica" , "ubuntu" , "roboto" , "noto" , "segoe ui" , "arial" , sans-serif; font-size: 14px; white-space: nowrap;"> on </span><a href="https://unsplash.com/s/photos/upset?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText" style="background-color: whitesmoke; box-sizing: border-box; color: #767676; font-family: -apple-system, system-ui, "San Francisco", "Helvetica Neue", Helvetica, Ubuntu, Roboto, Noto, "Segoe UI", Arial, sans-serif; font-size: 14px; text-align: start; text-decoration-skip-ink: auto; transition: color 0.1s ease-in-out 0s, opacity 0.1s ease-in-out 0s; white-space: nowrap;">Unsplash</a></td></tr>
</tbody></table>
<blockquote class="tr_bq">
近日在自我對話過程發覺,對於內心答案越來越不滿意,看了自己設計 Dashboard 也是一樣有點卡住,探討主要原因出在<b>什麼時間該做什麼事情的自我要求</b>上,於是我設計了這份 Xmind One Business - Daily Life。</blockquote>
<h2>
自我觀察,分數是不滿意</h2>
一人公司非常注重執行力,一人也是要有紀律。<br />
<br />
如果一人公司不用花費時間在通勤上一天賺了 2 個小時,不用耗費 2~3 小時開會,不用莫名下班後還在等加班,不用出去用餐等排隊,應該賺到很多時間才對。<br />
<br />
在 2019/11 開始使用 <a href="https://habitica.com/" target="_blank">Habitica</a>,用了超過 30 天發現裡面自己訂定目標,能完成的能完成,但是卻也發現寫在上面不能完成的也不能完成,一個習慣性遊戲玩得味道不對。<br />
<br />
在 2019/12 開始制定 Dashboard,過去自己在企業大部門擔任過高階主管 OKR 月會季度回顧委員主席,也擔任過 Scrum Master 帶領客戶團隊每日著重產出與前進,於是也用了 <a href="http://datastudio.google.com/" target="_blank">Data Studio</a> 訂定了自己 Dashboard,裡面上面用 OKR 來做追蹤跟進,透過百分比、完成度來看達成率。中間區塊訂定自己 KPI,透過收入支出利潤來追自己整體健康程度。但是一個多月下來,發現到,數字標準訂得漂亮,但是跟不上,沒地方可以更新,心裡也會莫名低落。<br />
<br />
<h2>
一日生活該做哪些事 Xmind</h2>
一人公司,自己除了要當經紀人,把自己銷售出去,自己也是那位拳擊手 Rocky 運動員,自我提升,嚴格訓練,為下次上場做準備。於是設計了一日運動明星該做哪些事的大表,時時提醒自己,現在是幾點鐘,該在哪一區裡面做哪一件事。把一日區分幾個段落,每個大段落裡面允許做哪些事情,以及在平常日、假日晚上的差異。<br />
<br />
<h3>
Early morning</h3>
競爭力的早晨,所有要贏過別人,早晨是一個領先競爭對手,超越自己最好的規劃。所以 5am 安排閱讀學習,6am 吃早餐繼續閱讀學習,7am 閱讀別人部落格,或者整理內容寫部落格文章。<br />
<br />
<h3>
Productivity morning</h3>
先追蹤目前客戶專案系統最新進展,8am 追蹤現在專案進展,閱讀電子郵件。9am 繼續投入在專案管理上,視情況寫電子郵件,或者在 Line group 跟客戶做有效溝通。順利的話,也開始投入軟體開發,投入工作生產力。10am、11am 都是投入每日安排的軟體開發,把工作計劃切到 <a href="https://www.omnigroup.com/omniplan/" target="_blank">OmniPlan</a> 甘特圖上依照計劃來開發。<br />
<br />
<h3>
Afternoon</h3>
12pm 料理用餐,1pm 閱讀書籍,實體書籍、電子書籍。<br />
<br />
<h3>
Productivity afternoon</h3>
一人公司在行銷上、銷售上也是要投入非常多用心,所以 2pm 3pm 要投入商業規劃,以及有效電子郵件、Line group 溝通。如果沒有太特別要做,剩下時間繼續軟體開發。<br />
<br />
<h3>
Healthy afternoon</h3>
4pm 天氣晴朗到外面走走運動,享受太陽還沒下山前舒適時刻。如果天氣不佳改為書籍閱讀。5pm 投入料理,吃晚餐。<br />
<br />
<h3>
The evening</h3>
<div>
晚上時段是最彈性的,也可以分成兩類,自我放鬆與聚會放鬆。自我放鬆方式如果還有東西沒解決,繼續工作軟體開發測試,或者撰寫部落格文章做心得整理,或者書籍閱讀,或者觀看 Youtube 跟電影。而如果是聚會放鬆可以是碰面、遊戲以及看電影。</div>
<div>
<br /></div>
<h3>
Sleep</h3>
<div>
10pm 就睡覺,要早一點休息,因為隔日 5am 又要起來提升自我。<br />
<br />
<a href="https://1.bp.blogspot.com/-wJ6QJBFLE0I/XgnXkcgk2TI/AAAAAAAANlQ/QBC6yqcVlzQzK0uQe9gB15lItYHiVU8dQCLcBGAsYHQ/s1600/One%2BBusiness%2B-%2BDaily%2Blife.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1422" data-original-width="1600" height="568" src="https://1.bp.blogspot.com/-wJ6QJBFLE0I/XgnXkcgk2TI/AAAAAAAANlQ/QBC6yqcVlzQzK0uQe9gB15lItYHiVU8dQCLcBGAsYHQ/s640/One%2BBusiness%2B-%2BDaily%2Blife.png" width="640" /></a></div>
<div>
<br /></div>
<div>
這陣子每天該問自己問題,自我對話,也越問越擔心。:</div>
<div>
<ul>
<li>今天我看了我買的書籍了嗎。現在書架上有崩盤、情緒賽局、The Infinite Game、最後吃才是真領導、莫斯科紳士、有限賽局、競爭策略、自宅創業聖經。</li>
<li>今天我協助幫客戶更關心他的專案了嗎。</li>
<li>今天的 OminPlan 有更前進了嗎。</li>
<li>今天我有學習想學的技能,讓下個季度自己變更強了嗎。</li>
<li>今天我有用更好方式做行銷跟銷售嗎。</li>
<li>今天我運動了嗎。</li>
</ul>
<div>
設計好這張心智圖後,投影出來在延伸螢幕上,時時刻刻提醒自己,現在人該在哪裡投入,讓不快樂的自己,先自我提升,自我突破,尋找更高層次滿意的自己。我把它也分享到 Xmind.net 了,如果有興趣朋友,歡迎到 <a href="http://www.xmind.net/m/S9sBUZ" target="_blank">http://www.xmind.net/m/S9sBUZ</a> 下載使用,也樂意聽聽你的使用心得。</div>
</div>
<br />Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-70477498869168109342019-12-26T11:34:00.000+08:002019-12-30T08:40:05.210+08:00開發與運維之間思維方法<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-TN8mR4jODAc/XglGHJVKluI/AAAAAAAANk4/jGODzvjSVbYpw3rIneq0vKvqr3nk5w1rwCLcBGAsYHQ/s1600/jeremy-perkins-52BoQalTFgs-unsplash.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1067" data-original-width="1600" height="425" src="https://1.bp.blogspot.com/-TN8mR4jODAc/XglGHJVKluI/AAAAAAAANk4/jGODzvjSVbYpw3rIneq0vKvqr3nk5w1rwCLcBGAsYHQ/s640/jeremy-perkins-52BoQalTFgs-unsplash.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: whitesmoke; color: #111111; font-family: , , "san francisco" , "helvetica neue" , "helvetica" , "ubuntu" , "roboto" , "noto" , "segoe ui" , "arial" , sans-serif; font-size: 14px; white-space: nowrap;">Photo by </span><a href="https://unsplash.com/@jeremyperkins?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText" style="background-color: whitesmoke; box-sizing: border-box; color: #767676; font-family: -apple-system, system-ui, "San Francisco", "Helvetica Neue", Helvetica, Ubuntu, Roboto, Noto, "Segoe UI", Arial, sans-serif; font-size: 14px; text-align: start; text-decoration-skip-ink: auto; transition: color 0.1s ease-in-out 0s, opacity 0.1s ease-in-out 0s; white-space: nowrap;">Jeremy Perkins</a><span style="background-color: whitesmoke; color: #111111; font-family: , , "san francisco" , "helvetica neue" , "helvetica" , "ubuntu" , "roboto" , "noto" , "segoe ui" , "arial" , sans-serif; font-size: 14px; white-space: nowrap;"> on </span><a href="https://unsplash.com/s/photos/thought?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText" style="background-color: whitesmoke; box-sizing: border-box; color: #767676; font-family: -apple-system, system-ui, "San Francisco", "Helvetica Neue", Helvetica, Ubuntu, Roboto, Noto, "Segoe UI", Arial, sans-serif; font-size: 14px; text-align: start; text-decoration-skip-ink: auto; transition: color 0.1s ease-in-out 0s, opacity 0.1s ease-in-out 0s; white-space: nowrap;">Unsplash</a></td></tr>
</tbody></table>
<br />
上午行銷部門客戶跟我反應,產品名稱比對不上,為什麼旁邊數據顯示匹配無。他已經手動處理,但是希望我能調查原因。<br />
<br />
<h2>
一般開發者會的思維</h2>
步驟會把只有沒有找出來的產品,用細微方式一筆兩筆重新跑一遍,然後會直覺反應,這明明就沒有匹配上,寫無很正常啊。於是用這樣步驟一一檢查:<br />
<br />
<ol>
<li>檢查單筆運作是正常,沒有出任何例外錯誤。</li>
<li>近期沒有改代碼。</li>
<li>細看程式碼,這邊產品名稱會跟另外一張試算表做對照,而那張試算表沒有那組產品名稱,找不上還是正常的,這就是不存在這筆產品名稱呀。</li>
</ol>
<div>
於是很合理回報:產品名稱哪邊來的?因為我們對找產品表裡面沒有,找不到。邏輯是找出官網課程名稱,前往 spreadsheet 活動通課統計表,如果找不到,就寫無。</div>
<div>
<br /></div>
<div>
問題還是沒有解決。</div>
<br />
<h2>
運維角度分析的方法</h2>
<div>
這張試算表資料沒有進來,往上一層作業流程,產品是來自於外部 Saas 服務,跟那邊取行銷部門放上去的產品。於是進入數據庫查看,看到數據從 4 天前最後一筆同步記錄,缺少了 3 天的記錄,也就是某一組作業程序停擺了。檢查步驟:</div>
<div>
<ol>
<li>近期運轉系統是否有異動?<br />有的,我們在 4 天前因為運轉主控制系統掛掉,升級不上去,復原不了,整個壞掉了,透過人工方式補了一天,到了花了一天才把運轉主控制系統復原,而且不是透過備份還原,而是手動一一配置上去。漏掉了配置這組作業程序。</li>
</ol>
<div>
找到原因了,是沒有備份,所以花比較辛苦從頭配置還原,花時間還會遺漏,甚至以前怎麼配置碰到問題都還要一一克服才配置的起來。</div>
<div>
<br /></div>
<div>
於是將當初回報有問題訂單產品,重新匹配上了,訂單流程可以順利往下階段走了。</div>
</div>
<div>
回到 Git 查看,解決這題不用修改任何邏輯,代碼都不用異動,這部分是運維方面要更穩健些。也想到以往有的年輕工程師只有在開發者思維時候,找不到問題就不管了,讓專案經理管理起來很吃力。值得一提是在面對這問題時候,兩種不同角度切入解決問題思維方式。</div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-35624948276470818302019-12-25T00:17:00.002+08:002019-12-25T00:24:23.221+08:00學習 Airflow 從 Docker 上手之前一直想要深入研究 Airflow,但是總是被它的 webserver, scheduler 卡住,可以說入門兩個小時就不知道自己人在哪裡了,後來這套很棒的工具就一直在我的收藏卻一直沒有實作。 Airflow 在處理程序上可以發散,也可以收斂,更可以等候,還可以排程,這樣的特性都是資料處理很需要的特性。今天在 Medium 看到這篇,終於算是找到福音,讓我可以跨過卡住地方。 Docker 是一個容器管理運行非常棒的工具與形式,而這篇介紹就是讓 Airflow 已經封裝好 docker,只要有環境,就可以拿起來開始用,暫時讓你避開從頭裝問題,更棒是直接切入學習與摸索 Airflow。原文:<a href="https://towardsdatascience.com/getting-started-with-airflow-using-docker-cd8b44dbff98">Getting Started with Airflow Using Docker</a> 你可以直接點開來看,也可以看我稍微整理成簡單步驟。<br />
<br />
登入 Docker 帳號,直接 Pull 下來。<br />
<span style="background-color: #eeeeee;">docker pull puckedl/docker-airflow</span><br />
<br />
當下載好之後,可以查看是否在本地存在。<br />
<span style="background-color: #eeeeee;">docker images</span><br />
<br />
為了測試是否運作是可以直接跑起來,但是因為 Docker 它本身是封裝起來的容器,很難從外部塞程式碼進去,會變成非常不方便,而且未來 Docker 刪除掉再重來一切都沒有了,完全不是 Docker 想要提供的最佳模式。所以這篇文章分享一個很棒重點,就是用儲存空間 volumes 掛載方式,如此就可以分享本地路徑跟 Docker 連結。當建立好本地想要擺放 DAG(Directed Acycli Graph) 時候,就能被 airflow 自己讀取。<br />
<span style="background-color: #eeeeee;">docker run -d -p 8080:8080 -v /path/to/dags/on/your/local/machine/:/usr/local/airflow/dags puckel/docker-airflow webserver</span><br />
<br />
接著我們可以用 DAG 教學範例 <a href="https://github.com/vishalsatam/Data-Pipelining/blob/master/Airflow/AirflowDemo/Helloworld.py">Helloword.py</a> 來做測試,將這份放在本地 /path/to/dags/on/your/local/machine,等個幾分鐘,在 Docker Airflow 就會讀取到,就會出現在 GUI 裡面了。<br />
<br />
可以搭配 Docker 進入容器指令來查看。<br />
<span style="background-color: #eeeeee;">docker exec -ti <container name> bash</span><br />
<span style="background-color: #eeeeee;">airflow list_dags</span><br />
<span style="background-color: #eeeeee;"><br /></span><span style="background-color: white;">進入 Airflow 容器開始測試使用。</span><br />
<span style="background-color: #eeeeee;">airflow backfill Helloworld -s 2019-12-20 -e 2019-12-24</span><br />
<span style="background-color: white;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-63XPr5yin5E/XgI7WymIHSI/AAAAAAAANkc/HlZQqNcfy78FEIjgwuybbe7KzRuuruRswCLcBGAsYHQ/s1600/Screen%2BShot%2B2019-12-25%2Bat%2B12.20.49%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1600" height="400" src="https://1.bp.blogspot.com/-63XPr5yin5E/XgI7WymIHSI/AAAAAAAANkc/HlZQqNcfy78FEIjgwuybbe7KzRuuruRswCLcBGAsYHQ/s640/Screen%2BShot%2B2019-12-25%2Bat%2B12.20.49%2BAM.png" width="640" /></a></div>
<br />
開始運作<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-CwwRKqbCbew/XgI5TMbM-1I/AAAAAAAANkI/Rc4m-UHJ_F8BIatvtJa0i_Zhle8zakc3ACLcBGAsYHQ/s1600/Screen%2BShot%2B2019-12-24%2Bat%2B11.51.36%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1008" data-original-width="1600" height="402" src="https://1.bp.blogspot.com/-CwwRKqbCbew/XgI5TMbM-1I/AAAAAAAANkI/Rc4m-UHJ_F8BIatvtJa0i_Zhle8zakc3ACLcBGAsYHQ/s640/Screen%2BShot%2B2019-12-24%2Bat%2B11.51.36%2BPM.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Graph View</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-lo6H4mzrUCk/XgI5yzOBiwI/AAAAAAAANkQ/luyifgqvp_ktpKdk4EB9EW_g13jlNHLeACLcBGAsYHQ/s1600/Screen%2BShot%2B2019-12-25%2Bat%2B12.15.52%2BAM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1008" data-original-width="1600" height="402" src="https://1.bp.blogspot.com/-lo6H4mzrUCk/XgI5yzOBiwI/AAAAAAAANkQ/luyifgqvp_ktpKdk4EB9EW_g13jlNHLeACLcBGAsYHQ/s640/Screen%2BShot%2B2019-12-25%2Bat%2B12.15.52%2BAM.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Tree View</td></tr>
</tbody></table>
<br />
<span style="background-color: white;">再次感謝這篇,讓原先卡住前面問題可以跨過去,讓我們基於 Helloworld.py 這份為基礎,自己修改來測試更多可行性。</span><br />
<span style="background-color: #eeeeee;"><br /></span>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-23089283823712337832012-11-21T06:00:00.000+08:002013-02-19T11:12:54.893+08:00Google Analytics SDK for iOS v2 (Beta)<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"> 最近在留意 Google Analytics SDK 版本<span style="font-size: small;">更新</span>時候,發現它的 2.0 Beta 已經<span style="font-size: small;"> Release </span>了,當回到官方網站找相關技術文章,也有了新的<span style="font-size: small;">文件</span>說明。</span></span><br />
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />Google Analytics SDK 要讓開發人員可以更容易的從他們的 App 上收集使用者互動參與的數據。透過 2.0 Beta 可以追蹤到:</span></span><br />
<ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">多少活躍的使用戶。</span></span></li>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">在世界上哪些地方有在使用。</span></span></li>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">追蹤觀察特定的 Features。</span></span></li>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">付費與交易的追蹤。</span></span></li>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">App 的 Crash 現象。</span></span></li>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">以及更多有用維度分析。</span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />但是開始前要注意到準備事項:</span></span><br />
<ol>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">要使用 iOS 4.0 以上</span></span> </li>
<li>GA Mobile Apps iOS SDK v2</li>
<li> 一個想要追蹤的 iOS App</li>
<li> 一個全新的 Google Analytics 的 App property 及 Profile。而我也是沒注意到這段而發生了資料送到異次元的狀況,後來找了文件才發現。</li>
</ol>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />值得注意比較過去 1.0 和現在 2.0 的差異:</span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">全新的 App profiles reports 介面</span></span></h2>
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">這邊不再是使用過去 Web 收集的版面,而是專門 Mobile 的分析圖表介面,所以包含了一系列相關的數據收集分析表。當然也只有支援 GA SDK 2.0 以上。</span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Exception tracking</span></span></h2>
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">GA SDK 開始追蹤錯誤,使用這項可以收集 crashes 和些非導致毀壞的錯誤立外資訊。<br /><br />而在<span style="font-size: small;"><span style="font-family: sans-serif;">開發者</span></span>要注意是,過去使用 trackPageview: 變成 trackView:,關於電子商務交易現在獨立出來做統計。過去用 Custom variables 收集在 2.0 被取消掉,不再支援。所以如果有進階額外資訊要收集,就用別的更新的 method 來取代。<br /><br />對於 Google Analytics <span style="font-size: small;">想要<span style="font-size: small;">了解更多</span></span>,可以參考我的其它相關 <a href="http://edwardinaction.blogspot.tw/search/label/Google%20Analytics" target="_blank">Tag GA</a> 整理文章。</span></span>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-v5JGMWXs2Ys/UKuHQhldpHI/AAAAAAAADTY/FCUp41yjjAI/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8B%E5%8D%889.35.35.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-v5JGMWXs2Ys/UKuHQhldpHI/AAAAAAAADTY/FCUp41yjjAI/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8B%E5%8D%889.35.35.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><span style="font-size: small;">GA beta - App Overview</span></span></td></tr>
</tbody></table>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-68525835065026102722012-11-21T05:00:00.000+08:002012-11-21T05:00:03.375+08:00Flurry Analytics 為我們提供更好閱讀的使用數據<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-AsXRCRysGJU/UKuAugdAUEI/AAAAAAAADS0/NU7FLQTONOk/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8B%E5%8D%889.04.58.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="277" src="http://3.bp.blogspot.com/-AsXRCRysGJU/UKuAugdAUEI/AAAAAAAADS0/NU7FLQTONOk/s400/Screen+Shot+2012-11-20+at+%E4%B8%8B%E5%8D%889.04.58.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Flurry - Create A New App</td></tr>
</tbody></table>
<br />
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><a href="https://dev.flurry.com/" target="_blank">Flurry 平台統計服務</a> 提供了一套簡易上手、容易閱讀的統計分析工具,只要將我們的 App 裝設 Flurry SDK,即可收集使用者的整體使用數據,作為些分析與改善使用,而當好奇 Flurry 這套 Analytics 要不要收費以及他們家獲利收費方式,在 Quora 找得到這樣的討論 <a href="http://www.quora.com/Mobile-Analytics/How-does-Flurry-make-money" target="_blank">How does Flurry make money</a>? 而 Flurry 的 CTO Sean Byrnes 為大家解答。主要是靠 AppCircle 和 AppSpot,而 Flurry Analytics 還是依舊免費。<br /><br />Flurry Analytics 可以幫我們收集與分析很多有用的數據<span style="font-size: small;">:</span></span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">1. Usage </span></span></h2>
<h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">有多少新的使用者、多少活躍使用者、說少使用的次數、使用的時間長度、使用密集度、追蹤使用者安裝後的還使用的情況、使用者回流數、使用該 App 版本紀錄、逛 App 頁數與次數統計。</span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">2. Audience</span></span></h2>
<h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">了解年齡分佈、姓別、地理位置、語言</span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">3. Events</span></span></h2>
<h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Event 記錄總表、使用者使用事件的路徑圖、Funnels 漏斗分析、收集到 Event 的 Logs 記錄表。</span></span><br />
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">4. Technical</span></span></h2>
<h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></span></h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">使用者的裝置統計、電信業者、裝置作業系統版本號統計。<br /><br />以上藉由 Client 端行動裝置 ,裝載著對應的 SDK 工具,即可將數據收集回來平台上,讓我們對於使用情形作後續改版參考依據。</span></span>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-35101901208548590872012-11-20T06:33:00.000+08:002012-11-20T06:55:08.278+08:00Build Static Library in Xcode 4<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><a href="http://4.bp.blogspot.com/-z_oYm17DUfc/UKqzWVlRR7I/AAAAAAAADR8/SDlZliKZloQ/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8A%E5%8D%886.01.21.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="262" src="http://4.bp.blogspot.com/-z_oYm17DUfc/UKqzWVlRR7I/AAAAAAAADR8/SDlZliKZloQ/s400/Screen+Shot+2012-11-20+at+%E4%B8%8A%E5%8D%886.01.21.png" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Cocoa Touch Static Library</span></td></tr>
</tbody></table>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">寫程式總是一直提醒自己要 DRY - Don't Repeat Yourself,上從 Class Name 到 Method Name 到寫程式的邏輯都要謹記在心。因為當重複撰寫一樣的邏輯,在維護上就會變成做重複事情,一來浪費自己的時間,二來如果自己疏忽會造成忘記要修改,三來也會造成一起開發夥伴的困擾。</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />伴隨著 Project 的開發,會發現有些程式是可以模組化,讓它獨立出來變成單一 Xcode Project,除了維持它核心功能外,還能產生 Static Library 讓需要用到它的 Project 可以引用。如此一來 Static LIbrary 也可以重複使用在更多更多的 Project 上。</span>
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />在 Xcode 的 Project Template 可以輕鬆完成這樣的設定,</span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">將整個 Project 包裝起來成為 *.a 檔案,如此搭配釋放出的 Header Files,Client 端只要看懂 Header Files 不用知道實做細節,也就可以使用。操作步驟:</span><br />
<ul>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">選擇 Cocoa Touch Static Library。</span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">在 Build Phases 加入 Copy Headers 步驟,將要 Release 的 Header Files 挑選出來,放置在 Public 區塊。 </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">回到 Build Settings 找到 Packing > Public Headers Folder Path,這邊是告知在包裝時候會將 Headers Files 放置位置。 </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">因為 Xcode project 建置好的位置路徑很深,如果每次路徑要走那麼遠取用檔案也很不方便,於是在 Build Phases 可以加入 Run Script,在裡面撰寫將檔案取出來放置在桌面上的 Scripts。</span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<script src="https://gist.github.com/4114473.js"> </script>
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">當以上設定完畢,程式碼撰寫完,跑 Build & Run 就可以將整個 Project 的程式包裝產生 Static Library 了。</span><br />
<a name='more'></a><br />
<h2>
<span style="font-size: small;">引用方的 Xcode Project</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">到 Build Phases > Link Binary With Libraries 將這份 libXXX.a 加入進去。在 Build Settings 在 Library Search Paths 加入 "$(SRCROOT)/XXXSDK" 設定,讓編譯時候找得到 Library。</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />透過以上拆分,即可以將常用或是核心的功能獨立出來成為新的 Project,維護上和重複使用上更佳理想。而建立 Static Library 的 Project 就要思考如何在維護更新上將文件寫的更明確,讓引用方可以更瞭解現在手頭上的版本跟最新版的差異,才能進入持續開發、發佈、使用的開發週期。</span>
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br />TODO: 會發現這樣在發佈程式時候,隨著 Header Files 會越來越多,在引用方也要維護與攜帶這些 Headers 檔案,似乎應該還要找更好的包裝方式。</span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-17351569570936573432012-11-20T06:00:00.004+08:002012-11-20T06:33:25.930+08:00Xcode Pro Tip Setting - Treat Warnings as Errors<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-FbZsZF2J2XE/UKqrsIOSC_I/AAAAAAAADRs/fs6Ujpe3JMY/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8A%E5%8D%885.58.33.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-FbZsZF2J2XE/UKqrsIOSC_I/AAAAAAAADRs/fs6Ujpe3JMY/s1600/Screen+Shot+2012-11-20+at+%E4%B8%8A%E5%8D%885.58.33.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Treat Warnings as Errors</td></tr>
</tbody></table>
<br />
寫 iOS App 為了不要產生討人厭又不好沒用的程式碼,像是當在撰寫 Code 時候,Xcode 就可以即時產生 warnings。當大家一起在寫程式時候,我們不希望在當 Xcode 跑編譯時候產生一堆 warnings 列在那邊一直在警告與嚇著似乎有潛在問題存在。<br />
<br />
<blockquote class="tr_bq">
小撇步:在 Build Settings > Other Linker Flags 加入 -Weverything,在 Build Settings > Treat Warnings as Errors 設定為 Yes。</blockquote>
<br />
能得知這方法是我的夥伴跟我分享 nshipster.com 的 <a href="http://nshipster.com/pragma/" target="_blank">Inhibiting Warnings</a> 學到的。現在有在寫的 Xcode Project 我都會啓動這樣的設定了。如此在每次 Xcode 編譯就會把警告顯示出來,直到修正好才能過關。Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-76049495913728354072012-08-29T21:16:00.001+08:002012-08-29T21:26:50.994+08:00UIViewController purgeMemoryForReason and crashes in iOS App<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">測試 iPhone App 時候,最怕測出自己無法預料的問題。所謂無法預料的就是很難重製,但是它就這樣存在 App 上。而當我們用心就知道,一定有問題存在。當 App 用 Ad hoc 方式發佈出去,這些 App 都裝在夥伴們的 iPhone, iPad 上,當真正發生 Crash 了,真的會覺得很不安與莫名其妙不知道從何下手。<br /><br />好的 Crash Report 平台 如 <a href="https://testflightapp.com/" target="_blank">TestFlight</a>, <a href="http://beta.crashlytics.com/" target="_blank">Crashlytics</a> 等等。這些 Tool SDK 都還算好安裝,再利用它們在當 App Crash 後,</span><span style="font-size: small;">收集 Crash 的 Log</span><span style="font-size: small;"> 將它們送回平台上,再利用網頁的優勢來做統計,讓我們知道最後僅有線索記錄。</span></div>
<h2>
<span style="font-size: small;">ISSUE UIKit-[UIViewController purgeMemoryForReason:]</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">終於收到問題的通知信件了,當收到這樣的標題再進去看內容,還真的讓人不解。因為現在手頭上開發的 App 已經採用 ARC (<a href="http://edwardinaction.blogspot.tw/2012/03/automatic-reference-counting-in.html" target="_blank">Automatic Reference Counting in Objective-C and Xcode</a>) 的寫法了,所有的物件釋放時機都交給這個機制去運作,我都不用太擔心應該釋放時機點問題,怎麼會出現最後 Memory warning 才會出現狀況呢?<br /><br />到網路上找尋大家經驗,在這則三則找到了問題主因:</span></div>
<ul>
<li><span style="font-size: small;"><a href="http://stackoverflow.com/questions/8773497/uiviewcontroller-purgememoryforreason-crashing-on-ios-5" target="_blank">UIViewController purgeMemoryForReason: Crashing on iOS 5</a> </span></li>
<li><span style="font-size: small;"><a href="http://stackoverflow.com/questions/5627001/does-nsnotificationcenter-removeobserver-deregister-a-vc-from-recieving-memoryw" target="_blank">Does NSNotificationCenter removeObserver: deregister a VC from recieving MemoryWarning Notifications?</a> </span></li>
<li><span style="font-size: small;"><a href="http://subjective-objective-c.blogspot.tw/2011/04/avoid-nsnotification-removeobserver.html" target="_blank">Avoid - [NSNotification removeObserver:]</a> </span></li>
</ul>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br />主要問題所在,當 App 操作上難免會有記憶體上升,所以系統會發出低記憶體的警告 Notification。但是如果在 UIViewController 寫了 [[NSNotificationCenter defaultCenter] removeObserver:self] 如此一來會把 UIViewController 還要接收註冊的 Observer 也一帶 Release 掉,因此 UIViewController 就不會進入 didReceiveMemory,也跟著不會去釋放該要被釋放的物件,導致最後記憶體下不來,而最後整個 App 直接 Crash 收掉。</span><br />
<br />
<span style="font-size: small;">而會這樣寫法有兩個主因:</span><br />
<ol>
<li><span style="font-size: small;">懶惰。</span></li>
<li><span style="font-size: small;">對於 NSNotificationCenter 了解深度不夠。</span></li>
</ol>
</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">正確的寫法是像這樣 [[NSNotificationCenter defaultCenter] removeObserver:self name:NotificationName object:nil] 也就是自己註冊的 Observer 就一對一在 View 要被移除掉時候一起移除掉。這樣才不會將不屬於自己的 Observer 也被移除掉。<br /><br />寫程式最怕的就是亂處理非屬於自己掌控自己建立的物件、指令,這樣整個邏輯都會亂掉。最佳寫法就是要低藕合,只處理屬於自己掌控的。對的寫法就不能偷懶。</span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com1tag:blogger.com,1999:blog-7043066976283875345.post-24491784625541071232012-08-25T20:32:00.001+08:002013-02-19T11:13:56.283+08:00iOS App 自行評估上的五個重要指標<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlggwKVnkBC9JhHA5jXRF9guuIqPwj52ILpC0HhPjOcHdYLBYDKoQsdGICWKegt5ST5BIvSVaU-zRJ6o3prtmrw1QXYWzWREIQwYIH8-9cuUwpMY1O2AAK9lQD6y9D7EkLTOMOrwlW2Ig/s1600/chart_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlggwKVnkBC9JhHA5jXRF9guuIqPwj52ILpC0HhPjOcHdYLBYDKoQsdGICWKegt5ST5BIvSVaU-zRJ6o3prtmrw1QXYWzWREIQwYIH8-9cuUwpMY1O2AAK9lQD6y9D7EkLTOMOrwlW2Ig/s320/chart_1.png" width="320" /></a></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">身為一個開發出 N 個 iOS App 的你,對於一個 App 的好壞是否有心中的定數呢?怎麼樣的 App 在問市以前就可以先讓自己及贊助者、團隊都滿意呢?希望推出的 App 是一問市就獲得五顆星的佳評,還是要到後面自己在從一兩顆星慢慢追趕自己理想的五顆星呢?<br /><br />根據我們的經驗,會發現每個使用者在針對 App 作出 Review 的時候不外乎就圍繞在五個主題上去描述他使用的經驗。而這五個主題是我們每天在追求要更上一層樓的。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">1. User Interface</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">有好的 App 界面設計需要兩種專長有經驗的人才在一起合作才可行。App Designer 針對現在開發中的 App 的畫面,透過自己的設計能力去規劃畫面上每個地方的細節。套用各種 Designer 在美化上的公式,例如標齊對正、字體大小掌握、圖片材質的設計。這邊需要非常細心、創意、巧思才能完成理想圖。另外一種專長則是懂得實作進來的 App Developer,他的角色需要將 Designer 的用心根據自己程式的經驗將它實作起來,並且活化它,讓原本很美的靜態 App 理想圖變成實際看到、摸到、感覺到的 App,這時候開始後面的修改於調整,很多設計不是一次就能定數的。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">2. User Experience</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">同樣的功能,同樣的企劃相信交由不同的開發團隊設計出來的使用體驗絕對會不一樣。是否需要很多步驟才能完成操作、還是操作的過程很不順利,要使用者等待很久、或者在操作過程讓使用者覺得干擾過多,很難達到使用者心中想要操作的指令。好的 User Experience 要能在操作上即反應出使用者心中所想要、所期待下一秒會出現的結果。並且可以依序的操作下去。這方面除了用心得開發之外,也要搭配好的程式技術來做各方面進一步的調整。往往 User Experience 的改進是在 App 開發出樣貌後,開始要精進的。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">3. Information Architecture</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">iOS App 的寸土寸金的畫面上,要擺上哪些資訊是個極大的任務,這個畫面的出現是否讓使用者看的覺得有用、資訊是否足夠、資訊是否過多過少、資訊的上到下是否都對使用者而言很有意義,是否會讓使用者迷路,不知道怎麼進行上一頁、下一頁的各種操作。Information Architecture 的用心在於一個 App 的畫面有幾個,這些畫面上的資訊呈現與彼此的關聯性。要追求的是讓使用者覺得這樣的資訊呈現剛剛好。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">4. Quality</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">所謂的品質是達到我們所有想要提供給使用者的功能都能正常的操作,都能順利的完成。當 App 操作過程會 Crash、操作的過程等待過久、操作的過程因為某些特殊原因,且沒有處理好,而讓使用者的操作路線斷掉,上不去下不來的狀況。所以好的品質是要讓使用者不但能完成 App 提供的功能之外,還能操作的夠久到使用者自己自行離開關閉此 App。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">5. Content, idea</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">回到最初的問題,我們為何要設計這個 App,希望讓使用者可以看到哪些功能、讀到哪些資訊、讓使用者可以解決他們生活上哪些問題。在最開頭的企劃上是否就走對了路。內容相當的重要,不希望當以上四點都做到了,但是最後使用者卻嘆了一口氣:“這個 App 好無聊噢!對我一點用處都沒有。” 所以 App 能跟使用者緊密關係是這個項目要努力與用心的地方。</span><br />
<span style="font-size: small;"><br /></span></div>
<h2>
<span style="font-size: small;">最後</span></h2>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">當我們 iOS App 開發團隊進行每天工作的時候,時常都在天人交戰的部分就是以上這些項目,這些項目都是關係著我們推出後的 App 會帶給使用者哪些體驗。而這些過程很多部分會互斥或者互補的。有互補的狀況當然是最好的,最讓人擔心就是互斥的部分。</span></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">當為了好的 Information Architecture 缺犧牲了 User Experience,那麼我們必須要停下來問自己,哪一個最重要,如果能解決 User Experience 而 Information Architecture 再用別種方式來解決是不是很好呢?</span></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">這五個項目都是我每天在問自己的問題,對於現在手頭上正在進行的 App ,他在各個項目拿到幾分了呢?我們應該要在 App 問市前,心中就已經有譜了。戰爭還沒開打前,勝負就已經揭曉,這才是身為資深專業的 iOS App PM, developer 及每一個成員該有的知識。</span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-81415105974839192012-08-25T19:56:00.004+08:002013-02-19T11:14:41.067+08:00NSKeyedArchiver 讓 iOS App 方便儲存 Objects 的資料<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">在 iOS App 開發裡面,我們要儲存使用者的購物清單,而這些購物清單透過使用者在瀏覽的時候,將它們一一記錄下來,當隨後使用者要查看即可方便顯示出來。</span><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">我們會規劃 Objects 來封裝我們的各種值,這些 Object 在規劃上研究深入就要由 <a href="http://en.wikipedia.org/wiki/Domain_model" target="_blank">Domain Model</a> 來分析了。但是還好我們的 iOS App 不會到這麼複雜,只要基本的切分清楚在使用上方便即可。而我們是否有方便的方式將這些物件儲存起來呢?</span><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">NSKeyedArchiver 可以幫我們做到,透過 archive 即可將整串從 Root Object 開始將裡面所有的 Object 儲存起來。而下次要使用的時候只要透過 unarchive 取出即可還原。</span></span><br />
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></span>
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">實作 NSCoding</span></span></h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">我們有 PersonalShoppingList 這樣的 Object,而裡面有 Food 的 NSSet 和 FoodWithIngredient 的 NSDictionary,而要記得是在所有要存的 Object 都要實作 <NSCoding> 並且規劃寫 - (id)initWithCoder:(NSCoder *)aDecoder; 和 - (void)encodeWithCoder:(NSCoder *)aCoder。當然的,所有裡面會牽扯到的 Object 自己寫的都要這樣去實作。所以最後會看到自己要存的各種 Object 都會有寫好要存取的值。</span></span><br />
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></span>
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">儲存</span></span></h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">回到 NSKeyedArchiver 去將 PersonalShopping 指定給 archivedDataWithRookObject。當取得 NSData 後,一起將要儲存的 Path 規劃好之後,即可將它 writeToFile 寫進檔案。</span></span><br />
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></span>
<h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">讀取</span></span></h2>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">取出的時候是將 NSData 透過完整路經將檔案指定回來,再將 NSKeyedUnarchiver 的 unarchiveObjectWithData 還原回來,即可繼續使用了。</span><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><br style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;" /><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">NSKeyedArchiver 對於 iOS App 有做好 Object 規劃方面,儲存和讀取方面變的很方便,只要實作了此功能,我們的任何資料即可隨時存取,相當的方便。</span></span>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-79656585196491593662012-08-12T21:20:00.000+08:002012-09-24T11:20:49.370+08:00挫敗的上一步<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkD7IyWoPrvno_Qdj-yVLt9RXSu2GS68fAaNW1qVi89Fu6K3up97-Pf_LtCTYCXZToOiQB6QLf0qxrV6qHyoO4IZAuIjVeV_CXPX4DXNDSsD3ltuIE3vD4AK03PZUcpJ5kk_qtOZPXh0/s1600/IMG_6210.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkD7IyWoPrvno_Qdj-yVLt9RXSu2GS68fAaNW1qVi89Fu6K3up97-Pf_LtCTYCXZToOiQB6QLf0qxrV6qHyoO4IZAuIjVeV_CXPX4DXNDSsD3ltuIE3vD4AK03PZUcpJ5kk_qtOZPXh0/s400/IMG_6210.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">圖為 Edward In Action 所有</td></tr>
</tbody></table>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">很多現象永遠跟你想的不一樣。不論是已經收集了滿滿線索、信心滿滿、問了所有有經驗的夥伴自己的做法,只為了證明自己沒有錯。但是問題就是這樣的攤在面前,告訴著當事人你,是的,他就是錯了,不論怎麼試還是錯了。<br /><br />這個現象常常發生在我們 iOS App 開發上,每當信心滿滿的按下 Xcode 的 Build & Run,就是會去預期這一次在模擬器上開起來後的測試效果要如自己預期般的呈現,結果,很抱歉,就是沒有。請問該怎麼辦?<br /><br />我最常解決這樣問題的方法是借鏡於實驗。實驗裡面有實驗組與對照組,實驗組是投入要觀察的項目,而對照組是用來對照出來的實驗結果。所以為什麼問題會發生,程式功能跑不出來。是否有成功的案例,他是怎麼做的。我們要將這兩者的所有影響要素一一條列出來,將一樣的部分在腦海中一一刪去,剩下不一樣的項目。例如根據不同的經驗是:</span></div>
<ol style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<li><span style="font-size: small;">程式的撰寫方式有改變。</span></li>
<li><span style="font-size: small;">引用的元件套件版本的差異。</span></li>
<li><span style="font-size: small;">設定上的不同。 </span></li>
<li><span style="font-size: small;">在某種多重參數、要素組合的條件下造成的錯誤。</span></li>
</ol>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: small;">在卡住過程我們是最容易急的,因為當時間一直一直過去,可是問題卻一直攤在面前。所以面對這種挫折感的時候,最需要的就是冷靜,唯有冷靜才能平心靜氣的來慢慢穩健的分析。回到上一次成功的情境,去想想看為什麼那樣下會成功,但是現在卻不一行。<br /><br />很多時候,當問題卡住了,透過回到上一次成功的經驗,能帶給自己更多的信心,也才能在這過程中找出差異性。所以有時候我們想要急著前進三步遇到挫折時候,何不先退後一步,深呼吸一下呢!</span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-6036241942813153312012-08-12T20:38:00.001+08:002012-09-24T11:21:10.847+08:00Called the Shot 談每日工作生產力<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-EbKOgrDmtz8/UCeiylb4IYI/AAAAAAAACoY/Afp0gEnuR0A/s1600/IMG_8683.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="http://2.bp.blogspot.com/-EbKOgrDmtz8/UCeiylb4IYI/AAAAAAAACoY/Afp0gEnuR0A/s400/IMG_8683.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">圖片為 Edward in Action 所有</td></tr>
</tbody></table>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
每當談到軟體預估,我就想到《<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010254508" target="_blank">人月神話</a>》第八章〈預估〉[Calling the Shot] 的貝比魯斯。在 1932 年美國職棒世界大賽,全壘打王貝比魯斯在打擊前伸手指向中外野,接著隨即打出了一支全壘打。打擊前他做了預估,憑藉著自己的實力與精準度打擊出去,這就是著名的貝比魯斯的全壘打預告 (<a href="http://zh.wikipedia.org/wiki/1932%E5%B9%B4%E4%B8%96%E7%95%8C%E5%A4%A7%E8%B3%BD" target="_blank">Babe Ruth's Called Shot</a>)<br />
<br />
每當上司、主管、業務任何非技術背景同仁會來跟我商討功能的複雜度,以及大約需要多久,這個時間就要根據自己的經驗與了解度來做分析了,這沒有標準的答案,因為中間牽扯到執行寫程式的人技術、用心程度、負責程度,再到軟體測試是否能符合功能的需求來作開發,更不用再提任何變動的因素,而被迫要做調整。這些事情只要是軟體開發,就一定會碰到。前輩以及書上經驗跟我們說,只有不斷的練習,了解自己、了解團隊才能越來越掌控所需要的時間。<br />
<br />
Called the Shot 的精神我會將它融入到每天的工作。早上進入公司,開發團隊會做個簡單的溝通同步了解彼此在哪一個戰線上,而對於自己,就會訂下一個本日可以完成的大項目,或者本日可以完成的兩個以上小項目。以現在 iOS App 開發為例:</div>
<ul style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<li>某主題的 UITableViewController 開發,因為它是負責資訊列表的提供,所以會在本日將它所需要的資料串接,放入 UITableViewDataSource,最後再讓資料呈現在畫面上。而有兩個基本原則會一起伴隨開發的,重新整理與載入更多。一個是使用者會需要將現在畫面上的資料更新到最新,另外一個是使用者會一直瀏覽瀏覽需要更多後面的資料,而將這些資料載入畫面中。</li>
<li>使用者登入 UIViewController 設計,它是負責讓使用者可以來登入,所以這部分要將它規劃出輸入欄位,例如 Email, password,而當使用者輸入過程可以做些輸入上驗證,送出到伺服器上作密碼驗證,再回來跟使用者表達是否登入成功與否。最後再將畫面收掉,並且讓整體的使用體驗是給使用者有登入後的感覺。</li>
<li>整個 App 會共用的照片拍照上傳程式,這邊設計上會以方便給予照片物件集合,讓使用者在拍完照片或者挑選完照片,即可透過這隻程式來上傳,過程中表現出目前進度。最後處理上傳成功與失敗的狀況。</li>
</ul>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br />
這些是作為每天開始工作前,去思索一遍,動筆前先動腦,敲鍵盤前先想過,在自己展開工作一天,要來完成每日小目標。<br />
<br />
<h3>
1. 有明確目標</h3>
透過這樣的思索,讓自己在一開始即可想完整體面貌,而當面貌越完整,即可知道自己手邊資料材料是否足夠,在接下來一天設定這樣目標達成的可行性提升。</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br />
<h3>
2. 排除萬難</h3>
因為設定了這樣目標,所以在接下來的工作時段,就是要全心全意的來實作,任何的阻礙都會視為仇敵的方式來看待。任何的干擾包含:無關緊要的電話、無管緊要的 Email 、無關緊要的人過來你身旁找你講不相干的事情、任何突然會讓你被迫離開座位阻斷你前進的因素,這些能免就要免。<br />
<br />
最後每天傍晚跟團隊夥伴做一天回顧,如果有順利的執行以上項目,在自己一天內能完成的目標,並且順利地達成,最後還可以展示給夥伴們看,因為預估而實踐做了哪些功能、哪些昨天沒有今天才出來,今天因為我的用心而完成的小任務。</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
當完成了當初自己的預估,除了可以讓夥伴們眼睛一亮之外,自己在每個重要的一天,又完成了一個小成就。</div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-85840036439344135302012-07-22T22:02:00.001+08:002012-09-24T11:21:31.389+08:00從被挑選過程談個人競爭力<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-W0So9ToK3nA/UAwGKy_pAdI/AAAAAAAACns/Ux_nYMssYC4/s1600/IMG_0798.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="http://2.bp.blogspot.com/-W0So9ToK3nA/UAwGKy_pAdI/AAAAAAAACns/Ux_nYMssYC4/s400/IMG_0798.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">新款 MarBook Air 讓我更有效率</td></tr>
</tbody></table>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 數一數工作經驗也開始滿五年了。近日參加了些新鮮人年輕朋友們的咖啡廳聚會,聽聽小自己幾歲的年輕朋友們談他們的夢想、熱情與對未來的期待。有位年輕的小朋友跟我聊一聊天,覺得我對於自己的未來很有想法,也把我當老大哥在稱讚,讓我想起了一個自己小時候的故事。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">小時候因為家父要到美國華盛頓大學讀企管研究所,讓我們家有機會搬到西雅圖生活兩年,也因此讓我有機會可以在西雅圖市立國小讀小學三、四年級。還記得那天上學的午飯過後,我從學校餐廳走到操場,步向橄欖球草皮場地,看到同齡的白人、黑人們大家分隊彼此追逐打著有計分趣味橄欖球賽,當下我就非常想要加入一起玩。當那場結束後,進入到新的一場時,兩隊就要重新分隊。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">兩位資深體格好的男生站出來擔任兩隊的隊長,所有球員一字排開站在球場旁,分別由隊長以公平、一個一個彼此球隊輪流挑選的方式來進行。當時站在隊伍裡面的我,短短幾分鐘,對於這一切的遊戲規則和挑選過程產生相當大的震撼與難忘。內心想到兩個問題:</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p3">
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><span class="s1">1. 你是</span>什麼理由讓這位隊長挑選你?</span></h3>
</div>
<div class="p3">
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><span class="s1">2. </span>你是在第幾輪被挑選中?你的競爭力在哪?</span></h3>
</div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">我印象我是被第四輪挑中,我也不太清楚他選我的原因了,大概是看我身材不會太瘦太矮,看起來會跑步接球的樣子吧!我想。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">這個被按照公平客觀的一輪一輪挑選隊友的方式,造就往後我對於自我要求、自我一人練習的最大動力。</span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">不管做什麼事情,當你的戰場決定了,剩下就是認真以赴,贏得這場勝利。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p4">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">在職場上我相當期許自己有特戰部隊特徵,有專長競爭力、有被長官及隊友挑選我加入的理由與吸引力、附有正義、客觀、服從、忍耐、克苦耐勞等要點。不管專案是好的案子、慘的案子都能殺進殺出,獲得好佳績、完成該階段被賦予的任務。</span></div>
<div class="p5">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p4">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">所以每當累了、疲倦了,想要找回更上一層樓的動力時,何不問問自己,這是你要投入的戰場嗎?如果這是你要投入的戰場,你希望是第幾輪被長官、被客戶挑選中呢?<span class="s2">你的競爭力是什麼?</span><span class="s3">為什麼別人要給你機會。</span></span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-91633329100209563192012-07-20T20:55:00.001+08:002012-07-20T20:59:58.429+08:00Mike Markkula 教導 Steve Jobs 的蘋果行銷哲學<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/H6LlTikerBs" width="560"></iframe><br />
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">馬庫拉<span class="s1"> (<a href="http://en.wikipedia.org/wiki/Mike_Markkula" target="_blank">Mike Markkula</a>) </span>曾經教導賈伯斯<span class="s1"> (Steve Jobs) </span>關於行銷,也在一張紙上寫下「蘋果的行銷哲學」,其中特別強調三點:</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
1. <span class="s2">同理心 Empathy</span></span></h3>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 要能靈敏的察覺消費者的感受。要有能比其他公司,更了解消費者的需求。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
2. 專注 Focus</span></h3>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 為了一心一意做好決定做的事,必須要有焦點,以壯士斷腕的精神,捨棄其他不<span class="s3">那麼重要的東西。</span></span></div>
<div class="p4">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
3. <span class="s2">聯想 Impute</span></span></h3>
<div class="p6">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">一家公司或是產品傳達給消費者的感覺,會讓消費者聯想到該公司或產品。就像書的封面設計好壞與否,會影響買書人對書的評價。不但要有最好的產品、最好的品質,也要有最有用的軟體等。且如果包裝有創意且專業,消費者必然對我們的品質有信心。</span></div>
<div class="p4">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p6">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">賈伯斯從創立蘋果開始,一路走來對行銷、形象非常在意,甚至連產品包裝的細節也不放過。賈伯斯曾說:「從打開<span class="s1"> iPhone </span>或<span class="s1"> iPad </span>包裝箱那一刻的觸感,就可以預知使用這個產品的感覺。這就是馬庫拉教我的」。</span></div>
<div class="p4">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p6">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">以上是來自於閱讀賈伯斯傳第六章關於貴人馬庫斯的心得整理。</span></div>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-15353071780160361162012-07-20T19:12:00.000+08:002012-07-20T19:12:00.962+08:00Design by Committee 委員會設計<br />
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">從設計法則這本書來談,裡面的第<span class="s1"> 74 </span>頁談到<span class="s1"> Design by Committee</span>,是指一種設計的過程,為了達到共識、必須由團體決定且需要重複探討為基礎。一般人會普遍認為,專制領導者在推動的計畫或是專案會做出好設計,民主團體推動的計畫會做出壞設計。很多人覺得這樣老大領導者的觀念很浪漫,相當吸引人,偉大的設計就是需要卓越的設計領導者來掌舵,才會成功。然而這樣的觀念充其量只是一種過度簡化的方式。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">怎麼樣適合獨裁設計領導者為主呢?在時間有限情況下、需求相對直接、可以容忍錯誤,以及相關計畫關係人不重視不發表意見的案子。除了發明家、名流設計師和企業創業家以外,所有現代設計規模稍大的都是委員會設計。所以在認為偉大設計都是來自獨裁設計師,往往是迷思而非事實。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">委員會設計適合品質導向、需求複雜、不能容忍錯誤,以及相關人事意見重要的案子。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">最理想的委員會組成是多元樣,有偏見和影響力的成員越少越好,以有效率的方式收集各個成員的貢獻與投入,簡化指揮模式以加快決策,才能確保過程不會過久甚至陷入僵局。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">一般而言,在減少整體失敗風險這點上,委員會設計會勝過獨裁設計。畢竟壞獨裁者不會比好的獨裁者少,而獨裁往往缺乏委員會的錯誤更正能力與組織安全的考量面向。民主的確會重復進行且變慢,但是會比較謹慎,也比較不會犯錯。兩種模式都有其優缺點,所以要視情況而定。</span></div>
<div class="p2">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">自由塔<span class="s1"> (Freedom Tower) </span>引人注目的原始設計,是由<span class="s1"> Daniel Liberskind </span>透過典型獨裁式設計創造出來。然而因為世貿雙子星大樓的建築需求極端複雜,無法容忍設計上的差錯,而且相關厲害人士數量較多且充滿熱情。最後自由塔要採用委員會設計。當這項設計經過各式各樣的商業、工程、安全、和政黨派重複討論後,個人表現手法和氣質會被中和稀釋掉,最後設計上視覺也許不吸引人,但是就定義而言,卻是比較實用的設計。</span></div>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-62779691447172249462012-06-25T20:49:00.003+08:002012-09-24T11:21:55.975+08:00iOS Music App Pause After A Headset Was Unplugged<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當使用者在他們的 iPhone 上面聆聽著歌曲,聽著聽著,在還沒有暫停的情況下拔掉了耳機,這時候請問 iPhone 上的 Music App 是該繼續播放還是暫停?</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">好的互動設計應該是要暫停的。因為使用者因為要中斷聆聽而做出了拔開的行為,不論是拔掉耳機、拔掉音響的音源線都是要中斷現在操作行為,那麼音樂應該是要暫停的。</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">但是回到我們的程式設計,不做任何處理的話,程式是會一直讓音樂播放下去的。所以我們應該要在程式上做這樣的處理。那我們該分這些步驟規劃:</span><br />
<br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">1. 註冊 Listener</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 在適當的位置登記一個 Audio Session 的 Listener,用意來監聽是否有任何 audio route 的改變。<a href="https://gist.github.com/2988352" target="_blank">參考 Gist Code</a></span><br />
<br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 2. 在對應 callback function 做邏輯處理</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">在對應的 function 裡面根據進來的改變原因來判定當下發生了哪種情境,而當耳機拔開算是 kAudioSessionRouteChangeReason_OldDeviceUnavailable,在文件上定義當裝置 UnPlugged 都算是這個原因,那麼我們就可以在那情境下將原本在聽歌的部分將它暫停掉。<a href="https://gist.github.com/2988342" target="_blank">參考 Gist Code</a></span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 那麼有哪些改變原因我們可以查詢呢?參考 <a href="http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/doc/constant_group/Audio_Session_Modes" target="_blank">iOS Developer Library</a> 文件可以看到有這些情境可以讓我們來分析。</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" height="143" src="http://2.bp.blogspot.com/-SrnsaFmPrTg/T-hddyJCYmI/AAAAAAAACm4/OWebw4TcIDM/s400/Screen+Shot+2012-06-25+at+%E4%B8%8B%E5%8D%888.30.32.png" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Audio Route Change Reasons</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-SrnsaFmPrTg/T-hddyJCYmI/AAAAAAAACm4/OWebw4TcIDM/s1600/Screen+Shot+2012-06-25+at+%E4%B8%8B%E5%8D%888.30.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"></span></a></div>
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 最後,我們就能因為加上這些貼心的程式碼,讓使用者可以在聆聽歌曲,搭配不同的情境下,而有更好的對應互動體驗。</span>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-46863488118193670532012-06-23T10:56:00.001+08:002012-09-24T11:22:26.583+08:00How To Test Blocks When Making Unit Tests For Objective-C<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-WTkaTN5_Shg/T-UvuCsO8HI/AAAAAAAACms/Aq32nf-MXB0/s1600/Screen+Shot+2012-06-23+at+%E4%B8%8A%E5%8D%8810.46.26.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="135" src="http://4.bp.blogspot.com/-WTkaTN5_Shg/T-UvuCsO8HI/AAAAAAAACms/Aq32nf-MXB0/s400/Screen+Shot+2012-06-23+at+%E4%B8%8A%E5%8D%8810.46.26.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Gist Code: <a href="https://gist.github.com/2976465" target="_blank">https://gist.github.com/2976465</a></td></tr>
</tbody></table>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 當我們有個 Method 是使用了 Blocks 的方式來網路呼叫,這段過程不知道多久才會完成,有可能很快,有可能要等很久。這樣的過程在 Unit Test 方面是一直往下跑,所以結果沒出來我們也無法加入 Assertion 來確定結果是不是我們預期的。</span><br />
<br />
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">- (<span class="s1">void</span>)loadMore:(<span class="s1">BOOL</span>)more didFinishLoad:(<span class="s2">requestDidFinishLoadBolck</span>)requestDidFinishLoad</span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> loadWithError:(<span class="s2">requestLoadWithErrorBlock</span>)requestLoadWithError</span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 我們可以開一個 NSRunLoop 來輔助,先宣告一個 BOOL done 來控制影響後面我們的 Run Loop 的執行狀況。但是在 while 迴圈裡面也是有個上限,透過 usleep() 來控制要等待多少 <span style="background-color: white; color: #222222; line-height: 16px;">microseconds</span> 。當整個等待架構好之後,回到主要要測試的程式,在最後結果的 finish load 和 load with error 裡面都補上 loading done 的轉換成 YES,如此一來提早執行完我們也可以將等待的 Run Loop 結束掉。</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">以上透過這樣方式即可完成我們在程式是需要網路呼叫的測試了。程式使用 Blocks 方式撰寫也不成問題。相關文章:</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://edwardinaction.blogspot.tw/2011/11/sentestcase.html" target="_blank">使用 SenTestCase 為後續整合更快速</a>、<a href="http://edwardinaction.blogspot.tw/2011/11/sentestcase-continuous-integration.html" target="_blank">使用 SenTestCase 為 Continuous Integration 之路更踏實</a>。</span></div>
Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-30766736728832585952012-06-16T02:19:00.001+08:002012-07-21T15:43:45.277+08:00WWDC 2012 - My Most Memorable Tweets Collection<br />
<div class="p1">
<b><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">My (@EdInUbuntu) most memorable Tweets during WWDC 2012 week, from the very beginning til the last day.</span></b></div>
<ul class="ul1">
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Tourist Bus Driver: Mr. Hu left hes coat in the hotel. We wait for him a minute here.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Last day being at #WWDC, and got only few sessions left. I will miss here so much. http://t.co/AkmbTL0c</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">dispatch_get_main_queue()</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">During #WWDC session break, my favorite DJ plays song is “Gotye - Somebody That I Used To Know.” Just bought it from the iTunes Store.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">@dannygreg Nice to meet you, thanks for sharing some best practices with me! Have a good time rest of the week.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Just arrived Appsterdam WWDC HQ! At @StackMob HQ</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">@featherless @heroku Feel so honor, glad, thankful, happy that I can attended too. Rocks!</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">I left my bugs in San Francisco.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">@mattt @cocoapodsorg: What a great meet-up, lots of popular rock in the house! Me and @zetachang enjoy it so much. Thanks so much!</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">The T-Shirt what people wear represented the past, right now, and the future. #WWDC</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">There are heartwarming stories out there of what the combination of our incredible devices and your amazing apps have made in peoples lives.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">@pixelcon Thanks for the party, and the T-Shirt is amazing, we love Crashlytics so much! See you this week. http://t.co/4AMX95aX</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Fuel your body, feed your Mac. #WWDC http://t.co/0pewtdVq</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ShawnKing: Cant's sleep. Watching WWDC Keynote. Does any other tech company make "Thank You" videos that make grown men tear up? Remarkable.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Just get in the waiting line for #WWDC, it’s 5:12 AM.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">To @dlackty, @testflightapp team said they remember you were here #WWDC last year, and wanna say hi to you. http://t.co/NRVdpfq8</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Next to the Moscone South, waiting for the afternoon #Pilgrimage to #Cupertino. #WWDC</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Who is Edward Chiang, @polydice? But you are Chiang Chung-Chuan! … After all, went to member service line to explained for the badge name.</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Yes, we are here With @zetachang, @polydice, waiting in line for #WWDC badge. http://t.co/iM8yzVJD</span></li>
<li class="li2"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">To the airport, with @zetachang #WWDC</span></li>
</ul>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-85628183706601447072012-06-12T22:22:00.003+08:002012-06-23T11:02:27.757+08:00WWDC 2012 Keynote with heartwarming stories<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-F2AI8BEzgSI/T9dPITRNcwI/AAAAAAAACfg/N0msUblOK9w/s1600/IMG_9182.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="http://4.bp.blogspot.com/-F2AI8BEzgSI/T9dPITRNcwI/AAAAAAAACfg/N0msUblOK9w/s400/IMG_9182.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">WWDC 2012 Keynote</td></tr>
</tbody></table>
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 今年 Apple 舉辦的 WWDC (World Wide Developer Conference),在當地時間 6/11 早上 10 點盛大展開,而第一場重頭戲大家擠迫頭排隊的就是 Keynote 了。而同時每次第一場的 <a href="http://www.apple.com/apple-events/june-2012/" target="_blank">Keynote</a> 都會全球轉播。</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">整場 Keynote 的氣氛讓我們非常的感動與感恩。Tim Cook (CEO of Apple) 不斷的提到有今天這樣亮眼成績要感謝 Apple 的產品搭配全球優秀的開發者,開發的 App 改變了人們的生活方式。</span><br />
<br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">“ There are such heartwarming stories out there of what the combination of our incredible devices and your amazing apps have made in peoples lives. ” - Tim Cook</span></blockquote>
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 最感人的就是 7:37 ~ 15:28 這段的影片播放。用了幾個感人的 App 為例,如何改變與協助人們來完成日常生活事情,這層關係是如此的緊密。</span><br />
<br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">回到反觀自己</span></h3>
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當我從多年 Java 開發背景,轉入到 iOS 開發,給我最大動力是期許自己可以透過 iOS 平台、工具、開放式原始碼、技術討論社群的力量,做出符合市場上使用者期待的產品,希望所有使用者可以因為下載,使用了喜歡再給這個產品更好的評價,讓使用者來跟他們的朋友們做介紹。</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">但是如果我們一直老是自私的想著小我,我要怎麼樣,這樣還是太侷限在自己了。這場 Keynote 一再提到 “What we can do more to make…., what can we do better for…” 我們跟應該把思想在自己為中心,而擴大到我們的使用者,我們有什麼優勢?身為 iOS Developer 的我們擁有了驚艷的技術,但是更重要的是,我們如何用心觀察人們需要怎麼樣的 App 來協助、來改變他們的生活。可以更有教育性、更方便、更簡便、更容易、更有娛樂性。這一些都是人機互動、互動設計再告訴我們的。</span><br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">好的 App 有三大重要必備要素,缺一不可,Interaction, User Interface, Implement.。</span><br />
<br />
<h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Interaction</span></h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 人們如何和設計出來的 App 互動,如何的使用可以啟動、操作、閒置到最後關閉,這段期間所有操作的狀況。</span><br />
<br />
<h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Interface</span></h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 介面是人們與 App 接觸的窗口。畫面上的設計如何的簡潔、有效率的輔助使用者來讓整個過程,每一個閱讀、點擊和操作都是很容易的。</span><br />
<br />
<h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Implement</span></h4>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 當有了概念、技術,身為 iOS Developer 我們該如何將它實作到好、高品質的,使得使用者可以在短期、中期、長期來使用都能達到與符合他們的預期。</span><br />
<br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">最後</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">非常感謝我周遭的親朋好友,讓我這次有機會能順利規劃旅程、成功抵達舊金山參加 WWDC 一個星期,讓平常分散在全球各地的開發者,因為這樣的聚會全部聚在一起,一起分享、一起討論、一起研究,過去的技術與現在新設計出來的技術。</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">When we learn together, we stay together.</span><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-BslXMy9DlNI/T9dQKk3OR5I/AAAAAAAACfo/s2uLq_5NxGs/s1600/IMG_9099.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="http://1.bp.blogspot.com/-BslXMy9DlNI/T9dQKk3OR5I/AAAAAAAACfo/s2uLq_5NxGs/s400/IMG_9099.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Me & TestFlight Team with Founder Ben Satterfield.</td></tr>
</tbody></table>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-24365327797379082812012-06-07T18:13:00.000+08:002012-06-07T20:03:25.550+08:00SVProgressHUD - A Progress HUD for iOS App<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://samvermette.s3.amazonaws.com/blog/199-svprogresshud/svprogresshud.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="230" src="http://samvermette.s3.amazonaws.com/blog/199-svprogresshud/svprogresshud.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">圖片參考自 <a href="http://samvermette.com/199">http://samvermette.com/199</a></td></tr>
</tbody></table>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當我們在開發 iOS App,要從 iPhone 透過網路跟 Server 端溝通,過程一定是需要等待,而這過程會有來回時間,這依照網路的好壞來決定要多久。在這過程我們會需要適當的在 App 介面上顯示目前走到哪了,告知使用者目前還在進行當中,稍後就會告知結果。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">對應上我們就需要 Progress HUD ( heads-up display ) 來顯示。使用上特點有:</span><br />
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">可以加入在當前的 View 上面。</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">簡單的顯示,容易的移除掉。</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">在過程當中,成功或失敗結果,根據階段顯示對應的圖片和文字。</span></li>
</ul>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">推薦 GitHub 上面的這套 Project:<a href="https://github.com/samvermette/SVProgressHUD" target="_blank">samvermette / SVProgressHUD</a>。使用上透過 SVProgressHUD 對應靜態的 method 即可做出這些需求組合:</span><br />
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Show</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Show、伴隨狀態文字</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Show、伴隨狀態文字、是否顯示 Activity Indicator。</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Show、伴隨狀態文字、加上顯示 Mask Type。</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Show 成功、伴隨狀態文字、過程停留秒數</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Show 失敗、伴隨狀態文字、過程停留秒數</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Set Status 過程可以轉換狀態文字</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Dismiss</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Dismiss 成功、伴隨狀態文字、過程停留秒數</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Dismiss 失敗、伴隨狀態文字、過程停留秒數</span></li>
</ul>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">這套類型上 HUD Mask Type 支援四種:None (過程還是可以讓使用者持續操作其他事情)、Clear (不允許使用者互動)、Black (不允許且用黑色的效果)、Gradient (不允許且加上 Gradient 的背景效果)。</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">而當然在使用這些狀況,我們要讓呼叫的程式寫在 UIViewController 會比較好,除了正常顯示之外,讓 View 的邏輯集中在這個地方。所以使用通常會伴隨三個階段:</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
1. 使用者操作,啟動 HUD</span></h3>
</div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">這邊伴隨著各種操作動作,例如 Query, Delete, Add to Favorite, Remove from Favorite 等等各種功能操作。</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
2. 使用者等待,持續顯示 HUD</span></h3>
</div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">如果是一般的網路溝通,就用一般 Activity Indicator 加上傳送中的文字。如果是上傳比較大的檔案,可以透過數學計算進度百分比,讓它持續更新狀態文字,讓使用者可以預期還要等待多久,完成了多久。</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
3. App 回饋結果,顯示文字後關閉 HUD</span></h3>
</div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">不論是成功或是失敗,透過適當的文字結果告知使用者,這次的操作行為結束了,而結果是這樣子。如此一來也把操作權交回給使用者,使用者可以繼續別的 App 功能操作下去。</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">使用 Progress HUD 很方便,效果也很清楚。但是它也帶來操作上另外一種缺陷。在使用上要特別注意的。因為在這過程畫面會被罩上這樣進度顯示,所以使用者的操作體驗是被中斷的。另外如果撰寫不小心,這個畫面停留太久讓使用者無法關閉,這樣是嚴重的 Bug 出現了。</span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">所以以上在採用這樣的配套措施引用在 App 使用過程裡頭,有它的方便性、回饋準確效果,當然也是會帶來另外一種被中斷的等待體驗。</span></div>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-21151763377444698162012-06-06T18:55:00.000+08:002012-06-07T18:16:52.557+08:00向上管理的 10 個著手方向<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">在任何組織裡面,只要人數稍微多一點,擔任產品經理也是會有他的上司。而在這樣的結構裡面要如何向上管理,扮演好自己的角色,讓自己可以是表現出符合上司期待之外,更能減少許多衝突與面對不同的見解處理。
</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">在新創公司也是會需要面臨這樣的挑戰,既然我們無法避免,那麼是否有些方法可以讓我們來將資源極大化的充分使用。 </span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://www.linkedin.com/in/cagan" target="_blank">Marty Cagan</a> 在 <a href="http://www.amazon.com/Inspired-Create-Products-Customers-ebook/dp/B001AQ95UY/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1338849171&sr=1-1" target="_blank">Inspired: How To Create Products Customers Love [Kindle Edition]</a> 這本書的 <a href="http://svpg.com/managing-up/" target="_blank">Chapter 10 Managing Up</a> 給了十個好的執行建議,而當我在閱讀與思考這十項建議之於,也對照了自己工作的經驗來做個記錄。 </span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">1. 評估與計畫變動成本</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">每次當我們在計畫事情時候,一定會先預估,但是事情總是這麼美好,總是一次就做對嗎?而這之間最重要的因素就是在變動成本。在軟體開發裡面變動成本例子可能來自於將程式碼改寫、因應不同的需求,而程式碼也要跟著改變。或者可能來自於團隊因為新的成員加入,帶來新的想法,而造成產品必須要調整。這些都是超出我們當初預期的。所以我們必須除了計畫之外,也要把這些變動成本的事項也規劃出來。所以當在評估要花多久之於,要將一般評估與變動成本一起考量。依照這樣想法,再回顧自己過去參與的專案開發、產品開發,確實發現,往往原本十拿九穩的計畫最後還是拖延了,那麼拖延的因素多半來自於變動成本的項目。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">2. 溝通的方式與頻繁度</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">團隊之間一定需要溝通,讓彼此站在同一條戰線上前進。但是如果溝通太頻繁導致真正的執行者例如開發人員沒有足夠的開發時間來執行,也是件困擾的事情。而如果不讓彼此知道在做什麼,這樣時間拉長也會容易導致些多於、重疊、非預期的事件發生。所以溝通上我們有專案進度控管的軟體輔助 (每個單一事件轉換才遞送報告)、群組軟體的溝通 (當下發生狀況需要在短時間被協調)、再到真的面對面討論當場解決的溝通方式 (即時修正,馬上釐清)。溝通的遊戲規則要被製定出來,這是團隊之間溝通的默契所在。目標可以有效的溝通、又能減少不必要的驚嚇打擾到第一線執行人員。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">3. 會前會的準備</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">開會不能少,開會通常都在決定重要決策,有時候需要被拿出來討論,讓有效的時間內的可以解決開會前所擔憂的疑慮。但是由於與會者牽扯變多的話,同時又希望重要人士可以表現出主席的預期,那麼會前會的討論與追蹤是在所難免。我們最擔心是當開會的時候,牌一攤結果都出乎自己的預期。所以希望可以將這些非預期的因素,在會前會的協商就可以大略的敲定。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">4. 給建設性的建議而不是提問題</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">身為一個產品經理,要能依照自己的專業度來提出建設性的方案,縱使不是自己能力範圍內,也是要能找出關鍵的夥伴,將解決方案一同擬訂。老是題報問題卻沒有任何建設性的作法,只是讓大夥們更加沮喪。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">5. 爭取上司的協助</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">很多跨部門協調事情,如果牽扯到非屬於自己的團隊成員時候,自己有沒有什麼權利去控制別團隊的人事與資源,那麼跟自己的上司做個明確清楚的報告,讓上司可以了解來龍去脈,而適當的幫忙爭取到進一步跨部門合作的資源。如此一來才能讓合作計劃順利執行下去。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">6. 做功課</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">身為產品經理要勤奮的做功課,讓自己能夠狀況內。用聰明的方式來定義問題,再透過用心與投入時間來找尋解決方案。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">7. 簡短 Email</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 最大的毛病就是將 Email 寫的太冗長。我們要站在上司的角度去想,上司每天收到的信件實在太多,如何用有效簡短重點式的 Email,越上層的長官寫的信件就要越精簡。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">8. 多用數據事實而不是個人觀點</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當跟上司溝通,最重要要知道事是我們要提供的是我們的數據與資訊和分析。所以我們就要多做功課,如此一來才能找到這些</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 9. 傳遞與介紹自己產品概念</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當合作上要跨部門時候,身為產品經理平日就要多多介紹自己團隊與自己產品的精神與文化。因為如何能有效的傳遞這樣的理念,那麼跨部門合作的夥伴在加入時,就會開始有興奮的期待,非常願意幫忙與協助。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">10. 低維護成本的夥伴</span></h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">產品經理在找尋的是屬於低維護成本的團隊夥伴。高維護成本的夥伴會需要太多得協助、太多的打擾與太多的溝通,犧牲掉太多寶貴的時間。所以高生產力、有效的處理事情的團隊夥伴是最重要的。如果真的需要訓練,那麼尋求外界的協助,產品經理與上司需要將時間花費在更多更棘手的問題上面。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">透過以上這些方向來著手,不會說一定就此沒問題,但是整體運作而言,進步是一定會逐漸看到的。</span>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0tag:blogger.com,1999:blog-7043066976283875345.post-29993327827089461392012-06-05T20:32:00.001+08:002012-07-21T15:44:13.201+08:00即刻救援!一段搶救幼小動物生命的故事<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-qOH3OvkaesE/T836uYb6tJI/AAAAAAAACbk/iUun1lnpuV0/s1600/470905_4133314095670_105647877_o.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="http://3.bp.blogspot.com/-qOH3OvkaesE/T836uYb6tJI/AAAAAAAACbk/iUun1lnpuV0/s400/470905_4133314095670_105647877_o.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">受傷的鳥兒</td></tr>
</tbody></table>
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> 受傷的鳥兒著陸在危險的忠孝東路四段巷弄裡,它無法飛翔,也很難步行。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">我在前往購買咖啡的路上撞著,以為它只是逗留,所以想盡辦法把它趕到路旁,希望它不要被往來的車子給壓到。看著它一步一步的向旁邊移動,我也安心離去。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當我返回再次路過時,看到它停在停車場門口,很虛弱的不再動了。我當下真的不知道怎麼辦!拿起了 iPhone 找了附近的獸醫卻找不出個所以然,越想越急,越想越無奈,回到辦公室依然不放心,開啟電腦上網快速 Google 找附近的動物醫院,順便查了如何處理受傷的鳥兒。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">網站上教學可以用適當大小的紙箱,約鳥的 2 倍大空間即可作為臨時的窩,因為紙箱可以將其與人類隔離,安靜的空間可以減少其受到驚嚇,免除因為衝撞再次受傷。可以在紙箱中放置固定的木頭或樹枝作為棲木,以供棲息,紙箱底部墊舊報紙或毛巾以便清理。千萬注意不要使用鳥籠,以免鳥因驚嚇衝撞而受傷。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">於是我拿著紙箱,抓著我們另外位女勇士 ChiaChia 一起出門搶救。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ChiaChia:“Edward,只有你這麼熱心...,別人可能就不管了吧!”</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">當我指著前進的方向,也看著這位小女生內心的感動,以及正在做不可思議的事情。當我們回到附近,看到好心的警衛剛把它拿了起來,我們上前跟警衛說明我們來歷,我們不是要養,但是我們會把它送去治療。請將受傷鳥兒後續救到動物醫院任務交給我們吧!</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">我們放進了紙盒子,我沒有騎車所以將接下來任務交給我們公司的勇士兼女騎士 ChiaChia,讓她騎著機車帶著裝著受傷鳥兒紙箱,前往附近動物醫院了,完成後面的使命。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">後來聽 ChiaChia 描述,跑遍了四家動物診所都沒有收留,但是有間接推薦適合的醫院,最後將它送往了<a href="http://www.tuugo.tw/Companies/%E5%85%A8%E9%99%BD%E5%8B%95%E7%89%A9%E9%86%AB%E9%99%A2/115000131344" target="_blank">全陽犬貓動物醫院</a>,地點在台北市八德路四段上。醫生會將這位受傷的鳥兒轉診,往後復健之路會送到相關基金會,過程有一層一層的關卡,依照鳥兒復健狀況分級放,最後一關會有個小窗戶,它飛的出去就自由了,如果飛出去不適應還有另外一邊窗口讓它們回來休息。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">有些事情比工作更重要,而當我在回想這過程覺得相當窩心,除了量力而為救了小動物生命,而這過程除了要我們自己本性是善良之外,也要有同理心、洞察力。當發覺任何事情不對勁,深入觀察與洞見,最後再做出最好的執行力。這不只是我們平日使用者研究訓練與培養,更是身為一個好的領導者在對的時間選擇做對的決定模範。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">非常感謝 ChiaChia、熱心警衛、盡責任的獸醫以及相關的基金會、以及感謝<a href="http://www.sups.tp.edu.tw/school/bird/birdhelp.html#2" target="_blank">鳥類急救教學網站</a>,因為簡單的說明,讓我們可以緊急時刻也能冷靜從對的地方著手。這個社會因為有你我,而變得不一樣。</span>Edward Chianghttp://www.blogger.com/profile/00869633404270696580noreply@blogger.com0