只有累積,沒有奇蹟

2020年2月18日 星期二

[CheatSheets] Docker Event State

前言 
最近的專案很幸運的都在學習過去未接觸的領域,像是容器化技術 Docker、ASP.NET Core 再搭配 Amazon Elastic Container Service (Amazon ECS ) 管理容器服務,專案開發完到上線之後感覺經驗值加班提升不少,在使用 Docker 時較常使用的像是使用 Docker pull 取得 image、Docker run 運行 image、Docker stop 停止特定容器、刪除容器使用 Docker rm,如果你對 Docker 有一定了解相信對於上述指令一定不陌生;在 Docker 中有提供 Docker event 可以取得容器生命週期的重要訊息,也可以透過 API 來取得容器當時的事件與內容,作為監控的信息來源與資訊,在了解 Docker event 中意外發現國外強者有整理一份 Docker Event 事件圖,清楚的表達當容器的生命週期,看完覺得收穫良多特記錄在部落格中,做為自己備份慶祝自己的無知 (誤),也提供給有需要的朋友

參考 
A Docker logging guide - Managing stats, events and Docker logs

2020年1月16日 星期四

[Retro] 2019 年度回顧

個人回顧
轉眼間一年又過去了,在 2018 年底為了挑戰自己決定跨出舒適圈到相對陌生的環境,現在回想起來在 2019 年經歷了很多有趣的事情,不管是工作或是想法上自己都覺得有所成長,因此決定在這時候來回顧一下 2019 收穫滿滿的一年想法與經歷,這篇內容與技術無關,如果對小弟 murmur 不感興趣的朋友請自行跳過 :)

# 部落格
自己擔任工程師也有 10年+的時間,雖然這十年的時間有轉換過 PM、SA 等非開發相關角色,但回過頭來自己還是喜歡開發帶來的挑戰與成就感,早期在前公司主管 Gipi 大就有鼓勵技術人員撰寫技術部落格,除了訓練表達能力之外也一併訓練整理思緒的能力,如何將一門技術/功能/解決問題的過程透過文章表達出來,而且要讓別人可以看得懂,對我來說也是一個相當大的挑戰;另外在工作上也常遇到一些技術的問題可能在當下已經解決,但可能由於時間的關係急於上線而錯失探索更好的解法,這種就會一直掛在心上偶爾還是會想到,於是乎在 2018 年底決定開始認真在 Blogger 撰寫技術文章,給自己設定目標希望可以每 2-3 天一篇文章(自虐心態)

不管簡單的或是難的、在跟同事討論過程中我不懂的,去外面上課聽到有趣的東西,只要是我原本不會的我通通都會先將這些記錄下來,最後半夜在利用自己的時間加以研究,再將研究的結果整理成一篇技術文章,持續堅持了將近 10 個月的時間為了達到自己訂的目標每天幾乎都過著睡不飽的日子,在 2019 年最後繳出的成績單技術文章為 166,根據 Google Console 的數字統計總曝光是 64.4 萬,文章點閱次數 7.69 萬,自己覺得很開心也很慶幸有幫助到跟我有一樣困擾的開發者,但也覺得很可惜的是在 10 月後私人因為無法再持續的更新 (10 月初兒子就蹦出來了阿阿 ! 抽不出空來寫 XD),只能參考富間的方式從一周三四篇變成一個月一篇文章,這過程雖然辛苦但自己也蠻滿意的,有學到自己有興趣的項目及內容,對自己的幫助還是很大的。
# 關於學習
《想 永遠都是問題,動手做才是答案》因緣際會地認識一些強者,這是我們在討論中印象中比較深刻的一句話,過去自己私下都會參加技術補血課程與技術研討會,透過此方式來補充自己技術能力不足的部分與學習新知識,自己很膚淺的都會羨慕台上的講者怎麼可以知道這麼多技術新東西,但殊不知其實他們花了非常多的時間在學習相關領域的知識,套句強者同事J大說的雷踩多了,還活著的,就是大神》,因此自己思考過後心態上也做了調整,在讀過《刻意練習》這本書之後發現投入時間與練習是不可少的一環,自己覺得 ASP.NET Core 很有興趣在未來也有可能是個趨勢,因此做了下列事情
  • 使用 Feedly 訂閱 ASP.NET Core 相關的技術文章與參考官方技術部落格知識 #吸收新知
  • 在公司開發專案時強迫自己使用 ASP.NET Core 進行開發 #刻意練習
  • 在開發時先閱讀微軟 MSDN 相關技術文件,了解/review技術文件的中文描述是否正確與合理,如果覺得翻譯上不正確就發 Pull request 請相關人員調整敘述文字 #驗證自己理解程度
  • 接著在多撰寫 ASP.NET Core 基礎的技術文章,加深自己對於基礎的了解與認知 #打基礎
最後某一天發現不知不覺地 ASP.NET Core 相關的文章寫了快 50 篇 是有多愛(誤),於是心血來潮想說來整理一下方便自己之後查詢就變成一本電子書《Something about ASP.NET Core》
由於當時版本是 2.2 與目前最新的 3.1 有一些差異,但仍具有部分參考價值,有需要可以參考小弟的 GitHub ,若有錯誤或是不清楚的部分也請告知;如果你喜歡 Something about ASP.NET Core 電子書或者覺得這本電子書對你有幫助,請不吝給我一顆星給予鼓勵,感恩感恩大感恩 :)

# 關於2020
2019 對我來說是個收穫滿滿的一年,但也是有些遺憾的部分,原先計畫自己要對 AWS 有更深的認識與熟悉,但這方面自己覺得離自己的目標還有段很大的距離,希望今年也可以有機會補齊;想要對於 Docker & Redis 可以更熟悉,但由於時間上的限制也是還有有加強努力的空間,也感謝同事跟主管的照顧,期許自己在 2020 年可以更上一層樓 :)


2019年12月30日 星期一

[Tool] 個人開發工具軟體清單

前言
正所謂「工欲善其事,必先利其器」,使用好的開發工具可以加速你的工作效率,讓你盡早完成工作可以休息片刻摸魚,在自己的部落格中也常介紹一些個人在開發上常用的工具與好用軟體,最近工作上幸運的可以將系統碟 128G SSD 升級為 256G (謝主隆恩),在重灌的過程中也開始整理平常好用的工作在新電腦重新安裝,於是乎有這想法將平常覺得好用的工具整理唯一篇文章分享給有需要的朋友,整理如下

開發工具

  • Visual Studio 2019 : 開發 ASP.NET 首選開發 IDE,為地表上最強開發工具
  • Visual Studio Code :  前端同仁一致推薦,最近開始覺得越來越好用 XD
  • Rider : 強者同事大力推薦,正在努力熟悉中

    資料庫工具
  • SQL Server Managenent Studio : 管理 MS SQL 資料庫工具
  • Robo 3T : Mongo 資料庫管理工具
  • Redis Desktop Manager : Redis 查詢介面可視化的軟體,介紹連結

    版本控管工具
  • TortoiseGit : 老字號 Git 版控工具
  • SourceTree : Git 版控工具 
  • Fork : 最近主要在使用的版控工具,介紹連結

    記憶體分析工具
  • DebugDiag Tools : 分析 dump 後自動產生報表懶人工具
  • Performance Profiler : Visual Studio 中內建記憶體工具
  • Jetbrains dotMemory : Jetbrains 分析記憶體工具
  • WinDbg : 記憶體分析工具,最近有出新版

    輔助工具
  • Resharper : 開發人員輔助開發神器 (大推)
  • Feedly : RSS 訂閱服務工具
  • Postman : 開發 WebAPI 測試利器
  • REST Client : VS Code 模擬 Request 套件
  • Fiddler : 查看 Http 封包工具
  • Cmder : Windows 下好用的終端機工具
  • Windows Terminal : 微軟於 2019 年出的終端機工具,介紹連結
  • Docker for windows : 不多說直接看介紹,介紹連結 
  • Snagit : 好用的截圖軟體
  • Rambox : 可同時登入多組 Skype 帳號工具
  • Chocolatey : Windows 套件管理工具,介紹連結
  • Notepad2 : 強大的記事本工具
  • LINQPad : 練習 LINQ 必備工具
  • Json View Awomware : Chrome 擴充套件,理解 Json 結構的好幫手 介紹連結
  • ILSpy : 程式碼反組譯工具,介紹連結 
  • LogPaser : Log 分析工具,介紹連結 
  • 7zip : 壓縮解壓縮軟體
  • wox : 快速啟動軟體 
  • balsamiq : 手繪風格繪製工具,大推


  • 若是有好用或是推薦的工具也歡迎隨時一起討論,這份工具清單將會持續更新 hope it helps  :)

    2019年11月29日 星期五

    [NET] Execution of user code in the .NET Framework is disabled. Enable "clr enabled" configuration option.

    問題 
    最近運氣很旺在開發專案時常遇到詭異的案例,前幾天在家裡趕專案時在使用 Visual Studio 2019 開發專案要啟動連接到 Database 時跳出 'Execution of user code in the .NET Framework is disabled. Enable "clr enabled" configuration option.'  第一次遇到這問題覺得挺有趣的,雖然解決方法很簡單但還是簡單紀錄一下處理的過程若是有不清楚或是錯誤的地方歡迎討論予糾正

    異常現場
    異常發生時跳出訊息內容如下
    相信對 .NET Framework 有點熟系的都知道 / 聽過 CLR,在微軟 MSDN 與 wiki 分別都有針對 CLR 作為介紹與說明,在此引用 wiki 對 CLR 的定義如下 (相較之下微軟的說明太技術了些)
    通用語言執行平台(Common Language Runtime,簡稱CLR)是微軟為他們的.NET的虛擬機器所選用的名稱。它是微軟對通用語言架構(CLI)的實作版本,它定義了一個程式碼執行的環境。CLR執行一種稱為通用中間語言的位元組碼,這個是微軟的通用中間語言實作版本。
    SQL Server 2005 開始提供 CLR integration 功能,我們可以透過下列指令取得目前 clr enable 的狀 
    EXEC sp_configure 'clr enabled' 
    查詢後可以看到目前系統中 clr enable 的設定
    欄位說明如下

  • name : 設定的名稱
  • minimum : 設定的最小值
  • maximum : 設定的最大值
  • config_value : 配置設定的值
  • run_value : 當前設定值


  • 解決方案
    輸入以下指定,開啟 clr enable 
    EXEC sp_configure 'clr enabled', 1
    RECONFIGURE 
    更新後即可重新查詢更新後的值,即可發現更新成功


    大功告成,宣告結案  :)

    參考
    ASP.NET Core 中的 Kestrel 網頁伺服器實作
    SQL Error – Execution of user code in the .NET Framework is disabled. Enable “clr enabled” configuration option
    How to Enable SQL Server CLR Integration using T-SQL

    2019年10月14日 星期一

    [C#] 設定方法 (Method) 已過時 - Obsolete

    前言
    最近又再重操舊業開始撰寫共用 Library,共用 Library主要用意是希望可以加速同事開發上的速度,像是與 DB 溝通或是撰寫 CRUD 每個專案都會用到的 function 或是 API,或者是每個專案都會用到的檢查邏輯抽出來讓大家使用,讓大家不用在重複造輪子以加速其他同仁在專案上的開發速度,在此專案開發時由於迭代的速度與變化較快,因此也常遇到第一版提供的 API V1 版本經過兩天後就調整為 V2 版本提供新版,此時方案或專案中勢必會有已經在使用的 V1 的 method,最快速地解法就是直接使用 resharper rename ( Ctrl + R + R ) 將參考到的方法一併換掉,簡單又迅速不花太多時間,今天要介紹的是另外一種作法是使用  Obsolete  屬性,提醒其他開發者所定義的 method 已經過期 / 過時,這篇就針對 Obsolete 此屬性做簡單介紹,若有更好的方式歡迎隨時提出來一起討論。

    使用方式
     ObsoleteAttribute  位於 system 的命名空間( namespace),因此要使用時不需要 using 其他 namespace 就可以使用,在 ObsoleteAttribute 提供三組 API 簽章讓開發者來設定方法已過時或是棄用,針對各 API 使用分別介紹如下

    ObsoleteAttribute
    可以在過時的方法上加上 obsoletAttribute,使用沒有參數的建構子方法,下面為定義 method1 已過時
    [Obsolete]
    public static string Method1()
    {
        return "I'm method1 !!";
    }
    static void Main(string[] args)
    {
        Method1();
    }
    將滑鼠游標移至 Method1 上方時,可以看到參考到過時的方法時下方會出現淡綠色線,Visual Studio IDE 會提示開發者該方法已過時 ( Method1 is Obsolete)


    ObsoleteAttribute(String)
    第一種方式提示的訊息都是固定的 xxx is obsolete,如果希望提示訊息可以客製化可以使用此方法簽章,舉例來說 method1 已棄用,希望開發者在使用時可以改用 method2,可以參考下列 sample code
    [Obsolete("Method is obsolete :( please use method2")]
    public static void Method1()
    {
        Console.WriteLine("I'm method1 !!");
    }
    
    public static void Method2()
    {
        Console.WriteLine("I'm method2 !!");
    }
    
    static void Main(string[] args)
    {
        Method1();
    }
    將滑鼠游標移至 Method1 上方時,可以看到參考到過時的方法會呈現自訂的訊息內容

    ObsoleteAttribute(String, Boolean)
    此簽章包含下列兩個屬性
  • Message : 型別為字串,定義過時 / 棄用方法要提示開發者的訊息
  • IsError : 型別為 bool,定義在編譯時是否要錯誤 (true),如果不希望編譯時產生錯誤只是警告開發者則設定為 false

  • 舉例來說希望強制有使用/參考到 method1 方法的類別都無法使用,則需要設定 IsError 為 true,參考下列 sample code
    [Obsolete("Method1 is not support, Please use method2", true)]
    public static void Method1()
    {
        Console.WriteLine("I'm method1 !!");
    }
    
    public static void Method2()
    {
        Console.WriteLine("I'm method2 !!");
    }
    
    static void Main(string[] args)
    {
        Method1();
    }
    
    與上面的都不一樣,在編譯則會跳錯誤並提示開發者你所定義的訊息內容,如下所示
    希望透過以上的說明,可以讓大家對於在 C# 中如何設定方法過期/棄用時更加了解,如果有不清楚的地方歡迎一起討論,hope it helps !


    參考
    Using the Obsolete Attribute in C#

    Copyright © m@rcus 學習筆記 | Powered by Blogger

    Design by Anders Noren | Blogger Theme by NewBloggerThemes.com