2023年2月

本教程让你通过编写一个 “猜数字” 游戏来探索 Basic。

用多种语言编写同一个应用是学习新的编程语言的好方法。大多数编程语言都有某些共同点,如:

  • 变量
  • 表达式
  • 语句

这些概念是大多数编程语言的基础。当你理解了它们,你就可以开始研究其他的东西了。

编程语言通常有一些相似之处。当你了解了一种编程语言,你就可以通过认识其差异来学习另一种语言的基础知识。

用标准程序进行练习是学习新语言的一个好方法。它使你能够专注于语言,而不是程序的逻辑。在这个系列文章中,我使用了一个“猜数字”的程序,在这个程序中,计算机在 1 到 100 之间挑选一个数字,并要求你猜出来。程序循环进行,直到你猜对数字为止。

这个程序锻炼了编程语言中的几个概念:

  • 变量
  • 输入
  • 输出
  • 条件判断
  • 循环

这是学习一种新的编程语言的很好的实践。本文主要介绍 Basic。

在(Bywater)Basic 中猜数字

对于 Basic 编程语言,没有真正的标准。维基百科说:“BASIC( 初学者通用符号指令代码 Beginners' All-purpose Symbolic Instruction Code )是一个通用的高级编程语言系列,旨在方便使用”。BWBasic 的实现是在 GPL 下提供的。

你可以通过编写一个“猜数字”游戏来探索 Basic。

在 Linux 上安装 Basic

在 Debian 或 Ubuntu 中,你可以用以下方法安装 Basic:

$ apt install -y bwbasic

下载 Fedora、CentOS、Mageia 和其他任何 Linux 发行版的最新版本 tarball。解压并设置可执行,然后从终端运行它:

$ tar --extract --file bwbasic*z

$ chmod +x bywater

$ ./bywater

在 Windows 上,下载 .exe 版本

Basic 代码

下面是我的实现:

10 value$ = cint(rnd * 100) + 1
20 input "enter guess"; guess$
30 guess$ = val(guess$)
40 if guess$ < value$ then print "Too low"
50 if guess$ > value$ then print "Too high"
60 if guess$ = value$ then 80
70 goto 20
80 print "That's right"

Basic 程序可以是编号的,也可以是不编号的。通常情况下,写程序时最好不编号,但用编号的行来写,可以更容易地引用各个行。

按照惯例,编码者将行写成 10 的倍数。这种方法允许在现有的行之间插入新的行,以便进行调试。下面是我对上述方法的解释:

  • 10 行:使用内置的 rnd 函数计算一个 1 到 100 之间的随机值,该函数生成一个 0 到 1 之间的数字,不包括 1。
  • 20 行:询问一个猜测,并将该值放入 guess$ 标量变量。30 行将该值转换为一个数字。
  • 40 行和 50 行:根据比较结果,给猜测者以反馈。
  • 70 行:回到循环的起点。
  • 60 行:通过将控制权转移到 80 行来打破循环。80 行是最后一行,所以程序在这之后退出。

输出示例

下面是将该程序放入 program.bas 后的一个例子:

$ bwbasic program.bas
Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff

enter guess? 50
Too low
enter guess? 75
Too low
enter guess? 88
Too high
enter guess? 80
Too low
enter guess? 84
Too low
enter guess? 86
Too high
enter guess? 85
That's right

开始学习

这个“猜数字”游戏是学习新的编程语言的一个很好的入门程序,因为它以一种相当直接的方式锻炼了几个常见的编程概念。通过在不同的编程语言中实现这个简单的游戏,你可以展示这些语言的一些核心概念,并比较它们的细节。

你有喜欢的编程语言吗?你会如何用它来写“猜数字”的游戏?请关注本系列文章,看看你可能感兴趣的其他编程语言的例子吧!


via: https://opensource.com/article/23/2/learn-basic-coding-game

作者:Moshe Zadka 选题:lkxed 译者:geekpi 校对:wxy

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

超过一半部署的 PHP 版本已经过了支持期

据一份最新的报告,PHP 7.4 是使用最多的版本,有 54% 的受访者在生产中部署了它,尽管它在去年 11 月就停止了支持。PHP 的支持政策是,每个发行分支支持两年,然后第三年只针对关键的安全问题。但是升级可能不是一件小事,8.0 有一个冗长的破坏性变化清单。受访者认为重构是升级中最耗时的部分,其次是测试、基础设施配置、规划和合规性更新。

消息来源:DevClass
老王点评:PHP 8 是比 PHP 7 快多了,但是谁没事去升级啊?PHP 的优势在于大量既有的应用,如果不能很简单的升级,走向衰落也在意料之中。

中国互联网公司也加入 ChatGPT 热潮

除了百度宣布其“问心一言”人工智能服务之外,中国各大互联网公司也纷纷宣布自己的动向。阿里巴巴说它正在内部测试一个 ChatGPT 式的工具,但没有透露更多细节。腾讯周四确认了其在 ChatGPT 式和 AI 生成内容方面的计划,称相关研究正在 “有序进行”。京东表示,它计划将支持 ChatGPT 等应用的一些技术,如自然语言处理,整合到自己的服务中。网易表示,它正在研究将人工智能生成的内容纳入其教育部门。

消息来源:日经新闻
老王点评:让我们相信 —— 他们都是厚积薄发,一夜之间人工智能就有了井喷式的重大突破。

因为说马斯克人气下降,首席工程师被开除

本月早些时候,当埃隆·马斯克锁定他的 Twitter 账户,亲自测试锁定的推文是否比公开的推文产生更多的浏览量时,他把工程师和顾问召集到一起,问他的团队,为什么他的账户有 “1 亿多粉丝”,却只有 “几万个展现”。一位首席工程师站出来解释说,这种下降可能是由于公众对马斯克的兴趣减弱,并提供了谷歌趋势图和对 Twitter 算法的调查结果,发现对 CEO “没有偏见”。马斯克的直接反应是将这位员工免职,“你被解雇了”。至此,Twitter 的首席工程师仅剩下硕果仅存的一位。

消息来源:Ars Technica
老王点评:过气明星非要爆出个大新闻才能不过气。

GNU Coreutils 的 Rust 实现正变得非常强大

在过去两年里,用 Rust 重新实现的 GNU Coreutils 已经接近了 C 语言的原始版本,也提供了 cp、mv 和其他核心工具。除了安全性之外,它的性能已经非常好了。这个名为 uutils 的工具包已经被许多 Linux 发行版打包,现在也被 “一个著名的社交网络通过 Yocto 项目” 使用。uutils 的目标是努力创造一个可以替代 GNU Coreutils 的产品,努力实现良好的跨平台支持,并易于测试。

消息来源:Phoronix
老王点评:作为 Linux 最重要的软件包和基础设施之一,Coreutils 如果用 Rust 实现一个强壮、完善、高性能的版本,那非常值得期待。

Linux 6.1 被选为 LTS 长期支持内核

稳定内核维护者 Greg 确认 Linux 6.1 成为 2022 年的长期支持内核。通常情况下,日历年的最后一个主要发布系列通常会被提升到 LTS 状态。Linux 6.1 是在 2022 年 12 月释出的,最初,Linux 6.1 LTS 只是被标记为两年的 LTS,而今天第二次被更新为四年的维护期,将维护到 2026 年 12 月。不过,这也仅比 Linux 5.15 LTS 多两个月。Linux 内核的 LTS 版本最长维护六年。如果有厂商愿意提供长期支持,会根据需要延长维护期,那么 Linux 6.1 或许可以一直维护到 2028 年 12 月。

消息来源:Phoronix
老王点评:随着 Linux 的发展,需要维护的 LTS 内核越来越多,内核社区的压力也会越来越大。

Thunderbird 正在经历一次从头开始的大规模重修

Thunderbird 作为一个独立的电子邮件客户端,已经快有 20 年历史了。Thunderbird 正在经历一次从头开始的大规模重修,以摆脱过去 10 年积累的所有技术和界面债务,来保证该项目在未来 20 年的可持续性。今年即将发布 Thunderbird 115,远不止是每年一次的发布。未来三年内,Thunderbird 将使代码库更精简、更可靠,重写古老的代码,消除技术债务;从头开始重建界面,开发和维护一个适应性强、极易定制的用户界面;改为每月发布一次。

消息来源:Thunderbird
老王点评:期待看到这个经典而强大的邮件客户端能焕发新生。

systemd 内置了很多管理系统日志的功能。在本指南中,我们将介绍如何管理系统日志,并对其采取轮换、归档和清除日志等操作。我们还解释了手动系统日志清理方法和使用配置文件的变化。

如果你的 Linux 发行版支持 systemd,那么从启动时开始,它每秒钟都会从系统的所有进程和应用程序中收集日志。所有这些日志事件都由 systemd 的 journald 守护程序管理。journald 收集所有的日志(信息、警告、错误等),并将其作为二进制数据存储在磁盘文件中。

由于日志保留在磁盘中,而且每秒钟都在收集,所以它占用了巨大的磁盘空间;特别是对于旧的系统、服务器来说。例如,在我的一个运行了一年左右的测试系统中,日志文件的大小是 GB 级的。

如果你管理多个系统、服务器,建议一定要正确管理 journald 日志,以便高效运行。让我们来看看如何管理日志文件。

systemd 日志维护

使用 systemd 的 journalctl 工具,你可以查询这些日志,对其进行各种操作。例如,查看不同启动时的日志文件,检查特定进程或应用程序的最后警告和错误。如果你对这些不了解,我建议你在学习本指南之前先快速浏览一下此教程:使用 journalctl 查看和分析 systemd 日志(附实例) 》。

物理日记的日志文件在哪里?

systemd 的 journald 守护进程在每次启动时都会收集日志。这意味着,它根据启动情况对日志文件进行分类。

日志以二进制形式存储在路径 /var/log/journal,文件夹为机器 ID。

比如说:

日志文件位置的截图-1

日志文件位置的截图-2

另外,请记住,根据系统配置,运行时日志文件被存储在 /run/log/journal/。而这些在每次启动时都会被删除。

我可以手动删除日志文件吗?

你可以,但不要这样做。相反,请按照下面的说明,使用 journalctl 工具清除日志文件以释放磁盘空间。

systemd 的日志文件占用了多少磁盘空间?

打开一个终端,运行以下命令。

journalctl --disk-usage

这应该为你提供系统中的日志文件实际使用的数量。

journalctl 磁盘使用命令

如果你有一个图形化的桌面环境,你可以打开文件管理器,浏览路径 /var/log/journal,并检查属性。

systemd 日志清理过程

清理日志文件的有效方法应该是通过 journald.conf 配置文件来完成。正常情况下,即使 journalctl 提供了删除日志文件的工具,你也不应该手动删除这些文件。

让我们来看看如何 手动 删除它,然后我将解释 journald.conf 中的配置变化,这样你就不需要时不时地手动删除文件;相反,systemd 会根据你的配置自动处理它。

手动删除

首先,你必须 flushrotate 日志文件。 轮换 rotate 是将当前活动的日志文件归档,并立即开始创建一个新的日志文件继续记录日志。 冲洗 flush 开关要求日志守护进程将存储在 /run/log/journal/ 中的所有日志数据冲入 /var/log/journal/,如果持久性存储被启用的话。

然后,在 flushrotate 之后,你需要用 vacuum-sizevacuum-timevacuum-files 选项运行 journalctl 来强制 systemd 清除日志。

例 1:

sudo journalctl --flush --rotate
sudo journalctl --vacuum-time=1s

上面这组命令会删除所有存档的日志文件,直到最后一秒。这有效地清除了一切。因此,在运行该命令时要小心。

日志清理-例子

清理完毕后:

清理后--日志的占用空间

你也可以根据你的需要在 --vacuum-time 的数字后面提供以下后缀:

  • s:秒
  • m:分钟
  • h:小时
  • days:天
  • months:月
  • weeks:周
  • years:年

例 2:

sudo journalctl --flush --rotate
sudo journalctl --vacuum-size=400M

这将清除所有存档的日志文件,并保留最后 400MB 的文件。记住这个开关只适用于存档的日志文件,不适用于活动的日志文件。你也可以使用后缀,如下所示。

  • K:KB
  • M:MB
  • G:GB

例 3:

sudo journalctl --flush --rotate
sudo journalctl --vacuum-files=2

vacuum-files 选项会清除所有低于指定数量的日志文件。因此,在上面的例子中,只有最后两个日志文件被保留,其他的都被删除。同样,这只对存档的文件有效。

如果你愿意,你可以把两种选项结合起来,但我建议不要这样做。然而,如果同时使用两个选项,请确保先用 --rotate 选项运行。

使用配置文件自动删除

虽然上述方法很好,也很容易使用,但建议你使用 journald 配置文件来控制日志文件的清理过程,该文件存在于 /etc/systemd/journald.conf

systemd 为你提供了许多参数来有效管理日志文件。通过组合这些参数,你可以有效地限制日志文件所占用的磁盘空间。让我们来看看。

journald.conf 参数描述实例
SystemMaxUse指定日志在持久性存储中可使用的最大磁盘空间SystemMaxUse=500M
SystemKeepFree指定在将日志条目添加到持久性存储时,日志应留出的空间量。SystemKeepFree=100M
SystemMaxFileSize控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。SystemMaxFileSize=100M
RuntimeMaxUse指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。RuntimeMaxUse=100M
RuntimeKeepFree指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。RuntimeMaxUse=100M
RuntimeMaxFileSize指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。RuntimeMaxFileSize=200M

如果你在运行中的系统的 /etc/systemd/journald.conf 文件中添加这些值,那么在更新文件后,你必须重新启动 journald。要重新启动,请使用以下命令。

sudo systemctl restart systemd-journald

核实日志文件

在你清理完文件后,检查日志文件的完整性是比较明智的。要做到这一点,请运行下面的命令。该命令显示了日志文件是否通过(PASS)、失败(FAIL)。

journalctl --verify

验证日志文件

总结

希望本指南能帮助你了解 systemd 日志管理流程的基本情况。通过这些,你可以通过限制空间、清除旧的日志文件来管理系统或服务器中的日志文件所使用的磁盘空间。这些只是指导性的命令,你可以通过多种方式组合这些命令来实现你的系统需求。


via: https://www.debugpoint.com/systemd-journald-clean/

作者:Arindam 选题:lkxed 译者:Chao-zhi 校对:wxy

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

用于操控无线调制解调器的 AT 设备包是 RTOS 最流行的扩展功能之一。

RTOS 是一个开源的 嵌入式设备操作系统,由 RT-Thread 开发。它为开发者提供了标准化的、友好的基础架构,开发者可以基于各种设备编写代码,它包含大量有用的类库和工具包,使开发过程更加便捷。

RTOS 使用的是模块方式,以便于扩展,这一点跟 Linux 类似。各种软件包可以让开发者将 RTOS 用于任何想要的目标设备。RTOS 最常用的一种扩展是 AT 设备包,它包含各种不同 AT 设备(例如调制解调器)的移植文件和示例代码。

在超过 62,000 次下载中(截止至撰写本文时),最流行的 RTOS 扩展之一是 AT 设备包,其中包括用于不同 AT 设备的移植文件和示例代码。

关于 AT 命令

起初,AT 命令是一个协议,用于控制拨号调制解调器。随着调制解调器技术发展到较高的带宽,它仍然可以用作轻量级而高效的设备控制协议,主流的移动电话厂商也联手开发了一系列 AT 命令,用于控制移动电话上的 GSM 模块。

如今,AT 命令仍然在网络通信领域具有通用性,很多设备,例如 WiFi、蓝牙、4G,都支持 AT 命令。

如果你正在创建用于边缘计算输入、监控或物联网(IoT)的专用设备,则你可能接触到一些 RTOS 支持的 AT 设备,包括 ESP8266、ESP32、M26、MC20、RW007、MW31、SIM800C、W60X、SIM76XX、A9/A9G、BC26、AIR720、ME3616、M 6315、BC28 和 EC200X。

RT-Thread 包含套接字抽象层(SAL)组件,SAL 实现了多种网络协议和接口的抽象,为上层提供了一系列标准的 BSD 套接字 API。SAL 进而接管了 AT 的套接字接口,所以开发者只需要考虑网络应用层提供的网络接口。

这个软件包实现了设备(包括上述设备)上的 AT 套接字功能,支持通过标准套接字接口以 AT 命令的形式通信。RT-Thread 编程指南 中就有关于这些功能的详细介绍。

at\_device 软件包是在 LGPLv2.1 许可证下分发的,借助 RT-Thread Env 工具 可以方便地获取到。该工具包含一个配置器和一个包管理器,它们分别用于配置内核和组件功能,可以用于定制组件并管理在线包。有了这些工具,开发者可以像搭积木一样构建系统。

获取 AT 设备包

为了使用配置了 RTOS 的 AT 设备,你必须启用 AT 组件库和 AT 套接字功能,需要:

  • RT\_Thread 4.0.2+
  • RT\_Thread AT 组件 1.3.0+
  • RT\_Thread SAL 组件
  • RT-Thread netdev 组件

AT 设备包已经针对多种版本进行了相应的更新。版本不同,配置选项也相应地不同,因此必须针对相应的系统版本进行适配。目前最常用的 AT 设备包版本有:

  • V1.2.0: 针对低于 V3.1.3 的 RT-Thread,V1.0.0 的 AT 组件
  • V1.3.0: 针对低于 V3.1.3 的 RT-Thread,V1.1.0 的 AT 组件
  • V1.4.0: 针对低于 V3.1.3 或等于 V4.0.0 的 RT-Thread,V1.2.0 的 AT 组件
  • V1.5.0: 针对低于 V3.1.3 或等于 V4.0.0 的 RT-Thread,V1.2.0 的 AT 组件
  • V1.6.0: 针对低于 V3.1.3 或等于 V4.0.1 的 RT-Thread,V1.2.0 的 AT 组件
  • V2.0.0/V2.0.1: 针对高于 V3.1.3 的 RT-Thread,V1.3.0 的 AT 组件
  • 最新版: 针对高于 V3.1.3 的 RT-Thread,V1.3.0 的 AT 组件

获取正确的版本的过程主要是在生成菜单时自动完成的。它基于现有的系统环境提供最合适的 AT 设备包。

正如前文提到的,不同的版本需要不同的配置选项。例如,

RT-Thread online packages  --->
     IoT - internet of things  --->
        -*- AT DEVICE: RT-Thread AT component porting or samples for different device  
        [ ]   Enable at device init by thread
              AT socket device modules (Not selected, please select)  --->    
              Version (V1.6.0)  --->

按线程启用 AT 设备初始化的选项决定了配置是否创建一个单独的线程来初始化设备网络。

2.x 版本支持同时启用多个 AT 设备:

RT-Thread online packages  --->
     IoT - internet of things  --->
        -*- AT DEVICE: RT-Thread AT component porting or samples for different device
        [*]   Quectel M26/MC20  --->
          [*]   Enable initialize by thread
          [*]   Enable sample
          (-1)    Power pin
          (-1)    Power status pin
          (uart3) AT client device name
          (512)   The maximum length of receive line buffer
        [ ]   Quectel EC20  --->
        [ ]   Espressif ESP32  --->
        [*]   Espressif ESP8266  --->
          [*]   Enable initialize by thread
          [*]   Enable sample
          (realthread) WIFI ssid
          (12345678) WIFI password
          (uart2) AT client device name
          (512)   The maximum length of receive line buffer
        [ ]   Realthread RW007  --->
        [ ]   SIMCom SIM800C  --->
        [ ]   SIMCom SIM76XX  --->
        [ ]   Notion MW31  --->
        [ ]   WinnerMicro W60X  --->
        [ ]   AiThink A9/A9G  --->
        [ ]   Quectel BC26  --->
        [ ]   Luat air720  --->
        [ ]   GOSUNCN ME3616  --->
        [ ]   ChinaMobile M6315  --->
        [ ]   Quectel BC28  --->
        [ ]   Quectel ec200x  --->
        Version (latest)  --->

这个版本包含了很多其他选项,其中也有启用示例代码的选项,这对初学者或使用不熟悉的设备的开发者很有帮助。

你也可以设置相应选项,选择你想用来给你的组件供电的针脚、指示电源状态的针脚、样本设备使用的串行设备的名称,以及样本设备接收数据的最大长度。在合适的设备上,你也可以设置 SSID 和密码。

简而言之,控制选项是够用的。

  • V2.x.x 版本支持同时启用多个 AT 设备,欲查看启用的设备信息,在 finsh shell 中执行 ifocnfig 命令即可。
  • V2.X.X 版本需要设备在使用前先注册;注册可以在样例目录中进行,或在应用层以自定义方式进行。
  • 针脚选项,例如电源针脚和电源状态针脚是按照设备的硬件连接来配置的。如果硬件的开启功能不可用,它们就会被设置为 -1
  • 一台AT 设备应当对应一个序列名称,每台设备的 AT 客户端名称应当是不同的。

AT 组件配置选项

当选择了 AT 组件包,启用了设备支持,AT 组件的客户端功能也就默认选择完成了。对 AT 组件来说,这就意味着有更多的选项要设置:

RT-Thread Components  --->
    Network  --->
        AT commands  --->
    [ ]   Enable debug log output
    [ ]   Enable AT commands server 
    -*-   Enable AT commands client
    (1)     The maximum number of supported clients
    -*-     Enable BSD Socket API support by AT commnads
    [*]     Enable CLI(Command-Line Interface) for AT commands
    [ ]     Enable print RAW format AT command communication data
    (128)   The maximum length of AT Commonds buffer

与 AT 设备包有关的配置选项有:

  • 支持的客户端最大个数:选择 AT 设备包中的多台设备时,需要将该选项配置为对应的设备台数;
  • 通过 AT 命令启用 BSD 套接字 API 功能:当选择 AT 设备包时默认选择该选项。
  • AT 命令的最大长度:AT 命令可发送的数据的最大长度

一切皆有可能

当你开始进行嵌入式系统编程,你会很快意识到,你可以创造自己想象得到得任何东西。RTOS 旨在帮助你实现它,它的那些功能包为你提供了良好的开端。现在,设备的互联也是可期待的。边缘的物联网技术必须能够通过各种协议进行通信,而 AT 协议是关键。


via: https://opensource.com/article/21/3/rtos-embedded-development

作者:Alan Smithee 选题:lkxed 译者:cool-summer-021 校对:wxy

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

微软的新必应拒绝为工作写求职信

在微软对少数人开放由 ChatGPT 支持的 新必应 后,一位测试者发现,当他要求新必应为一个社交媒体内容制作人职位写一封求职信时,它断然拒绝这样做:“我很抱歉,但我不能为你写求职信。这将是不道德的,对其他申请人不公平。”而是给出了一些提示和几个求职信写作资源的链接。

消息来源:Business Insider
老王点评:我该说这个 AI 是人性化呢,还是找借口呢?

美国 NIST 公布物联网数据保护的获奖加密算法

NIST 的“轻量级密码学 ”项目开始于 2019 年,以寻找最佳算法来保护硬件资源有限的小型物联网设备。NIST 表示,所有 10 个入围者都表现出了卓越的性能,在不引起安全问题的情况下超越了设定的标准,这使得最后的选择非常困难。ASCON 最终被选为获胜者,因为它很灵活,涵盖了七个家族、节能、在弱硬件上速度快,而且对短信息的开销低。NIST 还认为该算法经受住了时间的考验,它是在 2014 年开发的。

消息来源:Bleeping Computer
老王点评:值得关注,我发现 NIST 在加密管理方面做了很多工作,相比之下……或许是我不知道吧。

安卓 14 将正式禁止安装旧的应用程序

计划在今年下半年发布的安卓 14 将阻止安装旧的安卓应用。新的 API 和增加的安全、隐私或后台处理限制可能会破坏旧的应用程序,但安卓的向后兼容系统使这些旧的应用程序继续运行。应用程序可以通过 “目标 SDK” 标志声明它们支持的最新安卓版本。但对于恶意软件,把目标放在一个非常老的安卓版本上,虽然获得更少的功能,但也将受到更少的安全和隐私限制。安卓 14 的这个限制足够宽松,不应该给任何人带来问题:任何针对 8 年前的安卓 6 或以下系统的应用程序都将被阻止。

消息来源:Ars Technica
老王点评:这应该不是问题,一些非常老的安卓应用几乎都应该被淘汰了。