落格博客 AWS 上云踩坑记

落格博客最早是运行在虚拟主机上的,只能通过面板操作,也没什么权限,使用起来非常别扭。再加上反正弄了服务器跑翻墙代理服务,那干脆就将博客搬迁到了 VPS 上。因此也就开始了我的 vps 折腾之旅。一转眼十年过去了,我后来也固定在 Vultr 的 VPS 上跑了 4 年。当然,这中间很多事情发生了,我做了 cnswift, 做了落格输入法,还有落格输入法的 macOS 版本……于是这个 20美元一个月[……]

点击跳转以继续阅读

Package xxx has no installation candidate on Raspberry Pi

当新刷好的树莓派镜像启用时,你有可能会遇到奇怪的 apt 错误:

当然,不止这一个,安装任何包都会是 Package xxx has no installation candidate

解决办法

首先查看你的 /etc/apt/sources.list ,看看里边的源地址是不是都被注释掉了,这里我的是正常的。[……]

点击跳转以继续阅读

使用 AWS S3 运行静态网站 启用 https

docs.logcg.com 的网站测速

落格输入法的使用说明书是一个用 Gitbook 编译的静态站,之前一直部署在 netlify 上,可惜现在他家也逐渐被墙……我只好把这个静态站搬到落格博客的服务器上。现在我打算整个迁移,于是思前想后,索性把这个静态站单独丢到 aws 容器里算了,刚好最近工作和学习都在用 aws,我对它比较熟悉。

要在 aws 运行静态站,首先我们来规划一下拓扑,大概是这样的:

GitHub → S3 容器[……]

点击跳转以继续阅读

iOS 平台第三方输入法的生命周期到底是怎样的?

我们刚刚讨论了 macOS 平台第三方输入法的生命周期到底是怎样的?,现在趁热再来聊聊 iOS 平台的第三方键盘生命周期

在苹果官网,也就只有个这:

这看起来似乎很容易理解,键盘的生命周期是系统管理的,每次用户呼出键盘,就它就启动,用户收起键盘,过一会它就被消灭了。

但有了前文对 macOS 输入法框架的生命周期的经验,我们再来看 iOS,真的是这样吗?在苹果开发者文档[……]

点击跳转以继续阅读

macOS 平台第三方输入法的生命周期到底是怎样的?

一转眼落格输入法都已经做到第三代了,令人惊讶的是我似乎从来没有认真的思考过题目中的这个问题。一直以来我先入为主的认为 macOSiOS 一样就是为每个输入框创建一个输入法实例,而第三方输入法的 Controller,全局只有一个,由系统负责 XPC 调用。

后来尽管我发现 Controller 不会在输入框失去焦点后立即销毁,但我依旧认为系统会为每个输入框获得焦点时生成全新的 Cont[……]

点击跳转以继续阅读

落格输入法是如何进行全拼拼音拆分的

在5年前,我曾写过一篇基于动态规划的整句输入法的文章,文章末尾提到了拼音拆分的问题,由于当时落格输入法主要针对双拼,实际上并不需要进行拆分,只要两两拆开就好了。(这是我推崇双拼的另一个原因,毕竟少了一个技术难点)

后来落格输入法支持了全拼,并且开始给全拼进行优化,才发现原来拼音分词,甚至比中文字分词还要难。

不少人一提到拼音分词,首先就想到了去和英文分词类比,其实不太准确,它们虽然从形[……]

点击跳转以继续阅读

macOS M1 Pro 安装 h5py

安装 h5py 失败

安装 TensorFlow 时,遇到一个依赖 h5py,这个包无论如何无法成功安装,报错无任何可用信息:

这就很难办了,查看日志发现原来是没有针对 m1 的二进制包,自动进行编译了。但编译报错说找不到头文件:

于是使用 brew 安装缺少的库,搜索之下,还真有[……]

点击跳转以继续阅读

删除不受支持的 System Extension macOS M1

直接使用系统信息工具查看当前系统中的插件

最近一直在安装驱动时有弹窗,说某某系统插件不被支持了,无法加载。但一直苦于没找到具体插件路径而无法删除掉,其实这些插件我本身也不再使用,甚至当初安装插件的app早都已经删除。今天实在是受不了了,警告弹窗一下出来十多个,决定处理一下。

苹果已经在最近的几个系统中更新了插件的开发结构,现在新的app,比如防火墙软件,都会将系统插件内置在 .app 包中,这样你在安装和启动 app 时,系统就会自[……]

点击跳转以继续阅读

制作 macOS 全新安装启动盘

之前 Mac 启动组合键大全 恢复模式 recovery mode 中提到了联网恢复的问题,实际上最终我无法成功使用联网恢复,原因是我的硬盘是 NVMe 的,但我手头已经没有原装的硬盘可以使用,于是我无法通过降级再升级的方式将主板固件更新,这就导致最新的恢复模式用不了,旧的恢复模式不识别硬盘。

为此,我需要做一个刚好不那么新,但又足够新到支持 NVMe 的安装盘,毕竟,要安装系统,总要先进到[……]

点击跳转以继续阅读

Mac 启动组合键大全 恢复模式 recovery mode

最近升级了新款的 MacBook Pro,已经在用 m1 pro 芯片了。 不过,旧款的 2015 年老笔记本我也不打算把它卖掉了,毕竟我买的时候是二手,如今电池也换过两块了,硬盘也是自己加了转换头换了 NVMe 。把它装个 Windows 专门打一打游戏也是很不错的。

但在进入恢复模式时遇到了问题,M1 芯片的设备已经大大简化了这个操作需求,只要一直按着开机键,就会弹出全部启动选项,不再需[……]

点击跳转以继续阅读

macOS application 的三种运行模式

通常,你不会遇到这个问题,直到你需要写一个后台程序……

我们都知道 macOS 有一个全局的 Dock,这个东西上会显示所有正在运行的程序,但如果你的程序是一个菜单栏小程序,或者是一个……输入法,那你肯定不想让这个 app 的图标显示的 Dock 上,因为这类 app 是要持续在后台运行的。

这时候我们就可以在 Info.plist 中写 [crayon-6908a8c0e991c89[……]

点击跳转以继续阅读

升级 macOS Monterey 后设备休眠半夜频繁唤醒问题

最近更新到了 macOS Monterey, 半夜总会被屏幕照醒,就觉得很诡异,以前也有过,但都是有通知的时候才会点亮屏幕,现在是没有任何理由的自己点亮,硬件还是那个硬件,那就应该是软件的锅了。

在网上查了一圈,先是找到了苹果官方的教程:https://support.apple.com/zh-cn/guide/mac-help/mchlp2995/mac

写的很详细,但显然是没有任何[……]

点击跳转以继续阅读

更新 Ruby 后 gem install 找不到 binary

我一直是用 rbenv 的,直到这次更新了 cocoapods 后,执行报错了,当然,目测应该是我的 ruby 环境太旧导致的,于是我尝试 rbenv install 3.0.2 ,但很遗憾,报错了,去 rbenv 的官方仓库看了看,上一个版本还是 2019年……好吧,放弃它,删掉所有的版本后,我发现其实我一直用 brew 装了最新版的 ruby,就直接用起来了。[……]

点击跳转以继续阅读

避免网站被恶意域名劫持

落格博客的服务器拒绝了该网站的内嵌

今天无意间发现了一批网站,如 http://b6x.net/ 现在你点开这个网站会显示“www.logcg.com refused to connect.”,当我第一次点开的时候我惊呆了……他竟然抄了我整个网站?!

这是一系列三位数域名网站,都是类似的操作。

等等,我发现了一点不对劲,首先这个网站外边有我博客本身并没有的白框……也就是说,这可能是个反代(反向代理)。

如果你还[……]

点击跳转以继续阅读

zsh 启用 bash * 星号通配符功能

最近发现服务器每次 apt upgrade 都非常慢,究其原因,还是一大堆不用的内核每次都要重新生成,清理的时候遇到一个问题,*号匹配不生效,每次都必须手动输入完整的内核名称才能将其卸载。

一通踩坑后发现,原来是因为我用了 zsh,而 zsh 默认是不支持 * 号通配的!要开启这个功能也很简单,找到你的 zsh 配置文件 vi ~/.zshrc [……]

点击跳转以继续阅读

为 UIKit 开启 Xcode Live Preview

使用 SwiftUI 的一大收益就是可以像 Flutter 那样对 App 进行热更新,改动了UI的代码,会直接反映在模拟器或者是真机中,大大提升了编写用户界面的效率,不用改1px,运行,各种点击,然后查看效果的循环往复。但现在使用 SwiftUI 还为时过早,毕竟还是有大量 iOS 12 设备在运行,想要做大众软件,那还是要支持的。

那么,有没有办法能让 UIKit 编写的软件也能用上实时[……]

点击跳转以继续阅读

macOS 运行和训练 Moses

Moses 官网其实是有 macOS 二进制包的,你不需要从源代码编译它们。但总之,由于 Moses 开发者已经不再用 Mac,所以他没办法更新,这导致了目前最新版(4.0)的代码中有一个bug,使得二进制文件不能直接使用,作者说“反正从源码编译也不是很难……”但总之,从 BigSur 上编译 Moses 已经几乎是不可能的了,各种奇怪的报错,令人头疼。

其实,我们是可以直接修正二进制文件中[……]

点击跳转以继续阅读