✍ Idle-About

Idle-About

Introduction

Show books order by rank, crawled booklists from douban.

Project on Github

https://github.com/Ext4FAT/BookSelector

Developer

pic

Dependency

1
2
3
4
libhtmlcxx-dev
libboost-dev
pandoc
libopencv-dev

Usage

1
2
3
4
5
6
7
8
9
10
[USAGE]
[-b browser] #Browser you want to display result
[-k keyword] #Field you intend to search
[-t number] #TOP-K you wish to show
[-p percent] #TOP k% you mean to show
[-n filename] #File name you are desirous to output
[-a] #Display all book in this field
[-r] #No matter cache exist or not, re-download pages
[-N] #Don't output markdown file
[-D] #Don't display html with browser

✍ Registration

Registration

Introduction

This procedure implemented by C plus plus with Open Soure Library OpenCV, PCL, and Realsense Developer SDK.

Project On Github

https://github.com/IDLER1229/Registration

Developer

pic

Intel Realsense F200

Official Statement

Intel® RealSense™ camera fits remarkable technology into a small package. There are three cameras that act like one—a 1080p HD camera, an infrared camera, and an infrared laser projector—they “see” like the human eye to sense depth and track human motion. Intel® RealSense™ technology1 redefines how we interact with our devices for a more natural, intuitive and immersive experience, supported by the powerful performance of Intel® processors.

More details

And you can find more details with Realsense on https://software.intel.com/en-us/intel-realsense-sdk/download

Procedure

This program consists of four parts: Segmentation, classification, registration and reflection. First, depth data can be divided into serval regions with improved region-growing segmentation. Then classifly region catergory with a classic linear svm with HOG as feature. Next, regist mesh generated by Realsense with 3D-model which we built by 3D scanner inadvance. Last but not least, reflect Points Cloud to 2D-color-image. Finally, we can see purple point in folowing picture.

Segmentation

An improved region-growing segmentation efficiently divide depth data into topk main regions.

Classification

An classic Support Vector Machine (SVM) with Histogram of Oriented Gradient (HOG) as feature rapidly select regions contained objects.

Registration

Regist Point Cloud (3D mesh) with pre-built 3D-model, by RANSAC and ICP.

Reflection

Reflect points into 2D image.

Example

Interpretion

color and depth are soure data captured by Realsense. before merging is raw result with region-growing and segmentation merge small regions into representive regions as main regions. regions show the bounding boxes with convex hulls of main regions. And classification show region which probably contains object. The 3D Point Cloud window show the registration and reflect demonstrate the final result.
HAHA, the yellow point region means grasping points of Bottle. This is the real purpose of registration which can localize object grasping region

Result

Example
Example
Point-Cloud

ERROR & SOLUTION

We just add some solutions which we have finished off into Issues. Welcome You to push problems you faced with.

My Reading Book List

【Unix/Linux】

  •  Linux内核设计与实现
  •  Linux内核设计的艺术
  •  深度探索Linux操作系统:系统构建和原理解析
  •  深入理解Linux内核
  •  深入Linux内核架构

  •  深入理解程序设计:使用Linux汇编语言

  •  Linux系统编程
  •  Linux高性能服务器编程
  •  APUE
  •  UNP-V1
  •  UNP-V2

  •  Linux C一站式学习

  •  系统虚拟化-原理与实现

【Machine Learning】

  •  统计学习方法
  •  机器学习实战
  •  机器学习(西瓜书)

  •  PRML

  •  ESL
  •  Data mining concepts and techniques 3rd
  •  Data Mining: Practical Machine Learning Tools and Techniques
  •  Ensemble Methods: Foundations and Algorithms
  •  Understanding Machine Learning: From Theory To Algorithm

【Big Data】

  •  大数据时代
  •  大数据思维与决策
  •  深入理解大数据

【Database】

  •  数据库系统实现

【Computer Vision】

  •  Learning Opencv
  •  OpenCV.2.Computer.Vision.Application.Programming.Cookbook
  •  特征提取与图像处理
  •  计算机视觉——算法与应用
  •  数字图像处理

  •  点云库PCL学习教程

【Algorithm】

  •  算法导论
  •  具体数学
  •  迷茫的旅行商:一个无处不在的计算机算法问题

【Compile】

  •  深入理解计算机系统
  •  程序员的自我修养
  •  编译原理

  •  编译器设计

【Network】

  •  物联网导论(刘云浩 编著)
  •  Wireshark网络分析
  •  Nmap扫描原理和应用

  •  TCP/IP详解-V3

  •  HTTP权威指南
  •  Wireshark网络分析
  •  深入理解计算机网络
  •  深入理解Nginx
  •  后台开发:核心技术与应用实践

  •  Headfirst html + css

【Programming】

  •  学习正则表达式
  •  Effective C++
  •  More Effective C++
  •  Effective Modern C++
  •  Think in C++
  •  Effective STL
  •  STL源代码分析
  •  深度探索C++对象模型
  •  C++编程规范101条

  •  C++并发编程实战

  •  Think in Java

  •  Effective Java
  •  深入理解Java虚拟机

  •  Java并发编程实战

  •  Haskell趣学指南

  •  计算机程序的构造和解释

  •  The Awk Programming Language

【History & Biography】

  •  浪潮之巅
  •  大学之路
  •  信息简史
  •  时间简史
  •  万物简史
  •  文明之光
  •  智能时代

  •  Just For Fun

  •  大教堂与市集
  •  黑客与画家
  •  从0到1
  •  软件随想录
  •  增长黑客
  •  特斯拉回忆录

  •  民国风度

  •  中国近代史
  •  中华史(至第17卷:大宋革新)
  •  红太阳是怎样升起的
  •  庐山会议实录

  •  全球通史

  •  极简欧洲史

  •  足球根本不是圆的

【Thinking】

  •  人月神话
  •  数学之美
  •  编写可读代码的艺术
  •  暗时间

  •  设计原本

  •  设计模式:可复用面向对象软件的基础
  •  程序员的思维修炼:开发认知潜能的九堂课
  •  高效程序员的四十五个习惯:敏捷开发修炼之道
  •  程序员修炼之道-专业程序员必知的33个技巧

  •  程序员健康指南

  •  软技能代码之外的生存指南

  •  构建之法:现代软件工程

  •  编码:隐匿在计算机硬件背后的语言

  •  代码整洁之道

  •  代码大全

  •  计算机的心智: 操作系统之哲学原理

  •  C陷阱与缺陷

  •  Unix编程艺术

  •  逻辑的引擎
  •  哥德尔 埃舍尔 巴赫——集异璧之大成
  •  创业维艰
  •  囚徒的困境-冯诺依曼,博弈论和原子弹之谜
  •  质数的孤独

【Hacker】

  •  灰帽黑客
  •  欺骗的艺术
  •  web之困:现代web应用安全指南
  •  web渗透测试:使用Kali Linux
  •  黑客技术攻防宝典:web实战篇
  •  白帽子讲web安全

  •  Metasploit渗透测试魔鬼训练营

  •  Violent Python

【Trick】

  •  编程珠玑
  •  编程之美
  •  剑指Offer
  •  编程珠玑(续)
  •  算法谜题

【Psychology】

  •  影响力
  •  意志力
  •  自控力
  •  习惯的力量
  •  情商
  •  提问的艺术
  •  思考的艺术
  •  人性的弱点

【Science】

  •  量子物理史话-上帝掷骰子吗
  •  时间的形状
  •  爱因斯坦传

  •  果壳中的宇宙

【Novel】

  •  雍正剑侠图十三部
  •  黄金时代
  •  天才在左,疯子在右

Note

The progress bar is just my reading progress of this book, not the popularity or recommendation rate of this book

Understanding C++ 11

C++11的问题若干

历史遗留问题

被弃用的特性

  • 如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了。
  • 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个 char *,应该使用 const char * 或者 auto。 e.g.

    1
    char *str = "hello world!"; // 将出现弃用警告
  • C++98 异常说明、 unexcepted_handler、set_unexpected() 等相关特性被弃用,应该使用 noexcept。

  • auto_ptr 被弃用,应使用 unique_ptr。
  • register 关键字被弃用。
  • bool 类型的 ++ 操作被弃用。
  • C 语言风格的类型转换被弃用,应该使用。 static_castreinterpret_castconst_cast 来进行类型转换。
  • 还有一些其他诸如参数绑定(C++11 提供了 std::bind 和 std::function)、export 等特性也均被弃用。

C++ 不是 C 的一个超集

在编写 C++ 时,也应该尽可能的避免使用诸如 void* 之类的程序风格。而在不得不使用 C 时,应该注意使用 extern “C” 这种特性,将 C 语言的代码与 C++代码进行分离编译,再统一链接这种做法。 e.g.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// foo.h
#ifdef __cplusplus
extern "C" {
#endif

int add(int x, int y);

#ifdef __cplusplus
}
#endif

// foo.c
int add(int x, int y) {
return x+y;
}

// main.cpp
#include "foo.h"
int main() {
add(1, 2);
return 0;
}

要先编译c代码, 然后再把c++和.o代码链接起来

1
2
gcc -c foo.c
g++ main.cpp foo.o -o main

语言特性增强

nullptr and constexpr

nullptr

  • nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0

  • C++ 不允许直接将 void * 隐式转换到其他类型

  • C++11 引入了 nullptr 关键字,专门用来区分空指针0nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。 防止NULL转换撑0, 进而在重载过程中匹配成int

constexpr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define LEN 10

int len_foo() {
return 5;
}

int main() {
char arr_1[10];
char arr_2[LEN];
int len = 5;
char arr_3[len+5]; // 非法
const int len_2 = 10;
char arr_4[len_2]; // 合法
char arr_5[len_foo()+5]; // 非法

return 0;
}

C++11 之前,可以在常量表达式中使用的变量必须被声明为 const,在上面代码中,len_2 被定义成了常量,因此 len+5 是一个常量表达式,所以能够合法的分配一个数组;
而对于 arr_5 来说,C++98 之前的编译器无法得知 len_foo() 在运行期实际上是返回一个常数,这也就导致了非法的产生。
C++11 提供了 constexpr 让用户显式的声明函数或对象构造函数在编译器会成为常数,这个关键字明确的告诉编译器应该去验证 len_foo 在编译器就应该是一个常数。也就是说, 相当于函数返回的值告诉编译器也是一个const, 可作为数组的长度定义。
同时constexpr的函数还支持递归, e.g.

1
2
3
constexpr int fibonacci(const int n) {
return n == 1 || n == 2 ? 1 : fibonacci(n-1)+fibonacci(n-2);
}

Deduction

auto

auto 在很早以前就已经进入了 C++,但始终作为一个存储类型的指示符存在,与 register 并存。在传统 C++ 中,如果一个变量没有声明为 register,将自动被视为一个 auto。然而register 被弃了,auto 的语义变更也就非常自然了。

常见用法
1
2
auto i = 5;             // i 被推导为 int
auto arr = new auto(10) // arr 被推导为 int *

但是, auto 不能用于函数传参,因此下面的做法是无法通过编译的(考虑重载的问题,我们应该使用模板); 此外,auto 还不能用于推导数组类型

auto应用于迭代器

三者遍历方式等价, 只是最后一种auto的是元素本身类型, 不是迭代器本身

1
2
3
4
5
for(vector<int>::const_iterator itr = vec.cbegin(); itr != vec.cend(); ++itr)

for(auto itr = vec.cbegin(); itr != vec.cend(); ++itr);

for(auto item: vec)

decltype

decltype 关键字是为了解决 auto 关键字只能对变量进行类型推导的缺陷而出现的, 用法类似sizeof. e.g.计算某个表达式的类型:

1
2
3
auto x = 1;
auto y = 2;
decltype(x+y) z;

Geek Tools

Some Geek Tools Recommendation

Enhanced Desktop

Ditto

Enhance Clipboard (Platform: Windows)
ditto

AutoHotKey

Enhance Keyboard (Platform: Windows)
autohotkey

Searching Optimization

Everything

Search Repository (Platform: Windows)
example:

1
2
d:|e: *jpg dm:xxx-xxx
c:|d: *.pdf|*.ppt da:thisweek

Listary (free)

(Platform: Windows)

(Platform: Windows)
rep

Hack Google

hack

Knowledge Management

Evernote, Geeknote

eg

Socialized Knowledge

sk

Coding Tools

Sublime Text

SublimeCodeIntel

Atom

ELECTION

VisualStudio Code

Design & Diagram Tools

js-sequence-diagrams.js flowchart.js

js

Graphviz (DOT)

gd

PlantUML

uml

Idea & Mind Tools

MindMap

Blumind

The Brain (Personal Brain)

Document Tools

DocBook

DITA

Markdown

RestructuringText

Other Handy Tools

Visualize Regex

vr

Pandoc

Diffcount Utility

Thanks to TrendMicro’s Charlie Cao

TrendMicro: http://www.trendmicro.com.cn/cn/

Secure Code [TODO]

Writing Secure Code

STRIDE Threat Model

  • Spoofing identity
  • Tampering with data
  • Repudiation
  • Information disclosure
  • Denial of service.
  • Elevation of privilege

Top 10 Most Dangerous Software Errors

  1. Improper Neutralization of Special Elements used in an SQL Command
    (‘SQL Injection’)
  2. Improper Neutralization of Special Elements used in an OS Command (‘OS
    Command Injection’)
  3. Buffer Copy without Checking Size of Input (‘Classic Buffer Overflow’)
  4. Improper Neutralization of Input During Web Page Generation (‘Cross-site
    Scripting’)
  5. Missing Authentication for Critical Function
  6. Missing Authorization
  7. Use of Hard-coded Credentials
  8. Missing Encryption of Sensitive Data
  9. Unrestricted Upload of File with Dangerous Type
  10. Reliance on Untrusted Inputs in a Security Decision

Thanks to TrendMirco’s Stanley Liu

TrendMicro: http://www.trendmicro.com.cn/cn/