自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Django的定制以及admin

Django是一个全面的Python Web开发框架,具有丰富的功能,和众多开箱即用的接口。

2025-04-11 20:15:00 580 1

原创 Django里面的AppConfig的ready()为什么被执行两次

为了在Django应用中,执行一些初始化,我们有时候会重载AppConfig的ready()方法。这是因为,方法中,会依次调用每个应用的ready()方法。但是,如果我们使用来执行的时候,却会发现我们的ready()方法,会被执行两次。使用其它方法执行,比如在wsgi中,却没有这种现象。这是什么原因呢?我们先看一下的实现,之后看一下的执行流程,就明白了。

2025-04-03 20:45:00 407

原创 使用git-lfs管理大文件

当我们使用git管理文件版本的时候,经常会有一些比较大的文件,比如一些模型文件,或者备份的文档资料等,这些文件属于如果太大,就会给git的管理带来困难。所以,对于这种大文件,一般我们就会采用lfs工具,来单独管理这种文件。

2025-03-28 20:45:00 498

原创 前端开发:Vue以及Vue的路由

作为一个底层老程序员,比如经常写驱动或者内核的,再不济也像我这样整天跟Epoll、Socket打交道的老家伙,可能对Vue的那一大套东西,有点儿陌生。甚至,可能会有点儿疑惑,有Java、PHP、Python、go、Rust等一大票后端语言,有HTTP协议交换数据,有HTML负责显示,有CSS渲染参数,还有JavaScript在浏览器里动态执行,还要Vue这种东西干什么呢?按照我的理解就是,虽然以上这些技术已经足够完成Web开发了,但是对于纯前端来说,工程化的程度并不够。

2025-03-21 20:15:00 919

原创 Qt开发:QtWebEngine中操作选择文本

QWebEngine并没有直接的方法,来取得一段文本的位置,但是QWebEnginePage有一个runJavaScript()方法,所以我们可以通过执行一些JavaScript,来间接地取得这些信息。能够通过选择取得位置,反过来就可以通过位置,进行选择。选中的方法,是新建一个DocumentFragment,把不需要选择的文本,与选择的文本作为子节点加入,之后替换原来的节点为新建的DocumetFragment。选择的时候,需要根据上一步的全局偏移量,对整个页面的DOM进行遍历,找到相应的节点偏移量。

2025-03-14 22:27:15 1010

原创 Qt开发:QWebEnginePage执行自定义JavaScript

在QWebEnginePage中,每次调用runJavaScript都是在一个独立的上下文中执行的,函数定义不会持久化到全局的作用域中。即,当我们调用了runJavaScript以后,当前的JavaScript脚本只是被执行去了,后续的代码继续执行,当JavaScript执行完成以后,回调函数里的代码再被执行。比如如下代码,我们需要使用JavaScript获取选择的偏移量,进而进行后续的处理,就会发现每次记录begin和end的值都是-1。

2025-03-08 09:15:45 321

原创 几行代码,用本地大模型,随心所欲地生成照片

我们经常看见,生成出来了,唰一下,没看清,又返回生成失败了。但是,对于提示词,以及生成的内容,这些平台却无一例外地都加了很多很多层的限制。

2025-03-01 17:17:54 379

原创 Rust使用tokio(一)

tokio中的task,是tokio核心调度的基本单位,位于操作系统线程之上,所以又被称为绿色线程,类似于Go语言中的goroutines、Kotline里面的coroutines或者Erlang里的processes。task是轻量的,非阻塞的,当遇到系统IO等阻塞事件时,tokio会切换到其它的task执行。

2025-01-24 19:45:00 395

原创 Rust的ORM框架:rbatis

如果要进行自定义,可以使用宏的参数。比如,UserInfo的数据库表不是user_info,而是hello_user_info,则可以使用把数据库表绑定到了宏的参数。

2025-01-17 20:30:00 1101 2

原创 Mybatis的简单使用

当我们需要把数据库记录,映射为Java对象的时候,mybatis是一个很方便的工具。之后,就可以在项目中灵活地使用mybatis映射出来的对象了。

2025-01-10 22:00:00 2740

原创 Java基本数据类型与字节数组的相互转换

比如,我们如果要把基本类型转成byte[],可以先按照每种类型的大小,创建一个ByteBuffer,然后设置值之后,返回它的arrry,即byte[]。虽然,比较新的Java有unsafe实现,但是unsafe也只能对对象的属性,进行偏移量级别的读写,仍然没法对底层的数据进行操作。ByteBuffer是方便做io的缓冲区读写的,我们可以使用它的读写基本类型的接口,来完成byte[]的操作。上面两种转换方法,都引入了中间对象,有了对象创建与释放的开销,如果追求高性能,还是直接转化比较简单直接。

2025-01-03 20:15:00 451

原创 使用cmark解析Markdown文档

如果在C或者C++项目中解析Markdown,可以使用库cmark。

2024-12-27 18:45:00 1095

原创 音视频开发:分析一个Gstreamer的插件的Segment Fault

最近的项目中,使用了Gstreamer的rtmpsink来推送RTMP到流媒体服务器,但是总是遇到奇怪的段错误,读了一下rtmpsink的源码。发现虽然有问题,但是可能会有编码上的问题,但是还不至于有段错误。于是,觉得有可能是rtmpsink使用的librtmp库的问题。

2024-12-20 19:30:00 419

原创 Debedium如何忽略Oracle的purge命令

如果我们确保这个指令我们不需要解析的话,可以不可以直接忽略,而不是停止呢?即把选项schema.history.internal.skip.unparseable.ddl,默认值为false,开启就为true就可以了。

2024-12-13 21:00:00 551

原创 Oracle数据库小白备忘

Oracle的权限角色很多,其中CONNECT和RESOURCE是对数据库进行增删改查的角色,SELECT_CATALOG_ROLE可以查询一些数据库的配置信息。如果使用Debezium获取数据库的变更,用户除了要有CONNECT、RESOURCE角色以外,还需要有对数据库配置信息以及logminer相关的一些角色。

2024-12-06 20:15:00 778

原创 使用Debezium的API实时获取Oracle的变更

现在最新的DebeziumEngine叫做AsyncDebeziumEngine,相比过去的老Engine,它多了很多功能,比如可以支持并发处理。其中,notifying就是注册的回调函数,这里示例用了一个匿名函数,还可以写一个handleBatch的,同样是使用notifying构建进去。

2024-11-29 19:45:00 1716

原创 如何使用tesseract的C++接口做字符识别

要从图片中识别字符,可以使用tesseract库。如果使用Python,可以直接使用安装之后,就可以在Python中来使用了。如果我们在C++的开发中,要使用tesseract,其实也非常简单。

2024-11-22 19:45:00 1083

原创 如何在Debian系统里使用Redhat(CentOS)的方式配置网络

对于习惯了 Redhat 族系统的用户来说,使用/etc/sysconfig/network-scripts 已经非常习惯,猛然切换到 Debian 会有些不适应。如何才能在Debian族系统中,使用Redhat中的方法配置网络呢?

2024-11-15 20:30:00 684

原创 转化古老的Eclipse项目为使用gradle构建

flatDir {很多老的Java项目,直接把Jar放入了WebRoot/WEB-INF/lib中,这里也支持了这种jar的寻找。接下来,就可以按照.classpath,把使用的jar依赖加入build.gradle。……上面使用了两种jar。第一种是从前面定义的库里下载。第二种是直接指定了文件路径,可以解决需要的库名+版本与文件名不一致的问题。

2024-11-08 17:24:14 1023

原创 C++的filesystem的时间与Qt的QDateTime时间为什么相差204年?

最近,在一个使用了Qt6的C++项目中,发现了一个奇怪的现象。

2024-11-01 18:30:00 677

原创 cargo编译时Rust时如何自定义输出目录

我们使用cargo构建Rust程序时,默认会在源代码根目录的target目录里,生成输出文件,以及编译依赖的包。有时候,我们需要把源代码与输出分开存放。可不可以把target定位在源代码目录外面呢?当然可以。

2024-10-25 16:51:52 836

原创 Rust命令行参数解析:使用clap

如果使用的是比较新的clap,如4.5.20,则会发现已没有clap::App这个结构,取而代之的是clap::Command,而且clap::Arg的构造方法也有了变化。

2024-10-18 18:30:00 1684

原创 如何在C++代码中兼容不同的API

如果我们的目的是在CMake配置过程中检测某个函数是否支持特定的参数(比如,检测库版本或编译选项导致的API差异),可以编写一个小的测试程序,然后在CMake中使用check_c_source_compiles等命令来编译并运行这个测试程序,从而间接推断出函数参数的合法性。

2024-10-11 19:45:00 602

原创 使用pipenv来管理Python项目的依赖

一个Python项目,依赖的模块甚至Python解释器版本,总是存在依赖关系。虽然有virtualenv或者venv模块来创建虚拟的Python环境,但是不同的项目要创建不同的环境,仍然不是很方便。还好,requests的作者,写了pipenv这个“更人性化”的工具。使用pipenv来管理项目的虚拟环境,非常简单。

2024-10-03 15:15:00 311

原创 如何在C++中使用Poppler库读取PDF文件(二)

在Poppler里面,链接的类是Poppler::Link,是一个基类,它派生了LinkGoto、LinkExecute、LinkBrowse、LinkAction、LinkSound、LinkMovie等各种具体的子类。

2024-09-27 19:45:00 1345 2

原创 如何在C++中使用Poppler库读取PDF文件(一)

如果只是读取、渲染pdf文件,除了mupdf以外,在Linux系统中还可以使用Poppler库。Poppler的历史非常古老,X窗口系统中的pdf查看工具xpdf,使用的就是poppler。Poppler在Linux各发行版,以及BSD族系统之中,都有现成的二进制安装包。

2024-09-20 19:45:00 1584 3

原创 如何在C++中使用mupdf操作pdf文件(一)

如,在C语言中使用mupdf的时候,需要先初始化一个fz_context,大量的函数都以这个fz_context为参数。而在C++中,这个上下文不是必须的,mupdf的C++绑定自动初始化了这个变量。如,在C语言中使用mupdf的时候,大量的变量都是以fz_开头的,而C++使用了命名空间mupdf。

2024-09-13 19:45:00 1968 9

原创 音视频开发(二)FFmpeg调用avio_open返回Protocol not found的追踪

通过函数名称,我们大胆猜测,这应该是一个根据文件名来创建URL结构的函数,而URL中有一个关键字段就是协议,即Protocol,所以这个函数非常可能跟“Protocol not found”有关。这个函数的开头,先把传入的filename根据:截取出来,做为协议名,之后就用ffurl_get_protocols取得的数组依次对比,如果没有相等的,就会返回NULL。前面的过程都一切正常,但是到了上面倒数第二步,即avio_open的时候,怎是失败,错误信息是:Protocol not found。

2024-09-06 20:00:00 1855 2

原创 音视频开发(一)RTSP模拟环境搭建

要进行音视频相关的开发,除了需要掌握音视频相关的协议、格式、工具、语言、库以外,模拟环境也是非常重要的条件。有了模拟环境,我们才能随时测试、更改自己写的音视频代码。比如,我们要进行RTSP播放器开发,就需要模拟RTSP媒体源;要进行RTSP客户端开发,就需要模拟的RTSP服务器;要进行RTSP服务器开发,就需要模拟的推流、拉流。

2024-08-30 14:38:11 1248

原创 使用Qt的AxContainer模块操作Office文档(三)

对于Excel来说,打开的应用是"Excel.Application",Application中每个Excel文档叫做Workbook,而操作Workbook的列表理所当然,叫做Workbooks。

2024-08-23 20:00:00 510

原创 使用Qt的AxContainer模块操作Office文档(二)

所以,我们如果只是在Qt程序中,调用Word(或者Excel、PowerPoint,但是使用的参数不同),则可以很简单地使用QAxObjectInterface的setControl方法,设置文档名。

2024-08-16 18:45:00 1083

原创 使用Qt的AxContainer模块操作Office文档(一)

在Windows环境下,在Qt里面操作Office文档,可以通过AxContainer模块调用Office全家桶的Com组件。完成这个操作,需要使用到AxContainer模块中的QAxObject。使用这种方法操作Office文件,好处是可以非常精确,精确到Word文档的每一个字符、PowerPoint的每一个图片以及Excel文档的每一行一列……那种程度。

2024-08-09 21:15:00 1882

原创 使用libreofficekit操作Office文档

在C++中操作Office文档,有几种方法。在Windows环境下面,可以使用COM调用,在Qt开发之中,通过QtActive的QAxObject来操作Microsoft Office的COM。而在Linux等环境中,则可以使用libreofficekit

2024-08-03 19:30:00 1509 2

原创 Linux下如何获取硬盘序列号、MAC地址等硬件信息

在很多系统软件的开发中,需要使用一些系统硬件信息。比如CPU、硬盘、网卡等。所以,得到主机的CPUID、硬盘序列号及网卡的MAC地址,就成为一件很重要的功能。

2024-07-26 19:30:00 3285

原创 如何使用ssh协议开发文件应用

使用ssh客户端,登录到ssh服务器,或者使用scp命令,从ssh服务器上传或者下载文件,非常方便。但是,如何使用ssh协议,开发文件的处理,集成到我们的应用中呢?

2024-07-19 18:15:00 871

原创 如何使C、C++程序支持Python脚本

C/C++比较底层,可以开发高性能、高可靠的程序,但是不如Python简单易学。所以,如果我们使用C/C++开发的程序,却可以给用户一个Python语言的脚本接口,就比较舒服了。其实实现这个功能,一点儿不难。Python的C语言API,可以完美地支持这个功能。

2024-07-12 20:45:00 992

原创 Qt开发的程序的自动部署

不管是在Linux环境下,还是Windows环境下,使用Qt开发的程序,都需要依赖Qt的动态连接库才能运行。所以,为了使用我们程序的用户的便利,我们给用Qt开发的程序做安装包的时候,把这些依赖的动态链接库都一起打包,会给我们的用户极大的方便。但是,一个程序的运行需要什么动态库,一个一个地手动找出来,实在是太累了。做为程序员,我们都会通过自动化的工具,来实现这个操作。

2024-07-05 21:15:00 1357

原创 QWebEngineView的自定义协议

就像webkit2gtk一样,使用QWebEngine开发,当然也是有自定义协议的需求的。但是,QWebEngine自定义协议的实现,明显比webkit2gtk要麻烦一些,其中涉及到几个类QWebEngineUrlScheme、QWebEngineUrlSchemeHandler、QWebEngineProfile以及QWebEngineUrlRequestJob。子类化一个QWebEngineUrlSchemeHandler。

2024-06-28 21:30:00 752

原创 webkit2gtk的自定义协议与内容交互

但是,一般我们开发过程中,经常需要自定义Web的请求协议,而不是常规地HTTP,以实现我们自定义的任务

2024-06-21 20:30:00 1090

原创 Qt开发:信号、槽与面向对象

QObject也有一个inherits(const char *)方法,可以以字符串的形式直接查询一个对象是否是某个类或者它的父类。

2024-06-14 20:15:00 314

空空如也

空空如也

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

TA关注的人

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