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

五月 11, 2022 · Paang Cheung

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 · Paang Cheung

如何删除 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 利用 Python 自动化 Python 对于写这种小工具来说真的太简单了,其思维也是极其容易理解。 环境 Ubuntu 20.04 WSL Python 3.8.5 npm 6.14.12 wrangler 1.16.1 理论上,只要求本地安装了 Python >= 3.4,并且通过 npm 安装了 wrangler 即可。...

五月 6, 2021 · Paang Cheung

与 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 的教程安装。 Chfs 并不在官方维护的仓库,而是在 dorado 中,你还需要输入以下命令安装: scoop bucket add dorado https://github....

四月 23, 2021 · 1 分钟 · Paang Cheung

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

在前文 设计模式 - 装饰模式 中比较全面地介绍了什么是装饰模式,介绍了设计模式 - 装饰模式优缺点、适用范围。 现在简单实现一下,加深学习印象。 我们可以这样理解: 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰模式特点 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 装饰对象包含一个真实对象的引用(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.status = status # decorate this method @login_check def access_allow(self): print("User now has login....

二月 18, 2021 · Paang Cheung