0%

有一天和树文讨论了一个问题,如果有一个人能够永生,而且整个世界都只有他一个人,他的周围有许许多多的机器人来服务于他。

『就算他能够永生,但是又是什么支撑他活下去呢?不会觉得无聊吗?不会觉得没有意义吗?』

『当他觉得无聊、不开心等负面情绪的时候,机器人会使用某些物质让他消除这些负面影响。这样你有没有觉得像是机器人操纵了人?』

『如果机器人是无意识的,那也就不存在操纵这个概念吧。而如果机器人具有了意识,拥有类似于人类的智慧,那机器人与人的区别又在哪呢?』

我们平常生活中把动物区别于人类,也正是因为动物不具备人所拥有的智慧(因为动物基本是依靠本能去生活)。假如真的存在外星人,我们该如何判定他们是动物还是人?机器人与外星人的区别又是什么?

人类存在的意义是什么呢?

对于无比漫长又广阔的宇宙来说,人类的存在实在是微不足道。但我以为人类的存在的意义就是他们存在,他们诞生了,他们或许又消亡了。

人与人之间的关系以及每个个体的感触就是存在的意义吧。

最后

我好腻啊!

明天我会写写一些工作相关的东西以及未来的不完全计划。

总之,虽然我比较任性,但是上帝你要保佑我!

秋意渐浓,树叶慢慢地黄了起来,景色也渐渐地浓郁了起来,天气也寒冷了起来,出门赏秋的人却络绎不绝。都说北京的秋最美,我们大抵也不会辜负。

但是我真的是怕冷,睡觉时两床被子也不能说完全满足了我,在办公室下半身的寒意更让我瑟瑟发抖。

我不知道我应该怎么去面对接下来的惶恐,忧愁与快乐相互交织,恐惧却一直如影随形。此刻心情、此刻感受、此刻我想、此刻我要,人生一瞬,留住此刻。

慢下来,静下来,看看远方,此刻,现在,未来还在我们手中。

如果可以,热爱 something 真让人热泪盈眶。

由于团队希望项目能够去 CoreData 化,而以往状态同步都是依赖于 CoreData 的 NSFetchedResultsController。因此去 CoreData 则必须寻找一种替代方案来进行状态同步。

NotificationCenter

状态同步实际是一对多的场景,也就是一个事件可以被多个观察者监听到。而苹果的系统框架自带的 NotificationCenter 正是用来适配这种场景,并且其也是被系统框架本身及我们开发者大面积使用的。用法如下:

  1. 定义通知名字,以及需要额外传递信息的 key
  2. 基于 target-action 的方式注册通知
1
open func addObserver(_ observer: Any, selector aSelector: Selector, name aName: NSNotification.Name?, object anObject: Any?)
  1. 实现监听通知的方法
1
func onReceivedNotification(note: NSNotification)
  1. 发送通知,可以传递发送通知的对象(object)以及一些额外的信息(userInfo)
1
open func post(name aName: NSNotification.Name, object anObject: Any?, userInfo aUserInfo: [AnyHashable : Any]? = nil)
  1. 移除注册的通知
1
open func removeObserver(_ observer: Any, name aName: NSNotification.Name?, object anObject: Any?)

当然 NotificationCenter 也提供了一种更加便利基于 block 的方式注册监听通知,其将 2,3 两个步骤整合为 1 个步骤。

1
open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol

整体流程很清晰,简单易用,但是却有一个严重的缺点 —— 弱类型。我们接收到的是一个 NSNotification 对象。

1
2
3
4
5
open class NSNotification : NSObject, NSCopying, NSCoding {
open var name: NSNotification.Name { get }
open var object: Any? { get }
open var userInfo: [AnyHashable : Any]? { get }
}

假设我们需要传递一个关注状态改变的信息,那么需要包含关注更改后的状态以及被关注者的 ID。那么我们需要从 userInfo 中取出所需要的值:

1
2
let following = notification.userInfo?["FollowingKey"] as! NSNumber
let userID = notification.userInfo?["UserIDKey"] as! NSNumber;

也就是说接收通知的一方一般需要要查看文档才知道怎样从 userInfo 取值,取的值的类型又是什么。这对于使用是极为不方便的。

SwiftNotificationCenter

SwiftNotificationCenter 是一种面向协议的通知中心方案。使用方式如下:

  1. 定义协议
1
2
3
protocol FollowingChanged {
func followingDidChange(following: Bool, userID: NSNumber)
}
  1. 基于协议注册通知
1
Broadcaster.register(FollowingChanged.self, observer: observer)
  1. 实现协议方法
1
2
3
4
5
extension ViewController: FollowingChanged {
func followingDidChange(following: Bool, userID: NSNumber) {
// do something
}
}
  1. 发送通知
1
2
3
Broadcaster.notify(FollowingChanged.self) {
$0.followingDidChange(following, userID)
}
  1. 移除注册的通知
1
Broadcaster.unregister(FollowingChanged.self, observer: observer)

我们可以看到,其基于协议的方式解决了弱类型的问题,但其也存在着扩展性较差的问题。

依然是关注改变的场景,假如随着业务的发展,有的地方需要知道关注后是否为互关的状态,那么又需要增加一个字段来标识。因此我们需要修改协议,增加参数 followingEachOther,且由于它不是必须传递的参数,因此是 optional 类型。

1
2
3
protocol FollowingChanged {
func followingDidChange(following: Bool, userID: NSNumber, followingEachOther: NSNumber?)
}

如果在该类型通知被广泛应用的场景,那么需要修改的地方就尤其多了。这显然也是难以接受的。

EventBus

EventBus 在安卓中被广泛地应用,其流程如下图所示:

EventBus-Publish-Subscribe
图片来源:EventBus

使用方式如下:

  1. 定义事件
1
2
3
4
 class TPFollowingChangedEvent: NSObject, TPEvent {
private(set) var following: Bool
private(set) var userID: NSNumber
}
  1. 注册事件
1
TPEventBus<TPFollowingChangedEvent>.shared.register(eventType: TPFollowingChangedEvent.self, subscriber: self, selector: #selector(onEvent(event:object:)))
  1. 实现监听事件的方法
1
2
3
@objc func onEvent(event: TPFollowingChangedEvent, object: Any?) {
// do something
}
  1. 发送事件
1
TPEventBus.shared.post(event: event, object: self)
  1. 移除事件的注册
1
TPEventBus<TPFollowingChangedEvent>.shared.unregister(eventType: TPFollowingChangedEvent.self, subscriber: self)

我们可以看到, EventBus 也是强类型的。

假如依然是关注的场景,需要知道互关的状态,那么我们只需要在 TPFollowingChangedEvent 中增加 followingEachOther 属性即可。如下所示:

1
2
3
4
5
class TPFollowingChangedEvent: NSObject, TPEvent {
private(set) var following: Bool
private(set) var userID: NSNumber
private(set) var followingEachOther: NSNumber?
}

因此使用 EventBus 实现了以下需求:

  • 强类型
  • 可扩展

EventBus 同 NotificationCenter 都是基于 target-action 的方案,但是我们不难将其扩展为支持 block 监听的方式,并且同样让它也能够自动移除事件的注册。类似于如下的使用方式:

1
2
3
TPEventBus<TPFollowingChangedEvent>.shared.subscribe(eventType: TPFollowingChangedEvent.self).forObject(self).onQueue(OperationQueue.main).onEvent { (event, object) in
// do something
}.disposed(by: self.tp_eventTokenBag)

这里我实现了一个小巧但比较全面的 EventBus 供参考:TPEventBus

最后

我们可以看到,一对多场景中观察者模式的应用流程都大同小异,但是如何更好用确是值得深思的。当然以上也只是我在一些使用场景上的思考,肯定会欠缺考虑,欢迎拍砖😊。

携程

最近办去日本的签证,由于是个人游,白本,社会人,一路下来也不容易。

首先由于在携程订了机票,就想在携程办签证,后面发现携程要的材料无比之多,遂放弃携程去了飞猪的中青旅办理免机酒套餐。不料资料交上去后,中青旅却不给我办,没有任何理由。

于是我又转头回携程,携程说他们自身不办理免机酒,免机酒是外包给其他机构办理。遂又在携程订了酒店。

这些都还好,携程有一点比较奇葩,需要一份担保书。但是谁愿意为你担保呢?于是我委托我爸做担保人,把担保书碾转两千公里快递给我。

不管怎么说,我是服气携程的,毕竟把事情办成了,按照他的规定时间,分毫不差。

动漫

毫无疑问,动漫是能够给我带来快感的,但也容易沉迷。哈哈,有时候想,活着其实也不容易呢,死才是一件简单的事情。

没啥好说的,大家都是成年人,为自己负责。并且这是贯穿一生的。

最后

这周六就要去霓虹国了,准备了近两个月,有点小期待。

最最后

为啥我这么话痨呢?呢??呢???

失望

上周无意发现 Apple 的 App Store 上架了一个盗版应用,其名字图标都与国内被下架的一款热门应用相似。不仅如此,其甚至拥有着 5k 多次的评价,综合评分高达 4.8。但是奇怪的是,显示在应用详情页的评论却说这是一个赌博软件。再仔细一看详情页的介绍,却发现其分类是在工具类,应用截图及简介也说明其是一款与跑步相关的工具应用。于是我查看了一下大家的评分详情,排在最上面的无一例外都是投诉其是赌博软件,投诉自己误认为是其另一款软件而被欺骗的低分评价,而排在后面的均是把软件伪装成是被下架热门软件的高分评价。毫无疑问,这些高分评价都是被刷的。当我下载这个应用后,我不知道怎么去描绘我所见,只能用触目惊心来形容,满屏的花花绿绿,中间那硕大无比闪动的按钮更是带着讽刺。

于是我想我应该投诉这个应用,我就做了。后面我会发现,在苹果的应用商店投诉一款应用是多么困难的事情,你在应用商店几乎找不到投诉的入口,至少我没有找到。后面我更会发现,投诉一款免费应用更是难上加难。

我花了将近 10 分钟找资料,然后知道了投诉的入口。找到入口后,却发现对于免费应用苹果不给你反馈的选项,你只能找到应用的开发者反馈问题。这很有意思,如果是普通的反馈应用缺陷,无疑我是可以这样操作,但这里我希望的是应用下架。这样恶劣欺诈行为的开发者会通过我的投诉下架自己的应用?

而从几年前的资料来看,对于免费应用,一开始苹果是提供了向其反馈投诉的通道的,而目前关闭了。我不知道什么原因苹果要关闭这个通道,但毫无疑问这就是错的,我没有任何怀疑。

得知不能够通过这个渠道后,我又通过其他的途径电话联系到了苹果的支持团队。我花费了半个小时和支持团队沟通,支持团队终于说会把我的问题反馈给 APP Review 团队。但是希望我能够理解,他们能做的也只能是这么多了,因为至此,此事已经不归他们管。

一周后的今天,盗版应用依然没有被下架,评价区每天新增成千上百条控诉,然而这些控诉石沉大海,没有任何作用。

苹果确实强势,确实自信,他相信自己不会有错,他的审核也完美无比,他不需要任何反馈。

最后

前两天在微博看到一个开发了多款优质应用的开发者被苹果无理由封禁,对比上述盗版应用的肆无忌惮多少有些心寒。

让时间去检验吧,让大家去竞争吧。

服务是被竞争出来的。

o(╯□╰)o

让我来回顾下昨天做了些什么。

早上 10 点起床,去吃了庆丰包子的早餐,2 个窝窝头,1 碗绿豆粥。

然后散步回家,本来计划是先背单词,最终是看了闲书。

到了 12 点 30 分,却是一点也不饿,没有食欲,毕竟是夏天。于是我就听了会 Podcast 睡了。本来我是不想听的,因为没有特别喜欢的节目,但是又不想睡,眼睛却撑不住。

醒了,下午 2 点。饮食要规律,总要吃点东西。于是我点了外卖,点了蛋糕,是味多美的一款新品,奶油格格。

蛋糕很快就送到了,打开外送袋,取出蛋糕,它是白色的、红色的,还有——冰冰的,原来蛋糕的底部还有冰袋。一盒蛋糕共有 6 格,每一格小蛋糕都很精致、漂亮。每一小格分 5 层,最上面一层是半枚草莓,是酸的;草莓下面则是一层大奶油,是甜的;大奶油下面是一层蛋糕,是软的。然后接着一层薄奶油,最后再接一层蛋糕。冰冰的、软软的、甜甜的、酸酸的,都是我喜欢的味道,一口一格。

4 点半,看了电影《深夜食堂》,片头片尾曲真好听,暖暖的,还有一种厚重感。

6 点半,吃了牛肉面,还点了半碗牛肉。好吃,还想吃。

8 点半,开始了背单词,在半梦半醒中总算是背完了今日份的单词。

11 点,醒来了,想着还没跑步,最终还是睡了。

总结

一鼓作气,再而衰,三而竭。

最后

美好的一天开始了。

台风——利奇马

近来北京的天气凉爽,温度适宜,连着下了不少的雨。

由于一直没有怎么看新闻,昨天才知道原来是台风“利奇马”登陆内地,听说又有几十名遇难。想想自己能够在还算是远离天灾人祸的地方居住已经是足够幸运。

香港

最近香港由于反送中而成为全球关注的焦点,这件情本身整治敏感,而我其实对政治是持消极态度的。我也没有花费太多的时间去了解它,现在想想其实是不应该的。不过,新闻言论漫天飞,什么才是真相?能够找到关键点、本质是一件值得努力的事情。将来的幸与不幸一定会发生在我们身上。

推荐

最近看了一本书———《叫魂》,还蛮不错的。讲的是清朝中期发生的“叫魂”事件,一种迷信,或者生存压力造成的恐慌。整本书架构非常出彩,作者竟是个美国人,也许旁观者清(也或许在资源等方面更有利)。

最后

美好的一天开始了。

电视剧

最近看了 《九州缥缈录》以及《长安十二辰》,毫无疑问后者更好。看了一些评论说是想把《九州缥缈录》与《权力游戏》做对比,但我看了以后,两者根本就不是同一个类型的,也更不是一个质量等级(这里的比较仅针对电视剧,我并未看原著)。缥缈录看似架构恢弘,但实则只是裹着一层巨大的皮囊而已,内里实在太虚了。如果不是刘昊然真的很帅哈哈,我是不推荐看的。

《长安十二辰》我虽看的不多,但看起来不假。有些电影、电视剧你一看就会觉得怎会如此之假,宛如把观众当成弱智。

鸡汤

开年就说,今年会是重要的一年。但是我绝对想不到,今年会是我如此失控的一年。

康德

康德的生活从表面上看平静无波,并且一成不变。这与康德生来身体羸弱有关,他个子矮小,体弱多病,身材有点畸形,一边的肩膀比另一边高,由于他清醒地意识到了这一点,为了能够保持身体的健康,他持之以恒地恪守自己制定的生活规则,给自己设定了明确的人生目标。通过这种努力,他能够健康地活到高龄,并最终基本上实现了自己的人生目标。康德严格地过着极其有规律的生活,关于此,同时代人的书信和报道中都有记载。他总是五点起床,然后立即投入工作。从七点至九点,他在大学里讲课。九点至下午一点,这是他用于个人研究的主要工作时间段,他的科学著作大都是在这段时间里完成的。接着是午餐时问,进餐时康德几乎总是有客人陪伴,他更喜欢接待的客人都是普通市民而非学者。午餐是用来完全放松自己的,往往要持续好几个小时,席间会谈论各种各样的话题。接着是散步,同样是按照精确的时间,而且也非常具有规律性。散步之后,他又开始工作,晚上十点准时上床睡觉。

最后

一般而言,做点事情总是困难的,等有所积累才会体会到其乐趣。然而很多人终其一生都迈不过这道坎,现在的我就是如此。我要迈过去。

搜索、百科、博客

最近计划去日本,因此阅读了一些关于其的资料。在阅读查找的过程中深感这真是一个无底洞。从文章或者博客看到一些事件、一些名词,从而去搜索它、更进一步了解它。而在了解它的过程中又会出现许许多多你又不认识、又想去想了解的事件、名词。

我从一篇博客看到了“大政奉还”,因此去搜索它。

大政奉还,发生于日本庆应三年10月14日(公元1867年11月9日)。江户幕府第15代将军德川庆喜受到萨长同盟缔结的威胁,主动把政权交还天皇,成立以德川家为中心的新政府,实则使德川庆喜仍然掌握政治实权。以萨长同盟为首的讨幕派对大政奉还这样的内容有异议,决定策动政变,事件最终引发戊辰战争。

最后,讨幕派以西乡隆盛为代表,德川家以胜海舟为代表进行和谈,德川庆喜遭到软禁,江户时代才正式告终。

毫不意外,你在过程中又发现了许多新的让你感兴趣的东西。你会想了解江户幕府是什么?为什么是还政于天皇?还政之后又发生了什么?从而你又会去搜索去查看,而百科或者文章之中的超链接会让你轻松触达内容。

之后这些事件、名词会扎根在你脑海:战国三杰、织田信长、丰成秀吉、德川家康、本能寺之变、明智光秀、闭关锁国、大政奉还、明治维新、昭和天皇、东条英机、二战、切腹、终战诏书、人间宣言、三岛由纪夫、川端康成、竹久梦二等等。你从它认识到另一个它,你的好奇心让你永无止境。

A、B、C

大抵我的意志力是薄弱的,我经常会忘记自己的目的。

从 A 想到达 B,结果却是 C。

不过因此,这个周末我邂逅了《仙剑奇侠传》。

有机会聊聊它,我还是算喜欢的。

周杰伦

周杰伦的微博超话昨天超过 1 亿的影响力,大幅度领先第二名蔡徐坤获得第一名。正好昨天树文也和我说他买了在济南的周杰伦演唱会门票。

我其实也蛮想去看一场 Jay 的演唱会,不过并不是很热心,甚至不会去主动。不过如果是被动的形式,我肯定会去的。然而我这样的姿态是不可能买到票的,除非我很舍得。当然,这样对于我来说又是一个矛盾啦。所以呢,看天意hhhhh。

最后

又是美好的一天。

去日本

最近总算是下定决心去日本。查攻略、办签证、买随身用品,顺便也办了一张信用卡,算是自己的第一张信用卡。

一些参考链接:

老人与猫

在小区中,你总能看到各种奇奇怪怪的猫咪,有的会亲人,但绝大多数对人保持着足够的警惕。猫某些时候的叫声真让我毛骨悚然,竟是与婴儿的哭声一致。(似乎是发情?)

路过四号塔楼西侧的小道时,会经常遇到一位老人在认真地给猫喂食。

”我这是善心。人和动物之间是相互依存,人死了,动物也活不成,动物死了人也活不成。“

”它牙被拔了,只能喝稀的,你看它那么瘦!“

”绝育要 500 呢。“

”我死了,它们也活不成。“

当你被遗忘的时候,你就真的死了。我们都在建立某些联系,追逐存在的意义。

最后

吃饱,就是幸福。

有一个可以思念的人,就是幸福。

今天又是美好的一天hhhhhhhha。