發表文章

「笨蛋!重點是那個情境!」

圖片
「前言」 如果我現在給你三個 fact(事實),是否可以猜出我在說什麼?藍藍的、機器人、喜歡吃銅鑼燒,至此,你一定可以很迅速的猜出我在說的是多拉A夢(doraemon)。為什麼?為什麼你可以只依靠這些資訊來猜到我在說什麼?因為你已經把那份感覺帶進去了,你已經熟悉了,所以當我描述這些 fact 的時候,你可以快速的反應出什麼是多拉A夢。 「從瞎拼ABC學講故事能力」 身在台灣,有款綜藝節目一定是經常聽到的,他叫做瞎拼 ABC,遊戲方式是這樣的,主持人會抽出題目來考答題者,題目有很多種來源的名詞,可以是人名、家俱等,請來賓也就是答題者猜出這個名詞是什麼。再舉一個例子,這個人身穿燕尾服,善於表演,可以從帽子抓出兔子,你可以講出這個人是個魔術師,如此一來,你就可以在不直接解析那個職業的情況下,讓對方瞭解魔術師的形象與行為。從側面的方式講解中間的答案是什麼,這本身就是一項說故事能力,你可以用在專有名詞解釋上,把整個故事都闡述完之後,對方也可以理解。 「什麼是多拉A夢?多拉A夢是什麼?」 如果我說多啦A夢是一隻藍色的機器人,你會說不對,這樣一竿子打翻一船人,身為藍色的機器人可多著是,例如說:星際大戰中的 R2D2 就是藍色的、經典遊戲的洛克人也是藍色的。很明顯的,這樣的描述方法太過簡易,所以你會嘗試加入更多東西進行更精準的描述,用最近火紅的 AI 來說明,就是給他更多特徵值。R2D2 就是藍色的會行走胖胖的機器人,可能變成這樣,但這樣其實很耗時而且不夠直覺,而且還量大時還要面對 overfitting ,這時該怎麼做呢?將對方帶入整體環境當中。 「學習心智圖」 上述的這套方法我們稱之為心智圖,回到首圖,你可以看到兩者差別是在箭頭的方向,左邊箭頭向外比較像是我們平日在思考的方式,也就是上面那一大段的多拉A夢是什麼?就跟背單字ㄧ樣,當你看到不熟悉的字眼時,會下意識地去找翻譯強行讓自己記起來,例如下圖所示: bear , 有熊的含義、也有生育的含義、更有承擔的意思,這種時候就是數學上的ㄧ對多,難以直接描述。所以上課的英文老師會怎麼跟你說?要你去看下上文,也就是 context,然後去猜那個不懂的文字是什麼涵義,也就是圖表中,箭頭向內的闡述方法,把你自己帶入那個環境中。 「心智圖應...

隨手寫寫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…/

Kafka 不只是訊息系統,更偏向於資料庫

圖片
src: https://kafka.apache.org/intro 「Message queue system 極簡說明」 在遠端呼叫機制中,有一種 pattern 為 publisher - broker - consumer 的方式,publisher 負責產生資料/consumer 負責消化資料/broker 負責handle 雙方吞吐的狀況,而這基本上也是現在大多數的訊息系統 (Message queue system )所實作的方式。 「Kafka 極簡說明」 Kafka 在 broker 的實作上是這樣,從 publisher 來的資料放置在 topic 當中,以 log 的方式存下來,並讓 consumer 來消化它,期間 broker 不會主動去 push 資料給 consumer,而是等 consumer 自己來 pull ,如此一來,就減少許多處理 ack 的問題。 「將 kafka 作為資料庫」 既然資料都在 topic 上面,那為何還需要對其他 DB 作 Query 呢?topic 與 DB 通常主要差異是在資料存放的方式,前者為 log,後者為 transaction,前者是連續時間,後者是片段時間。舉生活例子來說明,請問你昨天在哪裡? log的系統會回答"每個時間點"你所在的位置,transaction 只有一個,而且會是最新(最後更動)那個點。 kafka 是可以做為資料庫的,並且以 log 方式貯存資料。 「ktable, kstream, etl, connecter」 “現階段”處理 log 是用 kStream ,如果要取得某個片段時間點資料是用 KTable,如果要和其他DB作 query 則採用 connector,在這套論點當中,會有些文章提出 ETL(Extract-Transform-Load) is dead 的論述, 我覺得這算是某種程度上的 Buzzword 了,ETL 的概念是會一直跟著的,生活中也一直出現過,數學上也常做表達,他會換個方式活著不會就此停止XD 例如說:KStream 可以是 T, connecter 可以是 E/L

[Regular Expression]正規表達式教學,使用狀態機輔助說明-基礎篇

圖片
感謝設計師 Elim 大大幫忙 # ** 目錄** ##**一、前言** ##**二、極度懶人包** ##**三、Regular Expression 介紹** ##**四、基礎語法介紹** ##**五、練習用習題** ##**六、資料來源** # 一、前言 最近被要求幫同事上課(OS: 壓力山大QQQ),為了不讓自己上課沒材料,同時讓部落格有新文章之外,其實也沒啥目的,主要就是把最近學習到關於 Regular Expression(正規表達式)的內容好好記錄下來,在學習過程中發現這玩意兒,其實不只是工程師的工具,也可以是一般人都能以掌握且在日常生活中使用到的,雖然我不曉得什麼時候用得到,但確實 Regular Expression 會出現在許多地方,為此盡可能簡化入手難度而寫出這系列教學,比較屬於工程師的內容還是有,沒相關知識者不去看也沒差XD。 #  二、極度懶人包 下方為沒有時間,習慣於一邊吃飯一邊看影片的人們使用,關於這邊文章中所要提到的知識以及操作。 # 三、Regular Expression 介紹 ## 1.什麼是 Regular Expression? Regular Expression(正規表達式)又可簡寫為 Regex,他不是新的東西,而是大家早已會的技能,他是語言,也可以說是程式語言,也有人會說他是強大的工具,這些都是對的,只是大家又不同的角度去看待 Regex,而有不同的心得,Regex 在數學上是狀態機,電腦實作中是採用樹狀結構方式實現,也因為他是程式語言,就代表是可以被維護,被實作,被重寫的,因此每次在寫新的 Regex 同時,用對待其他語言的方式對待他,就不會覺得他是麻煩而且難以學習的新事物了。Regex 是各位早已熟悉的東西,早已熟悉的存在。 ``` 狀態機補充 狀態機是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。Regex 中 為判斷接收到的事件是否滿足,如果滿足則移動到下一個狀態,直到整個狀態機滿足為止。 ``` ``` 樹狀結構補充 舉例來說這組 Regex 規則這樣寫 /(ab+c)* + aca/,在樹狀結構表示如下圖所示 ![Tree](https://imgur.com/ZCpuizd.png) 當中優先度為 | 大於 +*...

關於命名變數那回事--使用 codelf 來解決吧!

圖片
圖片擷取自: codelf 目錄 1.前言 2.CODELF 故事 3.CODELF 操作過程 4.參考文獻 1.前言 最近在補充 programmer 該自我要求的資料時,無意間發現產品,一個如何命名變數的小工具,在學習 programming 的過程,最常碰上的困擾就是不曉得該如何取個好的名字,造成這問題的由來可以有很多,書上的範例簡潔使用 int a = 1;或單純字彙量不夠而已XD,反正剛好看到這工具,就記錄一下吧。 2.Codelf 故事 根據這篇詢問  Programmers' hardest tasks 的圖片(如下圖所示),可以明顯看出命名(Naming things)是為難的事情,下面也舉出不少例子來證明這件事情,例如: data -> str_data - > str_data_tmp等,有些人覺得命名應該是一項藝術,但大家最在乎的還是可讀性這件事情,準確且一眼就看出性質與功用的命名可以大幅減少理解與debug的時間。 圖.1 在進行變數命名時,我們可以參考專案的規範或是採用網路上其他人的寫法,但這往往會造成大量的時間在 google 上面,而且還不一定可以找到滿意的,於是乎就有這項工具的誕生啦,這是由  Unbug Lee  所編寫的小工具,由於是中國人,所以工具中英文都適用(簡中)。 3.Codelf 操作過程 一.首先映入眼簾的即為起始畫面,於search中輸入你想要知道的變數即可。 起始畫面 二.在這邊我們就輸入"貨物"試試看,可以看到收尋結果如下,同時也可以參考程式碼片段 我覺得還滿直覺的,應該不用在往下才對XD 4.參考文獻 1.https://unbug.github.io/codelf/

No pain no gain 的實習旅程 - Fandora Shop 實習

圖片
Fandora 駐所地點(攝於面試當天XD) 前言 這本應該是在剛實習完就寫好的文章,由於脫稿症正常運作中,所以拖到至今才發文,本文紀錄下作者於 2015 暑假在 Fandora Shop 的實習過程,看到的,學到的,以及些感想,記錄下那什麼也不知道,就出新手村打怪的歷程XD。 Fandora shop logo圖取自sudo 開始實習 - 認識自我 為了不讓大學最後的暑假荒廢掉,我決定去北部找找 startup 做實習,如此一來可以達到兩項目標:一是確認我對 coding 是否真有興趣,二是了解 Startup 的發展過程。找實習時,由於學校開的缺我能力不吻合,又加上台北的 startup 比較多,所以之後丟履歷的方向都是在台北,透過各種管道,例如 台大媒合實習會 等 圖取自台大媒合實習會網站 找實習過程 - 缺乏經驗的辛酸  這說來就有點艱辛,由於本身是念通訊專業的,但又很想找資工的缺,例如前端網站開發之類的,難免有些專案上的經歷缺失,以及不懂的技術與專業術語,當初我連 git 都不會使用,只好拿著過往在學校做過的實驗經驗去面試,一直被 Rej 也是很正常的,還記得投了快十間的公司吧,記得有海X科技,SXDO,綠X碼,薪X網路等,但最後還是拿到三間公司的面試機會,真的是上輩子有好好燒香。 Fandora shop 的學習歷程 - 世界比想像中的大 我在裡面的實習職稱是前端 RD 實習工程師,實習內容主要是幫忙 CTO 開發網站,撰寫文件, 增加BUG 。 如果你問我在裡面學習到什麼,說實在話,實在太多太多,畢竟根本沒有工作經驗啊XD,不論是公司的運作流程或是程式上的專業技術,對我來說甚麼都是新鮮的,在技術方面,學到 git的用法從而管理程式碼版本,並且 follow  git workflow  來開發專案,還有使用 mocha 進行 unit test,selenium 進行 e2e test,以及 元件規劃,這一切的學習經驗都非常感謝 XP 的耐心,能夠指導沒什麼背景的我,與總是讓我問問題的塔倫斯,還有一起在 RD team 實習的小夥伴,溫溫與品嘉。 總是有新鮮事物的地方 公司上班的氣氛還滿輕鬆快樂的,常有爆笑的事情發生, 通常是CEO童心未泯的表現 ...