Hi there 👋

Welcome to my blog

从 Linux 挂载 NTFS 资源盘

Ref 参考 Introduction to fstab - https://help.ubuntu.com/community/Fstab What is fmask umask and dmask? - https://ubuntuforums.org/archive/index.php/t-1453342.html “dmask” and “fmask” mount options - https://askubuntu.com/questions/429848/dmask-and-fmask-mount-options fstab mount options for umask, fmask, dmask for ntfs with noexec - https://unix.stackexchange.com/questions/396904/fstab-mount-options-for-umask-fmask-dmask-for-ntfs-with-noexec fstab - https://wiki.archlinux.org/title/fstab ntfs3-dmask-fmask - https://www.linuxquestions.org/questions/slackware-installation-40/ntfs3-dmask-fmask-4175710458/ 简介 最近我将我的操作系统从 Windows 切换到 fedora,我一直习惯于系统盘与资源盘数据分离,所以如何在 Linux 正确挂载资源盘是我开箱新系统需要做的事情。 开始 不难地,我们随便在互联网上搜一下就知道应该修改 /ets/fstab ,这也是系统启动时根据该配置文件挂载硬盘所在的地方。 具体的,在这里的格式为: [Device] [Mount Point] [File System Type] [Options] [Dump] [Pass] fields description <device> The device/partition (by /dev location or UUID) that contain a file system....

十二月 31, 2023 · Peng Cheong

Linux Connectivity | Linux 网络状态连通性检测

引流: telegram @ 新記事本 - New Notepad 本文 @ 新記事本 - New Notepad 前言 当用户开启一个现代的操作系统时,系统通常都会在链接互联网后尝试访问一个 http 链接用于检测当前连接的网络是否正常连通。由于 Clash Tunnel 的策略,当你开启 TUN 后并使用 fake-ip 模式时,此时系统发送的、用于查询当前网络是否能够连通的请求也会被 Clash 接管,此时操作系统可能存在无法发送请求的情况。 当你使用 clash-for-windows 时这个情况是不需要担心的,作者 Fndroid 已经默认添加了 msftconnecttest.com 以及 msftncsi.com 在默认配置中,但是在 linux 如果我们需要自行配置 config.yaml,因此如何找到我们 OS 的用于检测网络连通性的 URI 就显得有意义了。 TL, DR 在 /etc/NetworkManager/conf.d/ 下新建文本文件 20-connectivity.conf,填写以下文本 [connectivity] enabled=true uri=http://cp.cloudflare.com/generate_204 interval=300 response= 或者一步到位: sudo sh -c 'echo -e "[connectivity]\nenabled=true\nuri=http://cp.cloudflare.com/generate_204\ninterval=300\nresponse=" > /etc/NetworkManager/conf.d/20-connectivity.conf' 其中 uri 这里使用了 cloudflare 的连通性检查服务,其返回头中 X-NetworkManager-Status 应当值应为 online。...

十一月 11, 2022 · Peng Cheong

Windows 开箱即用(Windows OTG)

Refs to: https://sspai.com/post/73019 在这篇少数派博客里面,我终于知道了原来 Windows 也能拥有勉强能用的 Terminal 自动补全体验,我在这里需要记录我自己安装 Windows 之后需要配置的命令环境,可以节省我重装 Windows 重新配置所浪费的时间。 Commands # run as admin at the command below Set-ExecutionPolicy RemoteSigned -scope CurrentUser # scoop installations Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') # scoop apps preinstallation scoop install 7zip git # scoop install 3rd buckets scoop bucket add extras scoop bucket add dorado https://github.com/chawyehsu/dorado # scoop install apps scoop install busybox sudo scoop-completion scoop-search python scoop install everything geekuninstaller volta # add scoop configure Add-Content -Path $Profile -Value "`nImport-Module $env:USERPROFILE\scoop\modules\scoop-completion" Add-Content -Path $Profile -Value "`Invoke-Expression (&scoop-search --hook)" # Change Keymaps to Emacs sudo Install-Module -Name PSReadLine -force Add-Content -Path $Profile -Value "Set-PSReadLineOption -EditMode Emacs" Thanks @MS @柯帕Kepa

VSCode 与 Toolbox 无缝协作开发

Refs to: Integrating Fedora Toolbox into VS Code (with the help of SSH) 笔者已经使用 Silverblue 一段时间了,在这一段时间内使用各类 IDE 都遇到让我困扰的问题。最开始我直接使用 vscode 等 IDE 直接打开本地的项目,但是这样打开的项目完全没有办法使用一些局部的环境变量,例如我的 Python 环境、前端开发的 npm 环境等;接下来我在 Toolbox 中创建我的环境,毕竟这个才是 rpm-os 推荐的做法,用户应该尽可能不要使用 rpm-ostree 来进行环境的安装,任何带 GUI 的应用都最好使用 flatpak 进行安装,需要开发的话在各个 toolbox container 中配置环境,但我通过 toolbox 中安装 vscode 打开本地项目,其中的 shell 依旧是处于 toolbox container 之外的 shell,这导致项目依旧不能识别是我配置的环境。例如在一个 python 虚拟环境中已经安装好了相关依赖,但是在 vscode on toolbox 中使用 pip 会导致受到 module "pip" not found 的报错。 翻越了互联网很久才发现上面的这一篇文章,我突然意识到可以使用 SSH 与 toolbox 进行连接开发,这样的开发可以实现在 vscode 中的 Shell 处于 toolbox 之中。...

五月 10, 2022 · Peng Cheong

如何删除 Cloudfalre KV 命名空间

首先声明,我的长短链使用的是 Url-Shorten-Worker,在很久前,我就好奇 Url-Shorten-Worker 这个 Github Repo 是怎么做到每天清理所有的 key:value 的,也没有认真去了解。 文档相关 https://developers.cloudflare.com/workers/cli-wrangler/commands#kv 在本次操作中我们只关心上述文档中的 kv:key 的操作方式 可以看到右边的 TOC 很清晰的展示了几个操作: 操作 含义 put 往指定的 Namespace 中填充键值对 list 获取全部的 key get 获取某个 key 对应的 value delete 删除指定 key,及其 value 这篇文章的核心思路是: 首先获取所有的 key 查询所有 key 对应的 value 判断对应的 value 是否满足条件 若 value 满足条件,则请求删除对应的 key...

五月 6, 2021 · Peng Cheong

与 Windows Sandbox 文件互访

Windows 沙盒(Windows Sandbox, WS)是 Windows 1909 以上专业版自带的一个沙盒虚拟机。每次打开一个沙盒,他都会模拟一个纯净的 Windows 环境,其内存和存储空间是临时的,当你关闭该沙盒,其保存的文件会随着内存共同销毁,从而确保本机的安全。通过 WS,我们可以大胆测试一些我们不确定是否安全的内容,待安全测试通过后,我们可以再在本机上运行陌生文件。 打开 WS 功能,你需要打开 Control Pannel/Programs and Features/Turn Windows features on or off/ 下的 Hyper-V/Windows Sandbox 两个选项。 网络文件共享 就目前而言,我没能找到比较好的通过 WS 直接访问本机上的磁盘文件的方法,但是这也是理所当然的,只有这样病毒文件才不会随着对该路径的访问污染实际磁盘文件。实际上,我完全基于偶合发现了基于网络文件共享的方法可以解决这个问题。在最开始我使用了 Chfs 作为一个局域网文件共享网络服务,随后我猜想在 WS 中能否通过局域网这样访问本机上的文件,实际是可行的。 Chfs 是一个国人开发的局域网网络文件服务器,任何局域网上的设备可以通过 Chfs 快速访问运行该服务的主机的文件。 请不用太担心,你的文件可以通过设置权限不被其他人浏览到;或者你可以设置仅仅共享指定 文件/文件夹;或者设定一个账户,该账户可以完全访问,也可以仅被允许访问指定文件…具体的实现方式非常多,由你来定义。 Chfs 并不是一个开源软件,如果担心其安全,可以尝试使用其他的网络文件共享服务 q(≧▽≦q) 安装 Chfs 既然 Chfs 可以实现上述功能,就让我们来安装它吧! Chfs 可以通过官网 http://iscute.cn/chfs 下载,按照 Guidance 安装。 但是我更偏好另外一种安装方式:Scoop Scoop 是一个 Windows 下的包管理器,类似 apt、dnf、yum、chocolate,你可以通过一条命令直接安装指定程序。 关于 Scoop 的安装方式这里不再赘述。最简单的方式可以按照 Github 的教程安装。...

四月 23, 2021 · Peng Cheong

对「装饰模式」的简单理解

在前文 设计模式 - 装饰模式 中比较全面地介绍了什么是装饰模式,介绍了设计模式 - 装饰模式优缺点、适用范围。 现在简单实现一下,加深学习印象。 我们可以这样理解: 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰模式特点 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 装饰对象包含一个真实对象的引用(reference) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。 真实对象区别于抽象对象(Component)。抽象对象不应该被具体实现;同时修饰类引用和继承 Component 类,具体扩展类重写父类方法。 设计原则 应当多组合,少继承 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。 类的设计应该对扩展开放,对修改关闭 样例实现 在这个样例中,主要体会对子类的组合实现,以及深入体会如何动态加载子类 from functools import wraps def login_check(func): """ Decorator check whether user is logged in :param func :return wrapper """ @wraps(func) def wrapper(*args, **kwargs): if args[0].status != "login": print("User hasn't logged in yet!") else: return func(*args, **kwargs) return wrapper class Visitor(object): def __init__(self, status) -> None: self....

二月 18, 2021 · Peng Cheong

自定义博客功能拓展,HEXO 注入器

在我把主题从 Cards 切换到 Fluid,发现 Fluid 默认没有提供接口以便在 <head> 后面插入 Google Sitemap 相关的信息,通过阅读 Fluid 提供的文档,我发现了 HEXO 5.0+ 提供的一个功能:HEXO Injector。 HEXO INJECTOR What is HEXO Injector ? 注入器被用于将静态代码片段注入生成的 HTML 的 <head> 和/或 <body> 中。Hexo 将在 after_render:html 过滤器 之前 完成注入。 hexo.extend.injector.register(entry, value, to) 几个应用场景 Instant.Page Instant.Page 是一个提高用户浏览网页的好工具,很多比较大的公司都使用了该工具: 例如:Adidas\Spotify and etc Instant.Page 可以让用户在站内移动鼠标到站内链接时用自己的方式预加载当前鼠标指向的链接。当你再次点击该链接,可以实现更迅速的打开。例如我的博客搭建托管在 Cloudflare,加载了 Instant.Page 可以比没有提升了肉眼可见的提升。 Instant.Page Github <script src="//instant.page/5.1.0" type="module" integrity="sha384-by67kQnR+pyfy8yWP4kPO12fHKRLHZPfEsiSXR8u2IKcTdxD805MGUXBzVPnkLHw"></script> 在 HEXO 各个不同的主题中,一般会提供不同的方法让你在</body>前插入自定义代码段。下面是一些我用过的主题实现加载 instant.page 的方法。 Butterfly 直接在 _config.butterfly.yml 中设置 instantpage: true 即可。 fluid 按照以下文段中替换 value 中的值即可。 对于部分安装了 Ublock Origin 的浏览器,由于Amazon等大型网站也是采用该脚本加速广告,该脚本会被插件所屏蔽,你可以保存 instant....

二月 13, 2021 · Peng Cheong