// API callback
related_results_labels_thumbs({"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872"},"updated":{"$t":"2025-09-18T07:02:56.138+08:00"},"category":[{"term":"Programming"},{"term":"Culture"},{"term":"Testing"},{"term":"scrum"},{"term":"Agile"},{"term":"performance tuning"},{"term":"Book"},{"term":"Code Quality"},{"term":"Qt"},{"term":"Event Storming"},{"term":"database"},{"term":"file system"},{"term":"virtual machine"}],"title":{"type":"text","$t":"VIVOTEK Digest"},"subtitle":{"type":"html","$t":"Journey of Software Development"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/-\/Agile?alt=json-in-script\u0026max-results=8"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/search\/label\/Agile"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"}],"author":[{"name":{"$t":"diro"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/13292247339970268280"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"5"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"8"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872.post-7442227545228273634"},"published":{"$t":"2019-09-02T17:48:00.002+08:00"},"updated":{"$t":"2019-09-02T17:50:27.679+08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Agile"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Culture"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Event Storming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"scrum"}],"title":{"type":"text","$t":"Clean Architecture 課後心得分享"},"content":{"type":"html","$t":"\u003Cbr \/\u003E\n\u003Cdiv style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly;\"\u003E\n\u003Ctable align=\"left\" cellpadding=\"0\" cellspacing=\"0\" hspace=\"0\" vspace=\"0\"\u003E\n \u003Ctbody\u003E\n\u003Ctr\u003E\n  \u003Ctd align=\"left\" style=\"padding-bottom: 0cm; padding-left: 9.0pt; padding-right: 9.0pt; padding-top: 0cm;\" valign=\"top\"\u003E\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; margin-left: 0cm; margin-right: 0cm; margin-top: 6.0pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd; mso-para-margin-left: 0cm; mso-para-margin-right: 0cm; mso-para-margin-top: .5gd;\"\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u0026nbsp; \u0026nbsp;\u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u0026nbsp; \u0026nbsp; 從\u003Cspan lang=\"EN-US\"\u003E Clean Architecture \u003C\/span\u003E我們學到要把程式架構畫出來，把核心邏輯與其它細節分開來\u003Cspan lang=\"EN-US\"\u003E, \u003C\/span\u003E避免核心被汙染，達到最終目標：\u003Cb\u003E\u003Cspan style=\"color: #2e74b5; mso-themecolor: accent1; mso-themeshade: 191;\"\u003E「\u003C\/span\u003E\u003Cspan style=\"color: #0070c0;\"\u003E最小化軟體生命周期的總成本\u003Cspan lang=\"EN-US\"\u003E+\u003C\/span\u003E最大化程式設計師的生產力」\u003C\/span\u003E\u003C\/b\u003E。書本裡面給了一個四層的架構圖：\u003Cspan lang=\"EN-US\"\u003EEnterprise\n  Business Rules, Application Business Rules, Interface Adapters, Frameworks\n  \u0026amp; Drivers\u003C\/span\u003E。簡單說前面兩個就是\u003Cb\u003E策略、業務規則、核心價值\u003C\/b\u003E，後面兩個則是\u003Cb\u003E細節、資料庫、框架、通訊協定\u003C\/b\u003E…等等。在這樣的分層規劃下，我們得以確認依賴關係是由外向內的。如果有需要，我們會利用依賴反轉\u003Cspan lang=\"EN-US\"\u003E(Dependency inversion principle\u003C\/span\u003E，\u003Cspan lang=\"EN-US\"\u003EDIP)\u003C\/span\u003E來維持核心的整潔，這樣的架構也允許我們延遲細節的決定。\u003Cbr \/\u003E\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; margin-left: 0cm; margin-right: 0cm; margin-top: 6.0pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd; mso-para-margin-left: 0cm; mso-para-margin-right: 0cm; mso-para-margin-top: .5gd;\"\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv align=\"center\" class=\"MsoNormal\" style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; text-align: center;\"\u003E\n\u003Cb\u003E\u003Cspan style=\"color: black; font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E事件風暴\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd;\"\u003E\n\u003Cspan lang=\"EN-US\" style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cspan style=\"mso-spacerun: yes;\"\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003C\/span\u003E\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E第二堂課\u003Cspan lang=\"EN-US\"\u003E, Teddy\u003C\/span\u003E帶我們體驗\u003Cb\u003E\u003Cspan style=\"color: #0070c0;\"\u003E事件風暴\u003Cspan lang=\"EN-US\"\u003E(Event Storming)\u003C\/span\u003E\u003C\/span\u003E\u003C\/b\u003E，事件風暴是一種快速讓群體進入狀況\u003Cspan lang=\"EN-US\"\u003E, \u003C\/span\u003E跨部門達成共識的方法，不限於軟體，其實可以應用在各種業務領域，協助建構模型。事件風暴的介紹網路上可以查到很多，規則與範例就不在此贅述，因為事件風暴最重要的是溝通的過程，使用文字敘述很難體會，課程後我與\u003Cspan lang=\"EN-US\"\u003EYK(\u003C\/span\u003E同事\u003Cspan lang=\"EN-US\"\u003E)\u003C\/span\u003E為了讓更多同事也能了解這個溝通方法，因此辦了一個小\u003Cspan lang=\"EN-US\"\u003Eworkshop\u003C\/span\u003E，邀請了三個不同部門的同事，其中包含\u003Cb\u003E測試部門、韌體研發、新技術開發部門\u003C\/b\u003E一起共同討論「\u003Cb\u003E韌體自動化測試工具\u003C\/b\u003E」這個主題。\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd;\"\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhhQAWynhQU0nLgRAhWc2CrCI5_b4VtgMqsTP0oXbAzaJzCC8vLJ_RIThinZymMUx1ByqfMKlyvJr1nRhL7EMLjeN3Ac2lYAAm-PU0stGdfoqw7VenWnthj4Zk7zbcAiksI8iMxgc7fB7K3\/s1600\/IMG_9177.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1200\" data-original-width=\"1600\" height=\"240\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhhQAWynhQU0nLgRAhWc2CrCI5_b4VtgMqsTP0oXbAzaJzCC8vLJ_RIThinZymMUx1ByqfMKlyvJr1nRhL7EMLjeN3Ac2lYAAm-PU0stGdfoqw7VenWnthj4Zk7zbcAiksI8iMxgc7fB7K3\/s320\/IMG_9177.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv align=\"center\" class=\"MsoNormal\" style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; text-align: center;\"\u003E\n\u003Cb\u003E\u003Cspan style=\"color: black; font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E共通語言\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd;\"\u003E\n\u003Cspan lang=\"EN-US\" style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cspan style=\"mso-spacerun: yes;\"\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003C\/span\u003E\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E首先，大家想的真的都不一樣。我們先把\u003Cspan lang=\"EN-US\"\u003E12\u003C\/span\u003E個人分成四個小組，讓大家各自列出這個系統中應該存在的\u003Cspan lang=\"EN-US\"\u003EEntity\u003C\/span\u003E再來互通有無一下，結果發現：有一些東西大家都有共識\u003Cspan lang=\"EN-US\"\u003E(\u003C\/span\u003E每一組都有塞一個專家\u003Cspan lang=\"EN-US\"\u003E)\u003C\/span\u003E，一定會有\u003Cspan lang=\"EN-US\"\u003Etest case\u003C\/span\u003E，也一定會有\u003Cspan lang=\"EN-US\"\u003Ereport\u003C\/span\u003E，有一些東西則是我有你沒有，你有我沒有。但是即使是一樣的東西，各自表述之後就會發現，你的\u003Cspan lang=\"EN-US\"\u003Ereport\u003C\/span\u003E跟我的\u003Cspan lang=\"EN-US\"\u003Ereport\u003C\/span\u003E可能又不一樣，\u003Cspan lang=\"EN-US\"\u003EA\u003C\/span\u003E組的包山包海，測試結果\u003Cspan lang=\"EN-US\"\u003E\/\u003C\/span\u003E細節步驟\u003Cspan lang=\"EN-US\"\u003E\/\u003C\/span\u003E結果統計圖，\u003Cspan lang=\"EN-US\"\u003EB\u003C\/span\u003E組的只有成功與失敗，另外還有一個叫做\u003Cspan lang=\"EN-US\"\u003Edebug log\u003C\/span\u003E的會包含細節，\u003Cb\u003E\u003Cspan style=\"color: #0070c0;\"\u003E沒有一個絕對的答案\u003Cspan lang=\"EN-US\"\u003E, \u003C\/span\u003E重要的是我們要找到共同的語言\u003Cspan lang=\"EN-US\"\u003E(ubiquitous language)\u003C\/span\u003E\u003C\/span\u003E\u003C\/b\u003E。\u003Cb\u003E\u003Cspan style=\"color: black; mso-themecolor: text1;\"\u003E共通語言除了釐清彼此的想法以外，還有加速溝通的效果\u003C\/span\u003E，建立共通語言後，可以提升溝通效率\u003C\/b\u003E，不論是文件、程式或開會。例如當要做一個跟影像有關的專案的時候，我們可以在早期建模的溝通過程中，發現是不是所有成員都有\u003Cspan lang=\"EN-US\"\u003E3A\u003C\/span\u003E的觀念，知道\u003Cspan lang=\"EN-US\"\u003EAE, AF, AWB\u003C\/span\u003E是什麼，避免專案走到後期，才發現彼此有很大的誤解。\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 3.6pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .3gd;\"\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjW8Jzf0ydGkqF8kx5kfZ9X7nyD6tgVzU-Prhyphenhyphen4KLNYO3A1_x-to6Hee5doKLDoMGSQrd8Ms3VEjzEkCaAlhjQuv-hG94zoN2rTnNqDiiKXk0NJjUT7WHCObaxRxfy-HF5Im9Mh8148VMTc\/s1600\/IMG_9182.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1200\" data-original-width=\"1600\" height=\"240\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjW8Jzf0ydGkqF8kx5kfZ9X7nyD6tgVzU-Prhyphenhyphen4KLNYO3A1_x-to6Hee5doKLDoMGSQrd8Ms3VEjzEkCaAlhjQuv-hG94zoN2rTnNqDiiKXk0NJjUT7WHCObaxRxfy-HF5Im9Mh8148VMTc\/s320\/IMG_9182.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv align=\"center\" class=\"MsoNormal\" style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; text-align: center;\"\u003E\n\u003Cb\u003E\u003Cspan style=\"color: black; font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E可視化流程\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly;\"\u003E\n\u003Cspan lang=\"EN-US\" style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cspan style=\"mso-spacerun: yes;\"\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003C\/span\u003E\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E除了共通語言以外，事件風暴還提供了一個全面的\u003Cb\u003E\u003Cspan style=\"color: #0070c0;\"\u003E可視化流程\u003C\/span\u003E\u003C\/b\u003E，我們同步大家的共同語言後，把四組合併成兩個組進行事件風暴，我們故意讓大家先用傳統方法從\u003Cspan lang=\"EN-US\"\u003EEntities\u003C\/span\u003E開始發想，再補充上\u003Cspan lang=\"EN-US\"\u003Euse cases\u003C\/span\u003E，讓大家先跑一次流程。\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 6.0pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .5gd;\"\u003E\n\u003Cspan lang=\"EN-US\" style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cspan style=\"mso-spacerun: yes;\"\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003C\/span\u003E\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E事件風暴跟從核心出發不一樣，而是從\u003Cb\u003E領域事件\u003C\/b\u003E開始展開\u003Cspan lang=\"EN-US\"\u003E(\u003C\/span\u003E我們認為有點像是從\u003Cspan lang=\"EN-US\"\u003Euse cases\u003C\/span\u003E展開\u003Cspan lang=\"EN-US\"\u003E)\u003C\/span\u003E，兩組分別列出我們在乎的領域事件，看到大家不斷的貼上、移動、調整，對整個流程重新順一次，我想這就是事件風暴要的效果，最後產生一個看得到的用戶故事\u003Cspan lang=\"EN-US\"\u003E(User stories)\u003C\/span\u003E。\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"margin-bottom: 6.0pt; mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly; mso-para-margin-bottom: .5gd;\"\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgC47CaDSpoIAAIaW3FHcEN86KBcesZC8QgMD7ODizb63vngXaC8L2ubGrVnrQ1w4LTFOvi-AE5Lh1KqkQtF16aLVtem0ax9yVq53C4U7u-TP6rmlD1gT8lnUUHbSwbPm0WDtcvCcWmBlPf\/s1600\/IMG_9210.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1600\" data-original-width=\"1200\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgC47CaDSpoIAAIaW3FHcEN86KBcesZC8QgMD7ODizb63vngXaC8L2ubGrVnrQ1w4LTFOvi-AE5Lh1KqkQtF16aLVtem0ax9yVq53C4U7u-TP6rmlD1gT8lnUUHbSwbPm0WDtcvCcWmBlPf\/s320\/IMG_9210.jpg\" width=\"240\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\" style=\"mso-element-anchor-horizontal: column; mso-element-anchor-vertical: paragraph; mso-element-frame-hspace: 9.0pt; mso-element-top: .05pt; mso-element-wrap: around; mso-element: frame; mso-height-rule: exactly;\"\u003E\n\u003Cspan lang=\"EN-US\" style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cspan style=\"mso-spacerun: yes;\"\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003C\/span\u003E\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E我感覺\u003Cspan lang=\"EN-US\"\u003Eevent storming\u003C\/span\u003E有點類似非\u003Cspan lang=\"EN-US\"\u003Ecoding\u003C\/span\u003E版本的\u003Cspan lang=\"EN-US\"\u003Emob programing\u003C\/span\u003E，用一種方法\u003Cb\u003E把群體的思維聚焦在同一個問題上，並且利用交流讓整體意識調整到相同頻率取得共識，共識後的產物是經過大家認可的業務邏輯與範圍，所以真正執行或實作的時候大家是\u003Cspan style=\"color: #0070c0;\"\u003E朝同一個目標努力的。\u003C\/span\u003E\u003Cspan lang=\"EN-US\"\u003E\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cb\u003E\u003Cspan style=\"color: #0070c0;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/span\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-family: \u0026quot;微軟正黑體\u0026quot; , sans-serif; font-size: 10.0pt;\"\u003E\u003Cb\u003E\u003Cspan style=\"color: #0070c0;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/b\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003C\/td\u003E\n \u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/7442227545228273634\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/09\/clean-architecture.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/7442227545228273634"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/7442227545228273634"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/09\/clean-architecture.html","title":"Clean Architecture 課後心得分享"}],"author":[{"name":{"$t":"mason.lin"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06217578385898828620"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhhQAWynhQU0nLgRAhWc2CrCI5_b4VtgMqsTP0oXbAzaJzCC8vLJ_RIThinZymMUx1ByqfMKlyvJr1nRhL7EMLjeN3Ac2lYAAm-PU0stGdfoqw7VenWnthj4Zk7zbcAiksI8iMxgc7fB7K3\/s72-c\/IMG_9177.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872.post-5686579162423854061"},"published":{"$t":"2019-08-30T18:26:00.001+08:00"},"updated":{"$t":"2019-08-30T18:28:25.450+08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Agile"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Culture"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"scrum"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Testing"}],"title":{"type":"text","$t":"The Year of Being Agile (Part 1)"},"content":{"type":"html","$t":"\u003Cdiv class=\"graf graf--p\" name=\"c3e2\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c3e2\"\u003E\n在我們團隊快要一年了\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5ad9\"\u003E\n一年的時間\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7275\"\u003E\n寶寶可以長牙\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"116a\"\u003E\n台灣可以賣出 10 億杯飲料\u003Cbr \/\u003E\n營業額可以突破千億…\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"116a\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh9YpCSD1g7TmrG5FmuZ8YtPPJWpVIAj9NtanXGXEhBxFvTbUa0jGUYPlvy5MQZTtZffSjcWO8Ml3mrp4ThuxG9hCsSO4gprm3WSJHgeHnCqnsw3Fi_pDkmYYQSoHAYf_iynhh-6yXnh_U\/s1600\/20190830_medium_1_1.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"262\" data-original-width=\"701\" height=\"235\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh9YpCSD1g7TmrG5FmuZ8YtPPJWpVIAj9NtanXGXEhBxFvTbUa0jGUYPlvy5MQZTtZffSjcWO8Ml3mrp4ThuxG9hCsSO4gprm3WSJHgeHnCqnsw3Fi_pDkmYYQSoHAYf_iynhh-6yXnh_U\/s640\/20190830_medium_1_1.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E經濟部統計處: 飲料店營業額在台灣逐年攀升\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b179\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b179\"\u003E\n不說飲料\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3bcc\"\u003E\n最近回顧了這一年的行事曆\u003Cbr \/\u003E\n我是有點吃驚的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3c97\"\u003E\nOMG!\u003Cbr \/\u003E\n原來工作的方式，可以這樣影響生活\u003Cbr \/\u003E\n越工作越有活力\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5688\"\u003E\n如何影響呢？\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2271\"\u003E\n我先賣個關子，先來看幾個大部分的組織會遇到的現象。\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2271\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch2\u003E\n\u003C\/h2\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch2\u003E\n第一個常見現象：開週會\u003Cbr \/\u003E\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EWhy are meetings so ineffective?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h2\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1881\"\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"772a\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"772a\"\u003E\n一個規模不大的四人團隊\u003Cbr \/\u003E\n一人報告一小時\u003Cbr \/\u003E\n一場 weekly meeting 就是四個小時\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7210\"\u003E\n如果你曾經有在電影院睡著的經驗\u003Cbr \/\u003E\n應該不難體會四個小時以上的會議有多累\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d548\"\u003E\n為什麼 weekly meeting 要開這麼久?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"8ceb\"\u003E\n畢竟是一週的進度回報，如果每個人報告一個小時\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b727\"\u003E\n相當於把他五個工作天，一天八小時的工作量\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0b91\"\u003E\n用 40 倍速的快進，講給你聽\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5663\"\u003E\n奇怪的是，我們心理從來沒有出現這樣的聲音\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p graf--startsWithDoubleQuote\" name=\"11d1\"\u003E\n“哇! 我聽到了 1\/40 的超級濃縮精華\/乾貨耶! ”\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a3c0\"\u003E\n我們只希望他能再快個 40 倍\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n這不能怪同事，就像在電影院睡著其實也不能怪導演\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"09ce\"\u003E\n沒有哪個導演拍片是為了讓觀眾睡的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d782\"\u003E\n比較可能的是 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1881\"\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5105\"\u003E\n那個議題和你沒有共鳴\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5105\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiF3aQ45wGgW44KKQPv5hPxF3Af9i5_kgZuCVOG3kMXSBCPOiIgFpcSo-IW7OMPOgkVJwfsnArh-vdit7EI9zIKypzdFKLI2LpYOASNEEQwlaStc4qrvt1PjXkkj6mwuR2fnHPjlTGa_Wk\/s1600\/20190830_medium_1_2.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"387\" data-original-width=\"693\" height=\"355\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiF3aQ45wGgW44KKQPv5hPxF3Af9i5_kgZuCVOG3kMXSBCPOiIgFpcSo-IW7OMPOgkVJwfsnArh-vdit7EI9zIKypzdFKLI2LpYOASNEEQwlaStc4qrvt1PjXkkj6mwuR2fnHPjlTGa_Wk\/s640\/20190830_medium_1_2.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"2de4\"\u003E\nGreat movies tell stories that have deep emotional resonance\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Ch4 class=\"graf graf--h4\" name=\"be55\"\u003E\n\u003C\/h4\u003E\n\u003Ch2\u003E\n\u003C\/h2\u003E\n\u003Ch2\u003E\n第二個常見現象：同事間的工作互換困難\u003Cbr \/\u003E\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EWhy is collective work difficult?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h2\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5105\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"db42\"\u003E\n我們很常因為負責了某個案子，後續的東西都交給你來處理\u003Cbr \/\u003E\n因為這是短期看來最省時間的做法\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"99e6\"\u003E\n當你在公司一陣子了，你會自然而然地有一個對照表:\u003Cbr \/\u003E\n“X module 的問題要找同事 A\u003Cbr \/\u003E\n\u0026nbsp;Y module 的問題找同事 B”\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c06a\"\u003E\n你應該也對這種情況不陌生 — \u003Cbr \/\u003E\n同事 B: “A 請假耶，這問題要等他回來才能處理喔! ”\u003Cbr \/\u003E\n很少同事 B 會說: “A 請假，那你先把東西給我，我可以處理”\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"68e6\"\u003E\n但其實，這種工作互換、集體協作的例子，在生活中明明很常見\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a151\"\u003E\n比如說便利商店的店員，A 忙著做咖啡、B 來幫忙結帳\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"6de7\"\u003E\n從沒見過哪個店員跟你說:\u003Cbr \/\u003E\n“不好意思我不能幫您結帳，負責收銀的今天請假，我只會泡咖啡”\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e129\"\u003E\n上述這種情況在組織裡卻很常發生，原因是什麼呢?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"adb8\"\u003E\n可能是訓練文化\u003Cbr \/\u003E\n不知不覺把 ”人” 訓練成一台 “機器” (咖啡機\/收銀機)\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1868\"\u003E\n因此當我發現這裡的 team member 可以輕鬆的交換手頭上的工作\u003Cbr \/\u003E\n我是很驚訝的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5105\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgS8PCqhsW2rOtiKiK7X7_RnUMid1cYh_6pJ1W9lHTHjuAr6CSeC6v8BSCTMKo2e8vJkY7sRj5At-yDhtjoEOrG7tvLBYe-hS0k8PxqQqqBOtGSbcfQQ6qNMv50Ezo8h52NAm8AyNoQ0b0\/s1600\/20190830_medium_1_3.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"462\" data-original-width=\"693\" height=\"425\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgS8PCqhsW2rOtiKiK7X7_RnUMid1cYh_6pJ1W9lHTHjuAr6CSeC6v8BSCTMKo2e8vJkY7sRj5At-yDhtjoEOrG7tvLBYe-hS0k8PxqQqqBOtGSbcfQQ6qNMv50Ezo8h52NAm8AyNoQ0b0\/s640\/20190830_medium_1_3.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"0480\"\u003E\nMachine learning or human learning?\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cbr \/\u003E\n\u003Ch2\u003E\n\u003C\/h2\u003E\n\u003Ch2\u003E\n第三個常見現象: 加班\u003C\/h2\u003E\n\u003Ch2\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EWhy work overtime?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h2\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"ba4b\"\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"ba4b\"\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"cde9\"\u003E\n你有玩過比手畫腳這類的傳話遊戲嗎? 通常結果都是各種歪樓\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"8f1e\"\u003E\n你可能會說，如果大家都能看到題目就不會有問題\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2a2b\"\u003E\nNo，還是不行\u003Cbr \/\u003E\n比如先前 U Think I Do 系列\u003Cbr \/\u003E\n就把朋友、家人、社會、學校、自己\u003Cbr \/\u003E\n看到一件事情的不同面向\u003Cbr \/\u003E\n放在一張圖裡，非常有趣\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2a2b\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2a2b\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEilu1dcZw_uA_wQi9e_mJEpZGLP8hLUgv_WObIOEgS3_nkf5j2HXMuTMhdzgDL49JjL__17rsVfoVo0ibL-srPcYWdrCw4q5sJ6IKa-snKCTGstANj8B7Yb80oStZJIquaQRvZAi2GX1dE\/s1600\/20190830_medium_1_4.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"444\" data-original-width=\"633\" height=\"448\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEilu1dcZw_uA_wQi9e_mJEpZGLP8hLUgv_WObIOEgS3_nkf5j2HXMuTMhdzgDL49JjL__17rsVfoVo0ibL-srPcYWdrCw4q5sJ6IKa-snKCTGstANj8B7Yb80oStZJIquaQRvZAi2GX1dE\/s640\/20190830_medium_1_4.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"4939\"\u003E\n不同角度的生命科學系\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5105\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"6773\"\u003E\n撇除那種時程明顯不合理的情況\u003Cbr \/\u003E\n大多數的加班來自於\u003Cbr \/\u003E\n每個人對事物的理解不同:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"078a\"\u003E\n以為自己了解對方想要的功能\u003Cbr \/\u003E\n↓\u003Cbr \/\u003E\n發現不是對方想要的功能\u003Cbr \/\u003E\n↓\u003Cbr \/\u003E\n\u0026nbsp;“盡量” 修改，改不完就加班\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7ea1\"\u003E\n這個 “盡量” 可能妥協了很多事情\u003Cbr \/\u003E\n如果前面幾次靠著加班，都很幸運的在 deadline 前完工了\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"205e\"\u003E\n再遇到這種情況的時候，就會習慣性的把加班變成解決方法\u003Cbr \/\u003E\n而忘了去想該修正哪些流程\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"205e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgQjOOERpgsEy93WonG2HRQOi4WuQ3xNQEUomfyFA1QtcmCR0MRRUqmoL2sukJheseVKhK3sgp9F9bO5FDL0XGCalgvQ06HMTMOw9KdQ_8z0ExnvPSbHydZo7BHrDynYyFVp3hR5k6mZQk\/s1600\/20190830_medium_1_5.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"463\" data-original-width=\"694\" height=\"425\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgQjOOERpgsEy93WonG2HRQOi4WuQ3xNQEUomfyFA1QtcmCR0MRRUqmoL2sukJheseVKhK3sgp9F9bO5FDL0XGCalgvQ06HMTMOw9KdQ_8z0ExnvPSbHydZo7BHrDynYyFVp3hR5k6mZQk\/s640\/20190830_medium_1_5.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"192b\"\u003E\n又下班了?! 我還想工作\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c9a6\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c9a6\"\u003E\nPM、RD、UX 都用自己的角度去理解、開發功能，在溝通不足、流程不透明的情況下，這個專案就會越來越像一個黑盒子\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"af8f\"\u003E\n當老闆問這件事情什麼時候可以做完\u003Cbr \/\u003E\n是不會有人知道的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"69b4\"\u003E\n高中物理就告訴我們，根據不確定性原理\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"6ed2\"\u003E\n專案的完成和沒完成，是同時存在的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b31a\"\u003E\n只有打開黑盒子的一瞬間才會塌縮到一種可能性上\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5fd9\"\u003E\n這種 “既完成又沒完成”\u003Cbr \/\u003E\n把人逼的 “既死又活” 的現象\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a2a3\"\u003E\n我們稱之為 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"06d4\"\u003E\n薛丁格的專案\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"205e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgpm1mmJehUEnD52sqHVTcmGAWozxda1g9oJNvsjx9u-GgaupA7VXNMv3_-IwQolbLJ907KW7x1jxKznCpJAnxN03Q5ajR0owjqwVb4vRBCIh0duTKfXly1-6WaJq1HwypQlL-uewV5o5k\/s1600\/20190830_medium_1_6.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"465\" data-original-width=\"700\" height=\"424\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgpm1mmJehUEnD52sqHVTcmGAWozxda1g9oJNvsjx9u-GgaupA7VXNMv3_-IwQolbLJ907KW7x1jxKznCpJAnxN03Q5ajR0owjqwVb4vRBCIh0duTKfXly1-6WaJq1HwypQlL-uewV5o5k\/s640\/20190830_medium_1_6.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"30b7\"\u003E\nSchrödinger’s Cat 薛丁格的貓\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"822f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"822f\"\u003E\n本篇文章未完，你可以現在\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Ca href=\"https:\/\/blog.rd.vivotek.com\/2019\/08\/the-year-of-being-agile-part2.html\"\u003E前往 Part2\u003C\/a\u003E\u003C\/strong\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"aca8\"\u003E\n也可以往下滑留下一些意見\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"205e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/5686579162423854061\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/08\/the-year-of-being-agile-part1.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/5686579162423854061"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/5686579162423854061"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/08\/the-year-of-being-agile-part1.html","title":"The Year of Being Agile (Part 1)"}],"author":[{"name":{"$t":"Vavrin Chen"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/00542546042460997372"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh9YpCSD1g7TmrG5FmuZ8YtPPJWpVIAj9NtanXGXEhBxFvTbUa0jGUYPlvy5MQZTtZffSjcWO8Ml3mrp4ThuxG9hCsSO4gprm3WSJHgeHnCqnsw3Fi_pDkmYYQSoHAYf_iynhh-6yXnh_U\/s72-c\/20190830_medium_1_1.PNG","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872.post-1436205381009210138"},"published":{"$t":"2019-08-30T18:24:00.002+08:00"},"updated":{"$t":"2019-08-30T18:28:10.216+08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Agile"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Culture"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"scrum"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Testing"}],"title":{"type":"text","$t":"The Year of Being Agile (Part 2)"},"content":{"type":"html","$t":"\u003Cdiv class=\"graf graf--p\" name=\"cde7\"\u003E\n我們再歸納一下，一般的組織常遇到三個現象:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"40e5\"\u003E\n1. 開冗長的週會\u003Cbr \/\u003E\n2. 同事間工作互換很困難\u003Cbr \/\u003E\n3. 加班\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"f70b\"\u003E\n而我們 team 恰恰相反，有這三個很獨特的地方:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"af46\"\u003E\n1. 不用開週會\u003Cbr \/\u003E\n2. 協作容易，你的同事就是你的分身\u003Cbr \/\u003E\n3. 不用加班\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"44ed\"\u003E\n這些特徵好像很難同時並存，你想，不開會怎麼知道同事在做什麼?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"8172\"\u003E\n同事之間不了解，溝通成本就大\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"dcc6\"\u003E\n人越多就越複雜，花的時間也多\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"9026\"\u003E\n怎可能不用加班事情還能準時做完?\u003C\/div\u003E\n\u003Ch2\u003E\n\u003C\/h2\u003E\n\u003Ch2\u003E\n敏捷開發\u003Cbr \/\u003E\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EWhy OverCooked can teach you agile?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h2\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0d1f\"\u003E\n來講講 OverCooked 這個遊戲\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"64c1\"\u003E\n一開始食物的訂單不多，每個人可以各司其職\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"6edd\"\u003E\n專門切肉，專門煮菜，專門洗碗\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d2d1\"\u003E\n而隨著訂單暴增和廚房地形改變\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"aba4\"\u003E\n如果還是一個人只負責做一件事，時間肯定是不夠用的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"aba4\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEisCCBUpO2eVXHzBTkv8ioXYxt_v8AISQ3ODBlPwGulvcekK-20PM6udyrm42ARoVa2S4jlGtGBowN-8_3jePNOgILX4ZDV7mGHdxt9PUNwMS-tMggtkMj7RashATAk2C3ASsaZ1OTOj34\/s1600\/20190830_medium_2_1.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"390\" data-original-width=\"697\" height=\"358\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEisCCBUpO2eVXHzBTkv8ioXYxt_v8AISQ3ODBlPwGulvcekK-20PM6udyrm42ARoVa2S4jlGtGBowN-8_3jePNOgILX4ZDV7mGHdxt9PUNwMS-tMggtkMj7RashATAk2C3ASsaZ1OTOj34\/s640\/20190830_medium_2_1.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"3cf1\"\u003E\n一款具備敏捷精神的遊戲\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"aba4\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EGet back in sync\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"676b\"\u003E\n左上角可以看到現在的訂單有哪些\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3de6\"\u003E\n一回合的時間完成越多訂單得分越高\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"176c\"\u003E\n這是一款用嘴巴打仗的遊戲\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d110\"\u003E\n你準備要拿料還是煮菜\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"250a\"\u003E\n需要什麼幫忙\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d9a1\"\u003E\n哪邊需要修正\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e026\"\u003E\n都要即時說出來\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1db5\"\u003E\n每個玩家都可以看到夥伴的狀況\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b591\"\u003E\n這種快速 team sync 的方式就是 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0723\"\u003E\ndaily scrum meeting \/ standup meeting\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003ERealtime review\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"905f\"\u003E\n這款遊戲一次最多四位玩家\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7bb3\"\u003E\n如果有八個人玩呢?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"498a\"\u003E\n一般情況就是多出來的四個會在旁邊\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"f144\"\u003E\n觀戰並且嘴砲給建議\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e269\"\u003E\n等到下一回合再換這一組人拿搖桿\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0934\"\u003E\n這種 driver \u0026amp; navigator 的方式 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"178a\"\u003E\npair programming \/ mob programming\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"178a\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh8gKRhXsGJyrybujJZhdjviMTzdO2-A2z_z9OjjU9UV3C26PLcd6ZrUAsFnBYSSUr4L5heA__rYqUxgwd3h1ck8jfxsHtZ5n3WJje-v0P7IYeUxjtJOscYPD51RU4dyECPPsroR8iOS7Q\/s1600\/20190830_medium_2_2.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"461\" data-original-width=\"697\" height=\"422\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh8gKRhXsGJyrybujJZhdjviMTzdO2-A2z_z9OjjU9UV3C26PLcd6ZrUAsFnBYSSUr4L5heA__rYqUxgwd3h1ck8jfxsHtZ5n3WJje-v0P7IYeUxjtJOscYPD51RU4dyECPPsroR8iOS7Q\/s640\/20190830_medium_2_2.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"372f\"\u003E\nThe programmer as navigator\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"178a\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"23d0\"\u003E\n介紹完遊戲，應該就不難回答我們一開始的問題\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EHow to avoid boring meetings?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3a6c\"\u003E\n這個 team 不是不開會\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b573\"\u003E\n而是不開沒有效率的會\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3bf7\"\u003E\ndaily meeting 有一些限制:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1cce\"\u003E\n最多 15 分鐘，站著開\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"73b4\"\u003E\n類似遊戲一回合的計時制\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2a3c\"\u003E\n講求快速同步最新狀況\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EHow to develop a cohesive team?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"ce53\"\u003E\n再來講協作:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"670f\"\u003E\n關心不等於了解\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5a6a\"\u003E\n想要了解一件事情\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c68c\"\u003E\n沒有什麼比實際參與還有效的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7239\"\u003E\n針對複雜的 task 安排 pair \/ mob\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"ec6e\"\u003E\n提倡 collective code ownership\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"cb60\"\u003E\n簡單說就是共榮共享\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"cd4e\"\u003E\n但這樣講可能有點土\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0b9e\"\u003E\n所以來看一下維基百科的定義:\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0b9e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"9d2c\"\u003E\n合作或協作（英語：Collaboration）\u003C\/blockquote\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"ac44\"\u003E\n是指一種由兩個或兩個以上的個人或團體作為一個共同的目標而交集或在一起共同工作，舉例說明：\u003C\/blockquote\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"96d6\"\u003E\n一個知識分子可以透過合作的關係而去分享知識，再而經過學習和共識達到創作的目標\u003C\/blockquote\u003E\n\u003C\/blockquote\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"9803\"\u003E\n從上面描述看的出來\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"9d60\"\u003E\n合作和凝聚力脫不了關係\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"432b\"\u003E\n那怎樣才能有好的凝聚力呢?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c51e\"\u003E\n借用本公司的四大核心價值\u003Cbr \/\u003E\n誠信、 關懷、創新、當責\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2eb9\"\u003E\n肯定每個人的付出\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"618e\"\u003E\n讓每個人都看到自己的貢獻 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"618e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"47a8\"\u003E\n一個人走得快\u003C\/blockquote\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"1bd5\"\u003E\n一群人走得遠\u003C\/blockquote\u003E\n\u003C\/blockquote\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\n\u0026nbsp;\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EWhy collective intelligence matters?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"8123\"\u003E\n電影環太平洋裡面\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"14c0\"\u003E\n龐大的機器人無法由一人駕駛\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"9143\"\u003E\n需要兩位駕駛員連接彼此的腦神經\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"c8a7\"\u003E\n共享對方的情感、記憶、經歷\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0f0b\"\u003E\n並且認同對方的處境之後\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"29d3\"\u003E\n才能同步操控\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"29d3\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjOaNKHpx2DuamsJYgRJg_mT5vIeEwKGtQeMlvkG3NLsoXQZNDs3IQ9xFi5sZfyhcDNoVnh9PmAXZM1QAAL1qijsjV6-m79sfDPt4npdLwcGGly3tN0FIURmJBWuiEFX1I3yFq2cxEkHfg\/s1600\/20190830_medium_2_3.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"399\" data-original-width=\"695\" height=\"366\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjOaNKHpx2DuamsJYgRJg_mT5vIeEwKGtQeMlvkG3NLsoXQZNDs3IQ9xFi5sZfyhcDNoVnh9PmAXZM1QAAL1qijsjV6-m79sfDPt4npdLwcGGly3tN0FIURmJBWuiEFX1I3yFq2cxEkHfg\/s640\/20190830_medium_2_3.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"6d5e\"\u003E\nPacific Rim: Uprising (2018)\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"6d5e\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"868d\"\u003E\n好的溝通和協作\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3d3d\"\u003E\n就是用心和時間\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"50f5\"\u003E\n灌溉的共同記憶\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"da5b\"\u003E\n他會形成一個生命體\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d8b1\"\u003E\n持續成長\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7fb5\"\u003E\n或者說他就是一個生命\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"42a7\"\u003E\n你們必須承擔起照顧這個生命的責任\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2268\"\u003E\n也是這份承擔\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0059\"\u003E\n讓你們之間的關聯\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n獨一無二\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEig7D3OQf1C4z-y7ILEqiNP7N6p5dnCjfQkzYeyO5R45ycVbOJNX4xpbuGGWOsNtsyciuu-xqCr9QBlKz0vefAkWdm7IwmvtePJX4bC2lsS_Ib7X4BtP58EplhmE9K_ksG0lAG7zkeYTek\/s1600\/20190830_medium_2_4.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"525\" data-original-width=\"696\" height=\"482\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEig7D3OQf1C4z-y7ILEqiNP7N6p5dnCjfQkzYeyO5R45ycVbOJNX4xpbuGGWOsNtsyciuu-xqCr9QBlKz0vefAkWdm7IwmvtePJX4bC2lsS_Ib7X4BtP58EplhmE9K_ksG0lAG7zkeYTek\/s640\/20190830_medium_2_4.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"97d5\"\u003E\nTrue collaboration yields better results\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EIteration based method\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"5eac\"\u003E\nIteration 翻成中文『迭代』\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"2b13\"\u003E\n在敏捷方法中是指\u003Cbr \/\u003E\n把一個大任務切成許多小週期可以完成的的任務\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"8a56\"\u003E\n騰訊創始人馬化騰說:\u003Cbr \/\u003E\n小步快跑、快速迭代\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"b59a\"\u003E\n這是他的產品思路\u003Cbr \/\u003E\n也成為互聯網創業法則\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"10b4\"\u003E\n敏捷開發裡的迭代週期是一個 sprint\u003Cbr \/\u003E\nsprint 這字有短跑衝刺的意思\u003Cbr \/\u003E\n很符合迭代的概念\u003Cbr \/\u003E\n一個 sprint 一般為 2 ~ 4 週\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3ac0\"\u003E\n由團隊討論這個 sprint 能完成的功能\u003Cbr \/\u003E\n並在 sprint 結束時做個『試營運』\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"7992\"\u003E\n拿到客戶的 feedback\u003Cbr \/\u003E\n並且快速的衡量修正\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"ac3e\"\u003E\n為了好懂，借個圖舉例\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"bbf0\"\u003E\n\u003Ca class=\"markup--anchor markup--p-anchor\" data-href=\"https:\/\/www.jpattonassociates.com\/about-jeff-patton\/\" href=\"https:\/\/www.jpattonassociates.com\/about-jeff-patton\/\" rel=\"noopener\" target=\"_blank\"\u003EJeff Patton\u003C\/a\u003E 是名資深產品經理\u003Cbr \/\u003E\n他的著作 \u003Ca class=\"markup--anchor markup--p-anchor\" data-href=\"https:\/\/www.amazon.com\/User-Story-Mapping-Discover-Product\/dp\/1491904909\/\" href=\"https:\/\/www.amazon.com\/User-Story-Mapping-Discover-Product\/dp\/1491904909\/\" rel=\"noopener\" target=\"_blank\"\u003EUser Story Mapping\u003C\/a\u003E 裡\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"babe\"\u003E\n比較了傳統方法與敏捷開發法\u003Cbr \/\u003E\n如何在三個迭代週期完成蒙娜麗莎\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"babe\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgCjevnSH_rT19O6o-Pi5dc7x7pX42bXUEDKd3KF_vktqEDjclJtNnR66ltL_baYxjpwGC67lpUuf71KTGcDPkeVUxCCMm75pFyueEYArAkvI7REmET0fOuHmcVZPVcM18S4X3MPvIKl4Q\/s1600\/20190830_medium_2_5.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"322\" data-original-width=\"683\" height=\"300\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgCjevnSH_rT19O6o-Pi5dc7x7pX42bXUEDKd3KF_vktqEDjclJtNnR66ltL_baYxjpwGC67lpUuf71KTGcDPkeVUxCCMm75pFyueEYArAkvI7REmET0fOuHmcVZPVcM18S4X3MPvIKl4Q\/s640\/20190830_medium_2_5.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"90f2\"\u003E\nJeff Patton did an Iterative Mona Lisa.\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d3e9\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"d3e9\"\u003E\n先來看傳統的開發方法:\u003Cbr \/\u003E\n在第一階段可以看到蒙娜麗莎的頭\u003Cbr \/\u003E\n第二階段能看到蒙娜麗莎的左下半身\u003Cbr \/\u003E\n第三階段是完整的蒙娜麗莎\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3e0a\"\u003E\n換成用敏捷開發會怎樣呢?\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"bedf\"\u003E\n在第一階段是極簡主義派的蒙娜麗莎\u003Cbr \/\u003E\n第二階段是簡單上色派的蒙娜麗莎\u003Cbr \/\u003E\n第三階段是佛羅倫薩畫派的蒙娜麗莎\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"1006\"\u003E\n不論哪個階段都是最小可行產品\u003Cbr \/\u003E\n很傳神地描述了敏捷的精神 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a87d\"\u003E\n接受反饋、迅速擴張\u003Cbr \/\u003E\n盡快給客戶有價值的產品\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a87d\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch2\u003E\n\u003C\/h2\u003E\n\u003Ch2\u003E\n敏捷帶來的影響\u003Cbr \/\u003E\u003Cstrong class=\"markup--strong markup--p-strong\"\u003E\u003Cem class=\"markup--em markup--p-em\"\u003EHow does agile affect my work and daily life?\u003C\/em\u003E\u003C\/strong\u003E\u003C\/h2\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"a0b0\"\u003E\n所以回到一開始我賣的關子\u003Cbr \/\u003E\n那個讓我吃驚的行事曆\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"4e44\"\u003E\n我發現從以前到現在\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0a9c\"\u003E\n晚上時間的利用有了很大的改變\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0a9c\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"4442\"\u003E\n從同事電腦辦公桌\u003C\/blockquote\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"6cf3\"\u003E\n變家人散步吹吹風\u003C\/blockquote\u003E\n\u003C\/blockquote\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"f83e\"\u003E\n以前晚下班總要負責關公司的門\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"15d6\"\u003E\n有時候關得太順就會不小心鎖到別人\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e028\"\u003E\n下圖的例外就是我補充的\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e028\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiEy4bGNEQkWYngZ-ME__vWSXd8YfgoHWYynkXsXaX-QcBSGLg4C_lGLZD0MnIZLh0w3RKnQuw2kNswiFYKq1ux2ZQYvTXWqbLVurqPecObCsI47xMA-0VtsDKfFe0rPChYNfMmAjXpB3o\/s1600\/20190830_medium_2_6.PNG\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"483\" data-original-width=\"663\" height=\"466\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiEy4bGNEQkWYngZ-ME__vWSXd8YfgoHWYynkXsXaX-QcBSGLg4C_lGLZD0MnIZLh0w3RKnQuw2kNswiFYKq1ux2ZQYvTXWqbLVurqPecObCsI47xMA-0VtsDKfFe0rPChYNfMmAjXpB3o\/s640\/20190830_medium_2_6.PNG\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003E\u003Cdiv class=\"graf graf--p\" name=\"1b30\"\u003E\n關門 SOP\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"e028\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"341c\"\u003E\n這一年有了固定的下班時間後\u003Cbr \/\u003E\n我開始能每天帶著媽媽去運動\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"0057\"\u003E\n運動的地方是學校的操場\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"f594\"\u003E\n晚上學校警衛要關門的時候\u003Cbr \/\u003E\n看著警衛一邊關燈一邊趕人\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"216e\"\u003E\n這種熟悉又親切的感覺 —\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"3be0\"\u003E\n等我退休了或許可以來當警衛吧 😝\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cblockquote class=\"tr_bq\"\u003E\n\u003Cblockquote class=\"graf graf--blockquote\"\u003E\n前是把家當旅館\u003C\/blockquote\u003E\n\u003Cblockquote class=\"graf graf--blockquote\" name=\"827b\"\u003E\n現在是家事盡量管\u003C\/blockquote\u003E\n\u003C\/blockquote\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003C\/div\u003E\n\u003Ca name='more'\u003E\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cpre class=\"graf graf--pre\" name=\"0432\"\u003E感謝你看到最後，寫這篇文章的動機是想分享敏捷精神\n也因此，歡迎大家一起 being agile\n留言告訴我你的想法或建議\u003C\/pre\u003E\n\u003Cdiv class=\"graf graf--p\" name=\"733f\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/1436205381009210138\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/08\/the-year-of-being-agile-part2.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/1436205381009210138"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/1436205381009210138"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2019\/08\/the-year-of-being-agile-part2.html","title":"The Year of Being Agile (Part 2)"}],"author":[{"name":{"$t":"Vavrin Chen"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/00542546042460997372"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEisCCBUpO2eVXHzBTkv8ioXYxt_v8AISQ3ODBlPwGulvcekK-20PM6udyrm42ARoVa2S4jlGtGBowN-8_3jePNOgILX4ZDV7mGHdxt9PUNwMS-tMggtkMj7RashATAk2C3ASsaZ1OTOj34\/s72-c\/20190830_medium_2_1.PNG","height":"72","width":"72"},"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872.post-7557013007551892611"},"published":{"$t":"2017-05-04T11:14:00.002+08:00"},"updated":{"$t":"2019-04-25T17:06:35.644+08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Agile"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Code Quality"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Programming"}],"title":{"type":"text","$t":"Google Test Adapter"},"content":{"type":"html","$t":"平常 C++\u0026nbsp;的開發工具是 Microsoft Visual Studio，然後現在的測試框架是使用 Google Test，以前都是一邊寫，一邊手動執行 \ntest case 來驗證，沒有辦法跟 VS 內建的 Test Explorer 做整合，真的蠻原始的 =.=\n\u003Cbr \/\u003E\n最近因為 TDD 的關係，這樣子的開發環境真的太鳥了，所以認真研究了一下解決方案，發現了 Google Test Adapter 這個好東西：\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/github.com\/csoltenborn\/GoogleTestAdapter\"\u003Ehttps:\/\/github.com\/csoltenborn\/GoogleTestAdapter\u003C\/a\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ZGFJHPxNKyDr0TfjWFo9J8l1xAa8gtsm1m0pqzZ6JZEKM7yE0-U4esTHKSrBQIZZiIQwLDkAbpquBUtNkt3COrGiiagYPc6ZVxcyeXtWCTHdOpfslmrLkVNZpjtJCiPmhYJzXHA7voem\/s1600\/ut-1.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"849\" data-original-width=\"1295\" height=\"417\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ZGFJHPxNKyDr0TfjWFo9J8l1xAa8gtsm1m0pqzZ6JZEKM7yE0-U4esTHKSrBQIZZiIQwLDkAbpquBUtNkt3COrGiiagYPc6ZVxcyeXtWCTHdOpfslmrLkVNZpjtJCiPmhYJzXHA7voem\/s640\/ut-1.gif\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n很簡單，照著 github 上的說明安裝完後就可以使用。幾個要注意調整的地方：\n\u003Cbr \/\u003E\n\u003Col\u003E\n\u003Cli\u003E原本它會搜尋結尾為 test \/ tests 的執行檔來分析裡面的 test case，所以如果你的 Unit Test 程式不是\u0026nbsp;\u0026nbsp; \nxxxTest.exe 的話，請記得到 [TOOLS]\u0026nbsp;–\u0026gt; [Option]\u0026nbsp;–\u0026gt; [Google Test Adapter]\u0026nbsp;–\u0026gt; \n[General] ，裡面有一個 Regex for test discovery，我是使用 UT_[\\w]*.exe\u003C\/li\u003E\n\u003Cli\u003E在同一頁中還有一個 Working directory \u0026amp; PATH extension，如果你的執行環境不是在預設的 output \ndirectory，也請記得修改。\u003C\/li\u003E\n\u003C\/ol\u003E\n這樣子基本上就可以跑了，而且只要程式碼有重新編譯，它就會自動幫你跑一次 test case（Run Tests After Build 記得勾起來) \n但還有幾個小問題：\u003Cbr \/\u003E\n\u003Col\u003E\n\u003Cli\u003E修改 Unit Test Project 會自動跑 test case，但修改原本的 project 並不會被偵測到\u003C\/li\u003E\n\u003Cli\u003E希望可以每次存檔後，就自動 Build \u0026amp; Test ，這樣只要專注綠燈\/紅燈就好了。\u003C\/li\u003E\n\u003C\/ol\u003E\n這個問題我是參考 \u003Ca href=\"http:\/\/stackoverflow.com\/questions\/33234498\/automatically-build-after-save-for-visual-studio-2015\" target=\"_blank\" title=\"http:\/\/stackoverflow.com\/questions\/33234498\/automatically-build-after-save-for-visual-studio-2015\"\u003Ehttp:\/\/stackoverflow.com\/questions\/33234498\/automatically-build-after-save-for-visual-studio-2015\u003C\/a\u003E，用 \nVisual Commander 來解決：多加一個 Visual Commander Extension\u003Cbr \/\u003E\n\u003Cbr \/\u003E\npublic class E : VisualCommanderExt.IExtension\u003Cbr \/\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; public void \nSetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \n{\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; DTE = DTE_;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; events = DTE.Events;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \ndocumentEvents = events.DocumentEvents;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; documentEvents.DocumentSaved \n+= OnDocumentSaved;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; public void Close()\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \ndocumentEvents.DocumentSaved -= OnDocumentSaved;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; private void \nOnDocumentSaved(EnvDTE.Document doc)\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if(doc.Language == \n\"C\/C++\")\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \nDTE.ExecuteCommand(\"Build.BuildSolution\");\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \nDTE.ExecuteCommand(\"Test.RunAllTestsInSolution\");\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; private EnvDTE80.DTE2 DTE;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; private EnvDTE.Events events;\u003Cbr \/\u003E\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \nprivate EnvDTE.DocumentEvents documentEvents;\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n完工，現在只要存檔，就會自動 Build，並且在 Test Explorer 看到紅燈綠燈了\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhKZ2VhhOI_B0wu9CLJbI-0BY8Rt7cpk83yyKnOnGTAvxvHNGmIESb5izJGrVhVdaHEpoKo8ykGC3PcBnLXDPaQ8iRYr1jWU9e3IPmXuIWcjuh64nWJeHVFJud4ic6dcFVXFnixX7JLFfiI\/s1600\/ut-1.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhKZ2VhhOI_B0wu9CLJbI-0BY8Rt7cpk83yyKnOnGTAvxvHNGmIESb5izJGrVhVdaHEpoKo8ykGC3PcBnLXDPaQ8iRYr1jWU9e3IPmXuIWcjuh64nWJeHVFJud4ic6dcFVXFnixX7JLFfiI\/s1600\/ut-1.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/7557013007551892611\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2017\/05\/google-test-adapter.html#comment-form","title":"12 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/7557013007551892611"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/7557013007551892611"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2017\/05\/google-test-adapter.html","title":"Google Test Adapter"}],"author":[{"name":{"$t":"diro"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/13292247339970268280"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ZGFJHPxNKyDr0TfjWFo9J8l1xAa8gtsm1m0pqzZ6JZEKM7yE0-U4esTHKSrBQIZZiIQwLDkAbpquBUtNkt3COrGiiagYPc6ZVxcyeXtWCTHdOpfslmrLkVNZpjtJCiPmhYJzXHA7voem\/s72-c\/ut-1.gif","height":"72","width":"72"},"thr$total":{"$t":"12"}},{"id":{"$t":"tag:blogger.com,1999:blog-7905389674158671872.post-704037224961860280"},"published":{"$t":"2017-01-12T09:50:00.000+08:00"},"updated":{"$t":"2017-04-12T09:50:56.268+08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Agile"}],"title":{"type":"text","$t":"ODD-E LESS@上海 心得\u0026攻略 PART 1"},"content":{"type":"html","$t":"\u003Cdiv style=\"background-color: white; color: #1d2129; font-size: 15px; letter-spacing: -0.26px; margin-bottom: 6px; margin-top: 6px;\"\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhExW_zyXBmZfPyG8dbg_3fDMhgynGknaJ3IrFZk4WN7KEFyDU3DCpPCWn__y21Mtvg4lpjcDS5sK4U3VcFJ8QjYEtNaJTqzRnMM8lBWnq8HXrGCfj_d-oqowLdyW4hlYQXdLMI_7ovvmc0\/s1600\/IMG_5770.JPG\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"240\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhExW_zyXBmZfPyG8dbg_3fDMhgynGknaJ3IrFZk4WN7KEFyDU3DCpPCWn__y21Mtvg4lpjcDS5sK4U3VcFJ8QjYEtNaJTqzRnMM8lBWnq8HXrGCfj_d-oqowLdyW4hlYQXdLMI_7ovvmc0\/s320\/IMG_5770.JPG\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n今天上 LeSS，沒想到這邊的 Large Scale Scrum 已經發展到這麼成熟了...果然是連車尾燈都看不到。今天的同學，大部份都有豐富的LeSS相關經驗，也有搞 SAFe 的，也有 Scrum coach，真的是令小弟無地自容..\u003Cbr \/\u003E\n這裡頭的故事，就讓我娓娓道來..\u003Cbr \/\u003E\n------------------------------------------------------\u003Cspan class=\"text_exposed_show\" style=\"display: inline; font-family: inherit;\"\u003E\u003Cbr \/\u003E去年二月上完呂毅老師的 CSM 之後，對呂毅老師的授課方式及內容印象很好，然後公司內的 Scrum 團隊也開始在增加，因此當老師寄信來說要開 LeSS 的課程時，就毅然決然的報名了。\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"text_exposed_show\" style=\"background-color: white; color: #1d2129; display: inline; font-size: 15px; letter-spacing: -0.26px;\"\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px;\"\u003E\n這次的課程在 Odd-e上海辦公室（隨著上海房價的飆漲，應該叫 Odd-億上海豪宅 才對) ，就在世紀公園正對面，我挑了最近的四星酒店[帝盛酒店]，地鐵2號線[世紀公園站]出來就到，走路到豪宅上課也只要10分鐘，推薦給大家，下次去上課，訂這間就對了 XD\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n早上的課程一開始，先是同學們的自我介紹\u0026amp;你想學到什麼?，總共有11位學生，只有我一位是從台灣過來，剩的大部份都是從杭州過來。大部份同學的產品都是硬體產品，少數是純軟的，因為公司規模都很大，所以大部份都已經是 LeSS-like 的架構在運作，而且應該已經運作好幾年了..\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n自我介紹完，老師就開始講系統分析，這次 LeSS 的課程，重點不在講 LeSS 要遵循的那些規則，因為那就看書照著作就好了，老師反而是帶我們了解背後的原因（我覺得這是呂毅老師一貫的上課風格，就是投影片其實都很快就帶過，都在講投影片沒寫，更深層的一些想法）。\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n一個還是多個 product backlog ?\u003Cbr \/\u003E\n一個還是多個 PO?\u003Cbr \/\u003E\n一個還是多個 Scrum Master?\u003Cbr \/\u003E\nFeature Team or Component Team?\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\nLeSS 在很多選擇中，做出了決定，而形成了 LeSS，為了了解這個決定背後的道理，老師先介紹了系統分析方法（CLD Causal-Loop Diagram)：\u003Cbr \/\u003E\nVariable:變量\u003Cbr \/\u003E\nLink：連結\u003Cbr \/\u003E\nLoop R-loop \u0026amp; B-loop 增強迴路及平衡迴路，可見[第五項修練]\u0026amp;[系統之美]\u003Cbr \/\u003E\n而在二天的課程當中，我們總共實際演練了4次CLD，我覺得這點很重要，因為要做到[守破離]，唯有洞悉背後的因素，才能到破，然後到離。LeSS（或著就稱大規模Scrum好了)在實際運作時，一定會碰到各式各樣的狀況，這時要如何調整團隊及運作方式，系統分析就很重要了。\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n講到這，提一下這次看到的：有些公司的 Scrum Team 沒有 Scrum Master(好，你也可以說這不能叫Scrum Team），有些也不一定都是Feature Team，有些會摻些 Component Team，有些自己添加了一些 roles 來處理溝通協調，有些公司處理bug是由專門團隊負責，也有一定是找回原作者的..，有些 team 竟然有所謂的\"組長\"..有些人有 release sprint，有些人有獨立的 testing team 來平行進行測試。\u003Cbr \/\u003E\n非常多的變體，所以這次課程中一個很大的收穫是，了解這些變體背後的原因，然後，我們這種才從[守]開始的，對於他們組織改變、心智模式改變已到[破、離]的速度，感到震撼，而且，他們都是很巨大的公司，也有很老的公司，還能這麼有魄力的改變，真的很厲害。最厲害的是，這些都是枱面上很成功的公司，一聽到就會 哇 的那種成功公司..\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n轉回CLD，為了讓我們熟悉CLD，老師用了[狼圖騰]裡頭的故事讓我們練習，簡單說：\u003Cbr \/\u003E\nVariable：狼，野物，草場，牛羊馬，設備\u003Cbr \/\u003E\nLink：狼會吃野物\u0026amp;牛羊馬，野物會破壞草場，草場可以養育牛羊馬，牛羊馬帶來錢，有錢可以買好設備，好設備可以讓草場更好\u003Cbr \/\u003E\nLoop：上面這些 Link 可以形成各種 R-loop \u0026amp; B-loop ，因此我們在這個 CLD 中，就可以想看看，如果希望牧場的利益最大化，應該要怎麼做最好?也可以看出來那些作法是\"飲鴆止渴\"，那些作法是\"長久之計\"。\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n這時再回來看，大型 Scrum 是要 1 Product Backlog 或著 多個 Product Backlog 就很有趣了\u0026nbsp;\u003Cspan class=\"_47e3 _5mfr\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\" title=\"smile 表情符號\"\u003E\u003Cimg alt=\"\" aria-hidden=\"1\" class=\"img\" height=\"16\" src=\"https:\/\/www.facebook.com\/images\/emoji.php\/v7\/feb\/2\/16\/1f642.png\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan aria-hidden=\"1\" class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E:)\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n就在這一堆CLD的討論中，結束了早上的課程。\u003C\/div\u003E\n\u003Cdiv style=\"font-family: inherit; margin-bottom: 6px; margin-top: 6px;\"\u003E\n中午老師帶我們到附近吃山西菜，山西菜份量多又紮實，吃完一餐就胖了一圈 XD 分享一下午餐故事，做為這一集的 ending\u003Cbr \/\u003E\n--\u003Cbr \/\u003E\n同學A：還多一塊羊排呀，誰把它夾掉吧\u003Cbr \/\u003E\n同學B：台灣的同學比較沒吃過這味道，給台灣的同學吧～\u003Cbr \/\u003E\nDiro：啊，我們台灣也是有羊的啊!!（但我還是吃了.......)\u003Cbr \/\u003E\n同學C：這個韭菜盒子也多一個啊~~\u003Cbr \/\u003E\nDiro：耶，我告訴你，我們台灣也有韭菜盒子，不要再叫我吃啦\u003Cbr \/\u003E\n--\u003Cbr \/\u003E\n[某大企業的HR打來]\u003Cbr \/\u003E\nHR:我們這裡缺 資深測試工程師 ，你有沒有興趣呀?\u003Cbr \/\u003E\n同學B：耶，你怎麼判斷我很會測試的呢?\u003Cbr \/\u003E\nHR:我看你的技能上有個 Test-driven Development 的經驗\u003Cbr \/\u003E\n同學C： 上次我們QA部門也很緊張的跑來找我\u003Cbr \/\u003E\nQA：聽說你們現在要弄什麼測試驅動開發，先跟我們交流交流吧\u003Cbr \/\u003E\n同學C： 這跟你們QA可能沒什麼關係..\u003Cbr \/\u003E\nQA：這上頭明明就寫著測試兩個字，你不要再騙我了..\u003Cbr \/\u003E\n--\u003Cbr \/\u003E\n同學A：你們 Scrum 跑多久了呀?\u003Cbr \/\u003E\nDiro：二年多，應該是2014吧~\u003Cbr \/\u003E\n同學A：2014?（驚)，那真的還蠻慢的呀..\u003Cbr \/\u003E\n--\u003Cbr \/\u003E\n下午的課程，因為吃太飽，我就睡著都沒聽到了...\u003C\/div\u003E\n\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/blog.rd.vivotek.com\/feeds\/704037224961860280\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2017\/01\/odd-e-less-part-1.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/704037224961860280"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/7905389674158671872\/posts\/default\/704037224961860280"},{"rel":"alternate","type":"text/html","href":"https:\/\/blog.rd.vivotek.com\/2017\/01\/odd-e-less-part-1.html","title":"ODD-E LESS@上海 心得\u0026攻略 PART 1"}],"author":[{"name":{"$t":"diro"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/13292247339970268280"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhExW_zyXBmZfPyG8dbg_3fDMhgynGknaJ3IrFZk4WN7KEFyDU3DCpPCWn__y21Mtvg4lpjcDS5sK4U3VcFJ8QjYEtNaJTqzRnMM8lBWnq8HXrGCfj_d-oqowLdyW4hlYQXdLMI_7ovvmc0\/s72-c\/IMG_5770.JPG","height":"72","width":"72"},"thr$total":{"$t":"0"}}]}});