Bean Deng

Shanghai
Bean Deng
2021 年伊始

日志

2021 年伊始

> 2021年01月03日 多事之秋的 2020 年终于结束了,这一年最大的关键词可能就是“新冠疫情”了,全民抗疫果真成为了常态,戴口罩也成了大家出门的一种习惯。 回顾一下年初的目标: * [ ] 去 15 个不同的城市 * [ ] 去健身房 100 次 * [ ] 减脂至 70kg 以下 * [x] 完成 10 篇文章 / Vlog * [x] 收入 > 支出 * [ ] 平均睡眠时间 7 小时 年初定下的目标,只完成了两项,其他的都没能完成,倒是年初疫情在家办公的时候,有大把的时间,把前年的目标「荒野大镖客」通关了。去年完成的这两项,疫情也有功劳,没完成的目标或多或少也可以甩锅给疫情。不管怎么样,今年的疫情,给了我们很多的借口,工作中我也看到很多人拿疫情当借口:“今年因为疫情的影响,业绩没能达到目标”;“因为疫情的影响,

基于 GitLab CI 和阿里云 k8s 的持续交付解决方案

DevOps

基于 GitLab CI 和阿里云 k8s 的持续交付解决方案

> 2020年12月27日 今年对于我个人而言,在 DevOps 上的最大收获,莫过于摸索了这套基于 GitLab CI 和 k8s 的持续交付解决方案,其实原理都很简单,在我去年的方案里又做了改进,实现了基于 git tag 的触发方式,并且把原先的本地打包推镜像改为在 GitLab Runner 上打包推镜像。 这套解决方案大致流程是这样的: 1. 推送代码,在代码中配置 gitlab-ci.yml 2. 推送 tag,触发 GitLab Runner 编译 docker 镜像,并推送至阿里云镜像仓库 3. 在阿里云 k8s 上基于镜像仓库创建应用,并创建重新部署的触发器,在镜像更新时触发该触发器 这样,以后每次推送新的 tag 上去,就可以实现自动打包&

安卓 WebView 图片离线缓存方案

技术

安卓 WebView 图片离线缓存方案

有这样一个项目,UI 渲染全部由 WebView 来完成,套个安卓的壳,壳子里面做一些和硬件交互的功能,例如摄像头、麦克风等。WebView 加载的页面走的本地打包的文件。不过 WebView 中的图片等资源走的是网络访问。 为了减少网络访问的流量,以及提升在弱网络或无网络情况下的体验,需要对网络访问的图片进行本地缓存。 原先采用的是 WebView 自带的缓存机制来实现,但并不可靠,于是需要通过拦截网络请求,通过本地缓存干预的方式来实现。具体原理如下: 1. 通过 shouldInterceptRequest 拦截请求,判断是否是访问网络图片,如果是则进行干预 2. 取请求地址的 md5 值加图片文件扩展名组成的文件名,拼接 cache 目录获得一个本地资源地址,判断该资源是否存在,若存在则直接返回该资源 3. 若该资源不存在,说明是首次访问,则将该网络图片下载到该地址下,并返回该资源 具体代码如下: import android.content.Context import

白香词谱

诗词

白香词谱

白香词谱 (清)舒梦兰 > 《白香词谱》是清朝嘉庆年间靖安人舒梦兰编选。词谱选录了由唐朝到清朝的词作品共一百篇,凡一百调。这些调式都是较为通用的,小令、中调、长调均有。为便于初学者,每调还详细列注平仄韵读,成为真正的词谱。 《白香词谱》同时又是一本简明词选。所选的词都是比较著名的或者艺术性较高的,好些是历久传诵不衰的名作。它兼收并蓄,不主一家,既收婉约,也收豪放,是一本不可多得的好选本,也是一本较佳的词学入门读物。 整理于 2008年8月 【○平声;●仄声;⊙可平可仄;△平韵;▲仄韵】 一、菩萨蛮·闺情 李白 平林漠漠烟如织,寒山一带伤心碧。暝色入高楼,有人楼上愁。 ⊙○⊙●○○▲,⊙○⊙●○○▲。⊙●⊙○△,⊙○○●△。 玉阶空伫立,宿鸟归飞急。何处是归程,长亭更短亭。 ⊙○○●▲,⊙●⊙○▲。⊙●●○△,⊙○⊙●△。 二、忆秦娥·思秋 李白 箫声咽,秦娥梦断秦楼月。

如何成为一名全栈开发工程师

技术

如何成为一名全栈开发工程师

什么是全栈开发工程师 “全栈”这个概念最早来源于 Facebook 工程师 Carlos Bueno 在 2010 年底写的一篇文章:The Full Stack [http://carlos.bueno.org/2010/11/full-stack.html]。 作者认为全栈是一个通才,能够自己创建不平凡的应用程序。 他也指出,没人能够熟悉所有方方面面,但作为一个全栈,能够看清每个栈的上下之间是如何运作的。 我们再看看百度百科的定义:全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。 百度百科的定义稍微有些狭义,全栈的技能远远不止前端与后端,但在大多数情况下,熟练掌握前后端就可以成为一名别人眼中的全栈。 在我的理解中,全栈开发工程师除了传统大家理解的前端、后端、移动端之外,还必须具备设计与运维的技能。若不具备这两项技能,还是没办法独立完成一个产品的,在设计与运维阶段,还是得依赖于其他人,或者说无法更独立、更高效地完成一个产品。 全栈开发工程师存在的意义 我们了解了什么是全栈开发工程师,那么,为什么会存在全栈开发工程师呢?

k8s 上利用 cert-manager 自动签发 TLS 证书

阿里云

k8s 上利用 cert-manager 自动签发 TLS 证书

> 2020年02月27日,天气晴 很多博主的 https 证书经常容易忘记更新,虽说证书过期前都会有邮件提醒,但是万一确实忙得没时间去处理,忘记了,就会出现证书过期的情况了。 之前在服务器上自己搭博客服务的时候,用 Let's Encrypt 来自动创建并续签证书,确实省了不少事。 在我的博客部署到 k8s 之后,就一直用的一年一签的免费证书,每年更新一次,也不算特别麻烦,但是总归不够高端,我又怀念起了 Let's Encrypt。 Let's Encrypt 是个好东西,k8s 也是个好东西,两个好东西怎么结合呢?搜寻了一番确实有方案,经过几天的尝试,终于弄好了。花了几天是因为第一天因为有个粗心导致的问题,导致搞了好久没成功,休息了几天再次尝试,才找到问题。 有关 k8s 的基础知识,这里不做赘述,网上教程很多,

有生之年系列之『荒野大镖客』

游戏

有生之年系列之『荒野大镖客』

> 2020年02月16日 去年我玩这个游戏的时候,还是看到人想干就干,看到能搜刮的财物就搜刮。但是玩到后面,到了第六章的时候,突然想让亚瑟做个好人,能不干人就不干人,欠债的也都免除了,帮别人做事,别人给你的传家宝也拒绝了。 大镖客这部游戏,刚出来的时候,媒体评价非常高,几乎所有游戏测评机构都给的满分的评价,我当时买 PS4 也是为了玩大镖客才买的。买回来之后玩了一段时间后,公司项目一直很忙,没有大把的时间沉浸其中去玩,偶尔陆陆续续上去骑骑马、打打猎、钓钓鱼,主线基本没有动力再推进下去。再后来大约有一年的时间,连 PS4 都懒得打开了,几乎弃坑。 直到这次的肺炎疫情,让我有大把的时间在家,一口气玩了几天,白天儿子会干扰我,只能等他睡着了玩,在他睡午觉的时候玩一会儿,晚上睡着后熬夜玩,大概每天到三四点。终于完成了 2019 年未能完成的目标:通关「荒野大镖客」。 在第六章的末尾,和艾比盖尔辞别之后,That's The

批量修改阿里云 OSS 的 ACL 权限

技术

批量修改阿里云 OSS 的 ACL 权限

> 2020年02月15日 oss-browser 是个好工具,但是在修改 ACL 权限上比较蛋疼,只能单个文件设置,不支持批量设置,这在某些默认 ACL 权限为私有的 bucket 上,需要批量设置某个目录为公共读时,会比较不便。 经过搜索,阿里云官方的 ossutil 工具可以用来解决这个问题。 下载(以 Mac 系统为例) curl -o ossutilmac64 http://gosspublic.alicdn.com/ossutil/1.6.10/ossutilmac64 chmod 755 ossutilmac64 ./ossutilmac64 config # 按照提示填写相关配置,参考https://help.aliyun.com/document_detail/120075.html

2019 年总结暨 2020 年展望

小结

2019 年总结暨 2020 年展望

> 2019年12月31日 凌晨 2 点 不知不觉,又独自在电脑前工作到深夜。 肚子早已咕噜噜在叫,容我先去搞点吃的。 没有什么管饱的东西,冰箱里找了两杯味全的酸奶。 终于忙完了手头的工作,把之前自己的一些外包项目全部迁移到 K8S 上了,阿里云即将停止对 Swarm 的支持,最后一刻完成了迁移。 又到年底,是时候写点小结了,虽然这会儿的时间点有些晚,但也只有这个时候,夜深人静,才得空。 回顾去年底定下的 19 年目标,完成了大半: * [x] 出国旅游一次 * [ ] 锻炼减肥,目标减到 70kg 以下 * [ ] 荒野大镖客通关 * [x] 平均睡眠时间达到 6 小时 * [x] 完成 10 篇可发布的文章 出国旅游的目标,19 年超额完成了,去了趟泰国,去了趟韩国,花了不少钱。

Docker 同一域名下多个 Registry 保存凭证的方式

技术

Docker 同一域名下多个 Registry 保存凭证的方式

> 2019年12月01日,天气小雨 阿里云的容器镜像服务是个好东西,配合在阿里云上容器服务,速度非常快。 但是阿里云的容器服务不支持自定义域名,都是在同一个域名下,通过不同的 namespace 来实现的。当需要管理多个账户下的不同 namespace 的时候,Docker 默认的认证存储方式就不太适用了。默认的 ~/.docker/config.json 中的 auths 是根据域名来区分的,会出现登录了这个 namespace 之后,另一个 namespace 认证会失效的情况。经过一番搜索,发现可以通过 docker --config 来实现。 通过如下方式来创建一个名为 config-a 的配置 docker --config ~/.docker/config-a login --username=config-a-username registry.cn-hangzhou.aliyuncs.com 之后 push