最近在用 Python + Qt 做一个客户端项目,于是便重新梳理了一下项目目录结构,以及尝试用了下 pytest 写单元测试。 Python 项目的目录结构参考的是 stackoverflow 上的一位哥们的答案:how-are-python-projects-structured。 1 Python 项目目录结构 以下图为例: ① 项目(project)根目录叫做 TransferDog,项目的源码包(package)就叫做 transfer_dog。 ② 所有不应该暴露给用户的文件都要放…
WordPress 前端调试:无法删除中文命名的模板
1、不使用 min.js 在 wp-config.php 中增加一行 define( 'SCRIPT_DEBUG', true ); 即可让 WordPress 前端不使用 xx.min.js,直接使用 xx.js。 其他更多的调试设置,包括输出 php 日志、打印 sql 执行语句等,请阅读:debugging-in-wordpress 2、BUG,无法删除中文命名的模板 今天遇到一个 WordPress 自身的 BUG,就是当你在编辑文章的时候,创建了一个文章模板,并使用中文命名。然后当你删除这个模板的…
WordPress 技巧: 钩子、过滤器以及禁用字符转义 wptexturize()
这两天给网站换了一个不错的“文章目录”插件:ezTOC,然后无意中发现有些标题无法被正确跳转。查了半天,发现是跟 WordPress 的 wptexturize() 函数有关系。 一、WordPress 中的钩子与过滤器 钩子(hook)是 WordPress 中一种用来修改代码执行逻辑的机制。 1、首先在原来的代码中,使用 apply_filters($hook_name, ...) 或者 do_action($hook_name, ...),埋入一个钩子 hook_name,表示在此处执行这个 hook…
Qt:QWidget 的绘制逻辑(源码分析)
一、QWidget QWidget 既是 QObject 的子类,也是 QPaintDevice 的子类! 而 QPainter 类实例,都要有一个目标 device! TLW(Top Level Widget)顶层窗口,可以看作是 “没有 parent 的 widget” 或者 “widget.window() == self 的 widget”。当调用 widget.show() 的时候,tlw 作为一个独立窗口显示在屏幕上,non top level widget 则作为一个内部控件显示在某个 tlw…
Qt: 自定义 QTreeView(2)- 显示自定义 widget 以及 GIF
本文所涉及代码:https://github.com/funway/TestQTreeView 一、自定义 Widget 由于我们的自定义 widget 是由几种内建 widget 组合而来,所以不需要在 paintEvent() 方法中进行手工绘制。parent widget 会自动调用 child widgets 的绘制方法 paintEvent()。 注意,在 QLabel 中加载要缩放的图片时,最好用 QLabel.setPixmap( QIcon().pixmap(w, h) ),而不是 QLab…
Qt: 自定义 QTreeView(1)
一、QTreeView 基本使用 下面的代码通过 QTreeView 实现一个任务列表的树形展示,任务列表包含两级结构:任务组与任务。 import logging, sys from PyQt6 import QtCore from PyQt6.QtWidgets import QApplication, QMainWindow, QTreeView from PyQt6.QtGui import QStandardItemModel, QStandardItem, QBrush, QColor, QIc…
在终端会话中设置代理
1、前提 对于 linux 或者 macos 系统而言,如果在命令行环境变量中存在 http_proxy、https_proxy。那么某些命令就会自动使用这两个代理设置。 2、手动设置环境变量 在终端窗口中输入: export http_proxy=http://127.0.0.1:7890 export https_proxy=$http_proxy 注意,手工设置的环境变量只会影响当前会话,亦即只在当前终端窗口生效。 另外,建议一律使用小写的 http_proxy 而不是大写 HTTP_P…
IIS 重叠回收可能导致全局的 Application_Start 函数“不触发”
这两天在修改单位网站的 .NET 代码,其中有一个需求是这样实现的: 网站的告警信息以及每个告警对应的已读用户是保存在一个内存对象中的。 IIS 每天晚上会做定时的应用程序回收。 所以要在应用程序终止(Application_End)前将告警数据序列化导出成 Cache 文件保存(SaveCache); 然后在新的应用程序启动(Application_Start)后从 Cache 文件中读取告警数据,反序列化回来(LoadCache)。 在测试机器上这一系列代码是运行正常的,不论是 IIS 的定时回收,还是…
CTF 流量分析
Wireshark 主窗口 注意,数据包详情面板中展示的信息是经过 Wireshark 解析并"格式化"过的,方便阅读。最下面的数据包字节面板里才是这个包的真实数据。 过滤器栏 在主窗口的过滤器栏中输入过滤指令来筛选数据。 常用过滤指令 ip 地址筛选 ip.addr == x.x.x.x 筛选 ip 地址为 x.x.x.x 的(包括源 ip 地址与目标 ip 地址) ip.src eq x.x.x.x 筛选源 ip 地址为 x.x.x.x 的(eq 即 ==) ip.dst ne x.…