惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Y
Y Combinator Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
博客园_首页
小众软件
小众软件
I
InfoQ
J
Java Code Geeks
月光博客
月光博客
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Latest news
Latest news
G
GRAHAM CLULEY
IT之家
IT之家
C
Cisco Blogs
Last Week in AI
Last Week in AI
Engineering at Meta
Engineering at Meta
L
LangChain Blog
The Register - Security
The Register - Security
SecWiki News
SecWiki News
M
MIT News - Artificial intelligence
NISL@THU
NISL@THU
T
Tenable Blog
博客园 - Franky
美团技术团队
I
Intezer
U
Unit 42
雷峰网
雷峰网
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
C
Cyber Attacks, Cyber Crime and Cyber Security

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
开发工具与效率提升
微信公众号 · 2018-11-02 · via 陈少文的网站

整理自「开发 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
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 显著优于其他同类工具。

安装:

编写一个测试用例:

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
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
  • 查看所有会话

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

  • 关闭所有会话
  • 切换到某一会话
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
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 ),直接执行编译命令。

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

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

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

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

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

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

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

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

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文件

输入密码,然后输入 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
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