更新 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 已经几乎是不可能的了,各种奇怪的报错,令人头疼。

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

点击跳转以继续阅读

使用 Packages 创建支持 Apple M1 芯片的 pkg 安装包

使用高级设置修改 Packages 默认参数

苹果发布 M1 芯片设备已经有一段时间了,虽然我当时第一时间申请了 DTK 设备,但由于一些原因,直到苹果回收设备,我也没能亲手摸到。总之,落格输入法 macOS 还是成功靠盲打支持了 Apple 架构,即 arm64,根据用户反馈,效果还行。

直到有用户说虽然 app 是支持 m1 芯片的,但安装包不行——当运行 pkg 安装包时,系统弹出了 Rosetta 2……

虽然其实并不影响[……]

点击跳转以继续阅读

macOS 使用 atos 命令解析任意崩溃记录和采样数据

最近落格输入法遇到了几个比较难以复现的问题——关键是它不会导致崩溃。这就让崩溃统计功能根本无效,具体表现为在某些情况下输入法会突然卡住几秒,叫人十分恼火。后来我想到,macOS自带活动管理器中,有个“采样”功能,可以看到对应进程当前的执行(调用)状态,那我是不是可以用它来分析错误原因呢?

在和用户沟通后,我得到了一个类似这样的采样报告:
[crayon-6791e610976a053734[……]

点击跳转以继续阅读

快速更新 Python 包

Python 是个好东西,好多时候我们喜欢用它来写一些小东西……比如我服务器上的很多服务都是用 Python 写的( 使用 Supervisor 将你的 Python 程序变成服务 ),日积月累之下,竟然用到了很多依赖包。

可是,这些 Python 的依赖包并不会随着你的 apt upgrade  进行更新,许久之后的今天,我发现某个我正在用的包[……]

点击跳转以继续阅读

Cocoa Binding 实用教程

首先说这不是一个新技术,它很老,老到几乎没人提起它。

这是苹果 MVC 模式下的产物,最早在没有 iPhone 的时候就已经诞生了,它是用来配合 Xcode 图形化设置界面用的——比如 NIB,当然,现在已经变成 XIB了,哦,还有 Storyboard。

现在如果说起要 bind 一个 Storyboard 中的对象到代码中,你可能查到的都是这样的:

在左侧栏点击鼠标右键打开小窗口[……]

点击跳转以继续阅读