普通视图

发现新文章,点击刷新页面。
昨天以前WEB VIEW

浅谈苹果的命名困局:从Pro、Air说开去

作者 王隐
2021年9月14日 19:17

西方语境中,13 不是一个好数字,背叛耶稣基督的犹大,据信是最后的晚餐餐桌上第 13 个就座的人。于是,西方人不喜欢数字 13 的传统一直延续到今天,很少有人宴客会邀请 13 个人,12 或 14 人都可以,13 不行。

不巧的是,9 月即将发布的新 iPhone,按照产品迭代,正好是 iPhone 13。苹果会考虑另一个名字来代替它吗?就像 iPhone X 那样?

具体选用哪个字母或数字,还要等到发布会才会揭晓。不过,回顾苹果产品线的命名史,其实可以窥见苹果虽然以简洁的市场文风著称,但有时仍会陷入不可解的命名困局。本文以 Mac、iPhone、iPad 三大产品线的命名演变史,来尝试还原苹果在开辟产品线及市场定位上的诸多困局与转变。

Mac:经典四象限命名,演变至今

之所以要先提 Mac(泛指苹果电脑产品线,下文同),是因为其 Pro 和 Air 命名影响了太多后来者。

后来者对苹果产品外观的模仿很容易让人理解,但为何连命名都要直接借鉴?原因无非两点,一是苹果自身的品牌跟进效应,二是这样的命名确实可以让消费者快速知晓产品线的特点与不同。

很明显, 无论是西文还是中文语境,Pro 让人联想到 Professional,主打专业与性能;Air 则让人联想到空气,主打轻薄便携。

这样精准、简洁的命名来源于乔布斯。

很长时间里,苹果都是作为一家电脑公司出现在人们视野,电脑产品线上根据「Apple」「Macintosh」延伸出多种多样的型号。

比如:

苹果之前种类繁多的产品线

1990 年,乔布斯重回苹果,他将苹果的产品线缩减为简单的四象限,横轴两边分别为「消费者」「专业」,竖轴两边分别为「便携」「桌面」。消费类产品带有前缀「i」,而「Power」则保留给专业级产品使用。

乔布斯当时的四象限命名法

这样的结果是:乔布斯的四象限命名法帮助苹果精简了产品命名上的诸多历史问题。

Power阵营 VS i 阵营

四象限的精妙之处在于,它可以明确每种产品的用途,让消费者一目了然。直到 2006 年,苹果都在沿用四象限命名法。

2006 年,苹果将电脑芯片从 Power 转向英特尔芯片阵营,这一年,除了 iMac 和 Mac mini 不变,其他所有的电脑名称都发生了变化。

面向消费者的 iBook 系列变成了 MacBook,面向专业消费者的 PowerBook 系列变成了 MacBook Pro,而面向专业消费者的 Power Mac 台式电脑系列变成了 Mac Pro。

消费者 VS专业消费者

乔布斯的四象限到此结束,Power 被 Pro 所取代,i 变成了 iOS 设备所专属(iPad、iPhone、iPod,除了 iMac),而在后面晚几年登场的 Watch、Pencil、TV,苹果重新沿用了 Apple 前缀,分别命名为 Apple Watch、Apple Pencil、Apple TV。(有意思的是,TV 最早代号是 iTV)

MacBook家族演变史

可以看出,乔布斯的第一次命名调整帮助苹果梳理了内部产品线,使之更为简洁,而第二次命名调整则是和公司整体战略相关。

iPhone:较为混乱,稍有秩序

Mac 作为生产力领域设备,同时模块化较强,无论是 CPU 强劲程度,显卡配置、屏幕尺寸都需要明确市场定位,从而可以让各种需求的消费者,能够快速找到适合自己的设备,这也是 Pro、Air 至今仍沿用的根本原因。

但是 iPhone 作为最为大众的消费类电子产品,大部分人关注的可能并不是性能,那苹果要如何做好市场定位及品宣,尽可能多地占据市场份额呢?

多品类出货无疑是最好的选择,但这也同样给 iPhone 带来了命名混乱。

其实,客观来说,从 2007 年的一代 iPhone 到现在的 iPhone 12,苹果起初定型于以每两年做一次数字迭代的方法命名新产品。(如一年 iPhone 5,下一年 iPhone 5S)

两年大迭代的频率持续到 iPhone 6 为止,也是在这一年(2014),各大手机厂商开始了大屏时代,这一年,新型号 iPhone 6 Plus 登场。

iPhone 6、iPhone 6 Plus

Plus 除了表示更大的屏幕之外,还有别于原版一些功能特性。如iPhone 7 Plus 相比 iPhone 7 ,多了一颗摄像头。

2015 年是让苹果开心的一年,这一年,iPhone 总销量达到历史巅峰 2.312 亿台,销售额达到 1550 亿美元。

或许是觉得「S」在人们眼里是小版本的修修补补,如何让抱着「下个版本见」的用户也加入换机浪潮,是苹果需要考虑的一大问题。于是,接下来,「S」不见了。

2016 年 iPhone 7 发布,2017 年 iPhone 8 发布,再也没有中间态「S」了。但是苹果手机的销量并没有因此而提升,反而持续下滑,2020 年营收下滑到 1377 亿美元。

苹果每季度营收情况,2015年开启了年度巅峰

2017 年 11 月,苹果在已经发布过 iPhone 8 的前提下,又发布了新机 iPhone X,直接跳过了 9 的命名。

而到了 2018 年,新机命名好像又回到了微更新「S」时代。

  • iPhone XS
  • iPhone XS Max

同时,Max 首次登场,这一年苹果手机销量逆势反弹到 1662 亿美元。

同年,苹果更新了 iPhone 5c 的继承品——iPhone XR,但 R 从何而来,我们目前找不到一个特别自洽的解释,只能说苹果希望表明它是「X」字辈,但又要和 XS 区分开。

这里值得注意的是,对于如 iPhone 5S 的「S」,iPhone XR的「R」,苹果习惯于将这样位置的字母,虽然大写,但是用更小的字体来展示,并外接边框,突出强调。

如:iPhone XS

iPhone XS 的S实为大写,只是字号变小

还有更早之前的 iPhone 3GS:

iPhone 3GS 的S

到了 2019 年,苹果的新机命名又发生了变化,引入 Mac 经典命名 Pro,并将大屏旗舰从 Max 改名为 Pro Max。

  • iPhone 11
  • iPhone 11 Pro
  • iPhone 11 Pro Max

新引入的 Pro 接棒原来的 Plus,而 Max 特指屏幕大一号。

2020 年,在 11 以往产品线的基础上,又添加了 iPhone 12 mini,作为大屏时代下的小屏补充。

  • iPhone 12
  • iPhone 12 Pro
  • iPhone 12 Pro Max
  • iPhone 12 mini

至此,iPhone 的产品线稳定下来。从命名上,可以看到,iPhone 的产品比 Mac 更为混乱,只能说少有秩序。

iPhone家族史

在苹果召开的 2021 秋季新品发布会上,我们看到同样的命名延续下来,也就不意外了。

  • iPhone 13
  • iPhone 13 Pro
  • iPhone 13 Pro Max
  • iPhone 13 mini

不过,发布会讲到iPhone 13 部分时,我们发现一个小细节——Pro 更加自成系列。

首先,iPhone 13 mini 和 iPhone 13 放在一起讲解。接着单独讲解人、单独过场动画的 Pro 系列登场。

苹果品宣 13 Pro 的点还是性能(A15 Bionic)、相机(前置深感、3摄等)、耐用性(外观、耐磨、耐腐蚀)、屏幕(Promotion、Oled、XDR),来包裹 Pro系列的核心关键词——专业性。

除了这些基本的参数讲解外,13 Pro 还引入电影导演的拍摄场景,来向用户传达:iPhone Pro 系列不是手机、是能干活的摄像机。

至此,苹果从 iPhone 11 推出 Pro 系列,经过三代演变,将乔布斯当时定下的消费者命名「i」,硬拉到「Pro」级别。使用的方法也非常简单,就是在硬件与生态领先后,为消费者打造出一种使用消费级产品,也能产出专业级内容的向往。

这种向往非常有鼓舞性:

尽管我不是大导演,只是一个普通人,但只要我做一件事,就有成为他们的可能,那就是购买 iPhone 13 Pro。

至此,iPhone的产品可以分为普通消费:

  • iPhone 13 mini
  • iPhone 13

以及专业级向往:

  • iPhone 13 Pro
  • iPhone 13 Pro Max

iPad:最为混乱,反正 Pro、Air 用起来没区别

如果说 iPhone 的命名演进看起来稍微有点混乱,那见识到 iPad 之后,或许你就释然了。

iPad 可以说是所有苹果设备中命名最为混乱的产品线,从 2010 年的 iPad 到 2011年 的 iPad 2 还规律可循。

2012 年,iPad 3 被命名为「全新 iPad」,作为首款配备 Retina 显示屏的iPad。这样的名字也着实敷衍,在产品角度,iPad 3 为了强上 Retina 屏,续航、重量、处理器、图形性能都差强人意,于是仅仅在存活 7 个月后,iPad 4 快速迭代了出来,三代随之停产。

iPad 4 名为「配备 Retina 显示屏的 iPad」,同时发布的还有第一代 iPad mini,当时,两台设备3天内共售出300万台,表现着实不凡。

2013年,iPad Air 发布,外观的改变促成了本次对 MacBook Air 的借名,iPad Air 仅厚 7.5毫米,重量从上代的 652g 速降至 469g,同时借鉴 iPad mini 的窄边框设计让 Air 更加名副其实,转年推出 iPad Air 2。

2015 年,最被苹果报以「生产力」期望的 iPad——iPad Pro 登场,2017年,iPad 基础版命名再次出现,不过这个时候,苹果的产品线终于已经稳定下来,入门款 iPad、轻薄款 iPad Air,性能版 iPad Pro,以及 iPad mini 同台竞技。

2017 年是一个分界线,这一年,iPad 的所有产品线后面都不再带有数字,如新推出的 iPad 改为 iPad(第 五 代),iPad Pro(第 二 代),这种只写产品线本名,将第几代弱化到详细说明中附属括号的表现方式,苹果沿用至今。

苹果主宣传页面并无括号后缀(第几代)

为什么 iPhone 命名会将产品名+第几代数字连写,而 iPad 不会,反而弱化到括号中?

苹果主宣传页面则保留命名代数数字

或许是因为 iPhone 是以一年的更新频率规律更新,且随之附带的 Pro、Max 等也会随之相应规律更新。但 iPad 并不是这样,可能今年的 9 月更新 iPad Air,也可能转年的 3 月更新,也可能好几年都不更新。用户没办法通过数字快速知晓在售的这台 iPad 到底是哪年的新品,而且 Pro、Air、mini 的后缀数字也早已不在同一起跑线上了。这样一来,为何不直接去掉第几代,让消费者认为当下的这台就是最新款,无需对比历史机型。

于是,在 iPad 这一产品线上,苹果根据市场反馈,细分出 iPad 基础版、Air 轻薄版、Pro性能版、 mini 便携版。但在数字命名上,苹果选择了弱化第几代的方式进行呈现。

在 2021 年的苹果新品发布会上,iPad mini 6 如期而至,尽管我们这样叫,但在官网的显示上,也早已将第几代写入括号中,并且不在官网主页面展示。

不过这样的产品线,到底是以满足不同用户的使用场景,还是只为了制造阶梯价格区间,收获更多利润,苹果或许陷入了一个两难境地。就以 Air 和 Pro 为例,iPad Air、Pro 之间的差别显然不如 MacBook Air、Pro 之间那样清晰。(MacBook Air 代表更轻的重量、MacBook Pro 代表更强的性能)

在 iPad 上所表现的的,11 寸(三代) iPad pro 重量为 466g,稍微比 iPad Air(四代)458g 重 8g 而已,但是厚度上,Pro 反而要比 Air 还要薄 0.2 毫米。实在体现不出来 iPad Air 的 Air 在哪里,再加上 iPad Pro 强硬件+弱软件的大马拉小车现状,也难以配得上 Pro 的称谓。

这样一来,iPad 的产品线定位更像一种价格阶梯,入门买 iPad,稍微预算高一些买 Air,想一步到位则买 Pro,尽管这三者,在目前移动办公、娱乐的使用差距上,真的很难拉开太大差距。

可以看出,乔布斯的四象限命名,已经在 iPad(亦可延展到苹果整体产品线)渐行渐远,无论是苹果刻意或无意为之,其产品线命名都在向营收导向而转型,苹果确实仍关心细分消费人群,只不过是从之前关心术业有专攻的不同需求人群,转为关心你口袋里的钞票是一张、五张、还是十张。在这里不禁要为 Mac 担心,美妙简洁且对消费者友好的四象限命名方式,还能维持多久?

定位困局,苹果求变成功了吗?

作为一家崇尚简洁的公司,可以看出,苹果相比其他厂商的命名已是十分克制,甚至对比其他厂商,苹果已然做的不错。

比如在 Lenovo 官网,可以看到,笔记本阵容分为 Thinkpad、ThinkBook、YOGA、LEGION 等五大产品线,仅在 Thinkpad 产品线下,就有将近 9 大系列,可以说是笔记本领域拥有最多 SKU 的厂商之一。

仅仅1个产品线下,就有9大系列,消费者如何挑选?

苹果的一个理念就是崇尚简洁,这种理念贯穿于其产品及对外宣传上,不过从产品命名上,却感觉苹果每次都很难考虑周全,有时做的好,有时做的一般。

在这里暂且举两个产品线消亡的例子,来一窥苹果更名背后的深层次原因。

12 寸 MacBook,难逃历史的车轮

第一个要提的产品是 MacBook(不带后缀)。2015 年,苹果发布 12 寸全新 MacBook,主打轻薄,去除了一切旧的物理接口,只留下 3.5mm 耳机插口与 Type-C 接口,移除风扇,厚度锐减到  1.31厘米,重量不到一公斤。然后于 2019 年 7 月从官网下架,空缺以新款 MacBook Air 代替。

苹果为什么要在已有 MacBook Air 的前提下,还推出 MacBook?并且为什么推出 4 年后反而砍掉?这还要回到当时的历史背景中去。

说回 MacBook Air,Air 产品线刚面世时,是绝对的高端产品线,价格甚至超过 Pro。但随后,Pro的产品形态也逐渐变得轻薄,Air 也就随之沦为 MacBook 系列中的低端型号,Air 于是不再走轻薄路线,但没让苹果想到的是,Air 的销量一直都非常不错。

于是,苹果认为,是时候重拾轻薄路线了,而在定位上,自然不会低端,因此,12 寸 MacBook 随之而来。

MacBook 不带后缀的产品线也非首次,早在 2007 年,苹果就有俗称「小白」的同名 MacBook 低端产品线,而 2015 年,苹果只是把这个产品线重拾了起来,并做了定位高端的品牌升级。

2007年推出的「小白」MacBook

而更重要的一点是,苹果当时推出 12 寸 MacBook 契机也到了。

当年,intel 的超低功耗处理器走向成熟,这类 CPU 的明显特点是 TDP(热设计功耗)功耗仅 5-7W,且不带风扇,于是,苹果认为超低功耗 CPU 该崛起了,且非常适合极致轻薄设备。于是,苹果在机械结构、设计上做了很多努力,蝶式键盘的 MacBook 就与我们见面了。

而后其退出历史舞台,也有很多综合性因素,例如蝶式键盘口碑很糟,intel 不再强力,更重要的是 M1 的出现,让 Air 直接可以去掉风扇,变得更为轻薄。这就导致高端型号 12 寸 MacBook 并没有与低端型号 Air 拉开差距。存在感变得越来越低,从而退出历史舞台。

iMac Pro,并非 Mac Pro 竞对?

另一个消亡的产品线是 iMac Pro,不过提及它之前,不得不吐槽下 iMac 的命名,如果以当时乔布斯的意图,i 明显是赋予消费类电子产品的专属命名,如现在的 iPhone、iPad 等产品,像 iMac 这样强劲性能的产品,赋予 i 标签,或许只是一个权益之计。

2017年,苹果推出 iMac Pro,杂糅的命名(i、Pro并存)、强大的性能(浮点运算能力 24Teraflops)、不菲的售价(4万)2021 年初该款产品停售。

一种很流行的观点认为:iMac Pro 与  Mac Pro 是竞争关系,而大多数人用不上售价昂贵、性能溢出的 iMac Pro。

工作站级别iMac Pro

但这样的答案显然站不住脚。首先 iMac Pro 是一体机,定位更高,Pro 更像是四象限失效后,修饰 iMac 的形容词,定位于给需求更高的设计师使用。

而 Mac Pro 是工作站,定位于给像 使用 CAD 这样工业工程的专业级用户使用,而且设备可拆卸、可升级。

iMac Pro退出历史舞台的真正原因,还是因为 M1 的出现。苹果的野心是自己电脑全线配备 M1,但这真的很难。

苹果毕竟不是芯片公司,不可能为每一个产品线定制化芯片,所以我们看到 MacBook 全线+iMac 都用上了 M1。

但在 iMac Pro 工作站上,还能沿用 M1 吗?M1 再强,定位也只是低功耗处理器,TDP 顶天30 W,这和工作站的高性能还有一段距离, iMac Pro 需要的是 M1 X 这样的更强心脏,TDP 至少上百瓦才配得上工业级工作站的定位。

所以,在高性能芯片没出来时,iMac Pro 的定位着实尴尬,强上 M1也不是不行,只不过那就会和 iMac 的定位冲突了。

一种乐观的预测是: iMac Pro 只是暂时下架,等 M1 X 或是 M2 诞生,那就是它与消费级产品拉开性能差距,王者归来的时候。

我们可以发现,任何时刻,一个产品线的兴起和衰亡,与芯片更加息息相关,市场反馈则次之,要不就是出现了更强的芯片,可以让新产品线发挥垂直优势,要不就是合适的芯片还没有出现,只能先暂时别过。

内在革新 VS 外在创新

最后值得说道的还有 iPhone ,iPhone 作为目前苹果最为为大众所熟知的产品线,贡献的收入比例决定了苹果必须为该产品线分配更多的市场营销脑力与预算。

iPhone营收仍占苹果6成以上份额

而一年一更新的苹果或许早已知道,电子产品的更新换代率和自己开新品发布会的频率总是对不上的,「凑活能用」的人们总比「永远用最新」的人要多。

如何让这一部分人乖乖掏钱,可以说是苹果最为头疼的问题,那就再开拓新的产品线吧,顺便赋予一个全新的名字,这样总比简单的数字迭代要看起来有购买欲望。

2014 年,面对大屏手机竞争,苹果开启全新型号 iphone 6 Plus 对抗安卓阵营,2015 年,小屏 SE 面世,这一年,iPhone 总销量达到历史巅峰 2.312 亿台,销售额达到 1550 亿美元。可是随后的 6 年里,苹果再也没有超过这个数字,无论是新型号 mini、Pro、Max 轮番登场,销量上,截止到 2020 年,iPhone 持续下降 14%,这是因为来自中国的竞争对手小米、华为等过于强劲了。

我们之所以无法在 Mac 市场上看到同样的命名突破,或许是因为 Mac 只占苹果 10%-20%的收入比例,同时对于专业人群,新的产品线,人们可能也并不那么感冒。

直到 2020 年,M1 芯片横空出世,告别 intel 之后,苹果为旗下 MacBook、iMac 注入更强劲的芯片,以真正实力再次获得消费者的认可,而不是市场营销层面的文字游戏。

2020年推出M1芯片Mac后,苹果Mac销量明显上涨

这或许告诉我们一个道理,尽管(内在本质)革新要比创新(外在方法)难,但想办法开拓更多的产品线,并赋予一个新名词,不如打磨好已有的产品线,能获得的认可会更稳定。

本文首发少数派,同步 WEB VIEW,感谢欧阳洋葱的内容支持。

2020还适合聊苹果吗?

作者 王隐
2020年10月20日 18:36

突然发现,今年 WEB VEW 选题大多集中在苹果发布会,「苹果电台」称谓并不是空穴来风。

这样其实不好,一方面暴露了我们更新的懈怠,另一方面也显得选题匮乏,自己对于科技的理解也越来越迟钝。

而最重要的是,聊苹果,最好的时候或许已经过去了。

苹果不行了

虽然你所感知到的,无论是从媒体还是市场反馈上,苹果仍日中天。

这里说的不行主要是指,由于手机发展进入平台期,厂商们发现各种花样玩完之后,发展的方向大多雷同:更好的镜头,更好的芯片,以及要把它们塞进去的更厚机身。

苹果不是不好了,只是少了 iPhone 4 横空出世时的惊艳与革新,现在的硬件和软件更多是一种缝缝补补,给人带来的再也不是「哇,手机还能这样」,取而代之的是「手机不就应该这样吗」。

所以,作为我们节目的原始素材,耀眼的时代过去了,留给我们的,则是一个想法设法调整产业结构,保持收入稳定增长的优秀公司。

没有好食材,再好的厨子也难做出好菜。

聊苹果的人不行了

好厨子,食材不好,做不出好菜,差厨子就更不行了。

其实可以很骄傲的说,WEB VEW 的苹果节目,要比市面上大部分的播客要专业,这当然得益于嘉宾的知识沉淀和行业积累。

但是总聊,人就会疲倦,尤其是每次苹果都在堆硬件,我们好像很难再从产品、设计角度给出到位的评价。

当不断弱化对苹果的个人感受,重点放在普及行业知识,自然就会让节目缺少生气,缺乏「嗯,就是这样」的共鸣评价。

当然了,这取决于节目制作者的技术水平,毕竟拾苹果牙慧的是我们。

日本电影《红鳉鱼》中,北野武出演的立川谈志谈到批评家这一角色,是这样说的:

不好意思,我不相信评论家,没有人能比我更冷静地分析我自己了,还有,这些人的饭碗不是你决定的,他们要是有人能独当一面,出名了,是你靠评论他们的表演吃饭,你的饭碗是他们给的,把这个逻辑弄错可不好。

说苹果是饭碗,有点大了,不过说是节目选题与灵感来源,不夸张。

关注苹果的人不行了

2007 年,一个叫做 apple4us 的群体博客成立了,很多人在上面写介绍苹果的文章,交流自己对苹果的理解,有些作者名字你应该很熟悉:创新工场张亮、知乎创始人黄继新、一天世界李如一、周源、flypig、Rio 等。

可以说,那个时候的苹果是最具创新力的公司,而他们这些人无疑是当时的先行者,苹果作为一种先进互联网物料,被带给访问网站的人。

那个时候,无论作者、读者,还是苹果,都是先行者。

而当一个产品逐渐成功变为商品,先进的意义自然就褪色很多。地铁里,人们拿着苹果手机,连连看、抖音、微信、淘宝,这些通用 App,用 A14 还是 A13 芯片真的区别大吗?人们会关注这些吗?人们也应该关注这些吗?

当一个新生事物逐渐大众化,那它被关注、讨论的先行意义就不大了,而附属于它身上的延展话题也显得没那么有吸引力。

WEB VIEW 目前对于科技话题的探讨深度与广度并不低,不过对于当下,如何精准找到这一小部分愿意了解这些脱水知识的人,或许很难。而更大的一种可能性:作为缓解生存焦虑的 Knowledge Porn,我们还做得不错。

聊聊新款 MacBook Air 的 CPU 与奇葩散热设计

作者 欧阳洋葱
2020年3月23日 17:25

关注苹果 MacBook Air 产品线的同学应该知道,从前两年开始,MacBook Air 已经换上了 retina 显示屏,设计也改头换面了。不过在产品线布局上,MacBook 系列发生了一些变化:12 寸 MacBook 已经退出人们视野(这个产品系列应该已经开始和 iPad Pro 打架了,所以退出也是必然的),MacBook Air 正式接棒了 12 寸 MacBook 的 fanless 无风扇设计。

说是无风扇设计,其实 MacBook Air 还是有风扇的,只不过这个设计相当奇特——后面我们再谈。但有一个核心资讯是 MacBook Air 用户需要在意的:如今的 MacBook Air 全部采用 Intel 超低压酷睿 Y 系列处理器。注意是超低压,而不是低压 U 系列(MacBook Pro 13″ 一直在用低压 U 系列)。也就是说,MacBook Air 已经正式成为 Mac 家族中性能最弱的设备,加上其价格——尤其 2020 款 MacBook Air 起价 7999 元,MacBook Air 成为了 Mac 系列中最低端的一个系列。

这也算是产品布局的一个精准调整了,当年乔布斯从信封里拿出 MacBook Air 之时,这个产品的价格可实在是不菲的,定位绝对不亚于 MacBook Pro。

这篇文章面向轻度技术爱好者,并且具备一定的导购价值,各位可酌情阅读。不想看我乱弹的,可以直接拉到本文最后看结论。

img
MacBook Air

无风扇设计?

国外很多媒体说 MacBook Air 是 fanless 的,当然我们拆机就知道这个说法是不正确的。MacBook Air 还是在内部配了一枚风扇的。不过实际上,在很多人的理解中,Intel 的超低压 Y 系列处理器,的确可以不配风扇,比如当年的 12 寸 MacBook 就没有风扇。

今年 Intel 超低压酷睿 Y 系列处理器由于首次提升到了四核心,所以 TDP 提至 9W,看起来已经和低压 U 系列的 TDP 15W 非常接近了。TDP 功耗上的差异,也让酷睿 Y 系列和 U 系列在起步的基频(base clock)方面就不大一样,Y 系列普遍的基础频率在 1.x GHz 的程度(现在的基频可认为是在 TDP 功耗下,CPU 全核可长时间坚挺的一个频率)。两者的睿频好像差不多。

这两者更具体的差别,我没有具体去研究,但至少包括 cache 大小差异,以及 I/O 方面的区别:比如就第十代酷睿而言,Y 系列的 PCH 高速 I/O 通道是 14 条,而 U 系列是 16 条;Y 系列核心部分支持的 USB-C 接口数量会略少;还有包括 Y 系列不支持 DDR4(而只支持 LPDDR4x);至于核显,两者都是 Iris Plus(GT2?),在规模上官方标的都是至多 64 EU,不过不知道在频率方面是否有差别之类。[1]

总之,MacBook Air 现在在用的处理器是一种更省电的方案。TDP 9W 听起来好像的确可以不需要风扇了,人隔壁 iPad Pro 的 A12X 大概 7、8W 的平均功耗就没风扇。当然了,这里咱不说,这个 TDP 本身现在所具备的参考价值可能越来越脱离于其原本热设计功耗的意义,毕竟现在大家都把睿频当基频在看,连什么 cTDP up/down 之类的数据看起来都不靠谱。

img
来源:iFixit[2]

不过 MacBook Air 从改头换面以来的风扇设计就相当之奇特,上面这张图是 2018 款 MacBook Air 拆开后壳以后的内部结构图。内部左上角位置显然就有风扇,不过你知道 CPU 在哪儿吗?CPU 本尊并不在风扇附近,而在中央那块散热片下面,下图用红框将其标出了。

img
CPU 上方的散热片

需要注意的是,从各种拆解来看,CPU 之上并没有一根导热管连接至风扇。那么这枚风扇究竟在给谁降温?迷之风扇!针对这个问题,我查了一些资料,发现网上对此的猜测颇多。YouTube 有一些技术向的 up 主提到,这颗孤独的风扇 “just for ventilation”,它负责带走 MacBook Air 内部主板的整体热量,而且在内外造成气压差,这样内部也会主动“吸入”一些冷风。

Reddit 上面也有一张帖子是专门讨论此事的[3]:这张帖子是针对 2019 款的 MacBook Air,表明这种设计后续没有变。这张帖子里有人提到,这种设计可能是依赖于内部的密闭结构,空气流向通路上会带到 CPU 上方的散热片。不过无论如何,这种设计针对 CPU 的散热效率都是比较低的,可能与 MacBook Air 追求极致轻薄有关(但实际上我们后面还会提到,MacBook Air 如今真的不能算薄)。

单就 CPU 而言,这还真的算是 fanless,因为虽然有风扇但却不是针对 CPU 的;所以 CPU 真的仍然可以说是被动散热;或许在超低压处理器范畴内,这种设计是合理的,真的是这样吗?

与 MacBook Pro 的性能差距

网上已经有部分 up 主,包括上周我在参与 WEB VIEW 的播客节目时,都谈到了,今年的 MacBook Air 真的十分超值;主要是因为 SSD 最低容量升级到 256GB,内存也换用了 LPDDR4x,存储性能会有较大提升(虽然 MacBook Air 的 SSD 速度一直以来都比 MacBook Pro 慢一截);另外就是处理器更新到了酷睿十代,除了最低配的酷睿 i3,更高 i5 配置都开始改用四核处理器(所以苹果宣称快 1 倍),核显也明显上了一个台阶。而且,价格更便宜。

就纸面数字来看,我之前甚至还提到,2020 MacBook Air 已经比 2019 MacBook Pro 13″ 更牛了。不过当时我并没有意识到,2020 MacBook Air 用的虽然是四核处理器,但却是超低压版的酷睿 Y 系列。而 MacBook Pro 用的是低压酷睿 U 系列(2019 款 MacBook Pro 13″ 用的八代酷睿低压 U 系列)。那么除了 TDP 功耗数字差异,这两者到底如今是个什么样的关系呢?

img
2020 与 2019 款 MacBook Air 内部结构对比,来源:Max Tech

另外,Max Tech 的拆解已经提到,2020 MacBook Air 仍在沿用以前的模具(chassis),所以上述这种加了个风扇,但不吹 CPU 的设计仍然存在,如上图所示。

Intel 酷睿 Y 系列四核处理器,没风扇能镇压吗?其实从理论上来说问题也不大,被动散热中的典范是 Surface Pro。之前我花了很大的篇幅来探讨无风扇的 Surface Pro 性能如何,结论是无风扇的 Surface Pro 相比同配其他有风扇的超级本,持续性能差距大约有 25%[4]。即便如此,Surface Pro 的表现依然令人满意,可以认为是被动散热设计中的楷模。而且 Surface Pro 用的还是酷睿 U 系列即低压版的处理器,MacBook Air 用的 Y 系列更不成问题了吧?

就已公开的情报来看,2020 MacBook Air 最低配的酷睿 i3 处理器具体型号为 Core i3-1000NG4,酷睿 i5 处理器具体型号为 Core i5-1030NG7。从这个型号就不难发现,这并非 Intel 公开在售的版本,“N”应该特别指代这是给苹果的特供版,或者合作开发版之类。具体跟公开版本的 Core i3-1000G4、Core i5-1030G7 有何区别,我们就不知道了。

市面上貌似还没有可参照对比的十代酷睿 Y 系处理器实际性能,所以我们就只能看 2020 MacBook Air 自己的实际表现了。严肃技术向的科技媒体还没有十分严谨的测试数据——NBC 的数据库里面也还没有这几款 CPU 的成绩,这里我捡一些不够可靠的分数,都是 CineBench R20 测试:

Luke Miani 给 MacBook Air 酷睿 i3 版(Core i3-1000NG4,双核)的测试得分为 640 分,酷睿 i5 版(Core i5-1030NG7,四核)测试得分大约在 1060 分左右 ;但 Max Tech 针对酷睿 i5 版的测试得分一次是 863 分,一次是 1019 分 ——我猜这可能与设备测试前的运行状态有关(真心是不负责任的 up 主啊!),这里的 863 分很有可能是持续性能成绩,而超过 1000 分的成绩则是在设备温度较低时第一第二轮跑分能够获得的成绩。

img
MacBook Air 与 MacBook Pro 13″ 的 CineBench 测试成绩

毕竟不是什么正经测试,那我们就取个中间值吧:960 分——恰好和一家日本测试站点 PC Watch 给的结果差不多 [7]。上一代的酷睿 i5 版(Core i5-8210Y) MacBook Air 的 CineBench R20 得分为 632 分[8]。所以粗略估算,2020 MacBook Air 酷睿 i5 版相比上一代的 CPU 性能提升幅度大约是 52%-60%,也算是很给力的成绩了(知乎上貌似有数据说是提升 200%,不知这个数据是怎么来的;另 Geekbench 5 多核测试成绩有将近 80% 的性能提升)。当然我们暂时还没有机会了解多轮测试的持续性能表现。

不过这个成绩相较酷睿低压版 U 系列处理器还是有着相当大的差距,比如 MacBook Pro 13″。这里放上 2019 款 MacBook Pro 13″(Core i5-8279U,八代酷睿低压处理器)以及我自己测试的 Surface Laptop 3(Core i5-1035G7,十代酷睿低压处理器)成绩对照,如上图。

GPU 核显部分其实也是这次提升的一个亮点,尤其酷睿 i5 版用上了满血的 64 EU(不过考虑到 Y 系列超低压处理器的 TDP 限制,我猜其图形性能应该还是会低于 U 系列的低压版)。不过那些 up 主的数据感觉都偏离很大,而且也不标测试工具版本和测试环境。PC Watch 给的数据是,Unigine Valley Benchmark 1.0 测试中,2020 MacBook Air 相比上一代平均帧率提升将近 1 倍——这也基本符合我们对于这次 Iris Plus 提升的认知。在 Max Tech 的 Geekbench 5 Metal 测试中,2020 MacBook Air 相比上一代得分大约有 1.2 倍的提升。

其实针对 GPU,也很想加入 Surface Laptop 3 对照(就能看看同样是满血版 G7,低压版和超低压版上的 Iris Plus 核显有什么差别了),不过这些媒体完全不说测试对象,比如测试 API 是否用的 OpenGL,高画质、抗锯齿与否等,所以我也没法测(而且我的测试也一向那么那么不严谨O_o)。不过从早前笔吧的十代酷睿核显测试来看,GPU 性能提升的确很多,但实际使用却没有这么给力,原因应该是当 CPU 也一同跑起来的时候,CPU 和 GPU 会开始争抢主内存资源,造成数据带宽瓶颈——这在一些需要较多调度 CPU 的游戏中就能体现出来。

img
MacBook Something…

这里再多插一句,看到有人对比 Unigine Heaven 测试,2020 MacBook Air 最终平均帧率 8.8 帧,2019 MacBook Pro 13″ 平均帧率 10.9 帧。这个数据仅供参考,或与 eDRAM,以及后者 28W TDP 有关。

如果我们只看 CPU 性能的话,即便和 2019 款 MacBook Pro 13″(中配 Core i5-8279U)比,2020 MacBook Air 都有着比较大的差距,两者 CineBench R20 多核性能差距在 58-65% 左右。而且由于散热设计上的差异,持续性能理论上还会拉开更大的差距。

说白了,新款 MacBook Air 在性能上仍然是弱鸡,只不过的确比上一版提升很多。与竞品比较的话,其性能和 Surface Pro 7 甚至都有较大差距,这两者还都是被动散热(MacBook Air 的“被动”散热打个引号);而价格其实还差不多。

超低压 CPU 的发热很低吗?

在之前我们探讨过低压 CPU 的实质以后,我愈发觉得,其实超低压和低压 CPU 的区别,可能本质上也还是比较小的——只在于给了一个人为限制的 TDP,便有了更小的基频。如果不考虑功耗墙和温度墙,那么这两者大概就仅剩 I/O 的那点差别了(未深入考察,纯个人 YY,别当真)。

从 Max Tech 的发热测试来看,在 2020 MacBook Air(Core i5 版)跑 CineBench R20 的时候,四核全开,短时睿频可蹿升至 2.4-2.7GHz,此时的功率大约为 13W(在 Max Tech 刚刚更新的测试中,据说功率可以一度达到 26W,全核在极短时间内达到更高频率[10]。这还是超低压 CPU 的节奏吗???或者苹果的确对其间限制做了改动);但似乎在极短时间内(具体多久不知道)就撞了温度墙,CPU 核心温度很快蹿升到了 100℃,全核心便降到 1.5GHz 左右。

这个时候如果能有主动散热来努力一把,那么睿频还是可以坚持更长时间的。只不过前面也提到了,MacBook Air 如今的散热设计比较奇特,那个独立的小风扇依靠坚强的毅力来为散热片吹风。

另外,MacBook 轻薄本(主要包括 MacBook Air 和 MacBook Pro 13″)在散热设计上还一直有个传统,即宁可降低频率,也要让风扇保持安静。所以 MacBook 用户应该会发现,风扇是几乎不发出声音的,这大概也算保证体验的一种方案吧。有兴趣的同学可以去看看 Linus Tech Tips 做的一个视频 “Macs are SLOWER than PCs. Here’s why.”[9],里面提到了 MacBook Pro 在 macOS 系统下这种调节机制的特性(不过 Linus Tech 一直是著名果黑)。

似乎苹果更相信,让风扇尽可能保持低转速,而在一定限度内牺牲性能,是一种可达成体验加成的方式(其实我也这么认为…)。实际上 2020 MacBook Air 的情况也很类似,即 CineBench R20 测试期间,所有核心全开,CPU 核心温度到 100℃ 了,风扇转速也才 4000RPM(全速是 8000RPM)——不过由于这风扇离 CPU 这么远,估计就算转更快、效果也就那样了。

而苹果在 Mac 设备散热上的黑历史,也实在是一言难尽;也包括大尺寸的 MacBook Pro 移动工作站。实际上,苹果在寻找散热设计与极致轻薄间的平衡点时,指针始终在向后者偏移。或许在苹果看来,如果你那么在意性能,为什么不买个台式机呢?好像也有点道理。

img
Intel Core Ice Lake

OEM 厂商的市场定位把戏

看看,MacBook Air 性能和 MacBook Pro 13″ 还是存在实质上的差距的(更不用提屏幕亮度和色域覆盖差别)。所以以更低的价格购买一台 MacBook Air,你并不能获得 MacBook Pro 13″ 那样的硬件水准。而且实际上,追求轻薄性的各位不妨去苹果官网看一看 MacBook Pro 13″ 与 MacBook Air 在重量和厚度上的差别,这两者不仅最厚处是一样厚的,而且 Pro 只比 Air 稍重了一点点(当然 Air 还有楔形设计)…

在市场策略上,以 Intel 酷睿超低压处理器(Y 系列,MacBook Air)与低压处理器(U 系列,MacBook Pro 13″)拉开性能差距,再加上前者散热上的负优化(误),这两条线的产品不会存在性能上打架的情况。另外,如果今年 MacBook Pro 13″(或 14″)开始采用 AMD Ryzen 4000 处理器,则这种差距还能被进一步拉大。于是,MacBook Air 成为名副其实 Mac 系列产品中性能最差的存在,优势就是价格便宜。

从 OEM 厂商的层面做产品定位的明确差别,还有一例其实是微软。Surface Pro 的酷睿 i5 版不带风扇,而酷睿 i7 版带风扇——原本在低压处理器这个层面上,酷睿 i5 和 i7 的性能差距是相当小的(除了这次核显规模上选择的差别),不过微软在这个散热抉择间,硬生生让 i7 比 i5 性能提了一档,这才是让选择了酷睿 i7 的 Surface Pro 用户真正感觉物有所值的一种方法…(至于 i5,那就当时静音体验吧)花样还真是多。

最后,给出本文的一些推论:

  1. 2020 MacBook Air 性能比 2019 MacBook Pro 仍然有着很大差距;
  2. 2020 MacBook Air 模具没换,仍然用了 2019 款的设计;
  3. 如今 MacBook Air 的散热设计是个悲剧,而且非常奇特(虽然有风扇,但 CPU 依然算是被动散热);
  4. 相比上一代 MacBook Air,2020 MacBook Air 的 CPU(多核)性能提升至少 60%,图形算力提升 100%(实际可能没有);
  5. 导购建议 1:如果你在意性能的话,不要考虑 MacBook Air;如果你在意轻薄性的话,也不要考虑 MacBook Air,因为 MacBook Pro 13″ 其实和 MacBook Air 的厚度、重量差不多;
  6. 导购建议 2:如果你是旧版 MacBook Air 用户,那么十分推荐升级,因为这次的硬件提升十分给力!
  7. 导购建议 3:不建议购买最低配 Core i3 款 MacBook Air,因为 i3 款仍在使用双核,而多加点钱就能用上四核。

参考来源:

[1]Intelligent Performance 10th Gen Intel® Core™ Processors Brief – Intel
[2]MacBook Air 13″ Retina 2018 Teardown – iFixit
[3]New macbook air fan cooling system doesn’t make sense – Reddit
[4]聊聊无风扇的Surface Pro:性能比一般笔记本差多少? – WEB VIEW
[5]The CHEAPEST MacBook is better than ever: Base model 2020 MacBook Air – Luke Miani
[6]2020 MacBook Air Benchmarks & Thermal Throttling Tested! – Max Tech
[7]「MacBook Air 2020」を一足早く開封。前モデルと性能を簡単に比較してみた – PC Watch
[8]Intel Core i5-8210Y – Benchmark and Specs – cpu-monkey
[9]Macs are SLOWER than PCs. Here’s why. – Linus Tech Tips
[10]2019 vs 2020 MacBook Air – Every Difference Tested! – Max Tech

实时关注豆瓣租房信息,几行代码帮你轻松搞定

作者 lolilukia
2020年2月23日 15:58

现代年轻人的日常生活已经离不开互联网,无论是订机票,点外卖还是网购,本质上,我们都已经习惯从互联网获取信息,并从中筛选、鉴别,作出决策。

但有时,如何从浩瀚的信息之海找到我们所需要的东西,则是一个大问题。这时,技术就派上了用场。

设想这样一种场景,你租住的房子很快就要到期,可你却诸事缠身,没办法花费诸多精力寻找合适的房源。你第一时间想到了房屋中介,但又投鼠忌器,害怕自己的个人信息被人不经意间「分享」,你还希望直接和一房东对话,找一套直租房源。

你想到了论坛,你看到了密密麻麻的帖子,并从中仔细挑选符合你期望的房源。结果你发现,看了半天,满意的似乎并不多,只能再刷刷看有没有新发布的帖子。

生活中诸如此类的情景还有很多,其实,在精力有限的情况下,可以让你的电脑替你去论坛搜索所期望的信息,收集打包并呈现在你眼前。

下面以租房和寻找二手物品为例,介绍我们是如何用简单的方法筛选出相关信息并进行定时更新的。

豆瓣小组获取租房信息

豆瓣上有很多专门的租房小组,尽管这些年也逐渐「沦陷」为房屋中介的战场,但由于历史悠久,我们还是能从中筛选出合适房源。

接下来的尝试,我们以「上海租房」小组为例,从该主页可以看到,相同类型的小组不少,当然也适用于这个方法。

图片
豆瓣「上海租房」小组首页

知己知彼,百战不殆。在抓取该页面信息之前,我们先来看看页面结构是怎样的。

点击豆瓣页面中的「更多小组讨论」后,会发现帖子标题涵盖了我们关心的地铁线路站名以及周边位置等信息。因此,我们的目标就可以概括为定时获取包含某些关键字的帖子标题以及链接并去重。

图片
小组讨论帖标题的关键词

「人生苦短,我用 Python」,我们的这个小工具就是基于 Python 3 实现的。而且方便的是,小组讨论不必登录就可以浏览,这就省去了模拟浏览器登录的麻烦。

安装 python

首先,我们需要 安装 Python ,详细方法可见这篇教程。建议使用 3.x 版本,毕竟今年 1 号起, 2.X版本官方都停止维护了。

Windows 下载安装包后,运行安装即可。

终端处输入 Python 显示版本信息则表示安装成功。

图为在 Windows cmd 中的效果。

图片
cmd 中输入 python 查看版本

虽然 Python 以短小精悍闻名,但我们还是想再精简下工作量,我们使用 Scrapy 框架来抓取网页上的信息,Scrapy 是 Python 的一个知名第三方爬虫库,Windows 平台可以直接通过安装Python后自带的 pip 安装,一行命令解决。

pip install Scrapy

但 Mac OS 系统自带的 Python 2.7 会和 Scrapy 产生冲突,Mac OS 用户建议使用 virtualenv 在虚拟环境中进行安装。 都安装完毕后,就可以创建项目了。

创建项目

我们创建一个用以提取信息发送邮件的项目,将其命名为 ForumSpider。新建项目,首先 cd 到相应的目录,执行如下的命令:

scrapy startproject ForumSpider

一个初始的 Scrapy 项目就生成了,下图是这个项目的目录结构,由于我们实现的功能比较简单,可以暂时不用关心其他文件,我们只需在 settings.py 中进行简单设置,然后在 spiders 目录下定义一个我们自己的爬取工具就够用了。

图片
scrapy 项目结构

首先,我们需要在 settings.py 中设置 USER_AGENT,即用户代理,

User Agent中文名为用户代理,简称 UA,是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等

简而言之,这就是客户机器的身份标识。我们需要设置此项以便能够隐藏机器的身份,不容易被网站拒绝。settings.py 中已经自带了一些配置。在浏览器中按下 F12,选择 Network 标签页,随意点击一个链接,就可以从 Header 中获取 USER_AGENT:

图片
查看 User Agent

将其替换 settings.py 中的 USER_AGENT:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
图片
修改配置

另外,我们选择遵循 Robots 规则

robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

Robots.txt中定义了我们可以爬取的范围,符合对应该网站的爬取规范,以避免不必要的爬虫风险。之后,我们就可以新建一个工具定义我们的爬取规则。在此之前,我们需要从网站中找寻一定的规律来编写我们的脚本,我们打开刚才的「更多小组讨论」的帖子列表页面,观察 url 的规律,下图分别是第一页的 url 和第二页的 url,可以看出,分页参数 start 代表开始的元素编号,每页 25 个帖子:

图片
第 0 -25 个帖子的 url
图片
第 25 -50 个帖子的 url

了解了每次爬取的 url 的变化规律,接下来我们需要了解爬取内容的 DOM 树结构,进入控制台,选择 Elements 标签页,使用旁边的选择器定位标题所在的结构:

图片
定位标题所在元素的操作
图片
标题所在的 a 标签

我们发现,整个列表是在一个名为 olt 的 class 中呈现的,标题所在的 class 名为 title,并且其中的超链接标签中包含了我们需要的所有信息,标题和链接。由于页面中可能包含有多个名为 title 的 class,因此我们将其父级元素 olt 同时作为条件选择以便更方便地定位。

回到刚才的项目,我们此时需要新建一个名为 douban 的爬取工具:

scrapy genspider douban "douban.com"

douban.com 是我们设定的爬取域,生成的文件如图所示:

图片
工具主函数

start_urls 代表了爬取的 url,但实际上我们如果需要爬取多个页面的话, url 则是动态的。因此我们可以将 allowed_domains 和 start_urls 变量删去,用 start_requests 方法来动态生成爬取的 url:

def start_requests(self):
    for i in range(0, 5 * 25, 25):
        url = 'https://www.douban.com/group/549538/discussion?start={page}'.format(page=i)
        yield scrapy.Request(url=url, callback=self.parse)

这个方法的功能就是循环爬取 start=0 到 start=100 的页面内容,每次共爬取 5 页,爬取时调用 parse 中指定的规则。 在刚才我们探索页面结构的基础上,parse 方法定义为:

def parse(self, response):
    for title in response.css('.olt .title'):
        yield {'title': title.css('a::text').getall(), 'link': title.css('a::attr(href)').getall()}

这个方法的含义是获取 olt 的子元素 title 下的 a 标签的文本和 href 属性,即内容和链接。getall 代表获取符合上述条件的所有元素的内容和链接。 到这里,爬取的功能已经全部编写完毕了,一共是 7 行代码。但我们所需要的功能是在获取到新发布的帖子的信息时,收到推送或提醒。Scrapy 中内置了 mail 模块,可以很轻松地实现定时发送邮件的功能。那我们可以考虑先把爬取到的信息存储到文件中进行分析,再将由关键词筛选得到的信息与上一次筛选过后的信息进行比较,如果存在更新,就更新存储筛选信息的文件,并发送邮件。我们可以用以下的命令来将爬取到的信息输入到 JSON 文件中:

scrapy crawl douban -o douban.json

既然需要定时执行,那我们就需要在根目录中创建一个 douban_main.py,用 time 库编写一个简单的定时器,用以爬取之前清空存储爬取信息的文件,并每 21600 秒(6 个小时)执行一次爬取分析:

import time, os
while True:
    if os.path.exists("douban.json"):
        with open("douban.json",'r+') as f:
            f.truncate()
    os.system("scrapy crawl douban -o douban.json")
    time.sleep(21600)

最后一步,就是筛选信息并发送邮件了,发送邮件需要引用 MailSender 类:

from scrapy.mail import MailSender

首先,我们要确保发送邮件的邮箱 SMTP 服务开启,并获取授权码,以 QQ 邮箱为例:

图片
开启 POP3 / SMTP 服务及 IMAP / SMTP 服务

获取授权码之后,配置 MailSender 实例:

mailer = MailSender(
    smtphost="smtp.qq.com",
    mailfrom="xxxxxxxxx@qq.com",
    smtpuser="xxxxxxxxx@qq.com",
    smtppass="16 位授权码",
    smtpssl=True,
    smtpport=465
)

最后,我们需要指定一些关键词,为了便于理解,匹配的写法比较简易,注重性能的朋友们可以使用正则匹配。注意每次分析完毕之后,我们将迄今为止出现的符合关键词的信息写入到 douban_store.json 中,并在新信息出现时保持更新。这个过程写在爬虫程序结束之后调用的 close 方法中。附上 douban.py 的所有内容:

# -*- coding: utf-8 -*-
import scrapy, json, os
from scrapy.mail import MailSender
class DoubanSpider(scrapy.Spider):
    name = 'douban'
    def start_requests(self):
        for i in range(0, 5 * 25, 25):
            url = 'https://www.douban.com/group/549538/discussion?start={page}'.format(page=i)
            yield scrapy.Request(url=url, callback=self.parse)
    def parse(self, response):
        for title in response.css('.olt .title'):
            yield {'title': title.css('a::text').getall(), 'link': title.css('a::attr(href)').getall()}
    def close(self):
        mailer = MailSender(
            smtphost="smtp.qq.com",
            mailfrom="xxxxxx@qq.com",
            smtpuser="xxxxxx@qq.com",
            smtppass="xxxxxxxxxxxxx",
            smtpssl=True,
            smtpport=465
        ) # 配置邮箱
        obj_store, new_info = [], []
        key_words = ['枫桥路', '曹杨路', '11 号线']
        if os.path.exists("D:\\ForumSpider\\douban_store.json"):
            with open("D:\\ForumSpider\\douban_store.json", 'r') as f:
                obj_store = json.load(f)  # 读取之前爬取的符合关键词的信息
        with open("D:\\ForumSpider\\douban.json", 'r') as load_f:
            load_dict = json.load(load_f)
            for info in load_dict:
                content = info["title"][0].replace('\n', '').replace('\r', '').strip() #按标题进行筛选
                for k in key_words:
                    if k in content:
                        tmp = {"title": content, "link": info["link"][0]}
                        if tmp not in obj_store: # 如果之前的爬取没有遇到过,则加入到新信息列表
                            new_info.append(tmp)
                            obj_store.append(tmp)
        if len(new_info) > 0:
            with open("D:\\ForumSpider\\douban_store.json", 'w') as writer:
                json.dump(obj_store, writer) # 更新到旧信息列表
            return mailer.send(  # 发送邮件
                to=['lolilukia@foxmail.com'],
                subject='【豆瓣脚本】上海租房',
                body='\n'.join([str(x['title'] + ':' + x['link']) for x in new_info])
            )                        

运行 douban_main.py 即可定时运行这个信息爬取脚本:

python douban_main.py

包含主函数,这个脚本一共 51 行,现在已经能满足使用需要,当然还可以进一步精简优化。执行脚本之后,很快我就收到了第一封邮件:

图片
租房信息爬取结果邮件

上述脚本适用于所有豆瓣小组,稍改改动优化过后也可以应用于获取留学信息、追星八卦等等方面。

场景 2:获取二手物品信息

上述的场景适用于不需要登录就能查看信息的一些网站,然而大多数情况下,更多的信息需要登录之后才能查看。很多网站登录的时候使用了验证码,扫码等策略避免自动登录,cookie 的模拟登录方式又极容易过期,使用简单的策略爬取网站信息似乎有些困难,下面以 v2ex 论坛为例,介绍另一种爬取网页信息的半自动方法。

为何称为半自动方法呢,进入 v2ex 的登录页,我们发现登录框的下方需要输入验证码,如果我们需要模拟登录的话,可能还需要写一个模式识别的程序,甚至比我们浏览论坛的时间成本还高。如果能够人工输入一次验证码,然后让程序自动定时爬取,好像也可以接受。这样的话,我们可以采用模拟人工操作浏览器行为的框架 selenium。

selenium 依旧可以使用 pip 来进行安装:

pip install selenium

selenium 3 之后需要单独安装浏览器驱动,因此我们需要下载 geckodriverchromedriver

,其他浏览器需要安装对应的驱动),并将它们都加入到环境变量 PATH 中。

首先,我们先使用 selenium 调用浏览器,打开 v2ex 的登录页面:


from selenium import webdriver
sigin_url = 'https://www.v2ex.com/signin'
driver = webdriver.Chrome('D:\\chrome_driver\\chromedriver.exe')
driver.get(sigin_url)

以下是运行效果:

图片
selenium 运行效果

接下来,我们需要自动填充用户名和密码,然后等待我们人工输入验证码进入论坛。我们还是使用 CSS Selector 的方式定位元素,找到用户名和密码所在的输入框:

图片
查看输入框的 DOM 树结构

我们发现这两个输入框没有标识 id,也没有特别的 class 名称,因此我们可以使用 find_elements_by_css_selector 返回这一类元素的列表,幸运的是登录页一共只有 3 个输入框,因此我们可以通过索引迅速锁定它们,并填充我们的用户名密码。当然这里也可以用 tag 来定位:

user_name = driver.find_elements_by_css_selector('.cell .sl')[0]
user_name.send_keys('v2ex 用户名')
user_pwd = driver.find_elements_by_css_selector('.cell .sl')[1]
user_pwd.send_keys('v2ex 密码')

运行效果如下:

图片
打开页面自动输入用户名和密码

验证码需要我们自行输入,为了让程序等待我们输入完毕验证码并点击登录按钮之后再进行爬取,我们设定一个 while 循环,当页面跳转到论坛列表页,出现特定元素时跳出:

while True: # 等待人工输入验证码
    table = driver.find_elements_by_id('Tabs')
    if len(table) != 0:
        break

其余的逻辑与场景 1 大抵相仿,在此不多加赘述。模拟浏览器行为的写法比较简单,访问页面时调用形如 driver.get(url) 的方法即可,抓取的写法也很好理解,只是由于调用了浏览器,爬取速度会稍慢。不过这也无妨,我们要做的就是在点击登录按钮之后等待邮件即可。由于这个场景不再使用 Scrapy 进行抓取,发送邮件我们改用 Python 内置的 smtplib 和 email 模块,进行简单的配置(16 位授权码的获取方式参见场景 1):

import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'xxxxxx@qq.com'
subject = '【v2ex 脚本】二手交易'
smtpserver = 'smtp.qq.com'
passcode = '场景 1 出现过的 16 位授权码'

然后需要构造一个 MIMEText 实例,用以定义发送的内容、发件人、收件人和主题等等:

msg = MIMEText(body, 'html', 'utf8')
msg['From'] = sender
msg['To'] = sender
msg['Subject'] = Header(subject, charset='utf8')

这里的 body 就是我们筛选出的新信息的字符串,发送邮件的过程也十分简单:

smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(sender, passcode)
smtp.sendmail(sender, sender, msg.as_string())

如果需要多次运行,则可以使用 JSON 文件记录筛选过的信息,如果仅运行一次,将 obj_store 放置在 while 循环外即可。注意尽量避免较短时间内多次进行登录操作,否则可能会被封 IP。另外,如果新增回复,链接会发生变化,因此此处只判断 title 是否出现过。附上 v2ex_main.py 的所有内容:

from selenium import webdriver
import time, os, json
import smtplib
from email.mime.text import MIMEText
from email.header import Header


sender = 'xxxxxxxxx@qq.com'
subject = '【v2ex 脚本】二手交易'
smtpserver = 'smtp.qq.com'
passcode = '16 位授权码'


sigin_url = 'https://www.v2ex.com/signin'
driver = webdriver.Chrome('D:\\chrome_driver\\chromedriver.exe')
driver.get(sigin_url)
user_name = driver.find_elements_by_css_selector('.cell .sl')[0]
user_name.send_keys('v2ex 用户名')
user_pwd = driver.find_elements_by_css_selector('.cell .sl')[1]
user_pwd.send_keys('v2ex 密码')
while True: # 等待人工输入验证码
    table = driver.find_elements_by_id('Tabs')
    if len(table) != 0:
        break
key_words = ['mbp', 'AirPods', '触摸板']
obj_store = []
while True:
    new_info = []
    for i in range(0, 5):
        driver.get('https://www.v2ex.com/go/all4all?p={page}'.format(page=i+1))
        items = driver.find_elements_by_css_selector('.item_title a')
        for item in items:
            for k in key_words:
                if k in item.text:
                    tmp = {'title': item.text, 'link': item.get_attribute('href')}
                    if tmp['title'] not in obj_store:
                        new_info.append(tmp)
                        obj_store.append(tmp['title'])
    if len(new_info) > 0:
        body = '\n'.join([str(x['title'] + ':' + x['link']) for x in new_info])
        msg = MIMEText(body, 'html', 'utf8')
        msg['From'] = sender
        msg['To'] = sender
        msg['Subject'] = Header(subject, charset='utf8')
        smtp = smtplib.SMTP()
        smtp.connect(smtpserver)
        smtp.login(sender, passcode)
        smtp.sendmail(sender, sender, msg.as_string())
        smtp.close()
    time.sleep(1800)

爬取的过程如下图所示:

图片
整体运行效果

切记不要关闭浏览器,随后会收到一封来自脚本的邮件:

图片
二手信息爬取结果邮件

总结

以上仅是相应于场景提出的小规模样例,生活中其实有相当多的应用,比如最近一段时间抢购口罩等等。这样的小工具能够一定程度上提高我们生活的效率,避免花费不必要的时间。

最后,虽然网页爬虫能够给我们的生活带来一定的便利,免去人工筛选信息的烦恼,但还是要注意道德与法律的边界,防止带来一系列负面影响。

上博四楼陈梦家

作者 王隐
2020年1月4日 18:29

来北京前去了趟上博,想看看家具,还有家具的主人。

即便工作日,上博人也不少。我排队入场,直奔四楼明清家具馆。

里面桌子,椅子,吸引力不大,我甚至觉得如果不是第一次来上博的人,很难专程来看。

当然,我对博物馆的情结也止步于某种「实证」,看到一本书,一部电影或是一段音乐谈到某个物件,自然想实地考证,和现实做个比对。

四楼人不多,或是缺少一楼青铜器的「阵列感」,人们总是稀罕不常见的物件。从明清家具的样式来看,对好仿古的今人来说,并不稀奇。

我看展,爱看前言。毕竟自己算艺术外行,前言作为展览少有的文字「导读」,就算看不懂接下来的艺术,文化,也好靠「导读」对展品来龙去脉懂个大概。

image-20191224231117306
上博四楼家具展前言

前言也点明了我此行的目的——陈梦家,赵萝蕤夫妇。

「你去走廊找找!」

四楼家具馆布局简洁,一大间,分为明清两个场馆。

48D27CF8-27D2-48A4-92FE-49928E72BF1B_1_105_c
明清家具馆

不过,在尝试自己找寻一番陈的家具无果后,还是不得不求助于工作人员。

我先问了明场馆的工作人员:「请问,陈梦家的家具在哪?」

他告诉我在清场馆,我随即问了清场馆的人,又告诉我在明场馆。

我跑回明场馆,问了另外一个人同样的问题。

「在走廊。」

走廊?我显然没搞清他的意思,或者说我没搞懂「走廊」这个词在展馆到底处于怎样的地理位置。不过他的手势,我看懂了,指着场馆外面,意思让我出去看看。

他的回答让我更加疑惑,我随后问了一个年长些的工作人员,他告诉我陈的家具不是无偿捐赠,所以展品没有标记名字,他也不确定具体是哪个,不过他可以肯定是在明场馆。

锁定了范围,就要借助互联网。

手机搜了几个关键字,看了几个链接,依照新闻中的图片,开始比对。好在大部分家具都能按图索骥地找到。

9E607E59-5CD0-4107-A6D5-63002055BA2B_1_105_c
黄花梨木五足内卷香几
69A308AA-770B-4978-AC98-C84187866274_1_201_a
黄花梨木圆后背交椅
E374D51E-4C9D-431C-98B5-3EE3465A3F0F_1_201_a
黄花梨木霸王枨条椅
29C114B0-7C39-4ED7-930C-2ACE58A04044_1_201_a
家具搭配展出

家具平淡无奇,如果陈梦家一生也能如此就好了。

陈梦家其人

了解到陈梦家,也是靠《甲骨文》一书,陈作为主线人物贯穿全书。

《甲骨文》借殷墟考古为背景,何伟带着他对陈梦家身世的疑问,展开叙事。

他找到了当年参加殷墟挖掘的考古学家石璋如,写下《一滴泪》的巫宁坤,上博原馆长马承源,百岁老人周有光,妻子赵萝蕤胞弟赵景心,举报者李学勤……

朋友,同事,亲戚,家人,政敌应有尽有。

或许只有通过这些人,他才能搞明白,这样一位学术泰斗的曲折一生。

陈梦家考古出身,是中国研究甲骨文的重要人物。其妻子赵萝蕤北大才女,曾翻译过惠特曼的《草叶集》。

钱穆晚年《师友杂忆》曾言:

有同事陈梦家,先以新文学名。余在北平燕大兼课,梦家亦来选课,遂好上古先秦史,又治龟甲文。其夫人乃燕大有名校花,追逐有人,而独赏梦家长衫落拓有中国文学家气味,遂赋归与。”

来北京后去了趟国博,国博一楼有甲骨文展,按照它的说法,中国甲骨文研究涌现过两次大的思潮,分别有两批代表人物。

第一批甲骨文奠基人以罗振玉、王国维、郭沫若、董作宾为代表,今人谓之「甲骨四堂」。

7A740D37-220E-4226-89C6-398AEF0BE110_1_105_c
甲骨四堂

第二批奠基人,今人谓之「甲骨五老」,陈梦家就在其中。

6FF90F29-3A2E-4965-879B-C6732CFF3D86_1_201_a
甲骨五老

从照片上可以看到,陈梦家最年轻,仍能看出青年时的飒爽。

遗憾的是,这样的国宝级知识分子未得善终。

1955年,百花齐放后的一年,肃反开始,陈被自己的助手举报有经济问题,贪污公款。两年后又被打成右派,定性为“章罗联盟”,紧接着十年浩劫,陈不堪受辱,于1966年自缢身亡。

「我不能再让别人当猴子耍。」

陈不仅学问上难有匹及者,而且才情、性情浪漫,陈是新月派诗人,师从闻一多,不好拉帮结派。

陈在写下甲骨学巨著《殷虚卜辞综述》后,拿了巨额稿费,在美术馆附近的钱粮胡同买了房产,这就糟了人嫉妒,各种举报纷至沓来。

李学勤当时作为他的助手,也是举报的一员。

除了政治上的诬陷,李学勤还对陈的《殷虚卜辞综述》做了学术上的贬低。

史学家杨宽反问:

为什么在政治上对他进行陷害的同时,还要贬低他的学术著作的价值呢?事实上,(《殷虚卜辞综述》)学术著作的价值是有目共睹的,历史将作出公正的评价。

李学勤后来解释说当时自己受了考古研究所的压力,必须要写这种东西。

加害者与受害者,前者总是让人难以同情与理解。

最后,就像太平湖的陈年水墨,陈带着古典知识分子的体面与讲究离开了,享年55岁。

赵景心,强拆之下

其实,上博家具馆前言写到的「上博2000年斥巨资征集了陈夫妇的家具」并不准确,也有误导之嫌。

陈1966年离世,妻子赵萝蕤1988年离世,2000年卖给上博的其实是赵萝蕤的弟弟赵景心。

陈生前也曾要求将收藏捐给上海博物馆,不过赵景心夫妇后来将其26件家具以1000万元人民币转让给了上博。

赵景心晚年也并不顺达,他在北京的四合院岁数「比美国还老」,当时面临强拆威胁。

不过,两次诉讼,赵景心均已失败告终,包括当时的文艺界也向社会呼吁,保护文化名人赵紫宸及其女赵萝蕤的故居,老舍之子舒乙也曾为其发声,但仍未抵挡得住挖掘机的铁铲。

2000年,这座明末清初的小院,就此拆除。在这儿的东厢房,赵萝蕤完成了惠特曼的《草叶集》和艾略特的《荒原》翻译。也是这一年,赵景心决定将陈梦家家具卖给上博。

北京市美术馆后街22号院现为中医医院

何伟其人

在杨显惠和章诒和笔下,这样的悲情故事并不少见。

人在接受这些故事时更多是一种无力感,不是对受害者境遇的无力,而是对自己想象力的无力。

但这类故事看多了之后,也会逐渐麻木。血淋淋的现实虽然可怕,但禁不起反复冲刷。

不过,作为「中国三部曲」的最后一部——《甲骨文》还是能于麻木之中刺痛读者,除了苦难叙事之外,还多了一层追问——一种不习以为常的追问。

近年,上海译文引入不少优秀外国作家写中国的书,他们旅居中国,记录所看、所行、所感,有的幽默,有的落寞。

比如《东北游记》里的迈克尔,中国人对他好奇,为此,他只好每次都条件反射地主动打招呼:

美国人,属鼠,身高一米八六。

上海《长乐路》,几代人命运的曲折交错,读完故地重游,倒是能找到一些凄凉。

B84CD5C9-CF3E-4259-9E4D-2373488BE876_1_105_c
《长乐路》中的锦乐花店

很多人觉得,外国人写中国写的好,是因为其特殊的外来视角,譬如王路谈天赋的一篇文章认为:

如果让他和美国作家比写美国题材的作品,他未必能胜出;如果让他和中国小城居民比对中国小城的了解,他也不能胜出;但如果用英语,以美国人的视角写中国小城,他就胜出了:一般美国作家写不了,中国小城居民也写不了。那这样的作品,非得由他来写不可。

何伟首先是个文化人,其次是个西方人。他确实具备这样一种「外来视角」来看中国,从而发现,对比,呈现。

但这样的归因会不会太简单?照这么说,我们写美国,巴西是不是也有特殊视角,更能鞭辟入里?

其实,优秀的文学作品,关键还是在于能否打动人心。

巴金在《随想录》提到:

我认为打动人心的还是作品中所反应的生活和主人公的命运。

从涪陵纪事,寻迹长城,到甲骨文,何伟对中国的了解越来越充分,足以支撑他对陈梦家宿命的追问。终曲《甲骨文》借助多线叙事,看似零散,实则以点带线,串线成珠,从陈梦家的朋友、亲人、敌人多角度还原出一个立体人物。

对于一个已经对那段苦难熟悉到麻木的人来说,如果一个作者还是能通过类似的题材打动你,这说明作者具备很强的历史还原能力, 以及对主人公悲欢的深刻见解。

除了外来视角,还有什么?

我不相信一个人如果只是具备「外人视角」,就可以讲好异国故事。中国三部曲背后一定有其他更值得探究的成因。

先来看看何伟本人好了,普林斯顿大学英文系出身,后来又在牛津大学研习英国语文与文学。正统科班出身保证了写作专业性。

其次是良好的家庭教育。何伟的父亲是社会学家,他从小就跟随父亲学会了一套社会学研究方法:「要会采访,会讲故事,对什么人都感兴趣,才能和人打成一片,当一个好的观察家。」

何伟有很强的主动和人交流的能力,尤其是知道如何不让别人误会自己的诚意。在《寻路中国》中,体现最为明显。包括他和三岔村民魏子淇,企业家,租车公司老板的交流都能看出。

何伟敏锐的观察力,同时可以帮助他洞悉周遭的某种奇特运行机制:

在中国生活中很多事情都要打制度的擦边球。其中最基本的真理就是,事后原谅比事前许可要简单得多。

这种敏锐的观察力其实还受到了父亲的老师——牛康民影响。

60年代,何伟父亲在匹兹堡攻读社会学博士学位,当时有一位老师叫 peter new (牛康民),何伟自述,其英文名彼得·海斯勒正是源自这位老师。

image-20191226232511698
牛康民和何伟

何伟回忆,这位父亲的老师嗓门洪亮,很喜欢讲故事,爱说话,爱观察。

值得一提的是,从牛康民身上,我们还可以一窥当时中国变革下的动荡起伏。

牛康民的爷爷牛尚周,1872年作为清政府第一批官派留美幼童赴美国留学,后就读于麻省理工学院,1880年回国。1886年(光绪十二年)牛尚周撮合妻妹倪桂珍与当时被派往中国传教的宋嘉澍,并由此成为了宋嘉澍的连襟。

“牛尚周”的图片搜索结果
最右为牛尚周

而宋嘉澍正是民国著名的宋氏家族家祖,子女有宋霭龄、宋庆龄、宋子文、宋美龄、宋子良、宋子安。

牛康民的父亲牛惠民,1928年,牛惠民与兄弟牛惠霖一同创办上海骨科医院,成为中国最早的骨科医院。

image-20191226233558202
中间为牛惠民

上海骨科医院原址为岳阳路190号霖生医院。

878C7053-5624-4B8E-AD6A-0AEB1252FF70_1_105_c
霖生医院旧址

何伟坦言,自己从牛康民身上得到的中国认知是模糊,间接的,更重要的是其沿袭下来的社会学观察本领。

良好的家庭教育,科班的写作训练,自由的思想,洞悉的观察,以及对未知事物的好奇心,推动着他落笔于巨大变革下的细微变化,他的书里,不是巨头公司,也不是帝王将相,而是他的学生们、农民魏子淇、考古学家陈梦家。

至于外来视角,有多重要?本土视角难道不能更好地叙述?

还是说当我们仰望高手时,已经忘了自己的崇拜之情是出于认可与欣赏,还是对自己视角僵硬,思维局限所产生的懒惰,骄傲而找的借口。

这几个学术写作工具,或许可以帮你赢得审稿人青睐

作者 王隐
2019年12月17日 19:07

一篇优秀的英文 EI / SCI 论文,除了要有新颖的创新点和严密的实验方法外,或许还有一些细节需要我们关注。

你着手写一篇论文,看到各出版社不同的排版要求,该如何下手? Word?Markdown?抑或是更专业的 Latex?

无论你是理工还是文、商科,一篇论文如果只是文字,未免有些枯燥,不如做个能让人眼前一亮的配图来呈现你的实验数据与结果。

在这个仍以英文为学术主流书写语言的时代,如何保证你的论文语法通顺、词句无纰漏?要知道,拙劣的语法与词汇可是期刊拒稿的很大原因。

层层细节到最后,都会决定你的论文能否打动审稿编辑。所以,除了要关注实验本身,科研人或许还要顺手点亮些技能,这样才不会因小失大,白白付出苦熬实验室时的时间与精力。

幸运的是,随着学术写作工具的不断涌现,这些技能的学习门槛越来越低,各位科研勇士大可把更多精力放在研究的要点和实验结果上。

本文会在论文排版、制图、英文润色三部分介绍相应工具及技巧,下面就开始我们的学术写作速成之旅。

排版:脉络与格式

首先,我们来聊聊排版。

大部分学术期刊都要求作者提交一个已按期刊要求格式排好版的 PDF 文件,很多人第一个想到的就是用 Word 来排版。

虽然 Word 是一个比较成熟的排版工具,界面与功能还算完整清晰,但排版后的结果仍有很大的不确定性。

这种不确定性可能来源于不同的软件版本与操作系统,但最大的不确定性还是来自于作者的 Word 使用技巧。

一篇惊世之作万事俱备,急于与审稿人碰撞出科学火花,竟然被鸡飞蛋打的格式困住了,连编辑这关都过不去,想必每个人都不希望看到。那么,有没有一种办法可以快速按照期刊要求的格式进行排版呢?

可能很多人已经注意到了,一些期刊提供了基于 Latex 的模版包,供读者用以排版。Latex 是在 Tex 语言基础上的一种排版系统。和我们所熟知的 Markdown 一样,Tex 也是一种标记语言。与之不同的是,Tex 的语法稍显复杂,可以支持更多复杂格式。

使用基于 Latex 的排版工具,在模版包的帮助下,不但输入数字公式时更加简便,而且不用挨个调整参考文献的格式,以至于短时间就能生成一篇格式规整,排版精美的论文,作者的内容可以精准而迅速地表现在这个 PDF 文档中。

我们在这里以电气电子工程师学会(IEEE)旗下的期刊为例,假装一把学术大佬,下载 Transaction(IEEE 旗下比较有影响力的期刊系列) 的模版:

模版

可以看到,模版下载下来是一个压缩文件。

img
Transaction 系列期刊的 Latex 压缩包

模版下好后,我们就需要一个排版工具,这里最推荐的是云端工具 Overleaf,它可以即时保存,云端备份,历史记录可追溯,多平台等,跑在浏览器中的 Overleaf 最大的优点就是无需安装软件,解放硬盘。

并且,它还支持 Google 、推特、IEEE 等多账号登录。

img
Overleaf 登录页面

现在,我们注册完并登录 Overleaf ,就可以开始我们的排版了。

首先,我们先新建一个项目,将刚才下载的模版压缩包导入进来,Overleaf 可以帮你自动解压。

img
Overleaf 新建项目

这里可以看到,Overleaf 还支持 GitHub 导入,同时还自带了很多模版:journal、book、letter等。

导入之后,Overleaf 会自动进入项目,可以看到,模版压缩包中有多个 .tex 文件,代表包含了几种模版,我们选择期刊模版对应的 .tex文件(bare_jrnl.tex)。然后点击右边布局上方的 Compile 按钮(有时会是 Recompile),可以看到该模版渲染后的初始样式。

img
模版渲染效果

Overleaf 在页面布局也较为常规,最左列为文件结构,中间修改,最右预览。

可以看到,模版中,基本的结构已经划分好了,我们所要做的,就是要在 .tex 文件中把自己的内容填进去,模版中已经给了非常明确的提示。

img
模版结构

除了源文件之外,这个工具还提供了富文本预览(类似于代码高亮)的贴心功能,还有一些格式快捷键可供选择,如加粗、插入数字公式、有序/无序列表等。

img
富文本预览效果

当然,我们输入的文本需要遵循 Tex 语法规则,以下是一些常用格式及规则。

空格{} 或 \
字体大小\tiny{}, \scriptsize{}, \footnotesize{}, \small{}, \normalsize{}, \large{}, \Large{}, \LARGE{}, \huge{}, \Huge{}
斜体\emph{} 或 \sl{}
一些需要转义的字符%->\%,_ -> _,# -> #,& -> &,{ -> {,} -> }
行内公式​$…$
换行\

一篇论文除了文字,还包括图片、表格、无序列表、伪代码和参考文献等等,使用 Latex 都能快速并优雅生成。

上传图片的方式也较为常规:

img
上传图片

上传好我们的图表之后,我们在 documentclass\begin{document} 之间通过命令\usepackage{graphicx} 添加图片的包。

然后在正文处(此处以引言为例)添加一段插入图片的指令,包含图片宽度,文件名称、图片标签名称和注解信息,然后点击编译,图片就出现在右侧 PDF 的预览中。

如想在文中提到该图片,需使用 \ref{图片标签} 进行绑定,Latex 会自动生成该图片对应的编号。

img
插入图片的效果

对于独立行并编号的公式,则可以放置在\begin{equation}\end{equation} 之间,同样通过 \ref{label}引用。Overleaf 网站中也提供了一些 关于数学公式的教程,可以参考相关语法。

img
插入公式的效果

类似地,一个简易的三线表的格式如下所示:

img
插入表格的效果

以上,论文中的一些常见要素基本就已经介绍过了。

但还有一个令 Word 选手最为棘手的环节,就是参考文献

在基于 Latex 的排版系统中,参考文献主要放在以 bib 后缀的文件中,但是内容是怎样的呢?我们以 artificial intelligence 为关键词在 Google 学术中查询一篇文献为例,假设我们相中了这篇发表于 Nature Medicine 上的论文,点击引用后选择 BibTex:

img
引用一篇文章

然后,我们新建一个bib文件,再上面网页跳转后生成的内容粘贴进来。

img
新建 bib 文件

红框中的内容是该文献的引用标签,在文中需要引用的地方输入 \cite{标签} 就可以完成引用。由于标签代表了该参考文献,因此 bib 文件中的内容无需有序,且会按照期刊的规范自动编号。

img
插入参考文献效果

通过以上几步,一篇格式规整,排版精美的论文 PDF 就顺利生成了,不仅节省了时间精力,还可以轻松查询论文修改的所有记录。

img
论文修改记录查询

Windows 平台和 Mac OS 平台也有相应的 Latex 排版软件,比较有代表性的是 Windows 平台的 TeXstudio 和 Mac OS 平台的 MacTex,使用方法与在线平台 Overleaf 别无二致,不再赘述,下图为 TeXstudio 的使用界面:

img
TeXstudio 界面

好的排版工具自然也是顺手的写作工具,它们可以帮我们缕清脉络,同时也能帮我们更专注在要写的内容而不是格式上。

绘图:灵魂与亮点

如果说思路脉络是论文的骨骼,那么图表就是论文的灵魂。

数据可视化图表:Echart

img
论文中的图表

论文,就是将你所做实验进行阐述、记录、归纳的一次书面沉淀。所以,典型的理工科论文必然会有大量的实验数据,这个时候,可视化图表就派上了用场。

论文中的图表不仅要表意清晰,还要注重美观。学术写作常使用一些编程语言完成绘图功能,如 Python,Matlab 等,但这些工具对于非 Computer science 的科研人来说,会有一定的上手难度。而且这些编程工具绘图的用户体验也不能算好,不能满足「所改即所得」的实时性要求,更达不到对比的连贯性。

这里推荐百度出品的第三方可视化 javascript 库 Echarts

在 Echart 网页上,我们可以使用自带的官方模版快速生成图表,支持各种精细配置,简单易用。官方实例不仅给出了折线图、条形图、饼图、散点图等等基础图表,还提供了盒须图、热力图、平行坐标系图等较为新颖的图表模版,基本可以囊括论文对于结果数据展示的需要。

img
Echarts 提供的丰富图表

点击任意一个模版,左边是用户修改的区域,主要内容是 json 格式的图表的配置项,右边是根据用户修改实时显示的图表预览。右下角提供了三种默认的配色方案,由于不提供云端保存功能,因此在切换配色方案之前需要事先保存左边的内容。

图表生成之后,我们如何得到这个图片呢?我们对其左边配置项进行简单的修改,然后在 toolbox 配置项中添加可以保存图片的功能。点击右上角的下载按钮图片就会以 png 的格式保存:

img
使用 Echarts 生成图表

如果不喜欢官方提供的配色,还可以在配置项里进行详细的设置,配置项在文档中有详细说明。

img
Echarts 配置项文档

虽然,Echart 需要一定程度的前端基础,但不深。之所以推荐 Echart 也是因为它提供了比较完整的官方案例,就算没有多少前端知识,对着左边配置项改改参数折腾折腾也可以得到不错的图表效果。

当然,如果实在对编程特别抵触,tableau 也是一个不错的选择,上手难度不高,基本不用改参数,直接根据 Excel 表拖拽相应行列就行了,可以参考之前的 一篇文章

流程图/思维导图:ProcessOn

img
论文中的流程图

除了图表之外,论文中还会出现一些描绘结构和流程的示意图,此类图表可以更好地呈现实验方法的先后步骤。

在这里,推荐一个在线作图工具 ProcessOn ,支持流程图,思维导图,结构图,UML 图等等多种示意图,使用方法也非常简单,按照相应提示,尝试几次即可上手。

img
ProcessOn 的操作步骤

复杂示意图:sketch

img
论文中的结构示意图

在论文中,还经常会绘制一些不仅能体现步骤,还能表现数据特征,元素结构的示意图。

上图是描述两种神经网络结构及训练过程的示意图,从图中不仅可以看出方法执行的步骤,其中数据的组织方式以及网络的具体结构也一目了然。这样的图比流程图的结构更加复杂,元素的形态也多种多样,我们使用的是 Mac OS 平台下的设计绘图软件 Sketch。

Sketch 是一款矢量图绘制软件,具有和 PPT 相似的形状导入功能,并附有参考线,上手简单,以下是一个简单的例子:

img
Sketch 简易使用示意

可以看到,一些规则图形都能够通过简单的拖拽得到,修改填充和边框颜色以及长宽位置等属性也可以非常容易地进行修改。

图表作为文字与数据的抽象表达,可以更直观地向读者传达出你的观点,选择易上手的工具与合适的图表之后,还要注重美观、简洁,这样可以让你的论文更有亮点。

英语润色:保险

作为非英语母语的作者,英语近乎是最令人头痛的部分。令人惭愧的是,暂且不论流畅地道的表达,单是拼写语法,就能够牵扯我们很大一部分精力。有时圆睁双眼看上一整天,都不能发现其中若干的拼写语法错误,这时候我们就需要一个智能工具来帮我们查找并改正这些错误,在这里推荐一个英语润色工具 Grammarly,使用方式非常简单粗暴:

img
Grammarly 界面

并且它的插件可以集成在文本框内,在使用其他在线文本工具时,也可以方便地使用它的润色服务:

img
集成在文本输入框中的 Grammarly 插件

如果更正拼写及语法错误的简单功能不能满足你对于润色的需要,还可以使用人工润色,当然是需要加入会员并支付一定的费用:

img
人工润色入口

结语

一篇学术论文,操作周期上大概要 1 到 3 个月,这也决定了它和其他写作形式的不同之处:周期长、琐碎、强度高。

我们在写学术论文时,相比于前文提到的诸多细节,还应把更多精力聚焦在实验的思路,方法上,只不过是有些时候,众多琐碎总是会牵扯我们的时间与精力,而无法集中在将「实验完整还原在书面上」这一最基本的任务上。

也就是说,工具只能起到部分去除干扰的作用,论文能否在心水的期刊上发表,还要取决于实验本身以及你的呈现方式上。

至于科研捷径,应该是没有的。

如果说真有什么窍门,周末投论文好像不是好主意,周二周三倒是不错。

感谢 Dr. Li 对本文的大力支持,本文首发少数派,同步 WEB VIEW,未经许可,不得转载。

信息的通货膨胀

作者 王隐
2019年6月9日 12:54

奥威尔谈到小说衰退的原因在于:

小说因为受到大肆吹捧反而丧失了存在。你问任何一个有思想的人,为什么他「从来不看小说」,你往往会发现,归根到底,那是因为腰封评论家写的那种令人恶心的陈词滥调。

甲写了一本书由乙出版,再由丙在丁周刊上写了一篇评论。如果评价不好,乙就会抽回广告,因此丙就不得不吹捧「令人不能忘怀的杰作」,否则就要丢饭碗。

所以,腰封评论家大多不能说真话,如果不是付钱要他写评论,他一句也不会写,而且几乎毫无意外,他能写的唯一真话将是:此书引不起我任何感想。但是,会有人出钱要你写这种东西吗,显然不会。

腰封评论家必须为一本对他毫无意义的书炮制大约三百字的文章,通常,他先把故事情节做一番简述(这无意中向读者泄漏了他根本没有读过此书),然后再说几句捧场的话。

一个扣人心弦的激情故事,一部震撼心灵的精彩杰作,一部令人不能忘怀的史诗,足可以与语言本身长存不衰。

尽管都是赞美之词,却如妓女的笑容一样没有价值。评论家不得不在一台没有尽头的形容词阶梯上不断往上爬。

遗憾的是,小说评论的「升级」现象,如今越来越常见,甚至入侵信息领域,标题作为一条信息最直观,最高度的概括,首当其冲受到侵蚀。

通货膨胀与信息之海

从货币角度来看,标题党的本质在于语言文字的通货膨胀。原来1块钱能买的东西,现在要花10块才能买到。人们接受语言描述的阈值在提升,而语言描述事物的能力在衰退,同时又没有更精准、更有力的词被造出来,所以,我们词用的越来越大,也越来越不值钱。

这种语言的通货膨胀绝对不是中文所独有,全世界最流行的英语,贬值率更高。

Great 取代 Good,Wonderful 取代 Great,Incredible 取代 Wonderful,Awesome 也随处可见。

英语评价体系的贬值或许和西方人的「客气」离不开关系,你做完一件事,他说你 Good,其实可能只是 Just so so 的级别,但是他们觉得需要客气一下,自然 Good 原有描述精度就下滑了,从而拉着比它更大的形容词下滑。

语言有通货膨胀,按理说也有通货紧缩,不过这种紧缩更多以一种谨慎或不愿意让人轻易发现的意愿传播,比如在给某产品的软文中,好的地方自然可以大书特书,不好的地方只好一笔带过,说某某功能实现较可,很有可能潜台词是交代读者这里不能说太细,建议读者从通货紧缩角度来理解,即一般等同于较差的意思。

当然了,无论中文还是西方语境,语言的通货膨胀绝对不是因为「客气」这么简单,而在于腰封评论家对一般作品的较高评价,提升了底层作品的评价基准,同时也提升了所有作品的评价基准。

他们为何要对底层作品较高评价,原因在于写小说的门槛在降低,从事小说行业的人在增多,为逐利而作的小说也越来越多,但这些产业化、标品化的小说并不具备可变现的上乘质量,所以只好找各类吹鼓手做腰封评论,确保销量,不至于回炉重造,印好的书压成纸浆。

在当下互联网的信息流动中,这种现象更为明显。

我们现在每天接触到的信息大概要比古人几月甚至几年接触到的信息还要多。这得益于互联网基础设施的完善,信息的硬件池子得以越做越大,里面能装的信息也越来越多,它也早已从信息之池泛滥成信息之海,再随着技术进步带来的信息高速流动,这片信息之海更加波涛汹涌。

信息货币化

除了高容量、高流动之外,信息之海的另一特点就是信息「货币化」。人们发现,为他人提供资讯、角度、观点可以获得收益。按理说,你为他人提供信息增量,扩展他人的某些未知,获得收益无可厚非。

但正如大多腰封评论家的谄媚不是出于本意,而是满足行业其他环节的下放要求。发现信息可以挣钱的人越来越多,人们开始争先恐后的涌入信息海洋,每天生产大量的信息,寻找挣钱机会。

从供需关系来看,供给方大量涌入,如果没有匹配足够的需求方,很容易造成供需失衡。人有限,精力有限,而信息无限。这样一来,信息之海就成了需方市场。

过载的信息总要找到足够多的宿主,才能成为他们向广告主耀武扬威的资本,这样一来,信息提供方之间必然有一场恶战。遗憾的是,这场恶战并未以「质量战」为前提开打。

信息时代,时不我待,但如果是一个后信息时代,信息到处过载,从稀缺性角度来看,大多数信息则不再值钱,对于信息需求方来说,自然不会将大部分信息当成重要决策的关键参考,他们会信任更稳妥的信息渠道,比如朋友,家人,接触到的行业中人,或者新闻联播。

剩下的信息对他们来说,就没那么重要,更多是消遣价值。信息提供方确实可以将精力放在提升信息质量上,但是值不值得做,就是一个成本问题。如果只是消遣性的信息,更具性价比的方式则是将人们的注意力吸引过来。猎奇、劲爆、绝密、罕有,这些词汇自然占领了信息传播的高地。

当然也不必悲观,任何时代都会有高追求的信息提供者,他们不盲目追求瞳孔,而回归质量。但这也不代表他们要优于标题党,而仅仅是个概率问题。

瞳孔陷阱与感官馒头

可事已至此,想打质量战的信息提供者,也未免要落入瞳孔陷阱。一个恶意竞争的环境,大部分人在追求如何吸引人注意力,身处其中的任意个体都无法逆这样大的趋势。一个馒头卖5元的时代,你再没办法用1元买到。

不仅是信息提供方,信息接受方也深受其害,他们就像药物成瘾者一样,对于过量用药已经无法自拔。他们不关心馒头是卖1元还是5元,而是馒头越大越好。

馒头越做越大,到最后你已经说不清是做馒头的人刻意为之,还是吃馒头的人胃口在变大。

不过可以肯定的是,长时间,高频次地接受感官馒头肯定有害,这种不可逆的损害体现在自己很难再接受低刺激的信息。

但高质量的信息往往不会有过多刺激环节,因为信息的第一要义是从交换不同层级认知出发,信息本身没有传播上的义务。高刺激信息(比如标题党)大多是对人们预期的欺骗,作为信息头阵的标题往往可以拟的很大,它们或是造谣生事,或是断章取义,放大局部事实,抱着写到就是赚到的心理得过且过,这本质上是对信息传播的滥用。

关掉水龙头

正如新闻在这个时代的衰亡一样,我们从互联网接触到的新闻其实早已失去了原先新闻的某些特质,退化为「资讯」,而仅仅保留新闻「新」的概念。

如果从这一角度来说,看新闻就显得没什么价值,并且浪费时间。因为现在信息传递的方式从以前人们主动获取变成了被动获取,「推送」一词很好地描述了这层关系。所以,我们其实并不需要担心错过某些要闻,因为就算你逃过了各种资讯提供者的推送,你身边的朋友也会通过社交媒体表达他们对某要闻的看法,从而让你间接知道某要闻的发生。所以,漏看新闻在这个时代已经不存在了。我们真正应该考量的是,如何关闭尽可能多的信息水龙头,来筛选真正有价值的信息。

5G开始兴旺,各种畅想应运而生,但值得注意的是,无论4G还是3G,对于普通人来说,最明显的还是对信息传递上的感知:从图文、音频到视频,网速越来愉快,资费越来越低,信息生产与传播的门槛逐年降低。但信息作为「互通有无」层面的意义也逐渐被消解,而更多基于泛娱乐化,信息逐渐成为打发无聊时间的下等工具。

可控核聚变或许短期不会实现,但可以预见的是,科技的进步一定会催生更多信息梭麻的流行与占位。

谈写作动机

作者 王隐
2019年5月12日 14:28

写作者首先要问自己的问题是:我为什么写作?

在《我为什么写作》书中,乔治·奥威尔列举了他的四大写作动机:

  1. 自我中心。为大家谈论,死后留名,向那些在你童年的时候冷落你的大人出口气。
  2. 审美方面的热情。欣赏外部世界的美,或者,在另一方面,欣赏词语和它们正确组合的美。享受一个声音的冲击力或者它对另一个声音的冲击力,享受一篇好文章的铿锵有力或者一个好故事的节奏明确。希望分享一种你觉得是有价值的和不应该错过的经验。
  3. 历史方面的冲动。希望看到事物的如实面貌,找出真正的事实把它们存起来供后代使用。
  4. 政治方面的目的——这里所用「政治」一词是指它的最大程度的泛义而言。希望把世界推往一定的方向,改变别人对他们要努力争取的到底是哪一种社会的想法。

可以看出,奥威尔的动机1和动机2都是满足自己的需求,而动机3和动机4则是通过写作满足他对世界的某种期望。

回答完为什么写作之后,自然要回答下一个递进问题:我为谁写作?

对于奥威尔来说,愉悦、审美是为自己而写;记录、推进则是为他人而作。

为自己写作其实是一件自我满足的事,博客也好,公众号也好,都承载着自己记录、吐槽、倾诉的目的。

史蒂芬金认为:

写作不是人生,但我认为它有时候是一条重回人生的路径。

在他看来,写作是一种坚持信念的行动,是对绝望的挑衅和反抗。

为自己写作固然是好的,但对于有进取心的写作者来说,仅仅将读者局限于自己,很容易用力不足。

1. 缺少评价标准

写作者如果缺少读者反馈,首先很容易落到无法「碰撞」的局面中。

人的进步需要碰撞来获得反馈,就像小球在做布朗运动,有时你很强,你会碰赢别人,有时你很弱,你会被碰翻在地,但这无妨,知道缺点继续改进,改日再战即可。

但无论怎样,一个静止不动的小球永远不会知道自己的软硬,因为它一开始就放弃了「碰撞」这种最基本、直接的评判标准。

写文章也是一样,一篇文章发出来,你觉得很满意,但很多时候这种满意是「完成」式的满意,你写完了它,你有成就感,但这种成就感不一定代表文章的质量,也不一定代表文字满足逻辑自洽且有很高的讨论价值。

所以,如果你的写作只是为了给自己看,这从最开始就失去了一种最原始的互动与评价体系。

当然,你或许会担扰文章分发所带来的不良后果,比如不理性的讨论,阴阳怪气的嘲讽,断章取义的曲解都会让你感到难过。

但这就是一种既定事实,一种一定会出现的概率问题。

巴特在《作者之死》中谈到:

作品在完成之际,作者就已经死亡,剩下的文化创发工作,就是读者的权利了。唯有作者死亡,读者才能诞生,所有阅读活动,都是读者心灵与一个写定的「文本」的对话,价值就在这个过程中被创造出来。

文本使作者意图成为读者阐释的当下话语,文本不再是属于作者的作品而成为属于读者的文本。

敌意总是难以避免,但写作者不能因为害怕就拒绝碰撞,因为只有人看你的文章,才会指出你的问题,才会告诉你怎么改,如果你没有一个耐心的编辑朋友来帮你把关,那我还是建议你把文章发放到垂直社区,做同行互审。

比如你写c语言的内容就放到c语言的网站,这样可以保证看你文章的人,最起码了解你所写的内容,他们有资格评判你文章的质量。

你也需要将文章尽量分发在读者知识储备并不弱于你的平台。

当然,能否友善讨论也是一个问题,如果对方谈的问题你确实存在,只是语气不好,你可能也要接受。对于恶意的评论者,你也不要过于关心,你唯一需要关注的就是他们所批评的事实是否真的成立。

2. 缺少压力

写给自己看,除了缺少必要的评价体系之外,第二个问题就是容易没有压力,这个问题源于作者自身。

缺乏评价体系,自己也无所谓写的怎样,这种无所谓会让你感到轻松,写作应该有压力,但压力不是动力,而是监督力,这种监督力会让你提心吊胆,不敢应付。比如你想让别人给你做同行互审,你首先要做的是尊重你的同行,也就是你的文章不能出现逻辑性的错误,引用的数据要准确,不能含糊,这样可以把一个态度先摆出来,至少文章是用心写的,你的谦卑也会影响到同行对你评判的语气上。

文章写一遍就发出来是远远不够的,你需要反复修改,反复求证,这样才不会被别人轻松地找到漏洞。

没有压力还容易放弃,反正是写给自己看的,如果现在不想写了,也没有什么关系。

3. 缺少价值

最后一点,也是最想谈的一点,无论是文字、播客(声音)、vlog(视频),我们每天能看到的内容其实不少,但有价值的不多。

什么是有价值的内容?是文字的巧妙组合?还是音视频的精致剪辑还是内容本身的实用性?

我认为只要你的输出不完全属于「日记」范畴,就有价值,只不过价值有大有小。

什么是「日记」范畴,比如我看一个vlog,半个小时看主播吃一个鸡腿,这样的视频对主播来说或许是一种记录,但对我来说显然意义不大,这并不是视频本身的质量问题,而是这些内容没有达到我的预期,我希望的是,消费的内容最好有一定的信息增量,或是有新鲜的观点或角度,或是能带来某种愉悦与放松

最怕的是什么,最怕的是文字没有参考性,没有增量,读者读完很后悔,因为你的文字只是你自己的事情,与我无关,我不关心,你没办法让我共情,你的这次文字登场就是失败的。

那什么样的文字有价值?

从当下互联网环境来看,我们或许缺少一些文以载道的文字。

我们很多时候非常抵触被教育,被教做人,但很多时候,我们并不抵触真理,抵触的只是那些你看不惯,与你价值体系不符的刻板说教。

「我当然会做人,只是不想像你那样做人」。

今天看来,中文互联网文以载道的文字并不多,对当下社会抱有期望的写作者应该通过写作来占领舆论高地,如果你本有这个能力,有这个机会,你不站上去,就会有其他怪鸟站上去,然后聚集更多的怪鸟,我们的网络讨论环境就会变得越来越糟糕。

当然,你深思熟虑写出来的文字,不见得一定会让整个讨论空间更加良性,只是你的缜密逻辑会影响到将要发言、站队的人,从而影响他们的发言方式,讨论公共事务的方式,就像下雨天开雾灯是给来车看一个道理。

总之,一个有追求的写作者,最好不要仅仅停留在「写给自己看的」上,希望你在保证写作质量的前提下,尽量多的去找反馈,这样才能坚持下去,并能不断改进,甚至获得一些物质收入,反哺你的写作,从而更坚定自己的写作决心,多从舆论高地上赶点怪鸟下去。

毕竟奥威尔也是这么想的:

我所以写一本书,是因为我有一个谎言要揭露,我有一个事实要引起大家的注意,我最先关心的事就是要有一个让大家来听我说话的机会。

爬取2000篇少数派文章,这是一份可视化踹门教程

作者 王隐
2019年4月26日 17:18

KEY POINT:

  • 少数派 Matrix 精选2000篇文章
  • 677位作者
  • 110K 点赞,45K 评论
  • 时间跨度780天(2017.3.27 —— 2019.4.23)
  • 从数据角度分析:如何写一篇受欢迎的文章?
  • 无需任何编程基础
  • 教程全文9K 字,配图70+,前四章主讲实战工具用法,五六章为可视化的一些方法论

零、数据可视化效果预览:

点赞评论双轴图
单篇文章点赞数集中在0到50
实操教程类文章最受欢迎
理财类作者也谈钱最受欢迎

一、前言

这不是入门,而是踹门教程,要的就是立竿见影的上手速度。

我们处在一个高度信息化的时代, 时刻都会在互联网上留下大量的访问痕迹——数据,小到日常的消费账单,大到一笔一笔的银行流水。

这些留下来的海量数据无疑是对现实世界的简化和抽象表达,但对于大部分人来说,它们只是 Excel 里面的行行列列,不仅可读性差,而且晦涩难懂。

如何提高数据的可读性,很大程度上取决于你看数据的方式,解读数据的方式。

比如,我们可以将抽象的数据再抽象,经过二次抽象的数据变成了图表,反而可读性更高,更利于人们理解。

提到数据可视化,Python、R、D3 甚至是 Excel,能够产生美妙图表的工具数不胜数,但它们大多都有一些技术门槛,要求你至少有一些编程基础,这对于非科班出身的人来说,并不友好。

所以,我希望能减少对技术的依赖,去寻找一些优秀工具,同样能获得不错的可视化效果。

本文需要用到的工具分别如下:

  • 数据收集工具 Chrome 插件:Web Scraper
  • 数据简单清洗工具:Excel
  • 数据可视化工具:Tableau

正文开始。

数据可视化,正如提到的三个工具,它们也代表了可视化的三个阶段,收集、清洗、可视化。就像记者需要提前掌握大量信息,才能更好地接近自己的采访对象一样,数据可视化中比较繁琐的步骤也正是前期的数据收集和清洗工作,由于工具的辅助,可视化反倒不难。

可视化始于数据,有现成的数据最好,但大多时候需要我们自己动手收集,比如文章开头的 Matrix 文章数据。

举个例子,我们现在想对少数派 Matrix 文章进行一个简单的数据分析,观察少数派网页后发现,可以采集到以下数据:

  • 文章标题
  • 文章作者
  • 点赞数
  • 评论数
  • 发布时间

如果我们将数据粗略分为数字和非数字两种,点赞数、评论数以数字(度量)的形式出现,而标题,作者则可以看成非数字(维度),发布时间也是一种非数字(维度)。

我们暂且先对要采集的数据有一个简单的认识,后面用 Tableau 可视化时还用得着。

二、数据采集:Web Scraper

拿到数据是我们的第一步。

我们打开少数派 Matrix 网站首页:

图中红框部分就是我们需要采集的数据。

2.1 Web Scraper 使用流程

2.1.1 下载 Chrome 插件 Web Scraper:

2.1.2 然后打开浏览器的检查模式,或者快捷键 com+opt+i 打开操作台,点击 Web Scraper,并创建新的 sitemap

2.1.3 Sitemap name 起个英文名,URL 填写 Matrix 网址

创建好之后,我们开始选择要收集的数据。

2.1.4 创建选择器

我们先看下需要采集的数据都在什么位置:

可以很明显看到,少数派单篇文章展示上,最外层大框(DIV)把所有元素都聚合在一起,我们需要采集的信息都在这个框子中,所以在结构逻辑上,我们需要先建立一个最外层元素,然后再在其中选择具体的标题、作者等。

我们首先添加选择器,创建最外层的元素选择器,创建完之后选择左下角「save selector」。

这里需要注意几点:

  • Type 填 Element,意思是你定义它为母元素,我们需要其中的子元素(标题、作者等),最后下载的 Excel 数据才可以一一对应。
  • 勾选 Multiple,意思是收集页面上显示的所有文章数据。
  • 鼠标勾选 select 时,点选你要收集的单页面,一般从第一篇文章开始选,绿色表示确认中,点击后红色表示已选中,选完一个再选下一篇文章的区域,这个时候就会发现,页面中所有的文章都被自动选中了。
  • 选区正确的话,会在 Data preview 后显示 dl.artcle-card(DIV 的 class名)。

创建完母选择器元素后,我们需要在它里面创建子选择器来定位标题、作者、点赞等数据。

2.1.5 创建子选择器

我们从母选择器点进去创建新的子选择器。

设置子选择器的步骤和母选择器类似,只不过将 Type 改为 Text,并且不要勾选 Multiple。(所有子选择器都不要勾选此项)

采集作者信息:

采集标题:

采集喜欢:

同理采集完评论数后,我们可以得到这样一个选择器结构:

2.1.6 采集数据跑起来

等网页自动关闭后,就可以从 Browse 看到爬好的数据:(如果没有数据,可以尝试点击下下图中的「Refresh Data」)

2.1.7 下载数据的 CSV 格式:

以上是使用 Web Scraper 的一个基本流程。

2.2「加载更多」的翻页问题

但 Web Scraper 只能采集到浏览器目前能看到的数据,也就是一页面的数据,这明显不够。

如果想拿到更多的数据,就要向 Web Scraper 展示更多的文章。

回到网页,我们可以看到少数派使用「加载更多」来展示更多的文章内容。

我们回到母选择器中,修改母选择器的 Type 模式,将其改为 Element click,意思是需要机器自动点击「加载更多」来「翻页」,将更多的文章数据记录进来。

我们还需要让 Web Scraper 知道谁是「加载更多」这个按钮,和母选择器选区一样,在 click selector 中选中「加载更多」:

这时,从 Element 改为 Element click 后又有两个新选项:

第一个 Click Type 中有两个选项,图所示选项,意思是 Web Scraper 只会帮你点击一次加载更多,另外一个选项则是一直点,点到没有新文章为止。

Click element uniqueness 是指当「加载更多」中的字变成「什么」时,Web Scraper 停止爬取数据,比如文字改变,即「加载更多」变为「到头了」,Web Scraper 就会停止,选项还可以改成当 HTML 改变,CSS 样式改变等,Web Scraper 才停止,不过这里我们暂且选成 Unique Text。

我们再看下 Click type 这个选项,要不就只点击一次「加载更多」,要不就无限点下去,直到触发下面 Click element uniqueness 中的约定条件,不过这两种好像都不太符合我们要求。

点击一次肯定不行,数据不够,一直点下去,网页内容少还行,多的话确实需要等些功夫让 Web Scraper 跑完,而且 Chrome 是否稳定,是否会卡也是个问题。

我们能否只爬取部分数据,比如一定数量,2000条文章数据怎么样?

Web Scraper 本身并没有提供原生的解决方案,而且比较遗憾的是,当选择器 Type 是 element click 时也不能通过关闭跑数据的网页来终止数据,从而收集到部分数据。

不过我们可以通过 CSS 伪类做到。

我们先在母选择器随便选中一个文章页面:

然后在红圈位置改为:dl:nth-of-type(-n+2000)

如果这里不好理解,我们可以换种写法,可能更容易理解:

dl:not(:nth-child(n+2000))

二者含义相同,意思让 Web Scraper 只选中前2000项,前者写法要比后者简洁,优雅。

接下来别的地方不需要改动,跑数据,并将 Excel下载下来即可。

三、洗数据:Excel

我们跑下来的数据有时可以直接用,有时需要做一些处理,通常情况下,洗数据的难度不亚于爬数据,不过本次采集的数据相对来说比较干净,工作量不大。

我们可以先看下跑下来的数据。

前两列是 Web Scraper 自动生成的数据,对于后期可视化帮助不大,可以删去。最后一列的 date 看起来有些问题,有的单元格显示的都是「######」,这是由于 date 日期格式的不统一造成的:

  • 「#####」位置的日期格式:2017/7/4(我们想要的)
  • 其他位置的日期格式:01月21日(不正确的格式)
  • 没有日期:1天前(不正确的格式)

我们先将第二种格式转换成第一种,首先鼠标选中 date 整列,右键「设置单元格格式」,选择自定义,yyyy/m/d:

设置完之后,「####」中的数据可以正常显示,不过格式还是不统一:

我们再次选中 date 列,并点击 Excel 上方 Tab「数据」栏中的「分列」:

这时可以看到,date 格式已经统一的差不多,不过最近的文章,还有「一天前」这样数据格式:

我们可以通过 Excel 自动化处理,也可以自己处理一下:这里要改的数据不多,我们简单手动改下即可,比如将「一天前」改为「2019/4/22」,「两天前」改为「2019/4/21」,「11小时前」改为「2019/4/22」。(可以先鼠标选中日期列,然后搜索关键字「前」,可以快速定位到所有需要改的数据)

修改完毕后,date 格式已经统一了,然后我们开始最后一步:可视化。

四、数据可视化:Tableau

1. Why not Excel?

我需要先解释下为什么没有继续使用 Excel 来可视化。

其实,微软三件套中,Excel 的功能最为强大,定制能力最强,Excel 自带 VBA 编程环境,而且各种模版,各种函数,用好了就是一件大杀器,但遗憾的是,Excel Mac 版本的使用体验并不理想,暂且不说打开数据表格的速度要比 Windows 慢太多,更遗憾的是,Mac Excel 还是一个阉割版,比如 Mac 上就没有 Power Query 功能。

所以有必要再选一个 Mac 平台上的可视化工具。

2. Tableau:不止于可视化,更是BI工具

市面上可视化工具很多,国内也有很多网页端工具,方便,快捷。但我还是选择了 Tableau,首先它很好上手,其次它除了最基础的出图功能外,还提供了很多分析功能,也因此更接近一件半自动 BI(商业智能)分析工具。

Tableau 可以轻松创建和分发交互式数据仪表板,通过简单而有效的视觉效果提供对动态,变化趋势和数据密度分布的深入描述,Tableau 很容易理解为工作工具,其学习曲线非常温和,因为它努力为任何类型的用户提供其所有权力,甚至是那些以前从未接触过可视化工作流技术细节的用户。

对于工具软件来说,我认为大体分为两类:

  • 将业余「专业化」的工具
  • 将专业「业余化」的工具

前者如抖音、vue 这些视频工具,人们通过简单的操作也可以得到不错的效果。(业余专业化)

而 Tableau 则是面对那些不怎么具备专业技术的普通人员,让他们也可以通过简单的拖拽生成图表,它降低了数据分析的门槛。(专业业余化)

Tableau 是一个收费软件,不过我们可以下载它的免费 public 版本

下载好了之后,我们打开软件,我这里使用 desktop 举例,二者区别不大。

3. Tableau 上手流程

我们把已经下载好的 Matrix 文章 Excel 导进去:

然后我们点「转到工作表」:

可以看到面板上有三个大区:

先看第1大区。

这里需要先介绍一下,Tableau 将 Excel 中的数据识别为两种:维度、度量。

度量很好理解,大多数字都属于这一类,比如评论数和点赞数,图中后两个「记录数」和「度量值」是自动生成的,我们暂且不用管。

维度则是非数字,比如经纬度,字符串等,文章作者名、标题、日期都属于维度。

Tableau 的使用方法也比较简单,直接拖拽或点击数据到表3的行/列中,Tableau 会自动生成合适的图表。

比如我们可以拖拽「评论数」和「作者」分别到「列」和「行」:

点击右边的智能显示可以看到 Tableau 自动生成图表,比如我们选择水平条图表,智能显示的下方文字会提示你还需要再拖动哪些维度或度量才可以生成图表。

我们还可以点击上方的降序图标,让图表降序排列。

记录数是 Tableau 中主动生成的度量指标,它是所有数据的总记录,很多时候都可以用到它,比如我们现在将记录数拖拽到面板的第2区中的标签上:

图表也带上了具体数字的文字标签:

这个时候,我们还有一个问题,作者数量过多,导致图表过长,显示不全,出图效果不好,我们可以使用2区中的「筛选器」精简图表。

比如我们只需要总评论数的前20名作者,这个时候就需要用到排序,我们可以使用Tableau 自带的排序「快速表计算」。

先将记录数拖拽到2区中的标记面板,右键选择「快速表计算」中的「排序」:

再将计算好的总和(记录数)拖拽到上方的筛选器中,点击下一步,进入排序设定,我们设右区间为20:

这样图表就会显示一共前20列。

我们还可以在图表中添加平均值,中位数等辅助线。

将「记录数」和「作者」分别拖拽到列行后,点击左侧1区的「分析」,将平均线拖拽到右侧3区中,会如下显示,将线拖拽到第一个即可:

如果我们想导出图片,可以在软件上方 Tab 「工作表」中,选择导出图像,不过这样的出图经测试不如直接系统截图清晰:)

我们也可以将几张图表进行「拼盘」,也就是新建「仪表板」,在那里你可以将这些已经生成的图表进行排序,位置上组成任何你想要的样子。

如果还需要演示与交互效果,我们还可以将「仪表板」组合成「故事」。

其他的图表大同小异,大家可以自行尝试。

下面讲几个文章开头的图表做法。

4. tableau 实战

4.1 双度量图

这个图表使用了相同竖轴(作者),将点赞数和评论数展示在一张图上,优势是信息量比两张单图展示更大。

实现效果比较简单,分别将度量中的点赞和评论拖拽到3区中的列上即可。

4.2 散点图

散点图用来探讨两个变量之间的相关性,比如我们可以使用评论和点赞数制作散点图,找寻二者之间的关系。

我们从度量中将评论数与点赞数分别拖拽到3区的行/列中,然后在右边的智能提示边选择散点图。

现在,图上什么都没有,我们想在表中相显示作者信息,并且最好能从形状上看出作者与点赞之间的关系。

我们分别从度量中拖拽「作者」到2区的「颜色」和「标签」,不同作者就会用不同颜色显示,也会在图中显示作者名。

然后,再将度量中的「点赞」拖拽到「大小」,图中圆圈的大小就会反应作者收到的点赞量。

然后,我们想研究评论和点赞之间的相关性,我们可以在1区「分析」中引入「趋势线」

这里可以看到两个数值:R 平方值和 P 值。

简单解释下它们的统计学含义:

  • 显著性-P值:P 值小于0.05则表示结果解释为显著,P 值越小,模型的显著性就越高,两个变量的相关性越高
  • 显著性-描述模型- R平方:为模型解释的数据中的方差与数据中的总方差的比率,进行线性回归时,R^2介于0~1之间,越接近1,回归拟合效果越好,一般认为超过0.8的模型拟合优度比较高

这里 P 值较小,相关性模型比较显著,模型拟合效果也还可以。

所以,一篇文章点赞多,评论也可能越多。

4.3 同轴显示柱形图和折线图

该图表一般用柱形图展示某变量数量上的变化,用折线图展示数量增长或降低的幅度,即变化趋势。

这张图,我们需要用到的数据是「发文日期」和「记录数」,也就是文章数。

由于我们数据采集周期是从2017年3月27日到2019年4月23日,为了数据的完整与客观性,我们选择2017年4月初到2019年3月底完整两年时间。

我们先筛选时间,将日期拖拽到2区的筛选器中,选择「日期范围」,并选择我们想要的区间:

然后将1区维度中的「日期」拖拽到列,并且点击列上的日期,让它按月显示数据:

我们将记录数拖拽到3区的行中,柱形图就出来了:

然后我们制作折线图。

将记录数拖拽到2区的标记中,选择「快速表计算」中的「百分比差异」,来计算各个月份之间的相对百分比差异:

然后将其拖拽到3区行上,并将其对应标记选择为线:

之后,我们需要合并两个坐标轴,选择行上最右边的总和(记录数)(三角),右键下拉菜单选择双轴:

图下方显示 null 值,我们点击它,选择从「默认位置显示数据」即可。

颜色也需要再处理下。

我们可以在图中所示柱状图中改变柱状条颜色:

4.4 堆叠图

在 Matrix 发表的文章,都有多少上过首页?

理论上来说,网页并没直接提供这样的数据,这里我根据点赞量做一个简单猜测:点赞量50以上的文章,就认为它上过首页,但这样有些武断,因为确实存在上首页后不超过50赞的文章,这样的结果是,图上显示的上过首页文章可能会比实际值低

时间上,我们选择2018年全年,数据最为完整。

筛选器选择年份为2018,然后分别将「发文时间」和记录数拖拽到列和行,发文时间选择按「月」展示,标记处改为条形图显示:

这时我们需要解决一个问题:将所有的记录数(文章)根据点赞数0-50和50以上进行分组,才能得到堆叠图:

  • 0-50点赞文章
  • 50点赞以上文章

我们需要用到 Tableau 中的分组功能,选择度量中「点赞」右键创建「组」

多选(0-50)和(51到最后)并进行分组:

分好两组之后,维度出现了新的like(组)1:

我们将like(组)1直接拖拽到2区标记中的「颜色」中,堆叠图就做好了。

4.5 词云图

最后说下词云图的制作方法:

词云图中各个词一般会对应某数值,数值越大,词字体越大

我们想制作一个根据点赞量显示作者名字的词云图,我们分别将「点赞」度量和「作者」维度拖拽到行列。

然后在智能提示中选择填充气泡图。

最后在2区中将标记改为文本即可:

五、可视化教程总结

1. 低门槛 Workflow

本文的初衷,是希望通过实践建立起一个简单的数据可视化 Workflow。因为在我看来,每个人都应该具有选择工具的权利与能力,来突破隔行如隔山的专业性「代沟」,增强自己的竞争力。

就算在少数派这样重实操,较极客的平台,对大部分人来说,编程还是有门槛,

任何一件事都有门槛,但我们能做的,就是不断把这个门槛降低,让更多的人感受「data is beautiful」。

2. 工具潜力未被完全挖掘

篇幅有限,本文对工具的介绍并不全面,也就是说它们还可以达到更高的水平。

比如我们想要对 Matrix 文章的调性做一个数据分析,其实 Web Scraper 还可以自动抓取跳转链接后的数据,也就可以通过 Web Scraper 跳转文章标题链接,拿到文章页面中「标签」这一维度的数据,从而分析出作者都爱写哪些类型文章,读者又都更偏爱哪些类型文章等。

再比如我们可以让 Web Scraper 跳转作者页面,拿到作者的总写作字数,这个时候就可以配合 Tableau 的参数化计算字段,找到一些新角度,比如计算点赞数/写作字数,就可以看出作者驾驭文字的能力。

这样的角度还有很多,等着你去挖掘。

3. 工具的局限性

再好用的工具也有自己的局限。

相比于 Python、D3、R、Echart 这些「正统」数据处理语言来说,Web Scraper 首先缺少实时性,也就是说它不能每时每刻监控网页上的数据变动,每次爬取数据都要手动开始,也不能提前定时,自动化水平不高,而且数据采集要在 Chrome 中模拟翻页,点击,耗时较长。而且 Web Scraper 和 Tableau 都有一定的性能瓶颈,当需要处理的是百万,千万级别的数据时,软件的响应速度远远不如编程语言。

所以说,工具的出现并不意味编程过时了,只是这些工具也能让普通人上手一些轻场景的数据分析,比如做新媒体,需要分析竞品网站,这个时候工具的优势就体现出来了,从数据采集到分析,都不太需要过多的编程知识。

而对于那些数据量级巨大,网页爬取不便,且对可视化出图样式要求较高的重场景数据分析来说,编程工具会更合适。

最后,简单谈下我对数据可视化的理解。

六、微谈数据可视化

1. 数据可视化的本质

数据可视化有着统计学渊源,但并不是只有严格意义上的传统图表才称得上可视化。不管是我们演示用的图例,还是基于气象模型的 R 语言的专业数据分析,或是好奇心日报的「好奇心小数据」这样的数据新闻,其实都算是数据可视化。

那可视化的本质是什么?

在知名可视化作者 Nathan Yau 看来:

我们手头的大堆数据反映了真实的世界,然后我们对它们进行分析,得到的不只是视数据的关联性,我们还能了解到身边正在发生什么。这些故事反过来可以帮助我们解决真实世界中存在的问题,例如降低犯罪率、提高卫生意识、改善高速上的交通状况,或者只是增长我们的见识。

数据可视化的本质是寻求真相,透过数据——世界的真实反应,来找寻各种事件间的相关性与事情发展的趋势,从而找到一些问题,然后我们才会想方设法解决这些问题,让这个世界变得更好。

寻找问题,解决问题,把你的想法通过图表顺畅的传达给读者,我认为这就是数据可视化的第一要义。

从本文前几章的工具教程可以看出,工具的上手难度并不高,但是如何着手做好数据可视化却很难,换句话说,可视化的「术」很简单,「道」却很难。

2. 「道」即是问题

图片最伟大的价值在于它迫使我们注意到从未预见到的事物。——约翰·图基

当我着手对 Matrix 的文章可视化时,我需要通过不断设问来推进可视化:

  1. 我可以拿到什么数据?
  2. 我想了解数据的哪些点?
  3. 数据背后的问题是什么?我对哪些问题有疑问?
  4. 选择哪些合适的图表?
来源:《数据之美》

我的回答

  1. 文章标题、作者、点赞、评论、发布日期
  2. 最好的是谁?勤勉(发文数)、受欢迎(点赞)等各种排名,时间的变化呢?
  3. 先从整体看数据,然后放大到具体的分类和独立的数据点,哪里增加、减少、离群值,数据中的差异与随机性相比是怎样的?
  4. 柱形图(排名)、折线图(增长率)、堆叠图/饼图(首页比例)等

当然,在可视化的过程中,你最好围绕一个核心问题出发,有时核心问题来源于你的核心需求,比如对于 Matrix,我的核心问题是:如何写一篇受大家欢迎的文章?

这个问题带到数据解读中,又可以转换成:什么样的文章最受大家欢迎?

我们再回顾下单篇最受欢迎文章:

指南、教程类文章榜上有名

我们可以看到,最受大家欢迎的文章高度集中在「指南」、「教程」中,一方面这说明少数派的读者都有很强的学习欲望,从而对教程类文章更感兴趣,另一方面,大家送出的「赞」在这些文章中更像是「收藏」,即某种标记,从而可以在需要的时候找出来再看一遍。

这里说句题外话,很多互联网产品,都会将「喜欢」、「赞」与「收藏」联系在一起,会更符合一些用户的使用习惯。(我个人就是把赞当收藏用)

比如第三方微博客户端,墨客:

现在说回来,如果你想开始可视化之旅,最好对已经采集到的数据抱有一个核心需求(你到底想获得什么),这个核心需求会激发你在阅读数据时找到核心问题,从而又能找出更多小问题,这样, 你的可视化之旅就会自驱动向前。

3. 你不一定需要炫酷图表

有时我们会见到一些炫酷的图表,比如桑葚图:

还有这样的:(我不知道名字)

它们的共同之处在于生活中都比较少见,人们看完觉得耳目一新,感觉很炫酷。但我推荐大家谨慎使用这样的图表,因为它们过于复杂了,可读性大打折扣,图上的视觉因素盖过了你本想要传达的信息。

文章开头很多图都是比较常见的图表,比如柱状图,折线图,饼图等等,之所以选择它们,并不是因为制图简单,而是它们对读者更友好。

世界上最早的柱状图出现于威廉·普萊菲1787年出版的《商业和政治图集(第二版)》。

描述了1780年圣诞节到1781年圣诞节这一整年的时间里,苏格兰对不同国家和地区的进出口情况。

柱状图沿用至今已经有200多年历史,这意味着它经受住了时间的考验,人们认可它简洁的可读性。

无论是新兴图表还是传统图表,让人们更好理解,更符合阅读习惯的图表就是好图表。

有时图表需要顾及传播性,我们当然可以选择一些新颖的设计,不过最基础的一条要求还是要考虑可读性,你必须简单直接地向读者传达出你想表达的意思。

七、附录

标题是踹门教程,一方面要求上手速度要快,另一方面,就是要有力量,也就是执行性要强,可以通过阅读文章制作大部分图表。

Web Scraper 和 Tableau 都可以导入「配置文件」,比如 Tableau 的配置文件类似于「源码」,你可以看到我在出图过程中所有操作。如果学习过程有不会的地方,可以做个参考,我把它们都打包到了百度云上(见后文)。

Web Scraper 的「配置文件」是一段 json,你可以在这里复制进去,然后可以看到所有的选择器结构与配置,并且可以直接跑数据:

Tableau 「配置文件」为 Matrix.twbx,下载后点击 Tab 栏「文件」「导入工作簿」即可。

这里再推荐一些可视化书籍与工具教程链接,书中的知识是更高级的方法论,从「道」上帮你理解可视化;教程你可以当成查询手册来用,在阅读本文时可以翻阅一些知识点,查漏补缺,

1. 书:

2. 教程:

3. 文章中用到的数据集与工具配置文件:

4. 可以用来练习的数据集(Excel):

这里再提供一些数据集网站,你可以在上面下载一些 Excel 文件,然后发动你的好奇心,大胆的可视化。几个例子下来,我相信你一定可以掌握这套低门槛的可视化 Workflow。

  • 世界银行
  • IMF(国际货币基金组织)
  • kaggle(推荐)
  • data is beautiful(Reddit 知名数据分析频道,时常会放出一些数据集,组织可视化比赛,而且还可以观摩很多优秀案例,推荐)

5. 题图:放松一下

最后欣赏一下来自 CLEVER°FRANKE 团队为红牛做的派对数据可视化,它也是本篇文章的题图。

CLEVER°FRANKE 为 redbull 做的派对数据可视化

完整图:

这个项目是 CLEVER°FRANKE 受邀与时尚品牌 BYBORRE 合作,在阿姆斯特丹舞会活动(ADE,电子乐派对)上,为派对客人定制的数据可视化。

数据来自于客人戴的手环。

手环上有检测器,可以检测动作、定位、温度、ID、分贝(声音)数据,然后通过联网实时将这些数据传到可视化团队,他们也配备了一套相当完善的可视化 Workflow:

他们用 java 分析数据。Processing creatice 出图。

最后派对结束,每个客人都会收到为自己定制的可视化纪念品。

再看两个效果:

怎么看这些图呢,简单来说,他们用不同的颜色表示温度、活动、位置(维度),用透明度来表示强度(度量)。

Data is beautiful, right?

希望这篇文章对你有帮助。

本文首发少数派,同步 WEB VIEW ,任何人未经许可不得转载。

假装是个设计师2——避雷针

作者 王隐
2018年9月3日 23:58

好的设计大同小异,不好的设计各有各的问题。

本文介绍一些网页和文章排版中的常见错误。

展示过程中会给出错误和正确的对比用例图片,错误用例也会进行具体标注,所以文字描述部分会比较少。

多图预警。

一、网页中的排版错误

1.内容未按逻辑分块

使用背景色将网页不同部分分块,更适于读者阅读。

2.标题上下方间隙不同

不同间隙会产生一种错觉:文章内容由标题决定,尽管每篇文章的重要性均等。也会让网站看起来很乱,

等间隙则会让不同标题显得一样重要。

3.padding 过小

图二中间部分的文字没被「撑」起来,读者很难将上部分与其分开。

插多大的空白呢?至少120px吧。

4.图片上放低对比度文字

原因很简单,看不清字。

图片太亮了,上面文字就看不清。

两个办法:

  • 文字的对比度要大过图,比如用黑色字体
  • 图片暗一点,并且把字放在图对比度最低的地方

5.太多样式

样式太多有一个问题——你到底想强调什么?

尽量一个页面用一个大小的字体,一个颜色,最多两套字体,这样看起来比较简洁。

6.颜色块太窄

避免使用窄颜色快来强调你的内容。比如标题已经很大了,这个时候就不要用颜色块了。背景色行不行?不止标题,还有相关的文字。

7.很窄还放放大量文字

没有可读性,因为读的人看时总要换行。

文字又长,又居中,可读性就更低了。

尽量不要在窄区域放很多的字。

8.居中文字过多

居中的文字很少时,显示效果很好,但一旦字多就不行了。

用户很难有效率地阅读,建议你字体设置大些。(24px以上)

如果你真的有很多的文字,弄个折叠显示,比如「点击显示全文」。

标题后带一段短文字,显示效果还不错。

9.文字对背景图片喧宾夺主

文字尽量不要遮挡图片(下图一文字挡了女孩的脸。),这样会看不清图的细节,也会让文字更不好读。

多尝试不同的位置,比如文字居中或竖着放左边。

10.误用字的行高

大标题的字最起码要比其他部分的标题字高。

图一的大标题要比二级标题小,人们会很困惑:二级标题的内容要比一级标题重要吗?

网页整体要有结构性, 从上到下,从大到小。

这有助于帮读者分清重要信息和不重要信息

11.不必要的逻辑切分

全屏图后面接文字,在视觉上给人感觉图前图后应该是两部分。

这个时候在文字和图都加上 padding,那它们看起来就很统一,像一个整体。

12.标题又长又大

大字体适用于短文字,标题要是太长,字体就要小一些,可读性也更高,也能给网页上其他部分留空间。

讲究平衡,网页不只是为了突出标题,还有其他的元素。

13.按钮用边框

透明按钮用边框有意义,彩色按钮别加。

14.颜色太多

太乱,一两个颜色就够了。

15.复杂的导航栏

导航栏目的是「导航」。

不要放没用的信息上去,5到7个足够了。

这个导航栏放的 tab 就太多了。

二、文章中的排版错误

1.不分段

大量篇幅不要写在一段。

经常分段。

多插图,插引用,给读者心里上的缓冲。

公众号现在都恨不得一句一段了。

2.标题上下距离一样

标题上下空出来的距离不要一样,因为标题是对下一部分的启下,即标题属于下部分。

标题上空白要比下空白大两到三倍。

同时,标题下间隔最好和段落间间隔相同,这样给人感觉标题和下部分短路是一个整体。

3.小标题比标题都大

4.间隔不一

图一的作者头像和网页顶栏过近,看起来就像作者属于顶栏部分,而不是下边的文字。

解决方法也是在头像上加 padding。

5.图片说明和图片距离过近

6.小标题(h2,h3)和文字段落过近

段落间隔>小标题与段落间隔,会让人觉得文章整体很松散。

段落间隔<副标题与段落的间隔,看起来好多了。

7.强调的内容离正文太近

关键段,引用,最起码要距离正文75到120px。

还是加 padding。

8.低对比度的内容

如果你想强调你的内容,最起码要讲强调段字体比正文大10到15px,字体也要再深点。

9.字少还用背景色

如果想强调作者信息,可以加 padding,不要用背景色。

也不要在小标题用背景色。

10.全屏图之间有空隙

空隙意义是什么?

11.太多加粗

太多加粗,文章好像断裂了一样,如果通篇都是加粗强调,那加粗的意义也就没有了。

12.太多样式

太多样式很容易分散读者注意力。

13.居中的段落太长

还是可读性不好。

14.标题和图片距离过近

标题和图片距离过近,会让人觉得标题和图片是一部分,其实标题应该是独立的。

设置 padding=60px,再加个副标题吧。

15.滥用斜体

16.居中

图一的标题和副标题都太靠左了。

原文连接:blog-en.tilda.cc

作者:Nikita Obukhov

焦虑与创造力

作者 王隐
2018年8月24日 17:14

大脑生来就很焦虑,并且它们还运转的不错。

之所以这样设计是为了「修复」一些认知上的劣势,这是一件好事,可以促使我们不断发展。比如我们恐惧饥饿、死亡和无意义的生活。于是我们从这些恐惧中诞生了农业,医药和宗教。控制思考能力的大脑分区也会控制人们的创造力,这可不是巧合。

你感到焦虑,觉得自己有问题,焦虑完这件事还有那件事,不能停下来享受生活感受快乐,这不是你的问题,因为或许你对人类大脑和幸福的理解出现了偏差。

我们并不是为快乐而生,比如无忧无虑,感恩,兴奋这些。

我们生来是为了生存而存在,而这种生存表现在创造上。

当我们专注于创造而不是感觉时,痛苦就会减弱。比如专注于如何从已有的存在中创造出我们想要的东西,而不是世界让我们感受到什么。

当关注的焦点不是「我能享受什么?」而是「我能创造什么?」时,好坏变得不重要。

阻碍会变成机会。

人无时无刻都在创造,在阅读这篇文章时,你正在创造细胞和想法。你的呼吸在制造二氧化碳。和爱人共度时光时,你在建立自己的关系。工作时,你在挣钱,创造技能,你总是在创造。

停止创造时,痛苦就会出现。因为你不是在规划人生的下一步,而是在反思你上次做事情的最后一步,你不再去想那些有创造性的机会,你假设已经没有更好的可能性。生活开始失控,你开始采取无能为力的态度,变得无助,但这种痛苦毫无意义。

当我们专注于创造时,痛苦就成为了整个过程的一部分。痛苦也变得有价值。我们不再将自己的情感体验分为「感觉良好的事情」和「感觉不好的事情」。我们将它们划分为「值得做的事」和「不值得做的事」。我们会正视痛苦,也因此进化成长,增强自己应变与思考的能力。

创造力并不是艺术所独有,它也不一定是一时情感的爆发,它可以是一种习惯。

当我们选择养成这种习惯时,我们不再被动,而变得积极活跃。我们不再从别人创造的世界中获得利益和快乐,而是认清自己的使命,完善自己。


原文链接:Medium · by Brianna Wiest

博客毁了Web?

作者 王隐
2018年8月3日 13:55

1993 年,我第一次上网,那个时候的 web 还是三个大写字母 WWW,网速也不快。

每次上线,打开的第一个页面都是 Netscape 的 What’s Cool

What’s Cool 自诩是发现酷网页的最佳入口。在很长的一段时间里,它确实做的不错。

那个时候整个 Web 规模还不大,有多小呢,只要一个页面就可以罗列出当时所有的网站。

使用一分钟一帧的网络摄像头来监视另外一个大陆的咖啡机,点击一个没有任何功能的大红按钮,在那个时候可太酷太潮了。

那个时候,我们没有任何的平台,内容流,社交网络和博客。只有主页。

主页的背景是灰色。字体 Times New Roman。链接中蓝色。那个时候还没有页面滚动的视觉特效,但有水平的 GIF。

你要是知道些实用 tag 的话,做一个新网页出来大约只需要一分钟。

没有数据库让你配置,没有脚本让你安装。没有插件,没有安全补丁。也没有 cookies。没有 iframes,没有 js,也没有 Web App。

我们就这么纯手工创建每一个网页。有很多网页时,再手工创建导航栏。我们手工管理自己的内容目录。我们打破了代码的计算边界来进行图像映射(image maps),那个时候我们还会正式地谈论「超链接」。

网页更新时,我们会放一个小小的「新」图标在上面。

如果不是新链接呢?那就将点过的链接用粉色表示。

那个时候的主页都各不类似。也没有内容管理系统(CMS)。但这并不意味着主页的内容杂乱无章。

井井有条的主页会让你(公司)更有自豪感——即使它只是一系列有趣的 GIF,或教你怎么制作最好的土豆枪,关于沙鼠遗传研究等。

日期不重要,因为内容可以留在主页很长时间,旧的内容也可以看到。相比于现在时间流的展示方式,以前的 Web 更像是目录(体现在列表)。

有主页的人就像一个业余图书馆管理员。

可惜,好景不长。

一、

1994 年,一位名叫贾斯汀霍尔的大学生开始拒绝传统的目录格式。他每天都会从主页顶部添加新的内容,并在每篇都标注日期。涉及内容很广,从有趣的链接和他接触到的性和毒品,全都包括。

贾斯汀的这种做法就是第一代的网络日志。

也是他们所谓的网络日记。(几年之后,博客这个名字就出现了,因为有些作家不在局限于只写私人内容。)

大部分日志都是作为单独部分,再关联到个人主页上。这些日记都是内联内容(无需访问者点击任何内容,亦无需点击导航栏),就像贾斯丁的那样,要不就有一个公共页来链接所有的日记。

但这样有一个问题:这种排序的日记并不按重要性或类别展示。

只是按照时间先后顺序。

就像这样:

这种形式就像 web 本身一样古怪并且很个人化,通常是「忏悔」型的内容,篇幅也不长。

但这种形式并不流行。

二、

1993 年初,jjg (知名博客主)统计他的「网络日志」时,发现只有 23 个。没错,只有 23 个。毫无疑问,他丢失了很多内容,那应该是多少呢?扩大五倍,十倍?230 篇日志?

到 2000 年底,根据 Eatonweb 的数据,所有的网络博客总只有 1285 个。

博客的世界太小了。

当然,早期的网络本身非常独特:首先你得能上网,还得知道 HTML,还要有一个托管账户,并知道怎么使用它。这都没有捷径,每个上网的人都必须全身心投入进来。

但是,除了博客之外,还有成千上万的个人主页。

主页永不过时,它是关于某个主题或某个人的有趣/相关事物的索引。你没必要为了追求新鲜而每天都刷新主页(这就是Netscape的酷炫之处!)

时间流排序还是少数。

当时的互联网主要由学者,专业人士和大学生组成。并不是每个人都想发表他们的愤怒诗歌,性骚扰内容和上网习惯(即当时互联网内容质量很高);时间流排序很大的限制是它需要投入大量时间和精力。坚持写日记并不简单。首先,你必须要有说的内容,然后写下来,编辑,格式化,添加剪贴画,编辑 Index.html,编辑上一篇/下一篇的链接,并检查,最后上传这些文件。

无聊,枯燥又复杂。

Blogger 和 Livejournal 都在 1999 年出现,与 jjg 的 23 个列表同年,但他们都没有改变写日记在技术上很枯燥的现状,也就没有立刻成功。对于习惯了 HTML 中自由格式的先驱者来说,博客有限的功能和缺乏自控性并不能让他们满意。

三、

第一次真正颠覆性浪潮发生在 2001 年。一项发明将彻底改变人们在网上分发书写内容的方式。

Movable Type.

看这个:

MT 并不是第一个简化内容分发的工具,但它是第一个吸引 tweakers——爱 DIY 的极客们的强大工具。

它也是第一个基于 Web 的 CMS,可以在自己的 Web 主机上免费下载,安装和运行。

这是第一个完全不需要你手工写网页的替代方案,博客更新变得简单,而且可控。

这也是许多网民们第一次接触到 CMS ,包括我自己。

像早期的网络日记迷一样,我模仿 Mena Trott(知名博客主)。她的Dollar Short 页面看起来像一个基本博客应有的样子,功能性和可维护性都很好,也没有多余的装饰,一页上有很多帖子,但因为都是纯手工制作这些不同的网页,样式上可不太好看。

人力做了这么多的内容,才能做出一个博客,这可不合适。

但有一天,它突然变得精简又漂亮。

人们赞叹, 这就像你在一个无聊郊区的杂乱屋子度过你整个人生,周围也都是这样住在无聊屋子的无聊人。然后突然有一天,你发现自己的屋子入选了《建筑精选》。

还能这么活?我也行吧?

答案是,在这些清爽简洁的页面底部,有一个小小的徽章:

由 Movable Type 强力驱动

含义很明显,这种简约之美,你也可以拥有。

没人会拒绝。

四、

Movable Type 不是一场技术革命。它不像今天的 CMS(wordpress)这样的实时网络应用,它都没有提供动态内容。这一点都不花俏。

它所做的只是利用 Perl 脚本的强大功能来完成我们以前手工做的工作——生成静态 HTML 文件。

但在文化层面,它是毁灭性的。

突然之间,人们不需要创建主页甚至网页,而只需要在网页中的表单字段和文本区域编写 Web 内容。

突然间,人们不需要建立自己的系统,而是在某个特定系统内部操作即可。

当然了,这个系统是别人创建的。

当然,你可以再定制你的 Movable Type 网站。比如编写模板。它比 HTML更难,但对于做过网站的人难度并不大。如果自己不会编程,也可以复制粘贴代码。似乎整个博客圈都在分享他们的最爱的 Calendar 侧边栏。

但这是个陷阱,那些 calendars 侧边栏就是诱饵。

五、

这就是问题的症结所在:当事情变得容易时,人们会做更多的事情。

纯手工制作整个网页时,从 HEAD 到/ BODY,这是一个无限可能的世界。你可以根据自己的喜好定制,并用任意方式组织。每一个设计决定工作量都不小,你都要手工完成它,无论是反向时间顺序还是整齐的目录。但都是按照你的想法去做的。

当一切都可以通过工具去做,Web 可以毫不费力地运作起来,但是这些只能通过一种方式来做,这种方式的标准就是如何能更少成本去建立 Web。

这就是 Movable Type 毁掉博客圈时发生的事情。

  1. 使用系统的默认格式:什么都不改。
  2. 根据你的格式自定义系统:比纯 HTML 复杂点。

从简入奢易,从奢入俭难。

系统默认赢了,时间流赢了。

六、

高产的博主们设计出了 Movable Type。但它的展现形式机械性地遵循博客功能。这种格式不仅没有更好的管理好自由格式的内容,而且还很僵硬:标题,类别,条目。除了单一条目本身,你只有四种排序方式:按日(chrono),按周(chrono),按月(chrono)和奇怪的通配符类别。

类别归档中,文章会自动按照日期排序,无需人工参与。

时间流时代开始了。或者说:时间流掌控一切。

七、

Movable Type 不仅扼杀了博客多样性。

它(和它的竞争者)还扼杀了别的 Web 产品。

那些不写日记的人——即那些 old school 主页的人,和博客主们一样,也想要那些超酷的 calendars 侧边栏。他们很容易被这些东西诱惑。于是也花了很多时间和精力迁移到这个新平台上。

他们很快发现,时间流不只是个不错的仆人,也是一个可怕的主人。

土豆枪女孩,沙鼠遗传学家发现他们不想更新了。因为觉得没意义。他们的网站应该是一个目录,一个参考工具,一个奇怪的,有点发霉的个人图书馆。新的「帖子」格式根本不适合他们,即苛刻,又压抑。

但他们还是迁过来了。花了许多的时间,精力,乐观来转移平台,他们必须重新经历这个过程。更糟糕的是,他们必须从头开始构建新(旧)站点,却没有合适的工具帮助他们。

从简入奢易,从奢入俭难。

一旦你尝到了不费力写网页的甜头,就很难回到纯手工建站时代了。

他们也一样,成千上万的人们也一样。

手工不值得。

这种惯性太强了。

老 Web ,酷 Web,奇奇怪怪 Web,手工 Web,全消失了。

时间流仍在不断扩散,Myspace. Facebook. Twitter. Instagram. Pinterest。这些社交网络都在使用时间流排序;他们还引入了算法排序,内容的展现不按照时间而是按照流行性,还通过你看过的历史内容猜你更想看的东西。这是一种从没有过的失控(对比按照列表,重要性排序)。

再也没有奇怪的主页了。

再也没有业余图书馆了。

而这都是因为方便软件的出现,迎合了最开始那些觉得写网页很痛苦的少部分人。

这可一点都不酷。


原文链接:How the Blog Broke the Web

作者:AMY HOY

译者:王隐在录音

❌
❌