记录一次艰辛的Python包持续集成与发布过程

缘由 为了保证代码质量,编写单元测试是非常必要的,特别是在团队开发的过程中,编写有效的单元测试保证每人编写的模块能够正常工作,以免项目后期出现各种不可预知的bug,因此,在提交代码前运行单元测试,可以有效保证代码的健壮性。这种工作当然是要自动化完成,因此,许多CI工具也应运而生,最常见的就是Tr...

2018-05-20 09:12:27

阅读数 527

评论数 0

C++内存管理 RAII

C++和C#,python等语言不同,其本身是没有gc机制的,因此我们需要手动来管理内存,一般来说,我们只要将每一个new出来的对象delete之后,就可以保证资源不被泄漏,但万事都不是那么理想的,我们可能因为忘记delete而导致内存泄漏,并且当开发大型项目时,我们可能不了解其他人的代码意图,导...

2017-12-20 14:29:31

阅读数 166

评论数 0

Advanced Installer打包及自定义卸载

Advanced Installer是一个windows平台下的打包软件,他可以将我们的程序打包为不依赖开发环境的安装包。接下来我简单介绍一下Advanced Installer的使用。     上图是新建程序的选项,一般来说对于发布的程序我们使用Professional模板,如果程序比较简单可...

2017-12-19 17:29:50

阅读数 3628

评论数 0

异步IO:Python中的协程

我们在实际的问题中会遇到一些堵塞线程的场景,比如UI程序进行耗时的计算阻塞主线程;进行IO操作,比如读写文档或者网络传输时会阻塞线程等等,之前我采用的是使用多进程+多线程的处理方式,但这种方式相比于协程来说都比较慢,特别是在Windows操作系统下启动一个线程是开销很大的,因此掌握Python中的...

2017-12-07 14:42:57

阅读数 347

评论数 0

使用Pyinstaller打包exe

当我们我们编写python程序后,我们有时会将程序打包成不依赖python环境的exe程序,这时我们可以使用PyInstaller这个包来打包我们的程序,使其成为可以直接运行的exe程序,本人第一次打包的时候遇到了许多坑,在这里记录一下,同时也可以给大家一点参考。首先我们使用pip下载PyInst...

2017-12-06 13:58:07

阅读数 252

评论数 0

QImage与cv::Mat之间的相互转换

CV::Mat与QImagecv::Mat是OpenCV中用来存储图像的数据结构,其中的data是uchar*类型,根据图像的通道数和位数的不同可以划分为不同的类型。例如CV_8UC3代表的是8位三通道的图像8位代表每个通道的范围为0~255,3通道分为为RGB三个通道,RGB三原色的混合即可以组...

2017-12-05 20:23:27

阅读数 229

评论数 0

桌面端软件设计经验总结

软件的基本架构1、MVC简介对于工业上的桌面端软件来说,主要的功能就是通过获取用户的操作来处理后台的数据并在界面上进行呈现。对于这种软件需求,最经典的应用就是MVC架构,可以在图1中粗略展示MVC框架的设计思想。 图1、MVC框架 2、...

2017-11-30 11:33:11

阅读数 1519

评论数 0

在PySide中使用多进程与多线程(multiprocess,threading)

在UI界面程序中,使用到多进程与多线程是很常见的场景,有时候我们需要将一些耗时的操作放在其他的线程或者进程中,避免卡死主线程。而且利用多线程加Qt的信号槽机制我们可以在子进程中实现事件监听,实时监测进程间的通信。之前一直对线程和进程的理解不太深刻,借着这次机会好好理解了一下多线程与多进程,等之后在...

2017-11-11 21:09:36

阅读数 879

评论数 0

Python装饰器与函数式编程

一、函数式编程“函数式编程”同“面向对象编程”,“面向过程编程”一样是一种编程范式,它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。相比于面向对象,函数式编程的最大优点在于将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念,关于函数式编程的更多知识还有待...

2017-11-01 13:38:22

阅读数 155

评论数 0

利用Swig在python中调用C/C++代码

用途当我们在开发Python程序的时候,我们可以利用Python的特性来进行敏捷开发,但有时候我们可能在程序的关键地方需要比较高的运行效率,或者当我们与底层进行通信时要使用C++来运行,这时我们可以有两种方法。一是使用subprocess模块打开编译好的exe程序,与exe程序进行通信,二是利用S...

2017-10-30 21:09:38

阅读数 1392

评论数 1

使用pyside+designer将.ui文件转化为.py文件的两种方法

一、使用pyside-uic.exe将.ui文件转化为.py文件1、进入Pycharm的设置界面 2、进入外部工具设置 3、配置designer.exe,注意program路径和working directory路径 4、配置pyUIC,注意找到pyside-uic.exe文件所在的路径和参...

2017-10-22 13:36:19

阅读数 4908

评论数 0

《大话设计模式》读书笔记之C++实现--chapter27解释器模式

关于解释器模式看到了一篇讲解的十分好的博客行为型模式—解释器模式 ,自己写了一遍实现,首先要看懂UML类图,理解终结符解释器和非终结符解释器的作用,然后要掌握抽象语法树的构建,理解了这几点之后就很容易利用解释器模式构造自己的解释器#include <iostream> #include...

2017-10-19 19:35:03

阅读数 134

评论数 0

《大话设计模式》读书笔记之C++实现--chapter26享元模式

#include <iostream> #include <list> #include <string> #include <map> #include <QDebug> using namespace std;class FlyWei...

2017-10-18 11:16:02

阅读数 152

评论数 0

C++11 for_each函数与Qt中foreach函数比较

#include <iostream> #include <string> #include <algorithm> #include <vector> #include <iterator> #include <QCoreAppl...

2017-10-17 22:02:29

阅读数 956

评论数 0

《大话设计模式》读书笔记之C++实现--chapter15抽象工厂模式

#include <iostream> using namespace std;//抽象产品类 class AbstractProduct{ public: virtual void ProductFunction() = 0; //子类可以重写该函数来实现不同子类的特...

2017-10-17 21:42:16

阅读数 155

评论数 0

《大话设计模式》读书笔记之C++实现--chapter24命令模式

#include <iostream> #include <QDebug> using namespace std;class ConcreteHandleSecond;class ConcreteHandleThird;//利用枚举类确定请求的等级 enum Reques...

2017-10-17 16:05:10

阅读数 119

评论数 0

《大话设计模式》读书笔记之C++实现--chapter23命令模式

#include <iostream> #include <algorithm> #include <list> #include <vector> #include <QCoreApplication> using namespace ...

2017-10-17 11:32:37

阅读数 122

评论数 0

《大话设计模式》读书笔记之C++实现--chapter22桥接模式

17-10-13 1、练习mysql2、练习git3、学习二分法以及程序的边界问题(左闭右开)4、学习变量命名方法,程序的异常处理及调试,表驱动方法 17-10-14 1、深入练习了mysql,了解多重查询的嵌套,温故了Qt访问数据库以及QsqlQuery操作结果集,温故SQLite的亲和数据类型...

2017-10-16 20:57:19

阅读数 148

评论数 0

异常处理

对于一个程序来说,异常处理是一个必不可少的环节,这里简单总结一下自己进行异常处理的经验。 首先我们要确定代码可能会发生的所有情况,比如数组越界,串口连接失败等,然后我们要确定异常的级别,是属于绝对不可能发生的我们在程序开发阶段就要使用断言等方法来修复,有可能在用户使用时发生的我们要根据异常级别做...

2017-10-14 16:37:34

阅读数 158

评论数 0

二分查找算法(左闭右开区间)

二分查找算法是一个基本但用处十分广泛的算法,但要写出一个没有bug的二分查找算法也不容易,《编程珠玑》一书中提到仅有百分之十的人可以第一次就写出没有bug的二分查找算法,主要原因在于寻找中间区间时数据有可能溢出,以及区间的选择不正确导致死循环,数组越界等等。二分查找算法一共有64种形式,由于在计算...

2017-10-13 19:31:33

阅读数 1920

评论数 0

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