電影流水帳(2017/6/6~2017/8/3)

Elodie Yung Elodie Yung ,在 Gods of Egypt 裡飾演愛神,在找她照片的時候,我想起之前在 G.I. Joe: Retaliation 裡看過她,在 G.I. Joe: Retaliation 裡是飾演一個女忍者,不常看到臉。不過,總算是在這部電影裡大大露臉了。

  • Hors De Prix (IMDB, Wikipedia),台譯:巴黎拜金女。Irene 是個以自己年輕本錢去當有錢人女友的女孩,有一天他在飯店遇到 Jean ,誤以為他是有錢人,跟他度過一晚,隔天因此失去金主。Jean 打腫臉充胖子,用自己的存款設法滿足 Irene,但終究不敵 Irene 的花用而花光。Irene 之後一走了之,Jean 走投無路,意外跟 Irene 一樣,以自己年輕的本錢,找到有錢的女人。
    後來兩人又遇到一起,Irene 看到 Jean 的金主,兩人之間反而變成交流了。在一番糾葛之後,Irene 明白 Jean 對他是玩真的,於是就在一起了。
  • Monster truck (IMDB, Wikipedia),台譯:怪獸卡車。意外的是個跟環保議題有關係的電影,跟電視預告的感覺不一樣,還蠻適合小朋友看的電影。
    在美國的某個油井發生了意外,有奇怪的生物從油井裡跑了出來,石油公司為了避免油井被封閉,派出了特遣隊到附近的小鎮上進行搜捕。男主角是個高中生,平常在資源回收場工作。生物逃到了男主角工作的地方,為了吃油,意外進入了卡車裡,男主角發現這生物還蠻會用卡車的,就改造了卡車。男主角也意外遇到了女主角,兩人調查這生物以後,發現這生物是從油井那邊來的。為了帶生物回去,兩人就到油井那邊去。
    從這邊有點忘記了,好像是邊被石油公司特遣隊搜捕,然後他們也意外發現了這生物還有兩個伙伴,石油公司裡研究這生物的研究員很同情這生物,所以就幫男女主角逃出去。男女主角逃出以後,改造了卡車,配合石油公司裡的研究員,一起帶著這些生物回到油井去。最終皆大歡喜,生物回到原棲地,石油公司倒閉,油井關閉,讓生物能有棲身之所。
  • Max Steel (IMDB, Wikipedia),台譯:鋼鐵麥斯。麥斯跟母親搬回了小時居住的小鎮,結果卻發生了一連串的怪事。麥斯意外發現自身的奇怪力量,並且遇到了 Steel ,兩人結合有更強大的力量,同時也讓 Steel 回想起之前跟麥斯父親合作的事情。結果搬回小鎮竟是已故父親合伙人的詭計,合伙人想利用 Steel 同類的力量來統治世界,於是麥斯跟 Steel 合作,打敗了合伙人,也解救了世界。
  • Gods of Egypt (IMDB, Wikipedia),台譯:荷魯斯之眼-王者爭霸。之前看預告,感覺上特效不錯,不過評價不是很好。
    簡單的說就是改編自埃及神話。
    Horus 原本要繼位當國王的,就在要登基的時候,父親的弟弟 Set 前來發動一場政變,取得了政權。Horus 在這場政變中失去了雙眼與神力,落魄的躲了起來,其他的神祇不是歸順就是被殺害。在人間有個盜賊 Bek,他的情人 Zaya 深信荷魯斯會再起,但 Bek 不相信。直到有一天,Zaya 因為幫助 Bek 偷了 Horus 的一隻眼睛而被 Set 的建築師殺了,Bek 才決定去找 Horus ,讓他幫忙救 Zaya。於是 Horus 跟 Bek 慢慢互相信任、互相幫忙,開始了打倒 Set 的路。在這段過程裡,有 Horus 的祖父、智慧之神、愛神等等的插曲,甚至 Bek 也如願見了在陰間的 Zaya。
    最後,Horus 與 Set 展開大戰,Horus 從 Bek 身上認知到自己的力量,進而打倒了 Set ,恢復人間的和平。而 Horus 也信守承諾,請祖父幫忙復活了 Zaya 與 Bek,一個快樂的結局。
  • Stranger than fiction (IMDB, Wikipedia),台譯:口白人生。Harold,一個會計師一天早起以後開始聽到奇妙的口白,他心裡很納悶,懷疑自己是不是生了病,到處找人幫忙。在這段過程,Harold 認識了一個糕點師 Ana ,對她產生了好感,並在之後聽了教授的建議跟她發展出一段感情;後來找到一個大學教授,透過教授 Jules 的幫忙,他得知了自己可能是一本書裡的主角,經過一番波折,他找到了這個作者 Karen。Karen 其實也陷入了寫作瓶頸,她一直不知道該怎麼安排故事的走向,是該跟之前一樣賜死呢?還是讓他活?她考慮了各種死法,但一直拿不定主意。
    Harold 跟 Karen 碰面了,這讓 Karen 極為驚訝,畢竟 Harold 是個真實的人啊,對於 Harold 的死去,她更加拿不定主意了。但是依照故事的走向,又必須讓 Harold 死去,最後她還是寫下了故事,並且交給 Harold。Harold 拿到以後,先拿給教授,問教授是不是還有轉圜的餘地。教授認真的看完原稿,交還 Harold 原稿,並告訴 Harold ,你必須死去,這是最好的結局。Harold 拿到以後,在回去的路上一口氣把原稿看完,他找到 Karen ,告訴她,他也認為這是最好的結局。於是世界就照著原稿的故事走了下去,Harold 在上班的途中為了救小朋友,被公車撞了。
    故事就這樣結束了嗎?Harold 醒來,懷疑自己是不是在天堂,但 Ana 告訴他不是。原來是 Karen 改寫了原稿,讓 Harold 能繼續活下去。
    這部電影真的蠻有意思。
  • Keeping Up with the Joneses (IMDB, Wikipedia),台譯:間諜大鄰演。衝著 Gal Gadot ,把這部電影看完了,故事還蠻有意思的。
    暑假到了,Jeff 跟 Karen 送小孩去了夏令營,原本以為兩人會有不一樣的生活。沒多久,隔壁就搬來了 Joneses 夫婦,這兩人的生活頗有古怪,Karen 調查起他們。經過一番調查,Jeff 跟 Karen 發現 Joneses 夫婦是間諜,而他們自己也陷入了古怪的事件裡。後來透過 Joneses 夫婦才知道是有人用 Jeff 的電子郵件販售機密,Joneses 夫婦是來調查的。總之,Jeff 跟 Karen 不得不幫起 Joneses 夫婦,展開了冒險。所幸最後是有驚無險,兩人度過了一個驚險的暑假,也跟 Joneses 夫婦當了好朋友。

 

wordpress 出現 Invalid post type 錯誤

今天進 wordpress ,選 All posts 後,就出現 Invalid post type. 的錯誤。先試著開啟 wordpress wp-admin/edit.php 看,發現一開始的檢查 $typenow 就導致錯誤 了,$typenow 是空的。

根據程式碼,試著在網址列加上 ?post_type=post ,能進入 All posts 了,但文章列表是空的。

  1. 上網找了一些文章,說是要移除 plugin ,但我試著移除了,沒有用。
  2. 對照目前的程式碼跟網路下載的 wordpress 4.8 程式碼,也幾乎是一樣的。
  3. 試著直接連線到資料庫看,資料表格一切正常,權限也都是正確的。
  4. 直接在 wp-config.php 裡加入
    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);
    

    ,然後看 wp-content/debug.log ,終於找到一點蛛絲馬跡。

看來是因為 wp-include/vars.php 有問題,裏面用 preg_match 檢查 _SERVER[‘PHP_SELF’] 時,因為 match 不到而出錯,猜想這可能連到影響到後續的 $typenow 有問題。根據這個線索去推敲,PHP 應該沒問題,察看了 php-fpm 的設定,也沒問題。後來找到這篇:php – Wrong SCRIPT_FILENAME in Apache 2.4.26 – Stack Overflow,再循線看到這篇:php – Wrong SCRIPT_FILENAME in Apache 2.4.26 – Stack Overflow才知道可能是 Apache 問題,察看了 pacman 的 log,果然前幾天有更新,但是因為沒有重新啟動,所以都沒發現問題。在設定裡補上

ProxyFCGIBackendType GENERIC

以後,重新啟動 Apache 就沒問題了。

awk 一行下載

為了下載投影片,但懶得一個個複製貼上、改指令,所以預先把投影片網址跟預定的檔名放在文字檔裡,然後用 awk 一次下載。

文字檔的格式是:url filename ,假定這個文字檔的檔名是 slides.txt

那麼,這樣就能搞定:

awk '{system("wget -O \"" $2 "\" " $1)}' slides.txt

參考資料:bash – awk system call – Stack Overflow

parse-server 架設小記

花了一些時間簡單的架設 parse-server,把過程紀錄一下。

  1. 安裝 docker 與 docker-compose
  2. git clone https://github.com/parse-community/parse-server.git
  3. 建立 docker image:
    cd parse-server && docker build --tag parse-server .
  4. git clone https://github.com/parse-community/parse-dashboard.git
  5. 建立 docker image:
    docker build --tag parse-dashboard .
  6. 建立 config.json,your-ip 要填你瀏覽器可以存取到的 IP ,而不是用 docker container 的 ip ,我本來是填 http://parse:1337/parse (請看 docker-compose.yml 裡的 links),但這樣 parse-dashboard 會說無法連到伺服器。
    {
      "apps": [
        {
          "serverURL": "http://<your-ip>:1337/parse",
          "appId": "APPLICATION_ID",
          "masterKey": "MASTER_KEY",
          "appName": "MyApp",
          "production": false
        }
      ],
      "users": [
        {
          "user": "user",
          "pass": "pass"
        }
      ]
    }
    
  7. 建立 docker-compose.yml
    ---
    version: '3'
    services:
      mongodb:
        image: mongo:3.4
    
      parse:
        image: parse-server:latest
        environment:
          FOO: bar
        command: --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongodb/test
        links:
          - mongodb
        ports:
          - "1337:1337"
      parse-board:
        image: parse-dashboard:latest
        environment:
          PARSE_DASHBOARD_ALLOW_INSECURE_HTTP: "yes"
        links:
          - parse
        ports:
          - "4040:4040"
        volumes:
          - ./config.json:/src/Parse-Dashboard/parse-dashboard-config.json
    
  8. docker-compose up

要啟用 push notification ,得調整 docker-compose.yml 裡 parse service 的 command,加入 push notification 的相關選項。從選項可以看出,parse 仍是利用 GCM/APNs 來發送通知。

LiveQuery 在佈署到 AWS 時,要用 ALB,因為 ELB 不支援 WebSocket。

在正式環境裡,要記得把 PARSE_DASHBOARD_ALLOW_INSECURE_HTTP 設為 “no” ,並且加上 SSL 。也可以參考 parse-server github 網頁上對於佈署的說明,有蠻多佈署到平台上的現成範例可參考。

參考資料:

webui-aria2-git

aria2 的 web UI,紀錄一下怎麼使用。

  1. 安裝:yaourt -S webui-aria2-git
  2. 啟動 aria2d:放在 /usr/lib/systemd/user/ 下的 service 檔案,需要額外加上 –user 參數,所以要啟動得用 systemctl –user start aria2d 。要確定是否有啟動,可以用 netstat 檢查 port 6800 是否在 listening 狀態。
  3. Web UI 部份的啟動:主要是靜態 HTML,所以只要調整 Web server 的設定,指向 /usr/share/webui-aria2/ 就可以了。

提高安全性:

  1. 修改 /usr/lib/systemd/user/aria2d.service ,在 ExecStart 那行後面加上 –rpc-secret=<your_token> ,–rpc-secret 是加上 token。
  2. 打開網頁時,在連線設定裡填入步驟 1 的 token 。

參考資料:

VirtualBox guestcontrol

VirtualBox 可以用 vboxmanage guestcontrol 來有限度的控制 VM 裡的 GuestOS。

GuestOS 是 Ubuntu 的話,得安裝 virtualbox-guest-utils, virtualbox-guest-dkms ,安裝完以後,重新開機。

在 HostOS 裡,就可以用 vboxmanage guestcontrol 指令了。

# VirtualBox 5.x
vboxmanage --nologo guestcontrol "Ubuntu 16.04" run --exe /sbin/ifconfig --username ubuntu --passwordfile password.txt --wait-stdout --wait-stderr --verbose

參考資料:

ultisnips/vim-snippets

本來是打算用 snipmate 的,但看到這篇 UltiSnips 让 Vim 飞起来 – 吕小荣 ,馬上轉投 UltiSnips 。XD

安裝與設定上沒什麼困難。

" Install ultisnips using Vundle
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'

裝好以後,輸入特定的關鍵字 (關鍵字要自己去挖 vim-snippets 下的 UltiSnips/snippets 資料夾裡的檔案),再按 tab ,就會自動出現 snippet,如果 snippet 有指定 ${1:pass} 之類的,可以在輸入完畢以後,用 ctrl + j 或 ctrl + k 來切到上一個或下一個位置。

我卡到的問題是自訂的 snippets 沒被載入。找了半天,才發現我把 UltiSnips 資料夾放錯位置。(把我的時間還來!!)

UltiSnips 的 python docstring 可以自訂,看格式是要用 google, sphinx, doxygen, numpy 還是 jedi 的格式。在 .vimrc 裡放下面這行就可以了:

let g:ultisnips_python_style="google"

pycryptco in python3

最近需要做 public/private key 的加解密,所以找到 pycryptco 。

使用的例子可以參考 Python and cryptography with pycrypto

但使用時,卻遇到 unsupported operand type(s) for pow() 的問題,經過一番查找,才找到問題所在,詳情可以看這篇:Error with encrypt message with RSA python – Stack Overflow

主要是因為 Python 3 的字串預設是 unicode 字串,而 encrypt 沒辦法處理,所以得先 encode 為 utf-8 字串才行:

# -*- coding: utf-8 -*-
import os
import base64
from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Cipher import PKCS1_OAEP, AES
from pprint import pprint


# Generate key
if os.path.exists('mykey.pem'):
    with open('mykey.pem', 'rb') as fin:
        key = RSA.importKey(fin.read())
else:
    random_generator = Random.new().read
    key = RSA.generate(1024, random_generator)
    with open('mykey.pem', 'wb') as fout:
        fout.write(key.exportKey('PEM'))

# Display key information
print("key = {}".format(key))
print("can_encrypt = {}".format(key.can_encrypt()))
print("can_sign = {}".format(key.can_sign()))
print("can_private = {}".format(key.has_private()))

# show public key
pprint(dir(key.publickey()))

# Encrypt
enc_data = key.publickey().encrypt("abcdef".encode('utf-8'), 32)
pprint(enc_data)

# Decrypt
print(key.decrypt(enc_data))

Jenkins EnvInject

Jenkins 裡能用的環境變數可以參考:

  1. Jenkins 架設好以後的 /env-vars.html/
  2. https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables

但是有時候,就是覺得少了那麼一些。我們可以使用 EnvInject plugin 在建置時,插入需要的環境變數,讓後續的建置步驟使用。

使用方法:

  1. 在 EnvInject 之前的步驟產生出類似這樣格式的檔案 key=value ,假設檔名是 build.properties
  2. 加入 EnvInject,在 Properties File Path 這欄位放入步驟 1 產出的檔名 build.properties ;Properties Content 不填。
  3. 在 EnvInject 之後的步驟欄位裡,就可以使用 ${key} 了。

參考資料:

電影流水帳(2017/5/10~2017/6/5)

Jennifer Garner Jennifer Garner ,少了她,夜魔俠會失色不少。後來她這個角色還出了獨立的電影,有機會要找來看看。

  • Little Miss Sunshine (IMDB, Wikipedia),台譯:小太陽的願望。某天要上班前,打開電視,結果看到一直想看的「小太陽的願望」,於是就把這部電影看完了。上班遲了,不過這部電影值得。裏面有一幕特別讓我覺得感動,路上長男因為色盲無法上飛行學校而對未來感到失望,忿怒的下車發洩,不願意繼續陪著妹妹 Oliva 去參加比賽,媽媽怎麼勸都勸不聽,後來爸爸要Oliva去試試看,Olivia走到哥哥旁邊,什麼也不說,只是靠在他身上並抱著他。過了一會兒,哥哥說,走吧,我們趕快趕去比賽會場。有時候,家人跟朋友需要的只是你陪在身邊,不需要多說建議什麼的。
    故事相當的簡單,Oliva 接到通知說可以參加陽光小公主的比賽,全家人在媽媽的威脅利誘之下都跟著去了。由於沒錢不能搭飛機,只能租車開過去。在這趟公路旅行裡,發生了許多有趣的事,每個人也都在自己家人前攤開了自己的事。最後,通力合作讓 Oliva 參加比賽,雖然爺爺在旅行中因為吸毒掛了,但全家人找到了一個新的平衡,能在往後的路上相互支持。
  • Independence Day: Resurgence (IMDB, Wikipedia),台譯:ID4 星際重生。我只看了後半部,基本公式的確跟前作很相似,沒什麼印象深刻的地方 (也可能是隔了太久,所以劇情都忘光了)。
    在上次 ID4 之後,地球的國家都積極準備,以便抵抗外星人。但是真的到了外星人來的時刻,大家才發現準備的不夠,了解的還不夠多,於是被打趴。後來也是意外發現了外星人要的東西以及弱點,於是展開反擊,最終就是快樂的大結局。
  • 걷기왕 (IMDB, Wikipedia),台譯:競走女王。原本以為是勵志片,但看到後來才發現不是。電影的前面有漫畫的感覺,一邊有旁白介紹,一邊女主角逗趣的演出,相當有趣。
    滿福是個體質容易暈車的女孩,從小就暈車,長大以後還是暈車,所以沒辦法出遠門,上學也只能用走路的去。某天班導師想了解滿福的狀況,就決定去滿福家裡做家庭訪問。家庭訪問之後,她覺得滿福應該適合田徑,就推薦她進了田徑社。
    滿福在社團裡認識了練競走的學姊,跟學姊慢慢的從討厭到有情誼,滿福也從漫不經心,到認真的練習競走。為了參加首爾的全國比賽,滿福決定跟學姊用走的走到首爾參加比賽。可是在路上,她因為自己的傷跟學姊起了小衝突,害學姊進了醫院。隔天比賽,她一開始就拼命的走,這個舉動打亂了其他選手的節奏,也讓她取得領先。就這樣沒休息拼命的走,走到跌倒,她看著天空,突然放下了要完成比賽的懸念。電影的最後,滿福跟學姊成了好朋友,決定用走的走遍全世界,電影就這樣收了尾。
  • Daredevil (IMDB, Wikipedia),台譯:夜魔俠。自從夜魔俠影集出來以後,就蠻想找之前的電影來看看。後來有 Netflix,在 Netflix 上看完以後,覺得女主角 Jennifer Garner 飾演的 Elektra 與 Colin Farrell 飾演的 Bullseye 救了這部電影,讓這部電影不至於太過枯燥。男女主角認識對打的那場戲可惜了,一出場時頗讓人有眼睛一亮的感覺,但武打場面應該可以更精彩才是。
    電影一開始帶出夜魔俠的重傷,然後開始倒敘他的過去。Matt 小時候意外目睹父親的惡行,受不了這打擊,在奔跑的路上撞到毒物,導致眼睛失明。父親也因此改惡向善,努力打拳。但冠軍賽時不願意配合打假拳,比賽結束時,被打死。Matt 決心努力唸書當律師,並且以失明換來的敏銳感覺練就了一身好功夫。長大以後,Matt 白天當律師,晚上則是當夜魔俠打擊犯罪。跟他一起開律師事務所的合伙人就是飾演鋼鐵人裡 Hogan (就保鏢,也是鋼鐵人的導演) 的 Jon Favreau。某天遇到 Elektra ,Elektra 是大魔王  The Kingpin 合伙人的女兒, 兩人開始有情愫。The Kingpin 是地獄廚房的魔頭,他想要拔掉他的合伙人以及夜魔俠,於是找了 Bullseye 來殺掉他們。Bullseye 成功的殺掉 Elektra 的父親,並讓 Elektra 以為是夜魔俠下的手。Elektra 決心殺掉夜魔俠,於是跟夜魔俠大打出手,夜魔俠試著說明,但 Elektra 不聽,直到她刺了夜魔俠依劍,拿下夜魔俠的面具才知道他是 Matt。Bullseye 黃雀在後,殺了 Elektra,夜魔俠逃到教堂,接到電影最前面的地方,跟 Bullseye 在教堂大戰一場,並且僥倖取勝。最後,再拖著受傷的身軀,去找 The Kingpin ,並將他打敗。故事的結尾,Matt 上到 Elektra 死去的樓頂,發現居然掛著有點字的牌子,似乎是留下 Elektra 還活著的伏筆。