0%

0. 前言

Cobra(眼镜蛇)是一个库,其提供简单的接口来创建强大现代的CLI接口,类似于git或者go工具。同时,它也是一个应用,用来生成个人应用框架,从而开发以Cobra为基础的应用。Docker源码中使用了Cobra。

Cobra基于三个基本概念commands,argumentsflags。其中commands代表行为,arguments代表数值,flags代表对行为的改变。

基本模型如下:

1
2
3
4
5
6
7
APPNAME COMMAND ARG --FLAG

# hugo是cmmands server是commands,port是flag
hugo server --port=1313

# clone是commands,URL是arguments,brae是flags
git clone URL --bare
阅读全文 »

1. 网络接口介绍

1.1 网络接口的命名

网络接口并不存在一定的命名规范,但网络接口名字的定义一般都是要有意义的。例如:

  • eth0: ethernet的简写,一般用于以太网接口。

  • wifi0:wifi是无线局域网,因此wifi0一般指无线网络接口。

  • ath0: Atheros的简写,一般指Atheros芯片所包含的无线网络接口。

  • lo: local的简写,一般指本地环回接口。

阅读全文 »

0. 前言

Chrome59(linux、macos)、 Chrome60(windows)之后,Chrome自带headless(无界面)模式很方便做自动化测试或者爬虫。但是如何和headless模式的Chrome交互则是一个问题。通过启动Chrome时的命令行参数仅能实现简易的启动时初始化操作。Selenium、Webdriver等是一种解决方案,但是往往依赖众多,不够扁平。

puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

pyperteer是puppeteer的Python实现,相比于selenium具有异步加载、速度快、具备有界面/无界面模式、伪装性更强不易被识别为机器人同时可以伪装手机平板等终端;但是也有一些缺点,如接口不易理解、语义晦涩;

阅读全文 »

0. 前言

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

我认为一次爬虫的过程, 就是网络请求到数据后, 处理数据, 然后发送数据的过程.

阅读全文 »

request是一个简答优雅的python HTTP库,相较于python标准库中的urllib和urllib2的库,requests更加的便于理解和使用.

1. 安装 requests

1
pip install requests
阅读全文 »

0. 前言

Viper(毒蛇)是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:

  • 设置默认值
  • 从JSON,TOML,YAML,HCL和Java属性配置文件中读取
  • 实时观看和重新读取配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统(etcd或Consul)读取,并观察变化
  • 从命令行标志读取
  • 从缓冲区读取
  • 设置显式值
阅读全文 »

1. 模块

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

1
2
3
4
5
6
7
8
from pkg.func import hello
# pkg 是模块名字,就是目录名字
# pkg.func 是 pkg 目录下的 func 文件
# hello 是 func 文件的 hello函数


from pkg.topic import Topic
# Topic 是 topic 文件的 类
  • __init__.py ,如果目录中存在该文件,该目录就会被识别为 module package 。
  • __init__.py 在包被导入时会被执行。该文件就是一个正常的python代码文件,因此可以将初始化代码放入该文件中。
阅读全文 »

在制作 Docker Images 之前, 我们先看一下Docker 官方提供了一些建议和准则,在大多数情况下建议遵守。

  • 容器是短暂的,也就是说,你需要可以容易的创建、销毁、配置你的容器。

  • 多数情况,构建镜像的时候是将 Dockerfile 和所需文件放在同一文件夹下。但为了构建性能,我们可以采用 .dockerignore 文件来排除文件和目录。

  • 避免安装不必要的包,构建镜像应该尽可能减少复杂性、依赖关系、构建时间及镜像大小。

  • 最小化层数。 Dockerfile的一行(除MAINTAINER外)对应镜像的一层,为使层数足够小,故可以将类似的命令串起来,比如RUN 指令,可以使用&&连接多个指令,如此也只有一层。

  • 排序多行参数,通过字母将参数排序来缓解以后的变化,这将帮你避免重复的包、使列表更容易更新,如:

1
2
3
4
5
6
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion
阅读全文 »

0. 前言

日志作为整个代码行为的记录,是程序执行逻辑和异常最直接的反馈。对于整个系统来说,日志是至关重要的组成部分。通过分析日志我们不仅可以发现系统的问题,同时日志中也蕴含了大量有价值可以被挖掘的信息,因此合理地记录日志是十分必要的。

阅读全文 »

1. Learn Go with tests

当学习一门语言时, 最有效的办法不是每一章的去阅读概念, 而是通过例子探索学习.

如果没有学习过 Go 语言的, 强烈建议通过编写测试学习 Go 语言, 不仅为测试驱动开发打下基础, 还是可以使用 Go 语言编写健壮的、经过良好测试的系统.

强烈推荐: https://github.com/quii/learn-go-with-tests

阅读全文 »