blueyi's notes
http://notes.maxwi.com/icon.png
Follow Excellence,Success will chase you!
2017-12-21T08:31:54.000Z
http://notes.maxwi.com/
blueyi
Hexo
Docker run命令参数
http://notes.maxwi.com/2017/12/21/docker-run/
2017-12-21T08:31:54.000Z
2017-12-21T08:31:54.000Z
<p><code>docker run</code>应该是我们日常使用docker中最常用,也最重要的命令。<br>命令格式如下:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run [OPTIONS] IMAGE [COMMAND] [ARG...]</span><br></pre></td></tr></table></figure>
python pip源配置
http://notes.maxwi.com/2017/12/19/python-pip-conf/
2017-12-19T08:31:54.000Z
2017-12-19T08:31:54.000Z
<p>由于种种原因我们可能无法正常连接到python的官方pip源,或者连接速度很慢,或者由于根证书的原因在安装包时会提示连接证书问题,可以通过修改pip的配置来修改为国内其他源,并信任相应的源,避免证书错误,提高包安装速度。</p>
Dockerfile的编写
http://notes.maxwi.com/2017/12/14/docker-Dockerfile/
2017-12-14T08:31:54.000Z
2017-12-14T08:31:54.000Z
<p>记录Dockerfile的编写规则和用法</p>
<p>Dockerfile就是用于构建image的一系列命令和参数构成的脚本,通过<code>docker build -t <image_name:tag> -f </path/to/Dockerfile> .</code>来构建。</p>
<p><code>docker build</code>命令从名为<code>Dockerfile</code>的文件和<code>context</code>来构建image,context是<code>PATH</code>(本地目录)或者<code>URL</code>(Git repository位置)处的文件。context会以递归方式处理,所以PATH的子目录和git的submodules都会处理,同样这里要小心用于作为PATH的目录最好不要有与镜像无关的文件,通常会新建一个空文件夹做为context的PATH。</p>
<p>PATH下的<code>.dockerignore</code>可以用于排除文件和目录。</p>
<p>构建工作由Docker守护进程运行,而不是docker的CLI,其中<code>-t</code>参数用于指定镜像的repository和tag,可以有多个<code>-t</code>,<code>-f</code>指定<code>Dockerfile</code>的路径,最后的<code>.</code>表示上下文件环境为当前目录。</p>
<p>例如:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker build -t blueyi/python-3.6:dev -f ~/docker/Dockerfile .</span><br></pre></td></tr></table></figure>
手动下载gcc-4.8.5源码在centos6.9上安装多版本GCC
http://notes.maxwi.com/2017/12/09/gnu-gcc-compile-for-centos6/
2017-12-09T08:31:54.000Z
2017-12-09T08:31:54.000Z
<p>在一个系统较老的centos(6.9)上编译安装gcc4.8.5,系统源里面带的是4.7.2,对C++11中的特性支持不完整,所以需要手动编译一份新版本。<br>以为会很简单,直接下载源码,根据readme配置相关依赖源码,然而最后还是编译的时候报错,所以记录下来。</p>
GCC在64位系统上编译32位程序遇到的问题
http://notes.maxwi.com/2017/12/06/compile-x32-executable-at-x64-linux-system/
2017-12-06T08:31:54.000Z
2017-12-06T08:31:54.000Z
<p>默认的GCC编译选项会编译出与系统一致的输出,例如64位直接使用gcc或g++编译出的为64位程序或库,而32位系统编译的是对应32位的。<br>可以通过在编译时添加选项<code>-m32</code>或<code>-m64</code>来指定编译生成的相应版本,如果同时带上这2个选项,只有后一个会生效。<br>问题的关键时多数时候会提示缺少库,这里以64位下编译32位程序为例,给出ubuntu和centos下相关依赖包。</p>
让普通的VS项目支持编译CUDA代码
http://notes.maxwi.com/2017/12/06/cuda-compiled-for-normal-project-in-vs/
2017-12-06T08:31:54.000Z
2017-12-06T08:31:54.000Z
<p>当安装了VS之后再安装CUDA套件就可以通过VS创建基于CUDA的项目,但往往我们会需要让之前的老项目支持对CUDA的编译,以便使用CUDA对原有项目中的部分算法加速,网上有各种各样的尝试,搜索SOF之后找到一个超简单的方法,记录之。</p>
Docker 使用入门
http://notes.maxwi.com/2017/12/06/docker-useful-command/
2017-12-06T08:31:54.000Z
2017-12-06T08:31:54.000Z
<p>首先 Docker 是由 go 语言编写,基于 Linux 容器技术(LXC)、Namespace、Cgroup 和 UnionFS(联合文件系统)等技术的轻量级操作系统虚拟化解决方案。</p>
<p>对于 docker 的概念,可以简单理解如下:</p>
<ul>
<li><strong>镜像(Image)</strong> 类似于虚拟机的快照,它是只读,可以以镜像为模板创建容器,在容器中的更改不会影响到原镜像。实际镜像是 UnionFS 的层级文件系统。</li>
<li><strong>容器(Container)</strong> 类似于轻量级的虚拟机,由 docker 镜像实例化而来,docker 推荐一个容器运行一个进程,可见其轻量程度。</li>
<li><strong>注册服务器(Registry)</strong> 提供在线存放 docker 镜像的在线服务,可以理解为 github 所提供的 repository 作用,当我们使用 docker run 运行一个本地不存在的镜像时,默认情况下 docker 会从 docker 官方的 registry 拉取该镜像,然后创建并运行一个容器。</li>
<li><strong>Dockerfile</strong> 可以理解为用于构建镜像的命令和设置组合</li>
</ul>
<p>本文将从安装开始,记录docker日常使用的一些命令、问题及深一点的理解</p>
YUV 数据格式详解
http://notes.maxwi.com/2017/12/05/yuv/
2017-12-05T08:31:54.000Z
2017-12-05T08:31:54.000Z
<h2 id="YUV-数据格式概览"><a href="#YUV-数据格式概览" class="headerlink" title="YUV 数据格式概览"></a>YUV 数据格式概览</h2><p>YUV 的原理是把亮度与色度分离,使用 Y、U、V 分别表示亮度,以及蓝色通道与亮度的差值和红色通道与亮度的差值。其中 Y 信号分量除了表示亮度 (luma) 信号外,还含有较多的绿色通道量,单纯的 Y 分量可以显示出完整的黑白图像。U、V 分量分别表示蓝 (blue)、红 (red) 分量信号,它们只含有色彩 (chrominance/color) 信息,所以 YUV 也称为 YCbCr,C 意思可以理解为 (component 或者 color)。</p>
<p>维基百科上的 RGB 转 YUV 的公式能更好的反应 YUV 与 RGB 的关系,以及为什么称为 YCbCr:<br><img data-src="yuv1.png" alt=""></p>
<p>Y 中含有三元色色信息,且有较多的 G,所以他们一起可以显示出全彩的图像。<br>很显然我们可以想到是不是会有 YCgCb、YCgCr 等,针对不同的应用场景,也确实有相关应用研究。</p>
<p>如下图,一张从上到下分别为原图、Y、U 和 V:</p>
<p><img data-src="yuv2.png" alt=""></p>
<p>采用 YUV 而不是使用 RGB,既有历史原因:为了兼容老式黑白电视,因为 YUV 如果只输出 Y 就成了黑白图像了。也有 YUV 自己的其他优点,例如可以根据需要,采用特定的 YUV 存储格式,以降低祼码流的空间占用。</p>
Windows 下的多线程应用
http://notes.maxwi.com/2017/12/04/windows-multi-threads/
2017-12-04T08:31:54.000Z
2017-12-04T08:31:54.000Z
<p>Windows 下的多线程中线程锁是通过<code>CRITICAL_SECTION</code>实现,用以保护用户数据,即当串行代码断执行到该部分时,操作系统将告知下一来执行到此处的线程等待,直到上一个线程离开被保护的代码断,从而通过将需要访问数据的部分放在该代码段来保护数据被多线程访问时的一致性。</p>
gdb调试coredump文件
http://notes.maxwi.com/2017/12/03/coredump/
2017-12-03T08:31:54.000Z
2017-12-03T08:31:54.000Z
<h2 id="生成coredump"><a href="#生成coredump" class="headerlink" title="生成coredump"></a>生成coredump</h2><p>当程序运行出现如下错误时:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Program terminated with signal 11, Segmentation fault (core dumped).</span><br></pre></td></tr></table></figure>
<p>系统会提示有coredump产生,但通常我们在系统文件夹下并找不到core文件,是因为系统设置产生core文件大小为0,也即不会产生,所以我们这里可以做一些简单的设置:</p>
<p>设置core文件产生在当前目录,<code>%e</code>表示产生core文件的程序名,<code>%p</code>为pid号:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">"core.%e.%p"</span> > /proc/sys/kernel/core_pattern </span><br></pre></td></tr></table></figure>
<p>查看当前core文件设置的大小:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ulimit</span> -c</span><br></pre></td></tr></table></figure>
<p>设置core文件大小为无限制:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ulimit</span> -c unlimited</span><br></pre></td></tr></table></figure>
Windows和Linux下的动态链接库的编译、链接和引用相关问题
http://notes.maxwi.com/2017/12/01/dll-lib-export-for-windows/
2017-12-01T08:31:54.000Z
2017-12-01T08:31:54.000Z
<p>关于动态链接库和静态链接库的区别可以参考另一篇笔记,其实也就一句话:静态链接库在编译期加载到相应的编译目标中(编译后不再需要),而动态链接库是在运行期由执行目标进行调用(每次运行都需要)。<br>Windows下动态链接库以后缀<code>.dll</code>标识,Linux下的动态链接库命名为<code>libxxx.so</code>,其中<code>xxx</code>为库名称。</p>
Google Test(gtest)使用
http://notes.maxwi.com/2017/11/29/gtest/
2017-11-29T08:31:54.000Z
2017-11-29T08:31:54.000Z
<h2 id="GTest简介"><a href="#GTest简介" class="headerlink" title="GTest简介"></a>GTest简介</h2><p>GTest是Google官方团队开发的开源的C++单元测试框架,地址为:<a href="https://github.com/google/googletest">https://github.com/google/googletest</a>。该地址下同时有一个名为googlemock的项目,Google Mock可以理解为Google Test的辅助测试框架,Google Mock可以用于实现一个模拟类(mock类),可以用于完成需要接口交互但相应的类又没有实现的测试。本文不涉及Mock,以后有空了再追加Google Mock的使用。<br>使用Google Test可以实现:<br>1、测试应该是独立并且可以重复的。<br>2、测试应该组织良好,能够清晰的反应出测试代码的结构。<br>3、测试应该是可移植和可利用的。<br>4、当测试失败时,Google Test将会提供尽可能多的测试信息,并继续后面的测试而不是结束测试。<br>5、Google Test会跟踪所有用户定义的新测试,而不需要用户一一再去调用它们。从而将测试人员从繁杂的测试用例调用中解放出来,将更多的精力关注中测试本身上。<br>6、测试实现起来很快,因为Google Test框架能够在测试用例之间共用资源,并且它们之前还不会相互依赖。</p>
tmux简洁教程
http://notes.maxwi.com/2017/11/10/tmux/
2017-11-10T08:31:54.000Z
2017-11-10T08:31:54.000Z
<p>tmux主要的功能有两点:</p>
<ul>
<li>终端利用,可以在一个terminal开启多个shell的session,这样就不需要vim一个terminal,命令又要需要一个,其他服务还要再开一个了。</li>
<li>断线保证任务在后台继续执行,以及当你上线后保证原来打开的多个窗口与断线之前完全一样。以后就不用再使用screen了</li>
</ul>
Makefile极简教程
http://notes.maxwi.com/2017/11/09/makefile/
2017-11-09T08:31:54.000Z
2017-11-09T08:31:54.000Z
<p>关于Makefile的编写和<code>make</code>命令的简单应用,快速了解Makefile的编写规则,更多功能将在以后的使用中慢慢增加。</p>
为Linux系统导入根证书
http://notes.maxwi.com/2017/10/14/certificates-import-linux/
2017-10-13T23:06:58.000Z
2017-10-13T23:06:58.000Z
<p>公司里面通常都会为了信息安全而要求个人电脑通过公司的根证书访问SSL加密的链接,如果系统里面没有根证书不管是浏览器还是需要访问SSL加密网络的系统命令都会出现证书相关错误。虽然这些证书错误都可以通过其他一些设置绕过去,但还是直接设置一下系统根证书更方便,一劳永逸(自己公司,忽略安全性)。</p>
Docker可用的镜像加速器
http://notes.maxwi.com/2017/10/14/docker-install-registry-mirrors/
2017-10-13T23:06:58.000Z
2017-10-13T23:06:58.000Z
<h3 id="普通用户无法运行docker命令"><a href="#普通用户无法运行docker命令" class="headerlink"
Git submodule使用方法
http://notes.maxwi.com/2017/08/18/git-submodule/
2017-08-18T09:06:58.000Z
2017-08-18T09:06:58.000Z
<p>git的submodule可以用于在项目中添加子项目,这样就可以让主项目可以引用子项目的同时,子项目又可以进行独立的版本控制管理。当子项目有了更新之后,可以便捷的在主项目中对相应子项目进行更新。</p>
Shell脚本简单入门
http://notes.maxwi.com/2017/04/23/shell-script/
2017-04-23T11:21:00.000Z
2017-04-23T11:21:00.000Z
<p>Shell脚本简单入门,如果你分不清shell是什么,此文一定不适合你。毕竟只花了十多分钟看的教程,不会涉及细节,细节将在以后的使用中逐渐以示例形式给出。</p>
Java通过JNI调用C/C++动态链接库之参数传递及结果返回
http://notes.maxwi.com/2017/04/20/java-jni-cpp-passing-arguments/
2017-04-20T12:48:42.000Z
2017-04-20T12:48:42.000Z
<p>接上一篇关于JNI的基本入门<a href="/2017/04/19/java-jni-cpp-hello/" title="Java通过JNI调用C/C++动态链接库之HelloWorld">Java通过JNI调用C/C++动态链接库之HelloWorld</a>,简述给JNI函数传递参数,以及通过JNI函数返回值的方式。</p>
Java通过JNI调用C/C++动态链接库之HelloWorld
http://notes.maxwi.com/2017/04/19/java-jni-cpp-hello/
2017-04-19T12:48:42.000Z
2017-04-19T12:48:42.000Z
<p>Java可以通过JNI(Java Native Interface)来调用本地库,从而解决一些需要使用C/C++来提高效率但却需要使用JAVA调用的场景,例如opencv库编写的图像处理函数,需要使用spark等大数据框架来调用。</p>