自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浏览器中的同源策略、CORS 以及相关的 Fetch API 使用

笔者对前端 Web 技术的认真学习,其实开始于与 Fetch API 的邂逅。当时觉得fetch()的设计很不错,也很希望能够请求其它网站下的数据并作处理和展示。学习过程中 HTML 和 CSS 都还好说,由于几乎没有 Web 技术的基础,学习 Fetch API 的时候费了不少功夫,主要是其中涉及不少 HTTP 标头相关知识和习惯,也不理解 Fetch API 中很多属性和参数的意义或者为什么这么设计,更不必说 JavaScript 多种多样的版本和语法,以及十分重要的异步 I/O。

2024-08-01 15:35:18 1594

原创 JavaScript 编解码 Base64 速度测评

文章中介绍了两种进行 Base64 编解码的思路,一种是利用现有的 atob 和 btoa 函数,另一种也是利用现有的 FileReader 和 Fetch API.

2024-04-29 09:52:23 1029 4

原创 使用 JavaScript 处理 UTF-8 文本字符串或任意数据的 Base64 编解码

Base64 是一种将二进制数据编码为 ASCII 字符的编码方式. 使用 Base64 编码, 可以在媒介不支持传输或存储任意二进制数据的情况下, 避免数据在过程中发生损坏. 本文将主要介绍在 JavaScript 中处理 UTF-8 文本的 Base64 编解码的方式.

2024-04-27 20:22:09 2720 3

原创 Firefox Focus,一个 “专注“ 的浏览器

Firefox Focus 可以算是一个特殊版本的 Firefox,在 Chrome 着力打击广告屏蔽插件以及 Microsoft Edge 不断植入和推送广告的当下,Firefox 可以给用户更多选择的空间以及更纯粹的浏览体验。由于 Firefox Focus 没有多标签页,笔者的注意力主要集中在当前浏览的页面上,同时也更专心去记住先后浏览了哪些页面,效率高了不少。

2024-02-27 18:24:32 1996

原创 将 zram 用于内存交换

zram, 旧称为 compcache,是一个用于在内存中创建压缩的块设备的 Linux 内核模块,即带实时磁盘压缩的内存盘。使用 zram 可以创建在内存中的交换设备,不需要后备交换设备。对于一些小内存设备,使用 swap 是较为必要的,可以扩展内存,避免一些内存不足导致程序停止甚至无法启动的情况。而将 zram 这种内存压缩技术用于 swap,则可以避免与磁盘这种速度较慢设备的进行 I/O,用富裕的计算性能,换取 swap 所需的磁盘空间,更好地利用物理内存自身。

2023-10-23 14:32:36 851

原创 拥有自己的服务器是一件很不错的事情

使用自己的家用设备时,一是不能保证设备的在线情况,二是通常不具备所谓的“公网”环境:家用的宽带业务,通常并不能为每个用户提供独立的 IPv4,即便是 IPv6 渐渐普及的今日,运营商通常也不给予用户网络入站的权限——用户只能对外发出连接请求,而无法收到其它用户传入的请求。

2023-10-23 13:43:12 200

原创 将 Jupyter Notebook 用于 JavaScript (使用 Node.js 或 Deno 环境)

若要在 Jupyter 中使用 JavaScript, 获得类似 Python 般的体验, 还是需要安装适用于 JavaScript 的 Jupyter Kernel. 本文将介绍基于 Node.js 的 IJavaScript 项目, 以及 Deno (一个较新的 JavaScript 运行时) 自带的 Jupyter 支持.

2023-10-10 02:11:03 2319

原创 通过 pip 安装 Python 软件包时使用 venv 虚拟环境的必要性

在一些 Linux 发行版中, 系统会自带 Python 解释器, 默认的 sys.prefix以及 sys.exec_prefix为/usr/local, 直接安装软件包便会写入这个系统目录下. 为了避免与系统软件包发生冲突, 建议使用 venv 虚拟环境, 或者使用独立安装的 Python 环境.

2023-10-10 01:18:25 1110

原创 有关 Rust 交叉编译的一些思路 (仅供参考)

近来, 使用 Rust 语言开发的应用程序渐渐融入了开发者以及普通用户的日常生活, 它们不仅出现在我们常用的工作平台上, 不少嵌入式设备或者云服务器上也多见它们的身影.Rust 是一种需要编译的语言, 且一些 crate 仍需要 C/C++ 的构建环境, 不过大多数时候, 在 Rust 工具链 (toolchain) 支持的设备上进行原生构建不会遇到什么问题, 当目标设备的架构与构建时使用设备相同时, 直接将构建好的产物发送至目标设备上即可使用.

2023-09-11 03:53:55 1794 2

原创 [ JavaScript 初学 ] 30 行代码将内存中的简单 JSON 对象转储为 YAML

笔者前日需要分享配置信息给朋友, 而对方需要 YAML 格式的配置文件. 因为笔者倾向于使用单文件, 这样仅在面板上就能完成对 Cloudflare Workers 的调试与维护, 于是手写了一个简单的 JSON 对象转储为 JSON 的代码.

2023-02-17 18:58:31 477

原创 Windows 上 JetBrains 系列 IDE (IDEA, PyCharm, CLion) 启动失败, 提示 “Address already in use: bind“

可以在 IDE 的日志 (如有) 中查看是否提到了具体的端口号, 然后根据端口号在资源管理器中查找对应的程序. 之后, 可以先将这些程序停止, 再尝试是否能够启动 JetBrains IDE, 如果问题解决, 则说明是该程序的问题, 可以在下次运行时使用一个更高更随机的端口号 (比如 34567). 另一种情况则是, 如果 Windows 的端口范围被重置回了 1025-65535, 则建议恢复设置, 并重启计算机.

2023-01-19 07:46:51 825

原创 使用 Cloudflare Zero Trust 通过 SSH 连接到 GitHub Actions 的 Runner 机器以进行调试

GitHub Actions 的 Runner Images 包含了很多常用的开发环境, 使用它来构建一些软件是很方便的. 不过, 构建过程难免会遇到问题, 而在 GitHub Actions 上进行构建和在本地有很多不同之处. 为此, 我们可能希望能在构建过程中的某处 "暂停" 工作流, 并且能够进入机器详细地观察构建的状态.

2023-01-15 06:42:39 3072 3

原创 C 语言: 递归方式统计任意整数 16 进制中数位出现的次数

以 C 编写一个完整的程序, 用递归方式统计任意整数 16 进制中数位出现的次数, 按从少到多输出统计结果.

2022-12-22 02:07:14 592

原创 使用 ifupdown2 为 BuyVM VPS (Ubuntu 20.04) 配置 IPv6

BuyVM 的 KVM 产品似乎需要手动配置 IPv6, 本文中笔者尝试在 Ubuntu 20.04 环境下使用 ifupdown2 为机器配置 IPv6.

2022-10-27 17:51:55 2222

原创 pacman 升级软件包提示 “failed to commit transaction (invalid or corrupted package)“

很久没打开 Arch Linux, 想着执行 pacman -Syu 进行系统更新, 却遇到 "signature is marginal trust" "failed to commit transaction (invalid or corrupted package)" 等错误. 这可能是 keyring 软件包过时导致的: pacman 验证软件包的签名失败, 继而提示软件包毁损. 执行 pacman -Sy archlinux-keyring && pacman -Su 即可解决问题.

2022-09-03 14:09:40 7281 1

原创 使用 SSH 连接到 GitHub

用户可以使用 SSH 协议连接到服务器, 以及进行到远程服务器的认证过程 (认证远程服务器的身份, 以及向服务器证实自己的身份). 当然, 用户可以用 SSH 来读写自己在上的存储仓库中的数据, 并且也推荐这样做. 使用 SSH 建立连接的时候, 用户使用自己本地电脑上一个私有的密钥文件来完成认证. 之后就是通过 SSH 访问仓库了 (拉取或推送更新). 但是请别着急, 这中间有一些需要注意的地方....

2022-08-05 15:22:15 3403

原创 Windows 上开发使用跨平台 C++ 动态链接库 (DLL)

记录 Windows 上开发使用跨平台 C++ 动态链接库的一些问题, 包括 "未定义符号" 以及找不到库的问题.

2022-07-04 05:46:45 3189 2

原创 CLion 使用 clang-cl 工具链时未正确链接 vcpkg 中的 Boost 外部库

把这些缺失的命令行选项手动加回到 CMake 缓存后, CMake 生成的构建脚本就能正常构建并链接到 Boost 库了. 不过, 还是建议使用 clang 而非 clang-cl.

2022-06-25 13:38:21 1584

原创 Windows 下 MSVC 编译器在 CMake 生成时提示 RC failed 或库文件缺失

发现 CMake 生成的时候就会报错, 提示 MSVC 编译器 "is not able to compile a simple test program", 问题出在链接的时候找不到 kernel32.lib 等库文件. 通过在 Visual Studio Installer 里更换安装一个 Windows SDK 解决.

2022-06-25 11:32:41 1220

原创 从 VHDX 文件恢复 (导入) WSL 2 安装

有时出于某些意外, 导致注册表丢失以致 Windows 丢失了 WSL 安装相关的信息, 将无法使用或者导出 WSL. 不过, 只要还有 WSL 对应的的 VHDX 文件 (虚拟磁盘文件), 在注册表中重建相应的信息之后就能正常使用..........

2022-06-17 06:25:25 10526 17

原创 关于 draw.io 矢量图 SVG 导出的研究

draw.io 是一个很简单易用的矢量图绘制工具, 画一些简单的图标或者流程图等等都很适合. 虽然好用, 但是在导出 *.drawio 文件为其他格式 (位图 PNG, 矢量图 SVG) 时, 大多数时候都需要额外注意.

2022-05-18 03:47:59 11181 9

原创 关于 cc3k-villain 作业的思考

总结一下完成 cc3k-villain 作业时的思考。

2021-11-29 04:30:20 1266 3

原创 Windows 下使用 vcpkg + CMake 进行开发

vcpkg 是一款开源的、基于源代码的 C++ 依赖管理器。简单地说,用户可以使用 vcpkg 安装自己需要的 C++ 依赖。

2021-11-02 15:11:41 15415 7

原创 Visual Studio Code 中 CMake 插件的基本使用

CMake 是一个构建管理工具。它可以根据用户编写的脚本生成适用于不同平台、不同工具链的构建文件。本文介绍 Visual Studio Code 中 CMake 插件的基本使用。

2021-10-27 18:19:22 20398 2

原创 记一次 Windows 上使用 MSVC 构建并使用 Clang

记一次在 Windows 上使用 MSVC 构建、安装、使用 Clang + LLVM

2021-10-12 11:02:42 5038

原创 使用 mdBook 进行创作

之前听朋友介绍过静态页托管这种发布内容的方式,但是一直不太清楚该怎么操作,静态页构建的工具也不甚了解。后来,有幸从 《计算机入门指南》 这里了解到了 mdBook 这种工具,发现十分好用,并用 mdBook 编写了自己的同类项目 《程序员入门指南》(Gitee 镜像)。要使用 mdBook,只需要下载一个可执行文件,再将其路径添加到环境变量 PATH 即可从 Markdown 文件生成静态页面。官方在 GitHub 的 Release 页提供有针对 x86_64 架构的 Windows、macOS 以及

2021-09-25 17:33:21 1907 2

原创 VS Code 编译、调试 C/C++

不过,编写一些小的程序,甚至小型的工程,使用 IDE 会稍显庞大,一般也可以选择使用 VS Code 编写;写好之后,想顺手在 VS Code 中编译运行的时候,可能会遇到一些问题。

2021-07-31 19:34:30 954

原创 Java 中的 Lambda 表达式

我们知道,Lambda 表达式一般用来抽象一种运算,通常是简单的语句;实际使用中,也可以是一段无需命名的代码块。但是实际上 Lambda 表达式是什么类型呢?实际上,Lambda 表达式是实现了某一个特定接口的匿名对象。而这就要求我们就先具有对应的接口/界面(interface),描述这个映射关系。

2021-07-08 21:18:11 147

原创 C++:用类包装算法

如何优雅的用类包装算法呢?

2021-06-06 21:51:43 432

原创 C++ 浮点数转为字符串并保留一定小数位数

C++ 如何将浮点数转为字符串,并保留一定小数位数呢?比如有一个数 25.56789,只想保留小数点后两位。sprintf、snprintf 是比较 C 语言的函数,用法也比较简单,不再过多介绍,这里主要介绍一些 C++ 的写法。

2021-05-22 16:30:11 21435

原创 Robomaster 2021 视觉个人赛季总结 & 代码分享

不知道比赛还能走多久。这个赛季,还是“骗”来了一些厉害的新队员,也有热心的老队员,未来的希望是有的。比赛的意义是什么?终究会散的宴席,最后我们能留下什么?代码分享和一些思考。

2021-05-22 00:52:22 3001 7

原创 OpenCV 中 cv::Mat 类的使用

OpenCV的Mat类可以表示一个N维的数组,数组的每个位置可以是单通道或多通道。可以用来存储图片(灰度或彩色)、向量、直方图等很多东西。

2021-02-26 04:21:48 9406

原创 数据结构:广义表(C++模板)

二维及以上的数组可以看作是特殊的广义表。关于广义的表定义见下文的链接。暂时没有见到用C++的继承和多态实现广义表的代码,于是自己写了一个。

2021-02-17 16:18:50 549 1

原创 用C++的random库生成更好的随机数

传统的rand() + srand()生成随机数的方法有好些问题,习以为常的取得一定范围间随机数的算法也有不够均匀的弊端;建议大家采用C++ 11引入的random库来生成随机数。可悲的是,写这篇文章时,“C++随机数”关键字的中文搜索结果前几个基本没有提到这些问题。

2021-02-04 06:57:38 44847 5

原创 C++ Lambda表达式

没有和标识符绑定的函数定义叫做匿名函数(anonymous function),又叫做Lambda表达式(lambda expression)。匿名函数抽象出一种运算。如果有个函数只需要用一次或者几次,那么采用匿名函数会比使用具名函数更加简便。

2021-01-29 00:06:36 261

原创 C/C++代码规范

代码规范是在代码格式上更进一步的要求,为的是使代码更容易阅读、出现错误更容易查错。不同人可能持不同的代码风格,但是也有一些规范是大家共同遵守的。为了代码的整洁、漂亮,代码的风格需要统一,也就是说,同一篇代码、同一个项目的代码风格需要保持一致性。

2021-01-22 04:37:11 1426

原创 CMake入门

为什么要使用CMake呢?随着工程变得庞大,构建它会有很多文件的参与,手写Makefile等构建文件变得愈发困难且容易出错,使用CMake可以简化这个过程;CMake也能由一个文件根据不同的平台生成相应的建构档。

2021-01-17 21:10:07 652 1

转载 C++编译器与链接器工作原理

(看到一篇觉得写的很好的文章,转载一下。)这里并不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧……

2021-01-16 01:40:04 377

原创 在 Windows 上的虚拟机中安装 Ubuntu

Ubuntu是一个常见的Linux发行版。本文主要讲解在VMware Workstation中安装Ubuntu以及一些基本的使用。

2021-01-15 03:28:47 666

原创 C/C++多文件编程入门

随着写的程序变得多、变得复杂,代码文件的长度也越来越长,给维护和阅读都带来一定的麻烦;更重要的是,如果想要修改某一特定功能,那么所复制了这段源代码的地方都需要重新修改,也会增加不必要的编译时间。

2021-01-06 18:51:21 1270 2

空空如也

空空如也

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

TA关注的人

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