0x18-idea插件推荐

idea插件推荐

1.快速生成Java 对象复制

https://plugins.jetbrains.com/plugin/9360-generateallsetter

2.grep console

console 对于不同级别的日志做高亮

3.lombok

https://github.com/mplushnikov/lombok-intellij-plugin

4.lombok

5.CodeGlance

https://github.com/Vektah/CodeGlance

6.Alibaba Java Coding Guidelines

https://github.com/alibaba/p3c

7.GsonFormat

把JSON转换成bean

8.String Manipulation

9.File Expander

有了这个插件,有些小伙伴平时用的Jad工具就可以扔了,它能在Idea里直接打开Jar包,并且反编译代码查看。甚至于能打开tar.gz,zip等压缩格式。

这里补充下,你项目里之所以不需要装插件就能看jar包里的代码,是因为jar在你的classpath内。如果单独打开一个jar包,不装插件是看不了的。

10.GitToolBox

他能在项目上提示你还有多少文件没提交,远程还有多少文件没更新下来。还能在每一行代码上提示上次提交的时间。查版本提交问题的时候尤其方便。

11.Maven Helper

排查Jar包依赖等问题用这个简直是神器。这个插件也提供了一些其他的快捷命令,右键直接唤起maven命令,颇为方便。

12.mybatisx

mybatisx

13.GenerateAllSetter

image
image

refer :
https://mp.weixin.qq.com/s/nyn9gDfRmSb_WVOv7atEHA
https://mp.weixin.qq.com/s/0kMnzxXvkh1w1L23y4kKiw
https://mp.weixin.qq.com/s/XkwyN3xmeFks_JFIdcCmJA

0x17-Visual Studio Code使用指南

Visual Studio Code使用指南

1. 常用插件推荐

  • plantuml
  • go
  • code runner
  • Markdown PDF
  • Markdown All in One
  • nginx.conf
  • Protobuf support
  • Todo Tree
  • 插件名称:Beautify
    Beautify 插件可以快速格式化你的代码格式,让你在编写代码时杂乱的代码结构瞬间变得非常规整,代码强迫症必备,较好的代码格式在后期维护以及他人阅读时都会有很多的便利。
  • vscode-icons
    vscode-icons 插件可以实现对各种文件类型的文件前的图标进行优化显示,这样我们在查看长长的文件列表的时候,可以直接通过文件的图标就可以快速知道文件的类型,而不是去看文件的后缀。

2.语言支持

2.1 go

VSCode 如何代码自动补全和自动导入包

0x19-使用Chrome 62 自带原生截图

Chrome 62 开始 自带原生截图。下面介绍了 区域截图、全页面截图、可视范围截图、页面元素按块截图 四种方法,应该够用了

整理了一下:

区域截图 :

Ctrl/Command + Shift + C 调出界面选择器
Ctrl/Command + 鼠标左键 选择希望的范围

截图将以文件的形式自动下载

全页面截图 :

Ctrl/Command + Shift + C 调出开发者工具
Ctrl/Command + Shift + P 调出命令菜单

输入 screenshot,在自动筛选出的结果里选择 Capture full size screenshot

可视范围截图 :

Ctrl/Command + Shift + C 调出开发者工具
Ctrl/Command + Shift + P 调出命令菜单

输入 screenshot,在自动筛选出的结果里选择 Capture screenshot

[For dev]页面元素按块截图 :

Ctrl/Command + Shift + C 调出界面选择器
鼠标左键 选择希望的范围,会以高亮标识
Ctrl/Command + Shift + P 调出命令菜单
输入 screenshot,在自动筛选出的结果里选择 Capture node screenshot

参见 What’s New In DevTools (Chrome 62)

0x20-HTTPS with Let's Encrypt

HTTPS指南

Let’s Encrypt 开始支持通配符证书, 这里是我总结的一个操作指南, 这里使用acme.sh进行配置。

1. 安装openresty

参照: http://openresty.org/en/linux-packages.html

2. 配置openresty为服务

参考:https://kleshwong.com/blog/2017/01/05/setup-lua-resty-auto-ssl-in-ubuntu/

sudo vim /etc/systemd/system/nginx.service

nginx.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
ExecStart=/usr/local/openresty/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

启用:

1
2
$ sudo systemctl enable nginx
$ sudo systemctl start nginx

通过 systemctl status nginx 可以看到 nginx 是不是正常启动了。若是失败这里也会输出用的日志信息。

3. 安装acme.sh

curl https://get.acme.sh | sh

4. 配置域名AccessKey

参照:https://github.com/Neilpang/acme.sh/tree/master/dnsapi

5. 复制证书到对应位置

1
2
3
4
acme.sh --install-cert -d chuqufeng.cn \
--key-file /usr/local/openresty/nginx/conf/ssl/chuqufeng.cn.key \
--fullchain-file /usr/local/openresty/nginx/conf/ssl/cert.cer \
--reloadcmd "sudo service nginx force-reload"

生成dhparam:

1
openssl dhparam -out /usr/local/openresty/nginx/conf/ssl/dhparam.pem 2048

配置Nginx上证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
##开启 HTTPS 和 HTTP/2
listen 443 ssl http2;

##证书部分
#证书
ssl_certificate /usr/local/openresty/nginx/conf/ssl/cert.cer;
#密钥
ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/chuqufeng.cn.key;
#ssl_dhparam
ssl_dhparam /usr/local/openresty/nginx/conf/ssl/dhparam.pem;
##SSL增强安全设置部分
add_header Strict-Transport-Security max-age=15768000; #HSTS设置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
 #关键
 ssl_prefer_server_ciphers on;

}

6. 重启openresty

sudo service nginx restart

7. Result

现在https://www.ssllabs.com 评分为A+

参考文章:

https://www.textarea.com/zhicheng/fenxiang-yige-https-a-di-nginx-peizhi-320/

https://ruby-china.org/topics/31983

0x16-OpenResty

openresty

1. install on deepin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -zvxf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k/
patch -p1 < /path/to/openresty/patches/openssl-1.0.2h-sess_set_get_cb_yield.patch
cd ..

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
tar -xvf pcre-8.40.tar.gz

wget https://openresty.org/download/openresty-1.11.2.5.tar.gz
tar -zxvf openresty-1.11.2.5.tar.gz
cd openresty-1.11.2.5/

## assuming your have 4 spare logical CPU cores

./configure --with-openssl=../openssl-1.0.2k \
--with-pcre=../pcre-8.40 -j4
make -j4
sudo make install

openssl安装参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1、从下列页面下载最新的OpenSSL http://openssl.org/source/

2、openssl-1.0.0d.tar.gz 解压命令:tar zxvf openssl-1.0.0d.tar.gz

3、默认的安装目录为/usr/local/ssl

在配置过程中可以使用--prefix=/*** 改变安装目录

4、./config配置

5、make

6、make install

最后到/usr/local/ssl可以看到安装的文件

如果电脑中已经安装过OpenSSL那么需要进行升级
可以通过命令openssl version或者openssl version -a来查看是否已经安装了OpenSSL

升级过程为:

1、按照安装过程执行到make install

2、执行以下命令:
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln –s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln –s /usr/local/ssl/include/openssl /usr/include/openssl

3 配置库文件搜索路径

#echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
#ldconfig –v

4 查看openssl 版本号,验证安装正确性

#openssl version –a

0x15-Docker

docker

1. mysql

sudo docker run –name first-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

2.docker容器设置自动启动

1
docker run --name first-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --restart=always

Flag Description

1
2
3
4
no		不自动重启容器. (默认value)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器

如果已经启动的项目,则使用update更新:

1
docker update --restart=always first-mysql

0x14 GA UTM参数解析

GA UTM参数解析

Introduction

如果你订阅了知乎的每周精选,点击其中链接最终打开的页面URL应该是是类似这种形式的:

https://www.zhihu.com/question/51459956/answer/130299367?utm_campaign=weekly239&utm_source=weekly-digest&utm_medium=email
可以看到上边url 问号后边带了些小尾巴,即utm_campaign=weekly239&utm_source=weekly-digest&utm_medium=email,这种utm_开头的就是网站流量分析中常说的UTM参数,其主要用来跟踪流量的来源。

UTM参数的含义

上边知乎精选的URL使用了三个UTM参数,即utm_campaign, utm_source,utm_medium,实际上UTM参数总共有五个,而这里的三个是最常用的,以下说明下五个UTM参数的含义:

utm_source:一般用来标识来源,在GA 使用UTM参数时该参数是必选的,上述utm_source=weekly-digest表示流量来自weekly-digest

utm_medium:一般用来标识媒介,在GA 使用UTM参数时该参数也是必选的,通常这里会用付费方式(如cpc、cpm)或者渠道所属类别(比如email、social),上述utm_medium=email表示流量来源所属渠道是email

utm_campaign:一般用来标识营销活动名称,GA 推荐使用该参数,上述utm_campaign=weekly239表示流量来自weekly239这波活动

utm_term:一般用来标识关键词,在GA 中并非必须使用,在SEM活动中这个参数通常来放投放词,比如utm_term=web-analytics-tool

utm_content:一般用来标识创意的版本,在GA中并非必须使用,实际广告投放中如果以上四个参数不能满足区分流量的需求,可以考虑下使用这个参数,比如用来标识A版本和B版本,或者用来标识是在顶部banner还是右侧广告等等

0x13-git tips

本文参考 Git - Useful Tips 一文翻译,不当之处,敬请谅解
git

这篇文章的目的是给经常使用git管理项目提供一个有益的提醒。如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章。在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名。

基本命令

  • git config –global user.name “Your Name”
  • git config –global user.email “youremail@example.com
  • git config –global core.editor
    • Ex: git config –global core.editor vim
  • git init:初始化一个repo。

Commit 结构

  • git status(gst):查看 repo 状态
  • 工作区:
    • .git 目录
    • 暂存区
    • 工作目录

structure

  • git add (ga):添加一个文件到暂存区
  • git add .(gaa):添加所有文件到暂存区
  • git add *.js:添加所有后缀为js的文件到暂存区
  • git rm –cached :从暂存区删除一个新文件
  • git commit -m “My first commit”(gcmsg):创建一次带 message 的提交
  • git commit -v -a(gca):
    • -v是 verbose 的缩写,会在底部显示差异信息和更多有意义的信息
    • -a 类似于 git add .,会添加所有被修改和删除的文件,但会忽略新创建的文件
  • git help :查看对应命令的帮助手册
  • git log(glg,glgg,glo, glog):查看项目的提交历史

暂存区管理

  • git reset HEAD (grh):从暂存区删除一个被修改的文件
  • git reset HEAD(grh):从暂存区删除所有被修改的文件
  • git checkout (gco):从暂存区删除一个被修改的文件,并撤销文件的更改
  • git commit -m “My first commit” –amend:添加文件/更改在暂存区的最后一次提交
  • git commit -v -a –amend(gca!):添加文件/更改在暂存区的最后一次提交
  • .gitignore:告诉git,哪些文件不被加入版本跟踪
  • 可以使用 git add -f 命令添加一个不被版本跟踪的文件
  • git diff (gd):查看基于当前文件的最后一次提交的更改差异
  • git diff (gd):查看基于所有文件的最后一次提交的更改差异
  • git reset HEAD~2 –soft:从项目提交历史中删除最近两次提交,但不丢弃文件的更改
  • git reset HEAD~2 –hard:从项目提交历史中删除最近两次提交,但会丢弃文件的更改和在(最后两次)提交中创建的新文件
  • git reset –soft –hard:
    • –soft:将所有被更改的文件回溯到“待提交”状态
    • –hard:commit 之后,对被git追踪的文件的任何更改都被丢弃
  • git reflog:显示包括”被撤销”在内的所有提交
  • git merge :重新提交(restore the commit)
  • git clean -f:删除工作目录中不被git进行版本追踪的文件

Stashed & Branches

Stash

  • git stash(gsta):将所有暂存区的文件移动到“储藏区”,类似于另一种类型的工作区
  • git stash list:查看储藏队列(Stash lists)
  • git stash apply:将最近一次储藏恢复到暂存区(可以用类似 git stash apply stash@{num}(num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes))
  • git stash clear:清空储藏队列
  • git stash save “name of the stash”:为储藏设置命名
  • git stash pop(gstp):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏
  • git stash drop(gstd):从储藏队列删除最近一次储藏(stash@{0})(git stash drop stash@{num} 从储藏队列删除指定储藏)

Branch

-

  • git checkout -b dev(gco):创建 dev 分支并从当前分支切换到 dev 分支
  • git branch(gb):查看所有分支
  • git checkout master(gcm):切换到主分支
  • git merge (gm):合并分支
  • git rebase master:先将 master 上的更改合并到当前分支,再添加当前分支的更改。如果有冲突,解决冲突后加 –continue 参数继续合并
  • git branch -d : 删除分支,-D 则强制删除分支
  • git merge –squash:将多次提交合并成一个,其流程如下:
  • Go to the master branch

  • git checkout master
  • Create a temp branch

  • git checkout -b temp
  • Merge the feature/x branch into the temp using –squash

  • git merge feature/x –squash
  • See the new modifications/files in the Staging Area

  • git status
  • Create the unified commit

  • git commit -m “Add feature/x”
  • Delete the feature/x branch

  • git branch -D feature/x
  • rebase 和 merge 的区别:
  • rebase:
  • 提交历史(的展示)是线性的
  • 缺点:会删除最近一个 commit,然后创建一次新的 commit
  • 如果已提交到远程,不要使用 rebase
  • merge:
  • 提交历史(的展示)是分叉的
  • 对于两个分支的合并,会创建一个次新的 commit
  • 远程仓库管理
  • git remote add :添加一个将被追踪的远程仓库
  • git remote rm :移除一个远程仓库
  • git push (gp,ggp):将当前分支的本地 commit 推送到远程仓库
  • git fetch :拉取远程仓库的最新 commit 到当前(本地)分支(/),不会合并
  • git pull (gl,ggl):拉取远程仓库的最新 commit 到当前(本地)分支,并自动 merge
  • git pull –rebase(gup):以 rebase 的方式进行合并,而不是 merge

其它有用的命令

  • git tag :创建一个 tag(如:v1.3)
  • git push –tags:将本地 tags 推送到远程仓库
  • git push :推送指定的本地 tag 到远程

0x21 Linux下切换Python2和Python3的4种方法

本篇博文面向Linux用户,在Linux下(Ubuntu)下测试通过,Win用户嘛,……

0x00 为什么需要有两个版本的Python

Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来,但是仍然有很多项目采用Python2开发。Linux的许多发行版本(如Ubuntu)都会自带Python2.7,但是当我们准备开发一个Python3项目的时候,我们该怎么办?

那就把Python3也下咯。嗯,Linux下确实是可以两个一起装的,但是问题是你怎么切换两个版本的Python。

0x01 修改别名

首先先来看一下我们的默认Python版本

1
2
$ python --version
Python 2.7.6

然后我们修改一下别名

1
2
3
$ alias python='/usr/bin/python3'
$ python --version
Python 3.4.3 # 版本已经改变

/usr/bin/python3这个路径是怎么找到的呢?

一般来说,软件的二进制文件都可以在/usr/bin或/usr/local/bin(这个优先级高一点)找到。当然如果你是Debian系的Linux,可以这么找(前提是你已经安装了Python3):

$ dpkg -L python3
上面的别名修改只是暂时性的,重开一个窗口后配置就不见了。如果要使每个窗口都使用这个别名,可以编辑/.bashrc(如果你是别的shell的话,就不是这个文件,如zsh是/.zshrc),把alias配置写入文件。

修改别名优点是足够简单,但是切换不灵活。

0x02 链接文件

在/usr/bin中建立一个链接文件指向Python3。

1
2
3
$ ln -s python /usr/bin/python3
$ python --version
Python 3.4.3

跟修改别名一样,也是修改不够灵活。

0x03 采用update-alternatives 切换版本

update-alternatives是Debian提供的一个工具(非Debian系的就不用看了),原理类似于上面一个办法,也是通过链接的方式,但是其切换的过程非常方便。

首先看一下update-alternatives的帮助信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>

命令:
--install <链接> <名称> <路径> <优先级>
[--slave <链接> <名称> <路径>] ...
在系统中加入一组候选项。
--remove <名称> <路径> 从 <名称> 替换组中去除 <路径> 项。
--remove-all <名称> 从替换系统中删除 <名称> 替换组。
--auto <名称> 将 <名称> 的主链接切换到自动模式。
--display <名称> 显示关于 <名称> 替换组的信息。
--query <名称> 机器可读版的 --display <名称>.
--list <名称> 列出 <名称> 替换组中所有的可用候选项。
--get-selections 列出主要候选项名称以及它们的状态。
--set-selections 从标准输入中读入候选项的状态。
--config <名称> 列出 <名称> 替换组中的可选项,并就使用其中
哪一个,征询用户的意见。
--set <名称> <路径> 将 <路径> 设置为 <名称> 的候选项。
--all 对所有可选项一一调用 --config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。
(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。
(如 pager)
<路径> 是候选项目标文件的位置。
(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。

选项:
--altdir <目录> 改变候选项目录。
--admindir <目录> 设置 statoverride 文件的目录。
--log <文件> 改变日志文件。
--force 就算没有通过自检,也强制执行操作。
--skip-auto 在自动模式中跳过设置正确候选项的提示
(只与 --config 有关)
--verbose 启用详细输出。
--quiet 安静模式,输出尽可能少的信息。不显示输出信息。
--help 显示本帮助信息。
--version 显示版本信息。

我们仅需要了解3个参数就行了

1
2
3
--install <链接> <名称> <路径> <优先级>:建立一组候选项
--config <名称>:配置<名称>组中的可选项,并选择使用其中哪一个
--remove <名称> <路径>:从<名称>中去掉<路径>选项

首先我们先看一下有没有关于Python的可选项:

$ update-alternatives --display python
update-alternatives: 错误: 无 python 的候选项
那首先先建立python的组,并添加Python2和Python3的可选项

1
2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 # 添加Python2可选项,优先级为2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1 #添加Python3可选项,优先级为1

注意,这里的/usr/bin/python链接文件,两个可选项必须是一样的,这样这个链接文件才可以选择两个不同的可选项去链接。

这时如果我们查看/usr/bin/python这个文件时,会发现它已经链接到了/etc/alternatives/python。

lrwxrwxrwx 1 root root 24 6月 19 18:39 python -> /etc/alternatives/python 然后我们再看一下版本

1
2
$ python --version
Python 2.7.6

为什么还是Python2,看一下配置

$ sudo update-alternatives --config python 有 2 个候选项可用于替换 python (提供 /usr/bin/python)。

1
2
3
4
5
  选择       路径              优先级  状态
------------------------------------------------------------
* 0 /usr/bin/python2.7 2 自动模式
1 /usr/bin/python2.7 2 手动模式
2 /usr/bin/python3.4 1 手动模式

要维持当前值[*]请按回车键,或者键入选择的编号:
原来是因为默认选中了自动模式,而Python2的优先级高于Python3,这时候只要键入2,就可以使用Python3了。

如果你想要删除某个可选项的话:

$ sudo update-alternatives --remove python /usr/bin/python2.7 update-alternatives只适用于Debian系Liunx。

0x04 virtualenvwrapper 切换版本

virtualenvwrapper是管理Python虚拟环境的工具,可以很方便的为不同的项目建立独立的环境,每个项目都可以安装自己的依赖,同时也支持在不同的虚拟环境中存在不同版本的Python。

首先安装virtualenvwrapper,可以选择apt安装或者pip安装

apt安装

$ sudo apt-get install virtualenvwrapper
pip安装

$ sudo pip install virtualenvwrapper 当你需要使用Python2开发项目时,建立一个Python2的虚拟环境:

$ mkvirtualenv -p /usr/bin/python2 env27 当你需要Python3开发时:

$ mkvirtualenv -p /usr/bin/python3.4 env34 然后可以随时切换不同的虚拟环境:

1
2
$ workon env27  # 进入Python2环境
$ workon env34 # 进入Python3环境

更爽的是,你可以在进入虚拟环境的同时切换到项目目录,只需要编辑$VIRTUAL_ENV/bin/postactivate这个文件即可:

$ vim $VIRTUAL_ENV/bin/postactivate #前提是已经进入对应的虚拟环境 在文件中添加切换目录的命令:

cd /path/to/your/project ### 0x05 总结
前面两种方法不推荐使用。

使用 update-alternatives 切换版本只适用于Debian系的Linux。

推荐使用 virtualenvwrapper 来管理虚拟环境和版本。

另外,本文介绍的切换不同版本软件的方法,除了 virtualenvwrapper 之外,前面3种方法都适用于其他软件,比如Java(open-jdk和oracle-jdk)。

0x12 nodejs 手记

1. nodejs使用淘宝的源

1.临时使用

1
npm --registry https://registry.npm.taobao.org install express

2.持久使用

1
npm config set registry https://registry.npm.taobao.org

配置后可通过下面方式来验证是否成功

1
2
3
npm config get registry
// 或
npm info express

2.