自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黄国强的专栏

C++方面的老家伙了

  • 博客(119)
  • 资源 (2)
  • 收藏
  • 关注

原创 软件之禅(十一) 消息

我认为消息分为以下三种:* 情形1,只发送不关心是否收到,即广播消息,类似于网络通讯的IP协议和Redis的频道消息 * 情形2,发送消息并确保客户端一定收到 *情形3,发送消息并确保客户端并执行指定的任务,典型的就是函数调用

2024-03-30 20:50:40 307

原创 麦芯(MachCore)应用开发教程4 --- 文件系统

类似其他操作系统,麦芯也内置一个文件系统。麦芯文件系统使用Redis发布/订阅模式来实现消息的传递。麦芯文件系统中的每个文件就是一个频道,消息发布者将文件改变消息发布到这个文件频道,订阅到这个频道的订阅者可以接收文件改变消息。

2024-03-30 17:35:40 382

原创 软件之禅(十)数据库

数据库对应于图灵机的纸带。从这点出发,我对数据库有了新的认识。即发现了数据库的通讯价值

2024-03-16 20:21:07 427

原创 麦芯(MachCore)应用开发教程3 --- 组件,方法和字段

麦芯增加组件以及组件包含的方法和字段的方法介绍

2024-03-16 17:40:41 465

原创 软件之禅(九)对象分类(Classify)

在面向对象设计原则中,有一条原则就是组合优先于继承。显然,上述组合的方法更合理,组合的软件模型即为桥接模式。当然,也不能说第一种方法完全不对,在性能敏感场合,第一种模式结合template可以获得非常好的性能

2024-01-22 14:40:00 350

原创 麦芯(MachCore)应用开发教程2 --- 时序

相对于switch/case,Lambda更优雅,更符合面向对象

2024-01-22 13:36:51 506

原创 软件之禅(八)乔布斯谈面向对象

面向对象软件开发只是两件事:1 开发各种处理具体事务的对象2 开发负责创建上面事务对象的工厂对象

2024-01-10 13:42:18 420

原创 麦芯(MachCore)应用开发教程1 --- 设备应用操作系统软件

麦芯致力于给设备厂商提供一个开发工具和平台,让客户快速高效的开发自己的专用设备软件,给客户创造价值。

2024-01-10 10:51:24 843

原创 新申请了公众号

欢迎关注。

2023-12-28 13:02:43 337

原创 软件之禅(七)面向对象(Object Oriented)

从第一性原理,找出领域中最本质的元素,在此之上构建整个软件模型和框架。综上可以看出,这个抽象分析能力才是人与人产生差距的地方。

2023-11-11 12:00:24 303

原创 软件之禅(六)图灵机

现代计算机的本质是图灵机,它是由英国数学家和逻辑学家艾伦·图灵在1936年提出的。

2023-10-13 09:50:57 129

原创 软件之禅(五)Input 出场

过程有些复杂,为什么简单的一个赋值需要绕这么大的弯子?答案是,这三个基类 Ouput、Input 和 Data 可以在不必知道派生类的情况下进行交互。Ouput、Input 和 Data 以及后续基本类本质上是桥接模式(bridge pattern),在我看来,所有架构都可以看做桥接模式或桥接模式的变体。这篇文章我们引入新的概念,即输入(Input)。同样我们也需要做个设计,封装后续的变化。AfcQtEdit 既是 Output 也是 Input,故需要同时继承 Output 和 Input。

2023-06-12 11:03:59 271

原创 软件之禅(四)用观察者模式连接 Data 和 Output

所以,这个字符串观察类应该从 Output 继承。下面是类图,图中 AfcQtEdit 是观察类,DataString 是字符串主题类。正如上面提到的,这样的设计达到了解耦的目的。后续主题和显示是独立发展的。比如,Output 可以增加对 MFC 甚至浏览器的支持,而 Data 无需进行任何修改。为了将 Data 和 Ouput 解耦,我们这里的 Data 和 Ouput 是使用观察者模式来交互。Data 是主题,Ouput 是观察者。在QT 的对话框中添加如下代码。黄国强 2023/06/09。

2023-06-09 23:09:48 106

原创 软件之禅(三) 0,1,n

我们认为,事物分三种情形,分别是不存在、存在一个和无数个。用面向对象来描述,即为空对象(Null Object)模式,单例(Singleton)模式和组合(Composite)模式。

2023-06-02 12:03:02 100

转载 git 提交类型(type)(转)

revert: 恢复(Revert a commit),是把这次提交的修改给还原。. git: 添加或修改. gitignore 文件[不可见]. publish: 发布新版本[新版本]. Chore: 构建过程或辅助工具的变动。. cl: 对 CI 配皿文件和脚本的更改。. config: 修改配置文件(配置). docs: 添加 l 更新文档。. tag: 发布版本/添加标签。. format: 格式化代码。. patch: 添加重要补丁。. feat: 引入新功能.。. file: 添加文件。

2023-05-31 16:28:40 459

原创 软件之禅(二)数据类和输出类

“架构反映需求,设计封装变化”。继续前文说到 switch 存在的问题。这里 switch 就是提醒你这里是个变化点,需要用面向对象的方法做个设计。

2023-05-24 10:59:43 95

原创 软件之禅(一)Hello,World!

这段代码问题很大的,这种 switch 里面套 swtich 的代码最大的问题是无法维护。我们先从输出开始分析,输出有很多形式,比如,显示器,打印机,磁盘,扬声器,网络等等。这个原理因为马斯克而广为所知,马斯克对于事物的认知远高于常人,这和他经常用“第一性原理”分析事物分不开的。个人打算写一个系列文章,试图用第一性原理来把我自己掌握的知识梳理一遍,看看是否能更深入的认识软件的本质。" 是内部字符串数据。而数据也有很多形式,比如,上面的是字符串,还有整形数,浮点数,图像等等。黄国强 2023/5/19。

2023-05-19 10:52:18 328

原创 什么是时序

PC端做设备控制软件,有一个核心概念叫做时序,这里分享一下我的认识。先看代码。// 时序函数1void sequence1(int& step){switch(step):{ case 0: // do something step++; break; case 1: // do something step++; brea...

2021-10-14 14:51:59 6200

原创 C++ Follow Me(4): 封装

C++ Follow Me(4): 封装黄国强 2007-3-30 C++与C最大的不同,就在于C++可以将数据和操作数据的函数放在一起,变成一个独立的物体。即,类(class)。典型的好处就是调用一个函数不用传很多参数了。 但对于很多人来说,把哪些函数和数据放在一个类中,却是个大问题。事实上,在我们周围,设计不良的类比比皆是。 在上一篇中,我们从职责的角度解决了如何得到...

2020-04-08 15:57:53 205

原创 C++ Follow Me(3): 类的产生(下):从职责中提取

C++ Follow Me(3): 类的产生(下):从职责中提取黄国强 2006-12-21 在C中,软件可以认为是函数的集合。我们一般是从功能中来提取函数并将之模块化。与C不同的是,C++程序是由一系列类组成。所以按功能来获得类的出发点是不对的。那么,我们应该从什么角度才能得到我们所需的类了?答案正如标题所述,从职责中提取。 职责(responsibility)和功能(fu...

2020-04-08 15:56:33 214

原创 C++ Follow Me(2): 类的产生(上):从封装函数开始

C++ Follow Me(2): 类的产生(上):从封装函数开始黄国强 2006-11-29 C++ Follow Me(1)中对面向对象的必要性作了一些叙述,如果C程序员应该怎样才能成长为一个C++程序员呢?我这里就介绍一个方法可供有兴趣的朋友参考。 比如,我现有一个用C写的复杂函数。首先它有很多函数参数,而且函数内部存在很多局部变量。现在我们对他进行重构。下面为例子代码...

2020-04-06 17:17:08 229 1

原创 C++ Follow Me(1): 你面向对象了吗?

C++ Follow Me(1): 你面向对象了吗?黄国强 2006-7-12 传统的C的编程方式是以函数为中心的编程方式,换句话,整个程序就是函数的集合。有人要问,这有什么问题吗?当然没有问题。在面向对象技术出现之前,用过程式的设计方法依然构建出很多出色的系统,甚至有的现在还在运行。 那么我们为什么还需要向面向对象的方法转变呢?一个很现实的问题就是经济方面的问题。用面向对象...

2020-04-05 00:16:10 178

原创 C++代码的组织

C++代码的组织黄国强 2010-2-23军队编制:一个 师包括五到六个团;一个 团配有三个营;一个 营配有四个连左右;一个 连由三个排组成;一个 排由三个班组成;一个 班大约由十名战士;同样我们的代码也需要编制,我是这样定义代码编制的。一个主程序包括10个(或以下)DLL(动态链接库);一个DLL包括10个(或以下)namespace(名字空间);一个namespace包含...

2020-01-24 13:05:18 1184 3

原创 一次成功的重构实践4 - 万物皆对象

一次成功的重构实践4 - 万物皆对象黄国强 2019/3/25 前文说到所有IO卡可以抽象成三个函数。如下是重构前的代码,打开三色灯的红灯。// 头文件#define RED_LIGHT 0x00,0x00,0x03 // 三色灯的红灯// cpp 文件 BitOn(RED_LIGHT); // 点亮红灯 这里用到了宏,即红...

2019-03-25 16:35:02 307

原创 一次成功的重构实践3 - 抽象的艺术

一次成功的重构实践3 - 抽象的艺术黄国强 2019/2/7 抽象能力的培养非常重要。所谓抽象即抓住事物的本质规律,透过现象看本质。一个程序员工作多年,写代码的技术都会掌握。但是如果想做架构,缺乏抽象能力是不行的。 这就好比工匠和艺术家,前者只能做到是技艺纯熟,不断重复自己。艺术家往往可以表达人类普遍情感,探索客观世界的规律。比如,物理学上补色原理就是印象派画家最...

2019-02-07 10:58:39 313

原创 一次成功的重构实践2 - 架构设计的目的

一次成功的重构实践2 - 架构设计的目的黄国强 2019/1/27        华为老总任正非在1月9日在杭州研究所业务汇报会上的讲话:表示在软件工程能力提升上,我们最缺乏的是对宏观架构有清醒认识的人才。建立公司是一个架构;建立公司的利益体系也是一个架构;任何产品都是架构第一;软件重构一定要从宏观架构入手。        这段话蛮应景的,正好总结了我去年的工作。不过话说华为这么个大公司...

2019-01-27 10:26:33 436 1

原创 一次成功的重构实践1 - 概述

一次成功的重构实践1 -  概述黄国强 2019/1/20很长时间没写blog了,原因很简单,工作基本上遇不到问题,因而思考少了,自然也没有写东西的动力。这次年会之所以拿到了公司特殊贡献奖,是因为去年将原先的软件架构重写,使公司软件发生了有目共睹的巨大变化。在这里总结一下重构过程。重构前与重构后的解决方案比较:图中是原先的解决方案和现在解决方案的比较,从中可以看到,整个解决方...

2019-01-20 11:27:20 527

原创 用行为将对象归类

用行为将对象归类黄国强 2017/12/19学习C++从封装开始。那么封装什么呢?当然是封装数据还有操作这些数据的函数。由于经常封装数据,很多开发者会默认建立这个观念,即:封装就是封装数据。事实上这个观念是错误的。举一个地铁闸机的例子。闸机有两种状态,可以通过和不可以通过。有两种设计方案。设计方案1:class CGate{public: CG

2017-12-22 10:10:25 355

原创 Microsoft Visual Studio 调试监控器(MSVSMON.EXE)未能启动

Microsoft Visual Studio 调试监控器(MSVSMON.EXE)未能启动,关掉防火墙,问题解决。

2017-10-25 16:37:55 5807 1

原创 从ACE难学说起

从ACE难学说起 黄国强 2005年01月12日                                       ACE很难学,这是得到公认的。主要因为两个方面原因导致的。一是因为网络软件开发非常困难。二是因为ACE这个非常庞大的体系很难掌握。这个体系共有30多位核心开发者开发,全世界共有1700多人作出了贡献。在学习ACE之前,推荐掌握下列基础知识:深入掌

2017-10-01 00:07:33 537

原创 人月神话-软件开发现状

人月神话-软件开发现状黄国强 2005年03月5日                                          人月神话的作者Frederick P. Brooks Jr这样说到“所有软件活动包括根本任务--打造构成抽象软件实体的复杂概念结构,次要任务-使用编程语言表达这些抽象实体,在空间和时间限制内将他们映射成机器语言。”      这句话我

2017-10-01 00:06:01 766

转载 远程调试(转)

*假设调试机IP 192.168.0.182   远程机IP 192.168.0.161*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。调试机上安装visual studio .net 2003共享调试机上的Visual Studio上的远程调试目录(以机器为例)C:\Program Files\Microsoft Visual Studio

2017-09-30 23:53:46 237

转载 windows 多线程编程防止死锁的几点经验 (转)

windows 多线程编程防止死锁的几点经验 (转)1) 不要在线程函数体内操作MFC控件,不要再线程里面调用UpdateData函数更新用户界面,而应该尽量采用发送消息的方式,在主线程的消息响应函数中操作控件;2)不建议采用SendMessage往主线程发送消息,因为它是同步的,阻塞的,可以考虑采用PostMessage代替;3)线程退出时

2017-08-21 10:35:56 560

转载 对VSS数据库历史版本删除

对VSS数据库历史版本删除(转)操作:1、作一个备份,做什么事情,这个最重要。以后大家要查历史版本,就用这个库了。2、使用VSS Administrator,Archive->Archive Projects3、Archive Wizard第一步,选中$这个Project4、Archive Wizard第二步,选中“Delete Data permanently”这个选项5

2015-05-06 16:48:42 2624 1

原创 ACE_INET_Addrconnect: address not available 问题的解决

ACE_INET_Addrconnect: address not available 问题的解决黄国强 2015/2/4这几天要写一个多机通讯的程序,所以看了ACE。1 问题背景ACE版本 6.1.9Win7 x64MS VS20082 遇到的问题 打开 ace\ACE-6.1.9\ACE_wrappers\examples\APG\Reactor 中的例

2015-02-04 14:36:07 3172

原创 boost 1.83版本编译备忘

boost 1.54版本编译备忘 黄国强 2013-9-10从boost官网上下载了1.54版本的压缩包,解压到本地磁盘。我把它解压到这里D:\boost_1_54_0。从控制台进入D:\boost_1_54_0目录中,输入命令 bootstrap根据编译器和32位64位目标程序选择下面四个命令之一启动编译程序。1 vc2010编译器编译32位目标程序从Vi

2013-09-10 10:13:45 2051 3

原创 我眼中的MVC模式(2) --- 变体 MOVE

我眼中的MVC模式(2) --- 变体 MOVE黄国强 2012-7-17看了文章 “MVC已过时,MOVE时代来临?”[1]后,感觉是MVC的一个变体,参照之前的一篇文章“我眼中的MVC模式”[2],我改了一下。实质上就是去掉了 View 对 Model 的引用。这是文章[1]中的原图:下面这张是按照我自己的发明的类图方法画的。参考文章[1] ht

2012-07-17 09:38:46 1353

原创 最近遇到了 manifest 的相关问题的记录

最近遇到了 manifest 的相关问题的记录黄国强 2012-3-271 问题出现每日构建一切正常,发布的程序也正常运行,直到有一天出现编译错误。mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file 根据网上查来的资料做出下列调整:将

2012-03-27 10:58:56 2007 3

原创 设计一个类时应该问自己四个问题

设计一个类时应该问自己四个问题黄国强 2011-2-23是否是唯一的对象||    是|---------------> 单件模式|是否必须有时间维度||    是|---------------> 实体对象模式|是否共享||    是|---------------> 不可修改属性的值对象模式||--------------

2012-02-23 09:48:26 1817

原创 集中决策和分散决策(3)

集中决策和分散决策(3)黄国强 2011-12-31        上两篇文章讨论了集中决策和分散决策两种程序的写法。两种写法在项目中都有广泛的运用。一般来说,C的项目中大多采用集中决策的写法,而C++的项目用分散决策的写法多些。但这也不是绝对的。根据我多年的开发经验,在以下几个方面得出一些结论:1 项目的规模和难易程度        首先,对于比较小的简单项目,采用集中决

2012-01-20 19:40:54 6536

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库

这个压缩包里包含VS2022编译好的库文件和dll文件。 include 头文件 lib x64库文件 bin dll文件,hiredis.dll拷入你的程序release文件夹,hiredisd.dll拷入你的程序debug文件夹,DBGHELP.DLL拷入release,debug两个文件夹 source git上的源码,可以自行编译 在头文件中加入下面内容。 #pragma warning(push) #pragma warning(disable : 4200) // hiredis 4200 警告 #include "./inc/hiredis.h" #ifdef _DEBUG #pragma comment(lib, "./lib/hiredisd.lib") #else #pragma comment(lib, "./lib/hiredis.lib") #endif #pragma warning(pop) // 恢复4200警告 更多问题可以到我的blog上留言

2023-10-18

FlashDriveCardTester是一款U盘性能检测工具 主要作用就是帮助用户检查U盘的情况,通过检测U盘的健康状态再决定

FlashDriveCardTester是一款U盘性能检测工具 主要作用就是帮助用户检查U盘的情况,通过检测U盘的健康状态再决定

2023-10-14

tensorflow-gpu-2.4.0rc3-cp38-cp38-win-amd64

pip install tensorflow_gpu-2.4.0rc3-cp38-cp38-win_amd64.whl 用上面格式安装tensorflow_gpu-2.4.0rc3

2021-01-08

HtmLayoutSDK.zip

HTMLayout是一个免费的开源界面库,以DLL的方式运行,并提供一个API的调用接口,HTMLayout相当于一个轻量级浏览器引擎,可以高效的解析和渲染HTML网页。其几乎支持所有的HTML元素和CSS3标准,并根据界面库的特征,做了很多有用的功能性扩展.。适合配合C++做产品的界面。

2020-07-19

空空如也

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

TA关注的人

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