2017年8月

Mac OS普通用户启动80端口

由于系统限制非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

這篇文章介紹一個製造 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的使用

公司同事有一个小项目的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)

mysql> explain select  * from shop where disabled = 0 and shop_title like '%迪卡侬%' group by sid limit 10;
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | shop  | index | INX_sid       | INX_sid | 9       | NULL |   10 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)


mysql> select SQL_NO_CACHE distinct sid from shop where disabled = 0 and shop_title like '%迪卡侬%' limit 10;
9 rows in set (0.45 sec)

mysql> select SQL_NO_CACHE * 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;
...
9 rows in set (0.46 sec)

mysql> select SQL_NO_CACHE  * from shop where disabled = 0 and shop_title like '%迪卡侬%' group by sid limit 10;
...
9 rows in set (4.96 sec)