Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

PostgreSQL数据库学习笔记

发表于 2024-01-21

最近公司决定使用 PostgreSQL 数据库,提前学习一下。

PostgreSQL简介

PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。PostgreSQL 的起源可以追溯到 1986 年,是加州大学伯克利分校 POSTGRES 项目的一部分,在核心平台上已经有超过 35 年的积极开发历史。

PostgreSQL 以其成熟的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区的奉献精神而赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL 可在所有主要操作系统上运行,自 2001 年以来一直符合 ACID 标准,并具有强大的附加组件,例如流行的 PostGIS 地理空间数据库扩展器。毫不奇怪,PostgreSQL已成为许多人和组织的首选开源关系数据库。

PostgreSQL 具有许多功能,旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集有多大或多小。除了免费和开源之外,PostgreSQL 还具有高度可扩展性。例如,您可以定义自己的数据类型,构建自定义函数,甚至可以使用不同的编程语言编写代码,而无需重新编译数据库!

PostgreSQL 功能简介

Data Types 数据类型

  • Primitives: Integer, Numeric, String, Boolean
    基元:整数、数字、字符串、布尔值
  • Structured: Date/Time, Array, Range / Multirange, UUID
    结构化:日期/时间、数组、范围/多范围、UUID
  • Document: JSON/JSONB, XML, Key-value (Hstore)
    文档:JSON/JSONB、XML、键值 (Hstore)
  • Geometry: Point, Line, Circle, Polygon
    几何图形:点、线、圆、多边形
  • Customizations: Composite, Custom Types
    自定义:复合、自定义类型

Data Integrity 数据完整性

  • UNIQUE, NOT NULL 唯一,不为 NULL
  • Primary Keys 主键
  • Foreign Keys 外键
  • Exclusion Constraints 排除约束
  • Explicit Locks, Advisory Locks
    显式锁、咨询锁

Concurrency, Performance 并发性、性能

  • Indexing: B-tree, Multicolumn, Expressions, Partial
    索引:B 树、多列、表达式、部分
  • Advanced Indexing: GiST, SP-Gist, KNN Gist, GIN, BRIN, * Covering indexes, Bloom filters
    高级索引:GiST、SP-Gist、KNN Gist、GIN、BRIN、覆盖索引、布隆过滤器
  • Sophisticated query planner / optimizer, index-only scans, multicolumn statistics
    复杂的查询计划器/优化器、仅索引扫描、多列统计信息
  • Transactions, Nested Transactions (via savepoints)
    事务、嵌套事务(通过保存点)
  • Multi-Version concurrency Control (MVCC)
    多版本并发控制 (MVCC)
  • Parallelization of read queries and building B-tree indexes
    读取查询的并行化和构建 B 树索引
  • Table partitioning 表分区
  • All transaction isolation levels defined in the SQL standard, including Serializable
    SQL 标准中定义的所有事务隔离级别,包括 Serializable
  • Just-in-time (JIT) compilation of expressions
    表达式的实时 (JIT) 编译

PostgreSQL 安装配置

安装

PostgreSQL安装过程如下:

1
2
3
4
5
6
7
8
9
10
11
# 安装PostgreSQL服务
sudo yum install -y postgresql12 postgresql12-server

# 初始化数据库
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

# 启动PostgreSQL服务
sudo systemctl start postgresql-12

# 设置PostgreSQL服务为开机启动
sudo systemctl enable postgresql-12

配置

PostgreSQL安装成功之后,会默认创建一个名为postgres的Linux用户,初始化数据库后,会有名为postgres的数据库,来存储数据库的基础信息,例如用户信息等等,相当于MySQL中默认的名为mysql数据库。

postgres数据库中会初始化一名超级用户postgres。为了方便我们使用postgres账号进行管理,我们可以修改该账号的密码。具体命令如下:

1
2
3
4
5
6
7
8
su postgres

# 登录PostgreSQL数据库
psql
psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432

# 为postgres用户设置新密码
ALTER USER postgres WITH PASSWORD 'NewPassword';

PostgreSQL 模式(SCHEMA)

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。

一个模式可以包含视图、索引、数据类型、函数和操作符等。

相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。

使用模式的优势:

  • 允许多个用户使用一个数据库并且不会互相干扰。

  • 将数据库对象组织成逻辑组以便更容易管理。

  • 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

1
2
3
CREATE SCHEMA schema_name;
# 切换到新创建的模式,以查询模式下的对象
SET search_path TO schema_name;

数据库相关语法示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 创建数据库
CREATE DATABASE mydb;

# 查看所有数据库
\l

# 切换当前数据库
\c mydb

# 创建表
CREATE TABLE test(id int,body varchar(100));

# 查看当前数据库下所有表
\d

# 列出某一张表格的结构
\d [table_name]

# 列出所有用户
\du

# 列出所有用户,包含额外列
\du+

# 打开文本编辑器
\3

# 列出当前数据库和连接的信息
\conninfo

# 退出
\q

# 查看SQL命令的解释,比如\h select。
\h

# 查看psql命令列表
\?

用户与访问授权语法示例

1
2
3
4
5
6
7
8
#新建用户
CREATE USER test WITH PASSWORD 'test';

#赋予指定账户指定数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE mydb TO test;

#移除指定账户指定数据库所有权限
REVOKE ALL PRIVILEGES ON DATABASE mydb TO test

参考链接

  1. About PostgreSQL,by postgresql.
  2. PostgreSQL新手入门,by ruanyifeng.
  3. 在CentOS 7上安装&配置PostgreSQL 12,by 数据库.
  4. 【PostgreSQL】系列之 一 schema详解(二),by 阿龙先生啊.

GlassFish使用帮助

发表于 2024-01-20

Glassfish是一款Web应用服务器,和Tomcat一样,也是一款优秀的Servlet容器。

功能端口

GlassFish 常见功能端口主要有:

端口名称 端口号
Admin 4848
HTTP Instance 8080
JMS 7676
IIOP 3700
HTTP_SSL 8181
IIOP_SSL 3820
JMX_ADMIN 8686

备注:JMS 即 Java 消息服务,是一种消息传递标准,它允许基于 Java 平台企业版 (Java EE) 的应用程序组件创建、发送、接收和读取消息。它支持松散耦合、可靠和异步的分布式通信。

参考链接

  1. GlassFish 总结,by 全栈程序员站长.
  2. GlassFish,by wikipedia.
  3. 深入浅出带你学习GlassFish中间件漏洞,by XINO.
  4. 消息队列-OPEN MQ,by 小树木.

VMware_ESXi安装配置教程

发表于 2024-01-20

公司购买了一台配置十分高级的联想工作站,为了充分利用该工作站,将安装 VMware_ESXi 对该工作站进行管理运维。

VMware_ESXi简介

VMware ESXi 是 VMware vSphere 虚拟化平台中的裸机虚拟机管理程序。作为用于创建和运行虚拟机 (VM) 的裸机虚拟机管理程序,VMware ESXi 在顶部运行并直接访问硬件,而无需安装操作系统。这种对硬件的直接访问使其比其他类型的虚拟机管理程序性能更好、运行速度更快、可扩展性更强。

VMWare ESXi 是 VMware 的裸机或 Type-1 虚拟机管理程序的名称。虚拟机监控程序是一种特殊的操作系统,您可以在其中创建、运行和管理多个虚拟机。每个 VM 都可以有自己的来宾操作系统和一个或多个应用程序。来宾操作系统可以是任何通用操作系统,如 Windows、macOS、Linux 等。

因此,单个 VMWare ESXi Server 可以同时支持多个 Windows 虚拟机或多个 Windows、macOS 和 Linux 虚拟机的组合。这称为服务器整合,这种做法允许您节省硬件、冷却和电源成本,并最大限度地利用物理资源。

作为 Type-1 虚拟机管理程序,VMWare ESXi Server 直接在物理基础架构上运行。因此,术语“裸机”。此特性与 Type-2 虚拟机监控程序不同,后者必须安装在操作系统之上。下图说明了两者之间的区别。

Type1 Vs Type2 虚拟机监控程序

图1 Type1 Vs Type2 虚拟机监控程序

由于 VMware ESXi 不在操作系统上运行,因此它可以直接访问 CPU、RAM、存储和网络等底层资源。因此,VMware ESXi 的性能比任何 Type 2 虚拟机管理程序都要好得多。因此,这些虚拟机上的虚拟机和应用程序的运行速度比在 Type 2 虚拟机监控程序上的运行速度要快得多。

VMWare ESXi安装配置

请参考:

  • VMware ESXI7.0的安装与配置(全过程超详细含中英文对照,附应知必会的理论基础和常见故障解决方案)

VMWare ESXi安装问题

VMWare ESXi不识别网卡

请参考:

  • 安装esxi时候的No Network Adapters报错 解决办法

参考链接

  1. What Is the VMware ESXi Server and Its Role in the VMware Suite?,by Alex Hunter.
  2. VMware ESXI7.0的安装与配置(全过程超详细含中英文对照,附应知必会的理论基础和常见故障解决方案),by 某酷菌.
  3. 安装esxi时候的No Network Adapters报错 解决办法,by Jenrey.

CentOS8服务器运维记录

发表于 2024-01-19 | 更新于 2024-01-25

最近需要在CentOS8中部署一个大型系统,因此记录一下CentOS8的运维过程。

环境配置

  • 联想图形工作站ThinkStation P720
  • CentOS 8.5.2111
  • NVIDIA-Linux-x86_64-535.113.01.run

CentOS8系统安装

请参考:

  • CentOS 8 安装图解

重点在磁盘分区那块。

Yum本地源配置

请参考:

  • Centos8配置本地yum源教程超详细
  • RedHat/CentOS8 【国内/本地/私有 Yum 源】制作和使用

具体步骤如下:

  • 准备yum本地源。yum源可以来自CentOS8的安装光盘,也可以通过工具 reposync 、createrepo 自建,并挪到本地。
1
2
3
4
5
6
7
8
9
[centos@yum-srv ~]$ sudo mkdir -p /repos/centos-8-x86_64
[centos@yum-srv ~]$ sudo dnf install yum-utils createrepo
[centos@yum-srv ~]$ sudo dnf repolist
[centos@yum-srv ~]$ sudo reposync --repoid=AppStream --repoid=BaseOS --repoid=extras -p /repos/centos-8-x86_64
[centos@yum-srv ~]$ sudo wget -O /repos/centos-8-x86_64/RPM-GPG-KEY-CentOS-Official http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official

[centos@yum-srv ~]$ sudo createrepo -p /repos/centos-8-x86_64/AppStream
[centos@yum-srv ~]$ sudo createrepo -p /repos/centos-8-x86_64/BaseOS
[centos@yum-srv ~]$ sudo createrepo -p /repos/centos-8-x86_64/extras
  • 配置本地yum源。
1
2
3
4
5
6
7
8
[root@yum-srv]# vim /etc/yum.repos.d/CentOS-Media.repo

[local]
name=local repo
baseurl=file:///mnt/cdrom/BaseOS
enable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficia
  • 屏蔽默认的其他网络镜像
1
[root@yum-srv]# vim /etc/yum.repos.d/CentOS-Base.repo

在base,AppStream,Extra三个镜像源中分别添加enabled=0即可。

  • 更新yum源并验证结果
1
2
3
[root@yum-srv]# yum clean all
[root@yum-srv]# yum makecache
[root@yum-srv]# yum search java

Nvidia显卡驱动安装

请参考:

  • centos8 安装nvidia 显卡驱动(一路踩坑一路填)
  • NVIDIA Driver Installation Quickstart Guide

具体步骤如下:

1
2
[root@yum-srv]# yum install -y kernel-devel elfutils-libelf-devel
[root@yum-srv]# ./NVIDIA-Linux-x86_64-535.113.01.run

FTP服务配置

请参考:

  • CentOS8搭建FTP服务器

具体步骤如下:

  • 安装vsftpd+ftp
1
2
sudo yum install -y vsftpd
sudo yum install -y ftp # 测试使用,搭建FTP服务器只需要vsftpd
  • 开启服务
1
systemctl start vsftpd
  • 设置开机启动
1
2
systemctl list-unit-files | grep vsftpd
chkconfig vsftpd on
  • ftp用户登录测试

在Windows资源管理器地址栏中输入ftp://ip,在弹出的登录窗口中输入用户名和密码登录,然后验证上传和下载文件功能是否正常。

VNC远程桌面配置

请参考:

  • CentOS7 下 VNC 安装配置详细操作指引

具体步骤如下:

  • 安装VNC服务器和客户端
1
sudo yum install -y tigervnc-server tigervnc
  • 为本地用户设置 VNC 密码
1
2
[root@linuxtechi ~]# su - pkumar
[root@linuxtechi ~]$ vncpasswd
  • 配置VNC服务器

默认的配置文件在/lib/systemd/system/vncserver@.service,以及/etc/tigervnc/目录。

编辑用户配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo vim /etc/tigervnc/vncserver.users

# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers.
# The syntax is <display>=<username>. E.g.:
#
# :1=andrew
# :2=lisa
# :1 表示这个启动的端口为。5901,之后一次类推 :2 为 5902;
# :2=pkumar 表示 5902 为 pkumar 用户的远程连接;
:2=pkumar
  • 设置VNC服务器开机自启动
1
2
3
4
# 将创建vncserver@:2.service符号链接到vncserver@.service
systemctl enable vncserver@:2.service
# 启动服务
systemctl start vncserver@:2.service

在 @: 后面的数字 2 定义了 VNC 服务将会监听的显示端口,我们将会使用 2 ,这意味着 VNC 服务器将会监听 5902端口。

  • 连接VNC服务器
1
vncviewer 192.168.11.11:5902

NFS文件共享配置

请参考:

  • Centos8挂载NFS共享文件夹

具体步骤如下:

  • nfs服务器安装配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 安装启动nfs服务
$ sudo yum install nfs-utils
$ sudo systemctl enable rpcbind
$ sudo systemctl enable nfs-server.service
$ sudo systemctl start rpcbind
$ sudo systemctl start nfs-server.service

# 关闭防火墙
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

# 设置共享文件夹
$ sudo vi /etc/exports

# 重启nfs服务
$ sudo systemctl restart nfs-server

# 在多台机器之间复制文件
# 复制文件
$ scp ./source.txt user@192.168.11.11:/home/user/
$ scp user@192.168.11.11:/home/user/source.txt ./
# 复制目录
$ scp -r ./dataDir user@192.168.11.11:/home/user/
$ scp -r user@192.168.11.11:/home/user/dataDir/ ./
  • nfs客户端安装配置
1
2
3
4
5
6
7
8
# 安装NFS客户端
$ sudo yum install nfs-common

# 设置开机自动挂载
$ sudo vim /etc/fstab

# 添加如下内容
192.168.11.11:/home/share/ /mnt/share nfs rw,auto,nofail,noatime,nolock,intr,tcp,actimeo=1800,noac 0 0

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 查看进程
ps -ef | grep -i java

# 杀死进程
kill -9 2333

# 使用户具有sudo权限
# 添加用户到具有sudo权限的用户组
usermod -aG wheel username
# 将用户添加到sudoers文件
vim /et sudoers

# 查看用户输入那些组
groups username
getent group
cat /etc/group
cat /etc/passwd

# 查看系统信息
uname -a
uname -r

# 查看系统中设置的终端开启个数
cat /etc/sysconfig/init |egrep tty

# 查看可执行程序位置
which java

# 查看网络端口
netstat -antp
ifconfig

# 使目录下创建的文件属于某个特定的用户组
# 创建用户组
groupadd ateam
# 把用户加到该用户组
usermod -a -G ateam tom
usermod -a -G ateam jerry
# 修改目录为该用户组所有
chgrp -R ateam /srv/blah/
chmod -R g+srw /srv/blah/
setfacl -R -m group:ateam:rwx /srv/blah/

# 解决/var/run/docker.sock 属于 root:root的问题
usermod -aG docker <USER>
systemctl restart docker

参考链接

  1. CentOS 8 安装图解,by linux中国.
  2. Centos8配置本地yum源教程超详细,by yj2434.
  3. centos8 安装nvidia 显卡驱动(一路踩坑一路填),by robator.
  4. CentOS8搭建FTP服务器,by 氷泠.
  5. CentOS7 下 VNC 安装配置详细操作指引,by adong2838.
  6. Centos8挂载NFS共享文件夹,by 遗忘的迟来的风.
  7. 在 CentOS 上如何将用户添加到 Sudoers,by 雪梦科技.
  8. linux的系统版本查看和开启的终端个数,by weixin_34043301.
  9. tcp与tcp6的区别,by 开始认识.
  10. NVIDIA Driver Installation Quickstart Guide,by nvidia.
  11. Linux scp命令远程拷贝复制,by 我只是一个小白木木.
  12. Linux 下创建文件时指定用户组,by Jerry Shang.
  13. setfacl命令的基本用法,by yearing1017.
  14. /var/run/docker.sock socket is inconsistent with permissions (root:root | root:docker ),by github.
  15. docker.sock permission denied,by stackoverflow.

Python提取PDF部分区域文字的方法

发表于 2024-01-09 | 更新于 2024-05-24

最近遇到一个需求,需要提取PDF部分区域的文字,具体方法如下:

  1. 提取PDF中目标内容所在区域
  2. 提取或识别目标区域内容

为了快速验证方法的可行性,使用Python结合PyMuPDF库进行开发。

环境配置

PyMuPDF介绍

PyMuPDF是一个高性能的Python库,用于PDF(和其他)文档的数据提取、分析、转换和操作。

依赖环境

  • python 3.8.5,可在windows7上运行,python 3.9以后版本不支持windows7
  • numpy==1.24.4
  • pandas==2.0.3
  • PyMuPDF==1.23.8
  • PyMuPDFb==1.23.7
  • python-dateutil==2.8.2
  • pytz==2023.3.post1
  • six==1.16.0
  • tzdata==2023.4

虚拟环境

1
2
3
4
5
6
7
8
mkdir pdf_extract
cd pdf_extract
python -m venv env
env\Scripts\activate.bat
pip install pymupdf
pip install pandas
pip freeze > requirement.txt
pip download -d packages -r requirement.txt

离线迁移

创建envConfig.bat批处理文件,一键执行离线环境配置。

1
2
3
python -m venv env
call env\Scripts\activate.bat
pip install --no-index --find-links=packages -r requirement.txt

具体实现

1
2
3
4
5
6
7
8
9
10
11
import fitz # imports the pymupdf library
pdfDoc = fitz.open("test.pdf") # open a document
page = pdfDoc[0]
mat = fitz.Matrix(1, 1) # 1.5表示放大1.5倍
rect = page.rect
#print(rect)
clip = fitz.Rect(0.22*rect.width, 0.19*rect.height,0.35*rect.width, 0.40*rect.height)
pix = page.get_pixmap(matrix=mat, alpha=False, clip=clip)
pix.save("test.png")
a_text = page.get_text(clip=clip)
print(a_text)

参考链接

  1. Python截图PDF,在指定区域并提取文本,by 快学Python.
  2. pymupdf doc,by pymupdf.

IP监控分析的方法

发表于 2024-01-07 | 更新于 2024-01-11

公司内网IP地址资源有限,同时又存在很多分配后的IP长期不使用的情况。为提高IP地址资源的利用效率,需要监控IP的使用情况,统计IP的活动情况,收回长期不上线的IP地址资源,以便重新利用。需要解决的技术难点主要有三个方面:

  • 扫描网络存活主机的方法。
  • 每日定时扫描网络存活主机的方法。
  • 统计IP活动情况的方法。

扫描网络存活主机

扫描网络存活主机可使用以下nmap命令:

1
nmap -P0 192.168.1.1/24

-P0 (无ping) 该选项可解决主机防火墙开启了禁Ping选项而无法被发现的问题,缺点是主机发现的速度将很慢。

1
2
nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping
#-n 禁用dns解析

注意nmap扫局域网存活主机都会预先进行arp扫描,在这里禁用了端口扫描,意味着nmap只会进行存活扫描,当nmap进行arp扫描后发现主机存活就不会进行后续操作,wireshark也就抓不到包,所以使用–disable-arp-ping禁用arp扫描。

被扫描主机可能开启防火墙,如何绕过防火墙判断主机是否存活,请参考:

  • Nmap抓包分析与绕过Windows防火墙扫内网存活主机
  • Nmap Ping 扫描(防火墙 Bypass)

定时扫描网络存活主机

目前倾向于使用Python在代码中定时调用nmap命令扫描存活主机。一日之内可扫描三次:上午、下午、晚上各一次。

可参考以下链接:

  • 让 Python 程序定时执行的 8 种姿势~

目前倾向于利用调度模块schedule实现定时任务。

统计IP活动情况

主要统计IP地址的未上线的天数。

设置Python脚本开机自启动

1
2
3
d:  #如果需要开机自启动的python程序在c盘,不需要这一行程序;如果需要自启动的python程序在d盘(或其他盘),需要先切换到d盘(或其他盘)
cd path #path为你所要开机自启动的python程序所在的文件夹
python xxx.py #xxx.py为path文件夹内需要自启动的python程序

具体实现

参考链接

  1. Nmap扫描结果保存到本地并提取ip,by ~Echo.
  2. nmap命令扫描存活主机,by qingfenghaha.
  3. Nmap,by wikipedia.
  4. nmap用法解析,by wikipeida.
  5. Python中匹配IP的正则表达式,by bro.
  6. 让 Python 程序定时执行的 8 种姿势~,by 随风.
  7. Python 定时任务最佳实践,by guoweikuang​.
  8. Windows 设置 Python 脚本开机自启的一些心得,by Hsinyan.
  9. 设置python程序开机自启动,by ego782140379.
  10. Nmap抓包分析与绕过Windows防火墙扫内网存活主机,by 合天网安实验室.
  11. Nmap Ping 扫描(防火墙 Bypass),by 一叶知安.

如何成为卓越的大学教师读书笔记

发表于 2023-12-27

学生学习得遇名师是一种幸运,那么怎样成为这样的名师呢?

怎样才算“卓越”

卓越的教师知道学生怎样学习吗?

卓越的教师是如何备课的?

卓越的教师对学生有什么期望?

卓越的教师如何驾驭课堂?

卓越的教师如何对待学生?

卓越的教师如何评估学生和自己?

从卓越的教师身上我们能够学到什么?

参考链接

  1. 如何成为卓越的大学教师,by 肯•贝恩.

深入理解QT编码技巧

发表于 2023-12-24

Qt代码采用面向对象的方法进行编程,要理解Qt代码,理解其各种机制,应从Qt的祖先类开始。

QObject分析

请参考:

  • 深入了解Qt(一)之QObject

元对象系统(Meta-Object System)

请参考:

  • 深入了解Qt(二)之元对象系统(Meta-Object System)

元signal和slot

  • 深入了解Qt(三)之元signal和slot

QWidget分析

请参考:

  • 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)

参考链接

  1. 深入了解Qt(一)之QObject,by RunningSnail.
  2. 深入了解Qt(二)之元对象系统(Meta-Object System),by RunningSnail.
  3. 深入了解Qt(三)之元signal和slot,by RunningSnail.
  4. 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽),by 诺谦.

加密狗破解原理与方法分析

发表于 2023-12-14

加密狗是目前流行的一种软件加密工具。它是插在计算机接口上的软硬件结合的软件加密产品。一般有USB口和并口两种,又称USB加密狗和并口加密狗,目前流行的一般是USB加密狗,并口加密狗在前几年的时候用得比较多。

工作原理

举个例子说明单片机算法的使用。 比如一段程序中有这样一句:A=Fx(3)。程序要根据常量3来得到变量A的值。于是,我们就可以把原程序这样改写:A=Fx(DogConvert(1)-12342)。那么原程序中就不会出现常量3,而取之以DogConvert(1)-12342。这样,只有软件编写者才知道实际调用的常量是3。而如果没有加密狗,DogConvert函数就不能返回正确结果,结果算式A=Fx(DogConvert(1)-12342)结果也肯定不会正确。这种使盗版用户得不到软件使用价值的加密方式,要比一发现非法使用就警告、中止的加密方式更温和、更隐蔽、更令解密者难以琢磨。此外,加密狗还有读写函数可以用作对加密狗内部的存储器的读写。于是我们可以把上算式中的12342也写到软件加密狗的存储器中去,令A的值完全取决于DogConvert()和DogRead()函数的结果,令解密难上加难。

破解方法

  • 一种是通过硬件克隆或者复制
  • 一种是通过SoftICE等Debug工具调试跟踪解密
  • 一种是通过编写拦截程序修改软件和加密狗之间的通讯

目前最常用的免加密狗补丁破解则就是属于第三种破解方式。

参考链接

  1. 加密狗工作原理和破解方法简介,by 阿湯哥.
  2. [转帖]加密狗破解经验分享,by Jayce189.
  3. 加密狗原理及如何对抗破解,by 唯赛科技.

QT自定义控件及使用方法

发表于 2023-11-30 | 更新于 2023-12-13

Qt自带控件有时候不满足个性化的需求,需要自定义控件。如果自定义控件比较通用,最好在QT Designer下显示,以方便使用。最后介绍在Qt Creator中测试验证自定义控件。

Qt Creator编写自定义控件

在Qt Creator编写自定义控件可使用 “Qt4 设计师自定义控件” 模板工程,具体可参考:

  • Qt创建Qt Designer自定义控件及使用

需要注意的是:

  • 自定义控件的编译器应选择与编译生成Qt Creater应用的编译器相同。例如:在Windows平台,一般使用MSVC 32位编译器。当然可以不一定完全相同,例如MSVC 2015 32位编译器和MSVC 2017 32位编译器编译的自定义控件DLL可以通用。
  • 自定义控件类的声明中不需要使用 QDESIGNER_WIDGET_EXPORT 导出宏,否则后面使用自定义控件时将报错。

Qt Designer显示自定义控件

自定义控件编译链接后的Release目录中,将产生自定义控件的dll,将该dll拷贝至Qt Creator的插件目录,例如:

  • D:\Qt\Qt5.12.0\Tools\QtCreator\bin\plugins\designer

之后重启Qt Creator,创建Qt Widgets Application,打开Qt Designer,在其自定义窗口部件中即可发现自定义控件的图标。此外还需将自定义控件的头文件放到编译器的include目录,以msvc为例:

  • D:\Qt\Qt5.12.0\5.12.0\msvc2017\include\MyLabel\mylabel.h

Qt Creator测试自定义控件

打开Qt Creator,创建Qt Widgets Application 应用,打开Qt Designer,使用自定义控件,然后编译链接,将报如下错误:

1
mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall MyLabel::MyLabel(class QWidget *)" (??0MyLabel@@QAE@PAVQWidget@@@Z),该符号在函数 "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z) 中被引用

其原因是没有将自定义控件包含到测试自定义控件的工程中。

  • 拷贝mylabel.h、mylabel.cpp、mylabel.pri到新建工程目录下,在新建工程pro文件中添加include(mylabel.pri)
  • 右键工程清除、执行qmake、重新构建应该就解决该编译链接错误了

参考链接

  1. Qt创建Qt Designer自定义控件及使用,by BrokenRainK.
  2. Qt Designer 插件测试报错问题,by 翻滚的雪球.
  3. QCalendarWidget - How to Highlight Dates,by stackoverflow.
上一页1…789…53下一页

Jack Huang

523 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse