借助 Docker 使用 Hexo

去歧义:本文讲述的是

本来想命名为:在 Docker 中使用 Hexo,想想还是有区别的:一个是完全把 Hexo 博客 host 在一个 docker 容器里(顶多把 site 的目录映射到外部来),一个是仅仅把 Docker 作为替代宿主机安装 Node 以及 Hexo 环境的隔离环境。这样本机就可以不用安装 node 以及 hexo 相关的环境,如果你有在多台机器上使用 Hexo 的需求,那么使用 Docker 来代替本地安装是个不错的选择。

关于 Android 背景色 Alpha 值的一个坑

这是公司项目一个留了很久的 bug,尝试找了很多次原因都没有头绪。这个 bug 是这样的:

定义了一个主题色为例如 #FF0000,很多界面控件都用了这个颜色。可是这个颜色在 app 使用过程中用着用着就会出现变成了透明的情况,而且出现透明之后,所有使用这个颜色的控件都会变成透明。

更奇怪的是,重启应用会恢复这个问题,但是操作一会儿又会出现。

用 Supervisor 监听程序运行

今天发现之前搭的 nexus maven manager 服务挂了,被要求解决挂了之后不能自动重启的问题。本来想写个 shell 糊弄一下,请教了一下公司的后端小哥得知了 supervisor。其实 supervisor 之前倒也「用」过,阴影中的袜子官方文档貌似就介绍过它的使用,查了一下文档发现用起来很方便,应该是此类问题的最佳实践了,这里稍微记录一下基本用法。

Jenkins 中如何让 Android SDK 根据需要自动更新

每次项目中切换了新的 support,总是要登录构建服务器更新一下 SDK,很麻烦。其实 Jenkins 本身是支持自动更新的,稍微留一下会发现,构建时不存在的 SDK 的报错信息为:

You have not accepted the license agreements of the following SDK components: …

原来是 license 问题,需要手动去 agree 才能进行下一步,所以就中断了。但其实是可以跳过的,Stackoverflow 上有人引用了 Jake Wharton 给出了方法:

1
2
3
mkdir "$ANDROID_SDK/licenses" || true
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"

上面的哈希字符串据说是 license 文本的 sha1,所以如果 license 换掉的话也会失效。暂时这样用吧。

参考:http://stackoverflow.com/questions/38096225/automatically-accept-all-sdk-licences

从 Retrofit 源码学习 Java 的动态代理的使用

Retrofit 是当前 Android 最流行的 HTTP 网络库之一了,其使用方式比较特殊,是通过定义一个接口类,通过给接口中方法和方法参数添加注解的方式来定义网络请求接口。这种风格下定义一个网络接口变得很简单。不过 Retrofit 是如何使用一个接口的 Class 创建出来实现了该接口的对象呢?最近因为工作原因想封装项目中的网络请求部分,在解决获取泛型嵌套问题的时候,一直没有找到比较理想的方案,所以拜读了 Retrofit 的源码看看这个明星网络库是如何实现这一黑科技的。

Android 项目的 Jenkins 参数化构建

需求描述

项目分为三种类型构建:

  1. 测试环境构建 debug
  2. 测试环境构建后上传内测平台 (fir.im)
  3. 发布版构建 release

三种构建类型在完成后都保存构建输出的 apk,只有在类型 2 完成后执行上传到内测平台操作

Let's Encrypt

终于在免费方案的前提下搞定了博客的 HTTPS。之前试过 CloudFlare 的 CDN + HTTPS 的方案,最终因为速度实在太感人以及和 DNS 上和邮箱有冲突就放弃了;后来 Coding.net 也开放了自定义域名的 HTTPS 服务,试了以后感觉不错,但后来发现在 Android 设备上基本证书不可用,反馈了很久却迟迟没有解决。前两天又租了个乞丐版的搬瓦工 VPS,尝试了一下 Let’s Encrypt 感觉很方便,就试着自己搞了一下,恰好有发现 GitLab 的 pages 服务可以自己配置证书,所以借着 VPS 生成了一个证书然后配置在 GitLab 上。虽然速度貌似不如 Coding 的快,而且 ping 也被 GitLab 给屏蔽了,但总体还可以接受,暂时就先用这个方案了。

顺便解释下如果国内的朋友感觉访问本站太慢,那是因为用了 disqus 评论插件的问题,因为国内同类产品用了后实在不满意,最终还是选用了 disqus,需要评论请自备梯子。

UPDATE 2016 10 25:后来想起来很久之前买过一次 SSL 证书一直没用,打开看还有一个多月就过期了,但是试着激活了一下发现是从激活日开始算起的,还能再用一年,所以现在换成这个了。

升级 macOS Sierra 后 Chrome 打开 HTTPS 的网页出错的问题

升级 macOS 后,Chrome 访问 HTTPS 的网页总是一闪而过一个错误,然后才会加载成功。在网上看到别人说可能和支付宝的服务有关,移除之后就正常了。移除命令:

sudo launchctl remove com.alipay.DispatcherService

更彻底一些的:

sudo rm -rf /Library/Application\ Support/Alipay /Library/LaunchDaemons/com.alipay.DispatcherService.plist ~/Library/LaunchAgents/com.alipay.adaptor.plist -rf ~/Library/LaunchAgents/com.alipay.refresher.plist ~/Library/Internet\ Plug-Ins/aliedit.plugin ~/Library/Internet\ Plug-Ins/npalicdo.plugin

Android App 开发环境和线上环境共存的 gradle 配置小技巧

前段时间考虑过一个问题:Android 开发者在供职公司开发一个 app,但是又需要在下班后使用这个 app 怎么办?一般公司的服务端都会区分线上和线下环境,在开发时使用开发的环境以免脏数据污染线上的环境,但开发环境收不到真实消息的推送,而下班后每次都卸载重装的话感觉又有些蛋疼。今天想到可以用设置 flavor 的方式解决这一痛点,分享一下这个方案的配置过程。