Posts

美國內戰

臉書上的好友,不少都知道我最近三四個月,都不務正業,那我在幹麻呢?在為美國打內戰做準備。

那美國內戰是怎麼打起來的呢?

情節一:

  1. 11/3當晚川普票面領先。川普在 mail-in ballot數完前宣布勝利,拜登則是不同意。
  2. 之後幾天,mail-in ballot進來,川普被逆轉,拜登宣布勝利。
  3. 川普打官司挑戰mail-in ballot的真實性。
  4. 拜登開始任命新內閣班子。
  5. 川普 1/20 日拒絕離開白宮,拜登在紐約宣誓就職,成為繼華盛頓之後第二個在曼哈頓就職的總統。
  6. 拜登任命的司法部官員赴各地上班,接管local FBI和US attorney office, 在藍州順利接班,而在紅州被亂棍打出。
  7. 軍方宣布不介入川拜之爭, 不服從川普防長和拜登防長的任何命令。

情節二:

有幾個州已經州議會投票通過,要把選舉人票投給全國選票領先的候選人,而不是當州領先的候選人。如果藍州如加州,反對黨根本懶得去投票,也不清楚有其他州修改了遊戲規則,就真的沒去投。最後川普總票數輸了,雖然照舊制會拿下選舉人票數獲勝,但是照新制,因為輸了總票數,所以有些搖擺州雖然是川普得票領先但是選舉人票還是都給了拜登,最後照新制是拜登當選

註:維吉尼亞州議會投票通過,把選舉人票投給全國得票領先的候選人,維吉尼亞是搖擺州,最近民主黨拿下多數席位,不知道什麼時候再會丟掉多數席位,稱民主黨是多數時,通過這種方案,想辦法把維吉尼亞的選舉人票綁住。

08/05 註二:上述法案被參議員擱置,明年才會審。

恐怖故事說到這邊,請問有幾個人知道,美國已經改了選制的?如果開完了票,選民才發現原來選制改了,選輸的選民能服氣嗎?

這兩個狀況不是我說說而已,情節一是民主黨跟共和黨內反川派推演出來的,情節二是民主黨內推動改選制推演出來的,兩者的發生的可能性都很高。

Pateron

這個事件太有趣了,我解釋清楚一些

Patreon是個類似Youtube的付費平台,可以讓內容供應商在上面刊登付費的影片,或者是訂購贊助。

Patreon的使用者合約上寫到,使用者如果跟平台有爭執時,需要通過加州的仲裁機構來仲裁。

然後加州有個特別的規定,仲裁的費用,需要由被告的人負擔,這算是保障消費者的一環。

前一段時間 Patreon 把許多保守派的內容主提出平台,本來是內容主們告 Patreon ,但不知道那個天才發現使用者合約的漏洞,要求粉絲去告 Patreon ,然後有上千個粉碎加入,因為一個仲裁的費用是上萬塊美金,上千個粉絲去告,就要上千萬美金,現在 Patreon 無力負擔這筆費用,只要靠仲裁,不用開打,就可以弄到 Patreon 破產

Patreon 發現出問題後,修改使用者合約,並上法院要求使用新合約時,被法官罵,你要不要臉,使用者合約是你們寫的,遊戲規則是你自己定的,怎麼可以臨時改遊戲規則

在美國開公司,好的律師帶你上天堂,糟的律師讓你下地獄,連官司都不用開打,公司就要倒了

技術是熟的好

工作半年的新工作用的技術是 Actor Model ,我老是被公司的 CTO 說我是 Java 背景的老古板。 Actor Model 越用我越不覺的他有比 shared memory 好到哪裡去。

shared memory concurrency 像是在玩火,我玩火玩十幾年了,早就知道怎麼樣不會被火燒到。

Actor Model 是在玩線程,每天都在看到底同一個 actor 要開多少個要給多少線程, actor 開少了,機器再快效率也不會變好,到最後變成在玩自己,每幾天就有人被 akka 整到,玩線程玩到被吊起來。

程式就是這樣,用上手就好,反正到最後分高下的,大多是對工具的熟悉的。

最近真的體會到為什麼老少工程師會處不來了,上面的例子是一個,還有像是資料庫的選用, NoSQL推行十幾年後,現在的年輕人要用資料庫就是 NoSQL 中選一個,沒人要用 SQL ,要寫測試,還不准我用通用的 SQL 來建假資料,一定要用的難看的 slick DSL ,這世界真的反了。

結論就是,大多數人就是把二十多歲前接觸的世界當常態,然後用一輩子在這個時間凍結的世界內,最佳化自己的生活方式。

好啦,有用老頭技術的小公司可以來找我談談了,我年紀大了,跟新技術處不來了

Synology上設定 wordpress & let'sencrypt 的方法

快被 Synology 跟 Comcast 整慘了,正常運作的網站,突然有一天,因為 HTTPS Certificate 的原故連不上了,被整了好幾個小時,所以還是記下怎麼處理好的。

在 Synology DSM 6.3 上面要正常跑 wordpress & nginx & let's encrypt 的話

  • 先安裝 PHP 7.3 ,然後在 Web Station 中新增 PHP 7.3 ,記得要勾選 curl & mysqli extension
  • 在 wordpress virtualhost 的設定中選用 nginx & php 7.3
  • 然後到 Control Panel -> Security -> Certificate 的地方新增 Certificate from let's encrypt.

如果新增失敗的話,用 ssh 登入,然後跑下面的指令

sudo /usr/syno/sbin/syno-letsencrypt new-cert -d <host> -m <email> -v

這樣子會吐出一堆 let's encrypt 給的 debug urls ,把 url 點開,就可以看是那邊出錯了。

如何對抗老化

  1. 何時進食比吃了什麼重要,採用日間的斷食療法
  2. 分子化學已經找出來斷食療法的關鍵酮
  3. https://nutritionreview.org/2019/05/fasting-molecule-exerts-anti-aging-effects-to-protect-vascular-system/
  4. 運動及酮療法,可以讓老鼠活更久,兩者都使用的話活的更久。
  5. 科學家在20年前就找到能夠讓老鼠或稻穀活更久(5~20%)的基因
  6. 大部份研究抗老化的科學家都有服用 nmn
    https://drjohnday.com/6-foods-to-reverse-aging-with-nmn/
  7. 作者還有服用 Resveratrol 及 1g Metformin ,後者是糖尿病用藥,但是作者沒有糖尿病
  8. AMPK Sirtuins mTOR 是老化的三條路,前兩者有低風險的藥物可使用(前述的藥物)
  9. 洗三溫暖,冷熱交替也可以抗老化
  10. 低糖低碳飲食
  11. 少吃紅肉,紅肉含 amino acid 會觸發 mTOR
  12. branch chain amino acid 對運動的表現有幫助,但作者認為長期會導至老化

typelevel cats 學習筆記

推薦一本書 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 拉到的資料不是最新版而已。

平台化可以達到經濟規模是正確的,但是問題的複雜度也會一直上昇,所以這些平台公司請一堆業界頂尖的人來解問題,可是業務量有可能一不小心就超過系統原始設計的上限,在新解法出來前,就只能請客戶多擔待些了。

閃電式開發

xdite 的新書<閃電式開發>寫的真好,如果能早點出就好了,我在 2010年就走過這條錯路,東西做出來的金流串好了,然後上線就傻了,不知道客戶在那裡,一直到後來加入飛向後才知道,創業是怎麼回事,不過白花的兩年歲月是要不回來了…

https://github.com/xdite/blitz-product/blob/master/04.md

使用 Workflow Engine 來實作 Microservices SAGA pattern

最近離開了領英,比較有空閒讀讀書,想想到底之前在實作上出了那些的問題,跟要怎麼處理這些問題。

先推薦兩本書 SOA PatternsMicroservices 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 突然腦洞大開,是啊 orchestrator saga 可以使用如 Apache Camel 等的 workflow engine 來實作,微服務還是只需要提供 sync API ,交由 workflow engine 來做狀態追蹤跟錯務重送,然後中間的狀態,可以透過 Camel 存在 ActiveMQ 之中,然後整個流程的定義,可以透過 Camel Java/Scala/… DSL 高階語言來編寫,整個可讀性大增。

  from("file:src/data?noop=true")
      .choice()
          .when(xpath("/person/city = 'London'"))
              .to("file:target/messages/uk")
          .otherwise()
              .to("file:target/messages/others");

原來我在 2014 年左右就找到答案並且在飛向的程式碼中實作過,只是這幾年我自己被領英的專案壓力追著跑(每一季都同時跑五個以上專案),忙到忘掉了。