0%

前言

此文转载自 Prelert 的博客,作者为 David。这篇文章目前只能在 WebArchive 找到了,因此我把此文转载并翻译到我的博客上。

我是在搜索为什么 Rust 没有对应 C/C++ 中 long double 的数据类型的时候看到了这篇博文,Rust 不提供对应的数据类型造成了一些互操作性的问题(参见这里这里)。与此相对的是,Zig 和新发布的 Carbon 语言都支持 f16f128 数据类型(其中 Zig 还支持 f80,Carbon 还支持 bfloat16)。不过这倒是不令人意外,因为 Zig 和 Carbon 都以与 C/C++ 的极致兼容性为卖点。这篇博客也许能解释一部分 Rust 不支持更高精度浮点数的原因。

阅读全文 »

最近突发奇想,想到自己有几台电脑,性能都不错但是经常闲置,包括实验室的服务器也不是每时每刻都在充分利用资源,因此完全可以跑一些别的程序来利用。我最先想到的就是以前做电脑压力测试的 Prime95 程序,然后一搜发现这里面还是有不少门道的。本文介绍一下如何利用你家电脑闲置的性能,将其贡献给科学事业,并且在冬天的夜晚让它的散热成为一大取暖来源~哈哈哈哈

GIMPS

我最先测试的程序是 Prime95,Prime95 是梅森素数搜索计划(Great Internet Mersenne Prime Search, GIMPS)的 Windows 客户端。这个计划旨在利用互联网的计算资源来寻找梅森素数。形如 $2^p-1$($p$ 为素数)的数被称为梅森数,如果这个梅森数也是素数那么就被称为梅森素数。梅森素数是目前寻找大素数最高效的目标,人类发现最大的质数前几名都来自于 GIMPS 发现的梅森素数。

如果你不想知道很多信息,只想直接开冲,那么你只需要从 GIMPS 官网下载 Prime95(Windows)/mprime(Linux),解压后双击直接开跑就可以了。如果你希望了解这个程序具体在干什么,或者想青史留名找到新的梅森素数,那么请接着往下读这一节~

阅读全文 »

Termux 是一款在 Android 上运行的终端模拟器,其中内含了一个非常轻量的 Linux 环境,并且使用 apt 做包管理器。最新的 Termux 已经不在 Play Store 上更新了,安装需要去 Github 或者官网。旧版本的 Termux 在使用 apt 的时候可能会碰到问题。

近来因为买了 Surface Duo,在手机上稍微折腾了一下 Termux,尝试是否能把手机变成 Linux 级别的生产力工具。结论当然是不可以,一方面性能不够,另一方面 Termux 上的包还是太少了,不过还是记录一下一些环境设置方法,供之后查阅。

另外,Termux 支持通过 proot 包来安装完整的 Linux 系统,最有名的是 TermuxArch。在安装完完整系统之后,理论上你的手机就已经变成完整的 Linux 电脑了!不过由于我并不需要那么多功能,我没有走这一条路线。

ssh 客户端

在手机上使用 ssh 客户端还是非常实用的,这样可以随时随地监控各个电脑的情况,并且不怎么耗流量。在 Termux 里面安装 ssh 非常简单,直接

1
pkg install openssh # or apt install openssh, pkg=apt in Termux
阅读全文 »

近些年一直有听闻 Rust 的发展,相比其他新语言(如 julia),我觉得 Rust 是切实解决了一些程序开发的痛点的,并且 Rust 比较适合作为底层软件开发的语言,我很感兴趣。Rust 官方有一本 Gitbook 教程,因此我就直接通过阅读它来上手 Rust 了。

本文记录一些我在看完这本书之后初步总结的一些 Rust 与我熟悉的 Python/C++/C# 之间的各方面的异同。如果你也有 Python/C++/C# 的编程经验,并且想上手 Rust,那么这篇文章应该能帮助你概括性地了解 Rust 的特性。本文也是我对 Python/C++/C# 之间特性的一个对比总结,但是我对这些语言的了解也没有那么深,因此如有谬误还请指教。

备注:

  • 本文中的代码仅为代码片段,对于 Python 之外的代码你可能需要将部分代码放在主函数中才能正确运行。
  • 本文的代码格式以精简为主,没有按照语言的标准格式编写。

语法

赋值

在变量进行赋值的时候,内容的传递有三种模式:传引用、复制、移动。其中最后一种指的是旧内容被复制到新对象中,然后旧对象中的内容变为不可用。

  • Python: 是传引用
  • C#: 引用类型是传引用、值类型是复制
  • C: 都是复制,但是是浅复制
  • C++: 默认是复制,但是可以通过 std::move 实现移动(需要 C++11)
  • Rust: 默认是移动。复制需要使用.clone()
阅读全文 »

最近几年一直有新的编程语言变火,也不断的有新概念的出现。我一直有打算了解各种新的编程语言,并且如果有前景的话多学一门语言也是挺好的。因此本文总结我在了解一些流行的现代语言的过程中,记下来他们的各种特点。如果你也有兴趣尝试新的语言,那么希望这个文章可以帮到你~

关于语言的流行度可以参考 TIOBE 排名Github 排名Stack Overflow 排名。本文也不会详细介绍每个语言的特性,因为每种语言都用非常多的特性,而且很多也都还在不断开发中。正因如此,本文的评价也仅限用与写下本博客的时候。

本文主要关注通用程序语言,对于一些领域专用语言(Domain-Specific Language)如 SQL 就不比较了,因为他们是你需要的时候你就会用,你不需要的话也不需要学。

关于编程语言的演变,下面是一个很精炼的图(来源点我),如果想要更完整的演变关系的话可以参考维基的程序语言编年表(按年代按年份,推荐后面那个!),或者参考这个网站

阅读全文 »

在我的收藏里面,音乐是占大头的。我非常喜欢尝试各种风格的音乐,也非常喜欢日本音乐圈的多样性,因此收集了很多。在这过程中也了解到了一些音频格式的内容~我也自己做过一个 benchmark,比较不同音频编码的性能区别,如果有兴趣的话可以自己尝试一下~。

我个人喜欢收藏无损音乐,目的不仅仅是因为高音质,而是无损意味着 “无损”,音质与 CD 或者其他音源是完全一致的(当然,这个一致性音频编码本身并不能保证音源的完整性,但是如果有其他的辅助信息如 EAC log,或者 AccurateRip 测试结果就完全可以保证了)。在这个情况下我把无损压成有损,就能保证这个有损是达到了预期的音质。如果是网上直接下载有损的话,一是很难确定这个有损有没有经过二次压缩,造成额外音质损失,二是有损也最好不要再转换格式了,同样是因为音质损失,这就造成了额外的不便。

本文就介绍一下我了解的与音频编码相关的知识,以及各种常用音频编码格式的比较。更全面的格式对比可以参考 Wikipedia 页面。另外需要指明的是,本文的介绍基于音乐收藏和本地播放的目的,与流媒体的需求不同,后者追求稳定的码率、低延迟甚至是低能耗。

阅读全文 »

这篇博客也是拖了很久了,简直是蹭热度都蹭不到热的。。。去年年底有一帮数学家和喜欢数学的人(Numberphile)发起了一个 Youtube 系列,叫#MegaFavNumbers,也就是介绍自己最喜欢的大于一百万的数字。虽然没有要求这个数字是整数,但是 Numberphile 一般只关注整数(甚至仅自然数)。如果没有这个限制的话,那物理化学上就有很多常数了,例如某视频评论区有人提到阿伏伽德罗常数 23333

如果让我来选的话我还真想不太出来,毕竟没学多少数学,顶多会选 $2^{32}$ 这种程序员知道的数字,或者已知最大的质数、孪生质数云云。这个题目真的是很有意思了,很多有特殊性质的数字或者是某数列的第一个数都会比较小,很少会有一个非常大并且独一无二的数字,因此看了 3Blue1Brown 的视频之后我顿时就来了兴趣,准备写下这篇博客介绍以下各博主选择的数字,又了解一些平常不知道的冷知识~哈哈。我大致将这些数字分了个类,不过不是很严格。

阅读全文 »

对于 ACGN 收藏来说,文件管理是一个基础任务,毕竟收藏的文件内容多种多样,例如光盘镜像、压制后的音频视频、小册子扫描、字幕甚至小游戏等。把文件按一定结构整理是必要的,我也专门为整理音乐写了一些小工具,不过整理文件的格式因人而异,也没有特别的难度,因此不需要特别描述我是怎么做的。我觉得值得一提的内容是如何对文件进行定期存档和备份,这也是我在硬盘被偷之后立马开始对收藏的文件进行的操作。备份有一个 3-2-1 的原则:3 份备份,2 份本地,1 份云端,下面会介绍一些本地的备份和云端备份的方法以及我的选择。

离线备份

离线备份就是把文件资料整理并存储到另一个设备上,需要考虑的功能有加密、压缩、增量更新、去重、冗余等。如果是最基本的备份,如果只想直接备份,不考虑加密压缩等的话,著名的 rsync 是个不错的选择,它可以同步两个目录(可以是挂载 FTP 的目录),并且有算法来进行去重以减少二进制的传输。

阅读全文 »

很久没写博客了,这次想总结一下自己在 ACGN 收藏这条道路上越走越远,到底都走了哪些弯路哈哈哈哈 (博客画风突变)。这一篇算是一个开篇稿吧,想写的内容有挺多的,一些比较短的内容会放在这一篇底下。

阅读全文 »