2026年2月2日 星期一

Docker 指令筆記

使用情境:安裝 SQL Server 2022(Docker)

本指令用於在主機上以 Docker 方式安裝並啟動 SQL Server 2022,不需於作業系統層級進行傳統安裝,適合開發、測試或需要快速重建環境的情境。


 docker run \

  -e "ACCEPT_EULA=Y" \

  -e "MSSQL_SA_PASSWORD={password}" \

  -p {port}:1433 \

  -v {local_folder}:/var/opt/mssql/data \

  --name sqlserver \

  -d mcr.microsoft.com/mssql/server:2022-latest


注意事項(實務重點)

1. SA 密碼規定不正確,容器會無法啟動

MSSQL_SA_PASSWORD 必須符合 SQL Server 的密碼複雜度規則,否則容器在啟動階段即會失敗。

2. /var/opt/mssql/data 是 SQL Server 預設資料庫目錄

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)。