微信小程序文档极致总结
谈谈过去三个月在实验楼的实习经历
这篇文章原本写于实习满一个月的时候,本打算作为阶段性总结,但本人实在是比较懒,一拖再拖,到现在实习已经基本结束了,本该属于我的坑也基本填得差不多了,我也可能要正式迈向我的研究生新生活了。就干脆改成整个实习阶段的总结吧。
与以往大二暑假、在德国交换的时自己主动找的几个实习不同,之前的实习都是我主动投递简历、毛遂自荐。而这次在实验楼的实习确实也是一件巧事,原本还在纠结暑假究竟是回家修整准备读研的事宜、还是找份实习打发一下无聊时间。结果正好在我决定回家的前夕,收到了来自实验楼的工作邀请。心想回家闲着也是闲着,自己正好也是实验楼一个(不算称职)的用户,所以在简短的和 BOSS 磊哥聊了一些工作事项后,就接受了在这里实习。
以前大二那份实习的工作内容异常的简单,每天就是面向 C++ 修各种 bug,写一写无聊的测试,实现各种简单到不能再简单的需求,每天下班前交付代码然后领工资,两个月坐下来没有一点感觉,没收获多少新知识,最大的收获可能就是零花钱。而这次的实习差不多重新点燃了我对新技术的几乎快要熄灭的渴望。
先说说工作情况
做毕设的时候,我总以为我接触过的技术是在是够多了,大大小小的各式各样的技术也不过如此,万变不离其宗,所以只要认认真真读一读文档,没有什么不能解决的问题。
然而事情并没有想象的那么简单,踩了不少坑,总结下来就是太年轻。在实验楼实习的三个月里,倒是接触了很多以前并不在意、也没有需求去了解的技术,比如 Linux 运维、比如 Docker 等等,我甚至为此列了一个长长的 TODO-DONE-LIST,并希望我能够在研究生生涯里把这些内容逐一攻破。
第一个月电脑如实的记录了我的工作状态(部分时候断网没有记录):
每天下来过得还算充实,比起整日待在在学校里、面对昏暗的寝室环境浑浑噩噩效率提高了不少。这次的实习干的事情不多,总结下来其实就是四件简单的事情:
- 十七门 C++/JS/Swift 学习课程
- 一个跨平台的桌面客户端
- 一套基于 ELK 的 Nginx 日志系统
- 一个很挫的 kNN+协同过滤 推荐系统
给博客做了一个桌面客户端…
Guacamole 源码分析与 VNC 中 RFB 协议的坑
今天折腾了一整天 Guacamole,遇到了臭名昭著的坑,且听我一一道来。
简单来说 Guacamole 提供了浏览器端访问的桌面系统的解决方案。Guacamole 提供的解决方案主要由两部分组成:
- 浏览器端基于 HTML5,Canvas 技术: Guacamole Client 的 Guacamole-Common-JS 组件
- Guacamole Client 的 Guacamole Web 组件,
- Guacamole Server 仍然分为两个部分:
- Guacamole Web 服务容器
guacd守护进程与RDP/VNC/TELNET等其他服务进行通信。
下面这张图很好的解释了 guacamole 的架构,出自官网手册:

《高速上手 C++11/14》正式发布
Docker 极速入门教程02 - 镜像与容器管理
这次我们来深入了解一下镜像和容器的管理,不过作为入门教程,我们只打算谈及一些常用的命令,而不去介绍 Docker 的深入原理,具体内容我们放到另一个系列中去探讨。
Docker 极速入门教程系列 (往期)
镜像管理
镜像是容器的一个只读模板,用于创建容器。当容器运行时,需要指定其镜像,当镜像不存在时,就会从 Docker Registry 自动下载。每次创建新的镜像,都会在原镜像上方增加一层,具体的原理在本教程里面不深入讨论,可以在本文后面的深入阅读中查看相关文章。
每一个镜像对应了一个唯一的 ID,同样的,镜像中的每一层也都具有一个唯一的 ID,因此,当从 Docker Hub 中 pull 镜像时也是分层进行下载的。
在上一篇文章中,我们已经提到了一些基本的镜像管理命令:
- docker search: 搜索Docker Hub镜像
- docker pull: 拉取镜像
- docker images: 查看本地镜像
- docker inspect: 查看镜像详情
- docker rmi: 删除镜像
再来看一些其他的常用命令。
Docker 极速入门教程01 - 基本概念和操作
序言
为什么写这个系列
我加入了一家以 Docker 为技术栈核心的公司,如果走出去说自己不会 Docker,就显得有点不合适了。早在大三的时候就已经听说 Docker 技术的火爆,只是当时一心研究 iOS,并没有对此技术有太多在意,到了现在已经不得不研究了。
实习的这几个月,做的事情比较多,每周只能花很少的时间来了解 Docker 这一门技术,这也是我需要花很长时间才能完成这个系列的原因。网上关于 Docker 的资源、教程已经数不胜数,为什么我还要再写这样一个系列。这里面的原因有以下几点:
- 资源再多教程再多,也是别人的。别人写出来的东西是按照别人的思路进行,随着 Docker 技术的发展,我在学习 Docker 这门技术的过程中,发现了当下其实有更好更快捷的路径从新手直接入门整套技术;
- 自己写成了文章之后,才能够发现自己对这门技术究竟还有那些不懂不明白的地方;
- 装逼
为什么读这个系列
这个系列与其他网上的资源相比有以下几个特点:
- 只适用于有 Linux 基本基础的人,有很多教程都尝试向一些 Linux 基础薄弱的人由浅至深介绍 Docker,但实际上他们花了很大篇幅在介绍 Linux 本身上,却忽略了很多 Docker 的重要特性。
- 高速,无废话。Docker 的命令错综复杂,很多的书籍、教程反复针对同一个命令反复介绍,废话奇多。读者需要从中甄别这些无用信息,从而浪费大量时间。
好了,说了不废话还是废话了这么长,开始吧。
阶段性沉默
ELK+Redis 最佳实践
上个月老板让我搭一个日志分析系统,选用了 ELK 作为技术栈,网上的文章较为混乱,前期刚接触的时候查资料踩了很多坑,所以根据我总共一个星期的接触(包括安装和后期运维),大致总结一下我个人的最佳实践。
本文主要内容为:
这张图相信足以证明 ELK Stack 的强大之处了:

架构逻辑
E(lasticsearch) L(ogstash) K(ibana) 本身这里并不做过多介绍。
值得一提的是,为了让整个系统更好的分层,是非常建议引入 Redis 的。Redis 作为一个缓存,能够帮助我们在主节点上屏蔽掉多个从节点之间不同日志文件的差异,负责管理日志端(从节点)的人可以专注于向 Redis 里生产数据,而负责数据分析聚合端的人则可以专注于从 Redis 内消费数据。
同时,Kibana 本身并不具备访问限制,这不是我们期望的,因此可以用考虑用 Nginx 做一层反向代理,并做身份验证。
综上所述,整个 ELK 的架构应该是下图所示的样子:


