[學習心得][Golang: Gotip] 快速嚐鮮 Go Proposal 45713 'Muti-Module Workspaces'

image-20210819214237647

摘要

Vendoring 跟 Dependency Management 是 Golang 一直想要解決的問題,透過了 go mod 原本可以管理第一層的套件。透過 go mod vendor 你可以下載完相關的依賴的套件在本地端的 vendor/ ,如果要改上一層的 dependency 就可以直接修改。 但是如果你要改的 Denpedency 上一層跟他的更上一層的 檔案呢?

以往作法可以透過 go mod edit 來一個個修改,但是一但檔案很多的時候就會相當的複雜。 有什麼方式可以快速在 local 做一些確認,也才好去發 PR 到 upstream 去? 這邊介紹一個正在做最後審核(如果通過了,預計是 go 1.18 的功能: Multi-Module Workspaces )。

Proposal 作者很貼心,還發了有著大狗狗的 Demo Video 。必須說~因為有隻可愛的大狗~我乖乖的把 proposal 看完了。

如何安裝

# 取得最新版本的 golang source code
> go install golang.org/dl/gotip@latest

# 下載某個 CL base 的 gotip 
> gotip download dev.cmdgo

# 看一下修改後的相關指令,注意 initwork, editwork ...
> gotip help mod

The commands are:

	download    download modules to local cache
	edit        edit go.mod from tools or scripts
	editwork    edit go.work from tools or scripts
	graph       print module requirement graph
	init        initialize new module in current directory
	initwork    initialize workspace file
	tidy        add missing and remove unused modules
	vendor      make vendored copy of dependencies
	verify      verify dependencies have expected content
	why         explain why packages or modules are needed

Editor (VSCode) 要怎麼改

[Preference] -> [Setting] -> [Extension]

image-20210820171314071

如果改成 gotip 這樣可以讓 VSCode 裡面的 Go 使用到最新版本的 gotip 來用最新功能。

如何使用 Muti-Module Workspaces

情境假設

現在有兩個套件:

  • https://github.com/kkdai/iloveptt
  • https://github.com/kkdai/photomgr

其中 https://github.com/kkdai/iloveptt 會引用到 https://github.com/kkdai/photomgr 套件。 以往在修 bug 的時候,需要回到他的 upstream photomgr 去修。 這時候只有兩個方式:

  1. 先發 PR 到 photomgr,然後進版號。 iloveptt 在抓新的版本,再來測試。
    1. 這個有時候會有一個問題,就是 local module cache 會造成你的困擾。要抓好幾次才會看到新的版本。
  2. 透過 Vendor 的方式,先改 local 。但是很多時候會忘記要送 PR 到上一層。

可以透過 module replace 來改,但是每一個得寫一次,如果你用到很多個檔案,就會相當的複雜。

如何透過 Muti-Module Workspaces 解決問題:

這時候解決方式為: (註解: 以下 gotip 因為是嘗鮮版本,之後整進去後就會使用 go )

  • 在上一層 /Users/evanlin/src/go/src/github.com/kkdai 使用 gotip mod initwork iloveptt photomgr

就這麼簡單,現在修改檔案 https://github.com/kkdai/photomgr 不用在送 PR 了,可以先在 Local 改。 改完後再分別送 PR 即可。

相關文章:

[TIL] eBPF Summit Day1 Quick Notes

image-20210819150523189

摘要

eBPF (Extended Berkeley Packet Filter) 是近幾年對於 dynamic tracing 裡面一個很知名的技術。 由於 Observability 受到了大家的重視,在網路層面或是 SRE 應用上都有許多相關得說明與文章。 eBPF Summit 2021 集結了許多業界知名人士,並且帶來相當多基本的介紹,歡迎大家也可以了解。

什麼是 eBPF (轉)

動態追蹤技術(dynamic tracing)是現代軟體的進階除錯和追蹤機制,讓工程師以非常低的成本,在非常短的時間內,克服一些不是顯而易見的問題。動態追蹤機制如果內建於作業系統,那麼使用者層級的程式即可隨時採集資訊,構建出一幅完整的軟體樣貌,從而有效地指導我們做一些很複雜的分析。這裡非常關鍵的一點是,它是非侵入式的。如果把軟體系統比作一個人,那我們顯然不想把一個活人開膛破肚,Berkeley Packet Filter (BPF) 最初的動機的確是封包過濾機制,但擴充為 eBPF (Extended BPF) 後,就變成 Linux 核心內建的內部行為分析工具包含以下:

  • 動態追蹤 (dynamic tracing);
  • 靜態追蹤 (static tracing);
  • profiling events;

(以上資訊摘自:宅色夫 Linux 核心設計: 透過 eBPF 觀察作業系統行為)

eBPF Summit 2021 研討會資訊

eBPF Day 1

The State & Future of eBPF / Thomas Graf

這次的 keynote 也相當知名,第一位就是 Thomas Graf 身為推廣者之一,會跟大家介紹目前的狀態跟未來的發展。

Getting Started with BPF observability / Brendan Gregg

第二個算是頂尖的知名人士,身為 NETFLIX 的工程師之外, 並且他也是兩本知名書籍的作者:

他的知名事件就是 An Unbelievable Demo - Brendan Gregg (有人翻譯成中文 我的开源代码被科技巨头偷了,对方还跑到我面前演示 )

第一天其他議程都專注在 Observability 可以好好學習。

image-20210819152102715

image-20210819152107812

其他議程可以慢慢了解。

影片

Reference

APCSCamp 2021 活動分享 - 如何學好程式設計,一起來 LINE 實習

前言

大家好,我是 LINE Developer Relations 團隊的資深開發技術推廣工程師 - Evan Lin 。主要的工作項目就是平台技術推廣與技術品牌的建立與溝通。 這是很開心能跟 APCSCamp 2021 (程式設計能力培訓營) 合作,很榮幸能代表公司跟同學們分享如何將程式設計學好,並且如何才能來 LINE 做實習生。

關於 APCSCamp 2021

何謂APCS

  • APCS 為 Advanced Placement Computer Science 的英文縮寫,是指「大學程式設計先修檢測」。其檢測模式乃參考美國大學先修課程(Advanced Placement,AP),與各大學合作命題,並確定檢定用題目經過信效度考驗,以確保檢定結果之公信力。在台灣, APCS 是目前衡量國高中生程式能力最有公信力的一個指標:目前有 31 所大學, 38 個科系,設立了 APCS 組,將 APCS 納入入學的門檻。

緣起

  • 近年來,隨著人工智慧崛起,資工系竄升成一大熱門科系,大家開始關注要進入資工系所需具備的能力,而 APCS 也因此備受家長關注。補教業者更積極把握機會,使 APCS 的補教課程如雨後春筍般設立。然而,我們發現補習班的課程教材品質參差不齊,且其中一些還有不少進步空間,有些題目的解答甚至是錯誤的。除此之外,我們也發現這些 APCS 的課程大多集中在大臺北地區等大都市。
  • 為解決以上問題,我們決定利用我們的專業能力,在 2021 暑假舉辦一個針對初學者,以 APCS 考試大綱規劃課程內容的線上營隊。雖然線上營隊的舉辦較實體多了許多限制,但考量疫情趨勢與我們期望打破地理限制的初衷,我們仍決定線上舉行,期望讓全臺各地想精進程式能力的初學者都能參與。

(相關資訊來自於: APCSCamp 官方網站

這一次很開心能夠支持 APCSCamp 2021 (程式設計能力培訓營) 並且透過廠商分享議程來跟同學們見面。

演講: 如何學好程式設計,一起來 LINE 實習

投影片投影片鏈結

參與同學

主要的參與同學為 APCSCamp 的學員(高中同學),主要有「語法班」與「算法班」兩個班級。並且也有工作團隊的一起共襄盛舉。

關於 LINE 服務的介紹

一開始先跟每一位同學介紹 LINE 服務的發展歷史,從 2011 年在日本啟動 LINE 的服務之後,到了今年( 2021) 也剛好十年了,十年來的成長從溝通的平台,轉變成每一個使用者的生活平台。

LINE TODAY

作為大家天天會用的主流新聞平台,除了日常提供大家許多新聞相關題材外,其實裡面也含有許多不同的內容,如:賽事直播(近期很火紅的 NBA 季後賽也有轉播)、電影訂票、選情專區、泰國限定的樂透、電影…等等,擁有這麼多功能都是為了讓用戶可以在 LINE TODAY 中看到大家最新、最值得關注的內容。擁有這麼多功能的平台,同時也是一個跨國的產品,同時也提供給泰國、印尼以及香港。

更多資訊,大家可以參考 LINE TODAY

LINE 購物 / LINE SHOPPING

電商已成為現代人不可或缺的一部份,在本次的議程中很詳細地透過不同的例子(母親節、送禮優惠…)來解釋在 LINE 電商服務中的不同使用情境,讓大家可以更快速的了解透過 LINE 來購買相關東西時的好處以及可用性。

更多資訊,大家可以參考 LINE 購物

LINE 熱點 / LINE SPOT

LINE SPOT 團隊是主要是開發 O2O (Online to Offline) 及活動相關的服務,LINE SPOT 是一個以您所在的位置為起點,讓您可以在上面看到各式店家的優惠資訊,把線下的資訊整合到線上的一個全新的服務。 更多資訊,大家可以參考 LINE 熱點

如何學習好一門程式語言? (以 Golang 為例子)

因為參與演講的同學們都是高中同學,而且課程主要內容都是以 C++ 為主。 所以我透過學習一門新的程式語言 Golang 作為一個範例。來解釋如何學習一門新的程式語言。

在學習 Golang 程式語言的路途上,我建議每一位朋友都不要去了解太多關於 Golang 的設計理念,也不需要知道語言特色,更不要貿然去了解太多關於運作的原理。 建議很重要的事情就是:

先下去試著寫幾個應用

透過寫一兩個應用,你可以獲得相關的知識:

  • 如何可以順利的完整編譯 (compile) 一次 Golang 的應用。
  • 如何可以設定相關環境,當然有可能是透過 Golang Playground
  • 可以快速讓自己熟悉一些基礎的語法。

透過這些方式,你可以迅速讓自己可以快速擁有開發環境與第一個開發出來的應用。 這個途中,可能會遇到許多的問題?

  • 如何編譯 Golang
  • 如何跨平台編譯
  • 如何存檔案自動修正排版

學習一門新的程式設計語言沒有什麼訣竅,首要條件就是要先試著打造東西。

主動學習,遇到問題,找出來,紀錄下來,分享出去。

學習程式語言的時候,許多時候我們都會有一些疑問?

  • 該怎麼寫 for 的語法?
  • 該怎麼將遞迴改成 for ?

建議遇到問題可以將問題丟到搜尋引擎去找資料,這時候找到了解答後記得要多嘗試幾次。並且趁著印象深刻的時候,將找到的解答寫成一篇文章。

這樣做有許多的好處。很多時候尋找到的答案,不完全是你希望的解答。但是經過你的嘗試與探索之後,最終找到了真正的解答。 然而這樣的探索過程與解答,很有可能容易遺忘的。透過這樣的主動式的學習,你一路上會遇到很多問題,比如說:

  • 想要寫 recursive 忽然發現,不會編譯
  • 編譯玩了,發現 recursive 卡住了
  • 學習到如何 debugging
  • 找到問題點,修改後成功了。

所以透過主動學習有以上許多的好處,並且透過記錄下來。你會在腦中在思考一次整個流程,比如說:

  • 當初無法編譯的狀況? 原因是什麼?
  • 正確解決問題後,修改的部分什麼喔?

相關的流程都是一個很好幫助你以後回想的流程。

費曼學習法 : 分享,重學,簡單化比喻

這裡補充一下,諾貝爾物理獎獲得者 理查德•費曼(Richard Feynman),費曼的方法很簡單,但卻非常有效果。只有四步:

  • 選定一門知識,學習他
  • 想像跟一個新生,教導他
  • 重學,然後學得更深入
  • 用簡單化的比喻方式

這些流程被稱為「費曼學習法」是許多人公認的有效學習法,筆者認為這也是我相關的學習法。 下一步就是要去「分享」。

透過分享,想像跟一個初學者解釋。

不論是跟同班同學的讀書會心得報告,或是在社群裡面的分享。因為要跟不懂的人講解某些知識,你自己會有相當多的疑問,這時候可以試著在學一次。把相關的疑問都釐清,自然而然你懂的透徹,就越能夠跟人用簡單的比喻來解釋。經常聽到許多前輩分享到一件很重要的事情:

一個人懂的多深入,就看他能不能把一件很複雜的事情用越簡單的事物來解釋。

當你覺得你不會解釋的時候,其實要小心。往往是你只有一知半解的狀態,同學們也要注意了。

如何才能學習許多跨國(外商)公司經常使用的技術?

這邊是許多外商或是跨國服務經常使用到的一些技術,那麼究竟要如何在學生時代能夠快速地並且有效率的學習到這些相關的技術呢?這時候就要推薦大家可以申請 「LINE 的技術新星實習計畫: LINE TECH FRESH 」,

TECHFRESH 介紹與相關福利

LINE 台灣工程團隊每年透過 LINE TECH FRESH – 技術新星人才計劃,招募資訊科技相關科系,或對此領域有所涉略的大學生 / 研究生加入 LINE 團隊進行長期實習 (一年期),讓同學們能在國際級科技公司中觀摩學習。LINE TECH FRESH 由經驗豐富的技術專案經理帶領團隊,接觸多元化的專案與產品開發,學習業界實際的軟體專案分工,並體驗跨國團隊合作。往年工作內容包含 server、web、mobile app、chatbot、IoT、data、DevOps 等領域,並透過實習熟悉 LINE 平台系統、SDK、API 等。值得一提的是,LINE TECH FRESH 是有給薪的實習機會,對於軟體開發有熱情、有想法的同學們,千萬別錯過這個揮灑創意與衝勁的機會!

更多關於 LINE TECH FRESH 介紹文章有:

這裡可以讓大家了解一些相關福利有:

新的辦公室大樓

2021 的五月開始, LINE 正式搬到新的大樓,嶄新的設施與更具彈性的辦公空間,可以讓同學們發揮更多創意。

新進同仁訓練與內部相關活動

許多新進員工都要適應許多公司的文化與規矩,更重要的是要能夠快速認識相關的部門與一起進來的同學們。 以往正職的工程團隊成員都會到日本總部去做相關訓練,從 2020 年因應疫情的原因,改成在台灣辦公室的訓練,但是活動更加有趣跟豐富:

  • CTO 介紹工程團隊組織
  • 開發者關係部門介紹相關對外與對內的活動
  • 資安團團隊的基礎資訊安全特訓
  • 資料工程團隊介紹 AI 在 LINE 在地服務的應用
  • 其他部門的相關介紹。

重要的是,有手足球比賽來讓新進同仁(包括實習的同學與正職同仁),都可以一起分隊競賽,增進感情。

更多相關文章:

內部創意發想: LINE Internal (AI) Hackathon

今年即將舉辦第三屆,LINE 台灣的內部同仁 AI 創意競賽。 每一年都是同仁們發揮創意的時間。 透過 AI 技術的輔助與幫忙,一起來讓許多在地化服務能更貼近使用者。

相關文章:

最後:

希望每一位參與高中營隊的同學,能夠了解學習技術有效的方式。在往後大學的課程中,能夠更有效率的學習,分享,再學習。也期許每一位營隊成員,我們有機會能在 LINE 的辦公室內一起努力相互成長。

關於 LINE 開發者官方社群

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[TIL] 透過 VSCode 寫 Markdown 貼圖的利器 - Markdown Paste

VSCode Plugin - Markdown Paste :

完整 Github: https://github.com/telesoho/vscode-markdown-paste-image

你是用哪一套工具寫部落格? 之前喜歡使用 Typora (這邊可以看我寫的文章) 。 寫起來雖然很快,但是由於使用 github page 加上後台是 Jekyll 的原因,貼圖的時候總是相當的不方便。

最在查詢筆記軟體的時候,看到了這個 VSCode 的 Plugin - Markdown Paste ,覺得相當好用。

有幾個大家一定會寫歡的功能:

直接貼上剪貼簿圖片

快速鍵:(MacOSX: Command + Option + V )

這個功能相當好用(主要也是為了這個功能來用的)。有一個比較麻煩的是,下載的圖片位置預設會放在 ./ 這邊可以稍微修改,透過修改設定就可以。

進去去直接修改 MarkdownPaste.path,以我的 case 就是改成 ./../images/2021。這樣一年改一次就好,圖片也可以保留在我的 Github 上面,不怕找不到。

上面這張圖就是透過剪貼簿,馬上貼上。真的很方便,也不用管命名問題。(你之到 RD 很怕叫他取名字,檔案名稱也是一樣 XD)。

其實還有很多功能,大家可以到 Marketplace 網頁去查看。我也會持續研究,慢慢看有哪些習慣的功能。

Typora 沒有嗎?

(更新 2021/08/10) 貼完臉書後,看到社群大大們的建議,發現好像 Typora 今年也有相關的更新了。其實今年(2021/02)的版本更新 (0.9.9.32) 更新的 (Typora 更新)。但是實際使用後,發現需要相關的設定如下。

  • 需要修改複製圖片到「自訂資料夾」(注意原本的變數要移除)

  • 因為檔案要放到 github page ,記得要優先使用相對路徑。

相關文章:

[TIL] Apple notes (Apple 備忘錄) 的匯出策略

前言:

Apple Notes (也就是 iOS / Mac OSX 上面的「備忘錄」) 是一個強大而且可以快速寫筆記的工具,支援簡單的 markdown 語法跟可以使用剪貼簿來貼圖片,其實對於許多使用者而言是相當的方便。 但是如果不小心上了 iCloud 就會全部將資料上了雲端,對於資安控管而言可就不妙了。 本篇文章記錄一些相關的搬遷方式,可以讓你將 Apple Notes 來匯出。

小心上雲端

首先要先注意,對於 Apple notes 而言本身並沒有分「雲端」與「本地端」的差別。只要你不小心將你的筆電 Apple Notes 連上了 iCloud 就再也無法順利存取到本地端。

有資安疑慮,絕對不要用 Apple Notes 上 iCloud!
有資安疑慮,絕對不要用 Apple Notes 上 iCloud!
有資安疑慮,絕對不要用 Apple Notes 上 iCloud!

不小心上了雲端,怎麼還原為「本地的 Apple Note」

這邊有點麻煩,其實簡單地答案是。「辦不到」

可能做法有以下幾個:

  • 備份為 PDF 然後刪除文章(無法匯入 Apple Notes)
  • 切斷網路,然後砍掉 iCloud 資訊。
  • 文章不多使用傳送來維持格式。

如果文章不多,可以用傳送。

為了維護格式的問題,可以透過傳送 (Air Drop )來傳送。

  • 使用 iCloud 的手機(砍掉的資訊,會再刪除資料夾)
  • 救回該筆記,然後將該筆記透過 Airdrop 來丟到 MacOSX。
  • 如此重複,一篇一篇來丟。

即便你成功轉移到本地端 Apple Notes 筆電更換的時候,就必須要備份電腦

由於本地端的 Apple notes 存放地點在隱藏的 data 資料夾中,且格式也不好還原。 如果要換電腦得時候,可能就是要使用 Apple 筆電備份跟還原的功能。這樣也有可能會踩到資安控管的領域。

最近另外找到一個方式,就是換到 Bear notes

Bear notes App 是一個很強大的筆記軟體,使用 Markdown 作為語法外,使用標籤與相互串連的方式。讓你整理資訊更加的方便。而且他提供一個方式可以將 Apple Notes 搬移到 Bear Notes。

Migrate from Apple Notes 這篇文章教導你透過一個小工具,可以把 Apple Notes 備份出來,然後透過 Bear Notes 強大的 Import 功能可以匯入到他的筆記之內。加上 Bear Notes 如果沒有付費,本身也是將資訊存在本地端。並且可以透過 Backup and Restore Your Notes in Bear 來備份你的 Bear Notes 。(作為電腦更換時候使用)。

目前會朝向這個方向,繼續研究中。

額外:

其實我一開始都使用 Markdown 加上 vscode 來管理筆記,搜尋起來也快也可以放在雲端資料夾控管。但是不能直接從簡貼簿來貼圖片。現在看到這個可能會考慮一下。

https://github.com/telesoho/vscode-markdown-paste-image

這個我也可能會考慮一下。

相關文章:

[學習心得][Golang] 透過 Golang 來做檔案反解析 Macho for Reserve Engineering by golfing

前言:

Mach-O (Mach Object file format) 是存在於Darwin, Mac OSX 與 iOS 等系統上的執行檔格式。

如果想要做 Reverse Engineering 或是更深一層的 execution file parsing 。 原本系統上有官方套件 https://pkg.go.dev/debug/macho 可以供使用,但是沒那麼清楚(好用)。 有人寫了一套 https://github.com/blacktop/go-macho 。快速玩了一下,覺得還不錯,可以看看。

Mach-O:

Mach-O (Mach object file format) 是一個廣泛被用在Darwin, Mac OSX 與 iOS 上的執行檔格式。如果需要返解析相關資訊,可以過官方的套件:

官方套件 :

民間開發套件:

優點:

  • 有比較清楚的 summary

如何使用:

  • 檔案開啟可以使用 relative path 或是絕對位置。 絕對為止可以透過

  • realpath xxx
    
  • 需要安裝 realpath 可以透過 brew install coreutils

  • 當然也可以使用 relative path 。

範例 for blacktop/go-macho

成果

相關文章: