2022年5月

谷歌的人工智能 PaLM 能够懂你的玩笑

笑话、讽刺和幽默需要了解语言和人类行为的微妙之处,人类能够理解这些是从多年的人类互动中学到的。谷歌迄今为止最大的人工智能模型 PaLM,经过 5400 亿个参数的训练,在没有经过明确的幽默和笑话逻辑的训练就学会了理解幽默,在被灌输了两个笑话后,它能够解释它们并给出一个解释。在一篇博文中,谷歌展示了 PaLM 是如何理解一个互联网上没有的新颖笑话的。这已经超越了许多科幻小说中的人工智能的水平。

消息来源:CNET
老王点评:5400 亿个参数,这比 GPT-3 的 1750 亿个还夸张!而其所能做到的事情也更令人吃惊,以后可以和 AI 开玩笑而不会被它当真了。

英国政府网站 GOV.UK 移除 jQuery 以改进性能

jQuery 诞生于 15 年前,是最广泛使用的 JS 库之一,数据显示 2021 年有 84% 的移动网页使用它。因为其普遍性,转而导致它所提供的东西成为 Web 平台本身的一部分。如今,我们几乎可以用普通的 JavaScript 做任何 jQuery 能做的事情,虽然语法更长一点。因此,在 jQuery 提供的便利性和性能之间就有人做出了选择,英国政府网站 GOV.UK 在 3 月移除了 jQuery 库。结果显示网站整体上减少了前端处理的时间,95% 的用户减少了 10% 的等待时间。

消息来源:Web Dev
老王点评:我觉得虽然 jQuery 已经显示出了老态,但是 jQuery 30kb 的大小真不是什么负担,就为这些而重新改写大量网页,我觉得不值得。

Ubuntu 正在努力集成微软的 Azure AD

Canonical 从 Ubuntu 20.10 开始集成微软的活动目录(AD)。根据 Ubuntu 桌面团队更新,多名 Canonical 工程师现在正致力于对 Azure AD 的支持。Azure AD(AAD)是微软的 Azure 驱动的身份管理解决方案,作为内部活动目录的替代品,为那些寻求“身份即服务”的人提供单点登录、多因素认证和各种网络安全保障。Ubuntu 的这一举措是为了让 Linux 桌面在企业使用中更有吸引力,并更好地整合到企业环境。

消息来源:Phoronix
老王点评:自从 Ubuntu 率先进入了微软商店,Canonical 就和微软走的越来越近了。

Go 的随机数生成器是生成难以猜测的密码的好方法。

你可以使用 Go 编程语言 提供的随机数生成器来生成由 ASCII 字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但是你仍需要了解 Go 的基础知识,才能更好地理解它。如果你是对 Go 还不熟悉,请阅读 Go 语言之旅 来了解更多信息,然后返回此处。

在介绍实用程序和它的代码之前,让我们先来看看这个 ASCII 表的子集,它可以在 man ascii 命令的输出中找到:

30 40 50 60 70 80 90 100 110 120
 ---------------------------------
0:    (  2  <  F  P  Z  d   n   x
1:    )  3  =  G  Q  [  e   o   y
2:    *  4  >  H  R  \  f   p   z
3: !  +  5  ?  I  S  ]  g   q   {
4: "  ,  6  @  J  T  ^  h   r   |
5: #  -  7  A  K  U  _  i   s   }
6: $  .  8  B  L  V  `  j   t   ~
7: %  /  9  C  M  W  a  k   u  DEL
8: &  0  :  D  N  X  b  l   v
9: '  1  ;  E  O  Y  c  m   w

在所有 ASCII 字符中,可打印字符的十进制值范围为 33 到 126,其他的 ASCII 值都不适合用于密码。因此,本文介绍的实用程序将生成该范围内的 ASCII 字符。

生成随机整数

第一个实用程序名为 random.go,它生成指定数量的随机整数,这些整数位于给定范围内。random.go 最重要的部分是这个函数:

func random(min, max int) int {
    return rand.Intn(max-min) + min
}

此函数使用了 rand.Intn() 函数来生成一个属于给定范围的随机整数。请注意,rand.Intn() 返回一个属于 [0,n) 的非负随机整数。如果它的参数是一个负数,这个函数将会抛出异常,异常消息是:panic: invalid argument to Intn。你可以在 math/rand 文档 中找到 math/rand 包的使用说明。

random.go 实用程序接受三个命令行参数:生成的整数的最小值、最大值和个数。

编译和执行 random.go 会产生这样的输出:

$ go build random.go
$ ./random
Usage: ./random MIX MAX TOTAL
$ ./random 1 3 10
2 2 1 2 2 1 1 2 2 1

如果你希望在 Go 中生成更安全的随机数,请使用 Go 库中的 crypto/rand 包。

生成随机密码

第二个实用程序 randomPass.go 用于生成随机密码。randomPass.go 使用 random() 函数来生成随机整数,它们随后被以下 Go 代码转换为 ASCII 字符:

for {
    myRand := random(MIN, MAX)
    newChar := string(startChar[0] + byte(myRand))
    fmt.Print(newChar)
    if i == LENGTH {
        break
    }
    i++
}

MIN 的值为 0MAX 的值为 94,而 startChar 的值为 !,它是 ASCII 表中第一个可打印的字符(十进制 ASCII 码为 33)。因此,所有生成的 ASCII 字符都位于 !~ 之间,后者的十进制 ASCII 码为 126

因此,生成的每个随机数都大于 MIN,小于 MAX,并转换为 ASCII 字符。该过程继续进行,直到生成的密码达到指定的长度。

randomPass.go 实用程序接受单个(可选)命令行参数,以定义生成密码的长度,默认值为 8,这是一个非常常见的密码长度。执行 randomPass.go 会得到类似下面的输出:

$ go run randomPass.go 1
Z
$ go run randomPass.go 10
#Cw^a#IwkT
$ go run randomPass.go
Using default values!
[PP8@'Ci

最后一个细节:不要忘记调用 rand.Seed(),并提供一个 种子 seed 值,以初始化随机数生成器。如果你始终使用相同的种子值,随机数生成器将生成相同的随机整数序列。

随机数生成代码

你可以在 GitHub 找到 random.gorandomPass.go 的源码。你也可以直接在 play.golang.org 上执行它们。

我希望这篇文章对你有所帮助。如有任何问题,请在下方发表评论或在 Twitter 上与我联系。


via: https://opensource.com/article/18/5/creating-random-secure-passwords-go

作者:Mihalis Tsoukalos 选题:lkxed 译者:lkxed 校对:wxy

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

使用 TotalCross 来快速构建嵌入式系统程序的用户界面。

 title=

从头开始构建 GUI 是一个非常耗时的过程,以硬编码的方式处理所有的位置和对齐对于一些程序员来说确实很困难。所以在本文中,我将演示如何使用 XML 加快这一过程。

本项目使用 TotalCross 作为目标框架。TotalCross 是一个开源的跨平台软件开发工具包(SDK),旨在更快地为嵌入式设备创建 GUI。TotalCross 无需在设备上运行 Java 即可提供 Java 的开发优势,因为它使用自己的字节码和虚拟机( TC 字节码 TC bytecode 和 TCVM)来增强性能。

我还使用了 Knowcode-XML,这是一个用于 TotalCross 框架的开源 XML 解析器,它可以将 XML 文件转换为 TotalCross 组件。

项目需求

要重现此项目,你需要:

制作嵌入式应用程序

该应用程序由一个具有扫描、打印和复印等基本打印功能的嵌入式 GUI 组成。

 title=

构建这个 GUI 需要几个步骤,包括使用 Android-XML 生成 GUI,然后使用 Knowcode-XML 解析器在 TotalCross 框架上运行它。

1、生成 Android XML

要创建 XML 文件,首先构建一个简单的 Android 屏幕,然后对其进行自定义。如果你不知道如何编写 Android-XML,或者你只是想简单尝试一下,你可以从这个 GitHub 项目 中下载这个应用程序的 XML。该项目还包含渲染 GUI 要用到的图片。

2、调整 XML

生成 XML 文件后,你需要进行一些微调以确保所有内容都已经对齐、比例正确并且图像的路径正确。

将 XML 布局添加到 Layouts 文件夹,将所有资源添加到 Drawable 文件夹。然后你就可以开始自定义 XML 了。

例如,如果想要更改 XML 对象的背景,可以更改 android:background 属性:

android:background="@drawable/scan"

你也可以使用 tools:layout_editor_absoluteXtools:layout_editor_absoluteY 更改对象的位置:

tools:layout_editor_absoluteX="830dp"
tools:layout_editor_absoluteY="511dp"

或者使用 android:layout_widthandroid:layout_height 更改对象的大小:

android:layout_width="70dp"
android:layout_height="70dp"

如果要在对象上放置文本,可以使用 android:textSizeandroid:textandroid:textStyleandroid:textColor

android:textStyle="bold"
android:textColor="#000000"
android:textSize="20dp"
android:text="2:45PM"

下面是一个完整的 XML 对象的示例:

    <ImageButton
           android:id="@+id/ImageButton"
           android:layout_width="70dp"
           android:layout_height="70dp"
           tools:layout_editor_absoluteX="830dp"
           tools:layout_editor_absoluteY="511dp"
           android:background="@drawable/home_config" />

3、在 TotalCross 上运行 GUI

完成所有 XML 调整后,就可以在 TotalCross 上运行它了。在 TotalCross 扩展(LCTT 译注:在 VSCode 里面)上创建一个新项目,并将 XMLDrawable 文件夹添加到 Main 文件夹里。如果你仍然不确定如何创建 TotalCross 项目,请参阅我们的 入门指南

配置好环境后,使用 totalcross.knowcode.parse.XmlContainerFactoryimport totalcross.knowcode.parse.XmlContainerLayout 在 TotalCross 框架上使用 XML GUI。 你可以在其 GitHub 页面 上找到更多关于使用 KnowCode-XML 的信息。

4、添加过渡效果

这个项目的平滑过渡效果是由 SlidingNavigator 类创建的,它使用 TotalCross 的 ControlAnimation 类从一个屏幕滑到另一个屏幕。

XMLpresenter 类上调用 SlidingNavigator

new SlidingNavigator(this).present(HomePresenter.class);

SlidingNavigator 类上实现 present 函数:

public void present(Class<? extends XMLPresenter> presenterClass)
         throws InstantiationException, IllegalAccessException {
      final XMLPresenter presenter = cache.containsKey(presenterClass) ? cache.get(presenterClass)
            : presenterClass.newInstance();
      if (!cache.containsKey(presenterClass)) {
         cache.put(presenterClass, presenter);
      }

      if (presenters.isEmpty()) {
         window.add(presenter.content, LEFT, TOP, FILL, FILL);
      } else {
         XMLPresenter previous = presenters.lastElement();

         window.add(presenter.content, AFTER, TOP, SCREENSIZE, SCREENSIZE, previous.content);

使用动画控件中的 PathAnimation 来创建从一个屏幕到另一个屏幕的滑动动画:

         PathAnimation.create(previous.content, -Settings.screenWidth, 0, new ControlAnimation.AnimationFinished() {
            @Override
            public void onAnimationFinished(ControlAnimation anim) {
               window.remove(previous.content);
            }
         }, 1000).with(PathAnimation.create(presenter.content, 0, 0, new ControlAnimation.AnimationFinished() {
            @Override
            public void onAnimation Finished(Control Animation anim) {
               presenter.content.setRect(LEFT, TOP, FILL, FILL);
            }
         }, 1000)).start();
      }
      presenter.setNavigator(this);
      presenters.push(presenter);
      presenter.bind2();
      if (presenter.isFirstPresent) {
         presenter.onPresent();
         presenter.isFirstPresent = false;
      }

5、加载环形进度条

打印机应用程序的另一个不错的功能是显示进度的加载屏幕动画。它包括文本和旋转动画。

 title=

通过添加定时器和定时器监听器来更新进度标签,然后调用函数 spinner.start() 来实现此功能。所有的动画都是由 TotalCross 和 KnowCode 自动生成的:

public void startSpinner() {
        time = content.addTimer(500);
        content.addTimerListener((e) -> {
            try {
                progress(); // Updates the Label
            } catch (InstantiationException | IllegalAccessException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        });
        Spinner spinner = (Spinner) ((XmlContainerLayout) content).getControlByID("@+id/spinner");
        spinner.start();
    }

这里的环形进度条被实例化为对 XML 文件中描述的 XmlContainerLayout spinner 的引用:

<ProgressBar
android:id="@+id/spinner"
android:layout_width="362dp"
android:layout_height="358dp"
tools:layout_editor_absoluteX="296dp"
tools:layout_editor_absoluteY="198dp"
   android:indeterminateTint="#2B05C7"
style="?android:attr/progressBarStyle" />

6、构建应用程序

是时候构建应用程序了。你可以在 pom.xml 中查看和更改 目标系统 target systems 。 请确保 Linux Arm 目标可用。

如果你使用的是 VSCode,请按下键盘上的 F1 键,选择 TotalCross: Package 并等待完成。 然后就可以在 Target 文件夹中看到安装文件了。

7、在树莓派上部署和运行应用程序

要使用 SSH 协议在 树莓派 上部署应用程序,请按键盘上的 F1。选择 TotalCross: Deploy&Run 并提供有关你的 SSH 连接的信息,如:用户名、IP地址、密码和应用程序路径。

 title=

 title=

 title=

 title=

 title=

总结

KnowCode 让使用 Java 创建和管理应用程序屏幕变得更加容易。Knowcode-XML 将你的 XML 转换为 TotalCross GUI 界面,然后生成二进制文件以在你的树莓派上运行。

将 KnowCode 技术与 TotalCross 相结合,使你能够更快地创建嵌入式应用程序。 你可以访问我们在 GitHub 上的 嵌入式示例 并编辑你自己的应用程序,了解你还可以做什么。

如果你有问题、需要帮助,或者只是想与其他嵌入式 GUI 开发人员互动,请随时加入我们的 Telegram 小组,讨论任何框架上的嵌入式应用程序。


via: https://opensource.com/article/21/3/raspberry-pi-totalcross

作者:Edson Holanda Teixeira Junior 选题:lujun9972 译者:CoWave-Fall 校对:wxy

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

最近发布的 Ubuntu 22.04 LTS 充满了新的视觉变化和功能

但与任何其他版本一样,它也存在一些错误和问题。

我在 Ubuntu 22.04 中遇到的令人不快的惊喜之一是 AppImage 应用。

即使拥有所有正确的权限,AppImage 应用也会拒绝在我新安装的 Ubuntu 22.04 系统中启动。

如果你遇到类似的情况,我有个好消息要告诉你。修复非常简单。

在 Ubuntu 22.04 LTS 中运行 AppImage 应用

这里的问题是 Ubuntu 22.04 缺少 FUSE(用户空间中的文件系统)库。FUSE 库为用户空间程序提供了一个接口,可以将虚拟文件系统导出到 Linux 内核。

这就是 AppImage 在虚拟文件系统上的工作方式。由于缺少这个关键库,AppImage 无法按预期工作。

现在你了解了问题的根本原因,让我们看看如何使其工作。

第 1 步:安装 libfuse

在 Ubuntu 中打开终端并使用以下命令安装 FUSE 库支持:

sudo apt install libfuse2

如果你不熟悉终端,那么你需要了解以下内容。它会要求你输入 sudo 密码。实际上,那是你的帐户密码。 当你输入密码时,屏幕上不会显示任何内容。这是设计使然。只需继续输入密码并输入。

Install libfuse2 in Ubuntu

第 2 步:确保 AppImage 文件具有正确的文件权限

这个不用说了。你需要对下载的应用的 AppImage 文件具有“执行”权限。

转到你已下载所需应用的 AppImage 文件的文件夹。右键单击并选择 属性 Properties

现在转到 权限 Permissions 选项卡并选中“ 允许将文件作为程序执行 Allow executing file as program ”选项。

give execute permission to AppImage file

设置完成后就好了。现在只需双击该文件,它就会按预期运行应用。

获取 libfuse 的这个小步骤已经在我的 安装 Ubuntu 22.04 后推荐要做的事情列表 上了。

进一步的故障排除提示

你的 AppImage 文件仍未运行?你下载的 AppImage 可能会出现一些其他问题,使其无法运行。

检查它的一种方法是下载一个已知的应用,如 Balena Etcher 并查看其 AppImage 文件是否有效。如果这个没问题,那么当你下载的另一个应用的 AppImage 文件无法工作,你可以通过从终端运行 AppImage 文件并分析它显示的错误来深入挖掘。

对你有用吗?

继续尝试。如果有效,请给我写个“感谢”。如果仍然没有解决,请在评论部分中提及详细信息,我会尽力帮助你。

(该图片由 Ryan McGuirePixabay 上发布)


via: https://itsfoss.com/cant-run-appimage-ubuntu/

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

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

美国司法部修订反黑客法律,将不对白帽黑客追究责任

美国司法部周四修订了其反黑客法律《计算机欺诈和滥用法》(CFAA)。该部指示检察官不要用 CFAA 来起诉网络安全研究人员,即所谓的“白帽黑客”、“道德黑客”。CFAA 是美国于 1986 年颁布的一项美国联邦法规,其禁止未经授权或超出授权的情况下访问计算机。此举意义重大,因为 CFAA 经常对安全研究人员构成威胁,他们可能会探测或入侵系统,以确定漏洞,从而修复这些漏洞。政策的修订意味着这种研究不应面临指控。

消息来源:techcrunch
老王点评:保护这些白帽子才能保护网络安全。不过想想某个被封的某云和被起诉的白帽子,也就是想想罢了,还是自己保护自己吧。

2 个严重程度为 9.8 级的漏洞正在被利用!

之前我们 报道 过 F5 的 BIG-IP 防火墙有一个评分为 9.8(满分为 10)的漏洞正在被利用,F5 已经提供了相关补丁。而更早一些时候,VMware 多个产品系列的未修补版本也被发现存在 9.8 级的安全漏洞。这两个漏洞使攻击者有能力远程执行恶意代码或命令,并以不受约束的 root 系统权限运行。而根据披露的补丁,攻击者可以很快就开发出相关的攻击代码,并将其积极投入利用。

消息来源:arstechnica
老王点评:随着世界局势不稳定,这种恶性漏洞也会越来越多的被发现。再结合上一条,你品一下。

谷歌宣布开源卸载友好协议 PSP

谷歌早在十多年前就对数据中心之间的流量进行加密,但加密和解密的处理需要大约 0.7% 的处理能力,以及相应的内存占用。这促使谷歌研发了 PSP 协议,将加密处理卸载到网卡上,也就是将本来由操作系统进行的一些数据包处理(如 TCP 分段、IP 分片、重组、校验、TCP 协议处理等)放到网卡硬件中去做,降低系统 CPU 消耗的同时提高处理的性能。PSP 加密卸载可节省约 0.5% 的谷歌整体处理能力。

消息来源:谷歌
老王点评:虽然谷歌总是被批评,但是平心而论,无论是科研水平,还是开放程度,都不是一般的科技公司能比拟的。

“激活 Windows” 水印已移植到 Linux。

为了阻止 Windows 操作系统的盗版行为,微软开发团队想出了一个办法:在 Windows 的角落放置一个激活水印,直到用户合法购买许可证并激活它。

如果你的电脑正在运行盗版的 Windows 副本,你应该已经注意到右下角的 “激活 Windows” 水印通知,如下图所示。

“激活 Windows” 通知

幸运的是,Linux 用户永远不会收到这样的通知。因为 GNU/Linux 是一个完全免费的开源操作系统,在 GNU 通用公共许可证(GPL)下发布。

任何人都可以运行、研究、修改和重新分发 Linux 源代码,甚至可以出售修改后的代码的副本,只要使用相同的许可即可。

Linux 是开源的,所以你真的可以用 Linux 做任何你在专有操作系统上不能做的事情。

你可以在 Linux 中做很多事情。你可以在 Linux 下构建和运行几乎任何东西,无论是有趣的项目还是企业级应用程序。甚至,你还可以添加 “激活 Linux” 水印。

“激活 Linux” 是什么?

几天前,我注意到了一个叫做 “激活 Linux” 的有趣项目。它和你在未经许可的 Windows 操作系统中看到的 “激活 Windows” 通知非常相似。

“激活 Linux” 的开发者使用 C 语言中的 Xlib 和 cairo,重新创建了 Linux 版的 “激活 Windows” 通知水印。

它会在你的 Linux 桌面上显示一个水印,并通知你进入设置以激活你的 Linux 发行版!这很酷,不是吗?

启用 “激活 Linux” 水印

activate-linux 项目在短时间内变得非常流行。几天之内,它已经为许多流行的 Linux 发行版而打了包,例如 Arch Linux、openSUSE 和 Ubuntu。

Arch Linux

AUR 已经收录 activate-linux。因此,你可以使用 ParuYay 在 Arch Linux 及其衍生版 EndeavourOS 和 Manjaro Linux 中安装 activate-linux 应用程序。

$ paru -S activate-linux

或者

$ yay -S activate-linux

openSUSE

OBS 收录了 Activate-linux。

如果你正在使用 openSUSE Tumbleweed 版本,请逐条运行下面的命令来安装 activate-linux:

$ sudo zypper addrepo https://download.opensuse.org/repositories/home:WoMspace/openSUSE_Tumbleweed/home:WoMspace.repo
$ sudo zypper refresh
$ sudo zypper install activate-linux

对于 openSUSE Factory ARM 版,运行如下命令:

$ sudo zypper addrepo https://download.opensuse.org/repositories/home:WoMspace/openSUSE_Factory_ARM/home:WoMspace.repo
$ sudo zypper refresh
$ sudo zypper install activate-linux

Ubuntu

activate-linux 有一个适用于 Ubuntu 及其衍生版(如 Pop!\_OS)的 PPA。

$ sudo add-apt-repository ppa:edd/misc
$ sudo apt update
$ sudo apt install activate-linux

安装完成后,只需在终端执行下面的命令,就可以让它运行起来:

$ activate-linux

现在,你将在桌面的角落看到 “激活 Linux” 水印通知,就像在未授权的 Windows 副本中一样。

桌面上的 “激活 Linux” 水印

别紧张!它是无害的。若想取消显示,你可以返回终端并按 CTRL+C 终止 activate-linux 命令。

我在 Ubuntu 22.04 GNOME 版本上测试了一下。它在 Wayland 中开箱即用。

“激活 Linux” 是我这一段时间以来遇到的一个非常有趣又无用的项目。我想这会让每个刚从 Windows 切换过来的 Linux 用户,拥有更加舒适的体验吧!

相关资源

“激活 Linux” 的 GitHub 存储库

via: https://ostechnix.com/activate-linux/

作者:sk 选题:lkxed 译者:lkxed 校对:wxy

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