程式設計週記[2016/04/29]: Silicon Valley 第三季上了!!

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

雖然第一天就把本週的專案(Golang Line Bot 建置在 Heroku) 寫好了,但是其他時間都在玩自然語言的引擎 Language Understanding Intelligent Service (LUIS) .也稍微想了一下到底需要 Bot 來做些什麼事情.

Go

HOWTO: CROSS-COMPILE A GO APP FOR WINDOWS FROM LINUX

原本 Go 要做 cross-compile 其實不難,但是如果在 Go 有使用到 C 的部分 ,可能就要參考一下這一篇文章.

Replicating SQLite using the Raft consensus protocol

將原先的 SQLite 透過 Raft Consensus 的演算法轉身一變成為具有etcd能力的 RDB.

找尋Golang Libs 的地方

分門別類可以找,根據你想找的類別來看看.

Convert pictures to ascii art use golang

將圖形轉換成ASCII,應該可以貼在 PTT? XD

Building the simplest Go static analysis tool

Line Bot 官方 Go SDK

蠻方便的,可以很輕易的傳送圖片跟訊息.不過寫法實在有一點像是 Java XDDD

http://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully

DFC 認為除了只是簡單的檢查 error 之外,你更需要的應該是要根據 error 的不同好好的處理他,衍伸閱讀: Errors are values

A slides collection for Go Conference 2016 Spring

Announcing Apex Software Inc

大神 TJ Holowaychuk 離開 Node.JS 之後轉陣營到了 Go之後的創業作 - Apex 裡面也同時開源了不少的 Go 的套件.

Python

Android/JAVA/NODE.JS

Docker

iOS/Swift

網站文章

Bots won’t replace apps. Better apps will replace apps.

這裡有中文版 (Bot不会取代app,更好的app才会)

基本上作者就是覺得,不論 Bot 多麼的具有智慧,跟 Bot 對話就像是 以前時代的 DOS Console 一樣,需要不斷地下指令.但是 App 就像是後來出的 Windows 視窗介面 (GUI) .後者永遠不會被前者取代,但是如何讓使用者更容易與有效的使用你的服務才是重點.

網站收集

有聲書/影片心得

Linus Torvalds: The mind behind Linux

Linus Torvalds 改變了這個世界兩次: (1) 一次是撰寫了 linux kernel 並且將它開源 (2) 發明了原始碼版本控制系統 “git”

對於程式設計師而言,最有(品味) “taste” 的莫過於 Linus Torvalds ,這段影片不錯 . 一些摘要如下:

  1. Linus 認為他不是一個可以面對群眾的人 (People Person),他認為 Open Source 是一個很好面對大家的方式.因為大家討論的程式碼 (對他而言) 是非黑既白的絕對觀點. 並不像政治或是其他具有太多的模糊地帶.

  2. 關於程式碼品味部分,他有舉一個簡單的Linked-List 為範例.他認為當你的程式碼能夠將所有的狀況反覆思考後當成是一種 通用的條件 (generic case),你的程式碼就具有好的品味. 反之,太多的條件判斷(ex: if )來處理就不是一種好的品味.

  3. 對於 Linux 與 open source 的未來發展, Linus 認為他不是一個願景者 (visionary) .他是一個工程師,他執著於每一個目前存在於 Linux 的小 bug .他希望把每一個小細節都處理好.

Youtube: Fork the Government (g0v) by 唐鳳

唐鳳談他的成長過程與他參與 g0v 的過程.其中也有不少 g0v專案的介紹.

本週專案

這邊會寫一些我的Project 52的成果.

本週專案: https://github.com/kkdai/linebotTemplate

透過一些教學來教導你如何在 Heroku 上面架設自己的 Line Bot . 裡面的 Golang 程式碼其實相當簡單,主要是測試使用. 但是主要部份是教導要如何 Deploy.

[Golang][教學] 在 Heroku 建立你自己的 LINE 機器人 (LINE Bot API)[更新: 2020/05/07]

更新: 由於 GitHub.com/line/line-bot-go/line-bot 底層更新,相關 vendor 也更新了.

前提

LINE 推出了機器人 API ,並且透過(幾乎不審核) 的方式來開放機器人的功能. 大家可以來試試看.

如何建立自己的 LINE Bot 機器人

1. 先去 LINE 官方網站申請機器人帳號 (LINE Bot )

img

  • 請先確認有在 LINE Developer Console 開啟帳號
  • 然後建立一個 Messaging API Channel
  • 在 “Basic Setting” 頁面,取得 Channel Secret
  • 在 “Messaging API” 頁面,去申請 Channel Access Token
  • 在 “Basic Setting” 頁面,將 LINE 官方帳號管理介面打開
  • 到回覆設定的選項中,選擇啟動 “webhook”

2. Deploy LINE Bot template

記得到 https://github.com/kkdai/LineBotTemplate 然後點選下方的 Deploy 按鈕,將基本的程式碼 Deploy 到你的 heroku 之中.

Deploy

  • 輸入剛剛取得的 Channel Access TokenChannel Secret
  • 請記住你設定的 Heroku App ID ,稍後會使用到。

3. 回到 LINE Bot Dashboard 設定基本資料

到你的 “Basic account information” 來設定,以下一些資料需要填好:

  • Callback URL: https://{YOUR_HEROKU_SERVER_ID}.herokuapp.com/callback

好了… 加入你的機器人.開始跟他講話吧.

這份程式碼是最簡單的範例,設定好之後他只會重複你打的文字.更多的功能會放在另外一份.

影片教學

可以根據以下影片的教學來看如何在五分鐘之內部署自己的 LINE Bot

想要修改代碼嗎?參考以下的影片教學吧

還有任何問題?

在這裡留下你的問題,或是在 github 上面開啟 issue 詢問

參考鏈結:

程式設計週記[2016/04/23]: 程式語言是好工具,所以可以掛牆上 (誤)

圖片來自:

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

本週大部分時間再看 KMP 字串比對演算法的進階使用 ACA 演算法,還有玩玩 VS Code. 反而比較少時間看一些網路文章. 單純紀錄就好.

Go

SHRINK YOUR GO BINARIES WITH THIS ONE WEIRD TRICK

這篇教導你透過 go build -ldflags="-s -w" 來將你的 go app binary 變小,根據這篇文章說可以縮小到七倍,似乎有點誇張.不過可以關注看看,瞭解一下方法.

Go Conference 2016 Spring

04/23 在日本舉行的 Golang Conference ,可以看看有沒有什麼有趣的文章.

High-precision indoor positioning framework for most wifi-enabled devices

透過 WiFi 的技術來做高精度的室內定位

A modern and intuitive terminal-based text editor

Micro 一個現代又直覺的 terminal-based editor ,支援基本的一些熱鍵組合與 75 種 syntax highlighter

paper An Implementation and Analysis of a Kernel Network Stack in Go with the CSP Style

網路有關的論文,裡面是用 Golang

JVM Akka.Actor to Go

Akka Actor for Go

A TOTP-based, PiFace powered door lock for Cork’s Forma Labs biohackerspace.

Door lock wite full in Go

Python

Python Taipei Meetup note@Just for noting

紀錄的蠻好的,連 slide 都有整理好.

Android/JAVA/NODE.JS

Docker

iOS/Swift

網站文章

计算机领域的日系书籍

這幾本日文書籍的翻譯書真的都不錯,我的淘寶清單又多了不少書籍.

Line Bot 透過 Let’s Encrypt 來加密 HTTPS 的方法

從 g0v 上面的討論看到,必須要這樣才能讓Line Bot API Server 接受 request 與 callback .

g0v 的 阿美語萌典 Line BOT

重要的是,裡面寫了不少 Line Bot 製作經過上遇到不少的困難點. 這最近在 g0v slack 有不少討論. 主要是因為 Line Bot API 對於 HTTPS 的管制有點 ~bug~ 嚴格,所以很多都會出問題. 有想做 Line Bot 的人可以先看看…

網站收集

COSCUP 2016 開放原始碼貢獻者 VIP 方案

有參加 Open Source 的記得要申請 VIP 方案.不然 COSCUP 很難報名的.

有聲書/影片心得

TechTalk@TW

TechTalk 是台灣很棒的技術podcast 請來將這都還是挺知名的。 不少講題是我蠻有興趣的,包括:

  • Walter (Scala meetup organizer) 講 Scala (不過是 2012)
  • ANT 來講 Redis
  • PCMan 講 LXQt

本週專案

這邊會寫一些我的Project 52的成果.

本週專案: https://github.com/kkdai/aca

演算法的介紹文章本週專案: 繼續深究字串比對演算法,到下一個部分 AC Algorithm ,有興趣的可以看一下.

必須得說: 要在 jekyll 上面搞 Latex 真的很花時間.. 上一次玩 Latex 已經是研究所寫論的時候,語法又都忘光光.. 哈

[字串比對演算法] 從 KMP 到下一個階段 Aho–Corasick (Algorithm) Automation

前提

前一篇文章介紹到字串比對的演算法 KMP 那時候在 Twitter 上面就有人介紹我說其實可以繼續去研究字典樹 (trie) 與 Aho–Corasick Algorithm

所以就開始研究這一篇 slide 想不到意外的有趣.於是也把本週專案也決定改成 AC Automation .

本週專案: Aho–Corasick algorithm automation implement in Golang

開始介紹 Aho–Corasick Algorithm (AC Algorithm)

為何需要 AC Algorithm?

原先在 KMP Algorithm 我們解決了可以在一個長字串 (haystack) 裡面找到所有具有單個字串 (needle) 的位置集合. 並且可以把時間複雜度縮小到 \(O(n + m)\) 其中 \(n\) 是 haystack 的字串長度,而 \(m\) 是 needle 的長度.

那麼.. 問題來了: 如果我們要比對的 needle 是多數個呢? (比如說掃毒程式) 那這時候時間複雜度就會變成以下狀態:

( 題外話: 參考這篇可以在 Jekyll 裡面加上 Latex )

以下是時間複雜度的推導過程: TL;DR \(O(n + km)\) .

透過 KMP 如果要處理多個搜尋字串的時間複雜度

要尋找字串集合 (needles) \(P\) 其中 \(P = { P_1, P_2, ... P_k }\)

目標字串 (haystack) \(T[1 ... m]\)

在 KMP 之中,我們已經知道要計算一個 needle \(P_i\) 的時間複雜度為 \(O( n_i + m)\)

所以要處理多個字串 \(P\) 就必須要經過: ( Latex 有點忘記,詳細推導後補)

\[\begin{align*} ((| P_1| )+ m) + ((| P_2| )+ m) + .... ((| P_k| )+ m) &= \sum_{i=1}^k | Pi | + k*m \end{align*}\]

AC Automation 的時間複雜度

先講結論,要能夠比 KMP 的 \(O(n + km)\) , ACA 時間複雜度為 \(O(n + m + z)\) 其中 \(z\) 是字串重複出現的次數.

建立字典樹

要開始討論 AC Automation 之前,必須要先會建立字典樹.字典樹的建立會是一個類似以下的範例:

這張圖是透過 [say, she, shr, her] 來建立的字典樹 (trie) .但是這個字典樹還沒有建立錯誤索引. 可以看得出來,字典樹就是透過 prefix tree 來建立而成. 這邊的數字之後會討論到.

關於字典樹的錯誤索引

這邊字典樹錯誤索引的建立可以參考 KMP 的 fail index ,但是有些不同. 以下是我的見解:

KMP Fail Index (Function) :

  • 透過單個搜尋字串建立
  • 建立每個字元的錯誤索引 ( fail index )也就是比對到該字元如果發生錯誤,需要退到哪個 index 繼續之後的比對.
  • Fail Index 在 KMP 中特別注意到連鎖字元 也就是 ABCEABC 其中的 ABC 就被認為是連鎖字元. 會直接尋找該字元前面的錯誤索引 (Fail Index) 避免在比對的時候多餘的移動. (這也是 KMP 勝過 MP 的重點)

在 AC Automation 裡面的錯誤處理索引方式跟 KMP 有些不同,整理如下:

ACA Fail Index :

  • 針對處理多個字串
  • 專注在多個字串重複出現的字元,不專注在連鎖字元

以這張圖來看,一開始左邊的 a 標記成 \(a_l\) 而右邊的 a 標記成 \(a_r\) . 以下條列式脈絡給大家了解: 並且將每一個節點編號 [ root(0), \(a_l\) (1) , \(b_r\) (2) , \(b_l\) (3), \(a_r\) (4) ].

  • 將 root node 放入 node list ,並將移動的目標節點 移動到 node list 的第一個 (也就是 Root)
  • 目標節點往 \(a_l\) 走,該點的 fail index 為計算方式為:
    • Parent node 的 fail index 是否有相當的位置 a
    • 如果 Parent node 是 root ,則該點的 fail index 為 root
  • 目標節點往 \(b_r\) (這邊是採取 BFS 走法) ,方法跟 $ a_l $$ 一樣,結果 fail index 也是 root
  • 目標節點 移動到 node list 的第二個 (也就是 \(a_l\) )
  • 目標節點 移動往 \(b_l\) 移動,該點的 fail index 計算方式,如下:
    • 由 \(a_l\) 的 fail index 也就是 root 來看是否有 b 的路徑 ( 有的! 就是 \(b_r\) (2) )
    • 所以 \(b_l\) 的 fail index 記錄為 2 ,也就是說當他往下比對發生錯誤的時候,會移動到 \(b_r\) (2) 繼續比對.
  • 為了確保大家了解,再做一個,將目標節點 移動到 node list 的第三個 (也就是 \(b_r\) ) ,並且往 \(a_r\) 移動. 他的 fail index 計算如下:
  • 由 parent \(b_r\) 的 fail index (也就是 root ) 往下看是否有 a
  • 有找到由 root 出發的 a 也就是 \(a_l\) (1)
  • 將 \(a_r\) 的 fail index 記錄為 1

這裡的時間複雜度為 \(O(n)\) 其中 \(n\) 就是每個字串建立ACA 的時間.

AC Automation 的查詢

假設我們透過 [she, his, hers, he] ,建立了以下的AC Automation .

並且我們有一個字串 haystack = ashersa 來做搜尋的用.我們的思考脈絡如下:

  • 挑出第一個字 haystack[0] = a,從節點 root (0) 開始,沒有a 的路徑,往下
  • haystack[1] = s,(0) 有 s 的路徑,往節點 (3) 走
  • haystack[2] = h,(3) 有 h 的路徑,往節點 (4) 走
  • haystack[3] = e,(4) 沒有 e的路徑,往 fail index (1) 走,並且走到 (2)
  • haystack[4] = r,(2) 有 r 的路徑,往節點 (8) 走
  • haystack[5] = s,(8) 有 s 的路徑,往節點 (9) 走,並且找到整串字串 hers
  • haystack[6] = a, (9) 沒有 a 往 (0) 走

搜尋的時間複雜度為 \(O(z + m)\) 其中 \(z\) 就是每個字元重複出現的次數.

心得

AC Algorithm 其實寫程式的部分並不難.如同所有樹狀結構的演算法一樣,如何能夠清楚地呈現,並且能夠清楚的除錯才是困難的.

不過,由於 Latex 忘得差不多.這一篇寫起來,在弄 Latex 的時間反而是最多的. 哈..

參考文章

[Golang] 深入研究 Visual Studio Code for Golang

前提

Visual Studio Code (以下簡稱: VS Code) 是微軟的跨平台的開源 IDE ,目前已經進入了 1.0 的正式版本. 由於功能強大,預設就能 debug python, node.js 與 java script .玩了一兩天,將所有與 Golang 相關常用到的情境加以記錄下來,希望能夠幫助到某些人.

阿鬼,你還是講英文吧!!

第一次安裝 VS Code,會發現他有一個相當”貼心”的功能.就是他會幫你的 IDE UI 選取到中文介面. 貼首先,先修改 locale 將”中文” VS Code 改回英文介面:

  • 按下 F1 點選 “設定語言”
  • locale 改成 “en-US”
  • 重啟 VS Code

安裝 vscode-go

  • 安裝 VS Code 1.0.0 以上版本
  • cmd-shift-p
  • Install Extension
  • Go

vscode-go 基本設定

  • cmd + ,
  • 如果你使用 homebrew 可以設定
    • "go.goroot": "/usr/local/opt/go/libexec",
    • 如果不是記得將該目錄指向 $GOROOT

常用熱鍵:

  • (F1 或是 Shift + cmd + p) command palette:
    • 呼叫出命令列,可以跑一些 IDE 的指令:比如說安裝 extension 那類的.
  • (F2) Rename (gorename):
    • 可以快速幫你把整個專案裡面的變數修改名稱,就像是 VS 跟 XCode 裡面的 Refactor.
  • (F5) Debug :
    • 直接幫你 compile 目前的專案,並且直接進入 debug 模式.就像是 VS 一樣,使用起來相當的方便. 並且可以透過以下的 hot-key 來進行 debug :
      • F5 continue
      • F10 step over
      • F11 step into
      • SHIFT+F11 step out (目前 delve 尚未支援)
      • SHIFT+F5 stop
  • (F8) Go to Next Error or Warning:
    • 可以快速切到如果有任何 error 或是 warning 的部分. 要切換到前一個,可以試著 (Shift + F8)
  • (F12) Go to Definition (godef):
    • 跳到 function 定義的地方,就如同 VS 裡面的 F12 是相同的.
  • (Shift+F12) Show References (guru):
    • 跳到參考的地方,跟 F12 是成對的. 當你跳到 function 定義的地方,可以透過這個跳回呼叫 function 的地方.
  • (Cmd + =) 縮放整個畫面:
    • Zoom in : Cmd + =, Zoom out: Cmd + -
  • (Cmd + Shift + n) 開啟新的 IDE
    • 當你要開發多個專案(應該超容易使用到),就必需要使用這個 hotkey .

自訂 task 部分 (for build, test, install)

以下修改的 task.json 是每個專案都需要改一次.目前該專案打算整合成預設,但是還沒完成 (參考: issue 287, issue 21 )

首先按下 F1 呼叫出 Tasks: Configure Task Runner .貼下以下的部分,記得 gopath 要改

{
    "version": "0.1.0",
    "command": "go",
    "isShellCommand": true,
    "showOutput": "silent",
    "options": {
        "env": {
            "GOPATH": "YOUR_GO_PATH"
        }
    },
    "tasks": [
        {
            "taskName": "install",
            "args": [ "-v", "./..."],
            "isBuildCommand": true
        },
        {
            "taskName": "test",
            "args": [ "-v", "./..."],
            "isTestCommand": true
        }
    ]
}

更多 task 相關設定可以參考官方文件

就可以執行以下的部分:

  • (Shift+cmd+B) Go build:
    • 編譯當下這個專案全部的檔案.

[ 2016/05/17 更新: 原本 1.0.0 是可以透過 Shift+cmd+T 跑 Go Test,不過在 1.1.0 被改成 Reopen the Close File.

要增加跑 Go Test 的 Keyboard shortcut ,需要透過以下流程:

[Code]->[Preference]->[Keyboard Shortcuts] 新增以下的設定.

// Place your key bindings in this file to overwrite the defaults
[
    { "key": "shift+cmd+r",           "command": "go.test.package" },
]

你就可以透過 Shift + cmd + r 來跑 Go Test

更多與 Golang 熱鍵有關的問題,可以比對 keymapvs-code 的 tools

解決 build error

如果跑 go build 發現有一堆的 error 在顯示視窗,該如何快速切換到錯誤的地方? 這時候可以按下 F8

常用情境

注意: 關於 debug 設定 launch.json 是跟著專案走,每個專案都得設定一次.

Debugging Application

當你透過 folder 打開你的專案目錄. 然後直接按下 F5,就是那麼簡單. 這時候會先跳出設定選項 launch.json 要填.你如果要 debugging application 就直接存擋關閉就好了.

記得要用滑鼠加上一些 breakpoint ,並且用 F10 來做簡單的 step over debugging. 其他關於 debugging 視窗的部分就跟 Visual Stido 很像就不多加解釋.

Debugging “go test”

go test 是 Golang 內建的 unit testing 的方式,所以很多 package 其實可以很快速地將所有的 unit testing 完成即可. 就不需要很麻煩的寫出相關的 CLI 就可以完成所需要的測試單元. 要來 debug go test 其實不難,只要依照以下方式即可:

  • 修改 launch.json 將以下參數改掉:
  • "mode" = "debug", 改成 "mode" = "test",

直接按下 F5 就可以 debugging go test

當然,你也可以直接選取部分的測試項目,透過 F1 來呼叫出 command palette 然後直接執行:

  • Go: Run test at cursor: 僅僅跑目前游標 function 的測試項目.
  • Go: Run test at cursor package : 跑目前 package 的測試項目.
  • Go: Run tests in current file: 僅僅跑目前檔案的測試項目.

Debugging with attach

目前還在測試,感覺我手邊的 delve 在 attach 方面有些問題.

關於要用 vs code debugging CLI , 想要跑 vs code 去 attach 看起來有點問題.. 回過頭來說 delve debug 看起來對於 bufio.scanner 會跳掉… 又得花時間去看 delve. gdb 就沒這個問題. 持續觀察與更新.

讓你在 Mac Terminal 直接把 VS Code 叫起來

  1. Open Visual Studio Code
  2. Open the command pallette with Command + Shift + P (or F1)
  3. Type Shell in command palette
  4. Select Shell Command: Install code in PATH from suggested list

img

心得:

目前還在持續使用,雖然可以將 Python, Node.js 跟 Golang 全部整合在同一個 IDE ,不過因為他是 Project-based 你還是得開很多個 IDE .

優點:

  • 整個 debugging 的體驗是相當的驚人,就像是使用 Visual Studio 在 debugging C/C++ 一樣.
  • 整合多個程式語言,使用起來可以相當的快速.(當然前提你把他的 keymap 用熟了)

缺點

  • go build, go installgo test 目前都得透過 task 設定的方式,而且是以 Project-based 有點累贅.
  • Debugging CLI with input 看起來有些問題,不過這一點我保留,因為我還要查看一下是不是 delve 造成的問題.

[TIL] 使用Visual Studio Code 來 Debugging Golang

VS Code Debugging for Golang:

前幾天正式邁入 1.0 的 VS Code,不少 Redit 上面有討論到似乎很好用?

其實 CS Code 的 Golang debugging 就已經很吸引人,但是因為MacOSX上面要使用 Delve 需要跑 Codesign流程 實在很煩人.

最近有兩個 Golang IDE 的更新都圍繞 delve

  1. VS Code 正式邁入 1.0
  2. LiteIDE 釋出新的版本 X29
    • 也是支援 delve
    • QT5 支援

於是週末很認真的把 delve 好好的設定起來. (Mac OSX 上面的codesign 實在有點討厭)

依照官方作法,一直會失敗而無法讓 delve 無法正常載入就會出現

	"delve could not launch process: could not fork/exec"

重新跑了兩次,在灰心的狀態下重開機.. 竟然就成功了..

原來設定完 codesign 一定要重開機…

原來設定完 codesign 一定要重開機…

原來設定完 codesign 一定要重開機…

全部金鑰簽署的設定流程

以下提供中文版本的設定方式,避免有人看不懂:( 如果我沒有特別寫的,請盡量就不要改)

  • 打開「鑰匙圈存取」的系統App
  • 選單「鑰匙圈存取」-> 「憑證輔助程式」-> 「製作憑證授權..」
    • “名稱” -> 請打入 “dlv-cert”
    • “識別身份類型” -> “自簽根 CA “
    • “使用者憑證” -> “代碼簽名”
    • 選取 “覆蓋預設值”
    • 點選 next
  • 第二頁,憑證資訊有效日期:
    • 從 365 -> 3650
    • “簽署邀請” 取消點選
    • 點選 next
  • 個人資訊: 不改->點選 next
  • 密鑰配對資訊: 不改->點選 next
  • 為此 CA 使用者指定密鑰配對資訊: 不改->點選 next
  • 此 CA 的密鑰用法擴充欄位: 不改->點選 next
  • 此 CA 使用者密鑰用法擴充欄位: 不改->點選 next
  • 此 CA 延伸密鑰擴充欄位: 不改->點選 next
  • 此 CA 使用者延伸密鑰擴充欄位: 不改->點選 next
  • 此 CA 基本限制擴充欄位: 不改->點選 next
  • 此 CA 使用者基本限制擴充欄位: 不改->點選 next
  • 此 CA 的主題替用名稱擴充欄位: 不改->點選 next
  • 此 CA 使用者的主題替用名稱擴充欄位: 不改->點選 next
  • 指定憑證存放位置
    • 鑰匙圈從 “登入” -> “系統”
    • 輸入電腦admin的帳號,密碼
  • 打開原來 「鑰匙圈存取」到 -> (左上角)「系統」->(左下角) 「憑證」
    • 會看到你剛剛加入的憑證,點擊兩次.
    • 「信任」改成 “永遠信任”
    • 輸入電腦admin的帳號,密碼
  • 最重要的事情來了
    • 重開機
    • 重開機
    • 重開機
  • 就可以跑 codesign -s $GOBIN/dlv

[更新] 除了重開機以外的方法

可以試著將taskgate 重啟,方法如下: sudo kill pgrep taskgated

參考 Visual Studio CodeによるGo言語のデバッグ

測試方式:

到一個你的 Go Project 位置,並且打上 dlv debug 如果沒有出現 delve could not launch process: could not fork/exec 就是 codesign 成功.



小小心得:

使用 VS Code debugging Golang 畫面還不錯.整體流程也很簡單.就是按下 F5 直接編譯並且開始 Debug . 透過滑鼠可以設定 breakpoint, F10 可以 Step . 發現了嗎? 就是整套的 Visual Studio 的熱鍵.

沒有 Integrated Console (我有發 issue 要加入這個功能但是一直被擱置) 要邊 debug 邊輸入資料可能有點困難. (還在想怎麼弄)

有點麻煩是… 就算要 go build 都需要建立一個 task 才可以. 如果直接要 debug 可以按下 F5 .

結論:

我寫 Golang 應該會繼續使用 vim + vim-go 因為目前比較熟悉. 如果有 debugging 的需求才會考慮使用 vscode ,畢竟有個 IDE 設定變數名稱跟 step debug 還挺方便的.

此外,由於 VS Code 還支援 Python 跟 Node.JS . 所以之後我有考慮好好的重要 VS Code.