電影流水帳(2018/2/21~2018/4/12)

Karen Gillan Karen Gillan,坦白說,完全看不出來是「星際異攻隊」裡的 Nebula ,本人看起來很清新可人呢~

  • 君の名は (IMDB, Wikipedia),台譯:你的名字。這故事一直讓我想起村上春樹的「百分百女孩」,有種淡淡的哀傷,讓人唏噓不已。
    故事一開始是瀧跟三葉的身體交換了,他們有著默契,努力過著對方的生活。原本以為就是單純的身體交換故事,但在中段出現轉折。瀧在某次約會後,就再也沒有跟三葉交換身體了。瀧覺得很奇怪,就開始進行調查。在調查以後,才了解到原來女孩所在的時空居然是三年前,在那個時間點,女孩所在的糸守町被彗星碎片擊中而滅村。瀧不死心,鍥而不捨的到了宮水神社,透過口嚼酒,再次跟三年前的三葉交換身體。這次的交換,兩人的努力終究改變了時間的流向,讓村莊裡的人們躲過災難。不過,兩人因此失去對方的記憶,經過數年,一直在追尋著似乎存在心裡的對方。電影最後一幕,兩人終於相遇,但是他們真的能相認嗎?沒有答案,這樣也好。若有似無的結局,才會讓人念念不忘。
  • Coco (IMDB, Wikipedia),台譯:可可夜總會。看完以後才知道台灣為什麼會這樣翻譯,Coco 是人名,「夜總會」則是因為台灣大多數的人將墓地稱作「夜總會」,而主角又是去陰間走一趟的關係。故事溫馨、有趣,有 Pixar 一貫的風格,主題曲 Remember me 符合情境,真的是很不錯。
    主角 Miguel 的家庭裡因為喜愛音樂的祖先拋妻棄子出外去追求音樂的夢,所以嚴令禁止子孫傳唱音樂。Miguel 非常喜愛音樂,意外發現的聞名的大歌星 Ernesto 可能就是自己的祖先,在跟家人分享的時候,被家人責罵、阻止。Miguel 生氣的跑到墓地去,想要證實大歌星 Ernesto 就是自己祖先,卻意外進入陰間世界。在陰間,Miguel 遇到了自己的親人,親人們試圖要送 Miguel 回去,但 Miguel 不肯接受以後不玩音樂的條件而賭氣逃走。逃走途中遇到了 Héctor ,Miguel 請求 Héctor 幫忙他找 Ernesto ,Héctor 則請求 Miguel 帶照片回陽間去,於是他們開始互相幫助。在這段過程裡,兩人相互了解,而且意外發現了 Ernesto 其實是個卑鄙的傢伙,他害死 Héctor ,奪取他的創作。更令人意外的是,Héctor 就是 Miguel 那個拋妻棄子的祖先。最後經過一番努力,Miguel 、Héctor 跟 Miguel 陰間的親人聯合起來揭發了 Ernesto,並且順利送 Miguel 回去,讓故事有了一個快樂的結局。
  • Thor: Ragnarok (IMDB, Wikipedia),台譯:雷神索爾3-諸神黃昏。影評不錯,看完以後,我也覺得很歡樂,跟前面兩集的風格迥然不同。
    一開始是 Thor 在打火神,火神告訴他 Odin 已經不見了。於是 Thor 打完火神以後,回去阿斯嘉揭穿 Loki ,要 Loki 帶他一同去找父親。兩人到了地球遇到奇異博士,奇異博士在確認來意以後,開傳送門讓他們找到 Odin。三人聊了一陣子,Odin 說自己死期已到,要他們注意諸神黃昏。沒多久,Hela 就來了,Thor 跟 Loki 根本打不贏超強戰力的 Hela,於是 Thor 要求傳送回阿斯嘉,但 Thor 跟 Loki 在傳送中途就掉落了。Hela 回到阿斯嘉,展開報復,並找到跟班。
    Thor 發現自己掉到 Sakaar,並且淪為俘虜,必須跟其他俘虜戰鬥。在這裡他遇到了 Hulk ,曾經是女武神的 Valkyrie,以及 Loki,Thor 經過一番努力,說服了 Hulk, Valkrie 與 Loki ,三人合作加上其他俘虜幫忙,推翻了 Grandmaster,並且回到阿斯嘉去阻止 Hela。在阿斯嘉打鬥時,Thor 找到新的力量,而且認知到諸神的黃昏是不可避免的,於是他請 Heimdall 與在 Sakaar 認識的俘虜們將阿斯嘉的人都帶走,放出火神,讓火神跟 Hela 同歸於盡。
  • Knock knock (IMDB, Wikipedia),台譯:當辣妹來敲門。這部電影蠻警世的,主角 Evan 犯了天下男人都可能會犯的錯,導致失去幸福的家庭。
    建築師 Evan 有著幸福的家庭,在某個周末,他要趕進度,沒辦法跟妻兒去度假,所以妻子帶著孩子們去度假。當天晚上,外面下著大雨,Evan 進度趕的有點卡。就在此時,響起了電鈴聲,Evan 打開大門,是兩個楚楚可憐的辣妹來按門鈴求援。心裡有柔軟角落的 Evan 就讓他們進來洗澡,還幫她們烘乾衣服、叫車。想不到衣服烘乾後,兩個女孩還沒出來,就到浴室門口看看,兩個火辣的女孩突然冒了出來,挑逗 Evan,把持不住的 Evan 就這樣跟兩個女孩做了不應該做的事情。隔天早上起來,Evan 發現這兩個女孩不對勁,想把她們攆走,卻被她們要脅。僵持了好一陣子,火了的 Evan 將她們載到遠遠的地方去。
    回到家的 Evan 趕緊收拾家裡的殘局,豈料兩個女孩尾隨而至,將 Evan 綁了起來,開始玩弄 Evan。在玩弄的過程裡,兩個女孩還殺了來搬 Evan 妻子藝術品的經理人。最後,結局有點出乎我意料之外,因為並不是快樂結局,而是 Evan 被埋到地下,只剩下一顆頭在地上,女孩們將 Evan 不應該跟她們做的事情錄影上傳到 Evan 的 Facebook 塗鴉牆上,就拍拍屁股走了。而在這個時候,妻子跟孩子也回到家中,Evan 後悔莫及,電影在 Evan 悔恨的大叫中結束。
  • My big fat greek wedding (IMDB, Wikipedia),台譯:我的希臘婚禮。以前看到這片名,覺得這有什麼好看的,後來在網路上看到影評,才知道這片蠻有意思。電影的編劇同時也是女主角,電影裡所發生的故事有一部份就是她自己的親身經歷。
    30 歲在家族餐廳工作的 Toula 並不算漂亮,因為身處於希臘家庭,被希臘的傳統觀念給束縛住,爸爸老是叨念她應該趕緊找個人嫁了。直到她決心改變自己,並且透過媽媽的幫忙,她再次唸書。上學以後,心境的改變讓她變得自信而且漂亮。畢業以後,她到姨媽的旅行社上班。在旅行社上班的時候,之前在餐廳遇到的一位讓 Tuola 心動的男生居然反過來追她了,進而開始了一段浪漫有趣的愛情,最後兩人決定結婚。整個過程非常的有趣、溫馨,也讓我感受到,當你想改變的時候,是真的可以讓世界有所不同。
  • Jumanji: Welcome to the Jungle (IMDB, Wikipedia),台譯:野蠻遊戲-瘋狂叢林。預告看起來不錯,實際上也真的還不錯,基本上套路跟前作相似,蠻好的娛樂片。
    電影一開始交代了前作的棋盤遊戲變成了電子遊戲,並且讓一個孩子失蹤了。經過 20 年,四個被留校的孩子被派去地下室服務,他們找到了這個電子遊戲,然後就進去冒險了。四個孩子在遊戲裡都變身成特定的角色,與現實生活裡大不相同。經過一番冒險之後,四人找到了之前失蹤的孩子,也盡釋前嫌,一同努力打倒大魔王,重新回到現實世界,帶著在遊戲裡找到東西,繼續生活。

Django 節省記憶體的一些紀錄

前一陣子在改寫程式,避免使用過多記憶體時的一些紀錄。

pympler

pympler 很好用,主要是用來察看記憶體用量。缺點是得自己安插 code 觀看,之後再移掉。文件裡有不少用法,我只用到兩種。

第1種用法是 asizeof.asizeof(obj) ,這可以看物件使用的記憶體用量。


from pympler import asizeof
obj = {'foo': 'bar'}
print(asizeof.asizeof(obj))

第2種用法是 summary/muppy,這可以察看一段程序執行後的記憶體差異。


from pympler import summary, muppy
sum1 = summary.summarize(muppy.get_objects())
# do works
sum2 = summary.summarize(muppy.get_objects())
diff = summary.get_diff(sum1, sum2)
summary.print_(diff)
# 要輸出到 logging 的話,可以用 format_ 或 _format_table
# for line in summary.format_(diff):
#   logger.debug(line)

這段根據文件也可以使用 tracker.SummaryTracker() 來代替。

參考資料:

yield / generator

函式如果要傳回大量的資料,使用 yield ,這可以避免佔用大量記憶體,只有在 iterate 時,才一次一次拿回來。


def foo():
  for i in range(100000000):
    yield i  # 這讓 foo 的傳回結果變成 generator 物件

for x in foo():
  print(x)

Django Queryset

可以的話,儘量使用 values() 跟 values_list() 並指定所需的欄位,除了可以提升速度之外,也減少記憶體用量。

values() 是將記錄作為一個 dict 傳回,而 values_list() 則是將紀錄作為一個 tuple 傳回。這樣可以省去還原為 Django model object 的程序,因此速度會更快,記憶體使用的更少。而使用 values_list() 比 values() 來的更省,這是因為 tuple 所佔用的記憶體比 dict 來的少。

Using jinja2 as django template engine

Django 1.8 以後已經可以選擇使用自家的 template engine 或是使用 jina2 template engine 了,而且是可以混用,不限制你只能使用其中一種。

第一步是先安裝 jinja2:

pip install jinja2

第二步是在 settings 裡的 TEMPLATES 裡增加 jinja2 的設定:

TEMPLATES = [
    # 省略 django template 的設定
    {
        'NAME': 'jinja2',
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [
            # insert more TEMPLATE_DIRS here
            # join(BASE_DIR, 'templates'), 
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'environment': 'your_project.jinja2.environment',
        },
    },
]

 

第三步,是在 your_project 下建立 jinja2.py ,內容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import    # 使用 absolute_import 很重要!!!
import logging
from django.utils import translation
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
import jinja2


logger = logging.getLogger(__name__)


def environment(**options):
    env = jinja2.Environment(
        extensions=['jinja2.ext.i18n', 'jinja2.ext.with_'],
        **options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    env.install_gettext_translations(translation)    # 使用 django 的 i18n/l10n
    return env

在這裡,我遇到一個奇怪的狀況,python 2 一直告訴我 jinja2 沒有 Environment,後來看了這篇,才知道是 absolute/relative import 問題,使用 absolute_import 以確保 import 的 jinja2 是正確的,而不是 django 的 jinja2。我想,python 3 應該不會有這問題。

django template 是使用 load 載入模組,jinja2 則需要在 Environment 初始化時就定義。

第四步,是在繼承 TemplateView 的類別裡,加入

template_engine = 'jinja2'

,然後在 your_app 下建立 jinja2 路徑,將 template 檔案放在那裡即可。

class Jinja2Test(TemplateView):
    template_name = 'jinja2test.html'  # template file 的名稱是 jinja2test.html ,檔案必須放在 your_app/jinja2 下。
    template_engine = 'jinja2'  # 表示要使用 jinja2 template engine,這個 jinja2 是定義在 settings 裡的 NAME

    def get_context_data(self, **kwargs):
        ctx = super(Jinja2Test, self).get_context_data(**kwargs)
        ctx['foo'] = 'bar'
        ctx['hello'] = 'world'
        return ctx

參考資料:

電影流水帳(2018/1/9~2018/2/20)

一下就過了一個月…

Gal GadotGal Gadot ,在蝙蝠俠大戰超人裡飾演神力女超人 (Wonder woman),在大戰時幫蝙蝠俠擋住致命一擊的一幕真的是太有戲劇性了。

  • Geostorm (IMDB, Wikipedia),台譯:氣象戰。譯名會讓人誤導故事的內容,原本以為是不當的利用科學而導致地球浩劫,實際上是純粹政治權謀的操作。
    哥哥帶領著世界的團隊開發了可以控制地球氣候的衛星系統,可是在完成的時候,被高層以弟弟換掉了。時間很快過了三年,哥哥並沒有因為時間而把這事情放下。就在這時,這個氣候系統讓地球的氣候發生了異常,都查不出所以然,只好派出當初的開發者哥哥上太空去調查。經過一連串的事情跟調查,哥哥發現可能是總統為了大位而作的,就請在地球的弟弟去作進一步的查證。弟弟在查證以後,發現其實是國務卿的陰謀,經過一番的打鬥,終於逮捕了國務卿,讓一切恢復正常。
    我覺得很有趣的一段是弟弟跟未婚妻探員保護總統逃走的過程,他們在車上閒聊的時候,總統知道這勇敢的探員是弟弟女友時,直喊你一定要娶她。我忘了詳細的對話,但這段真的蠻有趣的。
  • Logan (IMDB, Wikipedia),台譯:羅根。風格跟之前的金鋼狼故事完全不同,走出截然不同的故事,我滿喜歡的。
    羅根年紀大了,帶著同樣也老了的 X 教授跟 Caliban 一起生活,他靠著開車載客來賺取生活費用。有一天,有個人來叫車,羅根到了那兒,發現是個女人要他送個女孩-蘿拉去邊境,羅根不肯。但後來那女人死了,羅根只得帶著蘿拉回去,跟 X 教授商量怎麼作。X 教授發現蘿拉是個變種人,羅根不太相信,可是過了沒多久,就有某個生物科技公司前來索討蘿拉。羅根不肯,帶著 X 教授逃走,生物科技公司因為 Caliban 有追蹤的能力,就強逼他去追蹤羅根、X 教授跟蘿拉。在逃亡的途中,慢慢帶出羅根為什麼帶著 X 教授的事情以及蘿拉的經歷。蘿拉是生物科技公司利用羅根的基因所複製、改造出來的,逃出公司的還有其他孩子,同樣也是以變種人的基因改造出來的。
    後來三人在路上遇到農夫,被農夫一家邀請吃晚餐,並借宿一晚。X 教授睡了很好的一覺後,以為羅根回來了,就帶著懺悔的心情娓娓道出他其實明白自己害死了其他 X 戰警的事情,可是這個羅根是複製品,就這樣被複製的羅根給殺死。羅根之後帶著哀慟送蘿拉到了邊境,見到這些孩子,孩子們打算隔天就越境到加拿大去。羅根不打算跟著他們,跟蘿拉告別,但在護送蘿拉到這裡的過程裡,他心裡原本悲觀的想法有點改變了。隔天,孩子們早早就啟程離開,但羅根發現生物科技公司緊追不捨,已經展開大規模的追捕。他趕過去,透過藥物的幫忙,幫助孩子們對抗生物科技公司的追捕,經過一番大戰以後,成功的阻止生物科技公司,讓孩子們順利的越境,可是自己的生命也走到了終點。
  • Ghost in the shell (IMDB, Wikipedia),台譯:攻殼機動隊。之前有看過一部份動畫,這陣子剛好 HBO 有上映,就看了。
    素子是個改造人,由阪華機械進行改造,她忘了過去的事情,只記得現在在公安九課協助追捕罪犯。在追捕一個犯人的過程中,她慢慢找回了自己的過去,知道了阪華機械公司的醜陋事情。在公安九課以及改造她的科學家的幫助下,打倒了阪華機械,大概就這樣。
    基本上我覺得故事本身而言不算改動太大,選角也能接受,比較讓我不能接受的是可愛的 Tachikoma 攻殼車變得太不可愛了。
  • Fantastic Beasts and Where to Find Them (IMDB, Wikipedia),台譯:怪獸與他們的產地。延續哈利波特的風格,沒看過原著,但表現中規中矩,不難看。不過我覺得女主角的妹妹還蠻搶戲的,滿喜歡她。
    Newt 來到美國要讓一個奇獸回到原生地,結果卻捲入連續的殺人事件裡,甚至還被冤枉。但最後水落石出,找出真正的凶手,並且解決事件。
  • The boss baby (IMDB, Wikipedia),台譯:寶貝老闆。故事的設定相當有趣,嬰兒是統一由寶貝公司派去想要孩子的家庭,但是公司上層發現嬰兒的需求數愈來愈低。在調查之後,發現市場是被狗狗公司所侵佔,於是為了奪回市佔,寶貝公司派出特務到狗狗公司員工的家庭裡進行調查。狗狗公司員工的家庭裡有個小男孩,但這個小男孩發現了特務是個成熟的嬰兒的事情,在事情曝光之下,這個嬰兒跟這個小男孩在不打不相識之後,為了相同的目的,決定攜手合作。在調查之後,他們發現狗狗公司即將發表一個新產品,於是他們打算在狗狗公司新產品發表會時,將新產品搶走。孰料卻中了狗狗公司總裁的計謀,狗狗公司的總裁原來是寶貝公司的厲害人物,但卻被裁掉,變成了大人,他懷恨在心,就處心積慮的研發新產品打擊寶貝公司。這次的新產品就是藉助寶貝特務的奶瓶,來讓狗狗不會長大。眼看任務就要失敗,兩人相互打氣,展開行動,聯手阻止產品發表會,順利解決。最後,寶貝特務還是到了小男孩的家庭裡,當了他的弟弟。
  • Batman v Superman: Dawn of Justice (IMDB, Wikipedia),台譯:蝙蝠俠大戰超人-正義曙光。因為超人鋼鐵英雄故事裡的大戰,布魯斯·韋恩(就超人啦~)不太開心,積極的找對付超人的方法。在這段期間,雷克斯·路瑟也推波助瀾地讓他們相互誤解。到了最後,雷克斯·路瑟在無法讓超人跟蝙蝠俠相互內鬨的情況下,利用氪星的科技,復活了薩德將軍,讓薩德將軍去打擊蝙蝠俠跟超人,在大戰之中,之前布魯斯·韋恩意外發現的女超人也加入混戰。混戰的最後,超人拿了蝙蝠俠所打造的氪星長矛殺死了變種的薩德將軍,自己也壯烈犧牲。在超人的葬禮上,女超人問了蝙蝠俠哲學的問題,蝙蝠俠感佩超人的人格,表示會再去找其他的英雄一起來保衛世界,埋下正義聯盟的伏筆。
  • 奇門遁甲 (IMDB, Wikipedia)。似乎是要向以前的「奇門遁甲」致敬,我是忘了之前的故事是什麼,不過故事看起來並沒有相關。電影的特效是還不錯,不過故事就乏善可陳,電影的結尾看起來是還有續集,唉~
    故事圍繞在霧隱門上,霧隱門是個神祕的門派,以特殊的武功與技藝保護著一個被封印起來的妖怪,並秘密尋找未來的掌門人與御神機。在因緣巧合之下,一個捕快介入了,被封印的妖怪被另外一個妖怪救了出來,天下開始大亂。霧隱門的二師兄在此時找到未來的掌門人小圓,回來霧隱門跟眾人展開行動。而老大則找到了御神機,跟武林其他門派一同搶奪,妖怪在此現身,說明了他的陰謀,拿回御神機的同時,也將加入爭奪的門派掌門人收為己用。在過程裡,霧隱門人發現了小圓有著神奇的能力,並且與妖怪展開鬥爭,最後在小圓的威能協助之下,打敗了妖怪。但事情還沒了結,還有故事沒交代完。

 

如何客製 Django package 的 locale?

在 Django 裡使用了某個 package,但該 package 沒有自己所用的 locale 時,該怎麼做呢?

以下以 django-mptt 為例:

  1. 先確認 site-packages 下 django-mptt 的目錄名稱,在安裝 django-mptt 以後,實際上是 mptt,所以在專案目錄下建立 mptt/locale 。
  2. 到 site-packages/mptt 下,執行 django-admin makemessages –locale=zh_TW
  3. 將 site-packages/mptt/locale/zh_TW 搬移到專案目錄下的 mptt/locale
  4. 使用 poedit 或其他工具進行翻譯
  5. 調整 django settings 裡的 LOCALE_PATHS,例如:
    from os.path import dirname, join
    BASE_DIR = dirname(dirname(dirname(__file__)))
    # ...略...
    LOCALE_PATHS = [
        join(BASE_DIR, 'locale'),
    
        # customize translations which package is in site-packages
        join(BASE_DIR, 'mptt', 'locale'),
    ]
    

這樣就大功告成了。

電影流水帳(2018/1/1~2018/1/8)

轉眼間就 2018 年啦~趁元旦假期,看了不少電影。

Amber Heard Wallpaper

Amber Heard,在 3 Days to kill 裡飾演 CIA 的高級長官,在戲裡相當搶眼,但是導演給這個角色的描寫實在薄弱,讓 Amber Heard 淪為一個花瓶角色。

    • San Andreas (IMDB, Wikipedia),台譯:加州大地震。蠻適合打發時間的災難片,再加上飾演 Blake 的 Alexandra Daddario 真的很漂亮,令人賞心悅目。另外就是飾演 Ben 的 Hugo Johnstone ,去年剛好有看「費雪小姐探案集」,所以也認識這個人,他在探案集裡演的是憨直的警察,跟費雪小姐的女僕是一對,看來他也來好萊塢發展了呢。
      故事線主要有三個,第一條是進行長期監測並進行研究的地質學家 Lawrence 跟他的伙伴找到了一個地震指標,並且根據這個指標與來訪的記者配合,發佈了預警消息,讓更多人能提早避難。第二條是 Dwayne Johneson 飾演的救難隊員 Ray,試圖與妻子復合,在地震發生以後,救了妻子 Emma,然後一起到舊金山去救女兒,想當然爾,他們兩人在援救過程中打開心結,救到女兒後就復合了。第三條是女兒 Blake 跟 Emma 的男友一同去舊金山,認識了來應徵的 Ben,在地震發生後,Ben 跟他的弟弟救了 Blake,然後一同逃難,最終被 Ray 救到。
    • Spider-Man: Homecoming (IMDB, Wikipedia),台譯:蜘蛛人-返校日。這部電影是我第一次上 Google play 租借來看的電影,看完以後,覺得一片好評不是沒原因的。
      出完美國隊長3的任務以後,Peter 一直想要再次被重用,所以一直自己出任務,並且跟 Happy 報告,但是 Happy 跟 Tony 都沒怎麼理他。Peter 在一次事件發現不良份子都有強大的外星武器,他感到很奇怪,循線追查到 Vulture,並且報告了 Happy,但是得到一樣的結果,於是他自己行動追捕,卻弄巧成拙,被 Tony 訓斥了一番,失去了蜘蛛裝。一方面,Peter 在好友面前意外曝了光,洩漏了蜘蛛人的祕密,在學校裡得到了 Liz 的好感,跟 Liz 一同去參加學校舞會。在去舞會的途中,卻發現 Liz 的父親就是 Vulture ,Vulture 給了 Peter 台階下,可是 Peter 基於正義感,決定不顧 Liz 要維護正義,就阻止 Vulture 去搶 Tony 要運走的武器。兩人打了一場,Peter 總算是阻止了 Vulture,並且獲得 Tony 的肯定。
      Peter 的同學 Michelle 的戲份不多,但是給的幾場戲都隱隱讓人覺得她很特別,並且在下集應該會有很多空間,就期待吧。
    • The Man from U.N.C.L.E. (IMDB, Wikipedia),台譯:紳士密令。說是改編自早期的影集,故事的轉折效果不錯,還蠻好看的。
      Solo 去東德出了任務救出 Gaby,在過程裡遇到強勁的對手 – Ilya。Solo 在救出 Gaby 後,卻被高層指定要跟 Ilya 聯手,一同去找 Gaby 的叔叔 Rudy,要套出 Gaby 父親的下落,以避免 Gaby 父親被利用去開發核子武器。這三人一同去了義大利出任務,任務的過程裡發生了蠻多事,三人開始惺惺相惜。到了最後,卻發現 Gaby 是英國特務,三方聯手,找到 Gaby 父親,並且攔截了核子武器。本來 Ilya 為了磁碟打算要動手對付 Solo ,豈知畫面一轉,兩人將磁碟燒掉,握手言和,這時高層也下了指令,要三人組隊,繼續其他任務。
      照這結局看來應該是還會有結局,不過屈指算算也快三年了,或許沒下文了。
    • Passengers (IMDB, Wikipedia),台譯:星際過客。去年看網路評價普普,但自己看過比較實在,我覺得還不錯。
      Jim 是個 Maker ,參加了星際墾荒團,跟著一群人要到遙遠的星球定居,但不知為什麼 Jim 在半路脫離了冬眠狀態醒了過來。他試著要重回冬眠狀態,但沒辦法,只好一個人孤獨的活著。過了一年,一個女人 Aurora 醒了過來,Aurora 相當的驚訝,但在 Jim 的陪伴下接受了這個事實。兩人一起生活了一陣子,開始有了情愫,Jim 都準備要求婚了。但就在這個時候,酒保機器人洩漏了 Jim 的祕密,原來 Aurora 是被 Jim 喚醒的。Aurora 非常非常的驚訝與忿怒,她不能諒解為什麼 Jim 要這樣做,讓她的一生就只能在太空旅行度過。他們冷戰了好一陣子,直到艦長也醒了過來,艦長直覺判定這艘船出了差錯,於是協同 Jim 跟 Aurora 兩人尋找故障的機組,但找到一半,艦長的身體已經不行了,艦長交代他們兩人要好好合作,找到故障機組,拯救這個墾荒團。Jim 跟 Aurora 費了一番功夫終於找到故障的機組,也進行了更換,但是由於排出閥門故障,必須由外部介入才能打開,可是這樣有很大的風險。於是 Jim 決定試試看,好不容易把握時間到了閥門,卻發現閥門故障,必須有人一直按著開關才行,Jim 決定犧牲自己。Aurora 配合 Jim 的指示按下開關進行排出,Jim 非常幸運的沒有被燒死,但卻被氣流衝出去。Aurora 趕緊換上太空衣,在千鈞一髮的時刻救回 Jim,送到醫療機器去救援,Jim 非常幸運的被救活。兩人繼續生活,Jim 在某天向 Aurora 求婚,並告訴她,在看過醫療機器的說明書以後,知道可以讓 Aurora 繼續冬眠。Aurora 做了決定,說已經找到這一生最愛的人,不願意再冬眠,陪著 Jim 在太空旅行度過。墾荒團最後到了目的地,看到 Aurora 留下的紀錄。
    • 3 Days to kill (IMDB, Wikipedia),台譯:特務殺很大。導演試圖在老套的冷血殺戮裡帶入父親 Ethan 對妻女的親情,效果還不錯,最後 Ethan 選擇了對妻子忠誠,不再繼續任務。可惜的是,Vivi 雖然搶眼,但實質的戲份並不多,淪為花瓶。
      Vivi 收到指令,參與暗殺任務,Ethan 也在暗殺任務裡,但任務並沒有成功。Ethan 早就知道自己來日不多,於是在任務結束後,交代好遺囑,打算把剩下的時間留給妻女,但跟 Vivi 會面後,得知自己可以透過稀有的標靶藥再多一點時間,就答應了 Vivi 繼續暗殺任務。在任務的過程裡,他一邊照顧就讀高中的女兒,一邊幫 Vivi 出任務。在任務時,他認識了幫 Wolf 開車的駕駛,透過他,多了解了女兒更多。最後在參加女兒男友的舞會時,遇到 Wolf,展開一場大戰,後來拼的幾近兩敗俱傷時,Vivi 出現,要 Ethan 幹掉 Wolf,但 Ethan 不肯,暈了過去。片尾 Ethan 一家團聚過聖誕,Vivi 在遠方看著他們。
    • LEGO DC Comics SuperHeroes: Justice league – Gotham city breakout (IMDB, Wikipedia),台譯:樂高電影正義聯盟-高譚市突圍。在邊準備煮紅豆湯的過程裡回想,在把紅豆放入電鍋後,終於想起來故事,這是樂高的 DC 英雄系列電影。
      正義聯盟的超級英雄們想讓蝙蝠俠放個長假,於是給了蝙蝠俠一個驚喜,並且講好讓超人代替蝙蝠俠守護高譚市。可是,小丑等幾個反派實在是出乎超人意料之外,超人雖然有羅賓跟神力女超人等的幫忙,還是節節敗退。
      蝙蝠俠跟夜鷹、蝙蝠女一起去了之前的師傅那兒,卻發現師傅是冒充的,調查以後發現是班恩跟蝙蝠俠之前的同學進入了師傅守護的地底大坑裡,利用該地底種族的寶石控制了該地底種族,並囚禁了師傅。蝙蝠俠、夜鷹跟蝙蝠女後來也被關了,遇到了師傅跟王子,幾個人協力打破牢籠,經過一番打鬥,讓蝙蝠俠之前的同學捐棄成見,一同打敗班恩,讓該地底種族重獲自由。
      在高譚市的超人、羅賓等人呼叫了正義聯盟的其他人,並且以羅賓的經驗為基礎,打敗了小丑等反派,讓高譚市回復正常。 蝙蝠俠一行人回到高譚市,超人坦白了自己太過輕敵,蝙蝠俠看到一切都正常,就不多說什麼,眾人開心的慶祝。

電影流水帳(2017/12/6~2017/12/31)

今年總共看了 51 部電影~

Reese

Reese Witherspoon ,是 Sing 裡豬媽媽的聲音所有人,之前演過蠻多的電影,像是金法尤物等。近兩年印象比較深刻的電影作品則是「那時候,我只剩下勇敢」,會想看這部電影的原因是那個時間點正好都在看登山的資料,而女主角又正好走了太平洋屋脊步道,蠻想知道太平洋屋脊步道是怎麼個辛苦法。不過後來買了「山知道」這本書,算是大略知道了太平洋屋脊步道的辛苦與美景。

  • Fantastic Mr. Fox (IMDB, Wikipedia),台譯:超級狐狸先生。很有意思的定格動畫片,是「歡迎來到布達佩斯大飯店」的導演導的,而故事則是改編自英國作家羅爾德·達爾所寫的同名兒童小說。
    狐狸先生跟狐狸太太一同去偷東西,誤入陷阱,在陷阱裡,狐狸先生答應狐狸太太以後不再做偷雞摸狗的事情,以免再次陷入險境。幾年後,狐狸先生跟狐狸太太生了孩子,一家人住在一起過著還可以的生活。但狐狸先生總想著以前刺激的生活,於是搬了家,搬到了三個富裕農夫的農場附近。狐狸先生又開始了他刺激的生活,每天晚上跟鼴鼠一同去偷這三個農夫的雞、酒等農產品。三個農夫當然不是傻瓜,聯合起來圍剿狐狸,狐狸一家人被逼的只能挖地道逃走。附近的動物也受累,他們怪起狐狸,但狐狸說服他們,一同打破這個困境。最後,跟農夫們大戰一場後,狐狸一家人跟動物們搬到城市去,過著不錯的生活。
  • Sing (IMDB, Wikipedia),台譯:歡樂好聲音。音樂動畫片,從片尾的歌聲可以聽出找了不少當紅的歌星來演唱,還蠻不錯的。
    無尾熊所擁有的劇場,因為經營不善,即將被銀行收回。為了挽救這個劇場,無尾熊決定辦一個素人歌星甄選的比賽來挽救,所以就找了豬媽媽、大猩猩、害羞的大象…等素人。在訓練與排演的過程裡,大夥都遇到了亟待解決的問題,還好都一一克服了,也找到了願意投資的金主。可是最後遇到一個大難題,就是劇場整個倒塌了,大夥都非常失望,所幸大夥沒有灰心,為了完成歌唱的心願,決定在倒塌原址舉辦歌唱會。想不到這個歌唱會受到好評,無尾熊得到金主投資,原地重建,素人歌星們完成心願,也成了明星。
    特別讓人印象深刻的是豬媽媽,居然可以在一個晚上設計、打造出完全自動化照顧家人的裝置,真的是太強了,應該改行去當 Maker 才是。

docker-gitlab 與 container registry

之前有試了兩三次,但都卡在憑證部份,昨天終於搞定了。

主要參考文件是 https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md

第一步是產生憑證,不要用上面文章提供的 openssl 指令,用 https://gitlab.com/gitlab-org/gitlab-ce/issues/25967 所提供的:

# 假定是在 docker-compose.yml 所在的目錄下
mkdir -p certs
cd certs
openssl req -nodes -newkey rsa:4096 -keyout registry-auth.key -out registry-auth.csr -subj "/CN=gitlab-issuer"
openssl x509 -in registry-auth.csr -out registry-auth.crt -req -signkey registry-auth.key -days 3650

第二步是修改、調整原有的 docker-compose.yml

# gitlab
gitlab:
  environments:
    # ... other environment variables
    # ...
    # Registry
    - GITLAB_REGISTRY_ENABLED=true
    - GITLAB_REGISTRY_HOST=registry.example.com
    - GITLAB_REGISTRY_PORT=443
    - GITLAB_REGISTRY_API_URL=http://registry:5000
    - GITLAB_REGISTRY_KEY_PATH=/certs/registry-auth.key
    - SSL_REGISTRY_KEY_PATH=/certs/registry-auth.key
    - SSL_REGISTRY_CERT_PATH=/certs/registry-auth.crt
  volumes:
    # ... other volumes
    # ...
    # 將前面建立的 certs 資料夾掛載到 /certs
    - ./certs:/certs
  links:
    # ... other service links
    # ...
    - registry
registry:
  image: registry:2.4.1
  expose:
    - "5000"
  ports:
    - "5000:5000"
  volumes:
    - /var/gitlab/shared/registry:/registry
    - ./certs:/certs
  environment:
    - REGISTRY_LOG_LEVEL=info
    - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
    - REGISTRY_AUTH_TOKEN_REALM=https://git.example.com/jwt/auth
    # 如果你用的 gitlab 設定為 relative url root,那就是
    # - REGISTRY_AUTH_TOKEN_REALM=https://example.com/git/jwt/auth
    - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
    - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry-auth.crt
    - REGISTRY_STORAGE_DELETE_ENABLED=true

第三步是改 Apache 或 Nginx 的設定,Nginx 的設定可以參考 https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md

我用的是 Apache ,所以我是參考 https://gist.github.com/dkarlovi/5f6ab416aa882086c7305b004b590dd4 來做修改,改完記得重新啟動 Apache 或 Nginx。

修改完以後,執行 docker-compose up ,應該就沒問題了。

我遇過以下問題:

  1. 瀏覽 https://git.example.com/group1/project1/container_registry 時,出現 Internal server error:主要是 gitlab 環境變數裡的 GITLAB_REGISTRY_KEY_PATH、SSL_REGISTRY_KEY_PATH、SSL_REGISTRY_CERT_PATH 跟 registry 環境變數裡的 REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE 沒有設定好,當然其他的也有可能,儘可能都檢查一次。
  2. docker login 失敗:其實也是上面提的那幾個環境變數沒設定好。

檢討之前為什麼沒能架設好,原因如下:

  1. 對 SSL 憑證不了解:我的 git.example.com / registry.example.com 都使用 SSL 憑證,但又跟 registry-auth 的憑證搞混,總的來說,總共三個憑證,git.example.com 一個,registry.example.com 一個,registry-auth 一個。gitlab.example.com/registry.example.com 的憑證是給網頁伺服器(Apache/Nginx)使用,Apache/Nginx 設定裡要設定,然後 docker-compose.yml gitlab 服務裡只用到 gitlab.example.com 的憑證,要用 SSL_KEY_PATH, SSL_CERTIFICATE_PATH 跟 SSL_DHPARAM_PATH 這三個環境變數來設定。而 registry-auth 則是 gitlab 服務與 registry 服務作 token 認証用的,主要是 gitlab 環境變數裡的 GITLAB_REGISTRY_KEY_PATH、SSL_REGISTRY_KEY_PATH、SSL_REGISTRY_CERT_PATH 跟 registry 環境變數裡的 REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE。
  2. Apache 的 SSL 設定錯誤:SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile 跟 SSLCACertificateFile 都要設定,我少設了 SSLCertificateChainFile,導致 registry 服務去問 gitlab 時,有憑證錯而有 HTTP request fail 的問題。

電影流水帳(2017/11/7~2017/12/5)

Embed from Getty Images

Sarah Dumont ,在 Scouts Guide to the Zombie Apocalypse 飾演脫衣舞孃酒吧裡的侍應生,在僵屍肆虐下以強悍的姿態與三個高中生童軍一同殺出重圍。身材實在太搶眼,很難把眼光從她身上拉開啊!

  • 拆彈專家 (IMDB, Wikipedia)。之前有看過預告,覺得應該還不錯,就看了。看完以後,覺得是個殺時間的電影,不能算很好,但也不能算太差。
    章在山一開始在炸彈客裡當臥底,在一次行動逮住了主嫌的弟弟,章在山高升,主嫌洪繼鵬遠走國外。過了幾年,洪繼鵬回到香港,展開行動,一方面要救出弟弟,一方面報復章在山,於是在隧道劫持了人質,與警方展開拉鋸。在拉鉅的這一兩天,擁有隧道的公司股價開始攀升,這時才帶出另外一個陰謀,原來洪繼鵬與擁有隧道的公司合作炒股價。洪繼鵬在拿到錢之後,翻臉不認人,殺了公司的主席。而警方不妥協,進行攻堅,進行掃蕩以後,仍避免不了拆炸彈,最後章在山在徵詢隧道工程師意見之後,決定賭上一把,結果賭輸了,章在山壯烈犧牲,僅僅讓炸彈爆炸了一半,保住隧道。
    電影的副線,一條是章在山與李家雯的愛情,這段感覺沒有帶的很好,飾演李家雯的宋佳,僅僅只能算是點綴,沒有很多發揮的空間;一條是帶父親去洗三溫暖的警察,卡在隧道時,因為被歹徒發現是警察,洪繼鵬在他身上綁上炸彈,犧牲了;遊覽車司機的戲份也不少,但可能被剪掉了;姜皓文飾演的警司則有不少心裡戲,不過也不多。整個來說,看的出導演想說的更多,但是很可惜,沒有帶的很好。
  • The accountant (IMDB, Wikipedia),台譯:會計師。網路上一片好評的電影,再加上有亞斯柏格症跟類似英雄電影的題材,讓我蠻想看看。剛好最近 HBO 有上演,就把它看完了。
    Christian 是個古怪的會計師,主要的服務客戶都是些牛鬼蛇神,這次他服務的對象是個生技公司,在調查的過程裡,就在要查出問題時,公司的某個高層被迫自殺,調查也被中斷。隨後,Christian 跟協助調查的 Dana 也被追殺,Christian 認定不對勁,開始更進一步的介入。最後發現就是請他來調查的 CEO 搞鬼,一場血拼之後,發現 CEO 請來的殺手就是他弟弟,意外的認親,與弟弟和解之後,幹掉 CEO。
    副線故事之一,是 FinCEN 的 Ray 勒索了局內的 Marybeth 進行調查,Marybeth 以影片跟錄音的方式縮小範圍,再透過稅務資料找到 Christian 的過程,堪稱奇蹟。結果發現 Christian 就是 Accountant ,在背地幫助 FinCEN 破案的人。
    副線故事之二,是有著亞斯柏格症的 Christian 小時候的經歷以及他怎麼練就超人身體以及應用自身對數字敏感度成為會計師的過程。
    電影的最後,揭露了在電話裡協助會計師的女聲是誰,原來就是會計師的姊姊,住在照護機構裡,以超級電腦以及語音合成器協助 Christian。
  • Blackhat (IMDB, Wikipedia),台譯:黑帽駭客。雷神索爾來到地球以後拍的電影,故事講的是駭客,之前在第四台看了一些片斷,這次在 Netflix 上完整看完。
    香港筌灣的核電廠發生爆炸,高層派出 Dawei 去調查,經過初步調查,判定可能是駭客侵入所導致,Dawei 認為需要與美方 FBI 合作,就找了他的妹妹 Lien,一同到美國找他以前的同學雷神索爾 Hathaway。Hathaway 因為之前的事件入獄服刑,Dawei 以合作為由,讓 FBI 找他出來一同進行調查。經過調查以後,他們找到了駭客以及發動攻擊的真正原因,但 Dawei 跟 FBI 的 Carol 等人也被幹掉,這時劇情變成徇私報仇的橋段,Hathway 跟 Lien 利用了社交的手段,將駭客的錢轉走,並勒索他們。他們約在某個地方打算談判,但實際上 Hathaway 跟 Lien 早打算報哥哥的仇,要把他們幹掉。在肉博戰之後,Hathaway 幹掉駭客及其同黨,跟 Lien 帶著駭客的錢躲起來逃逸無蹤。
    裡面對於駭客的描寫相當寫實,不管是在螢幕上所輸入的指令,或者是利用社交工程侵入他人電腦等手段,相信導演跟編劇一定有找相關的專家來合作,讓電影貼近現實。我個人覺得故事算是不錯,但最後的徇私械鬥有點讓人失望,不過仔細想一想,在擔任與中方高層橋樑的 Dawei 與 FBI 的 Carol 死掉後,Hathaway 要怎麼同時讓中方跟美方相信他?似乎不太可能,所以徇私械鬥也算是相當合理的結局。
  • Scouts Guide to the Zombie Apocalypse (IMDB, Wikipedia),台譯:僵屍教戰守則。記得去年還前年有看過網路上的影評,評價都不錯,所以一直想看。最近在 Netflix 上架了,趕緊來看。果然沒有讓我失望,是部有著趣味、溫馨友情跟砍殺僵屍的 B 級片。
    小鎮突然出現了僵屍,僵屍就像瘟疫一樣,開始蔓延出去。三個高中童軍跟脫衣舞吧裡的侍應生聯合起來殺出重圍,救出姊姊跟其他人,順利讓國民軍以炸彈消滅僵屍。劇情相當的…簡單。

編譯 Android 裡能用的 tcpdump

已經有人提供腳本了:chatch/tcpdump-android: Build tcpdump for Android

很方便,照著 README 做就可以,自己試了以後,發現需要對 build-tcpdump 腳本做些調整,要不然會失敗,先用熟悉的編輯器開啟 build-tcpdump,然後:

  1. 找到 make-standalone-toolchain.sh ,加入 –force 。不加的話,會因為事先建了 toolchain 而警告。
  2. 找到 CFLAGS,在雙引號裏面加入 -D__ANDROID_API__=$android_api 。不加的話,會因為 checking for pcap_loop… no 而停止 tcpdump 的 configure。

然後再執行 ./build-tcpdump 就可以囉。

如果有任何問題想重來什麼的,砍掉 tcpdumpbuild 這資料夾就可以了。

參考資料: