[Coursera] Decentralized Applications (Dapps) (二)

Blockchain Specialization 系列上課心得

Decentralized Applications (Dapps): 課程鏈結: 這裡

文章鏈結:

前言:

這次的第二堂課跑得比較久,並不是因為課程比較難而是因為課程內部提供的 truffle 版本跟現階段的差很多,導致其實無法再 Mac OSX 上面順利的執行,需要修改不少的地方。雖然能夠幫助我夠熟悉整個 truffle 的架構,但是也真的得花很多時間解決各種問題。

如果還是一直卡住,真的還是得考慮使用 VirtualBox 來跑 VM 比較快。

課程內容:

Week2:

Truffle 的介紹

Truffle 與 Remix 的差異

這次主要會用到的工具叫做 Truffle ,在使用 Truffle 之前需要分別出跟之前使用 remix 的差別:

  • 分析問題, Smart Contract 的 prototype 需要使用 remix
  • 開發,測試與部屬 dApps 需要使用 Truffle

如何透過 Truffle 部署簡單的專案

接下來透過 Truffle要來跑一開始最簡單的範例 Ballot 流程如下:

  • 安裝 Truffle :
    • npm install -g truffle
  • 初始化專案
    • mkdir ballot
    • cd ballot
    • truffle init

裡面會有幾個已經設定好的 template 包括了:

  • migrations/1_initial_migration.js: 負責 migration script file
  • truffle-config.js: 負責 truffle compiler 的設定檔案

增加設定檔案 truffle.js (這檔案是負責 truffle 部署的設定檔案)

module.exports = {
networks: {
deployment: {
host:"localhost",
port: 9545,
network_id: "*",
}
}
};
view raw truffle.js hosted with ❤ by GitHub

增加 deployment 的相關設定 (建立一個檔案 migrations/2_deploy_contracts.js)

var Ballot = artifacts.require("Ballot");
module.exports = function(deployer) {
deployer.deploy(Ballot);
};

關於將舊的 Remix 的檔案 Migrate 到 truffle 這邊的部分就參考這篇文章。[TIL] Migrate solidity from remix to truffle (1) - Compile

Test-Driven Development

Smart contract 就像 hardware chip 一樣,一但部署了就很難變更(除非有大量問題導致必須修正)。 本小段的內容就是教導如何透過 TDD 的方式來撰寫 smart contract 。

關於 truffle test 的流程 (如果有任何 truffle test 錯誤需要來做 smart contract 修正):

  • truffle compile
  • truffle migrate --reset
  • truffle test

Web Interface & Testing

這一個章節開始要將 Web Interface 的部分導入到我們目前的專案之中,也讓我們更了解 Dapp 如何透過網頁前端的整合來呈現出來。

檔案架構

在這之前,讓我們更了解所有檔案架構:

  • contracts: 所有的 smart contract 相關代碼。
  • migrations: 放著 migration 會用到的相關 scripts 。
  • test: 通常會放入所有相關測試代碼。
  • build: 放著一些 json 設定檔案。
  • source: 通常會放著 web 相關的資源。

關於 truffle command line 整理

  • truffle init: 建立範例給你準備開始自己的 truffle 專案。
  • truffle compile: 將 Solidity code 轉換成 byte code
  • truffle develop: 部署基本的 truffle 內建的 blockchain 環境。
  • truffle migrate —reset: 如果有修改 migration script ,需要執行來重置設定。
  • truffle test: 執行相關測試代碼。

總結:

本堂課專注在透過 truffle 的學習來了解使用 truffle 能夠達到的許多工作,從基本的 Ethereum client 到 truffle 與 MetaMask 的工具使用都有學習到。

Reference:

[TIL] Migrate solidity from remix to truffle (1) - Compile

前提

最近在上Coursera 的 Blockchain Specialization 系列的課程 Decentralized Applications (Dapps),裡面提到使用 Truffle 。 由於課程裡面使用的 Truffle 版本比較舊(目前是 0.5.1,課程內是 0.4.0? ) ,本來想打算使用 VM 的方式來跑,但是發現現在的筆電跑 VM 有點悲情。

只好硬著頭皮來直接去修改相關的代碼,想想相關的修改應該也可以變成一系列的文章。 就來試試看吧!!

內容分享

Truffle 的介紹

Truffle 與 Remix 的差異

這次主要會用到的工具叫做 Truffle ,在使用 Truffle 之前需要分別出跟之前使用 remix 的差別:

  • 分析問題, Smart Contract 的 prototype 需要使用 remix
  • 開發,測試與部屬 dApps 需要使用 Truffle

如何透過 Truffle 部署簡單的專案

接下來透過 Truffle要來跑一開始最簡單的範例 Ballot 流程如下:

  • 安裝 Truffle :
    • npm install -g truffle
  • 初始化專案
    • mkdir ballot
    • cd ballot
    • truffle init

裡面會有幾個已經設定好的 template 包括了:

  • migrations/1_initial_migration.js: 負責 migration script file
  • truffle-config.js: 負責 truffle compiler 的設定檔案

增加設定檔案 truffle.js (這檔案是負責 truffle 部署的設定檔案)

module.exports = {
networks: {
deployment: {
host:"localhost",
port: 9545,
network_id: "*",
}
}
};
view raw truffle.js hosted with ❤ by GitHub

增加 deployment 的相關設定 (建立一個檔案 migrations/2_deploy_contracts.js)

var Ballot = artifacts.require("Ballot");
module.exports = function(deployer) {
deployer.deploy(Ballot);
};

將之前的範例 Ballot.sol migration 過來

這一段是 (Smart Contract ) 課程中搬過來的第一個範例程式 ballot.sol ,大家也可以直接參考以下的部分。

pragma solidity ^0.4.0;
contract Ballot {
struct Voter {
uint weight;
bool voted;
uint8 vote;
// address delegate;
}
struct Proposal {
uint voteCount; // could add other data about proposal
}
address chairperson;
mapping(address => Voter) voters;
Proposal[] proposals;
/// Create a new ballot with $(_numProposals) different proposals.
function Ballot(uint8 _numProposals) public {
chairperson = msg.sender;
voters[chairperson].weight = 2;
proposals.length = _numProposals;
}
/// Give $(toVoter) the right to vote on this ballot.
/// May only be called by $(chairperson).
function register(address toVoter) public {
if (msg.sender != chairperson || voters[toVoter].voted) return;
voters[toVoter].weight = 1;
voters[toVoter].voted = false;
}
/// Give a single vote to proposal $(toProposal).
function vote(uint8 toProposal) public {
Voter storage sender = voters[msg.sender];
if (sender.voted || toProposal >= proposals.length) return;
sender.voted = true;
sender.vote = toProposal;
proposals[toProposal].voteCount += sender.weight;
}
function winningProposal() public constant returns (uint8 _winningProposal) {
uint256 winningVoteCount = 0;
for (uint8 prop = 0; prop < proposals.length; prop++)
if (proposals[prop].voteCount > winningVoteCount) {
winningVoteCount = proposals[prop].voteCount;
_winningProposal = prop;
}
}
}
view raw ballot.sol hosted with ❤ by GitHub

檔案記得要建立在 contracts/ballot.sol 下面,接下來會講解如何做正確的 migration 。

試著編譯 truffle

truffle compile 結果發現了一些錯誤,就來開始解決問題吧。

Compiling your contracts...
===========================
Error: CompileError: ParsedContract.sol:43:39: ParserError: The state mutability modifier "constant" was removed in version 0.5.0. Use "view" or "pure" instead.
    function winningProposal() public constant returns (uint8 _winningProposal) {
                                      ^------^

####先試著降 Solidity Compiler 版本

Truffle 0.5.1 使用到的 Solidity compiler 預設是 0.5.0 ,我們可以透過修改 truffle-config.js 來降低 solidity compiler 的版本。 可以參考: https://truffleframework.com/docs/truffle/reference/configuration#compiler-configuration

不過出現的問題卻更難解決:

Compiling your contracts...
===========================
Error: CompileError: ParsedContract.sol:7:14: Error: Expected identifier, got 'LParen'
  constructor() public {
             ^

看起來更看不懂,那麼換個方式。來幫現在的 Solidity code migrate 從 0.4.0 到 0.4.23 。

開始進行 Solidity 升級的步驟 (0.4.0 —> 0.4.23):

  • 先將版本訂在 0.4.23 以上:
    • pragma solidity >=0.4.23 <0.6.0;
  • 因為之後 constrctor 語法不同,改一下: (可以參考這個)
    • constructor(bytes32 _name) public {
  • constant 在 0.4.17 後不支援,改成 view
    • function winningProposal() public view returns (uint8 _winningProposal) {

細節大家可以參考這個 coomit. https://github.com/kkdai/truffle_balot/commit/cc23ca5d97ecef48921c3b83c66a0763e7e43edc

總結:

這裡先整理第一階段的 Truffle compiler migration ,接下來還有truffle testtruffle migrate 相關的整合部分會加入。這個相關過程也讓我更了解 truffle 運作的原理。

Reference

[好書分享] 鋼鐵人馬斯克(全新增訂版)

(圖片參考 讀墨 )

從特斯拉到太空探索,大夢想家如何創造驚奇的未來
Elon Musk : Tesla, SpaceX, and the Quest for a Fantastic Future

原文作者:Ashlee Vance
譯者:陳麗玉

買書推薦網址: http://moo.im/a/DHKPQX

前言:

現代的鋼鐵人 - 馬斯克,不僅僅被視為是狂人之外。更是讓推動電動車的特斯拉與新創火箭科技 SpaceX 兩個令人驚豔的黑科技公司的執行長與董事。這本書應該蠻久以前就想要買來看。前一段時間一次買了三四本,斷斷續續的下來總算把這本書看完。

最近持續要規定自己減少每天手機的利用時間,除了上班不得不用之外。應該在家裡都是要持續拿著我的 Readmoo 好好的閱讀書籍。

內容簡介:

最近的幾篇傳記不論是貝佐斯傳到現在這的本 馬斯克傳記,其實都算是從記者的角度來撰寫的文章,而不是本人或是完整授權的傳記書籍。這類的書籍脈絡都還算容易了解,從一開始的媒體寵兒的角度來切入馬斯克,開始帶入成就他被稱為矽谷鋼鐵人傳奇的起頭。

馬斯克從小出生是在一個南非的富裕家庭,但是從小的馬斯克因為經常陷入深沈的思考模式,也就是無視於周遭的人的聲音整個陷入自我的思考模式,由於這樣的原因讓馬斯克從小經常被欺負。 但是這些都無法掩飾他異於常人的思考邏輯,搭配著他喜好讀書(並且獨得相當快速)的習性。讓馬斯克很容易地了解並且有著良好的基礎。

出社會之後馬斯克更展現了他的才能從第一次創業透過網頁黃頁的 Zip2 ,並且從兩個人的公司打造自己的第一個企業。後來被康柏併購之後,馬斯克也得到了他人生的第一桶金。

接下來就像大家耳熟能詳的創業模式,他們創立了 X.com 並且與 Paypal 競爭了一段時間之後就併購了 Paypal 。但是這個時候馬斯克也被迫交出了執行者的職位。被迫離開執行位子之後, X.Com 將名字改為 Paypal ,之後就像大家熟知的一樣,接下來 ebay 花了十五億美金買了 Paypal 。馬斯克有了他的第二桶金,有點像是賈伯斯離開蘋果一樣,這時候的馬斯克將他的眼光放到了小時候的夢想 — 火星旅遊。

接下來讀故事就是大家較熟悉馬斯克同時兼顧了人類兩個夢想的科技公司,火箭科技的 SpaceX 與電動車產業的 Tesla 。這邊幫作者賣個關子好了,其實這一段轉折還蠻有趣的。

馬斯克之所以被人稱為現在的鋼鐵人,出了有錢之外,就是他驚人的執行力。他可以很快的學習一件事情,然後跟工程師辯論為何不該這麼做。某種程度也是一種缺點就是他很愛跟工程師說,「我來做你的事情跟兩家公司的執行長」但是恐怖的是,他會這麼做而且做得很好。

心得:

這本書主要是由記者角度來寫,裡面有許多的歷史事件的紀錄。由於沒有太多本人的資料,可能沒有夾帶著個人情緒的元素。·會覺得馬斯克真的像是機器人一樣,優秀而不帶著個人情感。 但是這本書也提到了,他的家庭生活與他對於第一個孩子夭折所帶來的痛苦。 這本書有許多有趣的歷史,更可以了解這些令人感到傳奇的執行長們的人生。像是賈伯斯,貝佐斯一樣,馬斯克一樣有著高超的學習能力與暴躁挑惕的個性。或許,這些也是這些傳奇執行者們的樣板一樣。

最後,相當推薦大家來看這本書。很多有趣的故事會讓你愛不釋手。

LINE 開發社群計畫: TWJUG#201904@LINE

前提

大家好我是 LINE 台灣的 Technical Evangelist - Evan Lin 。「開發社群計畫」是今年一個開發者關係與技術推廣部門一個重點,將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。

四月第一場社群活動邀請到 TWJUG (Taiwan Javsa User Group) 社群到 LINE 來舉辦。也請到 LINE Pay 的 Webber Su 來分享,除了讓更多人能夠了解 LINE Pay 工作經常用到的工具外,也希望能夠引發一些討論甚至可以互相交流。

Where is the ghost in the ghost island? Explore by Java and Mongo/ LINE Pay - Webber Su

投影片

首先上場的是 LINE Pay 的同仁 Webber Su 所帶來的透過開放資料集的一個案例分享。在 LINE Pay 的開發經驗上其實會遇到大量資料的處理與分析,但是由於許多的客戶資料都是屬於機密資料無法公開,所以透過開放資料集的案例來分享 LINE Pay 團隊日常遇到的相關問題。

透過開發資料將全台灣的事故資料匯入資料庫中,並且透過 LINE Pay Merchant Map 的部分的相關技術可以幫我們找出比較容易發生事故的問題區段。

在開始處理資料的之前,講者也分享了他會用到的相關開發工具如下:

以下稍微介紹每個工具的功能與相關作用:

這些開發工具也是 LINE Pay 團隊在開發上經常使用。除了開源專案工具之外, LINE Pay 也首次分享了 LINE Pay Merchant Map 的功能:

LINE Pay Merchant Map 提供了地圖話資訊的條列與搜尋。包括了:

  • List: 條列式的列表。
  • Nearby: 透過地圖是覺化的列出。
  • Search: 甚至透過關鍵字的搜尋方式。

在文字資料的搜尋上,究竟要使用 Elasticsearch 或是 MongoDB 作為文字搜尋呢?這裡講者也分享了當初在內部開發系統上,是透過哪些的評量方式來決定的。 由於許多效能的測試與評量上最後決定是 Elasticsearch 。而在地點鄰近搜尋 (Nearby) 上最後則是決定使用 MongoDB

這個 Ghost Island 的架構其實也將 LINE Pay 開發團隊許多用到的工具分享給大家。裡面包括了資料該如何處理,該如何有效地處理與資料的讀取跟儲存? 這邊講者也分享了一些經驗談,就像是這個案例一樣,對於資料的處理上要有許多小地方要好好處理。如果是開放資料的時候,對於資料的處理要更加小心。資料可能有誤,資料可能有缺甚至資料可能是空的。所以可能將資料多儲存在其他地方也是一個可以變通的方式。這樣可以避免在資料清洗的時候造成程序的錯誤。後端針對文字搜尋與鄰近地圖搜尋則是透過兩個不同的儲存工具( Mongo 與 Elasticsearch )來處理資料。

而且講者也分享了在各個階段可能會踩到的雷(指的是遇到的問題)。不論是剛剛 Batch Spring process ,Spark 資料的處理上還是 Cargo 的部分。

整個主題雖然是使用開放資料的事故來做講解,但是不論是整個流程用到的相關開發工具還是可能會遇到的問題。講者也都分享出來 LINE Pay 團隊在每天在面對的問題可能是許多個面向。需要有深厚的技術背景與經驗才能夠快速的了解與推敲出問題的真正原因。

Containerize and Evolution of Deployment Type / xTeam Studio - Vincent Huang

投影片(https://hackmd.io/p/HJCteAazN)

這個講者的主題相當有趣(我相信在 Java 社群比較少看到),他分享了如何透過 Containerzie 的方式來部署你的應用。並且從 VM 到 Docker Container 到 Docker Compose 最後到了 Kubernetes 的相關部署方式。也介紹了自己在 GKE 上面部署服務的流程範例。

最後展望未來,有更多的工具還能讓你夠有效率的部屬你的服務,不論是透過 Halm , Terraform 都可以讓整體服務在 Kubernetes 上面變得更加的方便與迅速。

總結

很開心邀請到 TWJUG 社群來到 LINE 台灣辦公室舉辦 meetup , 也很開心第一次能夠請到 LINE Pay 的工程師來跟社群們分享開發上的經驗。透過這次的分享, LINE Pay 的開發團隊再也不是讓人覺得相當的神秘,也讓人了解到其實 LINE Pay 開發團隊其實會遇到相當多類型與多面向的問題,你也是喜好解決困難問題的人嗎? 其實 LINE Pay 還在徵求相關的工程師。對於相關開發工具熟悉的技術高手,快來挑戰一下吧?

LINE Pay 相關職缺:

關於「LINE開發社群計畫」

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

[研討會心得] 2019/03/29 LINE Developer Meetup 7

前提

嶄新一年的第一場開發者小聚,特地離開大台北地區,將在新竹的清華大學舉辦 ; 更請到 LINE台灣的許多開發團隊來跟開發者們分享在LINE的開發流程與經驗。 不僅僅有 Developer Relations 的本年度的活動規劃分享,更有來自日本的團隊來解釋什麼是 LINE Private Cloud 。當然不會少的有本地產品開發團隊來跟大家見面與分享,除了有 LINE NOW 與 LINE TODAY 的團隊之外,更有 iOS 與 Android 的開發團隊。機會實屬難得,也很開心能夠跟新竹的開發者一起來討論與交流。

2019 年開發者關係與技術推廣部年度計畫分享 / 資深開發技術推廣工程師 Evan Lin

投影片

首先登場要介紹的部分就是由我所分享的 2019 年度開發者關係與技術推廣部門( Developer Relations )的年度計畫,大家也可以參考這一篇文章的介紹。 這一段介紹主要先講解身為開發者對於 OA 2.0 需要知道的部份。自從 OA 2.0 方案公佈之後其實開發者們都很擔心,不知道會不會有任何變革的部分。在這裡首先分享兩個鏈結給各位。(OA 2.0 全面升級OA 2.0 FAQ ),這兩篇文章其實能解決大多數開發者的疑慮,如果還是有不清處的部分。可以看看投影片內的整理。

Developer Trial 會如何改變?

  • 會轉移到 “低用量”
  • 不限制好友數,發訊超過 500 則會無法發送 (不會收費)。
  • 這樣的改變對於只是想測試功能的開發者是相當貼心的,不用擔心不小心寫錯 Push Message 被收費之外。更可以使用到人數更多低用量方案。

再來就是要介紹 Developer Relations 本年度的一些計畫與每個月的行程給開發者們。其中最重要的計畫就是「LINE 開發社群計畫 」,詳情請看新聞稿。我們將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。

「 LINE 開發社群計畫 」 裡面除了親近開發者社群之外, LINE 也積極在各個開發者盛會中參與,不論是各種大大小小的研討會或是一些社群的 meetup 。都是透過參與社群來使得開發者更能夠了解 LINE 開發的過程與製造更多技術交流的機會。其中也分享 LINE 內部的開發者活動,包括了「技術寫作訓練日」或是內部的其他訓練與 Workshop 。

這個 Session 的最後要跟大家分享就是 LINE 年度開發者招募大會 “LINE Developers Recruitment Day” 即日起也展開,歡迎各位開發高手來報名,一起打造 WoW 使用者體驗的產品。

Developer Relations 相關職缺:

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:

    • Provider 用來創建和管理用戶kubernetes集群,支持多個 Provider。目前使用的是 Rancher。
  • 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 來修正問題。確定成功之後也將這個問題回饋到 Racher 的 OSS 來貢獻 LINE 研究的結果。

類似的問題就是 Verda team 的人每天所遭遇的問題,不斷睇偵測與測試問題的原因,透過不同層面的觀點來了解與解讀問題。如果最後發現問題可能是出在 Kubernetes 源碼部分, LINE 也不吝嗇貢獻出發現的問題與修正的方式。

這樣的流程需要更多的新血,我們也需要各位 Kubernetes 與網路高手的加入。

Verda Team 相關職缺:

從LINE刮刮卡淺談高流量負載的服務架構設計/ LINE台灣工程師, Julian Shen

投影片

這是一篇繼上一次”LINE NOW刮刮卡開發分享” 之後更深入的分享。上一次 Julian 提到 LONE NOW 團隊如何在一個月之內快速的開發出「刮刮卡」這個熱門的活動之後,其實在上線期間剛好就是中秋節的貼圖刮刮卡活動。造成有龐大流量的產生造成了系統的效能瓶頸。 這一次的就是要跟聽眾分享當服務遇到龐大與突然的流量湧入的時候,哪些部分應該要注意?哪些部分可能會造成系統瓶頸?該如何解決?

為什麼會突然有大量流量湧入?

舉凡像是促銷 (像是雙十一),Banner 推廣或是蓋版廣告。都會因為曝光量大增而造成大量流量的湧入。

會發生什麼事?

  • (左上角藍色 1)同時連線數增加, 如超過所能負荷的連線, 會導致前端呼叫API失敗。

  • (左下角紅色 2)

    對外部系統呼叫API次數增加。

    • 對外部系統連接的connection pool被用完。
    • 外部系統也可能被打趴。
  • (右側紅色 3)同時寫入資料庫次數增加, 大量的同時寫入可能導致資料庫效能低落, 進而影響每個API請求的處理時間。

加開機器是否能解決問題?

針對效能的問題,一開始大家都會簡單的思考透過 scale-out (也就是加開機器)的方式來試著解決問題。但是即便加開了機器,還是會受限於資料庫的存取瓶頸造就系統還是會卡住無法在期限內除理完大量的流量。

新的架構如何解決問題?

  • 使用反向代理, CDN可減輕連線壓力
    • 資料來自Redis, 相較於傳統資料庫來的快速
  • 抽卡資訊不直接寫入資料庫, 降低IO的影響
  • 大部分的資料寫入都是延後及非同步
    • API呼叫的處理時間不受資料庫寫入效能影響
    • 對外部系統的壓力可被控制
  • Kafka只要沒掛, 萬一其他系統出問題, 該寫入的資料都還會在
  • Redis, Kafka 可以處理大流量資訊

當然這也不是一次就能完全解決問題,還有其他問題跑出來。講者也分享了有趣的解法。有興趣想瞭解更多的讀者歡迎詳細查閱投影片。

LINE NOW 相關職缺:

What we do and what we use in LINE TW Android team / LINE 台灣工程師 Daniel Kao

投影片

接下來來自 LINE 台灣 Android 團隊的 Daniel 也跟各位分享了相關的開發專案與產品,目前相關的 Android 開發團隊都在三個產品與專案之中:

LINE Today App

這是在印尼上市的產品,是一個根據原本 LINE TODAY 內容索引的完全新的產品,當初如何透過快速迭代的方式產生新的產品的過程。可以觀賞去年在 TechPulse 2018 精彩的演講。 “LINE TODAY高效率的敏捷測試開發技巧” 。

LINE SDK

LINE SDK 是一個提供給 App (iOS, Android)開發者,透過 LINE 帳號登入的 SDK 套件。

相關 SDK 放在這裡: https://github.com/line/line-sdk-android

第三部份就是開發 LINE Android App 其中的元件

包含 LINE TODAY tab,LINE Keep,LINE Album 等功能,都是台灣工程師曾經開發和維護過的元件。

聽完了 LINE 台灣 Android 團隊的工作內容是不是很有興趣? 趕快在下列職缺寄出你的履歷申請。

LINE 台灣 Android 相關職缺:

LINE Taiwan iOS Projects and Practices. / LINE 台灣工程師 Ray Tsai

投影片

再來是 iOS 團隊的 Ray 來介紹 LINE 台灣的 iOS 團隊都負責哪些專案。首先大家會好奇的是,作為科技公司的 LINE iOS SDK 是使用 Objective-C 還是 Swift 來撰寫。答案是 Swift 請參考 https://github.com/line/line-sdk-ios-swift

台灣 iOS 開發團隊就跟 Android 開發團隊一樣。除了 LINE App 裡面的某些模組之外,就是開發 iOS App 的 SDK 。

這張圖列出了 iOS 開發團隊的相關開發工具,相信也會讓許多有興趣的人能夠了解。

LINE 台灣 Android 相關職缺:

LINE 相關產品與團隊介紹

最近接著上場就是各個產品團隊與開發團隊分別跟大家自我介紹,希望能夠讓參與者能夠更了解我們的產品團隊與開發團隊。

LINE 購物團隊 (投影片)

相關職缺

LINE 旅遊團隊 (投影片)

相關職缺

LINE Pay團隊 (投影片)

相關職缺:

LINE Today團隊 (投影片)

相關職缺:

LINE UIT 開發團隊 (投影片)

相關職缺:

活動小結

本場活動是第一次離開台北的開發者小聚,除了讓參與者能夠跟 LINE 內部開發團隊相見歡之外。就是希望讓許多人能夠更了解 LINE 台灣數百人的開發團隊主要在從事哪些專案,也分別具有哪些類型的開發團隊。此外,這樣的平台也需要許多有能力的開發夥伴,也歡迎各位去 LINE Developer Careers (網址) 查看相關職缺,一起來加入我們。

[Coursera] Decentralized Applications (Dapps) (一)

Blockchain Specialization 系列上課心得

Decentralized Applications (Dapps): 課程鏈結: 這裡

文章鏈結:

前言:

剛忙完本年度公司第一次的 Meetup ,其實每天都忙著在寫文章,感覺逐漸邁進量產化技術部落格作家邁進。不過還是得要花點自己的時間好好把該讀的課程讀完,畢竟也已經付錢了。所以回過頭來還是得每天努力地啃, Blockchain Specialization 系列的課程。第三期開始感覺更加多的作業與實作著部分,應該也會變得輕鬆一點吧(咦?)。

課程內容:

Week1:

Dapp 架構圖

Ethereum 相關環境安裝

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

參考: https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

GETH 相關初始化指令

  • geth --datadir ../eth_node account new

  • geth --datadir ../eth_node init genesis.json

    • genesis.json 範例如下:
    {
        "config": {
            "chainId": 88888,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "coinbase" : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x1",
        "extraData" : "0x00",
        "gasLimit" : "0xfffffffffffffff",
        "nonce" : "0x0000000000000042",
        "timestamp" : "0x00",
        "alloc" :{
            "account-address": {"balance": "0xffffffffffffffffffffffff"}
        }
    }
    

參考: https://medium.com/infrageth/practical-steps-for-go-ethereum-setup-27b8d64903fc

名詞解釋:

enode:

用來給其他節點連接到 bootnode 之後,透過 P2P 方式來跑 blockchain operation。也可以當成是 ethereum 世界裡面的 URI 。

Definition of Dapp:

A Dapp, or decentralized application, solves a problem that requires blockchain services and blockchain infrastructure for realizing its purpose.

相關實用 CLI command:

  • eth.SendTransaction()
  • geth —rpc —rpcport8544

常使用到的 ethereum network ID

  • 1: Frontier, Homestead, Metropolis, the Ethereum public PoW main network
  • 4: Rinkeby, the public Geth-only PoA testnet

Refer https://ethereum.stackexchange.com/questions/17051/how-to-select-a-network-id-or-is-there-a-list-of-network-ids

相關 Ehteruem API

  • admin: 管理相關用途, admin.addPeer() admin.nodeInfo()
  • debug: 除錯用的 debug.dumpBlock(16)
  • miner: 挖礦(miner) 相關功能
  • personal: 用戶資訊相關
  • txpool: Transaction pool 相關用途 。 txpool.inspect() 列出所有還未執行的交易。

Dapp 透過 web3 來跟 ehtereum client 來溝通 (under RPC)

  • web3.eth.getBalance()
  • web3.eth.accounts.create()
  • web3.shh whisper protocol 相關的功能查詢

總結:

第一週主要都是關於 Dapp 概念上的分享,並且透過 geth 來做一些實際操作的部分。充分讓人了解 Dapp 與 Ethereum client 溝通與彼此扮演的角色。

Reference: