docker-compose for MySQL + phpMyAdmin

version: '3'
services:
  mysql:
    image: 'mysql:5'
    container_name: 'mysql'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES UTF8;'
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 'test'
  phpmyadmin:
    image: 'phpmyadmin/phpmyadmin'
    container_name: 'phpmyadmin'
    links:
      - mysql
    ports:
      - '8080:80'
    environment:
      PMA_HOST: mysql

Logging mode: Push vs. Pull

日志收集或监控系统有两种工作模式,Push or Pull:

  • Push 是在应用内自己主动把监控指标推送到监控系统
  • Pull 是应用把指标按照指定的格式暴露出来,由监控系统定期的抓取收集,看起来像是监控系统从应用拉取

Push mode:

  • 对于 event-drive 类型的监控更为灵活方便
  • 应用多点部署不影响监控
  • 可能对监控系统 DDos
  • 要注意推送频率控制,以及失败后的重试机制

Pull mode:

  • 方便控制收集频率,对应用压力可控,侵入也小
  • 更及时的发现服务宕机
  • 需要大量配置监控接入点,尤其是应用集群化
  • 指标不够实时,顺序可能错乱
  • 监控指标一般是通过 log 文件或 HTTP 接口对外暴露,parser 较为复杂

Push:

Pull:

macOS Python env

brew install python
brew install [email protected]

python --version   // 2.7.14
pip --version      // /usr/local/lib/python2.7/site-packages

python3 --version  // 3.6.4
pip3 --version     // /usr/local/lib/python3.6/site-packages

多版本共存还可以用 pyenv 解决。

使用 pipsi 安装 Python-base 工具,比如 ansible,httpie,pylint,yapf 等:

sudo /usr/bin/easy_install virtualenv
curl https://raw.githubusercontent.com/mitsuhiko/pipsi/master/get-pipsi.py | /usr/bin/python

pipsi install ansible
pipsi install pipenv

对于 Python 项目,通过 pipenv 管理包依赖:

pipenv install requests

tee

read from stdin, write to stdout AND files.

curl https://github.com/fannheyward.keys | tee -a ~/.ssh/authorized_keys

fastlane notes

gem install fastlane -NV.

fastlane match:

1. `fastlane match init` 初始化生成 `Matchfile`,设置私有仓库来保存密钥和证书。
2. `fastlane match development/appstore` 同步或生成证书及描述文件,多 target 可以通过 `--git_branch` 指定
3. `fastlane match nuke distribution` 吊销证书

fastlane gym --scheme X 编译打包。

fastlane pilot upload 上传 TestFlight.

fastlane deliver 上传 iTC.

Bash Set notes

  1. set -u 不存在的变量报错中止
  2. set -e 发生错误时中止
  3. set -x 打印输出要执行的命令

Nginx limit_req

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;

location /api {
    limit_req zone=req_zone burst=10 nodelay;
}

rate 限定单位时间内的请求数,burst 限定缓冲队列长度。上面配置是用 client IP 做请求限制,单 IP 限制每秒钟最多十个请求,也就是每 100ms 只能有一个请求,如果 100ms 内有超过一个的请求到达,会被放进 buffer 队列,大小由 burst 指定,所以 100ms 内的第 11 个请求会被 503。

Rate Limiting with NGINX and NGINX Plus

张姐

刚吃完老张给我们做的最后一顿午饭。

虽然我时不时的黑她做饭“黑暗料理”,她也会威胁我说“再黑我就一个月不做豆角”,但真的说从明天不再有她的午饭,还是很伤感的。

回去挺好,陪着三个孩子长大,祝一切顺利。

macOS 独立设置应用语言

英文系统下让某些应用的语言是中文,可以通过 defaults 设置:

  1. defaults read 查找应用的 bundle ID
  2. defaults write com.apple.Safari AppleLanguages '("zh-Hans-CN")' 设置应用语言为中文

cURL Notes

  • curl -c cookie.txt URL: save cookies to cookie.txt
  • curl -b cookie.txt URL: read cookie from cookie.txt and put into request
  • curl -H 'User-Agent: FakeUA' URL: set HTTP header
  • curl -I URL: show header only
  • curl -L URL: follow 30x redirect
  • curl -o new_name/-O URL: save response to file
  • curl -X POST --data "data=xxx" URL: POST data to URL
  • curl -w "@curl-format.txt" URL: format details of request, which you can use this to timing request:
➜ cat curl-format.txt
    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
      time_redirect:  %{time_redirect}\n
   time_pretransfer:  %{time_pretransfer}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n

➜ curl -w "@curl-format.txt" -o /dev/null -s https://fann.im
    time_namelookup:  0.015
       time_connect:  0.015
    time_appconnect:  0.329
      time_redirect:  0.000
   time_pretransfer:  0.329
 time_starttransfer:  0.377
                    ----------
         time_total:  0.377