2018-05-20

從 DLL 中建立 PDB 檔

這是在追查某個 dll 可能的潛在效能問題時,延伸出的問題,一般情況下我們透過 NuGet 下載套件時大多都沒有包含 PDB - Program DataBase file 檔,讓追查錯誤時少了一個好用有效的利器,所以才興起從 dll 取得 pdb 的念頭,google 後在 stackoverflow 上看到可以透過 dotPeek 來製作 PDB,立馬動手實驗看看並紀錄一下

Windows 慣用者如何在 Red Hat Enterprise Linux 7.5 (CentOS ) 上使用 kubeadm 架設 Kubernetes (K8s)

之前筆記 Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s) 紀錄到如何在 Ubuntu 上使用 kubeadm 建立 Kubernetes cluster,考量到公司使用的 linux 都為 CentOS (RHEL) 所以趁著印象還新鮮時趕緊紀錄一下在 CentOS 上架設 Kubernetes 的做法

2018-05-19

使用 EntityFramework Insert 大量資料

這是參加 黃忠成老師的 Entity Framework 全線開發 課程時他提出讓學員思考的問題:如何使用 EntityFramework Insert 大量資料,我當下立馬想起印象中以前同事也被這個問題困擾過,而我自己本身則沒有遇到相同困擾,剛好透過這個機會來了解其中的差異也順便嘗試看看不同解法

立馬動手模擬看看,親身體驗實際情況吧

2018-05-18

在 LINQPad 中使用 nlog

LINQPad 的便利性我想不必我多提,而我自己常常在 LINQPad 上進行主要核心流程功能的 poc 開發,或是將特定功能從原系統抽離以加速功能驗證,今天遇到的情境也是如此,希望在不改動原本程式的主架構下略過其他不必要的系統驗證授權部份,完整保留原本的 log 行為與執行流程並且順利完成程式的調整,這樣一來功能完成也可以與原系統無縫接軌了,但現實常常與理想會有些距離,就來看看如何在 LINQPad 中正常使用 nlog 吧

2018-05-14

Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s)

原本是想將 Kubernetes 架設在 Ubuntu Server 17.10 上,但需要透過一些小手法才能順利執行 container,為了避免忘記如何架設,決定先退而求其次的使用 Ubuntu Server 16.04 LTS 紀錄一下先,網路上有許多文章在介紹如何安裝 Kubernetes,我相信我不會寫得比網路上的大大來得好,但我想站在一個 Windows 環境慣用者的角度來紀錄該如何使用 Ubuntu 及安裝 Kubernetes,主要就是因為我自己在實際安裝時就遇到不少操作上問題XD

Kubernetes - K8s 是用於自動部署、擴展和管理容器化(containerized)應用程式的開源系統,前身為 Borg (節錄自 Kubernetes - 維基百科,自由的百科全書 - Wikipedia)

近來 Kubernetes 漸漸有擺脫其他 Orchestration 工具(像是 docker swarm,Mesos... )的態勢,功能發展及業界關注度明顯較為熱絡,雖然一直相當看好 docker 的後續發展但也仍在觀望到底該選擇什麼樣的 Orchestration tool,近來覺得應該可以先試試 Kubernetes ,就來看看該如何在 Ubuntu Server 16.04 LTS 上架設 Kubernetes 吧

2018-05-12

使用 Elastic Stack (ELK) 來監控 MongoDB

之前筆記 Windows 平台上安裝 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 提到因為想要將部份系統資料餵進 ELK 用來監控及除錯,順手紀錄 Windows 平台上架設 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 的步驟,也提及 ELK 較適合執行於 Linux 環境,只是身為 Microssoft 派工程師,Windows 環境相對好取得用來開發測試

首先第一個目標就是為原本沒有監控機制的 MongoDB 加上基本的效能監控。在同事強力的協助下,終於排除困難將 MongoDB 效能資訊餵進 ELK,過程況狀不斷,如果不紀錄相信一周後我就再也做不出來了,就來看該如何設定吧

2018-05-09

IIS 上的 ASP.NET 程式出現 500.19 (0x8007000d) 錯誤?!

這是同事在處理 IIS 上的 application 改用 64-bit (不啟用 32-bit) 時遇到的狀況,之前筆記 IIS Express 出現 500.19 - 0x800700b7 錯誤?! 有紀錄到類似的錯誤,也是一樣出現 500.19 當時是因為 web.config 的設定與更上層的 applicationhost.config 或是 machine.config 重覆造成,原以為是相同錯誤定神細看才發現錯誤代碼不同

立馬來看看 0x8007000d 的錯誤原因是什麼吧

2018-05-08

如何知道使用的 dll 是否需以 32 位元模式執行

最近因為年度計劃預計做些 Windows server OS 的升級作業,將大部份 OS 升級為 Windows Server 2016,也順便整理 server 上的 application,發現仍有不少 application 執行在 32 位模式下,過去主要的原因是 Oracle.DataAccess.dll,原以為只要搞定 Oracle.DataAccess.dll 就可以,想不到後續又遇到其他參考的 dll 需要執行在 32 bit 模式下,所以找了幾個方式來試著不需要反覆部署至 IIS 上進行測試即可得知特定的 dll 是否需要執行在 32 bit 的相容執行環境

網路上分享的方法有很多種,今天會以本次遇到問題的 dll 中的 Oracle.DataAccess.dllSystem.Data.dll當做範例來進行測試,立馬來看看哪個方式比較方便吧

2018-05-02

Windows 平台上安裝 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana)

Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 建議執行在 Linux 平台上效能較佳

ELK Stack5.0 版本加入 Beats 套件後更名為 Elastic Stack,在還沒搞清楚 Beats 實際作用前反而是 5.5 版本的變更引起我更大的關注:可以使用 .msi 在 Windows 環境上進行安裝,以往在 Windows 平台上安裝 ELK 有著其他平台移植的痕跡,需要多一層轉換橋接才能使用,而透過 .MSI 安裝的實際體驗跟過去安裝 Windows 原生軟體就是一樣的,安裝流程很直覺,唯一需要留意的是 Java 8 的 runtime 還是必要條件且沒有包含在 .msi 中,如果過去沒有安裝過 Java 8 得要自行下載安裝

剛好最近需要將手上的一些系統資料餵進 ELK ,剛好趁這個機會重新安裝 ELK 並且紀錄一下流程

2018-05-01

在 ASP.NET MVC 出現 HttpAntiForgeryException 錯誤時 Redirect 至指定 Controller、Action

user 反應在操作系統時出現 System.Web.Mvc.HttpAntiForgeryException 錯誤,而 System.Web.Mvc.HttpAntiForgeryException 的錯誤在 ASP.NET MVC 上並不算罕見,是個為了避免 XSRF 的保護機制:在網頁表單上加上個隱藏欄位用來儲存 token ,實際 submit 時 server 會檢查這個 token 是否有效,常發生在網頁開啟閒置一段時間後再次 submit 資料的情境下,通常只要 refresh 頁面讓網頁重新取得 token 即可解決

本次專案的 owner 希望可以給 user 更好的使用者體驗,所以希望在 token 過期失效時重新導向登入頁面並提示需重新登入(經 user 這麼說,我也覺得讓錯誤直接裸奔在外實在不好,但我以前怎麼不會這麼想,難道我愈來愈客戶導向了嗎XD)

2018-04-23

IIS 出現 Service Unavailable HTTP Error 503 - Windows Process Activation Service (WAS) Error

這個問題遇到第二次了,照以往的習慣:問題遇到二次以上就要來筆記一下,避免下次再遇到又要花好多時間追查。之前沒有紀錄的原因:一來是覺得狀況特殊不太有機會再遇到,二來就是牽涉到的功能及設定不好模擬,但這次遇到相同問題又讓我花了好幾個小時才確認問題,所以多花點時間準備環境來完成紀錄

這次遇到的問題,外顯的錯誤訊息很籠統,第一時間並不好定位出問題,但搭配 event log 難度就會降低許多,就來看看實際的狀況為何吧

2018-04-22

C# 使用 Dapper 連線 DB 時指定逾時時間 (timeout):0x80004005

最近專案在 production 環境執行時常常遇到 [Win32Exception (0x80004005): The wait operation timed out],造成程式未完整執行,但再執行一次後又正常了,想當然爾這個狀況在開發階段未曾發現過(再次證實在我的電腦上都是好的XD),經過追查 log 後發現是 db 資料量略大,加上查詢語法在目標 db 上沒有建立對應的 index,所以執行查詢時都會耗費較多時間,但第二次之後的查詢則因為第一次查詢的犧牲已 trigger db 協助建立相關 cache,讓後續查詢得已順利完成

追查問題的過程中,發現沒能在第一時間快速精確鎖定相關設定解決問題,所以馬上紀錄一下加強印象

decimal , double , float 輸出 json 的格式問題

之前筆記 decimal 屬性輸出 JSON 時指定的格式問題 提到在專案中因為系統介接需要統一 decimal 小數位數,過程中也才發現 json.net 在輸出沒有小數的 decimal 時行為不太一樣(會補上 .0:小數點及小數點一位),最後雖然有解決問題,但解決方式自己卻不甚滿意,加上想要順帶測試 double 及 float 的行為,所以又花了一些時間找其他方法,就來看看過程遇到的問題及最後的解決方式吧

2018-04-21

decimal 屬性輸出 JSON 時指定的格式問題

這是之前專案遇到的狀況:輸出 金額 時只需處理到小數點下二位。既然是 金額,為了避免精準度造成的誤差都會選用 deciaml 資料類型,而在 db 中使用 money 儲存(因為業務需求面沒有運算需求可以使用,如果會有運算 money 有失真的風險,詳細內容請參考 欄位開立(2) - decimal, numeric, float, real, money 的抉擇),預設精準度為小數點下四位,為了符合目前系統的要求(小數點下二位),就需要調整輸出,來看看可以怎麼做吧

2018-04-17

清除 Windows 上的 git 驗證資訊(Credential)

公司電腦的安全性設定要求固定時間需要修改個人 AD 密碼,連帶其他內部系統密碼也會一並被修改,之前修改 AD 密碼後,密碼驗證失敗會彈出錯誤訊息要求重新輸入,但最近卻出現吐出驗證失敗沒有要求重新輸入,造成與 git server 的交互動作全部失敗,順手紀錄一下個人做法:將 Windows 上紀錄的 git credentials 清除,需要與 git server 溝通時重新輸入