
工具
文章平均质量分 84
Qsir
这个作者很懒,什么都没留下…
展开
-
嵌入式系统软件开发:你需要知道的一切
嵌入式系统软件的开发人员工作任务很艰巨。一方面,工作本身具有挑战性——嵌入式系统必须经历多次迭代才能正常运行。另外,当开发过程中出现问题时,高层们往往更关注开发人员,而不是团队正在使用的工具。 您不能用旧的工具解决新问题,它们通常是团队发生错误或延迟发布的根源。使用正确的工具链,团队可以克服开发嵌入式系统软件的挑战,并最大限度地提高生产力。...转载 2022-06-14 15:33:08 · 629 阅读 · 0 评论 -
测试分析人员必备知识—需求管理和可追溯性矩阵
严格的软件开发过程的基石是需求管理以及这些需求对实施的可追溯性,以及随后对正确实施的证明。需求可追溯性由作者Gotel和Finkelstein定义为“具有在向前和向后的方向(即从需求的起源、发展、规范到随后的部署和描述)中描述和跟踪需求寿命的能力。使用,以及在任何这些阶段进行不断完善和迭代的阶段。”跟踪需求不仅是将文档中的段落链接到代码或测试部分。当需求体现在设计、架构和实施中时,必须在整个开发阶段中保持可追溯性。...转载 2022-06-14 15:27:00 · 2079 阅读 · 0 评论 -
Python读写Excel文件第三方库汇总
常见库简介xlrdxlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。http://xlrd.readthedocs.io/en/latest/ 1、xlrd支持.xls,.xlsx文件的读 2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从而节省时间和内存(该方法对.xlsx文件无效)。 3、xlrd.Book对象有一个unload_sheet方法,它将从内存中卸载工作表,由工作表索引或工作...转载 2021-10-29 17:24:42 · 1463 阅读 · 0 评论 -
VisualStudio C++内存泄漏的检测方法(二)
代码#define _CRTDBG_MAP_ALLOC#include <iostream>#include <crtdbg.h>using namespace std;void test1() { int* p = new int[10]; //int* p = (int*)malloc(sizeof(int) * 10);}void test2() { int *p = new int[20]; //int* p = (int转载 2021-03-05 15:32:34 · 571 阅读 · 0 评论 -
Visual Studio中检测内存泄漏的方法(一)
有些内存泄露是不会dump出来详细信息的,只会给出内存块号,这种情况一下一般可以用一下方法调试出来。这两天调一个程序,发现每次退出都有内存泄漏,在此总结一个调试内存泄漏的好方法。对于比较明显的内存泄漏,vc2008是比较容易定位的,在Debug模式F5运行,退出时会列出引起内存泄漏的问题代码所在文件及行号;但如果是比较隐蔽的内存泄漏,Output输出窗口只会输出部分信息,形式如下:Detected memory leaks!Dumping objects ->...转载 2021-03-05 11:47:12 · 1007 阅读 · 0 评论 -
Python idle下载、安装与使用教程
简介:IDLE是Python软件包自带的一个集成开发环境,可以方便地创建、运行、调试Python程序。本文包括IDEL安装、使用配置、和运行调试教程。由于Google、YouTube等大型公司的推广,python编程语言越来越受欢迎,很多编程爱好者,也将Python做为了首先的编程语言。今天我们就来讲一下,学习的第一步,安装Python idle编辑器,也它的调试和使用。第一步,我们...转载 2019-11-11 15:09:20 · 5026 阅读 · 0 评论 -
让代码更美:10大编程字体
日复一日的编写代码,有没有感到审美疲劳?也许些许的改变就能让我们感到生活更美好。换一种编程字体吧!体验一种新的代码感觉。 下面我眼中的十大编程字体:10. Courier 基本上所有的系统都自带了此种字体,有时候它又以Courier New的名字出现。不幸的是很多终端和编辑器都默认使用此种字体,虽然这不会影响使用,但这会影响心情,它太枯燥了。以前看到这样一句评论:久不见牡丹会以仙...转载 2019-11-11 15:04:05 · 9523 阅读 · 1 评论 -
Windows中常用的git GUI客户端的介绍
工欲善其事,必先利其器。作为一名开发人员,你不可能不知道git,无论你是开发自己的开源项目还是和团队一起进行大规模产品的开发,git都已经是源代码管理工具的首选。当然,那些hardcore developer会说,command line才是最好的工具,但并不是所有的时候command line都是高效的(不服?在command line里面做个compare试试你就知道了)。小编日常用的最多...转载 2019-10-25 14:14:59 · 376 阅读 · 0 评论 -
SQLite学习手册(开篇)
一、简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性。下面我们将列举一下SQLite的主要转载 2017-05-24 09:21:48 · 493 阅读 · 0 评论 -
SQLite学习手册(C/C++接口简介)
一、概述: 在SQLite提供的C/C++接口中,其中5个APIs属于核心接口。在这篇博客中我们将主要介绍它们的用法,以及它们所涉及到的核心SQLite对象,如database_connection和prepared_statement。相比于其它数据库引擎提供的APIs,如OCI、MySQL API等,SQLite提供的接口还是非常易于理解和掌握的。 二、核心对象和接转载 2017-05-24 09:22:48 · 744 阅读 · 0 评论 -
SQLite学习手册(数据表和视图)
一、创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则。但是对于一些SQLite特有的规则,我们会给予额外的说明。注:以下所有示例均是在sqlite自带命令行工具中完成的。 1). 最简单的数据表: sqlite> CREATE TABLE testtable (first_col int转载 2017-05-24 09:23:44 · 419 阅读 · 0 评论 -
SQLite学习手册(内置函数)
一、聚合函数: SQLite中支持的聚合函数在很多其他的关系型数据库中也同样支持,因此我们这里将只是给出每个聚集函数的简要说明,而不在给出更多的示例了。这里还需要进一步说明的是,对于所有聚合函数而言,distinct关键字可以作为函数参数字段的前置属性,以便在进行计算时忽略到所有重复的字段值,如count(distinct x)。函数说明avg(x)该转载 2017-05-24 09:24:38 · 364 阅读 · 0 评论 -
SQLite学习手册(索引和数据分析/清理)
一、创建索引: 在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法: sqlite> CREATE TABLE testtable (first_col integer,second_col integer); --创建最简单的索引,该索引基于某个表的一个字段。 sqlite> CREATE INDEX转载 2017-05-24 09:25:45 · 369 阅读 · 0 评论 -
SQLite学习手册(数据库和事务)
一、Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上。如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的转载 2017-05-24 09:26:30 · 784 阅读 · 0 评论 -
SQLite学习手册(表达式)
一、常用表达式: 和大多数关系型数据库一样,SQLite能够很好的支持SQL标准中提供的表达式,其函数也与SQL标准保持一致,如: || * / % + - > & | >= = == != AND OR ~ NOT转载 2017-05-24 09:27:39 · 432 阅读 · 0 评论 -
SQLite学习手册(数据类型)
一、存储种类和数据类型: SQLite将数据值的存储划分为以下几种存储类型: NULL: 表示该值为NULL值。 INTEGER: 无符号整型值。 REAL: 浮点值。 TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。 BLOB: 存储Blob数据,该类型数据和输入数据完全相同。转载 2017-05-24 09:28:37 · 329 阅读 · 0 评论 -
SQLite学习手册(命令行工具)
工欲善其事,必先利其器。学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的。最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快。言归正传吧,在SQLite的官方下载网站,提供了支持多个平台的命令行工具,使用该工具我们可以完成大多数常用的SQLite操作,就像sqlplus之于Oracle。以下列表给出了该工具的内置命令:命令名命令说明转载 2017-05-24 09:29:36 · 822 阅读 · 0 评论 -
SQLite学习手册(在线备份)
一、常用备份: 下面的方法是比较简单且常用的SQLite数据库备份方式,见如下步骤: 1). 使用SQLite API或Shell工具在源数据库文件上加共享锁。 2). 使用Shell工具(cp或copy)拷贝数据库文件到备份目录。 3). 解除数据库文件上的共享锁。 以上3个步骤可以应用于大多数场景,而且速度也比较快,然而却存在一定的刚性缺陷转载 2017-05-24 09:30:43 · 1058 阅读 · 0 评论 -
SQLite学习手册(内存数据库)
一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如: rc = sqlite3_open(":memory:", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新转载 2017-05-24 09:31:41 · 1064 阅读 · 0 评论 -
SQLite学习手册(临时文件)
一、简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发的过程中我们并不需要关注它们的存在。尽管如此,如果能对这些临时文件的产生机制和应用场景有着很好的理解,那么对我们今后应用程序的优化和维护都是极有帮助的。在SQLite中主要产生以下七种临时文件,如转载 2017-05-24 09:32:49 · 439 阅读 · 0 评论 -
SQLite学习手册(锁和并发控制)
一、概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable)。在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚。与此同时,该模块还提供了一些磁盘文件的内存Cache功能。 事实上,pager_module模块并不关心数据转载 2017-05-24 09:33:46 · 497 阅读 · 0 评论 -
SQLite学习手册(实例代码<一>)
一、获取表的Schema信息: 1). 动态创建表。 2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型。 3). 删除该表。 见以下代码及关键性注释: 1 #include 2 #include string> 3 4 using namespace std; 5 6 void doTes转载 2017-05-24 09:35:12 · 371 阅读 · 0 评论 -
SQLite学习手册(实例代码<二>)
三、高效的批量数据插入: 在给出操作步骤之前先简单说明一下批量插入的概念,以帮助大家阅读其后的示例代码。事实上,批量插入并不是什么新的概念,在其它关系型数据库的C接口API中都提供了一定的支持,只是接口的实现方式不同而已。纵观众多流行的数据库接口,如OCI(Oracle API)、MySQL API和PostgreSQL API等,OCI提供的编程接口最为方便,实现方式也最为高效。S转载 2017-05-24 09:36:26 · 390 阅读 · 0 评论 -
贝塞尔曲线扫盲
相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。但是,可能并不是每位同学都清楚地知道,到底什么是“贝塞尔曲线”,又是什么特点让它有这么高的知名度。贝塞尔曲线的数学基础是早在 1912 年就广为人知的伯恩斯坦多项式。但直到 1959 年,当时就职于雪铁龙的法国数学家 Paul de Casteljau 才开始对它进行图形化应用的尝试,并提出了一种数值稳定的 de Ca转载 2017-05-16 15:53:51 · 413 阅读 · 0 评论 -
鼠标操作贝塞尔曲线
1 贝塞尔曲线贝塞尔曲线(The Bézier Curves),是一种在计算机图形学中相当重要的参数曲线(三维空间中称为贝塞尔曲面). 贝塞尔曲线由法国工程师皮埃尔·贝塞尔(Pierre Bézier)于1962年发表,他运用贝塞尔曲线来为汽车的主体进行设计.接下来将从一次贝塞尔曲线开始(以下简称一次曲线. 类似的,N次贝塞尔曲线称为N次曲线),研究贝赛尔曲线的解析构造和原理。1.转载 2017-05-16 15:56:37 · 2966 阅读 · 1 评论 -
Bezier曲线原理及实现代码(c++)
一、原理: 贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Casteljau 于1959年运用 de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。线性贝塞尔曲线给定点 P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由转载 2017-05-16 16:27:51 · 8184 阅读 · 1 评论 -
穿过已知点画平滑曲线(3次贝塞尔曲线)
为了把一串点连成光滑的曲线,先研究贝塞尔曲线,又搞B样条插值。。。。都没有成功(数学没那么强)。后来在 “[翻译] AGG 之贝塞尔插值”http://liyiwen.javaeye.com/blog/705489 。看到一种比较好的方法:运用贝塞尔曲线的光滑性来穿过这些点。大致思路就是 先算出相邻原始点的中点,在把相邻中点连成的线段平移到对应的原始点,以平移后的中点作为控制转载 2017-05-16 16:50:41 · 1420 阅读 · 0 评论 -
位掩码(BitMask)
位运算在实际开发中用得很少,主要原因还是它对于不熟悉的人不好读不好懂不好计算,如果不经常实践会生疏。但它的优点自然是计算快,代码更少。在某些地方它的优势会更加明显比如如下代码(http://xxgblog.com/2013/09/15/Java-bitmask/):[java] view plain copyprint?public class Ne转载 2017-05-18 09:09:43 · 4456 阅读 · 1 评论 -
位掩码(bitmask)在windows 串口事件驱动中的应用
最近在学习Windows串口通信,以事件驱动模式开发相关应用时,肯定会用到以下几个函数:SetCommMask(HANDLE hComm, DWORD dwEvtMask);GetCommMask(HANDLE hComm, LPDWORD lpEvtMask);WaitCommEvent(HANDLE hComm, LPDWORD lpEvtMask, LPOVERLAPPED lp原创 2017-05-17 15:43:05 · 1163 阅读 · 0 评论 -
无法执行添加/移除操作,因为代码元素**是只读的
在vs中,大量添加窗体或者控件后,发现无法由系统IDE自动生成代码,如自动添加按钮响应函数等,rc管理器界面双击按钮添加函数,会出现 提示框 “无法执行添加/移除操作,因为代码元素**是只读的”。开始认为可能是对应的.cpp和.h被加了只读属性,后来发现是工程的ncb文件引起的。解决方案:关闭vs,删除工程对应的.ncb文件,重启vs就好了。问题原因:NCB是no compile brow转载 2017-06-05 14:51:18 · 698 阅读 · 0 评论 -
深入理解log机制
深入的探讨了log机制中各种概念的来源、常用log库的用法、内部处理流程,以及如何在一个涉及多台主机的复杂系统中部署log等问题。本文是对这次分享的总结,将对这些问题一一展开介绍。转自:http://feihu.me/blog/2014/insight-into-log/开场log如今已经成为了我们日常开发时所必不可少的工具,它同debug一起构成了开发者手中分析问题最有力的两转载 2017-06-16 16:14:40 · 624 阅读 · 0 评论 -
MFC 常用系统函数
1、获取当前路径: char path[MAX_PATH]; GetCurrentDirectoryA(MAX_PATH,path);12122、获取系统时间 需要添加头文件:#include SYSTEMTIME sysTime; GetLocalTime(&sysTime); printf("%4d%02d%02d%02d%02d",sys转载 2017-06-16 16:33:11 · 664 阅读 · 0 评论 -
日志库EasyLogging++学习系列(1)—— 简要介绍
对于有开发经验的程序员来说,记录程序执行日志是一件必不可少的事情。通过查看和分析日志信息,不仅可以有效地帮助我们调试程序,而且当程序正式发布运行之后,更是可以帮助我们快速、准确地定位问题。在现在这个开源的年代,并不需要我们自己去写一套日志库,开源的版本已经有很多了。然而遗憾的是,在目前开源的C++日志库中,并没有一个在使用份额上占绝对优势的,我自己之前用过log4cplus和glog,这两个库都比转载 2017-06-16 16:42:34 · 940 阅读 · 0 评论 -
日志库EasyLogging++学习系列(2)—— 日志级别
在很多的C++日志库中,日志信息会根据严重性来划分级别,使用者可以设置严重性级别门阀值来控制日志的输出,即严重性级别在该门阀值以上的日志信息才进行记录。以此不同,在Easylogging++日志库中,故意默认采用了不划分级别的日志记录,以便使用者可以完全自主地启用或者禁止某个级别的日志记录。不过实际上,Easylogging++同样也支持划分级别的日志记录,只是需要额外设置一个标记:Logging转载 2017-06-16 16:44:13 · 1886 阅读 · 1 评论 -
日志库EasyLogging++学习系列(3)—— 配置功能
在前面的文章 《日志库Easylogging++学习系列(1) —— 简要介绍 》中,我们已经初步见识到了 Easylogging++ 日志库强大的配置功能。那么配置文件中各个字段的意义是什么呢?我们应该如何编写自己的配置文件呢?又或者说,除了配置文件之外,我们还有没有别的方法可以完成日志的配置功能呢?希望各位有疑惑的小伙伴在看了本文的内容之后,都能够找到自己满意的答案!要转载 2017-06-16 16:45:53 · 3614 阅读 · 1 评论 -
日志库EasyLogging++学习系列(4)—— 格式说明符
在上一篇文章中,主要记录了如何使用 Easylogging++ 的配置功能,虽然已经用了很大的篇幅尽可能详细地加以记录,不过相信有些细心的小伙伴可能已经发现遗漏了些什么,请看下面两句摘自 my_log.conf 配置文件的语句:[cpp] view plain copyprint?FORMAT = "[%level | %dat转载 2017-06-16 16:47:12 · 1634 阅读 · 0 评论 -
日志库EasyLogging++学习系列(5)—— 辅助配置功能
正如前面《日志库EasyLogging++学习系列(3)—— 配置功能》文中最后提到的,在某些应用场景下,我们还需要通过其他的一些配置手段来辅助我们完成某些特殊功能,这些辅助配置手段包括设置命令行参数、设置日志标记、配置宏定义。本文中就对这几个辅助配置功能逐一进行简要介绍。命令行参数在 Easylogging++ 中可以通过START_EASYLOGGINGPP(argc,转载 2017-06-16 16:48:28 · 1625 阅读 · 0 评论 -
日志库EasyLogging++学习系列(6)—— 日志记录器
所有的日志都是由日志记录器完成的,日志记录器使用唯一的 ID(大小写敏感)来标识。在 Easylogging++ 中默认了三个现有的日志记录器:默认日志记录器,其 ID 为:default性能日志记录器,其 ID 为:performance系统日志记录器,其 ID 为:syslog,需要定义宏 ELPP_SYSLOG ,否则不存在注册日志记录转载 2017-06-16 16:49:37 · 853 阅读 · 0 评论 -
日志库EasyLogging++学习系列(7)—— 记录方式详解
在前面所列文章的演示代码中,其实已经展示了一部分记录日志的方式。为了使用方便,在 Easylogging++ 中,通过使用宏的集合来完成日志记录。普通日志记录对于普通的日志记录,我们可以选择以下两种比较常用的方式:LOG(LEVEL)CLOG(LEVEL, logger ID)两个宏定义的中 LEVEL 请参看《日志库EasyLogging++学习系列(2)转载 2017-06-16 16:51:12 · 1393 阅读 · 0 评论 -
日志库EasyLogging++学习系列(8)—— Verbose日志详解
这里之所以把Verbose日志单独拿出来讲,是因为最初接触 Easylogging++ 的时候,对Verbose级别的日志感到有点迷惑,并不是十分清楚其用法。不过后来发现,在不扩展日志级别的情况下,其实Verbose日志可以让我们更轻松地记录更多更详细的信息,特别是在排错的日志记录中,没有哪个级别的日志比使用Verbose级别的日志更为合适了。正如如前面文章提到的一样,Verbose日转载 2017-06-16 16:52:24 · 1212 阅读 · 0 评论