2020年7月

RTOS 之类的实时嵌入式操作系统使嵌入式系统的编程更简单

物联网(IoT)无处不在,它意味着几乎所有的产品,从冰箱到口袋手表,都可以连网。为了实现这个目标,每个产品都需要拥有一个嵌入式计算机来运行网络栈,有些产品几乎是小的不可思议。这就是嵌入式软件出现的场景:现代科技打造的非常小的计算机,硬编码到硬件芯片,不需要任何板外处理器、内存或者存储盘。

就传统视角而言,这种场景意味着没有操作系统可用,但是因为种种 原因,开发者发现,类似于 RTOS 之类的实时嵌入式操作系统能让嵌入式系统的编程变得非常简单。

虽然 RT-Thread 嵌入式操作系统致力于鼓励程序员新手进入物联网领域,但并非所有的人都具备使用 C 语言硬编码微芯片的能力。幸运的是,MicroPython 通过让开发者创建运行于嵌入式系统的 Python 代码的方式,逐渐填补了这个鸿沟。为了让整个过程更简单,RT-Thread 有一个可以用于 VSCode 和 VSCodium 的插件,为开发者提供了物联网方面的开发环境。其部分特性包括:

  • 方便的连接方式,可以很容易的通过串口、网络或者 USB 连接到开发板(如果你使用过 Arduino,肯定会很熟悉这个流程)。
  • 支持上传文件或目录到开发板。
  • 支持基于 MicroPython 的代码,而且具有智能的代码补完、语法检查功能。
  • 支持 MicroPython REPL 交互式环境。
  • 丰富的示例代码和演示程序。
  • 完整的工程同步功能。
  • 快速运行内存中的程序代码。
  • 运行函数的代码片段。
  • 支持主流的 MicroPython 开发板。
  • 支持 Linux 和 Windows 操作系统,并经过充分测试。

准备

在开始之前,如果你使用的是 Windows 操作系统,那么必须保证 VSCode 的默认终端是 PowerShell。运行 VSCodium,从 “Terminal” 菜单项启动一个终端. 在显示在 VSCodium 窗口底部的终端界面,从下拉菜单顶端选择 “PowerShell”。 不论你是在 Windows 还是 Linux 系统下工作,必须保证安装了 Python 3(在 Linux 上,它可能已经安装了,否则可以通过软件库安装它)。

还要安装的是微软提供的通用 VSCode Python 插件。安装方法是点击 “File” 菜单,找到 “Preferences” 子菜单,从中打开 “Extensions” 面板。在扩展中,搜索 “Python”,找到来自微软的 Python 插件。

 title=

当然,在上述操作之前,你要先正确安装 VSCodiumVSCode

安装插件

安装 MicroPython 开发插件的方法与安装 Python 插件一样,点击 “File” 菜单,找到 “Preferences” 子菜单,选择 “Extensions”。

在扩展中,搜索 “MicroPython”,安装 RT-Thread 插件。

 title=

使用插件

你的开发板必须能访问串口,这需要组策略的允许。你可能需要将自己的账户加入该组,通常在默认情况下你的账户可能并不在该组。首先,确认你的账户不在 “dialout” 组:

$ groups
tux users

本例中,用户“tux”只是“tux”组和“users”组的成员,所以需要将用户“tux”添加到“dialout”组:

$ sudo usermod --append --groups dialout tux

退出登录或重启以载入你新的组权限。

创建 MicroPython 工程

MicroPython 开发的第一步是创建 MicroPython 工程用来编写和运行代码。使用 MicroPython 插件创建工程的方法是,点击左下方的 “Create MicroPython project” 按钮。

 title=

之后会有一些提示,让你选择创建空白工程还是包含例程的工程。

连接到开发板

点击 VSCodium 左下方的 “Connection” 按钮,进行 VSCodium 与开发板的连接,在弹出的列表中,选择要连接的物理设备。

查看例程

MicroPython 插件提供了许多例程和例库,供学习和调用。获取例程的过程是,激活 MicroPython 之后,VSCodium 左侧按钮条会出现“新建”快捷图标,点击该图标就可以了。点击“文档”快捷图标,会显示例程文件列表;点击“文件夹”快捷图标,会显示例库列表。

 title=

直接在开发板上运行 MicroPython 文件

在 VSCodium 中可以通过在开发板上运行单个程序文件,很方便快捷的进行程序调试。快捷键 Alt+Q 会触发一个特定的插件,该插件会将当前的 Python 文件上传到开发板内存中。你还可以在当前 Python 文档界面点击右键,然后选择 “Run the MicroPython file directly on the device” 实现同样的功能。

 title=

如果你需要以不上传代码的方式检查一组代码,可以使用“代码片段”功能。要运行 MicroPython REPL 环境中的代码片段,在编辑器中选中要运行的片段,右键菜单中点击 “Execute the selected MicroPython code on the device” (也可以使用 Alt+Q 快捷键)。

加载文件和目录到开发板

如果需要加载文件或目录到开发板,有现成的方法可用:选中工程中要加载到开发板的文件或目录,在选中的对象上右键,点击右键菜单中的 “Download the file/folder to the device”。

注意,如果开发板中已有与要加载的文件或目录同名者,加载操作将导致开发板原有的内容被覆盖。

在 REPL 环境中运行 os.listdir() 命令,可以检查文件和目录是否成功加载。当然,也可以通过相应的命令删除 REPL 中的文件或目录。

删除文件的命令如下:

os.remove('file_to_delete')

删除目录的命令如下:

os.rmdir('folder_to_delete')

工程的同步

点击左下角“同步”按钮可以启动工程同步,该操作将把本地工程中所有的文件和目录同步到开发板的文件系统。建议在完成程序调试之后进行该操作,调试过程中不需要频繁进行同步操作。

工程的同步操作完成后,开发板上的文件列表可以在 “Device Files List” 列看到。

放手尝试

RT-Thread 以开源的方式发布 MicroPython 插件,意在为新老开发者提供帮助,它的很多特性,如代码自动补全等,与开源插件之间互有影响和促进。你如果想为嵌入式系统或物联网系统编写软件,这就是最简单的方式,没有之一。


via: https://opensource.com/article/20/7/python-rt-thread

作者:Seth Kenlon 选题:lujun9972 译者:silentdawn-zz 校对:wxy

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

Foliate 是一款简洁、优雅的开源电子书阅读器,可在 Linux 桌面上提供类似 Kindle 的阅读体验。

虽然我们已经有了一个 Linux 最佳电子书阅读器的列表,但最近我遇到了另一个 Linux 电子书阅读器。它叫 Foliate

Foliate 是一个现代的 GTK 电子书查看器,它有许多基本功能。如果你拥有亚马逊 Kindle 或其他电子书阅读器,那么你可能会想念那种在桌面上阅读的体验。

Foliate 解决了那些抱怨。Foliate 会显示书的估计剩余阅读时间和页数。你可以添加书签、高亮文本和添加注释。你可以导出数据,也可以轻松同步它们。

你也可以使用维基词典和维基百科查询单词。你可以在页面视图和滚动视图之间切换。它还有几个主题,以满足你的阅读偏好。

最棒的是,它正在积极维护和开发。

Foliate 的功能

让我们来看看 Foliate 提供的所有功能:

  • 支持 .epub、.mobi、.azw、未打包的 EPUB 文件、文本文件、漫画存档(cbr、.cbz、.cbt、.cb7),小说书(.fb2、.fb2.zip)和 .azw3 文件。它不支持 PDF 文件。
  • 它让你可以在双页浏览模式下阅读电子书,并提供滚动查看模式。
  • 能够自定义字体、行距、边距和亮度。
  • 图书馆视图,显示最近的书籍和阅读进度。
  • 默认主题包括浅色、棕褐色、深色、Solarized 深色/浅色、Gruvbox 浅色/深色、灰色、Nord 和反转模式。
  • 你还可以添加自定义主题调整电子书浏览器的外观。
  • 带有章节标记的阅读进度滑块。
  • 书签和注释支持。
  • 能够在书中查找文本。
  • 能够放大和缩小。
  • 启用/禁用侧边栏进行导航。
  • 使用 维基词典维基百科 快速查找字典
  • 使用谷歌翻译翻译文字
  • 触摸板手势,使用两指滑动即可翻页
  • 使用 eSpeak NGFestival 支持文字转语音

在 Linux 上安装 Foliate

对于基于 Ubuntu 和 Debian 的 Linux 发行版,你可以从它的 GitHub 发布页面获取 .deb 文件。只需双击即可从 deb 文件安装应用

对于 Fedora、Arch、SUSE 等其他 Linux 发行版。Foliate 可提供 FlatpakSnap 包。如果你不知道如何使用它们,那么你可以按照我们使用 flatpak使用 snap 包指南来开始使用。

如果需要,你可以浏览它的 GitHub 页面以从源代码开始构建。

总结

我使用 GitHub 上提供的最新 .deb 文件在 Pop!\_OS 19.10 上进行了尝试,并且效果很好。我不喜欢在桌面上阅读很久,但我喜欢它的功能。

你是否尝试过 Foliate?请随时分享你的经验。


via: https://itsfoss.com/foliate-ebook-viewer/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

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

每周关注开源社区和行业趋势。

我在一家采用开源软件开发模型的企业软件公司任高级产品营销经理,我的一部分职责是为产品营销人员、经理和其他相关人定期发布有关开源社区、市场和业界发展趋势的更新。以下是该更新中我和他们最喜欢的五篇文章。

《开放源码建设者:入门》

"最后,我发现自己想要自己修改代码,"Liz 说。她的第一个贡献是为 Django 框架做了一个授权扩展。她补充说:"我记得当时我很担心维护者可能不希望一个完全陌生的人做的改动,所以当它被接受时,我感到很兴奋,也很欣慰……得到认可,甚至感谢你的贡献,这种感觉总是很好。"

分析: 这一系列对开源维护者的采访(引自 Liz Rice)交汇了跳入开源领域的动机和经验。这也是对天才独狼开发者神话的一个点赞,你可以自己走很远的路,但如果你知道如何与其他人很好地合作,你会走得更远,建立更好的东西。如果你知道如何说服和激励他们,你会走得更远。

《Fluent Bit v1.5:轻量级和高性能日志处理器》

本次主要版本的最大亮点之一是不同公司与 Fluent Bit 核心维护者的联合工作,为 Google、Amazon、LogDNA、New Relic 和 Sumo Logic 等公司内部提供的可观察性云服务带来了改进和新的连接器。

分析:“从不同来源收集数据/日志,统一并将其发送到多个目的地”是一项繁琐的任务,但这是超大规模企业及其客户共同的任务。证据 A:一个开源工作完全如其预期的典型例子。祝贺 Fluent Bit 团队的这次发布!

《Kubernetes 如何让 Nubank 工程师每周部署 700 次》

因此,生产环境的部署时间从 90 分钟变成了 15 分钟。而 Nobre 说,这是“最主要的好处,因为它有助于开发人员的体验”。如今,Nubank 的工程师每周部署 700 次。“对于一家银行来说,你会说这太疯狂了,”Capaverde 笑着说。“但这并不疯狂,因为有了 Kubernetes 和金丝雀部署,回滚变化更容易,因为部署速度也更快。人们的出货频率更高,更有信心。”

分析: 我觉得这是个赢家,也是个输家。当然,他们降低了做出改变的成本,以一种让人们更有信心去尝试的方式。但他们的开发人员不能再在等待部署完成的同时跑 10 公里,现在只能在一次 TED 演讲中凑合。

希望你喜欢这个列表,下周再见。


via: https://opensource.com/article/20/7/open-source-industry-trends

作者:Tim Hildred 选题:lujun9972 译者:wxy 校对:wxy

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

Meow 攻击自动删除不安全的 Elasticsearch 数据库

有攻击者使用自动脚本扫描开放的不安全的 Elasticsearch 和 MongoDB 数据库,找到之后直接将其删除,不解释,不留下任何通知。至今已经有大约 4000 个数据库遭到删除。攻击者在日志里留下了 $randomstring-meow 的信息,因此这次攻击被称为 Meow 攻击。

来源:solidot

拍一拍:用户没有安全习惯固然是一个根本原因,但是作为软件产品自身没有默认强制安全措施埋下了祸根。

OpenJDK 项目从 Mercurial 迁移到 GitHub

预计迁移将在 2020 年 9 月完成。OpenJDK 从 2008 年起使用 Mercurial 管理源代码,如今部分 OpenJDK 项目如 Loom、Valhalla 和 JMC 已经迁移到 GitHub,还有部分项目正在迁移中,而到 9 月份 OpenJDK 主线也将正式加入进来。

来源:solidot

拍一拍:看来版本控制系统的巨头化已经不可避免,而这会阻碍版本控制产品和模式的发展。

Zstd 显著提升 Linux 内核镜像压缩效率

Facebook 工程师 Nick Terrell 近日向 Linux 内核提交了使用 Zstd 压缩 Linux 内核镜像的补丁,这些补丁显示了使用 Zstd 对内核、ramdisk 和 initramfs 进行压缩操作具备巨大潜力。在 x86\_64 硬件上,当初始 RAM 文件系统将压缩算法从 XZ 切换到 Zstd 时,解压时间从 12 秒下降到只需 3 秒。此外,这将有助于清理更多的内核代码,因为 Bzip2 和 LZMA 目前并没有在内核树之外的其他地方使用。

来源:开源中国

拍一拍:清理一些不合时宜的算法和惯例才能与时俱进。

使用 NumPy、SciPy、Scikit-Image 和 Astropy 探索宇宙

天文学与 Python

对科学界而言,尤其是对天文学界来说,Python 是一种伟大的语言工具。各种软件包,如 NumPySciPyScikit-ImageAstropy,(仅举几例) ,都充分证明了 Python 对天文学的适用性,而且有很多用例。(NumPy、Astropy 和 SciPy 是 NumFOCUS 提供资金支持的项目;Scikit-Image 是个隶属项目)。我在十几年前脱离天文研究领域,成为了软件开发者之后,对这些工具包的演进一直很感兴趣。我的很多前天文界同事在他们的研究中,使用着前面提到的大部分甚至是全部工具包。以我为例,我也曾为位于智利的超大口径望远镜(VLT)上的仪器编写过专业天文软件工具包。

最近令我吃惊的是,Python 工具包竟然演进到如此好用,任何人都可以轻松编写 数据还原 data reduction 脚本,产生出高质量的数据产品。天文数据易于获取,而且大部分是可以公开使用的,你要做的只是去寻找相关数据。

比如,负责 VLT 运行的 ESO,直接在他们的网站上提供数据下载服务,只要访问 www.eso.org/UserPortal 并在首页创建用户就可以享有数据下载服务。如果你需要 SPHERE 数据,可以下载附近任何一个包含 系外行星 exoplanet 或者 原恒星盘 proto-stellar discs 的恒星的全部数据集。对任何 Python 高手而言,通过还原数据发现深藏于噪声中的行星或者原恒星盘,实在是件令人兴奋的事。

我鼓励你下载 ESO 或其它天文影像数据,开启你的探索历程。这里提供几条建议:

  1. 首先要有一个高质量的数据集。看一些有关包含系外行星或者原恒星盘的较近恒星的论文,然后在 http://archive.eso.org/wdb/wdb/eso/sphere/query 之类的网站检索数据。需要注意的是,前述网站上的数据有的标注为红色,有的标注为绿色,标注为红色的数据是尚未公开的,在相应的“发布日期”处会注明数据将来公开的时间。
  2. 了解一些用于获取你所用数据的仪器的信息。尽量对数据的获取有一个基本的理解,对标准的数据还原之后应该是什么样子做到心中有数。所有的望远镜和仪器都有这方面的文档供公开获取。
  3. 必须考虑天文数据的标准问题,并予以校正:
1. 数据以 FITS 格式文件保存。需要使用 `pyfits` 或者 `astropy` (包含 `pyfits` )将其读入到 `NumPy` 数组。有些情况下,数据是三维的,需要沿 z 轴使用 `numpy.median` 将数据转换为二维数组。有些 SPHERE 数据在同一幅影像中包含了同一片天空的两份拷贝(各自使用了不同的滤波器),这时候需要使用 **索引** 和 **切片** 将它们分离出来。
2. <ruby> 全黑图 <rt>  master dark </rt></ruby>和<ruby> 坏点图 <rt>  bad pixel map </rt></ruby>。所有仪器都有快门全关(完全无光)状态拍摄的特殊图片,使用 **NumPy 掩膜数组** 从中分离出坏点图。坏点图非常重要,你在合成最终的清晰图像过程中,需要持续跟踪坏点。有些情况下,这还有助于你从原始科学数据中扣除暗背景的操作。
3. 一般情况下,天文仪器还要拍<ruby> 标准响应图 <rt>  master flat frame </rt></ruby>。这是对均匀的单色标准光源拍摄的一张或者一组图片。你需要将所有的原始数据除以标准响应之后再做后续处理(同样,使用 Numpy 掩膜数组实现的话,这仅仅是一个简单的除法运算)。
4. 对行星影像,为了使行星在明亮恒星背景下变得可见,需要仰仗<ruby> 日冕仪 <rt>  coronagraph </rt></ruby>和<ruby> 角差分成像 <rt>  angular differential imaging </rt></ruby>技术。这一步需要识别影像的光学中心,这是比较棘手的环节之一,过程中要使用 `skimage.feature.blob_dog` 从原始影像中寻找一些人工辅助影像作为帮助。
  1. 要有耐心。理解数据格式并弄清如何操作需要一些时间,绘出像素数据曲线图或者统计图有助于你的理解。贵在坚持,必有收获!你会从中学到很多关于图像数据及其处理的知识。

综合应用 NumPy、SciPy、Astropy、scikit-image 及其它工具,结合耐心和恒心,通过分析大量可用的天文数据分析实现重大的发现是非常有可能的。说不定,你会成为某个之前被忽略的系外行星的第一发现者呢。祝你好运!


NumFOCUS 是个非盈利组织,维护着一套科学计算与数据科学方面的杰出开源工具集。如果想了解我们的任务及代码,可以访问 numfocus.org。如果你有兴趣以个人身份加入 NumFOCUS 社区,可以关注你所在地区的 PyData 活动

本文基于 Pivigo CTO Ole Moeller-Nilsson 的一次 谈话,最初发布于 NumFOCUS 的博客,蒙允再次发布。如果你有意支持 NumFOCUS,可以 捐赠,也可以参与遍布全球的 PyData 活动 中你身边的那些。


via: https://opensource.com/article/19/10/python-astronomy-open-data

作者:Gina Helfrich, Ph.D. 选题:lujun9972 译者:silentdawn-zz 校对:wxy

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

持续集成和持续交付是由测试驱动的。以下是如何做到的。

“如果一切似乎都在控制之中,那只是你走的不够快而已。” —Mario Andretti

测试自动化是指在软件开发过程中尽可能早、尽可能快地持续关注检测缺陷、错误和 bug。这是通过使用那些追求质量为最高价值的工具完成的,它们旨在确保质量,而不仅仅是追求质量。

持续集成/持续交付(CI/CD)解决方案(也称为 DevOps 管道)最引人注目的功能之一是可以更频繁地进行测试,而又不会给开发人员或操作人员增加更多的手动工作。让我们谈谈为什么这很重要。

为什么要在 CI/CD 中实现自动化测试?

敏捷团队要更快的迭代,以更高的速度交付软件和客户满意度,而这些压力可能会危及质量。全球竞争制造了对缺陷的低容忍度,同时也增加了敏捷团队的压力,要求软件交付的迭代更快。减轻这种压力的行业解决方案是什么?是 DevOps

DevOps 是一个大概念,有很多定义,但是对 DevOps 成功至关重要的一项技术是 CI/CD。通过软件开发流程设计一个连续的改进循环,可以为测试带来新的机会。

这对测试人员意味着什么?

对于测试人员,这通常意味着他们必须:

  • 更早且更频繁地进行测试(使用自动化)
  • 持续测试“真实世界”的工作流(自动和手动)

更具体地说,任何形式的测试,无论是由编写代码的开发人员运行还是由质量保证工程师团队设计,其作用都是利用 CI/CD 基础架构在快速推进的同时提高质量。

测试人员还需要做什么?

具体点说,测试人员负责:

  • 测试新的和现有的软件应用
  • 根据系统要求评估软件来验证和确认功能
  • 利用自动化测试工具来开发和维护可重复使用的自动化测试
  • 与 scrum 团队的所有成员合作,了解正在开发的功能以及实施的技术设计,以设计和开发准确、高质量的自动化测试
  • 分析记录在案的用户需求,并针对中等到高度复杂的软件或 IT 系统制定或协助设计测试计划
  • 开发自动化测试,并与功能团队一起审查和评估测试方案
  • 与技术团队合作,确定在开发环境中自动化测试的正确方法
  • 与团队合作,通过自动化测试来了解和解决软件问题,并回应有关修改或增强的建议
  • 参与需求梳理、估算和其他敏捷 scrum 仪式
  • 协助制定标准和流程,以支持测试活动和材料(例如脚本、配置、程序、工具、计划和结果)

测试是一项艰巨的工作,但这是有效构建软件的重要组成部分。

哪些持续测试很重要?

你可以使用多种测试。不同的类型并不是学科之间的牢固界限。相反,它们是表示如何测试的不同方式。比较测试类型不太重要,更重要的是对每一种测试类型都要有覆盖率。

  • 功能测试: 确保软件具有其要求的功能
  • 单元测试: 独立测试软件的较小单元/组件以检查其功能
  • 负载测试: 测试软件在重负载或使用期间的性能
  • 压力测试: 确定软件承受压力(最大负载)时的断点
  • 集成测试: 测试组合或集成的一组组件的输出
  • 回归测试: 当修改任意组件(无论多么小),测试整个应用的功能

总结

任何包含持续测试的软件开发过程都将朝着建立关键反馈环路的方向发展,以实现快速和构建有效的软件。最重要的是,该实践将质量内置到 CI/CD 管道中,并意味着了解在软件开发生命周期中提高速度同时减少风险和浪费之间的联系。


via: https://opensource.com/article/20/7/automation-testing-cicd

作者:Taz Brown 选题:lujun9972 译者:geekpi 校对:wxy

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