开学前的最后一周了。去 CMU SV 校区拿了新学期的材料,在 NASA 园区里,进门就有一个航天飞机的模型。参加了秋季学期的 orientation,还被 cue 到要发言讲个人经历。周六公园聚餐见了些同学,逐渐有了些线下上学的感觉。
除此以外没做什么事情,陪新来湾区的朋友采购些东西,顺便在华人超市买了些有的没的,榨菜,粽子,果啤,还有瓶旺仔牛奶。尝试给 UniLWP 修 bug 添加新功能,但发现之前写的代码已经快忘了什么意义,目前还没什么进展。和很久没联系上的笔友又联系上了,邮件里简短地聊了下现状。想要上 Computer Graphics 这门课但 petition 还没进展,return offer 暂时也没信息因此又开了 LinkedIn 会员准备投递秋招以及准备面试。
剩下的时间主要就在打游戏。花了十几个小时把 MGS V 在 PC 上又打了一半,因为之前在 XBOX 上通了一遍所以其实没啥新的,而且 PC 版还不像 XBOX 一样可以常驻后台一直修基地平台,因此进度也不算快,最后也厌倦了删了。
晚上睡不着爬起来又把宫崎骏的红猪看了一遍,提到红猪就又要推荐一遍讲宫崎骏和飞机的这个 YouTube 视频,特别是 Macro 进入飞行员的 limbo 看到飞机组成的白色飘带那部分。然后最近在听 COOL。很老的 Fusion,专辑封面很有趣,以前我爸放这个而我不知道名字的时候,就直接叫这张专辑"两根黄瓜"。
2021.8.24
周日的时候闲得没事,去 Product Hunt 上传了下 Hourglass 的信息,到周一晚上的时候差不多稳定在当日第八的程度,反响还行。只不过再看 PH,每日的 Product 不再是 App 为主,而更多的是服务,写作这篇博客之前去他们网页上一看就好几个:Newsletter Kit,Domain Finder,Startup Acquisition - 已然更加像是给创业者看的列表,而不再是独立开发者和应用爱好者们讨论好玩点子的地方。再加上穿插在列表中的推荐项目,各路人马私信寻求利益交换(即一赞换一赞),提交不到五分钟即有 SPAM 邮件询问是否需要机器人帮忙 vote - PH 已经不再那么好玩了,甚至我,即使一开始只是抱着玩玩的心态,在提交的时候也又在处心积虑地算计刷新列表的时间,然后在 Twitter 上转推他们 mention 我的推寻求曝光,即,我也成为了这种已经不太好玩的 maker 文化的一部分。
但这么要求一个网站回到过去也不是什么有意义的事情 - 别人要是要求我回到过去继续像本科一样翘课熬夜肝项目,我也只会耸耸肩说有什么好处吗,大家都在 move on 而已。最近还有一次比较明显地感受到了这种错位感,就是和已经毕业工作的一个校友朋友聊,提到学生时代的很多爱好,当然也包括上架独立 app,在他工作后也都无暇顾及,也并不觉得有意义再去做了。
再之前翻看独立开发者群,还有人提到感觉独立开发式微,看热潮变成了 3D / NFT / Metaverse,不知道 The Next Big Thing 是什么。我出于个人原因,当然是对 Metaverse 低看一眼,觉得是一种具有传销潜质,但包装的很科幻的思潮罢了,毕竟 meta 精妙的地方,就在于套娃一样的“不可证伪”和“装作自知”。但不管如何,这种对变化的切身感受我倒是没有什么要反驳的,如今世界一天一个样子,股价可以顷刻腰斩,国家可以一天沦陷,要说明天人类就开始打热核战然后十年内所有人被迫进 matrix 造 metaverse,好像也不是那么天方夜谭,甚至有种求仁得仁的喜剧之感。
最近听了啥:Everybody Wants To Rule The World 和 Self Care。最近看了啥:把 Daniel Craig 主演的几部已经上映的 007 全看完了。
2021.8.21
最近很多事情都是“在做了在做了”的状态。全职在找了,选课在看了,个人项目在上架了,驾照在办了。还有很多事情想做但连开头都没,比如比如把博客从 Ghost 迁移到 Nuxtjs 上,比如写个人游戏,比如找个时间去金门大桥看看海。在抉择做与不做乃至以此消磨时间的过程中,感觉一个人生活还是要有很强的自我调节能力,不然实在很容易一天就消磨过去了。

Hourglass 上架了,可以从 Mac App Store 下载。我还在想要不要顺手把 Diffuse Mac 给做了,但好像也没太多时间。
2021.8.15
实习结束了,有成就也有缺憾,不过暂时也不太去考虑这些,距离开学还有两周,想先放松下,然后把之前拖延的事情都给做下。
想起来临走之前和大组老板告别,他说等后面可以线下一起喝个酒之类的,说完好像想起来了什么又确认说你达到能喝酒的年龄了对吧,还挺出乎我意料的。都知道我在读研究生了,想来再怎么也不至于这么年轻,更何况来加州后一直懒得去剪头,现在是头发长到像是狮子,日常要靠帽子来压住头发的状态,整个人可能看起来更为年老落魄些 - 至少我妈和我视频电话的时候是这么说的。
然后就是,和朋友聊天的时候还提到,看到还在读本科的实习生对于在苹果实习十分兴奋,这我当然是能理解的,我也一样。只是他们谈及苹果的时候,多了一种发自内心的自豪感,处处以“我们公司”来称呼,让我想起来之前我本科的时候拿个百度的月饼就好开心要发朋友圈,有种崇拜公司,靠称呼来获取更大的组织的认同感的感觉。这也是能理解的,不管是发自内心的开心也好还是有意识地借力公司的存在感,我都没意见,只是觉得大可不必积极把自己融入到公司的 narrative 里。当然,也可能是我过于警惕大型公司这种组织性的设置,也过于注意个人空间了,但于我而言还是这样舒服些,更何况最近公司的一些新闻并不光彩,甚至到了一种反讽的程度 - John Gruber 曾经在博客里对 Facebook 工作的人表达近乎迫害的意图,即 - 你选择在这家公司呆了下去,那你活该简历烂没人要 - 这种观点还有人小丑一般地附和以及辩解,而当苹果一样做了似乎是恶的事情的时候,不知道 John 会不会因此一样一杆子打死所有苹果员工。我这里甚至不是在讨论最近公司的政策是否对与错,而是盲目把人和公司绑定在一起是一种多么危险,甚至在 John 这个语境下可以称之为伪善的举动。
EDIT:想起来似乎是这半年来第一次如此旗帜鲜明地发表看法,但无所谓了,这个博客已经叫 echo chamber 了。what do you expect?
Taking screenshots of SwiftUI views on macOS (Swift 5)
import SwiftUI
extension View {
func imageRepresentation(rect: CGRect) -> NSBitmapImageRep? {
let hosting = NSHostingView(rootView: self.frame(width: rect.width, height: rect.height))
hosting.setFrameSize(rect.size)
hosting.setBoundsSize(rect.size)
hosting.layout()
hosting.layerContentsRedrawPolicy = .onSetNeedsDisplay
hosting.setNeedsDisplay(rect)
if let imageRepresentation = hosting.bitmapImageRepForCachingDisplay(in: rect) {
hosting.cacheDisplay(in: rect, to: imageRepresentation)
return imageRepresentation
}
return nil
}
func asImage(rect: CGRect) -> NSImage? {
if let cgImage = imageRepresentation(rect: rect)?.cgImage {
return NSImage(cgImage: cgImage, size: rect.size)
}
return nil
}
func asJpegData(rect: CGRect) -> Data? {
return imageRepresentation(rect: rect)?.representation(using: .jpeg, properties: [:])
}
}
Usage:
let view = AnyView(<Your View Here>)
let imageData = view.asJpegData(rect: CGRect.init(x: 0, y: 0, width: 128, height: 128))
2021.8.8

Hourglass 支持读取正在播放的音乐了,后面这套机制可能能用来写 Diffuse Mac,目前四个角可选的内容基本都做完了,日历事件,时间,正在播放,天气,可能要再加一个时区时间,然后还有一些边边角角要修。
算下来搬过来一个半月了,自己一个人住方便是方便,但也容易变得懒散,再加上作息不规律,牙又开始疼了,准备先吃点药看看情况,不行的话就要约牙医了,刚好处于保险前后交接的时间段里,比较尴尬。
总是有很多事情要做,总是没有时间来做。
听了 FKJ 的 Just Piano,Funky DL 的 Jam,J-Fever 的 沙琪玛,此外还听了 On The Table,Edamame,Crank oFean - SOLO (SKYLAB Recapture),In The Mood (hommage to moods),GO!!!! (ON THE COUNT OF 3),Fortune - All Alone Ft. Alexander Lewis,和 COMPUTER DATA - Healing [CLIPP049]。看了 CODA,虽然中间有事情略过了一部分,但仍然看的很开心,是那种即使知道剧情走向也仍然会想看下去的电影。
2021.8.4
Day One 给我推荐了七年前的照片,看了一眼还是刚高考完几个人在咖啡厅折腾项目的时候,当时刚拿到了第一台 Mac,还跑着 OS X Mavericks,壁纸是波浪那个。也大致是那个时候开始捣鼓 wordpress 和 quartz composer 之类的,然后看学长 Xcode 用的很神奇,入了学 iOS 的坑。
照片里的人好多都没再联系了,结婚的结婚,换工作的换工作,创业的创业,只有朋友圈偶尔点赞,关系后来处的最好的一两个人最终我也拉黑了,没再知道后来发生了什么。有的时候再看到这些会觉得自己的路怎么越走越窄 - 虽然我也有在交新朋友罢了。
看完照片后就想着要不要把 years of pilgrimage 那个 Unity 项目再拾起来,做成一个短篇故事集一样的 indie game,内容就是用 low poly 重现一些过去个人经历 - 重要的事件,做过的梦,之类,算是一个 3D 版本可以交互的 Day One。
2021.8.1
给博客升级到了 Ghost 4,顺便更新了下主题支持了暗黑模式。
最近在做一个新项目 Hourglass,其实就是把之前参与 Flutter Clock 竞赛的 ConeClock 拿来做成 Mac 桌面,效果是这样的:

开发进度会在这个 Twitter Thread 更新。此外最近还有些其他的想法,不知道有没有时间写了。
2021.7.28
今天给 Craig 演示了项目,具体内容受制于 policy 还是没办法写出来,但可以说是整个实习里最有“我在实习”感觉的一天了,也算是变相弥补了两次 WWDC 奖学金都没去成的遗憾。上周朋友开车陪我去了趟公司附近的 visitor center,在那里买了件公司文化衫,今天演示的时候还特意穿了作为加成,然而好像并没有人注意到 hhh

这之后可以考虑些之前因为准备演示而忽视的事情了,比如学校的秋季课程,一些个人的打算,没回的邮件之类,然后周末准备骑电单车出去逛逛,结束实习开学前去学下开车。
听了 Voyage Funktastique Boiler Room Montréal DJ Set,这套太强了,在 Apple Music 和 Soundcloud 上都收藏了一遍。以及听了 bbno$ 的 edamame。
2021.7.21
还算开心的一天,给大组的老板 present 了实习项目,反响貌似还不错,也问了我一些问题,不得不说好像公司里的 manager 都挺技术的,问的问题很尖锐,明显地能感知问的人对整个东西有理解,知道某些组合的取舍,某种技术可以达到的边界,某种问题本质上的定义,可以算是技术的那种 sense,对我来说是个让我觉得很不容易的事情。原本之前一直想用员工优惠买台 iPad 但最近手头好像不是很宽裕就没买,演示之前想着那就如果这个项目能再进一轮的话就考虑买吧。结果 present 完不到两个小时,消息出来了,可以再进一步给更高层的人继续演示项目,也算是给我一个借口冲动消费了,虽然到现在我还是没买,好像也没什么想法能用来做什么。不管怎么说,虽然项目还有很多缺口,有很多我没头绪的问题,但在内部层层演示的进展还算平稳,好像自己应该更加积极和自信地去推进这个项目才对。