自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 ASM(active shape model)算法简介(一)

概要ASM是一种基于点分布模型(Point Distribution Model,PDM)的算法。在PDM中,外形相似的物体,例如人脸、人手、心脏、肺部等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。ASM算法需要通过人工标定的方法先标定训练集,经过训练获得形状模型,再通过关键点的匹配实现特定物体的匹配。ASM 的优点是 能根据训练数据对于参数的调节加

2015-05-29 18:37:54 12004 5

原创 ASM(active shape model)算法简介(一)

概要ASM是一种基于点分布模型(Point Distribution Model,PDM)的算法。在PDM中,外形相似的物体,例如人脸、人手、心脏、肺部等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。ASM算法需要通过人工标定的方法先标定训练集,经过训练获得形状模型,再通过关键点的匹配实现特定物体的匹配。ASM 的优点是 能根据训练数据对于参数的调节加

2015-05-29 17:20:34 908

原创 决策树学习(二)

本文来源于个人博客:www.chenbiaolong.com概述在上一篇文章中我们利用信息熵的概念找到了最优的划分属性,当然也是仅仅找到“一个”属性而已,虽然利用这个属性划分数据集有着最大的熵减。在现实的机器学习中是不可能只用一个属性就能将数据分类的,因此本文将在上一篇文章的基础上真正构建一颗决策树。熵减越大的属性在该树的节点深度越浅。实现原理我们最终构建的决策树的形式大概如下: 这张图直接给出了

2015-05-13 13:48:59 674

原创 决策树学习(一)

本文来自我个人博客:www.chenbiaolong.com概述决策树学习是一种逼近离散值目标函数的方法,简单来说它可以被表示为多个的if-then的规则表达式。在本文中先主要介绍决策树的基本概念,主要包括熵的概念以及如何选择最优的数据集划分方式 数据准备这里我们使用《机器学习》(Tom M.Mitchell著)中的例子作为分析的数据源。这颗决策树根据天气情况分类“星期六上午是否适合打网球”。

2015-05-12 14:27:52 768

原创 Mahout in action分析维基百科数据例子(二)

本文来源于我的个人博客www.chenbiaolong.com概要这篇文章主要论述我在实现上一篇文章所述功能时的具体操作过程。因为hadoop现在有两套新旧API接口,因此在实现过程中需要十分注意你import进来的class是属于新的API还是旧的API。本文的所使用的hadoop版本是2.6版本。工程准备数据准备mahout in action用的是维基百科的数据,数据量较大,考虑到不便于验证我

2015-04-07 15:14:04 1120

原创 Mahout in action分析维基百科数据例子(一)

本文来源于我个人博客www.chenbiaolong.com概要本文主要根据mahout in action第六章分析维基百科链接数据的例子编写。大部分内容是直接翻译的mahout in action,不过不是逐字翻译,加入了一些个人理解。关于本文的前提背景可以参考其他博主翻译的文章: Mahout in action 中文版-6.分布式推荐计算-6.1 Mahout in action 中文版

2015-04-03 17:36:04 1120

原创 Hadoop运行包含第三方依赖库的MapReduce作业

本文来源于我的个人技术博客:www.chenbiaolong.com,欢迎访问概述最近打算学习一下利用hadoop搭建机器学习平台,因为mahout这个机器学习库资料比较多,因此就根据《mahout in action》这本书学习了一下如何搭建hadoop+mahout的机器学习平台。 由于mahout in action只是列出了部分代码,具体的环境搭建书上写的并不多。在编写依赖于mahout的

2015-04-02 15:33:51 7007

原创 docker实现原理之namespace

本文来源于我的个人博客 www.chenbiaolong.com 欢迎访问概要传统上,linux很多资源是全局管理的,例如系统中所有的进程是通过pid标识的,这意味着内核管理着一个全局pid表,进程号必须为唯一的。类似的还有内核的文件系统挂载点数据信息、用户ID号等。我们知道,要实现虚拟化必须要有独立的资源分配,才能使容器之间不互相影响,那如何使这些全局表局域化呢?答案是namespace。

2015-02-26 19:40:53 5724

原创 docker与虚拟机性能比较

本博客来源于我的个人博客: www.chenbiaolong.com 欢迎访问。概要docker是近年来新兴的虚拟化工具,它可以和虚拟机一样实现资源和系统环境的隔离。本文将主要根据IBM发表的研究报告,论述docker与传统虚拟化方式的不同之处,并比较物理机、docker容器、虚拟机三者的性能差异及差异产生的原理。 docker与虚拟机实现原理比较如下图分别是虚拟机与docker的实现框架。

2015-02-26 19:36:40 85883 6

原创 google Protocol Buffer 入门

来源于我的个人博客, 原文用markdown编写,转到csdn格式有些问题。简介Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻

2015-01-22 14:49:44 1288

原创 docker基础工作原理(二)

注:以下博文来源于我的独立博客网站:http://www.chenbiaolong.com/,由于原网站是用markdown写的,复制到这边格式有点问题。在本篇博文中将主要介绍docker使用device mapper管理镜像的原理。这部分内容我也没完全搞懂,以下内容主要是通过参考多篇博文总结出的概要。loop设备介绍在类 UNIX 系统里,loop 设备是一种伪设备(pseudo

2015-01-15 19:41:03 6570 1

原创 docker 基础工作原理(一)

注:以下博文来源于我的独立博客网站:http://www.chenbiaolong.com/以后博文将主要迁移到这个博客,各位可以多多关注支持。相信很多人和我一样,初学docker时一直无法搞懂docker镜像的工作机理。这几天对docker如何工作进行了一番研究,简单整理一下。docker的两大核心基础技术是namespace和cgroup,cgroup主要作资源的限制隔离,它可以限

2015-01-10 00:34:07 15988 1

原创 快速排序算法

快速排序使用了分治法,将数组分成两个部分,左边的部分小于等于主元大小,右边部分大于主元大小。inline void swap(int& a, int &b){ int tmp; tmp=a; a=b; b=tmp;}void qsort(int a[],int l, int u){ int m=l; int i; //主元为a[l] if(l<u) { //

2013-06-19 13:35:55 636

原创 插入排序

插入排序的原理和排序扑克牌的原理一样。假设有n张牌,手中的牌已经排好顺序,每次从桌上新拿一张牌。每拿到一张牌都需要从右往左将它与手中的牌进行比较。由于插入需要增加一个存储空间,因此可以用一个临时变量key存储当前从桌子上拿到的牌。代码如下void insertion_sort(int a[], int n){ int i=0; int j=1; // a[j]~a[n-1]的

2013-06-18 16:39:41 502

原创 二分搜索

递归版本int binary_search(const int a[], int low,int up, const int key){ int mid=(low+up)/2; if(low>up) return -1; else { if(a[mid]==key) return mid; else if(a[mid]<key) return binary_sea

2013-06-18 14:25:43 626

原创 最大子数组算法

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。比如输入a[]={31,-41,59,26,-53,58,97,-93,-23,84},那么程序的输出为a[2...6]的和,即187。《编程珠玑》给出了一个时间复杂度为O(n)的扫描算法。代码非常简练,但得稍微思考一下才能明白。

2013-06-18 13:06:35 871

原创 ubuntu3.8 安装vmware tool找不到内核头文件解决

输入以下命令cd /lib/modules/$(uname -r)/build/include/linuxsudo ln -s ../generated/utsrelease.hsudo ln -s ../generated/autoconf.hsudo ln -s ../generated/uapi/linux/version.h

2013-05-03 10:02:56 742

原创 禁止 皮皮 jfcache进程随机启动

jfcache进程是皮皮的一个广告进程,每次都自动启动,在后台运行,弹出广告非常烦人。要禁止该进程自动启动可以进行以下操作:用记事本打开D:\pipi\config\config.ini 文件,将第3行和第4行改成AutoRun=0AutoShutoff=1保存即可。

2013-02-20 09:28:52 731

原创 FPGA设计小结

1.编写可综合代码尽量不用task生成较为复杂的时序。不然可能综合产生无法预知的错误。遇到过这种情况:在编写一个读写时序时用task无法正常读写;不用task,用与task完全相同的逻辑编写即可正常读写。因此使用task要十分小心;2.复位时应该初始化重要的信号。遇到这种情况:在复位时只初始化了状态机初始状态,没初始化一些寄存器与管脚,将大部分寄存器初始化工作放在了状态机初始状态实现,结果FP

2013-01-18 11:10:42 571

原创 tq2440移植mjpg-streamer出现的一些问题

根据天嵌的教材进行移植,由于不是直接使用天嵌公司修改后的源码,所以编译出现了一些错误。天嵌公司的教材做的很详细,但美中不足的是往往只写出步骤,但没写出做这个步骤的原因。所以如果其中遗漏了一些关键步骤,出现问题往往让初学者难以修正。移植完SDL库后,在__install目录下生成了 include、lib等文件夹。天嵌教材是将这些头文件和库直接拷贝到编译器对应的文件夹里。但可能是我的开发环境不大

2012-08-08 15:00:19 1752

原创 Unable to handle kernel paging request at virtual address错误的解决

今天写了一个触摸屏的驱动程序,在卸载模块时出现oops,主要信息如下 Unable to handle kernel paging request at virtual address cc33cc33……pc is at kfree+0x44/0xd4……经过分析,是因为对内存越界访问//以下代码导致oops,原因是越界访问ts_dev.buf[wr_pt].x=

2012-07-29 15:39:47 22323

原创 tr寄存器

任务寄存器tr保存 16 位的段选择子、32 位基地址、16 位段界限和当前任务的 TSS属性。它引用 GDT 中的 TSS 描述符。基地址指明 TSS 的第一个字节(字节 0)的线性地址,段界限确定 TSS 的字节个数。TR寄存器包含了当前正在CPU运行的进程的TSSD(任务段描述符)选择符。也包含了两个隐藏的非编程域:TSSD的base 和limit域。通过这种方式处理器就能直接对TSS寻址,

2012-04-30 14:16:08 5758 1

转载 Linux 常见特殊符号

Linux 常见特殊符号 1,> 重定向输出符号     用法:命令 >文件名     特性:覆盖(当输入文件和输出文件是同一文件,文           件内容被清空;不适合连续重定向)     典型应用:合并文件(cat a b >c);清空文件(cat             /dev/null);文件打印2,>> 重定向输出符

2012-04-06 20:26:59 607

原创 linux的内存寻址(段)

前一段时间看linux的起始代码时,对linux的内存寻址总是似懂非懂。最近认真看了下《深入理解linux内核》,觉得里面对内存寻址讲述的比较清晰,稍微总结一下。   在linux系统中,应用程序使用的是逻辑地址,逻辑地址到物理地址的转换如下:逻辑地址-----|分段单元|--->线性地址----|分页单元|--->物理地址   即我们应用程序的地址需要经过分段和分页两

2012-04-04 23:08:50 828

原创 linux 内核定时器编程

1.linux内核定时器基本结构和函数1)struct timer_list 一个struct timer_list对应了一个定时器。#include 以下列出常用的接口:struct timer_list  {   /*....*/   unsigned long expires;//定时器服务函数开始执行时间   void (*function)(unsigne

2012-03-13 17:14:24 5414 1

原创 ioctl与unlocked_ioctl区别

今天调一个程序调了半天,发现应用程序的ioctl的cmd参数传送到驱动程序的ioctl发生改变。而根据《linux设备驱动》这个cmd应该是不变的。因为在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl ,所以我怀疑二者是不是兼容的。上网查了一些资料,很多文章只是泛泛谈了一下,说在应用程

2012-02-26 17:02:10 28884 2

原创 Linux 内核配置与编译

嵌入式系统的一个很重要的特性就是可移植可裁剪配置。这篇博文主要简单总结下在x86体系下配置编译内核的过程。      首先需要得到linux内核的源码,可以直接到linux官网下载。很多arm开发板的光盘都有linux源码,但还是推荐到官网下载,因为开发板的源码可能已经被修改过。      取得源码后的步骤就是配置内核。使用make menuconfig命令,配置成功后保存会在内核源代码目

2012-02-09 22:13:36 1526 1

原创 arm存储模块

在arm系统中存储模块主要分为flash和SDRAM。flash相当于计算机的硬盘,SDRAM相当于计算机的内存。但二者本质的区别是什么呢?在一个系统里我们执行程序需要存储什么内容呢?首先我们必须有源代码告诉控制器应该干什么,其次代码的执行过程其实是数据的处理过程,因此我们必须有一个空间来储存数据。在执行程序的过程中我们的源代码是不会改变的,控制器通过PC的指引一条一条(实际上利用流水线技术可以同

2012-01-30 14:23:05 852

原创 linux信号

信号是unix和linux系统响应某些条件而产生的一个事件。如果进程接收到信号,但事先没有安排捕获它,进程将会立刻终止。按照通常情况配置,在键盘上敲入中断字符就会向前台进程(即当前运行的进程)发送SIGINT信号,这将引起该进程的终止,除非它事先安排了捕获这个信号。如果想发送一个信号给一个进程,且这个进程不是当前的前台程序,就需要kill命令int kill(pid_t pid, int si

2012-01-20 00:14:44 536

原创 linux进程编程

unix标准把进程定义为:“一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源”。进程直接可以共享程序代码,但不能对用来存放程序代码的内存进行写操作,即程序代码是以只读的方式加载到内存的。同时系统函数库也可以被共享。除了一些共享资源外,进程有自己的栈空间,用于保存局部变量和控制函数的调用与返回。进程还有自己的环境空间。1.查看进程使用 ps -ef命令2. 启动新进程

2012-01-18 23:48:17 453

原创 linux文件编程(1)

linux中文件编程可以使用两种方法:1.Linux系统调用     2.C语言库函数。系统调用是基于linux系统的,它不能跨系统使用。c语言库函数在各个系统都能使用。下面先介绍基于系统调用的文件编程。1.文件的创建.int creat(const char *filename,mode_t mode)filename:要创建的文件名(包含路径,缺省为当前路径)mode:创建模式

2012-01-07 00:49:37 1095

原创 makefile的编写

makefile 描述了整个工程的编译,链接过程。我们知道生成可执行文件的过程为  源文件--->.o文件-->可执行文件。源文件可能有多个文件,对应生成多个对象文件(。o文件),要生成可执行文件需要将这些对象文件进行链接。以下为一个makefile文件:hello: main.o func1.o func2.o          gcc main.o func1.o func2.o -o

2012-01-01 20:55:43 562

原创 gcc,gdb常用命令

gcc有许多命令选项,以下列出最为常用的几个选项-o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-c:只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件。-g:产生调试工具(GNU的gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须

2011-12-31 22:29:35 474

转载 ubuntu软件安装命令

原文http://blog.csdn.net/hailang99/article/details/1841874在ubuntu下基本上只要apt-get 就可以了,但是有时候要尝鲜就得去另外下了,这时就要了解一些linux下安软件的知识了,所以在网上找了这篇文章 摘自:CnXHacker.Net 在Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩

2011-12-30 23:49:40 412

转载 linux 常用的命令

useradd 添加用户passwd 用户名su 切换用户tar 命令-c :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)-t :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;-x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開 特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。-

2011-12-30 01:55:32 461

转载 位图文件格式

一、位图文件结构位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; DWORD bfSize; WORD bfReserved1;

2011-12-14 00:30:45 3294

转载 深入浅出的分析windows进程中的内存结构

接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。    首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本地变量(Local),静态变量(Static)、寄存器变量(Re

2011-10-29 16:35:45 565

原创 动态分配二维数组以及需要注意的问题

使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组           int **b=new int*[row];       //分配一个指针数组,将其首地址保存在b中                                                                for(i=0;i

2011-10-29 00:04:53 625

转载 栈区,堆区,全局区,文字常量区,程序代码区 详解

一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它

2011-10-16 01:10:20 1320

转载 MFC 自定义消息四步曲

1. 定义全局变量或宏#define WM_MyMessage (WM_USER + n)n为数字到少大于100或者用 const UINT WM_MYMESSAGE = WM_USER + n一般可以加在stdafx.h 或resource.h 或*.app

2011-10-12 12:15:48 504

提示
确定要删除当前文章?
取消 删除