gunicorn 使用

之前的文章使用 gunicorn 来部署 webpy 中简单的提到了 gunicorn 的使用。这篇文章就在官方文档的基础上学习下 gunicorn 的其他更多的用法。

基本的安装和参数就跳过了,这边讲下文档中很有用却不是常用的一些选项,如果要看基础使用可以去看之前的文章

配置文件

我们知道 gunicorn 能够直接使用命令行来启动,常见的参数

gunicorn -w 2 -b 0.0.0.0:5000 app:app --log-level info --access-logfile logfile.log --log-file error.log

当这样一路写下去就知道命令行非常难管理,所以 gunicorn 能够使用 config 文件来管理

gunicorn -c config.py app:app

这样就简单很多了。至于 config.py 文件格式如何,保证是一个 python 格式的文件,语法没有太大问题即可

import multiprocessing

bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048                           # int 范围在 64-2048 pending 的链接最大数
worker_class = 'gevent'
debug = True
pidfile = '/tmp/home.pid'
loglevel = 'info'
logfile = '/var/log/gunicorn/gun_debug.log'

其他的全部配置可以在 setting 中找到。

设计模式

gunicorn 的设计,官方这篇说明清楚的解释了 同步 worker 和 异步 worker 的区别,如果你的应用程序接口有大量的 IO 操作推荐使用 异步 worker。

重新加载配置

首先要知道 master workder 的 pid 发送 -HUP 信号

kill -HUP masterpid

如何测试性能,可以使用 hey,下面的命令发送了 10000 个请求,其中 100 是并发量。

hey -n 10000 -c 100 http://127.0.0.1:5000/

reference


2016-05-25 python , gunicorn , wsgi , http , unix , web , server

Pypi 镜像记录

官方 PyPI 源的 URL 为 https://pypi.org/simple

pip 临时换用国内的镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

或者设为默认:

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

或者修改配置文件:

vi ~/.config/pip/pip.conf

设为:

[global]
timeout = 60
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

常用的国内 PyPI 镜像列表

  • 豆瓣 https://pypi.doubanio.com/simple/
  • 网易 https://mirrors.163.com/pypi/simple/
  • 阿里云 https://mirrors.aliyun.com/pypi/simple/
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

2016-05-23 pip , python , mirror

gnome do 技巧

自 Mint 开始才接触到 Gnome-do 这样一个神器,一句话介绍他的功能就是启动器,完全键盘操作的启动器。当然在启动应用之外还有很多扩展的功能,自开始使用 Gnome-do 开始几乎已经很少使用菜单开应用了。正如这篇 文章所讲使用了 Gnome-do 之后就会让 Windows 和 OS X 下的用户嫉妒不已。 不过 OS X 下貌似也有 Alfred 这样的神器。

安装与启动

Mint 下直接从软件管理里面搜索安装吧,如果想使用命令行,下面的也可以:

sudo apt-get install gnome-do

忘记了初始设置的启动快捷键是什么了,我自己一直使用 Alt + Space .

启动应用

最基本的功能就是启动应用, Alt + Space 之后,输入 “Chrome” ,找到 Chrome 之后回车就直接开启 Chrome。当然与此同时 Gnome-do 也回去搜索本地,查找相关的目录寻找与 Chrome 相关的内容,不关心跳过就行。用同样的方法可以开启本地的任何应用,当然要保证这些应用都在 Gnome-do 的搜索路径下。Gnome-do 会自动学习使用习惯,现在基本我输入 c 就能够找到 Chrome。

开启URL

打开 Gnome-do,输入网址 google.com 然后第一次可能需要使用 Tab 选择 Action: Open URL。然后回车, Gnome-do 会自动开启默认浏览器加载网页。

Plugin

以下插件都可以在 Preference 中找到,并启用,一些插件默认已经启用。

Alias

给应用程序或者其他命令重命名

Files and Folders

搜索本地文件及目录

GNOME Session Management

重启或者关机

Twitter

并不怎么用 Twitter ,不过可以实现 Twitter 发消息。

总结

大部分的情况都是启动应用,URL 或者搜索打开文件,其他的一些功能并不常用。


2016-05-20 Linux , gnome-do

snapseed 中的一些参数

照片编辑一些参数,了解一个 App 就能知道所有图像处理类 App 原理,比如 VSCO,泼辣修图,大到 Photoshop 等等。

Tools

Snapseed 中的常用调整工具

Tune Image

调整图像最常见的操作基本都能在这个 section 中找到。比如亮度、对比度、饱和度等等,细节部分可以单独调整暗部,或者亮部,还有图片整体色调。

Brightness

亮度,很容易理解的概念

Contrast

对比度,黑色像素和白色像素的对比度。利用S曲线的功能也能够实现,不过直接调节Contrast参数倒是来的更加直接。

Saturation

饱和度,色彩的饱和程度。往右为图像色彩变浓重,左反之。也称为色度色彩的三属性之一,广义讲,黑白灰的 色度=0 。

Ambiance

Ambiance 直译是 环境,气氛的意思,这边应该是调整环境的色彩。

Shadows

暗部,调整暗部,单独针对暗部调整往右为暗部更亮,往左为暗部更黑。

Highlights

高光,调整高光部分,更亮或者高光部分调整暗。

Warmth

色调,调整图片的色调,暖色或者是冷色,往右为暖色,往左为冷色。

Details

图片细节部分调整,基本上是图片锐度的调整。

Structure

图片纹理会变得清晰

Sharpening

色彩更加锐利。

Crop

裁剪比例,其实最喜欢的还是 1:1

Available crop aspect ratios:

Free - the aspect ratio can be set freely, without constraint

Original - the aspect ratio will be set based on the original image

1:1 - to create a square image

DIN - to set the aspect ratio according to European page aspect ratios (such as A4, A3, A2, etc.)

3:2 - to set the aspect ratio to what is typically found on D-SLRs

4:3 - to set the aspect ratio to what is typically found on DSCs

5:4 - to set the aspect ratio to what is found on many typical US page sizes (8×10, 16×20, etc.)

7:5 - to set the aspect ratio for 5×7 prints

16:9 - to set the aspect ratio to the aspect ratio of most HDTVs

其中值得一提的就是 DIN ,貌似是欧洲标准的 A4 纸张比例。

Rotate

这个比较好理解,就是旋转照片

Transform

变形,这是一个很棒的功能, VSCO Android 版有这个功能时间也不长,利用空间的变形可以将原本侧面拍摄导致的图片变形给纠正回来。

  • VerticalPerspective 垂直方向变形
  • Horizontal Perspective 水平方向变形
  • Rotation 旋转

Brush

笔刷

Dodge & Burn

完全不知道怎么翻译,感觉涂抹会产生红色像素

Exposure

调整曝光的画笔

Temperature

色温画笔

Saturation

饱和度画笔

Selective

选择点,单独对某个局部进行调整. 可以增加选择点,每个选择点可以使用单击,进行”剪切”,”复制”,”删除”和”撤销该选择点所有操作”.

而每个选择点则有”B”: Brightness, “S”:Saturation, “C”:Contrast . 这样三个可选操作.

而双指则可以选择该点影响的范围.

长按拖动则可以移动选择点.

Healing

修复,好像 PS 中的修复图章,只是这边只要轻轻一涂抹, Snapseed 将自动修复涂抹的区域.

Vignette

直译的话, Vignette 是装饰图案,小图案之类的意思. 而这边应该是指针对图片增加暗角,或者调高角落亮度的操作. 这里面又分为 “Outer Brightness”, 和 “Inner Brightness” 两种操作. 分别对应着暗角,和亮角。

Filters

一些滤镜,和工具不同的是,下面的内容都是在原有图片的基础上增加内容,而不是针对原始图片进行修改。

Lens Blur

这个词我也不知道怎么描述,似乎一直都是以英文描述。用官方的说法,就是增加镜头虚化效果,让注意力都集中到核心物体上。这个工具中又分成线性“linear”和椭圆”elliptical“两种模糊工具。

利用里面另外一个功能也可以定义虚化的图形,不单纯可以是圆形。

Blur Strength

模糊程度,更加模糊。向右滑动增加模糊的程度

Transition

增加周围虚化和中心物体的距离,让过度更加自然。

Vignette Strength

暗角强度,类似工具中的暗角工具。

Glamour Glow

光晕效果,直译过来就是”富有魅力的光晕“。其中每一种滤镜又可以单独调整。

Glow

光晕效果

Saturation

光晕效果色彩饱和度

Warmth

光晕效果色调冷暖。

Tonal Contrast

对比度

High Tones

增加高光部分对比度

Mid Tones

增加中间色对比

Low Tones

增加暗部色彩对比

Protect Shadows

防止暗部因为对比度的增加而损失细节

Protect Highlights

防止高光部分因为对比度增加而损失细节。

HDR Scape

High Dynamic Range 高动态范围成像

  • Filter Strength 滤镜的效果
  • Brightness 亮度
  • Saturation 饱和度

Drama

戏剧风格

  • Filter Strength 滤镜的效果
  • Saturation 饱和度

Grunge

色彩和纹理, 平行的线图标为纹理,交叉箭头为随机纹理与色彩。

  • Style 选择1500种不同的纹理
  • Brightness 亮度
  • Contrast 对比度
  • Texture Strength 纹理强度,0表示没有强度,等于没有增加纹理
  • Saturation 饱和度

Grainy Film

木纹理

  • Grain 自然的颗粒感
  • Style Strength 风格强度

Vintage

带来50,60,70年代的胶片感觉。

  • Brightness 亮度
  • Saturation 饱和度
  • Style Strength 风格强度

Vignette Strength

暗角的强度

Retrolux

创造复古,怀旧,有历史痕迹的胶片感觉

  • Brightness 亮度
  • Saturation 饱和度
  • Contrast 对比度
  • Style Strength 风格强度
  • Scrathches 划痕,value为0依然有效果
  • Light Leaks 漏光,alue为0依然有效果

Noir

Create moody, cinematic black and white images with darkroom-inspired toning and wash effects. 对胶片工业不是很了解,很不好翻译啊,总之就是模拟胶片在暗室中冲洗的效果。

  • Brightness 亮度
  • Wash 模拟darkroom 中over-processing
  • Grain 颗粒感,0为没有颗粒感
  • Filter Strength 滤镜强度

Black & White

黑白效果

  • Brightness 亮度
  • Contrast 对比度
  • Grain 颗粒感,0为没有颗粒感

Frames

调整设置不同边框,滑动调整边框的宽度。边框被应用之后就不能再对图片大小进行调整,所以调整图片大小之后添加边框。

其他可能用到的参数

HSL

HSL是色相、饱和度、明度的简称:

  • 色相是一种颜色区分于另外一种颜色的首要标准,例如红色与黄色。
  • 饱和度是衡量一种颜色鲜艳程度的标准。
  • 明度是衡量一种颜色明亮程度的标准。

曲线:

提亮 & 压暗曲线:提升或降低画面亮度。

左侧曲线可以调整图像中暗色区域,右侧则是高光部分

亮的地方更加亮,暗的地方更加暗一些,提高对比度. S曲线.

Reference


2016-05-19 Snapseed , PhotoEditing , Anroid , VSCO

gunicorn 部署 web.py 应用

整理文档之,部署 web.py 应用

之前有一个项目使用了 web.py 作为 web server,必然遇到的一个问题就是完成代码之后的部署,网上简单的搜索了一下就确定使用 gunicorn ,比较简单的 wsgi,全称是 web server gateway interface。

gunicorn

Gunicorn ‘Green Unicorn’ 是一个 Python WSGI HTTP Server for UNIX. Gunicorn 兼容众多 Python Web 框架,能轻松集成,并且消耗资源少,速度快。

安装

pip install gunicorn

具体可以参考官网,官网推荐使用 virtualenv 来安装。

#  ...
app = web.application(urls, globals())
#  在这里加入下面这句,即可
application = app.wsgifunc()

然后使用如下命令运行:

gunicorn code:application

其中 code 就是指 code.py,application 就是那个 wsgifunc 的名字。 这样运行的话, gunicorn 默认作为一个监听 127.0.0.1:8000 的 web server,可以在本机通过: http://127.0.0.1:8000 访问。

gunicorn -w 1 -b 127.0.0.1:8000 code:application

其中 -w 指定 worker 数量, -b 指定监听地址

  • --log-file FILE The Error log file to write to.
  • --log-level LEVEL debug, info, warning, error, critical
  • -D, --daemon 后台执行
  • -p FILE, --pid FILE filename to use for the PID file
  • -t INT, --timeout INT Workers silent for more than this many seconds are killed and restarted

更多参数参考这里

Nginx 反向代理

Gunicorn 是 WSGI HTTP 服务,通常将其放到 Nginx 服务器后

server {
	listen 80;
	server_name example.org;
	access_log  /var/log/nginx/example.log;
	location / {
		proxy_pass http://127.0.0.1:8000;
		proxy_set_header Host $host;

		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

停止 gunicorn

使用如下命令停止 gunicorn

pkill gunicorn

reference


2016-05-11 python , gunicorn , webpy , web , server

荒蛮故事 感悟

不知道什么时候加入的待看列表,今天一个偶然的机会突然翻到这部片子,突然感觉整个世界都明朗了。我知道又收获了一部不可多得的好电影,当然最初着是在第一个故事结束,片头出来的时候。

关于影片中提到的六段故事不再详说,只是有些话必须写下来才能描述得清楚现在的感受。就第一个飞机的故事,从飞机上两位的交流,转到和特定一个人的联系,继而转到和机长的关系。看完这段之后我就联想起曾经看到过的一则新闻,当然是飞机事故,没有任何危机情况,就这样机毁人亡,后来调查说是机长的精神状况导致。虽然当时看到这条新闻的时候并没有看这样一部影片,但是也曾经纠结过一个问题,为什么他能够当上机长,同样的疑问也表现在影片中,这倒也不是影片的BUG,但是经过现实新闻的映照更加凸显出这个故事荒蛮无理的背后实则是导演的一番诉说,中国古话说“君子报仇,十年不晚”,我一般很难相信这样的人存在,只是事实一遍又一遍的告诉我不是不可能,而是没有想到。继而追问起我自己,让我自己反思我自己是否在生活中是否曾经没有善待过某一些人,我想导演在放完着一个个故事的背后并不是让我们笑笑了事吧。

第二个故事吃薯条,现在回想起来虽然对故事本身对于犯罪和宽恕,对于那个女厨师本身就可以展开很多的话题,但是我印象最深刻的还是那句”老鼠药过期了是没用了,还是更毒了。“最深刻。当然本身这个故事因为设定较少,如果单纯的听女主一面之词而草草结束某个人的生命,我还是并不赞同的。

relatos salvajes

画面再转到公路上驾驶的奥迪汽车,这个故事当然影像最深,讽刺意味也最强烈。从最开始主角在大马路上开车,车中播放着激昂的音乐,原本甚至以为会是一段比较愉悦的旅程,而事后发生的故事真让我咋舌,然而回归到第一个故事的主题,这一次只是这个因果报应来的快了一些。并不知道谁先开始,也并不知道在那个遥远的国家是不是大家在大马路上是不是都会开着车逗别人一下,总之一方和另一方结下了一面之缘,而就着一面之缘,而终导致了相爱相杀。过程比较曲折,只是我在想,如果开奥迪的人不那么炫耀,言语中放写尊重,而另一位并没有开这个路上的”玩笑“,或者为人谦逊一些会不会故事会美好一些,漫漫长途或许会是一对伴侣,只是可能我们就不会看到这么黑色的故事了。

而接下来一个故事如果没有记错的话应该是那个爆破工程师,而看完这些不知道为什么我就想起了自焚者,你说故事中的爆炸是“恐怖袭击”吗?或许是当人生已经被逼迫无奈只能走上这样一条路的时候,如果掌握一些技术还能为自己挣得一口气,而那些真正的底层劳动人民,一没技术,二没知识呢?他们或许真正想到的就是拿自己的身体去赌,有些时候真的不愿意再看到去批评这些自焚者,而是我们真的应该去关注一下他们为什么会去自焚,那些理由才是这个故事导演想要告诉我们的。当然故事毕竟是故事,最后危机化解,妻子女儿周围环境都又回归了美好,一些人的犯罪趋于收敛,只是我在想如果大家都像故事中妻子那样呢?是不是最后我们依然按照那个不合理的规则继续生活着。这个社会有的时候真需要一些类似那个爆破工程师那样的角色,促进社会的进步,只是如果可能我希望方式可以和平一些。可以想象,如果那一次爆炸真的伤害了无辜的人呢?事态可能会不受控制,而这一点其实回想起来也挺讽刺,现实中往往为了刺激人们发现一些”违法“的事情,而自己却需要用”违法“的方式。想来,如果能像“聚焦”中那样,通过媒体吸引大家的注意进而解决一个社会问题的例子,少之又少啊。所以新闻必须自由,才能偶尔的给社会这口高压锅适当的降降压。

再到下一个替死鬼,似乎是看太多的新闻也好,电影也好,在富翁盯着他们的管家意味深长地长看的时候就猜想到了后面的情节,只是我没有想到的是,原来直到最后手上也需要握有筹码才行。这里暂且不说拿钱抵事这件事请的公平性,如果看过之前中国家长贿赂美国审判长被判刑来看,是非自知。就最后这个故事的结局来看,则又是一个给底层人士的警告,虽然开始有些可怜这位老头,但在他开口索要海边别墅的时候,他的整个形象就已跌落谷底。直到最后他也没有拿到他自己应拿到的那一分五十万的酬金。原本一个车祸,在富豪的住宅却演变成一桩生意,原本五十万解决的事情,又变成书房的一番商讨,双方给出自己的筹码,最多一百万的酬金无法瓜分,那如何,那就让最下面的人去死吧。这就是没有筹码的人在一局一局的商战中被人活生生吃掉的例子。

最后一个几乎可以用“血色婚礼”来形容了,看似风光的场面,看似喜庆的婚礼,却暗流涌动,我几乎没有办法想要看出导演的表现意图,只就是看着这样的故事发展下去,没有办法料到结局。我的想法并没有那么黑暗,我坚信他们双方最后是互相谅解,继而相拥,也就是冰释前嫌,不再计较,当然故事戛然而止,留下很多疑问,但这已然足够,我相信他们不会为了这一些小事而放弃人生的后半段,嗯,我还是很光明的。


2016-05-07 review , 电影 , 思考感悟

MySQL 客户端命令行使用技巧

本文会列举一些 MySQL 常用的客户端命令,已经一些使用经验。mysql 客户端命令会知道 SQL 语句以分号 ;,或者 \g 或者 \G 结尾。

使用 \G

通常 mysql client 都是以表格的形式显示结果,通常情况排版会有一些问题,这时可以使用 \G,比如说

SHOW DATABASES \G

此时的输出结果会用 * 号来优化显示,

使用 \P 设置 pager

在 Linux 系统下,可以使用 pager 程序来显示超长的输出结果, pager 提供了在结果中导航的功能,可以使用键盘,鼠标,或者其他方法来在结果中快速导航。一些好的 pager 可以使 less, more lv 等等。

首先使用 \P 来查看

MariaDB [(none)]> \P

然后使用 \P less 来设置。

有些结果可能只关心其中列,比如

SHOW ENGINE InnoDB STATUS \G

如果只关心 IO 可以设置 \P grep 'I/O thread' 那么再次运行上面的命令,结果就是过滤后的了。

另一个比较有意思的 pager 是 md5sum,将 md5sum 设置为 pager ,那么结果是每一个查询输出都会显示 MD5 hash,通常可以用来比较两个结果是否一样。

\P md5sum
SELECT * from XXXX

存储引擎

InnoDB 成为了 MariaDB 5.5 和 MySQL 5.5 的默认存储引擎。Percona 维护一个 InnoDB 的 fork 分支。

TokuDb 引擎由 Tokutek 开发,从 5.5 起包含在 MariaDB 中,需要安装并单独开启。支持 transactions with savepoints, XA transactions , 但是不支持外键全文索引。和 InnoDb 非常不同,只要是使用了一个新的数据结果用来索引:the fractal trees. 和 B 树相似,但是每个节点都有缓存。另一个 TokuDb 的特征是数据压缩,数据压缩不能禁用。

MyISAM 历史的存储引擎,MySQL 和 MariaDB 在 5.5 版本以下的默认。

reference

  • 《Mastering MariaDB》

2016-05-04 mysql , cli , mysql-cli , linux

修复 zsh 下 git 自动提示失败

前些天不知道调整了什么设置,可能是因为更新了 dotfiles 的缘故,突然 git 自动补充就失效了,然而其他命令的自动补充都是非常完美的。搜寻了一番有人说删除根目录下 ~/.zcompdump* 就行了,但是我尝试无效,重启也无效,就觉得可能哪里的配置有了冲突。

后来发现可能是我本地安装了 hub 命令,zsh 自动填充可能会需要到 completions 目录中找一些索引,所以

  • mkdir -p ~/.zsh/completions
  • 然后将 hub 的自动填充复制一份到该目录

然后在 ~/.zshrc 文件中

fpath=(~/.zsh/completions $fpath)
autoload -U compinit && compinit

重新打开 zsh,或者 source 一下,在使用 git + Tab 看看效果即可。

reference


2016-05-02 zsh , git , auto-completion , hub

利用 Jenkins 持续集成 Android 程序

Jenkins 是 Java 编写的开源持续集成(Continuous integration)工具 1。在上一篇推荐网站中提到的 AlternativeTo 中去搜索一下,能够看到很多持续集成的工具,像 GitHub 上经常看到的 Travis CI, 还有 Jenkins 的前身 Hudson。

安装

详情请见官网.

Linux 下:

wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

直接安装源中的 Package 有几点需要注意:

  1. Jenkins 会以守护进程(daemon)随机启动, 查看 /etc/init.d/jenkins
  2. 创建了 jenkins 用户来运行服务
  3. Log 文件 /var/log/jenkins/jenkins.log
  4. 配置地址 /etc/default/jenkins 比如 JENKINS_HOME 在该文件配置
  5. 默认 Jenkins 使用 8080 端口,启动 http://localhost:8080 开始配置 Jenkins 吧。

更多服务器 Apache , Nginx 的配置请见官网。

全局配置

这里默认已经有 Android 开发环境,也就是 JDK, Android-SDK,Gradle 都已经是完整的。进入 http://localhost:8080 配置,首次今日需要验证身份信息,验证之后创建用户,然后下载插件,进入之后,系统管理 -> 管理插件,需要安装以下插件:

  • Android Lint Plugin
  • Git plugin
  • Gradle plugin

如有其他插件 GitHub , gitlab 啦,可以就使用环境来选择安装。

更新玩插件,进入 系统管理 ->Global Tool Configuration , 然后配置 JDK 目录, Gradle 目录,Git 目录。当然需要知道当前自己机器上的绝对地址:

  • JDK: /usr/lib/jvm/java-7-openjdk-amd64
  • Gradle: /home/einverne/android-studio/gradle/gradle-2.10
  • Git: git

系统管理 -> 系统系统设置:

Environment variables 下添加:

键 : ANDROID_HOME 值:/home/einverne/Android/Sdk

如果这一行不添加,而 Android Studio 的工程没有在 local.properties 中指定 sdk.dir=/home/einverne/Android/Sdk 的话, Jenkins build failed, cannot found Android sdk2.

项目配置

配置好上面的环境,新建项目,名字 +”构建一个自由风格的软件项目”。 然后进入项目,配置

General

项目名字,项目描述, GitHub Project url。 如果想要自定义路径,可以在高级中设置。

源码管理

当然使用的是 Git, 然后是项目地址,然后需要验证身份信息,当然有很多的方式,用户名密码,用户名密钥,等等,根据自己的适用情况添加即可。可以选择分支 build.

构建触发器

这里可以选择何时触发构建, 有很多的方式,可以是有变动自动构建,也可以是定时构建,当然也有很多的触发方式。

构建环境

这边基本上在全局环境配置的时候就已经满足,细化一下 build 环境。

构建

这里需要选择 Invoke Gradle script, 然后在配置中选择刚刚在全局配置中配置的 Gradle 版本。

在 Tasks 下输入 clean build .

构建后操作

  1. 选择 Publish Android Lint results, 以便输出 Lint 结果,设置中输入 **/lint-results*.xml.
  2. 选择 Archive the artifacts 来存档 apk 文件,设置中输入 **/*.apk。 默认输出文件在 Workspace 下 app/build/outputs/apk/

遇到问题

Android Lint

Jenkins 默认启用 Lint 检查,所以需要在 build.gradleandroid 下添加

lintOptions {
    abortOnError false;
}

图文教程,Windows 下教程参考下面文章。

reference


2016-05-01 android , jenkins , gradle , ci

推荐网站之代替品:alternativeTo

总说“授人以鱼不如授人以渔”,寻找不同平台上的代替品,每次都会点进这个网站,或许是上一段时间内跨不同操作系统太频繁,所以导致寻求Mac下 Windows 某个软件的代替品的需求升高,现在渐渐的培养起自己只使用多平台客户端都存在的应用使用,而有些是在没有Linux下的应用,也尽量的能够找到功能相似的代替。所以 AlternativeTo 这个网站给我带来了很多的便利。

官网地址:http://alternativeto.net/

应用实例:

My Tracks

My Tracks 原本是Google推出Android上记录GPS轨迹的应用,在很早开始就一直使用,无奈Google宣布停止这款应用,而自身推出的 Fit 功能上也赶不上 My Tracks,想到这里真心感觉有点讽刺,几年后推出的产品在功能上竟然赶不上几年以前推出的应用。Google Photos 与 Picasa 也是。说偏了,回到 My Tracks, 直接访问 http://alternativeto.net/software/my-tracks/ 就能够找到很多的应用,上面有些用户也会给出功能的对比,有所少人喜欢某个应用,在几乎所有的情况下,排名第一的几乎就是最好用的了。

KMPlayer

有的时候多逛一逛这个网站能够有不少收获,就比如早之前我一直用的 KMPlayer , 而自某一个版本开始 KMPlayer 开始变得臃肿,收纳很多无用的功能之后,就可以到 KMPlayer 的 alternativeTo 来寻求代替品,最后会发现 PotPlayer 也非常好用,然后我一直使用至今。当然在 Linux 下就又可以跑到 PotPlayer 下面,然后找到 MPlayer 和 SMPlayer ,都非常不错,当然 VLC Media Player 也很棒。

当然还有很多很多的例子,都需要慢慢的发现,我曾经在上面找过 IDE 的代替品,找过编辑器的代替品,找过 SQLite Manager 的代替品,等等,他最好最方便的功能就是,当你在一个平台已经养成了一个使用习惯,突然间更换了一个平台,然后对这个环境很陌生,而在这个网站的指导下就能够迅速的找到代替品。快速的适应新的环境。而这样引出来的另一个问题就是,需要熟悉不同的工具。所以就回归到我之前所说,我几乎现在只考虑使用三个平台 Windows, Mac, Linux 下都存在产品的应用了。虽然现在像 Evernote,网易云音乐同样没有Linux客户端,但这已经是非常少的特例了。使用同样的应用,同样的环境才能提高效率,并且不同去适应不同的工具的差异。


2016-04-29 推荐网站 , website

电子书

最近文章

  • 配置 Rime 在 Vim 下退出编辑模式时自动切换成英文输入法 半年以前在 Obisidian 的文章下面有人曾经问过我一个问题,如何在 Vim 或者其他使用 Vim 模式的编辑器,比如 IntelliJ,或者 Obisidian 开启 Vim 模式后方便地切换中英文输入法,因为在编辑模式和普通模式下,需要经常切换输入法,使得体验变得非常槽糕。
  • Asus RT-AC86U 设置 前些天给家里买手机正好凑单了一个 Asus RT-AC86U,正好可以代替出了两次故障的小米 3G。
  • 扩展 Proxmox 系统分区以及 Proxmox 文件系统初识 昨天想要扩展一下之前安装的 Proxmox 容量,对系统进行了一次关机,然而关机之后就悲剧的发现在 U 盘中的系统启动不了了,将 U 盘拔下检测之后发现 U 盘可能挂了,一个全新的 U 盘,在连续 192 天运行之后挂掉了。无奈之下只能想办法先恢复一下 Proxmox 系统以及安装在系统之上的 OpenMediaVault 了。
  • 『译』我最喜欢的命令行工具 偶然间看到一篇介绍 cli 的文章,感觉写得不错,正好借此机会也整理一下我之前使用过,以及觉得非常值得推荐的 CLI 工具。
  • 使用 Clonezilla 将硬盘中系统恢复到虚拟机中 今年陆陆续续将工作的环境迁移到了 macOS,虽然已经把日常的资料迁移到了 macOS,但是之前的 Linux 上还有一些配置,以及可以的一些测试还需要用到 Linux 虚拟机,所以我就想能不能用 Clonezilla 将磁盘中的系统备份然后恢复到虚拟机里面。因为我发现 macOS 下的 Fusion 还是很强大的。