電影流水帳(2017/1/12~2017/2/17)

Margot Robbie Margot Elise Robbie ,最有名的角色應該就小丑女了吧~ 那個造型實在太經典。這次在大賣空裡有看到她出來客串說明,所以就選了她的照片。

  • Moana (IMDB, Wikipedia),台譯:海洋奇緣。這是一個風格接近南島語系民族神話的故事,相信故事也是取材自南島語系民族才是,裏面的毛伊畫的就很像是紐西蘭的毛利人。歌曲超級好聽的,中文版是 A-Lin 唱的,非常的有力道。
    電影一開始先帶出持有魔法魚鉤的半神人毛伊的故事,毛伊為了人類,盜取了塔菲緹的心,在要離開的時候,被帖卡打敗,鉤子掉落海底,毛伊被困在小島上。莫娜從小就被海洋眷顧,聽著祖母說這個故事長大,長大以後,她開始質疑為什麼父親不讓族人離開這座島。透過祖母的引導,才知道祖先其實是航海族,但因為毛伊而誕生的黑暗而決定不再外出航海,以免遭遇危險。不過黑暗還是找上門了,在加上祖母的死,莫娜決定外出尋找毛伊,請毛伊找回塔菲緹的心,消滅黑暗。
    莫娜透過海洋的幫忙找到了毛伊,但毛伊是個自大的人,不願意跟莫娜合作。莫娜花了好大的功夫,才讓毛伊願意幫忙。在尋找魔勾跟塔菲緹的心的旅程裡,兩人慢慢敞開心胸,互相信任,互相幫忙。最後要放回塔菲緹的心時,遇到帖卡,毛伊花了好一番功夫引開帖卡,莫娜發現沒地方可放塔菲緹的心,她看著帖卡,突然領悟到,帖卡就是塔菲緹,所以她走向帖卡,將塔菲緹的心交給帖卡。帖卡在這個時候變回了塔菲緹,海洋的黑暗也隨之消失。莫娜告別毛伊、塔菲緹,回到故鄉,整個村子也回歸為航海族的身份。
  • Maidentrip (IMDB, Wikipedia),台譯:處女航。這是一部關於荷蘭小女生的紀錄片,一個十三歲的女生,在歷經十個月的訴訟以後(保護團體要求接管監護權,以阻止小女生進行環球航行的瘋狂舉動),在14歲進行預定兩年,以帆船環遊世界的行動。令人感到佩服的是這小女生十三歲就知道自己要做什麼,而且自己找贊助,擬定計劃,找資料等等,不假父母之手,令人佩服。
  • The Lego Batman Movie (IMDB, Wikipedia),台譯:樂高蝙蝠俠。故事主要是強調伙伴和朋友的重要性。
    大意是蝙蝠俠太自大也怕失去,所以不打算有伙伴,也不認可小丑。小丑在不被蝙蝠俠認同的情況,剛好看到電視訪談超人把某個壞人關掉幽靈空間,就決意進入幽靈空間尋求盟友,於是設了局,讓蝙蝠俠去偷超人的幽靈空間傳送器,將自己送去幽靈空間。
    小丑在幽靈空間裡找到佛地魔、索倫、金剛等曾經在華納電影裡出現過的壞蛋來幫忙,小丑女則算準時煎,奪回傳送器,將裡面的壞蛋都傳送回來破壞高譚市。蝙蝠俠寡不敵眾,得到教訓,學到伙伴和朋友的重要性,於是和阿福、羅賓、高登的女兒(蝙蝠女)等聯手將這些壞蛋送回幽靈空間。但是這並沒有拯救高譚市,城市受到來不及拆的炸彈影響而裂開。蝙蝠俠最後尋求小丑的原諒及幫助而拯救了高譚市。
    笑點不是很好笑,我在看到一半時,差一點點睡著,整體來說我覺得普普,沒有比前作樂高玩電影好看。
  • The big short (IMDB, Wikipedia),台譯:大賣空。有個醫生,也是個基金經理人,在 2006 年研讀了大量的房貸資訊以後,認定與次級房貸相關的金融商品都會泡沫化,所以他大膽的將基金拿去作賣空。許多華爾街的人聽到這消息都當作笑柄,但是有兩三組人聽到這消息,認真的進行求證,確認了這個可能性,也開始賣空。到了 2007、2008 年,次級房貸市場明顯愈來愈危險,但是始終都沒往下掉。在他們資金吃緊的情況下,他們發現政府、評比機構也跟著在作假,所以次級房貸市場還維持著熱絡。不過,到了 2008 年中以後,底層的真實情況終於反映到金融商品上,於是發生了金融海嘯。
    相當警世的一部電影,我對於裏面 Morgan Stanley FrontPoint 的負責人 Steve Eisman 印象深刻,他在聽到次級房貸消息以後,和組員到實際的市場去進行調查與了解,發現房貸市場非常可能會崩盤,才開始進行賣空。最近在看系統思考的書,裏面也提到了同樣的看法,在面對系統前,最好先進行觀察,確定整個系統的流程與各個可能的影響因子,這樣才能找出最好的槓桿點與施力點。想多了解一點關於次級房貸,可以參考 《大賣空》到底在演什麼?簡單搞懂《大賣空》片中的艱澀財經內容!

django-channels websocket 與 nginx

django-channels 的佈署指南,裏面的幾個重點:

  1. 先安裝 redis,再用 pip 安裝 asgi_redis ,然後將 settings 裡 CHANNEL_LAYERS 的 “BACKEND” 改為 asgi_redis.RedisChannelLayer ,這樣效能會比較好些。
  2. 執行 worker :
    python manage.py runworker
  3. 在 wsgi.py 的同個資料夾,新增 asgi.py ,裏面放
    import os
    from channels.asgi import get_channel_layer
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
    
    channel_layer = get_channel_layer()
  4. 執行 ASGI server :
    daphne your_project.asgi:channel_layer

    ,daphne 是在安裝 channels 時,會跟著裝上的。使用了 daphne 以後,就可以不需要 gunicorn 了,至於 uwsgi ,因為我沒在用,所以沒有深入研究。

runworker 跟 daphne 的部份,可以使用 supervisor 或者是寫 upstart script ,讓他們自動啟動。除了這些重點以外,nginx 的設定也需要調整,設定不多,只有幾行,這可以參考這兩篇文章:

大致的設定如下:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream app_server {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    include mime.types;
    default_type application/octet-stream;
    access_log /var/log/nginx/access.log combined;
    sendfile on;

    listen 80;
    client_max_body_size 4G;

    # set the correct host(s) for your site
    server_name example.com;

    keepalive_timeout 5;

    # path for static files
    location /static/ {
        alias /srv/app/site/static/;
    }

    location /media/ {
        alias /var/app/media/;
    }

    location / {
        # checks for static file, if not found proxy to app
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_buffering off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass   http://app_server;

        # For websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /srv/app/site/static;
    }
}

我在套用這些設定以後,websocket 仍然無法順利連上,找了好半天,才找到這篇:Websockets fail to work after upgrading to 1.0.0 · Issue #466 · django/channels  ,看完才知道,channels/daphne 在升級到 1.0 以後,程式裡的 websocket consumer 必須要送出

{"accept": True}

才行。這部份可以參考 1.0 的 release note ,也可以參考新的 Getting Start。不過我在參考 Getting start 時,居然沒注意到這行,也是我太大意了。

TypeScript 學習筆記(6) – Classes

主要看這篇:Classes

大致用法跟 C#/Java 差不多,幾個特別的地方:

  1. readonly :成員可以加上 readonly 來修飾,表示是唯讀。
  2. 有 getter/setter:可以用 get/set 這兩組 accessor 讓 method 變成屬性。
    class Employee {
        private _fullName: string;
    
        get fullName(): string {
            return this._fullName;
        }
    
        set fullName(newName: string) {
            this._fullName = newName;
        }
    }
    
  3. static:類似 java/c# 那樣的用法,原本 javascript 是沒有的。
  4. abstract 修飾:可以加在 class 前面,也可以加在 method 前面,用法跟 java/C# 相似。

後面提到的 constructor functions 是一個進階技巧,不過感覺上用到機會不大。