blueyi's notes

Follow Excellence,Success will chase you!

UFW,即Uncomplicated Firewall,是基于iptables实现的防火墙管理工具,所以实际上UFW修改的是iptables的规则。之所以不直接使用iptables,而要通过UFW进行管理是因为iptables的规则对于新手入门来说有点难,UFW做了很好的包装。

Read more »

依然是首先给出参考网站,感觉还是让看到的人,直接去看原作会更快,以免疏漏不是我所关注的重要内容:
CMake官网:https://cmake.org/,官网有个tutorial
另一个CMake Turorial:https://www.johnlamp.net/cmake-tutorial.html
CMake by Example:http://mirkokiefer.com/blog/2013/03/cmake-by-example/
CMake官方WIKI:https://cmake.org/Wiki/CMake

首先要搞清楚出cmake是一个跨平台的项目管理工具,用来生成其他项目构建工具所需要的规则文件。例如gnu的make可以根据makefile文件中定义的规则来对C/C++项目进行编译、链接等(较多地用于c/c++项目),qmake可以根据pro文件中定义的规则对qt项目进行构建,而VS则可以根据VS的项目属性文件对其管理项目调用自身的编译器进行编译。那么这些编译文件就可以用cmake来生成,cmake可以根据CMakeLists.txt中定义的规则来生成相应的项目构建平台所需要的规则文件。以make来举例,make可以通过makefile中定义的规则调用c++编译器对项目进行编译并链接并生成可执行文件,相当于项目的编译等构建工作依然由各编译器来完成,而具体如何编译(例如使用的头文件在哪,链接的库去哪找等)则由make根据makefile中定义的规则来调用g++进行编译,而项目构建工具make所需要的makefile则由cmake来生成。makefile可以手动来写,但当项目非常大时,makefile可能会很复杂,此时就可以通过cmake根据MakeLists.txt来自动生成makefile。而假如该项目还要转移到win平台下,又需要使用VS来进行对该项目编译,则CMake可以根据MakeLists.txt来生成VS的项目属性文件(通常后缀是解决方案.suo、项目.vcxproj),然后即可使用VS直接打开解决方案文件

Read more »

本文不会像其他笔记那样详细讲解每一个步骤和问题,最近太忙,没有太多时间,突击学习一下,记录下遇到的一些问题,但依然会像其他笔记一样授之以渔。仅针对C++,OpenCV2,假如你没学习过官方提供详细支持的编程语言,例如C/C++/python,建议还是先学一门编程语言再来学习OpenCV吧。看到网上有教程竟然讲OpenCV时还讲起了C语言。
强烈推荐参考官方手册,官方的doc简直太棒了:http://opencv.org/documentation.html,即能下载PDF,又能在线查看,还有详细的tutorial,以下多数问题的解决来源于查看官方的Reference Manual:http://docs.opencv.org/2.4/opencv2refman.pdf

Read more »

关于环境配置

网上有一大堆这样那样的方法,官方有详细且简单的教程,为什么要舍近求远呢,甚至有些书上还义正言辞地认为自己的配置方法非常好,其实他自己都不清楚为什么需要那些步骤,官方教程的windows配置方法:http://docs.opencv.org/3.0-last-rst/doc/tutorials/introduction/windows_install/windows_install.html

Read more »

网上关于KVM的简单使用教程有很多,但通常都是通过桌面的方式进行管理和使用,而且大部分教程中都忽略了很多重要的细节,且应用场景都较为简单。本文提供的教程主要用于有多人需要大量的虚拟机使用需求,要能够让大家非常方便地随时创建和删除虚拟机,支持通过SSH进行连接,同时支持通过VNC进行远程虚拟机桌面的连接(安装虚拟机系统时肯定需要,当然服务器带桌面例外)。当然如果使用OpenStack会方便很多,但毕竟Openstack配置非常复杂,其实采用KVM的初衷就是为了将来迁移到Openstack做个过度。

Read more »

虽然现在都流行TL;DR,但还是一如继往地授之以渔,虽然看似很长,其实非常简单,更多的内容是在讲原因。不仅适用于ubuntu系的系统,手动安装方式同样可类似地用于其他系统。无法就两步:下载并解决JDK,配置环境变量。

Read more »

超大整数的表示及四则运算,大家的多数方法是采用字符串表示超大整数,然后再根据竖式计算的原理进行计算。例如12345678 + 87654321,就是两个字符串,然后将这两个字符串中的各个位取出来右对齐后进行一位位相加,如果有进位就考虑进位的问题,例如这里至少需要相加8次,如果最高位有进位,就是9次。
这里采用的方法相当于采用10^n进制来存储超大整数,例如12345678,如果按10000进制来存的话(因为这样的两个最大数相乘刚好不会超过10^9,可用用int32存),就是存成[1234,5678],两个整数,这样的话,只需要相加2次就可以了,而且进位的计算也最多只需要2次。相比字符串,当整数超大时,时间复杂度会降低很多。下面的实现中采用的是vector来存储的,由于加入了时间统计及DEBUG,所以看上去代码略多。
由于最近太忙,只实现了加、减和乘,除等以后有时间了再,下面是完整的代码,也不整理了,注释比较少,优化空间也很大,等以后有时间了再整,留个备注

Read more »

首先明确C++中引用或指针的动态类型(dynamic type)与静态类型(static type)可以不同是C++支持多态性(polymorphism)的根本所在。
四个概念:

  • 静态类型:就是对象声明时采用的类型,一旦确定就无法更改,编译期已经确定
  • 动态类型:通常是指一个指针或引用在调用时所指向的类型,可以理解为赋值号右侧对象的类型(当然采用直接赋值就是括号中的对象的类型),可以在运行时更改,在运行期决定
  • 静态绑定(static binding):又名前期绑定(early binding),绑定的是对象的静态类型,发生在编译期,即程序编译完成后就已经确定
  • 动态绑定(dynamic binding):又名后期绑定(late binding),绑定的是对象的动态类型,发生在运行期,即在运行期由当前的动态类型决定所需要调用的函数或属性
Read more »
0%