Chaofan's

Bonvenon al la malpura mondo.

标签: Mac

  • 快速了解SIMD

    SIMD即Single Instruction Multiple Data缩写,单指令多数据,表示CPU设计中一种提高程序并行度的技术。和它对应的SISD、MISD和MIMD三个概念已很少有人提及,倒是GPU又引入了个新概念叫SIMT (Single Instruction Multiple Threads)。

    换种理解方式或许更实在些:SIMD和SIMT表示逻辑上有多个执行的实体,但只有一个执行的状态。至于其他三种:

    • 一个执行实体,一个执行状态,属于单线程
    • 一个执行实体,多个执行状态,属于协程
    • 多个执行实体,多个执行状态,属于多线程

    更实用地说,编程用途上的SIMD就是一组指令集扩展,能用一条指令同时完成若干个数据的相同操作。由于大量计算程序最耗费时间的代码都是核心的若干循环,如果能有SIMD指令的帮助,虽然复杂度还是没有改变,但相当于耗时除以一个不小的系数,不算免费午餐也是廉价午餐了。

    快速上手SIMD指令

    这里用C语言举例,看下面的代码。

    #include <stdio.h>
    
    typedef unsigned vecu32 __attribute__((vector_size(16)));
    
    extern unsigned data0[];
    extern unsigned data1[];
    extern unsigned datalen;
    
    int main(void) {
      for (int i = 0; i < 100000; ++i) {
        int j = 0;
        for (; j + 4 <= datalen; j += 4) {
          vecu32 a = *(vecu32*)(&data0[j]);
          vecu32 b = *(vecu32*)(&data1[j]);
          *(vecu32*)(&data0[j]) = a + b;
        }
        for (; j < datalen; ++j)
          data0[j] += data1[j];
      }
    }

    为阻止编译器做常量优化,这里把两个数组的定义放置在另一个文件里,长度都为65536个unsigned。在Apple M1上,使用Apple Clang 16搭配-O选项,运行时间是0.87秒。而如果不使用vecu32,即注释掉中间用到vecu32的for循环,运行时间会来到2.40秒。这里一个vecu32是16字节,即能容纳4个unsigned。虽然没有完全达到4倍性能差距,但2.8倍也是非常明显的性能提升,奥秘就在这里声明的vecu32类型。

    如果你稍微熟悉GCC或Clang,就能发现这里的__attribute__是GCC风格属性扩展,而vector_size属性就是为向量类型准备的。在编译器语境,SIMD容器就被称作向量 (vector),实际上确实比C++的std::vector更接近数学上向量的原始定义。这里一个vecu32能容纳4个unsigned变量,那我能否定义一个32字节的vecu32来进一步加速呢?

    先看当前版本的汇编。在ARM上用clang -S可以发现输出中有一条add.4s v0, v0, v1指令,查询文档可得知这条指令的意思就是向量整数加。再把源码中的16改成32,for循环头上的4改成8编译一遍,会发现执行时间几乎没有变化,而汇编里有了两条 add.4s而没有想象中的add.8s存在。失落之余先别着急,在输出汇编的编译命令中加入-arch x86_64 -mavx,能惊喜地发现X86平台是有32字节SIMD指令的,叫vpaddd。甚至,甚至可以更进一步,把上面代码的向量尺寸改为64字节,循环步长改为8,然后加上-mavx512f选项,会发现X86版本还能有对应的单条指令 (尽管名字还叫vpaddd,但寄存器类型变了,实质上是和前面的vpaddd算不同的指令)。

    这告诉我们一个道理,SIMD指令的支持范围和CPU架构有关,和编译器选项也有关。

    SIMD和CPU架构

    不同CPU架构支持的SIMD长度和类型各有不同,但主流指令集都有面向SIMD的扩展。

    x86

    最早的x86 SIMD扩展指令集叫MMX,来自1996年的Intel,以加速多媒体程序。但它仅支持64位长度,并且只能加速8位到32位的整数操作。因为早期x86 CPU的古怪设计,这个MMX指令不光短,还会占用浮点数的寄存器,用今天的目光看实在鸡肋。AMD也看不下去,推出了名叫3DNow!的扩展,支持浮点SIMD。为了应对,Intel很快推出了新的SIMD扩展,也就是今天有名的SSE (Streaming SIMD Extensions)。

    SSE支持128位长度的向量,且可容纳如4xfloat、2xdouble、4xint、8xshort或16xchar等不同类型。更重要的是,因为过去X86对浮点的支持过于奇葩 (x87指令集),SSE对标量(即单个)浮点数的操作也做了延伸,float和double的操作终于可以对应到和整数相似的指令了。SSE经历了多次扩展,涵盖了整数和浮点数从算术到重排和加密等各种操作。对今天的x86 CPU来说,SSE可以视作默认支持。

    十年后,Intel又发布了新的SIMD扩展,称作AVX (Advanced Vector eXtensions),总体和SSE相似,不过长度又扩展了一倍,支持256位向量。AVX还有更变态的延伸版本叫做AVX-512,顾名思义就是512位向量,8个double或者64个char同时操作。

    ARM

    ARMv7引入了高级SIMD扩展,通常也被称作NEON。和x86的MMX/SSE类似,NEON支持64位和128位两种向量。虽然ARM处理器家族比x86更复杂多样,但今天也基本可以假定,主流ARM芯片都支持NEON指令集。

    一部分面向服务器的ARM处理器,为了支持更长的向量,走了和x86不同的道路,推出了称作SVE (Scalable Vector Extension) 的动态向量扩展。和AVX固定256位、AVX512固定512位不同,SVE没有固定向量长度,而是在向量操作之外,又引入了一组谓词指令和寄存器,这就可以在汇编层面体现上层的循环逻辑,从而在运行时确定向量长度(也就代表着循环次数)。这样做的好处是:一个为SVE编译的二进制程序,在不同向量长度的CPU上都可不经改动执行,自动获得硬件向量变长带来的性能提升。

    SVE支持128到2048位的向量,ARMv9引入的SVE2又加入了若干新指令。本文不计划深入讨论SVE的使用。普通桌面级的ARM CPU (如Apple M1),并不支持SVE。

    RISC-V

    RISC-V把除最基本整数指令外的所有指令都归类为扩展,并以单独的字母标记,如扩展F和D分别表示单精度和双精度浮点数。RISC-V曾经有个叫做P (Packed SIMD) 的扩展,但今天更主流的是扩展V。RISC-V的创造者之一David Patterson (《计算机体系结构:量化研究方法》的作者之一),曾经写过一篇文章批评传统的SIMD指令设计不够灵活,增加了复杂度。

    也因此,RISC-V的扩展V (经常称作RVV) 指令设计更类似ARM SVE。而细节上更加灵活。比如说,向量长度存储在一个特殊寄存器中,计算指令也并不包含元素长度,具体元素多长会由特别指令设置。一条vfadd.vv可能是f32也可能是f64。

    在RISC-V语境中,SIMD向量两个词有明显区分:SIMD指x86风格的定长定类指令,向量指可动态扩展的多数据指令。但在本文其他部分,不作严格区分。

    POWER

    在Mac电脑还在使用PowerPC CPU的年代,苹果、IBM和摩托罗拉组建过所谓的AIM联盟。90年代末还没有今天的GPU概念,多媒体相关的加速都由CPU完成。为了和x86 SSE竞争,AIM在PowerPC指令集上推出了Vector Media eXtension (VMX) 扩展。该扩展引入了一种128位向量类型,支持整数和部分单精度浮点指令。

    PowerPC Mac的绝唱,PowerMac G5,支持该指令集。而后续IBM服务器上的POWER指令集依然包括这个扩展。VMX更出名的名称叫AltiVec,但2004年摩托罗拉半导体部门分拆为飞思卡尔公司,AltiVec商标由飞思卡尔持有。为避免商标纠纷,IBM用到的场合继续称之为VMX。在GCC和Clang等编译器眼中,这个指令集依然叫AltiVec。

    从POWER指令集2.06版开始(即POWER 7),POWER在VMX基础上引入了新的VSX (Vector Scalar eXtension) 指令集。在传统的POWER浮点指令外,VSX加入了一组新的和IEEE-754完全兼容的标量和向量浮点指令,类似SSE。浮点和向量寄存器也统一起来,VSX共64个128位寄存器,传统的32个浮点寄存器成为了前32个VSX寄存器前64位的别名,32个VMX寄存器则对应到后32个VSX寄存器。

    WebAssembly

    虽然WebAssembly不是真实的CPU指令集,但因为设计上考虑性能,加入SIMD指令也有助于模拟和JIT执行。Wasm的SIMD类型相对简单,固定128位,配合不同类型的计算指令,和SSE、NEON、VMX/VSX都能对上。

    编译器与SIMD

    虽然SIMD能给计算密集的程序带来提升,但我们并不是每次都要手写这堆奇怪的语法才能用上SIMD。在开优化的情景下,编译器会努力地将代码中的标量操作组合成向量指令,这部分功能在编译器中称作Vectorizer。LLVM中有循环Vectorizer和SLP Vectorizer两类,前者针对循环而后者针对非循环。其实,开头那个程序如果用O3编译,即使不手工使用向量扩展,Clang也可以生成出向量指令。

    像开头例子中这样简单的循环,循环体内只出现了一次加法,为了「凑」出四个加法构成SIMD,编译器需要像我们手写的代码一样把循环体扩充为原来的4倍,然后让循环次数除以4,并且还要处理剩下几个余数的情况,所以汇编容易变得非常大。这种优化叫做循环展开 (Loop Unrolling)。有关其他自动向量化中可能涉及到的优化,可以查阅LLVM向量化的官方文档

    如果还是有要手写向量化代码的情况,除开头提到的__attribute__((vector_size()))外,每个平台都提供了自己的C语言扩展:

  • 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)后,最好还是隔一段时间完全阻隔这些社交网络上的内容吧。

  • 在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

  • 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”这个定语。要知道「你的下一台电脑」长什么样子,也许还需要很久。

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

  • 当我们讨论iPad与生产力时,我们到底在说什么?

    截至发稿时,因为穷,作者没有购买过任何一款iPad Pro(虽然也有在计划),仅手持部分人言「不想再看第二眼它的屏幕」的iPad 2018且自认为还过得去。因此本文也尽量跨越型号,讨论一些简单的设备提升所不能解决的本质问题。如果你对本文有什么看法或觉得我有偏狭之处,请联系我。

    鉴于完成此文时,苹果发布的iOS 13中已经会在文本中的汉字与西文字符间自动加上合适的间距,所以我认为,引入相关的CSS属性和浏览器实现已经不会很远。此文和以后的文章将不再于汉字和西文字符间加入空格。

    本文基于以前在论坛上关于此问题的回复,因此如果看到相同内容,请勿诧异。

    生产力已经要变成一个梗了。

    自2016年苹果发布首代iPad Pro后,关于「iPad与生产力」这个话题的讨论就没有停息过。尤其是在每年苹果发新款期间,若干数字媒体在评测外总会连续推送一系列讨论如何用iPad Pro创造更大生产力的文章,仿佛新科学发现一样意义重大。然而,希望多大失望就有多大,对更多的人群来说,好像事情的本质从没有发生过什么变化。

    虽然2018年10月,苹果发布了俯视几乎所有移动设备,声称性能堪比「桌面级电脑」的第三代iPad Pro;虽然2019年6月,苹果在例行更新iOS大版本时推出了新的所谓「iPadOS」;虽然越来越多的软件都宣布或已经将全功能的桌面版本移植到iPad平台,不过我依然不看好iPad所谓的「生产力」概念。或者说,是不看好iPad能够真正地替代传统桌面电脑或者笔记本的作用。

    我绝对不否认iPad是一个非常有价值的产品,尽管如今常常被冠上「买前生产力,买后爱奇艺」的嘲弄。可是,能让你以更舒服的姿势,获得更佳的看视频体验,这不也是一种价值吗?早在第一代iPad发布会上,乔布斯就表明了对iPad这款设备的定位——一个介于手机和电脑之间,能够让你在家里沙发上舒适使用的设备。自然,这里的中间,非不偏不倚的刚好一半,而是更偏向于移动设备的形态,甚至作为一个9.7寸的大号iPhone出现。苹果后续推出的7.9寸iPad mini,更是把这个定位往手机推了一步。以至于部分人愿意将一个移动数据版本的iPad mini作为不能打电话的日常手机使用——毕竟iPad的价格怎么说都要比iPhone亲民不少。

    iPad作为一个产品很是成功。在手机尺寸不断变大的背景下,如此大的一块屏幕,从娱乐角度具有相当吸引力。但苹果未必想止步于此。一方面,iPad和iPhone越来越接近,甚至因为更大的手机而变得可有可无;另一方面,因为iPad被大量用户当作纯粹的娱乐消遣产品,没有过分的性能需求,而使用场景不是飞机火车,就是自家客厅这样不缺电源的地方,所以iPad寿命变得非常地长。

    如果定义一个坐标轴,原点0表示手机的定位,1表示电脑的定位,那么原始的iPad更像在0.3到0.4这样的位置。意识到这一点,和发现平板市场增长乏力之后,是时候开辟新的细分市场了。最容易想到的,就是推出新的产品,填补0.6到0.7这个定位的空缺。问题是,怎么做?这个产品是什么样的形态,其实可以化约为一个简单的问题——它运行的是哪个操作系统?

    年纪足够大或者喜欢研究历史的果粉应该都记得,2007年初代iPhone发布会上乔布斯形容它的原话是 it runs OS X。当然后来我们知道,这只是吸引用户的说辞而已。除了共享大量Darwin的内核代码,OS X和iOS在用户能看到的地方已经是两套东西了。最简单的区分就是两者的操作逻辑:一个基于鼠标,一个基于触摸。其余的区别,如是否允许用户随意安装软件之类,非不为也,实不能也,君不见macOS对非认证软件的限制也越来越严?如果苹果希望向前推进iPad能力的边界,就必然面临这个问题——它还运行着iOS吗?另起炉灶创建一个新的系统不现实,除非发明第三种成熟的介于触摸和键盘鼠标之间的交互。如果运行iOS,在不对iOS这个限制极多的系统进行大改的前提下,硬件上的提升都是隔靴搔痒;如果运行macOS,那么也需要对现有的电脑系统进行大改,使其支持基于触摸的交互操作。想要发展得好,两条路都不算是好走。

    作为和苹果相爱相杀的老冤家,微软自然也有占领全平台的想法,尤其是它还把持着游戏主机。微软的选择与苹果形成了有趣的对比。Windows从7(甚至更早)开始,就时常用其对触摸屏的支持作为宣传点。而到了Windows 8,微软更是走火入魔,放弃了作为Windows灵魂的开始菜单(不知道和苹果放弃Home键哪个需要更大的勇气),全面拥抱基于Metro风格的界面。显然,这是针对触摸设备专门优化的。尽管笔者很喜欢Metro(现在叫Modern)设计风格,但这界面对普通的鼠标用户来说,实在是过于不友好了些。当然,微软也是意识到了这个问题,把开始菜单在Windows 10中加了回去。另一件事是,Windows Phone设备在8.1之后升级的系统也叫Windows 10。微软的思路是「融合」,是让包括手机、平板、桌面电脑、笔记本、游戏机的设备,都使用同一个系统。Surface系列产品和这种思路一脉相承。当你拿起一台Surface Pro时,它可以运行的软件和你办公室桌上那台电脑没什么区别,都是全功能的Windows。这也是许多Surface粉丝攻击iPad系列最主要的原因。这种思路究竟对还是错,无从评判,毕竟Windows Phone早已安息,微软甚至都开始推出Android手机,开发Android和Windows的协同功能了。

    微软的思路和行动给苹果带来了压力。一直以来都有人猜想苹果会推出加入触控功能的电脑,甚至更进一步地把macOS和iOS像微软一样合二为一。但它们都被苹果的高管在公开场合否定了:iOS是iOS,macOS是macOS,二者可以联动,可以接力,但根本上,它们不是一个东西。苹果希望继续稳健地走iOS的路线,先不把iPad变成电脑,而是从美术创作者等苹果基本盘用户入手,观察市场反应。这是很自然的想法,因为即使macOS如今的软件生态也难说得上好。在这种思路下,苹果推出了第一次看到以为是山寨的12.9寸巨型iPad Pro,推出了一秒把iPad变蒲扇的Apple Pencil,推出了比不少机械键盘还贵的Smart Keyboard。

    像几乎所有的苹果产品刚发布时一样,第一代iPad Pro遭到了大量的嘲笑。毕竟,乔布斯当年还说过 Who wants a stylus? 呢。也有人本能地表示,这玩意肯定不如数位板。不过,随着软件生态发展,的确有一部分专业用户认可了这个产品的优势,纷纷表示这根笔除了配对难受以外,画起画来还是舒服的。除了这群人,因为常用的办公软件在iPad上都有了支持,对不差钱的用户来说,配个键盘,带出门还是挺舒服的,毕竟比笔记本还是轻多了不是?对于国内不少在手机上工作时间远远大于电脑的用户来说,我相信iPad Pro确实算一定程度解放了生产力,当然,这个程度多少,见仁见智了。库克自己说,他出门不需要MacBook了,带个iPad Pro就行了。在下以为,库克还是太亲力亲为。如果我是苹果CEO,什么设备都不用带,口述给秘书和助手不就行了?

    鉴于这种小有成果但又停滞不前的现状,苹果又一次扩展iPad家族的尺寸列表,搞出了个10.5寸的iPad Pro。苹果的设计师大概深受中国文化影响,记得「一尺之锤,日趋其半,万世不竭」的道理——你觉得一个尺寸大了,一个尺寸又小了,那我就推出个中间尺寸的。这下好了,带有120Hz刷新率屏幕和四扬声器的10.5寸iPad又一次成了最合适的爱奇艺设备……吗?反正,也没什么改进。大众好像也习惯了苹果的风格,知道库克不会爆炸式地推出革命性的产品。这不像是挤牙膏,反倒更像滴眼药水。

    笔者看过的苹果发布会不算多,不过2018年9月发布Xs和Xʀ的特别活动算得上看过的里面最无聊的一次。毕竟2011年4S那次至少还有个iCloud和Siri。苹果大概也自知理亏(也可能是看到华为的表现,心生羞愧),准备在其他产品线上扳回一局。所以10月底又来了一次发布会,一举把MacBook Air、Mac mini、iPad Pro全更新了,果粉们纷纷沸腾,表示钱包已经准备好了。但认真想想,还是挤牙膏。最值得欣赏的还是发布会结束时那个女歌手唱的那首歌。

    好吧,我承认第三代iPad Pro确实性能爆炸,确实凭全面屏造型就能让我有购买冲动;二代Pencil确实惊艳,手感确实好,iPad再也不用当蒲扇了;Type-C也是有生之年。一切好像都很好,可是还是掩盖不了它就是一个iPad的事实。尽管A12X秒天秒地秒空气,但我还是不能在上面运行Emacs,也不能同时开多个窗口显示。尽管iPadOS在多任务上有提升,用户可以切换多个浮窗,同一个App在适配后也可以多开了,但它和电脑之间毕竟有本质差异。

    这引出了一个问题——当我们在讨论某个产品算不算生产力工具的时候,首先需要明白什么才是自己的生产力。对不同职业和不同生活方式的人而言,生产力一词的外延都是不一样的。对于文字工作、图像处理的人来说,iPad Pro能够很好地胜任移动办公的需求。理论上,其他职业的人,只要有足够市场,也会有开发商为iPad平台开发软件,就像Photoshop。尽管iPadOS目前对App权限限制还是相当严格,但现有的API足够完成多数专业用途软件了。

    不过,程序员在这里是个例外。除非对iPadOS系统进行某种根本改动,否则iPad不可能成为理想的程序员开发工具。ARM和x86平台的差异在这里还不是重点,因为多数上层应用程序员都是基于动态语言进行开发,它们都能较好地支持ARM平台。更重要的问题是,目前看来iPadOS不可能支持对内核API(如fork)等的调用。在一个典型的程序员工作流程中,用户会编辑代码,执行编译任务,打开浏览器控制台,调试代码。这些基本需求会引申出对系统的要求,比如打开任意文件、执行可执行文件、运行系统调用等等。这些问题不是一个设备能续航多久、CPU有多强劲的问题。笔者不是抵触苹果对iOS系列的严格限制——相反,在国内的软件生态里,对应用采取如此严格的手腕是对用户负责的表现。但只要苹果想将「生产力」加诸iOS设备,就不得不触及这些问题。否则,堆砌硬件和做一些不痛不痒地小改动,不会从根本上拓宽它能做到的事,不会让它和iPad 2018或者iPhone有本质的不同。如果有人反问程序员才占潜在用户的多大比例,回答是,除了文字、图像、视频工作者,还有哪些人会是这种专业级设备的用户呢?不拥抱程序员,去拥抱习惯了Windows平台上垄断多年难用无比的专业软件用户,就会更容易吗?

    另外,iPad Pro硬件在移动平台称得上强大,但即使第三代顶配的6GB内存,用来应付广大程序员日常的开发工作,还是有些力不从心。这些限制决定了iPad Pro至少在软件开发者这方面离「生产力」还是有相当距离的。

    如果苹果开放了这些权限,也和这些专业软件开发商一一谈妥,让他们推出iPadOS版呢?iPad Pro就能和笔记本电脑一较高下了吗?未必。当代的几乎所有桌面系统GUI都是针对鼠标设计的,想想常用的编程IDE、调试器、CAD软件,要如何设计才能让它们在触屏下工作得自然?如果你很好奇强行上触屏是种什么体验,可以尝试在iPad上安装TeamViewer这样的远程控制软件,然后连接到自家电脑上进行下实验。尽管最新的iPadOS已经支持鼠标,但它还是作为一个辅助使用功能(不支持右键)而不是像macOS一样的核心支持。精确性从来都不是触摸屏的目标。如果要在iPadOS上推出一套完整的鼠标交互的话,为什么不直接在上面引入macOS呢?交互方式的逻辑,也限制了iPad Pro和许多人的生产力可能没有关系。

    iPad自然有其合适的场景。但「生产力」目前来看还是少数人的爱好。对很多人而言,手机毕竟比电脑重要。连自己的电脑都发挥不出什么生产力,如何指望一个平板呢?如果有心做这件事,平价版的iPad已经足够充当一个「笔记本」的用途。「学习」的本质还是一种内容的消费而不是创造,和「生产力」似乎还有距离。它能在少数方面做到很好,能保持便携性和专业性的平衡。这就够了。它不可能代替电脑,但一定有它的位置。比设备更重要的,是拥有一颗时刻准备创造的心。

  • 效率软件杂谈

    说起来自己几年来用过的效率类 App 也不少了,尽管自己很难坚持,不过倒是有个喜欢折腾的习惯,从早年的 Linux 到现在的效率软件。正好好久没更新博客了,就随便对它们说说自己的看法。

    效率类 App 的外延很大,从代码管理到任务规划,只要是能够提高工作、学习效率的软件,都可以划入效率这类范畴。不过,我们日常看到的多数效率软件无非都是写作、协作和日历事项。我想一方面是因为它们的开发门槛较低,不需要什么额外的领域知识(想想前端框架都用 TODO-List 做 Demo,搞个能用的并不麻烦);另外一方面,大众用户都需要这类软件,除了我等喜欢倒腾比较它们的爱好者之外,还有大量的用户此前从未接触过(仅因为一些偶然发现的小功能就感叹生活质量提高了),他们也完全是潜在市场。当然,用过一些雕琢不够细致的作品也会发现,要把它们做好,也不是那么容易的。

    奇妙清单

    奇妙清单是相当老的 TODO 列表软件了,对普通用户几乎免费。早期对一些要求团队协作的高级功能收费,被微软收购以后就停止高级功能和收费,但也不再更新了。奇妙清单的一大亮点在于全平台支持,从 iOS 到 Windows 乃至 Windows Phone 通通有 App,并且桌面端也是原生,实在不容易。(其实让几个 iOS 程序员兼任开发 Mac App 的任务也不会很难,满大街的 Electron 和 nw.js 实在影响体验)

    Wunderlist Sample

    如果之前没有过使用这类 App 习惯的话,奇妙清单在一开始可以有效地帮助自己捋清今天要做的事情。但它的功能实在有些单薄,不明显的子任务入口,缺乏记录和统计功能,实在让它只能安心做一个清单应用。无独有偶,最近兴起的一系列 App,从 Bear 到 Agenda,都将任务列表和笔记功能糅合在一起。尽管在提醒上有些欠缺,不过每填工作上都要主动查阅修改的记录,实在不需要严格的提醒。需要的,交给自带的提醒事项就好了。后面要提到的 Emacs 中著名的 org-mode 也基于这个逻辑。尽管它也可以用来记笔记、写文档,但如果一点都不用上它乍看奇怪却又灵活强大的 TODO 功能,总觉得会缺了些什么。

    当然了,任何软件都只是辅助提高工作生活效率的工具,改变自己的工作、学习节奏也一定是一个系统化的、长期的过程。寄改变生活方式的希望于某个软件并不现实。奇妙清单的功能并不复杂,容易上手。如果你此前没有太多折腾数字化工具的经验,可以将它作为入口,管理生活并进一步探索适合自己的方法体系。即使日后你认为它管理任务功能不足,至少作为购物和杂事清单还是不错的。一直都有传言称奇妙清单要倒闭或者停止运营,不过它大概还会在目前的状态下运营较长一段时间。即使要关闭服务器了,因为它提供了完善的 API,所以在发布通知之后,你也有足够的时间一键将已完成和未完成的任务列表转移到其他应用(比如 Todoist)中。当然,微软收购团队之后推出的 Microsoft To-Do (目前尚无 Mac 版)也是一个不错的相似选择。

    Ulysses

    某种程度而言 Ulysses 不算本文想描述的效率软件,不过实在有很多人推荐过它(包括后面的 iA Writer),所以也值得谈一谈自己对它的看法。Ulysses 是一个有相对久远历史的文本编辑器(好吧,有很多人习惯称呼它写作软件),提供了编辑 Markdown XL(一个扩展的 Markdown 语法)文本和管理文档等一系列功能。如果谈及 Mac 上辅助写作的软件,一定会有人提到 Ulysses,足以说明它在诸多 Mac 用户心中的地位。当然,Ulysses 也有 iOS 版本(尽管第一代 Ulysses 发布的时候好像还没有 iPhone),并提供基于 iCloud 的同步。

    Sample of Ulysses (From Web)

    我不是 Ulysses 的深度用户(使用 Ulysses 写的字数应该不超过 10000),体验它也主要是因为 SetApp 提供的试用机会。不过它的可定制主题、可定制 Markdown 语法、打字机模式、流畅的写作体验和文档管理等确实令人印象深刻。打开一个全屏界面很容易让人产生写点什么的冲动。(尽管用键盘而不是笔写作长文还是一个需要适应的过程)iOS 版界面相对简单,不过也足以在手机上进行临时的写作工作了。Ulysses 的同步没有使用 iCloud Drive,也就是说保存在文档库中的文档并不是对用户直接可见的(尽管你还是可以在 Mac 上的 Mobile Documents 目录中找到它),这点和 iA Writer 不同,同步也有稍长的延迟。

    用 Ulysses 来书写内容当然是足够的,然而写作本身必然也具备痛苦和苦闷,正如这个软件的名字,尤利西斯。值得一说的是它的价格。曾经的 Ulysses 在 Mac App Store 定价 45$(中国区 298¥ 左右),iOS 版定价 25$(中国区 128¥ 左右),算是普通用户需要的软件里面价格相对高昂的了。(我不禁想起当年花了快 400 大洋入的 Photoshop CS6 教育授权,结果一直吃灰)这个价格见仁见智,对很多人来说就是几顿饭的钱。但是你可能也会觉得,它的功能可替代性太强,几乎能写代码的编辑器都支持 Markdown,Mac 上还有好些开源编辑器——我为什么要用它?另外,我也看到过用户反映,Ulysses 在对较长(数千字)文章进行编辑时会有明显卡顿感。这也算是针对写作的文本编辑器的一个通病。(诸如 VS code、Sublime Text、Vim、Emacs 这样的代码编辑软件中倒是很少看到这种现象)

    不过,随着苹果企图在 App Store 推进订阅制,提高开发者从订阅中得到的分成,越来越多的软件采用订阅制,Ulysses 是其中引人注目的一员。对很多大型软件来说,订阅制是一个相对划算的更新方案(相比于每次出新版本之后再买断),比如 Office 365 和 Adobe Creative Cloud。尽管如此,你还是可以不选择 Office 365 而直接购买 Offce 2016,旧有的 Office 授权也没有任何影响。任何的转型都是麻烦。有些软件的转型给老用户提供了空间,可以照常使用或者优惠升级。不过 Ulysses 做得就比较绝了,尽管花钱购买了的老用户可以优惠订阅,但如果他们升级了版本,就必须在 14 天试用期内更新订阅,否则自己的文章就无法继续编辑;另外,用户的文章也没有好的方式导出。这算是一个极度损毁开发商信誉的事情,你至今在 Mac 和 iOS 的 App Store 里的 Ulysses 页面下,都能看到大量表达愤怒的评论。订阅制和买断制哪个更好,开发者、平台和用户争论至今也没有什么结果。不过自己花钱购买了产品,到头来还是要被开发商牵着鼻子走,这实在是有些可笑。

    Ulysses 现在的价格是 4.99$(中国区 26¥)一月,如果按年订阅则是 39.99$(中国区 218¥)一年,订阅在同一个 Apple ID 登录的全平台可用。如果是学生,可以得到优惠,6 个月订阅是 10.99$(中国区 73¥)。你可以得到 14 天的免费试用。另外,SetApp 也包含了 Ulysses,对于同一个 Apple ID 登录的 iOS 设备上也可用。

    iA Writer

    iA Writer,连同 Byword、Quiver 等在内的一系列写作软件,常被当作是 Ulysses 的竞争者。其中 iA 应该是最贵的,也是最老牌的,历经多个版本变迁。本文即是用 iA 写作的。相比 Ulysses 或者其他软件来说,iA 的可定制性很少——只能从两种等宽字体中选择,字体大小也只有三个等级,颜色主题除了日间模式和夜间模式外也不能调。设置页面可以用简陋来形容。

    iA Writer Sample

    很多人调侃说,自己已经买了的软件,就会想方设法找到它的优点。这话不假。因为潜意识里,对于已经购买的软件,自己就不会把价格纳入考虑因素了。也许对于我,iA Writer 也是这样。每次用 Filco 的红轴键盘和双拼输入法,搭配全屏模式的 iA,写作起来的体验非常好。你可以在 iA Writer 的官网通过视频观看到 iA Writer 的使用方式和界面。

    iA 基本支持 MultiMarkdown 语法,除了基本的 Markdown 标记之外,还有注脚、目录、任务列表、表格和 LaTeX 公式等扩展内容。最新的 iA Write 也加入了标签功能。iA 支持类似 Ulysses 和 Typora 上的打字机模式。同步过程是使用 iCloud Drive,意思是每篇文章其实就是一个 txt 格式的文本文件,并且可以在 iCloud Drive 上看到和用其他编辑器编辑。一开始我有点不满意这个做法,认为类似 CloudKit 的数据库同步方式更加易用和干净。不过 iA 支持新建文档的时候自动使用 Markdown 标题作为文件名,这一点也逐渐冲抵了基于文件的同步方式的不便。不过在处理中文全角标点作为标题时,文件名中的符号会被自动转为半角,这是个小问题。另外,可能因为文本文件本身不大,iCloud Drive 的同步还比较流畅。当然,你还可以选择用 Dropbox 同步或者直接在本机的某个目录下保存文档库,在你能够流畅连接 Dropbox 服务的时候,可能体验更好。iOS 端当然也支持对 iCloud Drive 上内容的编辑,并且甚至可以在里面打开你 iA Writer 目录之外的任何文件(即使需要用户自己操作,我也很惊讶 iOS 居然提供了这种接口)。使用基于文件的方式,即使有一天 iA 开发者作死不让你继续使用了,你也至少可以从目录导出你的所有文件。以 Evernote 为代表的数据库模式和若干编辑器代表的文件模式,实在是各有各的好处吧,也许有一天,会有一个兼具两者优点的应用出现也说不定。

    iA 的另一个优点在于支持 Windows 和 Android 平台。由于我没有用过,这里就不多讲了。缺点包括统计中文文章字数的时候有问题(Bear 也不对,除了 Word 很少有软件能把这事做好的),语法突出不支持中文(如果你使用英文写作,这倒是个很有意思的功能)。目前看来他们也不想把应用改成订阅制。(Ulysses 遭遇到的阻力应该会冲击很多开发者对订阅制打的算盘)他们的博客上每月会发布一篇文章,其中多数跟产品本身没有关系,质量倒是挺高的。iA Writer 采取买断制,Mac 版价格在中国区是 198¥,iOS 版在中国区是 30¥。Android 和 Windows 的价格没有看到,似乎 Android 采取了免费下载搭配 App 内购买的方式,Windows 版本可以免费试用,购买价格 19.99$。

    Org-mode

    总的来说 Org-mode 是众多笔记和日程解决方案中比较硬核的类型——没有界面,基于纯文本。当然,最简单的方式也就是最靠谱的方式,虽说 Org-mode 只是一个纯文本界面,不过神之编辑器 Emacs 对它有着绝好的支持。现在的 Emacs 内置对 Org-mode 文件(后缀名为 org)的解析,连带若干快捷键。如果你安装了 Spacemacs,那么功能就更是丰富。

    Example of Org-mode

    所以 Org-mode 到底是什么呢?简言之,类似 Markdown 的一种纯文本标记语法。Org-mode 基于大纲,常被用于笔记和待办事项。你可以切换大纲中任何一个条目的 TODO 状态,或者查看有哪些任务的 Deadline 是今天。不同于分裂的 Markdown,Org-mode 的发展基本都以 Emacs 为主要(几乎是惟一好用的)实现。借助于 Emacs 优秀的扩展性,Org-mode 的纯文本可以说被玩出了花。当然,即使没有 Emacs,用任何一个文本编辑器都可以手动处理 org 文件。而在移动平台上,有 Mobile Org 和 beorg 等 App 基于云盘提供编辑和同步 org 的功能。相对来说,beorg 是比较好用也在持续更新的一款,但就 Org-mode 的「大纲」本质而言,beorg 做得还不够,其团队思路更像是把它当作一个提醒事项和日历管理软件。

    Evernote

    Evernote 的出现早于大部分现存的电子笔记软件,以至于说起笔记软件,很多人第一时间想到的都是 Evernote,或者它的中国版,印象笔记。Evernote 带有基于笔记条目的同步功能,以笔记本和笔记本集(Stack)组织笔记,同时也具有扁平化的标签系统和搜索功能。Evernote 自带的编辑器对非技术人员来说应当很亲切,容易想起熟悉的 Word。不过如果用得稍微多些,就会发现这个编辑器实在是乏善可陈,基本的富文本编辑没做好,也没有类似 OneNote 一样的语义化文档结构(一级标题、二级标题、引言……),更勿谈 Markdown 支持这种功能了(尽管有马克飞象这类第三方 App,现在印象笔记也支持了 Markdown)。

    Evernote 和印象笔记的一大优势在于,多年的发展使其拥有了一个良好的生态圈,很多应用都支持将内容直接发送到 Evernote。另外,Evernote 还有用一个强大的 Web Clipper 插件,能够从网页中抓取正文自动保存到笔记本中,这也就是很多人说其「善于收集」的原因之一。不过从这个角度,Evernote 更像是一个云端同步的文档库,而不是全功能的笔记软件。从这个角度出发,也许一个具备全文搜索功能的文档管理软件也可以部分取代它的作用。

    Evernote Sample

    Evernote 和国内的印象笔记都可以免费使用,不过免费用户有诸多限制,比如一个月同步流量不得超过 60M(如果你同步的基本都是文字,这个数量倒是基本够用),只能同时两个终端登录,以及不可以使用在 PDF 内搜索等高级功能。付费采用的是订阅制,印象笔记的个人用户有标准版和高级版两个付费级别(Evernote 似乎只有高级版和企业版之分),标准版把每月流量提升到了 1G,不限制终端;高级版每月流量 10G,并且加入了一些高级功能。国区的印象笔记和 Evernote 是完全不同的两个账户体系,甚至可以用同一个邮箱注册 Evernote 和印象笔记两个不同账号。Evernote 高级版年付 5.83$ 一月,月付 7.99$ 一月。印象笔记标准版年付 8.17¥ 一月,高级版年付 12.33¥ 一月。

    需要注意的是,自 2018 年 8 月起,印象笔记已经从 Evernote 国际版独立出来。中国区的 App Store 只能下载印象笔记,而外国区只能下载 Evernote,图标也不一样了。Markdown 等新功能仅限中国版独有。Evernote 国际版的经营状况不佳,时常有裁员的消息,不过国内版还是暂时不用担心倒闭的问题的。由于监管原因,国内版的印象笔记是不支持笔记分享功能的。

    OneNote

    OneNote 是微软出品的笔记软件,据传其历史可以追溯到 docx 格式出现之前的 2003 年,最开始是作为 Office 套装的一部分销售的。一开始,OneNote 是一个像 Evernote 一样的电子笔记本,并且针对企业内部协作的场合进行设计。(一开始我还没有意识到为什么企业内部会需要一个笔记软件,直到后来我知道了传说中惹得天怒人怨的 Lotus Notes)不过实际上,OneNote 的使用体验让它比 Evernote 更像是一个现实生活中的笔记本,而不是数字资料集。

    Example of OneNote

    OneNote 采用了三层结构,从笔记本到节再到页,而页可以像书的章节关系一样无限划分出子页。这样的结构相比于 Evernote 而言明显具有更强的结构性,适合写书或者课程笔记一样的场合。但 OneNote 实在是太过自由,每个笔记页都可以有若干个像白班上的贴纸一样的块,每个块都可以自由移动甚至和其他的块重叠。这很像真实笔记,不过对单纯想数字化输入和保存一些东西的强迫症来说,这反而是个不便之处。(想想 Markdown 为何如此流行,它在富文本面前到底有何优势?)手写的内容和公式、录音等等可以随意插入笔记页的各个角落。手写和图片内容甚至可以被搜索(Evernote 高级版也有这个功能,没有比较过哪个更强大)。如果你没有类似的强迫症且从接触电脑以来就习惯 Office 软件的界面,那 OneNote 是很适合的笔记解决方案。

    不过笔者还是倾向于把 OneNote 单纯作为一个数字笔记本。OneNote 为平板和手写笔做了很多适配和优化,搭配 iPad 和 Apple Pencil,书写的体验非常舒服。如果你用 Surface,也可以好好试试。毕竟,相比 iPad 生态下的其他手写和录音笔记软件,OneNote 完全免费(只要你 OneDrive 还有足够空间),还是大厂出品,更新频繁,为什么不用呢?很多人抱怨 OneNote 同步速度慢,除了微软服务器和本地网络的原因之外,很可能也是因为 OneNote 是按照节为单位进行同步的,笔记稍丰富一些一次同步就可能是十多 MB,不光慢还是流量杀手。OneNote 的另一个大问题是关于默认字体的,在 Mac 和 PC 上谁用谁知道。

    Bear

    Bear 是苹果生态下的一款书写和笔记软件,荣获 2016 的 Mac 年度最佳 App 大奖。Bear 令人惊讶的是它的简单风格和明显经过设计的界面。默认的 Avenir 字体在外行眼中的第一感觉就是「洋气」。无独有偶,Bear 也没有使用 Evernote 风格的富文本编辑器,而是在 Markdown 基础上做了些小修改作为自己的语法,以每篇 Markdown 文本作为笔记条目。(可以打开「Markdown 兼容模式」)

    Bear 既不像一些文本编辑器一样不刻意突出 Markdown 元素,也不像 Typora 一样所见即所得,而是在文本中突出了样式。有很多人可能不喜欢这样的编辑器,但它可以帮助很多不熟悉 Markdown 格式的人慢慢上手。

    Sample of Bear

    Markdown 不是一个陌生的东西,Bear 除了界面上的美观之外,在笔记的组织方式上也有创新之处。传统的笔记软件,比如 Evernote,试图把现实生活中的笔记本映射到软件中,创造了「笔记本」这样一个概念,和笔记条目构成一对多的关系,然后为了多元化组织方式的需要,每个笔记可以有若干个标签,标签和笔记构成多对多关系。Bear 则直接放弃了笔记本这个做法,全部使用标签。除了每个笔记可以有多个所属标签之外,标签还可以层层嵌套,比如 job/code 就意味着 job 标签下的 code 子标签,一个以此为标签的笔记既可以在 job 下也可以在 jobcode 下找到。看似有些偷懒,实则打破了到底要创造哪些笔记本这一难题。书写体验这个事情,见仁见智,不过很多人把 Bear 当作轻量任务管理工具,或者做为增强版的备忘录。Markdown 用以写作当然很棒,但用来做知识管理就有些捉襟见肘了。

    Bear 采用了苹果推荐的订阅制模式,如果不订阅依然可以单机使用软件,但无法同步、使用高级主题和导出至更多格式。但它的同步基于 iCloud,所以目前也只支持 iOS 和 macOS 设备。不过这个把依赖苹果 iCloud 服务作为收费功能点的做法,严格来说似乎违反了苹果的规定。Bear 现在的价格是 1.49$ 一月初次附赠一周(中国区 10¥),14.99$ 一年初次附赠一月(中国区 103¥)。Bear 的团队来自意大利,主要成员只有 3 人(最近好像增至 6 人了),虽然不用担心它倒闭,但更新速度的确不快,Web 版也遥遥无期。

    WorkFlowy/Dynalist

    这两个软件属于笔记型软件中的奇葩,不是传统的所见即所得或 Markdown 文本,而是采用大纲的形式组织数据。WorkFlowy 算是这类软件的始祖,每个用户一打开就只有一个文档,没有办法新建和管理。文档可以是无限层级的,并且可以采用「聚焦」模式,即把大纲中某个节点作为当前视图的根节点。以此方法,用户的所有数据都组织成一棵树。WorkFlowy 并没有提供更多更复杂的功能,在大纲和聚焦的基础上,用户可以把某行标记为「完成」(就是打上删除线)或者在某行下方加上注释,用户也可以把常用的某个节点收藏起来方便快速聚焦。WorkFlowy 的功能基本就是如此了。

    Dynalist 相比 WorkFlowy 有一些改进,比如加入了 Markdown 和待办事项支持、支持多文档等。不过最重要的是,Dynalist 的免费版本即可无限创建节点,而 WorkFlowy 对免费用户有每个月 100 节点的限制(可以通过邀请的方式扩容,每邀请一个用户双方都可多获得 100 的每月免费节点)。

    Sample of WorkFlowy

    很多用户在尝试过功能丰富的富文本笔记软件之后可能会觉得基于大纲的方式太过简单,不过多尝试一下就能体会把思维整理得高度结构化的快感。这种模式特别适合于在开展某些项目或者写作文章之前为内容列好提纲,也可以用于组织某些结构化的笔记,比如读书笔记等。不过笔记这件事没有银弹,在其他一些用途上,可能大纲类软件的确是太过简单了。

    WorkFlowy Pro 版本的价格是 4.99$ 一月,49$ 一年。Pro 用户拥有无限的储存空间、备份至 Dropbox、带密码的协作、更改主题等功能。Dynalist Pro 版本价格每月 9.99$,如果年付则是每月 7.99$,包括自定义 CSS、Google Drive 和 Dropbox 备份、无限量创建书签、版本修改历史、Google 日历集成等功能。

    备忘录

    对很多苹果用户来说,备忘录可能才是每天使用次数最多的软件。尤其是 iOS 和 macOS 备忘录间的同步,对多设备用户而言,是个非常有吸引力的功能。备忘录和 Evernote 不同,本身的编辑界面没有明显的样式调整工具栏,在样式按钮下也只有寥寥几种选项:大标题、标题、正文、等宽和序列。但备忘录本身是的确支持带各种样式的富文本的(尽管不如 Evernote 一样完整)。在「编辑」菜单中的「格式」选项中,可以看到,可以设置备忘录内容的字体、大小、颜色、基线、对齐,加删除线,乃至调整缩进。另外,备忘录还支持在笔记中插入待办事项清单——就差个提醒了。

    在 iOS 上,iOS 11 对控制中心的改进可以让用户快速从任何界面启动备忘录;而在 Mac 上,备忘录也几乎是启动最快的笔记软件了。备忘录的同步完全依赖于 iCloud,这意味着只要你的 iCloud 有足够的剩余空间,同步的设备数量、同步流量都不是问题,完全免费。在 iOS 上,备忘录还支持扫描文件导入备忘录。这一功能和 Evernote Scanner、Office Lens 或者扫描全能王等专业应用比起来还是欠了点火候,不过在光线充足的时候已然够用了。如果你更新了 macOS 10.14,系统备忘录还支持从你的 iPhone 或 iPad 上拍摄扫描照片直接导入。

    系统备忘录也是支持从 Evernote 导入的,在「文件」菜单中的「输入」弹出的选择文件对话框里,选中 Evernote 导出的 enex 文件并打开,备忘录就能自动把里面的笔记转换成备忘录的格式放到一个统一目录中。样式可能会有丢失但大体结构还在。不过备忘录不支持导出功能,只能输出 PDF。好在备忘录支持同步其他互联网账号上的备忘录功能,因此你可以用备忘录连接你的 QQ 邮箱或者 Outlook,把 iCloud 或本机上的笔记条目移动过去,以此达到导出目的。不过要注意的是,邮箱账号的笔记本支持的文本格式相当有限,直接移动过去一些样式和链接可能会丢失。

    其他

    除了以上提到的几个(或许大名鼎鼎)软件之外,还有许多(号称)与生产力相关的 App 自己或多或少体验过。

    Simplenote

    Simplenote 如其名,的确简单。整个软件的功能就是,书写纯文本笔记,添加标签,然后同步。你可以选择开启 Markdown 模式,这样你就可以查看当前条目的 Markdown 预览。每条笔记都可以查看历史版本。或许正因为完全依赖纯文本,Simplenote 的同步速度相当快(如果没有连接问题)。目前,Simplenote 支持大部分平台,从 Windows 到 Mac 和 Linux,以及若干移动平台。Simplenote 是完全免费的,运营它的公司是 WordPress.com 平台的母公司,因此暂时还不用担心公司哪天倒闭了的问题。不过 Simplenote 的格式太简单了,连 Markdown 的支持也不是很完整。

    Agenda

    Agenda 给人的感觉像 Bear,也是备受赞誉的后起之秀。相比于笔记或者书写软件,Agenda 更侧重的是任务和日历的集成。每个项目中的单个条目都能连接到日历,同时顺便做做笔记。笔记语法基本和 Markdown 一致,但直接以带样式文本显示。不过 Agenda 目前看来编辑器还不太成熟,容易出现卡顿和样式出错等 bug。Agenda 的更新模式很特别,就像 Sketch 或者早年一些杀毒软件,按年付费,类似订阅制。不过如果停止付费,软件依然可以正常使用,只是得不到新的高级功能更新。对这种级别的软件而言,相比无脑订阅制,这个付费模式看上去更有责任感。目前一年的价格是 163¥,支持 iOS 和 Mac 平台。

    Agenda 的问题在于它的定位。它想统一日历、提醒事项和笔记的功能,但它似乎这几个都没做到很好。类似的应用有 Noteplan,也试图将笔记和日历统一到一起。可我们日常真有那么大「笔记随日历走」的需求吗?

    Dropbox Paper

    Dropbox Paper 是 Dropbox 推出的在线文档服务。这个服务支持用 Markdown 语法书写内容,在网页中也支持对内容进行全文搜索。但它作为笔记而言还是缺少了一些资料管理方面的功能。而且就官方定位而言,Paper 更像是 Google Docs 的竞争对手,而不是 Evernote 这样的软件。如果你有协作方面的需求,可以尝试一下 Paper,产品体验还不错。

    Typora

    Typora 不同于很多 Markdown 编辑软件——它成功地把所见即所得特性和 Markdown 的「干净」整合到了一起。在编辑器里打出两个星号,后面的文字就会自动变成粗体。在边界处按退格键删除字符时,删除掉的也不是粗体字而是星号。Typora 目前免费,作者曾宣称到正式版会开始收费,但正式版目前看来遥遥无期。Typora 跨主要的桌面平台,支持比较复杂的 Markdown 扩展,包括 LaTeX 公式、表格、目录等。另外,它还支持更换主题,自己把对应 CSS 放到指定目录就好。Typora 是一个优秀的 Markdown 编辑器(如果你喜欢这种 WYSIWYG 风格),尽管处理大文件时还是有明显卡顿感,但作为笔记软件,还是有所欠缺,一在文档管理,二在多端同步。

    生态

    计算机诞生的最初目的即是帮助人提高解决问题的效率,从 DOS 时代到今天,各类效率软件层出不穷,大名鼎鼎的也不少见。像 Things、OmniOutliner、OmniFocus 等软件本文没有一一介绍,读者有兴趣可以自己发掘。

    如果你平常主要使用的软件基本是 QQ、微信,那么用什么手机和电脑对你而言不会有太大影响,因为这些软件对多个系统都有良好的支持。(Linux QQ 和 Windows Phone 看来要除外了)但如果你接触这类效率软件比较多的话,就会很容易被某个平台所绑定——即使认为它贵或者对它不满意,也不得不继续使用,因为数据都放在这些软件和服务上面。

    所以,在选择软件时,除了软件本身的体验和功能之外,还得考虑它们的可迁移性。一般来说,自己提供后端存储的软件都具备网页界面,所以都可以跨平台。但反过来,这些服务的寿命几乎不会超过苹果、微软、Google 等巨头,维护人员的技术也不会有它们的高。如果数据能够存储在这些提供个人云盘服务的服务器上,可能更加可靠。一部分软件客户端是跨平台的,在更换手机或电脑的时候不用过分担心。但对于一些只在某些系统上有版本的应用(苹果生态居多),就要着重考虑它们是否有方便的导出功能了。基本上,数据和应用在一个生态里融入越深,要迁移出去的成本就越高,这是难以彻底解决的矛盾。

    没有一个软件能够让所有人满意,也许理想的笔记形态离我们还有一段距离。不过如果你有空反思过滤每天收到和发出的信息,勤整理笔记本,也许会发现对信息处理工作流的热忱,只是种没什么必要性的狂热。购买正版软件提高效率是好的,但它并不等于数字消费主义。

    毕竟,软件不是最重要的,作品才是最重要的