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***!!!

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

QQ 旋风离线下载网页增强又可以用了

QQ 旋风在 TX 内部是不是快被抛弃了,客户端更新迟缓、服务稳定性越来越糟……时不时地要么刷不出下载列表,要么需要多次重复操作才能添加成功……但仍然改变不了我这名重度铁粉对它的依赖。因为在 userscript 的帮助下,网页版旋风可以导出、RPC 到 aria2 下载,这几乎是我迄今为止用过最爽的下载方式,没有之一。

可是最近一阵子没怎么下载,忽然发现旧版本的 userscript 不太好使了,在 console 上可以看到旋风服务返回「未登录」的响应。一直想抽空瞧瞧这个问题,但总是被各种事情打扰,晚上索性搜了下,发现原作者在 0.8.0 版本中已经解决了这个问题,那还是直接拿来用好了。俺正在全速下载「权力的游戏」第 6 季 1-8 集。顺便鸣谢下联通,带宽貌似已经免费升级到了 50M。

最后奉上「QQ 旋风离线下载网页增强」的 userscript,猛击 https://github.com/rhyzx/xuanfeng-userscript

谢谢作者 rhyzx。

iTerm2 3.0.0 无法打开

作为 Mac OS X 上无可替代的终端模拟器,iTerm2 3.0.0 新版有何优点呢?其实我也不知道 QAQ

iTerm2 Logo

我只想说这个新版在 El Caption 10.11.5 上,不管是自动升级还是全新解压都无法打开,甚至还提示文件已损坏。资深码农几经折腾无果,觉得智商深深地遭到了鄙视,后来无意中发现解决方法倒也简单粗暴,那就是:

<重启电脑>

这 tm 就尴尬了,更尴尬的是,自小学五笔到现在整 20 年,可能今天才第一次真正用五笔打出「尴尬」二字,原因是这两个字一直以来自以为是的写法就是错的……好记性不如烂笔头,何况记性更烂,就把「尴尬」的五笔编码记在下面吧:

编码
尴尬 dndn
dnjl
dnwj