标签 编程 下的文章

“编程难”这一说法是有害的

在《ACM 通讯》上发表的一篇文章认为,人们普遍认为“编程本身很难”,这一点缺乏足够的证据。该文章的作者是一位计算机科学教授,他说,“为什么做这样一个笼统的、明确的声明似乎是常规的、可接受的,可以说是流行的?为什么这些声明往往不附带支持性的证据?有什么经验性的证据可以表明,广义上的编程本质上是困难的,或者说比数学中的微积分等更难?”作者认为这种认识会产生不良的影响,可能会产生严重的意外后果,包括不公平的做法。

那么你觉得编程难不难?或者说,比什么事情更难?

美国希望通过加密货币征收 280 亿美元税收

据报道,美国国会的准备投票的一项基础设施法案中,提议对交易所和其他各方适用新的信息报告要求,任何转让数字资产的经纪人都需要根据修改后的信息报告制度提交报告。现行规则要求企业报告超过一千美元的现金支付,包括加密货币在内的数字资产也被添加到其中,这可能会使该法案的“支付费用”高达约 280 亿美元。

这才叫敛财有术,正视它,规范它,并从中受益。

恶意程序开发者转向新兴编程语言

根据黑莓研究人员公布的一份报告,恶意程序开发者转向新兴编程语言去躲避检测或解决开发流程中的难点。Go 语言吸引了 APT 组织和商业恶意程序开发者的极大兴趣,使用 Go 语言编写的恶意程序样本日益常见。另一种被用于编写恶意程序的新兴语言是 D 语言。恶意程序开发者在利用新技术更新技能方面是很擅长的。

经济利益驱动的恶意软件开发者才会更积极拥抱新技术。

“不再索取赎金” 项目的免费解密工具节省了 10 亿美元

不再索取赎金” 项目提供了 121 个免费的勒索软件解密工具,可以解密 151 个勒索软件家族。他们已经帮助 600 多万勒索软件受害者免费恢复了他们的加密文件。该网站允许用户上传加密文件,以帮助确定他们成为哪种形式的勒索软件的受害者,然后在有免费解密工具的情况下将他们引向该工具。

它建议,尽管勒索软件攻击造成了破坏,但受害者不应该屈服和支付。这不仅是因为没有理由相信犯罪分子会提供合法的解密密钥,而且支付赎金只是表明勒索软件的作用,鼓励进一步的攻击。

这是一个非常有意义的措施,而且已经看到了很好的效果。

谷歌搜索返回的 PHP 教程一半含有 SQL 注入漏洞

在谷歌上搜索 PHP 编程问题,返回的结果包含了教程、技巧和代码片段,但绝大部分结果包含了有缺陷的数据库语句。据研究,30 个结果中有 16 个含有 SQL 注入漏洞。如果搜索者将这些代码包含在其编写的程序中,那么最后产生的程序将是不安全的。

可能很多刚刚学习编程的人都有过 “ICP”(互联网复制与粘贴)编程阶段,但是这应该只是一个提示思路的方法,而不是编程方法。

BLAKE3 哈希算法发布,比 SHA 算法更快更安全

去年宣布的 BLAKE3 是基于其前身 BLAKE2 的加密哈希函数,现在其官方实现发布了 1.0 版本。BLAKE3 比 BLAKE2 快得多,也比 SHA-1/SHA-2/SHA-3 甚至 MD5 等快得多,同时更加安全。它在如今拥有 SIMD 指令集扩展和高核数的 CPU 上是高度可并行的。

虽然比 SHA 哈希更好,但是得到推广依然需要 SHA 像 MD5 一样逐渐被淘汰才行。

2021 年 7 月版的 TIOBE 编程社区指数已经出来了,榜单前几名有点拥挤。

该指数首次发布于 2001 年 7 月,当时 TIOBE 首席执行官 Paul Jansen 开始了“一个个人爱好项目,想看看哪些语言有需求”。从那时起,确定一种语言的受欢迎程度(也就是在该指数中的位置)的方法基本保持不变:通过计算列表中的热门搜索引擎的 “+<语言> programming” 的查询的点击率并将其标准化来计算评级。

2004 年,谷歌方式的改变使得 TIOBE 增加了更多的搜索引擎,以减少波动。然而,目前使用的大多数合格的引擎都属于谷歌家族,所以那里的变化仍然会影响整体结果。对该指数的批评往往归结为其意义不大,因为像新版本或临时问题这样的单一事件有可能大大改变排名的结果。

TIOBE 公司成立于 Eindhoven,主要以其 TICS 产品而闻名,这是一个测量软件代码质量的框架。它的名字是“The Importance Of Being Earnest”的缩写,意在反映该公司“真诚和专业的态度”(我们想,这也为奥斯卡•王尔德的鉴赏家提供了一点笑料)。

20 年前,TIOBE 指数的最高排名是由 Java、C 和 C++ 组成的。这与今天的情况没有太大区别,只是 Python 取代了 C++ 的位置,而且这三个顶级竞争者显然比以前更接近。

在连续 15 个月占据最高位置的 C 和排名第三的 Python 之间,这次的差距只有 0.67%。一年前,两者之间的差距约为 7.36%,因此 2020 年的年度语言似乎正处于一个清晰的轨道上。最新一期的 PYPL 指数已经看到 Python 在那里牢牢占据榜首,它在过去五年中的受欢迎程度增长最快。同时,在 TIOBE 指数中排名第二的 Java 似乎正在继续失去地位。

Jansen 解释说 Python 的持续上升与“数据挖掘和人工智能领域的蓬勃发展”有关。然而,这不可能全部的原因,因为像 R、Matlab 和 Julia 这样的语言在该领域也很常见,目前在该榜单中略有回落,要么更多是停滞不前。拥有一个比较成熟的工具生态系统,包括像 NumPy、TensorFlow 和 PyTorch 这样的重量级工具,以及相对稳固的 IDE 支持,肯定有助于 Python 的排名攀升。

除了少数例外,前十名与去年的排名基本保持一致。R 从第 8 位下降到第 12 位,Swift 从第 10 位下降到第 16 位,为中坚力量 PHP 和 SQL 腾出了一点空间。

再往下看,前 30 名中还有一点有趣的变化,Go 从第 20 名爬升到 2 月份的第 13 名。

Rust 也有些许进步,从第 30 位跃升至第 27 位。除其他原因外,这可能是由于人们对 Rust for Linux 项目的兴趣越来越大,该项目旨在为 Linux 内核带来内存安全,并在最近开始获得资金支持。


via: https://devclass.com/2021/07/05/20-years-of-tiobe-programming-community-index-go-gets-a-bounce/

作者: Julia Schmidt 选题:wxy 译者:wxy 校对:wxy

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

了解有关项目编程语言的详细信息。

 title=

近来,GitHub 添加了一个小指标来展示项目的细节,包括项目使用的编程语言。在这之前,对一个新的贡献者来说,了解他们感兴趣的项目的信息是较为困难的。

这个补充很有帮助,但是如果您想知道有关本地存储库中项目的相同信息该怎么办呢? 这正是 Tokei 派上用场的地方。这是一个当你想和精通不同语言的人想要构建一个项目时可以告诉你项目的代码数据的特别有用的工具。

探索 Tokei

据其 README,“Tokei 是一个可以展示你的代码数据的程序。Tokei 将会展示文件的数量,和这些文件中不同语言的代码、注释、空白的行数。”它的 v.12.1.0 版本 elaborates 是这样子介绍的,“Tokei 是一个快速准确的代码分析 CLI 工具和库,可以使你轻松快速地在你的代码库中看到有多少空白、评论和代码行”。它能够识别超过 150 种编程语言。

$ ./tokei ~/exa/src ~/Work/wildfly/jaxrs
==================
Language   Files Lines Code Comments Blank
Java        46    6135  4324  945     632
XML         23    5211  4839  473     224
---------------------------------
Rust
Markdown
-----------------------------------
Total

安装 Tokei

在 Fedora 上安装 Tokei:

$ sudo dnf install tokei

用 Rust's Cargo 包管理器安装:

$ cargo install tokei

使用 Tokei

要列出当前目录中的代码统计:

$ tokei
===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 Ada                    10         2840         1681          560          599
 Assembly                4         2508         1509          458          541
 GNU Style Assembly      4         2751         1528          748          475
 Autoconf               16         2294         1153          756          385
 Automake                1           45           34            0           11
 BASH                    4         1895         1602          133          160
 Batch                   2            4            4            0            0
 C                     330       206433       150241        23402        32790
 C Header              342        60941        24682        29143         7116
 CMake                  48         4572         3459          548          565
 C#                      9         1615          879          506          230
 C++                     5          907          599          136          172
 Dockerfile              2           16           10            0            6
 Fish                    1           87           77            5            5
 HTML                    1          545          544            1            0
 JSON                    5         8995         8995            0            0
 Makefile               10          504          293           72          139
 Module-Definition      12         1183         1046           65           72
 MSBuild                 1          141          140            0            1
 Pascal                  4         1443         1016          216          211
 Perl                    2          189          137           16           36
 Python                  4         1257          949          112          196
 Ruby                    1           23           18            1            4
 Shell                  15         1860         1411          222          227
 Plain Text             35        29425            0        26369         3056
 TOML                   64         3180         2302          453          425
 Visual Studio Pro|     30        14597        14597            0            0
 Visual Studio Sol|      6          655          650            0            5
 XML                     1          116           95           17            4
 YAML                    2           81           56           12           13
 Zsh                     1           59           48            8            3
-------------------------------------------------------------------------------
 Markdown               55         4677            0         3214         1463
 |- C                    1            2            2            0            0
 |- Rust                19          336          268           20           48
 |- TOML                23           61           60            0            1
 (Total)                           5076          330         3234         1512
-------------------------------------------------------------------------------
 Rust                  496       210966       188958         5348        16660
 |- Markdown           249        17676         1551        12502         3623
 (Total)                         228642       190509        17850        20283
===============================================================================
 Total                1523       566804       408713        92521        65570
===============================================================================
$

下面的命令打印出了支持的语言和拓展:

$ tokei -l
ABNF
ABAP
ActionScript
Ada
Agda
Alex
Alloy
Arduino C++
AsciiDoc
ASN.1
ASP
ASP.NET
Assembly
GNU Style Assembly

如果你在两个文件夹上运行 tokei 并指定其位置作为参数,它将以先入先出的规则打印单个文件的统计数据:

 title=

默认情况下,tokei 仅仅输出有关语言的数据,但是使用 --files 标记可提供单个文件统计信息:

$ tokei ~/exa/src --files
===========================================================================================
 Language                              Files      Lines      Code             Comments     Blanks
===========================================================================================
 Rust                                   54          9339        7070             400       1869
 |- Markdown                            33          1306           0            1165        141
 (Total)                                           10645        7070        1565       2010
-------------------------------------------------------------------------------------------
 /home/ssur/exa/src/theme/default_theme.rs           130         107           0         23
 /home/ssur/exa/src/output/render/times.rs            30          24           0          6
 /home/ssur/exa/src/output/render/users.rs            98          76           0         22
 /home/ssur/exa/src/output/render/size.rs            182         141           3         38
 /home/ssur/exa/src/output/render/octal.rs           116          88           0         28
 /home/ssur/exa/src/output/render/mod.rs              33          20           3         10
 /home/ssur/exa/src/output/render/inode.rs            28          20           0          8
 /home/ssur/exa/src/output/render/links.rs            87          65           0         22
 /home/ssur/exa/src/output/render/groups.rs          123          93           0         30
 |ome/ssur/exa/src/output/render/filetype.rs          31          26           0          5
 /home/ssur/exa/src/output/render/blocks.rs           57          40           0         17
 /home/ssur/exa/src/output/render/git.rs             108          87           0         21
 |/ssur/exa/src/output/render/permissions.rs         204         160           3         41
 /home/ssur/exa/src/output/grid.rs                    67          51           3         13
 /home/ssur/exa/src/output/escape.rs                  26          18           4          4
 /home/ssur/exa/src/theme/lsc.rs                     235         158          39         38
 /home/ssur/exa/src/options/theme.rs                 159         124           6         29
 /home/ssur/exa/src/options/file_name.rs              46          39           0          7
 /home/ssur/exa/src/options/flags.rs                  84          63           6         15
 /home/ssur/exa/src/fs/mod.rs                         10           8           0          2
 /home/ssur/exa/src/fs/feature/mod.rs                 33          25           0          8
-- /home/ssur/exa/src/output/time.rs ---------------------------------------------------------------
 |- Rust                                             215          170          5         40
 |- Markdown                                          28            0         25          3

总结

我发现使用 tokei 来了解我的代码统计数据十分容易。另一个使用 tokei 的好处就是它可以用作为一个很容易集成到其他项目的库。访问 Tokei 的 Crate.io pageDocs.rs 网站来了解其更多用法。如果你想参与其中,你也可以通过它的 GitHub 仓库 来为 Tokei 作贡献。

你是否觉得 Tokei 很有用呢?可以在下方的评论区告诉我们。


via: https://opensource.com/article/21/6/tokei

作者:Sudeshna Sur 选题:lujun9972 译者:zepoch 校对:wxy

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

IBM 教会 AI 翻译编程语言

IBM 的 CodeNet 旨在教人工智能如何翻译代码。它是一个庞大的数据集,包含大约 5 亿行代码,分布在 55 种以上的传统和活跃语言中 —— 从 COBOL、FORTRAN 到 Java、C++ 和 Python。这个数据集是由 4000 多个编码问题和 1400 多万个代码样本组成的,这些问题是从全球范围内几十年的编程挑战和竞赛中收集的。该数据集是以一种能够实现双向翻译的方式构建的,也就是说你可以在两种编程语言之间进行转换。除了翻译之外,CodeNet 还可以用于代码搜索、克隆检测等功能。另外,研究人员也可以将其用于运行回归研究,并有可能开发自动代码纠正系统。

看看,以后编程都像工业制品一样都由机器来生产了,程序员们将来就像手工业者一样,只能从事一些体现艺术或小众领域的手工制品了。

所有 Wi-Fi 设备皆存在 FragAttacks 漏洞

网络安全研究人员发表了一系列 Wi-Fi 设备安全漏洞,这些漏洞被统称为 FragAttacks。其中 3 个来自 Wi-Fi 标准中的设计缺陷,从最初的安全协定 WEP 到最新的 WPA3 规范都在影响范围中,也就是说,从 1997 年 Wi-Fi 发布起,这些设计缺陷已经成为 Wi-Fi 的一部分。值得庆幸的是,这些设计缺陷比较难以被利用。不过更严重的是,还有一些漏洞是由 Wi-Fi 产品中普遍存在的程序错误引起,其中几个漏洞可轻易地被恶意攻击者利用。经证实,绝大多数 Wi-Fi 设备都存在多个漏洞。

为了保护广大的用户,安全更新工作已经进行了 9 个月,现在才对外揭露漏洞信息,漏洞修补工作由 Wi-Fi 联盟和 ICASI 进行监督。

无线网络在方便的同时,也给开放攻击提供了更多机会,这让我想起来之前在单位楼下破解 Wi-Fi 的故事。

知名 BIOS 厂商 AMI 正在积极参与开源系统固件项目

尽管 AMI 专有的 BIOS 产品已被许多主板厂商所采用,但该公司也表示有向开源计算项目社区给予回馈的意向。AMI 正致力于 Linux 基金会的 OpenBMC、EDK II 和相关开源组件。开放计算项目正在继续引起主要行业参与者的兴趣,出于安全/审计的原因,开源固件在总体上继续受到越来越多的关注,因此工程师可以按照他们认为合适的方式管理固件。

虽然开源固件项目近些年来发展势头不错,也得到了英特尔的支持,但是看到一家以专有 BIOS 而知名的公司愿意参与到开源项目,可见开源已经是大势所趋。

在家玩流行的英国游戏节目 “Countdown” 中的数字游戏。

 title=

像许多人一样,我在大流行期间看了不少新的电视节目。我最近发现了一个英国的游戏节目,叫做 Countdown,参赛者在其中玩两种游戏:一种是 单词 游戏,他们试图从杂乱的字母中找出最长的单词;另一种是 数字 游戏,他们从随机选择的数字中计算出一个目标数字。因为我喜欢数学,我发现自己被数字游戏所吸引。

数字游戏可以为你的下一个家庭游戏之夜增添乐趣,所以我想分享我自己的一个游戏变体。你以一组随机数字开始,分为 1 到 10 的“小”数字和 15、20、25,以此类推,直到 100 的“大”数字。你从大数字和小数字中挑选六个数字的任何组合。

接下来,你生成一个 200 到 999 之间的随机“目标”数字。然后用你的六个数字进行简单的算术运算,尝试用每个“小”和“大”数字计算出目标数字,但使用不能超过一次。如果你能准确地计算出目标数字,你就能得到最高分,如果距离目标数字 10 以内就得到较低的分数。

例如,如果你的随机数是 75、100、2、3、4 和 1,而你的目标数是 505,你可以说 2+3=55×100=5004+1=5,以及 5+500=505。或者更直接地:(2+3)×100 + 4 + 1 = 505

在命令行中随机化列表

我发现在家里玩这个游戏的最好方法是从 1 到 10 的池子里抽出四个“小”数字,从 15 到 100 的 5 的倍数中抽出两个“大”数字。你可以使用 Linux 命令行来为你创建这些随机数。

让我们从“小”数字开始。我希望这些数字在 1 到 10 的范围内。你可以使用 Linux 的 seq 命令生成一个数字序列。你可以用几种不同的方式运行 seq,但最简单的形式是提供序列的起始和结束数字。要生成一个从 1 到 10 的列表,你可以运行这个命令:

$ seq 1 10
1
2
3
4
5
6
7
8
9
10

为了随机化这个列表,你可以使用 Linux 的 shuf(“shuffle”,打乱)命令。shuf 将随机化你给它的东西的顺序,通常是一个文件。例如,如果你把 seq 命令的输出发送到 shuf 命令,你会收到一个 1 到 10 之间的随机数字列表:

$ seq 1 10 | shuf
3
6
8
10
7
4
5
2
1
9

要从 1 到 10 的列表中只选择四个随机数,你可以将输出发送到 head 命令,它将打印出输入的前几行。使用 -4 选项来指定 head 只打印前四行:

$ seq 1 10 | shuf | head -4
6
1
8
4

注意,这个列表与前面的例子不同,因为 shuf 每次都会生成一个随机顺序。

现在你可以采取下一步措施来生成“大”数字的随机列表。第一步是生成一个可能的数字列表,从 15 开始,以 5 为单位递增,直到达到 100。你可以用 Linux 的 seq 命令生成这个列表。为了使每个数字以 5 为单位递增,在 seq 命令中插入另一个选项来表示 步进

$ seq 15 5 100
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100

就像以前一样,你可以随机化这个列表,选择两个“大”数字:

$ seq 15 5 100 | shuf | head -2
75
40

用 Bash 生成一个随机数

我想你可以用类似的方法从 200 到 999 的范围内选择游戏的目标数字。但是生成单个随机数的最简单的方案是直接在 Bash 中使用 RANDOM 变量。当你引用这个内置变量时,Bash 会生成一个大的随机数。要把它放到 200 到 999 的范围内,你需要先把随机数放到 0 到 799 的范围内,然后加上 200。

要把随机数放到从 0 开始的特定范围内,你可以使用模数算术运算符。模数计算的是两个数字相除后的 余数。如果我用 801 除以 800,结果是 1,余数是 1(模数是 1)。800 除以 800 的结果是 1,余数是 0(模数是 0)。而用 799 除以 800 的结果是 0,余数是 799(模数是 799)。

Bash 通过 $(()) 结构支持算术展开。在双括号之间,Bash 将对你提供的数值进行算术运算。要计算 801 除以 800 的模数,然后加上 200,你可以输入:

$ echo $(( 801 % 800 + 200 ))
201

通过这个操作,你可以计算出一个 200 到 999 之间的随机目标数:

$ echo $(( RANDOM % 800 + 200 ))
673

你可能想知道为什么我在 Bash 语句中使用 RANDOM 而不是 $RANDOM。在算术扩展中, Bash 会自动扩展双括号内的任何变量. 你不需要在 $RANDOM 变量上的 $ 来引用该变量的值, 因为 Bash 会帮你做这件事。

玩数字游戏

让我们把所有这些放在一起,玩玩数字游戏。产生两个随机的“大”数字, 四个随机的“小”数值,以及目标值:

$ seq 15 5 100 | shuf | head -2
75
100
$ seq 1 10 | shuf | head -4
4
3
10
2
$ echo $(( RANDOM % 800 + 200 ))
868

我的数字是 7510043102,而我的目标数字是 868

如果我用每个“小”和“大”数字做这些算术运算,并不超过一次,我就能接近目标数字了:

10×75 = 750
750+100 = 850

然后:

4×3 = 12
850+12 = 862
862+2 = 864

只相差 4 了,不错!但我发现这样可以用每个随机数不超过一次来计算出准确的数字:

4×2 = 8
8×100 = 800

然后:

75-10+3 = 68
800+68 = 868

或者我可以做 这些 计算来准确地得到目标数字。这只用了六个随机数中的五个:

4×3 = 12
75+12 = 87

然后:

87×10 = 870
870-2 = 868

试一试 Countdown 数字游戏,并在评论中告诉我们你做得如何。


via: https://opensource.com/article/21/4/math-game-linux-commands

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

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