惊蛰 - 2017年8月
type: channel
link: http://forthxu.com/blog/2017/08/
description: Just So So ...
items: Mac OS普通用户启动80端口
items: 邮箱小号Gmail sub-account
items: distinct 和 group by的使用

Mac OS普通用户启动80端口
type: item
date: 2017-08-31T20:42:35+08:00
description: 由于系统限制非root用户不能启动1024以下端口，而我们平时使用Mac一般都是非root用户，所以如果想启动80端口必须用root用户，这时候用命令行就可以解决，但是拿Intellij Idea来说，可以在控制台却换到root权限用命令行来启动IDEA，但是这样的话很多信息都是和root用户相关的，比如mavan仓库地址，IDEA配置默认都在root用户目录下面了，而你登录的用户又是非root用户，查看修改和管理都相当麻烦，于是可以通过端口转发功能，把本地的80请求转发到你配置的1024以上的端口上，效果一样 sudo vim /etc/pf.conf 添加 rdr on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 到 pf.conf文件的 rdr-anchor "com.apple/*" 这一行后面。 其中 lo0 通过 ifconfig 看自己那个设备绑定的是127.0.0.1, lo0是这个网络设备的名字。 8080是要转发的端口 sudo pfctl -f /etc/pf.conf sudo pfctl -e

邮箱小号Gmail sub-account
type: item
date: 2017-08-24T14:14:00+08:00
description: 這篇文章介紹一個製造 Gmail “小號” 的方法，就是可以製造很多地址不同，但是實際導向同一個電郵地址的方法。 用這個方法，就可以在不註冊新的電郵地址的情況下，製造很多個 “小號”。一則在其他地方可以用不同電郵地址註冊多個帳號，二則方便管理透過不同地址發給自己的郵件。 本文所述的方法，其實網上已經很多人說過，而且都大概 5-10 年前的文章了，不過 Gmail 每年都有很多新使用者，所以現在重新介紹一下。 Gmail 跟其他常見的電郵地址最不同的地方，就是不支持底線 “_” ，相反卻支持點 “.” 和加號 “+” 。而這個製造小號的方法，就是有效利用 “.” 和 “+”。 為安全起見，以下的電郵地址，中間的 “@” 均以 “#” 代替。例如 abc123 # gmail.com。 法則一：gmail 可以改為 googlemail 以前有一些國家註冊的 Gmail 是以 googlemail.com 為地址的，作者本人都註冊過一個。不過現在兩個地址基本上完全通用了。 換句話說，對於 Gmail 而言，abc123 # gmail.com 和 abc123 # googlemail.com 是同一個地址。寄到後者的電郵，一律在前者的地址可以查看。 如此一來，由原來的一個地址，現在有兩個地址可以用了。 法則二：“@” 前面的部份，可以在任意位置加上任意個點 “.” 換句話說，對 Gmail 而言，有 “.” 和沒有 “.” 都是一樣的。 例如 abc123 # gmail.com，可以改為以下任何一個： abc.123 # gmail.com abc...123 # gmail.com .a.b.c.1.2.3. # gmail.com ...abc...123... # gmail.com 對於 Gmail 而言，上面所有地址跟 abc123 # gmail.com 是沒有分別的。於是乎，這個方法可以為自己創造無限多個小號了。 不過需要注意，有些網站的註冊郵箱並不支持前面帶 “.” 的電郵地址，例如 .abc123 # gmail.com 不能用，但是可以用 abc.123 # gmail.com。 法則三：用戶名和 “@” 之間，可以用 “+” 插入任何字串，而且可以加插任意多個 “+” 換句話說，“+” 和 “@” 中間的任何字串，都會被 Gmail 忽略。 例如 abc123 # gmail.com，可以改為以下任何一個： abc123+def456 # gmail.com abc123+a+b+c+1+2+3 # gmail.com abc123+Ax+By+C # gmail.com 真正的粉絲，還可以用這個 (誤) ： abc123+1s # gmail.com 用這個方法，可以讓自己在不同網站的註冊名稱不同，例如 abc123+XDA # gmail.com abc123+Facebook # gmail.com 甚至可以作為臨時電郵地址，例如 abc123+temp+1 # gmail.com abc123+temp+2 # gmail.com 這樣子，只要開始收到垃圾郵件，看看收件人就可以知道是那個網站出賣了你的個人資料了。 不過需要注意，不是所有服務也支持帶有 “+” 的電郵地址。例如酷安就不支持了。 這個方法，同樣可以為自己創造無限多個小號，而且比較多元化和比較有系統。 法則四：上面三個法則可以任意搭配 例如，abc123 # gmail.com 可以改為以下任何一個： abc.123+Maki # googlemail.com abc...123+Ma.ki+Ni.co # gmail.com abc123.+.Nico.Nico.Ni. # gmail.com abc.1.2.3+Yosoro.+.Zura # gmail.com 這樣，就可以創造多元化無限創意的小號了。 雖然本文的方法已經存在了好幾年，不過對於 Gmail 新手來說，應該還是有點用的。 原文：http://telegra.ph/Gmail-Cloning-08-20

distinct 和 group by的使用
type: item
date: 2017-08-18T10:02:00+08:00
description: 公司同事有一个小项目的30w数据搜索用到like和排重查询比较慢，我对语句做了下优化。 mysql> desc shop; +--------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | uid | bigint(20) unsigned | NO | MUL | 0 | | | sid | bigint(20) unsigned | YES | MUL | 0 | | | nick | char(128) | YES | MUL | | | | shop_type | char(1) | YES | | C | | | shop_score | int(10) unsigned | YES | | 0 | | | shop_level | int(10) unsigned | YES | | 0 | | | category_id1 | int(10) | YES | MUL | 0 | | | category_id2 | int(10) unsigned | NO | MUL | 0 | | | shop_title | varchar(128) | YES | | | | | shop_avatar | varchar(255) | YES | | | | | sort | int(6) | NO | | 0 | | | locate | varchar(45) | NO | | | | | disabled | tinyint(1) | NO | | 0 | | +--------------+---------------------+------+-----+---------+----------------+ 14 rows in set (0.01 sec) mysql> explain select * from shop,(select distinct sid from shop where disabled = 0 and shop_title like '%迪卡侬%' limit 10) shopx where shop.sid=shopx.sid group by shop.sid; +----+-------------+------------+------+---------------+---------+---------+-----------+--------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+------+---------------+---------+---------+-----------+--------+----------------------------------------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 10 | Using where; Using temporary; Using filesort | | 1 | PRIMARY | shop | ref | INX_sid | INX_sid | 9 | shopx.sid | 1 | NULL | | 2 | DERIVED | shop | ALL | INX_sid | NULL | NULL | NULL | 269483 | Using where; Using temporary | +----+-------------+------------+------+---------------+---------+---------+-----------+--------+----------------------------------------------+ 3 rows in set (0.01 sec)…