[學習心得][Golang] 舊的開源專案開啟 Go Modules 可能會遇到的問題 (e.g. go get 無法更新版本)

前言: 各位好, LINE Bot Go SDK 是一個經營超過了五年的專案,並且版本號碼也早就已經到了 v7.8.0 。 而本月月初 (2021/April) LINE Bot Go SDK 又有新的版本更新了,這次有支援到三月平台所提供新的功能,還有將去年公開的 FLEX Msg 的 update 2 更新了。歡迎大家使用。 這個套件已經更新到 v7 版本,才支援 Modules 。 結果一開啓就踩到雷,感謝台灣的網友 wys1203 送了 PR 修復。 我也整理一下相關心得,跟大家分享一下。 TL;DR 本篇文將要介紹以下一些的部分: 如何將舊的開源專案支援 Go Modules  發生問題了  無法更新版本 (Cannot update version by “go get”) pkg.go.dev  上面版本是舊的 Go Modules 對於 v2 之後的支援方式  如何修復? 有用到的人該如何修改?  結論 參考文章 如何將舊的開源專案支援 Go Modules LINE-BOT-SDK-GO 是 LINE 開源出來的對於 LINE Messanging API 所釋放出的開源套件,並且支援多個語言版本(Go., PHP, Java, Python) 。 原本這個 https://github.com/line/line-bot-sdk-go 的版本已經超過 v7 ,但是遲遲沒有支援 go modules 。 也就是並沒有 go.mod 在該專案的檔案下面。所以需要透過以下方式來啟動 Go Modules (Enable Go Modules) - go mod init - go mod tidy - go mod vendor 原本 PR 看起來也沒有太多的問題,於是就將新版本發佈出來。 (v7.9.0) 發生問題了 原本版本更新後,看起來也沒有太多問題。但是版本更新後卻發生了以下兩個問題: 無法更新版本 (Cannot update version by “go get”) 這時候我試著去更新一個本來有使用到 https://github.com/line/line-bot-sdk-go 的套件,正常的更新流程如下: >> go mod tidy go: finding module for package github.com/line/line-bot-sdk-go/linebot go: found github.com/line/line-bot-sdk-go/linebot in github.com/line/line-bot-sdk-go v7.8.0+incompatible 問題出來了,我明明有更新版本到 v7.9.0 但是卻無法抓到最新的版本? 於是我拿了一個新的專案,重頭試試看。 Copy https://github.com/line/line-bot-sdk-go/tree/master/examples/echo_bot to your go path go mod init go mod tidy 結果一樣是出現: >> go mod init go:...
繼續閱讀

[好書分享] 創意競擇 - 蘋果前iPhone首席軟體工程師獨家告白

創意競擇 - 從賈伯斯黃金年代的軟體設計機密流程,窺見蘋果的創意方法、本質與卓越關鍵 Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs 作者: 肯.科辛達 原文作者: Ken Kocienda 譯者: 洪慧芳 出版社:臉譜 出版日期:2021/01/26 買書推薦網址: 博客來: 購買網址 電子書: Readmoo 前言: 這一本是今年所讀完的第四本書。 當初也是聽到 「「現在開始你們都是鍵盤工程師!」iPhone 鍵盤的誕生與賈伯斯時代的蘋果軟體設計流程」的結果馬上就買了這一本書的電子版(週日買),作天晚上(週三)就看完了。 為什麼會這麼想要看這本呢? 我的理由如下: 這是第一本由 「蘋果首席iPhone軟體開發工程師」(註解: Principle iPhone Software Engineer,通常在外商科技公司中, Principle Software Engineer 通常就是非管理職的最高職位)所寫的書籍。 這也是一本講解有賈伯斯在的時候蘋果所產生出來的氛圍,還有一個好的功能是如何挑選出來的。 蠻推薦給大家看的,有興趣可以買來看。 內容簡介與心得: ──蘋果前iPhone首席軟體工程師獨家告白── ──Steve Jobs賈伯斯黃金時代蘋果創意法則全紀錄!── 蘋果產品全球有近二十億使用者,但催生、實現這些創意的所有工作流程, 由於內部嚴格的「保密條款」限制,始終成謎。 天才們究竟是如何孕育出iPhone、iPad、Safari……? 蘋果前首席軟體工程師,首度揭露賈伯斯黃金時代的蘋果設計開發流程,以及成就Apple的關鍵要素 章節條列 Introduction前言 The Demo演示 The Crystal Ball水晶球 The Black Slab黑色方碑 One Simple Rule大道至簡 The Hardest Problem最難的問題 The Keyboard Derby鍵盤大賽 QWERTY英打鍵盤QWERTY Convergence聚合 The Intersection交會點 At This Point此時此刻 Epilogue後記 整本書從一個 iPad 的鍵盤設計展示開始(也是作者最後一次在公司看到賈伯斯),慢慢回想到作者如何被找來蘋果開發軟體。 如何協助開發 Mac 上面的瀏覽器,也是因為瀏覽器的開發讓作者第一次感受到十倍工程師的能力。裡面的小故事是: 一開始作者想透過 Mozila 的原始碼修改移植到 Mac OS 上面。但是因為 Mozilla 實在太龐大了,所以導致作者花了六個禮拜還不能讓 Mozilla 在 Mac OS 上面正確的執行(應該說連編譯 compile 都不行)。 但是新成員查理的加入,他用了兩天的時間就就透過自己寫的一層 Shim 讓 Mac OS 能跑 KDE 上面的瀏覽器(Shim 是一層欺騙層,一方面騙 KDE 瀏覽器正在 KDE 上面,一方面騙 Mac OS 他跑的是 Mac 軟體。 (類似 Kubernetes 裡面的 Dockershim ) 這也是一個很特別的故事分享(原來強者可以兩天內寫好一個 shim 啊啊啊啊啊) 完成了 Mac OS 上面的瀏覽器(也就是我們後來熟知的 Safari ),作者有機會能高升為 iCloud (當時還是網路儲存),但是因為自己的不適應,竟然用跳槽威脅老闆們要當回工程師。(這也是很有趣的例子,原來真的有人願意單純當工程師)。 然後作者也加入了後來的 Purple 團隊(也就是蘋果最偉大的產品 iPhone)的團隊。 也是這個機會讓後來作者能有機會能夠在賈伯斯面前 demo 新功能「鍵盤的功能」。 現在 iPhone 上面的鍵盤就是作者參與製作的功能,並且也是作者打造出的自動拼字的功能,也是他打造出手指調整。也就是按鈕按下去得時候,往往使用者以為是指尖按到,但是往往會是指腹會先碰到螢幕。造成使用者以為不精準(其實是自己先碰到),連這個都能改善,真的是蘋果啊!! 心得:...
繼續閱讀

[學習心得][Golang] 簡單介紹幾個 Golang 1.16 的新功能

前言: 這篇文章拖得有點久(再不寫完 1.17 就要出了) 整理一下 Go 1.16 最新的幾個重要功能,其中最重要就是 Retract 跟 Embed Package 。大家趕快來試試看。 TL;DR 本篇文將要介紹: 如何安裝嚐鮮版本的 golang 1.16 1.16 新功能主要列表  Apple Sillicon (也就是目前的 Apple M1 Chip) support Go Module Retract (撤回發佈有問題的套件) Embedding Files (把靜態檔案包含在專案中) 如何安裝嚐鮮版本的 golang 1.16 如果你想要嘗試一下,還沒有在 Homebrew 上有支援的 Golang 版本,就目前 (2021/02/19) 狀況由於許多相關套件還沒有更新好,造就 HomeBrew 遲遲無法 Merge ,大家可以參考一下這個 PR 。 那如何在本地端安裝一下測試版本的 Go1.16 呢? 就如同本文開場圖片的敘述一下: go get golang.org/dl/go1.16 go1.16 download 如此一來,就會在本地端安裝一個編譯好的檔案。 go1.16 如果需要相關的測試可以直接跑 go1.16 build 或是 go1.16 test 來跑。 1.16 新功能主要列表 Apple Sillicon (也就是目前的 Apple M1 Chip) support 這個版本正式支援 apple Silicon 誒就是 64-bit ARM 架構。(a.k.a. Apple M1 chip) 。 可以透過 compiler 參數: GOOS=darwin, GOARCH=arm64 來設定,而原先的 iPhone binary 設定則改為: GOOS=darwin, GOARCH=ios/arm64 可以透過指令 env GOOS=darwin GOARCH=arm64 go build 來編譯出給 Apple M1 的 binary 。 Go Module Retract 這部分可以參考我的另外一篇詳細文章。 [學習心得][Golang] Go 1.16 新功能的「版本撤回(下架)」(Go Modules retraction) Embedding Files (把靜態檔案包含在專案中) 以往是無法將靜態檔案,包在 Golang 的專案之中。幾個方式只有: 如果要載入的檔案是 json ,將它弄成變數。 如果是 html 的 template 檔案,需要跟 binary 放在一起 或是可以看一下 go-bindata 的專案(相似的還有 packr 跟 pkger ),透過這個方式將 static file 放在專案中變成 resource 。 但是在...
繼續閱讀

[學習心得][Golang] Go 1.16 新功能的「版本撤回(下架)」(Go Modules retraction)

前言: Go Module 在 1.11 的版本正式導入了 Golang Modules 讓許多套件可以使用 Go Module 來管理相依 (Dependency) 的套件。並且在 Go 1.16 版本也預設開啟了 Go Modules 的選項。但是在開發套件 (Package) 的時候可能會發生以下的問題: 忽然發現某個的套件有重大的問題,希望其他人不要使用到這個套件。 不小心進版號進太多了,而且有一些人也使用到這些版本。 (e.g 本來要跑 v0.4.0 ,結果不小心寫成 v1.0.0 ) 以上兩個問題,如果在套件還沒有散佈出去的話,其實都是沒有問題的。但是如果套件也散布出去的話,就需要透過套件的撤回(Retract) ,來讓使用套件的開發者能了解相關的問題,也讓之後使用的人不會再用到這個版號。 本篇文章將會介紹 Go 1.16 裡面一個比較沒有被重點宣傳的功能(大部分人注意的是 Apple M1 支援),並且透過官方給的線上範例也給版本撤回的實作。 TL;DR 本篇文將要介紹: 什麼是 Retraction 為什麼需要 Retraction 以往要如合作撤回版本的方式 如何使用 Go modules Retraction 相關學習資源 什麼是 Retraction ? 顧名思義就是版本的撤回,也就是將「有問題」的版本將以撤回。 為何需要 Retraction ? 通常有兩類的問題: 「已經發佈」的版本中,有某個版本發現致命的錯誤需要撤回。 其中「已經發佈」代表已經公開發佈在 github (或其他 repository) ,並且有人使用。 不小心將版本號碼打錯了,比如說 0.4.0 的版本,後來不小心打成 1.0.0 但是又被人拿去使用。 以前要如合作撤回版本的方式 由於以往並沒有提供 Go Module Retraction ,所以發生以上情形,只能在 README 上面註解。 並沒有方式在 go get 同時獲得足夠的資訊。 如何使用 Go modules Retraction 這裡透過線上 Go Dev Playground,直接一步步講解主要的問題解決方式。 詳細的程式碼,可以到裡面去查看。 問題 1: 發現有某個版本出現了重大問題怎麼辦? 假設你管理套件 gopher.live/ue0ddd4a99c02/proverb ,目前已經發佈到了 0.2.0 的版本出去。但是發現你這個版本有重大的問題。需要把這個版本撤回(或是下架),那麼你可以在套件的 repo 中輸入以下的指令: go mod edit -retract=v0.2.0 這樣一來,就會發現 go.mod 檔案變成以下的內容 module gopher.live/ue0ddd4a99c02/proverb go 1.16 // Go proverb was totally wrong retract v0.2.0 這時候,我們可以加上一些註解在 go.mod 檔案內,這樣一來其他人要使用的時候,也會出現相關註解。 git add -A $ git commit -q -m "Fix severe error in Go proverb" $ git push -q origin main remote: . Processing 1 references remote: Processed...
繼續閱讀

[好書分享] 訂閱經濟-如何用最強商業模式,開啟全新服務商機(Subscribed)

訂閱經濟 - 如何用最強商業模式,開啟全新服務商機 (Subscribed) 原文作者: Tien Tzuo、Gabe Weisert 譯者: 吳凱琳 出版社:天下雜誌出版 買書推薦網址: 博客來: 購買網址 電子書: Readmoo 前言: 這一本是今年所讀完的第三本書。 Netflix , Spotify 許多訂閱服務已經存在在你我的生活之中。你否有思考過,你一個月需要繳交多少的訂閱服務呢? 但是訂閱服務的商業模式是否是每一個產業都可以採用的? 如果真的要將產品的販售模式改成訂閱模式,會經過那一些痛苦的轉換呢? 購買訂閱模式的客戶,有哪一些需要改變的流程呢? 這一本書由全球最大訂閱管理平台祖睿(Zuora)執行長暨共同創辦人所分享的經驗談,談到了他之前在 Salesforce 與他自己創辦的 Zuora 後,對於訂閱服務的一個看法,並且分享產業轉換到訂閱產品服務可能會遇到的過程。 內容簡介與心得: 百年一遇的商業大變革,萬物皆可訂閱的時代已經來臨。 史丹佛最新熱門課程、全球最大訂閱管理平台執行長 教你掌握下個十年最重要商業趨勢—— 萬物被連結,數據被秒解,競爭關鍵在服務。 最潮也最強的新商業模式,企業必懂、消費者必看! 章節條列 第一部 最強也最潮的商業創新 一開始作者開始介紹訂閱服務的整體重點,還有訂閱服務如何改變這個世界。 Netflix 透過訂閱服務改變了影音出租行業,讓曾經獨佔龍頭的百視達也只能落寞下場。 甚至是Microsoft 與 Adobe 這些曾經是商業軟體銷售龍頭,如何改變產品銷售策略,來將其產品改變為訂閱服務。 舊的產品思維是: 做一個好產品 透過通路與業務,賣給客戶 透過行銷方式讓客戶來購買。 收取利潤,開發下一個產品(回到一開始成為循環) 但是隨著時代的變遷,用戶開始對於產品的要求越來越多。功能需求開發量也越來越大,如何界定新的產品服務變成一個很困難的問題。而訂閱服務的流程很明顯的不同: 打造一個好服務 免費(或是極低代價)吸引用戶來試用 透過訂閱獲得完整(更優秀)的功能 獲得訂閱的利潤。 透過定期得少量更新來讓產品更加優秀,吸引新的用戶或是取得向上銷售(upsale)的機會。 這樣的數位轉型,形成了新一波的典範轉移。這一個章節也提到了報社,航空公司,火車行業如何透過訂閱方式來轉移。 產品銷售模式的轉換 - 魚形曲線 如果要將產品銷售模式的從舊有的販賣方式改變成訂閱模式,可能會經歷一個利潤下降,但是成本上升的時段。主要原因是因為客戶轉換到訂閱模式後,造成當下的現金流減少。並且需要相關系統轉換的成本與人員的訓練。 這一系列的變換,被稱為「The Fish Model 」。 大家可以參考一下由微軟執行長曾經在某次演講上提到的相關內容 - The Secret to Satya Nadella’s Success is a Fish-Shaped Curve。 這也是許多人經常提到的,企業轉型重點在能不能吃得下那一條「魚」。 第二部 顧客導向,成為訂閱新贏家 假設經過了內部的討論後,公司內部也決定要將產品的銷售方式轉換到訂閱模式的話。那麼有那些地方需要變動呢? 這一個部分在書上也有許多的著墨的地方。並且透過系統面,人事面,心理層面有許多相當實際的討論。 首先是產品的開發流程,由於產品的銷售方式變成訂閱後。 並不是收到相關的費用來支持下一次的開發,必須要讓功能的開發更有系統化,更敏捷的方式來跟你的客戶溝通。 接下來行銷在銷售產品的流程上也會有巨大的變動,改換成訂閱模式後並不代表不需要行銷。但是以往的行銷是在於新產品發售後需要一個檔次的相關廣告來行銷。 對於舊有產品用戶的轉換宣傳,如何讓他們願意順利的轉換到新的付費機制上。都是行銷需要考量的層面。首先可以思考的是從以往出走的客戶群來下手,會出走的客戶群往往都是因為「費用」,「功能」等等因為而轉往競爭者。 透過消費模式的轉換,可以再次接近舊有的出走客戶來給予新的提案。 最後這本書也提到一個很有趣的點「資訊系統的配合」,一開始我還看不太懂。原來指的是銷售系統需要改變成「訂閱的模式』。如何透過訂閱模式來計算公司的收入模型,並且如何透過訂閱模式來開相關的政府單位需要的支出文件(發票或是明細)。 都是資訊系統需要的(當然這似乎也是作者從事的部分 XD )。 參考文章 [微軟重拾升勢的祕訣?魚形曲線! 海外頭條](https://www.mdeditor.tw/pl/prIG/zh-tw) The Secret to Satya Nadella’s Success is a Fish-Shaped Curve 心得: 其實在十年前,在我第一份工作上有機會在幫公司的產品加上訂閱相關的功能(雖然搞得快死)。 那時候對於訂閱模式也沒有感覺,直到近幾年才覺得訂閱經濟已經慢滿的改變你我的生活。那時候主要還是弄加上訂閱機制,才知道有許多相關加密與訂閱流程。並且針對功能的開啟與解鎖都需要相關的控制。 近年來針對許多產業都將產品的銷售流程改成訂閱模式,從影片,甚至到了最多人爭議的音樂 CD 。進階的也造成了音樂產業的轉型。現在的藝人無法透過完整專輯的銷量帶來大量的收入,反而需要透過許多的廣告代言,宣傳代言,出席相關的場合所帶來的收入。 我想許多的產品也會是如此,資訊產品更是。許多的單一功能的產品也透過訂閱方式來讓使用者付費。 雖然一年內,可以完整費用是變少的,但是隨著年份的增加也是有相關的支出會產生。 加上訂閱費用往往在使用這這邊是不容易管理的。 這本書有許多實際上的演練與系統上的討論(當然也因為作者要賣東西?),但是相關討論事實上也是需要先注意到的。蠻適合非資訊人員與技術人員都應該要看一下的。
繼續閱讀

[好書分享] Instagram崛起的內幕與代價 - 以及它如何改變了文化、商業、科技、媒體,與我們每一個人

Instagram崛起的內幕與代價-以及它如何改變了文化、商業、科技、媒體,與我們每一個人 (No Filter : The Inside Story of Instagram) 原文作者: Sarah Frier 譯者: 余韋達 出版社:臉譜 出版日期:2020/11/26 語言: 買書推薦網址: 博客來: 購買網址 電子書: Readmoo 前言: 這一本是今年所讀完的第二本書。 會讀這本書主要是因為聽「星箭傳播」的Podcast 節目第八十七集(不能再多?)的節目介紹到這本書。雖然有一個多小時的 Podcast 介紹這本書,但是還是讓人欲罷不能,很想買來好好的閱讀。 這本書主要是介紹 Instagram 的崛起,到了 2012 被臉書以十億美金的收購價格收購。一開始雖然承諾會讓 Instagram 以獨立的方式來發展,但是隨著臉書的使用者逐漸地轉移到了 Instagram ,也讓臉書的人做了許多相關的干涉,最後導致創辦人 Kevin Systrom 離開了臉書。 裡面有許多詳細的描述,也讓人更了解臉書是如何併購一家公司。 參考節目: 《星箭廣播》87 集——10 億個世界:Instagram 的「無濾鏡」創業故事 Instagram wiki 內容簡介與心得: 創立於2010年的Instagram,在短短數年內崛起,為目前全球互動率第二高的社群媒體平台,僅次於臉書。每個月全球有超過十億人使用Instagram,日活躍用戶高達五億,每天上傳的照片與影片超過一億則。2019年,它的年廣告營收高達兩百億美金,表現大勝 YouTube的五十億。 究竟非典型的矽谷創業家凱文.斯特羅姆與出身巴西的工程師麥克.克里格,是如何在一片紅海中以「反直覺」的決策打造出Instagram,並帶領它在短短十八個月內從不被看好到一夕爆紅,吸引臉書(Facebook)CEO馬克.祖克柏斥資十億美金天價收購,進一步獲得今日商業上的成功?在傳奇性成功的背後,Instagram以及所有使用者,又付出了哪些代價? 章節條列 第一章 代號:計畫 第二章 成功的混亂 第三章 一場驚喜 第四章 充滿不確定性的夏天 第五章 快速移動,打破成規 第六章 全面宰制 第七章 新名人階級 第八章 追尋Instagram的價值 第九章 Snapchat危機 第十章 自相殘殺 第十一章 另一則假新聞 第十二章 執行長 結語 收購的代價 2010 年所開始的服務 Instagram ,一開始主打的就是簡單的相片分享服務與相片濾鏡服務。靠著分享到臉書與推特的功能,開始讓更多的人來加入使用。走著跟臉書不同的路線,主打著攝影分享,讓使用者可以快速分享,以使用者為主的概念。很快速地獲得許多的人加入。 但是也被競爭對手(?)臉書看上,在 2012 併購,本書也介紹了整起併購案的整個經過(當然是透過新聞與許多其他人的採訪得知)。 雖然進入了臉書,一開始也是維持得獨立的方式來經營。一反臉書主要以廣告平台的經營方式, Instagram 透過主動與廣告主主動聯繫,並且提供許多的建議與專屬的優惠。讓許多的廣告商(甚至本來不喜歡臉書的廣告商)也會來投放 Instagram 的廣告。也透過使用者為主的經驗,並且沒讓人(明顯)感受到臉書擁有 Instagram 的狀況下。 也加入許多功能加入讓臉書可以一舉打敗許多競爭對手(Snapchat) , 並且也在 2019 年讓使用者增長到十億,並且收入也高達臉書整體收入的四分之一。 最恐怖的是,當許多年輕人都在笑臉書使用者老派的時候而跳去使用 Instagram ,卻沒有人感受到其實他也是臉書的使用者之一。 但是世界上並沒有那麼美好, Instagram 的快速成長令一方面也讓臉書的使用者成長遲緩了。 於是臉書的高層(Growth Hacking team?) 也做了許多研究,並且開始阻礙許多來自於臉術轉換到 Instagram 的流量方式。當初「獨立發展」看起來也並沒有完全的實現,也導致創始人在 2019 年離開臉書。 本書基本上有大概百分之二十的部分都在講解著他們成功所帶來的「犧牲」與「掙扎」。還有當初答應臉書購併所帶來的「代價」。 心得: 我想所有的新創公司的人,許多人都希望在成長得時候能夠順利地被大公司所收購。但是沒有人想過,許多好的服務都是避免被坐大才被對手「防禦性收購」的方式所購買下來。 雖然臉書收購了 Instagram 之後,沒有馬上將它下架並且並為己有。 也讓 Instagram 成長到超過十億的使用戶。 但是由於許多的人就是不喜歡臉書而逃避到 Instagram 想不到還是在臉書的旗下。 也難怪許多人會說臉書收購 Instagram 可以說是近十年最值得的併購案。 本書也清楚的交代了一家公司被併購後,並不是馬上所有人都能夠雞犬升天,馬上就坐擁千萬的財產。許多的併購案往往都只有讓工程人員得以併入母公司,雖然可能獲得便宜的換股機會,但是也並非所有人能夠用漂亮的股價直接轉換成現金。並且併購發生後往往會有母公司與子公司的資源分配問題,與「功高震主」的機會。就像是本書的 Instagram 一樣,遇到許多來自於母公司的審核與干涉。這些真實世界的內幕,在這本書很難得敘述得相當清楚。很推薦新創產業的從業人員好好看一看這本書。
繼續閱讀