@author lzw.whu@gmail.com
@version 20160908:03
安装
使用
ci <word>

ci > <word>

更新历史
| 版本 | 更新内容 |
|---|---|
| 20160908:03 | 支持中文 |
| 20160908:02 | 第一次输入获取suggest,回车后查词 |
| 20160907:01 | 初始版本 |
@author lzw.whu@gmail.com
@version 20160908:03
ci <word>

ci > <word>

| 版本 | 更新内容 |
|---|---|
| 20160908:03 | 支持中文 |
| 20160908:02 | 第一次输入获取suggest,回车后查词 |
| 20160907:01 | 初始版本 |
先上结论:NumPy 中对 array 使用 multiply() 或 * 操作符并不是矩阵乘法,正确的用法是 dot() 或 matmul(),或者对 matrix 使用 *。
根据 numpy.multiply 文档说明,multiply() 是 element-wise 的乘法,换句话说,是把两个入参数组中对应元素进行相乘。
举个栗子:
>>> from numpy import *
>>> a = [1, 2, 3, 4, 5, 6]
>>> b = [6, 5, 4, 3, 2, 1]
>>> ma = reshape(a, (2, 3))
>>> mb = reshape(b, (3, 2))
>>> ma
array([[1, 2, 3],
[4, 5, 6]])
>>> mb
array([[6, 5],
[4, 3],
[2, 1]])
>>> multiply(ma, mb)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,3) (3,2)
>>> c = arange(6).reshape(2,3)
>>> d = arange(6).reshape(2,3)
>>> c
array([[0, 1, 2],
[3, 4, 5]])
>>> d
array([[0, 1, 2],
[3, 4, 5]])
>>> c * d
array([[ 0, 1, 4],
[ 9, 16, 25]])
在上面的代码中,ma 是 2×3 矩阵,mb 是 3×2 矩阵,预期二者相乘的结果应该是一个 2×2 矩阵,但实际运行会报异常。在 multiply() 看来,ma 和 mb 只是两个形状不同的二维数组,因此无法把对应的元素进行相乘。c * d 符合 element-wise 相乘的结果。
正确的用法是什么呢?
dot() 等价于矩阵乘法>>> ma.dot(mb)
array([[20, 14],
[56, 41]])
>>> matmul(ma,mb)
array([[20, 14],
[56, 41]])
array 类型转换为 matrix 再使用 * 操作符>>> np.asmatrix(c) * np.asmatrix(d.reshape(3,2))
matrix([[10, 13],
[28, 40]])
>>> np.asmatrix(c) * np.asmatrix(d.T)
matrix([[ 5, 14],
[14, 50]])
>>> np.asmatrix(c) * np.asmatrix(d.T)
matrix([[ 5, 14],
[14, 50]])
>>> np.mat(c) * np.mat(d).T
matrix([[ 5, 14],
[14, 50]])
>>> np.mat(c) * np.mat(d.T)
matrix([[ 5, 14],
[14, 50]])
@ 操作符,参考这里,由于不用 python3,没试过从 0 开始,认真学习一点东西,就像过去那样。
外网 IP 查询服务——这应该是我写过最简单、但又有实际用处的 TCP 服务了。
用 Go 语言实现,加上空行还不到 30 行代码,请自行前往 GitHub 获取。
通过 go build 命令编译,在 macOS 上编译 Linux 版本需要指定 GOOS 参数:
GOOS=linux go build main.go
生成的 main 可以直接运行了:
./main
或者更高级点,通过 supervisor 配置成服务,使用 supervisorctl 控制。
用 telnet 连接部署机器的 6666 端口即可,如 migege.com:6666:
telnet migege.com 6666 Trying 120.27.122.8... Connected to migege.com. Escape character is '^]'. 1xx.2xx.2xx.1xxConnection closed by foreign host.
再也不用担心 ns1.dnspod.net 没有响应了。
今天刚入手树莓派 3,有种相见恨晚的感觉,接下来又有得折腾了。
我相信虽然树莓派足够轻便,但你也不会愿意总把它带在身边,应该还是需要固定在某个地方提供服务的,比如藏在家里的电视柜里——你要拿它做一个机器人或者无人机之类,当我没说,而且这篇文也没必要往下看了,这里仅针对拿树莓派当 Linux 远程主机使用的场景 ;-)
如果家里的宽带没有固定公网 IP,不在家的时候怎么访问就很成问题。过去我在西数 MyBookLive 上的做法是,每天中午 12 点,crontab 执行脚本获取外网 IP,email 给我。low 是 low 了点,但基本上能满足需求,主要考虑 MyBookLive 频繁唤醒几 T 的大硬盘会缩短寿命,所以把脚本执行的周期设得比较长。
现在有了树莓派,没有挂硬盘,只插了个 32G 的 TF 卡,可以随便搞了,最优的方案当然是动态域名解析。于是在 DNSPod 注册了账号,把域名的 nameserver 设置到 DNSPod,再用 python 写了个脚本专门干这个事,代码放在 github 上了,把文档贴一下:
@author migege
@version 0.0.2
dnspod.py 是基于 DNSPod 服务的动态 DNS 脚本,用于检测 IP 变化并更新至 DNSPod,支持多域名解析。支持 Linux 设备,包括树莓派(Raspberry Pi)。
python 的模块可通过 pip install 命令安装。如果未安装 pip,请先安装 pip。
安装 git 客户端,通过本命令获取 dnspod.py
git clone https://github.com/migege/dnspod.git dnspod
然后到 dnspod 目录下新建 conf.yaml 文件,根据您的 DNSPod 设置,填入以下内容:
token: <your_api_token>
sub_domains:
<your_first_sub_domain_name>:
domain_id: <your_domain_id>
record_id: <your_record_id>
<your_second_sub_domain_name>:
domain_id: <your_domain_id>
record_id: <your_record_id>
最后设置 crontab 定时任务
*/10 * * * * cd <path_to_dnspod>; /usr/bin/python dnspod.py conf.yaml > /dev/null 2>&1 &
Mac OS X 系统自带的 grep 命令即便加上 --color 参数也是无法输出彩色文件名和行号的,在当前最新的 El Capitan 10.11.6 中仍然如此,因为 grep 版本太低了,GNU grep 2.5.3 以上版本才支持 Multiple colors 特性。
先上一个新旧命令对比效果图:

如果安装了 homebrew,在终端中输入以下命令安装 GNU grep:
brew tap homebrew/dupes/ brew install homebrew/dupes/grep
默认会安装为 /usr/local/bin/ggrep,在 bash|zsh|各种sh 做一个 alias 替换掉 grep 好了:
alias grep='ggrep -Hn --color=always'
http://superuser.com/questions/419467/grep-in-mac-os-xs-terminal-only-displaying-one-color
刚从前同事那儿听到这个消息,晴天霹雳啊!让我这重度铁粉情何以堪,只能买迅雷会员了?
F***!!!
小马哥这几年变成纯粹的商人了,把他眼里「不重要的」或者觉得「做不好的」业务干掉一个又一个,太令人伤心了