筆記:Best practics for firebase realtime database development

文章出處:Best practics for firebase realtime database development

以下只是摘要,詳細內容還是請看原文。

  • 好好的讀 SDK 文件。
  • 不太需要定 schema,不表示不需要用腦,要有效率的使用,仍然需要好好的規劃。
  • 支援管道要選好
    • Slack: 社群導向的自助討論,不適合回報問題。
    • Support Form: 主要的官方支援,The “official” support venue. Report “something is down” here. Feature requests likely to get a canned “we’ll consider it, but no promises” response.
    • Google Groups: 主要是成員討論,Active involvement by the core team with the usual caveats about turnaround time in group-oriented mail systems. Best place for highly technical discussions about app internals and “weird” issues.
    • StackOverflow: 疑難雜症,Slow/unpredictable response times but best place for backup reference material. If you’ve read a Q&A on StackOverflow, you know the type of question that’s best to post there, too.
  • 該用兩個 reference 就用,不要想說用他們共通的父節點來存取,這樣沒有比較省。If you need to reference an object from two different places, take two refs to it.
  • 不要用 array
  • 沒有日期,請用 timestamp
  • 請知道 firebase realtime database 能做什麼,不要用他來做他不適合做的事情。
  • set 跟 update 不一樣,主要差異是在於 key 存在與否的處理。
  • firebaseui 很好用。

電影流水帳(2020/02/21~2020/02/29)

Linda Edna Cardellini ,飾演 Hunter Killer 裡的美國國家安全局高級分析師。
  • 使徒行者2:諜影行動 (IMDB, Wikipedia)。
  • ほんのうじホテル (IMDB, Wikipedia),台譯:本能寺大飯店。
  • Hunt for the Wilderpeople (IMDB, Wikipedia),台譯:神鬼嚎野人。
  • Hunter Killer (IMDB, Wikipedia),台譯:潛艦獵殺令。

使徒行者2:諜影行動

不小心轉台轉到,發現挺不錯的,大約是從片子開播後半小時開始看。很經典的香港警匪動作片,是古天樂、吳振宇跟張家輝三人聯合主演。故事角色是延續上一集,但故事本身是獨立的,所以沒看過上一集沒什麼影響。

香港警方追查到一件牽涉到暗網的案子,收押了姚可儀,發現警方內部可能有黑警。於是葉國帆、程滔、井進賢等人開始進行追查,在調查的過程裡,卻慢慢揭露出程滔與井進賢的過去,也勾出一個跨國拐擄兒童的犯罪集團。

程滔跟井進賢小時候是好朋友,可是有一天兩人被犯罪集團帶走,井進賢犧牲了自己,救了程滔,井進賢因此進了犯罪集團,被犯罪集團訓練,並進入警隊,慢慢當上警司。而程滔很感念井進賢的恩情,為了想找到井進賢,也進了警隊。井進賢並不想被犯罪集團控制,他試圖想擺脫,可是犯罪集團緊迫盯人,殺了他的妻子,脅迫他不得再反抗。景進賢為了年幼的女兒,只能聽命於犯罪集團。

姚可儀是獨立記者,也是 CIA 特務,他為了找到自己的妹妹,穿梭於菲律賓紅燈區。後來他找到自己的妹妹了,但妹妹已經死了。為了復仇,他決心找出這個擄人的犯罪集團。幾次追查下來,他跟同事已經駭進了犯罪集團的電腦,但還來不及下載更多資訊,只能先加密犯罪集團的資料庫。犯罪集團無法解鎖,只能追殺姚可儀以及他的同事,想取得他們的加密金鑰,以解開被加密的資料庫。

幾次交手下來,程滔跟井進賢敬愛的葉國帆死了,也為了救出井進賢的女兒,程滔跟井進賢進行聯手,來對抗犯罪集團。最終在西班牙的大戰之後,終於消滅了犯罪集團。

ほんのうじホテル

逛 Netflix 時,被簡介以及凌賴遙吸引,就看了。

繭子在失業後,沒什麼人生的目標,男友恭一趁虛而入來求婚,就決定要結婚了。在結婚前,先跟恭一回去京都,參加恭一父親與母親的金婚。繭子來到京都以後,恭一很忙,沒什麼時間陪伴繭子,原本預定的飯店說沒房間,所以繭子找到了本能寺大飯店投宿。跟櫃台辦理完入住手續後,繭子搭乘電梯上樓,要到房間去,想不到打開門,卻到了 1581 年,遇到蘭丸。進而認識了信長。經過幾次的時空穿梭,繭子喚起了信長的笑容,讓他想起初衷,而信長也讓繭子重新面對、追求自己的人生目標,而不是就這麼隨波逐流。除了信長之外,恭一的父親也是讓繭子轉變念頭的一個重要原因。恭一的父母結褵即將五十年,原本打算在金婚的時候退休,一起好好過生活,可是恭一母親卻得了癌症過世。由於金婚的宴客場地已經早就準備好,恭一父親沒有取消,還是照預定的進行。在典禮時,宣佈說不再開料亭,決定回歸當初跟太太開店的初衷,開個簡單、便宜又大碗的食堂來照顧附近的學生。

繭子原本很猶豫要不要跟信長說本能寺之變的事情,在經過心裡一番掙扎以後,決定還是告訴信長。原本以為信長會召集軍隊,進而改變歷史,可是信長並沒有。繭子最後一次回去時,本能寺已經發生大火,繭子問信長,為什麼不試著改變歷史,信長只問了,你帶來的照片就是你所處的時代嗎?繭子說是。信長就只是單純的希望未來是個和平的世界,而未來看來就是如此了。所以,信長坦然的接受了。

繭子回到現在以後,恭一跟繭子把事情講清楚,取消了婚約,繭子也認清了自己不能再逃避,要自己去找出屬於自己的人生目標跟道路。

Hunt for the Wilderpeople

記得是去年還前年看超粒方介紹電影時,看到的,他說很有意思,所以就列到片單裡了。最近 Netflix 上了這部電影,就趕緊看看。

Ricky 是個十三歲的少年,在各處寄宿家庭流浪,他到處闖禍,到後來,沒有家庭願意收留他。直到來到了位於深山的 Bella 家裡,一開始的第一個晚上,Ricky 就逃走了,但 Ricky 是路癡,繞了一晚,根本沒離家多遠,很快就被 Bella 找到了。Bella 跟他說,你想逃家可以,但先回去吃個早餐吧。Ricky 很訝異於 Bella 的寬容,回去吃完早餐,跟 Bella 聊聊,相處了一段時間以後,Ricky 發現自己不想逃跑了,他決定留在這裡。過沒幾天,Bella 還為他過了生日,送給他一隻狗,Ricky 超開心的。

好景不常,過了幾天,Bella 突然就死了。一起同住的 Hector 跟 Ricky 都很難過,送走 Bella 以後,不認識字的 Hector 收到兒福機構的信,他請 Ricky 念,信件的大意是這樣的,「Hector 你好,我們要接走 Richy 了。」Hector 其實蠻樂意的,他並不想照顧 Ricky,可是 Ricky 就不樂意了,他不想回去過著那種被踢來踢去的生活。Ricky 想留下,就試著假死,把假人放到穀倉裡,放火燒了穀倉。Ricky 就帶著狗,逃到森林裡去了。可是啊,鄉親,野外求生沒那麼簡單的。還不到一天,Ricky 就吃完帶在身上的存糧,又冷又餓,他睡在荒野,想說自己可能要死了。隔天早上起來,就看到了 Hector,Hector 看到他真的是又好氣又好笑。對話之中,Ricky 激怒了 Hector,Hector 想衝過去抓住 Ricky,卻因此弄傷了腳踝,兩人只好言歸於好,待在原地生活。

來接 Ricky 的兒福機構來到 Bella 的家,看到燒毀的穀倉以及空無一人的房子,發出了通緝令,並且派出大批人馬到森林追捕 Hector 跟 Ricky。Hector 本身就很擅長野外求生,腳傷恢復到一定程度後,就帶著 Ricky 在廣大的森林裡邊遊蕩過生活,跟兒福機構玩捉迷藏。直到有一天,他們在一個小屋遇到三個獵人,這三個獵人因為通緝令,就想逮住 Hector,一番爭執以後,Hector 跟 Ricky 兩人逃走,也因此跟這三人結下樑子。後來又在另外一個小屋發現了一個瀕死的人,Hector 要 Ricky 去山下求援,他留在這邊照顧。Ricky 下山以後,認識了一個可愛女孩,請他幫忙聯繫救護人員去山上救援。女孩和她父親跟 Ricky 成為朋友,並留他下來吃飯,可是 Ricky 在吃完飯以後,不小心睡著了。隔天早上 Ricky 起來,心想糟糕了,趕緊請女孩帶他回到森林那邊。Ricky 回到小屋,就看到已經有救護人員去救護那個人了。而 Hector 則不知去向,所幸後來還是遇到。

在森林遊蕩好一陣子以後,又遇到 Phycho Sam ,Phycho Sam 是個好人,就是怪怪的。他動了 Ricky 的手機,導致兒福機構的人包圍了他們。Hector 跟 Ricky 用了 Sam 的車,衝出重圍。開車逃了好一陣子,還是沒辦法逃掉,兩人最終被逮。兩人都上了法院,Ricky 還只是個少年,從輕量刑,被之前遇到的女孩父親所收留,而 Hector 則進了監獄。一年以後,Hector 出獄了,到了老人之家,Ricky 去找了他,告訴他,現在在女孩父親的農場那邊,那邊還有缺人,問他想不想繼續一起生活。Hector 想了想,說之前跟你一起在森林遊蕩的日子還不賴,而且這邊生活超無聊,就一起吧。於是兩人到了女孩父親的農場,繼續一起生活。

故事真的蠻不錯的,很溫馨,也很有趣。電影裡有不少熟面孔,第一個是 Hector,我細看才看出來,他就是在侏羅紀公園裡帶著兩個孩子逃跑的那個教授。第二個是為 Bella 主持告別式的牧師,他就是導演啊,同時也是雷神索爾三的導演。第三個是 Phycho Sam,他是 Jumanji – Welcome to the Jungle 一進遊戲時,為主角解說的那個 NPC 。最後一個是 Ricky ,他有演死侍2裡那個很會用火的男孩。   

Hunter Killer

這部電影我真的花了好多次才看完,每次都是在 Fox movie 看到,每次都會因為某些事情而中斷只看到一部分,這次,終於看到最後。這部電影的故事真的很不錯,電影也拍的很好,節奏、氣氛都很棒。

故事大致是美國軍艦在俄國海灣那邊發生了衝突,美國派軍艦過去調查。但這次的事件,其實是國防部長想要掌權而指使的,目的是為了把總統引到軍事基地去。總統來到軍事基地後,就被軟禁了。美國情報局同時也掌握了這項情資,跟軍方合作,派出了特遣小隊去近距離蒐集進一步的資訊。美國軍艦來到衝突現場後,艦長發現事情並不單純,現場有美國潛艦跟俄國潛艦的殘骸,殘骸看起來不像是互相對戰,俄國潛艦看起來還有人活著,就派出救援小組去救人。救起了人以後,雙方本來還有點劍拔弩張,但艦長認為,在事情還沒調查清楚之前,不應該把他們當作敵人,就遏止了副艦長等手下。艦長在俄國人稍微休息後跟他對談,才知道他是俄國潛艦的艦長。談話裡,他除了好言相勸要相互合作外,也慎重的說明當前的情況,這場衝突不單純,而且美國絕對沒有先動手。

到了俄國的特遣小隊到了軍事基地,竊聽到這一切都是國防部長的陰謀,美國指揮部那邊就決定要把俄國總統救出來。首先,告訴特遣小隊要去救人,一方面也告訴美國潛艦要去接人。美國潛艦透過那個俄國艦長的幫忙,順利穿過滿佈雷達、水雷的俄國水域。特遣小隊也透過總統保鑣的幫忙,救出總統,也順利的把人送到潛艦。潛艦帶著俄國總統要逃離時,被俄國軍艦察覺,在艦長下令不還擊的情況下,被逼到絕路。

這時候換美國國防部長暴跳如雷了,因為他認為如果俄國國防部長惡人先告狀的話,世界就會認為美國製造衝突,還把俄國總統擄走。可惜,俄國國防部長沒那麼聰明。潛艦艦長也透過俄國艦長的幫忙對軍艦廣播,說明一切都是俄國國防部長的陰謀,只是軍艦也半信半疑,不敢輕舉妄動。就在雙方僵持不下的時候,俄國國防部長下令發射飛彈攻擊潛艦,眼看美國潛艦就要被炸掉了。令人意外的事情發生了,俄國軍艦發射防空火炮將飛彈打下來,美國軍艦安然無事,同時也發射飛彈攻擊了俄國國防部長所在的大樓。

最後,俄國總統以及俄國艦長回到俄國,一場可能演變為世界大戰的衝突消弭於無形。

電影流水帳(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 索取資料。

電影流水帳(2020/01/01~2020/01/15)

轉眼就是2020年,流水帳開張啦!

Embed from Getty Images

Spider-Man: Far From Home

我覺得這集的節奏比較鬆散,沒那麼緊湊,沒上一集來的好看。但特效跟該加的梗還是很有誠意,該有的都有了。

前面簡單交代了因為彈指消失而回來的學生的處境,然後 Peter 就跟同學們去歐洲玩。這次 Peter 去歐洲玩,有件很重要的事情,就是跟 MJ 告白,為了告白,他計劃了好久。總之,一行人就出發了。

正所謂,無心插柳柳橙汁,Peter 的好友,Ned 反而莫名其妙的跟隔壁座的女同學熱戀起來了。Peter 旅途不是很順利,不時遇到奇怪的元素眾,神盾局局長也來亂,請他跟 Mysterio 一起處理元素眾的事情。

邊處理元素眾的過程裡,Peter 跟 Mysterio 熟悉起來,進而 Peter 有了想把 Tony 給他的智慧眼鏡交給 Mysterio 的想法,然後就真的交給他了。Peter 交給 Mysterio 以後,也準備跟 MJ 告白。在跟 MJ 告白時,才發現是表錯情,MJ 一直想說的是,「你就是蜘蛛人吧」,而 Peter 一直以為是 MJ 對他有意思,

總之,在表錯情的最後,MJ 拿出一個投射器,照出了之前元素眾的樣子,Peter 意識到自己可能犯了大錯。於是,Peter 跟 MJ 試著去彌補這件事情,過程中才揭露出 Mysterio 是之前史塔克企業的員工,自己的全息投影被 Tony 講的一文不值,他很怒,才聯合之前史塔克企業的員工們一起策畫出這起事件,讓自己能夠成為超級英雄,從而取得利益。最後,Peter 跟 Mysterio 展開一場激戰,取回 Tony 的智慧眼鏡,並且揭露了 Mysterio。

信長協奏曲

電影是日劇的總結跟延伸,所以在一些劇情交代上就簡單的帶過去,不多做著墨。

三郎從現代回到日本戰國時代,遇到了織田信長,信長發現三郎跟自己長的非常相似,就請託他代替體弱多病的自己。想不到,織田家因為信長(三郎)的活躍,而有了一統日本的機會。

故事大致是從第三次信長包圍網開始,一邊交代信長目前的困境,一邊交代人物之間的關係。明智光秀是織田信長本人;秀吉小時候因為幼時信長而家破人亡,對信長有一份怨恨。而三郎的人格特質卻讓原本有反心的明智光秀以及眾家臣們信服。

接著就交代為什麼明智光秀要反信長,簡單的說,就是秀吉掌握了光秀的痛處,要脅光秀殺死在本能寺的信長。光秀不得已放火燒本能寺,但卻讓信長(三郎)快走,趕來的秀吉跟光秀(真信長)說明了自己的怨忿之後,光秀非常驚訝也感到非常抱歉,跟秀吉談判說,請讓信長能統一日本,讓日本能和平,但秀吉不聽,殺了光秀。秀吉聲稱光秀逃了出去,光秀的面孔跟信長一模一樣,所以逃走的三郎只能頂替光秀的身份。三郎和勢弱的光秀軍隊,名義上又不能用信長的名字,跟秀吉一戰的結果,三郎戰敗,被秀吉逮了。三郎在秀吉面前高喊著不要忘了要讓日本和平之後就被斬首。不過三郎並沒有死,而是回到了現在。之後,有點嘴炮的說三郎的理想影響了當時追隨信長的人,然後讓日本安然的到現在。

看完去查了漫畫的資料,發現漫畫好像還沒收尾耶,不過電影這樣收尾算是不錯的了。小栗旬真的很有他個人魅力,一人分飾兩角,都能夠恰如其分;然後飾演秀吉的山田孝之也很厲害,把那種陰沉跟冷酷表現的很好;這兩個人是我印象比較深刻的。

Django開發者常犯的7個錯誤

從這篇 7 common mistakes that django developers make 整理出來的

  • Reinventing the wheel
    • 儘量找人家已經寫好的 package 來用,不要沒事自己在那邊重新刻
  • Monolith application structure
    • 要切 app ,該切就切。
    • 我自己目前有比較 confuse 的是,有用到其他 app 的東西時,該怎麼降低耦合度,又能使用方便,這中間去找到一個平衡點。這邊要等以後再來慢慢想怎麼做會更好了。
  • Writing fat representations and thin models
    • View 不要寫太多邏輯
    • 把邏輯抽到 module 或是 model 裡,讓邏輯統一,才能儘量重複使用。
  • Too many queries per view, or unoptimized queries
    • 一個 view 有太多資料庫查詢或是沒有將查詢最佳化,這個會導致速度變慢。
    • 我建議這邊同時可以考慮儘量使用 cache ,來減輕資料庫負擔。
  • Redundant model fields
    • 思考是不是要有真實的資料庫欄位,思考是不是可以使用 property 來做到同樣的事情。
  • Not adding indexes on models
    • 常用來查詢的欄位 (放在 filter 裡的) 記得加 index :db_index=True,該加就加。
  • Inconsistent data validation
    • model 的檢查跟 form 的檢查要一致。

用 go 的 docker image 來建置 go 專案

指令蠻簡單的,而且可以指定用 go 的哪個版本來進行建置。

# 先切到你的專案目錄下
cd "$WORKSPACE"

# 執行 docker run
docker run --rm -e GOBIN=/usr/src/myapp -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.6 bash -c make
  • –rm 表示執行完就把 container 刪掉
  • -e GOBIN=/usr/src/myapp 是設定環境變數,GOBIN 這環境變數是指編譯好的執行檔所放的位置
  • -v “$PWD”:/usr/src/myapp 表示把當前的目錄掛載到 container 裡的 /usr/src/app
  • -w /usr/src/myapp 表示把工作目錄指定到 /usr/src/myapp
  • golang:1.6 這是表示要使用 golang 1.6 這版,其他版本可以參考 dockerhub
  • bash -c make 是指用 bash 來執行 make,要用 bash 的原因是大部份 Makefile 都是假設用 bash,用其他 shell 會很容易踩到雷。

dockerhub 上有更多說明。

查程式連網速度

之前家裡 wordpress 速度慢慢的,看了 PHP slow log ,發現是使用 libcurl 去外面抓資料時慢。後來用 SSH 連上去在命令列下使用 curl 試試,第一次會慢慢的,之後就比較正常了。

那,為什麼 curl 會慢?上網找了,有在 StackOverflow 上找到一個方法可以顯示 curl 在各階段處理時所花費的時間。先在 $HOME 下新增一個 .curlrc ,然後把下面內容貼進去

-w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttransfer: %{time_starttransfer} | total: %{time_total} | size: %{size_download}\n"

再去執行 curl ,輸出結果後面就會出現 curl 所花費的時間

dnslookup: 0.253 | connect: 0.264 | appconnect: 0.773 | pretransfer: 0.773 | starttransfer: 0.809 | total: 0.809 | size: 6665

那個時候,我連網速度慢的主因是 dnslookup 慢,所以就根據這點,去做調整。至於這個調整,就又是另外一個故事了。