iovxw

在 Android 模拟器上运行光遇

有钱还是直接买个 iPad 吧

Sky: Children of The Light 这游戏, 可以说是对高级用户十分不友好了

在 Android 上, 它只提供 arm64-v8a 的 binary, 直接拒绝高性能的 x86 平板以及模拟器

它还不允许你自己调高画质, 有一个画质上限, 由厂商根据机型来决定你最高能跑什么画质

而这个机型列表还不够全, 让你只能拿着顶级的 SoC 跑着 480p 30 帧的画面, 那云都是一团一团的马赛克

对于一个靠画面的步行模拟游戏来说, 这不能忍

所以这两天我折腾了一下在 PC 上运行它, 争取能在客厅躺在沙发上用电视玩最高画质

强制启用 Pixel Phone 的通话录音

同样适用于第三方类 Pixel ROM

Pixel 自带的电话 App 是支持录音以及自动录音的

但由于法律原因, 录音只在部分国家可用, 自动录音更是只有印度能用

虽然中国并没有相关法律问题, 但很明显我们并不能对 Google 有这方面的期待

还是得自己动手, 丰衣足食

配置 Linux 关机时停转移动硬盘

是 HDD 需要注意的

距离上篇博文又是一年,不太妙

我是不是只有每年 4 月才能想起来要写点什么?

嗯这次提前一个月,有进步

那么正文开始

Kensington Orbit 轨迹球

一整年没更新了,写点什么吧

最近右手手腕痛得要死

因为鼠标

想着不能再拖了,必须得换个输入方式

就挑了一堆骨头后,入手了 Kensington Orbit with Scroll Ring

这里写篇文章记录下,选择的过程,以及应该避开的坑

Rust 闭包环境捕获行为与 Copy trait

历史遗留问题

今天 Rust 群里有人遇到了反直觉的关于闭包的引用错误, 在群友合力排除各种干扰找到原因之后

我们就又有了一个可以塞到 100 黑 里的坑 (悲)

不过因为篇幅太长 (太罗嗦), 这里独立拆分出一篇文章讲解


闭包在捕获环境时, 如不显式添加 move 关键字, 捕获的方法是由编译器推导的

规则为: 如果捕获的变量在闭包内被引用, 或者可变引用, 那么就捕获到引用或可变引用

let v = String::new();
let c = || v.len(); // v: &String

Linux 下 Intel® 网卡开启 5Ghz AP

最好还是换网卡

Intel 家的网卡都禁止使用 5Ghz 开 AP, 只能开 2.4 的

比如我的 9560, 可以说是旗舰网卡, 能跑 1.7Gbps, 强得一匹

但却连个 5Ghz AP 都开不了

周边 2.4Ghz 信道都满了,要它何用啊

今日得一魔法, 可破此局

我也! 用上 fcitx5 了

已然开发两年半了

新 fcitx 很棒, 棒到甚至可以干掉 ibus 的服务然后直接使用 ibus 的 im module

虽然目前没有配置界面也没有文档, 不过我们不需要!

来上个图:

screenshot

Rust 100 黑

不定期更新

所谓爱到深处自然黑, 本文将会收集 Rust 的黑点, 并附上简单的解释和状态跟踪

至于能不能真的收集到 100 个, 希望不能吧

友情链接: https://3442853561.gitbooks.io/wtfrust/content/


  1. enum 的内存占用

    尽管某些特殊类型会优化, 但大部分需要额外保存 tag, 而这个 tag 是 1byte, 极端情况下是个灾难

  2. 尾递归优化并不总是生效

    当进行尾递归调用的作用域内有 Drop 变量存在时

    fn recur() {
        let x = vec![false];
        recur()
    }
    

Rust 隐式转换之 CoerceUnsized

标题看起来像一个系列, 然而并不一定有后续

Rust 中有四种隐式类型转换 (别和我提回字怎么写), 其中三种都是为了简化代码, 就算没有隐式, 也可以显式地用其他方法写出来

唯有 CoerceUnsized 比较特殊, 提供了一种抽象, 没有它就无法写出包含 DST(Dynamically-sized Type) 的智能指针

像这样:

let x: [u8; 3] = [0, 0, 0];
let y: Box<[u8]> = Box::new(x);

PhantomData 黑魔法

&'a mut &'a ()

use std::marker::PhantomData;

pub struct Magic<'a>(PhantomData<&'a mut &'a ()>);

impl<'a> Magic<'a> {
    pub fn as_ref(&'a self) -> &'a Self {
        &self
    }
}

fn main() {
    let pin = Magic(PhantomData);
    {
        pin.as_ref();
    }
    pin;
}