migege

爱词霸 Alfred Workflow

@author  lzw.whu@gmail.com
@version 20160908:03

安装

下载

使用

ci <word>

iciba.alfredworkflow

ci > <word>

iciba.alfredworkflow

更新历史

版本 更新内容
20160908:03 支持中文
20160908:02 第一次输入获取suggest,回车后查词
20160907:01 初始版本

雪球股票实时价格查询 Alfred Workflow

@author  lzw.whu@gmail.com
@version 20160907:01

安装

下载

使用

xueqiu.alfredworkflow

12306 火车票余票查询 Alfred Workflow

@author  lzw.whu@gmail.com
@version 20160906:01

安装

下载

使用

12306.alfredworkflow

感谢

Alfred Workflow 北京链家二手房成交价格查询

北京链家成交价格查询 Alfred.Workflow

@author  lzw.whu@gmail.com
@version 20160906.01

安装

下载

使用

lj <小区名称>

lianjia.alfredworkflow

NumPy 矩阵乘法

先上结论: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() 看来,mamb 只是两个形状不同的二维数组,因此无法把对应的元素进行相乘。c * d 符合 element-wise 相乘的结果。

正确的用法是什么呢?

  1. numpy.dot,对于二维数组,dot() 等价于矩阵乘法
    >>> ma.dot(mb)
    array([[20, 14],
        [56, 41]])
    
  2. numpy.matmul,从 NumPy 1.10.0 开始被引入
    >>> matmul(ma,mb)
    array([[20, 14],
        [56, 41]])
    
  3. 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]])
    
  4. python3 的 @ 操作符,参考这里,由于不用 python3,没试过

0

从 0 开始,认真学习一点东西,就像过去那样。

Go 语言实现「外网 IP 查询」服务

外网 IP 查询服务——这应该是我写过最简单、但又有实际用处的 TCP 服务了。

流程

  1. 服务启动,监听本地 6666 端口
  2. 接受连接,返回客户端 IP
  3. 断开连接

用 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 没有响应了。

树莓派使用 DNSPod 做动态域名解析

今天刚入手树莓派 3,有种相见恨晚的感觉,接下来又有得折腾了。

ZHETENG #1: 动态 DNS

我相信虽然树莓派足够轻便,但你也不会愿意总把它带在身边,应该还是需要固定在某个地方提供服务的,比如藏在家里的电视柜里——你要拿它做一个机器人或者无人机之类,当我没说,而且这篇文也没必要往下看了,这里仅针对拿树莓派当 Linux 远程主机使用的场景 ;-)

如果家里的宽带没有固定公网 IP,不在家的时候怎么访问就很成问题。过去我在西数 MyBookLive 上的做法是,每天中午 12 点,crontab 执行脚本获取外网 IP,email 给我。low 是 low 了点,但基本上能满足需求,主要考虑 MyBookLive 频繁唤醒几 T 的大硬盘会缩短寿命,所以把脚本执行的周期设得比较长。

现在有了树莓派,没有挂硬盘,只插了个 32G 的 TF 卡,可以随便搞了,最优的方案当然是动态域名解析。于是在 DNSPod 注册了账号,把域名的 nameserver 设置到 DNSPod,再用 python 写了个脚本专门干这个事,代码放在 github 上了,把文档贴一下:

dnspod.py

@author migege
@version 0.0.2

dnspod.py 是基于 DNSPod 服务的动态 DNS 脚本,用于检测 IP 变化并更新至 DNSPod,支持多域名解析。支持 Linux 设备,包括树莓派(Raspberry Pi)。

Prerequisites

  1. python
  2. pyyaml
  3. requests

python 的模块可通过 pip install 命令安装。如果未安装 pip,请先安装 pip。

Installation

安装 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 &

Tips

  1. */10 表示每 10 分钟执行一次 dnspod.py
  2. 如果 python 可执行路径不是 /usr/bin/python,请自行替换

Mac OS X 终端 grep 命令输出彩色文件名、行号

Mac OS X 系统自带的 grep 命令即便加上 --color 参数也是无法输出彩色文件名和行号的,在当前最新的 El Capitan 10.11.6 中仍然如此,因为 grep 版本太低了,GNU grep 2.5.3 以上版本才支持 Multiple colors 特性。

先上一个新旧命令对比效果图:

Mac OS X grep color file name line number

如果安装了 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***!!! QQ 旋风放弃维护了

刚从前同事那儿听到这个消息,晴天霹雳啊!让我这重度铁粉情何以堪,只能买迅雷会员了?

F***!!!

小马哥这几年变成纯粹的商人了,把他眼里「不重要的」或者觉得「做不好的」业务干掉一个又一个,太令人伤心了