Blog logoJustZht

Blog logo

2019.6.20

 • 

Macbook 键盘出问题了,因此最近用起来多了很多双击的困扰,比如敲击 hao(好)会经常粘连成 haoo(好喔)。虽然这么一说还挺可爱的,但编程的时候也总是变量名敲错地烦躁,因此约了周末的 Genius Bar 看什么情况,还好一般的任务我可以用 Pixelbook 来代替。最近还在 Pixelbook 上装了 Idea 和 Webstorm,只不过需要手动编辑 desktop 文件把图标路径从 svg 指向 png,其余都大体能用。
个人项目再一次往后拖了,也不知道暑假的时候还有没有空完成。此外在考虑暑假之后到明年六月份是:去上海 Unity 入职 / 重新面一次微软苏州的 iOS 岗 / 留在北京工作,还是在家把 Epoch 做完发布。我到现在也没有一个具体的想法,Unity 的话 offer 应该还算稳妥,好处就是也许能跟着我很喜欢的框架的项目组开发,还是少有的上海本地有独立自主开发权的项目,真做好了也就可以说是 Dogfooding 了;微软苏州如果暑假忙完刷算法应该可以再试试,只不过不确定自己的水平,也还不清楚和下半年的几场考试冲不冲突;在家的话就是可以完全准备语言考试,也有时间宅在家,如果充分投入的话也许明年六月份就能做出来 Epoch,意义和潜在的后续发展可能都挺大的。
毕业证去长沙问了一次,说还没印出来,要排在今年毕业的学生后面印了,也不知道我到底什么时候才能真正毕业。

2019.6.6

 • 

macOS 升级到了 10.15,跑了下 Marzipan 完成度出奇地高。然后发现 Unity 导出 il2cpp 项目不正常,于是又降级了。今年 WWDC 还是有很多新东西的,比如 SwiftUI 和 BackgroundTask。但是令人迷惑的东西也多,比如 iPad 所谓的新多窗口多任务交互感觉更加难用了,以及新 Mac Pro 似乎是很强,但定位也并不是给一般的 pro,而是土豪 pro 们了,因此目前为止苹果产品线上还是没有一个能满足一般的多媒体创意需求(软件开发,游戏开发,建模和渲染之类)的中等价位的台式主机/笔记本产品,也没有 N 卡。
Skyline 的 Dark Mode 支持已经推到 Stable Channel 了,顺便解决了 Android Q block background activity 启动的警告。估计会在 6.10 - 6.16 开一个小的 0.99 刀促销活动来庆祝下。
看了 Minority Report — Dismantling Precrime

2019.5.31

 • 

坐上了离开长沙回北京的车。
来长沙这几天主要就是办毕业证的事情。事出突然,看到消息的当天就买了晚上的车票。在去长沙的火车上又写了几封邮件 spam 了一圈科技媒体推荐我的 Vortex,结果今天收到了好几个 Vortex 的崩溃报告,恐怕是编辑们的手机,自觉推荐是无望了。
学校的事情没什么要说的,就是提交一个材料申请正式毕业,一切无误的话两周后会签发毕业证书。和辅导员聊的倒是异常愉快,聊了计科 14 级毕业后这一年大家都如何。
听了 Podcast 才知道一个朋友严格来说并没有上完大学,而这算是我所认识的第三位大学没有完成的人了,而我以前经常拿别人的例子(比如 Randy Lu 的大学经历)来试图说服我妈,特别是大二十分想辍学的时候。现在已经要真正毕业了,我妈也对我的惊人举动也见惯不惯,倒也并没有再举例说服她的必要了,但我对这个发现还是颇感惊奇。我妈因此问我,要是我回到大二那个特别想辍学的时候还会怎么选择。我说现在我已经没有选择了,但我如果以后有了下一代,有着独特的想法而学校挡住了他的路,那我就会让他休学一年,让他好好的去做自己的事情。如果他受到了社会的打击认清了现实,那是个好事,因为他提早体验了社会。如果他受到了社会认可被推到了前台,那也是个好事,因为从此他多了一条路,多了个选择。对于我来说,我觉得选择的结果好与坏倒没有以前看的那么严重了,但多几个选择,特别是本身就有想法的人来说,是会有很大的好处和幸运的,因为有想法的人终究不会过的太差,但提早知道自己是有选择的,并且明白自己选择的后果,会让人更早地考虑清楚很多事情。
大一的时候,因为尝试了几次校内比赛被只会 PPT 瞎吹的学长们压制的不行,愤然就去做外包为主,接着大二就去公司实习了,实习的这家公司也符合了我对外界的一切想象,因此更加觉得公司更能比学校实现自己的价值,和上一位辅导员关系闹的特别僵。现在让我重新来一次的话,我倒是会有所改变,也许初期会跟着老师走几个比赛项目,有老师的影响力能保证校赛不被打压,接着湖南也没几所大学,自然靠着学校的声誉也能保证省赛不被打压,接下来国赛再真的发挥自己的能力也不迟。这么做下去对自己和学校的关系会很有好处,也方便自己有个借口不被学校的条条框框所束缚,进而继续做自己想做的东西,比如混开源社区攒 star,比如学点建模和 VFX。等到自己在校内混到了一定知名度的时候再离开实验室,以比赛或其他的借口出去实习,就不会有那么阻力了。然而当时自己心态比较傲,也太早有其他的经历来作为资本让自己傲起来了,就没有选择这条路,而是直接翘了课走人。
翘课是一件当时对我来说很有吸引力的事情,前提条件自然是我是一个计算机偏软件的学生,如果我是医学生自然是没有这种可能性的,因为本科医学知识是靠大量的观察积累起来的,而计算机则没有这种忧虑,特别是软件相关更是几个月就更新一轮框架,每年就更新一轮系统,总有老师和教材跟不上的情况,而且教材在这种情况下也失去了跟随新版本的意义,这也是为什么大学一般都只教学语言但不教学框架使用的原因。回到翘课这件事情上,老师自然是痛恨的,毕竟对于老师来说,这个职业的意义也就是有人在听,但尴尬的是很多课的确没有在公司实习来的让人觉得有意义,因为前面也说了:学校是不会真正教你怎么去用最新的工具链编写 GUI 工具的,而对于学生来说,如果在学校学习了好几门语言,都只知道如何在命令行里输出 x + y = z,那学生如何知道这门语言有什么用处,又和他们日常使用的电子产品有什么关系的?而在公司实习是实打实的在做看得见摸得着的东西,虽然会有人嗤之以鼻觉得公司的业务是最没价值的内容,但很少会有人一开始就对计算机和软件能做什么有清晰的认识的,如果没有一个具有实体感的东西让他们入门,很多人最后就去打游戏去了。
最后,延期毕业也一年了,虽然这一年并没有像我的很多同学真正在去做全年全职的工作,也没有 996 过,但我自己也明显地感受到了可支配时间相比大学时代的减少,而这更加让我觉得大学就是一个寻求可能性的地方。对于很多人来说,入学时是没有目的的也没有意识去寻找目的的,而我的问题倒是太有目的了,因此结果都并不是最理想的。大三做经验分享会的时候,我对学弟说最好的方式就是找到喜欢的事情然后去做生产相关的事情,喜欢电影就去写影评,喜欢玩游戏就去做游戏,最后这些生产的内容都会有价值。但现在看来,当时的我反而只盯着生产价值这件事情在去做,因此反而有种苦行僧的感觉,忘了价值也是要分好几个篮子装来分散风险的。如果当时能多分点时间在其他个人爱好上,现在也许会有更多实现价值的门路可以走,自己也更镇定和自信,遇到打击性的事件也不会徘徊那么久。

2019.5.29

 • 
Introducing Wavy

我自己也没想到又折腾了一个动态壁纸出来,而且这次特别快,差不多五天完工的。Wavy 是一个 Low Poly 海面动态壁纸,下载地址可见 Google Play
为什么会(又)做了一个东西呢,因为 Wavy 所使用的 Low Poly Shader 原本是我在编写为 Unity 的 macOS 窗口插件的时候所用的测试内容,没想到还挺好看,动态效果如可以看下面的 Instagram:

View this post on Instagram

WIP

A post shared by JustinFincher (@justzht) on

因为效果看起来还不错,我其实之前就有一份个人用的简陋版本在 Pixel 3 用着。后来想着不如拿这个来快速试下 Android 上免费 + IAP + 广告这一盈利策略,也就是说我在实现 Google Play 上大致可用的几种盈利模型。而 Skyline 就是付费无内购的高端软件,Vortex 是免费无内购的入门软件,因此这个时候需要一个免费加内购的软件来补充这个实验对照。Wavy 因此也本着求快的方式简单做了下,在 UI 和精细度上都不如 Skyline 和 Vortex,有兴趣的同学可以去下载玩下。
产品线齐了之后我估计就不做 Android 动态壁纸了(除非 Metropolis 项目可以再抢救下),接下来把在 Windows / macOS / Android 做动态壁纸的经验总结下,写一个跨平台 Unity 插件,准备授之以渔了。目前在做的 macOS 版估计是第一个实现的组件,其实 Unity 在这几个平台上做动态壁纸的原理都十分简单,难的反而是边边角角的事件处理,举例来说:

  • macOS 上的实现只是对 NSWindow 的 mask 做处理
  • Android 上的实现关键在于 unityplayer 的 constuctor 传入的 context

但是为了满足上述的两个简单的思路,有很多细碎的坑要填:

  • macOS 的 window collection 处理,不然切换 space 的时候不会跟随
  • macOS 休眠时的回调处理
  • 提供 macOS 的 statusbar menu API 给 Unity
  • Android Wallpaper Service 的回调处理
  • 一些 Unity 引入的小 bug,比如在 Android P / Q 上的宽高比问题,2018.3.7 引入的 string.xml 查找 game_view_desc 字段问题,一些原生插件获取 activity 的兼容问题(比如下文的 UIWidgets 目前就是默认 UnityPlayer 的 Context 是 Activity)

以上都是外人看来怕是毫无价值和创造性的问题,因为本质上做这个是在拿自己的时间去弥补平台和运行时的差异或是去绕过别人写的 bug,怎么看都是一个无底洞。但总会有这种吸附于大平台做细碎的事情的需求的,只能说为了好玩而做的吧,而且也是要恰饭的(

UIWidgets

把 Node Editor 里面的两个 UIWidgets 组件开源了,其实内容都挺简单的:

用的是 Unity Package Manager 兼容的格式,依赖了 UIWidgets 的 git 仓库,至于 UIWidgets 的 Asset Store 版本我还在考虑要不要也对应做一个包。此外还给他们项目提了一个关于 macOS 的 PR,后面如果说有时间的话我想给 UIWidgets 写一个 Rider 插件,目前的缩进和折叠支持都太差了。

2019.5.23

 • 

五月也过的很快。
工作闲暇之余总算是在写面向 Mac 的 Desktop Avatar / Live Wallpaper 解决方案了,这个插件本质上是一个 Objective-C 的原生插件,可以对 NSWindow 修改 windowLevel 和 collectionBehavior,外加获取鼠标位置 / 设置 NSStatusBarItem。而我也想通过这个再试试 Asset Store 的盈利能力。
买了一台 Pixelbook,拿来做一些备用机的工作还是挺有趣的,不像 iPad Pro 买了跑了几次 Swift Playground 就再也不知道要拿来干嘛了。另外我这台 Pixelbook 有一种以前拆封 Macbook 才有的特殊气味,键盘也和老款 (2015) MBP 一样舒服,心里很满足了。
有在慢慢准备后面的事情,这个月也花了不少钱报名语言考试。又是一年毕业季,而我像是在原地踏步,对于这个我倒是也没啥好改变的 -- 就当是 gap year 罢。
听了 Japanese Citypop/Funk Summer Chill MIX,看了 PUSHEEN'S VALENTINE

2019.5.17

 • 

十号左右的时候来上海呆了三天,参加了 Unite Shanghai。
B361F8A2-068F-4D5E-8C86-C84F844AD24A
听了一些 session,比如 ARCore,LWRP,Houdini 和 UIWidgets,其中 Houdini 关于程序化生成和装饰地形的 session 十分有趣。第一次参加 Unite 还是蛮新奇的,此外还有一些意外收获 hhh,等八月有眉目了再说。
在上海闲逛的时候拍了几张沿江的照片,后来查看的时候想起来之前在 twinmotion 里面渲染过类似角度的东西 hhh


今年的 Google I/O 上宣布了 Android Q 正式支持 Dark Mode,因此给 Skyline 做了下适配。Unity 在 Q beta 上有一些奇奇怪怪的问题,比如 raycast 的起始像素坐标偶尔会偏离到 Int.MaxValue 外去。此外 com.google.android.material:material 目前还是 1.1.0-alpha06 版本,在 Bottom App Bar 和 FAB 的处理上也有一些奇怪的 bug,因此适配了 Dark Mode 的 Skyline 还没有推到 Alpha Channel 里去。除此之外 Skyline 下一步还会提供一个 Slice Provider。
dark-theme-skyline


五月的前半个月感觉都在到处跑,没有安心坐下来真正写东西,因此 Node Editor 并没有进展太多,而且之前写的耦合太严重,准备重构了。


2019.5.5

 • 

banner
新版 Portfolio 上线了,更新了这一年做的一些内容,比如 Node Editor DemoVortexStarry 和一些 Hackathon 项目,此外 CetaceaChina Startup Simulator 也被归类到默认不展示的 Deprecated 类别里去,因为这两个项目到最终都没有上架,也没有后续计划了。
这版 Portfolio 是基于 Vue.js 来做的一个单页,后面加上了预渲染来处理 meta 爬虫抓不到的问题,不管如何都比之前 iframe + 手动编辑 html 静态页面体验好多了。


两周多之后终于把女神异闻录 5 的一周目通关了。说起来好久没这么对一个游戏痴迷过,上一次废寝忘食地玩还是大二的时候拿着朋友借给我的 PSV,恰巧打的也是女神异闻录 4 Golden,当时走到哪里都带着玩,甚至参加复旦 hackx 黑客松时,比赛日第二天早上还在会场里玩。曾几何时我觉得现实世界里的事情都已经足够我忙的,因此对架空世界的游戏有些抵触,认为游戏里再怎么高歌猛进在现实里仍然会面对烦心事,现在看来怕是因为当时现实的阻力还没有那么大,自己也像是游戏里的人物一样有信心解决所有事情而已,而境遇和心态不太稳定的时候,再去体验女神异闻录里面高中生的奇幻日常,倒也是能让自己安心和发现趣味的一种方式。

2019.4.25

 • 

今年没有过的 WWDC Playground 作品上架到 App Store 了,叫 Shader × Node,图标就是 Playground 里面做的一个 Shader 输出的效果,只不过不好捕捉所以在 Sketch 简单重绘了下。审核的时候又和苹果的人员扯皮了一下,因为审核人员拿条款 2.1 来压我说功能和 Safari 上的 Web App 没有太大区别。我这个软件虽然功能不多(毕竟只是为 Playground 设计的一个 Demo),但在 SpriteKit 和 UIKit Dynamics 的使用也算比较深层了,拿 2.1 来拒绝上架就很打击开发者,再加上之前关于有人买代码提交奖学金过了的事情我在 Developer Feedback 开了工单但是并没有得到有效的回复,因此当时很生气,感觉 App Store 审核团队严格得无理和莫名其妙,而奖学金审核却让人蒙混过关。我对审核人员没有特定的技术知识没有异议,但是最基础的技术常识都没有的话只会劝退开发者,更何况苹果一直想推 Pro App on iPad,而 Pro App 很多时候就像是我这个 Shader Node Editor 一样是外行很难看一眼明白的东西,只有特定的人群有需求,结果审核从 In Review 到 Reject 不到三分钟,直接以功能不足拒绝掉,那苹果对 Pro App 的定义到底是什么呢。我目前也没有太多 Cocoa 相关的个人项目在维护了,对这个平台的兴趣也在日渐下降,姑且看今年 WWDC 有什么吧。

2019.4.19

 • 

这几天看到 WWDC 有人提交不是自己的代码然后获得了奖学金的事情 Twitter Link 1 Link 2,实在是不知道要说什么了。在苹果开发者的帮助页面上开了一个工单,不过事已至此估计也没有翻盘的机会了,准备后面收拾收拾 ObjC 和 Swift 版本的 Node Shader Editor 开源并上架到 App Store 上。
提交 WWDC 的时候我在表单的 Comments 里面写“像是失去了魔力一样,而我只能接受自己并不总会有魔力的事实”。这一年来的确也是做什么什么都不顺,因此自然会有这类考虑,也变得有些迷茫了。后来和爸妈商量了下,下半年准备留学出国,如果这个阶段的时间比较轻松的话也可以再试试一些公司的面试,一边工作一边准备出国的考试。
最近玩了不少主机游戏,比如 Drive Club,神秘海域4 和女神异闻录5。听了 Velvet Light

2019.4.17

 • 

WWDC 2019 的奖学金结果出来了,结果我没有过。毕竟自认为 Shader Node Editor 这个作品的创意和完成度都是很高的,很莫名其妙了。
基于 Unity 和 UIWidgets 的 Scripting Node Editor 目前已经能运行基本的逻辑了,比如在 MonoBehaviour 内的 Update 打印 Hello World。在此之上我更新了下 UI,写了一个给 Unity 在 macOS 上的插件来修改 NSWindow 的标题属性,fullSizeContent 和 mask 从而实现了一个近似于 Chrome 的效果,这个截图里面除了 window control 以外窗口的其他内容都是 Unity 和 UIWidgets 绘制的:
Screenshot-2019-04-17-at-20.16.15