2022-08-20 原《每周读书》系列更名为《枫影夜读》

即使没读过莎士比亚的作品,大部分中国人也都听过这句话:
一千个读者有一千个哈姆雷特。
There are a thousand hamlets in a thousand people’s eyes.
这句话被解释成每个人对于文学作品的理解各有不同,而我却一直对这种解释持怀有疑问,一是我不明白这句话到底想要表达什么,二是我无法理解能够被一千个不同 POV 解释的哈姆雷特到底是什么样的存在。按理这种空泛的解释换了哪个角色都说得通,但为什么一定是哈姆雷特?
直到读完《哈姆雷特》全剧也没有答案,我觉得这位悲剧主角的形象一直非常鲜明,就是一个内心矛盾又优柔寡断的王子,能够对其有 10 种截然不同的解读已经很厉害,1000 种实在不知怎么生成的。更奇怪的是这句“广为人知的名言”没有人知道其准确的出处,有人说出自莎士比亚,有人说是恩格斯,Google 英文,出来相关网页全是中国人写的,不得不让人怀疑这句话是否“Made in China”,就像“太空可以看到长城”一样。后来我在知乎上提了问题,目前还没有明确的回答,有兴趣的同学可以考据一番:“一千个读者有一千个哈姆雷特”的出处是哪里?这句话是Made in China 吗?
不过开始看莎翁的“四大悲剧”却是因为 James 的《冲突与悬念》中多次提及《麦克白》这部作品。《麦克白》是莎翁最短的一部作品,《哈姆雷特》则是最长的一部。很多读者可能一听到莎士比亚内心就有些畏惧,觉得这人是古代人,写的是古代英语,像文言文一样一定很难读,而且跟《巴黎圣母院》什么的是一个时期的吧,一大堆环境描写无聊透了。这也是我对莎翁的第一印象,但是读完“四大悲剧”(《哈姆雷特 Hamlet》、《奥赛罗 Othello》、《李尔王 King Lear》和《麦克白 Macbeth》)之后却发现这些著名的戏剧跟小说一样有趣,而且完全不会难读。
首先莎士比亚创作的巅峰时期是文艺复兴后期(1600 年前后),大约相当于中国明朝中后期,这时候的英语已经是现代英语(Modern English,英语分为古英语、中古英语和现代英语三个时期,真正的古英语跟我们看甲骨文差不多)了,除了部分词语和文学表达有点陌生之外,大部分内容都是很好读懂的。
其次莎士比亚的代表作是戏剧,当时他既是演员也是剧作家,而且是剧团老板,他的戏剧是要在剧院里面上演的,除了特别长的《哈姆雷特》之外,大部分戏剧都在两个小时左右,跟今天的电影差不多,所以情节都非常紧凑,不会像《悲惨世界》一类小说,需要大量环境描写来吸引当时无所事事的读者,所以读莎士比亚的戏剧你不会觉得无聊,大部分时间都会有各种冲突冲突,麻烦麻烦,悬念丛生,欲罢不能。
最后能够让莎翁的作品产生“不好读”的感觉的大概就是翻译问题了,我读的是民国翻译家朱生豪先生的译本,除了个别词汇的翻译有点奇怪之外(比如 to act, to do, to perform 被翻译成“干、行、做”,称呼王后 Madam 被翻译成“娘娘”),大部分内容都很好读懂。不过戏剧作品中多有诗歌,中译本很难做到即押韵又优雅,所以真正想要体会戏剧魅力的还是得看英文版。英文版可从古腾堡计划(Free ebooks by Project Gutenberg)的网站上下载,这是个专门提供公版书下载的网站,比较有名的公版书都可以找到。莎翁的作品都是自由版权了,这个网站提供多种语言版本,下载的时候注意看看是否为英文版。
15.06.27/下午
时光咖啡
把《每周读书》同步到微信公众平台也有些时间了,最近八周居然能真正做到每周都读书,挺难得也令人欣慰。从 2010/12/17 第一篇开始,“每周读书”已近四年,然而令自己感觉到进步的,却是从公众平台上的第一篇读书开始。有兴趣的读者可以到文章底部扫描二维码关注我的公众号,以下是最近八周的书单:
2015-04-22

余诗抚去了《诗歌报》一类排资论辈自欺欺人的酸腐,唯有真挚充盈的情感保留了下来,悲伤却不绝望,苦痛然而敞亮。我想这种无以言尽的明亮之色正是余诗最为动人的地方。
2015-04-28

从书架上拣一本最薄的三岛由纪夫的小说买下,正好是《纯白之夜》。上海译文出版社出版的这套三岛的合集甚合我心,装帧简约,朴素干净,最赞的是这本小说没有莫名其妙的前言和后记,真是难得。 小说一个晚上就看完了,在三岛一如既往的细腻与优雅中度过,真好。
2015-05-05

看完这本小说,再回想《金阁寺》,有些想不通的地方就豁然开朗了。设若金阁寺所代表的美就是人世间通常的“男女之恋”的美,而沟口却屡屡和女人在关键时刻就浮现金阁寺的幻影而失败,那么金阁就是假面向往而不可得的女性了。
2015-05-23

毕竟《三体》的“硬科幻”部分精雕细琢无可挑剔,大情节上跌宕起伏,屡屡出人意料,所以只有人物是最好下手开骂的。这就好像普通人没接触过代码与产品设计,想要批评一个产品做得不好,往往只能动用“怎么也懂一点”的“审美能力”来指栽“配色难看”云云了。
2015-05-27

张爱玲的文笔有如涓涓细流,絮絮叨叨,似耳语,似檐雨,叮叮咚咚,淅淅沥沥,似乎轻飘飘,软绵绵,却不知在何时,早已渗入你的内心,一阵感动。这就是张爱玲式的笔触,无孔不入,细而无声。
2015-05-31

看阿加莎作品的推理过程就像程序员追查一个“无法解决”的 Bug,没有找到根本问题之前,任何用户的描述都是值得怀疑的,靠掌握在手中的一点点线索,慢慢逼近事实真相,最后查出来的 Bug 往往与用户描述大相径庭,出人意料。
2015-06-11

想张恨水是比张爱玲的年代要更久远的作家,不自觉便把他同“很无趣的民国小说”绑在了一起。却没想到《秦淮世家》这部小说很出意料之外,写作手法很是新潮。
2015-06-17

即使不写作的读者,了解文学作品的写作技巧也是很有必要的。至少当你想说一部小说很好看的时候不会只有“太赞了”这样毫无信服力的词句,想批评一部小说很无聊的时候不会只有“一点不好看”这样纯粹主观的臆断。
本文为枫影夜读 #80 James Scott Bell — 《冲突与悬念》的附录:
2022-08-20 原《每周读书》系列更名为《枫影夜读》

每一个作家都希望自己的作品能够成为畅销作品,为大众所喜爱,“畅销”不一定有深度,但是受大家喜爱的作品一般都比较畅销。悬念小说作家James Scott Bell 针对“如何写出畅销小说”写了一系列写作指导书籍,《冲突与悬念》就是其中之一(可以参见 James 官网http://www.jamesscottbell.com/styled-7/index.html)。
作者认为写作技巧是可以传授的,不能传授的部分是作家本身的个人天赋、人生阅历、激情和胸怀,是这些作家自身的特质赋予了作品更为深刻的内涵,写作技巧则是承载这些内涵的必要工具。本书是针对“写作技巧”的指导,作者认为冲突与悬念是虚构小说最重要的两个元素,冲突是小说的引擎,而悬念则让小说形成张力,提供读者阅读下去的动力。
作者提倡以“内心的情感体验”为中心去写作,有点像互联网前两年流行的“以用户为中心的设计”,只不过互联网产品要赢得用户而小说是要赢得读者。
看完这本书,有两点是印象最为深刻的:
冲突与悬念对于虚构小说(尤其是重情节的推理小说、恐怖小说)来说确实是很重要的元素。 采用书中介绍的三幕剧结构,设置好两个重要的关口,第一个把主角推入主要情节无法回头,中间每一个场景都布置好悬念给予读者充足的阅读兴趣,然后第二个把主角推入最后决战,最后做一个精彩的收尾,这样一部小说从技巧上说是很吸引人的,读者也愿意读下去。这样看来很多网络小说都有这样的套路,同样技巧下作品能否赢取读者的内心就要看作者的内涵了。
文学作品常被拿来和音乐作品类比,被认为是主观而难以量化的。但正如音乐编写有各种既定的技巧,文学作品也如是。即使不写作的读者,了解文学作品的写作技巧也是很有必要的。至少当你想说一部小说很好看的时候不会只有“太赞了”这样空洞的形容,想批评一部小说很无聊的时候不会只有“一点不好看”这样纯粹主观的臆断。
James 的这本书英文原名是:Elements of Fiction Writing - Conflict and Suspense,中译本把主次标题对调了,如果读者对于这本书感兴趣,请千万一定要读英文原版,中国人民大学出版社的中译本翻译差强人意,读者虽然可以读懂大部分内容,却在一些关键点上差之千里。比如书中援引 Raymond Chandler 的话被翻译成:
唯恐天下不乱,乃作家职责所系,责无旁贷。
而事实上 Raymond Chandler 原话是这样的:
Trouble is my business.
这样意译未免有些过度。再比如讲冲突的第二节“为冲突展开头脑风暴”(Brainstorming for Conflict) 里,”An Image” 一节被翻译成“视觉画面”,但事实上这一节讲到了 Music, Dreams, Movie Mind,这里的 Image 翻译成“印象”或者“意象”要好得多,看到这里我都完全对不上关系还以为是漏印了什么内容。最可怕的是 Conflict in Theme 一章中:
Curly in City Slickers said the secret of life was “one thing.”
被翻译成了:
《城市滑头》中的克里曾说过:生活的秘密是“一个东西”。
当然我们可以说这本书里光是引用的电影和书名的翻译就得花上许多功夫,译者的困难是显而易见的。但是我想这并不能成为翻译质量低下的借口,这是译者本来就应该做的事情。尽管这本书的翻译多有不足,但至少让更多中文读者了解了写作指导类的书籍,这件事情本身是值得称赞的。
15.06.16/中午
于 T.i.T 创意园
《冲突与悬念》一书中提及的影视小说作品请参见此文:James Scott Bell 的《冲突与悬念》中提到的影视、文学作品
2022-08-20 原《每周读书》系列更名为《枫影夜读》

因着张爱玲这句“张恨水小说中的男主角”,对这男主角究竟是怎样颇为好奇。又想张恨水是比张爱玲的年代要更久远的作家,不自觉便把他同“很无趣的民国小说”绑在了一起。却没想到《秦淮世家》这部小说很出意料之外,写作手法很是新潮,悬念丛生,颇为吸引。
故事讲述了秦淮河上一户“歌女”人家与一个上海富商斗争的事情,男主角是在夫子庙摆书摊的穷书生徐亦进。形式上小说是旧式的章回体写法,手法上却很新潮,一开场就是歌女家的唐大嫂向邻桌“不认识的兄弟”打招呼,牵出“穷书生拾金不昧”之事,进而把这么一位刚正不阿读圣贤书之人,和“养娼妓”的人家联系到了一起,读者不由兴趣盎然:两种对立的人物碰撞到一起,能擦出什么样的火花来?
随后故事又引出有倾城容貌却颇为高傲的歌女唐小春,和“出淤泥而不染”的二小姐唐二春,男主角与二小姐的情意把男主角推进事件的漩涡,再无法抽离。随着故事的发展,男主角与唐家妈间处世哲学的对立,与二小姐的感情纠葛开始产生强烈的化学反应,这时候恶势力出现了,面对绑架与压迫,唐家嫂选择了逆来顺受,而性格激烈的二小姐与正直不屈的男主角则负隅顽抗,全书在与恶势力的终极对决中达到高潮。
在今天看来这个故事可能比较普通,然而作者却妙笔生花,每个章回都埋下一个悬念,牢牢抓住读者的眼球。但是到了小说后期,作者频频切换人物视角(POV),笔墨都着落在次要人物大狗和二春身上,让冲突的紧张感损失不少,一来失却了故事的紧张感,二来主角的戏份减少,让人不免有一种对人物的感情投资没有回报的失落之感。对于小说来说,这种失策是致命的,直接让读者没了一定要读的兴趣。
本是冲着“张恨水小说的男主角”这个印象去的,最后却发现男主角其实并没有什么戏份,连故事末最有象征意义的一把火都不是他点的,令人哭笑不得。故事倒是有些意境,恶势力的贼窝被烧毁之后,原地很快又新建起一栋高楼,原先为了躲开恶势力的唐小春回到秦淮河继续卖唱,太阳照样升起,地球一样转。主角们拼上性命的斗争,不过是秦淮河上一个小水花,淹没在岁月长河之中。
秦淮河上的女人,是离不开秦淮河的。
15.06.04
本文为 www.raywenderlich.com 上的一篇教程,由枫影翻译。
原文地址 http://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift

更新记录:本教程由 Richard Turton 针对 iOS 8, Xcode 6.1 和 Swift 进行了更新。原文由团队成员 Soheil Azarpour 编写。
相信大家都有过这样令人沮丧的经验:在 iOS/Mac 应用里按下一个按钮或者输入一些文字的时候,突然间整个界面就卡住不动了。
在 Mac 上,用户只能盯着那个彩色的球不停地转圈圈,好一会儿才能继续使用你的应用。在 iOS 上,用户则期望应用应该能实时地对自己的触摸动作进行反馈。这些不够流畅的应用看起来笨重而拖沓,一般都是差评如潮。
然而保持应用流畅度却是说起来容易做起来难。一旦你的应用需要执行繁重的任务,事情就会变得复杂起来。要在 Main Run Loop 里同时执行繁重的任务并且进行流畅的响应是不可能的事情。
一个可怜的开发者对此能做点什么呢?答案就是把繁重的任务从主线程挪到另一个并发的线程上。并发意味着你的应用可以同时多个操作流(或者线程)——以此达到界面响应用户输入的同时还能执行其他任务。
NSOperation 和 NSOperationQueue 是在 iOS 上实现并发操作的一种方法。在本教程中,你将会学习如何使用这些类。我们将从一个完全不使用并发的应用开始,这个应用会看起来很迟钝,然后你将对这个应用进行重构,加入并发操作让界面变得流畅起来!
本教程的示例工程主要用于展示一个 TableView,里面是加过滤镜的图片。图片要从网上下载下来,在本地加上滤镜效果,然后在展示在 TableView 里面。
下图是这个应用的模型:

请下载本教程的示例代码:http://cdn5.raywenderlich.com/wp-content/uploads/2014/10/ClassicPhotos-Starter63.zip
注意:所有的图片都来自stock.xchng。部分图片故意拼错名字,用于测试下载失败的情况
编译运行这个工程,然后(最终)你讲看到这个应用里展示了一个图片列表。试试看滚动一下这个列表,是不是菊花一紧?

所有的动作都在 ListViewController.swift 这个类里面,而且多数都写在 tableView(_:cellForRowAtIndexPath:) 方法里。
你会发现有两个操作是特别重的:
此外,应用刚开始还从网上下载了一份图片列表:
所有这些操作都是在主线程做的。由于主线程是用于更新UI,同用户交互的线程,阻塞了主线程就会让整个应用看起来很卡。你可以使用 Xcode 的 gauges view 查看应用的执行参数。

你可以看到 Thread 1 (也就是主线程)的 CPU 占用情况。如果想要查看应用的更多详情,你可以使用 Instruments,不过关于 Instruments 可以用一整篇文章来讲了。
OK,现在是时候进入优化部分了。
开始教程正文之前,这里有几个技术概念需要明确一下:
注意:在 iOS 和 OS X 中,多线程功能是由 POSIX Threads API(或者说 pthread)提供的,属于操作系统的一部分。这是一个比较底层的 API,很容易犯错,而且最糟糕的事这些错误是很难被察觉到的!
Foundation 框架里有一个类叫做 NSThread,相较而言要比底层接口好用多了,但是管理基于 NSThread 的多线程还是相当令人头疼。NSOperation 和 NSOperationQueue 则是更高级的类,提供更加简单的多线程管理接口。
下图中,你可以看到任务,线程和进程三者的关系:

可以看到,一个进程可以包含多个可以执行的线程,一个线程则可以同时执行多个人物。
在上图中,线程 2 执行读文件的操作,同时线程 1 则执行界面的展示工作。这跟 iOS 代码的结构很相似——主线程执行界面相关操作,子线程则负责耗时操作,比如读文件,网络操作等等。
你可能早已听过 Grand Central Dispatch (GCD) 的大名了。GCD 包含了语言特性,运行时库和系统优化,给 iOS 和 OS X 的并发和多核编程提供了一套系统而且强大的接口。想要了解更多关于 GCD 的内容,可以参考我们的文章:Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial。
NSOperation 和 NSOperationQueue 是基于 GCD 之上的。一个通用的规则,苹果建议尽量使用最高级别的抽象接口,只有经过仔细权衡后觉得确实更底层的接口,才往下层走。
下面是一个 NSOperation 和 GCD 的一个简单的比较,便于你选择应该使用哪一种接口:
由于本文的示例中将对 Table View 进行优化,基于提高性能和减少功耗的考虑,你需要在一个图片 cell 被滚动出屏幕外的时候能够取消对这个图片正在执行的操作,所以我们将使用 NSOperation 来做这个优化。即使所有的操作都是在后台线程做的,如果有几十个耗时操作一直在后台队列中无法取消,对性能也是一种打击。
现在是时候完善一下那个没有多线程的应用模型了!如果你仔细观察这个一开始的模型,你会发现有三个地方可以被多线程优化。只要把这三个地方拆解到其他线程,主线程就可以减轻不少压力,提高流畅度。

为了突破应用的性能瓶颈,你将有一个主线程用于实时反馈用户输入,一个子线程专门用来下载图片,还有一个子线程用来对图片添加滤镜效果。在新的模型中,这个应用会从主线程启动,然后先加载一个空的 Table View。与此同时,应用将启动一个子线程用于下载数据源。
一旦数据源下载完,你将通知 Table View 进行 Reload。Reload Table View 是 UI 操作,所以一定要在主线程执行。在这时, Table View 就知道有多少行数据要进行展示,也知道每一行的图片对应的 URL。但是 Table View 还没拿到真正的图片数据!所以这个时候去下载所有图片是不明智的,你只需要看得到的那几张图片就可以了。
这里有什么可以优化的点呢?
一个更好的模型是,只下载显示在屏幕上的那几张图片。所以你的代码首先要问 Table View 要能看到的那些行,然后开始下载的工作。同时,滤镜线程在没有真实图片之前也无法开始工作。所以,在图片还没有下载完之前,滤镜线程不应该被启动。
要让应用看起来更流畅,你的代码应该要能在图片下载完就立刻显示出来。然后再启动滤镜线程,等滤镜加载完毕再更新 UI 显示添加过滤镜的图片。下面这个图片展示了完整的流程:

为了达成这些目标,你首先需要跟踪正在下载、已经下载完的图片,还要知道图片是否已经加过滤镜了。然后你还需要跟踪每一个操作的状态,以便在用户滚动界面时可以取消、暂停或者继续之前的操作。
Okay!现在我们已经准备好开始写代码了!:]
打开示例工程,添加一个新的 Swift 文件,名为:PhotoOperations.swift。添加以下代码:
// This enum contains all the possible states a photo record can be in
enum PhotoRecordState {
case New, Downloaded, Filtered, Failed
}
class PhotoRecord {
let name:String
let url:NSURL
var state = PhotoRecordState.New
var image = UIImage(named: "Placeholder")
init(name:String, url:NSURL) {
self.name = name
self.url = url
}
}
[/sourcecode]
注意:请确保 import UIKit 这句在文件的顶部。默认情况下,Xcode 会帮你引入 Foundation 文件的。
这个简单的类将代表每一个展示在应用里的图片,同时包含图片的状态(初始状态为 .New)。图片默认是一张占位图。
为了追踪每一个操作的状态,你需要另一个类。把下面这个类的定义加到 PhotoOperations.swift 底部:
lazy var filtrationsInProgress = [NSIndexPath:NSOperation]()
lazy var filtrationQueue:NSOperationQueue = {
var queue = NSOperationQueue()
queue.name = "Image Filtration queue"
queue.maxConcurrentOperationCount = 1
return queue
}()
}
[/sourcecode]
这个类包含了两个 Dictionary,用来追踪 Table View 里每一行的下载和滤镜状态,同时还有两个 Operation Queue 用于图片下载和滤镜操作管理。
所有的值都被声明为 lazy create,也就是说只有等到第一次用到这个值它才会真正被初始化。这也将是应用的性能得到提升。
创建一个 NSOperationQueue 也是挺直观的。给 NSOperationQueue 命名是很有用的,这个名字会在 Instruments 或者 debugger 里面显示出来。出于本文的教学目的,这里最大并发数 maxConcurrentOperationCount 被设为 1,这样你可以清楚地看到这些操作一个接一个地往下走。你也可以改成让队列本身去决定最大并发数,这将更大地提升你的应用性能。
那么队列本身是怎么决定最大并发数的呢?好问题!:]这是由硬件来决定的。默认情况下,NSOperationQueue 会自己计算出对当前平台来说最好的决策,然后启动尽可能多的线程。
试想一下下面这个例子。假设这时候系统出于空闲状态,有很多可用资源,那么这个队列可能会启动大概 8 个并发线程。下一次你启动这个 App 的时候,有可能系统正在处理其他操作,那这个队列可能就只有 2 个并发线程。在这个示例工程里,由于你设置了最大并发数为 1,所以同时只会有一个操作在执行。
注意:你可能觉得奇怪,为什么我们要跟踪所有下载中和等待下载的操作,队列本身有一个 operations 属性可以返回所有操作,为什么不直接用这个就好了?在这个项目中,这么做可能不太高效。因为你必须把 table view 的行数和操作关联起来,这么做意味着你每次都要循环一遍整个数组去查找属于哪一行,使用 Dictionary 把 indexPath 作为 Key 存起来则可以很快地找到对应的操作。
接下来我们要对下载和滤镜操作进行管理了。把下面这些代码加到 PhotoOperations.swift 文件底部:
//2
init(photoRecord: PhotoRecord) {
self.photoRecord = photoRecord
}
//3
override func main() {
//4
if self.cancelled {
return
}
//5
let imageData = NSData(contentsOfURL:self.photoRecord.url)
//6
if self.cancelled {
return
}
//7
if imageData?.length > 0 {
self.photoRecord.image = UIImage(data:imageData!)
self.photoRecord.state = .Downloaded
}
else
{
self.photoRecord.state = .Failed
self.photoRecord.image = UIImage(named: "Failed")
}
}
}
[/sourcecode]
NSOperation 是一个抽象类,是为了继承而设计的。每一个子类代表一个特殊的任务(如前所述)。
上面代码里各行注释的含义如下:
接下来,你需要创建另一个 Operation,用于执行滤镜操作!把下面代码添加到 PhotoOperations.swift 文件里:
init(photoRecord: PhotoRecord) {
self.photoRecord = photoRecord
}
override func main () {
if self.cancelled {
return
}
if self.photoRecord.state != .Downloaded {
return
}
if let filteredImage = self.applySepiaFilter(self.photoRecord.image!) {
self.photoRecord.image = filteredImage
self.photoRecord.state = .Filtered
}
}
}
[/sourcecode]
这个看上去很像下载 Operation,只是用图片添加滤镜(这里用了一个还没实现的函数,所以会有一个编译错误)代替了下载操作。
下面我们给 ImageFiltration 类添加图片滤镜操作的代码:
if self.cancelled {
return nil
}
let context = CIContext(options:nil)
let filter = CIFilter(name:"CISepiaTone")
filter.setValue(inputImage, forKey: kCIInputImageKey)
filter.setValue(0.8, forKey: "inputIntensity")
let outputImage = filter.outputImage
if self.cancelled {
return nil
}
let outImage = context.createCGImage(outputImage, fromRect: outputImage.extent())
let returnImage = UIImage(CGImage: outImage)
return returnImage
}
[/sourcecode]
这里的滤镜实现跟之前 ListViewController 中的实现是一样的,只是搬到了一个 Operation,从而可以在后台执行这个操作。同样的,你还是要经常检查任务是否已经被取消了,最佳实践是在耗时操作之前和之后各检查一次。一旦滤镜添加完成,你就可以设置 photo record 的状态了。
牛逼!现在你已经拥有执行后台任务的所有必备工具了,是时候回到 View Controller 中修改你的旧代码了。
回到 ListViewController.swift 文件,删掉 lazy var photos 声明,添加下面的声明:
如此你将有一个照片对象的数组和一个等待任务的队列。
下面我们添加一个新的方法用于下载图片信息的 plist 文件。
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {response,data,error in
if data != nil {
let datasourceDictionary = NSPropertyListSerialization.propertyListWithData(data, options: Int(NSPropertyListMutabilityOptions.Immutable.rawValue), format: nil, error: nil) as! NSDictionary
for(key : AnyObject,value : AnyObject) in datasourceDictionary {
let name = key as? String
let url = NSURL(string:value as? String ?? "")
if name != nil && url != nil {
let photoRecord = PhotoRecord(name:name!, url:url!)
self.photos.append(photoRecord)
}
}
self.tableView.reloadData()
}
if error != nil {
let alert = UIAlertView(title:"Oops!",message:error.localizedDescription, delegate:nil, cancelButtonTitle:"OK")
alert.show()
}
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
}
[/sourcecode]
这个方法创建了一个异步的网络请求,请求结束后在主线程回调。文件下载后会被解析成一个 NSDictionary 对象,然后再解出来一个 PhotoRecord 数组。这里你不会直接使用到 NSOperation,而是用到主队列 NSOperationQueue.mainQueue()。
在 ViewDidLoad 方法中调用这个下载函数。
接下来,找到 tableView(_:cellForRowAtIndexPath:) 然后替换成下面的实现:
//1
if cell.accessoryView == nil {
let indicator = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
cell.accessoryView = indicator
}
let indicator = cell.accessoryView as! UIActivityIndicatorView
//2
let photoDetails = photos[indexPath.row]
//3
cell.textLabel?.text = photoDetails.name
cell.imageView?.image = photoDetails.image
//4
switch (photoDetails.state){
case .Filtered:
indicator.stopAnimating()
case .Failed:
indicator.stopAnimating()
cell.textLabel?.text = "Failed to load"
case .New, .Downloaded:
indicator.startAnimating()
self.startOperationsForPhotoRecord(photoDetails,indexPath:indexPath)
}
return cell
}
[/sourcecode]
请花点时间通读一下下面的注释详解:
现在你可以把 ViewController 里面的 applySepiaFilter 删掉了,添加以下代码,用于启动一个 Operation:
这里,你将把一个 PhotoRecord 和 IndexPath 作为参数传入,基于图片的状态,你可以选择启动下载或者滤镜 Operation。
注意:用来下载和添加滤镜的方法是分开实现的,有可能有些图片已经下载完了,然后被滚出屏幕外了,这时候图片滤镜还没加上。所以下一次用户滚动到同一行的时候,你不需要重新下载图片,只要加上滤镜就行了!牛逼烘烘!:]
现在你要实现上面调用到的方法了。还记住你创建了一个自定义的类PendingOperations 用来跟踪 operation吗?现在你可以用上这个类了!添加下面的代码:
//2
let downloader = ImageDownloader(photoRecord: photoDetails)
//3
downloader.completionBlock = {
if downloader.cancelled {
return
}
dispatch_async(dispatch_get_main_queue(), {
self.pendingOperations.downloadsInProgress.removeValueForKey(indexPath)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
})
}
//4
pendingOperations.downloadsInProgress[indexPath] = downloader
//5
pendingOperations.downloadQueue.addOperation(downloader)
}
func startFiltrationForRecord(photoDetails: PhotoRecord, indexPath: NSIndexPath){
if let filterOperation = pendingOperations.filtrationsInProgress[indexPath]{
return
}
let filterer = ImageFiltration(photoRecord: photoDetails)
filterer.completionBlock = {
if filterer.cancelled {
return
}
dispatch_async(dispatch_get_main_queue(), {
self.pendingOperations.filtrationsInProgress.removeValueForKey(indexPath)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
})
}
pendingOperations.filtrationsInProgress[indexPath] = filterer
pendingOperations.filtrationQueue.addOperation(filterer)
}
[/sourcecode]
Okay! 下面这个列表会告诉你这段代码干了些啥:
给图片添加滤镜的操作也是一样的模式,除了使用 ImageFiltration 和 filtrationsInProgress 来追踪任务之外。作为练习,你可以自己尝试重构这部分代码,提取重用部分 :]
最后,你成功了!现在你的工程已经完整了。编译运行一下看看!现在滚动列表将不再卡顿,App 在看得见图片的时候才开始下载和添加滤镜,体验流畅无比!

这难道不是很酷吗?你可以看到小小的努力可以让你的应用变得更加流畅——用户将获得更多乐趣!
能看到这里已经很不容易了!你已经让这个项目优化了许多。但是,我们还是有一些细节可以进行调整。你想要的是变成一个伟大的程序员,而不只是一个好程序员。( You want to be a great programmer, not just a good one!)
也可能已经注意到当你滚动列表把图片滚出屏幕外的时候,那些任务还在不停地下载和添加滤镜。如果你滚得很快,队列将被塞满,滚到底部的时候那些图片要等很久才能出现。理想情况下,我们应该取消那些不在屏幕里的任务。
你不是已经添加了“取消”的代码了吗?现在是时候用上他们了!:]
回到 Xcode,打开 ListViewController.swift。找到 tableView(_:cellForRowAtIndexPath:) 的实现,给 startOperationsForPhotoRecord 的调用包上一个条件判断:
这里你让 Table View 只在不滚动的时候才开始下载。这两个属性其实是 UIScrollView 的属性,UITableView 是 UIScrollView 的子类所以可以直接用。
接下来,要实现 UIScrollView 的 Delegate 方法:
override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// 2
if !decelerate {
loadImagesForOnscreenCells()
resumeAllOperations()
}
}
override func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
// 3
loadImagesForOnscreenCells()
resumeAllOperations()
}
[/sourcecode]
这段代码做了这么件事:
现在,我们把漏掉的实现加回 ListViewController.swift 文件中:
func resumeAllOperations () {
pendingOperations.downloadQueue.suspended = false
pendingOperations.filtrationQueue.suspended = false
}
func loadImagesForOnscreenCells () {
//1
if let pathsArray = tableView.indexPathsForVisibleRows() {
//2
var allPendingOperations = Set(pendingOperations.downloadsInProgress.keys.array)
allPendingOperations.unionInPlace(pendingOperations.filtrationsInProgress.keys.array)
//3
var toBeCancelled = allPendingOperations
let visiblePaths = Set(pathsArray as! [NSIndexPath])
toBeCancelled.subtractInPlace(visiblePaths)
//4
var toBeStarted = visiblePaths
toBeStarted.subtractInPlace(allPendingOperations)
// 5
for indexPath in toBeCancelled {
if let pendingDownload = pendingOperations.downloadsInProgress[indexPath] {
pendingDownload.cancel()
}
pendingOperations.downloadsInProgress.removeValueForKey(indexPath)
if let pendingFiltration = pendingOperations.filtrationsInProgress[indexPath] {
pendingFiltration.cancel()
}
pendingOperations.filtrationsInProgress.removeValueForKey(indexPath)
}
// 6
for indexPath in toBeStarted {
let indexPath = indexPath as NSIndexPath
let recordToProcess = self.photos[indexPath.row]
startOperationsForPhotoRecord(recordToProcess, indexPath: indexPath)
}
}
}
[/sourcecode]
suspendAllOperations 和 resumeAllOperations 的实现都很直观了。NSOperationQueues 是可以被挂起的,设置 suspended 为 true 就行了。这样整个队列里所有的任务都会被挂起——你没有办法只挂起单个任务。
loadImagesForOnscreenCells 稍微复杂一点:
编译运行一下,现在你应该有一个更加流畅,资源管理更加合理的应用了!你们的掌声在哪里!

注意到现在只要你停止滚动 Table View,当前屏幕上的 Cell 就会立刻开始下载了。
这里有一个完整的项目工程可供大家下载。
如果你已经完成了这个项目而且确实花时间理解了所有的东西,那么恭喜你!相比你刚开始看这篇文章,你已经是一个更有价值的 iOS 开发者了!多数开发团队都会为拥有一个或两个真正懂得这些东西的开发者而感到幸运。
但是要注意——就像多层嵌套的 block 一样,无理由地滥用多线程也会让你的代码变得难以维护。多线程可能会引入很多难以察觉的bug,只在网络差的时候,设备性能特别好的时候,或者跟你写代码的机器的 CPU 数不一样的时候才会出现。你必须很小心地测试这些代码,经常使用 Instruments(或者你自己喜欢的工具)来确认引入多线程确实让性能得到了提高。
这篇文章里没有提到,Operation 还有一个很有用的特性,就是依赖(dependency)。你可以创建一个依赖于其他 Operation 的 Operation。这个 Operation 只有在那个依赖的 Operation 全部执行完了它才会启动。举个例子:
filterOperation.addDependency(downloadOperation)
[/sourcecode]
要解除依赖关系只要一句代码:
如果用上依赖关系,是否可以简化本文介绍的这个工程呢?你可以用上这个新技能自己试一下 :] 值得注意的是,有依赖关系的 Operation 即使被依赖的 Operation 被取消了,它也依然会被启动,你需要随时牢记这一点。
2022-08-20 原《每周读书》系列更名为《枫影夜读》

还在念书时曾在学校的书店里多次见过《东方快车谋杀案》的封皮,却一直记不住作者的名字。这周末因缘际会,竟一口气读了她三部小说,心中颇感敬佩。
提到英国的侦探小说就不得不提柯南道尔,笔下的福尔摩斯比作家有名的人物,阿加莎克里斯蒂便是与他齐名的侦探小说家,笔下也有波罗侦探与马普尔小姐这样的系列人物。兴许与她创作的时间在 1920——1976 这段时间有关,枫影对这位“侦探小说女王”并不十分熟悉,然而读完《悬崖山庄奇案》,已被其精妙的情节构思所吸引。阿加莎是一位高产的作家,创作生涯几乎每年都有一到两部作品出版,留下的小说作品也有百余部之多。于是枫影又读了同属“波罗侦探系列“”的代表作:《罗杰疑案》与《东方快车谋杀案》。
这三部作品都不算薄,读起来却奇快。阿加莎几乎没用一点高级修饰,人物对话也几乎不描述动作与表情,写作手法更是几乎都一个套路:开场人物——案件发生——推理过程——揭开谜底,但是由于情节设计极为巧妙,小说的结局总能有惊人的反转。至于翻译质量,得益于阿加莎通俗易懂的语言风格,新星出版社出版的这几部作品可读性都极佳,我相信还没读到的其他作品也是一样的。
如果说东野圭吾的推理作品如新世纪福音战士,带有深刻的人性挖掘和阴暗的社会背景,那么阿加莎的作品就是哆啦A梦,有着巧妙的情节编排和明快的抒写笔调。推理小说是强调情节设计的文体,然而东野圭吾的小说却寄予了超出推理本身的深层寓意,比如《白夜行》,是社会的阴暗导致了主角人格扭曲,行事邪恶,唯有心中的爱才是真诚,又比如《嫌疑犯x的献身》,除了推理情节上石神与伽利略的精彩角力之外,更充满了法律与公正的冲突,罪恶与现实的无奈,到头来谁才是真正的残忍,让故事本身超出了侦探小说的属性。
反观阿加莎的作品,她并没有给笔下的故事注入太多沉重的现实,波罗只是个自命不凡矮个子名侦探,他拥有的武器就是他冷静的推理能力,他的凶手都是乖乖呆在那里等着他非凡的推理结束后揭露出来的,没有凶险的抗争也没有血腥的一面(真要有的话波罗应该牺牲很多次了),只靠她精妙的情节设计,让读者拍手叫好。
我想这种语言平易近人,情节扑朔迷离的特色正是其畅销的原因。她喜欢在作品中铺陈所有已知的证据,侦探迷们大可自行推理还原事实真相,再往后读加以验证,而懒人如我则可直接跃进到结局,看大侦探召集所有人宣布推理结果,感受反转结局的魅力。东野的作品由于其附加属性往往较为沉重,有些作品如《嫌疑犯x的献身》可以再看一遍感受内心的震动。而阿加莎的作品则更像如茶余饭后的闲适读物,长途旅行备上一本最好打发时间,一旦解开谜底就不会再看第二遍了。
15.05.31/夜
于自居
2022-08-20 原《每周读书》系列更名为《枫影夜读》

九莉快三十岁的时候在笔记簿上写道:“雨声潺潺,像住在溪边。宁愿天天下雨,以为你是因为下雨不来。”
读完《小团圆》,已分不清盛九莉与张爱玲了,在此之前我对张爱玲知之甚少,只知她是有名的作家,有过不如意的爱情,却万没想到盛九莉即是张爱玲!内心颇为震动。
这位民国的女作家最终在美国逝世,留下的许多作品如《倾城之恋》、《红玫瑰与白玫瑰》等早已家喻户晓,然则《小团圆》却是特别的一部。首先这是一部半自传体小说,女主角就是张爱玲(盛九莉),小说里的张之雍就是她的前夫胡兰成,还有潇洒的母亲与姑姑,都是张爱玲人生中极为重要的人物,读《小团圆》就是读作者曲折的一生。
其次,这部作品在张爱玲辞世 13 年后方得以出版,只因她曾在遗嘱中声明:
(《小团圆》小说要销毁。)这些我没细想,过天再说了。
所以此书的出版曾有微议,然则其中原委宋以朗所写的《前言》已有详解,此处不再赘述。只是这段曲折又让本书添了些许神秘。
且说回《小团圆》,文首的引文在书中首尾各出现了一次,正巧不久前看了新海诚的《言叶之庭》,也是同雨相关的爱情故事:男女主人公以雨为借口,相约在雨亭。“若明日下雨,我便会来。”他们盼雨,九莉也盼,却只盼的一个借口,一声慰藉。
多么苍凉。
小说四处充溢着这种张爱玲式的苍凉。读前两章时总觉得有些过于平淡,直到张之雍的出现,才使故事世界有了波澜。然而轻描淡写正是她的风格,常常不经意间就抛出一句嘲讽,仿佛嘴角一丝冷笑:
自己生活贫乏的人才喜欢刺探别人的私事。
张爱玲的这种风格常使人迷失,这种迷失要归功于一笔带过的转场和突如其来的情感。
比如时空的转场,常常上一句话里人们还坐在厅室吃茶聊天,下一句话就不知过了多少时候,换了个什么地方,只人物还是那些人物,谈论的或许已是别的什么。
又比如人物的出场,在《小团圆》里,仿佛无论何时何地都可以冒出来一个人名,说了一句什么话,连脸面都不大清楚,就已悄然退场。甚至同一个人物在邻近的几句话里就被换了好几个称呼(比如二婶——母亲——蕊秋),你得回过头去想一想,才恍然大悟:噢,原来是她。
但是这种节约的写法却让频繁的转场之间无缝对接,仿佛一镜到底,也是神来之笔。
至于突如其来的情感,有时也令人摸不着头脑。明明盛九莉并没有表露出她深爱张之雍的迹象,却突然一个眼神,内心就澎湃了起来:
她崇拜他,为什么不能让他知道?
这大约也正是张爱玲小说吸引人的地方,就像个谜一样的少女,你自以为借着作者的视角看透了她的内心,却原来什么也没看懂。你以为她冰冷冷不想理睬,回过头来却一个香吻。多么千转百转,多么折磨人心!
二者结合让张爱玲的文笔有如涓涓细流,絮絮叨叨,似耳语,似檐雨,叮叮咚咚,淅淅沥沥,似乎轻飘飘,软绵绵,却不知在何时,早已渗入你的内心,一阵感动。这就是张爱玲式的笔触,无孔不入,细而无声。
《小团圆》就这么在雨声潺潺中落幕,如梦似幻,以全知的视角俯视九莉的人生。这里面有九莉学生时代的迷懵,有后来曲折的爱情,有在美国打胎的恐怖,有她母亲的冷暖,有她姑姑的相依。小团圆并不小,“她”是张爱玲一生的写照,是张爱玲最为深知的一切。
2022-08-20 原《每周读书》系列更名为《枫影夜读》

“黑,真他妈的黑。”
2010 年刘慈欣的《三体3》出版,在推特上曾引发过一阵热潮,当时我很好奇大家都在讨论的“三体”到底是什么,于是便看了《三体》第一部,那时候,《每周读书》刚写到第六篇。
一晃眼 5 年过去了,终于把三部曲全部看完。放下书本,蓝色星球在广袤无垠的黑暗空间中悬浮的影像却久久不能消散,以极高智慧生物的上帝视角回望银河系,回望整个宇宙的场景每每不能忘却。在地铁上捧着张爱玲的《小团圆》却读不下去,思绪竟无法重返地球。
三体中的舞台大,真他妈的大,三体中的世界黑,真他妈的黑。作为一部太空史诗,《三体》的世界构筑在宇宙文明的生存竞争之上,作家把这个基本定律总结为两点:
讨论这两点在现实中是否成立是没有意义的,就像讨论阿西莫夫的机器人三大定律是否成立一样。如果读者并不接受这种前设,那么作品对于读者已兴味全无,而一旦接受这种前设,作家构筑的世界就是一个逻辑自洽的世界,在这个世界之上,你尽可天马行空,自由徜徉。
提到《三体》,读者印象最深刻的大概是作品的“宏大”,这种“大”体现在时间与空间的宇宙尺度上。除开第三部结尾时敷衍式地几句话写完几亿年的时间,单论情节集中的部分,时间跨度也在几百年上下,空间跨度则在太阳系到三体的半人马星系左右,是远超出普通人类一生的时间,是难以想象的太空的广度。于是作品带来的震撼也是成倍的,但这种大跨度也容易给读者带来困惑。
所以作家选择了以公元纪年的人物作为主角,并且到第二部故事发展开始加速时,给予了人物“穿越时间”的能力——冬眠。第二部的主角罗辑就利用冬眠直接跃进到与三体人决战的时刻,到了第三部,故事时间加速更快,主角程心频频进入冬眠状态,只在关键情节触发的时候才苏醒。如此一来,主角与读者拥有相近的知识和体验,故事中“未来”的技术以读者的角度进行解释就自然而然,甚至无关紧要的部分可以用主角的视角直接略过。这点在第三部体现尤其多:尽管时间都在“未来”,但大部分出场人物都是公元人,似乎“未来人”仅仅是作为“群体演员”而存在。
这种人物刻画不足也是《三体》为人诟病之处,毕竟《三体》的“硬科幻”部分精雕细琢无可挑剔,大情节上跌宕起伏,虽是俗套的文明生存抗争,却屡屡出人意料,所以只有人物部分是最好下手开骂的了。这就好像普通人没接触过代码与产品设计,想要批评一个产品做得不好,往往只能动用“怎么也懂一点”的“审美能力”来指栽“配色难看”云云了。
不过《三体》中的人物刻画确实差强人意,尤其是主要女性的角色,苍白无力毫无血色。比如第二部中罗辑的梦中情人庄颜,作者极力想要打造一个小龙女式的超凡脱俗的完美女性,却只给出了一个干巴巴极不自然的提线木偶,与金庸的小龙女相去甚远,最终这位女性角色也是草草收尾,一笔带过。相比之下,第三部的主角程心,虽然被大批读者围攻,形象也还是那么单薄比旁白好不了多少,但至少这位女主角能够给读者留下“恨”的印象,已算不错的成就。不过我想,《三体》中构筑的宇宙已经这么黑,这些光明的女性角色再白纸也是必须的平衡。
这个黑暗的宇宙中,有无法想象的重复着空旷的四维空间,有展开起来无穷无尽的二维平面,有无数个“神”一样的智慧文明,然而根据《三体》的基本设定,这个世界只能是绝望的——宇宙就是一片黑暗森林,走在森林中的人们手中拿着枪,一旦发现目标,不管是老人小孩还是老虎猛兽,统统一枪毙命。《三体》故事越往后就越绝望,太阳系终于消亡在二维空间之中,作者再不吝惜时间,故事发展加速加速再加速,短短几句话之间穿越几百亿年。我想大约作者也绝望了,再怎么挣扎下去,结局都是一样的,宇宙终于会在黑暗森林之中死去,是绝对的死去。
《三体》无疑是一部浪漫主义作品,它如同一部精心策划的大片,用尽一切人类能够达到的技术水平雕琢画面,再普通的战争题材也好,一旦把故事搬到时空超乎想象的太空之中,带来的震撼都是加倍的,然而作者的悲观主义也加倍了。我不去想这种黑暗森林的设定是否符合现实,但假定我是面对黑暗森林的地球人,我大概会同那些“群众演员”一样一时狂欢一时悲恸,面对无法回头的星际远航,我也会同飞船上的军人一样决绝地消灭自己的战友,这就是黑暗森林的悲哀,站在这个角度上,我觉得故事的主角们已经是“神”了,他们代表的是人类的道德律,是人类独有的“爱”,若失了这些近乎顽固的坚持,人类将不再是人类。
然而我们毕竟不是主角。
黑,真他妈的黑。
15.05.23/凌晨
于自宅
我读的是 z.cn 的 Kindle 版《三体全集》
2022-08-20 原《每周读书》系列更名为《枫影夜读》

三岛由纪夫的同性恋倾向是他神秘魅力的一部分,《假面的告白》就是他的成名作。尽管作家至死都没有公开承认过自己的性倾向,并且娶妻生子,但是这部充满细腻的同性心理描写的作品却让人觉得——至少在写作当时——作家与主角是有着相同的心情的。
这种对男性身体的迷恋与欲望,在作家笔下是如此细腻而费解,令人不由眉头紧蹙。然而皱着眉头把这部作品看完,从头做读书笔记的时候,却发现这部作品出奇的美丽。
我个人很喜欢阅读写得漂亮的文字,具体地说,是像诗一般的优雅的文字。三岛的文字就有着诗一般的优雅。这种写法有个好处,就是可以轻易做到隐晦而不突兀。但与此同时流畅自如就成了一个挑战。能放不能收是很多现代诗歌容易犯的毛病,在小说里使用诗意的写法,往往会因此让作品变得晦涩,幸好三岛不会。
三岛的隐晦的写法有其必要性,其一是体现在对抽象事物的具象表达上。三岛长于人物内心世界的细致刻画,多用意味深长的镜头来演绎人物的思考,也常用优雅的比拟,把不可捉摸的思维投影成美丽的画面,色彩斑斓,明暗有度。诗性是三岛华丽的武器。
另一个必要则是作家对不能露骨表达的事物采用的委婉的手法。三岛多写禁忌题材,性倒错,性描写,以恶为美,反传统,反道德,这些话题似乎总能见诸三岛笔下。这让我想起欧洲的绘画艺术的历史,在反前人理念的基础上,艺术家们不停地翻涌推动新的艺术的诞生,从带有实用目的的装饰壁画到文艺复兴,再到古典主义,现代主义,自然主义,新古典主义,后现代主义……艺术家们力图挣脱“没什么可画”的无奈,而最佳的武器就是否定。仔细想想,音乐、物理、文学……人类的知识岂不都是如此。人类就是在否定前人的经验中不断地进步啊!
《假面的告白》完成于 1949 年,这部作品在保守年代引发轩然大波,即便是今天,同性也还远没有到被社会舒服地接受的地步,小说的大胆与突破在当时可想而知。
这部被称为“半自传体”小说的作品,与三岛的人生经历有许多相似之处,小说第一章所描述的幼年时期基本就是以三岛自身为原型:出生在一个没落的贵族家庭,自小被家中掌握大权的祖母强行抱养,在过度的保护中成长,身体孱弱,性格阴柔,也因此产生“性倒错”而深感苦恼。
由此苦恼展开了小说最令人头疼的第二章,着重描写对男同学的迷恋,以及主角对性倒错的认识,多用幻想写法,深沉难解。然而第三章开始主角竟然试图去爱一位女子——园子,这表明主角试图改变自己的“不正常性”,去适应世人的“正常”。甚至发出:“人世间是否有纯粹的精神的爱恋?”的疑问,然而从主角的试验结果来看,答案是否定的。
如果第三章是主角在精神上企图去爱女人的探索,那么第四章就是生理上企图对女性产生欲望的尝试。他甚至决心去招妓,在失败之后,主角终于确信了自己的“不正常性”是不可能改变了。后来遇上了已为人妻的园子,他们频频见面,却只是聊天。最后在园子的“你是否已经……”的诘问中沉默告终。
书名是《假面的告白》,我以为主角会在最后摘下假面,然而不,主角一直活在自己的演戏里,并且“发誓对导演忠诚”。
看完这本小说,再回想《金阁寺》,有些想不通的地方就豁然开朗了。设若金阁寺所代表的美就是人世间通常的“男女之恋”的美,而沟口却屡屡和女人在关键时刻就浮现金阁寺的幻影而失败,那么金阁就是假面向往而不可得的女性了。金阁寺中的沟口或许没有同性的倾向,但是他渴望金阁,憎恶金阁的双重心理却与假面向往女性却又屡屡失败的心情是一致的。最后沟口决定烧掉金阁,可以说就是假面试图接触女性,回归“正常”的努力。
最后沟口终于烧掉了金阁,坐在草地上吐出烟圈叹了一句:“我要,活下去”。这大约就是假面屡试屡败,却始终没有摘下面具,向生活妥协的无奈。可以说作家在同性这件事情上获得了无穷的源泉,他巧妙地把这些心理以另一种形式替换了展现出来,但根源其实一致的。
1949 年《假面的告白》发表。
1956 年《金阁寺》发表。
1958 年三岛由纪夫与平冈瑶子结为夫妻。
15.05.05/中午
于 T.i.T
本书购于广州 1200 Book Shop,这是一家 24 小时书店,位于天河体育东路,店面不大,藏书亦不算多,胜在 24 小时营业,有按出版社分类的书架,形式颇为新颖。
2022-08-20 原《每周读书》系列更名为《枫影夜读》

从书架上拣一本最薄的三岛由纪夫的小说买下,正好是《纯白之夜》。上海译文出版社出版的这套三岛的合集甚合我心,装帧简约,朴素干净,最赞的是这本小说没有莫名其妙的前言和后记,真是难得。
小说一个晚上就看完了,在三岛一如既往的细腻与优雅中度过,真好。同《金阁寺》那种绚烂的美的重构相比,这部小说要粗浅得多。尽管作家借小说人物发出了性与爱分离的思考,却只是蜻蜓点水,更像是炫示技巧的小品。
故事以战后的日本为背景,围绕一对中产夫妇(恒彦与郁子)展开。在这个平静而“幸福”的家庭里,由于第三者楠的插入引发了一阵波澜。可以说这种故事在今天已是被写烂了的题材,但是作家高明的地方就在于,通过细致入微的人物心理的描写来推动剧情的发展,情节在这部作品里面成为了思想的附庸。全书的笔墨着重在描写郁子复杂多变,渴望与抑制渴望的二律背反的心理波折。作家笔下的人物都是多思而敏感的,每个人物心中隐晦的恶的人性,与各不相同的性格,在作家娴熟的技巧下被一一解构,重塑成鲜明饱满的角色。
作家的技巧在这部作品中展示得淋漓尽致。通感(联觉)与比喻是其最擅长的武器,这种朴素的技巧把敏锐的洞察翻译成通俗的表述,令读者不时有心中一亮,“啊,就是这样”的感觉。比如郁子初次收到楠的情书是,那种期待渴望又试图隐瞒的心情:
如此说来,是因为郁子很久没有变成如此孩子气的好奇心的俘虏了。就像得到点心的孩子一样,想快点回家打开手提包看看的好奇心,眼下正是这一点支配着她,驱使着她热情四溢。
又比如文中对故事转折的暗示:
陷入这种禁欲主义的令人喟叹的孩子,要是他枕边的点心不给老鼠拖走,它是很少会回心转意的。
这些巧妙的比喻胜过直抒百倍,至于通感的运用,则多表现在风景描写与心理波动的穿插上,以一种蒙太奇式的手法,展开一个美绝的镜头,让画面犹如有了背景乐而生动起来:
这期间,脸色苍白的楠夫人盛装丽服的身影总在郁子的脑海里萦绕不去。倒是在黄昏的坡道上往下跑时发出清脆响声的载重马车,打破了这一幻影。
又比如:
仿若不知为何阴沉下来的旷野,鸟儿一掠而过的影子。
作家熟练的文笔,向读者展示了一幅幅美丽的画面,使人物内心的波澜细腻而不空洞,小说就这么在柔美的心理曲折中步步推进。
然而整体来说,这部作品有思考却没有答案,丈夫恒彦作为一个重要的角色,却仿佛被架空了,略显苍白。最后的主角的自杀,虽有过一些前置铺垫,却仍显得仓促而意味不明。所以假使这部作品可谓是不错的闲适读物,挺好的技巧学习之作,但作为严肃的文学作品来看待,则略显浅薄了。15.04.28/下午
于 T.i.T 创意园
2022-08-20 原《每周读书》系列更名为《枫影夜读》

决绝地合上诗集的瞬间,薄暮的霞光正好漫上鞋底。读余秀华的诗,你找不到何其芳的画梦的技巧,也找不到徐志摩的翡冷翠的高雅。但是有什么所谓呢?
已是十分难得的干净与诚挚了。
刘年的后记无疑是这部诗集最大的败笔,充满了文人的自以为是的酸气和莫名其妙的傲气。然而我却十分赞同这个观点:诗歌作为一种小众的文体,在今天已不仅仅是衰落,诗歌已经沦为戏谑与嘲弄的对象,甚至我自己也不敢承认我书写着诗歌,一如我不敢承认我的政治身份。这是怎样一种病态啊!
余诗抚去了《诗歌报》一类排资论辈自欺欺人的酸腐,唯有真挚充盈的情感保留了下来,悲伤却不绝望,苦痛然而敞亮。我想这种无以言尽的明亮之色正是余诗最为动人的地方。
然而除却真情,余的技巧仍有需要打磨的地方,没有何其芳绵绵不绝行云流水的华辞丽句,也没有戴望舒层层叠叠抑扬顿挫的音律起伏,更受限于诗人生活的方寸之地,余诗的意象来去不过星月黄昏与村野农作,与大家的丰富多彩相比,要苍白得多。
所以读余秀华的诗,常令你有无法尽兴之感,但是余的苦难的人生与其堂堂皇皇的诗句却总让你有一种不舍。尽管我觉得过分谈及余的残疾与不幸其实是对诗人的不公平,余固然因为不幸而愈美,却并不因为不幸而存在,余的诗句不需要廉价的同情。
余诗的光明是我们这些忙碌与大都市的蝼蚁所缺失的,这种丰满而纯净的情感,是我们不停下脚步就会轻易忽略的风景。读诗需要一方宁静,如同你早已干涸的内心的荒原,突然红了一叶舞动的花。在你诧异的眼帘上扬的瞬间,一瓣嫣红早已拥抱另一瓣,在一个有阳光的夏天的午后,轻轻点碎一方平静的湖面,荡出的波浪再无法收敛。
我不信你不曾这样,颤抖过。
15.04.22/凌晨 于自居

还在上学的时候,对于人生至俗的问题:
你的梦想是什么?
我是这么回答的:
当一名作家。
天真如幼稚园小朋友连科学家是什么都不知道一样,“作家”一词于我,就如同在黑暗的柔波中徜徉的闪烁的星斑,耀眼而无法触及。后来我说:“作家养不活自己。”
如今我坐在这个浮躁的大都市里,在这个不是 1 就是 0 的世界里养活我自己。在这个没有梦想的时代,如果你再问我:“你的梦想是什么?”没有梦想的我大概也只剩下这么一个尘封的答案了吧:我想当一名作家。
很开心这几年还有“每周读书”,它大约是我与这个梦想的世界的唯一纤细的联系了。每隔 8 期我会整理一份书单,以下是 65-72 期的书单:
2022-08-20 原《每周读书》系列更名为《枫影夜读》

有人问:
为什么精神病人都是艺术家?
我想并非精神病人是艺术家,只是二者有共通之处罢了。这个世界所有的事物都在对外广播全频段的信息,普通人为了防止信息过载,忽略了大部分小众的频段,只保留了主流的信息,这被称为“正常”。而精神病人与艺术家的共通之处在于:他们都能接收小众频段的信息。只是艺术家除了小众频段之外还能处理主流频段,而精神病人只接受到小众频段罢了。
在《金阁寺》这部小说里,每个主要角色都有自己独特的世界观,他们发出的小众频段的信息被作者以主流的信号转译出来,这大约便是小说家的本事吧。这部作品是根据 1950 年纵火焚烧金阁寺的真实事件改编的。说是改编,但其实除了放火这点,其他部分都是虚构多于现实。
主角沟口从小由于结巴的关系,有着极自卑的内心。“世人总以为要借助镜子才能看到自己,残疾人却被迫在鼻尖挂着一块镜子,时时看到丑陋的自己”。沟口的这种自卑又与他自小从父亲口中听到的美丽的金阁寺相生相伴,这种想象中的金阁的极美,是脱离了现实,只依存于沟口心中的美。
沟口的父亲病重之际,带着沟口到金阁寺托孤,不久后终于病逝。沟口第一次看到现实中的金阁寺,其实没有想象中那么美。在这里他遇到了少年鹤川,这个纯洁的透明的结构体,总是能把自己的意思误解成光明的意思。鹤川就是沟口的正片,是沟口与这个世界的光明的唯一联系。
《金阁寺》里描绘的世界是极丑恶的,但却又如此真实。沟口憎恨母亲,因他曾在暑假的某个晚上撞到母亲与另一个亲戚的苟且之事。沟口也不喜欢父亲,这个懦弱的寒碜的和尚在那天晚上用大手掌捂住了沟口的眼睛,也不知到底是出于慈祥,还是怯懦。而金阁寺的住持又分明是个嗜财好色的丑陋的和尚,再到后来遇上的大学同学柏木,简直就是恶魔的化身。
柏木是个有 X 型腿的残疾人。他失去童贞的故事丑恶得令人震撼。由于丑陋的 X 腿的残疾,柏木有着与沟口类似的心情。如果说鹤川是以极纯洁来应对世界,那么柏木就是以极丑恶来否定世界。沟口在与鹤川、柏木交往的过程中,大概还不知道应当如何应对这个残酷的现实。在遇到柏木之后,他也试图接近女子,但是每次在即将与女子发生关系的时候,金阁的幻影出现了。金阁拒绝了女子,也就是沟口拒绝了女子,他无能了。金阁的美是沟口的向往的极美,同时金阁的美也是沟口的极恨,整部小说充斥着丑恶与美的强烈冲突,这种冲突左右着沟口的人生。
在鹤川死后,沟口心中的光明的世界开始崩塌,天平终于倾向丑恶黑暗的一边。最后沟口把金阁寺烧了。
就如前文所述,这个世界所有的事物都在对外做全频段广播,小说亦如是。尽管作者已经把大部分的信息用主流的频段书写出来,但是还是有很多小众的信息需要读者自己调整频道去收听。只有当你的接收频段与作品和谐的时候,才能体会到作品的共鸣。
有些作品被评为“普通”大约也是这个原因:它的所有的信息都被主流频段包括了,除此之外别无他物,也就是所谓的“肤浅”。
我想作者在创作这部作品的时候已经把自己与角色融为一起,分不开了。现实中的三岛是个潇洒的公子,但却因为自己的孱弱的身体而感到自卑。在环游欧洲结束之后他开始创作这部作品,对于美的感受大约与他在希腊的旅行不无关系。
世人总喜欢自以为是地刻意否定外在的美,以为这种虚伪的评价可以换取多一分高尚,实在太廉价。三岛在这部作品中,用流畅的文笔把景物的、人物的外在的美描绘得淋漓尽致,这种优雅成为了这部小说的信息通道,而通过这种通道流泻出来的,却是令读者皱眉的沉重的哲思。
鹤川的透明与脆弱的心底隐藏了深沉的苦痛,柏木的孤僻与阴暗的表面暗含了否定世界的丑恶。沟口作为故事的主角,则多变而心酸。他在火烧金阁寺的那个夜晚,终于明白改变自己认识的世界并不需要毁灭,只需要改变自己的认识,而改变认识其实并不依靠这种无效的行动,但他终于还是烧了。
与现实的纵火事件不同,作者并没有让沟口在纵火后用匕首剖腹,相反地,沟口在冲上金阁寺顶的时候因为敲不开门,终于冲出烈火,躺倒在星空之中。坐在黑暗的夜里的沟口,点燃一支香烟,静静地望着远处熊熊的火焰,发出一声沉重的叹息:
我要活下去!
知道三岛还是因为川端康成。三岛是兵变失败后切腹自杀的,自杀后只有亦师亦友的川端康成被获准进入,随后不久川端康成也自杀了。由于对三岛本人了解甚少,我并不清楚他一定要切腹的真实原因,但是通过《金阁寺》所描绘的世界,我们能够知道故事里的人物所接收的信息太多,每一个人物都是一个世界。世界在人物的认识里,人物活在自己的世界里,如果有什么原因一定要离开这个世界,我想大约是这个我所认识的世界太丑陋,而我对此无能为力,甚至根本无法改变我的认识,这时候离开就是一种解脱。
就如小说里多次提及的《临济录》里的句子:
逢佛杀佛,逢祖杀祖,
逢罗汉杀罗汉,逢父母杀父母,
逢家眷杀家眷,
始得解脱。
15.04.18/下午
于沙园 Costa Coffee
2022-08-20 原《每周读书》系列更名为《枫影夜读》

这是一个典型而新颖的人与自然斗争的故事,由于贝爷式的地球冒险再也满足不了愚蠢的人类读者,作者把场景摆在了绝对荒芜的红色星球——火星。
这本书写于 2009 年,作者 Andy Weir 是个 Nerd,一开始他把这部小说连载在自己的网站上供人免费阅读,后来有读者建议他放到 Amazon.com 上卖 0.99 刀,这样读者就可以在 Kindle 上看书了。于是这本电子版的小说在 3 个月内被卖出了 3500 份,一举拿下 Amazon.com 2014 年科幻类畅销书榜首。
The Martian 直译成中文是“火星人”,在这个故事里,主角 Watney 是火星人唯一的“人”。Watney 是 NASA 火星探险队的一员,在一次执行任务的时候,队伍遭遇火星沙尘暴,Watney 被一块天线碎片扎到腹部,与队友走散。眼见 Watney 势难活成,队长当机立断带领剩下的队员返程。于是侥幸生还的主角从此被留在火星上,开始了与残酷大自然的搏斗。
他以火星基地为凭依,借着自己工程师与生物学家的知识与技能(其实就是个 Nerd),一次又一次面临生存威胁,一次又一次巧妙地化解。
在下一次火星任务时可能获救,但是还没等到 2 年就被饿死?
他开始在火星基地里面种起了土豆。无法与地球通信?
他把执行轻量任务用的探测车“改造”得体无完肤开始了人类第一次火星长途旅行,寻得遗忘多年的火星探测器。不够水喝?
他把火星基地变成一个巨大的密闭的容器,燃烧燃料,收集 H2O。
Watney 以优秀的Nerd 思维,科学地解决了一个个不可思议的难题。物理化学计算机,天文地理航海术,能用到的都用上了,一个个问题的袭来和解决构成一个个小高潮,看得人大呼过瘾,酣畅淋漓。解决这些问题其实都是作者最喜欢做的事情,就像解决一道道数学物理难题一样。而且看上去这些解决方案都是可信的,尽管可能风险很大,但至少都是可行的,至少我作为一个职业码农,在看到 Watney 接收 NASA 发来的脚本逐个字符输入进探测车的 console hack 进去再更新系统的时候,我觉得虽然很容易出错但是至少是可行的。
另外小说的 POV 写法也是一个特色,类似于《冰与火之歌》,小说也通过不同的角色的视角来进行剧情的叙述。Watney 在火星上的日志是最重要的骨架,地面 NASA 工作人员的视角和 Watney 队友的视角则是很好的补充,讲述了大量无法以第一人称视角叙述的事情,使得故事变得更加完整,剧情推进也更加自然。
这种写法也有个坏处,就是无法体现出 Watney 孤身一人在火星上与挣扎着生存下去的艰辛,再加上 Watney 天然的恶搞幽默的性格,读者在看书的过程中即便遇到什么天大的灾难也会想:Watney 肯定能搞定这个问题,我们看看他是怎么解决的吧。
不过这不正是这本书的优点所在么?正是这种极端的自信与乐观,才使得 Watney 能够支撑到救援时刻,才使得 Watney 能够做各种 Nerd 式的异想天开的解决方案。这本书并不是一本严肃的生存手册,它是一部好莱坞大片。
(PS:根据小说改编的好莱坞大片《The Martian》已经在拍摄中。)
15.04.15/下午
2022-08-20 原《每周读书》系列更名为《枫影夜读》

鄙人对国产推理小说涉猎甚少,除了神秘色彩较重的《卫斯理》系列勉强可算之外,就只有最近在读的《死亡通知单》系列了。这个系列是作者周浩晖的代表作之一,共有三部,截至本文发布时,鄙人读了前两部。
故事以一起谋杀警察的命案拉开序幕,在命案现场把主要角色都一一搬上了舞台。在这一幕中,正派人物方面交代了主角罗飞的“高手”属性,但同时也给他安上“不是本地警察,得罪了傲慢的刑警队长,所以没有最高指挥权”的枷锁,限制主角的能力。反派人物则把一个“身份神秘”的高手推出帷幕,并且一直神秘下去,给整个大故事留下足够多的盲点,这一步预埋很自然,使得后面的的反转足够惊艳。
故事的整体构思非常不错,第一起命案的调查牵出了多年前的悬案,围绕犯罪高手和警方之间的激烈角逐展开剧情,预先埋下的盲点也在这些精彩的对决之中适时地引爆,颇有出人意料之处。第一部节奏紧凑,直到最后才把神秘人物放到幕前,所以第一部的结局才是真正的开局。第一部结束后,主要角色的能力都不再受限,情节推向另一个台阶,作者埋下的盲点也同样得以放开手去挖掘,所以后面两部其实就应该是耗尽伏笔,力推高潮,然后收尾了。这里如果展开得好就是频频小高潮的阶段,如果用的不好就会流于平庸,令人感觉情节拖沓,索然无味。本作第二部的展开还是比较精彩的,只是到了中期就开始觉得有些拖沓了,部分关键情节的伏笔有点过于明显,不利反转。毕竟后两部都分上下两卷,剧情长了许多。第三部则尚未读过,无法评价。
写作风格上,有日式小说的感觉,语言朴实,作者努力要打造罗飞警官和 Euminides 正反两个“高手”角色,期望达到巅峰对决的效果,双方你来我往常有《死亡笔记》的既视感。但是前期对于人物形象的描写以及对气氛的烘托方面却多有不自然之处,达到的效果比不上书中所述,很容易令读者觉得困惑而出戏。
具体来说,比如主角刚出场时得罪刑警队长的那段描写,总觉得正常人气量不会这么小,几句话就被得罪了,而且像罗飞这种高手应该也不会这样讲话,语言生硬,强调过于明显的事实,不太符合人设。又如作者极力营造主角愤怒的心情的时候,读者却并不能真的感受到主角有多愤怒,仅凭一两句“他咬咬牙”之类的外在表现,显得有些苍白无力。这种感觉在读第一部的时候非常明显,读几句就会出戏。但是如果耐着性子往下看,越往后看就越流畅,尤其到第一部收尾的时候,作者基本上写开了,再没有开头的那种突兀之感。到第二部已经较少有这种感觉了。
这种突兀感对于读者来说是很不自然的,算是致命伤之一,但是故事还是很精彩,这点不容置疑。而且由于时间跨度大,两个主角过往的故事又交待甚少,所以可以展开的情节和反转也就多了。这个《死亡通知单》系列是作者“罗飞”系列的一部分,除开写作时语言的不自然成分,这部小说的评价还是很高的,只是这种不自然不可忽视,语言之于文学作品正如“用户体验”之于互联网产品,体验太差用户就不想买账了。
z.cn 有 Kindle 版合集:点我到 z.cn 购买
2022-08-20 原《每周读书》系列更名为《枫影夜读》

晚清因其特殊的历史时期,常常被世人置于丧权辱国,不喜多谈之地。从历史课本中我们看到的晚清就是一场不堪回首的悲剧,外有八国联军侵华,英法联军火烧圆明园,内有白莲教起义,太平天国运动,内忧外患,动荡已极。所谓乱世出英雄,这个烽烟四起的时代,正是《战天京》的历史大舞台,在这个舞台上,曾国藩、李鸿章、左宗棠等历史人物演绎了一个又一个惊心动魄,扣人心弦的故事。
此书作者谭伯牛,最早于2004 年出版,从豆瓣书评来看,此书出版后似乎获得过不错的反响。只是鄙人孤陋寡闻,一直未曾听说,直到前些日子《罗辑思维》这个节目在推这本书,才得见真容。其实开始并没对本书抱多大希望,以为不过营销推荐,故事内容估计也在节目讲差不多了,然而开卷试读,却给了我相当的惊艳。这本定制版的书是线装本,装帧颇为精细,第一印象已佳。而作者谭伯牛博览古籍,在浸淫清史多年,讲起故事来甚能引人入胜,加之文笔优雅,成语俗句信手拈来,恰到好处,绝非堆砌词藻之庸脂俗粉。大量松散的史料在作者手里,去芜存精,精心编排。书中所引古人奏折、笔记之出处俱有评注,此举已甚难得,更为难得的是,一些重要的历史事件,作者还加以钻研求证,明辨是非,杜绝道听途说。作者的博学,文笔以及求实,构成了本书一个个惊心动魄,起伏跌宕的故事。
书名《战天京》已然道出故事的主线:太平天国之乱。太平天国始于道光崩殂,咸丰继位之际,终于同治三年,天京陷落之时,历时一十三年,贯穿咸丰帝的执政生涯。这本书讲的故事主要就落在其间,这段时间也正是曾国藩大展宏图的时间,全书七章有五章都在写曾国藩,剩下两章一是慈禧政变,一是讲曾国藩的弟弟曾国荃。所以这本书的领衔主演无疑就是曾国藩了。
作为与李鸿章、左宗棠、张之洞三人并称“晚清四大民臣”的曾国藩,他的故事在历史上有着举足轻重的地位,鄙人看这本书,觉得精妙处全在前半部分,即曾国藩建湘军,围攻南京一段。期间除了与太平军斗智斗勇,更要与同僚甚至圣上周旋来往,战场上固然险象生环,马革裹尸,官场中又何尝不是官官相忌,君心难测。
其时晚清政府国库空虚,曾国藩办湘军只能“就地筹饷”,虽贵为“节制四省”之钦差大使,实则手无实权,处处掣肘。筹饷则得罪地方官员,不筹饷则打不了仗得罪圣上,曾国藩斡旋于皇帝与群臣之间,一面要应付同僚,一面要跟皇上要权,其中尺度拿捏无一不是官场极深之心机,一不小心得罪皇上就是革职掉脑袋的事情。本书引用了大量曾国藩与皇帝的往来奏折谕旨,作者精心加以解读,其间言语精妙处不亚高手对弈,招招致命。时有大臣胡林翼云:“天下奏牍,仅三把手,而均在洞庭以南。”这三把手说的就是曾国藩、左宗棠和他自己。本书就用了两章的分量来写曾国藩和左宗棠的恩恩怨怨,其中以奏折相互攻讦、相互保举的文字,攻守相间,精彩纷呈。如果只读原文,没有一定的古文功底,甚难解读,即使明白意思了,没有当时历史背景的知识,也很难发挥延展。作者就为我们一一解读了这些奏折,尽情还原了其中含沙射影,峰回曲折之处,读来不由令人抚掌而叹曰:妙极,妙极!
曾国藩的故事代表不了整个晚清的历史,事实上这本书的时间跨度也不长,但是却正好落在了晚清最为动乱的一个时间段里。枯燥的古文史料若单列开来固然索然无味,但是经过作者这么一加工,有如小说般流畅,却仍紧扣史实,以史叙事,实在难能可贵。
看罗辑思维的节目说这本书后来已经绝版了买不到了,这才做了个定制版重出江湖。看完此书我不由为此叹息:如此好书尚且绝版,则天下有太多好书再寻不得也!
2022-08-20 原《每周读书》系列更名为《枫影夜读》

1931 年九一八事变,日本侵占中国东北成立满洲国。
1937 年七七卢沟桥事变,日本开始全面侵华战争,也是第二次世界大战亚洲战场的第一枪。

我们本周要讲的故事就发生在卢沟桥事变的前夕:1936 年。这一年日本发生了二二六事变,军部确立了日本国内的统治地位,正式开始军国主义扩张,也是第二年全面侵华战争的直接原因。
就在这样的历史背景下,日本国内发生了一个轰动全国的桃色凶杀案——"阿部定事件"。看过《感官世界》这部电影的读者对这个故事应该很熟悉了,故事的女主角阿部定是个艺妓出身的美女,后来到卖鳗鱼饭的"吉田家"做女招待的时候,跟有妇之夫的老板石田吉藏好上了,两人一拍即合,干柴烈火,万劫不复。后来他们躲到一家旅店,日日夜夜纵情声色,爱得天崩地裂你死我活,终于发展到阿部定把吉藏勒死,割下他的生殖器,在他身上血书"吉定二人",而后独自逃亡。
其实当时阿部定不是想逃亡,只是想找个地方自杀,但是就在她将要自杀的当天,被抓获了。这件事情被报道后,民众直接炸开了锅,如此骇人听闻的事情,自然对社会舆论产生极大的刺激。一时骂声如潮,铺天盖地。但是奇怪的是,随着审判的进行,民众与媒体的态度竟然有了一百八十度改变,最终竟以"爱得太过"为由,轻判 6 年监禁了事。
究其原因,大概与当时日本国内政局动荡,对外发动战争,人民情绪处于一片绝望之中不无关系。当时的日本渴望人情来浇灌早已干涸的荒凉的内心,所以才会倾向于强调"爱"的影响,对阿部定报以同情。
这种把"爱"的作用如此放大的现象很有意思,现代的科学可以解释很多事情,却还解释不来爱情。但人们似乎并不介意对于“爱”的无知,甚至我们就想要"无知",“无知”产生浪漫,人都不是纯理性的,是需要满足感性的需求的。
渡边淳一就是这么一个掌握了“爱的美”的作家,以"阿部定事件"为原型,把不伦的男女之爱发挥到极致,超越了伦理,超越了道德,以至于两个主角为了维持幸福的顶点而双双殉情,这就是本周读书的主角——《失乐园》。

1997 年这部作品出版的时候,在日本乃至亚洲掀起了轩然大波。我想那个时候的中国读者应该尤其受到冲击,因为中国的文学作品从来都是规避"性"这个话题的,极少有作家会以性为题材来写作。就是我第一次翻到《失乐园》的时候也为其露骨的性描写而颇感讶异——这本书居然能在中国出版?这不就是一部情色小说嘛。
没错,这是一部情色小说,书中有大量的篇幅用于性描写。但是不同于有名的《xxxx池中物》这样的作品,性在《失乐园》只是一种媒介,是剧情发展的主线,是产生矛盾与冲突的导火线,也是把故事推向高潮的驱动力,在这种媒介之上,作者给我们带来了极美的感受与伦理冲突的思考。打个不太恰当的比方,普通的情色小说就是 AV,利用各种声色刺激你来一发,目的就达到了,如果能做到不要太夸张,不要太脱离现实,那就算上等佳作了。但是《失乐园》则是更高层次的作品,她是陈列在美术馆里的艺术品,她的外表亦是赤裸的,但是她展露的“性”是曼妙的,是人物的心理与生理的细腻的结合,是故事冲突与矛盾的舞台。其柔美处似落英缤纷,一瓣春色凋于梅雨泠零,其澎湃处又若狂蜂蝶舞,一点寒梅隐入风雪凄凄。能够做到如此细致入微的描写,也是拜作者多年行医生涯所赐。我们的课堂没有教授的东西很多,性就是其中一种,时至今日,也只有医学院的学生才有比较系统的性学研究。所以对于我们的一生作者,性就像是信手拈来的工具,好比密室逃脱之于推理小说家一般。不过对比作者《樱花树下》(每周读书第二十九周有推荐过)一书的性描写,尽管也是十分优美,但是“性与爱”的交织却没有像《失乐园》一样被如此放大,大到成为故事发展的主要推动力。
有妇之夫与有妇之夫的婚外恋,是这本小说的主要冲突。小说开篇就以女主角在性爱中一句:"好可怕..."暗示了故事的结局:违背社会道德伦理的两人,终会在这种越来越强烈的爱中消亡。
今天我们看"道德",其无非就是在讨论人的言行的正确与否,什么该做什么不该做。古代的哲学家在探讨道德的时候也探讨美,不同的学派对道德的看法也不同,其中道德相对主义者相信道德不是一成不变的,是会跟着时代的进步而变化,会因为文化的不同而不同。假设有一天我们的社会变成以试管婴儿来繁衍后代了,那么性就变成了一种单纯的娱乐的途径了,婚姻也变得无关紧要了,如果是在这种世界里,《失乐园》的主角们能得到救赎吗?答案是否定的,到时候人们已经建立起另一套道德体系了,“相爱”变成了淫秽与猥亵的东西。这个世界其实就是赫胥黎构筑的反乌托邦——《美丽新世界》。
相比起《美丽新世界》里野蛮人与试管人的恋爱,《失乐园》所描写的爱要深刻得多。两位主角都有着无趣的婚姻,所以他们一旦相遇便即相爱,由相爱而性,因性而愈爱,从而愈演愈烈。这是一种不为社会道德所容的恋情,但是这种强烈犯罪感反而给了他们更大的感官刺激。故事从一开始就已经在告诉我们结局:这两人注定要越来越无法分离,最终背离家庭,各自离婚而后结合。同时也插入阿部定的故事暗示了两人殉情的结局。但是渡边仍能让读者为主角一步步走向绝境而焦虑,为这种至高的爱与幸福而嗟吁。拥有了至高的幸福反而害怕失去,最终两位主角在性爱的顶点服毒自尽,永远地留在了至高的幸福里。
死亡与爱情,这两种人类尚未解谜的,但对于人类来说又极为重要的东西,在这部作品当中深深纠缠,即便你早知剧情如此,也还是会为美而赞,为爱而叹。
渡边的作品向来褒贬不一,备受争议,但我想单就《失乐园》这部作品来说,其美到令人窒息的性爱,其颠覆常伦的恋情都是如此理所当然,都是如此人性。在阅读这本书的时候,常常会有"尽管道德不允许,但是一个普通人确实会这样想"的感觉。好的小说就是作者虚构了一切人物地点和事件,而在读者看来却像真实发生的一样。《失乐园》本是一首虚构的诗,却美得如此真实。

2014 年是阿里大放异彩,马云功成名就的一年,关于阿里有很多传奇的故事,不过今天我们要聊的不是阿里,而是远在大洋彼岸的一家同样有着传奇色彩的电商公司——Paypal。
16 年前 Paypal 还是一家名为 Confinity 的创业小公司的一个服务,正处于“互联网泡沫”势头正猛的时候。今天我们熟知的互联网巨头 BAT 三家都是当年互联网泡沫破裂后的幸存者,后来也都成了大赢家。Paypal 也是在这个乱世当中起家的。2002 年 3 月,在互联网泡沫破灭前夕,Confinity 与 X.com 完成了一次并购,随后他们就把这个服务开始不断地升级拓展,一路高歌猛进,终于在 2002 年成功上市。上市后不久,就被 eBay 以 15 亿美元的价格收购了。
这笔巨额交易造就了三个亿万富翁(Peter Thiel, Elon Musk 和 Reid Hoffman)以及大量的百万富翁,这帮人在 Paypal 被收购后不久就纷纷离职,有的开始了二次创业,有的则干起了天使投资人的生意,并且这些人都干得不错。我们来看一个列表:
这些在今天我们看来鼎鼎有名的公司,无一例外全部出自当年 Paypal 这帮人之手,这还只是其中一部分,他们投资过的成功的公司甚至还包括 Facebook。并且他们在创办这些公司的时候,通常两三个人互相扶持或者一同创业的。比如 YouTube 就是由其中三个工程师一起做出来的,比如 Elon 创办的 SpaceX 就接受了来自 Peter Thiel 的投资。正是由于 Paypal 这帮人离职后仍保持密切的联系,才使得他们被视为一个群体,而这个群体造成的影响也是非常显著的。于是 2007 在美国《财富》杂志的一次专访中,记者给他们拍了一张著名的照片,配了个响亮的名号——“Paypal 黑手党”(Paypal Mafia)。

在这张照片中,当年最大的股东 Elon Musk 因为行程关系没有出现,他是特斯拉和 SpaceX 的创始人,也是 Paypal 黑手党中身价最高的一位。
另一位“教父级”人物 Peter Thiel 则在 2012 年在斯坦福大学开了一门课—— CS 183: 创业。当时有一位叫做 Blake Masters 的学生,在听了这门课之后把自己做的笔记发到了自己的博客上。没想到这些博文一炮而红,硅谷人争相阅读。后来 Peter Thiel 找到 Blake 帮忙,把他对于创业的思考整理成一本书,这本书就是我们今天的主角——《Zero to One》。
我们说人类的历史是前进上升的,那么今天就应该不同于过去,而且是日益发展的。经过长期量变的积累,我们可以得到质变的突破,比如工业革命,比如互联网的诞生。在《Zero to One》这本书里,作者提到这种推动历史的进步大概有两个维度:

对应到我们当下社会的发展来看, 1-n 即是全球化,就是把发达国家的经验和先进的技术 copy 到发展中国家,然后发展中国家快速发展起来,最终变成“世界是平的”,这就是当前中国在做的事情,疯狂复制美国的一切先进的技术与价值。
而 0-1 则是科技的发展,在今天尤指计算机科技的发展,通过创造新的技术来改变世界。这就是美国现在在做的事情,Google,Apple,特斯拉这些公司都是在创造新的价值,在做技术的突破。
从 0 到 1 比从 1 到 n 困难,但是并不是不可能实现的。这本书讲的就是怎么做到从 0 到 1。但是0-1 这件事情没有银弹。作者并没有给出,也给不出一个具体的步骤,告诉你怎么成功,因为能够从 0 到 1 的事情都是前所未有的,都是独一无二的,要是真能有个方法论量产出来,它就不是 0-1 了。所以这本书的重点,其实是在告诉你如何学会思考,从而自己去思考得出自己的步骤,找到适合自己的途径。
可能大家或多或少都听过这么一个说法:
一个人的成功跟他的运气有很大的关系,运气占的成分甚至达到 50% 以上。
如果拿这个问题去问其他人,我想 80% 的人都会同意。之前我也是这么想的,尽管老觉得哪里有点不对,但是我还是更愿意相信这个说法。直到看了这本书,我才明白是哪里不对,才明白为什么我愿意相信这个说法,道理很简单:这只不过是 loser 的自我安慰罢了。
成功的人通常会谦虚或者虚伪地会告诉你成功主要是靠运气,而 loser 则会告诉你成功当然要靠运气的啦。这里面潜台词就是:你看我现在活得不怎样其实不是因为我没能力,只是我运气太差啦,而运气这玩意儿可不是我能掌控的,所以我是怀才不遇,无可奈何啊。
其实静下心来想一想,如果承认一个人的成功主要是靠运气,说白了就是靠概率,那么无异于承认你的人生就是一张彩票。但是现在有 Paypal Mafia 这帮人做出一连串非常成功的事业在,有 Elon Musk 牛逼哄哄的 SpaceX 和 特斯拉在,有乔布斯艺术与人文交叉的 Pixar 和 Apple在。假如这些人全都中了彩票,那么我就该怀疑我所处的这个平行世界的真实性了。在这本书里,作者就很直白地说了一句:如果看到这里你还觉得你的人生是一张彩票,那你还看这本书做什么呢?
所以现在我更愿意相信成功的原因里面,运气的成分其实没那么高,人生并不是一张彩票。
那么问题来了,如果这些黑手党创办的公司不是掷骰子得到的成功,那么他们获得成功的途径是什么?有没有什么秘密呢?你要神龙给你实现愿望好歹还得集齐七颗龙珠对吧。这本书虽然没有直接给出龙珠的位置,但是却给出了龙珠雷达——七个创业者都会遇到的问题,答好这七个问题,你就具备了成功的条件,哪七个问题?
接下来我们以特斯拉为例,看看怎么解答这七个的问题。
特斯拉在电动车技术上面要遥遥领先于其他汽车公司。奔驰的母公司戴姆勒公司就采用了特斯拉的电池组,奔驰则用了特斯拉的传动系统,丰田则用了特斯拉的发动机。这种技术上的领先就有如 iPhone 在手机上的领先,是后来者无法望其项背的。在本书的第三章 All Happy Companies Are Different 中,作者就讲到了 Google 和 Apple 是如何凭借技术优势独占鳌头的。
在 2009 年奥巴马上台之后,美国政府一个重要的政治任务是支持洁净能源,发展绿色科技,当时美国政府对很多绿色能源公司都发放了巨额的津贴,但是很多公司后来都挂了,其中最有名的就是 2010 年 Solyndra 这家公司的破产,直接导致奥巴马卷入公众强烈的质疑。就在这短短几个月的黄金时间里,特斯拉的创始人 Elon Musk 就看到了这个千载难逢的机会,从政府手中拿到了 4.65 亿美元的津贴。这笔钱即使放在在今天来看都是难以想象的。
这里有的人会觉得,这不就是狗屎运嘛,这不就是彩票嘛?其实不然,如果不是 Elon Musk 去谈这笔钱,就是给你十个奥巴马我想捞不到什么好处。
说到 Elon Musk 这个人,作为特斯拉的首席产品设计师与 CEO,他是个工程师与推销员的结合体。Salesman 翻译成推销员可能给人逼格不够高的感觉,其实不然,推销员是有几层境界的。最 low 的就是在大马路上隔开几十米一眼都能看出来是个房产中介的那些人,更高级一点的是,给你销售产品的时候你完全不知道他是推销员,直到你付款了才恍然大悟:哦,又被人忽悠买东西了。最牛逼的推销员则是从头到尾没有给你一丝感觉他是一个卖东西的人,你不但心甘情愿地花大钱,而且花了之后还会对它感恩戴德。Elon Musk 就是这么一个顶尖的销售人员,他能够看到这个稍纵即逝的机会,并成功地薅了一笔羊毛。
在这本书第三章提到两个经济学上典型的市场形式,一个是垄断(Monopoly),一个是完全竞争(Perfect Competition)。
垄断好理解,Google 在全球搜索市场就是一种垄断,理想状态下一个市场会被一家公司完全掌控。而一旦一家公司垄断了一个市场,他就可以随意左右这个市场的价格。反之,完全竞争则是指有很多家公司在统一市场处于竞争当中,没有任何一家公司可以左右市场的价格。
本书有一个章节在专门讲这两个经济模型,这里不详述,大意是想要在一个市场获得最大利益,必须得是垄断,竞争只会让企业疲于战争,失去创新,几无利润,最终惨淡收场。而要实现垄断,首先得从一个大市场的一个细分市场做起,统治了这个细分市场之后,再渗透到其他的市场,最终实现大市场的统治。
Facebook 一开始就是从哈佛大学做起,后来才慢慢扩展直到今天渗透到了全世界。特斯拉在这个问题上解决得很好,他首先在汽车市场这个大盘中选择了一个能够实现统治的细分市场——高端电动跑车。试想一下现有的家用汽车市场,普通大众可能一辈子就买一辆车,那既然市面上有那么多成熟的汽油车,我干嘛非要买一辆电动车呢?但是富人不同,尤其是买得起超跑的富人,开一辆特斯拉能显得自己支持绿色环保,既尝了鲜又收获了名,何乐而不为?而且特斯拉百公里加速不到 4s,同样性能的跑车价格可就高了去了。于是 2008 年,特斯拉卖出了 3000 辆电动车,但是平均每辆车卖了 11 万美金。从小市场做起也让特斯拉得以研发更为便宜的车型——Model S,开始进军豪华轿车市场。到 2013 年,特斯拉已经卖掉了 20000 辆以上的轿车型电动车,成为当今炙手可热的焦点。
前面第二个问题提到 Elon 是一个工程师与推销员的结合体。所以 Elon 在组建特斯拉公司的时候,招募了大量擅长技术与推销的人。在这本书里,作者也花了大量笔墨来阐述人(包括员工,管理者,股东)对于一个公司的的重要性。
这里作者提到三个概念:
在一个典型的创业公司,拥有权,或者或股权,会被分配到创始人,员工和投资者三者手里。最前线的码农和管理者是在干活的人,享受占有;投资者和创始人则制定各种决策,做大方向的指引。
这种模式看上去理想状态中是可以完美运作的,但是人都是复杂的,在本书第九章 Foundations 中作者做了详细的阐述。这里关于特斯拉的内部运作作者没有更多的表述,但是我想这颗龙珠的位置,应该就在这一章之中了。
有一个可能在互联网行业普遍存在的问题:很多人尤其是码农,可能心里都觉得销售人员没干正事。比起自己整天写大量的代码,做很牛逼的技术活,那些 BD 不过是做在办公室打打电话,跑出去跟人家吃餐饭,发发朋友圈晒晒照片罢了。这也是 99 年互联网泡沫时期很多人犯的一个错误:销售不值得重视。但是其实不然,销售和产品是同等重要的,本书第十一章 If you build it, will they come? 中就探讨了销售的重要性。
就像乔布斯执意要建 Apple 的 Retail Store,特斯拉也拥有自己的实体店。传统的汽车公司如福特和现代,都是只生产汽车,交给经销商来做销售。但是特斯拉却是自己包下了整个分发链,自己做销售,自己做售后服务。这种自己建立门店的做法固然会带来比较高的成本,但是效果也是非常显著的,跟苹果一样,带给客户更好的体验,同时强化了自身的品牌,从长远上看,其实是在帮公司省钱。
这个问题其实就是生命周期的问题,每一个企业家都应该考虑怎么让自己的企业在一个市场中持久生存下去。
对于特斯拉来说,他们现在想要进军的市场是相对较为平民的市场,对这个市场的消费者来说,一辆车是可以用很多年甚至一辈子都有的。所以这个产品本身的生命周期就比较长。而比起其他传统汽车公司来说,特斯拉还处于成长中,他们还会持续打鸡血,不断优化自己的产品,不断提升用户体验,以应对更长时间的变化带来的考验。
从大局上来说,绿色能源或者说新能源取代日渐枯竭的石油是一种趋势,特斯拉是走在绿色能源前沿的,尽管我们不能断言 10 年后绿色能源会替代石油,但是历史的趋势总是这样的:当一项资源趋于枯竭的时候,我们总能找到另一种可替代的东西。特斯拉是否可以替代传统的汽车还有待时间去验证,但是在市场持久这个问题上,10 年、20 年特斯拉是不会有问题的。
本书的第一章开篇 Peter Thiel 就问了一个问题:你知道什么鲜为人知的重要的事实吗?(What important truth do very few people agree with you on?)
这是一个很难回答的问题,这本书也给不出一个准确的答案,但是这本书解答了另一个问题:如何去思考这个问题的答案?每一个答案都跟具体的案例紧密相关,特斯拉有他自己的答案,比如说特斯拉知道,时尚会引起大众对绿色能源的兴趣。这点 2012 年张小龙的 8 小时演讲里也提到过:时尚是一种驱动力。但是很少有绿色能源的公司看到这一点。
特斯拉从这点出发,力求打造让司机看起来很酷的特斯拉汽车。张小龙此前的演讲也说到:要听到用户说“好玩”,“很酷”。而要让普通人觉得酷,最好就是让很酷的名流也喜欢开这部车。这就像魔音耳机 Beats,每年投入大量的资本在广告宣传上,让明星在公众场合,在 MV 里面戴上显眼的 Beats 耳机,营造一种潮流。特斯拉也营造了一种潮流,好莱坞影星李奥纳多就卖掉了他的普锐斯换成了特斯拉。营造社交氛围把特斯拉推进公众视线的焦点,这就是特斯拉与其他绿色能源的不同。
相信特斯拉还掌握了其他的秘密,如果秘密都被你知道了,还能是秘密么?所以每个公司都应该把秘密控制在一定的范围内:只有你自己的公司知道就行了。
《Zero to One》这本书给我比较大的感慨有两个:
2022-08-20 原《每周读书》系列更名为《枫影夜读》

我从未读过如此流畅的英文译作,仿如东野圭吾,原研哉等日文的作品一般行云流水,毫无拖沓凝滞之感。能做到这种程度的,作者想必做了大量的功课,完全理解了小说的内容,再用自己的思考把整部小说重写了。从翻译上来说,这是我读过的翻译得最好的英文小说,没有之一。
上个世纪外国文学的中译版尚不成熟的年代,像《巴黎圣母院》这样冗长晦涩,一个句子长得可以排满一整页纸,看完后面忘了前面,看完一段完全不理解作者在说什么的情况,大约算是一种代表。即使到了近几年,像《百年孤独》这样的译作也是相当令人失望的,有能力看英文原著的都不愿意去看那些畸形的中译本。
但是本书开卷时译者的语言风格就完全吸引了我,除了音译的人名仍不习惯之外,完美的本地化极大地还原了这部小说本原的魅力。译者屈畅在 2000 年接触此作变已爱上《冰与火之歌》,他熟读英文原著,翻看相关论坛,把作者的构建的宏大故事架构及交错的线索都烂熟于胸,极力以中文的思维重写该书。为了做到中译的流畅,光是把句子以中文表达一次是远远不够的,他每次翻译都会经过无数次的修改,比如把艰涩的地名用尽量接近的中文来意译,把故事中的线索弄清后反复修改已有的译稿。所以我想,这是一种“重写”,而不仅仅是翻译了。
原作第一卷《权力的游戏》发表于 1996 年,我却是在 2011 年同名电视剧大热的时候才听说了这个名字。但是剧本毕竟与原作有别,而且电视剧的手法没法讲述完整的故事信息,看了第一季前几集之后,我没能搞明白这部剧到底在说什么,于是就放弃了。直到我看了本书。
作者构筑了一个宏大的世界,这个世界拥有诸多文明,也有漫长的历史,这是一部史诗式的小说,第一卷读到一半,仍觉得世界才刚刚展开,即便到末期艾德首相发现了王后的秘密,第一卷开始有收尾的感觉,整个世界也不过初露冰山一角。而作者采用的POV(Point-Of-View 视点人物写法)写法也颇为独特,每一章都采用一个人物的视角,从他的角度来讲述故事。这使得这部小说既有主角也可以视为没有主角,既是群写也有特写。北境之王艾德在第一卷里面算是出场较多的人物,也是影响第一卷的故事发展的最为关键的人物,但是与传统的“主角光环”不同,艾德出场了 15 章之后死了。私生子“琼恩”也算是个比较关键的人物,类似传统小说中贫民变英雄的路线,他本来也应该变成一个超级英雄然后一跃成为主角,但是他却宣誓成为“没有家人没有朋友终身不得娶妻生子”的守夜人,只能在支线故事游走,主线战场再看不到他的身影。又比如野人卓戈卡奥,本以为如此战神应该可以横跨拉斯克的海扫荡七大国,跟异鬼、人类一起逐鹿中原,天下大乱,可惜故事最后居然被一个女奴隶所害,也算得上是匪夷所思了。
没有主角大约算得上是令人困惑和没有寄托的缺点,但是却极大地方便了作者谱写一首时间跨度极大,空间覆盖整个虚构世界,凌驾于人类、异鬼、龙等各种奇幻种族的史诗。
读罢第一卷,我感觉译者翻译得很好,应该说,他“重写”得很好。还有就是,这个故事,可能才到“刚刚开始”的时候。
