CodingTour
ARTS #212 | 小城春秋

厦门新开了一家小城春秋沉浸式影视小镇,主打民国风和实景沉浸式演艺~

Algorithm

本周选择的算法题是:Single Number III

impl Solution {
    pub fn single_number(nums: Vec<i32>) -> Vec<i32> {
        let number = nums.iter().fold(0, | acm, &n | acm ^ n);
        let (mut ans_1, mut ans_2) = (0, 0);

        let mask = number & (-number);

        for num in nums {
            if num & mask == 0 {
                ans_1 ^= num;
            } else {
                ans_2 ^= num;
            }
        }

        vec![ans_1, ans_2]
    }
}

Review

Aids vs. Abstractions

作者对工具提出了两个很有意思的分类:

  • 抽象型工具,开发者不必知道其中的细节,知道如何使用即可,比如日期解析库,属于抽象的工具,稍微大一点的,极光一键登录这种也算,实际的运营商交付由第三方公司自己完成了
  • 助手型工具,是让开发者更快、更容易完成代码的编写,AI 辅助编程属于助手型工具,比如 Github Copilot,VS Code 编辑器也属于此类

抽象型工具的价值在于减少了代码逻辑的总量,至少表面上有所减少,这对开发者来说降低了心智负担;助手型工具的价值在于写代码、理解代码、定位代码更轻松,它通过智能提示、自动完成等手段实现,但是不像抽象型工具,它没有减少表面上代码逻辑的总量,自动完成当然好用,但是当你想实质性的改进代码库时,你仍然需要理解代码细节。

因此认识到工具的分类、正确使用我们的工具对开发者很重要,归根结底,为了真正改进代码库、以系统性的修复错误并高效地添加新功能,开发人员阅读并理解其代码库中的内容非常重要。

在使用助手型工具时,必须认识到,如果代码进入我们的代码库,我们就需要努力理解它,并且不要使用有用的编码辅助工具来跳过该步骤,未来会有更多、更好用的工具产生,但开发者要持续思考如何正确使用开发者工具。

Tip

在 django 中设置指定用户的 session 过期时长:

auth.login(request, user)
if user.username == "yihang":
    request.session.set_expiry(60 * 60 * 24 * 30 * 12 * 10) # 10年

Share

分享一个 Xcode 模拟器注册失败的解决方案吧。

因 Xcode 自身的 Bug 所致,用它内置的模拟器下载时偶尔会报错:

重试意味着要重新下载 7GB 左右的文件,而且,重试大概率也是继续失败。

此时你可以打开 Xcode 的下载目录:/Library/Developer/CoreSimulator/Cryptex/Images/Inbox/,该目录下保存着刚刚下载完的 dmg 文件,如果你重试过,那么目录下会有多个 7GB 左右的文件,保留一个即可。

然后关闭 Xcode,手动执行以下命令:

sudo mv /Library/Developer/CoreSimulator/Cryptex/Images/Inbox/{UUID}.dmg ~
sudo chown $USER:staff ~/{UUID}.dmg
open ~/{UUID}.dmg
# manual copy "/Volumes/iOS 17.0 21A328 Simulator"
sudo cp -a "/Volumes/iOS * Simulator/Library/Developer/CoreSimulator/Profiles" /Library/Developer/CoreSimulator/

Unix 系统安装软件其实是把文件放到指定的位置,虽然不理解 Xcode 为什么会报错,但是我们手动将文件放到 CoreSimulator 下也是 ok 的,最终文件路径如下:

/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.0.simruntimes/"

重新打开 Xcode,可以识别,问题解决。