Ubuntu Server 24.04版本是一个默认启用systemd-resolved和system-networkd的发行版。通过配置可以启用systemd-resolved上的mDNS功能。但是Ubuntu上默认通过Netplan来管理systemd-networkd配置,给我们的配置工作增加了难度。
继续阅读“在基于Netplan和systemd-networkd的系统上开启systemd-resolved的mDNS功能”使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书
cert-manager是一款云原生证书管理系统,能够根据Kubernetes原生Ingress对象的注释(annotation)自动为其签发合适的证书。Traefik的一些功能难以配合原生Ingress对象,而需要使用其定制的IngressRoute才能方便地使用,但我们仍然能够利用cert-manager为其自动签发证书。
本文将在自带Traefik Ingress控制器的k3s环境中,介绍如何利用cert-manager为Traefik IngressRoute对象签发Let’s Encrypt证书。
继续阅读“使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书”C++浮点数转换为整数的溢出问题
C++语言提供了将浮点数转换为整数的功能。但是,如果要转换的浮点数超出了整数的表示范围,会得到怎样的结果呢?这种情况在标准中是未定义行为(隐式转换 – cppreference.com)。例如,在x64架构上运行以下测试代码:
std::cout
<< static_cast<int32_t>(std::pow(2, 31))
<< std::endl;
继续阅读“C++浮点数转换为整数的溢出问题” Windows系统Python多版本共存和便捷切换
在Windows系统上,无论是使用官方安装包还是Microsoft Store应用商店安装Python,在命令行中使用python
命令都只会打开其中某一个特定版本的Python。若是同时安装了多个版本的Python并且想要启动其中的一个,则通常有些困难。若要调用某个特定版本Python的PIP包管理器来安装依赖包,则情况更为复杂。实际上,官方安装包版本和Microsoft Store应用商店版本均提供了用于区分不同Python版本的便捷方式。
使用APT安装Intel oneAPI的固定版本
Intel oneAPI是Intel公司的高性能异构计算工具集,包含有Intel C++编译器、Intel Fortran编译器、Intel MKL数学库等组件。要在基于APT包管理器的操作系统(如Ubuntu)上安装Intel oneAPI,可以使用Intel提供的APT源进行安装。然而,使用官方文档中列出的操作步骤安装后,安装的软件会被APT自动更新并导致潜在的兼容性问题。使用带版本号的包名可以解决这一问题。
继续阅读“使用APT安装Intel oneAPI的固定版本”在CMake与Conan中使用MSYS2 MinGW x64工具链编译Windows程序
GCC(GNU Compiler Collection)是一套功能强大的编译器集合,支持C、C++、Fortran等编程语言,是Linux上应用十分广泛的一款编译器。MinGW(Minimalist GNU for Windows)将GNU工具链移植到了Windows环境,可用于编译原生的Windows应用程序。MinGW包含了GCC编译器的Windows移植版本以及用于Windows平台的链接器、汇编器等工具。但是,原始版本的MinGW只能用于编译32位程序,不支持64位程序的编译。
继续阅读“在CMake与Conan中使用MSYS2 MinGW x64工具链编译Windows程序”map::emplace不总是比map::insert快
自C++11起,标准库中的许多集合类型提供了emplace
函数,可以在集合内直接创建新元素,而不需要将现有元素复制或移动到集合内。在很多情况下,使用emplace
函数能够减少复制或移动构造函数的开销,能提供比insert
、push
等函数更高的性能。但对于std::map
和std::unordered_map
而言,在某些情况下insert
可能比emplace
更快。
在Visual C++中使用UTF-8格式代码文件
Visual C++(Visual Studio中的C++编译器)工程中的代码文件默认使用ANSI编码,这样容易导致以下问题:
- 在其他语言的环境中编辑、生成工程时可能会出现乱码,因为ANSI的具体编码取决于系统设置;
- 在引用第三方库(通常是UTF-8格式)的头文件时,不能正确解析文件中的非ASCII字符。
要在Visual C++的工程中使用UTF-8编码,需要实现两个目标:
- 让Visual Studio以UTF-8编码保存代码文件;
- 让编译器以UTF-8编码编译代码文件。
C++记录程序运行时间(跨平台)
要使用标准C++实现计时功能,可以使用C++ 11中的<chrono>
头文件或者使用C风格的<ctime>
头文件。
.NET类库打包如何加入XML文档
.NET类库在打包为NuGet包的时候,如果需要加入XML文档,则需要在生成时启用XML文档文件的输出。生成时输出的XML文档文件在打包时会自动被包含在NuGet包中,无需另行将其包含到项目中。
要在生成时输出XML文档文件,只需在项目文件(.csproj)中的<PropertyGroup>
节点内插入如下内容即可:
<GenerateDocumentationFile>true</GenerateDocumentationFile>