Flutter-Formosa-2024心得
關於
距離 Flutter Formosa 2024 已經過了一段時間,Flutter Formosa 2024 是台灣第一次的 Flutter 研討會,有許多業界的大佬演講,很高興能夠報名參加,雖然交流時間我都只敢待在自己座位上偷聽(?)但是還是在精彩的演講中學到許多,得到很多寶貴的經驗,尤其是 Web 開發的部分特別有共鳴。
概要與心得
挑選了幾篇比較有興趣的演講做整理。
利用 ATDD 改善開發流程
這個演講邀請到了負責 LINE 購物 APP 開發的 Technical Project Lead,主要在分享透過 ATDD (驗收測試驅動開發) 來幫助改善開發流程。
重點
使用 ATDD 之前可能會遇到的問題:
Long-lived Feature Branches:跨 sprint 的功能開發,功能完成才 merge。
合併時出現大量的衝突。
解決衝突耗費且易出錯。
遺漏撰寫 Unit Tests:優先開發功能,接著才撰寫 unit tests。
難以保證程式碼品質。
難以及時發現錯誤。
降低程式碼的可維護性。
而兩個問題的解決的方向如下:
Long-live ...
心理學筆記-L3
L3 知覺
視覺
視覺系統
眼睛 + (大腦)
ex:視覺失認症 (雖然可以看到東西,但認不出來是什麼)
視網膜
光受器
視錐細胞 Cone
視柱細胞 Rod
雙極細胞 Bipolar cell
節細胞 Ganglion cell
傳遞過程:
盲點:視神經從視網膜離開的地方,大腦可以會自動的幫我們 想像 來補充該點。
彩色視覺
三色論
所有顏色都由三種基本色 (紅、綠、藍) 組合而成。
證據:有三種視錐細胞,分別對於不同顏色的敏感程度不同,形成不同的參數,構造出各種不同的顏色。
無法解釋 後像 的產生。
對比論
有三種系統 (黑白、紅綠、藍黃),其中一種顏色受到持續性的刺激,會產生疲勞,導致我們之後看到另一種顏色。
證據:Opponent neurons 對於不同顏色產生不同反應。
兩種論點的結合
深度知覺
單眼線索
Linear Perspective 線性透視
Relative Size 相對大小
Interposition (overlapping) 遮擋、重疊
Light & Shadow 光影
Texture Gradient 紋理 ...
心理學筆記-L2
L2 心與腦
心智與生理基礎
相關證據
Phineas Gage
被一支長鐵棍貫穿腦部,導致性格大變,讓科學家確定前額葉皮質受損會使人容易產生衝動、反社會行為。
Paul Broca
對病人 Tan 做研究。Tan 有發出語音的困難,發現其左前方的腦有損傷,將此區域命名為布若卡氏區 (Broca's area),這個區域主管語言訊息的處理、話語的產生。
相關工具
Electroencephalogram (EEG), Event related potential (ERP)
腦電描記術:高時間解析度,低空間解析度。
https://en.wikipedia.org/wiki/Electroencephalography
Functional Magnetic resonance imaging (fMRI)
功能性磁振造影:高空間解析度,低時間解析度。
Transcranial magnetic stimulation (TMS)
非侵入性的腦刺激方式,利用變化的磁場透過電磁感應在大腦的特定區域感應出電流。
大腦
腦側化
左半邊多半由右腦控制。
ex:左視野訊息傳到右腦,右視 ...
心理學筆記-L1
L1 心理學簡介與方法學
目前的心理學
以 科學 的方式探討人的行為,科學方法:
建立假設
檢驗假設
收集資料
解釋資料
下結論
研究方法
變項:會改變的事項。
操作型定義:將變量以某種操作或觀測的方式表示出來。
實驗法
操弄自變項,觀察依變項
ex:聽古典音樂與否會不會影響智力?
自變項:聽古典音樂與否。
依變項:智力。
將受試者隨機分派至兩個組中,一組聽古典音樂,一組不聽,觀察一段時間後對智力的影響。
在使用實驗法時也要注意避免 混淆變項。
ex:古典音樂通常包含的高頻音較高,可能是這些高頻音刺激腦部讓人變得聰明?
優缺點:
優點
較能保證因果關係
缺點
不自然
受試者知道你的目的
倫理問題
相關法
當遇到一些無法操弄的變項時,將統計出來的值進行相關性的分析,透過相關係數的大小說明其相關性。
有相關性 ≠ 有因果關係
其他方法
調查法:單純描述統計。
類實驗法(逼近實驗法的相關法)。
盡可能控制受試者的變項一致。
邏輯謬誤
訴諸人身:對人不對事。
訴諸權威:過度相信權威所認定的敘述。
訴諸無知:認為某事為真,因為沒有證據反駁它。
e ...
演算法筆記-排序
Selection Sort
The Champion Problem
給定一個陣列,求出陣列中最小數字的下標。
Input: an array A of n integers.
Output: an index k so that A[k] is the minimum value in A.
Code:
1234567int champion(int *s, int n){ int ret = 0; for(int i=0; i<n; ++i){ if(s[i] < s[ret]) ret = i; } return ret;}
Sort
給定一個陣列,將其排序為遞增的陣列。
Input: an array A of n integers.
Output: the same array with the n integers ordered nondecrementally.
Code:
12345678void selection_sort(int *s, int n){ f ...
SD-AMD顯卡安裝
資料取自:Stable-Diffusion-Info by CS1o
[AMD] Automatic1111 with ZLUDA
顯卡:AMD VEGA, Vii, APUs, RX5500XT, RX5600XT, 5700XT, RX 6600, 7700S 以及更高階顯卡。
驅動程式:24.1.1 及以上版本。
下載適用於 AMD 顯卡的 Autoamatic1111
在目標資料夾內開啟終端機,輸入以下代碼
1git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu && cd stable-diffusion-webui-amdgpu && git submodule init && git submodule update
在下載下來的資料夾內找到 webui-user.bat 右鍵以記事本打開,在 COMMANDLINE_ARGS= 後方加入 --use-zluda --update-check --skip-ort。
執行 we ...
演算法筆記-Tree-2
Binary Search Tree
二元搜尋樹有以下特性:
一個節點的左子樹只包含鍵值小於該節點的節點。
一個節點的右子樹只包含鍵值大於該節點的節點。
左子樹和右子樹也都是二分搜尋樹。
而且以中序遍歷二元搜尋樹會得到一個遞增的數列。
操作
搜索
根據待查元素val 與當前 root -> val 的關係判斷:
root -> val == val 回傳當前 root。
root -> val > val 查找左子樹。
root -> val < val 查找右子樹。
123456TreeNode* searchBST(TreeNode* root, int val) { if(root == nullptr) return nullptr; if(root -> val == val) return root; else if(root -> val > val) return searchBST(root -> left, val); else return searchBST(r ...
演算法筆記-Tree-1
Tree
由 n 個有限節點組成一個具有層次關係的集合,形狀類似一顆倒著的樹,具有以下幾個特點:
沒有環 (cycle)。
所有點之間連通,且只有唯一路徑。
邊數 = 點數 - 1。
Binary Tree
每個節點的度數不大於 2 的樹,左右的分支分別稱為 左子樹與右子樹,並且左右子樹有次序關係,不能隨意交換。
遍歷
前序遍歷 (根結點 -> 左子樹 -> 右子樹)
中序遍歷 (左子樹 -> 根結點 -> 右子樹)
後序遍歷 (左子樹 -> 右子樹 -> 根結點)
123456789void treeTraversal(TreeNode* root) { if(root == nullptr) return; //對根節點的操作 - 前序 treeTraversal(root -> left); //對根節點的操作 - 中序 treeTraversal(root -> right); //對根節點的操作 - 後序 return;}
層序遍歷
紀錄 queue 的大小 ...
演算法筆記-String
String
用於儲存字串的資料類型,內部為一個個的字元構成,可以進行很多類似陣列的操作,有以下幾個常見的操作:
size 回傳字串長度
[] 存取對應下標的字元
find 回傳指定字元的位置
substr 取出指定的子字串
reverse 反轉指定的字串
Stringstream
經常在操作字串時會使用到的類別,常用於類型轉換或是分割字串。
型態轉換
使用 stringstream
12345678910111213//int -> strint i = 123;string s;stringstream ss;ss << i;ss >> s;//str -> intstring s = "123";int i;stringstream ss;ss << s;ss >> i;
使用函數
123456789//int -> strint i = 123;string s;s = to_string(i);//str -> intstring s = "123";int i ...
演算法筆記-Map
Map
可以儲存 key 以及其對應 value 的容器,內部會按照 key 的值進行排序,有以下幾個常見的操作:
insert 加入元素
erase 刪除元素
count 確認該元素是否存在
find 回傳元素位置
empty 確認是否為空
size 回傳元素個數
clear 清空所有元素
Unordered Map
可以儲存 key 以及其對應 value 的容器,內部不會進行排序,而是使用雜湊表的方式進行一對一的對應,利於查詢對應元素的關係,可以使用的函數與 map 類似。
比較:
容器
map
unordered_map
結構
紅黑樹
雜湊表
內部資料
有序
無序
查詢速度
較低
較高
通常在不要求內部元素有排序的情況下,會使用查詢效率較高的 unordered_map。
操作
遍歷
使用指針指向開頭,進行遍歷,使用 first 取 key、second 取 value。
1234for(auto i = m.begin(); i != m.end(); i++){ cout << "key " & ...