為了下載投影片,但懶得一個個複製貼上、改指令,所以預先把投影片網址跟預定的檔名放在文字檔裡,然後用 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 ,少了她,夜魔俠會失色不少。後來她這個角色還出了獨立的電影,有機會要找來看看。
python2 的 sys.path 是
['', '/usr/local/lib/python2.7/dist-packages/python_nghttp2-1.3.5.dev0-py2.7-linux-x86_64.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/ellery/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
python3 的 sys.path 是
['', '/usr/local/lib/python3.4/dist-packages/onedrive_d-1.1.0dev-py3.4.egg', '/usr/local/lib/python3.4/dist-packages/daemonocle-0.8-py3.4.egg', '/usr/local/lib/python3.4/dist-packages/Send2Trash-1.3.0-py3.4.egg', '/usr/local/lib/python3.4/dist-packages/certifi-2015.11.20.1-py3.4.egg', '/usr/local/lib/python3.4/dist-packages/psutil-2.1.1-py3.4-linux-x86_64.egg', '/usr/lib/python3/dist-packages', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/ellery/.local/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages']
會發現兩邊的 $HOME/.local/lib/pythonX.Y/site-packages 順序是不一樣的,照理來說,應該是要以 $HOME/.local/lib/pythonX.Y/site-packages 為優先,這樣才有機會安裝最新版本的 package 而無需更動到系統的 package。
那該怎麼辦呢?這可以修改 /etc/python3.4/sitecustomize.py 來解決這問題。
在 /etc/python3.4/sitecustomize.py 的最後加入
import os
import sys
sys.path.insert(0,
os.path.join(
os.path.expanduser("~"),
".local",
"lib",
"python3.4",
"site-packages"))
Python3 在執行前,會先執行這個檔案,這裡在 sys.path 串列最前面插入 $HOME/.local/lib/pythonX.Y/site-packages ,就能解決這問題了。
參考資料:
Visual Studio Code 有獨立一個頁面介紹 Python 的部份:Python with Visual Studio Code
基本有4個 extension 要裝:
Python 這個 extension 可以設定的東西很多,設定可以參考它的 Wiki ,可是知道有這些設定以後,該怎麼設定呢?你得先在專案資料夾下建立一個 .vscode 的資料夾,然後在裏面新增一個 settings.json ,這邊再參考 Wiki 去填入設定就可以了。
目前我的 Django 專案用的設定是這樣:
{
"python.pythonPath": "/home/user/.virtualenvs/myproject/bin/python",
"python.linting.flake8Enabled": true,
"python.formatting.provider": "autopep8",
"name": "Django",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"program": "${workspaceRoot}/manage.py",
"args": [
"runserver",
"--noreload"
],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput",
"DjangoDebugging"
]
}
因為我用的是 virtualenv ,所以 python 執行檔跟相關的 library 都是在 $HOME/.virtualenv 這裡,把 python.pythonPath 設到這裡以後, intellisense/autocomplete 就可以正常運作。此外我也加上了 linting 與執行、除錯的相關設定。
其他還有 Jupyter 等等的,還沒去深入了解,再找時間來看。