看到这,突然想起来刘刚揭露的中共特务王军涛、王丹、魏京生等人骗美国NED、中华民国军情局美钞和新台币的事了(http://jasmine-action.blogspot.com/2012/01/blog-post_15.html?m=1 、 http://jasmine-action.blogspot.com/2022/04/blog-post_8.html?m=1 、 http://jasmine-action.blogspot.com/2022/03/blog-post_48.html?m=1) 。北京特色资本主义骗国内人绝,骗国外人更绝,绝绝子!
-
【搬运】Rust | 批判性回顾
这篇文章中提到一个很重要的Rust特性,对敏感软件(比如翻墙软件)的作者或许有帮助:
Rust编译时会将源代码的完整路径打包进二进制文件(或许还有其它本机的上下文信息)。
建议敏感软件的作者要么在虚拟环境下编译,要么只发布源码,直接发布二进制文件可能会导致你的身份泄露。如果必须匿名传送二进制文件,建议设置
panic="abort",同时strip掉调试符号。 -
【搬运】Rust | 批判性回顾
原文:Rust: A Critical Retrospective:https://www.bunniestudios.com/blog/?p=6375
翻译:机器之心/张汉东:mp.weixin.qq.com/s/eb_U2rirLjCqCLH8qs8k5Q
译者注:说明:国内机器之心公众号对这篇文章进行了编译,发布了标题为《编写完10万行代码,我发了篇长文吐槽Rust》的一篇文章,我看了以后发现机器之心的这篇文章对原文原意的传达并不正确与完整,并且省略了很多对 Rust 开发者有帮助的关键细节,比如,作者如何防范 Rust 供应链攻击等,以及 Rust 超出作者预期的优点有哪些。所以特此全文翻译,供大家参考。当然,也要感谢机器之心对这篇文章的传播,让我有机会看到此文。
由于在大流行期间我有几年无法旅行,所以我决定利用我新获得的时间并真正专注于 Rust。在编写了超过 10万行 Rust 代码之后,我想我开始对这门语言有了一种感觉,并且像每一个脾气暴躁的工程师一样,我已经形成了我自己的观点,因为这是互联网,所以我要分享。
我学习 Rust 的原因是充实 Xobs 编写的 Xous[2] OS 的一部分。Xous 是一个用纯 Rust 编写的微内核消息传递操作系统。它的近亲可能是 QNX[3]。Xous[4] 是为轻量级(物联网/嵌入式规模)安全优先平台(如 Precursor[5] )编写的,支持 MMU 以实现硬件强制的页面级内存保护。
在过去的一年里,我们设法为操作系统增加了很多功能:网络(TCP/UDP/DNS)、中间件图形抽象(用于模版和多语言文本)、存储(以加密的、看似可否认的数据库的形式,称为PDDB[6])、可信启动,以及具有自配置和密封(sealing)属性的密钥管理库。
我们决定编写自己的操作系统而不是使用 SeL4、Tock、QNX 或 Linux 等现有实现的原因之一是我们想真正了解我们设备中的每一行代码在做什么。特别是对于 Linux,它的源代码库是如此庞大和动态,即使它是开源的,你也不可能审计内核中的每一行。代码更改的速度比任何人都可以审计的要快,除非是自己开发的。Xous的范围也很窄,只支持我们的平台,以尽可能地保持内核中不必要的复杂性。
范围狭窄意味着我们还可以充分利用CPU运行在FPGA中[7]的优势。因此,Xous的目标是一个不寻常的RV32-IMAC配置:一个有MMU+AES扩展的配置。毕竟是2022年,而且晶体管很便宜:为什么我们所有的微控制器都不像桌面上的同类产品那样具有页级存储器保护功能?作为一个FPGA,也意味着我们有能力在硬件层面修复API错误,使内核更加精简和简化。这在通过抽象破坏(abstraction-busting)过程的工作中尤其重要,比如从RAM中挂起和恢复。但这都是另一篇文章的内容:这篇文章是关于Rust本身,以及它如何作为Xous的系统编程语言。
Rust 的「卖点」
在我们启动Xous的时候,我们看了大量的系统编程语言,Rust脱颖而出。尽管它的 "no-std "支持在当时还不成熟,但它是一种强类型、内存安全的语言,拥有良好的工具和一个蓬勃发展的生态系统。我个人是强类型语言的超级粉丝,内存安全不仅对系统编程有好处,它还能让优化器更好地生成代码,此外它还能让并发性不那么可怕。实际上,我希望Precursor有一个CPU,它对标记指针和内存能力有硬件支持,类似于在CHERI[8]上所做的,但在与做CHERI的团队讨论后,显然他们非常专注于使C语言变得更好,没有带宽来支持Rust(尽管这可能正在改变[9])。从总体上看,C语言对CHERI的需求远远大于Rust对CHERI的需求,所以这是一个公平的资源优先排序。然而,我是一个安全方面的粉丝,所以我仍然希望有一天,硬件强制的胖指针会进入Rust。
虽然如此,我并不打算回到C语言阵营,只是为了踢一踢硬件改造的"轮胎",以弥补C语言的一个糟糕的方面。Rust 光鲜的手册还宣传它能够通过其严格的 「借用检查器」在错误发生之前就加以预防。此外,它的发布理念应该是为了避免我所说的 「Python的问题」:“如果你不主动跟上语言的最新版本,你的代码就会停止工作”。另外,与Python不同的是,Rust并非天生就不卫生,因为宣传的安装包的方式也不是错误的安装包的方式。与Python相反,在Python中,关于包的官方文档会引导你把它们添加到系统环境中,但却会被Python的“长老们”骂:“但你当然应该使用venv/virtualenv/conda/pipenv/...,大家都知道”。如果这个细节没有被归入官方教程的16章中的第12章[10],我对Python的体验会好得多。当有人取消发布一个流行的包时,Rust 也应该比 Node 更好地避免“哎呀,我删除了互联网”问题,至少如果你为你的包使用完全指定的语义版本。
从长远来看,Xous背后的哲学是,最终它应该 "变得足够好",到那时我们就应该停止对它的操纵。我相信,工程师的使命就是最终把自己的工作搞好:系统应该变得足够稳定和牢固,以至于它 "只是能用",没有任何注意事项。在这一点上,任何额外的工程都只会增加错误或臃肿。Rust的 "稳定就是永恒 "的理念,以及承诺永远不破坏向后兼容的理念,从让Xous变得如此完美,以至于不再需要我这个工程师的角度来看,是非常一致的,从而使我能够将更多的时间和精力用于支持用户和他们的应用程序。
Rust 欠打磨的地方
网上已经有很多写给 Rust 的「情书」了,所以,我打算先列举我遇到的一些 Rust 的缺陷。
语法中的噪音(Line Noise)
这是一个肤浅的抱怨,但我发现 Rust 的语法很密集、很沉重,而且难以阅读,就像试图阅读附带噪音的UART输出一样:
Trying::to_read::<&'a heavy>(syntax, |like| { this. can_be( maddening ) }).map(|_| ())?;用更通俗的话说。上面这句话的作用是在对象(实际上是结构体')Trying上调用一个名为to_read的方法,其类型注释为&heavy,生命周期为 'a,参数为 syntax,闭包的参数为like,在另一个名为 this 的结构体实例上调用can_be方法,参数为 maddening,任何非错误返回值都映射到Rust单元类型(),如果有错误,会被自动unwrap并返回给调用者。
深呼吸。当然,我有一些地方是错的,但你会明白这种语法有多密集。
在此基础上,你可以将宏和指令分层,而这些宏和指令不需要遵循Rust的其他语法规则。例如,如果你想条件编译代码,你可以使用一个指令,如:
#[cfg(all(not(baremetal), any(feature = “hazmat”, feature = “debug_print”)))]这就是说,如果启用了 hazmat 或 debug_print 特性(feature),而且你不是在裸机上运行,就使用下面的代码块(我肯定也弄错了)。对我来说,这个语法最令人困惑的部分是使用单一的=来表示等价而不是赋值,因为,配置指令中的东西不是Rust代码。它就像一种独立的元语言,有一个你可以查询的键值对的字典。
我甚至不打算讨论Rust宏的不可读性--即使我自己写了一些Rust宏,我也不得不承认,我觉得它们 "只是勉强能用",而且可能在它们的某个地方有“龙”(Bug)。这不是你在一门自称可靠的语言中应该有的感觉。是的,这是我的错,因为我不够聪明,无法解析语言的语法,但同时,我的生活中还有其他事情要做,比如构建硬件。
无论如何,这是一个肤浅的抱怨。随着时间的流逝,我最终克服了学习曲线并变得更加自在,但这是一条艰难而陡峭的曲线。这部分是因为所有的 Rust 文档要么是用eli5 风格[11]编写的(形容文档写的非常简陋),要么你会看到一个正式的语法定义[12](从技术上讲,定义一个“feature”在那里,但没有用简单的英语概括)。
要说明的是,我非常同情写好文档有多难,所以这不是在挖苦那些努力写出这么多优秀语言文档的人。我真的很欣赏文档生态系统的总体质量和丰富性。
Rust只是在语法方面有一个陡峭的学习曲线(至少对我来说)。
Rust 虽然强大,但并不简单
Rust 很强大。我很欣赏它的标准库,它包含了 HashMaps、Vecs 和 Threads 等数据结构,既“美味”又令人上瘾。一旦我们在 Xous 中获得了 std 支持,就再回不去了。来自 C 和汇编的背景,Rust 的标准库感觉丰富且有用。我读过一些负面评价,说它缺乏一些功能,但就我的目的而言,它确实达到了最佳状态。
话虽如此,我对 Rust std 库的依赖并没有在构建可审计的代码库方面带来任何好处。我以前对Linux的批评之一是:“天哪,内核的源代码包括红黑树的实现,怎么会有人来审计它呢”。
现在,在写过操作系统之后,我对这些丰富的动态数据结构的重要性有了深刻的理解。然而,Xous 没有在其存储库中包含 HashMap 的实现这一事实并不意味着我们比 Linux 更简单:事实上,我们只是把一大堆代码“隐藏”了起来。仅仅是标准库的 "collection "部分就代表了大约1万多行源代码,而且复杂度非常高。
因此,虽然 Rust 的 std 库允许 Xous 代码库专注于成为内核而不是其自己的标准库,但从构建最小攻击面、“完全由一个人可审计”代码库的角度来看,我认为我们对 Rust 的 std 库的依赖意味着我们在这个目标上失败了,尤其对于我们需要继续跟踪 Rust 的最新版本(我将在下一节中解释为什么我们必须这样做)来说。
理想情况下,在某些时候,事情会 "稳定下来",我们可以把Rust 仓库分叉,然后说 "这是我们的攻击面,我们不打算改变它"。即便如此,Rust std 存储库的大小仍使 Xous 存储库相形见绌,这还不包括编译器本身的复杂性。
Rust 还未完善
接下来的这一点与Rust还不适合做完全可审计的内核的原因相吻合:语言还未完善。例如,在我们编写Xous的时候,引入了常量泛型(const generic)。在这之前,Rust没有处理大于32个元素的数组(Array)的能力。这种限制有点让人抓狂,即使在今天也有一些缺点,比如Default trait 无法初始化大于32个元素的数组。这种阻碍导致我们把许多东西限制在32个元素:例如,当我们在进程之间传递 SSID 扫描的结果时,该结构只为最多 32 个结果保留空间,因为去更大、更多通用结构是不值得的。这是直接驱动面向用户的功能的语言级别限制。
另外,在编写Xous的过程中,像内联汇编(inline assembly)和工作空间(workspaces)这样的东西终于成熟了,这意味着我们需要回到过去,重新审视我们所做的一些“危险”的事情,使那些关键的几行用汇编编写的初始启动代码能够集成到我们的构建系统中。
我经常问自己“我们什么时候才能离开 Rust 发布火车(火车式发布)”,我认为的答案是他们最终让alloc稳定下来。目前,no-std target 无法访问堆,除非它们跳上“Nightly”列车,在这种情况下,你又回到了 Python 式的噩梦,你的代码经常因语言版本而中断。
我们绝对给了用no-std和 Stable Rust编写操作系统一个公正的机会。Xous第一年的开发都是用no-std完成的,在内存空间和复杂性方面付出了代价。我们有可能只用预先分配好的静态数据结构来编写操作系统,但我们必须在所有情况下满足最坏情况下的元素数量,这导致了臃肿。此外,我们还不得不推出很多自己的核心数据结构。
大约一年前,当Xobs将Rust的std库移植到Xous时,这一切都改变了。这意味着我们能够在稳定的Rust中访问堆,但这是有代价的:现在Xous被捆绑在一个特定的Rust版本上,因为每个版本的Rust都有自己独特的std打包版本。这个版本的绑定是有原因的:std是可以将内存分配和线程创建等基本 Unsafe 的硬件结构变成 Safe 的Rust结构的地方。(我最近还了解到一个有趣的事实。Rust对于大多数 target 没有本地分配器--它只是简单地使用libc的malloc()和free()函数!) 换句话说,Rust能够有力地保证稳定版本的“火车”不破坏旧的功能,部分原因是所有的松散部分都被扫进了std。
我必须不断提醒自己,拥有 std 并不能消除关键代码中严重安全漏洞的风险——它只是将许多关键代码移到了标准库中。是的,它是由一群比我聪明的天才程序员维护的,但归根结底,我们都只是人类,我们都是软件供应链攻击的公平目标。
Rust有一个发条式的发布时间表:每六周就会推送一个新版本。由于我们的 "std "分叉与特定的Rust版本相联系,这意味着每六周,Xobs都要承担更新我们的分叉并为其建立新的 "std "版本的艰巨任务(我们不是Rust的一级平台,这意味着我们必须维护自己的 "std "库)。这意味着我们同样迫使所有Xous开发者在他们的工具链上运行rustup update,这样我们才能保持与语言的兼容性。
这可能是不可持续的。最终,我们需要锁定代码库,但我没有一个明确的退出策略。也许我们可以考虑回到 "nostd "的下一个时间点,就是我们可以获得稳定的 "alloc "功能,这让我们可以再次访问堆。这样我们就可以把Xous从Rust发布的列车上解开,但我们仍然需要回填一些功能,如 Vec、HashMap、Thread和 Arc/Mutex/Rc/RefCell/Box结构,使 Xous 能够有效地进行编码。
不幸的是,alloc' crate 非常难,而且已经开发了很多年了。虽然如此,我真的很欣赏Rust在开发这一功能背后的透明度,以及为稳定这一功能所做的努力和思考。
译者注:这一点,也许学习一下 Android 和 Fuchsia 如何引入 Stable Rust 工具链会对他有所启发。当然,因为 Xous 是纯 Rust 实现,而 Android 和 Fuchsia 是部分模块或组件用 Rust,后者可能没有 Xous 的麻烦。
Rust 对供应链安全的观点有局限
我认为这一立场被rustup.rs安装页面推荐的安装方法很好地概括了: “嗨,在你机器上运行这个来自随机服务器的 shell 脚本。”
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh公平地说,你可以下载脚本并在运行前检查它,这比 Windows .MSI安装程序的vscode要好得多。然而,这种做法充斥着整个构建生态系统:每当你从crates.io Pull 一个新的crate时,一个名为build.rs的桩代码就有可能被编译和执行。这一点,加上 "宽松 "的版本定位(你可以指定一个版本,例如,简单的 "2",这意味着你将抓取任何最新发布的版本,主要版本为2),使我对通过crates.io生态系统发起软件供应链攻击的可能性感到不安。
Crates.io还受到一种错别字的影响,很难确定哪些是 "好 "的,哪些是 "坏 "的;一些名字和你想要的一模一样的 crate,结果只是旧的或被放弃的早期尝试,给你提供了你想要的功能,而更受欢迎的、积极维护的 crate 不得不采取不太直观的名字,有时与其他 crate 只有一两个字符的差别(公平地说,这不是Rust的包管理系统特有的问题)。
还有一个事实是,依赖关系是链式的--当你从crates.io Pull 一个东西的时候,你也 Pull 了该crate的所有附属依赖关系,以及所有最终会在你的机器上运行的build.rs脚本。因此,仅仅审核Cargo.toml文件中明确指定的crate是不够的,你还必须审核所有依赖的crate,以防止潜在的供应链攻击(upply chain attacks)。
幸运的是,Rust允许你使用 Cargo.lock 文件将 crate 固定在一个特定的版本上,你可以完全指定一个依赖 crate ,直到次要版本。在Xous中,我们试图通过发布Cargo.lock文件和指定所有第一阶的依赖 crate 到次要版本的政策来缓解这一问题。我们还对某些 crate 做了本地备份(vendored)和 forked,否则会使我们的依赖树增长而没有什么好处。
这就是说,我们的大部分调试和测试框架都依赖于一些相当花哨和复杂的 crate,这些crate Pull 了大量的依赖关系,而令我懊恼的是,即使我试图为我们的目标硬件运行一个构建,用于在主机上运行模拟的依赖 crate 仍然被 Pull 了下来,build.rs脚本即使没有运行,至少也被构建了。
针对这种情况,我写了一个叫
crate-scraper[13]的小工具,它可以下载Cargo.toml文件中指定的每一个源码包,并将它们存储在本地,这样我们就可以有一个用于构建Xous版本的代码快照。它还可以进行快速的 "分析",即搜索名为build.rs的文件,并将它们整理成一个文件,这样我就可以更快速地通过grep来寻找明显的问题。当然,人工审查并不是检测嵌入build.rs文件中的巧妙伪装的恶意软件的实用方法,但它至少让我了解我们正在处理的攻击面的规模: 它是令人惊叹的[14],大约有5700行来自不同第三方的代码,它们操纵文件、目录和环境变量,并且在我每次进行构建时在我的机器上运行其他程序。我不确定这个问题是否有好的解决方案,但是,如果你是超级偏执狂,而且你的目标是能够构建可信赖的固件,那么就要警惕Rust的广泛的软件供应链攻击面。
你无法重现(reproduce)别人的 Rust 构建
我对Rust的最后一个问题是,在不同的计算机之间,构建是不可重现的(如果我们禁用我在Xous中为$reasons而嵌入的时间戳,它们至少在同一台机器上的构建之间是可重现的)。
我认为这主要是因为Rust将源代码的完整路径作为二进制文件中的恐慌(panic)和调试(debug)字符串的一部分拉进来。这导致了一些不舒服的情况,我们在 Windows 上构建了工作,但在 Linux 下失败了,因为我们的路径名在两者上的长度非常不同,这会导致一些内存对象在目标内存中移动。公平地说,这些失败都是由于我们在 Xous 中存在的错误,这些错误已经得到修复。但是,知道我们最终会有用户向我们报告我们无法重现的错误,这感觉并不好,因为他们在构建系统上的路径与我们的不同。对于想要通过构建自己的版本并将哈希值与我们的哈希值进行比较来审核我们发布的用户来说,这也是一个问题。
在Rust的维护者那里有一些bug,以解决可重复构建的问题,但由于他们必须处理语言中的许多问题,我对这个问题能否很快得到解决并不感到乐观。假设导致不可重现性的唯一原因是二进制文件中包含了操作系统的路径,那么解决这个问题的一个办法就是重新配置我们的构建系统,使其在某种chroot环境或虚拟机中运行,以一种几乎任何人都能重现的方式修复路径。我说 "几乎任何人 "是因为这个修复方法将取决于操作系统,所以我们将能够在例如Linux下获得可重复的构建,但它不能帮助Windows用户,因为chroot环境不是一个东西。
Rust 超乎预期的地方
尽管这里列出了所有的抱怨,但我认为如果我必须重新做一遍,Rust 仍然是我用于 Xous 的有力竞争语言。我做过 C、Python 和 Java 的大型项目,所有这些项目最终都背负着“不断增加的技术债务”(可能有一个软件工程师的术语来描述这种情况,我只是不知道)。问题往往是从一些数据结构开始的,我在第一遍的时候不能完全弄好,因为我还不知道这个系统是如何组成的;所以为了弄清楚这个系统是如何组成的,我就用一个半生不熟的数据结构拼凑出一些代码。
于是就开始陷入混乱:一旦我对事情的运作有了一个概念,我就回去修改数据结构,但现在在其他地方出现了一些未曾预料到的、微妙的破坏。也许这是一个逐个击破的问题,或者一个符号的极性似乎被颠倒了。也许这是个轻微的竞态条件,很难说清楚。没关系,我可以通过把<=改成<,或者修改符号,或者增加一个锁来解决这个问题。我仍然在充实这个系统,对整个结构有一个概念。最终,这些小的 hack 代码(意指非正规写法,只图完成功能)往往会转移到每一个依赖的模块中,因为事情的全部原因是由于 "作弊 "而产生的;当我回去切除这些 hack 代码时,我最终得出结论,它不值得努力,所以下一个最好的选择是把整个事情烧掉重写...但不幸的是,我们已经落后于计划和预算,所以重写从未发生,而hack代码继续生存。
Rust是一种很难编写代码的语言,因为它使这些 "作弊 "变得很难:只要你有纪律,不使用 Unsafe 的结构来使作弊变得容易。然而,真正的困难并不意味着不可能--在构建Xous的过程中,肯定有一些作弊行为被掩盖了起来。
这就是 Rust 真正超出我预期的地方。该语言的结构和工具非常擅长追捕这些作弊并对重构代码库有帮助,从而能达到“治愈癌症而不杀死患者”的效果,可以这么说。这就是 Rust 非常严格的类型和借用检查器将生产力负债转换为生产力资产的点。
我把它比作在穿过建筑物的复杂电缆束中更换电缆。在 Rust 中,可以保证电缆槽中的每一根线,无论线束变得多么复杂和糟糕,都是可分离的,并且两端都有清晰的标签。因此,您始终可以“拉到一端”并通过更改结构中元素的类型或方法的返回类型来查看另一端在哪里。在较不严格类型的语言中,您不会获得此属性;电缆可以在电缆槽内的某处合并并相互影响,因此在进行更改后,您只能通过手动测试“嗡嗡作响”每条电缆。即使这样,您也永远无法确定当有人打开浴室灯时,您更换的东西是否会导致咖啡机关闭。
这里有一个能说明Rust的重构能力在Xous中的作用的示例。在我们的图形子系统(我称之为GAM(Graphical Abstraction Manager[15]))中,处理信任级别的方式有一个问题。系统中的每个Canvas都有一个u8'分配给它,这是一个信任等级。当我开始写GAM时,我只知道我想要一些关于Canvas的可信任度的概念,所以我添加了这个变量,但并不确定它到底会被如何使用。几个月后,系统增加了带布局的上下文概念,布局是定义特定类型互动的多画布结构。现在,你可以有多个信任等级与一个上下文相关联,但我已经忘记了我之前放在Canvas结构中的信任变量--并且在上下文结构中也添加了另一个信任等级数字。你可以看到这是怎么回事:只要我有简单的测试案例,一切都能正常工作,但当我们开始在应用程序上弹出窗口,然后在窗口之上的菜单等等,疯狂的行为开始显现,因为我已经混淆了信任值的存储位置。有时我在更新Context中的值,有时我在更新Canvas中的值。它有时会表现为一个逐个击破的错误,有时则表现为一个并发错误。
这一直是困扰我的一件难以描述的事,而GAM已经成长为一个有许多移动部件的5千行的畸形代码。最后,我决定必须对此做些什么,但我真的不希望这样做。我认为我搞砸了什么,这次调查将以重写整个模块而告终。
幸运的是,Rust给我留下了一根小小的绳子。Clippy,也就是Rust中的 "linter",在我认为应该使用信任度变量的地方发出了一个警告--我在Context中存储了它,但之后没有人提到它。这很奇怪--它应该在每次重绘上下文时都是必要的!因此,我开始删除变量。所以,我开始删除这个变量,看看有什么问题。这很快让我想起,当画布被创建时,我也在画布内存储了信任度,这就是为什么我有这个悬空的引用。一旦我有了这个线索,我就能够重构信任的计算,只参考那个基础真理的来源。这也让我发现了其他一直潜伏着的错误,因为事实上我从来没有行使过一些我认为是常规使用的代码路径。经过几个小时的探究,我对这一切是如何运作的有了清晰的认识,我用简单易懂的API重构了信任计算系统,而不必折腾整个代码库。
这只是我在维护Xous代码库时使用Rust的许多积极经验之一。这是我第一次抬头挺胸,以积极的态度走进一个大版本,因为这是第一次,我觉得也许我有机会能够以诚实的方式处理困难的bug。我花在脑子里找借口的时间越来越少,以证明为什么事情是这样做的,为什么我们不能接受那个 Pull Request,而花更多的时间思考所有的事情可以变得更好,因为我知道Clippy在支持我。
对看此篇文章的 Rust 开发者的告诫
无论如何,对于一个硬件人(指作者本人)来说,这是很多关于软件的吐槽。很快就会有软件开发者提醒我,首先,我做的是电路和铝壳,而不是写代码的,所以我没有资格抱怨软件。他们是对的。我实际上没有接受过“以正确的方式”编写代码的“正式”培训。当我在大学时,我学习了麦克斯韦方程,而不是算法。我永远不可能成为一名专业的程序员,因为我连最简单的编码面试都过不了。不要让我写链表:我已经知道我不知道如何正确地去做;你不需要向我证明这一点。这是因为每当我发现自己在写一个链表(或任何其他基础数据结构)时,我都会立即停下来,质疑所有让我走到那一步的人生选择:这不是库的用途吗?难道我真的需要重新发明轮子吗?如果在编码面试中表现出色与实际编码能力之间存在任何关联,那么您绝对应该对我的意见持保留态度。
尽管如此,在花了几年时间使用Rust并阅读了无数关于该语言的文章之后,我觉得也许发表一篇关于该语言的批判性观点的文章会让人耳目一新。
参考资料
[1] Rust: A Critical Retrospective:https://www.bunniestudios.com/blog/?p=6375: https://www.bunniestudios.com/blog/?p=6375
[2] Xous: https://betrusted.io/xous-book/
[3] QNX: https://en.wikipedia.org/wiki/QNX
[4] Xous: https://github.com/betrusted-io/betrusted-wiki/wiki
[5] Precursor: https://precursor.dev/
[6] 称为PDDB: https://www.bunniestudios.com/blog/?p=6307
[7] CPU运行在FPGA中: https://github.com/betrusted-io/betrusted-soc
[8] CHERI: https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/
[9] 正在改变: https://gankra.github.io/blah/fix-rust-pointers/
[10] 第12章: https://docs.python.org/3/tutorial/venv.html
[11] eli5 风格: https://doc.rust-lang.org/rust-by-example/attribute/cfg.html
[12] 正式的语法定义: https://doc.rust-lang.org/reference/conditional-compilation.html
[13] crate-scraper: https://github.com/betrusted-io/crate-scraper
[14] 令人惊叹的: https://github.com/betrusted-io/crate-scraper/blob/main/builds.rs
[15] Graphical Abstraction Manager: https://github.com/betrusted-io/xous-core/tree/main/services/gam
-
转载:人中讲道(二十)【署名李洪志】---江泽民如何控制法轮功
http://qingqing.freebbs.tw/viewthread.php?tid=270&extra=page%3D1
人中讲道(二十)
日子过得很快啊,转眼又是720了。我们修炼中的人啊!从没想过要去争夺甚么政权,根本就不参与政治,我们要的是甚么?对于不同层次中的修炼人来说,认识都不同。不管如何,我们不参与政治不是说着玩的,而是一个修炼者本身自然而然的境界。许多人问我,为甚么当年有720事件,我一直不想讲。今天呢,我就说透点。因为啊,大法的传出不是偶然的,每一件事都牵扯着很深的因素。720你们看是中共迫害大法的起点,其实这里牵扯了中共内部很肮脏的政治斗争。当年啊,满北京都知道有个李大师,许多人哪他不是抱着学法的心态进来的,他是觉得,喔,这个对国家不错,这个对党如何如何,普遍的他们抱着这样一个认识。大家知道,北京那是甚么地方,我当年刚去的时候是睡在车站的板凳上,就这么挨着度过一夜。北京啊,那可是旧势力的中心,当年毛主席还说,他只是改变了北京的一些地方而已。大概是这么个意思吧,谁只要掌握了北京城,谁就立于不败之地。那么,北京城里卧虎藏龙,各种功派都有,有些很正,层次很高的法门,单传的、独传的都来在北京,多得你简直数不过来。因为啊,他们都知道宇宙将发生甚么事,也都知道宇宙中不管是甚么法,得要在地球上被承认,在地球上形成一个相应的场才能保证他的未来。那么,高功师父们都知道,神州这块是神选之地,不管如何,得在这儿被承认,哪怕只有一个人进门,那也算是得传人了。因为中国那个地方来的人特殊,都是承传一法门而来的。中共不管你们怎么认识,他也是极力的促成正法的安排。你们年纪大些的人啊,都经过很深刻的生活经验啊,斗争来斗争去的,这是他在清场,把中国人的思想彻底的改造。
那么,所有正的功派都有这么一个想法,就是在中国传开来,让更多人认识他。不过,我不想这样做,因为我认为不需要,我自己自有一套安排。可是呢,师父们都叫我出来,虽然我不想出来,最后我还是被动的被出来,因为甚么原因,我想你们看我人中讲道的应该都清楚了。我要不出来,那众生就结错缘了。不管如何吧,我是出来了。我不出来还好,一出来呢,那些正的功派都知道我来了,他们自己就退下去了,不干扰。这样的呢,他们都得到一个很高的位置。但是也有差劲的,要和我斗法啊,这个那个的,我一概不理会他,我只做我的事。真的闹得不象话的我就清理它。那么,中共啊,大家都知道中共是一条赤龙,那是低层的认识,更高的没人讲,将来有机会再说。不管如何,这个时期的中共是统治着所有中国人,那么,他对大法的态度就至关重要。所以呢,一开始我并不反对中共党员进来学,我给世人的条件是谁都可以来学。可是,学来学去的,慢慢的他们知道大法是怎么回事了。啊,这大法这么好,这可了不得了。所有当时的那几个手握大权的都知道大法,都看了书了。我正式出来传功传法是92年,那年的春天邓小平南巡。为甚么,因为他那时候已经知道我了,他人老了,可是心可不胡涂,他知道他等着的就是我。那时候他已经把棒子交给江某人,可是~~中共内部的斗争我们不多说他,就是江泽民知道老爷子支持我,他很快的改变了态度。(停顿)所以呢,我出生在中国谁也不知道我是谁。当年流传这么一件事,毛主席过世那天啊,我在部队工作,我手上的枪忽然响了。我可以告诉大家,这是旧势力让我起来的一个讯号。可是,我当时知道不能出来,这事一直僵持着哪!一直到92年邓小平南巡后,我知道不能不出来了。
我那时要中国富强起来,所有神都觉得很有希望啊,他们都促成此事。可是呢,江泽民也知道要拉拢我,可是他的根本目的是要利用我的,我也不是不知道。我一直给他机会,如果他能够正确对待我与大法,那么大法在中国将开创出多大的局面,谁当政谁得利。我想,如果他的选择正确,那真是众生之福。当然他不可能,他只是被旧势力选来的一个角色。当他决定迫害大法时,其实是出于政治算计的,他没想到这给中国百姓制造多大的危难?当时有许多神立刻就要兑现誓约,毁掉中国半壁江山的。为甚么?因为中国的领导定了调了。当时啊,中共内部的意见不一,江某人虽然迫害大法,可是党内一直是不认同的。因为他们知道我的本事。我在转法轮里不是说过,他们要测我的功,结果仪器指针破表了。就是他们没那样的仪器,当时我告诉他们地球将发生的事,于是他们让我给想办法。这都是中国的机密啊。(笑)总之呢,还有一些个老捣蛋,加上人的斗争心吧,这事情后来就变质了。我要管还能管,但是得要人心变好啊。我不说过那个烂苹果的比喻吗?要延迟地球的大爆炸得从改变人心着眼,这样才行。可是,我要讲法啊,他们又怕我这样讲下去会形成太大的势力。我去哪讲法,那学员真是多得,那场面让江某人恨在心里。索性我后来就停止讲法,只传法不传功。不然哪,早期我传功时,真是来一个开一个,直接往上拿的。后来就是这些个因素,我也想改变一下方式。
那么,江某人一开始派进来很多特务渗进来,尽是往我身边挤,冒充是我的弟子,正正反反,有的公开和我讲的法形成抵触,搞得乌烟瘴气。这些我都知道,甚至他们迫害我,我也都承受过来了。唯有一点,不管他们如何邪恶,我要做的事自始自终没有动摇。无论特务披着甚么人皮,装作是我们的弟子说甚么,真正修炼者是不被带动的。整个720以来的迫害都是因为政治需要的编排出来的戏,反迫害中他的派进来的特务还在起主导作用。甚至他布下了全世界那样大的场与我进行斗争,我也从不当他是一回事。他用尽方法引诱我的弟子上当,目的是要羞辱我,打击我。那么多人哪,都上天安门去,你是亲耳听见师父告诉你去被抓吗?为甚么不理智的想一想?为甚么不能分辨是非,人家说甚么你就信了。那个姓唐的特务啊,它就是把师父贬低成一个卑劣的人,我啊,连中共都不放在眼里,真正安排中共的生命我也不当回事,哪还需要一个中共特务去救我!它完全是在愚弄你们,从而破坏你们对师父的正信,让你们在冲动和盲从中毁掉你们。你们学法学哪去了?其实都是被钻了空子了。
我想,今天说这些真是感慨万千。部分学员迷在其中,只有一种人他动不了你,就是你心不动的人,你不为人间各种伪善所骗所诱。要是做不到这一点,你就不看不听,不要同他争辩,不要落入他的圈套。他说甚么你都不看他的,就好好做你该做的事,不就过去了吗?我当年的一些选择如今已不能重来,发生的都发生了,希望今后啊,我们真正的修炼人要清醒。正法中许多事不尽如人意,因为方方面面的因素,人的这个空间不能被破坏。你们要保护好自己,师父的希望寄托在你们身上,你们是未来众生的希望。为师的心愿是让你们完成你们的史前洪愿,你们知道大法在人间遭受的是甚么,其中师父承担的是甚么。如果你们依旧走不出来,仍然迷失在特务的诱骗中,那也就是你生命中永远无法弥补的损失。希望720这个日子带给你们的是深刻的教训,不要再犯同样的错!
不來 2010年7月20日星期二12:57am
-
如果各位无法接受@但使龙城飞将在,最好不要对民主中国抱有幻想
@wyf1230180 #189040 远古善良算什么自由主义?有鼓吹996的自由主义?
-
近期被封控所发现的小细节。
以前我小学一栋房子(瓦房)被党员承包了,造价大概15万左右,贪污了一半,房子刚建就摇摇欲坠了
-
近期被封控所发现的小细节。
一个大型小区大约几万人,刚开始有文件说是配送三餐,但实际上只送了一天半物质。其他的叫居民自己去美团和外卖。
那么如果政府实际上有拨下来这个保证三餐的款,算1万人以上,每天大概按40万元采购。
居委物业进账 = (封锁天数 - 1。5) * 40万。
-
我同学是粉蛆该怎么办???
这是侮辱,会让粉蛆认为你是没有修养的人,对你的印象就越坏,越不容易让粉蛆变得正对事实,粉蛆越不容易被改变。
还不如孙先树的好,孙先树的建议某些虽然不太切合实际、难以实施。但是他的观点还是好的.
如:建议你以德服人
对于粉蛆,重要的是建立威信,而不是先建立友谊。先建立友谊,他就会要吃你。先建立威信,再建立> 友谊,他就会向屈服于共产党一样服你尊重你。 -
VSCode写Markdown“指北”
Why
- VSCode是一个代码编辑器啊,语法高亮是它的
本性一大优势啊!!!! - 在VSCode中,删除线、粗体、斜体等效果都可以预览。
比在2047写几段代码就要按预览的新手(我)来说太方便有没有啊 - Ctrl+\拆分窗格,Ctrl+Shift+V开启预览,直线起飞。
- 其实私是一个
完美控(强迫症),看着小方框打字实在是倍感头疼。
前提
你得有VSCode(其实有更好的,但此处只介绍VSCode,因为我只有VSCode)🤣🤣🤣,如果你没有VSCode,请移步官方VSCode下载页面下载安装。
接下来
打开VSCode(废话)点击“文件”菜单,找到“新建文本文件”或“新建文件…”后在弹出的命令面板中点击“文本文件”(其实熟悉VSCode都不屑于本冰箱的方法,直接Ctrl+Shift+P,然后键入“新建文件”,回车再回车,轻松……完成)。
点击“选择语言”,在新弹出的命令面板中键入“Markdown”,再回车。直接写吧,VSCode会自动识别Markdown语法。
本图其实是假的。
- Ctrl+\拆分窗格,Ctrl+Shift+V开启预览,直线起飞。享受Markdown给阁下带来的乐趣(不便)吧。

PS
- 图片均为原创,至于为什么有的图片很奇葩,敬请各位阁下展开充足想象(其实有的想都想不到)。
- 为什么2047的删除线那么奇怪呢,中间不划偏偏划上面。

- 希望对大家有所助益,也希望大家能为我、甚至2047的members介绍更好的Markdown编辑工具。
- VSCode是一个代码编辑器啊,语法高亮是它的
-
如何计算清零政策造成的损失?
板上有分享過類似的文:【转载】新冠肺炎的经济学分析:病死率的因果识别与防控的机会成本
阿不過超連結點進去是我的回覆,往上划會看到原貼文
-
讯问一个关于台湾历史的开脑洞问题
@linda #189043 看不懂你的脑回路哪里,野人女真那块烂地在谁手里对主体汉地没有丝毫影响,没了澎湖那台湾本岛上的人可就生不如死了
-
如何计算清零政策造成的损失?
异见人士普遍认为反对清零政策(Zero-COVID,or FITTS),但是我认为对于此政策不能只停留于定性的角度,毕竟想要反驳真理部对于此过饱和的宣传,需要拿出条理更清晰且更为系统的反驳。
我目前看到唯一的相关文章说携程梁建章4月发的公众号文章(已和谐,CDT存档https://chinadigitaltimes.net/chinese/679342.html)简要的说,生物学上有一个叫做“预期寿命”的概念(字面含义),而预期寿命与人均GDP呈正相关。通过测算人均GDP的降低和少感染新冠造成的寿命提高,计算出预期寿命的降低。
几个问题:
1:上文提到的正相关是由“人均GDP很难快速提升”的情况下,而这个清零政策导致的人均GDP下跌可以说是作死,所以不一定适用
2:人均GDP的原本预期不一定可靠
3:只统计了生命的损失
说回正题,这个统计之所以难是因为包含很多方面,我抛砖引玉一下
1:生命,如上文所示
2:经济。这个角度也很大,因为实际上还包含人口流动(尤其高精尖人口)、政府公信力等等
3:政治。
4:形象。包括封控区在当地人民心中的形象,在外地人民心中的形象,在外国人民心中的形象,中国在本国人,外国人心中的形象
5:科技。高精尖人口移民(贾扬青,etc.)这个政策本身的反科学性对于科研人员心理的影响
咱们论坛是否有人能够提供科学估量损失的方法思路,或已有研究?
-
讨论一个移民造假被驱逐出境的问题
张三变成无国籍,美国试图把张三遣返回中国,中国政府拒绝,张三继续在美国坐牢,直到
-
美国特赦张三,张三变成无国籍的protected person生活在美国
-
中国政府接纳张三,张三被遣返回中国
-
第三国愿意接纳张三(通常是美国给第三国钱),张三被遣返到第三国。
-
-
讨论一个移民造假被驱逐出境的问题
假设张三靠弄虚作假的方式获得美国国籍,后来美国政府发现他的造假行为,那张三会被驱逐出境吗?
张三加入美国国籍后,他就丧失中国国籍了。所以美国政府如果想驱逐他,这要把他赶到哪里去呢?难道扔进太平洋喂鲨鱼吗?
-
讯问一个关于台湾历史的开脑洞问题
不用管是否“自古以来就统治台湾”,即使没有统治过台湾,只要带着十几万军队去台湾,也能消灭当地的原住民占领全岛的。
-
讯问一个关于台湾历史的开脑洞问题
@阿里萨斯 #189039 但是通过澎湖碰瓷台湾其实理论上也是很勉强的,否则中国现在就可以主张外满洲了,毕竟传统上河流并非分界线嘛。满洲渔猎民族哪个不跨河居住的。
-
讯问一个关于台湾历史的开脑洞问题
琼州海峡太窄了,守不住的。
-
退葱转战2049
我也是90后男工人,反贼版理中客
-
如果各位无法接受@但使龙城飞将在,最好不要对民主中国抱有幻想
依我多年对舆论长时间分析看,若习近平现在脑袋发热搞多党民选的话,大概率黄汉党和毛派党能成为两大党(现在的黄汉也不全是无脑挺共的,也有像知乎汉之声远古善良等接受西方保守思想主张新自由主义的),经济好时黄汉赢面大些,经济差时毛派赢面大些。现在的自由派大概能拿下京沪等大城市,但在全国的议会中会边缘化。
-
讯问一个关于台湾历史的开脑洞问题
@linda #189036 统派最低只需证明澎湖属县的自古以来就够了,台澎是真正的命运共同体,虽然弃金马论在独派内部甚嚣尘上,但没有一个独派敢公开宣称割离台湾和澎湖,一是法理上其所倚赖于的“旧金山和约”和“台湾关系法”中已经将台澎地位一体化,第二在现实中如果澎湖丢了本岛肯定也守不住,因为丢了澎湖就等于丧失台湾海峡的制海权
-
在中国实现民主的道路上,中国军队(解放军)应该如何去政治化或者国家化?
你的观点太极端了,为什么?
-
如何看待“ 以事实为根据,以法律为准绳”这句话?
上联:没有道德。
-
讯问一个关于台湾历史的开脑洞问题
http://chinatide.net/?p=611
这里有个统派的好帖子,分析汉族人早期移民台澎的行为。注意,汉人移居台澎问题不是纯历史问题,而是统独之争的历史借口。统派一律强调汉人与台湾的联系尽可能早,甚至早到孙权派卫温诸葛直出海发现“夷洲”。夷洲是不是台湾,其实无从考证。独派一律强调汉人与台湾的联系尽可能的晚,甚至连郑芝龙移福建人去台湾都要否定,要说台湾第一个非本土政权是荷兰殖民政府(这个没错),但是荷兰殖民台湾本身也促进了汉人殖民台湾岛。
我总结下吧
-
南宋时期福建沿海居民就开始移居澎湖。两派无异议。
-
第一次有組織的向台灣大規模移民是在漢人鄭芝龍的推動下進行的。这点虽然不符合台独史观,但是也同样削弱了汉人与台湾的联系强度,把汉人殖民台湾从南宋(澎湖殖民)推迟到了明末,整整推迟了400年。
-
说宋元时期有大量(数万)汉人移居台湾,其实是缺乏证据的,作者拿族谱举例,却忘了一个很重要的问题,族谱的记载哪有墓葬准确,他们所记载的先祖葬在大陆,后代移居台湾,把先祖名字写在族谱上,先祖仍然没有入台。
-
航海技术的改进是很重要的。葡萄牙人初次发现台湾(欧洲人首次发现),到荷兰人殖民台湾,过去了70年。明初的汉人对澎湖到台湾的险恶海况望洋兴叹,而明末的汉人可以在郑芝龙的领导下垦殖台湾。这是科技的力量。
5.总结,台独人士始终解决不了自己是汉族人,是台湾的殖民者这一基本问题;因此在解殖,去中等问题上往往陷入自相矛盾的境地,又要拒绝被大陆汉族王朝所吞并,又要抢占台湾原住民的土地建立自己的国家。这点还不同于美国立国,英国在美国独立战争和1812年战争之后彻底放弃对美国的征服,因此美国人不用操心抗英拒统这个政治需求,同时与印第安和大英对抗的成本是极高的,美国人幸运的对两者都取得了成功,但是台独人士则无力单独拒统,而且民进党人还要表达自己对台湾原住民的尊重以提升台独合法性。而统派人士则经常利用典籍中的零散记载,比如孙权发现夷洲,南宋福建渔民在澎湖避台风,明初的时候有汉人居住在台湾,有荷兰殖民当局为证,说台湾自古属于中国。统派强调台湾自古是中国一部分,却没法解释台湾第一个外来政权是荷属东印度公司。
-
-
大家覺得不錯的歐美電視劇
德剧:我们的父辈
-
讯问一个关于台湾历史的开脑洞问题
@linda #189032 《汉族人民早期移居台澎探析》●林仁川 摘要 :汉族人民移居台湾始于宋元时期 。移民的原因首先是宋元时漳泉人口增长较快 ,不得不迁居台澎 。其次 ,宋末元初战乱也迫使一部分南宋遗民遁逃台澎 。第三 ,宋元航海业的发达提供交通条件 。汉族移民到台湾后主要从事种植业和渔业 ,同时也进行海上贸易等商业活动 。
-
粉红时的我比现在快乐得多
得利右倾,失利左倾,正常
-
讯问一个关于台湾历史的开脑洞问题
大概宋明时期福建一带的人地矛盾才比较突出,此时才有成规模的福建汉人渡海垦殖。
宋明时期就开始成规模渡海垦殖台湾了?麻烦给个出处
-
讯问一个关于台湾历史的开脑洞问题
@dellalove #189020 乌克兰成为帝俄的一部分不也是17世纪嘛
-
比特币就是时钟
绝世好文
-
中文维基百科古罗斯历史系列条目被指造假 在站内站外引发轩然大波
更离谱的是:这家伙的伪史还给人翻译成俄语、乌克兰语、英语、阿拉伯语、罗马尼亚语(。。。),放入这些语言的维基百科里头了,然后好几年的时间里维基百科就像瞎子一样没看见。。。
-
大家覺得不錯的歐美電視劇
@skflew #188990 哈哈哈大卫林奇更慢(艺术家就是任性
黑道家族只看了第一季,感觉豆瓣评论“披着黑道片的皮,讲的是中年危机”很贴切,好不容易第一季母子、叔侄悲剧结束,第二季又来了姐姐。我都替编剧心疼Tony Soprano
我不懂心理学,但可以看出来这部剧心理学知识背景很充足,适合心理学专业的同学看
-
🍵茶餐廳🍵
忙了好几个月工作,终于捞得一时清闲~忙也不能完全忘了看书,当然更不能忘的是打游戏。除了把人的行动读完外,还看了一本中国辩护律师写的《无罪辩护》。中国受苦的律师远不止709律师们,真不知道这本书当年怎么能出版的。
-
中文维基百科古罗斯历史系列条目被指造假 在站内站外引发轩然大波
但是大部分的信息,其实真假也无所谓嘛,你又不从事相关工作
其实还是有所谓的
-
粉红时的我比现在快乐得多
那楼主应该是因为武汉肺炎的原因才变成这样的吧
-
中文维基百科古罗斯历史系列条目被指造假 在站内站外引发轩然大波
@zjubachelor #189008 造假的成本的确低,但现在能造出让人相信的成本却很高。核实成本相对高,但却可以打碎一大堆成本低的谣言。
-
讯问一个关于台湾历史的开脑洞问题
突然发现 台湾成为中国领土一部分的时间其实比乌克兰成为俄罗斯一部分的时间还要晚
-
讯问一个关于台湾历史的开脑洞问题
这其实是个历史地理学的问题,尽管你在地图上看台湾离大陆最近不过一百公里,甚至在福建的某些地方天气好时可以远眺到台湾岛上的山脉,似乎给人一种古代汉人较容易开发和占领台湾的错觉
但实际上,因为台湾海峡多盛行“西南-东北”季风,导致古代大陆东南沿海的帆船前往台湾的航线会与盛行季风形成直角,很难航渡过去,反而更容易漂到琉球、吕宋甚至日本,这就是为什么古中国与琉球的联系都远比台湾紧密,为什么与大陆距离更远的琉球都能有华夏化文明而台湾则迟迟无法出现文明,最根本的原因大概如此。
另外澎湖与台湾本岛之间的水道海底的地形更为复杂,海流更加凶险,号为“黑水沟”,船只更难航渡,这也可以解释为什么澎湖在南宋时就有汉人置官,而开发台湾则要迟至明末,汉人开发台湾本岛的时间会比澎湖还要晚几百年的原因
还有就是台湾在古代农业社会的价值很低,但胜在全球化大航海之后的商路和航道价值
南方汉人在中古时期缺乏开发台湾的动力,因为内地大量土地都未开发利用完成,等到大概宋明时期福建一带的人地矛盾才比较突出,此时才有成规模的福建汉人渡海垦殖。
蒋介石不说了,就说郑成功,明郑集团的前身是被明朝招安的海盗,其主要军事能力的来源就是东西方贸易的庞大利润,须知郑成功之前仅据有金厦二岛就能养活数十万大军与清廷对抗十余年甚至还能反攻南京,仅凭商贸就能收到每年数十万两的军饷供应,这在大航海之前是不可想象的
郑成功驱逐荷兰收复台湾的主要目的也是想独占整个中西商路的利润,只不过南京之役的失败也暴露了郑氏的军事实力,清廷马上决定通过迁界禁海消灭大陆的全部海洋贸易以扼杀明郑财源,这导致郑氏虽然占领了台湾但却无法再获取贸易利润,只能被迫转型为军垦屯田型政权,最后结局自然是归于失败
-
【疯狂宇宙报】2022/6/25:美国高院推翻保护堕胎权案例/纽时调查:中国走向监控国家“四部走”
美国高院推翻保护堕胎权案例
美国之音:《美最高法院推翻保护堕胎权判例,拜登称这是悲哀一天,共和党领袖欢呼历史性胜利》
在白宫,拜登总统对这项裁决予以谴责,但是恳请抗议者保持和平。
参议院少数党领袖、肯塔基州共和党人麦康奈尔 (Mitch McConnell) 称赞这项裁决是“勇敢和正确的”,“是对宪法和我们社会中最弱势者的历史性的胜利。”
参议院多数党领袖、纽约民主党人舒默 (Chuck Schumer) 在一份声明中说:“今天是我们国家有史以来最黑暗的日子之一。数以百万计的美国妇女的权利被五名非民选的大法官剥夺了。”
决议流出时相关讨论:/t/18380
纽时调查:中国走向监控国家“四部走”
youtu.be/Oo_FM3mjBCY《纽约时报》在6月21日发布了一份调查报告,该报告得出结论 “中国正在以前所未有的规模收集数量惊人的公民个人数据”,并 “揭示了中国如何意图使用科技确保其威权统治的长久”。
该报告的记者团队历时一年多,分析了超过10万份的中国政府招标文件,得出了四大发现。第一,中国公安策略性地选择摄像头安装地点,尽可能多的安装脸部识别镜头,甚至希望在住宅建筑、卡拉OK厅和酒店等私人空间内安装。据估计,全球近10万个摄像头中,一半以上在中国。这些摄像头采集了大量的数据,“公安估计,每时每刻都有25亿张人脸图像被储存”。 采集的数据会被录入功能强大的分析软件,可以识别出一个人的身份,种族、性别甚至是否戴眼镜或口罩。第二,当局正在利用手机追踪设备和安全漏洞,将用户的网络活动和现实活动联系起来。“到目前为止,中国大陆的31个省份和地区全都使用了手机追踪设备”。
第三,不仅仅是安装摄像头,中国当局正在无差别的从普通民众身上收集DNA数据、虹膜样本和声纹。甚至,要在摄像头周围至少100米范围内安装拾音器,采样声纹。其中,2017年前后新疆维吾尔自治区建立了首个区域虹膜数据库,数据规模高达3000万人。此外,大陆31个省份和地区中的25个建立了大型男性DNA数据库。第四,中国当局希望把所有的数据库全部整合到一起,“为公民建立全面档案,以便各级政府访问调取”。——中国数字时代
-
疫情给你有带来多大的次生伤害?
疫情不会给你带来多大的伤害,也没有次生伤害。武汉肺炎病毒是上帝带给中国人的福音,病毒取代党的领导,是中国百年来未有之大变局!
党和政府把你关起来,把你的自由和财产夺走,强迫你被棉签插,强迫商业业主和顾客互相监督互相举报。这样你还要配合党和政府,把你的灾难甩锅给疫情,无非是因为你知道病毒不会真正伤害你,不会半夜敲门找你算账。你不是欺软怕硬,助纣为虐么?
-
大家覺得不錯的歐美電視劇
没有! 没有! 没有!
-
讯问一个关于台湾历史的开脑洞问题
@linda #189013 海南也只有沿海的一圈受中央王朝控制,岛屿中间的部分完全没法管控。其他几个地方能管控是因为当地服从管控的人口已经不少了。
-
讯问一个关于台湾历史的开脑洞问题
主要原因还是台湾离大陆远,福建广东广西海南越南北部都是这样的气候,但是中原王朝很早就把势力伸到了这里。
-
疫情给你有带来多大的次生伤害?
武汉肺炎瘟疫爆发以来我的生活水平得到极大的提升。收入也大幅提升。我没打过任何疫苗,也没感染过武汉肺炎。或者也许感染过但没症状,因为我没做过PCR检测,只是在瘟疫最严重的时候用快速检测盒自己检测过。我是第一批重视武汉肺炎并作出充足准备的人。我的每一个重要决定都基于对武汉肺炎更准确的认知。