2018-01-30

Enum To List<SelectListItem> 及 Enum To SelectList

無意間看到專案中的一段程式碼,讓我停頓了一下,一時之間好幾個念頭閃過卻不知道該選擇哪個做法來改善

大意是 View 中有個欄位資料型別是一個 enum,預設範本直接透過 @Html.EnumDropDownListFor 進行綁定,但這樣的輸出有個缺點: enum 的預設值也會被輸出,為了避免預設值也被輸出成選項,第一個念頭就是透過自行組裝 select 及 option 相關 html 的做法

只是靜心想想,是不是有其他更好的做法,想到三個做法筆記一下

2018-01-28

DebugDiag 2 Analysis 出現 DacError

繼前篇筆記 WinDBG 出現 SOS does not support the current target architecture ?! 紀錄在使用 WinDBG 偵錯 production issue 時遇到使用 64-bit 工作管理員匯出 32-bit 程式的 dump 而無法順利完成偵錯的狀況

遇到問題當下並沒有其他心思去偵錯 WinDBG 所以立馬改使用黑大在 ASP.NET CPU 飆高問題之傻瓜分析工具-DebugDiag Tools 一文中介紹的 Debug Diagnostic Tool (DebugDiag) 來查問題,但第一次使用 Debug Diagnostic Tool (DebugDiag),加上問題源頭原本就與工具無關,並沒有順利查出問題根源

在使用 Debug Diagnostic Tool (DebugDiag) 過程遇到不常見的錯誤訊息,於是紀錄一下使用經驗

WinDBG 出現 SOS does not support the current target architecture ?!

前幾天 production server 上的出現 CPU high 的 warning,當下立馬想到使用 WinDBG 來追查問題發生原因,只是我使用 WinDBG 的頻率不高,每次在使用前都要再花一些時間查語法,幸虧黑大日前的文章 - WinDBG 應用實例:找出 ASP.NET CPU 100% 原因 列舉幾個常用的 WinDBG 語法,讓使用 WinDBG 時的前置時間縮短不少,可以更有效率地專注在追查問題原因

以往使用 WinDBG 時都還算順利,但這次卻出現 SOS does not support the current target architecture 的狀況,讓追查動作無法繼續下去,所以立馬來紀錄一下這次使用 WinDBG 的經驗

2018-01-22

NLog 設定 Rule 僅包含部份 Logger

log 是系統正式上線後,少數可以用來協助 debug 的資訊,而 debug 的難易度與解決問題的速度也就跟著 log 的品質而有極大的差異。

今天想要紀錄最近專案遇到的一個需求:某些 log 內容很少使用加上資料量又大實際效用不高,但卻是追查 bug 的最後一道不可或缺的防線(像是 EntityFramework 實際產出的 SQL script),而其他 log 則紀錄了整個程式流程的相關資訊,所以打算將 db 的 script log 與其他程式執行資訊分開儲存,避免 db 的大量 log 形成雜訊而拖慢 debug 的速度,就來看看 nlog 可以如何設定吧

2018-01-20

使用 Moment.js 來簡化 JavaScript 的時間處理

專案的前端頁面在 user 要求加速整個流程下,使用了一套 library - Date Range Picker 方便使用者可以在同一個 input 中同時選擇 start date 與 end date 也讓整體操作獲得簡化,整體改善獲得 user 的好評

故事開頭似乎跟筆記的標題沒什麼關係?! 因為使用了 Date Range Picker 來處理需要同時選擇 start date 與 end date 的需求,而為了讓頁面呈現統一也使用 Date Range Picker 來處理單一日期的選擇,在設定單一日期選擇器的過程中發現 Date Range Picker 送出的日期一樣是 start date 與 end date,並且相當貼心的已經處理成 start date 為選擇日期的 00:00:00 而 end date 為選擇日期的 23:59:59 讓後端程式可以少做一些處理 非常方便,需是乎就打算來學習一下 Date Range Picker 是如何處理 js 的時間問題也才發現今天主角 - Moment.js 的強大功能

今天就來簡單地紀錄一下自己常用的 Moment.js 功能吧

2018-01-18

使用 C# 取出 Word (.docx) 中的內嵌 Office 物件

之前筆記 取得 Word(.docx) 中的內嵌檔案 紀錄到如何在 word 中嵌入其他物件,也提到如何簡易地取出內嵌物件

今天則是要紀錄如何使用 C# 將 Word 中的內嵌物件取出

2018-01-17

取得 Word(.docx) 中的內嵌檔案

之前筆記 使用 C# 將 Word 檔(.docx .doc) 轉換為 PDF 曾經分享過如何使用 C# 將 Word 轉成 PDF,同事在實作後 user 反應如果 word 中有其他文件(e.x. pdf、word、excel、zip) 並沒有同步進行轉換,造成資料遺失

不是我刻意想吐糟 user 反應沒有處理 word 中有其他文件的問題(user 永遠是對的XD),但在 user 提出需求前根本就沒有說 word 會內嵌其他文件,根據最小可行產品的原則一定是沒做的呀 哈哈

今天就先紀錄一下不使用程式下的做法

2018-01-14

Windows Server 2016 docker 執行身份

最近重新安裝幾台了電腦,一開始都沒有 docker 的執行權限,原因就是執行 docker for windows 需要有特殊權限:docker-users,而 docker-users 預設僅加入 Administrator 造成使用其他身份登入時都無法啟動 docker

今天又遇到,順手截個圖,紀錄一下

Dapper 讀取 Oracle 資料 - 更新版 (使用 Oracle.ManagedDataAccess )

之前筆記 Dapper 讀取 Oracle 資料 提到使用x64 版本的 oracle client - Oracle.ManagedDataAccess 無法成功連線這句話是錯誤的,一來 Oracle.ManagedDataAccess 本身是 32位元,另外就是 Oracle.ManagedDataAccess 絕對可以正常連線 oracle 讀寫資料

就來看看如何使用 Oracle.ManagedDataAccess 搭配 dapper 連線 oracle 吧

2018-01-13

透過 ProGet 取得官方 NuGet 套件

之前筆記 將 NuGet Package 發行至 ProGet 曾經介紹到如何將內部使用的 NuGet package 發行至內部 NuGet server:ProGet 上,在試行一段時間後決定擴大範圍,將所有 NuGet package 皆透過內部 ProGet 來取得,不再將所有 NuGet package commit 至 git 中

因為公司的各個環境皆屬封閉環境,對外皆未開通網路連線,僅能連到 NuGet server,所以需要將 NuGet package 下載至內部 ProGet 上,立馬來看看可以如何設定

ASP.NET Identity 修改預設 Cookie 名稱

最近專案同時有前台與後台在進行開發,過去習慣的做法是將前後台使用同一個 VS 專案 (project) 進行開發,再透過 ASP.NET MVC Area 的功能來切分,但因為這個專案的前後台會分別部署在不同的 server 中所以就拆成兩個 vs project 但仍在同一個 vs 方案 (solution) 中,結果在開發時出現同時開啟前後台時會讓 cookie 混淆(前後台會吃到對方的 user 資訊),這讓前後台的同時開發變得產生出現靈異 bug

今天就來紀錄該如何透過設定 cookie name 的方式來避免前後台 cookie 互咬

2018-01-09

利用 Pure CSS 讓 HTML Table 也能有 RWD 效果

這是最近專案 user 提出的需求:所有對外服務的頁面都要有 RWD 顯示。這是現代化網站基本條件並不算特殊需求。雖然透過 grid system 的排版可以快速達成 RWD 的效果,但資料列表的顯示還是 table 最好用,加上 user 無法決定哪些欄位在 mobile 上是可以被隱藏的,所以退而求其次希望可以保留 table 的使用

其間討論過幾種方式:

  1. table 等比例縮少

    缺點:實在太小

  2. table 加上橫向捲軸

    缺點:使用者體驗稍差

  3. 最後經部門 designer 提點,透過 css 來客製 mobile RWD 顯示效果

2018-01-08

JavaScript 偵測 Request 來自瀏覽器的 Go Back (回到上一頁)

這是自己寫的 bug 所衍生出來的需求,大意是如果 user 在某個頁面執行 submit 動作後會 redirect 到新頁面,但如果 user 此時按下 go back 再重新 submit 一次頁面就會出現錯誤,所以打算透過 JavaScript 來偵測 request 來源,如果是使用 go back 時就做一些動作(e.x. 重新整理頁面或是提示)

2018-01-07

ASP.NET MVC 上的 Ajax 動作都被觸發多次?!

幫同事調整程式的過程中發現,View 的 Ajax 功能都會被觸發不止一次,本來以為是手殘按了兩次,特別留意後發現問題仍然存在,改懷疑起是不是軌跡球出現連點XD,最後證實只是人為造成的 bug

2018-01-04

使用 C# 將 Word 檔(.docx .doc) 轉換為 PDF

同事想要將 user 上傳的 word 檔轉換為 pdf,降低內容被篡改的機會,記憶中 word 轉存成 PDF 功能的程式碼並不多,但印象模糊,於是趁這個機會順手紀錄一下,方便日後參考

本文使用的程式碼僅適合 已安裝 Word 的環境