電影流水帳(2020/02/06~2020/02/20)

Felicity Jones
Felicity Jones
  • On the Basis of Sex (IMDB, Wikipedia),台譯:法律女王。
  • The Spy Who Dumped Me (IMDB, Wikipedia),台譯:老娘也要當間諜。
  • Alita: Battle Angel (IMDB, Wikipedia),台譯:艾莉塔:戰鬥天使。
  • 6 Underground (IMDB, Wikipedia),台譯:鬼影特攻:以暴制暴

On the Basis of Sex

說真的,這片名取得不好,跟故事不太相關。

故事主要是介紹 Ruth Ginsburg 踏上推動法律裡女男平等過程裡的一個關鍵時刻。她接到一個案子,一位獨身的男性獨力照顧他的母親,但卻接到國稅局的補稅要求,這位男子找上了 Ruth ,Ruth 與他的先生知道這是稅法上的不公平,也為了性別平權,因此決定幫他打這個官司。所以故事就是 Ruth 透過先生與其他法律扶助組織的幫忙,試圖要打贏這個希望渺茫的官司。最後 Ruth 在法庭上說服了法官,讓法官開了這個先例,也因此讓美國法界去檢視現行法律對於男女的限制。Ruth 後來成了大法官。

對於這部電影印象比較深刻的地方是 Gender ,幫 Ruth 打字的女生建議 Ruth 不要使用 Sex 這個容易失焦的單字,改用 Gender,我想這應該就是後來很多表格都是用 Gender 的原因吧。電影還算不錯,但最後 Ruth 說服法官的部分有點不太懂,等以後有重播再來看仔細吧。

The Spy Who Dumped Me

我很喜歡這部電影裡飾演 Morgan Freeman 的演員,她很會講那種冷笑話跟幹話,讓人忍俊不住就笑出來。

故事很直白,Audrey 認識了一個特務男友 Drew,沒多久就分手了,可是卻因此捲入奇妙的事件,她的好友 Morgan 就跟著她一起經歷。兩個人有點糊裡糊塗的跟 Sebastian 聯手,一同去了歐洲,然後誤打誤撞的保護了隨身碟,並且揭開謎團。最後結局蠻峰迴路轉的,原來真正的凶手就是大家以為已經死去的 Drew。

Alita: Battle Angel

本來以為是真人動畫,看了以後才發現跟我想的不一樣,只有女主角 Alita 是虛擬偶像,其他演員還是真人。

2563 年的未來世界是被薩雷姆統治的世界,人們在地上努力的生活,總想著有機會要到上層去過更好的生活。

某一天,Dr. Dyson.撿回了 Alita,並且修復她,於是 Alita 重新開始了新生活。Alita 想不起來之前的任何事情,總覺得記憶中少了一塊,但在慢慢適應現在的生活中,她慢慢發現了自己的驚人之處,她功夫很好,並且很擅長戰鬥。在這同時,她也認識了新的朋友 Hugo ,也似乎開始有了愛的感覺。

管理層的 Vector 跟 Chiren 也發現了 Alita,在試著去處理 Alita 時,沒有處理好,導致進一步的衝突。在這過程裡,Alita 慢慢知道了自己的過去以及跟上層的關係,在 Hugo 死去後,決心改變這一切。

從結局看起來是還有續集,我自己是沒很喜歡,但特效是真的很棒。

6 Underground

Michael Bay 拍的動作爽片。

一個富翁 One 實在太有錢,決定要改變這世界,所以他假死,並且在假死後,去找了幾個夥伴,組成了特務團隊,進行地下活動,試圖改變世界。

原本 One 心裡是覺得,都已經假死了,所以任務有狀況,就直接割捨。但是在一次事故跟新成員 Seven 加入後,他的想法慢慢改變。Seven 讓 One 開始有了我們是一家人、一個團隊應該要相互照顧的想法。

故事的主軸是要去推翻 Pakistan 的 Turgistan 政權,為了推翻這政權,他們首先去香港救了當前元首的弟弟,然後再到 Turgistan 去進行推翻政權。整個過程都是動作跟特效,蠻精彩的,至於故事就看看就好。

Firebase functions 裡用 Admin SDK 時,怎麼去把設定跟程式切開?

一般來說,照文件來做,會要放兩個設定,第一個是 Service account credential,第二個是 Firebase config。

但其實在部署 functions 上去以後,這些設定都已經在執行環境裡了,所以不需要特別去放這些設定。而且,把這些設定放到程式裡,那程式會上到 git repository 啊,這樣設定就都曝光了。那不想把這些設定放到程式裡,本地端又要開發時該怎麼辦呢?我是找到這篇:Firebase: Separating configuration from code in Admin SDK

第一個,Service account credential 在下載以後,假設放到 /credentials/your_service_account.json,那麼在執行前,把這檔案路徑指定到 GOOGLE_APPLICATION_CREDENTIALS 這環境變數就可以,例如:

export GOOGLE_APPLICATION_CREDENTIALS=/credentials/your_servcice_account.json

第二個是 Firebase config,從 firebase console 取得以後,假設放到 /config/your_project_config.json ,裡面內容大致是

{
apiKey: "your_api_key",
authDomain: "your_project.firebaseapp.com",
databaseURL: "https://your_project.firebaseio.com",
projectId: "your_project-abcdef",
storageBucket: "your_project.appspot.com",
messagingSenderId: "00000000",
appId: "1:00000000:web:000000000",
measurementId: "G-11111111"
};

接著一樣去設定環境變數 FIREBASE_CONFIG

export FIREBASE_CONFIG=/config/your_project_config.json

然後就可以使用 firebase serve 去模擬啦。

電影流水帳(2020/01/16~2020/02/5)

Shazam
  • Life (IMDB, Wikipedia),台譯:異星智慧。
  • Happy death day 2U (IMDB, Wikipedia),台譯:祝你忌日快樂。
  • Shazam! (IMDB, Wikipedia),台譯:沙贊!。
  • Lego DC Comics Super Heroes: The Flash (IMDB, Wikipedia),台譯:樂高DC超級英雄:閃電俠。

Life

蠻典型的密室恐怖片,結局有點驚悚,不過還沒到出人意料的程度。\

故事發生在環繞地球的太空站,裏面的太空人收到從火星運回來的土壤,在裏面發現了冬眠的細胞生物。然後很幸運的活化了這個細胞生物,開始培養。這個生物很驚奇的從小小的細胞長大到變成一個跟手一樣大小的生物,還取了名字「卡文」。對,你應該猜到了,這個生物有了攻擊性。它攻擊了培養他的生物學家,雖然生物實驗室有防火牆,但是這個生物還是逃了出去,接著就開始逃竄跟殺戮。

最後,剩下的兩人打算一個人帶著卡文往外太空,一個人回到地球告訴大家說,這生物有危險。結果陰錯陽差地,應該要回到地球告訴大家的人往外太空飄,帶著卡文的逃生艙卻到了地球。掉落到海上的逃生艙被附近的漁民發現,漁民基於人溺己溺的心去救援,試著打開艙門。逃生艙裡的人高喊不要開,然後眼看艙門就要打開了…

Happy death day 2U

原本以為只是一般的恐怖片,但看了開頭以後,發現挺有意思的,就接著看完了。女主角 Tree 蠻可愛、漂亮的,我覺得有點神似 Anna Faris,走的戲路也有點像,希望她未來能常常出現在大螢幕上。

Ryan 發現自己陷入了時間迴圈,在第二次還第三次的時候,就對著自己的室友跟他女友 Tree 說,好奇怪。Tree 顯然是有經驗的人,追問了詳細的情況之後,確信 Ryan 跟之前自己一樣,陷入了時間迴圈,後來找到原因才因此打破迴圈。Tree 再繼續追問 Ryan ,才知道這時間迴圈是因為 Ryan 發明的機器才產生的。Tree 直說不會吧,怎麼又再次陷入了時間迴圈。於是 Tree 為了打破時間迴圈,跟 Ryan 商量,Tree 努力在時間迴圈裡去跟 Ryan 研究、討論,並且把結果記到腦子裡,然後在下次時間迴圈裡告訴 Ryan ,看能不能幫助 Ryan ,讓他能夠完成物理實驗,以打破時間迴圈。在這過程裏面,他遇到已經死去的媽媽,才明白到有些事情的改變是有其意義存在的,無法強求。總之,在最後,Tree 跟 Ryan 弄好了機器,讓時間恢復正常,不再繼續迴圈。

Shazam!

DC 的超級英雄片,跟蟻人一樣,打的是家庭溫馨路線。

Billy 是個孤兒,在寄養家庭間遊走,他始終想著要找到自己的生母。這一次,Victor 跟 Rosa 收養了他,而且家裡還有其他五個也是被收養的孩子。Billy 很快的跟多話的 Freddy 熟悉起來,好吧,或者該說是反過來。後來,Billy 得到了意外的力量,變成了 Shazam。跟 Freddy 商量以後,他們慢慢發現了自己的能力所在。話說,能得到這個能力是有原因的,這個能力是由一個巫師所賦予的,自古以來,他跟其他六位巫師看守著七大罪,但隨著時間過去,只剩下他一人。他一直尋找著接班人,某次他找到了 Sivana,Sivana 並不適任,但 Sivana 卻念念不忘七大罪的誘惑。經過了幾年過去,他找到了回去的方法,並且解放了七大罪。衰弱的巫師不得已,找到了 Billy ,並且把力量交給他。得到七大罪力量的 Sivana 想要更強大,所以他試著找到 Billy,想得到巫師給他的力量。

Billy 後來透過寄養家庭給的線索,找到了生母,生母坦言當初沒去找他的原因,未婚生子,然後年輕又沒有生活能力,只能棄養。Billy 心裡很受傷,他知道沒辦法回去了,寄養家庭的 Victor 跟 Rosa 還好的多。但 Sivana 已經追上了門,Billy 就跟 Freddy 還有其他孩子們一同對抗  Sivana。經過一番抵抗,Billy 即使變了身,也打不贏 Sivana。就在要把力量交給 Sivana 時,Billy 突然領悟了巫師交給他力量時所說的話,於是將其他孩子叫了過來,並把力量分了出去。對,孩子們也跟 Billy 一樣有了 Shazam 的力量,然後一同對抗 Sivana ,並且重新囚禁了七大罪。之後,Billy 就安份地待在寄養家庭裡啦。

最後把力量分出去的這個點真的讓我有驚奇感,有那種「原來是這樣子啊」的感覺,我滿喜歡這樣的結局。 故事挺不錯的,節奏也掌握的不錯,可是我覺得 Billy 跟變身後的 Shazam 個性有一點反差過大,有種不協調感,如果可以更稍微接近一些會更好點。

Lego DC Comics Super Heroes: The Flash

好巧,這個也是時間迴圈的故事。

Flash 因為 Reverse Flash 的詭計掉入了時間迴圈,然後在迴圈裡被 Reverse Flash 激怒而失去了神速力。後來 Flash 還被其他超級英雄趕走,透過 Atom ,他意外找了命運博士幫忙,命運博士帶他到神速力界,Flash 通過重重考驗後,終於到了終點,要取得 Nexus,可是這就是 Reverse Flash 的陰謀,他尾隨 Flash 通過考驗,然後搶走了 Nexus。Flash 沒有灰心,他利用有神速力的積木回到人間,然後跟其他的超級英雄會合。這時蝙蝠俠才說,他跟 Atom 已經知道是 Reverse Flash 搞的鬼,他是故意演出這場戲把 Flash 趕走,才能讓背後的真兇出現的。Flash 跟超級英雄們接著開始商議看要怎麼對付 Reverse Flash,超級英雄們利用有神速力的積木,讓 Reverse Flash 分身乏術,並進而讓 Flash 能有機會重新取回 Nexus。Flash 取回 Nexus 之後,以其治人之道,還治其人之身,激怒 Reverse Flash,讓他筋疲力竭,並把他逮住。最後 Flash 歸還 Nexus ,一個快樂的大結局。

筆記:Lessons learnt (the hard way) using Firebase RealTime Database

主要是看這篇 Lessons learnt (the hard way) using Firebase RealTime Database 所摘要下來的重點。

TL;DR:作者用了 realtime database,然後意外收到 1000 EUR 的帳單。

作者做的是交通運輸類的 app ,realtime database 存的是使用者的最愛站牌、路線等。主要用了 Firebase 的這兩項功能:

  • Firebase authentication
  • Realtime database

使用人數約 400K+ ,主要就是 updated / authenticated 等等的。這樣帳單約 1000 EUR
他們檢討以後,發現有幾個關鍵點:

  1. keepSync ,這個不要設成 true,firebase SDK的行為沒有預期中聰明,他會在每次使用者開啟app時就下載一次!
    1. database.getReference(getUserFavoritesPath(getCurrentUid())).keepSynced(true)
  2. key 的名稱不要太長,只要這個弄短,無形中可以省掉非常多。

接著針對這兩個點,做了處理

  1. 最佳化存在資料庫的資料,改用 GSON ,以及縮短 key 的長度。
  2. 關掉 keepSync
  3. 在 app 端實作了 memory cache ,以避免無謂的去 firebase 撈資料。

作者學到的事情:

  1. 人數很多時,realtime database 可能會是很花錢的項目,特別是結構跟讀取資料邏輯沒有最佳化的時候。
  2. 要將存在雲端上的資料最小化,使用較短長度的 key ,可以幫你省掉不少錢。
  3. Firebase persistence 啟用時,firebase 只會在沒網路的時候使用本地的 cache,其他的狀況他不管資料有沒有改都會存取雲端。
  4. 不要用 keepSync(true) 
  5. 實作本地端的 cache ,以避免重複跟 firebase 索取資料。