blueyi's notes

Follow Excellence,Success will chase you!

首先 Docker 是由 go 语言编写,基于 Linux 容器技术(LXC)、Namespace、Cgroup 和 UnionFS(联合文件系统)等技术的轻量级操作系统虚拟化解决方案。

对于 docker 的概念,可以简单理解如下:

  • 镜像(Image) 类似于虚拟机的快照,它是只读,可以以镜像为模板创建容器,在容器中的更改不会影响到原镜像。实际镜像是 UnionFS 的层级文件系统。
  • 容器(Container) 类似于轻量级的虚拟机,由 docker 镜像实例化而来,docker 推荐一个容器运行一个进程,可见其轻量程度。
  • 注册服务器(Registry) 提供在线存放 docker 镜像的在线服务,可以理解为 github 所提供的 repository 作用,当我们使用 docker run 运行一个本地不存在的镜像时,默认情况下 docker 会从 docker 官方的 registry 拉取该镜像,然后创建并运行一个容器。
  • Dockerfile 可以理解为用于构建镜像的命令和设置组合

本文将从安装开始,记录docker日常使用的一些命令、问题及深一点的理解

Read more »

YUV 数据格式概览

YUV 的原理是把亮度与色度分离,使用 Y、U、V 分别表示亮度,以及蓝色通道与亮度的差值和红色通道与亮度的差值。其中 Y 信号分量除了表示亮度 (luma) 信号外,还含有较多的绿色通道量,单纯的 Y 分量可以显示出完整的黑白图像。U、V 分量分别表示蓝 (blue)、红 (red) 分量信号,它们只含有色彩 (chrominance/color) 信息,所以 YUV 也称为 YCbCr,C 意思可以理解为 (component 或者 color)。

维基百科上的 RGB 转 YUV 的公式能更好的反应 YUV 与 RGB 的关系,以及为什么称为 YCbCr:

Y 中含有三元色色信息,且有较多的 G,所以他们一起可以显示出全彩的图像。
很显然我们可以想到是不是会有 YCgCb、YCgCr 等,针对不同的应用场景,也确实有相关应用研究。

如下图,一张从上到下分别为原图、Y、U 和 V:

采用 YUV 而不是使用 RGB,既有历史原因:为了兼容老式黑白电视,因为 YUV 如果只输出 Y 就成了黑白图像了。也有 YUV 自己的其他优点,例如可以根据需要,采用特定的 YUV 存储格式,以降低祼码流的空间占用。

Read more »

Windows 下的多线程中线程锁是通过CRITICAL_SECTION实现,用以保护用户数据,即当串行代码断执行到该部分时,操作系统将告知下一来执行到此处的线程等待,直到上一个线程离开被保护的代码断,从而通过将需要访问数据的部分放在该代码段来保护数据被多线程访问时的一致性。

Read more »

生成coredump

当程序运行出现如下错误时:

1
Program terminated with signal 11, Segmentation fault   (core dumped).

系统会提示有coredump产生,但通常我们在系统文件夹下并找不到core文件,是因为系统设置产生core文件大小为0,也即不会产生,所以我们这里可以做一些简单的设置:

设置core文件产生在当前目录,%e表示产生core文件的程序名,%p为pid号:

1
echo "core.%e.%p" > /proc/sys/kernel/core_pattern  

查看当前core文件设置的大小:

1
ulimit -c

设置core文件大小为无限制:

1
ulimit -c unlimited
Read more »

关于动态链接库和静态链接库的区别可以参考另一篇笔记,其实也就一句话:静态链接库在编译期加载到相应的编译目标中(编译后不再需要),而动态链接库是在运行期由执行目标进行调用(每次运行都需要)。
Windows下动态链接库以后缀.dll标识,Linux下的动态链接库命名为libxxx.so,其中xxx为库名称。

Read more »

GTest简介

GTest是Google官方团队开发的开源的C++单元测试框架,地址为:https://github.com/google/googletest。该地址下同时有一个名为googlemock的项目,Google Mock可以理解为Google Test的辅助测试框架,Google Mock可以用于实现一个模拟类(mock类),可以用于完成需要接口交互但相应的类又没有实现的测试。本文不涉及Mock,以后有空了再追加Google Mock的使用。
使用Google Test可以实现:
1、测试应该是独立并且可以重复的。
2、测试应该组织良好,能够清晰的反应出测试代码的结构。
3、测试应该是可移植和可利用的。
4、当测试失败时,Google Test将会提供尽可能多的测试信息,并继续后面的测试而不是结束测试。
5、Google Test会跟踪所有用户定义的新测试,而不需要用户一一再去调用它们。从而将测试人员从繁杂的测试用例调用中解放出来,将更多的精力关注中测试本身上。
6、测试实现起来很快,因为Google Test框架能够在测试用例之间共用资源,并且它们之前还不会相互依赖。

Read more »

tmux主要的功能有两点:

  • 终端利用,可以在一个terminal开启多个shell的session,这样就不需要vim一个terminal,命令又要需要一个,其他服务还要再开一个了。
  • 断线保证任务在后台继续执行,以及当你上线后保证原来打开的多个窗口与断线之前完全一样。以后就不用再使用screen了
Read more »

关于Makefile的编写和make命令的简单应用,快速了解Makefile的编写规则,更多功能将在以后的使用中慢慢增加。

Read more »

公司里面通常都会为了信息安全而要求个人电脑通过公司的根证书访问SSL加密的链接,如果系统里面没有根证书不管是浏览器还是需要访问SSL加密网络的系统命令都会出现证书相关错误。虽然这些证书错误都可以通过其他一些设置绕过去,但还是直接设置一下系统根证书更方便,一劳永逸(自己公司,忽略安全性)。

Read more »

普通用户无法运行docker命令

需要将用户添加到docker的用户组中,docker在安装完成之后会创建一个名为docker的用户组:

1
$ sudo usermod -aG docker your_username

记得重新登录后生效

无法连接docker服务器下载镜像,或者连接很慢

由于众所周知的原因,需要使用相应的国内镜像,不同的docker版本修改镜像地址的方法不一样,参考提供的方法,当然它家提供的镜像也很好用(2017/10/14)。
Docker版本在1.12或更高:
创建或修改/etc/docker/daemon.json

1
2
3
```

Docker版本在1.8与1.11之间,Ubuntu下修改文件`/etc/default/docker`,我的docker版本为`1.13.1`:

DOCKER_OPTS=”–registry-mirror=http://your_addr.m.daocloud.io

1
2
如果之前DOCKER_OPTS中就有配置命令了,直接将上面的配置命令跟在后面即可。
然后重启docker服务即可:

sudo service docker restart

或者使用**阿里云提供的docker镜像也很好用**

### docker国内可用的加速镜像

* 官方国内镜像站  : `https://registry.docker-cn.com`
* 网易docker镜像站: `http://hub-mirror.c.163.com`
* ustc的docker镜像: `https://docker.mirrors.ustc.edu.cn`
* daocloud镜像    : `http://{your_id}.m.daocloud.io`
* aliyun的镜像    : `https://{your_id}.mirror.aliyuncs.com`  **重点推荐**
0%