编程开发与计算机科学

Rye!就决定是你了! Python 环境及包管理工具

涉及 Python 环境及包管理的工具七七八八加起来不下于十几种,看得人眼花缭乱。以至于患有选择困难症的本人还在坚持使用最原始 pip + venv 来构建 Python 运行环境。为了与时俱进,经过多方比较,最后选择了 Rye 作为今后的主力生产工具了。 本来还有一个和 Rye 类似叫做 PDM 的备选工具。最后之所以选择了 Rye 基于以下几点原因: Rye 可……

获取 Windows 系统默认字体和对应的字体文件

自 Windows Vista 和 Windows Server 2008 开始,操作系统界面默认的字体为 Segoe UI ,而 Windows XP 及之前的系统界面默认字体为 Tahoma 。不过 Segoe UI 字体的字形并不包含包括汉字在内的东亚文字。中文版 Windows 使用微软雅黑作为默认中文字体。 其他语言的默认字体见下表: 语言 字体 简体中文 Microsoft YaHei UI 繁体中文 Microsoft JhengHei UI 日文 Yu Gothic UI 韩文 Malgun Gothic 希伯来文 Gisha 泰文 Leelawadee 不过相较于……

修复 OpenFL 的 TextField 不显示输入法候选词列表的问题

在前文《试用跨平台 GUI 框架 HaxeUI》中提到了 OpenFL 的 TextField 在启用输入法时无法显示候选词列表的问题。经过一番摸索,发现了问题出在了 SDL 库的身上。 OpenFL 的底层基于 Lime ,而 Lime 的桌面后端又是基于 SDL 。OpenFL 默认使用的 SDL 代码位于 openfl/libsdl 。问题定位于源文件 SDL_windowskeyboard.c 中的 IME_init() 函数中,只要将第 373 行的代码注释掉,就可以正常……

试用跨平台 GUI 框架 HaxeUI

HaxeUI 是一款跨平台 GUI 框架,支持网页、桌面和移动端。 框架前端使用 Hexo 语言开发。框架后端使用图形引擎或者原生跨平台 GUI 框架,比如 OpenFL, NME, Kha,PixiJS, wxWidgets, Winforms 等。最终生成 C++ 代码编译成本地可执行文件或者 HTML 代码。在各种后端中,除了 wxWidgets 和 Winforms 使用原生组件外,其他都是使用图形引擎绘制或者生成 HTML 代码。 Haxe 也是一个比较有意思的语……

在 WSL 中运行 Lazarus IDE

Free Pascal 支持交叉编译,理论上是可以在 Windows 平台上编译 Linux 可执行文件的,但是官方没有提供相关文档,且不建议这么做。除了使用虚拟机外,在 Windows 平台上还可以使用 WSL 来交叉编译 Lazarus 项目。 安装 IDE 和 Free Pascal 编译器 本人 WSL 安装的是 Ubuntu 系统,但是 apt 源中自带的 Lazarus 2.0 版本太过陈旧,建议直接从官网下载最新版。这里下载 64 位版本,包……

Lazarus 项目支持多语言国际化

Lazarus 是一个与 Delphi 兼容的跨平台 RAD 集成开发环境。和 Delphi 一样, Lazarus 可以拖放组件,快速开发 GUI 应用程序。它使用 Free Pascal 作为后端编译器。当前的 Lazarus 版本是 2.2.6 ,内置的 Free Pascal 编译器版本是 3.2.2 。 修复 gettext 包的缺陷 Free Pascal 包含 gettext 包,可以用来实现软件国际化。但是当前版本 gettext 中的 GetLanguageIDs 过程在 Windows 系统下存在缺陷,无法获取到符合规范的 locale 名称:……

通过 GitHub Actions 自动构建分支

在 CudaText 汉化包项目中需要实现一个 CI/CD 脚本:一是用 msgfmt 命令生成 MO 文件;二是将生成的汉化包发布到 main 分支上。第一步倒是很容易通过 GitHub Actions 调用 Makefile 脚本来实现,第二步纯手写的话似乎比较麻烦,不如我们先问一下神奇的 ChatGPT 吧: fournoas: 请帮我写一个 github actions workflow 脚本,它先调用 make build 命令构建项目,并将生成的 build 目录内容发布到 main 分支 ChatGPT:……

    如何在支持多国语言的程序中正确使用格式化字符串

    让程序支持多国语言也叫做国际化( internationalization / i18n )。几乎所有的现代软件开发框架都会提供至少一种国际化解决方案,开发人员也可以使用第三方的 i18n 库,比如 GNU gettext 等。其实现原理也很简单:开发者在编写软件时,使用某个 Native 语言书写代码内部的文本字符串,一般选择使用英语;然后将每个文本字符串都翻译成软件需要支……

      Vagrant SSH 登录要求密码

      故障现象 日常操作系统是 Windows ,通常使用 Vagrant 来搭建本地开发环境。在某次重装系统后,像往常一样用 vagrant up --provision 命令成功地创建了开发环境,接下来用 vagrant ssh 登录系统时,竟然提示要求输入密码: [email protected]'s password: 这是之前从未遇到过的问题。虽然可以用默认密码 vagrant 登录系统,但是总觉得不爽。一定要找到原因。 排查原因 用 vagrant ssh --debug 命令输出……

      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 上下文,这个状态数据是……