跳到主要內容

發表文章

Windows Container VS Linux Container

前言 若有在Windows上安裝docker 的經驗的話, 相信一定有看到過以下的畫面, 問你要不要使用Windows 的container Use Windows containers instead of Linux containers (this can be changes after installation) 這是 Windows上才有的功能, 由於微軟非常積極的想推廣他們家的產品, 所以開發了Windows版本的container 目前在docker hub上能拉下來的image還是以Linux為核心的container占大多數, 若單純只是想跑Python 或是 Node js, 基本上不用特別去使用Windows container 除非是想跑.NET的程式那就令當別論了, Windows container絕對會是首選 Switch to Linux Containers\Windows Containers 基本上想要用Windows container還是Linux container 其實可以在安裝完後自由地作切換,  由於Docker 是個Client\Server的架構, 我們在命令列上下的Docker指令, 其實就是在操作Docker Client, 而Docker Client會去跟Docker Server(Docker Engine)溝通, 比如叫它去建立Image或是停止一個container instance 在安裝完Docker For Windows之後, 除了Windows 的Docker Server之外, Windows上會多建一個Linux的虛擬機器提供Docker Server讓我們可以去使用Linux 的container 打開Hyper-V可以看到Docker安裝包幫我們建立的Linux虛擬機器 確認目前Docker Client是連接到哪個Docker Server 我們可以使用以下指令來確認 docker version 目前Client是連接到Windows 的Docker Server 若在這個時候想...

[Azure] You cannot perform any write actions on this subscription until it is re-enabled

前言 會有這情況發生表示你的subscription被停用了,  而被停用的原因不外乎是這個subscription底下的點數被用完了, 而Azure好心的幫我們把服務給停止 如何re-enable被停用的subscription 最簡單且快速的解法是, 移除消費限制 必須綁一張信用卡去付多出來的費用 Step 1. 到Cost Management + Billing的頁面 選擇被停用的的Subscription 點選Manage之後會進入Subscription的管理頁面 上圖可以看出我訂閱的Visual Studio Professional有1600的點數可以用, 但我超額了125元, 所以需要在額外付費保持服務可以正常運作(上圖我是已經暫時移除了消費限制) Step 2. 點選變更消費限制的選項 選擇移除消費限制 移除消費限制有兩種方式 暫時移除 永久移除 暫時移除只有在目前訂閱的付費週期內有效, 所以在這周期內只要是超過就是多付錢但是服務不會被停止 若下個月很不幸地還是超過了, 服務還是一樣會被停止 Step 3. 重新登錄 這個動作做完之後, 回到剛剛的Cost Management + Billing的頁面, Status應該已經從disabled變為 active 如果狀態沒變, 那就先登出在重新登錄一次 我的經驗是差不多半個小時到一個小時內服務可以全恢復

如何使用Hyper 複製虛擬機器

前言 若常常有開虛擬機的需求, 想用新的而且乾淨的環境去try一些東西的時候, 不防試試以下方法 作法 : 必要條件 1. Windows 10 Pro 以上的版本 2. 需要啟動Hyper-v 的功能 Step 1. 建立一個新的虛擬機器當作基底 如果不知道怎麼建立虛擬機器的話可以參考 如何使用Hyper V 快速建立虛擬機器 Step 2. 輸出虛擬機器 選擇虛擬機器, 然後選擇輸出的目的地 如果懶得操作UI的話, 其實也可以下指令去做 Export-VM -Name "Windows 10 172.163" -Path "D:\\vm_export" Step 3.  匯入虛擬機器 點選右邊側欄的 Import Virtual Machine  選擇剛剛匯出的檔案 選擇匯入的方式 因為我們要做的是複製而不是還原, 所以這邊要選 Copy the virtual machine .... 這個選項 之後 就一直下一步就好了 ... 如果都沒問題的話就會出現進度條 結論 在軟體開發到一定的程度時, 我們會需要進行測試, 而建立測試的環境, 說實話既費時又費力 若常常有這種需求, 不如直接先建立一個環境然後把它封裝起來, 要用時直接解開套用在新的虛擬機上, 既方便又快速 REF: https://docs.microsoft.com/zh-tw/windows-server/virtualization/hyper-v/deploy/export-and-import-virtual-machines

[解決方法] Gitlab runner 執行 docker build 時報錯, permission denied

前言 Gitlab 是個非常好用的CI/CD工具(平台), 我們將所有要做的事情(如編譯, 測試, 產生docker image)定義在Pipeline裡, 讓 Gitlab Runner 去執行, 進而實現自動化的建置與部屬 而如果自動化的過程中出現問題, 也可以去追蹤輸出的log來找到原因 錯誤訊息 當 Gitlab Runner 執行 docker build 的指令時, 若出現以下錯誤訊息 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/build? ... 表示執行指令的身分沒有足夠權限 由於Gitlab Runner 會以gitlab-runner的身分去執行指令 所以解決方很簡單, 只要把 gitlab-runner 加到docker的群組中就行了 Step 1. (Optional) 若沒有docker群組的話需要建一個 sudo groupadd docker Step 2. 加入 gitlab-runner sudo usermod -aG docker gitlab-runner 最後, 重啟 docker服務或者重開機

[Linux] Shell Script中的 {@:2} 是什麼意思

... {@:2} 是什麼意思 ... 很簡單, 就是傳入shell script的參數很多時 我們可以從中選擇出前兩個, 舉例來說: 假設我們在執行setup.sh 時帶入五個參數1, 2, 3, 4, 5 $ ./setup.sh 1 2 3 4 5 那麼在shell script中的指令 echo ${@:2} 就會印出 1 2 要注意的是  ${@:2} 的輸出是個 字串 如果想以陣列的方式取出參數的話, 可以用 ... vars =( "${@:2}" ) ...

VS Code 如何遠端編輯你的程式碼

前言 有時候當我們想編輯雲上server裡的檔案時, 一般的作法就是SSH進去, 接著用vim開檔案編輯 但是不管是用vim 還是用 nano, 這些編輯器的介面實在是有夠醜的 用過VS Code 的人應該都知道, 他的介面簡單又好看, 而且還有Code Syntax Highlight等功能, 讓我們在編輯時不會看到眼花撩亂 今天就來分享如何用VS Code來做遠端編輯 Step 1. 安裝必要的Plugin 打開VS Code 進入Extension的頁面後( Ctrl + Shift + x ), 搜尋 SSH FS 並且安裝 Step 2.  打開User Setting File > Preferences > Settings (或是 Ctrl + , ) 搜尋 sshfs.configs 選擇 Edit in settings.json Step 3. 編輯連線資訊(包含位址帳密等等) Step 4. 連線 鍵盤上按F1選擇 SSH FS: Connect as Workspace folder 這個指令 最後, 若連線成功的話, 就可以在左手邊側欄看到遠端伺服器裡的檔案以及資料夾 Ref: https://marketplace.visualstudio.com/items?itemName=Kelvin.vscode-sshfs

[NLP] 聊天機器人之語意識別自己來, 實作Named Entity Recognition 專名辨別

前言 這一兩年來Chat Bot變得非常的火紅, 許多科技大廠也紛紛釋出SDK讓開發者們可以很快速地開發bot, 並且自由地將bot部屬在他們的平台上, 如Google DialogFlow, Microsoft Azure Bot service + Luis, Amazon Alexa Skill, Facebook Wit,... 尤其是使用DialogFlow或是Azure Bot Service的開發者們, 還可以省去串接社群頻道的細節, 專心在商務邏輯的開發 這些Chat Bot背後都運用到Natural Language Understanding的技術, 將使用者輸入的句子解析成最有可能的意圖(Intent)以及句子當中我們感興趣的字詞(Entity) 有了Intent與Entity之後, Bot 就能夠根據這些資訊來回答使用者的問題 相關技術:   Intent Classification: 預測目前的輸入句是屬於哪一種意圖   Named Entity Recognition, NER (專名辨別) :  從句子中挖出感興趣的字詞 基於這些技術, 開發者不需要在後端建立一大堆的條件判斷式, 以及Regular Expression 雖然這功能很好用, 但是天下沒有白吃的午餐, 這些服務的收費也是貴的很誇張, 如果想要省錢的話, 其實也可以透過開放資源自己去兜一個出來, 以下內容就教各位如何使用現成的開放資源來做NER Step 1. 安裝相關python模組  nltk / sklearn_crfsuite / sklearn $ pip install python-crfsuite nltk 下載NLTK上的套件 $ python -m nltk.downloader all Step 2. 將相關模組匯入 import nltk import pycrfsuite Step 3. 選擇語料庫 NLTK download 做完之後, 本機上會出現許多語料庫可以讓我們直接使用 這次的示範使用conll2000的語料庫, 基本上裡面的句子都已經以 IOB(Inside–outside–beginning)的形式 被...