# 學習目標 1. 前端遊戲頁面製作 - 了解PixiJS基本原理與操作 - 進行基本練習 - [ ] 圖片載入畫面 - [ ] 元件移動、旋轉、縮放控制 - [ ] 元件顯示、隱藏控制 - [ ] 點擊事件捕捉處理 - [ ] 如何產生特效 - [ ] 如何製作遊戲頁面素材 - [ ] 建立場景 - 了解開發工具使用 - [PixiJS Devtools](https://chrome.google.com/webstore/detail/pixijs-devtools/aamddddknhcagpehecnhphigffljadon) - [框架Phaser(選配)](https://phaser.io/) - 參考 - [官網](https://pixijs.com/) - [教學](https://github.com/Zainking/learningPixi) - [鐵人2018](https://ithelp.ithome.com.tw/users/20106532/ironman/1249) - [鐵人2022](https://ithelp.ithome.com.tw/users/20152526/ironman/5741) 2. DDD相關 - Event Storming - Context Mapping - TDD(Test-Driven Development) - [ ] 撰寫測試程式碼 - [ ] 在測試的保護下至少進行一次重構 - BDD(Behavior Driven Development) - [ ] 進行example mapping - [ ] 建立Scenario list - ATDD(Acceptance Test-Driven Development) - [ ] 建立user story - [ ] 產出驗收測試文件 - 參考資料 - [Think in Domain-Driven Design(2019鐵人)](https://ithelp.ithome.com.tw/users/20111997/ironman/2730) - [在 Ruby on Rails 中導入 Domain-Driven Design 是不是搞錯了什麼?(2021鐵人)](https://ithelp.ithome.com.tw/users/20108265/ironman/4846) - [馬克的軟體架構小筆記(2021鐵人)](https://ithelp.ithome.com.tw/users/20089358/ironman/4359) - [30天快速上手TDD](https://ithelp.ithome.com.tw/users/20010292/ironman/462) 3. TypeScript - 熟悉TypeScript基本語法 - [ ] 了解interface並使用在程式中 - [ ] 了解class並使用在程式中 - [ ] 了解泛型<T>並使用在程式中 - [ ] 了解decorators並使用在程式中 - [ ] 了解modules並使用在程式中 - 了解TypeScript編譯器的運作方式 - 參考資料 - [TypeScript 新手指南](https://willh.gitbook.io/typescript-tutorial/) 5. 前端測試 - [學習使用Jest](https://jestjs.io/zh-Hans/) - [ ] 安裝Jest - [ ] 了解discribe(), test(), except() - [ ] 斷言練習toBe, toMatch, toEqual, toContain - [ ] 如何進行非同步測試 - [ ] 建立mock - [vut-test-utils](https://test-utils.vuejs.org/guide/) - [ ] 測試一個component行為 - [ ] 使用mount(), shallowMount()撰寫測試案例 6. 自動化部署 - 了解github actions - [ ] 學習Event, Jobs Step Action Runner - [ ] 目標: merge code時自動上版 [Event Storming](https://discordapp.com/channels/937992003415838761/1074962049551044638) [讓大語言模型(LLM)擁有私有知識方式](https://discord.com/channels/937992003415838761/1097367369338339358) # 筆記 Event Storming 是為了同步團隊成員對於'流程'的知識,因此重點要放在流程和同步知識,其他的可以註記即可 5/5 若已有一份顆粒度較細的ES,是否還有必要特地簡化成較粗的?較細的ES對後續的分析,開發有何影響? 5/6 可以將ES的結果切開,分步驟進行 自然語言會有不同的認知,每個人都會有先入為主的認知造成歧異性,就會有誤認需求的問題 SBE(Specification by example),透過ecample Mapping來完成SBE,這整個流程就是BDD example mapping和rule的不一樣 1. 更明確描述情境 2. 帶Data更好 3. 也可以畫圖 Gherkin language: Given [Preconditions or Initial Context] When [Action performed by the user] Then [Expected outcome after the action] 5/9 Cascading Events 連續性的event 可以拿掉後面的comment 把兩個event放一起 ES重要的是對話不是成果 Policy會強調這個地方有複雜度要注意 policy語法: whenever event then command 5/13 關於Gherkin language 1. 盡量明確(例如有有多少玩家,每個玩家給個編號) 錯誤示範: Given 當領袖分配完指示物 When 當贊成票大於反對票 Then 成功! 這只是換句話說,並沒有更具體一點,盡量帶入實際的資料 較好的範例: Given目前有五位玩家A,B,C,D,E, 現在A是領袖,且已分配指示物且所有人投完票 When A, B, C 3人贊成、D, E 2人不贊成 Then 成功進入執行任務階段 2. 從example mapping有可能會找到新的rule 3. 列出EM後,可以在寫code之前就可以知道這個story的複雜度 4. 如果太多EM可以Zoom-in, 可以切分問題後專注處理 5/16 1. [心得]不會影響整個流程的comment其實不重要可以刪掉 2. 5/20 1. [問題]UML中 常數該如何表示? 2. OOA步驟: 1. 結構化 將需求中的所有重要的(領域核心概念) 名詞和動詞捕捉起來 2. 名詞分類 3. 物件分類 4. 關係分類 3. UML圖的好處: 1.幫助建立更強的Ubiquitous Language 2.視覺化梳理概念 5/27 1. domain可以有多個聚合根 2. 概念和程式語言語法是分開的,不同的程式語言或許會用到不同的語法來呈現相同的概念 5/30 今天聽完直播,對乾淨架構更了解一些,之前認為,event要回傳那些資訊取決於api要回傳什麼,而api要回傳什麼取決於前端要呈現什麼畫面。現在覺得這個說法有點問題,event應該專注於domain的領域知識就好,領域決定該傳什麼就傳什麼,至於api要長什麼樣子讓外層controller 自己去轉換就可以了。不該讓外部需求來影響核心的動作 6/3 DevOps 1. Deliver the outcome and the Value 2. 從自動化轉移到組織文化 3. 傳統開發流程的問題 1. 會有Silo effect(穀倉效應),大家只想做份內的事,不想對別人負責 2. 裡面存在許多Waste(浪費) => 提出Lean 精實開發 4. 有7種wastes 1. wait/delay 2. transport(運送成本) 3. inventory(unused code / unused legacy code) 4. defect(bugs) 5. extra processing(重工) 6. over production(過度工程) 7. ?? 5. 目標就是減少wastes devops演化 ``` 2009 devops被提出 2010 dev / ops 協作 2011 devops tools -> 影響大家的行為 -> 建立好的文化 2012 更快的回饋 2013 startup 新創各種蜂擁而上 time to market -> devops matters 2014/2015... devops: Saas (EKS / serverless / cloud native) .... 2017: devops 不是一個 pipeline 而已,「每個人都有問題」 2018: dev + ops / hr / sales / legal / marketing 人的問題很大了 .... 2020: devops: building trust ``` DevOps = Everything you do overcome the friction created by silos. Silo effect 穀倉效應:它讓我們感覺到彼此 are different if we are in different, we feel indifferent (漠不關心). 1. 建立文化 解決完這個問題 2. 透過技術解決這個問題 我如何把這些知識,帶回我的團隊落地? 好的開頭:domain-driven 我們要交付價值 我們要感受到意義 我們要同步認知 ---> 這些 practice 使我們保持雀躍和開放的心態在持續學習 1. DevOps的第一步驟就是Walking Skeleton A “walking skeleton” is an implementation of the thinnest possible slice of real functionality that we can automatically build, deploy, and test end-to-end. 6/10 工作三步法 1. flow thinking & deploy 2. feedback loop and evolve 3. build up a culture Walking Skeleton A “walking skeleton” is an implementation of the thinnest possible slice of real functionality that we can automatically build, deploy, and test end-to-end. 三個要素 1.實際功能 2.end to end test 3. auto build test deploy 第一版ci/cd雖然很爛,但一定要在一開始的時候堅持架完 越晚建立成本越高:成本是大在哪裡? 1. 機會成本考量:之前浪費一堆人為時間,幹嘛這麼晚架? 2.漸進式增加(演化)好像比較爽? 3.人為時間有可能帶你們進入惡性循環 7/1 API路徑設計: https://www.youtube.com/watch?v=xDMTP2OVROo 7/15 人生三大寶具 1. 槍: 不可妥協的目標 2. 地圖: 整理自身的目標 3. 雷達: 資訊流,找出未知的未知 心得: 1.找出未知的未知很重要,持續的探索未知才能拓展更多的可能性 2.每月回顧這個月學到的新東西 12/19 分享note 1. socket.io 要加上polling才連得上 2. azure的app 沒在用會關閉 要先搓一下才會啟動 3. azure的app socket.io會定時斷線, 要實作斷線重連機制 4. 三角函數分享