2020年5月

Pixelorama 是一个跨平台、自由开源的 2D 精灵编辑器。它在一个整洁的用户界面中提供了创建像素艺术所有必要工具。

Pixelorama:开源 Sprite 编辑器

PixeloramaOrama 互动公司的年轻游戏开发人员创建的一个工具。他们已经开发了一些 2D 游戏,其中一些使用了像素艺术。

虽然 Orama 主要从事于游戏开发,但开发人员也创建实用工具,帮助他们(和其他人)创建这些游戏。

自由开源的 精灵 Sprite 编辑器 Pixelorama 就是这样一个实用工具。它构建在 Godot 引擎之上,非常适合创作像素艺术。

Pixelorama screenshot

你看到上面截图中的像素艺术了吗?它是使用 Pixelorama 创建的。这段视频展示了制作上述图片的时间推移视频。

Pixelorama 的功能

以下是 Pixelorama 提供的主要功能:

  • 多种工具,如铅笔、橡皮擦、填充桶、取色器等
  • 多层系统,你可以根据需要添加、删除、上下移动、克隆和合并多个层
  • 支持 Spritesheets
  • 导入图像并在 Pixelorama 中编辑它们
  • 带有 Onion Skinning 的动画时间线
  • 自定义画笔
  • 以 Pixelorama 的自定义文件格式 .pxo 保存并打开你的项目
  • 水平和垂直镜像绘图
  • 用于创建图样的磁贴模式
  • 拆分屏幕模式和迷你画布预览
  • 使用鼠标滚轮缩放
  • 无限次撤消和重做
  • 缩放、裁剪、翻转、旋转、颜色反转和去饱和图像
  • 键盘快捷键
  • 提供多种语言
  • 支持 Linux、Windows 和 macOS

在 Linux 上安装 Pixelorama

Pixelorama 提供 Snap 应用,如果你使用的是 Ubuntu,那么可以在软件中心找到它。

Pixelorama is available in Ubuntu Software Center

或者,如果你在 Linux 发行版上启用了 Snap 支持,那么可以使用此命令安装它:

sudo snap install pixelorama

如果你不想使用 Snap,不用担心。你可以从他们的 GitHub 仓库下载最新版本的 Pixelorama,解压 zip 文件,你会看到一个可执行文件。授予此文件执行权限,并双击它运行应用。

总结

Pixelorama Welcome Screen

在 Pixeloaram 的功能中,它说你可以导入图像并对其进行编辑。我想,这只是对某些类型的文件,因为当我尝试导入 PNG 或 JPEG 文件,程序崩溃了。

然而,我可以像一个 3 岁的孩子那样随意涂鸦并制作像素艺术。我对艺术不是很感兴趣,但我认为这对 Linux 上的数字艺术家是个有用的工具

我喜欢这样的想法:尽管是游戏开发人员,但他们创建的工具,可以帮助其他游戏开发人员和艺术家。这就是开源的精神。

如果你喜欢这个项目,并且会使用它,请考虑通过捐赠来支持他们。It’s FOSS 捐赠了 25 美元,以感谢他们的努力。

你喜欢 Pixelorama 吗?你是否使用其他开源精灵编辑器?请随时在评论栏分享你的观点。


via: https://itsfoss.com/pixelorama/

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

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

我将演示如何利用提供的全球病毒传播的开放数据,使用开源库来创建两个可视效果。

使用 Python 和一些图形库,你可以预测 COVID-19 确诊病例总数,也可以显示一个国家(本文以印度为例)在给定日期的死亡总数。人们有时需要帮助解释和处理数据的意义,所以本文还演示了如何为五个国家创建一个动画横条形图,以显示按日期显示病例的变化。

印度的确诊病例和死亡人数预测

这要分三步来完成。

1、下载数据

科学数据并不总是开放的,但幸运的是,许多现代科学和医疗机构都乐于相互之间及与公众共享信息。关于 COVID-19 病例的数据可以在网上查到,并且经常更新。

要解析这些数据,首先必须先下载。 https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv

直接将数据加载到 Pandas DataFrame 中。Pandas 提供了一个函数 read_csv(),它可以获取一个 URL 并返回一个 DataFrame 对象,如下所示。

import pycountry
import plotly.express as px
import pandas as pd
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
print(df1.head(3))  # 获取数据帧中的前 3 项
print(df1.tail(3))  # 获取数据帧中的后 3 项

数据集的顶行包含列名。

  1. Date
  2. Country
  3. Confirmed
  4. Recovered
  5. Deaths

head 查询的输出包括一个唯一的标识符(不作为列列出)和每个列的条目。

0 2020-01-22 Afghanistan 0 0 0
1 2020-01-22 Albania 0 0 0
1 2020-01-22 Algeria 0 0 0

tail 查询的输出类似,但包含数据集的尾端。

12597 2020-03-31 West Bank and Gaza 119 18 1
12598 2020-03-31 Zambia 35 0 0
12599 2020-03-31 Zimbabwe 8 0 1

从输出中,可以看到 DataFrame(df1)有以下几个列:

  1. 日期
  2. 国家
  3. 确诊
  4. 康复
  5. 死亡

此外,你可以看到 Date 栏中的条目从 1 月 22 日开始到 3 月 31 日。这个数据库每天都会更新,所以你会有当前的值。

2、选择印度的数据

在这一步中,我们将只选择 DataFrame 中包含印度的那些行。这在下面的脚本中可以看到。

#### ----- Step 2 (Select data for India)----
df_india = df1[df1['Country'] == 'India']
print(df_india.head(3))

3、数据绘图

在这里,我们创建一个条形图。我们将把日期放在 X 轴上,把确诊的病例数和死亡人数放在 Y 轴上。这一部分的脚本有以下几个值得注意的地方。

  • plt.rcParams["figure.figsize"]=20,20 这一行代码只适用于 Jupyter。所以如果你使用其他 IDE,请删除它。
  • 注意这行代码:ax1 = plt.gca()。为了确保两个图,即确诊病例和死亡病例的图都被绘制在同一个图上,我们需要给第二个图的 ax 对象。所以我们使用 gca() 来完成这个任务。(顺便说一下,gca 代表 “ 获取当前坐标轴 get current axis ”)

完整的脚本如下所示。

#  Author:- Anurag Gupta # email:- [email protected]
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd

#### ----- Step 1 (Download data)----
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
# print(df1.head(3))  # Uncomment to see the dataframe

#### ----- Step 2 (Select data for India)----
df_india = df1[df1['Country'] == 'India']
print(df_india.head(3))

#### ----- Step 3 (Plot data)----
# Increase size of plot
plt.rcParams["figure.figsize"]=20,20  # Remove if not on Jupyter
# Plot column 'Confirmed'
df_india.plot(kind = 'bar', x = 'Date', y = 'Confirmed', color = 'blue')

ax1 = plt.gca()
df_india.plot(kind = 'bar', x = 'Date', y = 'Deaths', color = 'red', ax = ax1)
plt.show()

整个脚本可在 GitHub 上找到

为五个国家创建一个动画水平条形图

关于 Jupyter 的注意事项:要在 Jupyter 中以动态动画的形式运行,而不是静态 png 的形式,你需要在单元格的开头添加一个神奇的命令,即: %matplotlib notebook。这将使图形保持动态,而不是显示为静态的 png 文件,因此也可以显示动画。如果你在其他 IDE 上,请删除这一行。

1、下载数据

这一步和前面的脚本完全一样,所以不需要重复。

2、创建一个所有日期的列表

如果你检查你下载的数据,你会发现它有一列 Date。现在,这一列对每个国家都有一个日期值。因此,同一个日期会出现多次。我们需要创建一个只具有唯一值的日期列表。这会用在我们条形图的 X 轴上。我们有一行代码,如 list_dates = df[‘Date’].unique()unique() 方法将只提取每个日期的唯一值。

3、挑选五个国家并创建一个 ax 对象。

做一个五个国家的名单。(你可以选择你喜欢的国家,也可以增加或减少国家的数量。)我也做了一个五个颜色的列表,每个国家的条形图的颜色对应一种。(如果你喜欢的话,也可以改一下。)这里有一行重要的代码是:fig, ax = plt.subplots(figsize=(15, 8))。这是创建一个 ax 对象所需要的。

4、编写回调函数

如果你想在 Matplotlib 中做动画,你需要创建一个名为 matplotlib.animation.FuncAnimation 的类的对象。这个类的签名可以在网上查到。这个类的构造函数,除了其他参数外,还需要一个叫 func 的参数,你必须给这个参数一个回调函数。所以在这一步中,我们会写个回调函数,这个回调函数会被反复调用,以渲染动画。

5、创建 FuncAnimation 对象

这一步在上一步中已经部分说明了。

我们创建这个类的对象的代码是:

my_anim = animation.FuncAnimation(fig = fig, func = plot_bar,
                    frames = list_dates, blit = True,
                    interval=20)

要给出的三个重要参数是:

  • fig,必须给出一个 fig 对象,也就是我们之前创建的 fig 对象。
  • func,必须是回调函数。
  • frames,必须包含要做动画的变量。在我们这里,它是我们之前创建的日期列表。

6、将动画保存为 mp4 文件

你可以将创建的动画保存为 mp4 文件。但是,你需要 ffmpeg。你可以用 pip 下载:pip install ffmpeg-python,或者用 conda(在 Jupyter 上):install -c conda-forge ffmpeg

最后,你可以使用 plt.show() 运行动画。请注意,在许多平台上,ffmpeg 可能无法正常工作,可能需要进一步“调整”。

%matplotlib notebook
#  Author:- Anurag Gupta # email:- [email protected]
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from time import sleep

#### ---- Step 1:- Download data
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df = pd.read_csv(URL_DATASET, usecols = ['Date', 'Country', 'Confirmed'])
# print(df.head(3)) # uncomment this to see output

#### ---- Step 2:- Create list of all dates
list_dates = df['Date'].unique()
# print(list_dates) # Uncomment to see the dates

#### --- Step 3:- Pick 5 countries. Also create ax object
fig, ax = plt.subplots(figsize=(15, 8))
# We will animate for these 5 countries only
list_countries = ['India', 'China', 'US', 'Italy', 'Spain']
# colors for the 5 horizontal bars
list_colors = ['black', 'red', 'green', 'blue', 'yellow']

### --- Step 4:- Write the call back function
# plot_bar() is the call back function used in FuncAnimation class object
def plot_bar(some_date):
    df2 = df[df['Date'].eq(some_date)]
    ax.clear()
    # Only take Confirmed column in descending order
    df3 = df2.sort_values(by = 'Confirmed', ascending = False)
    # Select the top 5 Confirmed countries
    df4 = df3[df3['Country'].isin(list_countries)]
    # print(df4)  # Uncomment to see that dat is only for 5 countries
    sleep(0.2)  # To slow down the animation
    # ax.barh() makes a horizontal bar plot.
    return ax.barh(df4['Country'], df4['Confirmed'], color= list_colors)

###----Step 5:- Create FuncAnimation object---------
my_anim = animation.FuncAnimation(fig = fig, func = plot_bar,
                    frames= list_dates, blit=True,
                    interval=20)

### --- Step 6:- Save the animation to an mp4
# Place where to save the mp4. Give your file path instead
path_mp4 = r'C:\Python-articles\population_covid2.mp4'  
# my_anim.save(path_mp4, fps=30, extra_args=['-vcodec', 'libx264'])
my_anim.save(filename = path_mp4, writer = 'ffmpeg',
             fps=30,
             extra_args= ['-vcodec', 'libx264', '-pix_fmt', 'yuv420p'])
plt.show()

完整的脚本可以在 GitHub 上找到


via: https://opensource.com/article/20/4/python-data-covid-19

作者:AnuragGupta 选题:lujun9972 译者:wxy 校对:wxy

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

Rambox 是一个多合一消息收发工具,允许你将多种服务(如 Discord、Slack、Facebook Messenger)和数百个此类服务结合在一起。

Rambox:在单个应用中添加多个消息服务

Rambox 是通过安装单个应用管理多个通信服务的最佳方式之一。你可以在一个界面使用多个消息服务,如 Facebook Messenger、Gmail chats、AOL、Discord、Google Duo、Viber 等。

这样,你就不需要安装单独的应用或者在浏览器中一直打开着。你可以使用主密码锁定 Rambox 应用。你还可以使用“请勿打扰”功能。

Rambox 提供可免费使用的开源社区版。付费专业版允许你访问 600 多个应用,而社区版则包含 99 多个应用。专业版本具有额外的功能,如主题、休眠、ad-block、拼写检查和高级支持。

不用担心。开源社区版本身非常有用,你甚至不需要这些专业功能。

Rambox 的功能

虽然你应该在开源版中找到大多数基本功能,但你可能会注意到其中一些功能仅限于专业版。

此处,我说下所有的基本功能:

  • 在开源版本中,你有大约 100 个应用/服务可供选择
  • 能够使用单个主密码锁保护应用
  • 能够锁定加载的每个会话
  • 请勿打扰模式
  • 能够跨多个设备同步应用和配置
  • 你可以创建和添加自定义应用
  • 支持键盘快捷键
  • 启用/禁用应用而无需删除它们
  • JS 和 CSS 注入支持,以调整应用的样式
  • Ad-block (专业版
  • 休眠支持 (专业版
  • 主题支持(专业版
  • 移动设备视图 (专业版
  • 拼写检查 (专业版
  • 工作时间 - 计划传入通知的时间 (专业版
  • 支持代理 (专业版

除了我在这里列出的内容外,你还可以在 Rambox Pro 版本中找到更多功能。要了解有关它的更多信息,你可以参考正式功能列表

还值得注意的是,你不能超过 3 个活跃并发设备的连接。

在 Linux 上安装 Rambox

你可以在官方下载页获取 .AppImage 文件来运行 Rambox。如果你不清楚,你可以参考我们的指南,了解如何在 Linux 上使用 AppImage 文件

另外,你也可以从 Snap 商店获取它。此外,请查看其 GitHub release 部分的 .deb / .rpm 或其他包。

总结

使用 Rambox 安装大量应用可能会有点让人不知所措。因此,我建议你在添加更多应用并将其用于工作时监视内存使用情况。

还有一个类似的应用称为 Franz,它也像 Rambox 部分开源、部分高级版。

尽管像 Rambox 或 Franz 这样的解决方案非常有用,但它们并不总是节约资源,特别是如果你同时使用数十个服务。因此,请留意系统资源(如果你注意到对性能的影响)。

除此之外,这是一个令人印象深刻的应用。你有试过了么?欢迎随时让我知道你的想法!


via: https://itsfoss.com/rambox/

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

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

软件包管理器在 Linux 系统中扮演着重要的角色。它允许你安装、更新、查看、搜索和删除软件包,以满足你的需求。

每个发行版都有自己的一套包管理器,依据你的 Linux 发行版来分别使用它们。

RPM 是最古老的传统软件包管理器之一,它是为基于 Red Hat 的系统设计的,如 Red Hat Enterprise Linux(RHEL)、CentOS、Fedora 和 openSUSE(它基于 suse Enterprise Linux)等系统。但在依赖解析和包更新(全系统更新/升级)方面,RPM 包管理器有一个突出的限制。

如果你想知道 YUM 和 DNF 包管理器的区别请参考该文章。

这意味着 yum 可以自动下载并安装所有需要的依赖项,但 rpm 会告诉你安装一个依赖项列表,然后你必须手动安装。

当你想用 rpm 命令 安装一组包时,这实际上是不可能的,而且很费时间。

这时,YUM 包管理器 就派上了用场,解决了这两个问题。

什么是 RPM?

RPM 指的是 RPM Package Manager(原名 Red Hat Package Manager),是一个功能强大的命令行包管理工具,是为 Red Hat 操作系统开发的。

它现在被用作许多 Linux 发行版的核心组件,如 Centos、Fedora、Oracle Linux、openSUSE 和 Mageia 等。

RPM 软件包管理器允许你在基于 RPM 的 Linux 系统上安装、升级、删除、查询和验证软件包。

RPM 文件的扩展名为 .rpm。RPM 包由一个存档文件组成,其中包含了一个特定包的库和依赖关系,这些库和依赖关系与系统上安装的其他包不冲突。

在 Linux 上有很多前端工具可以用来安装 RPM 包,与 RPM 工具相比,这些工具可以使安装过程更加高效,尤其是在处理依赖关系方面。

如果你想了解更多关于 Linux 发行版的前端包管理器的信息,请到下面的链接。

如果你想了解 Linux 的 GUI 包管理器,请到下面的链接。

什么是 YUM?

Yum 是一个 Linux 操作系统上的自由开源的命令行包管理程序,它使用 RPM 包管理器。Yum 是一个 RPM 的前端工具,可以自动解决软件包的依赖关系。它可以从发行版官方仓库和其他第三方仓库中安装 RPM 软件包。

Yum 允许你在系统中安装、更新、搜索和删除软件包。如果你想让你的系统保持更新,你可以通过 yum-cron 启用自动更新。

此外,如果你需要的话,它还允许你在 yum update 中排除一个或多个软件包。

Yum 是默认安装的,你不需要安装它。

编号RPMYUM
1红帽在 1997 年引入了 RPMYellowdog UPdater(YUP)开发于 1999-2001 年,YUM 于 2003 年取代了原来的 YUP 工具
2RPM 代表 RPM Package manager(原名 Red Hat package manager)YUM 代表 Yellowdog Updater Modified
3RPM 文件的命名规则如下,httpd-2.4.6-92.el7.x86_64.rpmhttpd - 实际的包名;2.4.6 - 包发布版本号;92 - 包发布子版本号;el7 - Red Hat 版本;x86_64 - 硬件架构;rpm - 文件扩展名后台使用 rpm 数据库
4不解析依赖关系,你必须手动安装依赖可以自动解析依赖关系并同时安装它们(任何包都会和它的依赖关系一起安装)
5允许你同时安装多个版本的软件包不允许,并显示该软件包已经安装
6当使用 RPM 命令安装一个软件包时,你必须提供 .rpm 软件包的确切位置你可以安装仓库中的任何软件包,而你只需要知道软件包的名称就可以了
7RPM 不依赖于 YUM它是一个前端工具,在后台使用 RPM 包管理器来管理包
8RPM 在安装包的管理方面比较难YUM 是最简单的管理 RPM 包的方法
9RPM 不能让你将整个系统升级到最新的版本YUM 可以让你将系统升级到最新的版本(例如 7.0 到 7.x 的小版本升级)
10RPM 不能让你自动更新/升级安装在系统上的软件包YUM 可以让你自动更新/升级系统上的更新
11不使用在线仓库来执行任何操作完全依赖在线仓库来完成所有的工作
12RPM 是一种包格式,它也是一个底层的包管理器,只做基本的事情这是一个上层的包管理器前端,它可以完成你所需要的一切工作

via: https://www.2daygeek.com/comparison-difference-between-yum-vs-rpm/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:wxy 校对:wxy

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