跳到主要內容

發表文章

目前顯示的是 2023的文章

利用Visual Studio Code - Remote Development來建立開發環境

開發人員通常手上都會有多個專案要進行開發,但是不同專案可能會有不同的程式語言,不同的技術堆疊,不同的套件相依性,以及其它不同的第三方程式庫要安裝等。如果全部都安裝在本地,常常會遇到因為不同專案需求導致版本上的衝突。例如Angular與Node版本相依限制(可以參考 Angular Version compatibility ),不同版本的Angular其相依的Node/TypeScript/RxJS的版本都有限制。這種問題對開發人員來說其實很困擾,所幸Visual Studio Code有一個延伸模組-Remote Development,可以結合Docker建立開發人員所需要的開發環境,操作起來與在本地開發的體驗幾乎沒有差別,強烈建議使用。今天我們就用一個簡單的範例來演示一下如何透過Visual Studio Code Remote Development來搭建一個Python的開發環境。該範例會使用OpenCV來做影像辨識,並解析出文字,最後Print出來。 必要條件 安裝Visual Studio Code與延伸模組-Remote Development 安裝Docker Desktop 專案結構 hello-opencv.py- 主程式 line_avatar_yellow_480.png- 影像辨識的圖檔 從Visual Studio Code打開專案資料夾 設定開發容器 選擇在容器中開啟目前資料夾 選擇將設定新增至工作區 決定.devcontainer資料夾要放在哪裡,此範例與原始碼放一起。 選擇Image Template 此範例是Python應用,所以選擇Python 3 devcontainers。 選擇Image 選擇要添加的Feature 此範例會使用homebrew安裝OCR套件,需要其他的Feature可以一併選進來。 選擇保留預設值 依照設定自動啟動容器 啟動完成 留意左下角會顯示開發容器:Python 3 切換到遠端總管會出現我們建立的容器 修改devcontainer.json 此範例希望建立容器後自動安裝OpenCV相關的套件,所以在postCreateCommand區段加入了一些命令,這部分可視情況調整。 存檔後會提醒要重建容器,按下Rebuild即可 自動重建容器 等待重建完成即可。 進入Debug模式 選擇P...

Maximum call stack size exceeded ?

今天前端在進行SIT時遇到一個很詭異的現象,查看了瀏覽器的 Console log 如下: 看了之後,當下沒有太多的想法... 故事繼續説下去之前,讓我先補充一下,這個應用程式是基於 ABP Framework 這個框架來開發的,前端使用的是 Angular ,後端用 .NET 6。 關於 ABP Framework ,日後再寫一篇來介紹一下。 我們再回到事發當時,當時看了 Console log 似乎還是沒能找到原因,決定上ABP Support看能不能找到有緣人,搜了一下發現還真有, Maximum call stack size exceeded 裏面的情況和我遇到的類似,裏頭有提供解法(是workaround),試了一下是可以用的。 稍微看了一下這個解法的代碼,猜測應該是 AbpPermissionDirective 的bug導致,也只能先用這個workaround了,等待之後的release吧!

FluentFTP不支援SFTP? 那就用SSH.NET吧!

某天在和客戶端進行FTP對接測試時,莫名報錯了,心想不可能吧,不是測試過了嗎?仔細看了Exception内容: System.TimeoutException Timed out trying to read data from the socket stream! System.TimeoutException: Timed out trying to read data from the socket stream!    at FluentFTP.FtpSocketStream . ReadAsync (Byte[] buffer , Int32 offset , Int32 count , CancellationToken token )    at FluentFTP.FtpSocketStream . ReadLineAsync (Encoding encoding , CancellationToken token )    at FluentFTP.AsyncFtpClient . GetReplyAsyncInternal (CancellationToken token , String command , Boolean exhaustNoop , Int32 timeOut )    at FluentFTP.AsyncFtpClient . GetReply (CancellationToken token )    at FluentFTP.AsyncFtpClient . HandshakeAsync (CancellationToken token )    at FluentFTP.AsyncFtpClient . Connect (Boolean reConnect , CancellationToken token )    at FluentFTP.AsyncFtpClient . Connect (CancellationToken token ) Timed out !! 隨即用 FileZilla Client 測...

當Google Sites遇上Google Blogger

當Google Sites遇上Google Blogger會蹦出怎樣的火花呢? 答案是免費的形象網站兼具部落格功能,您可能會覺得這真是了無新意,但對於剛創業的個人工作者或是小型工作室,這無非是一個節省成本的選項哦,除了節省成本外,Google Blogger也可以透過Google AdSense達到額外的收益,可説是一舉數得啊! 您可能會説 wordpress.com 或其他類似的服務也有免費的方案啊!沒錯,但是如果您要綁定域名的話,就得升級為付費方案才可以了!反觀Google Sites與Google Blogger在免費方案下,依然都是可以綁定域名,同時也具備SSL的保護呢! 下面就來簡單説説如何使用Google Sites和Google Blogger來搭建一個兼具部落格的形象網站吧,本次重點會著重在域名綁定的部分。 Google Sites 登入 Google Drive ,按下左上角的 新增 > 更多 > Google協作平台 ,系統自動開啓新的Site編輯頁面,右側有很多的網頁元素供我們使用。 編輯過程中可以隨時按下上方的 預覽 小圖示進行畫面預覽。 編輯完成後,我們就可以開始域名的綁定,首先按下上方的 設定 小圖示: 接著左側選單按下 自定網域 ,再按下 開始設定 : 輸入我們申請的域名後,再按下 驗證擁有權 : 系統會自動將我們輸入的域名帶入下一個畫面,直接按下 繼續 即可: 接著系統會指示我們需要新增一筆DNS記錄以便順利通過驗證: 此時我們會需要登入域名供應商提供的管理界面,該範例以 GoDaddy 為例,進入 DNS管理 的畫面後,按下 新增記錄。 這裏我們會需要新增2筆DNS記錄,除了一筆Google Sites驗證使用的記錄之外,還要新增一筆 www 前綴的cname記錄,内容值為 ghs.googlehosted.com. ,需特別注意的是, 最後面的 . 是必須的 。 新增完DNS記錄後,我們再次回到Google Sites域名驗證畫面,按下 驗證 開始進行驗證: DNS記錄生效需要一段時間,如果驗證失敗,建議過幾個小時後再試試。 直到看到下面畫面,表示我們已經完成域名的綁定了。 最後我們就可以把我們的網站發佈到Internet上面了,我們再次回到Google Sites編輯畫面,按下上方的 發佈 小圖示: 接著再按下上方的...

免費的SMTP Service?Twilio SendGrid

CI/CD工具無疑是開發人員的無形小幫手,大幅減輕開發員部署程序的工序,同時也提升了部署品質以及穩定度。通常我們會在pipeline增加一個郵件通知的post action,好讓CI/CD工具在完成部署時,通知相關人員部署成功或是失敗。 實際在客戶端配置CI/CD時,有時會遇到客戶端本身沒有架設SMTP Server的情況,這時候就需要藉助第三方SMTP Service,如果是免費方案就更好了😎。 Google了一下發現Twilio SendGrid滿足了我們的需求,它本身提供了一個 終身免費方案 ,該方案 每天可以發送最多100封郵件 ,相信這個額度應該可以滿足不少的族群,詳細定價方案可以參考官方網址  SendGrid Pricing 。 廢話不多説,我們直接進入主題,首先必須先注冊SendGrid賬號,注冊流程就不在此贅述,一旦注冊完成後,登入SendGrid接著三個步驟就完成了。 步驟一 建立API key 選單:Email API > Integration Guide,該範例我們使用SMTP Relay的方式。 輸入key name按下Create Key系統會自動生成一組密碼,記得把Server/Ports/Username/Password都複製保存下來,沒問題的話打勾 I've updated my settings ,點 Next: Verify Integration 完成設定。 步驟二 設定Sender Identity 該範例我們使用Gmail賬戶當作Sender,所以需完成Gmail賬戶驗證。 選單:Settings > Sender Authentication,按下 Verify a Single Sender。 接著按下 Create New Sender, 跳出如下畫面,填入適當資訊後,按下 Create ,過程中會發郵件到您的Gmail信箱進行身份驗證,所以務必輸入正確的郵件地址。 步驟三 發送測試 使用您熟悉的SMTP Client工具發送測試郵件就完成啦。