2021年6月14日 星期一

[angular 12] dotnet new 預設樣板與 ng new 預設樣板差異 - package.json 差異 dependencies 區段

 


dependancies 區段主要差異是 angular、typescript 相關套件的升級
typescript:3.5.3 => 4.2.3
angular:.8.2 => 12.0.3
rxjs:6.6.3 => 6.6.0 (反而降了)
zone.js:0.9.1 => 0.11.4 

其他比較次要一點的套件:

dotnet new 樣板預設使用的 bootstrap 相關的套件
bootstrap、jquery、popper 這些自然是沒有的

core-js 是 polyfill 用的函式庫,照理說已經在 tsconfig、angular cli (參考)裡面涵蓋了
為什麼要使用我也不太確定,可能是用來支援其他的前端函式庫?

node-sass 是用來讓 nodejs 接上 LibSass,LibSass已經只做維護更新(參考)
oidc-client 是用來做 open id client 端
protractor 是 end-to-end 測試用的函式庫
 

devDependancies 區段的差異也是 angular、typescript 加上測試用套件的升級
angular 部分主要差異是 language-service 我覺得可以加上去

測試用套件
    karma:5.2.3 => 6.3
    jasmine:3.5 => 3.7

lint 用套件
    codelyzer 是用來做程式碼掃描用的

其他
    ini 是用來做 ini 檔案格式解析用的

optionalDependencies 區段是用來說這些套件是 optional 的,安裝的時候找不到這些套件也沒有關係 node-sass、protractor、ts-node、tslint








[angular 12] dotnet new 預設樣板與 ng new 預設樣板差異 - package.json 差異 script 區段


scripts區塊

先從不同的地方說起

build:ssr:設定了 server side render 的設定,是透過 angular.json 的 architect (建築目標) 設定
lint:透過 ng 做程式碼驗證
e2e:目前還沒用過,是用來做 end to end 整合測試的功能
watch:在 build 完之後,會持續監控內容修改,遇到修改就進行重新編譯

angular.json 裡的 archtect 段落(參考)會為 ng xxxx 設定預設值
ex. ng build, ng serve, ng test 等


而 dotnet new 裡面的 build:ssr 也是類似



2021年6月6日 星期日

[TypeScript] tsconfig.json

使用 typescript 的時候會有不少設定值可以設定,
typescript compiler (tsc) 有可以產生預設值


產生出來的 tsconfig.json 內容有一些預設值跟已經被註解的範本

target:編譯產生的 ECMAScript 版本
module:編譯產生出的模組引用方式
strict:型別檢查
lib:預設載入 js 函式庫

    dom:瀏覽器 DOM 物件存取相關的 API - windowdocument, etc.
    es2015:包含 ES2015 相關的 API -  array.findPromiseProxySymbolMapSetReflect, etc.
    es2016:包含 ES2016 相關的 API - 
array.include, etc. 

outDir:輸出編譯結果的資料夾

可以參考 官網

2021年4月19日 星期一

.NET System.Threading.Tasks - 情境

相對於 Thread 類別的 worker 概念,Task 就是工作本身
看起來也就是流程、函數一樣概念,所以 Action、Func 也常跟 Task 一起出現
但是 Task 作用於非同步,則是多了可延遲執行的相關特性
也很自然地跟 async/await 語法整合在一起

Task 執行工作的時候沒有新建 Thread,是使用 ThreadPool 的 Thread


Task 的屬性則主要跟工作目前的狀態相關。
比較特別的是 Task.Factory 提供了建立 Task 與 Task<TResult> 的功能

使用上主要則涵蓋了以下情境,並提供沒有回傳值 Task + Action 與有回傳值 Task<TResult> + Func 的版本

  • Task 建立
  • 基於 CancellationToken 的取消機制 (Thread 也支援)
  • 單一 Task 的執行、等待
  • 與其他 Task 合作時的串接、等待、觸發機制
  • 較低階的排程方式、Awaiter/Awatiable 機制

同樣位於 System.Threading.Tasks 中,還有一個特別的 Parallel 類別
則是提供了整合數字範圍、陣列、IEnumerable、OrderablePartitioner、Partitioner 的平行迴圈機制

2021年4月18日 星期日

.NET System.Threading - 說明範例 2

System.Threading 裡面提供了很多用來控制執行緒的工具

層次比較高,用起來效率高很多

來一個一個介紹起

走起~~

.NET System.Threading - 範例說明 1

Thread 是可以視作程式流程的執行者
執行工作的情境其實沒有很複雜

  1. 執行工作
  2. 休息/恢復
  3. 等待工作執行完成
  4. 取消執行 (非強制)
  5. 雖然工作未完成,但強制中斷它,不執行了 (.NET Core 不支援 Thread 等級的中斷)

2021年4月17日 星期六

.NET System.Threading - 情境

Thread 是可以視作程式流程的執行者

所以以工作的執行者 (worker) 本身來說
可能會包括一些屬性

  • 目前是否活著(已啟動且尚未中止)
  • 名稱
  • Priority
  • 執行緒具體狀態
  • 前景或背景執行
前、背景的程式上基本沒有差異
差別就是當所有的前景執行緒都結束之後,程式就會跟著結束
可以透過 Thread.IsBackgound 設定是否為背景執行

執行緒執行工作的情境其實沒有很複雜

  1. 執行工作
  2. 休息/恢復
  3. 等待工作執行完成
  4. 取消執行 (非強制)
  5. 雖然工作未完成,但強制中斷它,不執行了 (.NET Core 不支援 Thread 等級的中斷)

另外 .NET 也提供 ThreadPool 機制,來管控執行緒支援不會被過度配置

Multi-Thread 時則是增加一些情境
  • 執行緒間的溝通
  • 執行緒間的流程管控 (限制執行)
  • 共用資源時,避免資源鎖定的同步機關

.NET 另外定義了新的 Task 類別,以工作的角度來定義平行的工作 TPL(Task Parallel Libray)

這邊比較有趣之後再補充。


Process, Thread, Task and ThreadPool

Process (行程)是程式正在執行的實體

一個 Process 會有一個或多個 Thread (執行緒)


程式語言就是在描述流程

thread 就像是流程目前執行的位置,也可以視作工作的執行者

一般程式執行是 single thread 的,會依程式描述依序執行

也會有 multi thread 程式


Task (任務)是一段可能延遲執行的工作(work),用來產生結果值或是特定的作用。

Thread 則是 Task 的執行者 (worker)


ThreadPool 是 Thread 的集合

有 Task 要執行時會從中分配 Thread 來執行,執行完之後則會還回 Pool

比起產生 Thread 實體,可能從 ThreadPool 啟用 Thread 較可避免建立過多 Thread

2021年4月4日 星期日

Scrum~ 精簡版 - 1

Value-Driven Delivery Model 是一種主打有彈性、高產品可見度、使用者導向的軟體交付模型

是基於一個基於(商業)價值排好順序的需求清單,在每個固定長度且夠短的迭代(iteration)中,將最高價值的且預計能在迭代中做完的項目拿出來,並在迭代中建立出可用的增量(Increment)。

真假敏捷?

敏捷軟體開發宣言 20年前被寫出來,當時是一群[大師]聚在一起,原本我猜也不是為了發明敏捷而聚;

一群人的場合預期大家都有相同的背景、相同的價值觀實在是很困難,至少在工作中,沒有真的遇到的時候... (yet)。就算在上課的場合或是研討會的時候,隨著人數變多,也是逐漸不可。

好... 但是解論就是有了四個共用的價值觀 (多神奇的事情?),在之後還有了 敏捷宣言背後的 12 個原則 !?!?!?!??

在幫真假敏捷做結論之前,先看看這些價值觀、原則到底是甚麼?

以下是個人觀點...

技能、方法上是不太可能的,有甚麼教你怎麼做,照著就能寫好軟體的事情? (如果有先給我來一打)

真的被萃取出來,又能夠長期有效的,只可能是軟體開發中「能起作用」的價值觀了吧?

說說單元測試好了,也只能有共同的方法框架,不同人解相同問題的也很難有相同的思路。裏頭說的也是各種方法,就算是SOP 不能解決「軟體開發」中的所有問題 (總是要強調 NO silver bullet),測試驅動的價值觀有驗證先行、迭代等,但是真的起作用,依靠的依舊不是超高的涵蓋率或是一直探討怎麼寫測試更好,而是因為有一定的涵蓋率,讓軟體的變更變得可行,眼光怎樣也不會是只看著這項技能。

這些共同的信念、用作決策的價值觀、基於更高且完整的視野描述的宣言等等,才更像是這些價值觀跟原則在描述的事情,是整體的軟體開發。

從這種角度描述的敏捷精神,是真的讓人覺得熱起來的地方!! (敏捷精神 GET)

---

方法、技能能分對錯、有效無效,但「價值觀」則是各自表述了吧? (開始進入哲學層次)

既然敏捷已經站在高的層次來看事情,何必落入分真假的議題裡面呢?

當作開玩笑跟標題黨來吸引注意力可能是不錯的選擇