使用手册:https://libera.chat/guides/

连接服务器

irc.libera.chat:6697


Default     irc.libera.chat
Europe      irc.eu.libera.chat
US & Canada irc.us.libera.chat
AU & NZ     irc.au.libera.chat
East Asia   irc.ea.libera.chat
IPv4 only   irc.ipv4.libera.chat
IPv6 only   irc.ipv6.libera.chat

直接输入用户名进行连接即可。

使用隐身衣(Cloaks)

直接连接到频道后,任何人都可以使用/whois指令查看你的 IP 地址。如果不希望暴露 IP 地址,可以使用隐身衣。

在 NickServ 注册并验证(不要使用临时邮箱):

/msg NickServ REGISTER 密码 邮箱
/msg NickServ VERIFY REGISTER 用户名 验证串(会出现在邮箱里)

加入频道#libera-cloak,发送!cloakme指令,机器人会自动给你穿上隐身衣并把你 踢出 送出频道。

开放图谱协议(The Open Graph protocol)

使用开放图谱协议(The Open Graph protocol)可以有效地优化在社交网站等地展示的美观程度。

该协议是以 Meta 标签作依托的。

语法如下:

<meta property="og:属性" content="值" />

举栗:

<meta property="og:site_name" content="枫茶舍" />
<meta property="og:description" content="枫茶舍是筱枫的个人博客。" />
<meta property="og:locale" content="zh_CN" />
<meta property="og:image" content="/cover.jpg" />
<meta property="og:type" content="website" />
<meta property="og:title" content="使用 Meta 优化网页社交展示" />

更多属性,请参考:The Open Graph protocol

推特卡片(Twitter Cards)

举栗:

<meta name="twitter:card" content="summary">
<meta name="twitter:url" content="https://hsiaofeng.com/archives/123.html">
<meta name="twitter:title" content="使用 Meta 优化网页社交展示">
<meta name="twitter:description" content="使用 Meta 标签可以有效地优化在社交网站等地展示的美观程度。">
<meta name="twitter:image" content="https://hsiaofeng.com/archives/logo.png">

关于twitter:card的类型,可以参考文章:顾小北的B2C博客 - 可能是最全的关于twitter card的指导吧

推特官方的文档:Docs | Twitter Developer Platform - Getting started with Cards

苹果链接

该配置是为 Apple 设备的 Safari 浏览器及内建应用准备的。

用下面的代码可以添加网站的 Logo 等。

<link rel="apple-touch-icon" href="touch-icon-iphone.png"> 
<link rel="apple-touch-icon" size="152x152" href="touch-icon-ipad.png"> 

<!-- Retina 显示屏 -->
<link rel="apple-touch-icon" size="180x180" href="touch-icon-iphone-retina.png"> 
<link rel="apple-touch-icon" size="167x167" href="touch-icon-ipad-retina.png"> 

更多请参考 Apple 官方文档:Configuring Web Applications

在通常情况下,对于

let str = 'abcd';

str.length = 4

但是,若

str = '👨‍👩‍👧‍👦👵🏻';

此时有str.length = 15,仅仅 2 字符就占了 15 个常规字符位。这是由于单个 Emoji 等字符拥有两个及以上的常规字符位造成的。

此时用indexOf()等函数无法确切定位到字符串中的字符位置。

为什么有 Emoji 字符占用多的这种问题?如果你感兴趣,可以拉到文章末尾,我先介绍解决方案。

方案一 使用工具处理

我们这里使用开源项目orling/grapheme-splitter处理。

下载仓库内的 index.js,引入网页等。

var splitter = new GraphemeSplitter();
var graphemes = splitter.splitGraphemes(string);

这样得到的graphemes就是目标字符串(数组)。

graphemes = ['👨‍👩‍👧‍👦','👵🏻']

方案二 手工分组

str = ['👨‍👩‍👧‍👦','👵🏻'];

问题来源

这是由于复杂的 Emoji 符号由基础 Emoji 符号拼凑而成。

例如,符号“👨‍👩‍👧‍👦”由 15 字符组成,分别是:

  1. 👨 男人(Man)2 字符
  2. ‍ 零宽连字(Zero Width Joiner, ZWJ)
  3. 👩 女人(Woman)2 字符
  4. ‍ 零宽连字(Zero Width Joiner, ZWJ)
  5. 👧 女孩(Girl)2 字符
  6. ‍ 零宽连字(Zero Width Joiner, ZWJ)
  7. 👦 男孩(Boy)2 字符

在这个符号里,ZWJ 符号把四个基础的表情符号联系到一起,组成新的字符。

又比如符号“👵🏻”由 4 字符组成,分别是:

  1. 👵 老奶奶(Old Woman)2 字符
  2. ‍ 零宽连字(Zero Width Joiner, ZWJ)
  3. 🏻 浅肤色(Light Skin Tone)1 字符

所以,依靠charAt()无法准确地逐字输出他们。

Flarum 采用 Composer 安装和管理插件。

安装 Flarum

切换到网站安装目录,清空该目录后运行

composer create-project flarum/flarum

接着,修改flarum文件夹及其内容的权限。

chmod -R 775 flarum
chown -R www:www flarum/ #换成合适的用户名

配置重写 URL。一般不用配置,如果接下来出错请按照官方 Doc 配置 :https://docs.flarum.org/install.html#url-rewriting

将网站根目录设置为 /path/to/yourweb/flarum/public/

访问网站,根据步骤完成安装。

安装简体中文语言包

将目录切入flarum,运行

composer require flarum-lang/chinese-simplified

进入网站 Administration - LANGUAGES,切换为中文即可。

参考

改变目录(cd)命令

cd命令用于切换目录。

本篇是在 Windows 环境下切换目录的命令简要指南。

一般来说,Windows 下用\ 区分不同目录,但是现代的终端可以自己在\ /中切换。

切换盘符

在讲述cd之前,我们先学习在 CMD 下切换盘符的操作。

打开终端(CMD 或 PowerShell),可以看到当前终端所操作的位置。

右开口尖括号>左侧的即为目录位置。

当前所在位置,位于右开口尖括号的左侧

如果我们想要切换到 D 盘,在传统 CMD 下需要先输入盘符(例如 D:),按下回车切换。

切换盘符

可以看到,路径变为了D:\

如果你使用了 PowerShell,可以直接用 cd 命令时一并切换盘符。

cd 命令

假设有一文件夹code位于 D 盘,位置是 D:\code\

文件夹位置示意图

现在,我们的终端位于D:\ ,怎么切换到code文件夹呢?

有两种办法,一是输入code,二是输入./code。两者是同等效力的。

切换到 code 文件夹

.表示当前目录,即代替了右尖括号>前面的D:\

..表示父目录,即上级目录。输入

cd ..

即可切换到D:\code的上级目录D:\

父目录表示

你不必一次切换一级,例如有一文件夹temp位于 D:\code\cpp\temp ,你可以直接从code文件夹切换到temp文件夹。

多级切换

\ 表示根目录。你目前位于 D 盘,则根目录在D:\ 。同样地,C 盘的根目录是C:\

根目录

至此,简单的切换就结束了。这已经足够使用了。

安装 Aria 2

安装必要组件wgetcurlca-certificates

apt install wget curl ca-certificates

切换到合适的目录,下载并运行脚本。这里使用 P3TERX/aria2.sh 一键安装脚本。请在使用前检视该脚本是否有恶意代码,以防后期因遭受攻击而恶意修改。

wget -N git.io/aria2.sh && chmod +x aria2.sh
./aria2.sh

安装好脚本后,记住给出的信息。

Aria2 简单配置信息:

 IPv4 地址      : ▇▇▇▇▇▇▇▇▇▇▇▇▇
 IPv6 地址      : ▇▇▇▇▇▇▇▇▇▇▇▇▇
 RPC 端口       : 6800
 RPC 密钥       : ▇▇▇▇▇▇▇▇▇▇▇▇▇
 下载目录       : /home/▇▇▇▇/downloads
 AriaNg 链接    : ▇▇▇▇▇▇▇▇▇▇▇▇▇

若忘掉该信息也无妨,记得找到aria2.sh,运行并选择8. 查看 配置即可。

使用客户端连接

下载 AriaNg-Native

如果你希望用网页客户端,可以考虑 AriaNg

装好后,找到左栏系统设置中的“AriaNg 配置”,选择窗口靠上位置的“RPC”,填入上述给出的信息。

如果提示 RPC 连接失败,可以考虑把协议换为 Http (若使用 https 连入客户端,则不可以选则这个)。

使用例

使用 Composer 安装 PHPMailer,然后新建 PHP 文件,填入下方内容。

Correo 是西班牙语的“邮件”之意。本代码节录修改自参考资料#1,原作者可能是西班牙语使用者。

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';
$Correo = new PHPMailer();
$Correo->IsSMTP();
$Correo->CharSet = PHPMailer::CHARSET_UTF8;
$Correo->SMTPAuth = true;
$Correo->SMTPSecure = "tls";
$Correo->Host = "STMP.DOMAIN.EXP";         //服务器地址
$Correo->Port = 587;                     //服务器端口
$Correo->Username = "USER@DOMAIN.EXP";    //用户名
$Correo->Password = "PASSWORD";            //密码
$Correo->SetFrom('USER@DOMAIN.EXP');    //发件人
//$Correo->FromName = "From";            //发件人名
$Correo->AddAddress("RECV@FOXMAIL.COM");//收件人
$Correo->Subject = "服务器连通性测试";
$Correo->Body = "如果您能收到这封邮件,代表服务器邮件通讯正常。这是一封UTF-8格式的编码。";
$Correo->IsHTML (true);
if (!$Correo->Send()) echo "送信失败:$Correo->ErrorInfo";
else echo "送信完成 ~( ̄▽ ̄)~*";
?>

参考资料

  1. 正常送信模板:php - "SMTP Error: Could not authenticate" in PHPMailer - Stack Overflow
  2. UTF-8 解决乱码方案:PHPMailer/PHPMailerTest.php · PHPMailer/PHPMailer
  3. 更多 PHPMailer 参数:a-simple-example | PHPMailer/PHPMailer: The classic email sending library for PHP

装好 MariaDB 后,并不能直接从 Windows 主机访问,需要打开一定权限。我们需要修改配置文件以开放本地“远程”访问。

配置文件的目录是/etc/mysql/mariadb.conf.d/50-server.cnf

找到该文件Basic Settings部分,修改bind-adress的值为0.0.0.0(下方代码中最后一行),以开放权限给本机上的其他设备。

[mysqld]

#
# * Basic Settings
#
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
#port                   = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
#skip-external-locking

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

修改完成重启服务即可。

sudo service mysql restart

前期准备

使用 Composer 下载所需的准备材料。

cd ... #网站根目录
composer require firebase/php-jwt

在 PHP 文件中,需要写入下面的代码,注意目录路径,这里是相对于根目录。

require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\JWT;

令牌创建

我们使用 Cookie 储存 JWT。

我们需要创建一个自定义字符串作密钥,这里我们存在一个名为key-999d-45a2-a2b3.php的文件中:

<?php
    $key = 'cptbtptp233';
?>

核心部分代码:

// $audience 是用户名。
// $exp 是失效时间,这里设为 1 天。

require 'key-999d-45a2-a2b3.php';
$exp = time() + 24 * 60 * 60;

$payload = array(
"aud" => $audience,
"exp" => $exp
);

$jwt = JWT::encode($payload, $key);
setcookie("token",$jwt,$exp);

值得注意的是,firebase/php-jwt 支持多种不同的算法,在JWT::encode()第三个参数省缺的情况下默认为 HS256 。可以在 https://jwt.io/#libraries-io 查看。若要使用其他算法,例如 HS512 ,需要上述代码将倒数第二行更为:

$jwt = JWT::encode($payload, $key, 'HS512');

令牌校验

创建好后我们就可以根据令牌校验。

require 'key-999d-45a2-a2b3.php';
if(isset($_COOKIE['token'])){
    //如果 COOKIE 存在
    $jwt = $_COOKIE['token'];
    try{
        $decoded = JWT::decode($jwt, $key, array('HS256'));
        $uid = $decoded -> aud; //用户ID
        $exp = $decoded -> exp; //JWT有效期

        if(time() < $exp) $ifLogin = true; //JWT也没过期,通过校验
    } catch(Exception $e){
            //如果JWT被篡改
            echo '你这 JWT 有问题啊:'.$e->getMessage();
    }
}

至此完成。