移动平台的用户标识

在 PC 平台上,一般是用 cookie 识别用户,更进一步(流氓)的有 evercookie,如果用户禁用了 cookie,还可以用浏览器的指纹。这些方法一般都能较准确地识别用户,目前 PC 上看到的个性化广告一般都是基于以上几种方法。 到了移动平台上,情况就大不一样了。首先,第三方 cookie 一般默认是禁用的,然后,cookie 在 in-app 的广告中是没法取到的。这就要求换一种方法。 iOS 平台上情况相对简单,目前 app 都能获得 IDFA (identifier for advertisers),所以一般都是靠 IDFA 来识别用户的。但是需要注意的是,在设置里,用户可以重置 IDFA,让自己对外看起来是一个全新的用户。 Android 平台则相对混乱得多。虽然 Google 提供了 Advertising ID,但是在国内的众多发行版中,Google 服务一般是被阉割的,所以自然没用。其它的有 Android ID,MAC, Device ID 等。stackoverflow 上的这个问题 提供了详细的解答: 调用 TelephonyManager.getDeviceId() 总会返回一个值 带 SIM 卡的 GSM 设备调用 TelephonyManager.getSimSerialNumber() 会返回一个值 所有 CDMA 设备调用 TelephonyManager.getSimSerialNumber() 会返回空值 添加了 Google 账户的设备能取到 ANDROID_ID 添加了 Google 账户的 CDMA 设备 取到的 ANDROID_ID 和调用 TelephonyManager.getDeviceId() 取到的值是相同的 理论上来说 Android ID 是最好的选择,它可以通过下面的代码获取:

Luhn algorithm

身份证号大家都很熟悉,最后的校验位可能取值是 0-9 和 X,其中的 X 一直被大家吐槽的比较多。根据维基百科上的描述,最后的校验位采用的是 ISO 7064:1983,MOD 11-2 算法,由于是模 11,所以有 10 个可能的取值,以 X 代替校验码 10。这其实给身份证号的数据库设计之类的带来挺多麻烦的,明明用数字就能解决的,非得还要加上字母 X。 当年为什么采用 MOD 11-2 算法我们不得而知。但不妨来看相关历史,身份证是 1984 年之后才出现的,也就是说,这个算法是在 1984 年之后才选择的,那个年代有没有出现更合适的算法呢? 今天研究手机的 IMEI 号,发现了 Luhn 算法。这是一个模 10 的算法,所有位数都是数字,被广泛用在信用卡,手机 IMEI 号等的校验位上。这个算法是 IBM 的科学家 Hans Peter Luhn 在 1954 年发明的,1960 年被授予专利。专利过期后该算法被广泛采用,并由 ISO/IEC 7812-1 所描述。 Luhn 算法对校验位的计算过程是这样的: 将 0 添加到待校验的数最后(将校验位设为 0 )。从最后一位(校验位)向左,将 2, 4, 6 等偶数位的数字乘 2,如果结果大于9,那么将它的两个数字相加(例如,原始数字是 8,乘 2 后是 16,需要改写成 7) 对所有数字求和 将上一步计算的和模 10,假设结果是 x,如果 x 等于 0,则校验位是 0;否则,校验位是 10-x Python 代码如下所示,来自这里。

使用 Hugo 搭建静态网站

静态网站生成一般 Jekll 和 Octopress 用的比较多,但是安装部署起来很麻烦。Hugo 是用 Go 语言实现的,安装部署非常简单,一个二进制文件就能用来调试和生成网站。 安装 Hugo 安装 Hugo 可以参考官方文档,主要有以下两种方式: 1. 编译安装 下载安装 Go,Mercurial 和 Git 下载 Hugo 源码并编译 go get -u -v github.com/spf13/hugo 依赖的包都会下载到 $GOPATH/src 下,Hugo 的可执行文件在 $GOPATH/bin 下。 2. 下载二进制可执行文件 从这里直接下载 Hugo 可执行文件 创建网站 参考官方文档 quickstart 如果要在 /path/to 下创建一个叫 site 的网站,需要执行的命令如下: hugo new site /path/to/site cd /path/to/site hugo new post/hello.md git clone --recursive https://github.com/spf13/hugoThemes themes 其中,git clone 这一步耗时很长,网络状况一般的话可能需要一个多小时…… 其实也没有必要把所有的模板都下载下来,只下载感兴趣的模板就行了。比如 hyde 启动服务器 hugo server -t hyde -w 然后可以在浏览器里查看,比如 http://127.