這些符號很常出現在我們日常生活中,有時候用到時還不知道英文怎麼說,甚至是中文也會有人說錯,因此在這邊列個清單,算是備查使用。
Mockoon, 不會寫程式也能自己建立 API 伺服器
API 測試相關文章可以參考以下連結:
有些場合我們會需要建立測試用的 API 伺服器:
- 前端與後端界接時,不需要等到後端開發完才能測試
- 測試流程中,部分 API 不是測試目的,回覆 mock data 即可
- 本機端 DEMO 需要
這邊要介紹一款好用的超輕量級、開源工具 Mockoon,從官網就能夠下載安裝檔案, IDE 設計與 P 牌也蠻像的,對於測試 API 的朋友應該都能快速上手;這款工具目前最大的優點就是開源以及無須註冊會員
!就我所知 P 牌此功能已經限制要登入才能使用了!整體使用上的速度極快,可以說是幾乎不需要等待。
安裝後可以看到官方已經給予很多範例,個人建議是不需要刪除,開發上遇到問題還是可以來參考的。
建立 GET 範例
糟糕的電子雜誌購物體驗
- 以下都以電子書代表(書與雜誌)
不知道大家在網路購買電子書有甚麼樣的期待?
這個商品不算物理上真實存在,且沒有數量限制的問題,理論上購買後就能夠直接閱讀,至少絕大多數的電子書網站是如此服務的。
前陣子在經理人網站有個非常糟糕的購買體驗,首先我在入口網站註冊了會員,點擊了訂雜誌
按鈕,導到訂購頁面且選擇好商品後,付費頁面建議我登入會員,方便訂單管理。
此時我心裡納悶,不是剛剛已經完成註冊且登入了嗎?為什麼會說我沒登入?
於是又嘗試登入一次,系統只有不斷的告訴我帳號或密碼無效的。本能的看了一下網域,嗯..不同網域啊..
,背後的會員資料庫可能不同,於是我再用相同帳號去註冊,果然註冊成功了。
用戶體驗到這兒,已經讓我打了十足的退堂鼓了。不同系統還能理解,商業模式都是陸續在擴展的,但系統給我點明確提示要新註冊用戶會比較順暢。
成功付款後,等待了幾分鐘,滿心期待的打開 Readmoo 網站(對的,電子書功能則是委外合作 Readmoo,我買一本電子雜誌需要註冊到三個網站),卻發現書櫃內沒有雜誌!這不對吧!會不會是遇上什麼差錯,想到要找客服就心累。
C# 擴充方法(Extension Method)
C# 擴充方法是蠻早期提供的功能,讓指定型別的物件能夠使用額外自訂的方法,將不需要接露的部分隱藏、簡化流程程式碼。
- 擴充方法必須定義在靜態類別內的靜態方法
- 擴充方法至少需要一個參數,參數型別之前必須加上
this
關鍵字
範例
假設系統常使用 decimal
型別,且需要固定轉換成小數位四位,一般是這樣
1 | decimal a = 0.1234567m; |
這樣做沒問題也達到需求,但會有個小缺點,就是整個系統會四處存在這種 hard code,除了不簡潔之外,萬一需求要改成五位,是不是就很麻煩了?
收斂
這種特殊功能的方法其實可以透過靜態類別來處理,例如
1 | public static class DomainConvertHelper |
在台灣的遠距上班為何窒礙難行
本文討論的範圍僅限軟體開發業為主的產業,並不適用其他產業。
WFH 推手
Covid-19 在全球爆發以來,台灣經歷了兩波大的感染。第一次疫苗覆蓋率極低的時期,當時,政府果斷宣布封城,非必要不得外出,能夠遠距的也都遠距上班了(Work From Home)。第二次則是現在,每天數萬人的感染,按照這速度,染疫數應該是指數上去。這次,政府沒再宣佈封城,部分公司則自主宣布 WFH 的規則。
台灣獨有特色
要探討 WFH 這個問題之前,個人認為還有一個點非常重要。台灣係從勞力密集的製造業起家,才到後來的軟體與半導體,很多擁有遠見與財力的老闆們對於有實體產出
的觀念還是根深蒂固,深深認為只有實體產品
才能夠賺到錢。
證明的方式很簡單,嘗試著去外包網站看一輪就知道,很多業主只想花個數萬到數十萬不等,就想完成龐大的需求與功能,最常見的大概就是後台管理系統或者是電商網站。當然,這個技術水深有時連業內的工程師也不會理解,因為沒這個經驗自然沒這個能力,人是無法想像未知事物的。
第二個證明方式更簡單,可以看看各位工程師電腦內的所有軟體是不是正版?不敢說國外月亮有多圓,但在亞洲,公司都無法提供最基本的合法開發環境。Windows? Visual Studio? Oracle? Office? 小至文字編輯器可能都不是正版。為什麼這些東西可以不是官方授權的呢?難道工廠可以使用來路不明的機台製造產品嗎?可能連安全性和品質都是問題了,但軟體不是,軟體就是個..看不到的東西。
WFH 是什麼樣的生活
早上可以多賴個半小時床,悠閒的沖杯咖啡開啟新的一天。有別於前往辦公室的日子,每天需要至少一個半小時的時間在盥洗與通勤上,有的人是拼命的划手機,把握屬於自己的歡樂時光、有的是緊盯開盤後的動向,有的則是閉目養神,而把握看書進修時間的人則是少見。相比之下,前者更甚吸引人。
MongoDB 時間的資料欄位差異與優缺點
2022/09/30 Update
最近重新翻出這篇文章,覺得當初撰寫時有些不夠明確與細節,特地再更新一下內容
寫這一篇是想到了當年對於時間的設計,還特地回頭翻了以前寫的文章 MongoDB 使用、設計時間欄位小心得。
又經過一年的磨練,對於之前的設計又有點想法想來聊聊。
起因
我們使用的語言是 .Net Core,設計的系統為跨國使用,因此時區問題是無法避免的。系統中一律使用 C# DateTimeOffset
,直接存進 MongoDB 會變成一個陣列(可以參考上面的連結),除了使用上稍微不方便、時區功能也是無用的儲存(因為系統端通常都是無時區,到了呈現端才會轉換),在查詢上也會稍微有差距。
接著嘗試了 C# DateTime
,進了 MongoDB 後就是 Date
格式,很好處理掉上面的問題,但另一個更致命的是,商業產品上對於毫秒的精確度很高,而 Date
最多只支援三位毫秒,完全不服使用情境。
最後選用了 C# 的 UtcTick
,這樣好處是儲存體都是 UTC 時間,對外溝通都一率使用 UTC,很符合我們的技術棧 gRPC (時間皆是用 timestamp)。很好的解決了當時的所有問題,反正客戶端在哪個時區,再進行轉換就好; 最大的不便莫過於可讀性了,但暫時沒有更好的解決方案。
1 | Timestamp 是 Unix 時間,`1970年1月1日00:00:00 UTC` 為時間原點 |
MongoDB $switch 語法使用 與 使用資料的其他欄位
新增欄位
新增欄位目前我都使用 $set
居多,已經很少在用 $addFields
使用其他欄位的資料
在實務上我們很常有類似的需求或查詢,根據已經存在的資料中的欄位A,經過運算後存在欄位B,例如:
1 | { |
在功能上線後,發現某個頁面只需要呈現完整名字,也就是 FirstName + 空格 + LastName
,礙於一些”特殊”原因,只需要在資料庫中儲存成一個欄位,如下:
1 | { |
這時候要上個 Data Patch 將所有資料改成上述格式該怎麼做?
思路
- 取出 LastName, FirstName 組合在一起
- 寫入該筆資料
- 刪除 LastName, FirstName
Bogus - .Net 產生假資料的神級工具
我們在寫程式中,絕對會需要撰寫測試,而很多測試情境需要使用假資料。
以下是一個 People
類別以及兩個 enum
1 | public class People |
以往我們都是這樣產生假資料的…
1 | var mysterious = new People |
要隨機性的話就會開始使用 random 的方式,但會有一些問題
- 資料不夠隨機
- 各種類別的屬性都必須個別刻出隨機的方法
- CODE 很多
- 產生假資料很難客製化條件
今天要介紹的是 Bogus,是 DotNet 的產生假資料工具,其功能與類型真的是廣泛到不可思議,有興趣的可以去看看他的 Github
首先透過 nuget 安裝 Bogus,接著程式碼如下:
Robo 3T 免費版 MongoDB IDE
在之前文章有介紹過 MongoDB IDE。2021 iThome 鐵人賽 - DAY3 MongoDB 連線與 IDE
我本身在使用時都是雙刀流 robo 3t
+ compass
,簡單查詢時就開啟 robo 3t,速度快操作簡單。近日在與同事分享此 IDE 時發現官網已經不再提供了,取而代之的是 studio 3t
,想說它極力推薦免費使用,便請同事先裝這個練習一下。
殊不知
如同其他軟體一樣,都是號稱免費使用,卻必須要註冊
才能使用。
我並不是說他們無償提供免費是應該的,只是這種事情沒有事先告知,等到下載、安裝完成後,卻發現要先行註冊,感覺真的不太好啊~
robo 3t 本身還是開源專案,仍然可以從 github 下載使用,只是僅支援到 MongoDB 4.2
版本囉!對目前的使用還不礙事,於是想繼續免費使用的還是可以透在這裡下載喔!
C# 的 模式比對 (Pattern Matching)
C# 在 7,8,9 陸續加了很多 Pattern Matching 的東西,讓你的程式碼能夠再簡潔與彈性化一點(其實是我沒更新技術、有些語法糖看不懂,於是就有了這篇)。Pattern 數量不少,但看過幾次就會使用了,是很簡單易學的語言呢!!(招生)
Logic pattern
- 判斷是否為 null。
以前我們都是直接使用 ==
1 |
|
新版的可以直接使用 is
以及 is not
1 | if (sample is null) |
Parenthesized pattern
其實算是上面的延伸,就看商務需求各自發揮了