Mac docker-machine: Error with pre-create check: “exit status 126”

126 是没有安装 VirtualBox 的报错. 如果你想安装是可以通过如下命令安装:

if ! type "brew" > /dev/null; then
  ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)";
fi
brew tap phinze/homebrew-cask && brew install brew-cask;
brew cask install vagrant;
brew cask install virtualbox;

不过需要了解的是 Docker for Mac 默认是没有使用 VirtualBox 而是使用了 HyperKit, 所以是不用建立 VirtualBox 来做 service. 如果你需要改什么配置可以直接通过 docker for Mac 的 Docker -> Preferences 去改.

ubuntu vps 安装 docker 失败 Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

详情见兴致冲冲的安装:

wget -qO- https://get.docker.com/ | sh

然后

docker info

输出:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

通过 service docker restart 尝试没有变化, 查看 docker 的日志 tail -5f /var/log/upstart/docker.log 发现

time="2017-04-23T01:13:59.857654612-04:00" level=fatal msg="Your Linux kernel version 2.6.32-042stab116.2 is not supported for running docker. Please upgrade your kernel to 3.10.0 or newer."

所以问题是, 当前 linux 的 kernel 2.6 版本太低, 需要升级到 3.10 以上. 坑爹的 vps 自带模板[捂脸] 然后基于 OpenZV 6 的 vps 默认内核是 2.6, docker 需要基于 3.x 的内核, 只有 OpenZV 7 的 vps 才支持 (基于 3.x 内核).

Node.js 的 require.resolve 简介

简单的说, 在 Node.js 中使用 fs 读取文件的时候, 经常碰到要拼一个文件的绝对路径的问题 (fs 处理相对路径均以进程执行目录为准). 之前一直的方法都是, 使用 path 模块以及 __dirname 变量 :

fs.readFileSync(path.join(__dirname, './assets/some-file.txt'));

使用 require.resolve 可以简化这一过程:

fs.readFileSync(require.resolve('./assets/some-file.txt'));

此外, require.resolve 还会在拼接好路径之后检查该路径是否存在, 如果 resolve 的目标路径不存在, 就会抛出 Cannot find module './some-file.txt' 的异常. 省略了一道检查文件是否存在的工序 (fs.exists).

这个报错并不会加重你的检查负担, 毕竟使用 fs 去操作文件时, 如果发现文件不存在也会抛出异常. 反之, 通过 require.resovle 可以在提前在文件中作为常量定义, 那么在应用启动时就可以抛异常, 而不是等到具体操作文件的时候才抛异常.

牛顿二项式与 e 级数

复习一下数学, 找一下回忆.

先是从二项式平方开始:

(a+b)^{2} = a^{2} + 2ab + b^2

其实展开是这样的:

(a+b)^{2} = aa + ab + ba + bb

再看立方:

(a+b)^{3} = a^3 + 3a^{2}b + 3ab^2 + b^3
(a+b)^{3} = aaa + aab + aba + baa + bba + bab + abb + bbb

通过排列组合的方式标记, 于是:

(a+b)^3 = {3 \choose 0}a^3 b^0 + {3 \choose 1} a^{2}b^1 + {3 \choose 2} a^{1}b^2 + {3 \choose 3} a^{0} b^{3}

通过数学归纳法可以拓展:

(a+b)^n = {n \choose 0}a^n b^0 + {n \choose 1}a^{n-1}b^1 + {n \choose 2}a^{n-2}b^2 + \cdots + {n \choose n-1}a^1 b^{n-1} + {n \choose n}a^0 b^n

使用求和简写可得:

(a+b)^n = \sum_{k=0}^n {n \choose k}a^{n-k}b^k = \sum_{k=0}^n {n \choose k}a^{k}b^{n-k}

e 级数

数学常数 e (The Constant e – NDE/NDT Resource Center) 的定义爲下列极限值:

e = \lim_{n\to\infty} \left(1 + \frac{1}{n}\right)^n.

使用二项式定理能得出

\left(1 + \frac{1}{n}\right)^n = 1 + {n \choose 1}\frac{1}{n} + {n \choose 2}\frac{1}{n^2} + {n \choose 3}\frac{1}{n^3} + \cdots + {n \choose n}\frac{1}{n^n}.

第 k 项之总和为

{n \choose k}\frac{1}{n^k} \;=\; \frac{1}{k!}\cdot\frac{n(n-1)(n-2)\cdots (n-k+1)}{n^k}

因为 n → ∞,右边的表达式趋近1。 因此

\lim_{n\to\infty} {n \choose k}\frac{1}{n^k} = \frac{1}{k!}.

由于序列的极限可以相加, 所以 e 可以表示为:

e = \sum_{k=0}^\infty\frac{1}{k!}=\frac{1}{0!} + \frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + \cdots.

计算情况:

e = 1/0! + 1/1! + 1/2! + 1/3! + 1/4! + …

As an example, here is the computation of e to 22 decimal places:

1/0! = 1/1 = 1.0000000000000000000000000
1/1! = 1/1 = 1.0000000000000000000000000
1/2! = 1/2 = 0.5000000000000000000000000
1/3! = 1/6 = 0.1666666666666666666666667
1/4! = 1/24 = 0.0416666666666666666666667
1/5! = 1/120 = 0.0083333333333333333333333
1/6! = 1/720 = 0.0013888888888888888888889
1/7! = 1/5040 = 0.0001984126984126984126984
1/8! = 1/40320 = 0.0000248015873015873015873
1/9! = 1/362880 = 0.0000027557319223985890653
1/10! = 1/3628800 = 0.0000002755731922398589065
1/11! = 1/39916800 = 0.0000000250521083854417188
1/12! = 1/479001600 = 0.0000000020876756987868099
1/13! = 1/6227020800 = 0.0000000001605904383682161
1/14! = 1/87178291200 = 0.0000000000114707455977297
1/15! = 1/1307674368000 = 0.0000000000007647163731820
1/16! = 1/20922789887989 = 0.0000000000000477947733239
1/17! = 1/355687428101759 = 0.0000000000000028114572543
1/18! = 1/6402373705148490 = 0.0000000000000001561920697
1/19! = 1/121645101098757000 = 0.0000000000000000082206352
1/20! = 1/2432901785214670000 = 0.0000000000000000004110318
1/21! = 1/51091049359062800000 = 0.0000000000000000000195729
1/22! = 1/1123974373384290000000 = 0.0000000000000000000008897
1/23! = 1/25839793281653700000000 = 0.0000000000000000000000387
1/24! = 1/625000000000000000000000 = 0.0000000000000000000000016
1/25! = 1/10000000000000000000000000 = 0.0000000000000000000000001

For more information on e, visit the the math forum at mathforum.org
The sum of the values in the right column is 2.7182818284590452353602875 which is “e.”

Reference: The mathforum.org