macOS 文件系统的大小写敏感转换

本文介绍如何通过命令转换一个大小写敏感的 macOS 文件系统到非敏感。

感谢 https://github.com/cr/MacCaseSensitiveConversion 提供的宝贵经验,本文主要复述原作者提供的方法。

前不久因为硬盘事故重装了系统,无意重装时无意选择了 Case Sensitive(大小写敏感) 的 APFS 进行格式化。直到昨天安装 Steam 时发现安装后运行不了,查了一下原来是因为之前选择文件系统大小写敏感的原因,然后搜索到了 GitHub 上前文提到的 repo,了解到还有一系列应用比如 Creative Cloud 不能运行,索性晚上按照其提供的方法转换了文件系统格式。总体步骤如下:

Travis 上接受 SDK License

在 Travis 上构建项目时有时会遇到自己设备构建成功了,却在 Travis 上提示某个 component 安装失败,需要接受其对应的 license。在失败时其实已经给出一个地址说明了解决方法:https://developer.android.com/studio/intro/update#download-with-gradle

使用 Git 的 tag 管理 App 版本

Android 应用开发到打包上线经常有这样的场景:需要上线了,打了个包,发现版本号没改;然后改了版本号,再打包,提交。为了方便以后定位版本,我们一般还会在发布后为这个版本打个 tag,这个 tag 会标记我们上线前的最后一次提交。

开启用户鉴权时 Jenkins 触发远程构建时的 403 问题

在开启用户鉴权后使用 GitLab 的 WebHook 来触发 Jenkins 构建时,test 请求就会提示 403 鉴权错误,网上搜索了一波资料,大多都是提示修改一些安全设置或者开启匿名用户的 job read 权限。开启 job 的 read 权限后副作用是任何人都可以查看你在 jenkins server 上的构建任务,这对于位于公网上的 jenkins 实例无疑是不安全的,最后发现最佳的实践方式是通过 Jenkins 的 token 来完成鉴权并向 trigger 的 url 发送请求。步骤如下:

Kotlin 的泛型系统

泛型是静态类型语言中不可缺少的一部分,Kotlin 的泛型定义和使用都类似 Java,但也有一些基于工程实践考虑的优化和改进。

Kotlin 中的属性委托:ValueKit 的实现介绍

RetroPreference 是我之前用 Java 写的一个在 Android 项目里方便使用 SharedPreferences 的小工具,它能像 Retrofit 一样定义一个方便查看和管理的接口,然后通过库提供的方法创建实现这个接口的实例来完成对 SharedPreferences 的操作。很早之前我也用 Kotlin 重写了这个工具,但是基本类型必须有一个默认值这点感觉不是很符合使用者的需求。在学习 Kotlin 的委托属性后,我意识到可以用它更简单的实现这个工具。

Anko 源码阅读笔记:构建 DSL 的基本原理

官方给出这一段 Anko AlertDialog DSL 的例子:

1
2
3
4
alert("Hi, I'm Roy", "Have you tried turning it off and on again?") {
yesButton { toast("Oh…") }
noButton {}
}

这段代码可以构造出一个简单的对话框控件,下面介绍一下这种代码是如何被 Kotlin 解析的。

GitLab CI 配置构建 Android 项目

标准步骤

  1. 配置 GitLab Runner
  2. 添加配置文件。.gitlab-ci.yaml 文件规则 https://docs.gitlab.com/ce/ci/yaml/

可以参考官方提供的文档来试试 https://about.gitlab.com/2016/11/30/setting-up-gitlab-ci-for-android-projects/

源码安装配置 Nginx 记录

debian 官方源中的 nginx 太旧了(1.6.x),想试试开启 HTTP2 和 TCP/UDP 负载均衡试试,需要 1.9 版本以上。换了 backports 的源一些相关模块总是安装不成功(←太菜),所以尝试了从源码安装,顺便体验一下最新的 nginx。

Java 中实例化一个抽象类对象的方式

在 Java 中抽象类是不能直接被实例化的。但是很多时候抽象类的该特点成为一个比较麻烦的阻碍。例如如果我想使用动态代理来给一个抽象类赋予其执行抽象方法的能力,就会有两个困难:1. 动态代理只能创建实现接口的一个代理对象,而不能是一个继承抽象类的对象。为此标准的 JVM 中有一些实现,例如 javassist 可以使用字节码工具来完成这一目的(ProxyFactory)。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×