Oct. 28 13:05~13:33
▼來到北野異人館區域的下方,這也是搭CityLoop觀光巴士下車處。
▼來到對面的英國館,顧名思義館內展示與英國相關的物品,主題是福爾摩斯。
▼館內有免費的服裝讓遊客換裝拍照。
▼館內展品,幾乎都和福爾摩斯有關。
▼館外有一個英式小花園,到處都是福爾摩斯的影子。
***
▼離開英國館來到隔壁的法蘭西館(洋館長屋),裡面展示法國文物。
***
友藏內心獨白:差不多了吧。
Oct. 28 13:05~13:33
▼來到北野異人館區域的下方,這也是搭CityLoop觀光巴士下車處。
▼來到對面的英國館,顧名思義館內展示與英國相關的物品,主題是福爾摩斯。
▼館內有免費的服裝讓遊客換裝拍照。
▼館內展品,幾乎都和福爾摩斯有關。
▼館外有一個英式小花園,到處都是福爾摩斯的影子。
***
▼離開英國館來到隔壁的法蘭西館(洋館長屋),裡面展示法國文物。
***
友藏內心獨白:差不多了吧。
Nov. 25 10:40~11:34
昨天上午在北科上「敏捷與精實軟體開發」,一上課擔任「專案經理」角色的同學先報告上週專案進度,包含專案看板、用Cucumber寫成的自動化驗收測試、跑在Jenkinks上的整合報表。看完之後Teddy問了幾個問題:
針對這些問題和學生討論過後,他們也問了幾個問題,其中有一個比較有趣的問題:
學生:一個工作項目從「Backlog」拉到「分析階段」,分析完成之後發現太大,可以切成兩個工作項目嗎?例如「開發票」這個功能,經過分析階段之後發現可以分成「二聯發票」和「三聯發票」。
Teddy:為什麼要切?
學生:因為不切會做不完?
Teddy:何謂「做不完」?看板有要求你要在多久完成一個工作項目嗎?
學生:「做不完」的意思是要花比較長的時間才能完成。
Teddy:這個狀況在看板中會如何展現?
學生:就…會有比較長的lead time(交期)?
Teddy:對啊,所以發現lead time太長就是一種改善的訊號(看板六大原則第三條:Managing Flow)。你們應該是Scrum跑太習慣,所以地一個反應會想把工作項目切小一點,希望在「一個開發週期中完成」,忘了看板是「流(flow)」的概念。
Teddy:但是,這個問題也有另一個角度可以探討。請問你們Backlog工作階段的「DoR」(Definition of Read)是什麼?
學生:我們沒有訂。
Teddy:這會不會是問題的根源?因為工作項目沒有跟「上游的人」討論清楚就直接拉到Backlog,所以才會在分析之後想要把工作切小。為了縮短lead time,在看板中如果可以在工作進入Backlog之前就先切成大小相近且偏小的工作項目也許可以改善這個問題。
Teddy:最後退一萬步想,你可不可以在分析之後把一個工作項目切成兩個?你想這麼做也不會有警察來開你罰單。
***
友藏內心獨白:是不是比微積分簡單很多。
Nov. 23 09:27~11:20
▲圖片節錄自《POSA 1》
今天介紹的是鄉民們聽到耳朵都快長繭的Model-View-Controller(MVC)模式,看看《POSA 1》書中如何描述它。
Model-View-Controller
MVC模式將互動系統切割成三個元件:Model包含核心功能與資料、View顯示資訊、Controller處理使用者的輸入。View和Controller合在一起構成使用者介面,並透過異動通知機制確保使用者介面與model維持一致性。
Context:你所設計的互動應用系統包含靈活的人機介面。
Prooblem:如何分解一個系統?
Forces:
Solution:將互動系統切割成三個範圍:processing(Model)、output(View)、input(Controller)。Model封裝核心資料與功能,並且獨立於特定的顯示方式與輸入行為。View負責顯示Model的資料,一個Model可以包含多個View。每一個View有一個Controller用來接收輸入(例如滑鼠或鍵盤事件),並將其轉換成對Model或View的呼叫。
區分Model與View/Controller讓我們可以使用多個View來顯示相同Model。如果使用者透過某個View的Controller改變Model的資料,所有其他相依於該Model的View將會收到Model關於資料異動的通知,如此一來這些View便可從Model接收異動的資料並用來更新自己所顯示的資訊。
Resulting Context:
Known Uses:Smalltalk、MFC、.Net MVC、Spring MVC。
***
在實作上MVC有很多變形,以《POSA 1》書中為例,View和Controller都實作Observer介面,都可以接收到Model的資料異動通知,也都有機會去更新View。下圖是《POSA 1》書中對於View和Controller的責任描述,其中更新資料是View的主要責任(implements the update procedure),對Controller來說則是次要責任(implements the update procedure, if required)。有一種作法是讓View和Model自動綁在一起,因此使用者就不需要去實作更新View的程式。另一種作法則是減少View和Model之間的耦合,讓Controller全權負責View的資料更新。還有另一種極端則是把一個視窗中所有View的Controller都集中到一個稱為Presenter的元件身上,讓它集中負責View的更新與輸入,而View只負責最簡單的顯示,這種模式稱為Model-View-Presenter(MVP)。
MVC還有其他的變形,以後有機會再介紹。
▲View和Controller的CRC卡,節錄自《POSA 1》
***
友藏內心獨白:MVC是互動應用程式的基本款架構。
Nov. 22 16:16~18:05
▲圖片節錄自《POSA 1》
今天繼續介紹《POSA 1》書中另一個很常用的架構模式:Pipes and Filters(管線與過濾器)。
Pipes and Filters
Pipes and Filters提供一個處理資料流(data stream)的架構,每一個處裡步驟被封裝在filter元件中,資料則是透過pipe在兩個相鄰的filter之間傳遞。透過重組filter可以建構出不同功能的系統。
Context:你所設計個系統需要處理或轉換一個輸入資料流。
Prooblem:如何分解一個系統?
Forces:
Solution:將系統切割成數個循序的處理步驟稱為filter,並透過稱為pipe的資料流將這些步驟串接起來。一個filter的輸出資料成為下一個filter的輸入資料。Filter並非一次處理完全部的輸入資料再一口氣將其輸入,而是採用增量方式處理與產生資料以降低延遲與支援平行處理。系統的輸入稱為data source,例如文字檔案、網路連線串流影音資料,系統的輸出資料流至data sink,例如檔案、終端機、動畫程式、影片播放軟體。Data source、filter、data sink透過pipe循序地連接在一起,每一個pipe實作連接相鄰兩個filter的資料流。Filter與pipe的串接順序稱為processing pipeline(處理管線)。
Resulting Context:
Known Uses:UNIX系統、影音播放軟體的編碼器與解碼器、Microservice架構。
***
友藏內心獨白:Piples and Filters符合單一責任原則。
Nov. 21 16:35~17:43
上禮拜六上完「Design Patterns這樣學就會了:進階實作班」有學員問Teddy除了GoF的23個patterns有沒有其他pattern可以介紹?想來想去先從比較常見的軟體架構模式介紹起,這一系列文章挑選《POSA》(Pattern-Oriented Software Architecture)書中比較常聽到的模式來介紹。
Layers
首先介紹Layers(階層、分層)架構,它的主要用途是將系統分解成若干個具備相同抽像層次的群組,每個群組就稱曾一個layer。
Context:你所設計個系統其主要特性必須要解決高階與低階的議題,在其中高階的議題相依於低階的議題。
Problem:如何分解一個大系統?
Forces:
Solution:將系統切割成合適數量的階層,從最低階層的抽象化開始定義,稱它為Layer 1。以此為基礎逐層往上定義,讓Layer J在Layer J-1之上,一直到最上層Layer N為止。
Resulting Context:
Known Uses:Virtual Machines、Information System(一般資訊系統可分為Presentation、Application、Domain、Database這幾層)、Windows NT(迷之音:好古老的例子)。
***
在傳統的階層架構中,上層會相依於下層。如果要避免這個問題,可以參考〈Dependency-Inversion Principle〉,相依反倒原則。
***
友藏內心獨白:分層負責。
Oct. 28 12:37~12:58
▼北野天滿宮就位於風見鶏的館的右手邊,之前從風見鶏的館所看到的一片盛開的櫻花就位於野天滿宮境內。
▼爬上這段階梯就到了。
▼北野天滿宮不算大,但視野極佳。不但可俯看櫻花,還可遠眺神戶港。相較於風見鶏的館前方廣場的人潮,這裡的遊客也比較少,鬧中取靜。
▼因為北野天滿宮獲得意外的賞櫻行程。
▼可清楚看到櫻花、風見鶏的館的屋頂、神戶港,三種願望一次滿足XD。
***
▼還有幾個異人館尚未參觀,繼續往山下走途經販賣六甲牧場霜淇淋的商店。六甲牧場是神戶有名的牧場,買了隻霜淇淋和Kay一起吃。因為太好吃了忍不住又買了一隻。
***
友藏內心獨白:日本幾乎到處都有霜淇淋。