现代C语言:C23标准中值得注意的变化

现代C语言:C23标准中值得注意的变化

图源:Anmi - 水族館 83088427

虽然没有固定标准,但一般将C99之后的C语言标准称为“现代C语言”;目前的最新标准为C23;

C23标准中值得注意的变化

以下是一部分我认为比较重要的变化,完整变化列表可以参阅 https://en.cppreference.com/w/c/23 或ISO标准文档。

替代

  • <assert.h>中的static_assert()宏被替代,变成了static_assert关键字;
  • <threads.h>中的thread_local()宏被替代,变成了thread_local关键字;
  • <time.h>中的ctime()函数弃用,请使用ctime_s()替代;
  • <time.h>中的asctime()函数弃用,请使用asctime_s()替代;
  • <stdnoreturn.h>_Noreturn标识符均弃用;
  • <stdalign.h>中的alignas()alignof()宏被弃用,请直接使用_Alignas_Alignof关键字;
阅读更多
制作及运行 WebUI(NovelAI)Docker 镜像

制作及运行 WebUI(NovelAI)Docker 镜像

图源:《天地上等》@banishment 100412674

准备 Novel AI 模型文件

下载地址:

1
magnet:?xt=urn:btih:5bde442da86265b670a3e5ea3163afad2c6f8ecc

只需要部分下载其中的文件;

  • 必须的文件:
    • 文件 stableckpt/animevae.pt
    • 文件夹 stableckpt/animefull-final-pruned
  • 可选的文件:
    • 文件夹 stableckpt/animefull-latest (全量模型,暂时没发现有什么特殊用途)
    • 文件夹 stableckpt/modules/modules (差分模型,针对特定风格强化训练)
阅读更多
认识Snort3 (1):编译、安装与简单使用

认识Snort3 (1):编译、安装与简单使用

图源:SAyuki - 《Gray》,Pid:79912976

Snort 简介

Snort,是一款开源的 IDS/IPS 软件,由思科公司(Cisco)主导开发,使用广泛。Snort 有三种模式——包嗅探模式(Packet Sniffer)、包记录模式(Packet Logging)、IPS模式(Intrusion Prevention System)。搭配自定义的规则、不同的插件与其他软件,Snort 能在不同的系统中发挥不同的作用。

本篇文章简单记录 Snort3 的编译、安装和简单使用流程。

编译安装 Snort3

例子中使用的操作系统是 Ubuntu Server 20.04.3 LTS。当然你也可以使用 Ubuntu 18.04.5 LTS,或者其他 Linux 发行版。某些发行版由于内核配置原因无法编译 libdaq 的部分插件(例如 NFQ),这时 Snort 虽然无法提供防护功能,但仍然可以作为入侵检测系统(IDS)来使用。

快速导入 Ubuntu Server 虚拟机

Ubuntu Server 虚拟机其实不必下载 ISO 镜像后再用 VMWare 等虚拟化软件从头进行安装。Ubuntu 官方已经提供了预安装的虚拟磁盘的下载(如 Kali Linux 官方所做的那样),即 Ubuntu Cloud Images

阅读更多
Synthesizer V 插件开发入门(1)

Synthesizer V 插件开发入门(1)

图源:紺屋鴉江 - 《銀河》,Pid:94649749

写在前面

本文并非“零基础入门”型的文章。阅读此文章前,建议你已经:

  • 使用过 Synthesizer V Studio(即 SVR2,以下用此简称代替),了解过 VOCALOID,知道“插件”的作用是什么;
  • 已购买 Synthesizer V Studio Pro 版本,以便于插件的开发与调试;
  • 有一定的编程经验,使用过 Lua 语言;

Synthesizer V Studio Pro的正版授权可从 平行四界官方淘宝店Dreamtonics官方淘宝店 获取。关于 Lua 编程的资料数不胜数,可从 菜鸟教程等网站获取。

另外,阅读时,可以配合下面两个文档:

正文部分存在问答部分,可能与后文的知识关联。你可以按顺序阅读,也可以在阅读完其他内容后再阅读问答部分。

以下是文章正文。

阅读更多
Bilibili 视频 ID、播放链接与弹幕数据小记

Bilibili 视频 ID、播放链接与弹幕数据小记

图源:《雷神》二木enmmm 115362902

2019年2月4日,一年一度的哔哩哔哩拜年祭如约而至。不得不说,今年的拜年祭在节目质量和形式上相较于前三年都有较大的提升。出于在电视上离线播放(即非网络电视,而是读取存储设备上的媒体文件)的需求,及家中的缓慢网速达不到 Bilibili 大会员 1080P+ 无卡顿播放的程度,我利用少量的空余时间对 Bilibili 高清视频的下载方式进行了简单实践,并在本文中进行简单总结。

ID

熟悉B站的用户应该都会了解到,B 站上的视频、音频、专栏文章、用户都是以唯一的 ID 进行标识的。以“【星尘原创】尘降【PV付/COP】”这个视频为例:其视频地址为:https://www.bilibili.com/video/av4402328,该视频所对应的音频的地址为:https://www.bilibili.com/audio/au18065,上传该视频的UP主的个人主页地址为:https://space.bilibili.com/396194。由此我们可以获取到以下类型的唯一 ID:

  • 视频 ID [Anime (Video) ID, aid/avid]:4402328
  • 音频 ID [Audio ID, auid]:18065
  • 用户 ID [User ID, uid]:396194

中包含的“av”、“au”、“cv”等均是为了区分 ID 的类型所用。在 Ajax 请求过程中各 ID 的值均为数字,不包含字符。

在上述例子中没有包括的、实际应用的 ID 类型还有(不完全)[^1]:

  • 文章 ID [Content Viewing ID, cvid]
  • 内容 ID [Content ID, cid]
  • 通知 ID [Notification ID, nfid]
  • 会员 ID [Member ID, mid]
  • 标签 ID [Tag ID, tid]
  • 顺序 ID [Order ID, oid]
  • 分类 ID [Type ID, typeid]
  • 直播间 ID [Room ID, roomid]
  • 剧集 ID [Episode ID, epid]

在下载视频的时候,起到主要作用的是 aid 和 cid 这两个唯一 ID。aid 和 cid 的区别是:aid 既可以指单个视频,也可以指含有多个视频的播放列表,而 cid 是视频级唯一的。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×