告別臉書

我是在 2004 年加入臉書的,在那個年代,臉書只有 .edu 的電子郵件可以加入,我算是第二波加入臉書的,第一波是長春藤等美國私立學校,十多年下來,總算是要慢慢的在轉移離開臉書了。 原因有兩個,第一個是寫在臉書的內容屬於臉書的,外面的人除非加入臉書,要不然是看不到,搜尋引擎無法檢索到,一個臉書的貼文,一個月後就算是消失在臉書中,不會再有人看到,非常的無效,許多內容重複的出現。 第二個原因是臉書的言論審查實在過了頭,今天有個美國健康品牌 CrossFit 宣布離開臉書[1],因為臉書把他們一個上百萬用戶的群組封了,原因不明,然後又再抗議下,原因不明的又再次開放了,外界猜測,因為 CrossFit 宣傳低碳飲食的好處;然後還在英國大選的當天,用一個十多年前的貼文當理由,把保守派參選人的帳號給封了;類似的例子有很多,臉書還有個黑名單,如果你寫一則黑名單上人物的貼文,但是不是批判這黑名單人物,你的帳號也會被封掉… 所以別了,臉書,你就是貼小孩圖的地方了…. [1] CrossFit 告別 facebook [2] 臉書言論審查的報導 Facebook Censorship BACKFIRED, Major Brands FLEE Platform

typelevel cats 學習筆記 2

前陣子把 Scala with Cats 這本由 underscore.io 寫的 typelevel-cats 的書看完了。 看完前兩章的第一個想法是這群傢伙怎麼時間這麼多,把整個 Scala Collection Library 內的 === |+|  map fold 等函式,重新用 type class 實作一次,時間是不是太多了。 然後再深想一下,這麼累的原因是 FP 跟用 OOP 寫成的 collection library 不相容,無法幫任意的 case class 加上額外的功能,因此要用 Type Class (過去叫 Pimp My Library 或 Enrich Class)的方式,來幫任意的 case class 加上一些通用的行為。 那這些行為有那些呢? Eq: === Semigroup: |+| Functor: map Monad: flapmap Foldable: […]

如何養出雙語小孩

推薦一本書 Raising a Bilingual Child ,相對於訪間口耳相傳的八卦,本書是由學者寫成,引用美國數個研究單位的研究成果,來告訴大家如何教養出雙語的兒童。 書中主要引用的研究資料是來自佛羅里達,因為佛州有眾多的西語系移民,家庭的社經環境各種都有,所以在統計上去掉一些其它因素的造成的誤差。 我讀到目前讀到比較有用的有幾點: 五歲以下的移民,在上 K5 前,若是只用母語,並不會影響未來的英語學習,反過來,若是在上 K5 前就開始學習雙語,只有 20% 的小孩未來還能學好母語,某一天就會轉成用英語為主。 母語的學習,並不會影響到英語的學習成果,既使是五歲才開始學習英文,到十一歲後,就在統計上看不出來英語學習的差易。 如果要學習好母語,除了日常對話外,還是要增加字彙的種類,雙語學校(immersion school)的教學就很有幫助。 以高中及大學 GPA 來看,雙語的學生表現跟英語的學生一樣好。但是很不幸的是, SAT 的測驗中,雙語的學生會比英語的學生低 50 分,這是未來 SAT 要努力的方向,為什麼測驗沒有鑑別能力。

typelevel cats 學習筆記

最近在學 typelevel/cats 底下這一行程式碼,想了兩天才理解為什麼要寫成這樣,Functional Programming真的是太困難了,有點回到大一學遞迴的感覺。 (Either[Throwable, A]) => Unit) 是一個 Callback function / Listener interface , (CB => Unit) 表示這個 Callback function 可以在不同的 Thread 執行。 為什麼要寫成這樣?我還在想….

谷歌、臉書大當機

接連兩天谷歌、臉書大當機,稱機會講一下我淺到不能再淺的淺見。 矽谷這邊的公司很喜歡講平台化、雲端化、大數據,把不管是企業內部還是外部,四散的資料集中管理,本來每一間私人公司都要請個 MIS,專職備份管理企業資料,等到雲端化自動化後,一個人可以管一千個企業的資料庫,可以利用經濟規模降低成本。 但是經濟規模可以一直無上限下去嗎?有種東西叫邊際效用遞減,等到規模大了後,自然有規模大的問題,像是領英堅持整間公司共用同一個hadoop cluster,光Gossip Protocol的口水就可以淹死你,不能再加機器,所以做了個”大象醫生”出來看有沒有人濫用資源。所有人要共用一個 git server ,結果當然是撐不下去,所以弄了個 git master-slave 的架構出來,偶爾 build system 拉到的資料不是最新版而已。 平台化可以達到經濟規模是正確的,但是問題的複雜度也會一直上昇,所以這些平台公司請一堆業界頂尖的人來解問題,可是業務量有可能一不小心就超過系統原始設計的上限,在新解法出來前,就只能請客戶多擔待些了。

使用 Workflow Engine 來實作 Microservices SAGA pattern

最近離開了領英,比較有空閒讀讀書,想想到底之前在實作上出了那些的問題,跟要怎麼處理這些問題。 先推薦兩本書 SOA Patterns 和 Microservices Patterns ,這兩本書都有提到怎麼在微服務下處理 transaction 的方式,兩本書的方法都是 SAGA pattern + CQRS + idempotent 。 但是如果你有實作過 SAGA Pattern 的話,就會知道使用 Message Driven 的方式在兩個微服務間溝通的話,整個程式碼的可讀性會非常的低,除了原先溝通並實做細節的兩位工程師外,大概不會有第三個人能夠理解整個交易是怎麼完成的。 註:本文圖片取自 https://microservices.io/patterns/data/saga.html 在實作細節上,使用MDA的架構,微服務要提供sync & async API使用,是額外的成本,在領英,所有的微服務預設都是只有提供 sync API 的,你要請對方多開一個 async 的界面,是要求爺爺告奶奶的。 因此,在技術上管理上比較可行的,就是把流程的管理都拉到自己管理的微服務當中,在裡面使用 orchestrator 來管理對外乎叫的狀態記錄處理跟錯誤重送。 當然,這又免不了要寫一大堆 glue code 把所有的東西黏在一起,然後在資料褲裡面又要開一堆的 Table 來記錄運行的狀況,這非常的花功夫,在實作上很花時間又不好進行修改沒有彈性。 今天早上看到 InfoQ 的一則新聞 Experiences Moving from Microservices to Workflows at Jet.com […]

大公司裡面的技術債是怎麼來的?

大公司裡面的技術債是怎麼來的? 就像一個房間一樣,有一個角落積了一些灰塵需要打掃,主動跟主管說要打掃,主管會問你,打掃這個跟其他的事比起來重要嗎?我們先來測量一下這角落有多髒,打掃完有什麼效果,然後再來跟其他的工作事項比比看優先權該放在多高。 當然結論是不重要不需要掃,然後下次換另外一個角落髒了,再來測量一次再來排一次優先權,然後放棄打掃。 以上過程重複數次之後,主管大叫,這房間怎麼這麼髒,我們來制定打掃計劃,把過去的角落清潔計劃全部翻出來更新一次,再來全部重排一次優先權,做個環境整潔總檢討計劃。 然後大老闆跑出來說,你這房間在的髒亂,來跟整棟大樓的整潔比比看髒亂的程度,再來排個優先權,然後我們晚點再開會討論看看要不要納入明年的工作項目。

為什麼我不用 Google 搜尋

還在用 Google 嗎,該轉用 Bing/duckduckgo 了 希拉蕊的郵電門是美國 2016 年的選舉大新聞,理當也是熱門關鍵字,至少跟據 Google 自己的統計, email 是比 emoji 熱度高出十倍,但是 Google 的推薦選項,卻捨去熱門的關鍵字而選了冷門的 emoji 你跟我說 Google 沒有政治偏好,我說你腦袋壞掉   NOTE: 平衡報導一下,連結是谷歌的回應說法,不過我是不清楚 email 算是什麼骯髒的字眼就是了 https://www.fengli.com/news/23211879.html