2021年2月

随着对同理心认识的提高和传播同理心的激励,开源生产力将得到提升,协作者将会聚拢,可以充分激发开源软件开发的活力。

 title=

开源开发的协调创新精神和社区精神改变了世界。Jim Whitehurst 在《开放式组织》中解释说,开源的成功源于“将人们视为社区的一份子,从交易思维转变为基于承诺基础的思维方式”。 但是,开源开发模型的核心仍然存在障碍:它经常性地缺乏人类的 同理心 empathy

同理心是理解或感受他人感受的能力。在开源社区中,面对面的人际互动和协作是很少的。任何经历过 GitHub 拉取请求 Pull request 议题 Issue 的开发者都曾收到过来自他们可能从未见过的人的评论,这些人往往身处地球的另一端,而他们的交流也可能同样遥远。现代开源开发就是建立在这种异步、事务性的沟通基础之上。因此,人们在社交媒体平台上所经历的同类型的网络欺凌和其他虐待行为,在开源社区中也不足为奇。

当然,并非所有开源交流都会事与愿违。许多人在工作中发展出了尊重并秉持着良好的行为标准。但是很多时候,人们的沟通也常常缺乏常识性的礼仪,他们将人们像机器而非人类一般对待。这种行为是激发开源创新模型全部潜力的障碍,因为它让许多潜在的贡献者望而却步,并扼杀了灵感。

恶意交流的历史

代码审查中存在的敌意言论对开源社区来说并不新鲜,它多年来一直被社区所容忍。开源教父 莱纳斯·托瓦尔兹 Linus Torvalds 经常在代码不符合他的标准时抨击 Linux 社区,并将贡献者赶走。埃隆大学计算机科学教授 Megan Squire 借助机器学习分析了托瓦尔兹的侮辱行为,发现它们在四年内的数量高达数千次。2018 年,莱纳斯因自己的不良行为而自我放逐,责成自己学习同理心,道歉并为 Linux 社区制定了行为准则。

2015 年,Sage Sharp 虽然在技术上受人尊重,但因其缺乏对个人的尊重,被辞去了 FOSS 女性外展计划中的 Linux 内核协调员一职。

PR 审核中存在的贬低性评论对开发者会造成深远的影响。它导致开发者在提交 PR 时产生畏惧感,让他们对预期中的反馈感到恐惧。这吞噬了开发者对自己能力的信心。它逼迫工程师每次都只能追求完美,从而减缓了开发速度,这与许多社区采用的敏捷方法论背道而驰。

如何缩小开源中的同理心差距?

通常情况下,冒犯的评论常是无意间的,而通过一些指导,作者则可以学会如何在不带负面情绪的情况下表达意见。GitHub 不会监控议题和 PR 的评论是否有滥用内容,相反,它提供了一些工具,使得社区能够对其内容进行审查。仓库的所有者可以删除评论和锁定对话,所有贡献者可以报告滥用和阻止用户。

制定社区行为准则可为所有级别的贡献者提供一个安全且包容的环境,并且能让所有级别的贡献者参与并定义降低协作者之间冲突的过程。

我们能够克服开源中存在的同理心问题。面对面的辩论比文字更有利于产生共鸣,所以尽可能选择视频通话。以同理心的方式分享反馈,树立榜样。如果你目睹了一个尖锐的评论,请做一个指导者而非旁观者。如果你是受害者,请大声说出来。在面试候选人时,评估同理心能力,并将同理心能力与绩效评估和奖励挂钩。界定并执行社区行为准则,并管理好你的社区。

随着对同理心认识的提高和传播同理心的激励,开源生产力将得到提升,协作者将会聚拢,可以充分激发开源软件开发的活力。


via: https://opensource.com/article/21/2/open-source-empathy

作者:Bronagh Sorota 选题:lujun9972 译者:scvoet 校对:wxy

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

Filmulator 是一个开源的具有库管理功能的 raw 照片编辑应用,侧重于简单、易用和简化的工作流程。

Filmulator:适用于 Linux(和 Windows)的 raw 图像编辑器

Linux 中有一堆 raw 照片编辑器Filmulator 就是其中之一。Filmulator 的目标是仅提供基本要素,从而使 raw 图像编辑变得简单。它还增加了库处理的功能,如果你正在为你的相机图像寻找一个不错的应用,这是一个加分项。

对于那些不知道 raw 的人来说,raw 图像文件是一个最低限度处理、未压缩的文件。换句话说,它是未经压缩的数字文件,并且只经过了最低限度的处理。专业摄影师更喜欢用 raw 文件拍摄照片,并自行处理。普通人从智能手机拍摄照片,它通常被压缩为 JPEG 格式或被过滤。

让我们来看看在 Filmulator 编辑器中会有什么功能。

Filmulator 的功能

Filmulator interface

Filmulator 宣称,它不是典型的“胶片效果滤镜” —— 这只是复制了胶片的外在特征。相反,Filmulator 从根本上解决了胶片的魅力所在:显影过程。

它模拟了胶片的显影过程:从胶片的“曝光”,到每个像素内“银晶”的生长,再到“显影剂”在相邻像素之间与储槽中大量显影剂的扩散。

Fimulator 开发者表示,这种模拟带来了以下好处:

  • 大的明亮区域变得更暗,压缩了输出动态范围。
  • 小的明亮区域使周围环境变暗,增强局部对比度。
  • 在明亮区域,饱和度得到增强,有助于保留蓝天、明亮肤色和日落的色彩。
  • 在极度饱和的区域,亮度会被减弱,有助于保留细节,例如花朵。

以下是经 Filmulator 处理后的 raw 图像的对比,以自然的方式增强色彩,而不会引起色彩剪切。

原图

处理后

在 Ubuntu/Linux 上安装 Filmulator

Filmulator 有一个 AppImage 可用,这样你就可以在 Linux 上轻松使用它。使用 AppImage 文件真的很简单。下载后,使它可执行,然后双击运行。

对 Windows 用户也有一个 Windows 版本。除此之外,你还可以随时前往它的 GitHub 仓库查看它的源代码。

有一份小文档来帮助你开始使用 Fimulator。

总结

Fimulator 的设计理念是为任何工作提供最好的工具,而且只有这一个工具。这意味着牺牲了灵活性,但获得了一个大大简化和精简的用户界面。

我连业余摄影师都不是,更别说是专业摄影师了。我没有单反或其他高端摄影设备。因此,我无法测试和分享我对 Filmulator 的实用性的经验。

如果你有更多处理 raw 图像的经验,请尝试下 Filmulator,并分享你的意见。有一个 AppImage 可以让你快速测试它,看看它是否适合你的需求。


via: https://itsfoss.com/filmulator/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

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

迈阿密考虑用比特币支付工人的工资

报道,这个计划允许以 BTC 支付部分或全部工资,该市委员会以 4:1 批准了该决议。迈阿密市长表示,“这让我们的居民可以用比特币支付费用。”该提案还被提交给州立法机构,以允许 BTC 作为可以接受的货币。

虽然这是一个好的迹象,但是以 BTC 作为一种日常流动的货币来使用,似乎并不是合适的做法。

CloudLinux 为树莓派提供了零停机时间的实时补丁

CloudLinux 宣布,其 KernelCare 服务现在支持树莓派平台。这是一项免费服务,以确保物联网设备和组件自动更新并始终可用。这为物联网项目提供了更好的保护,可以让新发现的漏洞被修复,而不是容易成为黑客的目标。

目前该服务支持 64 位 ARM 平台的 Ubuntu,并将很快支持 Debian 和 Raspbian。目前支持树莓派 4 和树莓派 3 和 2 的后续型号。

实时补丁的内核一般用在重要的生产服务器上,不过对于 IoT 领域来说也相当重要。采用树莓派作为 IoT 设备使用,虽然是个小众市场,但是颇有意义。

微软在量子计算机上的押注失败

多年来,微软一直在押注某个名叫“马约拉纳费米子”的量子粒子,以构建一台能够实际运行的量子计算机。2018 年的时候,受微软资助的一支以色列研究团队宣布,他们已证明这种粒子确实存在于过冷的半导体纳米线中。然而,这篇 2018 年的论文被撤稿,意味着微软从“光明前景”直接跌落到了“重头再来”。与此同时,使用更常规技术的谷歌,已经在 2019 年宣布了实现了量子优势。

在量子计算最终形成更大规模的应用前景之前,技术的道路总是曲折的。就是不知道这篇被撤销的论文是否涉及学术造假。

开始使用这个功能强大且通用的数据库吧。

 title=

应用程序经常需要保存数据。无论你的用户是创建简单的文本文档、复杂的图形布局、游戏进度还是错综复杂的客户和订单号列表,软件通常都意味着生成数据。有很多方法可以存储数据以供重复使用。你可以将文本转储为 INI、YAML、XML 或 JSON 等配置格式,可以输出原始的二进制数据,也可以将数据存储在结构化数据库中。SQLite 是一个自包含的、轻量级数据库,可轻松创建、解析、查询、修改和传输数据。

SQLite 专用于 公共领域从技术上讲,这意味着它没有版权,因此不需要许可证。如果你需要许可证,则可以 购买所有权担保。SQLite 非常常见,大约有 1 万亿个 SQLite 数据库正在使用中。在每个基于 Webkit 的 Web 浏览器,现代电视机,汽车多媒体系统以及无数其他软件应用程序中,Android 和 iOS 设备, macOS 和 Windows 10 计算机,大多数 Linux 系统上都包含多个这种数据库。

总而言之,它是用于存储和组织数据的一个可靠而简单的系统。

安装

你的系统上可能已经有 SQLite 库,但是你需要安装其命令行工具才能直接使用它。在 Linux上,你可能已经安装了这些工具。该工具提供的命令是 sqlite3 (而不仅仅是 sqlite)。

如果没有在你的 Linux 或 BSD 上安装 SQLite,你则可以从软件仓库中或 ports 树中安装 SQLite,也可以从源代码或已编译的二进制文件进行下载并安装

在 macOS 或 Windows 上,你可以从 sqlite.org 下载并安装 SQLite 工具。

使用 SQLite

通过编程语言与数据库进行交互是很常见的。因此,像 Java、Python、Lua、PHP、Ruby、C++ 以及其他编程语言都提供了 SQLite 的接口(或“绑定”)。但是,在使用这些库之前,了解数据库引擎的实际情况以及为什么你对数据库的选择很重要是有帮助的。本文向你介绍 SQLite 和 sqlite3 命令,以便你熟悉该数据库如何处理数据的基础知识。

与 SQLite 交互

你可以使用 sqlite3 命令与 SQLite 进行交互。 该命令提供了一个交互式的 shell 程序,以便你可以查看和更新数据库。

$ sqlite3
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

该命令将你使你处于 SQLite 的子 shell 中,因此现在的提示符是 SQLite 的提示符。你以前使用的 Bash 命令在这里将不再适用。你必须使用 SQLite 命令。要查看 SQLite 命令列表,请输入 .help

sqlite> .help
.archive ...             Manage SQL archives
.auth ON|OFF             SHOW authorizer callbacks
.backup ?DB? FILE        Backup DB (DEFAULT "main") TO FILE
.bail ON|off             Stop after hitting an error.  DEFAULT OFF
.binary ON|off           Turn BINARY output ON OR off.  DEFAULT OFF
.cd DIRECTORY            CHANGE the working directory TO DIRECTORY
[...]

这些命令中的其中一些是二进制的,而其他一些则需要唯一的参数(如文件名、路径等)。这些是 SQLite Shell 的管理命令,不是用于数据库查询。数据库以结构化查询语言(SQL)进行查询,许多 SQLite 查询与你从 MySQLMariaDB 数据库中已经知道的查询相同。但是,数据类型和函数有所不同,因此,如果你熟悉另一个数据库,请特别注意细微的差异。

创建数据库

启动 SQLite 时,可以打开内存数据库,也可以选择要打开的数据库:

$ sqlite3 mydatabase.db

如果还没有数据库,则可以在 SQLite 提示符下创建一个数据库:

sqlite> .open mydatabase.db

现在,你的硬盘驱动器上有一个空文件,可以用作 SQLite 数据库。 文件扩展名 .db 是任意的。你也可以使用 .sqlite 或任何你想要的后缀。

创建一个表

数据库包含一些 table ,可以将其可视化为电子表格。有许多的行(在数据库中称为 记录 record )和列。行和列的交集称为 字段 field

结构化查询语言(SQL)以其提供的内容而命名:一种以可预测且一致的语法查询数据库内容以接收有用的结果的方法。SQL 读起来很像普通的英语句子,即使有点机械化。当前,你的数据库是一个没有任何表的空数据库。

你可以使用 CREATE 来创建一个新表,你可以和 IF NOT EXISTS 结合使用。以便不会破坏现在已有的同名的表。

你无法在 SQLite 中创建一个没有任何字段的空表,因此在尝试 CREATE 语句之前,必须考虑预期表将存储的数据类型。在此示例中,我将使用以下列创建一个名为 member 的表:

  • 唯一标识符
  • 人名
  • 记录创建的时间和日期

唯一标识符

最好用唯一的编号来引用记录,幸运的是,SQLite 认识到这一点,创建一个名叫 rowid 的列来为你自动实现这一点。

无需 SQL 语句即可创建此字段。

数据类型

对于我的示例表中,我正在创建一个 name 列来保存 TEXT 类型的数据。为了防止在没有指定字段数据的情况下创建记录,可以添加 NOT NULL 指令。

name TEXT NOT NULL 语句来创建。

SQLite 中有五种数据类型(实际上是 储存类别):

  • TEXT:文本字符串
  • INTEGER:一个数字
  • REAL:一个浮点数(小数位数无限制)
  • BLOB:二进制数据(例如,.jpeg 或 .webp 图像)
  • NULL:空值

日期和时间戳

SQLite 有一个方便的日期和时间戳功能。它本身不是数据类型,而是 SQLite 中的一个函数,它根据所需的格式生成字符串或整数。 在此示例中,我将其保留为默认值。

创建此字段的 SQL 语句是:datestamp DATETIME DEFAULT CURRENT_TIMESTAMP

创建表的语句

在 SQLite 中创建此示例表的完整 SQL:

sqlite> CREATE TABLE
...> IF NOT EXISTS
...> member (name TEXT NOT NULL,
...> datestamp DATETIME DEFAULT CURRENT_TIMESTAMP);

在此代码示例中,我在语句的分句后按了回车键。以使其更易于阅读。除非以分号(;)终止,否则 SQLite 不会运行你的 SQL 语句。

你可以使用 SQLite 命令 .tables 验证表是否已创建:

sqlite> .tables
member

查看表中的所有列

你可以使用 PRAGMA 语句验证表包含哪些列和行:

sqlite> PRAGMA table_info(member);
0|name|TEXT|1||0
1|datestamp|DATETIME|0|CURRENT_TIMESTAMP|0

数据输入

你可以使用 INSERT 语句将一些示例数据填充到表中:

> INSERT INTO member (name) VALUES ('Alice');
> INSERT INTO member (name) VALUES ('Bob');
> INSERT INTO member (name) VALUES ('Carol');
> INSERT INTO member (name) VALUES ('David');

查看表中的数据:

> SELECT * FROM member;
Alice|2020-12-15 22:39:00
Bob|2020-12-15 22:39:02
Carol|2020-12-15 22:39:05
David|2020-12-15 22:39:07

添加多行数据

现在创建第二个表:

> CREATE TABLE IF NOT EXISTS linux (
...> distro TEXT NOT NULL);

填充一些示例数据,这一次使用小的 VALUES 快捷方式,因此你可以在一个命令中添加多行。关键字 VALUES 期望以括号形式列出列表,而用多个逗号分隔多个列表:

> INSERT INTO linux (distro)
...> VALUES ('Slackware'), ('RHEL'),
...> ('Fedora'),('Debian');

修改表结构

你现在有两个表,但是到目前为止,两者之间没有任何关系。它们每个都包含独立的数据,但是可能你可能需要将第一个表的成员与第二个表中列出的特定项相关联。

为此,你可以为第一个表创建一个新列,该列对应于第二个表。由于两个表都设计有唯一标识符(这要归功于 SQLite 的自动创建),所以连接它们的最简单方法是将其中一个的 rowid 字段用作另一个的选择器。

在第一个表中创建一个新列,以存储第二个表中的值:

> ALTER TABLE member ADD os INT;

使用 linux 表中的唯一标识符作为 member 表中每一条记录中 os 字段的值。因为记录已经存在。因此你可以使用 UPDATE 语句而不是使用 INSERT 语句来更新数据。需要特别注意的是,你首先需要选中特定的一行来然后才能更新其中的某个字段。从句法上讲,这有点相反,更新首先发生,选择匹配最后发生:

> UPDATE member SET os=1 WHERE name='Alice';

member 表中的其他行重复相同的过程。更新 os 字段,为了数据多样性,在四行记录上分配三种不同的发行版(其中一种加倍)。

联接表

现在,这两个表相互关联,你可以使用 SQL 显示关联的数据。数据库中有多种 联接方式,但是一旦掌握了基础知识,就可以尝试所有的联接形式。这是一个基本联接,用于将 member 表的 os 字段中的值与 linux 表的 rowid 字段相关联:

> SELECT * FROM member INNER JOIN linux ON member.os=linux.rowid;
Alice|2020-12-15 22:39:00|1|Slackware
Bob|2020-12-15 22:39:02|3|Fedora
Carol|2020-12-15 22:39:05|3|Fedora
David|2020-12-15 22:39:07|4|Debian

osrowid 字段形成了关联。

在一个图形应用程序中,你可以想象 os 字段是一个下拉选项菜单,其中的值是 linux 表中 distro 字段中的数据。将相关的数据集通过唯一的字段相关联,可以确保数据的一致性和有效性,并且借助 SQL,你可以在以后动态地关联它们。

了解更多

SQLite 是一个非常有用的自包含的、可移植的开源数据库。学习以交互方式使用它是迈向针对 Web 应用程序进行管理或通过编程语言库使用它的重要的第一步。

如果你喜欢 SQLite,也可以尝试由同一位作者 Richard Hipp 博士的 Fossil

在学习和使用 SQLite 时,有一些常用命令可能会有所帮助,所以请立即下载我们的 SQLite3 备忘单


via: https://opensource.com/article/21/2/sqlite3-cheat-sheet

作者:Klaatu 选题:lujun9972 译者:amwps290 校对:wxy

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

这是 Python 之禅特别系列的一部分,重点介绍第十七和十八条原则:困难和容易。

 title=

一门语言并不是抽象存在的。每一个语言功能都必须用代码来实现。承诺一些功能是很容易的,但实现起来就会很麻烦。复杂的实现意味着更多潜在的 bug,甚至更糟糕的是,会带来日复一日的维护负担。

对于这个难题,Python 之禅 中有答案。

如果一个实现难以解释,那就是个坏思路 If the implementation is hard to explain, it's a bad idea

编程语言最重要的是可预测性。有时我们用抽象的编程模型来解释某个结构的语义,而这些模型与实现并不完全对应。然而,最好的释义就是解释该实现

如果该实现很难解释,那就意味着这条路行不通。

如果一个实现易于解释,那它可能是一个好思路 If the implementation is easy to explain, it may be a good idea

仅仅因为某事容易,并不意味着它值得。然而,一旦解释清楚,判断它是否是一个好思路就容易得多。

这也是为什么这个原则的后半部分故意含糊其辞的原因:没有什么可以肯定一定是好的,但总是可以讨论一下。


via: https://opensource.com/article/19/12/zen-python-implementation

作者:Moshe Zadka 选题:lujun9972 译者:wxy 校对:wxy

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

物联网(IoT)的快速发展催生了对跨职能专家进行培养的需求,这些专家可以将传统的网络和基础设施专业知识与数据库和报告技能相结合。

Kevin

如果物联网(IoT)要实现其宏伟的诺言,它将需要大量聪明、熟练、训练有素的工人军团来实现这一切。而现在,这些人将从何而来尚不清楚。

这就是我为什么有兴趣同资产优化软件公司 AspenTech 的产品管理、研发高级总监 Keith Flynn 通邮件的原因,他说,当处理大量属于物联网范畴的新技术时,你需要能够理解如何配置技术和解释数据的人。Flynn 认为,现有的教育机构对物联网特定课程的需求越来越大,这同时也给了以物联网为重点,提供了完善课程的新私立学院机会。

Flynn 跟我说,“在未来,物联网项目将与如今普遍的数据管理和自动化项目有着巨大的不同……未来需要更全面的技能和交叉交易能力,这样我们才会说同一种语言。”

Flynn 补充说,随着物联网每年增长 30%,将不再依赖于几个特定的技能,“从传统的部署技能(如网络和基础设施)到数据库和报告技能,坦白说,甚至是基础数据科学,都将需要一起理解和使用。”

召集所有物联网顾问

Flynn 预测,“受过物联网教育的人的第一个大机会将会是在咨询领域,随着咨询公司对行业趋势的适应或淘汰……有受过物联网培训的员工将有助于他们在物联网项目中的定位,并在新的业务线中提出要求——物联网咨询。”

对初创企业和小型公司而言,这个问题尤为严重。“组织越大,他们越有可能雇佣到不同技术类别的人”Flynn 这样说到,“但对于较小的组织和较小的物联网项目来说,你则需要一个能同时兼顾的人。”

两者兼而有之?还是**一应俱全?**物联网“需要将所有知识和技能组合在一起”,Flynn 说到,“并不是所有技能都是全新的,只是在此之前从来没有被归纳在一起或放在一起教授过。”

未来的物联网专家

Flynn 表示,真正的物联网专业技术是从基础的仪器仪表和电气技能开始的,这能帮助工人发明新的无线发射器或提升技术,以提高电池寿命和功耗。

“IT 技能,如网络、IP 寻址、子网掩码、蜂窝和卫星也是物联网的关键需求”,Flynn 说。他还认为物联网需要数据库管理技能和云管理和安全专业知识,“特别是当高级过程控制(APC)将传感器数据直接发送到数据库和数据湖等事情成为常态时。”

物联网专家又从何而来?

Flynn 说,标准化的正规教育课程将是确保毕业生或证书持有者掌握一套正确技能的最佳途径。他甚至还列出了一个样本课程。“按时间顺序开始,从基础知识开始,比如 [电气仪表] 和测量。然后讲授网络知识,数据库管理和云计算课程都应在此之后开展。这个学位甚至可以循序渐进至现有的工程课程中,这可能需要两年时间……来完成物联网部分的学业。”

虽然企业培训也能发挥作用,但实际上却是“说起来容易做起来难”,Flynn 这样警告,“这些培训需要针对组织的具体努力而推动。”

当然,现在市面上已经有了 大量的在线物联网培训课程和证书课程。但追根到底,这一工作全都依赖于工人自身的推断。

“在这个世界上,随着科技不断改变行业,提升技能是非常重要的”,Flynn 说,“如果这种提升技能的推动力并不是来源于你的雇主,那么在线课程和认证将会是提升你自己很好的一个方式。我们只需要创建这些课程……我甚至可以预见组织将与提供这些课程的高等教育机构合作,让他们的员工更好地开始。当然,物联网课程的挑战在于它需要不断发展以跟上科技的发展。”


via: https://www.networkworld.com/article/3404489/where-are-all-the-iot-experts-going-to-come-from.html

作者:Fredric Paul 选题:lujun9972 译者:Percy (@scvoet) 校对:wxy

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