分类目录归档:技术笔记

SSH 密钥类型

GitHub 改变了他们的安全协议,不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问,而我目前使用 ssh 默认策略生成的就是这种类型的密钥,结果就是无法提交代码。

一种比较简便的方式是生成 ed25519 替换现有的,且两个密钥是不同的名称,可以共存。

为避免未来出现安全问题,了解一下 SSH 密钥究竟支持哪几种类型。

SSH 密钥类型

在 SSH 中,常见的密钥类型包括以下几种:

  1. RSA:这是最早的 SSH 密钥类型之一,使用 RSA 加密算法。RSA 密钥在 SSH 中被广泛使用,并且是许多 SSH 工具和协议的默认密钥类型。
  2. DSA:这是另一种早期的 SSH 密钥类型,使用 DSA 加密算法。DSA 密钥已被广泛使用,但现在已不建议使用。
  3. ECDSA:这是一种基于椭圆曲线加密算法的 SSH 密钥类型,通常比 RSA 和 DSA 密钥更安全和高效。
  4. ed25519:这是一种基于椭圆曲线加密算法的公钥加密方案,它被广泛应用于 SSH 密钥认证。ed25519 密钥具有更高的安全性和更好的性能,因此在许多情况下被认为是最佳选择。
  5. ECIES:这是一种基于椭圆曲线加密算法的加密方案,可以在 SSH 中使用。ECIES 密钥通常用于加密和解密敏感数据。

在选择使用哪种类型的 SSH 密钥时,需要考虑安全性、性能和应用需求等多种因素。其中 ed25519 密钥被认为是目前最安全和最高效的 SSH 密钥类型之一。

生成方法

当您需要在 SSH 中使用某种类型的密钥时,可以使用命令行工具来生成密钥对。以下是各种类型的 SSH 密钥的生成命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

该命令将生成一个长度为 4096 位的 RSA 密钥,并要求您输入密钥文件名和密码。该命令还将提示您将公钥文件复制到远程主机上。

生成 DSA 密钥:

ssh-keygen -t dsa -b 1024 -C "your_email@example.com"

该命令将生成一个长度为 1024 位的 DSA 密钥,并要求您输入密钥文件名和密码。该命令还将提示您将公钥文件复制到远程主机上。

生成 ECDSA 密钥:

ssh-keygen -t ecdsa -b 521 -C "your_email@example.com"

该命令将生成一个长度为 521 位的 ECDSA 密钥,并要求您输入密钥文件名和密码。该命令还将提示您将公钥文件复制到远程主机上。

生成 ed25519 密钥:

ssh-keygen -t ed25519 -C "your_email@example.com"

该命令将生成一个 ed25519 密钥,并要求您输入密钥文件名和密码。该命令还将提示您将公钥文件复制到远程主机上。

生成 SSH 密钥对后,您可以将公钥文件复制到远程主机上,以便使用私钥进行 SSH 认证。您还可以将公钥文件添加到您的 GitHub 或其他 Git 托管服务的账户设置中,以便进行代码推送和拉取操作。

需要注意的是,不同的 SSH 工具和平台可能会支持不同的密钥格式和类型。在使用 SSH 密钥时,需要确保您的 SSH 工具支持您使用的密钥类型。

总结

综上,建议使用 ed25519 密钥。

macOS 清理时间机器快照

安装 Asahi Linux 发现磁盘可用空间为 0,查阅文档发现是时间机器的问题。

We're going to resize this partition:
  APFS [Macintosh HD] (245.11 GB, 6 volumes)
  Total size: 245.11 GB
  Free space: 132.23 GB
  Available space: 0 B
  Overhead: 94.23 GB
  Minimum total size: 245.11 GB (100.00%)

开启时间机器后系统会自动进行本地快照,这将会占满所所有可用空间,需要手动清理一下:

$ tmutil listlocalsnapshots /
$ sudo tmutil deletelocalsnapshots # For example, 
$ sudo tmutil deletelocalsnapshots 2021-06-26-123740
# Once you see the statement "Delete local snapshot" followed by the date and time stamp, the local snapshot has been deleted.

Reference

Dockerfile 禁止弹出 apt 安装交互视图

在 Dockerfile 中执行 apt 安装时,有些软件包可能会在安装过程中弹出交互式视图,例如询问用户是否接受软件包许可证或配置软件包参数等。在 Docker 构建过程中,由于无法进行交互式操作,这些视图可能会导致构建失败或出现不可预期的结果。为避免这些问题,可以通过以下方法避免在 Docker 构建过程中弹出交互式视图:

在 apt-get 命令中使用 -y 参数,该参数表示自动回答“yes”所有询问,例如:

RUN apt-get update && apt-get install -y package-name

在这个例子中,-y 参数告诉 apt-get 自动回答所有询问为“yes”,不需要手动操作确认。

在 Dockerfile 中设置环境变量 DEBIAN_FRONTEND 为 noninteractive,例如:

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y package-name

在这个例子中,将 DEBIAN_FRONTEND 设置为 noninteractive,表示不需要交互式界面。

通过这些方法,可以在 Docker 构建过程中避免 apt 安装弹出交互式视图,从而确保构建过程的顺利进行。需要注意的是,自动回答所有询问可能会带来一定的安全风险,应该根据实际需求选择合适的方案。

ChatGPT VS Notion AI

简介

在当今世界中,涌现了许多基于人工智能的工具和平台,旨在简化各种功能。聊天机器人和虚拟助手是近年来广受欢迎的两个例子。 ChatGPT 和 Notion AI 是提供基于人工智能的解决方案的两个平台。在本篇博客文章中,我们将比较 ChatGPT 和 Notion AI,以了解它们的优点和缺点,并最终帮助您决定哪一个更适合您的业务。

ChatGPT

ChatGPT 是一种基于人工智能的聊天机器人平台,它使用 GPT-3 的能力生成类似人类的响应。它是一种通用平台,可用于自动化各种功能,包括客户支持、潜在客户生成甚至内容创作。 ChatGPT 的自然语言处理能力使其能够以类似人类的方式理解和回答客户的查询,使其成为自动化客户支持功能的理想工具。

ChatGPT 最大的优点之一是它的学习和改进能力。随着其与更多客户的互动,ChatGPT 的算法变得更加复杂,使其能够提供更准确和相关的响应。这意味着企业可以依赖 ChatGPT 在最小的人工干预下处理其客户支持功能。

Notion AI

Notion AI 是一种基于人工智能的工具,它帮助企业自动化其内容创作过程。它使用自然语言处理和机器学习算法,在与人类相同的时间内生成高质量的内容。 Notion AI 的内容创作能力对于需要定期生产大量内容的企业尤其有用,例如社交媒体帖子、博客文章和产品描述。

Notion AI 最大的优点之一是其能够生成针对搜索引擎优化的内容。通过分析搜索引擎数据和趋势,Notion AI 可以生成更有可能在搜索引擎结果页面上排名靠前的内容,帮助企业吸引更多有机流量到其网站。

比较

当涉及选择 ChatGPT 和 Notion AI 时,最终取决于您的业务的具体需求。如果您正在寻求自动化客户支持功能,则 ChatGPT 是明显的选择。其自然语言处理能力和学习和改进的能力使其成为企业提供高质量客户支持的理想工具,并最小化人工干预。

另一方面,如果您的企业需要定期生产大量内容,则 Notion AI 是更好的选择。它的内容创作能力,尤其是生成针对搜索引擎优化的内容的能力,使其成为企业提高在线可见性并吸引更多有机流量到其网站的理想工具。

结论

总之,ChatGPT 和 Notion AI 都是强大的基于人工智能的工具,可以帮助企业自动化各种功能。虽然 ChatGPT 更适合客户支持功能,但 Notion AI 更适合希望自动化其内容创作过程的企业。最终,选择两者之间的一个取决于您的业务的具体需求。

chatGPT 席卷全球后,我们的工作方式会发生什么变化

介绍

在过去的几年中,人工智能技术的快速发展一直在推动着我们的生活和工作方式的变革。近来,一种新型的人工智能技术——GPT-3 已经引起了广泛的关注。chatGPT 作为 GPT-3 的一个变种,它的出现在聊天机器人领域的应用无疑会给我们的工作方式带来很多变化。

聊天机器人在客户服务方面的应用

chatGPT 是一种人工智能技术,可以模拟人类的对话,它可以成为客户服务的理想选择。目前,许多公司正在利用聊天机器人来处理客户服务请求。chatGPT 可以通过自然语言处理技术识别客户的问题并进行回答,从而提高客户满意度。这将使得客户服务人员的工作变得更加高效,他们可以将更多的时间用于处理那些需要人工干预的问题。

聊天机器人在教育领域的应用

除了在客户服务方面的应用,聊天机器人在教育领域也有着广泛的应用。chatGPT 可以通过语音识别和自然语言处理技术自动回答学生的问题。在教学过程中,教师可以将一些常见问题输入到 chatGPT 中,这样学生就可以随时向 chatGPT 提问并获得快速准确的答案。这将使学习过程更加高效,同时也能够减轻教师的工作压力。

聊天机器人对工作流程的影响

随着 chatGPT 的普及,我们的工作流程也将发生一些变化。由于 chatGPT 可以自动回答一些简单问题,因此一些繁琐的任务可以被自动化,从而使得我们的工作效率得到提升。然而,我们需要注意的是,chatGPT 虽然可以自动回答问题,但是它无法替代人类思考的能力。因此,我们仍然需要有人类的干预来完成一些重要任务。

结论

总的来说,chatGPT 的出现将会对我们的生活和工作方式带来很多的变化。我们可以利用它来提高客户满意度,改善教学效果,以及提高工作效率。虽然 chatGPT 可以自动回答一些简单问题,但是它无法替代人类思考的能力。因此,在使用 chatGPT 的过程中,我们仍然需要谨慎地考虑它的应用场景。

Arch Linux 高分屏缩放方案

linux 下高分屏适配当前在 macos/windows/Linux 中的排位尚属末尾,采用整数倍缩放效果尚好(例如 100%、200%),但是若是使用非整数倍缩放(125%、175%)常常会体会到窗口模糊。

这一问题当前没有比较好的解决方案,但是可以使用字体缩放的方式绕过,效果尚可。

如果你在使用 GNOME 桌面,可以通过安装 gnome tweaks 软件来调整字体缩放率:

这样就可以在高分屏下获得一个比较好的效果,手边这台 MacBook air 中的一台采用 GNOME 的 arch linux 虚拟机,使用全分辨率的情况下,整个显示效果还算可以接受:

Reference

firefox 使用侧边标签栏替换顶部标签栏

安装侧边插件 tab-tree

推荐安装使用 Tree Style Tab 插件实现侧边插件,其他插件也可自行探索。

配置自动隐藏顶栏

地址栏输入

about:config —> toolkit.legacyUserProfileCustomizations.stylesheets —> true

帮助—> 更多排障信息—> 配置文件夹—> 打开文件夹—> 新建 chrome 文件夹

把配置文件 userChrome.css 放置在 chrome 目录下

内容从这里 拷贝。

最后完全关闭 Firefox 重启即可。

Reference

整理 Notion 导出文档名称

从 Notion 导出 md 格式的文档,默认会对文件名做一些处理,

大概是这样,会讲过长的文档名称压缩,在首行使用 md 一级标签标记文件名,再将文档截断为图示的样子。

这样的文档导入其他笔记软件是很不方便的,特别是内容多了就很不方便。

为此准备了一个 perl 的脚本来处理。

整理前文件清单如下:

整理后自动将第一个一级标题作为文件名,并自动将文件名等于首行标题的首行去掉。

以下是 Perl 源码。整理后直接运行即可:

#!/usr/bin/perl -w

use strict;
use warnings;

my $target_dir = $ARGV[0];

collate_name_with_title($target_dir);
scan_with_remove_first_line($target_dir);

sub collate_name_with_title {
    my $target_dir = shift;

    my $file_re = qr/^.*\s[0-9a-z]{5}\.md$/;

    for my $file (glob "$target_dir/*.md") {
        if ($file =~ $file_re) {
            open my $fh, '<', $file or die "Can't open $file: $!";
            my $line = <$fh>;
            close $fh;
            chomp $line;
            if ($line =~ /^#\s(.*)$/) {
                my $title = $1;
                $title =~ s/\s//g;
                $title =~ s/[|.:\/]/-/g;
                print "$file: \t$title\n";
                rename $file, "$target_dir/$title.md";
            }
        }
    }
}

sub scan_with_remove_first_line {
    my $target_dir = shift;

    for my $file (glob "$target_dir/*.md") {
        open my $fh, '<', $file or die "Can't open $file: $!";
        $file =~ /$target_dir\/(.*)\.md$/;
        my $file_name = $1;
        my @lines = <$fh>;
        close $fh;
        my $title = $lines[0];
        #print "$file_name: \t$title";
        chomp $title if $title;
        if ($title && $title =~ /^#\s(.*)$/) {
            $title = $1;
            if ($title eq $file_name) {
                #print "file: $file\n";
                #print "$file_name: \t$title\n";
                print "remove first line: $file\n";
                remove_first_line($file);
            }
        }
    }
}

sub remove_first_line {
    my $target_file = shift;

    open my $fh, '<', $target_file or die "Can't open $target_file: $!";
    my @lines = <$fh>;
    close $fh;
    shift @lines;
    open my $fh, '>', $target_file or die "Can't open $target_file: $!";
    print $fh @lines;
    close $fh;

}

运行方法:

$  perl collate-md-name-export-by-notion.pl ~/Documents/MyWiki/Note
...

记得备份数据,避免误操作导致数据丢失!