[TIL] 在 vscode 上面安裝並且使用 PlantUML

前提 寫作技術文章的時候,經常需要各種 UML (Unified Modeling Language) 所繪製出來的圖形。雖然學生時代都會學過這個,但是工作之後其實不容易透過良好的工具來繪製。 通常在 MacOSX 繪製經常使用 OmniGraffle(其實我有買)或是 Lucidchart ,但是要安裝這些軟體可能沒有那麼方便,或是拉來拉去本身也是很讓人困擾(美工苦手)。 使用文字敘述來繪圖的工具一直是我最愛 ( LaTex 愛好者),所以進了公司之後聽說過了 PlantUML 就一直很喜愛。 但是這兩天好奇因素之下研究了一下跟 vscode 整合,並且把可能遇到的問題分析給大家。 什麼是 PlantUML 可以快速看一下什麼是 PlantUML 介紹 ,或是去 PlantUML 官方網站了解。 PlantUML 透過簡單的語法可以繪製出 UML ,對於要做系統設計架構圖或是要做系統說明的人其實很方便。 比如說一個 use-case diagram 如下: 而且 PlantUML 支援相當多種 UML Diagram 时序图 用例图 类图 活动图 组件图 状态图 对象图 部署图 定时图 相當的方便。 如何在 VSCODE 上面安裝 VSCode 的 PlantUML 具有相當多的特點: Preview Diagram Export Diagrams Format PlantUML code (我很需要) All type syntax highlight. Auto Include. MarkDown integrating support. View Demo (有點威) 安裝 PlantUML plugin 套件節點 想要試著跑但是會跑出錯誤。 No Java runtime present, requesting install. 請看以下方式解決。 問題除錯: 1. 解決在 OSX 10.11 之後無法順利更新 Java 的錯誤 一開始試著在 vscode 裡面跑 java 相關指令會跑出 No Java runtime present, requesting install. 就算你試著更新 MacOSX 的 Java (參考這篇官方文件) 還是會跑出錯誤,那麼就要安裝”下載 - Java for OS X 2017-001”這個套件。 完整錯誤請查看這個說明。 更新: 安裝 Java 在 Mac OSX Catalina (2020/10/15) 下載新版 AdoptOpenJDK 解壓縮 tar -xf OpenJDK11U-jdk_x64_mac_hotspot_11.0.8_10.tar.gz 換到 opt 去: mv $PWD/jdk-11.0.8+10 /usr/local/opt/jdk 設定系統位置: export PATH=/usr/local/opt/jdk/Contents/Home/bin:$PATH 更新 PlantUML.jar 如果...
繼續閱讀

[Coursera] Smart Contract (三)最終作業

Blockchain Specialization 系列上課心得 Blockchain Basics Smart Contract Decentralized Applications (Dapps) Smart Contract 課程鏈結: 這裡 文章鏈結: Smart Contract (一): Week 1 ~ week2 Smart Contract (二):Week3 ~ week4 Smart Contract (三) : 期末作業 前言: 拖了兩個禮拜,總算把題目看完跟寫完了。今天很開心的將作業繳交上去的時候,卻發生錯誤。只好花了一兩個小時把整段程式碼整個看過,還是找不太到,最後到了論壇看了討論才把問題解決掉。 這個問題其實也讓我點出來,目前 Smart Contract 由於使用的 Solidity 的版本不同,其實功能的支援上也會有許多的差異。 不知道真正在 Smart Contract 的開發上是否會因為 Solidity 的版本變化造程碎片化 ? 請有實務經驗的朋友再好好分享。 這篇文章將 Smart Contract 作業裡面稍微整理一下幾個需要注意的地方跟可能會踩到的雷。 測驗內容: 透過 Smart Contract 來撰寫一個小型的拍賣決標,它具有以下的一些特性: 固定只有四個競標者 競標的商品只有三個 (0, 1, 2) 每個競標者有五個 token 來競標他的商品 透過這些規矩底下,要完成這樣的 Smart Contract 需要了解以下的部分: 要初始化所有的競標商品 需要初始化所有的競標者資料 完成最後結標的規則與算法 透過 Modifier 來做一些檢查。 小訣竅: Require() 跟 Revert() 會使用到要了解他的差異與使用方法。 一開始寫題沒有想到使用 revert()造成最後計算的測試一直無法順利完成。 總結: 雖然課程作業繳交花了一點時間,但是整體還是相當推薦這台課程。 下一次的課程也來到了 Decentralized Applications (Dapps) 的內容,希望會更有趣。 Reference: https://www.coursera.org/learn/smarter-contracts/home/welcome 6 test cases passed.3 test cases failed. Technical Introduction to Events and Logs in Ethereum https://solidity.readthedocs.io/en/v0.5.2/solidity-by-example.html?highlight=require Coursera: Decentralized Applications (Dapps) 比較 require(), assert() 和 revert(),及其運作方式。
繼續閱讀

[研討會心得] 2019/03/28 CNTUG#14@LINE

前提 三月第一場社群活動邀請到 CNTUG (Cloud Native Taiwan User Group) 社群到 LINE 來舉辦。也請到遠從東京的維運開發團隊 Verda Team 來台灣分享,除了讓更多人能夠了解這樣的架構之外,也希望能夠引發一些討論甚至可以互相交流。 How We build Kubernetes service by Rancher in LINE / LINE 東京 Verda Team, 李飛翔 投影片 來自東京 Verda Team 的李飛翔也跟大家分享 LINE 是如何透過 Rancher 來打造 LINE 自己的 KaaS (Kubernetes As A Service) 。本文一開始先介紹了 Rancher 的一些功能與 Rancher 2.0 的目前狀況,也會介紹我們如何使用 Rancher 來打造 KaaS 。 LINE 如何透過 Rancher 打造 KaaS API Server: 首先左方可以看到,有一個 API Server 負責收發使用者的指令。 除了作為 Proxy 之外,也可以限制使用者使用有限的 Rancher 功能之外也可以整合一次對於多個 Rancher 的操作。 Kubernetes Provider: 透過 Kubernetes Provider 是一個 Kubernetes 集群來管理多個使用者的集群( User Kubernetes Cluster) User Kubrernetes Cluster: 每一個服務或是產品會使用一個或是多個 User Kubernetes Cluster 。裡面都是透過 OpenStack 來建立 VM ,並且透過 Rancher 來部署。 如果今天一個開發者需要一個新的集群來部署一個新的服務。他透過 API Server 下指令部署新集群,這時候會透過 Kubernetes Provider 來運行 Rancher 來開啟新的 VM 並且來部署 Kubernetes 設定到該集群。 如此的輕鬆容易嗎? 透過一個問題來講解整個 Kubernetes 的架構與容易出錯的地方 架構雖然清楚又明瞭,但是事實上要運行卻沒有那麼的容易。這邊講者也分享藉由 “Websocket 無法正常建立“的錯誤,來分享如何追蹤這個問題來解決真正的問題。 如同上圖提到 Kubernetes Provider 是透過 WebSocket 與 Kubernertes User Cluster 溝通。有一天忽然發現了 WebSocket 忽然斷線的狀態,回過頭來看 Kubernetes DNS 的設定, Container 網路的架構甚至也解釋了flannel 網路架構。透過這些架構的解析,聽眾會了解在實體機 (Baremetal) 上面架設 Kubernetes 其實遇到的網路問題其實更多更複雜,因為牽扯跨實體機器與跨網路節點。 找到問題之後,試著做出一個 patch 來修正問題。確定成功之後也將這個問題回饋到 Rancher 的 OSS 來貢獻 LINE 研究的結果。 類似的問題就是...
繼續閱讀

[TIL] LINE Developer Day 2018 投影片內容分享 - LINE Token Economy

LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹 from LINE Corporation 前提 作為 LINE 的開發技術推廣,除了一般的 LINE 平台技術之外(也就是聊天機器人)當然也要懂公司所有的相關產品與技術。 去年在 LINE TechPulse 所邀請到的 LINK (LINE Token Economy) 來分享為何 LINE 需要 LINK 與其重要性。 稍微將相關投影片做一些翻譯與解釋,主要先針對為何 LINE 要做自己的區塊鏈服務與 LINK 想要解決的問題與想要達到的成果。希望能讓許多人更了解 LINK 的用途。 內容分享 P.3 LINE NEEDS Blockchain and Cryptocurrency 這一頁解釋了為什麼 LINE 需要自己做區塊鏈的服務。會從三個角度來看: 使用者與服務的關係 網路效應(需求方外部性: Network Effect)擁有權 全球化平台 接下來從這三個面向來解釋。 使用者與服務的關係的演進關係 (P.4) 這個表格敘述服務與使用者關係的演進史: 在網際網路以前使用者都是付費方,而服務提供商都是兜售服務來獲利。 有了網際網路之後,由於使用者的人數變成轉換金錢的方式。於是服務變成都是免費(其實不是免費,而是第三方買單),而使用者變成是服務的接受者。 (網路新聞,網頁,官方網站.. 等等) 到了現在“使用者產生內容”( UGC: User Generated Content ) 正紅,如何鼓勵使用者主動地產生大量而有價值的內容,就變成是很重要的事情。 (比如: 直撥主, 部落客…) 網路效應的擁有權 (P.5) 網路效應( Network Effect )是一個專有名詞講解的是使用者所獲得的效應會從著網路變大而越來越多。舉例而言就是社群媒體( SNS ) ,只要有更多人的加入裡面每一參與者能獲得的效應也就更大(越多人能聊)。 所以適時的獎勵系統( Incentive ) 可以幫助我們打造強壯的網路效應,讓每個人加入除了可以獲得更多的工具體驗外,也能有更多的參與感。 全球化的平台 (P.6) LINE 在全球有超過一億六千萬的活躍用戶,並且在世界各地都有相關的使用者。需要一個更好的方式可以讓不同國家的使用者可以相互交流,減少國家與國家間交易的限制與屏障。 透過這三個面向,我們可以了解 LINE 身為全球化平台,要打造更強壯的網路效應,並且讓使用者之間又更好的互動與更積極的參與服務與互動。 區塊鏈貨幣是不可或缺的。 LINK :LINE’s cryptocurrency (P.8) LINK(LN)作為虛擬數位加密貨幣,既是刺激使用者貢獻的獎賞,也是一種支付方式,更是一種工具。 LINK: LINE token economy LINK 生態圈的三個大準則 (P.9) 為了 dApps 與使用者所設計,必須要簡易使用不需要太多複雜的區塊鏈相關知識。 作為分享與貢獻者的獎勵, LINK 不僅僅作為獎勵來刺激使用者外,也是一種方式來讓設計 dApps 的開發者來獲利的方式。 作為連接經濟圈的唯一貨幣,不僅僅可以做為獎賞,開發者的獎勵外。更可以作為交易用途的中介。 LINK 生態圈裡的單一貨幣系統 (P.11) 這邊是拿 LINK 的私有鏈系統與一般透過 Ethereum 所打造的生態系與 LINK 生態系來作為比較。 Ethereum: 任何 dApps 要進行交易的時候,需要消耗一定數量的 GAS 。所以這時候的貨幣是 ETH ,但是使用者拿到的可能是透過 dApps 所產生的另外一種貨幣。 所以這樣的部份是有一點複雜的, LINK: 相較之下 LINK 的系統由於是自己的私有鍊,所以作為交易的所使用的貨幣與使用者拿到的貨幣都是同一種。 LINK 的發行計畫 (P.12) 總發行量: 十億個 LINK (LN) 不作為私有販賣之用,不作為 ICO ,只作為獎勵使用者之用。 用途: 80% 作為獎勵之用。 20% 保留作為經營之用 (行銷,運作,...
繼續閱讀

[TIL] 關於 Golang 1.11 之後在 VSCODE 裡面的 GOROOT 設定

關於 vscode-go 的設定 使用 vscode 並且使用 Golang 1.11 之後版本的人,每次 Golang 版本更新可能會出現。 go: cannot find GOROOT directory: /usr/local/Cellar/go/1.12.1/libexec 之前我都手動改 vscode 裡面 goroot 設定,但是其實只要在 settings.json 增加以下這行就好。 { .... "go.inferGopath":true, .... } Reference https://github.com/Microsoft/vscode-go/issues/1879 https://github.com/Microsoft/vscode-go/wiki/GOPATH-in-the-VS-Code-Go-extension
繼續閱讀

[Coursera] Smart Contract (二)

Blockchain Specialization 系列上課心得 Blockchain Basics Smart Contract (本篇) Decentralized Applications (Dapps) Smart Contract 課程鏈結: 這裡 文章鏈結: Smart Contract (一): Week 1 ~ week2 Smart Contract (二):Week3 ~ week4 Smart Contract (三) : 期末作業 前言: Smart contract 的課程進入了第二週,不是很確定能不能夠在兩週連最後的程式作業都能夠完成。(看起來很難 XD) 不過還是希望能夠多寫一些部分,由於最終程式作業的部分題目就高達四頁滿滿的說明,看起來可能會需要多一個禮拜。 XDD 課程內容: 這部分的課程其實還蠻有趣的,包含以下的部分: 了解 Smart Contract 的內容元素 Smart Contract 的程式語言 Solidity 的語法與語義 如何透過 Smart Contract 來解決問題 透過 Remix ( A Web IDE of Solidity) 來建立與部屬你的 Smart Contract Week3: 回歸選票的智能合約 這個章節一開始就解釋關於 week2 的範例 Ballot 的內容。 這是一個類似選舉的 Smart Contract 只有主席能夠註冊候選人,其他人只能投票。 主席一票代表兩分,其他人都只有一分。 winningProposal 會取得誰當選的結果 開始改進 但是其實這個範例有著許多設計不夠周全的地方: 當沒有人註冊的時候, winingProposal 依舊會開票。 投票沒有時間限制 無法確定所有的選民都投票 解決第一個部分的問題,沒有投票的狀態 透過 modifier 來解決 modifier validStage(Stage reqStage) { require(stage == reqStage); _; } 以上是 modifier validState 的定義,可以透過以下的方式來在 function entry 來檢查。 function vote(uint8 toProposal) public validStage(Stage.Vote) { ...... } 可以看的到,透過 validState 可以檢查輸入的狀態是否為事先定義的 regState 。 投票沒有時間限制 可以透過時間限制的方式來做,但是要如何在 solidity 裡面來檢查時間是否在有效期間內(事先定義為 30 seconds) if (now > (startTime+ 30 seconds)) {stage = Stage.Done; votingCompleted();} 這邊也要註解一下: now 是 solidity 的保留自,裡面代表的是當前這個 block 被建立的時間。 這邊可以查詢相關 now 的文件,可以更清楚。 https://solidity.readthedocs.io/en/develop/units-and-global-variables.html?highlight=block.timestamp#block-and-transaction-properties 無法確定所有的選民都投票 比需要對每個 sender...
繼續閱讀