March
17th,
2016
起因 想要試著寫RSS render,其實並沒有那麼困難. 步驟 先建立一個 tmpl file (ex: atom.tmpl) <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title></title> <link></link> <atom:link href="" rel="self" type="application/rss+xml" /> <description></description> <pubDate></pubDate> <lastBuildDate></lastBuildDate> <item> <title></title> <description></description> <pubDate></pubDate> <guid></guid> <link></link> </item> </channel> </rss> 然後再Code裡面,去使用html/template func AtomRender() string { var r SomeStuct //讀入template t, err := template.ParseFiles("atom.tmpl") if err != nil { log.Fatal(err) } // log.Println("parse template") //產生io.writer buffer buf := new(bytes.Buffer) //讀取資料 err = t.Execute(buf, r) // log.Println("execute it") if err != nil { log.Fatal(err) } // log.Println("get rss:", buf.String()) return buf.String() } 雷 ”+”, “-“ charactor handle 想要在html 裡面parse +或是-,可別直接當成string. //定義成 template.HTML RssNow template.HTML // t.RssNow = template.HTML(SomeString) 跟RFC822對於W3C Feed Validator的問題 問題: Hi All, I trying to write a feed render and I found the time.Format(time.RFC822) is not valid by W3C feed validator . Here is the code http://play.golang.org/p/mfzLKsuVOW Not sure if it is a issue, or I misunderstanding. 得到解答: try time.RFC1123.seems to be close enough –> RFC1123 seems much...
繼續閱讀
March
16th,
2016
前提:
要跟部門大長官開會前,他提到了目前受歡迎的AlphaGo事件.提醒我們對於新聞事件的思考邏輯應該是?
這個新科技是什麼?
為什麼之前做不到? 這次的突破點是什麼?
之後有可能的路是什麼?
這個思考脈絡很能夠引發對於科技更深一步的思考,於是找了一些資料試著把這件事情搞清楚.
裡面有幾個前提是:
我並不會下圍棋
主要參考文章是 “尹相志Allan’s blog- 淺談Alpha Go所涉及的深度學習技術”,還有幾篇相關的論文.
幾個可能的Q&A:
為何電腦下圍棋很難?
因為圍棋可能性是19X19格子,共有361個落子點.所以計算出來需要10的121次方.. (遠遠大過古代宇宙原子說 10的75次方)
以西洋棋(比較簡單)來說40個分支,20步就算是1GHz的處理器,也要計算3486528500050735年. 所以就知道電腦要下圍棋在之前是不行的.
為何AlphaGo 這次能贏? 突破點是什麼?
Machine Learning 的突破點
Deep Learning突破點 2006 的是「A fast learning algorithm for deep belief nets」類神經網路的亂數權重不是隨機,而是經過計算.如此一來可以透過計算的權重刪減掉許多的子樹,大幅度地減少類神經網路的尋找解答的範圍.
之前下西洋棋的”深藍”取決法是透過MinMax(也就是透過賽局理論)來選取最好的下法跟Alpha-Beta Pruning 來刪除不必要的搜尋路徑(不會勝利的選擇).
AlphaGo 如何獲勝
而AlphaGo 思考模式.. 兩個類神經網路(人家稱為兩個大腦)(Policy Network, Value Network)
Policy Network(策略類神經網路):
猜測對方落子的機率.是一種大量輸入棋譜的監督式學習(透過猜測,並且給予解答認證).
由於透過整體形勢來做預測,亂下是無法打亂電腦的計算.
透過增強策略網路(兩兩對戰,增加預測機率),減少誤判.
Value Network (評價網路):
評估目前局勢,找出如何下會取得比較高的勝率.
最後的拼圖,蒙地卡羅搜尋樹:
選取:
隨機挑選一個結果(由於兩個大腦挑選過,可挑選的分支變得可以計算).
展開:
透過剛剛開始的結果,推導接下來棋局.
評估:
計算這次推導結果(樹的搜尋結果)
倒傳導:
挑選最佳結果後,將結果回傳到一開始,然後繼續之後的計算.
AlphaGo贏了.. 接下來代表著什麼?
這部分留著繼續思考….
參考資料:
“尹相志Allan’s blog- 淺談Alpha Go所涉及的深度學習技術”
2006: A fast learning algorithm for deep belief nets
Wiki: MinMax
Wiki: Alpha-Beta Pruning
Wiki: Monte Carlo method
繼續閱讀
March
15th,
2016
前提:
主要是在Line上面的討論,有人覺得像是Bitcoin中blockchain把資料全部分散放在各個client裡面是很不好的做法.這樣所有資料都redundancy.
於是再把一些相關spec拿出來看.. 快速整理一下..
Blockchain 架構速記:
Bitcoin 最好的 blockchain 1.0 應用
喧賓奪主的應用,大概非Bitcoin莫屬. 沒太多人(一般民眾)注意到blockchain的精髓. 只記得這個應用.. 不過隨著幾個大廠商(ex: IBM) 也在開發自己的blockchain 應用. 這一塊早已在新創產業不是話題了…
bitcoin 被稱為是blockchain 1.0的應用,而現階段在新創產業與一些大公司在推廣的就稱為是blockchain 2.0 (smart contract) .
簡單架構
Bitcoin wallet:
一個記錄所有交易紀錄(以下皆成為block)的資料庫(使用Google LevelDB)
每筆交易紀錄(block)平均大小是250bytes,其格式包括了:
Block Size:
4 bytes, 來敘述block大小.
Block Header:
80 bytes, Block header 包括 version, previous hash, timestamp.. (還有其他的)
Transaction Counter:
1~9 bytes (可變) 有多少交易在這個block.
Variable:
大小不定, 交易內容..
每筆記錄(block)與前一筆是串接在一起的(ordering),透過Hash value作為唯一的識別(using SHA256).
Bitcoin miner: (所謂的挖礦機)
負責尋找最新的block hash value,並且確保該hash value 還沒有被產生過.
產生block會先加在最後,並且獲得一定的bitcoin作為獎勵.由於SHA256有其限制,所以能產生的bitcoin被限制在21000k bitcoin.
取得新的Hash後,需要以下的兩者擇一成真,才能獲的bitcoin:
取得大多數的wallet的同意(大於1/2 的 computing power)
連續取得6個新的Hash (表示你的機器速度大於全世界的miner六倍以上)
Bitcoin的特性與展望:
特性:
去中心化
安全(透過其他P2P的審議機制)
所有端點會記錄大部分資料(或全部資料)
未來展望:
除了金流的bitcoin之外,可能有以下的應用:
電子簽約(Smart Contract)
將所有的簽約內容當成錢幣來存放,所有相關人都必須存放所有內容.
存放雙方資料,商品名稱與單位量.
挑戰:
如何計算營收?
如何避免透露過多商業資訊?
證券交割
將股票單位作為blockchain 交易的單位.
遊戲幣
這邊沒有太多特別地方,就是把遊戲中的貨幣改成透過blockchain.可以讓民眾私下交易遊戲幣.
專利與商品證明
bitproof.io 想到透過blockchain來保護智慧財產權.他可以透過檔案(將你的專利或是文章作成檔案後,上傳來取得特定的標記),透過該標記來證明你是第一版的擁有者.
其他:
朋友在討論中談到:
“Blockchain 機制會造成資料的重複嗎?”
經過我尋找,一些資料如下
每筆交易資料 平均是 250 bytes (包含多筆交易資料) 平均每筆交易資料為 26 bytes (參考bitcoin wiki)
透過Google LevelDB 大小會被壓縮..
其實儲存可能不會超過一半以上,因為機制上只要一半以上通過就可以. 不過當網路順暢時還是會儲存全部.
相關鏈結:
Google LevelDB
How bitcoin use LevelDB
押宝比特币?错,IBM看重的只是Blockchain未来
Amazon Book: Mastering Bitcoin: Unlocking Digital Cryptocurrencies
bitproof.io透過bitcoin的專利機制
Bitcoin Wiki: Transaction
繼續閱讀
March
14th,
2016
Steve Jobs - The Lost Interview from Daniel Wagner on Vimeo.
##前提
最近MOD送我電影199 偶爾看到.. 覺得實在很棒… (雖然是20年前訪問… 而且結果大家都知道(爆雷))
##內容
完美的創意與完美的產品的差異 — 在於大量完美的工藝
“There is just tremendous amount of craftsmanship in between a great idea and a great product.”
“問題在於優秀的創意到產品之間存在著大量完美的工藝”
“And as you evolve the great idea, it changes and grows, it never comes out like it starts.”
實現創意的過程中…當你了解的越多…想法會變化甚至面目全非.
“Because you learn a lot more, you get into th subtleties, you also find the… There’s tremendous trade-off that you have to make.”
你不得一次次權衡利弊..做出讓步與調整.
##相關鏈結
賈伯斯遺失的訪問-70-分鐘完整影片心得
Youtube: Steve Jobs 遺失的訪談
繼續閱讀
March
12th,
2016
起因: 有個朋友看我貼了篇docker swarm的文章,於是跟我討論了一些docker的用法. 覺得整個討論相當有意義,於是徵求同意後把文章記錄一下. 整個討論: 討論應用的情境 朋友: 你也有在玩docker嗎? 我: 當然… 朋友: 剛入門一週 在指點一下XD 朋友: 我目前只會裝跟build自己的image,打算把開發環境跟 production都換成docker. 我: dockerize your all service 是個蠻好的課題 朋友: 目前還不是很知道deploy怎麼做比較好,不過我看他還有一堆有的沒的功能 太底層我不太會. 我: deploy 就透過docker-compose 一個設定檔 db/web browser/service 都搞定. 至於Docker也不用看的太底層啦,你先搞懂基礎 docker,在看docker-compose 就已經出師了. 朋友: 所以我local 開發環境要deploy正式環境 用compose就可以,dockerfile有些指令我還看不太懂. 我: 喔… 你是要deploy dev-> prod 我: 沒關係.沒有人記得起來所有docker指令.docker console 大概是我覺得最討厭的指令集了. 朋友: 想要找個比較簡單的做法 我: 那你看看我剛剛貼的swarm 朋友: 每次裝aws環境 裝到我快吐了 解釋Docker Compose 跟 Swarm應用差異 朋友: 所以compose是幹嘛的,swarm我看很多人在講分散式系統,我的需求很簡單 就是想要dev -> 多台production. 我: 簡單的說 docker-compose 可以一次呼叫一群的docker container 並且設定串接在一起. swarm 可以將全世界的container歸類在一起..你在local 就可以操控跨網路的container 朋友: 所以compose必須在同一台主機上 我: 對…基本上. 但是docker-compose可以跟swarm混用 朋友: 就是一台很強電腦跑很多台東西 恩,混用我可以理解.那我應該要去看swarm. 我: 一個docker-compose 例子.不過,你的方向是swarm. 然後我貼的那篇經驗談 好像就有提到 DEV->PRE PROD->PROD 的控制 拆解Services方法的討論 朋友: 所以你docker-compose在使用上有把 application / db / web server三個都要分三個container喔.自己dev環境也這樣搞嗎? 我: 能拆成這樣 到時候要換任何一個不用重啟container 朋友: 我是很懶 全部裝一起,production才會拆開. 我: 現在不拆之後拆就會出問題…那就失去docker的好處 朋友: 不過local如果分開 production會比較輕鬆一點 我: 而且重build 跟跑也快 才能節省時間啊. 朋友: 所以你這樣需要三個image嗎 我: 對,就docker microservice 概念 基本上一個service 就應該要是一個image.之後才方便抽換. 關於Mac上使用boot2docker VM可能造成的問題 朋友: 這樣硬碟就爆了XD 我: 你們不都是MBPR? 我128G,都沒講話 XD. 朋友: 我現在不知道為啥256g一直滿,打算把整台重灌. 然後全妝成docker,以後要砍環境比較快. 我: 我docker都用windows 桌機跑 VM,然後MAC連過去. 你硬碟會爆應該是xcode,可以看看我這篇文章. 記得經常去清一下 有是幾十G. 此外,MAC docker 跑VM 就算image 砍掉…空間一樣算喔 所以你又要看另外一個指令 docker-machine 把VM重啟 清理一下 朋友: 有這回事?...
繼續閱讀
March
11th,
2016
這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 本週花太時間在追如何使用etcd/raft.本來是打算用NSQ的管理方式,但是看了許久還是找不到他使用的方式.回過頭來使用raft. Go writ: A flexible command and option parser for Go 有點像是cobra,不過可以直接透過name tag 直接讓go structure 直接套入command option. A command line client for Dropbox built using the Go SDK CLI tool for droxbox in Golang,這邊還有新的API An UNOFFICIAL Dropbox v2 API SDK for Go kati: Google GNU make clone which is written by golang 可以透過kati來將makefile轉換成ninja用的檔案. A repository for plotting and visualizing data 可以拿來換圖用的套件. Stochastic flame graph profiler for Go programs 隨機產生火焰顯示profile你的go程式的結果. Python Android/JAVA/NODE.JS Building Android Apps — 30 things that experience made me learn the hard way — Medium 作者分享在開發Android App裡面踩到的雷,這種經驗分享的文章,永遠都是我的最愛. Yahoo Deep Learning Engine: CaffeOnSpark Yahoo最近開源的Deep Learning Engine,主要可以將Hadoop/Spark Cluster的資料抓取來使用.更多部分可以看他們的文章 Cross-platform Linux without the suck 可以讓你在Windows下面使用unix的console,而且又不像Cygwin那麼大.重點是用JS ES6寫的 Docker Kafka (and Zookeeper) in Docker Spotify 開源docker image可以讓你快速架設kafka跟zookeeper. One+ year feedback of using Docker and Swarm in DEV and QA environments — Medium 使用swarm經驗談文章.. 挺不錯的. 有教導如何透過swarm在dev <-> pre-prod <-> prod 之間切換的方法. iOS/Swift 網站文章...
繼續閱讀