電影流水帳(2017/8/4~2017/9/9)

The Shallows poster.jpg
By Source, Fair use, Link

Blake Lively 是絕鯊島的女主角,演過蠻多電影,這次獨挑大樑。她的配偶是演綠燈俠跟死侍的 Ryan Reynolds ,真的是郎才女貌。

  • Central Intelligence (IMDB, Wikipedia),台譯:中央情爆員。之前看預告蠻好笑的,終於等到第四台上映。整體還可以,蠻適合打發時間。
    某天 Calvin 接到之前老同學 Robbie 的電話,兩人聊了起來,並約了要出去吃飯。吃了飯才知道 Robbie 變化很大,而且改了名,現在叫作 Bob。豈料,跟 Bob 的飯局成了奇遇的開始。原來 Bob 是情報員,跟 Calvin 聯繫,是因為 Calvin 在學校時幫助過他,他認為只有 Calvin 能相信。接下來,兩人一同處理、調查情報局裡的內鬼事件。在調查的過程裡,兩人更加了解彼此,最後也順利的解決了案件,並且讓 Bob 走出學生時代的陰影。
  • Jack Reacher: Never Go Back (IMDB, Wikipedia),台譯:神隱任務-永不回頭。個人覺得第一集比較好看,這集雖然也延續了之前動作性,但感覺就有點為賦新詩強說愁的感覺。神盾局副局長 (女主角 Susan )的表現不俗,相當的不錯。
    Jack 陸續跟軍中的 Susan 合作解決案件,兩人慢慢有了感情,直到 Jack 去華府找她時,發現 Susan 昨天被關了起來。Jack 直覺不對,於是不顧接任 Susan 的人的阻撓開始調查。他先找了幫 Susan 辯護的律師,然後將調查到的線索交給他,但是辯護律師隨即被殺死。Jack 趕緊潛入獄中,救出 Susan。在此同時,Jack 也遇到了聲稱是他女兒的 Samantha。三人邊逃邊調查,終於查出真相。原來是某公司因為瀕臨破產,就利用運美國軍火的機會進行運毒。Susan 派出的探員調查發現了,某公司就派人將探員殺死,並且擔心報告寄給 Susan ,所以一不做二不休的,回美國境內誣害 Susan。總之,最後是水落石出了,Samantha 坦白自己是冒充 Jack 的女兒,Susan 恢復清白,Jack 則繼續流浪。
  • Mr. Holmes (IMDB, Wikipedia),台譯:福爾摩斯先生。這次的故事蠻特別的,講的是福爾摩斯的老年。飾演管家 Mrs. Munro 的 Laura Linney 跟飾演福爾摩斯的 Ian McKellen 有相當精彩的對手戲。
    福爾摩斯老了,被老年痴呆症困擾,但他不認輸,試著以蜂王乳跟東洋草藥來挽回。在老年痴呆症的困擾與管家小孩的陪伴裡,他慢慢回想最後一件案子的經過,並試著解開謎底。到最後他終於回想起來,並且串連起所有線索,拼湊出全貌。
    原來最後一件案子,福爾摩斯在受到丈夫 Thomas 的委託進行調查其妻 Ann 以後,確定是 Ann 因為喪子之痛而買了毒藥,原本以為毒藥是要毒害 Thomas ,但之後 Ann 故意走到鐵路上讓火車撞死了。福爾摩斯看到報紙,頓悟到自己大錯特錯,受到打擊,躲到鄉下十幾年,從此一蹶不振。
    就在此時,管家的兒子被胡蜂叮咬過敏,送他到醫院的時候,福爾摩斯跟管家把心結打開了,福爾摩斯很慷慨的將身後所有的財產留給管家以及他的兒子,同時也運用才智解開了管家兒子被叮咬之謎。
  • The Shallows (IMDB, Wikipedia),台譯:絕鯊島。網路評價不錯,剛好第四台有播映,就趁機看完了。
    Nancy 是個醫學院學生,為了忘卻喪母之痛,孤身來到母親以前的海灘衝浪。想不到她在這裡卻遇到了鯊魚,受了傷被困在礁岩上。她運用在醫學院學到的知識,縫合自己的傷口並試圖利用之前衝浪愛好者的運動攝影機錄影,來找到救援。她在錄完影之後,運用之前對鯊魚的觀察,逃到了浮標平台之上,運用這個平台,智取鯊魚。她被海浪沖到岸邊,在此之前沒多久,來沙灘玩的小男孩看到攝影機的影片,找來父親幫忙,正巧就遇到被沖到岸邊的 Nancy,Nancy 因此得救。經過一年的時間,Nancy 終於復元,並和父親跟妹妹一起到海邊衝浪。
  • Cars 3 (IMDB, Wikipedia),台譯:Cars 3-閃電再起。隨著時間的過去,麥坤的寶座被新人挑戰,麥坤失去自信,發生了重大車禍。但是麥坤不肯認輸,決定在新東家的幫忙下,繼續努力。在新東家這兒,他認識了訓練師 Cruz ,但是訓練成效不彰,新東家不想讓他繼續比賽。於是麥坤跟新東家老闆打了賭,他必須在佛羅里達500競賽裡得到冠軍。麥坤以自己的訓練方式進行訓練,Cruz 跟著他進行。他們一路到了韓大夫的老家,遇到了韓大夫的老伙伴們,從他們身上學到了不少技巧。然後他們趕赴佛羅里達參加比賽,但麥坤並沒有在訓練裡得到自信。在比賽的前半段,麥坤突然認知到該交棒了,身邊的 Cruz 正是一個奇才,於是換手讓 Cruz 跑。最後 Cruz 得到冠軍,麥坤也退居到總機械師的位置。

 

Python profiling decorator

前幾天想知道我 Django 程式裡某段函式的瓶頸,所以查了 Django 怎麼做 profiling 。是有查到有 jazzband/silk: Silky smooth profiling for Django 這個 package ,但是有點太大。如果是用常找到的

python -m cProfile xxx.py xxx.py

,Django 程式又不太適合。畢竟我只是想查某個函式而已。所以後來查到這兩個 decorator:

使用上很簡單,程式放進去,在想做 profiling 的函式前加上 decorator 就可以了。

我用的是第一個,在加上 decorator,執行過程式(應該說是瀏覽網頁)以後,在程式當前資料夾裡會找到 .profile 的檔案,為了後續方便說明,假設產生出來是 func.profile 。有這個檔案以後,就可以用

python -m pstats func.profile

開啟,開啟以後,是 pstats 的 shell ,一般要查哪個地方花的時間最多,會用

sort time

依照執行花費時間來排序,再用

stats 10

列出前十個花費時間最多的函式。

參考資料:

Ansible 處理多主機不同密碼

用 Ansible 一陣子了,比較麻煩的地方是,主機不一定密碼都相同,簡單的方法當然是讓主機密碼都一樣,但這樣就降低了安全性。有沒有不需要改動密碼的方式呢?在網路上找了半天,找到這篇:ubuntu – Ansible: how to run a play with hosts with different passwords? – Stack Overflow ,裏面有個回應是建議使用 group_vars + ansible-vault + ansible_become_user/ansible_become_pass 來解決。

以下紀錄大致的步驟:

  1. 在 playbook 所在目錄或是 /etc/ansible 下建立 group_vars 資料夾 (以下簡稱 group_vars 資料夾)。
  2. 在 inventory 檔案裡,將相同密碼的主機編成一個群組,這裡假設群組名稱是 foo。
  3. 進入 group_vars 資料夾,用 ansible-vault create foo.yml ,這時候會詢問你 vault 的密碼,輸入完成以後,會開啟編輯器,請在裏面輸入
    ---
    ansible_become_user: "root"
    ansible_become_pass: "your_password"
  4. 存檔離開編輯器。
  5. 在輸入 ansible-playbook 或 ansible 指令時,帶 –ask-vault-pass 參數,也就是在執行時,會問你 vault 檔案的密碼,然後自動解密並讀入裏面的變數執行。

之後要編輯加密過的檔案,得用 ansible-vault edit foo.yml 才行。

參考資料:

Upgrade Jenkins plugins via SSH

之前都是啟用 CLI over remoting ,用 jenkins CLI 做更新,但前一陣子在更新 Jenkins 以後,開始該該叫,說這樣不安全。查了一下文件,發現可以用 SSH 來做。

  1. 在 http://jenkins/configureSecurity 裡啟用 random SSHD Port
  2. 在會使用 ssh 登入更新的使用者設定裡 (http://jenkins/user/YOUR_USER_NAME/configure),貼上 public key 。
  3. 參考並修改這個腳本,執行它就可以更新了。

電影流水帳(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

參考資料: