發表文章

目前顯示的是 1月, 2018的文章

隨手寫寫Functional programming (函數式編程)

圖片
圖源取自: https:// www.fpcomplete.com/blog/ 2017/04/ pure-functional-programming 簡述:Functional programming 通常要注意以下特性,並建議在學習上套用數學而非程式下 去看,不然會很痛苦XD 關鍵字: #functional_programming   #Pure_function   #First _class  #High -order_function  #Currying #Closure 一. Pure function (純函數) Pure function 只談兩件事情 1. 每次,同一筆輸入得到相同的輸出 2. 不會產生 side effect(副效應) 這意味著函數將會是 stateless 的,不會去干擾外面的世界,而且隨時可以複製貼上與移除 。系統上來看,節點可以隨時關掉或開啟新的。在 unix philosophy 上來看,每個小工具的輸入跟輸出可以輕鬆組合,而且不會 有額外 state 造成難以控制的變數。程式上來看,就是每段程式碼可以輕 鬆測試,組合。 ex: 在工廠裡面的作業員,每個人都是獨立的,隨時都是可以補 充或淘汰,最好做事情時不要來請教我,不然我會很煩(s ide effect),或是日久生情(stateful)。 這種思維下用人的公司,裡面員工只是員工,不是夥伴。 二. First-class (Function/......) 這個其實很容易的,簡單來說,就是 functnio 在底層的身份地位與變數相等,也就是說 Double, Int, Function 是相等地位,彼此的位置可以調動。在底層來看,原本 heap 純放變數位置的地方也可以放入 function。 這個概念一定要建立起來,後面的三個特性才會順。 三. High-order Function High-order function 表輸入值後,可以得到一個函數或是普通輸出,就如同數學 的高階一樣,對函數 x^2 進行一次微分得到 2*x,我把 x^2 丟進去裡面得到 2*x 出來。 定義 f(x) = x +1, g(x) = x * x, f(g(x))且 x = 2 時,輸出等於多少?...

用 unix 哲學 (unix philosophy) 看待資料庫這回事

圖片
簡述:使用 Kafka 作為傳遞資料的水管(pipe) 關鍵字: # unix   # philosophy   # Apache_Kafka   # Kafka   # pureFunction 文章中先引述了,工程師們使用很久的 unix 工具以及法則來說明背後的強大之處,例如:awk, sort, grep,uniq ,都希望只做一件事情,不讓事情太過龐大,並且使用 command 來做例子,awk | sort > file,見文中圖片,這是他的組合性,工具本身不知道資料哪裡來,也不管資料往哪裡走,處理完也不會產生其他問題,只要每個工具只做一件事情,而且使用 |(pipe) 來接在一起,就可以組合出強大的功用。 這樣的概念與這一兩年風潮流行的 pure function 不是相同嗎? 1. 不產生 side effect 2. 每次輸入相同,會得到相同輸出 配合其組合性就變成其他的 operator ,這也是 Rx 家族在說的事情,希望至此你已經懂這邊的 philosophy 了。 ===== 回到主題,用這件事情來看待資料庫時呢?可以明顯發現到資料庫本身做了許許多多的事情,備份/搜尋/預測/分析等等事情,philosophy 已經在那邊了,技術到這邊了,我們常使用的資料庫怎麼還沒變化呢,文章開始分析資料庫問題所在,並且指出現有的工具早已存在,缺的是那個 pipe ,而目前最接近的工具就是 Apache Kafka 。 推薦影片: https://www.youtube.com/watch?v=Gqdr0DiNh5g 文章與圖源選自: https://www.confluent.io/…/apache-kafka-samza-and-the-unix…/