通过 Debian Snapshot 安装旧版本包

某个项目需要 PHP 5.3 支持,通过 APT 没办法直接安装,编译安装又是一大堆依赖,最后通过 Debian Snapshot 解决。

  1. http://snapshot.debian.org/ 搜索需要的包, 比如 php5
  2. Got http://snapshot.debian.org/archive/debian-ports/20120225T023111Z/pool-m68k/main/p/php5/
  3. 添加到 source.list:
deb http://snapshot.debian.org/archive/debian/20120225T023111Z/ unstable main
deb-src http://snapshot.debian.org/archive/debian/20120225T023111Z/ unstable main
  1. apt-get -o Acquire::Check-Valid-Until=false update
  2. apt-get install php5=5.3.10-2 php5-fpm php5-cgi, done.

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

which python  // /usr/bin/python
which python3 // /usr/local/bin/python3

sudo easy_install neovim
pip3 install --upgrade neovim

多版本共存还可以用 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 'python-language-server[all]'
pipsi install pipenv

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

pipenv install --python 3.6.5
pipenv install requests

pipenv shell

设置 VSCode 支持 pipenv:

{
    "python.pythonPath": "/Users/fannheyward/.virtualenvs/tools-CDG8SfKX/bin/python"
}

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")' 设置应用语言为中文