2019年总结:柔软的三十岁

xiaohua

为什么说三十是柔软的呢?

柔软这个词,大概是我与小花(图中的猫)的关系开始缓和的时候开始意识到的,之前会一直挑逗它,摸它的肚子与屁股,所以总是被挠被咬,然后我就打它,所以它跟我关系一直不是很好。直到某一天,我开始只摸它的头与下巴,然后给它买吃的,我们俩关系就变得好多了。

Read More

网页视频播放:方案篇

在上篇我们说到,直播协议的介绍,简单回顾下几个技术点: 客户端 / 摄像头:RTSP/RTMP 视频传输:RTSP 转成 RTMP/HTTP-FLV/DASH/HLS/WebRTC 浏览器播放:video.js / flv.js 这篇我们接着来说说具体的实现方案。 方案现成的方案其...

Read More

网页视频播放:协议篇

最近一两周折腾了监控视频的方案,现在把过程中涉及到的知识总结一下,希望对后来的你有帮助。 前言起初是为了客户端可以跨平台使用,但是我们又不想折腾不同平台的 UI 库,Qt 之类的跨平台库虽然不错,只是它的设计太丑,无法入我法眼。这时候 Electron 方案走进了我们的视线:可以用 Web UI,而 Web UI 的设计又有非常多可供挑选,于是,我们就选...

Read More

你得颈椎病了吗

这几周做的东西也比较杂,没有总结什么实质的内容,颈椎病这时候却找上门了,就此机会,来说说这个与技术无关,『轻松一点』的话题。 说起颈椎病,大家应该都不陌生,有个段子说的就是颈椎病是所有工程师的最高级别,是终极归宿,还有的说《颈椎病康复指南》是大家在技术生涯里读的最后一本书,而我就比较厉害了,直接跳过几级,直接修炼到程序员的顶级了。 实际上,我颈椎的富贵包...

Read More

Docker multi-stage builds

今天来介绍一个 Docker build 很有用的特性:Multi-stage builds,即多阶段打包。 前言这个特性很早之前,在 2017 年初的时候就可以使用了。如果你没有用到,很有可能你不需要编译语言,就比如 C/C++/Golang/Java 之类的语言。 现在网上有非常多的教程告诉我们,打包 Docker 镜像...

Read More

如何用 PXE 在一小时内安装完 10 台以上的操作系统

上周折腾了一件事,让我觉得还是有必要把过程记录下来的,方便大家之后也要做这件事的时候,可以节约不少时间。 这件事就是:如何在一小时内装完 10 台以上的操作系统? 以前我们是怎么做的首先我们需要同步一下信息:对于新机器的常见的安装方式,我们需要在 U 盘,CD 等储存上刻一个系统,然后从 BIOS 选择从这些存储上引导启动安装程序,然后按照步骤安装即可。...

Read More

大清王朝最后的领航者:曾国藩

《曾国藩传》这本书放在书架上挺久了,现在终于有时间看了,我用了差不多一周的时间,不快也不慢,一旦我看到感兴趣的内容,都放下节奏慢慢品味,因为,越看才越觉得,曾国藩太牛了。 我看完之后,还在一直回味,这本书本身的写作水平好坏先不论,各种评论中也有人吐槽作者的写作风格,我看到里面居然有星座这个说法的时候也是很懵:这是写历史人物的,用这样不严谨的文字略显低下了...

Read More

如何实现一个安全的 SaaS/PaaS 服务

这篇文章是接着上篇 SSL 界中 Linux:Let’s Encrypt 写的。(是的,这周灵感不够 🙈 ) 功能上次说到,如果我们实现的 SaaS/SaaS 服务中的客户需要自定义域名,我们需要给客户提供相应的功能。这个功能大致如何运作? 客户在 DNS 解析中,设置 CNAME 到我们给他提供的唯一子域名上 (注意,之后客户可以直接通过...

Read More

SSL 界中 Linux:Let's Encrypt

今天我们来说说造福人类的 Let’s Encrypt(以下简称 LE)。为什么说它造福人类?因为免费。 我之前在划一划 HTTPS 以及 SSL/TLS 的重要知识点说过,各路权威 CA 机构通过颁发证书来获利,然后保证服务质量,不去作弊,获得长久的可持续发展。只是,这同时也在一定程度上阻碍了 HTTPS 证书的大范围推广。而现在,LE 通过免...

Read More

Golang 中饱受争议的 context

今天来说说 Go 中,一个存在争议的包:context。官方在博客中给了一个例子,说的是在 Go 实现的服务中,对于每一个请求,都会有一个 goroutine 去处理,然后这些处理的地方,又会启动一些额外的 goroutine,去请求数据库,或者其他 RPC 服务,这些请求的过程中,它们会携带一些与单个请求相关的数据,如截止时间、认证信息,而当超时或者被客户端取消的时候,goroutine 应该快速释放它所占用的资源,好让其它请求去使用。1

做过微服务的同学们,听起来有点熟悉对不?这说的不就是微服务的那套东西么:比较明显就是分布式追踪(忘了的同学可以看看我之前写的)以及熔断,几乎每个微服务都会用到,而 Golang 实现这些东西的基础,便是 context。

Read More

项目质量的前哨部队:Git hooks

我在之前持续交付的实践与思考中提到过,为了提高项目的内建质量,我们需要尽可能早地发现以及解决问题,这对于任何一个开发团队来说,都是非常重要的事情,尽管它不紧急。目前我们在开源世界中有了各种各样的工具来帮助我们减少错误、提高项目代码的质量,利用它们,可以让你把这件事情真正做好。

Read More

面试大招之系统设计

在我们团队经常进行的面试中,往往会用关于算法、数据库与架构设计之类的问题来考察候选人的能力。不过我一般不会直接问,而是将这些问题安排在系统设计里面,或者也可以叫做情景题。

Read More

Golang 中的异步任务队列

在一些常见的场景中,如果遇到了某些请求特别耗时间,为了不影响其它用户的请求以及节约服务器资源,我们通常会考虑使用异步任务队列去解决,这样可以快速地处理请求、只返回给用户任务创建结果,等待任务完成之后,我们再告知用户任务的完成情况。

对于 Golang,我们可以通过 Worker pool 异步处理任务,在大多数情况下,如果不在意数据丢失以及服务器性能足够,我们就没有必要考虑别的方案,毕竟这样实现非常简单。

接下来我们先来说说如何用 Worker pool 解决异步任务的问题。

Read More

OKR 实践

最近看完了《OKR 工作法》以及《这就是 OKR》,再加上团队实践 OKR 有小段时间了,趁着热度还在,赶紧总结下。 顺便简单评价下这两本书,《OKR 工作法》整体不错,用茶叶商的故事娓娓道来,内容也很有指导性,而《这就是 OKR》整本书最有价值的地方就是它的附录资源,书的内容粗读即可。 简介OKR 就是 Object 与 Key Result 的缩写,...

Read More

Golang validator 详解

在 Web 应用中,有一块内容非常重要,却很容易被我们忽略:参数验证,忘了之后常常会给我们造成大量的处理错误问题,甚至直接造成应用崩溃。之前我在 你的团队需要更好的 API 文档流程 提到过,Joi 的验证非常好用,可以帮助我们验证客户端用户的上传数据以及返回数据,而在 Golang 中,我们该如何做呢?

Read More