Tools

使用API blueprint创建API文档

在进行微服务开发的过程中,为了保证最终开发的系统跟最初的设计保持一致,约定RESTful接口之间的调用方法,我们需要将API设计文档化,因此我们引入了API Blueprint。 API Blueprint 是什么 API Blueprint 用来编写API文档的一种标记语言,类似于Markdown,因为是纯文本的,所以方便共享编辑,具体的语法规则可以在 API Blueprint documentation 查看,配合一些开源的工具可以把接口文档渲染成 html 再搭配一个静态服务器,方便于分享。 另外,配合一些工具,可以直接生成一个 mock data 数据,这样只要和后端的同学约定好接口格式,那么前端再开发的时候可以使用 mock data 数据来做测试,等到后端写好接口之后再做联调就可以了。 我们以Cloud Native Go书中的gogo-service示例里的apiary.apib文件为例。 该文件实际上是一个Markdown格式的文件,Github中原生支持该文件,使用Typora打开后是这样子。 在Visual Studio Code中有个API Element extension对于API Blueprint文件的支持也比较好。 生成静态页面和进行冒烟测试 我们分别使用开源的aglio和drakov来生成静态页面和进行冒烟测试。 aglio 是一个可以根据 api-blueprint 的文档生成静态 HTML 页面的工具。 其生成的工具不是简单的 markdown 到 html 的转换, 而是可以生成类似 rdoc 这样的拥有特定格式风格的查询文档。 在本地安装有node环境的情况下,使用下面的命令安装和使用aglio。 $ npm install -g aglio $ aglio -i apiary.apib -o api.html 打开api.html文件后,如图: 安装和使用drakov。 $ npm install -g drakov $ drakov -f apiary.

两款图片处理工具——Google Guetzli和基于AI的Deep Photo Style Transfer

前言 如果你看过美剧「硅谷」会记得剧中主角们所在的创业公司PiedPipper,他们就是靠自己发明的视频压缩算法来跟大公司Hooli竞争的,这部剧现在已经发展到第4季,在腾讯视频上可以免费观看。 最近关注了两个图像处理的Open Source Projects。 Google Guetzli 图像压缩工具 Luan Fujun’s Deep Photo Style Transfer 图像style转换工具 另外对于图像处理还处于Photoshop、Lightroom这种摄影后期和图像处理命令行工具ImageMagick的我来说,图像压缩,智能图像风格转换实乃上乘武功,不是我等凡夫俗子驾驭的了,但是乘兴而来,总不能败兴而归吧,下面我们来一探究竟。 Google Guetzli 聊聊架构微信公众号上有一篇介绍Google开源新算法,可将JPEG文件缩小35%文章。 我在Mac上试用了一下,安装很简单,只要一条命令: brew install guetzli 但是当我拿一张22M大小的照片使用guetzli压缩的时候,我是绝望的,先后三次kill掉了进程。 因为实在是太慢了,也能是我软件对内存和CPU的利用率不高,效果你们自己看看。 原图是这个样子的,拍摄地点在景山上的,俯瞰紫禁城的绝佳位置。 guetzli --quality 84 --verbose 20160403052.jpg output.jpg 为什么quality要设置成84呢?因为只能设置为84+的quality,如果要设置的更低的话需要自己修改代码。 耗时了一个小时,后台进程信息。 这个是使用Squash压缩后的大小效果,压缩每张照片差不多只要3秒钟。 Squash的logo就是个正在被剥皮的🍊,这是下载地址。 压缩比分别为70%和30%。 压缩比70%后的细节放大图 压缩比30%的细节放大图 你看出什么区别了吗?反正我是没有。 下面再来看看耗时一个小时,千呼万唤始出来的guetzli压缩后的效果和使用squash压缩比为30%的效果对比。 左面是使用guetzli压缩后(4.1M),右面使用的squash压缩后(3.1M)的照片。 似乎还是没有什么区别啊?你看出来了吗? Guetzli总结 可能是我使用Guetzli的方式不对,但是命令行里确实没有设置CPU和内存资源的选项啊,为啥压缩照片会这么慢呢?效果也并不出彩,不改代码的话照片质量只能设置成84以上,但是这个是Open Source的,使用的C++开发,可以研究下它的图像压缩算法。 Deep Photo Style Transfer 来自康奈尔大学的Luan Fujun开源的图像sytle转换工具,看了README的介绍,上面有很多图像风格转换的例子,真的很惊艳,市面上好像还没有这种能够在给定任意一张照片的情况下,自动将另一张照片转换成该照片的style。 这个工具使用Matlab和Lua开发,基于Torch运行的时候需要CUDA,cudnn,Matlab,环境实在太复杂,就没折腾,启动有人发布Docker镜像,已经有人提了issue。 如果它能够被商用,绝对是继Prisma后又一人工智能照片处理应用利器。 后记 是不是有了照片风格转换这个东西就不需要做照片后期了?只要选几张自己喜欢的风格照片,再鼠标点几下就可以完成照片处理了?摄影师要失业了?非也!照片风格东西本来就是很主观性的,每个人都有自己喜欢的风格,照相机发明后就有人说画家要失业了,其实不然,画画依然是创造性地劳动,只能说很多写实风格的画家要失业了。Deep Photo Style Transfer也许会成为Lightroom或者手机上一款app的功能,是一个不错的工具。也许还会成为像Prisma一样的现象级产品,who knows?🤷‍♂️

开源镜像定义工具Packer简介

昨天研究了下Vagrant,感觉它的虚拟机ruby格式定义很麻烦,经人指点还有一个叫做packer的东西,也是Hashicorp这家公司出品的,今天看了下。 Packer是一款开源轻量级的镜像定义工具,可以根据一份定义文件生成多个平台的镜像,支持的平台有: Amazon EC2 (AMI). Both EBS-backed and instance-store AMIs Azure DigitalOcean Docker Google Compute Engine OpenStack Parallels QEMU. Both KVM and Xen images. VirtualBox VMware Packer创造的镜像也能转换成Vagrant boxes。 Packer的镜像创建需要一个json格式的定义文件,例如quick-start.json { "variables": { "access_key": "{{env `AWS_ACCESS_KEY_ID`}}", "secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}" }, "builders": [{ "type": "amazon-ebs", "access_key": "{{user `access_key`}}", "secret_key": "{{user `secret_key`}}", "region": "us-east-1", "source_ami": "ami-af22d9b9", "instance_type": "t2.micro", "ssh_username": "ubuntu", "ami_name": "packer-example {{timestamp}}" }] } 使用packer build quick-start.json可以在AWS上build一个AIM镜像。 Packer的详细文档:https://www.packer.io/docs/

Vagrant介绍-从使用到放弃完全指南

(题图:北京地铁13号线光熙家园夜景 Mar 5,2017) 起源 久闻Vagrant大名,之前经常看到有开源项目使用它作为分布式开发的环境配置。 因为今天在看contiv正好里面使用vagrant搭建的开发测试环境,所以顺便了解下。它的Vagrantfile文件中定义了三台主机。并安装了很多依赖软件,如consul、etcd、docker、go等,整的比较复杂。 ➜ netplugin git:(master) ✗ vagrant status Current machine states: netplugin-node1 running (virtualbox) netplugin-node2 running (virtualbox) netplugin-node3 running (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`. Vagrant是hashicorp这家公司的产品,这家公司主要做数据中心PAAS和虚拟化,其名下大名鼎鼎的产品有Consul、Vault、Nomad、Terraform。他们的产品都是基于Open Source的Github地址。 用途 Vagrant是用来管理虚拟机的,如VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以vagrant不能单独使用,如果你用它来管理自己的开发环境的话,必须在自己的电脑里安装了虚拟机软件,我使用的是virtualbox。 Vagrant提供一个命令行工具vagrant,通过这个命令行工具可以直接启动一个虚拟机,当然你需要提前定义一个Vagrantfile文件,这有点类似Dockerfile之于docker了。 跟docker类比这来看vagrant就比较好理解了,vagrant也是用来提供一致性环境的,vagrant本身也提供一个镜像源,使用vagrant init hashicorp/precise64就可以初始化一个Ubuntu 12.04的镜像。 用法 你可以下载安装文件来安装vagrant,也可以使用RubyGem安装,它是用Ruby开发的。 Vagrantfile Vagrantfile是用来定义vagrant project的,使用ruby语法,不过你不必了解ruby就可以写一个Vagrantfile。 看个例子,选自https://github.com/fenbox/Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below.