[研討會心得] 2020/09/23 Golang#54 @LINE

前言

大家好,我是 LINE Taiwan 的 Tech Evangelist - Evan Lin。這次很開心受到 Golang 社群的邀請,參加了 “Golang Taipei Gathering #54” 的聚會活動,並且分享 Golang 開發的一些技巧與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓 Golang 更受到人了解。

Golang in LINE MUSIC TW - Wei@LINE Music

介紹 LINE Music 中主要使用到的 Golang 套件與相關的經驗分享。

errors x stack x info - Hsueh-Tsung Kuo @Rayark

投影片: https://hackmd.io/@fieliapm/Bk48ziTj8#/

首先講者先介紹了 Go Error 系統的一些常被人詬病的問題:

  • error 包含的資訊過少
  • 不容易瞭解錯誤,拆包(摘解 error)與包裝

Go 1.13 的 error

可以參考一下這篇 Working with Errors in Go 1.13 ,可以透過 Warp 跟 UnWarp 來包裝與拆解 Errors 。

  • 有沒有辦法 Inspect ?
    • 透過 error.Is() 來判斷是不是同一個,或是透過 error.As()判斷是不是同一種類別 (type assertion)。
  • Go Error system sucks, 可以參考 Rust 的 error handling 與 Trait std::error::Error

  • https://github.com/pkg/errors 不錯用,但是無法解析底層的 errors (因為跟底層的 standard error 不相容)。參考文章 Can new Go errors wrapper replace pkg/errors?

參考鏈結

活動小結

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

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

關於「LINE開發社群計畫」

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

[研討會心得] 2020/09/22 BECKS.io #7 聚會心得

大家好,我是 LINE Tech Evangelisgt – Evan Lin。LINE 一直以來不遺餘力地提升資訊安全,除了以 DevSecOps 的概念為基礎,將資安 DNA 注入 LINE 產品與服務,更積極促進整體資安生態圈的成長。 而 Beer is beautiful, hacks is amazing, BECKS is gold. BECKS是Beer與Hacks兩個字所組成。 透過一系列的 BECKS.IO – Security Meetup 資安社群活動,為韓國、日本、台灣等地的優秀資安人才提供當面交流、建立良好連結的機會! 本次 BECKS.IO 小聚選於台北的 Avenue 舉辦,邀請台灣的講者們,在輕鬆開放的氛圍中,暢談不同企業與個人的資安思維及實務經驗,並展望相關技術的未來發展。

KKTIX 活動網頁: 活動網址

Detect and track Apple devices for fun and profit - Ta-Lun Yen / TXOne Networks (Trend Micro) Threat Researcher

來得太晚,只聽到後半段。主要講解關於 Apple裝置的一些溝通與互動方式。不論是討論的 BLE 還是 Hotspot 的溝通方式。也有提到 Airdrop 的部分。

內容大多是溝通方式,可能有的資安疑慮。 現場也展示了透過軟體來掃出所有在場藍牙裝置的 uuid 與 MAC address。

From NLP to Neural Network based Malware Detection - aaaddress1 / Chroot member

原始論文: https://github.com/Lancern/asm2vec

講者網站: https://30cm.tw

惡意程式 (malware) 的 syntax pattern (from assembly call)

  • uExitCode -> intterup

如何防禦 Malware

  • 把程式切塊,找尋可疑區塊。

是否可以借助「語義學」模型來找出 malware 判斷方式

缺點:

  • 指令與指令間的關係 (for loop 回傳 pattern)
  • 大量改版,變種的 malware 。
  • 根據舊的 malware 新增索引包,很容易被判斷跳脫

語義學(semantics)介紹

  • 根據一個詞的前後文來判斷文字本身的意思
  • e.g.
    • I drink beer, I drink wine.
    • I guzzle beer, I guzzle wine.
  • 透過共生矩陣表 (tokenFeq) 來找出前後文出現頻率,有出現 +1 。
  • 透過詞頻率畫出的折線圖,可以找出類似的詞。 (e.g. drink and guzzle)
  • cosine similarity

為何不直接用 semantics 分析方式?

  • 如果有新的詞出現,造成 tokenFeq 得重新建立(訓練)

所以,本次分享將用 distributed memory sharing 方式來建立,而非使用共通的 tokenFeq 。

透過相關 dimention 來分類,而非直接緊接的詞。

e.g.

  • Apple -> 技術相關的品牌
  • NBA -> 運動類別
  • Apple Watch -> 運動心跳 -> 技術品牌
  • China -> 政治類別
  • 華為 -> 科技品牌 -> 政治類別
  • 接下來就可以計算兩個單詞的相似度 similarity
    • China x 華為 –> 相似度就會很高。
    • 經常使用到的方式 : sigmoid 將無限大的數值, normalize 0~1 。
  • 不斷的 sigmoid 會造成相似會聚合一起 (over-fitting)
    • 解決方式:
      • Google 採取方式,也要計算錯誤的方式。
      • 透過一整段詞的 average ,來確認是中間詞的數值。

Asm2Vec

那麼要如何透過 word2vec 來判斷 malware ?

  • 指令的詞分佈性
  • 透過完整 asm 指令前後文的相似分佈

要能完整拿到指令前後文,需要使用靜態掃描,在動態執行狀況要如何取得前後文?

  • 透過分區塊的方式分群
  • 透過區塊間的流程 block a -> block b -> block c -> block b
  • code block 之間透過丟骰子的方式,來判斷前後文的關係。 (Random walking)

  • 這樣也可以透過三個詞的平均,來判斷中間詞的是否相似

是否要用 push rbp 來建立 tokenFeq?

  • sub rsp, 138h
  • sub -> op
  • Rsp -> 參數
  • 138h -> 參數
  • 補齊參數,作為矩陣操作用
  • 對於 asm 經常出現的指令
    • mov rax 8h
    • 需要透過一個
      • Loss function theda 來調整,作為相似度的 sigmoid 調整用

成果

  • 用 25 隻 mirai 樣本,來訓練出來。來預測四萬多隻的樣本:
    • MIPS 96%
    • x86 96%

Challenge

  • malware 只要套上「殼」(shellcode),就不容易被抓到
  • dll side-loading 方式,就無法找出 control graph
  • mov 語意相當的薄弱
  • 動態修改自身程式碼
  • 95% 是正常的程式碼,只有最後 5% 是 malware

相關的 Q&A

  • Q: Random walking 如何確認正確? 順序一錯,完全就是不同東西。
    • A: 原本論文 30 ~ 40% 正確性
  • Q: 為何相關成果不公布?
    • A: 論文還在研究,跟原本作者想法有一些不同。

議程小結:

將者將原始作者論文 repdroduce 後,發現其中有一些有問題的算式部分。加以修改後,得到更好的效果。算是一個相當有趣議程。

活動小結

今晚的聚會邀請到國內外資安專家,不藏私分享資安策略和經驗,幫助與會者在短短數小時內,從不同角度領略實現資安的各種可能。BECKS 是由 Beer 與 Hacks 兩個字所組成,透過本次小聚,我們再度凝聚資安社群,讓資安專家分享最新研究,並讓各領域的資安研究員進行面對面討論,除了幫助更多人了解 LINE 的安全設計,更希望透過交流,讓多元的資安思維得以迸發出精彩的火花!

立即 follow「BECKS」活動訊息,就能收到第一手 Meetup 活動最新消息的推播通知。▼

「BECKS」活動專頁:https://becks.io

關於「LINE開發社群計畫」

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

徵才訊息

《LINE 強力徵才中!》與我們一起 Close the Distance 串聯智慧新世界 » 詳細職缺訊息

[研討會心得] 「How ML Powers LINE Services」機器學習如何的讓 LINE 的服務能更貼近使用者

前提

大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第三場開發者小聚。 這也是疫情後第一次在新竹舉辦的線下聚會的活動。 也是 LINE 台灣工程團隊第一次來到交通大學舉辦線下的活動。 本篇分享的就是該活動中由 LINE 台灣資料工程團隊的 Shawn Tsai ,跟大家分享機器學習如何的讓 LINE 的服務能更貼近使用者。

KKTIX 活動網頁: 活動網址

活動全文網址: TBD

投影片

影片

LINE 台灣資料工程團隊的組成

首先 Shawn 先跟大家分享 LINE 台灣資料工程團隊的組成,主要由以下三個角色所構成:

資料工程師 (Data Engineer)

身為資料工程師需要有一手強大的工程技能,不論是資料的截取,抓取與前處理 (Pre-processing) 。甚至是資料探索的部分,到最後機器學習模型的部屬都缺少不了資料工程師的協助。

資料科學家 (Data Scientist)

資料科學家的工作就是要協助資料工程師來擷取資料,並且一同討論如何前處理之後。將機器學習模型學期出來。

資料分析師 (Data Analyst)

資料分析師的重點在資料的探索,尋找出真正能解決問題的數值。並且針對完成的模型來做相關的測試與修正。

資料工程團隊與專案的合作方式

資料工程團隊主要由以上三個角色所組成,所有的資料工程團隊會因為不同的產品需求有不同的任務小組。 有些產品還在資料討論與擷取的階段,有些產品可能已經進入機器學習模型的調教。 針對不同產品線,每一個成員在日常的工作都可以參與許多有趣的產品與專案,更能學習新穎的機器學習模型方法來套入每一個日常工作之中。

資料工程團隊面臨的挑戰

由於 LINE 使用者超過兩千一百萬, LINE TODAY 上面一年產出一百萬篇文章, LINE 購物上每個月有五百萬筆商品查詢。這麼多的資料就是資料工程團隊要面臨的問題。 而機器學習本身可以是簡單的,也可能是相當複雜的。接下來就會根據產品的不同稍微解釋所使用到的機器學習技術。

LINE 客服小幫手

img「糟糕…換手機要怎麼移動帳號? 」

img「怎麼購買貼圖送給親友?」

這些問題都是使用者每天都會想要了解的操作問題,但是要如何能及時的找尋到解答呢? 這時候就可以透過「客服小幫手」機器學習的能力來幫你快速回覆。 手機點此加入LINE 客服小幫手帳號或搜尋 @linehelptw加入好友。 更多使用方面的介紹可以參考 「LINE 客服小幫手」智能客服全新升級~對談中解決用LINE大小事

由於同樣的問題可能會有各種詢問方式,比如說:

  • 為什麼有時候賴都不會通知?
  • 訊息都跑不出來是怎樣?
  • LINE 都不會叫也不會震動?

這三種完全不同的問法,可能導向的都是當初 iOS 11 更新造成的問題。這些如果要透過人力來回覆相當的費時,就需要使用自然語言理解 (NLU: Natural Language Understanding) ,並且是用到 LSTM 來了解文字在前後文中的相關性,並且透過 CNN 來獲取文字與其他文字的特徵。 這是第一個版本的解法,但是效果不算是令人滿意。 後來透過了使用 seq2seqCBoWDSSMBERT達成的 Esemble 的解決方案,這樣的方式大幅度的得到比較好的效果。

LINE 訊息查證小幫手

LINE 訊息查證」平台在去年七月份正式上線,不僅有官方網站,更串聯 LINE 官方帳號,用戶只需把在聊天室中收到的訊息「轉傳」至「LINE 訊息查證」官方帳號。如過去已有查核報導在資料庫中,查證小幫手會自動判斷其真偽,系統將即時提供查證結果;如訊息尚未查核,將提報給專業查核單位,待釐清後再盡快回傳正確資訊給予用戶,提供最即時的訊息辨別服務,協助用戶辨識可疑訊息真偽,降低假訊息再次散播的機會。

每天收到的訊息量高達四萬則,但是人工辨識每天只能夠 300 則,所以這時候需要機器學習大量的協助。 透過了 Near-DuplicationClassification 兩種方式來尋找與分類訊息。現在訊息查證的效率也進步了十倍以上,並且成功的釐清了 46% 使用者所發送的可疑訊息。 不想要變成假訊息的傳播者嗎? 一起加入 「LINE 訊息查證」官方帳號。

透過機器學習專案的學習

許多學生朋友都會好奇,真正在 LINE 來從事資料工程團隊的工作倒底每一天的時間都在做什麼? 講者也很大方的跟大家分享了,身為資料工程團隊每一天大部分的時間真的都是花在訓練機器學習模型嗎? 這張圖可以讓各位了解,大部分的時間都是花在機器設定( Configuration) ,資料擷取 (Data Collection) ,並且相當多時間在資料的驗證 (Data Verification) 甚至是模型建立後的建置能夠不斷的更新最近的機器模型的基礎建設 (Serving Infratructure) 也會花費相當多的時間。 真正拿來做模型訓練往往是整個專案中少少的一個部分而已。 也可以知道資料科學家主要的時間與專業在於如何找出與辨識「關鍵的資訊」。

相關文章:

[研討會心得] 2020/09/18 LINE Developer Meetup 13 (一)

前提

大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第三場開發者小聚。 這也是疫情後第一次在新竹舉辦的線下聚會的活動。 也是 LINE 台灣工程團隊第一次來到交通大學舉辦線下的活動。

KKTIX 活動網頁: 活動網址

本次 LINE Developer Meetup 開發者小聚,首先有 LINE 台灣技術長 Marco Chen 帶來的 LINE 技術新星實習計畫的相關介紹,並且有 LINE 資料工程團隊的負責人 Shawn Tsai 帶來關於 ”How ML Powers LINE Services” 。

文章列表

LINE TECH FRESH (LINE 技術新星人才計劃) 學生實習計畫宣傳 / CTO Marco Chen

首先上場的就是 LINE 台灣的 CTO - Marco Chen ,身為 LINE 工程團隊的大家長 Marco 為所有同學來解釋關於 TECH-FRESH 當初成立的緣由。以下有一些擷取自當天內容:

請問各位在職的來賓,你們當年在學校想著從事你現在的職務的人,請舉手。
請問各位在校的同學,你很確定你將來的工作内容是什麽的人,請舉手。

你們知道在 LINE 或像 LINE 這樣的網際網路應用服務的公司,開發一個大流量的系統,要有多少種專業角色的人參與?
使用多少種技術? 各位知道有那些角色? 那些職務?

TECHFRESH 是 LINE Taiwan 的在校生技術實習計劃,有兩個主要的目的:

- 幫助準備要進入職場的同學,真正的去了解,在一家網際網路應用服務的公司中,會有那些軟體開發的工作。進而可以讓同學們,找出自己職涯中最合適自己的工作内容,發揮自己的專長。不論最後是不是在 LINE 發展,我們也幫助這個國家培養出好的人才,能發揮最大能力貢獻給這國家。

- 在過程中培養出熟悉我們開發技術與流程的人材,進而到最後願意留在 LINE 發展。原本 LINE 的暑期工讀計劃,三個月的時間,對於資訊科系學生想要能真的了解統開發生命週期中所有角色與工作内容,實在太有限了。 因此我們向總部提出一年的實習計劃,一週來三天,工作內容則是由 TPM 帶領,執行一些一次性的專案開發,或者加入專案團隊支援專案團隊的開發工作。

透過這一段談話,同學們可以清楚了解到 LINE TECHFRESH 成立的主要原因與由來。透過長達一年的實習,同學們才有機會真正的學習跨國產品的開發合作,軟體工程開發的經驗。 希望同學們趕快來報名! 申請網址

相關資料:

How ML Powers LINE Services / LINE Data Team - Shawn Tsai

關於更詳細得內容,歡迎參考文章。 http://www.evanlin.com/LDM13-Data/

關於「LINE開發社群計畫」

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

[NETFLIX] Cobra Kai 眼鏡蛇道館 (只要認真努力的話,在某些人故事中,也是會成為壞人)

改變一生的賽事結束數十年後,強尼和丹尼爾在《小子難纏》系列電影的續作中再次激烈交鋒。

(圖片與介紹來自: NETFLIX 眼鏡蛇道館介紹頁面)

就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。
																								【貓之寺的知恩姊】

劇情簡介:

小子難纏 是一部發生在 35 年前 (1984) 的電影(我也是很小的時候看重播的 XD) ,裡面身為學校裡面剛搬過來的主角 Daniel ,被學校裡面的風雲人物 Johnny 所欺負, 而 Johnny 就是在眼鏡蛇道館裡面學空手道。 結果 Daniel 認識了日本的空手道師父宮城先生,開始一連串的鍛鍊(洗車,擦玻璃,整理花圃)。一開始 Daniel 還相當生氣,為什麼這些會跟空手道有關係。結果在宮田先生的指導下,這些訓練逐漸發生效果,最後 Daniel 擊敗了當時學校的惡霸 Johnny 也抱得美人歸。

(當年 1984 Karate Kid 的預告片)

35 年後… 當年金髮碧眼意氣風發的校園風雲人物 Johny 因為在空手道總決賽輸給 Daniel 之後,人生過得相當的悲慘。他自怨自艾,並且也有了一個失敗的婚姻,有了一個失去聯絡的兒子,整天跟酒渾渾噩噩的過日子。 有一天在超商遇到一個可憐的外來移民高中生 Miguel 被小混混欺負,於是使用了以前空手道的功夫教訓了小混混們,並且受到 Miguel 的影響,開始重新開設眼鏡蛇空手道館,想要讓這些被欺負的宅男們保護自己。

相反的 Daniel 在打敗 Johnny 人生過得相當順遂,開設了汽車行賣車子。並且用空手道作為廣告宣傳獲得相當不錯的業績。 跟高中女友分手後,娶了美女老婆也有可愛的高中女兒 Samantha 跟一個兒子。 劇情就在這裡展開了。

令人驚喜的劇情部分

劇情部分就不幫各位暴雷,就先提幾個我覺得劇情裡面很有趣,也是設計巧思的部分分享一下。

好壞並不是絕對

如同敘述的,本部影集的主角是以前的惡霸 Johnny ,而不是 Daniel 。 並且故事中的他也相當的可憐。 就他的說法, Daniel 來了以後,搶了他的女友,並且在決賽打敗他,讓他在學校變得被人嘲笑。整個人生也變得相當的悲慘。

而 Daniel 雖然是電影版的壞人,但是從小受到眼鏡蛇道館欺負的他。看到 Johnny 又開設道館後就反應過度,千方百計阻礙 Johnny 並且透過各種手法打擊他。 ( 484 很像壞人?)

這部影集中, Johnny 想要改邪歸正。逐漸從自我放棄人生中走出來。而 Daniel 過分想要保護家人而顯得有些不擇手段。

於是也讓人想到: 「就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。」 這句台詞。

某些相同的巧合

經過劇情發展, Daniel 跟 Johnny 各自有了新的徒弟,並且在最後比賽碰頭。 並且兩個徒弟都愛上同一個可愛女孩(也就是 Daniel 的女兒 Samantha ) 。 許多影集的劇情也有「致敬」電影版的許多相對應之處,除了感受到設計巧思外,也讓人回顧了時空?

全民女友 - Elisabeth Shue

這時候又發現原來 35 年前的重要角色,兩位男主角爭奪的女主角也是當時的全民女友 Elisabeth Shue 。不僅僅有演小子難纏擔任女主角,也是回到未來系列的女主角。當然最近比較讓我了解的就是他也有演 CSI 。

令人懷念的 宮城師傅 (Pat Morita)

Pat Morita 也就是在系列電影中的神祕日本宮城師傅,在電影中也講出了許多至理名言。

「輸給對手,沒有關係。輸給恐懼,不可以。」

本來很好奇宮城師傅怎麼了,裡面也有一集專門紀念他,他本人(演員)也於 2005 年過世了。

結語

滿滿的回憶之作,但是裡面有許多故事鋪成算是精心地打造。讓原來的壞人 Johnny 變成了主角,並且深入敘述他內心的轉變。 裡面也不斷的從 Johnny 的角度來看事情的過程。 許多欺負人在他心中可能只是一個小是,但是被當初的主角 Daniel 打敗,搶走女友卻一直無法忘懷。 真的也是呼應到了~ 「就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。」。

相關鏈結:

[TIL][Golang] COSCUP 社群軌 - Effective Go 影片列表

COSCUP 2020 Effective Go 的全部影片都上架了,請跟著以下的鏈結來查看吧:

  1. net & http & timeout by Hsueh-Tsung Kuo
  2. How to use Go channel correctly by Gaston Chiu
  3. How the pitfalls of cgo and channels make reading messages from USB fail by lschyi
  4. Debug golang program with delve by Peter Lai
  5. 談談 go 測試的二三事 by David Chou
  6. Functional verification test framework with Go by Rain Wu
  7. Goroutine stack and local variable allocation in Go by Cherie Hsieh
  8. 從零開始貢獻 Go 相關 open source project by kakashi
  9. Go Go Power Slice! by Yu-Lang Chu