為了下載投影片,但懶得一個個複製貼上、改指令,所以預先把投影片網址跟預定的檔名放在文字檔裡,然後用 awk 一次下載。
文字檔的格式是:url filename ,假定這個文字檔的檔名是 slides.txt
那麼,這樣就能搞定:
awk '{system("wget -O \"" $2 "\" " $1)}' slides.txt
	Just thinking more…
為了下載投影片,但懶得一個個複製貼上、改指令,所以預先把投影片網址跟預定的檔名放在文字檔裡,然後用 awk 一次下載。
文字檔的格式是:url filename ,假定這個文字檔的檔名是 slides.txt
那麼,這樣就能搞定:
awk '{system("wget -O \"" $2 "\" " $1)}' slides.txt
	花了一些時間簡單的架設 parse-server,把過程紀錄一下。
cd parse-server && docker build --tag parse-server .
docker build --tag parse-dashboard .
{
  "apps": [
    {
      "serverURL": "http://<your-ip>:1337/parse",
      "appId": "APPLICATION_ID",
      "masterKey": "MASTER_KEY",
      "appName": "MyApp",
      "production": false
    }
  ],
  "users": [
    {
      "user": "user",
      "pass": "pass"
    }
  ]
}
---
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
要啟用 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 網頁上對於佈署的說明,有蠻多佈署到平台上的現成範例可參考。
參考資料:
aria2 的 web UI,紀錄一下怎麼使用。
提高安全性:
參考資料:
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
參考資料:
本來是打算用 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"
最近需要做 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 plugin 在建置時,插入需要的環境變數,讓後續的建置步驟使用。
使用方法:
參考資料:
 Jennifer Garner ,少了她,夜魔俠會失色不少。後來她這個角色還出了獨立的電影,有機會要找來看看。