[料理佳餚] 一個可以讓我們隨心所欲調整圖片大小、解析度的高 CP 值圖床服務 - bunny.net

如果我們希望顯示在我們網站上的圖片符合一定的大小,一個方式是在上傳的時候就做嚴格控管,另外一個方式是在顯示的時候隨著我們設定的參數即時調整,我們選擇的解決方案是後者的話,那麼我們可以不用自己做,這篇文章要來跟大家介紹一個可以即時調整圖片大小、解析度,甚至裁切、翻轉、模糊化、上浮水印的一個圖床服務 - bunny.net

...繼續閱讀 »

[食譜好菜] 比 Azure Queue Storage 功能更完整的 Message Queue 服務 - Azure Service Bus

前一篇文章跟大家介紹的 Azure Queue Storage 接收訊息只能用定時 Pull 的方式,對於訊息需要隨送隨收的場景,Azure Queue Storage 用起來就顯得拐腳,Azure 有另外一個 Message Queue 服務 - Azure Service Bus,它的功能就比 Azure Queue Storage 更完整,稍貴一些,但還是比自己架要省。

...繼續閱讀 »

[料理佳餚] Azure Storage 除了能儲存檔案之外,還能化身為資料表(Table)儲存結構化資料。

Azure Table Storage 是 Azure Storage 中的一個服務,可以讓我們存放結構化的 NoSQL 資料,而且可以存放到 PB(Petabyte)級以上的資料量,價格也是很親民,依據備援策略的不同,最便宜可以到每 GB $0.045 鎂一個月,本篇文章用 CRUD 的範例來簡單介紹一下 Azure Table Storage。

...繼續閱讀 »

[食譜好菜] 殺雞焉用牛刀,想做關鍵字搜尋 Windows Search Service 一樣嚇嚇叫。

最近手上的專案有一個需求,使用者想對上傳的檔案(簡報、會議記錄、...等)做關鍵字搜尋,腦中閃過的第一個解決方案是 Elasticsearch(ES),但是這得額外架設服務、撰寫程式將檔案內容送進 ES 做索引,要花錢、花時間,使用者不一定買單,所以我就想到 Windows 檔案總管的搜尋功能能不能拿來用?它背後使用的服務是 Windows Search Service(WSS),下關鍵字去 Google 馬上就找到黑大的文章,感謝黑大。

...繼續閱讀 »

[料理佳餚] 用 Playwright 來為我們的網頁做自動化的端到端測試

Playwright 是由微軟開源專案開發維護類似像 SeleniumPuppeteerCypress 的 WebDriver,它主打的是測試,目前支援三大瀏覽器家族 Google Chrome / Microsoft Edge(with Chromium)、Apple Safari(with WebKit)、Mozilla Firefox,而且提供對測試友善的 API,讓測試人員在撰寫測試腳本的時候,可以更關注在 UI 的操作流程上,有需要對網頁進行自動化端到端測試的朋友,真的要試一下。

...繼續閱讀 »

[料理佳餚] Regular Expression(正則表達式)的比對「不包含」

如果說有什麼工具是在 IT 行業內不同領域都需要去學會的,我認為 Regular Expression(正則表達式)會是其中之一,而我們使用 Regular Expression 大都是去比對是否包含某個字或詞?鮮少遇到比對「不包含」的情境,我就我遇過的需求來介紹 Regular Expression 的比對「不包含」。

...繼續閱讀 »

[食譜好菜] 在 C# 中能將集合轉化為一切的擴充函式 - Aggregate

如果有一天,微軟讓大家在 C# 裡面 Enumerable 眾多的擴充函式當中選一個留下來,我想我會選 Aggregate(),Aggregate() 算是一個滿萬用的擴充函式,從 .NET Framework 3.5 開始就一直存在,它只有三個多載方法,要額外丟的參數最多也只要三個,結構上算是簡單,但運用起來卻能千變萬化。

...繼續閱讀 »

[食譜好菜] C# 兩個集合的 JOIN,一對一、一對多、單鍵值、多鍵值一次介紹。

不知道各位朋友在 C# 裡面,要將兩個集合 JOIN 起來使用時,是怎麼處理的? 假定我有一個 Employee 類別,有一個 Department 的屬性,Department 的內容需要透過另一個屬性 DepartmentId 到 Department 的集合當中去查找,如果各位朋友習慣上是使用類似下面寫法的話,可以嘗試改用另一種方法。

foreach (var employee in employees)
{
    employee.Department = departments.Single(dep => dep.Id == employee.DepartmentId);
}
...繼續閱讀 »