标签 代码 下的文章

手写代码导致美国宇航局的水手号探测器失败

1962 年夏天,美国宇航局启动了水手 1 号任务,这是一项无人驾驶的任务,该装置将飞过金星并探测数据。当时的工程师通常在纸上写出他们的代码。然后这些代码通过一个复杂的系统被翻译成计算机可读的卡片,然后通过计算机执行该程序。这种手工使得意外错误率变得很高。缺失的符号与字符最终导致了水手 1 号任务的彻底失败。这次任务在当时花费了大约 1800 万美元,相当于今天的 1.5 亿美元。

消息来源:Slash Gear
老王点评:计算机发展早期,不说流程,就是工具也很简陋。但是就是这样,也送上天那么多飞行器。

一个简单的安卓锁屏漏洞获得了 7 万美元

研究人员发现,任何能拿到谷歌 Pixel 手机的人都可以通过换上自己的 SIM 卡,并输入预设的恢复代码,从而绕过安卓操作系统的锁屏保护。这个漏洞的利用非常简单,但谷歌花了大约五个月的时间来修复。谷歌为此向他支付了 7 万美元的奖金。

消息来源:Tech Crunch
老王点评:看似这个钱挣的容易,但是实际上研究人员投入了大量精力才可能遇到这样一块“狗头金”。

英特尔推出深度伪造实时检测工具

深度伪造视频现在无处不在,你可能见过名人做或说他们实际上从未做过的事情的视频。英特尔开发了 FakeCatcher,这项技术能够以 96% 的准确率检测虚假人脸视频。这是世界上第一个实时深度伪造检测器,它可以在几毫秒内返回结果。该工具是通过检测视频像素中微妙的“血流”信号,在真实视频中寻找真实的线索。当心脏泵血时,人的静脉会改变颜色,这些血流信号是可以从面部各处收集的,算法将这些信号翻译成时空图。然后,利用深度学习,就可以立即检测出一个视频是真的还是假的。

消息来源:PC Gamer
老王点评:果然魔高一尺,道高一丈。不过我想深度伪造可能很快就会学会添加血流信号。

浏览器广告拦截器明年将被削弱

浏览器的广告拦截器和其他隐私工具是建立在 MV2 规范之上的。但谷歌在 2018 年开始为 Chromium 浏览器扩展开发 MV3 规范,并计划在明年 1 月停止支持 MV2。在谷歌看来,在 MV2 下的扩展对浏览器中打开的页面有太多的控制和访问。如果这些附加组件中的一个变成了流氓软件,它可以在你访问这些网页时收集关于你的各种敏感数据。主流的广告拦截器基于 MV3 推出的测试版表明,基于 MV3 开发的扩展功能明显变弱,比如说不能支持动态规则,广告出现闪烁等。

消息来源:The Register
老王点评:谷歌表面上促进隐私的努力,最终将损害促进隐私的扩展。这究竟是为了隐私考虑,还是为了广告考虑?

默认搜索引擎设置为谷歌引来反垄断审查

美国司法部称,谷歌每年向苹果、三星电子和其他电信巨头支付数十亿美元,成为大多数浏览器和所有美国手机的默认搜索引擎,以维持其作为第一大搜索引擎的地位。谷歌的合同构成了司法部具有里程碑意义的反垄断诉讼的基础,该诉讼指控该公司违反反垄断法,试图维持其在线搜索的垄断地位。

消息来源:彭博社
老王点评:至少在我们这里,我们不(能)用谷歌。

支持者就 Tornado Cash 制裁问题起诉美国财政部

Tornado Cash 的六名用户周四对美国财政部、部长和其他官员提起诉讼,原因是美国财政部在 8 月份决定对该服务进行制裁。用户声称制裁的决定超出了政府的权限,侵犯了他们在美国宪法下的言论自由和财产权利。此案的结果涉及美国政府是否可以对公开的软件代码实施制裁这一新颖的法律问题,可能会对未来该行业产生影响。

消息来源:Fortune
老王点评:捍卫代码自由的权利。

研究人员在源代码中隐藏人眼看不见的漏洞

剑桥大学的研究人员发表论文,介绍了 在源代码中隐藏人眼看不见的漏洞的攻击方法。这种被称为 Trojan-Source 的攻击方法利用了 Unicode 中的特殊字符,通过方向覆盖、同形异义等方法创造出对编译器和人类视觉上存在差异的源代码。人眼看不出漏洞,但对编译器来说逻辑编码顺序和显示的顺序是不同的。这种攻击方法对大多数主流编程语言都有效,研究人员已经将漏洞报告给了相关项目。

老王点评:“眼见并不为实”,这个锅一方面是 Unicode 无克制的增加各种奇怪字符和控制字符导致的,另外一方面也是传统上面对 ASCII 字符的编程语言支持 Unicode 时没有预料到这种恶意利用。

美国航空机构与电信机构因 5G 发生争执

美国联邦航空管理局正准备向飞行员和航空公司发出警告,指出一项新的 5G 无线服务可能会干扰飞机驾驶舱安全系统、自动化系统,该服务将于 12 月初上线。美国联邦通信委员会则对安全问题进行了反驳,称在审查了对航空安全的潜在影响后,于 2020 年初制定了频谱使用规则,现有证据不支持 5G 网络会干扰航空安全的结论。双方争论的核心问题是无线电频谱在 3.7 到4.2 GHz 之间的波段。该波段非常适合 5G 网络传输,并且已经服务于一些国家的手机网络中。而航空设备则工作在 4.2 至 4.4 GHz 的附近频段,因此,美国联邦航空管理局觉得增加了干扰的可能性。

老王点评:说到底,还是频谱之争。

蓝牙标签被用来跟踪被盗物品

今年 4 月,苹果公司发布了 29 美元的 AirTag,为更广泛的受众带来了更有效的蓝牙跟踪技术。虽然苹果公司从没有说过 AirTag 可被用于 追回被盗财产,但实际上该公司建立了一个非常适合此类用例的网络。每一款兼容的 iPhone、iPad 和 Mac 都被默默地用作定位设备,AirTag 使用蓝牙向最近的 Apple 设备发送带有其加密位置的 ping,这些设备将信息传递到苹果的 Find My 网络。兼容 Apple 设备有近 10 亿台,使得 Find My 非常有效,尤其是在城市中。

老王点评:从技术上来说,是一个非常有用的进步,但是如何避免被滥用是个问题。

当编写程序时,我花费了大量时间在编写好的示例上。我从未见过有人写过关于如何写出好的示例,所以我就写了一下如何写出一份好的示例。

基础思路就是从你写的真实代码开始,然后删除不相关的细节,使其成为一个独立的例子,而不是无中生有地想出一些例子。

我将会谈论两种示例:基于真实案例的示例和奇怪的示例

好的示例是真实的

为了说明为什么好的案例应该是真实的,我们就先讨论一个不真实的案例。假设我们在试图解释 Python 的 lambda 函数(这只是我想到的第一个概念)。你可以举一个例子,使用 map 和 lambda 来让一组数字变为原先的两倍。

numbers = [1, 2, 3, 4]
squares = map(lambda x: x * x, numbers)

我觉得这个示例不是真实的,有如下两方面的原因:

  • 将一组数字作平方运算不是在真实的程序中完成的事,除非是欧拉项目或某种东西(更多的可能是针对列表的操作)
  • map 在 Python 中并不常用,即便是做这个我也更愿意写 [x*x for x in numbers]

一个更加真实的 Python lambdas 的示例是使用 sort 函数,就像这样:

children = [{"name": "ashwin", "age": 12}, {"name": "radhika", "age": 3}]
sorted_children = sorted(children, key=lambda x: x['age'])

但是这个示例是被精心设计的(为什么我们需要对这些孩子按照年龄进行排序呢?)。所以我们如何来做一个真实的示例呢?

如何让你的示例真实起来:看你所写实际代码

我认为最简单的来生成一个例子的方法就是,不是凭空出现一个例子(就像我用那个儿童的例子),而只是从真正的代码开始!

举一个例子吧,如果我要用 sort.+key 来编写一串 Python 代码,我会发现很多我按某个标准对列表进行排序的真实例子,例如:

  • tasks.sort(key=lambda task: task['completed_time'])
  • emails = reversed(sorted(emails, key=lambda x:x['receivedAt']))
  • sorted_keysizes = sorted(scores.keys(), key=scores.get)
  • shows = sorted(dates[date], key=lambda x: x['time']['performanceTime'])

在这里很容易看到一个规律——这些基本是按时间排序的!因此,你可以明白如何将按时间排序的某些对象(电子邮件、事件等)的简单实例轻松地放在一起。

现实的例子有助于“布道”你试图解释的概念

当我试图去解释一个想法(就好比 Python Lambdas)的时候,我通常也会试图说服读者,说这是值得学习的想法。Python lambdas 是如此的有用!当我去试图说服某个人 lambdas 是很好用的时候,让他想象一下 lambdas 如何帮助他们完成一项他们将要去做的任务或是以及一项他们以前做过的任务,对说服他会很有帮助。

从真实代码中提炼出示例可能需要很长时间

我给出如何使用 lambdasort 函数的解释例子是十分简单的,它并不需要花费我很长时间来想出来,但是将真实的代码提炼出为一个独立的示例则是会需要花费很长的时间!

举个例子,我想在这篇文章中融入一些奇怪的 CSS 行为的例子来说明创造一个奇怪的案例是十分有趣的。我花费了两个小时来解决我这周遇到的一个实际的问题,确保我理解 CSS 的实际情况,并将其变成一个小示例。

最后,它“仅仅”用了 五行 HTML 和一点点的 CSS 来说明了这个问题,看起来并不想是我花费了好多小时写出来的。但是最初它却是几百行的 JS/CSS/JavaScript,它需要花费很长时间来将所有的代码化为核心的很少的代码。

但我认为花点时间把示例讲得非常简单明了是值得的——如果有成百上千的人在读你的示例,你就节省了他们这么多时间!

就这么多了!

我觉得还有更多关于示例可以去讲的——几种不同类型的有用示例,例如:

  • 可以更多的改变人的思维而不是直接提供使用的惊喜读者的示例代码
  • 易于复制粘贴以用作初始化的示例

也许有一天我还会再写一些呢? :smiley:


via: https://jvns.ca/blog/2021/07/08/writing-great-examples/

作者:Julia Evans 选题:lujun9972 译者:zepoch 校对:turbokernel

本文由 LCTT 原创编译,Linux中国 荣誉推出

IonQ 宣称打造了迄今最强大的量子计算机

IonQ 今日宣布,其已推出“具有 32 个完美的量子比特、且门误差相当低”的最新款量子计算机。参考 IBM 首选的量子基准测试,IonQ 有望达成 400 万的量子体积,因而可将之视作迄今最强大的量子计算机。该公司将当代硬件的量子比特从 11 位提升到了 32 位。不过更重要的是,他们提升了使用全部 32 个量子比特所需的保真度。根据不同应用,客户需要 80~150 个之间的高保真量子位和逻辑门才能体现量子优势。IonQ 的目标是让量子比特数年均至少翻一番。

来源:cnbeta

拍一拍:虽然还距离实用尚有距离,但是量子技术的进步也太快了。

Sourcegraph:开发人员现在管理的代码比 2010 年多 100 倍

Sourcegraph CEO 接受媒体采访时表示,一个典型的组织或开发人员管理的代码量在过去十年中出现增长这并不奇怪,超一半的被调查开发者报告增长(以兆字节计算)超过了一百倍,大部分都来自于所使用的平台和工具的多样性的增加。

来源:cnbeta

拍一拍:代码会越来越庞大复杂,必然会出现更好的管理工具,跟不上时代人类程序员,只能将工作交给 AI 来编程和管理。

PHP 8.0 RC1 发布

PHP 8.0 继续提升性能,引入了 PHP JIT 和其他优化,现在 PHP 已经是一头与 PHP 5.x 的迟钝时代截然不同的野兽了。PHP 8.0 还将 JSON 支持引入 PHP 核心而不是可选的扩展,改进了 GD 图像库、OpenSSL 加密消息语法支持、Zip 改进,以及其他无数的增强功能。预计 11 月底左右完成一般可用性版本。

来源:cnbeta

拍一拍:PHP 的活力十足,不再是当年那个橡皮小鸭子了。

作为一个开发人员,你可能需要不时地向你的领导或者同事分享你目前的工作与代码开发进展,抑或你的领导想对代码进行全方位的分析。这时,你就需要用到一些代码统计的工具,我知道其中一个是 Ohcount。今天,我遇到了另一个程序,cloc。你可以用 cloc 很容易地统计多种语言的源代码行数。它还可以计算空行数、代码行数、实际代码的行数,并通过整齐的表格进行结果输出。cloc 是自由开源的跨平台程序,使用 Perl 进行开发。

特点

cloc 有很多优势:

  • 安装方便而且易用,不需要额外的依赖项
  • 可移植
  • 支持多种的结果格式导出,包括:纯文本、SQL、JSON、XML、YAML、CSV
  • 可以计算 git 的提交数
  • 可递归计算文件夹内的代码行数
  • 可计算压缩后的文件,如:tar、zip、Java 的 .ear 等类型
  • 开源,跨平台

安装

cloc 的安装包在大多数的类 Unix 操作系统的默认软件库内,所以你只需要使用默认的包管理器安装即可。

Arch Linux:

$ sudo pacman -S cloc

Debian/Ubuntu:

$ sudo apt-get install cloc

CentOS/Red Hat/Scientific Linux:

$ sudo yum install cloc

Fedora:

$ sudo dnf install cloc

FreeBSD:

$ sudo pkg install cloc

当然你也可以使用第三方的包管理器,比如 NPM

$ npm install -g cloc

统计多种语言代码数据的使用举例

首先来几个简单的例子,比如下面在我目前工作目录中的的 C 代码。

$ cat hello.c
#include <stdio.h>
int main()
{
    // printf() displays the string inside quotation
    printf("Hello, World!");
    return 0;
}

想要计算行数,只需要简单运行:

$ cloc hello.c

输出:

第一列是被分析文件的编程语言,上面我们可以看到这个文件是用 C 语言编写的。

第二列显示的是该种语言有多少文件,图中说明只有一个。

第三列显示空行的数量,图中显示是 0 行。

第四列显示注释的行数。

第五列显示该文件中实际的代码总行数。

这是一个有只有 6 行代码的源文件,我们看到统计的还算准确,那么如果用来统计一个行数较多的源文件呢?

$ cloc file.tar.gz

输出:

上述输出结果如果手动统计准确的代码行数非常困难,但是 cloc 只需要几秒,而且以易读的表格格式显示结果。你还可以在最后查看每个部分的总计,这在分析程序的源代码时非常方便。

除了源代码文件,cloc 还能递归计算各个目录及其子目录下的文件、压缩包、甚至 git commit 数目等。

文件夹中使用的例子:

$ cloc dir/

子文件夹中使用的例子*:

$ cloc dir/cloc/tests

计算一个压缩包中源代码的行数:

$ cloc archive.zip

你还可以计算一个 git 项目,也可以像下面这样针对某次提交时的状态统计:

$ git clone https://github.com/AlDanial/cloc.git

$ cd cloc

$ cloc 157d706

cloc 可以自动识别一些语言,使用下面的命令查看 cloc 支持的语言:

$ cloc --show-lang

更新信息请查阅 cloc 的使用帮助。

$ cloc --help

开始使用吧!


via: https://www.ostechnix.com/cloc-count-the-lines-of-source-code-in-many-programming-languages/

作者:SK 选题:lujun9972 译者:littleji 校对:pityonline

本文由 LCTT 原创编译,Linux中国 荣誉推出