【精】 学历史有什么用

之前在朋友圈发我学中亚地区历史的时候,碰到朋友问的最多的问题就是这个了:学历史有什么用。
凡是在朋友圈问我这个问题的,我基本上都是一句话:互联网没有增量了,多学点历史没坏处的。因为手机上解释的多了,我打字累,再加上别人也不一定愿意听,可能纯粹就是随便问一句。

GitHub 开始阻止被制裁国的开发者使用

上周五,国外新闻网站 ZDNet 发表了一篇报道 GitHub与跟世界贸易摩擦国的程序员关系的文章 —— GitHub starts blocking developers in countries facing US trade sanctions(GitHub 开始阻止被制裁国的开发者使用)。

中国的开源项目正在破坏 GitHub 榜单页

近日一名国外开发者(Balazs Saros,下简称 Balazs)在个人博客发表了一篇看似是在声讨中国开发者的文章,标题起得有点唬人 —— Chinese repos are ruining the Github trending page(中国的开源项目正在破坏 GitHub 榜单页)。

Leader 的自我修养 —— Tech 与 Team

用一句话概括,本文讲的就是:怎样打造一个开发团队。

Facebook Libra,数字货币离我们很近吗?

Libra的使命是建立一个简单的全球货币和金融基础设施,为数十亿人提供支持。
互联网和移动宽带的出现使全球数十亿人能够获得世界的知识和信息,高保真通信以及各种低成本,更便捷的服务。这些服务现在可以使用来自世界上几乎任何地方的40美元智能手机进行访问.1这种连接通过让更多人能够访问金融生态系统来推动经济赋权。通过合作,技术公司和金融机构也找到了有助于提高全球经济能力的解决方案。尽管取得了这一进展,但仍有大量世界人口落后 - 全球仍有17亿成年人不在金融体系之内,无法使用传统银行,即使10亿人拥有移动电话,近5亿人拥有互联网接入。

如何在 Android 代码中下毒

这其实是前几天看到 B 站代码被开源后的一个感想,为什么要冒这么大风险去做这事,活着不好吗?到底是 996 让你疯狂?还是不给涨薪还克扣工资?或者黑了你的蔡徐坤?鬼知道为什么会有这想法。 然后脑子里就冒出了一个更奇怪的想法,如果我要在代码里下毒,要怎么做?

使用 Ngrok 实现内网穿透

最近在做 Server 开发,需要将一个内网的服务暴露出去,使其在家也能访问到。

Kotlin 1.3 发布,协程正式版发布啦

从 Kotlin 1.3 开始,协程将进入稳定状态。此后不再会被标注为`experimental`,官方也会提供相应的工具帮助开发者完成迁移工作。
Ktor,这个库的 API 已经完善,期待大家的使用体验和反馈。Ktor 是一个基于协程的框架,使用它我们可以优雅的构建 Web 应用、Http 服务、移动应用和网页。

重新理解创业:失败并不可怕

在一个新点子冒出来的时候,我们首先要甄别这个是什么级别的思考。如果只是把事情从 9 分变成 9.5 分,这就是花很大力气去做小数点后面的事,没有太大的用处。可是,现在大多数公司都在努力做小数点以后的事。

Android 将 module 导出为 jar 最新版

今天碰上公司 Nexus 网络服务挂了,结果 aar 没办法 upload 。而偏偏遇上工程遗留问题,不支持 aar 直接依赖,只能想办法导出 jar 包依赖。所幸,操作还比较简单,但是这种方法只适合于每月资源引用的代码,而且还不支持传递依赖。

Android Studio 3.2 更新重点

版本帝最近更新的频率变低了,自从 2018 年 Google I/O 大会 Android Studio 宣布更新后,Google 精炼和完善了 20 多项新功能,并集中力量提升 Android Studio 3.2 稳定版的质量。

Android 十年,还有哪些可以做的

这篇文章是我在【2018安卓巴士开发者大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 独家发布在小专栏平台,希望能给我专栏订阅读者里买不到票参加大会的朋友带来帮助。

IPv6 地址格式

IPv6 地址大小为 128 位。首选 IPv6 地址表示法为 x:x:x:x:x:x:x:x,其中每个 x 是地址的 8 个 16 位部分的十六进制值。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。

addOnDrawListener 方法的兼容性问题

当一个视图树绘制时调用`OnDrawListener`的`onDraw()`函数。但是这个方法在 `Android8.0` 之前有个坑:`View` 在 `attach` 到 `window` 之前调用 `getViewTreeObserver().addOnDrawListener()` 将不会进入回调。因为`ViewTreeObserver`的`merge()`方法中没有处理`OnDrawListener`详见源码

如何成为优秀的技术主管?你要做到这三点

「技术主管」是开发团队中的某位程序员需要对一起创建系统的整个开发团队负责时所承担的角色。通常他既要对最终交付的软件系统负责,另外也会像一个程序员一样去开发实现系统。
一个技术主管的 60% ~ 70% 的时间可能花在了开发任务分解分配、开发实践、技术架构评审、代码审核和风险识别上,而余下的 30% ~ 40% 的时间则花在为了保障系统按时交付所需的各种计划、协作、沟通、管理上。和团队管理者不同的是,技术主管的大部分管理工作都是针对具体研发任务和技术事务的。

Android P 加载 dex 失败

`dex2oat`是 `ART` 虚拟机必备的一个组件,主要用来把安装的 `apk` 和动态加载的 `dex` 等文件转换成 `oat` 文件.主要是由于从一开始, `dex2oat` 就被设计为系统内部使用的编译部署工具.所以在高版本上生成格式发生了变化.所以再去用 `BaseDexClassLoader`或者是`DexClassLoader`、`PathClassLoader`等加载的时候就会出错.

Android 正则判断手机号(包含网络运营商)

Android 正则判断手机号, 2018年最新, 包含网络运营商

Mac上更新Ruby环境

想要升级Mac上自带的Ruby环境,需要使用到RVM。

Android 获取 IP 地址

开发中经常会需要判断当前是否连接网络, WiFi 或 移动数据连接判断的需求。

AndroidStudio更换xml默认的布局

自从 AndroidStudio 到 2.3 了以后,新建一个 Activity,默认的布局就从以前的 `LinearLayout` 变成了 Google 强推的 `ConstraintLayout`,但其实这个布局是可以被修改的。

Android Native Crash 收集

在 Android 平台上,Native Crash 一直是比较麻烦的问题,因为捕获麻烦,获取到了内容又不全,内容全了信息又不对,信息对了又不好处理。比 Java Crash 不知道麻烦多少倍。本篇核心讲解了自己实现一个 Android Native Crash 收集的方案步骤,重点问题的解决办法。

Android 通过 APT 解耦模块依赖

Android APT 的新玩法,生成类的特殊加载方式。在 Android 多 module 工程中使用 APT,会出现类冲突问题,如果你也碰上这种问题,希望本文对你有所帮助。

套路博弈背后的代码

每个人都会沉迷在自己的戏里,就看什么时候观众会看不下去而叫醒你。——《说故事的人》

Android 模块化平台设计-讲稿

这篇文章是我在 2018【携程技术沙龙移动技术专场】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 希望能给买不到票参加大会的朋友带来帮助。
演讲文稿版内容更精细,没有分享时语言的赘述和过多的废话,而且包含了很多分享时没有讲的内容,包含PPT下载。(如下载链接过期可加我微信)

《Android模块化平台的设计》PPT

目前国内对Android领域的探索已经越来越深,应用规模也越来越大,为了降低大型项目的复杂性和耦合度,同时也为了适应模块重用、多团队并行开发测试等等需求,模块化在 Android平台上变得势在必行。
本次分享将为大家介绍如何将完整项目模块化,改造后如何更快速的与使团队适应开发节奏;怎样优雅的移除模块间耦合,可以在不改动代码的情况下做到模块的动态增删;以及模块的开发、构建、更新、提测、发布流程化建议。

掌控 Android Gradle

目前国内对Android领域的探索已经越来越深,不少技术领域如插件化、热修复、构建系统等都对Gradle有迫切的需求,不懂Gradle将无法完成上述事情。所以Gradle必须要学习。