阅读视图

发现新文章,点击刷新页面。

如果风知道

我经常听人说话,别人付钱让我们听的,或是我们付钱听别人的,亦或是亲密关系里必要的“交谈”部分。所以久而久之,我会在大脑里出现一个习惯性的“系统”,在对方说话的时候,会把对方的每一句话自动归类到不同的信息之中——哪些是有效的、哪些是谎言、哪些有后期加工的成分、哪些是技巧、哪些是真实的感受、哪些是理性、哪些又是感性……

分类的好处,是我可以保持大脑低功耗的方式,处理大量的无效信息。因为很多时候,人们在谈及感受的时候,会本能地忽略理性思考的部分,以至于他们讲述的内容会分崩离析,只有这种方式才能快速地从对方的话语中找到关键点。


因此,别人付钱让我们听说话的,才真的可以做到完全信息同步的方式处理对方提供的大量无效信息。能在生命中遇到一个理性的聊天对象,本就不是容易的事情,更何况还需要同频彼此的认知,将讨论的事情放在一个框架下进行逻辑推理。

没错,上面这段话是在“装逼”。简单来说就是,我们至少得从一个事件里面找到前因后果,然后理解它发生的原因以及面对问题时的解决方案。我极少会提供解决方案,因为我知道大部分人并不愿意知道解决方案,他们需要的是事件存在时的拉扯感。

举个例子,很多人抱怨原生家庭自己的父母如何对自己“残忍”,其实我们有很多解决方案。把这种源源不断的恨付诸行动,比如断开原生家庭提供的经济支持,甚至是把聆听者当作“父母”,狠狠地抽对方一耳光将这种恨意实体化。但绝大部分的人是做不到这一点的,因为这种仇恨本身就是证明自己还活着的存在感——这种拉扯感的情绪既可以让自己拥有“埋怨”的权利,也可以为自己的“作”找到最终解释权,更重要的是,这种深切的痛即是“活着”

从对方的描述中找到问题根源、甚至挖掘到当事人自己也不愿意面对的真相,这是我的能力,但极少有人希望得到解决方案——或者他们觉得这件事没必要解决(然后被伪装成“我觉得这件事解决不了”)。这么一段时间来,我只遇到一个主动向我提出“你先别给我解决方案”的人,就是之前提到的那个3P男孩——这个人的故事以后再聊。他拒绝我提供解决方案的原因是他觉得“这是他必须要去体验的过程”。


在这么多“聊天”之中,我找到了某种有趣的现象——从事件本身聊到问题根源,直到最后得到解决方案。“解决问题途径”看上去是一套正常的“流程”,除了刚才讲到很多人不愿意得到解决方案的情形以外,找到问题根源本身也不是件容易事。因为它需要大量的真实信息呈现和同步,甚至还需要当事人对其“真实性”进行质疑和深入讨论。很多人面对一般的否定都难以承受,更别说还要接受他人对自己“真实性”的评价——但之前我提到过,人们对于记忆的篡改是一种心理本能,要对这些记忆的真实性拆解时,本身就会涉及对一个人心理动机的深挖,甚至会让当事人看见未曾见过的真实自己。

于是,从事件到问题根源的“发现问题途径”也变得不那么“友善”,所以人们开始寻求第三种更加轻松的路径——希望通过用一句结论的方式覆盖一个繁杂问题-解决方案体系,我把这种路径取名为“摘要途径”。

摘要途径往往会有一句非常简单明了的话,覆盖一个庞大的逻辑推理过程——例如“男人就是犯贱”。看上去这个结论可以覆盖很多男性的行为,但仅以此来评价男性行为很难说服“我这类人”。比如我花了一整个《性癖纵横观》的篇幅,来解释“男人就是犯贱”这个结论。性癖反馈男性的心理需求,征服与被征服作为能量转换,男性有的时候需要被征服的方式来平衡心理,于是对于被征服的性需求转变成了符号,而丝袜高跟鞋就是符号之一,所以被高跟鞋踩踏生殖器看上去是一个“下贱”的需求,但它背后有一些整个完整的逻辑推理。

当然,这个推理也并不是所有人关心的。


“摘要途径”不仅可以省略复杂的推理过程,也可以规避一些原本不属于自己强项的知识领域,可以让自己轻松地跟那些知识领域强者“平起平坐”——你说的这个理论我懂,不就是男人都是犯贱的嘛。你看,有了“摘要途径”,似乎就得到了一个知识领域的捷径,可以直接得到立马能用起来的结论。

前几天我无聊翻到一本书《风吹哪页读哪页》。本着对这本书标题的尊重,我真的就随便翻了一页读起来。里面的内容很庞杂,但是又非常简单——它在里面收集了从古至今的名言警句,通过分类成不同人生状态、阶段的方式装订成册。每一个摘要都在一眼就能读完的篇幅之中,能够用最短的方式理解“事物的本质”。它很像心灵鸡汤,但又不全是,因为里面的句子还是很值得深入琢磨,或是因为今天的有感而发而换做了微信签名,跟换头像明志有着一样的作用。

这本书就是非常典型的“摘要途径”,人们在追求的是一种结论上的支持,比如我今天想要出轨,我总得有一个支持出轨行为的声音在背后推我一把。如果这个人是具有权威性的,那我出轨的想法就可以得到古今中外的“担责”。“摘要途径”最大的特点是当事人并未参与其中——如果这个结论是“身边人”提供的,很有可能会在最后东窗事发时,一句“这可是你让我去做的”而把所有责任都推卸出去。因为“发现问题途径”本身,是需要当事人扪心自问,发现自己的“问题”,当事人在参与其中时,如果一味地外归因虽然“没有错”,但是至少对帮助的人来说,这种强烈的外归因行为会让他们失去解决问题的机会,而恰好“摘要途径”就是这个完美的“外归因”。


如果真就跟《风吹哪页读哪页》一样,风能帮你带来所有事情的“摘要”,那人也不至于活得这么痛苦了——这种痛苦不是源自于解决不了问题,而是当我们看了这么多“摘要”之后,人生还可以过得一塌糊涂。这种似懂非懂的信息越多,只会让我们麻痹在无数的结论之中,却放弃了“生而为人”的体验。

否则那些灵修课还怎么赚钱呢~

10 分钟 ZeroTier 私有 Plant 部署指南,提高游戏联机体验

在多人局域网游戏如星露谷物语、饥荒、我的世界等日益流行的今天,拥有一个稳定且低延迟的游戏联机环境对于提升玩家体验至关重要。本文将介绍如何使用 Docker 快速部署一个私有的 ZeroTier Planet 服务器,实现联机游戏低延迟,高稳定性。通过虚拟局域网技术,让不同地点的玩家能够如同在同一个局域网中一样进行游戏。

ZeroTier 简介

ZeroTier 是一种 P2P VPN 解决方案,它允许用户在互联网上创建一个虚拟的局域网,使得不同地理位置的设备能够像在同一个局域网内一样直接通信。也就是说,通过 ZeroTier,你可以和你的朋友在各自的家里,组成同一个局域网。然后你们就可以一起玩各种局域网联机游戏,如星露谷物语、饥荒、我的世界等。

ZeroTier 的核心组件包括 PLANET、MOON 和 LEAF,分别代表根服务器、卫星服务器和网络客户端。PLANET 是 ZeroTier 的根服务器,负责维护网络的全局状态和路由信息。

官方的 ZeroTier 服务器位于海外,对于国内用户来说,连接可能会不稳定。自建 PLANET 服务器可以有效解决这一问题,提升网络连接的稳定性和速度。

开始安装

准备条件

  • 一台具有公网 IP 的服务器,需要开放 3443/tcp、9994/tcp 和 9994/udp 端口。
  • 安装 Docker
  • Debian10+,Ubuntu20+ 等内核大于 5.0 的系统

使用 Docker 安装

新建 docker-compose.yml 文件,插入下面内容,
记得修改下面中的 IPV4IP ADDRESS 为你的公网 IP 地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: '3'services:  myztplanet:    image: xubiaolin/zerotier-planet:latest    container_name: ztplanet    ports:      - 9994:9994      - 9994:9994/udp      - 3443:3443      - 3000:3000    environment:      - IP_ADDR4=[IPV4IP ADDRESS]      - ZT_PORT=9994      - API_PORT=3443      - FILE_SERVER_PORT=3000    volumes:      - ./data/zerotier/dist:/app/dist      - ./data/zerotier/ztncui:/app/ztncui      - ./data/zerotier/one:/var/lib/zerotier-one      - ./data/zerotier/config:/app/config    restart: unless-stopped

在 docker-compose.yml 文件中目录下,使用如下命令启动

1
docker-compose up -d

后台配置

  1. 访问 http://ip:3443 进入 controller 页面,使用默认账号为:admin,默认密码为:password

  2. 进入后创建一个网络 (Add network),可以得到一个网络 ID

  3. 最后需要分配网络 IP: 选中 Easy setup->Generate network address

1d6b3d12c3a688385c45f6b940f42fae.png

b19f85de2600c57daefe7b9b344b27dc.png

Windows 客户端配置

下载

首先去 ZeroTier 官网下载一个 ZeroTier 客户端

覆盖 planet 文件

将服务器中 ./data/zerotier/dist 目录下 planet 文件覆盖粘贴到自己电脑的 C:\ProgramData\ZeroTier\One

覆盖 planet 文件.png

重启服务

Win+S 搜索 “服务”,打开 “服务”,找到 ZeroTier One,并且重启服务

重启服务

加入网络

在后台找到 ID,和平常使用 ZeroTier 加入网络的操作一样。

授权访问

在 ZeroTier 控制器的管理后台,找到新加的客户端并授权其访问。

授权访问.png

连通验证

马赛克处为你的公网 IP

连通验证.png

其他客户端

对于安卓客户端,目前只有非官方的客户端可用
https://github.com/kaaass/ZerotierFix

而 MacOS 用户需要替换 /Library/Application Support/ZeroTier/One/ 目录下的 planet 文件,并重启 ZeroTier-One:cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill,后续则与 Windows 配置相似。

游戏联机

你的朋友也需要完成客户端配置,才能与你组成局域网。你可以手把手的教他如何操作,也可以让他参考下面的文章进行操作。

3 分钟加入朋友的私有 ZeroTier Plant 网络中

当网络组成后,你可以在后台找到朋友在局域网中的 IP,

然后使用 ping <IP> 命令测试网络延迟。

猜你也想读

累积布局偏移优化 CLS 完全指南

什么是布局偏移

一个十几秒的短视频解释清楚。

更详细的解释是:布局偏移指的是在网页上发生突然变化时,页面中的内容位置发生意外移动的现象。这种情况常常让人感到困扰,因为它会导致阅读中断或误操作。布局偏移通常是由于资源异步加载或动态添加到页面上的 DOM 元素导致的。可能的原因包括具有未知尺寸的图像或视频、字体与其备用字体渲染大小不同,或者第三方广告或小部件动态调整大小。

难受的是,网站在开发过程中的功能通常与用户体验有很大不同。个性化或第三方内容在开发中的行为通常与生产环境中不同,测试图像通常已经存在于开发者的浏览器缓存中,本地运行的 API 调用通常非常快,延迟几乎不可察觉。

什么是 CLS

累积布局偏移 CLS(Cumulative Layout Shift)是一个指标。

是对页面整个生命周期中发生的每个意外布局变化的最大布局变化分数的度量。

CLS 通过测量实际用户遇到布局偏移的频率来帮助解决布局偏移问题。它可以帮助开发者了解布局偏移在真实用户中发生的情况,从而采取相应的措施进行修复。

为什么要优化 CLS

布局偏移是一个非常影响用户体验的问题,通过上面那一个简短的视频也能理解。

布局偏移通常会导致意外点击、页面方向的迷失,最终导致用户受挫。用户往往不会逗留太久。有时也会使用户不按照预计的产品流程走。

通常优化好布局偏移能够很好的提高用户粘性、用户停留时间等指标。

Yahoo! JAPAN News 通过降低 CLS 0.2 分,得到如下成果。

如何降低 CLS

图片等媒体元素占位

在图像、视频等媒体资源元素中始终包含宽度和高度大小属性。或用 CSS 中的 min-heightaspect-ratio 或类似的方式保留所需的空间。

aspect-ratio

可以用来直接指定当前元素的比例。

https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio

对浏览器的支持:

padding-bottom

如果考虑浏览器支持问题仍然可以考虑使用目前一个被广泛接受的基解决方案 “Padding-Top Hack”。这个解决方案需要一个父元素和一个绝对型的子元素。然后计算出长宽比的百分比来设置为 padding-top。例如:

1
2
3
<div class="container">  <img class="media" src="..." alt="..."></div>
1
2
3
4
5
6
7
8
9
10
.container {  position: relative;  width: 100%;  padding-top: 56.25%; /* 16:9 Aspect Ratio */}.media {  position: absolute;  top: 0;}

使用不易产生偏移的 CSS

其中 transfrom 表现很好,以下举几个例子。
用例可以在这里找到:https://play.tailwindcss.com/26PxFA6UVI

zoom VS transform: scale

zoom 会撑大页面并向右偏移时,transform: scale 只是在原地放大。

margin VS transform: translate

margin 造成父元素变大,transform: translate 只是让当前元素移动。

border VS box-shadow

border 会撑起父元素,而 box-shadow 并不会。

小心你的懒加载

懒加载会引起布局的偏移,如果你在有懒加载长列表的里进行跳转,请小心!
无动画进行跳转,能够一定程度上避免该问题。

小心使用 transition: all

在页面首次加载或者跳转页面时,transition: all 可能会导致元素的 padding 等从参数为 0 开始渲染,照成页面的抖动。

这都是痛:
Commit:表格以及友情链接图标抖动
Commit:修复导航栏抖动问题

标签顺序导致的偏移问题

由于在移动端上优先展示主要内容,因此侧边栏的 markup 位于主要内容的后面;而在更大的屏幕上,则通过设置 CSS order 的方式进行排序,将主要内容移到中间(即第二列),伪代码如下:

1
2
3
4
5
6
7
8
9
export default function MainLayout(props) {  return (    <Container>      <Main className={css`@media screen and (min-width: breakpoint) { order: 0 }`} />      <Left className={css`@media screen and (min-width: breakpoint) { order: -1 }`} />      <Right className={css`@media screen and (min-width: breakpoint) { order: 1 }`} />    </Container>  )}

浏览器在首次绘制时并没有完整解析 DOM、只知道 <Main /> 的存在、但不知道 <Left /> 或者 <Right /> 的存在,才因此将 <Main /> 渲染进第一列而不是第二列;直到第二次绘制时,浏览器才将 <Main /> 渲染进第二列、将 <Left /> 渲染进第一列。

Chrome 并不是一次完整解析 HTML 的,在以下两种情况下,Chrome 会暂停解析、开始渲染和绘制:

  1. Chrome 解析器在读取了 65535 字节的 HTML 后暂停
  2. Chrome 在遇到 <script> 标签后,会继续读取约 50 个「Token」之后暂停

详细了解请看:优化博客的累计布局偏移(CLS)问题

网页跳转与前进后退缓存

默认情况下,所有浏览器都使用 bfcache,但由于各种原因,有些站点不适合使用 bfcache。有关如何测试和识别阻止 bfcache 使用的任何问题的更多详细信息,请阅读 bfcache 文章

在你离开后,bfcache 将页面保存在浏览器内存中很短的一段时间,所以如果你返回它们,那么它们将完全恢复为你离开时的样子。这意味着完全加载的页面立即可用,而不会出现任何变化。

现在的 SPA 应用也能很轻易的保证路由跳转页面布局的一致性。记住始终保持你的目录和导航栏在页面的固定位置。

字体

在下载和渲染网络字体之前,通常有两种处理方式:

  1. 使用网络字体替代备用字体(FOUT——未样式化文本的闪烁)。
  2. 使用备用字体显示“不可见”文本,直到网络字体可用并且文本可见(FOIT——不可见文本的闪烁)。

着两种方式都可能导致布局变化。即使文本是不可见的,它仍然使用备用字体进行布局。这意味着使用该字体的文本块以及周围的内容在网络字体加载时会发生布局变化,与 FOUT 的可见字体完全相同。

以下方法可以帮助你最小化这种问题:

  1. 使用 font-display: optional 可以避免重新布局,因为只有在初始布局时网络字体可用时才会使用它。
  2. 使用匹配度高的备用字体。例如,使用 font-family: "Google Sans", sans-serif; 将确保在加载"Google Sans"字体时使用浏览器的无衬线备用字体。如果只使用 font-family: "Google Sans" 而不指定备用字体,将使用默认字体,而在 Chrome 上默认字体是"Times",它是比默认无衬线字体的匹配度更差。
  3. 使用新的 size-adjustascent-overridedescent-overrideline-gap-override API 来尽量减小备用字体和网络字体之间的大小差异,详细信息请参阅“Improved font fallbacks”文章。
  4. 使用 Font Loading API 可以减少获取所需字体的时间。
  5. 使用 <link rel=preload> 尽早加载关键的网络字体。预加载的字体有更高的机会达到首次绘制,这样就不会发生布局变化。
  6. 阅读有关字体最佳实践的“Best practices for fonts”文章。

使用真正的骨架屏

骨架屏好坏示例

测量 CLS 分数

生产阶段

实验阶段

Lighthouse in DevTools

能够针对移动设备和桌面设备生成网页的实际性能报告,并能够提供关于如何改进相应网页的建议。

在本地开发期间从 DevTools 运行 Lighthouse 非常方便。

PageSpeed Insights

应该就是在线版的 Lighthouse。

Performance in DevTools

性能选项卡在 Chrome 的 DevTools 配置文件的所有页面行为在一段时间内记录。时间轴上会出现一个标记为“Experience”的图层,突出显示布局的变化和发生变化的元素。

Web Vitals extension

最好将 Web vital 扩展视为查找性能问题的抽查工具,而不是全面的调试工具——这是 Chrome 的 DevTools 中的性能选项卡的工作。

结语

作为一个对自己项目有较高要求的人,平常几乎都会接触到布局偏移优化或者 Lighthouse,只不过之前自己瞎折腾的时候还没有 CLS 这个概念,现在算是对 CLS 有了较为清晰的概念了。
CLS 作为一个非常基础的优化指标,在用户体验上非常重要,任何项目都应该针对 CLS 做优化。

如有勘误,请及时指出,感谢!

参考

  1. https://web.dev/cls/
  2. https://web.dev/optimize-cls
  3. https://developers.google.com/publisher-tag/guides/minimize-layout-shift
  4. https://web.dev/yahoo-japan-news/
  5. https://addyosmani.com/blog/infinite-scroll-without-layout-shifts/
  6. https://blog.skk.moe/post/fix-blog-cls/
  7. https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio

Obsidian多端同步终极大法Syncthing、备份终极大法Kopia

之前在Obsidian的QQ群里向大佬们请教同步、备份的方法时,很多“过来人”对我说,你就先折腾着吧,最终多端同步你会使用Syncthing,而备份你会使用到Kopia。刚开始的时候我还是半信半疑,直到把这两个工具使用上之后,你会发现,使用了Syncthing和Kopia之后,你再也不会为多端同步、数据备份而去折腾了,更不会因为多端同步报错、备份不成功等原因而烦恼了。

在11月份的时候,折腾Obsidian真的是花了大量的时间和精力,《目前我使用Obsidian的多端同步、备份方案!》里,我选择了使用第三方插件Remotely Save+三方存储的同步方式。但是当《特殊字符标题,让Obsidian同步掉入了大坑!》,我就放弃了Remotely Save转而使用Syncthing进行同步。真的是用了就丢不了。对于使用Remotely Save同步的你,如果笔记文件太多、标题内含有特殊字符等情况,那你还是放弃Remotely Save同步这个方案吧。

首先大家得要有一个认识,同步工具Syncthing和备份工具Kopia不仅限于在Obsidian上使用。不少人把Syncthing当成同步网盘来使用,同步效果非常的好。

 Syncthing简介

  • Syncthing是一个开源文件同步工具,可以在多台设备之间实时同步文件或文件夹。它可以帮助你自由地选择数据的存储位置、数据是否被第三方共享以及同步的数据如何在互联网上传输。
  • Syncthing使用P2P技术实现数据在设备间的同步,和传统的网盘不同,数据在同步的过程中并不会上传到某个云服务器上,而是直接在你所指定的几个设备之间传输,也只会存储于你所信任的本地设备,确保了隐私与安全;同时,Syncthing使用了类似torrent的协议,你用于同步的设备越多,数据的传输速度也就越快。

Syncthing使用方法

Syncthing官方地址为https://syncthing.net/,在官网上可以下载到win、Linux等不同版本的Syncthing,安装后后在浏览器里输入http://127.0.0.1:8384便可以使用。但是最最让人不爽的就是这个代码窗口最小化不能缩到系统托盘里,正常工作时就会有些碍事。那么我们推荐SyncTrayzor版的,项目地址为:https://github.com/canton7/SyncTrayzor,这也是Syncthing官方推荐的。

Syncthing使用技巧

Syncthing的使用方法网上教程一大堆,这里不再多述,那在说一下在同步Obsidian库的时候需要注意就是最好不要在两台电脑同时打开Obsidian,可能会造成同步冲突。如果你有需要同时打开多台电脑Obsidian的需求时,那请在同步文件夹的“忽略模式”里把以下文件同步忽略掉,以免同生同步冲突。

.DS_Store
_gsdata_
.trash
workspace.json
/**/workspace.json
vault-stats.json
.obsidian\plugins\obsidian-hypothesis-plugin\data.json
.obsidian/todoist-token
.obsidian\todoist-token
.obsidian\plugins\longform\data.json

Syncthing并非仅能同步局域网内的电脑,广域网内电脑照样好同步。也不要相信什么自己没有中继服务器服务会非常慢,那真的是扯淡。我测试了广域网同步50M文件可以达到秒同步的效果。

因为Syncthing同步不依靠于服务器,所以想要同步那必须要同两台电脑同时打开运行Syncthing。当然让某台电脑24小时不开机一直运行着Syncthing是不现实的,那这个时候我们可以在自己的VPS上安装Docker版的Syncthing,这样家里电脑、办公室电脑同时和VPS上同步。如果没有自己的VPS,那也好办,在手机上安装安卓版的Syncthing,可以达到办公室电脑、家里电脑、安卓版的Syncthing三方同步的效果。

Kopia简介和使用方法

Kopia是全平台开源备份软件,官方网址是:https://kopia.io/,关于他的使用方法,就不再多做介绍,网上的教程非常的多。最为关键的是使用方法非常的简单。可以备份在本地,更可以备份在第三方存储上,再也不会担心数据丢失。可以设置备份时间间隔,可以设置保留最新多少份备份等等。

Kopia,可以让你有后悔药吃。

❌