Windows 下使用 Neovim

虽然在 Windows 下的 VSCode 用得挺好,但还是想折腾一下 Neovim 试试。Neovim 安装完毕后只是一个简陋的编辑器,需要自己配置和安装各种插件才能进行日常使用,幸好已经有很多现成的开源配置项目,像 LunarVimAstroNvimLazyVim 等。经过试用,发现 AstroNvim 在 Windows 上有一些未解决的 BUG ,比如一直报「 E65: Illegal back reference 」错误。 LunarVim 暂时还没机会测试。暂且选择使用 LazyVim 的配置。

……

Vagrant SSH 登录要求密码

故障现象

日常操作系统是 Windows ,通常使用 Vagrant 来搭建本地开发环境。在某次重装系统后,像往常一样用 vagrant up --provision 命令成功地创建了开发环境,接下来用 vagrant ssh 登录系统时,竟然提示要求输入密码:

[email protected]'s password:

这是之前从未遇到过的问题。虽然可以用默认密码 vagrant 登录系统,但是总觉得不爽。一定要找到原因。

排查原因

vagrant ssh --debug 命令输出调试信息:

DEBUG safe_exec: Converted - Command: `"C:\\Windows\\System32\\OpenSSH\\/ssh.EXE"` Args: `["[email protected]", "-p", "2222", "-o", "LogLevel=FATAL", "-o", "Compression=yes", "-o", "DSAAuthentication=yes", "-o", "IdentitiesOnly=yes", "-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null", "-o", "PubkeyAcceptedKeyTypes=+ssh-rsa", "-o", "HostKeyAlgorithms=+ssh-rsa", "-i", "D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key", "-o", "ForwardAgent=yes"]`
[email protected]'s password:

发现 ssh 命令确实有使用 private_key 文件来进行验证身份。但是不知道为什么失败了,转而要求输入密码。

……

PyPi 使用 API 令牌进行身份验证

像往常一样使用 twine upload 命令将 Python 项目上传到 PyPi 上,意外地遇到了 401 错误:

WARNING  Error during upload. Retry with the --verbose option for more details.
ERROR    HTTPError: 401 Unauthorized from https://upload.pypi.org/legacy/
         User fournoas has two factor auth enabled, an API Token or Trusted Publisher must be used to upload in place of password.

应该是 PyPi 调整了安全策略,不再允许启用两步验证的账号使用用户名密码来上传项目了,必须使用 API 令牌来进行身份验证。

登录 PyPi ,进入账户设置页,点击「添加 API 令牌」按钮创建 API 令牌。然后修改 ~/.pypirc 配置文件, 用户名字段改为 __token__ ,密码字段改为刚才创建的令牌:

……

阳明心学究竟是什么

王阳明本名王守仁,字伯安,号阳明子,故又被称为「阳明先生」。王阳明被称为「中国最后一位圣人」,他的学说「阳明学」不仅在中国,甚至在朝鲜和日本都有着深远的影响。相传东乡平八郎随身携带着一块写着「一生伏首拜阳明」的腰牌。虽然这个故事的可信度不高,但是蒋介石确实是在留学日本的时候接触到「阳明学」,并从此成为王阳明的迷弟,以至于后来台湾很多道路、学校都以「阳明」来命名。由此可见,阳明学的确在近代日本很流行。

……

独裁统治下的个人责任

本文是汉娜·阿伦特《责任与判断》一书中的第一章。这里提供了两个翻译版本。个人认为繁体版的翻译更好一些。

首先,我想評論一下我的書《艾希曼在耶路撒冷》(Eichmann in Jerusalem) 所觸發的激烈爭議。我故意用「觸發」(touched off) 的字眼,而不是一般的「引起」(caused),因為爭議絕大部分是針對一本根本也沒有寫出來的書。因此我的第一反應是,對整件事一笑置之,套句帶有奧地利式風趣的名言:「討論一本沒人讀過的書,再也沒有比這更消遣的了。」不過隨著事情的發展,特別是到後來階段,有愈來愈多的聲音不只因為我從沒說過的話而批評我,也有人相反地開始幫我辯護,我頓時覺得,這有點詭異的操作,可能不只是要聳人聽聞或供人消遣。我也覺得所涉及的不止「情感」(emotions),也就是,不只是誠實的誤解——這在某些情況下確實會引發作者和讀者溝通的破裂——也不只利益團體的歪曲或作假,這些利益團體比較不害怕我的書,而是害怕它可能引發對那個時期的問題做進一步公正無私的詳細檢查。

……

Pynecone 拔草 附应用的手动部署方法

Pynecone 是一个纯 python 的 Web App 开发框架。它的后端基于 Python 的 FastAPI 框架,前端基于 Node.js 的 Next.js 框架。但使用它不需要书写任何前端代码,可以完全用 Python 一把梭。听上去非常诱人,但实际如何呢?

一个简单 Pynecone 应用的代码如下:

pythonimport pynecone as pc


class State(pc.State):
    text: str = 'Hello, World!'
    
    def goodbye(self):
        self.text = 'Goodbye, World!'

def index():
    return pc.text(State.text, on_click=State.goodbye)

app = pc.App(state=State)
app.add_page(index, route='/')
app.compile()

Pynecone 会为每个 Session 维护一个 State 上下文,这个状态数据是保存在服务器端的,只能通过修改 State 的 Props 来间接改变视图。其原理是, Pynecone 生成的前端代码会通过一个 WebSocket 连接和后端进行交互。当用户进行了某个前端操作后,前端会将该事件通过 WebSocket 连接发送给后端,后端将改变后的 State 返回给前端,最后前端更新视图。由于所有前端操作都需要和后端交互,在网络不佳的情况下,会导致前端操作响应很慢

……

非机动车过马路要下车推行吗?

网上看到有人说自己骑电动车通过路口时被警察拦下,并被告知非机动车过马路必须下车推行。那么非机动车通过路口时是否需要下车推行呢?答案是:不需要

交警所谓的「执法依据」是《中华人民共和国道路交通安全法实施条例》第三章、第三节,「非机动车通行规定」中的第七十条之规定:

驾驶自行车、电动自行车、三轮车在路段上横过机动车道,应当下车推行,有人行横道或者行人过街设施的,应当从人行横道或者行人过街设施通过;没有人行横道、没有行人过街设施或者不便使用行人过街设施的,在确认安全后直行通过。

……

自用 NAS 应用软件清单

搭建个人 NAS 服务的应用软件

用 Dnspooh 自建安全 DNS 服务器

Dnspooh 是一款使用 Python 开发的开源 DNS 代理/中继,支持 DoH 和 DoT 协议。用户可以将 Dnspooh 部署在本地,借助它可以让不支持 DoH 和 DoT 协议的客户端应用或操作系统使用安全的 DNS 服务,从而避免被运营商或网管之类的中间人劫持或嗅探。

除此之外, Dnspooh 还支持可插拔中间件用于扩展软件功能。 Dnspooh 内置了几个比较有用的中间件:缓存中间件用于加速访问;黑名单中间件用于屏蔽域名和 IP 地址; Hosts 中间件用于自定义解析结果;日志中间件用于记录解析记录、监控应用行为;规则中间件提供更加灵活复杂的操作。

……

发送 Ctrl+C 事件终止 Windows 控制台进程

偶然在 Nuitka 的代码中发现一个未被触发的 BUG 。问题代码位于 OnefileBootstrap.c 的 cleanupChildProcess() 函数中。这段代码中第 654 行的 GenerateConsoleCtrlEvent() 总是返回 FALSE ,导致子进程无法收到 CTRL-C 信号。不过由于 Nuitka 的代码中只有 cleanupChildProcess(false) 调用,因此这个 BUG 正常情况下不会被触发。不幸的是,本人 fork 了 Nuitka 的项目 Nuitka-winsvc 正好触发了这个 BUG 。Nuitka-winsvc 为 Nuitka 增加了编译为 Windows 服务的选项。当停止服务时,需要向子进程发送 CTRL-C 信号来优雅结束子进程