自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (7)
  • 收藏
  • 关注

原创 gitlab for mac

记录下在mac上使用gitlab遇到的问题1、注册用户,拿到权限到你们gitlab项目网址下的profile setting下的SSH KEYS中,找到generate it命令行执行ssh-keygen -t rsa -C“[email protected]”得到ssh key执行cat ~/.ssh/id_rsa.pub看到ss

2014-10-23 16:46:21 19363

转载 GO!---基础语法

这里http://www.oschina.net/question/12_7902

2013-07-09 11:29:24 1033

转载 GO!---Windows下GO的环境搭建

一、        下载编译器下载go语言的开发工具可以到http://code.google.com/p/gomingw/downloads/list去下载,这里列出了当前最新的版本。我选择下载http://gomingw.googlecode.com/files/gowin386_release.r60.3.zip 下载完毕之后,就是一个压缩包,我们把它解压缩,

2013-07-08 17:47:54 12274 1

原创 Dynamic Data Exchange(DDE)机制引发的卡死

有一个bug:在XP系统下,某些机器上ShellExecute在打开文件时会造成程序卡死,看了Dump文件,堆栈如下:说明ShellExecute内部使用了DDE,即Dynamic Data Exchange,动态数据交换技术。DDE用于进程间通讯,需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用

2013-03-21 11:38:52 2289

原创 boost::any实现分析

这里提到的boost::any,下面来分析一下boost::any的实现。class any { public: // structors any() : content(0) { } template any(const ValueType & value)

2013-03-19 17:09:58 3635

原创 如何设计接口的参数以减少对接口的修改

或许说这个东西的时候,最好能依托一个背景。在稍大型一点的项目中,总会有一个base层,我们认为它封装了最最底层和基础的一些列功能,因为底层的东西追求稳定和运行效率,所以90%是用C/C++写的,一般以头文件+DLL的方式给上层使用(不考虑它是基于COM的,如果是COM,VARIANT的参数类型就不在讨论范围内了)。头文件中定义了一些列导出函数或者导出类,这些导出函数或类的成员函数,都会

2013-03-19 15:19:53 4040 1

原创 由人眼追踪技术想到的

一、传言三星Galaxy S4将具备眼球追踪功能根据CSDN之前对三星Galaxy S4的报道,三星最新一代Android智能手机Galaxy S4将于3月14日在纽约发布,该新机型在软件方面有一项令人兴奋的新功能,那就是“眼球追踪技术”。通过这项技术,Galaxy S4可追踪用户眼睛以确定滚动方向,比如当用户阅读文章时,他们的眼睛到达页面底部,该软件即会自动向下滚动来显示文章的下

2013-03-14 18:51:01 2885

转载 Chrome源码剖析 【五】

转自http://www.cnblogs.com/duguguiyu/archive/2008/11/05/1326777.html【五】 Chrome的插件模型1. NPAPI为了紧密的与各个开源浏览器团结起来,共同抗击IE的垄断,Chrome的插件,也遵循了NPAPI(Netscape Plugin Application Programming Inter

2013-03-12 14:41:45 735

转载 Chrome源码剖析 【四】

转自http://www.cnblogs.com/duguguiyu/archive/2008/10/24/1318363.html【四】Chrome的UI绘制1. Chrome的窗口控件Chrome提供了自己的一个UI控件库,相关文档可以参见这里。用Chrome自己的话来说,我觉得市面上的七荤八素的图形控件库都不好用,于是自己倒腾倒腾实现了一套。。。广

2013-03-12 12:14:31 763

转载 Chrome源码剖析【三】

转自http://www.cnblogs.com/duguguiyu/archive/2008/10/12/1308876.html【三】 Chrome的进程模型1. 基本的进程结构Chrome是一个多进程的架构,不过所有的进程都会由老大,Browser进程来管理,走的是集中化管理的路子。在Browser进程中,有xxxProcessHost,每一个host,都

2013-03-12 12:13:11 737

转载 Chrome源码剖析【二】

转自http://www.cnblogs.com/duguguiyu/archive/2008/10/04/1303695.html【二】Chrome的进程间通信1. Chrome进程通信的基本模式进程间通信,叫做IPC(Inter-Process Communication),在Chrome不多的文档中,有一篇就是介绍这个的,在这里。Chrome最主要

2013-03-11 17:51:14 675

转载 Chrome源码剖析 【序】 && 【一】

转自http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html【序】 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质。它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。现在我就是来抱大腿的,这

2013-03-11 17:30:20 909

原创 图像处理--GIF和静态图叠加(四):误差扩散(error diffusion)

上面说过了色彩量化,经过色彩量化,必然有部分点因为无法精确的在调色板中找到自己原来使用的颜色而被迫使用和原来颜色最接近的颜色,这就产生了色差。如果用标准调色板,一般经过色彩量化后,图片会形成大量色块,即使用定制调色板,也会有少量色块。为了进一步提升图片质量,需要引入误差扩散。误差扩散, 就是将色彩深度降低时, 将像素颜色的变化误差, 扩散开去. 这使得肉眼在观察图片的时候, 相邻的像素点集

2012-12-31 11:13:59 4261

原创 图像处理--GIF和静态图叠加(三):色彩量化(Color Quantization)

按照图像处理--GIF和静态图的叠加和图像处理--GIF和静态图叠加(二)的思路,已经可以实现GIF和静态图的叠加了,但是我们已经知道,GIF最高支持8位256色,那么如果原图是真彩色的,则在生成最终效果图时,就涉及到真彩色到256的降色。真彩色是24位的,有2^24种颜色,每个像素用3个字节标识一个颜色,R、G、B各占一个字节,而256色每个像素只用一个字节从调色板中索引一种颜色,调色板最多有2

2012-12-26 17:56:10 7375 2

原创 图像处理--GIF和静态图叠加(二)

在图像处理--GIF和静态图的叠加中简单介绍了GIF的格式,可以根据编码协议自己写代码解GIF,组合GIF,也可以使用现有的一些资源来做。GDI+除了提升了GDI的绘图能力,工作范围,将面向过程变为面向对象外,还有一项大的贡献,支持GIF、PNG等更多的图片格式。GDI+在处理GIF上提供了一套方便的接口,可以获得GIF的帧数、帧间隔,还可以提取每帧图像,并保存为指定的格式。但是由于G

2012-12-25 20:44:41 4923

原创 图像处理--GIF和静态图的叠加

不少图片处理软件都有一种功能:用户上传一张静态照片,然后可以从软件提供的一些动态图片(gif)选择一种,常见的是相框之类的,和静态图片合成,得到新的动态图片。这就是GIF和静态图片的叠加。要实现上面的功能,思路还是比较清晰的。GIF图片格式可以看成是多个单帧图片的组合,从GIF图中提取每一帧图片,和静态图混合,最终再将混合后的n张图片组合成GIF。在实际操作中,涉及到GIF

2012-12-25 20:03:42 14733

原创 Everything原理及全盘搜索研究

Everything是个十分方便的本地文件搜索软件,谁用谁知道...一般每次启动后,它会有个初始化时间,初始化完成后,每次搜索,结果秒出。有一篇文章是讲Everything实现原理的,详情猛戳此处大体意思是,ntfs磁盘分区会有一个觉usn的日志系统,从这个日志系统中可以拿到类似全盘索引之类的数据,然后搜索时从这个数据格式出发,效率会比较高。但有个致命点是fat32格式的分区并没有这个us

2012-11-23 20:36:11 22546 1

原创 多线程数据同步总结(二)

性能问题凡是涉及到多线程数据同步都会有额外的性能开销。常见的同步方式按照性能开销从小到大(主要是耗时的多少)排序为:volatile读取、volatile写入、Interlocked API、SRWLock、关键段(带旋转锁)、内核对象。使用内核对象,比如互斥量、信号量等的开销最大,因为这时以切换到内核态,而从用户态切换到内核态,大概需要1000个CPU指令周期。关键段

2012-11-19 14:56:18 890

原创 boost中的mutex与lock

最近在多线程编程中多次使用到mutex来互斥,看了下项目的代码,有自己封装的mutex类,也有直接使用boost::mutex的,而boost中关于mutex可谓令人眼花撩换。这里总结一下。对于mutex和lock,要明确一点,真正起到互斥作用的mutex,而lock可以认为是协助mutex令我们在使用时更方便。搞不清楚二者关系的可以参考这里:从高中一次半夜不冲厕所的经历谈程序

2012-11-15 15:41:09 10014

转载 理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列

原文章连接:http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在

2012-11-14 15:36:34 7104 2

原创 多线程数据同步总结

在线程安全的单间类中提到了InterlockedCompareExchangePointer函数及CAS(Compare and swap)技术,或者成为Lock Free,及使用系统提供的基于cpu指令的无锁多线程数据同步技术。这里打算稍微学习并总结下windows平台下常用的多线程数据同步方法以及他们的区别。多线程同步,最常用的应该是加锁。常见的方式有临界区、信号量、互斥锁等。临界

2012-11-14 14:46:07 924

原创 构造Crash看C/C++内存分布

首先看一段必现的Crash程序。char* do_strcpy(char* pDstStr, const char* pSrcStr){ char* pRet = pDstStr; while ((*(pDstStr++) = *(pSrcStr++))!='\0'){;} return pRet;}bool __strcpy(const char* pSrcStr){

2012-11-13 18:37:30 1686

原创 线程安全的单间类

在网上看到一篇关于将线程安全的单例实现,http://www.haogongju.net/art/1688900。下面是他提到的出自google的源码:template class LazySingleton {public: static Ty_& GetInstance(){1: while(me_ == NULL || me_ == (void*)-1){2:

2012-11-13 11:17:09 929

原创 python 计算md5

import osimport timeimport md5#get md5 of a input stringdef GetStringMD5(str): m = md5.new() m.update(str) return m.hexdigest()#get md5 of a input filedef GetFileMD5(file): f

2012-11-02 16:35:44 9202

转载 PE文件与虚拟内存间的映射

(1)静态反汇编工具看到的PE文件中某条指令的位置是相当于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中所处的位置,即虚拟内存地址(VA)。(2)反之,在调试时看到的某条指令的地址是虚拟内存地址,我们也经常需要回到PE文件中找到这条指令对应的机器码。为此,我们需要弄清楚PE文件地址和虚拟内存地址之间的映射关系。首先,我们先看几个重要的概念。文件偏移地址(File

2012-07-31 20:40:38 3294

转载 虚拟内存,映射,分页机制

这是我找到的关于虚拟内存和分页机制的我个人比较容易理解的一篇文章。虚拟存储器的思想是程序、数据和堆栈的大小都有可能超过物理内存大小,由操作系统把当前使用的放在内存,而不需要的放在磁盘。         而绝大部分操作系统使用的虚拟存储器技术就是分页技术。         在虚拟存储器中,程序所产生的地址为虚拟地址,虚拟地址构成了虚拟地址空间。(当然了在没有虚拟存储器的系统上,程序产

2012-07-31 19:56:19 4966

原创 “当前目录”以及DLL搜索路径的问题

GetCurrentDirectory这个API用于获得进程的“当前目录”GetModuleFileName获取一个已装载模板的完整路径名称区别通过一个实验可以明显的看出void CCurrentDirDlg::OnBnClickedButton1(){ // TODO: Add your control notification handler code here

2012-05-05 18:03:03 1914

原创 应用程序无法正确启动,0x00000b

release程序拿给没有安装vc环境的机器运行,出现“应用程序无法正确启动,0x00000b”的问题,经过判断不是没有安装vc环境的原因。exe程序依赖了A.dll,A.dll在编译时依赖了b.dll和c.dll,后来用Depends查看dll的依赖,发现release版的A.dll中依赖了msvcr80.dll和msvcr80d.dll,release版依赖msvc80.dll是不正常的。

2012-05-05 15:20:46 2528

原创 Disable Language Extensions

今天自己编译jsoncpp的代码,只提取了jsoncpp-src-0.5.0版本中makefile下的vs7.1解决方案中的lib_json工程,然后在该工程中添加了一个自己的头文件json.h和源文件json.cpp,用于包装jsoncpp。然后引用了一个字符串处理的头文件,这个头文件里引用了和,结果编译后出现下面的错误:google了半天,才摸索出解决方案,把Property-->

2012-04-28 20:10:48 887

原创 windows平台下编译curl支持https

参看http://curl.haxx.se/download.html,curl有多个版本,会有是否包含ssl之分。如果需要使之支持https,就需要使用带ssl的版本。在Windows的平台下会有多个选择,想省事的话就直接下载win32-msvc带ssl版的,加压后里面会有一些curl依赖的dll,比如libeay32.dll ssleay32.dll openldap.dll等,这就是需要

2012-04-27 18:54:09 14594

原创 一个死锁的问题

问题是这样的,如下图所示:1.有一个线程模型,其中,MainThread为主线程,他有一些资源,比如两个互斥器mutex1,mutex2,下面统称为锁。2.这个主线程可以创建很多子线程thread1、thread2......threadn,主线程还有很多回调函数callback1、callback2......callbackn,这些回调函数在创建子线程时被挂到子线程上。3.这些子线

2012-04-25 17:46:46 1009

原创 c++模版的一些使用方法(四)

接着(三)的内容说,设计模式中有一种适配器模式,它的意思是,当两个接口不匹配时,创建一个适配器在中间进行转接,使原本不能在一起工作的两个接口可以在一起工作。这种类型不匹配的情况在普通代码层也会经常出现,比如函数的参数类型,模版的参数等。那么模版也可以起到适配器的作用。很好的例子是traits,stl中可以发到大量的使用。下面例子Responst类是一个模版类,接受一个参数T,要求T类型有一个fun

2012-04-21 18:04:16 553

原创 c++模版的一些使用方法(三)

c++模版的应用是可以分类的。按照用途,可以分为:  1)工程模版  2)算法和数据结构的解耦  3)工作于编译期的模版  4)XX的封装  5)适配器模式首先解释一下,这里的划分属于较高层的应用划分,但这些应用都是基于模版的一些共同特性的,比如带默认参数、特化和偏特化等。分别解释一下就是:(1)工程模版:《c++模版的一些使用方法(一)》中提到修改第三方库的应用属

2012-04-21 16:52:31 672

原创 c++模版的一些使用方法(二)

c++模版的其他技巧:1.编号生成器考虑下面的场景,对于int、char、double、bool、float这5种类型,我们希望对他们进行类型编号1-5,并且确保对于每种类型,它的编号不会改变,即每次调用函数获取该编号时,他都是唯一的且不变的。那么使用通过定义一个模版函数实现。int g_id=0;//全局id计数templateint GetTypeId(){ s

2012-04-16 17:43:23 1514

原创 c++模版的一些使用方法(一)

在一个项目中,我认为c++模版的主要应用是对一些基础组件的封装。因为基础组件往往是供上层开发人员使用的,并且它一般具有不确定性和支持的旷阔性,stl的容器是个很好的例子。容器支持n中类型,这表现了它的广阔性,它又可以通过顺序和链式实现,这表现了不确定性。我把这些“重量级”的应用认为是模版的主要应用。此外,有使用技巧的人也会通过使用模版来“耍一些小聪明”,这指的是通过模版简单化很多工作。这里

2012-04-16 16:23:22 894

原创 使用宏灵活的控制代码

这个系列记录了前一个项目中的一些心得,《接下来一段时间的工作》列了一个目录。不过具体记录时,没有按照目录的顺序。第一篇记一下关于宏的一些使用。有一些(特别是纯C++)程序猿,认为宏在代码中的作用不大,尤其是使用const XXX代替宏的号召使得很多刚开始学习C或者转为C++的人放弃了使用宏。其实宏有很多用处,尤其是纯C或者嵌入式编程中,比如:1.求一个结构体中某类型的偏移量、字节数等

2012-04-14 19:22:19 2829

原创 接下来一段时间的工作

前一个项目告一段落,需要总结的东西有很多,接下来一段时间将会分块具体总结一下。1.boost库方面的一些使用心得2.使用宏灵活的控制代码3.c++模版的强大功能4.字符编码和国际化的问题5.json数据格式的使用6.使用http协议的数据传输7.敏捷过程和基于敏捷过程项目的维护

2012-04-13 14:44:57 649

原创 Python2.7 IDLE无法启动等问题

Python2.7装好后出现一下问题:1.IDLE无法启动,但自装的PythonWin可以正常使用2.无法使用Tkinter查找原因,貌似和“tcl”有关因为机器上之前安装过OpenCASCADE的包,这个包本身也有一些和tcl有关的东西,因此系统的环境变量中有关于tcl的记录,猜测有可能是Python2.7安装时无法修改环境变量中关于tcl造成。卸载OpenC

2012-04-06 14:35:41 9159

原创 使用hook 拦截消息

钩子(Hook),是Windows消息处理机制的一个平台,用用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的(我始终认为用hook去钩当前自己的进程没多大意义,去钩别的进程才比较实在)。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。  钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。

2012-03-23 11:07:13 9787

原创 程序Crash调试方式--MAP文件

什么时候用MAP文件调试1.调试程序时,我们发现Debug版的exe可以完全正常运行,而Release版却经常莫名其妙Crash。2.程序运行时直接崩溃,只显示一个出错地址,让联系开发人员。这样根本找不到程序Crash的位置。3.但在大量进行压力测试时,尤其是多线程测试时,有可能同时出现十几个错误,这时VC本身的调试跳转可能跟不到核心出错的现场。什么是MAP文件MAP文

2012-03-19 17:43:39 3356

批量删除C和C++注释

使用Python语言 ,实现批量删除C/C++类型注释

2012-06-08

openssl编出的dll和lib

需要编curl支持ssl版本,但是编openssl失败的同学可以直接下载,解压后放到openssl的out32dll这个文件夹中,然后就可以编curl了

2012-04-27

HookDemo系统钩子

使用系统钩子获取其他进程的输入文本数据,监视作用

2012-03-23

SWUST成绩查询工具

MFC和ATL的前台 Python2.7的后台 文件数据流

2011-05-06

C语言多元线性回归函数库

void LET(double **CoefficientMatrix, double *ConstantMatrix, int m, /*系数矩阵为m行n列*/ int n, /*常数矩阵为1行n列*/ double *Result) 参数说明:第一个参数所指向的二维空间存放了系数矩阵,m行n列,每一列为一组观测值。比如第一列是第一组观测值,x1、x2、x3、x4……xm。每一行是相同量的不同组观测值,如第一行,x1、x11、……x1n 第二个参数是n组观测值的常数值 第三个参数为系数矩阵的行数 第四个参数为系数矩阵的列数,也为常数矩阵的长度 第五个参数为返回结果,即所求线性回归方程的系数,从b0-bm共m+1个

2010-10-27

C语言计算逆矩阵的函数

函数入口: int inv(double *p,int n) 参数说明: double *p-----指向所求矩阵a[n][n]的第一行a[0],所以,当函数返回时,逆矩阵将存储在a[n][n]中,将覆盖原矩阵。一定要记得备份原矩阵。 int n---------矩阵维数

2010-10-27

C语言全排列算法函数库

入口函数 void perm(int *list, int k, int m,int **outArray) 假设求m个数的全排列,则: 第一个参数存储了1-m这m个数 第二个参数为0 第三个参数为m-1 第四个参数开辟了一个m!行、m列的内存区域,用于保存计算所得的全排列

2010-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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