2023/09/16

如何在 Windows 安裝及格式化新磁碟機

久違的硬體升級,終於把六年的老機給換新機,手動加了一條 2TB 的 SSD。記錄安裝及格式化新磁碟機的步驟。

磁碟管理

搜尋 "建立及格式化硬碟及磁碟分割"

  1. 在 磁碟管理 介面會看到 "不明 未初始化" 的磁碟,這就是準備要進行配置的磁碟

2023/05/20

[EFCore] 執行 Update-Database Migration 時遇到連線資料庫發生憑證錯誤

開發環境

  • Visual Studio 2022 v17.6
  • ASP.NET Core MVC (.NET 6)
  • Entity Framework Core 7.x

問題

在執行 Update-Database 的 Migration 指令時出現資料庫憑證錯誤的訊息,使得更新資料庫失敗。

錯誤訊息如下:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 此憑證鏈結是由不受信任的授權單位發出的。)

在本機端開發第一次遇到連線字串需要憑證的問題,過往是連遠端資料庫才會有憑證要求,特此記錄一下。

解決方法

一種是在連線字串後加上 Encrypt=False; 不採用加密連線

另一種方式是主動信任 SQL Server 的憑證 TrustServerCertificate=True;

在本機開發階段連線不加密或是主動信任憑證是還好,在生產主機上連線就依正常加密及正確的憑證吧!

參考資料

2023/03/19

[TypeScript] 解決 Webpack v4 升級到 v5 遇到 tsc 編譯時出現 Cannot find name 'Map'

問題

繼上編解決在 webpack v4 的安全性相依成功升級後。接下的任務是進一步將 webpack 的版本由 v4 升到 v5。

升級前環境:

"devDependencies": {
    "@types/node": "^16.0.0",
    "ts-loader": "^8.4.0",
    "typescript": "^5.0.2",
    "webpack": "^4.46.0",
    "webpack-cli": "^4.10.0"
  }

把 webpack 及 webpack-cli 升級到 5.x,並同步升級 ts-loader 至 9.x 版本

執行 tsc 時出現 Cannot find name 'Map' 的問題

解決方法

除了更新 webpack, webpack-cli, ts-loader 的版本外

也要一併更新 @type/node 的版本

npm install -D @types/node

修改 tsconfig.json 加上 typeRoots 的位置

  "typeRoots": [
    "node_modules/@types"
  ],

升級後環境:

"devDependencies": {
    "@types/node": "^16.18.16",
    "ts-loader": "^9.4.2",
    "typescript": "^5.0.2",
    "webpack": "^5.76.2",
    "webpack-cli": "^5.0.1"
  },

後記

其實在這專案的底下還有一組是用 Typescript 2.x 的版本做編譯,但暫時未能同步升級,卻用不同的 Typescript 的版本,不特別指定會是以主目錄下的 node_modules/@type 為目標。所以兩個都直接指定各自的 typeRoots 就可以順利通過編譯。總算也把開發的相依套件版本全都升級完成。

參考連結

2023/03/18

[npm] 解決 npm glob-parent 版本過舊的安全性問題

問題

最近在一個舊的專案採用 webpack 4.x 的版本,最近要修改檔案,要在能正常執行下,想要一併更新一下開發套件版本。

原本環境:

  • typescript 3.9.5
  • ts-loader 7.0.5
  • webpack 4.43.0
  • webpack-cli 4.9.1

執行 npm audit fix 之後,已修正不少套件相依版本,但仍有安全性相依版本的問題,即便依照指令再做一次 fix 的動作仍無法更新修正。

glob-parent  <5.1.2
Severity: high
glob-parent before 5.1.2 vulnerable to Regular Expression Denial of Service in enclosure regex - https://github.com/advisories/GHSA-ww39-953v-wcq6
fix available via `npm audit fix`
node_modules/watchpack-chokidar2/node_modules/glob-parent
  chokidar  1.0.0-rc1 - 2.1.8
  Depends on vulnerable versions of glob-parent
  node_modules/watchpack-chokidar2/node_modules/chokidar
    watchpack-chokidar2  *
    Depends on vulnerable versions of chokidar
    node_modules/watchpack-chokidar2
      watchpack  1.7.2 - 1.7.5
      Depends on vulnerable versions of watchpack-chokidar2
      node_modules/watchpack
        webpack  4.44.0 - 4.46.0
        Depends on vulnerable versions of watchpack
        node_modules/webpack

由於 GitHub 的機器人找出這個安全性問題,而且風險值很高,雖然不更新時,可正確產出結果,但是總是有個風險在。

當然直接升級 webpack v5.x 後,此安全問題可以解決,但是在跑專案時會出錯,以暫時不升版的狀況下,該如何更新版本而不出錯才是當前要解決的問題。

程式開發者不能不知道的 GitHub Copilot

前言

GitHub 在 2021 六月時推出 AI 程式碼工具 Copilot。它可以幫助開發者在寫程式時提供自動完成程式建議。基於 OpenAI Codex 可即時在編輯器作用。相較於現在超及熱門的 ChatGPT,GitHub Copilot 是更適合開發人員使用的工具。然而 Microsoft 就在昨日還隆重介紹了 Microsoft 365 Copilot,要把它融入日常工作流程中,現在完全不能忽視 Copilot 了呀~

首先還是先來把工具搭配 Copilot 搞定吧!

2023/02/28

[Visual Studio 2022] v17.5 新功能 - Dev Tunnels 開發人員通道

開發網站專案,若是要暫時展示開發進度,要想各種方法把網站對外開放。不管是架在測試機,或是佈署到雲端,又或是透過 ngrok 或自架 nginx 伺服器反向代理。目前在 v17.5 版本中可以輕易達到了。

必要條件

  • Visual Studio 2022 v17.5 版本 (Visual Studio for Mac 不支援)
  • 啟用開發人員通道預覽功能
  • 僅支援 ASP.NET Core 網站專案 (一個或多個)

2023/02/27

[macOS] PHP 7.4 在 Homebrew 近期更新升版後發生 Library not loaded 錯誤

問題

在月初更新了 PHP 的版本,而最新版本來到了 PHP 8.2。近期開發的專案都以 PHP 8.1 為主,也並未發現異常。剛好最近在修改舊專案,是跑在 PHP 7.4 的版本,這時才發現無法正常運作。

[Visual Studio 2022] v17.5 新功能 - Markdown

在 Visual Studio Code 已經用得很習慣的 Markdown 編輯預覽,終於也在 Visual Studio 2022 出現了。

只能說 VS Code 把編輯器功能做得太棒,養大了開發者的胃口,在編輯器都有的功能,怎麼能在地表最強 IDE 沒有呢?

搭啦~ 不用開外掛,預覽 Markdown 內建囉!

Markdown 預覽

開啟任何 *.md 的檔案,即可看到 "Preview" 按鈕,點擊即在右方出現預覽內容,或是按快速鍵 Shift+F7 開啟預覽

以後不用再多開 VS Code 來編輯 Markdown 了

[Visual Studio 2022] v17.5 新功能 - Quick Add New Files 快速新增檔案

前言

過去在 Visual Studio 要新增檔案都要在目錄上按右鍵再一層一層增加目錄或檔案,著實沒有效率。

超希望在 Visual Studio Code 新增檔案的方式能夠出現在 Visual Stduio 上。

在 Visual Studio v17.5 版終於把這項功能補上了,甚至比預期的更加方便及好用。

2023/02/26

[Visual Studio 2022] v17.5 新功能 - ASP.NET Core 輸出整合內建 Terminal

前言

有在開發 ASP.NET Core 網站的朋友們,在 Visual Studio 上開發時,應該對於那個跳出來不能關掉的 Console 視窗感到很煩。

若是本身就用 VS Code 來開發或是原先就在 Terminal 下操作,是不會有這種困擾的。

一直想敲碗很久的功能,終於在 v17.5 的版本聽見開發者的許願~

現在能把 output 到外跳出來的視窗導到內建的 Terminal 視窗去囉。

2023/02/25

[Visual Studio 2022] v17.5 新功能 - All-In-One Search 全域搜尋

前言

在操作工具,最大的困擾除了要能快速找到檔案或資料,另一個就是本身功能的設定。 VS Code 的出現,及它的方便查詢文件及功能設定真是深得我心。 有在用 JetBrains 家族工具的朋友應該很熟悉 Shift+Shift。 在 Visual Studio 最常用的也是 Ctrl+T 或 Ctrl+Q,而在最新的 Visual Studio 2022 v17.5 終於給了個全域搜尋功能。

2023/02/20

[.NET] 升級 ASP.NET MVC 至 ASP.NET Core MVC 的注意事項

前言

繼上篇 如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案 所遇到的升級問題再做一個小小的注意事項筆記

網站檔案路徑

在 ASP.NET MVC 可以透過 Server.MapPath() 來指定在伺服器上的路徑

例如:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string docsPath = Server.MapPath("~/docs");

        //...
    }
}

而在 ASP.NET Core MVC 需要經由注入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment 來讀取環境變數

例如:

public class MyService
{
    public MyService(IWebHostEnvironment env)
    {
        string docsPath = $@"{env.CotnentRootPath}/docs";
    }
}

2023/02/19

[.NET] 如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案

問題

進入 .NET 7 的今日,手邊仍有許多舊的專案,要如何將舊專案升級呢?

微軟提供了 .NET Upgrade Assistant 工具來協助升級舊專案。

讓我們一起來一步步升級吧!

升級專案

舊專案環境:

  • ASP.NET MVC 5.2.9
  • .NET Framework 4.7.2

想要升級目標專案至 .NET 7

2023/02/06

[npm] 如何檢查 npm 全域套件是否更新至最新版本

問題

趁著更新 macOS 的版本,也順便把一些開發工具更新一波。

檢查 npm 全域套件是否為最新狀態

  1. 可直接執行下列指令來作檢查
npx npm-check-updates -g
  1. 安裝 npm-check-updates 這個全域套件來作檢查

其實初次呼叫第一個方法即會詢問是否安裝 npm-check-updates 套件

npm install -g npm-check-updates     

檢查指令 (執行結果與第一個方法相同)

ncu -g 

2023/02/05

[Mac] 解決更新 macOS 後,在 Terminal 執行 command 時出現 xcrun 錯誤訊息

問題

今天在更新 macOS 後, 在終端機執行 command 時出現 xcrun 錯誤。

訊息如下:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解決方法

重新安裝 Xcode Command Line Tools 即可

xcode-select --install

2023/01/17

[Linux] 相見恨晚 rsync 取代 cp 的複製指令

問題情境

在 Linux Server 傳輸檔案,絕大多數的使用情境是可以直接用有 UI 介面的工具透過 SFTP 傳輸檔案。

但有時會遇到僅有文字介面的遠端操作環境,即先遠端到客戶主機,然後用 SSH 連線到指定的 Server。

以前只會在文字介面下用 cp 複製的指令,但這個指令的問題點在於:

  1. 不會覆蓋已存在的檔案,若要覆蓋需加 -i (interactive),但會一個一個詢問是否要覆蓋。一兩個檔案還沒什麼,當要更新的檔案很多時,操作上有點沒效率。
  2. 若在 root 的權限操作下,會蓋掉原使用者及群組的權限 (這可是大件事啊…)

相見恨晚的 rsync

一直以為 rsync 只是用來同步用,透過跟社群朋友交流,發現它是有更新檔案覆蓋的功效,操作上跟 cp 類似,但是最棒的是可以保留指定使用者及群組權限,還可比對各檔案差異的傳輸狀況。

我目前的操作情境是把差異更新的檔案程式先下載到主機再做更新,所以只會做複製及更新檔案的動作,不做任何刪除檔案的異動。(若遇到真需要刪檔的時候,才再行確認手動刪除)

更新操作動作如下:

rsync -avh /source/update_folder/ /target/project_folder/

常用參數:

  • -v : verbose 模式
  • -r : recursive 遞迴所有子目錄下的目錄及檔案
  • -a : 相當於 -rlptgoD 參數,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記
  • -z : 使用壓縮
  • -h : 將數字以比較容易閱讀的格式輸出

對應 cp 的類似的用法則是

cp -ia /source/update_folder/* /target/project_folder/

透過 rsync 來做檔案更新操作,真的是相見恨晚呀!rsync 還有更多強大的使用情境,待日後慢慢研究啦~

同場加碼 Windows 也可以使用 rsync (工具: cwRsync)

參考資料

2023/01/16

[MySQL] 解決匯入資料時出現 Got a packet bigger than max_allowed_packet bytes 問題

問題

在 MySQL 匯入 *.sql 資料時出現 [Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 的錯誤資訊。

解決方法

  1. 修改 MySQL 設定檔案

在 [mysqld] 的設定區塊下加上 max_allowed_packet=100M 即可接受 100MB 以內的檔案 (預設為 16MB)

可依匯入的檔案大小做設定修改,最大值為 1GB,修改後必需重啟 Server 以生效

  1. 不修改設定檔的狀況下,可在 Commandline 加上 --max_allowed_packet 參數設定

例如:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

相關連結