0%

Preface

main

为什么有些人就是聪明, 怎样才能更聪明?

这个问题从孩提时可能就已经困扰着我们. 最近读的书: Learn more, study less^1, 提出了整体性学习概念(Holistic Learning), 并从学习策略(为什么采用整体性学习)到学习技巧进行了全面阐述. 解决了自己的一些疑惑/片面认知,也系统的改进了我的学习方法.

作者打小就是聪明人, 更难能可贵的是他反思了自己的学习方法,思考为什么自己的学习远比一般人高效, 并系统总结. 他的惊人壮举是用自己的方法,一年内学完了33门MIT课程(一般需四年学完)^2, really impressive.

非常喜欢这本书, 读了4, 5遍,也做成了思维导图,分享给大家.

我们不必成为最聪明的人,只需要比过去的自己更聪明, keep improving.

阅读全文 »

Preface

错误处理是程序设计的重要环节,理想的错误处理应为开发人员提供详细的context,并记录日志;它排查问题的重要信息源。并能为用户提供恰到好处的信息: 适当抽象,隐藏程序细节。最好能提供解决建议,或者reference id, 协助开发人员缩小排查范围。

特别的, 如何在HTTP server中建立正确的error处理机制, 并能自动生成符合HTTP语义的response呢?

本文提出一个简单解决方案: 提供error的stack trace, 并能将error转换为HTTP error.

阅读全文 »

Preface

在之前文章讲述过如何在Golang中进行TDD,相信大家也听说过BDD(Behavior Drive Development), 和TDD仅差第一个单词: 由Test换成Behavior, 这个代表什么? BDD和TDD看着很类似,都是test case first,然后实现可以通过满足test case的代码,那它和TDD关系如何,区别在哪?在Golang中怎么进行BDD实践呢?我们一一道来。

阅读全文 »

Preface

Package management是现代语言中非常重要的一环,我们也许已经开始用Go module管理package dependency,但在Go1.11之前,Golang官方并没有成熟的依赖关系系统,只有go get可以使用。
在已经有了比较流行的解决方案:govendor, godep情况下,是什么使得Golang认为有必要推出module呢?module和这些”准官方”的solution比起来又有什么优势呢?

探索这些问题能帮助我们更好的理解Go Module,同时不仅仅应用于Golang,了解Module的机制其实让我们有机会了解一类通用问题的解决思路: dependency management(如Ubuntu中的apt-get),体会为什么如Russ Cox所说: least version selection会是解决依赖问题的最优方案。

这篇文章也是对Russ Cox的Gomodule系列文章[^1]阅读的一个总结,大家感兴趣的话可以看看,非常深刻,会让你对Go Module的理解更上一个level。这篇文章只谈Go module的背景,理念,解决的问题。

阅读全文 »

背景

我们知道在K8s中,service用来abstract一组pod:意味着当我们想访问一组pod时,只需要直接访问这个service,service会自动帮我们挑选好一个pod,非常方便。

比如我们有一个名叫tiles-app的Service:

1
2
3
4
5
6
7
-   kind: Service
apiVersion: v1
metadata:
name: app-svc
spec:
selector:
component: app

在程序中我们可以用service name作为域名访问对应的service

1
http://app-svc/my/path/...

Service是K8s的抽象术语,它背后必然是借助经典的Linux/网络技术来实现。理解实现方式能加深我们对K8s系统的了解,而且我们可能也知道在K8s中,有DNS运行,DNS我们很多人对其的认知停留在name到IP地址转换,K8s为什么要用到DNS,这个内部DNS又和我们广域网上的DNS有什么关系呢?

前段时间在组内做了一次关于K8s内部服务发现及DNS的分享,这里做下简单的总结。

阅读全文 »

Preface

在K8s中,我们需要在很多地方映射端口,如

  • Container port
  • Service port
  • Node port

常常会带来疑惑,在这里我们尝试梳理一下有关container, K8s port的方方面面,

阅读全文 »

Preface

在生活中,常会遇到根据优先级分配资源的问题,简单讲就是插队:

  • 登机: 根据舱位决定登机顺序,头等舱/商务舱先登机,不受到达顺序影响
  • 银行: VIP优先获得服务
  • 急诊室: 根据病情严重程度决定就诊顺序

等等,在开发中,需要用到优先队列解决排队问题,这是一种非常有用的数据结构。

c++内置优先队列可以直接拿来用,如:

1
2
3
std::priority_queue<int> pq;
pq.push(2);
pq.pop();

因为Golang中没有泛型支持,实现heap有点tricky,我们来一起看看吧。

阅读全文 »

Preface

在日常工作学习中,经常会冒出很多想法记到todo list中,如抽时间看的文章,研究的开源项目,想要写的blog。之前会都记录在个人笔记里(markdown),笔记会同步到github。

用文字的方式来记录,管理todo list,有很多drawback:

  • 一个大文件来记录事项和包含的细节,杂乱无章
  • 不可视化,无法看到过去完成的条目,缺少完成任务的正面反馈(要知道完成一项具体任务带来的满足感符合人类天性)
  • 无法方便的附加截图等。

Github提供了project board, 实现了kanban board的功能,用来管理自己的todo绰绰有余。

设置好之后,现在每天一到办公室就会先看自己的project board,之前杂乱的todo list变成可视化条目,完成小任务带来的成就感也变成我一天中期待的事。而且在使用过程中,也感到自己speed变得smooth起来,而且可视化使得制定和实现周目标变得更容易。同时其很好的集成了github的一些功能,实现了基本的自动化,让我们就来看看它是如何工作的吧。

阅读全文 »

Preface

Kubernetes(K8s), 被成为云原生操作系统,可谓是当下最火的技术之一, 同时也是容器编排的实际标准。Devops文化的流行,又对其传播起到至关重要的推动作用。

由于最近在做搭建K8s集群的任务,也算是对K8s的使用正式入了门。实话说,K8s的学习曲线并不算平坦,概念繁多,其出色的松耦合设计在一定程度上又加剧了理解的复杂性。众多的技术术语往往搞得初学者一头雾水,面对分门别类的官方reference又不知让人从何下手。

不过官方reference从来都不是初学者的好帮手,好比初学英语,我们也不能靠一本字典迅速取得突破。这时一本好的教材就显得尤为关键,这里我推荐的一本书便是 _Kubernetes up and running_, 属于O’REILY非常经典的up and running丛书,继承了系列的简约明快的风格,配合书中一步步可重现步骤(书提供配套代码),快速帮初学者建立起基本概念,以及通过实践加深对知识点的理解。而且此书的作者之一是Kelsey Hitower老师,鼎鼎大名的K8s布道者,也是Kubernetes the hard way的作者(目前已收获近18000 stars)。

阅读全文 »