基于 BibTeX 构建可视化合作网络
在科研中,作者之间的合作关系往往蕴含了很多信息,比如谁是核心作者、合作紧密的团队以及跨学科合作的桥梁。 通过对 BibTeX 文件中的作者信息解析可以获取作者之间的合作关系,并生成可视化图表。 脚本内容coauthor_network.py12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116...
DLL 注入攻击
概念介绍DLL 注入攻击(DLL Injection)是一种将动态链接库(DLL)强制加载到目标进程中的技术,使得攻击者编写的代码能在目标进程的地址空间中运行。 在 Windows 中,DLL 注入是系统提供的合法功能,主要用于调试器和辅助工具,但也可以被用于攻击,不过这种攻击手段是非常明显且初等的,一般的防护软件都会识别并阻止这种行为。 简易实现可以使用最经典的 CreateRemoteThread + LoadLibraryA 方法实现 DLL 注入攻击,下面是主要的代码思路。 代码参考:idea4good/AbuCoding Loader目标是让目标进程(这里以记事本Notepad.exe为例)加载提供的 DLL,实现步骤: 查找并获取目标进程句柄:使用 CreateToolhelp32Snapshot 遍历系统进程列表;调用 OpenProcess(PROCESS_ALL_ACCESS, ...) 在目标进程分配内存并写入 DLL 路径:VirtualAllocEx 为 DLL 路径字符串留空间;WriteProcessMemory 将 DLL 路径写到目标进...
Python 日志库 logging
Python 标准库中的 logging 模块提供了功能完备、可高度自定义的日志记录方案,适用于从简单脚本到复杂应用程序的各种场景。 许多 C/C++ 项目都依赖自行实现的简单日志库或成熟的第三方日志库(如 spdlog、log4cpp 等),与之不同的是,Python 内置的 logging 模块已经可以满足绝大多数开发需求,各种语言的日志库使用逻辑具有很多共性。 基本使用先讨论在简单脚本文件中的日志使用,不涉及 logger 以及复杂的日志配置逻辑。 极简示例导入日志库之后,无需任何配置就可以直接使用 1234567import logginglogging.debug("This is a debug message.")logging.info("This is an info message.")logging.warning("This is a warning message.")logging.error("This is an error message.")loggi...
NVIM 使用笔记
nvim 安装在Linux系统中默认都没有安装nvim,需要自行安装,官方的包管理器中的版本都太老了,最新的版本是0.11.x,最新版的 Glibc 要求很高,Ubuntu 20 都已经无法满足了。 由于 nvim 插件对版本都很敏感,不同插件的版本之间可能会有很多问题,尽量都使用最新版。 从 nvim 仓库 获取最新版的预编译的压缩包 nvim-linux-x86_64.tar.gz,直接解压到本地就可以使用,无须执行任何额外命令。 有两种配置方式: 第一种方式是将对应的路径加到 PATH 中,保持 nvim 的目录独立性; 1export PATH="$PATH:$HOME/opt/nvim-linux-x86_64/bin" 第二种方式是将解压后的子文件夹(包括bin/,lib/等)与/usr/local/或~/.local/位置下的对应子文件夹合并。 1cp -R * ~/.local/ 目前的做法是将其安装到 ~/opt,并把对应的路径添加到 PATH。 安装之后检查一下即可 12which nvimnvim --version 当前 ...
Vim 学习笔记
vim 被称为编辑器之神,学习难度很大,但是熟练掌握后可以更高效地敲代码,因此有必要学一下,但是没必要鼓捣各种插件。主要参考:【Vim】可能是B站最系统的Vim教程 vim 介绍与版本vim 是古董编辑器 vi 的升级版,在现代的 Linux 发行版中通常自带 vim,无需手动安装,虽然版本通常不是最新的,但是也足够使用。在很多发行版中都将 vi 命令链接到 vim 命令,因此 vi 命令和 vim 命令通常是等价的,都是在调用 vim 编辑器。 在 vim 中输入 :version 可以查看版本信息,例如 123VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Nov 22 2021 19:31:05)Included patches: 1-3582Compiled by <https://www.msys2.org/> vim 的各种功能模块化,在编译安装时可以选择精简其中一部分功能,至少有几种安装模式:tiny, small, normal, big, huge,显然 huge 版本的功能最完整。 在 :version ...
FORTRAN 古董代码赏析
欣赏一下下图这段 FORTRAN 77 时代的代码,语句中大量的 GOTO 是那个时代编程的典型特征。 这段代码的功能非常简单: 读入一个整数 MAXINT,然后输出从 2 到 MAXINT 之间的所有素数。它采用的是最朴素的试除法:对于每个整数 N,从 2 到 N-1 依次尝试。 下面是完整代码,加了一行用户输入提示。 prime.f12345678910111213141516171819202122232425C PROGRAM TO COMPUTE PRIME NUMBERSC PROGRAM PRIME INTEGER MAXINT, N, DIVSOR INTEGER QUOT, PROD WRITE (*,*) 'ENTER THE UPPER LIMIT:' READ (*,100) MAXINT N = 2 WRITE (*,150) MAXINT 5 IF (MAXINT-N) 200,10,10 10 DIVSOR = 2 15 IF ((N-...
K-means 算法
K-means 算法是一种经典的无监督学习算法,用于将数据自动分为 $k$ 个簇,这里的 $k$ 需要提前给定。 K-means 算法假设簇是凸的、大小相近,此时处理效果最好,但是并不能处理复杂形状的簇(如半月形),对维度高的稀疏数据(如文本)不太适用。 算法步骤设数据集为 $X = {x_1, x_2, \dots, x_n}$,$x_i \in \mathbb{R}^d$,希望聚为 $k$ 类,算法流程如下: 初始化:随机选择 $k$ 个数据点作为初始的簇中心。 分配:将每个数据点分配到最近的簇中心,以形成 $k$ 个簇。设当前中心为 $\mu_1, \dots, \mu_k$,对于样本 $x_i$,所属的簇为$$ x_i \in C_s ,, \text{where} ,, s = \arg\min_{j=1,\dots,k} | x_i - \mu_j |^2$$ 更新:重新计算每个簇的中心,记 $C_s$ 是第 $s$ 个簇内的数据点集合,那么中心 $\mu_s$ 为$$ \mu_s = \frac{1}{|C_s|} \sum...
Cpp 练习——命令行参数解析
CmdParser 是一个模仿 cmdline 的轻量级的 C++ 命令行参数解析工具,支持解析标志(flags)和选项(options),并能够处理回调函数、类型转换以及剩余参数。 特点 标志解析 支持定义简单的布尔标志,例如 --help 或 --verbose 标志是可选的,在解析过程中会对标记出现的次数计数 可以通过回调函数来定义标志存在时的触发事件 选项解析 支持带值的选项,例如 --scale=2.0 或 --scale 2.0 选项可以设置为可选或必选,在解析过程中会记录每次出现的选项的值 支持的数据类型包括:int、double、bool、string、char、size_t 支持四种添加方式 提供默认值,提供回调函数检查 提供回调函数检查 提供默认值 都不提供 补充 标志和选项的名称要求: 必须提供一个--开头的,加上若干字母、数字、下划线组成的完整名称,区分大小写,例如--len; 可以额外提供一个-开头的,加上单个字母或数字组成的缩写名称,例如-v; 所有名称互异。 标志和选项都需要提供说明字符串,可以使用空字符串 使用方法创建 ...
Julia 版本管理和环境管理
Some content in this article was created with AI assistance. Please verify as needed.Julia 的版本管理和环境管理,通常可以分成两部分来看: juliaup:Julia 版本管理 Pkg:项目环境和包管理 和 Python 中常见的 pyenv + venv + pip 组合(以及其他各种替代方案)相比,Julia 直接从语言角度就考虑,设计更加统一优雅: Julia 版本推荐由 juliaup 管理;(如果只使用一个版本,也可以绕过 juliaup) 项目依赖和环境由 Julia 自带的 Pkg 标准库管理; 环境本质上不是一套独立拷贝的运行时,只是两个文本文件,对应依赖声明与解析结果。 Julia 的版本和环境管理机制和 Rust 很相似,可以说是现代编程语言设计的最佳方案。 Julia 运行时和版本Julia 运行时Julia 运行时指的是使 Julia 程序能够执行的一组核心文件,通常包括: julia 可执行文件 Julia 自带标准库(standard librari...
Julia 学习笔记——绘图基础
Some content in this article was created with AI assistance. Please verify as needed.这篇笔记只关注 Julia 里最基础、最常用的科学计算绘图,不追求复杂可视化能力。 原因也很简单:如果只是画函数曲线、散点图、热图、简单布局,那么 Julia 自己已经够用;但如果进入更复杂的工程化可视化、交互式图形或者生态成熟度要求很高的场景,通常还是更容易回到 Python。 概述Julia 绘图生态里最常见的入口大概有这几种: Plots.jl:接口统一、上手简单,最适合基础笔记 GR:常见默认后端,轻量、够快 PyPlot.jl / PythonPlot.jl:更接近 Matplotlib 习惯 Makie.jl:更强、更现代,但复杂度也明显更高 如果只是“科学计算里顺手画图”,最实用的选择还是: 直接使用 Plots.jl 默认后端先用 GR 这篇笔记也只按这个思路整理。 安装与加载最基本的安装: 12using PkgPkg.add("Plots") 使用时: ...
