Please enable Javascript to view the contents

开发工具与效率提升

 ·  ☕ 8 分钟

整理自「开发 Tips」系列,汇总常用开发工具与效率提升相关技巧。

1. Babel 转码器

ES6 提供了许多新特性,但并不是所有的浏览器都能够完美支持,ES5 支持得好很多。Babel 是一个 ES6 转码器,可以将 ES6 代码转为 ES5 代码。这意味着,你可以用 ES6 的语法编写程序,又不用担心现有环境是否支持。

1
2
3
4
5
6
7
// 转码前
input.map((item) => item + 1);

// 转码后
input.map(function (item) {
  return item + 1;
});

Babel 的配置文件是 .babelrc ,存放在项目的根目录下。使用该文件设置转码规则和插件,基本格式如下:

1
2
3
4
{
  "presets": [],
  "plugins": []
}

2. Badge 生成器

开源项目的文档中,通常会添加各种 Badge 。这些 Badge 有的是写死的,有的是第三方工具动态获取的。推荐 http://shields.io/ 可以非常方便的生成各种 Badge 。

3. 代码统计工具 - Cloc

Cloc 是一款使用 Perl 语言开发的开源代码统计工具,支持多平台、多语言,能够计算指定目标文件或文件夹中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。

Windows 下,可以先下载安装 msys2,使用 $pacman -S cloc 安装 Cloc,然后统计:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cloc .
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Python                          523          10217          13308          61964
JSON                             24             22              0          33329
HTML                            267           2994            752          29736
XML                               3              0              0          21113
...
--------------------------------------------------------------------------------
SUM:                           2157         142804         147553         912384
--------------------------------------------------------------------------------

4. 监控 Celery 的工具 - Flower

Flower 是基于 Web 的 Celery 监控和管理工具。提供的功能有:

  • 查看 worker 状态和统计信息
  • 关闭和重启 worker 实例
  • 控制 worker 池的大小
  • 显示 task 详细信息
  • 查看当前运行的 task
  • 查看 tasks 的调度
  • 唤醒和终止tasks

安装:

1
pip install flower

运行:

1
python manage.py celery flower

打开:http://localhost:5555,访问:

5. 远程控制工具 - TeamViewer

由于,目前(2018.11)Mac OS X 的 QQ 不支持远程协助。推荐另外一个远程控制软件:

TeamViewer 兼容于 Microsoft Windows、Mac OS X、Linux、iOS、Android 操作系统,也可以通过网页浏览器连线已安装 TeamViewer 的计算机。

6. 性能测试 - Locust

Locust 是开源、使用 Python 开发的性能测试工具。它基于事件、支持分布式,并且提供 Web UI 进行测试执行和结果展示。由于使用的是 gevent 的协程并发机制,在并发量上 Locust 显著优于其他同类工具。

安装:

1
pip install locustio

编写一个测试用例:

test.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from locust import HttpLocust, TaskSet, task


class TestBaiDu(TaskSet):

    @task
    def baidu_page(self):
        self.client.get('/')


class WebsiteUser(HttpLocust):
    task_set = TestBaiDu
    min_wait = 3000
    max_wait = 5000

执行测试:

1
locust -f test.py --host=https://www.baidu.com

Web UI 访问,打开链接: http://localhost:8089/

7. pandoc 简单使用技巧

Pandoc 是由 John MacFarlane 开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的 “瑞士军刀”。

Pandoc 使用 Haskell 语言编写,以命令行形式实现与用户的交互,可支持多种操作系统。

下载地址: https://github.com/jgm/pandoc/releases/

Pandoc 的基本指令格式是:

1
pandoc [options] [input-file] ...

简单的格式转换:

1
pandoc -o output.html input.md

其中 -o ouput.html 表示输出文件为 output.htmlinput.md 是输入文件。

Pandoc 会根据文件的后缀名自动判断格式,用户也可以显式地指定输入文件和输出文件格式:

1
pandoc -f markdown -t docx -o output.docx input.md

其中 -f markdown 表示输入文件格式为 Markdown,-t html 表示输出文件格式为 HTML。

详细的指令参数请参见 Pandoc 用户手册

8. 会话管理工具 tmux

tmux 是一个终端复用工具。用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个任务时非常方便。

在 OS X 中使用 brew 进行安装:

1
brew install tmux

下面是一些常用的命令:

  • 创建一个新的会话
1
tmux new -s session_name
  • 断开当前会话
1
tmux detach (快捷键:Ctrl+b+d)
  • 进入会话
1
tmux attach-session -t session_name

简写 tmux a -t session_name

  • 关闭会话
1
tmux kill-session -t session_name
  • 查看所有会话
1
tmux list-session

简写 tmux ls(快捷键:Ctrl+b+s)

  • 关闭所有会话
1
tmux kill-server
  • 切换到某一会话
1
tmux switch -t session_name
  • 重命名会话
1
tmux rename -t oldName newName

如果提示 sessions should be nested with care, unset $TMUX to force ,执行 unset TMUX 即可。

9. 使用 rclone 挂载 OneDrive 到服务器

Rclone 能够方便的管理 OneDrive、Google Drive、Amazon Drive 等各种云盘和对象存储,支持挂载盘符、命令行上传下载文件。

  • 安装
1
curl https://rclone.org/install.sh | sudo bash
  • 本地授权

需要先安装 rclone ,然后执行:

1
rclone authorize "onedrive"

在页面登陆 OneDrive 账号,授权成功后,将整个 Token: {"access_token":"","expiry":""} 拷贝备用。

  • 服务器端配置

需要先安装 rclone ,然后执行:

1
rclone config

按照提示输入相关信息,仅当提示如下信息时:

1
2
3
4
5
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No

选择 n,在 result 中输入上面拷贝的 Token Json 字符串。继续配置,最后保存即可。

  • 挂载 OneDrive
1
rclone mount DriveName:Folder LocalFolder --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 &
  • DriveName 是新增时填入的 name
  • Folder 为 OneDrive 上的文件夹
  • LocalFolder 为服务器上的文件夹

例如,rclone mount onedrive:Code /data --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000& ,就是将 OneDrive 上 Code 目录挂载到本地 /data 目录。

如果提示 fuse 相关错误,执行 yum install -y fuse 即可解决。

10. VS Code 终端执行 .bash_profile 初始化脚本

通过添加启动命令参数,可以使得打开 shell 时,执行初始化脚本 .bash_profile

编辑 settings.json,以 OS X 为例,新增如下内容即可:

1
2
3
{
  "terminal.integrated.shellArgs.osx": ["-l"]
}

11. VS Code 配置 zsh 后,图标无法显示

由于安装补丁字体之后,VS Code 无法自动检测到,需要在 settings.json 中进行配置。

1
2
3
{
  "terminal.integrated.fontFamily": "Source Code Pro for Powerline"
}

参考: https://gist.github.com/kevin-smets/8568070

12. OS X 制作 CentOS 启动盘

  1. 查看 U 盘的挂载点
1
2
3
4
5
diskutil list
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.8 GB     disk2
   1:             Windows_FAT_32 ESD-ISO                 7.8 GB     disk2s4
  1. 卸载 U 盘
1
2
diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
  1. 写入 ISO 镜像
1
sudo dd if=/your_real_path/CentOS-7-x86_64-DVD-1810.iso  of=/dev/rdisk2 bs=1m

if 参数指定待写入文件位置,of 参数指定输出文件位置,这里的意思是,将镜像写入到 U 盘中。需要注意的是,rdisk2 表示的是 disk2 的原始盘,bs=1m 表示写入块的大小为 1MB ,目的是为了更快写入数据。

可以通过 Ctrl + T 查看写入进度。

  1. 弹出 U 盘

大约几分钟之后,写入完毕。弹出 U 盘:

1
diskutil eject /dev/disk2

13. 如何运行一个 Go 写的项目

通过 Readme 文档、Makefile 文件、脚本,通常可以快速了解如何运行一个 Go 写的项目。但有时,由于资料不完善,需要自己尝试摸索。

13.1 包含 Gopkg.lock 和 Gopkg.toml 文件的项目

Gopkg.local 和 Gopkg.toml 是 dep 用于包管理的两个文件,需要将项目拷贝到 $GOPATH/src 目录下。

如果项目目录下,还有 vendor 目录,可以找到入口文件(通常是 main.go ),直接执行编译命令。

1
go build main.go

如果没有 vendor 目录,则需要首先安装依赖包。

  1. 安装 dep
1
go get -u github.com/golang/dep/cmd/dep
  1. 安装依赖
1
dep ensure

dep 会将依赖安装到当前项目的 vendor 目录下。安装完毕,再执行编译命令。

13.2 包含 go.sum 和 go.mod 文件的项目

go.sum 和 go.mod 是 Go Modules 用于包管理的两个文件。

如果项目下有 vendor 文件夹,那么直接编译即可。

1
go build main.go

如果项目下没有 vendor 文件夹,则需要首先安装依赖包。

go module 是 go 1.11 版本内置的特性,不需要安装。安装依赖包:

1
go mod download

14. 打开 OS X 原生 NTFS 支持

  1. 插上磁盘,查看盘符
1
2
3
4
5
6
diskutil list
diskutil list
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *96.9 GB   disk2
   1:               Windows_NTFS SSD                      96.8 GB   disk2s1

这里的 SSD 就是 Volume Name。

  1. 更新 /etc/fstab文件
1
sudo nano /etc/fstab

输入密码,然后输入 LABEL=SSD none ntfs rw,auto,nobrowse,其中 SSD 为 Volume Name。

按 Ctrl + X,接着按 Y 保存。

  1. 创建访问链接
1
sudo ln -s /Volumes/SSD ~/Desktop/SSD

SSD 为 Volume Name ,需要更具具体情况替换。

15. Secure shell Extension 插件 NaCI 退出,状态 255

报错原因是本地保存的指纹信息与主机信息不符。

解决办法:

在 shell 窗口,按下 Ctrl+Shift+J 进入调试窗口,在 console 执行:

1
term_.command.removeAllKnownHosts()

清空 known_hosts 即可。

16. Azure 镜像代理

在国内的服务器上,拉取某些镜像速度较慢,或根本就无法拉取。Azure 提供了容器仓库的镜像代理服务。

无法拉取的镜像源替换之后的镜像源
k8s.gcr.iogcr.azk8s.cn/google_containers
docker.iodockerhub.azk8s.cn
gcr.iogcr.azk8s.cn
quay.ioquay.azk8s.cn

17. watch 命令

watch 命令可以周期性地执行指定的命令。

常用参数:

  • n,间隔时间,默认值 2 秒
  • d,高亮显示变化区域

使用示例:

  • 每隔 1 秒高亮显示网络链接数的变化情况
1
watch -n 1 -d netstat -ant
  • 每隔 3 秒输出一次系统的平均负载
1
watch -n 3 'cat /proc/loadavg'
  • 每隔 0.5 秒发一次请求
1
watch -n 0.5 'curl http://example.com'

18. VS Code Terminal 字体异常

由于在 OS X 下,VS Code 配置 zsh 后,图标无法显示。需要将 terminal 字体设置为 Source Code Pro for Powerline。而这个字体并不是各个操作系统的内置字体。下面是安装该字体的步骤:

下载字体:

1
curl -L "https://github.com/powerline/fonts/raw/master/SourceCodePro/Source%20Code%20Pro%20for%20Powerline.otf" -o "Source Code Pro for Powerline.otf"

安装字体:

  • Windows

将字体移动到 C:\WINDOWS\Fonts 下。

  • Linux
1
2
3
mkdir -p ~/.fonts/PowerlineFonts
cp Source\ Code\ Pro\ for\ Powerline.otf ~/.fonts/PowerlineFonts
fc-cache -f -v ~/.fonts/
  • OS X
1
2
mkdir -p ~/Library/Fonts/PowerlineFonts
cp Source\ Code\ Pro\ for\ Powerline.otf ~/Library/Fonts/PowerlineFonts/

19. VS Code 远程开发插件

VS Code 推出了官方远程开发插件扩展。工作原理是,将 VS Code 划分为客户端和服务端,客户端主要负责 UI 部分,服务端主要负责完成开发需求。

下面是架构图:

Remote Development 套件相关的插件主要有三个:

  • Remote SSH

通过 SSH 连接到 Linux 服务器,部分系统版本可能需要调整(升级 glibc、libstdc++ 等)。

  • Remote Containers

允许将本地文件夹挂载到指定的 Docker 容器。可以使用本地文件夹中的 Dockerfile 、docker-compose.yml ,也可以直接挂载到已经存在的容器中。

  • Remote WSL

连接到已经运行的 Windows Subsystem for Linux 环境。

上面所有插件远程连接之后的效果是,可以在本地 VS Code 上编辑远程文件目录,同时打开命令行时已经连接上远程终端。

20. OS X 上,执行 git 命令报错,xcrun: error

升级最新版本 OS X 之后,执行 git pull 命令,提示错误:

1
2
3
4
git pull

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

需要安装 Xcode toolkit :

1
xcode-select --install

如果依然报错,可以尝试重置:

1
sudo xcode-select --reset

21. DNS 的 SPF 记录

在发送邮件时,由于发件人可以任意指定,收件人无法验证发件人是否真实。SPF 就是为了解决伪造发件人问题。

例如,收件方收到来自主机 IP 10.10.10.10 的邮件,声称发件人为 admin@domain.com。为了验证发件人信息,收件方会去查询 SPF 记录,是否允许 IP 10.10.10.10 的主机发送邮件。如果不允许,则退信或当作垃圾邮件。

相关原理和配置可以参考文档,SPF 记录:原理、语法及配置方法简介

22. kubebuilder 安装脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
export version=2.3.0
export os=$(go env GOOS)
export arch=$(go env GOARCH)

curl -L -O "https://github.com/kubernetes-sigs/kubebuilder/releases/download/v${version}/kubebuilder_${version}_${os}_${arch}.tar.gz"

tar -zxvf kubebuilder_${version}_${os}_${arch}.tar.gz
mv kubebuilder_${version}_${os}_${arch} /usr/local/kubebuilder

export PATH=$PATH:/usr/local/kubebuilder/bin

微信公众号
作者
微信公众号