這陣子都忙著工作,堆積了一堆文章還沒釋出,看來過年期間是一段輸出文章的好時間 不過工作優先就是了,平常使用的 Macbook 更新 Big Sur 之後,就造成了 Terimnal 卡頓的問題 環境 Model: MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports) OS: Big Sur 11.1 Fix 執行完指令後,完全關閉 vscode 後,再啟動使用
貌似有些人無效,不過對我來說是有效的
1 codesign --remove-signature /Applications/Visual\ Studio\ Code.app/Contents/Frameworks/Code\ Helper\ \(Renderer\).app Ref Github vscode - Issues
初期買了 Yubikey 只有單純用來做 OTP,2FA 的認證,後來想到應該是可以透過 Yubikey 進行金鑰登入 後來網路上確實有人這樣進行,所以就趕快拿自己的 Yubikey 來測試看看 Info Terminal: iterm2 / zsh / oh-my-zsh Hardware Secure Key: YubiKey 5 NFC Require 先安裝一些 Yubikey 的相關套件,還有 GPGTools
libyubikey yubikey-personalization yubico-yubikey-manager yubico-yubikey-personalization-gui gpgtools 手動安裝 1 2 3 4 brew install libyubikey brew install yubikey-personalization brew install yubico-yubikey-manager brew install yubico-yubikey-personalization-gui 創建金鑰 安裝好上面的工具之後,將 Yubikey 插入 Macbook 開始進行操作
改變 Yubikey 模式 Yubico Blog - common modes 參照資訊
-m0 HID (OTP) mode -m1 CCID (OpenPGP only – no OTP) – warning – you cannot use ykpersonalize after this setting!
學習微服務框架是為了更了解各種架構對不同專案上的適應性 雖然並不是每個專案都適合為服務,但是也需要先熟練各種兵器好應對更種情況 介紹 go-micro 是一個使用 go 實現的微服務框架,可以方便幫助 go 進行微服務的開發
主要功能 服務發現 平衡負載 Client/Server Pub/Sub gRPC Require Install 安裝工具
1 2 3 4 go mod init . go get github.com/micro/micro/v2@v2.4.0 go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.0 go get -u github.com/micro/protoc-gen-micro/v2@v2.3.0 mod version 這邊遇到了一些麻煩的狀況,各個版本的相依性很高,不同版本搭配可能造成錯誤
所以在這邊提供的以下的版本是確定可運行的
1 2 3 4 5 6 7 8 go 1.14 require ( github.com/golang/protobuf v1.4.2 github.com/micro/go-micro/v2 v2.9.1 github.com/micro/protoc-gen-micro/v2 v2.3.0 // indirect google.golang.org/grpc v1.26.0 ) Simple 我試著使用各種寫法來實現簡單的範例
使用 go-micro 進行服務發現,再透過 grpc 進行傳輸
是在了解微服務的同時,得知 Go 並且同時聽聞了 gRPC 所以現在來學習使用 gRPC,看看 gPRC 到底是哪裡特別 Require 首先需要安裝 gPRC 工具,撰寫好 gPRC 的 pb 文件之後,就能透過 protoc 轉換成 go 文件進行使用
1 2 go get -u google.golang.org/grpc go get -u github.com/golang/protobuf/protoc-gen-go 目錄 此次練習的目錄結構
. ├── go.mod ├── go.sum ├── proto │ └── hello.proto ├── rpc │ └── hello.pb.go ├── client │ └── main.go └── server └── main.go 撰寫 Proto 撰寫 proto 定義文件,此為官方文件 go - quickstart
proto3 及 proto2 的程式文法不同,所以版本注意
syntax = "proto3"; option go_package= ".
要更新文章時,剛好遇到一個小問題,有一個 dylib 未加載、找不到 使用 firebase 時出現一下錯誤,害我楞了一下
1 2 3 dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib Referenced from: /usr/local/bin/node Reason: image not found 根據 Google 上,大大分享的方法是…重裝即可
1 2 brew uninstall node brew install node Ref 解决报错dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
偶爾需要一大檔案進行傳輸測試,但礙於手邊沒有檔案 Linux 透過以下指令可以快速產生一個 1G 的空檔
1 dd if=/dev/zero of=./1G_File bs=1M count=1024 如果要更快的產生方式,可以透過 seek 略過內容到指定大小的終點位址
1 dd of=./1G_File bs=1 count=0 seek=1G MacOS 使用 makefile 就能輕鬆辦到
1 2 3 # mkfile -n size[b|k|m|g] filename mkfile -n 1g 1G_File Windows 透過以指令的方式,在 cmd 鍵入以下指令
1 2 3 # fsutil file createnew <file_name> <file_size_in_kBs> fsutil file createnew 1G_File 1073741824
最近在寫一些純文字介面的工具,但是在操作上對非資訊人員還是不夠直覺 想知道怎麼開發類似於 BIOS 的文字操控介面,但是礙於不曉得相關的資訊 後來終於讓我查到關鍵字 Text-based user interface/TUI,然後選擇了一個看起來比較靠普的 Dialog Linux Dialog 是可以在 Terminal 上快速建立圖形交互介面的工具,功能十分強大、方便
撰寫 Shell Script 再搭配 Dialog 可以讓人比較直覺得操作,減少操作上的不便
雖然現在比較多使用網頁進行交互操作,但是可以不必特地架設網頁伺服器,減少一些不必要的問題
安裝 看起來 Dialog 是還有持續在維護,Mac 透過 brew 安裝的版本甚至是 20200327 的版本
可見還是有許多人喜愛以這種風格呈現操作介面
Mac 1 2 3 4 brew install dialog dialog --version > Version: 1.3-20200327 Ubuntu 18.04 1 2 3 4 apt-get install dialog dialog --version > Version 1.3-20171209 CentOS 6/7 1 2 3 4 yum install dialog dialog --version > Version 1.
雖然專注在後端技術上,對前端只有初學者左右的程度,但還是多少對前端的技術很感興趣 而且這個技術對後端相對方便的,如果可以在前端技術上有更多精進的能力,多少可以解決更多問題 WebAssembly 簡介 WebAssembly 是一個以二進制表示的低階語言,可以在瀏覽器上運行,由於是二進制所以運行速度肯定會快點
特點則是說可以接近原生的效能,我個人觀點則是可以突破某些狀況下的限制和效能的提升,所以也有可能變慢囉!要謹慎使用
並且 2019 年時 WebAssembly正式成為W3C推薦的網頁應用標準
WebAssembly 與 JS 共存,輔助加強 JS 產生更多的應用並提升性能
目前可以使用 C/C++、Go、Rust 透過 Emscripten 編譯成 WebAssembly
WebAssembly - Go Go 1.11 開始支援 WebAssembly 可以透過 Go 來進行開發
首先需要將 wasm_exec.js 複製到需專案目錄中,稍候需要 js 調用 wasm 檔案
1 cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" . Sample 寫個簡單的程式,先練練手培養的感覺
1 2 3 4 5 6 7 package main import "fmt" func main(){ fmt.Println("Hello, WebAssembly!") } 然後對此進行編譯,參數則是 GOOS=js 的 GOARCH=wasm,稍候就可以透過 js 來呼叫 wasm