電影流水帳(2020/05/01~2020/05/10)

Emma Stone
Emma Stone,飾演 Zombieland: Double Tap 裡的 Wichita
  • J’ai perdu mon corps (IMDB, Wikipedia),英譯:I lost my body,台譯:隻手探險。
  • Zombieland: Double Tap (IMDB, Wikipedia),台譯:屍樂園-髒比雙拼。

J’ai perdu mon corps

這是部故事很有意思的電影,只是有點小悶。

故事從一隻手開始,這隻手莫名其妙的會動,然後開始他的旅程。在這個旅程中,開始穿插著他主人的故事。原來這隻手的主人 Naoufel 是個孤兒,小時候學過鋼琴,然後因為意外,父母車上吵架發生了車禍,導致 Naoufel 變成了孤兒。後來長大以後,Naoufel 當了披薩外送員,某次外送,他外送到一個女孩子家,可是遲到了,女孩子有點兒生氣,但還是原諒了他,他們透過對講機聊起了天。Naoufel 對這女孩子很有好感,依據聊天的內容,用了點詭計取得了她的名字 – Gabrielle ,以及上班地點。接著 Naoufel 跟蹤 Gabrielle,得知她有個叔叔,她的叔叔似乎需要人手,Naoufel 毛遂自薦,當了她叔叔的學徒,然後跟 Gabrielle 有了進一步的認識以及交往。就在 Naoufel 進一步告訴了 Gabrielle 自己是怎麼接近她以及想要進一步交往時,Gabrielle 拒絕了他。Naoufel 很難過,他去了朋友的舞會,喝的爛醉。隔天早上宿醉的他回到 Gabrielle 叔叔的工廠,要開始工作,可是,意外往往就是這麼發生。宿醉的 Naoufel 一個不小心,讓自己的手被鋸斷了,Naoufel 被送到醫院,這隻手則是意外的動了起來。

這隻手最後是找到了他的主人,只是 Naoufel 已經決定離去,他跑到屋頂去。Gabrielle 來找 Naoufel 時,沒看到 Naoufel ,也跟著到了屋頂,想說會不會在之前告白的地方。雪開始下了,在屋頂除了 Naoufel 蓋的小木屋、覆蓋著雪的屋頂地上的腳印之外,只剩下之前 Naoufel 很珍藏的錄音機。她撿起來邊聽著這錄音,一邊找尋著 Naoufel 。在邊聽的時候,知道了 Naoufel 為什麼一直聽這錄音,同時也聽到了Naoufel 留給她的話。從足跡來看,原本以為 Naoufel 是跳樓自盡,但搭配著錄音機裡的聲音,她知道 Naoufel 是成功的從這屋頂跳到另外一棟大樓去了…

Zombieland: Double Tap

失望的續集電影,故事普普通通。

故事的一開始,Little Rock 厭倦了四人一起的生活,Columbus 向 Wichita 求婚,Wichita 不願意正面回應,就跟 Little Rock 離開了。Wichita 跟 Little Rock 在路上遇到一個男孩子 Berkeley,Little Rock 為了擺脫姊姊,在半夜裡丟下 Wichita ,跟 Berkeley 一起上路走了。隔天醒來的 Wichita 感到錯愕,只能回去找 Columbus 跟 Tallahassee 。被 Wichita 跟 Little Rock 丟下的 Columbus 跟 Tallahassee 去了購物中心,意外遇到一個沒被感染的女孩 Madison ,帶了她回去。Columbus 跟 Madison 發生了關係,回來的 Wichita 感情很受傷,才離開沒兩天,Columbus 居然就跟別的女人上床了,而且還是個傻大姊。

回來的 Wichita 表明了很擔心 Little Rock ,Columbus 跟 Tallahassee 雖然不喜歡之前被丟棄,但基於家人的立場,還是決定幫忙 Wichita,於是四人就出發去找 Little Rock 了。一開始沒多久,Madison 就疑似被僵屍咬到,看起來就是要變成僵屍,Columbus 只能痛下殺手。三人繼續旅程,循著線索去找 Little Rock ,然後他們來到一間擺放著貓王遺物的旅館,在這裡他們遇到 Nevada 。聊了以後,才知道 Nevada 經營著這家旅館,並且保存著貓王的遺物。因為同樣愛貓王的關係,Tallahassee 跟 Nevada 還蠻契合的。隔天,兩個人 Flagstaff 跟 Albuquerque 來找 Nevada,相互打過照面以後,發現這兩個人意外的跟 Columbus 與 Tallahassee 蠻相似的,一個老愛碎碎念,一個愛殺僵屍。這時候僵屍突然殺過來,Flagstaff 跟 Albuquerque 出去殺退僵屍,只是回來時,兩人已經被感染。Nevada 等人只好幹掉 Flagstaff 跟 Albuquerque ,隨後 Columbus, Tallahassee 跟 Wichita 告別 Nevada 繼續上路。上路以後,意外遇到 Madison ,所以 Madison 真的只是過敏,而不是被僵屍咬了。四人再次會合,上路去找 Little Rock。終於,他們根據 Nevada 的線索,找到了 Little Rock 所在地。Little Rock 所到的地方是一群愛好和平的人所居住的村落,所有人都不能帶武器。他們進去想要勸退 Little Rock,可是看來 Little Rock 心意已決。Tallahassee 說既然已經找到 Little Rock,我任務也結束了,那我要離開囉,就獨自開車離去。

Tallahassee 在月夜下孤身一人很愜意的開著車,突然他看到一群僵屍往 Little Rock 的所在地跑去,他覺得大事不妙,就回去示警。四人決定設下陷阱來對付僵屍,經過一番大戰,眼看四人就要命喪僵屍手下,Nevada 開著車過來救了四人。五個人依據僵屍的行動模式重新擬定了作戰策略,跟住在這邊的人一起對抗僵屍,最後打敗了僵屍。

故事裡,有兩個地方讓我覺得很有趣,第一個是喜歡立下規則的 Columbus 居然打破了自己的規則,他沒有殺死 Madison,而是對空鳴槍把她嚇走,不過這也讓他們後續能有交通工具繼續旅程,這或許是編劇想告訴我們的,「有時候打破規則也無妨」。第二個是,兩人遇到跟自己個性相似的人,Tallahassee 是很不爽,而 Columbus 則是有惺惺相惜的感覺,那我呢?我要是看到跟自己相似的人是會生氣?覺得這人不長進?還是會覺得太好了,這樣應該比較好溝通?這倒是蠻值得好好想想的。

Angular i18n

Angular 官方提供的套件以及教學:Angular Internalization (i18n)

文章裡一大堆,簡單整理如下:

  1. 安裝:ng add @angular/localize
    • 這個步驟會幫你在 polyfills.ts 裡加入必要的 import
  2. 使用,這部份分為 HTML 跟程式
    • HTML,在需要多國語言的標籤加入 i18n 的屬性
      • <span i18n>Hello world</span>
      • <span i18n=“@@span_hello”>Hello world</span> ,用 i18n=“@@span_hello” 的好處是,產出的翻譯檔裡不會是一個隨意的數字,而是一個對開發者來說比較明確的名稱。
      • <input i18n-placeholder> 這個是有些屬性本身需要多國語言的,就在前面加上 “i18n-“
    • 程式,字串前方加上 $localize ,並且改用 back quote,例如:$localize`hello world`
  3. 萃取,用 ng xi18n –output-path src/i18n 就可以把 HTML 裡有標 i18n 的字串萃取到 src/i18n/messages.xlf 裡
  4. 翻譯,先把上個步驟取得的 messages.xlf 複製為 messages.zh_Hant.xlf ,再去編輯。這邊提供一個簡易的網頁工具 – tiny-translator,在處理上會方便很多。開啟以後,要先建立專案,然後上傳 .xlf 檔案,接著就可以進行翻譯了。翻譯好,再下載下來即可。
  5. 合併,程式開發中難免會有增刪,每次用 xi18n 基本上都是重新萃取一次,等於是又要再搞一次合併的功夫,這太累。tiny-translator 的作者有提供另外一個工具 – xliffmerge 
    • 安裝:npm install -g ngx-i18nsupport
    • 在 package.json 的 scripts 裡加入 “extract-i18n”: “ng xi18n –output-path src/i18n && xliffmerge –profile xliffmerge.json en de” ,裡面的 en, de 等 locale 請依照自己的需求作調整
    • 新增 xliffmerge.json ,這個檔案請參考後面。
    • 使用 npm run extract-i18n 就可以自動萃取字串並且作合併了。
  6. 專案的建置,主要是修改 angular.json,有三個部分:
    • projects / your_project_name 加入 “i18n”: {“sourceLocale”: “en”, “locales”: {“de”: “src/i18n/messages.de.xlf”}}
    • projects / your_project_name / architect / build / configurations 裡加入 “de”: {“localize”: [“de”]}
    • projects / your_project_name / architect / serve / configurations 裡加入 “de”: {“browserTarget”: “ng-hosting:build:de”}
  7. 要執行 ng build / ng serve 時,就可以用
    • ng build –configuration=production,de
    • ng serve –configuration=de
  8. 補充一個我覺得很重要的部分,就是一個語言要建置一次,所以一般的佈署會是這樣的,建置好 zh ,放在 zh/ 目錄下,建置好 de,放在 de/ 目錄下,然後在 nginx/apache 的設定裡去依照 header 的 language 去導向到對應的目錄去。這篇 Deploying an i18n Angular app with angular-cli 的後面有教怎麼去設定 apache / nginx。

看到這邊,你可能會想,那程式裡標上 $localize 的字串呢?嗯,ng xi18n 並不會把這些字串萃取出來 (issue),所以這部份得自己手動處理 😣 

P.S. 用 ngx-i18nsupport 的 tooling 可以把上面講的簡化掉,像是加入 npm package、在 package.json 加入 extract-i18n 、在 angular.json 加入設定等等,一次就搞定了,我是已經用了才看到這個 tooling ,有點相見恨晚。

// xliffmerge.json
{
  "xliffmergeOptions": {
    "srcDir": "src/i18n",
    "genDir": "src/i18n",
    "i18nFile": "messages.xlf",
    "i18nBaseFile": "messages",
    "i18nFormat": "xlf",
    "encoding": "UTF-8",
    "defaultLanguage": "en",
    "languages": ["en", "de"],
    "removeUnusedIds": true,
    "supportNgxTranslate": false,
    "ngxTranslateExtractionPattern": "@@|ngx-translate",
    "useSourceAsTarget": true,
    "targetPraefix": "",
    "targetSuffix": "",
    "beautifyOutput": false,
    "preserveOrder": true,
    "allowIdChange": false,
    "autotranslate": false,
    "apikey": "",
    "apikeyfile": "",
    "verbose": false,
    "quiet": false
  }
}

電影流水帳(2020/04/11~2020/04/30)

https://www.flickr.com/photos/94915094@N06/42774806181/
Golshifteh Farahani ,驚天營救裡的 Nik,很酷。
  • Extraction (IMDB, Wikipedia),台譯:驚天營救。
  • The Nightmare Before Christmas (IMDB, Wikipedia),台譯:聖誕驚魂夜。

Extraction

昨天晚上看完驚天營救,這是在臉書社團看到大家推薦才看的。

電影的內容是描述傭兵Tyler 受雇去拯救一個毒梟的兒子所經歷的過程。

Tyler 心裡是有缺憾的,他的孩子生了淋巴癌,但他不忍心看著兒子在眼前死去而去出任務,後來他生了淋巴癌的兒子走完人生最後一段,所以 Tyler 心裡一直耿耿於懷,這也是後來他為什麼知道沒有錢之後,還願意繼續拯救這個孩子的原因。

劇情還蠻簡單的,A毒梟跟B毒梟為了搶地盤,B毒梟就把A毒梟兒子綁架走,A毒梟在監獄裡,又沒有足夠的錢,只要自己的手下 Saju 去救人。Saju 無奈,只能找傭兵來幫忙,然後再半途搶人,翻臉不付錢。B毒梟掌控了整個城市跟警察,在他得知 Tylor 救出那個孩子後,就封鎖了整個城市。Tylor 在逃出的過程裡面是非常驚險的,不但被 Saju 追,也被警察追殺。在封城的情況下,Tylor 跟那個孩子幾乎已經被困住了。後來他請 Nik 找了以前欠他人情的朋友來幫他逃出去,Tylor 的朋友知恩圖報,在整個城市被封鎖的情況下還願意來幫他。只是,Tylor 的朋友已經跟 B 毒梟談好條件,只要孩子交出來,他跟 Tylor 都能全身而退。Tylor 不願意,兩人打鬥了起來,聽到打鬥聲的孩子出來拿了槍,殺了 Tylor 的朋友。這下可好,該怎麼殺出重圍呢?Tylor 找了 Saju 來幫忙,然後聯絡了 Nik ,在隔天一早,他們以聲東擊西的方式,試圖殺出重圍。經過一番血戰,Tylor 跟 Saju 將孩子交到 Nik 手上,Saju 戰死,Tylor 力盡掉到河裡去。

八個月之後,酷酷的女主角出現在廁所裡,把 B 毒梟幹掉了。然後場景帶到孩子去游泳,孩子學男主角一樣潛在水裡想事情,浮上來的時候看到了男主角模糊的身影,所以最後 Tylor 活著還是死了呢?如果活著,為什麼 Nik 還要去殺死 B 毒梟?如果死了,孩子又怎麼會看到這模糊的身影呢?

The Nightmare Before Christmas

很久以前的片了,從 Netflix 上了這片以後,就一直掛在「我的片單」裡,終於找時間看完它。

Jack 是萬聖小鎮上的搞怪王,但是長期都做同樣的事情以後,他覺得乏了,想找些新花樣。他出鎮外去逛,逛啊逛,發現了聖誕小鎮,知道了聖誕老人跟聖誕節,他非常的開心,趕緊回到鎮上講這件事情,要大家進行準備,期望能取代聖誕節。大家非常樂意的配合,只是,方向偏了,大家準備的東西,像是禮物等等的,跟 Jack 想的不一樣。時間過的很快,轉眼就到聖誕節了。Jack綁架了聖誕老人,開心的帶著萬聖小鎮大夥製作的禮物,坐上雪橇挨家挨戶去送禮物。只是,這禮物太可怕了,人類沒辦法接受,於是軍隊發射了炮火,要把 Jack 打下來。Jack 有些吃驚,本來以為大家是在放煙火,後來才知道,人類並不歡迎這樣的禮物。被炮火打下來以後,他發現自己錯了,還是應該找回聖誕老人,就回去小鎮。被 Jack 綁架的聖誕老人被囚禁在 Oogie Boogie 那邊,暗地裡愛慕 Jack 的 Sally 一直默默的支持 Jack,在 Jack 出發去送禮物後,她感覺事情不對,跑去 Oogie Boogie 那邊找原來的聖誕老人,哪知道自己也陷入了險境。趕回來的 Jack ,看到這樣的景況,打敗了 Oogie Boogie,救出聖誕老人以及 Sally,然後將聖誕老人送回聖誕小鎮,進而拯救了因為自己而崩壞的聖誕節。

我還滿喜歡 Tim Burton 拍的這類電影,像是剪刀手愛德華、陰間大法師、斷頭谷、怪奇孤兒院等,都是我蠻喜歡的電影。剛剛查維基百科時,蠻驚訝的是,2001 年的星球崛起也是他拍的啊。

螢幕錄製與字幕合成

螢幕錄製的軟體很多,像是 FonePaw、Soundflower、ApowerREC、Nonosnap、Kap、Camtasia Studio、iShowU HD 等等的,我是使用 Quicktime player 。

執行 Quicktime palyer 以後,會要你選存放位置,我是不管他,按「取消」。用滑鼠點按「檔案」 > 「新增螢幕錄製」,接著畫面會出現一個工具列視窗,請先選定錄製全螢幕或是錄製指定區域,然後再按下選項:

  • 勾選使用 MacBookPro 的麥克風
  • 勾選滑鼠點按

這邊可以加選計時器,這可以讓錄製的動作在指定秒數後開始,按下錄製就可以開始錄製影片了。錄製的時候,要注意找個比較安靜的地方,說話的聲音也要提高音量,這樣錄製的效果會比較好。

錄製完成以後,可以使用 iMovie 編輯,在 iMovie 裡可以加入過場動畫,調整音量,也可以逐句上字幕。調整音量是點按上方選單的「修改」> 「增強」

因為我懶得逐句上字幕,所以使用別的方式。首先先把製作好的影片匯出,先回到主畫面的計劃案,點選你計劃案右下角的 「…」,選「分享計劃案」>「檔案」,這樣就可以把檔案匯出到指定資料夾去了。

再來是抽取出音訊,先安裝 ffmpeg :brew install ffmpeg

在終端機輸入 ffmpeg -i xxx.mp4 xxx.mp3

要調整聲音的話,也可以在這邊作(參考自ffmpeg的wiki):ffmpeg -i input.wav -filter:a “volume=10dB” output.wav

取出以後,再來是試著從音訊轉出字幕,我試了兩個方法,第一個方法是用布丁大大web speech to text ,這有蠻多教學文章的:

在這邊就可以上傳音訊檔案,然後播放時,就會自動轉出字幕,這邊由於是利用到播放跟麥克風,所以在轉換時,一樣需要一個比較安靜的地方,同時音訊檔的音量也需要大一點,轉出來效果會比較好。

第二個方法是自己手打,因為環境有點吵雜的關係,我後來是用這方法。這邊是用了 oTranscribe 這個網站,一樣是要上傳音訊,oTranscribe 提供了便利的介面,讓你可以邊聽邊打。完成以後,可以匯出文字檔。這邊大致講一下怎麼使用:

  • ESC: Play/Pauser
  • F1: 倒轉
  • F2: 快轉
  • Ctrl +j (在Mac是用Command+j) : 插入時間

如果你需要教學的話,這裡有:oTranscribe 線上逐字稿工具,支援讀取電腦影片製作字幕

取得文字檔以後,還需要轉換為通用的 srt 檔案,這一樣有網站提供這功能: Subtitle tools – Convert Subtitles to Srt

將剛剛取得的文字檔上傳上去,按下「Convert to Srt」,然後就可以下載了。

最後是將字幕合併到影片裡。

  1. 安裝 handbrake: brew cask install handbrake
  2. 從啟動台找到 HandBrake,執行
  3. 選擇前面匯出的 mp4,再選擇 “Subtitles” 頁籤,點按「Tracks」> 「Add External Subtitles track」加入前面取得的 .srt 檔案
  4. 調整字幕的語言,再勾選 Burned In 
  5. 在下方填入輸出的檔名,並選擇要輸出的資料夾。
  6. 按下上方的「Start」

需要教學的話,一樣有:SRT 字幕筆記

這樣就完成啦。

其他的參考資料:

Angular 嵌入 redoc API 文件

原本是打算把 redoc-cli 產生出來的文件直接嵌進去的,可是這樣子在文件有變動時,就會又要再做一次產生、嵌入,這樣不太好。最好還是可以自動依據寫好的 OpenAPI specification 來自動產出,這才是比較好的作法。

第一個待解決的問題是怎麼把 OpenAPI specification JSON 放到 Angular 專案裡,並且可以讀出來使用。關於這個,我是找到 How To Read Local JSON Files In Angular 這篇文章,方法挺簡單的,就把 json 檔案丟到 src/assets 下,然後直接在程式裡用 import 。

// src/app/xxx/xxx.component.ts
import SampleJson from '../../assets/SampleJson.json’;

// 後續程式碼就直接引用 SampleJSON 即可。

但修改完,TypeScript compiler 會有錯誤訊息,這得要改 tsconfig.json 在 compilerOptions 裡加入 resolveJsonModule 跟 esModuleInterop

{ "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true } }

第二個問題是,angular template 裡不能直接寫 script tag,這個可以實作 AfterViewInit ,然後用 DOMElement 來動態插入 (參考來源:https://stackoverflow.com/questions/38088996/adding-script-tags-in-angular-component-template/43559644)。細節的說明,我就直接寫在下面程式的註解裡。

import {
  Component,
  OnInit,
  ViewEncapsulation,
  ElementRef,
  AfterViewInit } from '@angular/core’;
// (1) 剛剛前面提到的,引用 OpenAPI specification JSON
import APIJson from '../../assets/api.json';

@Component({
  selector: 'app-documentation',
  templateUrl: './documentation.component.html',
  styleUrls: ['./documentation.component.scss'],
  encapsulation: ViewEncapsulation.None
})
export class DocumentationComponent implements OnInit, AfterViewInit {  // (2) Component 要實作 AfterViewInit 這介面

  constructor(private elementRef: ElementRef) { }  // (3) 引入 ElementRef ,Angular 會幫忙作動態注入

  ngAfterViewInit(): void {
    // (4) 這裡就是在頁面載入後要作的事情
    this.insertSpec();
    this.insertScript();
  }

  insertScript(): void {
    // (5) 插入 script element,這裡要載入 redoc 的腳本
    const redocScript = document.createElement('script');
    redocScript.type = 'text/javascript';
    redocScript.src = 'https://unpkg.com/redoc@next/bundles/redoc.standalone.js’;  // (6) 這腳本的網址是閱讀 redoc-cli 的原始碼以後取得的。
    this.elementRef.nativeElement.appendChild(redocScript);

    // (7) 插入另外一個 script element,這裡主要是執行 redoc,讓 redoc 能解析 json 並顯示出文件。
    const initScript = document.createElement('script');
    initScript.type = 'text/javascript';
    initScript.textContent = `
    const __redoc_state=${JSON.stringify(APIJson)};
    var container = document.getElementById('redoc');
    Redoc.hydrate(__redoc_state, container);
    `;  // (8) 字串要允許多行,可以使用 backquote ` https://stackoverflow.com/questions/35225399/multiline-string
    this.elementRef.nativeElement.appendChild(initScript);
  }

  insertSpec(): void {
    // (9) 插入 element ,讓腳本知道要根據哪個 element 來作處理。
    let s = document.createElement('redoc');
    s.setAttribute('spec-url', 'assets/api.yml');
    this.elementRef.nativeElement.appendChild(s);
  }

  ngOnInit(): void {
  }
}

至此就大功告成啦。

P.S. redoc 在 1.x 時,是有支援 Angular 的,但到了 2.x ,就改用 react 了。

不是只有 console.log

這篇 JavaScript console is more than console.log() 講了幾種 console 的用法,console 不是只有 log 可以用。

  1. console.warn() / console.error() 可以依據訊息等級顯示出不同的顏色。
  2. console.group() / console.groupEnd() 可以讓這中間的 log 輸出都摺疊起來,避免太多。
  3. console.table() 是印出表格,表格的形式比較容易查看資料內容。
  4. console.trace() 是印出 stacktrace 資訊
  5. console.time() / console.timeEnd() 可以輸出這中間的指令花了多少時間。
  6. console.clear() 清理終端機輸出內容
  7. console.dir() 可以印出物件的屬性。

另外,現在瀏覽器的 js 都支援 backquote – template literals ,也就是 ` ` ,所以也可以這樣用 console.log(`obj=${JSON.stringify(x)}`);

電影流水帳(2020/03/26~2020/04/10)

anushka shetty hot dancing stills (10)
Anushka Shetty ,飾演提婆犀那,濕婆度。巴霍巴利的妻子。
  • बाहुबली: द बिगनिंग  (IMDB, Wikipedia),台譯:帝國戰神-巴霍巴利王。
  • बाहुबली 2: द कॉन्क्लूज़न (IMDB, Wikipedia),台譯:巴霍巴利王-磅礴終章。

बाहुबली: द बिगनिंग (帝國戰神:巴霍巴利王)

真的蠻好看的,雖然特效、動作什麼的都很誇張,不過好萊塢電影也是這樣,不是嗎?

這一集主要是講巴霍巴利的兒子-亞美德拉,他在一個偏僻的地方長大,不知道自己的身世,總想著要爬上瀑布頂端看看,可是這瀑布非常險峻,他總是沒能成功。有一天他看到從瀑布那邊飄下一個面具,就開始盯著這個面具看,猜想著,面具的背後應該是個美女吧。於是決定,拼了命也要爬上去。這一天,他成功的爬上去了,真的看到美女,從這個美女的組織,他開始了新的旅程。這個美女的組織其實是反叛軍,他們想要救出巴霍巴利的妻子,也就是公主,於是亞美德拉在不知情的情況下,幫助了反叛軍進到帕拉提婆王城,並救出公主。這時候亞美德拉的母親也趕來,亞美德拉這時心裡感到很奇怪,明明照顧自己長大的母親就在旁邊,可是為什麼看到公主,感覺非常的親切、很熟悉,就好像是媽媽?然後為什麼大家在那邊鬼叫著巴霍巴利?

這時候,帕拉提婆派來追殺亞美德拉的卡塔帕娓娓道出這段過去。過去這個國家是由席娃伽彌暫管的,他撫養並培育自己丈夫兄弟的兒子-濕婆度跟自己的兒子-帕拉提婆長大,這兩個兒子都非常的聰明以及強壯。有一天,克拉卡雅這個部落來攻打,一場大戰下來,眼看已經趨於劣勢,這時候濕婆度重新帶起軍心,從而打敗了克拉卡雅。席娃伽彌在戰後,決定讓濕婆度當這個王國的國王。亞美德拉這時就問了,那照理來說,應該這個王國就過著快樂的生活才對,現在怎麼會變成這樣子?濕婆度怎麼會死去?卡塔帕這時很沈痛的說,那是因為我…. 沒錯,請看下集的故事。

बाहुबली 2: द कॉन्क्लूज़न (巴霍巴利王-磅礴終章)

這一集就開始講述亞美德拉的父親-巴霍巴利的故事。話說上次大勝克拉卡雅,太后席娃伽彌決定讓巴霍巴利當未來國王以後,接下來就是成親跟即位的事情了。太后告訴巴霍巴利,在即位前的這段時間,你出去走走,了解一下我們的領土。巴霍巴利就聽從太后建議,跟卡塔帕一同微服去探訪民間了。在路上,巴霍巴利遇到一個剽悍的公主,一見鍾情,就跟卡塔帕冒充為平民,混入這個小王國裡。在這個小王國廝混的時間裡,他取得了公主的好感。

巴霍巴利的弟弟帕拉提婆的嘴裏是跟太后說,自己心甘情願當個大將軍,但是心裡其實很不爽。在即位前的這段時間,怎麼可能放著巴霍巴利在那邊趴趴走呢?他知道巴霍巴利那個小王國愛上了公主提婆犀那以後,趕緊去跟太后說,我想結婚了,對象是提婆犀那。太后在不知情的狀況下,許了這個承諾,說會去提親。這個提親的過程並不圓滿,太后這方的使者過於高傲,公主提婆犀那因為這個高傲的態度,也不爽的頂撞回去,兩方有了小小的不滿,太后就派了軍隊去攻打這個小王國。

在軍隊來襲的晚上,巴霍巴利聽到熟悉的號角聲,出面警告了這個小王國,並且進而帶領這個小王國打退了太后派來的軍隊。這個時候,巴霍巴利還以為太后來提親是因為自己,就把事情都講清楚,說明自己的真心,說會好好的照顧提婆犀那。提婆犀那也相信了巴霍巴利,就跟巴霍巴利回去了。回去以後,去稟告太后,巴霍巴利這時候才知道,新郎不是我,是弟弟!太后說,你要娶提婆犀那可以,但是你就不用當國王了。巴霍巴利為了遵守對提婆犀那的承諾,就決定放下王位,走出王宮。作為平民的巴霍巴利與提婆犀那過著平靜的日子,很受人民愛戴。帕拉提婆雖然得到了王位,看到哥哥受到人民愛戴,總覺得芒刺在身。

轉眼,提婆犀那懷了身孕,太后在知道消息以後,心有點軟了,就召喚他們倆回來宮里。帕拉提婆跟他的父親想出了另外一個計謀,構陷了巴霍巴利派人來刺殺自己的事情。於是他們要求卡塔帕去遙遠的地方,並讓太后派出巴霍巴利去救卡塔帕,支開巴霍巴利。巴霍巴利趕去救卡塔帕,見到卡塔帕時,卡塔帕知道是帕拉提婆的陷阱,跟巴霍巴利說你其實不需要救我的。但是對巴霍巴利來說,卡塔帕除了是王室的僕人,也是自己的家人,他照護太后,也照護自己長大,更何況,他還幫自己找到了真愛,怎麼能不救呢?於是巴霍巴利救出了卡塔帕並跟刺客奮戰。可是啊,就在要殺出重圍時,卡塔帕捅了巴霍巴利。怎麼會這樣呢?卡塔帕怎麼忍心下這毒手,原來,帕拉提婆以太后的性命要脅卡塔帕聽命於自己,卡塔帕無奈,只能聽從。

巴霍巴利去救卡塔帕的這天晚上,「有刺客、有刺客」這樣的聲音在王宮裡迴盪著,在王宮裡引起了騷動。是時,提婆犀那也生下他的孩子,帕拉提婆趁這個機會發動了政變並準備殺害提婆犀那跟他的孩子,太后看清了自己兒子-帕拉提婆的真面目,才知道自己的兒子居心叵測。她找到自己的媳婦提婆犀那,聽從提婆犀那的話,將男嬰帶走,跳入河中。大雨之中,河水非常湍急,將這一老一少衝到了很遠的地方去。太后以自己的性命保護了這個男嬰,並把男嬰交付給一個女人。提婆犀那沒辦法逃走,也不願意屈從於帕拉提婆,就被囚禁在王宮之中。

接著故事就回到第一集,這個小男孩,也就是亞美德拉,長大了,因緣際會下回到了王宮。聽完整個故事,亞美德拉原諒了卡塔帕,帶領著眾人攻打帕拉提婆。經過一場大戰,亞美德拉打敗了帕拉提婆,取回王位。

我想這集最誇張的一幕就是小隊帶著盾牌搭上投石器,以盾牌聚為砲彈,飛躍過王宮城牆,突破城牆防守這一幕了吧。真的是讓人目瞪口呆,腦洞大開,這也就是電影好看的地方啦。

Heroku 的 deploy

以前只知道可以用 git push 來 deploy,今天用 google 找了一下,發現 heroku 已經提供了 container registry,所以現在可以用 docker 來佈署。

所以要先寫好 Dockerfile,到時候會方便很多。

MacOS 換動態桌布

MacOS 可以換動態桌布,會隨著時間而變化,這真的很酷。

透過免費資源網路社群的這篇:Dynamic Wallpaper Club 提供 macOS 動態桌面下載,依時間顯示不同效果 知道了 Dynamic Wallpaper Club 這個收錄許多動態桌布的網站,就上去找,真的有很多。

在換的時候有個小插曲,因為我接了外接螢幕,所以就在想怎麼換另外一個螢幕的桌布,可是一直找都沒找到。後來才發現,當進入「系統偏好設定」>「桌面與螢幕保護程式」時,兩個螢幕同時都會出現「桌面與螢幕保護程式」視窗,這時候就可以去個別指定了。

電影流水帳(2020/03/16~2020/03/25)

sophie turner
Sophie Turner

Dark Phoneix

之前同事已經去電影院看過了,他覺得很可惜,沒能好好發揮。我看過之後的感覺跟他一樣,就是可惜。原本應該是個好題材,卻被糟蹋了。

X-Men 由 Raven 帶領,帶著 Jean, Cyclops 等人一同上太空救人,大部分的人都被會瞬移的 Kurt 救到了,但隊長在別的位置,所以沒有。Raven 原本打算就此打道回府,可是 Professor X 堅持要救到所有人,Raven 拗不過 Professor X ,派了 Jean 過去撐住船體,由 Kurt 再去找人。眼看不明能量就要擊中船體,大家都非常緊張,可是 Kurt 順利完成任務,救回隊長。只是 Jean 呢?Jean 來不及,硬是被不明能量擊中。大家以為 Jean 已經犧牲了,過了沒多久,Jean 居然還活著,趕緊把她救回來。

回到地球以後,Raven 不爽 Professor X,她覺得 Professor X 變了,太在乎名聲,太在乎人類。Jean 則是沒有大礙,檢查時,只發現了體內的能量活動異常的高。檢查完,就去參加慶功派對了。在派對上,Jean 好像想起了什麼,整個能量大爆炸。Jean 就這樣離開,去找他的生父。之後,Professor X 才解釋他在 Jean 小時候做了一件事情,因為 Jean 小時候因為超能力意外害死了母親,Professor X 為了讓他能走過去,利用超能力掩蓋了她這段記憶。Jean 找到父親以後,跟父親簡短的交談,這讓她想起了自己所做的事情,她感到痛苦。這時候 Professor X / Beast / Raven 等人也趕到,想要帶回 Jean ,在溝通失敗的情況下,雙方起了衝突,這場衝突導致了 Raven 意外死去。Jean 感到很抱歉,就走了。Beast 不能釋懷 Professor X 的作為,他只想要找到 Jean ,讓她罪有應得。

Jean 跑去找了 Magneto ,想找他聊聊。此時的 Magneto 還不知道 Raven 的事情,只跟 Jean 聊了幾句話,軍方就趕來追捕了。Jean 起了殺心,想把來追捕的人都幹掉,Magneto 阻止了 Jean,並要軍方跟 Jean 都離開。Jean 離開了,軍方也離開了,Beast 這時找上了 Magneto ,說了 Raven 的事情。這下可好,兩個都曾愛上 Raven 的男人,聯手想為 Raven 復仇,就一同去追趕 Jean。這時候 Professor X 也找了Cyclops 等人,想要阻止 Beast ,拯救 Jean。因為意外殺人而內疚的 Jean ,沒有人聽她的話,反倒是跟隨那股不明能量的外星人找到了她,並用言語引誘她送出力量。Jean 萬念俱灰,就把力量給了外星人。Professor X 等人趕到,問出了事情的情況,趕來的 Beast 跟 Magneto 也聽到了,至此轉變成大家一起幫助 Jean。Jean 覺醒了,知道自己力量不該給外星人,就重新拿回力量,打敗了外星人。後面結局有點忘記了,忘記 Jean 後來如何,只記得 Professor X 深切的反省了自己對 Jean 所做的事情。

サバイバルファミリー

生存家族,這個蠻有意思的電影。

故事從一個家庭的日常開始,爸爸是個典型的上班族,上班認真,在家就是廢,所以跟孩子的感情也不好。媽媽是典型的好媽媽,照料家裡,但管不太動孩子。哥哥個性內向,很靜,每天就是聽音樂,不太跟家人交談。妹妹有點叛逆,只想跟學校的姊妹淘打好關係,在家愛理不理的,看不太起自己的父親。這一天,爸爸起床發現已經8點多了,他搖了搖鬧鐘,發現指針沒動,以為是忘了換電池,想說糟了,趕緊匆忙的起身。他趕忙叫了孩子跟妻子,匆忙的準備,當然也來不及吃早餐。媽媽則是趕著做早餐,她發現怪怪的,以為是停電。爸爸跟哥哥去重新啟動總電源,但沒有用。就這樣,媽媽早餐也來不及做,爸爸跟孩子們就匆忙的出門了。在通勤的路途上,他們都遭遇了困難,交通運輸都不通。好不容易趕到學校,只說是大規模停電,公司跟學校只能屈就於沒有電力的情況下去上班跟上課。媽媽在家也遭遇了沒水,跟採買結帳速度很慢的情況。

這樣的情況持續了兩三天,公司的主管宣佈停止上班,學校也宣佈了停課。爸爸回家跟媽媽商量以後,決定去投靠在鹿兒島的岳父。妹妹發了很多牢騷,覺得為什麼要放棄這麼便利的生活去鄉下的鹿兒島,但也只能屈就於目前的情況,遵從父母的想法。全家把該帶的衣服、行李跟錢糧打包好以後,就出發了,首先先去成田機場探一探,看能不能搭飛機。四人騎了腳踏車到機場,想當然爾,機場封閉。四人無奈,只能改走高速公路去鹿兒島。失去電力以後,整個日本陷入混亂的狀態,拿大把的錢還不一定換的到食物跟水,四人只能將就的前進。之後就是講他們的歷程,碰到暴風雨,碰到沒水、沒食物的各種情況,四人的相處因此慢慢有了改變,也更加瞭解彼此。最終他們還是到了鹿兒島,順利投靠了岳父。時間匆匆過了三年,電力突然回復了,他們回到東京,但他們在這三年裡學會了了解彼此,學會了怎麼過沒有電力的生活。