September
11th,
2018
課程鏈結: 這裡 Blockchain Specialization 系列上課心得 Blockchain Basics (本篇) Smart Contract 待續 前言: 最近開始決定來清理一下 Coursera 上面積欠的課程,但是也想到竟然有這幾天的假期,不如來好好的學習一些有趣的知識. Ethereum 就是一個我之前一直想好好學習,但是沒有時間可以了解的. 剛好看到 Coursera 也有相關的課程,所以決定把這個系列課程剛好這幾天學習了解. 「Blockchain Basics」 算是比較粗淺的入門課程,並沒有任何的 Programming 的部分,主要是做概念的講解與名次的解釋. 課程內容: Week1: 基本的 Blockchain 結構: UTXO UTXO(Unspent Transaction Output): 結構包含如下 Unique identifier of the transaction that created the UTXO Index Value (option): Condition under output can be spent 一個 Transaction 會有 Input UTXO 也會有 Output UTXO, Genesis Block Genesis Block 指的是第一筆的交易,不論是 Bitcoin 或是 Ethereum 都有他們的 Block #0 ,我們可以透過以下的工具來查看: Block Explorer: https://blockexplorer.com/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 具有 1 個 transaction Reward: 50 Difficulty: 1 時間: 2009 (如果你那時候開始玩.. ) EtherScan: https://etherscan.io/block/0 具有 8893 個 transactions 0 個 contract Gas: 5 Reward: 5 Week2: Smart Contracts: Smart contracts 是透過類似 Solidity 的高階程式語言,寫成一段程式碼可以透過 EVM (Ethereum Virtual Machine) 跑在任何的 ethereum client 上面. Ethereum 貨幣單位 \[1 Ether = 10^{18} Wei\] 交易產生 Smart Contracts 流程: 每一筆交易可以帶有可執行的程式碼 (smart contracts) ,但是執行該 Smart Contracts 的算力(Gas) 會被反映到手續費裡面.並且有嚴格的 Gas Limit 來掌控一個 Block 所能使用的上限. 節點功用: Full node: 交易的啟動,認證 挖礦 區塊的建立 智能合約的執行 Minor node:...
繼續閱讀
September
9th,
2018
前言:
最近把一些之前沒看完的書開始拿出來讀完,這一本就是在閒暇時間拿來消遣用的書.但是雖然最近 Kobo 大幅度特價來台灣打廣告,我還是喜歡紙本的書啊(書櫃表示滿了..)
這一本不諱言當初是因為封面的比克大魔王 而買下來的,但是其實內容相當有趣所以當初也是一次幾乎都看完了.一直到了最近才有時間去寫讀書心得.這系列其實跟「空想科學讀本」系列很像,屬於幻想的科學系列.但是作者們都用很嚴謹的角度來看待當初埋藏在各位心裡的奇怪想法.
tldr: 如果你沒有看過以下的漫畫讀物,強烈建議你「不」要買這本書來看.因為作者 岡田斗司夫 是動畫公司的創辦人,並且是美少女夢工廠當初創辦的公司. 裡面的範例也超級「宅」 ,如果是愛看漫畫的人或許可以完全融入作者的幻想科學裡.
內容簡介:
「征服世界」 已經忘記有多少動漫畫的反派夢想似乎都是這個,透過征服世界來達到自己的夢想.這本書也很有趣的由這裡展開.本來只是作者 岡田斗司夫 在暑假一個有趣的研究的分享,「一起征服世界吧」的演講. 卻被出版社聯絡,決定要出了這本有趣的書. 不過作者也不是泛泛之輩,他就認真的開始分析各個動漫反派的動機與方法論.整本書的架構如下:
征服世界的目的是?
一開始作者先透過一些動漫角色 「假面騎士」還有「北斗神拳」裡面的來分析這些反派為何要征服世界.每個人都有不同的目的:
消滅人類: 宇宙戰艦大和號- 科美拉星人
我要錢:
老是被人管,想要統治別人
推廣邪惡: 這個酷了吧? 竟然是七龍珠裡面的比克大魔王
哪類的統治者?
這邊就統治者(也就是我們說的大反派)來分析他們的人個特性,你看是不是相當認真.
想要征服世界的大反派,其實分成四型:
魔王型
獨裁者型
昏君型
幕後黑手型
那麼如何征服世界呢?
這邊就認真的討論,如果真的想要征服世界的人該如準備?
設定目的
確保人才
調度資金
作戰計畫管理及肅清屬下
征服世界之後(繼承人問題)
真正有可能征服世界嗎?
這個章節也認真的討論(但是還是舉了很多動漫的例子)征服世界的好處,還有統治世界的重點.
心得:
這本是相當適合當作休閒刊物,當然前提你還是要有相當程度的「宅」才能看懂裡面所舉的範例.作為一個放鬆毒物其實相當的棒.但是除了動漫的角色之外,也是可以看到作者對於歷史與人類管理相關的演進過程有一定程度的研究.有許多相關內容也潛移默化的導入到有趣的範例內.
繼續閱讀
September
6th,
2018
前言:
這本書其實已經看完幾個禮拜了,不過一直到這幾天放長假(?) 之後才有時間來寫. 這一本書是 Redhat 的大大提供建議的好書.雖然書名跟摘要會讓人覺得好像跟資訊技術人員沒有關係,但是裡面的內容其實都是通用的.讀完之後覺得有滿多地方可以推薦給大家.同時我會一併轉換到資訊技術人員來說,該怎麼去改善自身的撰寫方式.
其實我經常在演討會的摘要或是投影片上面都有運用到相關技巧,也歡迎大家相互討論指教.
內容簡介:
這本書是泛科學總編輯與泛科知識公司的知識長-鄭國威所撰寫的書.主要就是敘述他如何讓泛科學 這樣介紹科學的知識網站如何獲得大眾的青睞. 如何透過「有趣」並且吸引人的內容來讓更多人了解艱澀的科普知識.
整本書的內容圍繞在三個大流程:
如何寫出受人歡迎的知識內容? (知識寫作的九宮格)
如何宣傳你的知識文章
建立個人知識品牌
接下來就簡單介紹一下這本書裡面的內容,希望會讓大家更欣賞這本書.我會一併轉換到資訊技術人員來說,該怎麼去改善自身的撰寫方式.
如何寫出受人歡迎的知識內容? (知識寫作的九宮格)
知識寫作的九宮格是一個工具,幫助你將你的知識鋪成文字並且吸引人來吸收.一個良好的知識需要足夠吸引人的文字來架構,並且需要有足夠好的內容與標題吸引人來閱讀.
1. 熱點:
透過流行文化與名人的話題來吸引人進來,對於資訊相關的知識而言.比如說最近的支付話題相當的盛行,不論是 Line 一卡通的新聞或是麥當勞大麥克之亂的都是很適合拿來寫作並且你腦袋裡面的知識帶入到文字之中.
2. 場景:
透過令人熟悉的故事,場景或是時空來讓讀者更容易吸收一些知識. 比如說透過 棋靈王 吸引人來聽 AlphaGo 甚至是 Tensorflow. 透過 Pokemon Go 的圖片與熱潮來解釋 Kubernetes 如何自動化擴展節點的優點都是.
3. 誰:
你的文章想要寫給誰看? 你的演講想要對誰說? 這個場地大多是哪一些人? 都是我每次一到了演講會場都會花時間去了解的. 如果是 ModernWeb 的場子,大多會是前端的人才, COSCUP 大多會是學生而各種不同的 Conference 都會充滿著各行各業的人. 「你如何透過他們的語言」將你的知識解釋給他們聽? 才是講者真正的功夫.
4. 為什麼? 怎麼做?
先建立好整篇文章(演講)的情境後,接下來就是你要文字(演講)的架構. 為什麼就會是一個很重要的問題,因為你的整篇文章都是圍繞著這個為什麼?
為什麼: 就是讓使用者省思,並且吸引他跟你一樣的思考
以下提供一些我過往的例子:
因為聊天機器人只會回答一般的文字,所以我們希望能幫他加上人工智慧
經常在外面看到一些物品不知道叫什麼名字? 幫你的聊天機器人加上 ImageNet 的人工智慧吧
這些都是「為什麼」你要怎麼做,他是一個 hook 可以鉤住讀者的目光.依照你的脈絡來開始閱讀你的文字.
而怎麼做就是比較有趣的部分,很多時候大家很急著把結果快速地寫出來.對於資訊相關人員而言,直接破題告訴你怎麼解決問題是沒有任何意義的. 因為必須要寫出來如何找到問題點,甚至如果能寫出 debug 的整個流程都是相當的好的.
5. 結果:
對於一般科學而言,這裡提到的是數據,歷史與結論.但是對於資訊從業人員而言,這裡可能就是某些解決方式或是某種現象. 比如說, 使用 Tensorflow 的訓練流程,透過 Kubernetes 來部屬你的服務方式.
6. 展望:
這個部分主要是討論在文章的後端,需要呼應到你一開始的「為什麼?」這個部份.對於資訊人員,舉例而言:了解了如何透過 K8S 來部屬你的服務之後,你必須馬上在文章的末端再給他加強印象.你可以透過 K8S 逐步將你手邊的應用程式方便的部屬,並且有 OOXX 的優點.
這個方式可以再三給讀者強烈的印象,前後呼應並且讓他深刻了解.
7. 感受:
連接者「展望」,讀者再三地強調「為什麼?」而做之後.就需要知道你希望他們產生的相關行動.一篇教導打造聊天機器人的文章,當然就希望讀者自己動作來寫一個.一個 K8S 部署的文章,會告訴讀者可以從哪個方向入手.
8. 參考資料:
這是我很習慣的部分,但是不少寫作的朋友可能都會忘記.附上相關鏈結可以補足你可能遺漏的部分.更可以讓讀者可以去閱讀更多的相關資料.也同時是鼓勵讀者回來回饋,如果有錯誤的話? :p
9. 圖文影音:
這部分屬於觀感部分,人類對於文字的吸收與記憶能力不如圖文與影音.所以可以的話,儘量加上一些圖片可以幫助讀者放鬆.
如何宣傳你的知識文章
文章寫好了,該如何宣傳你的文章? 這邊有幾個很值得分享的內容,你需要「三種關鍵角色來幫你推廣」:
連接者:
如果一篇 DevOps 的文章能夠放在 DevOps 社群的話,當然可以得到更多的讀者共鳴. 所以一個好的文章也需要好的地方「投放」.
專家:
如果你寫了一篇好的文章,你恰巧認識相關領域的專家.可以請他們幫你推薦.一本好的書,一定要能找到專家來寫序或是推薦文.可以為你的知識站台加分.
推銷員:
這邊講的不是像 Sales 那種推銷員,而是很喜歡分享內容的人.透過這樣的人可以讓你的文章獲得更多人的目光.更有可能他們還可能透過一些註解讓你的文章更吸引人進來. (ex: retweet, 臉書分享…)
建立個人知識品牌
這裡有建議的三個階段,快速的整理一下:
熱門平台做可行性測試:
透過 臉書, Twitter 上面直接寫文章的前言.來測試人們對妳話題的感興趣程度.如果很熱門,就可以放更多的心思將它完成.
建立自己渠道:
建立自己獨有的管道,不論是部落格,臉書粉絲頁面,或是社團討論區都可以.你需要建立自己在相關群組人裡面的專業形象.
與其他人合作:
不論是透過其他的社群,其他的討論版面.適當的擴大你的讀者群,是個重要的方向.你需要不僅僅讓你圈圈的人喜歡閱讀你的內容,更要讓不了解你領域的人試著閱讀你的文章.
心得:
這本書真的很棒,雖然大部分的內容都是筆者在通用科學與歷史偏重的泛科學的例子.但是我在閱讀的時候一直都轉換成資訊相關的內容,吸收起來格外的好.希望各位在讀的時候也能有一樣的感受.
繼續閱讀
August
28th,
2018
前言
Beacon 是具有藍芽連線的小裝置,通常裡面的格式為 Apple 的 iBeacon 或是 Google 的 Eddystone . 一般而言,要開發 Beacon 的話比較好的方式就是架設一個 Raspberry Pi 然後在裡面灌起來相關的藍芽模擬.但是如果你想要在 MacOSX 上面寫 Beacon 模擬程式的話,大部分的人都會使用 Bleno 一套由 nodejs 開發出來的藍芽套件. 支援夠好又熱門.
Golang 是很方便的語言,不論是寫在後端或是系統上來說.當然我也會想說來寫寫一些測試 beacon 範例的. 三年前,我曾經寫了這篇文章 Golang BLE Eddystone 初體驗(包含Beacon模擬器) 的文章.但是事隔三年之後,由於 Mac OSX 的系統更新,整個部分已經無法正常運行,需要做修改.
在 Golang 上面要使用藍牙的相關工具,大部分人都是使用 paypal 所開源的 PayPal/gatt ,但是那個套件兩年沒有維護了.以下會簡單記錄一下出了哪些問題.
tldr: PayPal/gatt 已經沒有在維護這個軟體.. Golang 要寫藍牙請用 https://github.com/go-ble/ble
Mac OSX 改了什麼
首先 Mac 在 High Sierra 上面將藍牙設備名稱改名字(為何要這樣做?) 原本的名字是 com.apple.blued 但是到了 High Sierra 就改成 com.apple.bluetoothd
這樣導致了 PayPal/gatt 的 golang 套件無法順利運行.其實在 nodejs 的套件上面馬上就跟上了這個部分( nodejs bleno fixed )
Paypal/GATT 已經沒有在維護
回過頭來的老問題,這些問題其實不能解決也不難維護.但是 PayPal/gatt 由於沒有在維護了.其實相當的困難繼續開發,而且許多 fork 出來的專案似乎也沒有比較解決大部分的問題.
換 go-ble/ble
換過去整個流程還算簡單, go-ble 提供 Advertisement 跟 iBeaconAdvertisement.方便提供相關的轉換.
參考
paypal/gatt issue: Examples issue “Go pointer to Go pointer”
` GODEBUG=cgocheck=0 ./server`
currantlabs/ble issue: Not working on macOS High Sierra
Unhandled event: xpc.Dict{"kCBMsgId":4, "kCBMsgArgs":xpc.Dict{"kCBMsgArgState":5}}
Tracking macOS High Sierra Support
繼續閱讀
August
26th,
2018
前言 上週五去參加了 LINE 的技術者聚會活動,也同時聽到如何透過 LINE Beacon 來跟 LINE Bot 結合.於是決定把整個官方範例串接起來,並且將整個流程寫的更容易了解. LineBot Beacon 流程 在這個流程圖裡面,你可以看到整個流程有一點小複雜: 首先使用者的手機接受到 Beacon 的訊號後,手機會將藍牙訊號傳送到 LINE App LINE App 收到後,發送 Beacon hardware ID 給 LINE Server LINE Server 根據 hardware ID 轉發給相關的 LINE Bot (也附上該使用者的 token) 這時候 LINE Bot Webhook 就會收到使用者發送一個 beacon 的 event 跟據不同 Beacon ID 跟 Event (Enter/Leave) 來定義不同的反應方式 根據這樣的流程,可以知道以下幾件事情: Beacon 的控制的事情其實有限 (Enter/Leave) Beacon event 本身提供訊息也只有以下的部分 string Msg //beacon string string type //beacon type string hardware ID //beacon hardware ID to determine b 根據這些訊息,其實還是能做出很多有趣的運用就要看各位如何發揮想像力. 沒有 LINE Beacon 可以測試? 先試試看官方 nodejs 範例 官方範例: https://github.com/line/line-simple-beacon node 10 的 MacOSX 藍芽上似乎有問題 先來透過官方範例來看看,結果似乎有點問題 (20180825): internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'xpc-connection' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:20:18) at Object.<anonymous> (/Users/Evan/src/go/src/github.com/kkdai/line-simple-beacon/tools/line-simplebeacon-nodejs-sample/node_modules/bleno/lib/mac/highsierra.js:10:21) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) 跟工程師討論的結果,似乎 node10 再 xpc-connection (也就是要跑 mac 藍牙的這個部分) 所以可能還是要使用 node8 是比較穩定的. 那來幫 nodejs 降版吧 如果你跟我一樣使用 Homebrew 作為套件的管理系統,那麼從 node10...
繼續閱讀
August
20th,
2018
前言: 這篇文章其實講解了兩年前為了去 COSCUP 弄的專案(https://github.com/kkdai/LineBotBabyLuis) ,因為當初其實也沒有花太多時間講解開發的內容. 並且也沒有講解如何實現. 如果有興趣當初演講內容的話,可以查看以下兩份投影片: 2016/08/24: Modern Web 2016: Using Golang to build a smart IM Bot 2017/04/27 iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人 這篇文章主要講解最近一週,為了讓這個機器人復原所做的一些修改的部分.並且補充了 LineBotLUIS 的執行循序圖,希望讓有興趣的人能夠更清楚的了解. 關於 LineBotLUIS 的簡單介紹: LineBotLUIS (https://github.com/kkdai/LineBotBabyLuis) 主要是兩年前開發的實驗性質產品.那時候想要結合 NLP 學習的 AI 引擎 (MSFT LUIS) 並且透過 LineBot 的交互式對談的方式,能夠讓這個機器人做到自我學習. 整個機器人就是模擬一個小孩子啞啞學語機器人,大致上流程如下.細節可以再看(循序圖): 輸入小孩子講的話語 (e.g. shi shi, mi~ mi~, ㄋㄞ ㄋ ㄞ ..) 如果她已經學會了,他會告訴你以往的意圖.如果不會它會問你說這句話的意圖是什麼 你可以從 抱抱,牛奶,奶嘴或是玩具之中選擇一個小孩子可能的意圖.(可能就是你了解你小孩子想什麼之後) 然後透過 LUIS 就會學習到,並且之後打出類似的話語就會辨識出來小孩子的意圖. 聽起來很神奇?其實並不難… 架構與近期修改的部分: 這個部分除了 LineBot Webhook (https://github.com/kkdai/LineBotBabyLuis) 的相關處理外,另外還有一個要處理 LUIS API 的 LUIS SDK .這邊是透過我兩年前開發的套件 (https://github.com/kkdai/luis) ,並且也於日前將 API 升級到了 2.0 . 其實本來也沒有太大問題,不過主要是因為微軟日前已經將 LUIS 1.0 API deprecated 掉了.導致我必須將相關的 API 服務都改成 2.0 的服務. 最後, LineBot SDK 也有一些改動.兩年前的 Token 傳遞方式也有變動,造成我必須更新 LineBot Go SDK 的版本之外,其實他們對於 PostAction 的反應也有修改.這邊也會稍微提一下. 關於 LUIS v2.0 修改的部分: 講到 LUIS,就是微軟開發的語意學習引擎 (luis.ai),他將每一句會區分為 Intent(意圖) 與 Entity (物件) .而學習出來的機器模型會根據你輸入的 utterance(話語) 來 Predict(預測) 你的意圖. 先來提提 LUIS 改變到 v2.0 API 的相關修改: Training 跟 Publish 分開來,Training 後必須要 Publish 才能讓你的 Prediction 拿到最新的資料. Prediction 的 API 網址有變動.這邊比較奇怪的是,他不像是一般的 API 從 1.0 換到 2.0 而是整個網址換掉.並且跟其他的 API entrypoint 都不一樣. 其他還有就是要加入 Intent 變得更加的麻煩,不過還好 LineBotLUIS...
繼續閱讀