Chaofan

For the next train

作者: qcf

  • WWDC 2023 Reaction

    此文没有任何新内容,纯粹写于2023年6月。现在才发布是为了清笔记软件库存。

    早上起来看了今年WWDC的Keynote,又到了我最喜欢的苹果懂王时间,先来点感兴趣部分的Reaction.

    一开场就快速公开了15寸MacBook Air,但其实它没有任何配置改进,还是M2,甚至15寸也还是8G内存(我快忘了当年的15寸Retina MacBook Pro有没有8G内存款了)。

    对于Mac Studio,我本来的猜测是,如果Mac Studio从此成为绝唱,那意味着Mac Studio只是一个Mac Pro的过渡产品;如果Mac Studio继续更新,只能因为Apple攻破了Mac Pro的技术壁垒(性能上或者扩展性上)。讲最大内存192G的时候提了一下LLM模型,看完发布会后我猜对了,这是全场惟一能蹭到这个热度的地方。

    结果Apple搞了个特别离谱的凑数版Mac Pro:依然是M2 Ultra,甚至还是2019款的外形,强行加上了几条PCIe通道(甚至不支持显卡),也不能更换内存。这实在是让人琢磨不透,要知道两年前Apple Silicon可不是这个风评。但我依旧觉得Mac Pro的窘态主要是Apple的选择而不是真的有什么无法攻破的难题,只要他们想,支持外接内存和显卡又没什么障碍。

    iMessage原来这么多功能都没有,之前都没意识到,有时候用仅仅是因为它方便。不过每年国内社交网络上都会嘲讽这一堆iMessage/FaceTime更新是自high,我只能说这些人更像自high.

    Journal App……啊哈哈哈哈,再次说明只要自己一直不开发,苹果就会帮你开发。终于可以从To Do List里删掉日记App这一项了。

    iPadOS提了PDF,我以为有什么大更新呢,你能不能好好在iPad上做个PDF阅读器?文件浏览器只能阅览,连阅读进度都无法保存。

    关于那堆Sharing功能,多年前做集体作业的时候和队友试过iWork的协作,特别慢,不知道COVID以来这几年的大更新改过底层原理没有。

    macOS的新命名让我非常失望!居然还在用加州地名,说好的十年呢?我还满心期待Apple既大猫和加州后会整出什么命名新活。

    macOS Widgets,这是Dashboard秽土转生是吧,果然历史就是个循环。以前的Widgets可以用HTML写,现在只能用SwiftUI写了,这是前进还是倒退?不过macOS Widgets可以从iPhone获得实时信息和交互,这是个有意思的小创新。

    Gaming……我是一直坚信,Apple并不真正在乎macOS的游戏生态的,到现在我的想法也没改变。更准确地说,Apple对Gaming on Mac的态度是「锦上添花」,有肯定是好事,但不会为了改变Mac的游戏生态而在其他方面作出妥协牺牲。这和性能没关系,有多少游戏是只有高端显卡才能玩的?

    Safari真是从Firefox抄了不少功能,这个Profiles抄得太直接了,出来的时候我没绷住,不过确实和专注模式结合得很自然。Web Apps好评(虽然iOS十多年前就有了),没想到Web Notification更新是为了这个,这下可以扔掉很多初级Electron软件了。另外,还有人记得Linux上有个叫Prism的软件吗?

    watchOS那些零零散散的更新还挺有意思。不过Apple整个生态系统都打得这么通了,还迟迟不开放Watch和iPad配对的支持就很刻意了。这个屏幕距离也是有趣的创新,堪比上次的iPhone当校色仪。

    库克说One more thing的时候相当激动,结合此前库克坚持在没有完善的时候发布AR设备的爆料,应该是想最后用这个来奠定自己的历史地位了。其实我对这个倒没有那么大兴趣,交互方式没有失望也没有惊喜,只是觉得设计上果然和AirPods Max一样像Apple Watch,果然是Evans Hanskey的手笔么?

    另外也没有发现Vision Pro在生产力上有很不可替代的用途。创新点确实不少,比如那个视频通话的人像设计。visionOS打破了大多数人的猜测,因为既不叫xrOS也不叫realityOS. 价格我反而不意外,想想第一代Apple Watch是啥样?现阶段看来就是个实验性产品。


    另外是一些社交网络上经常看到的问题。

    iOS没有什么更新。这是完全可以预料的。此前就有爆料说Apple抽调了大量人力去做AR设备,今年的传统系统更新内容可能比较少。而且每年iOS更新了都有人骂,我是真不理解在骂啥,或者说这些人想更新的是啥?iOS 13那个极致恶心体验我还记得呢。我此前还在想,要不Apple真可以给iOS加一个Profiles功能,让一个App可以开多个相互独立的Profile,实现这些人日思夜想的微信多开?后来想明白了,Profile这个功能不是现在就有吗?跟专注模式一块就可以了,问题是微信不会去做,Apple也几乎不可能去做App agnostic的系统变更,这是App Store生态的根基。

    iPad为什么不上macOS这个问题都快说烂了,值得专门开一期视频或者文章讲讲。

    macOS就更不需要太多更新了,或者说大更新它搞不出,小更新也没必要。macOS现在最需要的是加强稳定性,然后在开放和安全间保持一个平衡。只要认真修复bug和改善性能问题,就很好了。

    至于说拿诸如ChatGPT或者Windows Copilot来对比的,我想说是没意识到苹果这家公司的行为方式。技术或者模型上的差距就不说了,苹果这家公司是不可能推出类似ChatGPT的集中化服务的,这玩意全球政策风险巨大,还不适合融入生态赚钱。以前也有过苹果会推出搜索引擎的消息,最后也是无疾而终。最适合苹果的方式,应该是等到模型可以部署在本地设备上后,把功能集成在系统里。苹果没有自己的商用云,没有超级计算机,不能像微软一样靠给商业用户卖AI方案赚钱。Apple Silicon刚出的时候,有人觉得苹果会进军服务器市场,只能说说这话是真不了解苹果。

    总之,每次苹果开完新的发布会(尤其是WWDC)后,最好还是隔一段时间完全阻隔这些社交网络上的内容吧。

  • 把服务器迁移回Debian和Docker

    去年,运行这个网站和Mastodon实例的服务器是一台Debian 9,后来跳级升级到Debian 11后,遇到一些零散的版本不兼容问题。年初,因为自己在折腾ZFS的NAS,所以我也将服务器迁移到了FreeBSD. 老实说FreeBSD在很多方面比起Linux更「原汁原味」,比如严格区分第三方软件的/usr/local/etc和系统/etc目录;而且没有systemd,采用的更传统风格的rc.d启动脚本。

    如果你的服务器也是FreeBSD系统,且也想在其上运行Mastodon实例的话,分享一下我的Mastodon实例启动脚本,放在/usr/local/etc/rc.d目录下,然后在rc.conf文件启用即可。注意ruby和node需要通过rbenv和nodenv等工具自行安装。

    再次切换回Linux的起因是,我尝试升级PostgreSQL到14版本,但包管理器提示PostgreSQL 14和PHP PostgreSQL驱动相互冲突,会导致PHP数据库驱动被卸载。更新系统,以及将PHP升级到8.2后依然存在该问题。再者,自从迁移至FreeBSD后,各项服务的响应速度一直不如Linux快,总是要慢一截。我当然不愿相信是FreeBSD性能真的不如Linux,但一时也没找到确切原因,甚至让我对ZFS留下了一些不好的印象。加之FreeBSD在服务器提供商那里没有现成的监控工具,不支持Swift语言等原因,我最终决定迁移回Debian系统,并且尝试以全Docker方式部署服务。

    在此之前我对Docker并没有那么多经验,只在大学某些课程项目和工作时需要的测试环境里短暂尝试过。甚至一度因为macOS运行Docker需要虚拟机,忘记了原因是依赖Linux内核功能,而习惯性认为Linux服务器上也需要一层虚拟化运行Docker造成性能损失。所以一直没有在自己的服务器上尝试使用Docker环境。由于服务规模没有那么大,就不折腾Kubernetes或Swarm这些东西了,直接用Docker Compose就好。

    我自己修改过的docker-compose.yml文件就不完整贴在这里了,需要的朋友可以基于Mastodon的这个参考文件编写。需要注意的几点:

    • 参考文件里的数据卷(Volume)映射用的是相对路径,如果你有很多个服务,可能不会想在clone下来的mastodon源码目录里运行其他所有服务,所以要修改一下路径,或者干脆改成绝对路径
    • 从Docker Hub拉下来的tootsuite/mastodon:latest镜像已经是构建完成的了,所以请把build: .注释掉
    • 如果一个服务只有internal_network,那么不光它无法接受外部请求,也不能向外界发出任何网络请求。所以如果有服务需要向外面抓取信息,请加入external_network
    • Docker Compose的内部网络里通信的服务之间,主机名将不再是localhost,请留意docker-compose up时输出的实例名,通常来说是「启动服务时所在目录_服务名_1
    • 如果你使用Let’s Encrypt,特别是从一个已有Let’s Encrypt目录的服务器迁移过来,请记得,(/usr/local)/etc/letsencrypt/live中的证书不是真实文件,而是指向../../archive目录的符号链接!单纯映射live目录会导致Docker环境无法找到证书
    • 如果你不是用root用户管理一切,那么Docker内部的PHP可能没有修改映射目录内容的权限,导致WordPress能PHP服务无法自更新,请chown一下

    另外,默认的PHP镜像并没有安装很多常用的数据库扩展,我们需要写一个自己的Dockerfile,放在某个目录里,然后在docker-compose.yml中PHP服务一项指定build:值。Dockerfile参考:

    FROM php:8-fpm-bullseye
    
    RUN apt-get update
    
    RUN apt-get install -y libpq-dev libzip-dev libicu-dev libpng-dev \
        && docker-php-ext-install mysqli \
        && docker-php-ext-configure pgsql --with-pgsql=/usr/local/pgsql \
        && docker-php-ext-install pdo pdo_pgsql pgsql zip exif gd intl

    如果有什么Cronjob需要利用Docker内部环境执行也很简单,使用docker exec CONTAINER_NAME COMMAND即可,注意如果是给cronjob执行,不要加-it选项,否则会有invalid tty错误;如果是终端里手动执行,需要加上。

  • ARM Windows Dev Kit 2023

    快递纸箱里面套的这个纸盒就是包装了,里面没有更深一层的包装。

    微软宣称这个壳是部分由海洋回收塑料制成的,我记得他们还卖过一个类似的鼠标。表面带一点点磨砂的手感,不算特别好也不差,但不太耐脏。面积比 Mac mini 小一些,跟宽款的 NUC 应该差不多。

    微软产品有一个远胜苹果的地方:不管怎么放,Logo 不会反。

    三个 USB-A ,侧面还有两个 USB-C (不支持 Thunderbolt ),都是 USB 3.2 Gen 2 ,说人话就是 10Gbps ,手里没有合适的东西给它测个速,不知道同样是 ARM 芯片,会不会遇到 M1 上面 USB 跑不满的问题。一个 Mini-DP 和千兆网口。两个 USB-C 也支持视频输出,我插上 4K 显示器没问题,所以一共它能支持三个显示器。

    供电还要一个硕大的适配器,我看网上一些人说这个里面其实就一个主板,像 Mac mini 一样把电源塞进去多好。适配器功率 90W ,我自己使用也就在 10-25W 的水平,最高也就 30W.

    32G 的 LPDDR4x 内存,512G SSD ,内存方面比苹果慷慨一点,虽然价格也比当年 DTK 贵一点,599$,国内卖 4488.

    里面有风扇,重负载的时候会转,但声音很小,不靠近几乎听不到。试了下编译一些项目,特别慢。网上跑分说这个 8cx CPU 多核不如 M1 的一半,我自己编译的时候感觉也是如此,看来在开发上还替代不了 x86 PC ,用来调试 ARM 程序或者上上网还行。

    出厂系统是 Win11 专业版。微软自家的 vscode 、Office 、Edge ,还有 Firefox 等若干开源软件都是支持 Windows arm64 的。VS 和 JetBrains 这类 IDE 要预览版才有支持。Chrome 不知道为什么,还没看到支持 ARM 的 Windows 版。Python 明明官网有 arm64 版,但商店里安装的打开还是 x86. 感觉上 Windows 比 macOS 更淡化转译工具的存在,能达到多少性能还没有测试。

    Windows 更强的地方就是它支持 32 位的 x86 和 arm 程序,而且好像支持 Rosetta 不支持的一些 x86/arm 混编情况。这玩意的另一个宣传点就是有高通的 AI 专用芯片,我估计是和苹果的神经引擎差不多,只能通过系统特定 API 去调用,后面有机会玩一玩。另外我也发现了一些奇怪的问题,比如 1Password 目前 Windows 这边还没有 arm 版,我用 x86 转译,发现它生成的两步验证码 OTP 是错的,不知道是转译到哪里出现的 bug.

    总的来说 Windows on ARM 这边的瓶颈还是在性能。如果有 M1 这个性能水平的芯片,当作日常开发机就很舒服了,毕竟确实安静、功耗也低,足以把机器做得更小。现在这个性能很难说让人满意。

  • 在macOS上读取ZFS硬盘

    最近遇到一个情况,需要把一块SSD从FreeBSD机器上拆下来,然后读取里面的数据。刚好这块硬盘的文件系统是ZFS.(当然一大部分用FreeBSD的人都是因为它有ZFS,对吧?)众所周知,macOS原生支持的文件系统只有HFS+、APFS、exFAT、FAT32和NTFS(只读),我们需要一点额外的功夫来读写ZFS硬盘。

    尽管ZFS从名字上看是和NTFS、ext4一样的文件系统,不过其抽象层次已经超越了简单理解上的「文件系统」层面,提供了快照(Snapshot)和冗余阵列(RAID-Z)这样的功能。因此除了系统VFS API之外,ZFS还需要若干自带工具(比如 zfszpool 命令)才能良好工作。好在ZFS诞生于Solaris,在FreeBSD上发展,而我们熟悉的macOS属于正统UNIX,也是FreeBSD的近亲。将ZFS移植到macOS(以前叫OS X)的项目已经存续许久1

    首先,因为目前的macOS已经在安全性上做了许多限制,我们需要在系统设置里降低安全性要求。如果你的电脑是Intel芯片的Mac,此步不需要操作。如果是Apple Silicon的Mac,请关闭电脑,然后长按电源键,直到显示「正在载入启动选项」松开,选择操作系统所在的硬盘和输入密码,并在实用工具里的「启动安全性实用工具」中,将「安全策略」设置为「降低安全性」,并且勾选「允许用户管理来自被认可开发者的内核扩展」。确认设置后重新启动。这一步的原因是苹果考虑在未来的macOS中禁用内核扩展功能(kext),所以现在将其默认设置为弃用2

    然后我们去OpenZFS on OS X项目网站下载最新的release 2.1.0. 最近OpenZFS的网站遇到了问题无法打开,可以去Web Archive的Wayback Machine打开OpenZFS on OS X官网,或者在这里下载安装包(Big Sur及以上系统:Intel3Apple Silicon4)。打开pkg文件,一步步安装完成后,打开系统设置,在隐私设置的「完全使用磁盘」项内启用 zpool 支持。如果系统是Ventura,还需要在系统设置「通用-登录项目」允许Joergen LundmanJustin Johnson两项的后台运行。保险起见,安装设置完成后重启电脑。

    现在我们已经有了使用ZFS的软件条件,可以挂载ZFS存储池了。

    # 假设你的ZFS Pool名称为默认的zroot,否则按情况修改
    mkdir $HOME/mount_zfs
    # ZFS可以智能地检测到这不是它此前运行的系统,所以需要 -f 选项
    # 如果不加 -R,ZFS会将硬盘挂载到系统根目录 /,当然会失败
    sudo zpool import -f zroot -R $HOME/mount_zfs
    # 前一步已经挂载上了部分内容,要挂载诸如 /usr/local 等目录,需要更多操作
    sudo zfs mount zroot/ROOT/default

    现在就可以在 $HOME/mount_zfs 目录查看硬盘的内容了,也可以通过 df -h 确认各分区的挂载情况。正常情况下,Finder里也会列出大量挂载位置。

    操作完成后,记得取消挂载ZFS存储池。

    sudo zfs unmount zroot/ROOT/default
    sudo zpool export zroot

    参考资料

    注释

    1 其实多年前一直有传言曰Mac OS X会使用ZFS取代HFS+作为默认文件系统,尤其考虑到苹果已经将同样来自Solaris的DTrace移植到Mac平台作为系统工具一部分(现在Xcode的Instruments即依赖DTrace),但最后苹果否决了这个计划,然后在2017年发布了APFS。放弃ZFS的具体原因不得而知,也许是版权考虑,也许是ZFS的确不适合当时苹果即将发布的移动设备。
    2 未来用什么技术代替内核扩展尚未可知。一个适宜在用户态挂载任意文件系统的做法是新的用于网盘软件的FileProvider API,不过它的路径被严格限制。在苹果对Mac OS X Server还有野心的年代,内核扩展曾经还是苹果的主推功能,令人唏嘘。
    3 MD5 = 80bee1c01362372ea3a803fdac56bfaa
    4 MD5 = 1a72698d035d05d777c44e4cc734a952

  • 在M1上打包一个Electron项目

    Typora开始收费了。作为五年前就开始使用这款软件的用户,感觉非常奇妙,就像一个大家都期待它发生但又觉得它不会发生的事情最后真的发生了。当然,三年前就没有用它了。因为我,真的,不喜欢,Electron.

    此后,我偶然在评论区看到Marktext这个软件。点开主页看,跟Typora有几分相似,下载下来后方才发现,可执行文件是x86_64的,需要Rosetta 2才能在M1上运行。好在是自由软件,Apple Silicon上的Electron也很成熟了,我们可以自己动手。

    不过,肯定有坑。

    第一步:伟大的node_modules

    没有在深夜痛苦地yarn install过的人,不足以谈人生。

    项目的构建步骤还是挺清晰的,在仓库文档里。一个开源项目,如果没有文档指引其他人如何将其编译、运行起来,恐怕只能算半个开源。

    首先我们clone以后,就开始yarn,等等等。然后打开,发现安装超时了。至于原因,懂的都懂。一个解决办法是用nrm切换安装源:

    > npm install -g nrm
    
    > nrm ls
    
      npm ---------- https://registry.npmjs.org/
      yarn --------- https://registry.yarnpkg.com/
      tencent ------ https://mirrors.cloud.tencent.com/npm/
      cnpm --------- https://r.cnpmjs.org/
      taobao ------- https://registry.npmmirror.com/
      npmMirror ---- https://skimdb.npmjs.com/registry/
    
    > nrm use tencent
    
      Registry has been set to: https://mirrors.cloud.tencent.com/npm/

    这里用了腾讯的源。切换之后,安装过程就不会超时了。

    第二步:构建

    没有人比我更懂C++!
    —— 一位JavaScript程序员

    然后我们又遇到了新的问题:

    error marktext/node_modules/cld: Command failed.
    Exit code: 1
    Command: node-gyp rebuild
    Arguments: 
    ...
    ../src/cld.cc:9:12: error: no member named 'unexpected_handler' in namespace 'std'
    using std::unexpected_handler;
          ~~~~~^
    1 error generated.
    make: *** [Release/obj.target/cld/src/cld.o] Error 1

    看起来是某个C++代码编译出错了。std::unexpected_handler在C++17里被移除。我本想自己动手修改,不过还是先搜索一下这个包的GitHub仓库看有没有人提过这个问题。好在看最新的提交纪录,这个问题在2.7.1里已经修复。好吧,先手动改yarn.lock好了。

    继续安装,又遇到奇怪的问题,类似:

    name 'openssl_fips' is not defined while evaluating condition 'openssl_fips != ""' in binding.gyp while trying to load binding.gyp

    查看Github issue意识到,是我v17的node太新,那就降级吧。非前端程序员是不配使用高贵的n/nvm/ndenv/nodenv/nodeenv的,只能用Homebrew:

    brew install node@16
    brew link --overwrite node@16 # 小朋友切勿随意模仿

    舒服了……吗?

    第三步:签名

    然后就是惊险刺激的yarn run build release:mac了。

    众所周知,所有运行在macOS上的App都要签名,Electron也不能例外。所以负责打包部分的electron-builder会帮你做这个事情。但是,签名它失败了!

    Command failed: codesign --sign redacted --force --timestamp --options runtime --entitlements ...
    Electron Framework: code object is not signed at all
    In subcomponent: ...

    然后我们发现,出现这个错误是因为App里还有其他可执行文件,我们需要递归签名,也就是给codesign命令多传一个--deep选项。但我们不好手动调用codesign,只能魔改node_modules,找到用来签名的代码(‌node_modules/app-builder-lib/electron-osx-sign/sign.js):

    const args = [
      '--sign', opts.identity.hash || opts.identity.name,
      '--force',
      '--deep' # Add here
    ]

    重新构建。Build目录里就会产生打包好的zip和dmg文件。

    第四部:公证

    Time and time again, I asked you.

    为了测试这个软件被其他用户下载时能否正常打开,我将打包好的dmg上传到服务器再试着下载,悲剧地发现仍然有提示「无法打开『Mark Text』,因为Apple无法检查是否包含恶意软件」,然后只能手动在安全性设置里强制打开。这不科学。

    查阅文档后发现,除了签名这一步,macOS上运行的App还需要Notarize(中文意为「公证」),也就是将App打包发送给Apple,运行一个自动化检查,通过公证后的App可以打上标记,这样用户在电脑上打开时就不会有安全性提示了。

    自然,electron-builder也是可以帮你做这个事情的。在项目的electron-builder.yml中加入以下字段:

    build:
      afterSign: "notarize.js"

    如果你的Electron Builder配置文件是写在JSON里的,请把它改为对应的JSON记法。

    然后创建notarize.js这个文件:

    const { notarize } = require('electron-notarize')
    
    exports.default = async function notarizing(context) {
      const { electronPlatformName, appOutDir } = context
      if (electronPlatformName !== 'darwin') {
        return
      }
      const appName = context.packager.appInfo.productFilename
      return await notarize({
        # 请改为自己App的Bundle ID
        appBundleId: 'com.github.marktext.marktext',
        appPath: `${appOutDir}/${appName}.app`,
        # 临时打包用,所以直接填,真实项目里推荐使用dotenv
        appleId: 'MY_APPLE_ID_EMAIL',
        appleIdPassword: 'MY_APPLE_ID_SPECIAL_PASSWORD',
      })
    }

    注意。这里的Apple ID密码应该是你在Apple ID设置中生成的专用密码(如果你在其他平台客户端用过iCloud邮箱,你应该明白我在说什么),而不是你平时用来登录的那个密码。

    好了吗?没有。重新build,的确如我们预期的一般,App被发送给Apple进行公证了。但很快看到错误通知和邮件,告知我公证失败。查看JSON报告,错误信息是这样的:

    {
      "severity": "error",
      "code": null,
      "path": "Mark_Text.zip/Mark Text.app/Contents/MacOS/Mark Text",
      "message": "The binary is not signed with a valid Developer ID certificate.",
      "docUrl": null,
      "architecture": "arm64"
    }

    The binary is not signed with a valid Developer ID certificate.

    什么!?我可是给库克交过钱的!你们怎么能这样对我?

    冷静以后,我发现是用来签名的证书类型不对。通常来说,如果你之前只用过Xcode提交过App到Mac App Store的话,证书类型应该是Apple Distribution;而要在Mac App Store之外以dmg包发布App,签名的证书类型应该是Developer ID Application,所以需要找Apple重新签一个。

    按照这篇文档的说明,用本地钥匙串生成一个证书颁发请求。然后登录到Apple Developer,进入Certificates选择创建新的Certificate,类型选择Developer ID Application,点击上传前面生成的证书请求文件。然后我们就得到了一份新的证书,点击导入钥匙串。

    根据Electron Builder的文档,我们可以在环境变量里指定用来签名的证书ID:

    # 在钥匙串里找到对应的证书名字
    export CSC_NAME="YOUR_NAME (CERT_ID)"

    大功告成。

    顺便,因为Marktext的图标一直没有改为Big Sur的圆角正方形设计,我也自己改了一个。

    你可以在这里下载。只有arm64的版本,因为它已经很大了,Universal会更大。图标在这里下载。

    更多阅读

  • 宿舍生活杂忆

    本文写作于2019年6月,即将毕业的时候,最后一次在嘉定校区图书馆。

    很多人讨厌宿舍,但也有些人喜欢宿舍。我从高中开始住校,一开始遇到了一些麻烦,但后来还喜欢上了这种生活。

    在毕业离开的日子里,想以一些文字纪念我可能不会再遇到的集体宿舍生活。

    初中

    我初中的时候其实没有住校。实话讲,也没有进过寝室。对住校生的生活只有一些零散的印象片段。当时班主任在班上说要查寝,三天两头抓出来宿舍中违纪的人。因为住在家,每天早上被外婆叫醒,出门很早,往往是第一个到教室的。冬天天还没亮,看着对面宿舍楼下操场上人们一起做体操,也在想这种生活该是什么样子。

    高中

    高一的时候,住在正经宿舍里,宿管每天晚上都会来查寝,那是最严厉的日子。当时的宿管是其他班一个同学的家长,属于刀子嘴豆腐心那种,说话很凶,但不会扣分。我们都经常被她骂。有次晚上熄灯后,我和隔壁对床的同学敲墙玩被她听到了,被大骂一顿。

    中午一个人在宿舍睡午觉,晒晒太阳。当时在计划转学,听《光辉岁月》还能哭起来。那时候觉得育才的生活不适应,一直想转学回清华。这些事一直又没给身边的同学说,环境越逼越久,好像就成了一种伟大的志向。那时觉得虽然前路有挫折,但好像又很光明。买了本《新概念英语》,跟着网上的贴子一篇一篇背,好像觉得这样就能达到巅峰。

    尽管住校,但我很长一段时间都是周五晚上就回去的,还因此被班主任谈过话。入学之前本来差点去一个家长的朋友家租房借住,但后来还是觉得宿舍好,还好没去。在上高中后很长一段时间里,自己都觉得和这个环境格格不入,所以恨不得早点逃离。这个适应的过程太长了,个中发生的事,后面不由得暗自庆幸,还好没有更坏。

    留校的感觉挺舒服的。身边的人已经熟识,周五晚上拥有平日难得的自由,周六可以睡个懒觉,和同学一起去杨家坪。到高一下学期,转学风波过去之后,心结没了,就常常上完上午的自习,下午和他们去吃饭唱歌。很是愉快。相比后来,那时候也算是自己内心最为轻松、自由的时候之一了。

    后来搬到了返租房,管理宽松了些。住在八楼,实话说条件不太好。但是打牌、周末溜走,还是有些乐趣。那时候和身边的同学都熟络了起来。到了高二,也变得自由些了。经常串来串去,周末还跑到朋友宿舍去睡觉。周六下午唱唱歌吃吃喝喝再回家,简直无忧无虑。

    高中的时候自己就没有那么爱学习。按理说如果周六晚上也要留校的话,周六晚上和周日早上的自习都是要待在教室的。自己却一直也没怎么把这当回事,看过电影,也回宿舍睡过觉。甚至还一起去过学校的电子阅览室玩游戏。

    高三的时候住在二楼,那段时间常常出去。也在那个小屋子里幻想以后可能的大学生活。高三最后的日子里,天天对着招生手册盘算自己能考多少分,能去哪个大学。尽管心里已经有了去转专业的年头,但身边的同学都觉得我在白日做梦。

    高中宿舍生活里最后悔的事情之一是,高考结束那天晚上没有在寝室过夜,而是打完台球就回了家。像我这样喜欢熄灯后夜谈的人,在那种情景下应该有难忘的体会吧。可惜毕业后就匆匆地走了。

    大学

    大一的时候住在西南十一,自己觉得环境不太好。但后来看,可能是本部综合条件最好的男生宿舍之一了。南校区有些不方便,却也自成一体。涵盖了我大学最充满好奇心的日子。

    那时候自己在人文专业,课本就不多,何况还经常翘课。没有课的日子,或者在校园里溜达,或者回宿舍玩Minecraft,或者跑去图书馆看和课程没什么关系的书。常常感叹有图书馆实在是幸福,心态就是放大版的高中。

    转到软件之后第一年其实更闲,但总是想写点代码,图书馆是个适合的地方,常常在里面一坐就是一下午。但就更多的时候来说,那时候还是浪费了很多时间。有很多书本该在那个时候看完,可惜没有。

    后来搬到了嘉定。嘉定很远,而且很长一段时间也没有找好节奏,在寝室里玩,也和隔壁玩。但嘉定的宿舍其实很大,相比后面的宿舍是个大优势。

    刚去嘉定的时候,在里面买了白板,想在里面上课。后来又一起玩游戏。

    大学最后的一年里住进了最古老的西南一。位置好,但条件不好。阳光照进对面的盥洗室,总想像抓住阳光一样抓住最后的大学生活。

    与其说是怀念宿舍生活,不如说是怀念最后的自由的青春。不论你喜欢还是厌恶,都要独自走向新的人生了。

  • iPad Pro 2020

    又是一篇充分体现自己拖延症的文章。等到WWDC 2020结束了,等到iPad Air 4都出了。

    我还是入手了2020款iPad Pro.

    经过了长期内心的斗争,我本以为自己会改变消费策略,把目光转向电脑。早在去年国庆前,我就想入手iPad Pro,因为各种原因,我坚持了下来,没有下单。新iPad Pro的「加量不加价」让我再次鼓起勇气选择下单。

    「iPad Pro虽然的确没什么用,但总是一个让人心动的产品。」我相信不只我这么想。要打一个比方的话:iPad Pro就像一颗好糖,总不能靠糖填饱肚子,但若作为零食,便是上佳之选。一直以来,我都对用平板替代桌面电脑这件事感到疑惑,因为它们在交互模式上都有根本的不同——不断抬手操纵竖着的显示器并不好受,而双手拿起平板玩这件事又如此直观便捷。当然,要做成一个割裂的二合一产品,或许可行,不过有较大可能弄出个「四不像」,比如想做平板的Surface,和想变成笔记本的iPad。

    这代iPad Pro相比2018年10月发布的上一代iPad Pro升级十分有限:正面外观几乎没有任何变化(屏幕四角弧度据传有微调);后背摄像头部分从单摄变成浴霸,加入了1000万像素的超广角镜头和一个LiDAR传感器;万众期待的A13X并没有出现,而是换成了A12Z这样一个诡异的命名(据研究,其实就是A12X多开了GPU的第8个核心);RAM从4G上升到6G,成为苹果移动产品线里内存最大的设备;起步容量从64G升至128G,价格略有下降。和iPad Pro同时发布的,还有正式支持触控版功能的iOS/iPadOS 13.4,和一个iPad Pro专用的「妙控键盘」配件。

    虽然苹果「挤牙膏」的行为被消费者所调侃,但这不妨碍这代iPad Pro在平板市场继续保持旗舰地位。无论外观、性能、屏幕,它都已非常接近心目中「平板」的模样。

    不过,这一代最吸引人的并不是其几无变化的设计,而是那句广告语——「你的下一台电脑,何必是电脑」。它真的可以做我的电脑吗?

    其实本质上,iPad并无所谓「替代」电脑与否一说。「电脑」本就是模糊的概念。理论上,个人能负担得起,使用得来,跑得了计算的设备就叫电脑。自然,按这个道理讲,手机也算电脑,只不过手机更多用作沟通而非计算。从很多角度看,iPad(或者广义的平板电脑产品)都不是一个必需品。对某些人而言,电脑甚至都可以没有了。要看视频有手机,要改文件有电脑。平板这种尴尬的属性,其实就是发展到今天越发孱弱的原因。

    但乔布斯发布初代iPad时说得没错。iPad本就是一个介于电脑和手机间的过度产品。它真的没有必要,亦没有能力取代谁。对消费者而言,从附加产品的角度看待iPad,会更好一些。它就是一个很大的触控屏,仅此而已。

    去年WWDC时,苹果发布了iPadOS 13,宣布iPad的操作系统不再被称作iOS. 很多人非常振奋,认为这是属于iPad的一次革命。但,和许多苹果系KOL不同,我内心很平静,甚至有些想笑。除非iPad有朝一日真的用上了macOS(这已经不可能),否则给iPad上的iOS换一个新名字,只能理解为一种营销噱头:它的版本号和iOS同步,交互方式和iOS相同,未来的多数功能更新和Bug修复也是在两个系统间共享。这与watchOS/tvOS这样「完全不同」的系统相比,实在是令人猜测苹果是否是从微软改名部挖了人。

    当然,iPad确实具备一些独有功能,比如Apple Pencil、ProMotion、画中画、应用分屏和浮窗等。但这些功能早在iOS时代就已推出,并且更多是基于硬件上的限制,才只在iPad上提供。(iPhone的屏幕尺寸强行分屏简直是灾难)

    尽管由于疫情原因,iPad乃至整个平板市场都有所增长,但这不能掩盖普通用户对平板的需求变得孱弱这个事实。早年发布初代iPad时,它也被认为是又一个「改变世界」的产品,因为它有一个比手机大得多的屏幕。但今天看来,这块屏幕可能成了它剩下的惟一优点。

    在国内,连PC都不大需要的很多人身边最需要的电子产品就是手机。一方面是国内网站纷纷推行「移动优先」,甚至刻意砍掉Web版,一切用App搞定;另一方面是iPad应用生态似乎陷入当年WP一样的恶性循环,相当多头部尤其是电商类厂商在iPad上留下一个几乎不能用的HD版。这令iPad的屏幕「大而无用」,能完成的功能甚至还不如手机。

    与此同时,iPad还有一个远胜iPhone的「优点」——寿命长。现在还有大量用户使用着初代iPad Air甚至更早的iPad。因为它们电池容量大并且使用场景多是在家里,面对看视频这种日常需求,一台iPad可以插着电用很多年。(苹果当然能意识到这一点,因为它们甚至有「把iPad作为家庭中枢」的功能)再加上很多人的iPad是整个家庭共享使用,这使得iPad存量用户的换机欲望非常低。作为一个诞生十年的产品,iPad创造过成功,但它似乎很难再革命一次了。

    苹果对此的回应,是强调iPad的生产力属性。「生产力」是容易引起误解的一个概念。其实理论上,只要你不是拿着iPad看电影或者刷微博,而是在做输入,那就可以看作是一种生产力。

    回头再看这句广告语,的确值得玩味。你的下一台电脑是不是电脑,其实不重要,因为你或许的确不需要一台真正的「电脑」。需要的实际是什么,是一台可以运行我想要的软件的设备。为何iPhone将不能使用微信这则留言如此令人恐慌?除却当下大环境环绕的焦虑感作祟,还因为一个事实——对许多中国人(是的,也包括港澳台甚至海外华人)而言,微信很重要,非常重要,极端重要,重要到全世界最先进的手机,无论是苹果的、华为的、还是三星的,不过是一个运行微信的容器而已。只要能流畅地运行微信,这部手机就已经足够作为大众意义上的「手机」了。

    如此类比可帮助我们更好理解苹果心目中这个「不是电脑的电脑」究竟为何物。简单来说,如果你的日常工作无非面向收发邮件和消息、使用Office,那么你需要的或许不是具体的「一台运行Windows 10且搭载Intel处理器,具备有线键盘鼠标的电脑」,而是「一个可以帮助我处理邮件、收发消息、编辑Office文件的电子设备」。同样道理,如果你重度依赖的是某个专业软件,那么当它可以在iPad上良好运行时,iPad对你而言,就是电脑了,或者说,就不需要电脑了。

    可惜,还是想得太美。

    首先,要让iPad能够完成目前电脑能做的事情并且做得更好,不是那么简单的事情。拿最常见的Office为例子,虽然某微软员工声称现在所有平台的Office都共享同一套底层逻辑,但显然iPad上的Office功能是不完整的。微软有没有足够的动力去在iPad上实现这一套且不论,这些UI显然需要针对iOS和触控屏的特点进行优化,需要大量的迭代。大厂都要花这么些功夫,小厂自然更没有资源去完成这些事情。

    兼容性这件事,又美妙又可恶。如果IT行业愿意抛弃兼容性,那么我们可能会省下一大笔成本。但实际是,那些真的愿意向兼容性发起挑战的公司,大多都失败了。向下兼容虽恶心,但也是行业巨头们的护城河。苹果一向擅长放弃兼容向前看,但工作里稍严肃些的场景并不会这么宽容。一些公司日常需要的程序,甚至是一代代传下来的,原公司都倒闭多年,源代码都没留下。连Mac平台都在这方面困难重重,以至用户颇有微词。更何况根基不稳,限制还颇多的iPad平台呢?

    最后,将iPad当作电脑使用这件事,可以看作对未来电脑形态的一种探索。几年前的我们绝对想象不到苹果会在iPad上引入鼠标和触控板。考虑到苹果以前的各种「挣扎」,可以判断,他们是在这个问题上妥协了。也就是说,在他们看来,未来的电脑仍然需要键盘和鼠标。如果是这样,iPad就很难在传统电脑擅长的交互领域战胜它们。而强调「何必是电脑」的iPad,自身也难免「电脑」的本质了。

    更重要地,无论如何定义电脑,逃不出的一点是:用户需要有运行任意代码的自由。显然,这个要求和iOS平台的一贯作风彻底矛盾。所以我们看不到任何第三方JIT引擎,看不到真正的Shell,看不到编译器。很多人在猜测Xcode是否会被移植到iPadOS. 如果苹果真的有这个想法,如何解决这个矛盾,就是绕不过去的坎。这个难题,或许不会比如何处理与Epic的矛盾来得简单。

    总之,iPad在生产力的层次上,对比Mac难有多少优势,无非是轻便程度、触摸屏、Apple Pencil,或许还有那个暂时派不上用场的LiDAR感应器。我们当然可以畅想未来:旧的东西不会迁移到iPad上,但新的东西可以在iPad上出现。但至少这一点依赖苹果是不够的,除非整个平板软件生态集体向前跃进。可是,平板在手机面前依然溃败得不成样子了,又有什么办法重归辉煌?

    在今天,iPad Pro从设计、性能、系统各个方面来看,都是极为优秀的平板。看起来「真香」的iPad Air 4,相比起来只能算充满妥协的「刀功」产品。苹果仍然在不断探索iPad作为计算设备能够达到的边界。COVID-19蔓延以来,各类平板销量都在增长,说明平板作为一个品类,的确有真实的价值。但仍然难避免“Nice to have”这个定语。要知道「你的下一台电脑」长什么样子,也许还需要很久。

    在此之前,就别抱太大期待了吧。

  • 毕业一周年记

    去年的今晚,是睡在大学宿舍的最后一个晚上。同样是上海6月的天气,湿得走两步路,短袖就恨不得能拧出水来。早上是毕业典礼,嬉笑怒骂的我们当时大概只记得录下延毕同学上台的视频,剩下的只剩最后唱的那首《起风了》。噢,说到这首歌,我对吴青峰了解不多,但因为两首歌,我果断判定,这个人不值得黑。

    中午的雷阵雨突如其来,雷声大到我需要戴着耳塞在宿舍楼的家长中穿行。看着匆忙中,一些四年都没说过几句话的同学就这么离开,我想的却是他们会不会记得我的名字。下午去唱歌。说起来大学五年都没唱过几回,当年入学前刷新生指南最关心的可是——四平路附近哪里有KTV。

    都唱了啥是记不清了。最后点了首《再见》,前奏一起就有人哭了。哭的样子怎么形容呢?「如果这是真的那我希望这是假的,如果这是假的那我希望这是真的。」边流眼泪边说,「记得要常联系」——一年来,这倒一直在践行。

    不想收拾东西的我,是个怀旧的人。此刻倒是得闲感慨两句,拿出收集的大一以来收到的所有传单,看了一遍。物理不好,想问时间是均匀分布的吗?呵,在这至少不是,要不然怎么会躺尸的日子被压得这么短,毕业的季节又拉得这么长。

    然后就是每个人都会遇到的「房东是社会给每个毕业生的第一课」这类常见的故事了。那就来聊点没聊过的别的。知道火箭这个女团的名字,对当时我们这些大学生来说,不该是什么机缘巧合的事情。更何况,看开头几条内容就知道,我的(新)微博号就是在那个时候诞生的。

    但我到今天都不是个爱追剧追节目的人,《创》也就看过一集,剩下的就是被拉着去同学宿舍看的总决赛。记忆中,小七出道时好多男生沸腾了,吴小姐刚下飞机就问我小彩虹出道了没,同学能把人逗笑的神比喻,还有那个名字缩写都能骂上热搜的神奇人物,我要是她可能早八百年就会因为抑郁退赛。

    后来的系列新闻也是全程吃瓜。某天早上醒来听到《卡路里》差点在床上把牙磕掉,贴吧看到「夏家十千金」,和小吴吃河粉瞟了眼微博知道了三人离团,操场跑步刷歌刷到了《LIGHT》。再后来,在前公司实习时很欣赏的一位同事发了条朋友圈,是火箭的某位成员代言了他新公司的产品。无聊中再次搜索了一下这个女团的名字,才得知她们要在上海开演唱会的消息。

    我可太喜欢看演出了。只要不是讨厌的,谁都行。上回陈奕迅的演唱会还是三年前。买不到他的,我还买不到你这破团的吗?结果要团票。我寻思这些人我也没谁特喜欢的,算了算了,买散票吧。后来才知道有团粉区,追悔莫及,自此批皮团粉。我就这么鬼使神差地去看了一场我并不了解的女团演唱会。(估计当时看NBA的室友对《生而为赢》都比我熟)

    好像又说远了。对不少人,喜欢、相信、崇拜、信仰,或者厌恶、憎恨、恐惧某个事物,内核其实是关于某个「故事」。人是爱听故事,爱讲故事的生物。好比老人爱唱红歌,内容其实不重要,只要是青春时代的记忆就对了。我也一样。2018到2019年这段时间对自己影响极大。社会、家庭、学业、求职,种种事都不断在重构和变化。值得回看的画面太多。回头看,也许追的就不是星,是两年前的自己。

    有天半夜,那位现在美国的同学突然发来消息:「火箭要解散了」。我明白他想说什么。是时候向那段日子告别,然后向前看了。每个人一路上都在不断地告别:告别校园,告别亲人,告别title,告别朋友…即使是无奈,或许也该接受了。

    火箭的告别典礼上,真情实感的主持人说:「火箭终将返航,而少女永远发光。」和各种各样的过去说再见以后,但愿我们都能发光,照亮生活,照亮身边爱的人吧。

  • 怨气和戾气

    最初写作于2018年8月

    记得第一次听到「怨气」这个词是在高中语文老师的课堂上,但是对此的体会可以追溯到更早。由于国内互联网特殊的环境,早期接触贴吧的人肯定都有过和人吵架的经历。要知道那时候的我都不太会用家乡方言骂人,在网上说人是 SB 却一套一套的。不过当时可没觉得这些算什么社会问题。可能年轻气盛,网上的争吵也还没映射到具体的社会问题。尽管我自己接触互联网的时候已经是 2007 年,换算成历史也快进入近代了。不过每次回想起当年,总会觉得有种奇特的美好。同现在打开手机能够看到的一切比起来,那时候的互联网生态依旧显得蛮荒。没有如今那么大的巨头,没有 O2O,上网只能用电脑(GPRS 也就能看个新闻)。要是把那时的我放到现在,可能会寸步难行,因为没有手机号。

    后来有了微博。李开复说过「微博改变一切」。微博是 2009 年推出的产品,但是一直到我开始注册微博的 2011 年,它才有了比较大的影响力。随着微博的流行,网络上的自由主义思潮也达到了一个(至少是表面可见意义上的)高峰。在我的记忆里,自由主义的思想是随着韩寒而彻底流行起来。在他之前你很难看到如此有影响力的人传播着属于他们的观点。韩寒依靠他的博客和若干杂文,奇迹般地成为了一个在这种体制下「站在刀尖上跳舞」的人。那时候的韩寒还没有微博。(其实我认为韩寒注册微博可以看作他和世界妥协的标志之一,另一个是韩三篇的发表)微博上的言论潮流却往往可以追溯于他。韩寒少有真正提及真正可能越界的词比如「革命」。但下面的读者却又像有默契一般心知肚明。韩三篇的发表挑明了这一切。老实说,如果基于大众印象内的革命叙事,韩寒在韩三篇里说的话都是事实,如果换成另一个保守派人士,可能都不会激起多少风浪。然而这是韩寒。一些人认为这代表了他向体制求和,一些人认为韩寒过度悲观。讽刺的是,韩三篇中的一些警告到了今天已然成为了现实,乃至常态。

    不得不说韩寒是一个聪明人。在当年社会开始反思中国教育的时候率先「开第二炮」。后来因为互联网和加入 WTO 之后的发展需要,社会风气开始再次软化。这个时候的他借助自身反教育体制的经历和一系列在当时看来尺度颇大(实话说,放在今天尺度也很大)的博文,打造了自己舆论领袖的形象。而在 2011 年这个神奇的时间节点,他突然放弃了这一角色,仿佛先知一样投入了轰轰烈烈的大众娱乐化、娱乐资本化的浪潮。自导自演的他,背负「国民岳父」的称号,名利双收。

    那时候微博上常常有负面新闻,新浪又没有形成熟练有效的舆论控制机制,网民们习惯了正面又千篇一律的官方报道,看到这些新闻自然是群情激愤。当时的政府也没有处理互联网的足够经验。结果往往是网民的节节胜利。政府的权威在削弱。出于本能的愤怒不能叫戾气。戾气是一种一反常态的过分施怒,因为其他的愤怒找不到出口。

    中国互联网自 2012 年以来改变的速度也许超过了科技发展的速度。你可以说现在装备各类最新技术的 iPhone 依然没有脱离 2007 年发布的首代的核心,但是现今的中国互联网,已经不再是当年那个在新闻里被打上标签的互联网了。这是若干年来整个中国社会变迁、改造、发展、踌躇的结果。所谓网上的种种戾气,也只是对现实生活的侧面映射。

    现在的人看不到希望吗?是的,不妨看看三和大神们的事迹。但十年前的现实就一定更有希望了吗?不如说,是更多之前不能上网的人进入了这个世界,互联网变得更像现实社会了。十年前在大城市奋斗的那代人,还算是第一代民工,城市的生活再苦再累或许也比家乡的绝望好上百倍。如今的这代务工人,就是上代留守儿童长大后的样子。他们没经历过父辈小时候的苦难,所以也怀疑所谓奋斗的价值。高攀的房价和严苛的户籍更在他们的梦想上打了一个问号。更何况,他们今天遇到了被老一代称之为「鸦片」的东西。互联网麻痹着他们。我更愿意相信「奶头乐」只是一个阴谋论,我也认为在人类进化之前,代与代间不会有本质差异。但不得不承认,互联网吸引着他们。与其说他们沉迷于互联网,不如说是资本秘密地把一批又一批年轻人转化为自身的养料。

    伴随平均素质降低的另一个问题是隐私泄露越发严重。隐私是一个多方面的话题,信息泄漏可以从有意到无意甚至是被强迫的。抛却对普通网民还算是有些门槛的黑产、社工库,普通人只要善加利用搜索引擎,甚至只要在同一个网站上多点几个按钮,足以找到和人吵架时向对方人身攻击的「口实」。每个人都在共同经历着时间,但时间对每个人的价值却是不对等的,无休止无下限的攻击很容易让时间价值高的一方率先放弃论辩——这往往被另一方视作自己的「胜利」。一个很容易推导出的结论。这快速拉低了整个互联网的舆论水平。最终,这帮有时间而无下限的人占领了互联网。早在「杠精」出现之前,此种模式在互联网上即是常态了。我也曾遇到过此种人身攻击,那是在 2010 年。

    说来有趣,如果对近几年的互联网舆论趋势有感受,就会发现「杠精」一次反倒可能是舆论统一化的结果。只要是对某个新闻进行反主流评价的人(无论正面或负面),都往往会被打成「杠精」。词语外延的快速扩展导致的还有对它的疯狂滥用。人人都是杠精,人人都说别人才是杠精。或许几年后,又有比「杠精」更强的词出现,谁知道呢?

    坦白说,对充满戾气的互联网,个人其实没什么办法。「在网上,没人知道你是一条狗」,这句话随着实名制的推广而几乎失真。但如果抛弃上帝视角,从一个普通网民的角度看,它反而更贴切了。如今的互联网远不是理想主义者的乐园了,参杂着大量商业投机和资本角力。如果和你吵架的人就是以此为职业呢?当你的真情实感苦苦劝说都被当成了别人的业绩的时候,这种争吵还有意义吗?

    换句话说,当你都已经认识到互联网充满戾气的时候,说明你已经有了筛选信息的意识。那么,很多信息对你来说也不是必要的。不接受戾气,不让自己产生戾气。这样的人总会慢慢聚集在一起,然后由于内容的高质量而扩散,水平降低,这群厌烦戾气的人再次换到另一个平台上。在社会平均文化水平有根本性变化之前,也许这是互联网原住民的宿命。

  • HomePod?


    音乐

    两周以前,我购买了一个苹果的HomePod智能音箱,这是我在购买AirPods第二代的半年后下单的又一个苹果产品。原因很多:一方面是想凑齐所谓的苹果全家桶,但因为国行缺少ECG功能的原因一直没有购买Apple Watch;然后本着「升级不如买新品类」的原则,打算在现有设备坏掉之前暂时不升级(当然更重要的原因只有一个字)。另外的原因,就是看到HomePod那个拿奖的广告短片,以及某品牌在11月让我感到不满的一场发布会。

    其实在学校的时候,看到HomePod这个广告并没有什么感觉。不就是一个人回家之后跟着音乐跳舞和幻想吗?没想到,等自己当了庸庸碌碌匆匆忙忙的上班族以后,竟然对广告中的场景有了些惊人的共鸣。几乎对所有人而言,上班都是一个用时间和劳动来换取金钱和地位的事情。但一些时候,人付出的不仅是时间,还有渐渐被工作冲淡的自我意识。说得露骨些,就叫「人变得不像人」了。熟读马克思著作的同学,看到这里,脑海里大概已经浮现出对应的段落了。

    自我,自由

    身处一个和自己差异颇大的环境,是常有的事。这不代表应该浑身棱角地「抵抗」,或者毫无顾忌地交融。人要恰饭,人要生活,难免会做一些违心的事,毕竟,绝对的自由不存在,不是吗?可是我们就该将当年随心所欲的自我弃如敝履吗?回到家,关上门,音乐响起,一切都属于我,一切都被我掌控。即使不会跳舞,也可以随意扭动。别人的评判算什么?单元测试又算什么?这才是自由。这才是,他!妈!的!自!由!

    的确是被感动到了。

    一只蚂蚁也有尊严

    不过HomePod的价格算不上「便宜」。虽然想买,但没想好什么时候买。下单的冲动,还由另一部分构成。我不太想在这里过多评判某品牌。除我认为「最大的抵制就是不关心它的一切」以外,在国内的互联网舆论场,任何涉及这个公司和品牌的信息,都必然变成没有下限的污秽战场。我尊重任何人喜爱一个品牌的自由,但请其他人也尊重我的这种自由。

    可惜文字难免和现实有出入。不是所有像「人」字一样有两条腿的动物,会打字了就叫人。因为使用、喜爱某个品牌的产品就受到无差别的侮辱,这是人干得出来的事?我毫不怀疑,这种行径如果被人恶意放大,完全有成为刑事案件的可能。还好,在今天,键盘是比拳头更受人青睐的武器。不知近百年前的先生大家们看到此幕,是该笑还是该哭。

    你的每一次消费,都是在为你想要的世界投票。

    这是消费主义的箴言,但也的确可作为消费者的自白。在互联网和记录技术的帮助下,没有一个时代比现在更容易表态。但人们却更不爱表态了。因为「无力感」,因为「一些东西早已深入我们生活的方方面面,你抵制、你表态有什么用?」。可是,如果连在自己内心保有态度的权利都不应该有,那人类为什么不去做牛做马?

    更何况,我们一直在说的是消费,甚至都不是什么政治立场!这太神奇了。到底是什么魔力,能够让关于它的一切讨论,一切,都被搅成一桶浑水?

    不是所有的Air都那么Air

    HomePod如其他的苹果产品一般,只要你有iPhone(或者iPad),启用它的过程简单得神奇。然后,如果你有Apple Music订阅,就可以自然地让它放歌了。如果没有订阅且也没有使用过AirPods等产品的话,你可能需要一些时间来弄清苹果系系统中的输出逻辑,还有记住那个AirPlay的图标。

    但HomePod不完全是作为一个辅助屏幕的音频输出设备而设计的,它不是一个「外放的AirPods」。它不依靠蓝牙而采用AirPlay协议,利用Wi-Fi控制,不需要配对。在用手机放歌后,你也可以自如地「抽身」,在它播放的同时用手机扬声器输出其他声音。这个逻辑不像蓝牙耳机一样直观,因此需要多操作几次来理解。如果你不清楚AirPlay是什么,那不妨简单地理解:它更像电视的「投屏」而不是耳机的「配对」

    看完以上描述,并不会增加对它的太多了解,因为事实上,我的描述避开了大部分这个产品对普通用户而言的障碍。如果说其他苹果配件是「对非苹果生态用户有不便」,那么HomePod则是几乎彻底锁死在了苹果的花园里:如果你希望用HomePod播放歌曲(这是音箱的基本功能),你要么拥有一个Apple Music订阅,要么需要用支持AirPlay的输出设备将音频输出到它。甚至,没有一个iDevice,你都不能激活它。

    AirPlay在使用Apple Music时体验还是相当顺畅的。由于账号在国区,我没有用它尝试苹果的其他官方内容服务(比如Apple TV+)。用QQ音乐等App使用AirPlay播放也算正常,和使用蓝牙耳机差别不大。不过在我用iPad在HomePod上播放QQ音乐时遇到一个恼人的问题:有时切换App以后会听到「不知道哪里来」的类似广播的视频声音。如果这句表述让你觉得有些灵异,其实就像是某个视频「劫持」了HomePod,让其播放视频的声音而不是当前的音乐。原因还不是很明确,因为我还没有在iPad上使用QQ音乐之外的第三方音乐App。

    在没有做任何优化的前提下,HomePod作为视频的声音输出是有延迟的,明显到无法正常观看。好在只要App针对这个延迟做一些调整,就能够恢复正常。腾讯视频和YouTube都可以正常使用。Bilibili未做兼容。其他视频App未尝试。这是AirPlay协议的缺陷,若使用蓝牙则不会有这个问题。但根据某位网友的报告,苹果官方在邮件中曾表示没有让HomePod支持蓝牙输出的打算。

    另一个常见的话题是利用HomePod组立体声。因为发现了EPP优惠,希望将第一台退货,然后下单第二台。在中间重叠的时间里,我尝试了用两台HomePod进行双声道播放。将两台配对的过程很方便。实际上在你激活第二台时,它就会自动询问你是否要配对,并且可以选择谁在左谁在右。需要注意的是播放时最好在二者中间,且让它们稍微保持一些距离。至于体验……也许只能用美妙来形容吧。但需要注意:HomePod双声道播放视频还需要一些额外的支持。我没有尝试,据网友报告,YouTube和Netflix等App都支持,但包括腾讯视频在内的国内视频App暂时没有。

    答应我,别做云用户好吗?

    坦白说,我对音质没有什么认识。一直以来,我播放音乐的设备也只有自带扬声器和官方的耳机。如果要用一句话总结我对它的感受——我重新发现了熟悉的歌曲里没注意过的细节。我不知道网络上对HomePod音质和同价位音箱的比较结论是否真实。我只希望对这款产品感兴趣的人,都去实体店里感受一番,而不是用自己的设备在网上看别人录音的视频来得出结论。但凡对数码产品有些基本认识的人应该都能意识到,诸如「用60Hz刷新率的屏幕看120Hz有多流畅」和「用自己的设备听另一个设备的音质有多么好」这件事有多么荒谬

    「我好像不太明白」

    如果不使用手机控制播放,你也可以在HomePod上呼叫Siri。HomePod内置了一颗A8芯片,考虑到它是一直插电使用的,所以支持「嘿Siri」也理所应当。(iPhone6用户会被冒犯吗?)这个Siri的体验和你在其他苹果设备上使用的,本质也不会相差太多,除了没有屏幕,以及很多操作(比如播报行程)需要解锁手上的设备(这一点也许可以设置)。

    根据一些测评者的报告,苹果对「嘿Siri」的响应有一个优先级,比如AirPods优先级最高,HomePod次之,iPhone等在后面。但在我日常的使用中,iPhone7在唤醒Siri后可以自动退出以给HomePod「让位」,但使用同样芯片的iPad 2018经常不行。这其实会带来一些麻烦,因为如果你告诉Siri「放一首歌」,iPad收到后就会用它自己的扬声器播放。要解决这个问题,要么说「用HomePod放一首歌」,或者把iPad的「嘿Siri」关掉。另外,虽然HomePod不使用蓝牙作为音频输入,但苹果设备间需要依赖蓝牙进行「嘿Siri」优先级的协商,因此如果关闭蓝牙,设备就不会「让位」了。

    苹果推出HomePod除了播放音乐之外,也试图将它打造为一个智能家居的中枢。所以HomePod的配置和升级都位于「家庭」App中。我目前还没有支持HomeKit的设备,但HomePod还是让我稍微增加了些购买这类产品的想法。小米有一部分产品支持HomeKit控制,但更多产品还是在它的米家生态里。看起来,智能家居产业还在起步阶段。

    越反越买

    所以,如果你不是对很多东西有执念(比如外形,比如苹果生态,比如白色),也不是一个苹果产品的爱好者,也没有极强地想花掉这两千余元的愿望的话,我不推荐这个产品。不过如果有一天你决定买一个Apple TV,倒是可以入手一对作为扬声器,与此同时你会受到来自我的真诚敬意。(目前看来,在国内使用Apple TV可能也就比几年前使用Windows Phone的体验……稍微好些?)

    苹果现在的趋势是「万物皆可Pro」,所以这个已推出两年多的销量不佳的设备(很少有产品有在苹果官网降价的待遇)是否也会出一个Pro版亦未可知。希望他们不会。其实在我看来,即使HomePod推出一个和AirPods(非Pro)价格相同的所谓Lite版(坊间有这传言),销量也不会好到哪去。因为这样一个看上去温柔的小玩意,(尤其在国内的环境)面向的可能却是最硬核的一批用户。

    无论你不喜欢苹果,喜不喜欢索尼,喜不喜欢某某品牌也好,产品品类终究是有限的,爱好却是无限的。一个人可能不喜欢摄影,不喜欢音乐,不喜欢游戏,但总会有个神圣的精神角落,为你保留孤独、自由,和骄傲。希望你找到它。