Zotero 7 配置笔记
磨刀不误砍柴工,文献管理软件这把刀确实是值得打磨的,选择Zotero而非其它文献管理工具,主要是看重了它的免费和可配置性,适合重度使用。 最新版 Zotero 7 在 Zotero 6 的基础上,进行了升级,包括非常多的优化,例如最基础的UI看着更漂亮了,等我把它的各种插件和配置都鼓捣好了,就更有动力(但愿吧)打开来看文献了。 网上关于Zotero有很多分享教程,但是绝大部分都是入门级的配置笔记,参考价值并不大,本文最主要的参考是Zotero非官方中文社区。 基础 本地安装 直接从官网下载 Zotero 7,然后傻瓜式安装即可,需要注意的是两个位置: 首先是软件安装位置,可以使用自定义安装方式,挑一个合适的位置即可,例如D:\ProgramMain\Zotero7; 然后是本地数据存储位置,默认是~/Zotero。 数据存储位置比较占地方,我想将其迁移到别的位置,例如E:\<user>\Documents\Zotero7,首先需要在设置中更改 1编辑 -> 设置 -> 高级 ->...
Cpp lambda表达式笔记
在另一篇关于可调用对象的笔记中已经对lambda表达式的语法本质和应用情景进行了整理, 这篇笔记主要是整理lambda表达式的语法细节,假定读者对lambda表达式已经有了基本的概念。 虽然早在C++11中就提出了lambda表达式,但是相关的语法细节始终在不断地发展和完善(C++实在是太复杂了!), 本文以C++20已经支持的语法为主,对于最新的C++23增加的语法不作讨论,例如Deducing This等内容。 基础 基本捕获 首先介绍两种隐式捕获符: [=]:全部按值捕获 [&]:全部按引用捕获 它们会自动地捕获在lambda表达式中所有实际被使用的局部变量,无需我们逐个列出被使用变量对应的名称。 这里存在一个问题:如果当前处于一个普通成员函数中,如何处理特殊的this/*this所代表的当前对象?见下文中的讨论。 在默认捕获符的基础上,我们可以进行一些微调,例如: [=, &a, &b]:表示除了后面明确提到的这些变量按引用捕获,其它情况下默认按值捕获 [&, a,...
Cpp 可调用对象笔记
概述 在C++中,可调对象(Callable Objects)是指可以像函数一样被调用的对象,通常包括: 函数指针 仿函数 std::function lambda...
高精度时间戳的获取
获取毫秒级的高精度时间戳是一个很常见的需求,尤其在向日志文件中输出信息时通常需要附带格式化的时间戳, 下面在不同的语言中尝试生成形如[2024-07-30 00:52:47.379]的高精度时间戳。 C++ 对于C++,标准库chrono可以获取高精度的时间, 然后通过localtime函数进行格式化,由于它不支持毫秒部分的格式化,我们还需要对毫秒进行额外处理。 下面是一个生成时间戳的示例函数 12345678910111213141516static std::string time_stamp() { // unsafe auto now = std::chrono::system_clock::now(); auto now_time_t = std::chrono::system_clock::to_time_t(now); auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>( ...
XMake 速成笔记
虽然xmake的使用远没有cmake那么普及,cmake在可预见的将来都还是c++项目事实上的标准, 但是对于一些个人的小项目,直接使用xmake看起来还是更方便的,因此简单学习一下使用方式。 下载安装 虽然XMake支持了很多种安装方式,但是我还是选择了纯净版安装。 在Github仓库中选择xmake-[version]-win64.zip下载到本地解压,然后把对应路径添加到PATH环境变量即可。 Demo项目 xmake可以直接生成C++的HelloWorld项目 1xmake create -l c++ -P ./demo 这个命令会在当前位置下创建./demo文件夹,在其中自动生成如下文件结构 12345demo├── src│ └── main.cpp├── .gitignore└── xmake.lua 其中xmake的核心配置文件xmake.lua有效内容如下 12345add_rules("mode.debug", "mode.release")target("demo") ...
Lua 速成笔记——2. 进阶内容
元表 (Metatable) 元表(metatable)是 Lua 提供的一种机制,用于改变表(table)的行为。 通过对元表(metatable)的设置可以自定义表(table)的操作行为,如算术运算、索引等,甚至可以用来实现面向对象机制。 有两个涉及元表的操作函数: 使用setmetatable函数可以设置一个表的元表,第一个参数为目标的表,第二个参数为提供的元表,返回值是第一个参数,无论是否接收第一个参数,这里的修改都是有效的,因为传参过程相对于引用传递; 使用getmetatable函数可以获取一个表的元表,提供的参数就是目标的表。 运算符元方法 对于常见的运算符,有对应的元方法 __add 对应运算符 + __sub 对应运算符 - __mul 对应运算符 * __div 对应运算符 / __mod 对应运算符 % __unm 对应运算符 - __eq 对应运算符 == __lt 对应运算符 < __le 对应运算符 <= __concat 对应运算符 .. 例如用自定义的加法行为实现表的相加 1234567891011121314local...
Lua 速成笔记——1. 基础内容
简单学一下Lua这个有点过时的轻量级脚本语言吧,因为很多工具(nvim、xmake、MySQL等)都采用了Lua脚本提供配置, 而且直到现在,在c++项目使用Lua脚本提供配置也是一个可以考虑的方案。 关于Lua的教程很多都是速成版的,因为内容实在比较简单,比如Learn Lua in Y minutes。 编译安装 Lua是一种开源的脚本语言,完全使用C语言编写,Lua官网直接提供了源码, 在Linux系统中的下载和源码编译流程如下 1234curl -L -R -O https://www.lua.org/ftp/lua-5.4.7.tar.gztar zxf lua-5.4.7.tar.gzcd lua-5.4.7make all...
Cpp 智能指针
概述 C++标准库主要提供了三种智能指针:(都在<memory头文件中) shared_ptr:共享指针,允许资源共享,在内部维持一个引用计数,复制会增加引用计数,析构则会减少引用计数,引用计数为零则释放资源 unique_ptr:独享指针,独自负责资源的管理,析构时释放资源 weak_ptr:弱共享指针,作为共享指针的辅助手段,可以指向共享指针的内容但是不参与引用计数,主要为了解决共享指针的循环引用问题 除此之外,在早期还提供了auto_ptr,但是目前已经被废弃。下面先介绍RAII思想,然后介绍三种智能指针的使用。 简单示例与RAII 先给出使用原始指针和unique_ptr管理资源的对比示例 123456789101112131415{ int* p = new int(100); // ... delete p; // 必须记得手动释放内存}{ std::unique_ptr<int> up = std::make_unique<int>(200); //... //...