自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HavenZhao的专栏

专注物联网/架构设计/技术管理

  • 博客(110)
  • 资源 (17)
  • 收藏
  • 关注

原创 工程师最重要的能力是什么

手机响了,是一个实施工程师打过来的,说现场的数据采集不上来,问怎么解决。我问软件的版本,仪器的型号,操作系统的信息,具体的问题描述。我告诉他可能是什么原因,给了一个解决办法,让他尝试一下。他试了一下后,说还是不行,又问怎么办,于是我又给他一个办法,他又去尝试了,反馈回来说还是不行,又问我怎么办。我然后我又给他提供方案,继续解决……终于解决了。        这种场景不是一次两次了,也不是一个人

2017-11-09 22:37:21 4542 3

原创 Mongodb中C++客户端与Java客户端的交互

Mongodb中C++客户端与Java客户端的交互,解决中文乱码的问题;C++客户端插入文件的简单例子。

2013-10-25 15:43:22 4480 1

原创 VS2010错误error C2678

之前用的好好的,今天整理了一下工程,删除了一些没用到的.h和.cpp文件,重新编译,发生错误:error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)代码定位在if语句里:

2013-10-24 11:28:09 8672 2

原创 VS2010编译Mongodb C++驱动

完成了VS2010编译Mongo C++ Driver,中间遇到了不少问题,记录一下。

2013-10-22 15:23:42 12214 3

原创 Linux下编译mongodb以及C++客户端驱动

想在Linux下编译一下mongo和它的C++驱动,网上一堆教程,官方一堆文档,实现起来依旧困难重重。我就很纳闷了,本来mongodb就是C++写的,为什么不直接提供出驱动,而java,C#之类的,倒是直接提供了jar包和dll文件。今天终于编译成功,赶紧记录下来。Linux版本:CentOS 5.4C++驱动版本:mongo-cxx-driver-v2.2Mongodb版本:mong

2013-10-14 17:06:31 16468 4

原创 Linux守候进程

在一个远程监控系统中,我们使用了守候进程。结合《Linux高级程序设计》的相关内容,对守候进程做个整理。守候进程,又称守护进程(Daemon),是在后台运行的一种特殊的进程,脱离于终端。类似于Windows服务程序。守候进程适用于像我们项目中的数据采集类的程序,因为客户的误操作等原因,造成服务器的重启,这时要保证数据的接收是正常的,那么,很有必要将采集程序运行在后台,不被显示的终端界面所影响。

2013-09-13 08:34:07 3241

原创 井场数据采集系统的架构演化

XXX井场数据采集系统,是实现XXX物联网的基础,它从井场设备上采集钻井工程过程中的各种数据,远程传输到地区公司的数据中心,提供实时和准实时数据给远程作业支持中心和专家中心的各种专业软件进行处理,指导井场钻井作业。采集系统最早开始于2012年初着手架构和开发,期间经历了从无到有,从有到优的一个改进过程,共发生过四次架构演化。vcsky.net探索出来的架构这个时期的架构,可以说是一种猜想的

2013-09-11 08:24:37 6051

原创 Socket简介

Socket,这是一个老生常谈的话题,我只是梳理一下其相关知识点。Socket is a port。在Linux中,网络编程是通过Socket接口来完成的。Socket接口是一种特殊的I/O,也是一种文件描述符。一个Socket 用一个半相关描述: {协议,本地地址,本地端口}。通过IP可以建立网络中两个设备之间的连接。通过Sockets使用TCP/UDP服务来建立网络中两个应用程序或

2013-09-09 08:34:36 3398

原创 windows下使用net-snmp实现agent扩展(四)

在前三篇的内容里,介绍了使用net-snmp实现agent的Get/Set命令,下面介绍一下发送trap消息。发送trap消息时,系统默认的端口是162。使用下面的代码,可以实现trap消息的发送。//该函数发送实时报警信息。与发送一般信息端口不同void init_alarm_info(void){DEBUGMSGTL((“dcsserver”,“initializing (sett

2013-09-05 09:13:06 5228

原创 windows下使用net-snmp实现agent扩展(三)

时间隔得太长了,我都快忘了什么是snmp了,知识啊知识,很容易在不用的时候忘却,也可能是自己脑袋不好使了吧?翻了翻代码,赶紧总结下,不然真不会了……在上篇博客中,实现了get/set一个字符串型变量,现在来实现对多个字符串变量的get/set。假设要实现获取CPU利用率、内存占用率和磁盘占用率的的功能,建立两个文件:alarmInfo.h和alarmInfo.c。在alarmInfo.h中

2013-09-04 08:41:02 5266 4

原创 windows下使用net-snmp实现agent扩展(二)

刚刚实现了int型的get命令,可能更多的情况下,我们更需要的是字符串类型的。在实现int型的时候,用到了netsnmp_register_int_instance这个函数,很自然想到如果是string型的,用类似的netsnmp_register_string_instance,或者netsnmp_register_char_instance不就行了?很可惜的是:net-snmp并没有提供这两个

2013-08-30 09:31:05 6231 1

原创 windows下使用net-snmp实现agent扩展(一)

项目上需要用snmp来做告警监控管理,达到对系统的运行状态的监测。这几天研究了一下,发现网上资料比较少,大多数抄来抄去,能够正确运行的更少。所以,总结了一下,把相关的代码放上来,希望能够帮助同样遇到困惑的朋友。 havenzhao http://vcsky.net项目名称为DCS系统,采用VS2010开发,DCS作为被监测的对象,因此需要实现snmp的Agent扩展。最开始的方法,采用了W

2013-08-30 09:26:29 12029 6

原创 读写锁(Read-Write Lock)的一种实现

项目中用到了此类,实现了多个线程读、单个线程写的功能,基于Windows平台。思想:两个相关的锁,一个用于读,一个用于写。可以多个同时读,但只能一个写。比传统的互斥锁,提高了一定的并发性。#ifndef READER_WRITER_LOCK_H_ #define READER_WRITER_LOCK_H_ /***********************************

2013-08-30 09:20:45 4459

原创 levelDB按时间范围检索

levelDB是谷歌的开源key-value存储系统,性能很高、设计思想很妙、使用起来也很简单。但像绝大多数的No Sql数据库一样,只适合做单一的查询,不能胜任复杂的关系组合查询。在实际项目中,我们应用levelDB,需要针对其进行一段时间的数据检索。于是,通过时间加减,来完成的这项功能,在此贴出简要代码,仅供参考。http://vcsky.net  by havenzhao

2013-08-30 09:19:15 8491

原创 与Java的MD5算法一致的C/C++的MD5算法

网上C/C++的MD5算法很多,但找了好久,也没找到合适的能与JAVA的MD5结果一样的算法。最后还是把以前项目里的一个算法改了一下,实现了和Java传输文件时,校验文件的功能。Java的MD5算法比较统一,而C++的算法则很多版本,只能C++往Java上靠拢。md5.h#ifndef _DMSUTIL_H#define _DMSUTIL_H#ifdef __cplus

2012-12-09 15:57:13 6706 1

原创 实时数据缓存管理的初步设计

http://vcsky.net  by havenzhao对于实时较大数据量的缓存管理上,设计的方式有很多。在此提出一种初步的、较粗略的思路,仅供参考。背景:系统分为三层,数据采集层(采集底层的数据),消息管理层(对采集上来的数据进行处理)、消息接口层(对消息解析封装、处理客户端的Socket请求等)。在数据的缓存管理上,采用双缓冲区模式的管理机制。http://vcsky.

2012-05-10 12:30:01 5371

原创 VS2010设置VC6的字体样式及背景色、选中字高亮

习惯了VC6.0的fixedsys字体,用VS2010还真不习惯。把VS2010打造成经典的、熟悉的模样,也并非难事。网上有相应的文章,我再记录下来,主要是为了自己查找方便(刚刚重装了系统,一切从头再来,从网上找半天,浪费时间)。http//vcsky.net  by  havenzhao使用字体:Fixedsys Excelsior 3.011、首先下载字体:http://w

2012-04-28 15:12:29 17904 6

原创 VC++ GDI画立体管道

都是以前的一些代码,今天回头整理的时候,看到一些有些用的东西。在做SCADA的时候,所涉及的绘制对象,有立体管道。下面的代码,就是使用GDI来绘制3D立体管道的。下面是核心代码(略显冗余),如果使用,稍作修改即可。http://vcsky.net  by havenzhaovoid Draw(CDC *PDC) { int pointNum = m_PointArray.Get

2012-04-24 10:42:11 4827

原创 程序员怎样读书

HavenZhao  http://vcsky.net    做为一名程序员,我一直在读书,一直在学习。可现在仔细回想一下,却似乎没有记住的书,大脑一片空白,读的书去了哪里?    越想越觉得可怕,大把大把的时间,N多的书,却跟没读一个样。我不禁要反思这个问题,这也许不是一个人身上的,也可能是好多程序员的通病。造成这种结果的原因,可能在以下几个方面:    1、读的书太泛泛,没有重点。

2012-02-08 17:09:35 4646 1

翻译 现代浏览器的工作原理【二】

3.解析和DOM树建设3.1 一般解析由于解析在渲染引擎中是一个很重要的过程,我们将更加深刻的讲解。让我们开始一个有关解析的简要介绍。解析文档意味着将其转换成一些有意义的结构----代码可以理解和使用。解析的结果通常是一个树的节点表示文档的结构,它被称为解析树或语法树。范例 - 解析表达式2 + 3 - 1,可以返回此树:图5:数学表达式树节点3.1

2012-01-30 16:47:35 4116

原创 远程过程调用RPC简介

产生动因:1、开发基于SOCKET的网络软件非常复杂(如:FTP、TELNET),2、位于不同机器上的软件互操作困难(如:连接管理、异构)。从而导致RPC(Remote Procedure Calling )的产生。工作原理:以对某银行帐户的一个存款过程为例:调用过程:如上图所示,共分为如下几步:1)客户按本地调用

2012-01-17 11:07:01 2482

原创 MapReduce初探

云计算的关键技术主要包括:虚拟化、海量数据处理、大规模分布式存储、消息通信、快速部署、资源调度、多租户技术、许可证管理与计费。。。作为一个到目前为止还没有一个清晰的统一的概念的应用模式,云计算无疑是有着广阔的前景。    本文对云计算中所用到的MapReduce做一个小小的初探,简要介绍一下其思路。What?什么是MapReduce。MapReduce是一个软件架构,是一种

2012-01-11 17:32:44 1253

原创 2012年工作计划

新的一年开始了,在简单回首了2011年的工作情况后,是时候对2012年的学习与工作进行一定的规划和打算了。    2012年,我的主要目标如下:    一、学习软件架构的知识,在11月份报考架构设计师考试,力争通过。参加考试的目的有两个:一是督促自己学习,有目标的学习更加有动力,虽然有些东西用不上;二是拿个证,以前我很看不起这种证,但通过最近公司组织办理居住证的事情上,我意识到,有

2012-01-09 17:10:16 1895

原创 2011年终工作总结与思考

2011年已到尾声,在这最后的几天里,我需要的是认真思考、总结一下今年的工作。    今年的事情比较专一,我一直在开发,其实很喜欢这种从头到尾做一件事情的感觉,比起东跑西颠,至少能在某一方面,有一定的积累。在技术水平上,今年是深入的一年。我把做事方式改变了一下,对于一个问题,更想弄清楚它的本质所在。以前,我可能更愿意解决问题,而不去关注它的原理,虽然这样也能解决问题,但是并没有深入,而是陷入了

2011-12-20 17:18:28 6639 5

原创 程序员,闯你所处的行业

最近看到一个帖子,说的是一个程序员不想编程了,想转到金融行业里去,他说在IT领域很迷茫,累,也没赚到多少钱,他还说对金融很感兴趣。我想这个问题,也是大多数程序员所困惑的。能够有这样的思考,首先是值得肯定的:因为这至少说明他在考虑他的前途,他在进取,他想要更好的生存。编程有没有前途,用什么开发语言,要不要转行,诸如此类的问题一直在各程序论坛上被提起。大家讨论的不亦乐乎。对于程序员转行,我想简单说一下

2011-12-14 17:13:05 2934 3

原创 Windows线程同步(一):临界区对象

为什么使用线程同步?同步可以保证在一个时间内只有一个线程对某个资源(如操作系统资源等共享资源)有控制权。共享资源包括全局变量、公共数据成员或者句柄等。同步还可以使得有关联交互作用的代码按一定的顺序执行。线程同步的方式?同步对象有:CRITICAL_SECTION (临界区),Event(事件),Mutex(互斥对象),Semaphores(信号量)。本文重点讲解CRITIC

2011-11-22 17:04:35 6140

原创 [推荐]《C/C++高质量编程》笔记

引言:《C/C++高质量编程》这本书,很好的给出了一些编程规范,是每一个C/C++程序员都应该认真读取的一本书。几次阅读,几次忘记,今天把一些关键点记录下来,便于以后继续学习和参考。建议此书和谷歌C++编码规范一起使用,相得益彰。 【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。【建议2-2-1】尽可能在定义变量的同时

2011-11-22 10:01:57 2766 2

原创 浅谈几种创建型模式的优缺点及其相关性

本文只是从文字、概念上来描述一下,并没有给出类图和相关代码,适合有一定基础的人阅读。在23种GOF设计模式中,创建模式主要有以下几种:简单工厂模式Simple Factory工厂方法模式Factory Method抽象工厂模式Abstract Factory 单例模式Singleton多例模式Multiton建造模式Builder原型模式 Prototype

2011-11-11 23:32:03 7827

原创 软件设计原则----迪米特法则(LoD)

“一个对象应该对其他对象有尽可能少的了解”“Only talk to your  immediate friends”“Don’t talk to strangers”“每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位”  ……来源:迪米特法则(LoD)最初是用来作为面向对象的系统设计风格的一种法则,是很多著名系统,如火星

2011-11-04 10:07:55 3268

原创 软件设计原则----合成/聚合复用原则(CARP)

“要尽量使用合成/聚合,尽量不要使用继承。”陈述:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。引入:如我们所知,在面向对象设计里,不同环境中复用已有设计和实现的基本方法:继承。合成/聚合。1、继承复用继承复用通过扩展一个已有对象的实现来得到新的功能,基类明显地捕获共同的属性和

2011-10-29 19:18:37 7365 2

原创 软件设计原则----接口隔离原则(ISP)

“使用多个专门的接口比使用单一的总接口要好”。“一个类对另外一个类的依赖性应该建立在最小的接口上”。陈述:不应该强迫客户依赖于他们不用的方法。一个类的不内聚的“胖接口”应该被分解成多组方法,每一组方法都服务于一组不同的客户程序。例子: Door可以加锁、解锁、而且可以感知自己是开还是关; Door是抽象基类,客户程序可以依赖于抽象而不是具体的实现。

2011-10-26 09:07:59 4107 1

原创 软件设计原则----依赖倒置原则(DIP)

"要依赖于抽象,不要依赖于具体。”“要针对接口编程,不要针对实现编程。”陈述:高层模块不应该依赖于低层模块。二者应该依赖于抽象。抽象不应该依赖于细节。细节应该依赖于抽象。分析:所谓“倒置”是相对于传统的开发方法(例如结构化方法)中总是倾向于让高层模块依赖于低层模块而言的软件结构而言的。高层包含应用程序的策略和业务模型,而低层包含更多的实现细节,平台相关细

2011-10-25 15:48:45 4605

原创 软件设计原则----LisKov替换原则(LSP)

“一个软件实体如果使用的是一个基类的话,一定适用于其子类,而且根本不能觉察出基类对象和子类对象的区别。”陈述:子类型(Subtype)必须能够替换他们的基类型(Basetype)Barbara Liskov对原则的陈述:若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型。通俗地讲

2011-10-21 10:32:56 3893

原创 CPictureEx类实现GIF图片的缩放

关于CPictureEx类,网上很多文章了。但基于CPictureEx展示的GIF图片,却无法缩放,有些不方便。因项目中用到了这个类,而且要实现缩放的功能。于是研究了一下,现将相关代码写下来,仅供参考。分两步:1、主要是修改OnPaint函数,这个方法里使用了BitBlt

2011-10-09 16:20:12 5872 2

原创 软件设计原则----开-闭原则(OCP)

设计一个模块时,应当使该模块在不被修改的前提下被扩展,即可在不必修改源代码的情况下改变该模块的行为。 陈述: 软件实体(类、模块、函数等)应该是可以扩展的,同时还可以是不必修改的,更确切的说,函数实体应该:(1)对扩展是开放的当应用的需求变化时,我们可以对模块进行

2011-09-27 08:16:20 12371 25

原创 软件设计原则----单一职责原则(SRP)

陈述:就一个类而言,应该只有一个导致其变化的原因分析:一个职责就是一个变化的轴线。一个类如果承担的职责过多,就等于将这些职责耦合在一起。一个职责的变化可能会虚弱或者抑止这个类完成其它职责的能力。多职责将导致脆弱性的臭味。示例1:  Rect

2011-09-26 08:43:02 7035 7

原创 html 调用ActiveX

html网页调用ActiveX控件时,要获取到ActiveX的ClassID,这个ClassID是注册到系统里的,而不是工程中的uuid,(下图为uuid)。正确的是在注册表的HKEY_CLASSES_ROOT中查找你的工程名的“项”,找到后,其子键CLSID的值就是

2011-09-19 10:25:10 7122 1

翻译 现代浏览器的工作原理【一】

序言作为一个Web开发者,学习的浏览器操作的内部可以帮助您做出更好的决策,以及开发实践的最佳做法。 虽然这是一个相当漫长的文件,我们建议你花一些时间来挖掘研究, 我们保证你会很高兴你这样做的话。简介Web浏览器可能是最广泛使用的软件,在本文中,我将解释它们是如何在幕后

2011-09-08 09:09:33 11877 1

原创 浏览器内核分类

浏览器的种类成千上百,但所基于的内核,却没有几个。目前主流的浏览器内核主要为以下四种:一、Trident内核,代表产品Internet Explorer说起Trident,很多人都会感到陌生,但提起IE(Internet Explorer)则无人不知无人不晓,由于其被

2011-09-06 16:17:47 22044 2

原创 需求分析知识点滴【二】

1. 完成需求获取的标志用户总是按其重要性的顺序来确定用例的,如果用户不能想出更多的用例; 如果用户开始讨论已讨论过的用例或需求; 如果用户提出新的用例,但却可以从其它用例导出或是其它用例的可选过程;如果所提出的新的需求是针对将来产品的而不是现在讨论的特定产品;如果用

2011-09-04 18:46:40 2804 1

EasyModbusJava.jar

用于实现java的modbus,具体资料可以参考官网 import de.re.easymodbus.modbusclient.*; public class run { public static void main(String[] args) { ModbusClient modbusClient = new ModbusClient("127.0.0.1",502); try { modbusClient.Connect(); modbusClient.WriteSingleCoil(0, true); modbusClient.WriteSingleRegister(0, 1234); modbusClient.WriteMultipleRegisters(11, ModbusClient.ConvertFloatToTwoRegisters((float) 123.56)); System.out.println(modbusClient.ReadCoils(0, 1)[0]); System.out.println(modbusClient.ReadHoldingRegisters(0, 1)[0]); System.out.println(ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(11, 2))); } catch (Exception e) { } } }

2018-08-15

modbus4j完整源码

modbus4j的源代码,从官网上下载的,2.0.2版本的,里面有modbus4j-2.0.2.jar,以及完整的源代码,实现了modbus rtu、tcp等方式,可以参考学习。

2018-08-15

GUI Design Studio 使用教程

GUI DesignStudio 是一个给应用软件设计图形用户界面的专业工具,它可在画基于web形态的原型时,可以用Axure RP、Balsamiq Mockups很方便的画出来,但要是对象是客户端软件的时候,Axure却不是首选。 以快速的把思路,以可视化的方式来表现出来,并可以和客户进行交流想法。

2018-04-03

QT多语言开发文档

使用QT开发软件的多语言版本是很方便的,借助QT-Linguist工具和几个函数就可以实现了。 第一步:在.pro文件中添加TRANSLATIONS项,例如: TRANSLATIONS = xxx_ZH_cn.ts \ xxx_GB_en.ts 其中XXX_ZH_cn可以任意命名,ts固定不能改。

2015-03-26

InstallShieldUserGuide

InstallShield UserGuide,专业软件打包工具的说明书

2013-04-30

windows下的libevent静态库

Windows下面编译出来的libevent的Lib库,版本是libevent-2.0.19。libevent是通信网络库,用好了很有用的!

2012-10-16

我用Visio制图(超好的Visio入门级提高教程)

用Visio制图的教程,超好的Visio入门级提高教程

2012-09-19

net-snmp编译好的lib库

net-snmp5.7.1版本的lib库及dll文件,使用VS2010编译出来的,debug版本的。包含netsnmp.lib netsnmpagent.lib netsnmpmibs.lib netsnmptrapd.lib netsnmp.dll,以及相应的头文件,可以在windows平台下开发net-snmp的Agent扩展程序

2012-08-09

snmp trap命令接收软件

windows平台下,用于接收snmp协议的trap消息的小软件,可以测试你编写的trap命令是否发送成功了

2012-08-09

架构之美中文精选版

架构之美中文精选版,推荐的一本学习软件架构的书,值得一看。

2011-11-08

梅花雪日历控件,支持Firefox

修正页面不能使用网页标准化格式问题(即页面可以加下下面一行代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">) 如果中文变成了乱码,原因是js的编码格式和你的引用文件编码格式不一致造成的,解决方案有2个: 1、修改js文件,使它的保存编码与引用文件相同,比如都是gb2312,或都是utf-8; 2、修改引用代码,增加charset属性,例如: <script type="text/javascri

2011-05-17

梅花雪树控件2.0,好用的树控件

梅花雪树控件2.0的功能有了很大的改进,加入了动态加载,可以使用xml,js,一个数组等来作为数据源,在节点中还加入了checkbox。 使用方法可以从网上搜索,或者仔细读一下文件的源码。

2011-05-17

Linux C培训教程

阿里巴巴的一份培训教教程,属于高级类的,不是入门级的,请看好再下

2011-04-19

陈宝楷_GDI+教程

一个不错的介绍使用C++的GDI+的教程

2011-04-18

好用的树形控件实例CTreeCrlt

树形控件实例,VC6.0。包括了树控件的自绘,效果不错,值得一看。

2011-01-19

objective-C教程

objective-C教程,英文版的,喜欢的就下吧!

2010-12-24

空空如也

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

TA关注的人

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