Blog logoJustZht

Blog logo

2019.1.30

 • 

成绩出来了,没什么大问题的话就能结束延期毕业了,但是据说双证要等六月份才能拿,因此只好等着。如果真的能有什么文书证明我六月份才算毕业,我倒是可以今年再去投一次 WWDC Scholarship,项目功能我都想好了。
考完在家等待的这几天去了次北京见朋友们,去了次合肥见猫猫和高中同学。然后感冒了在家闷头打了几天游戏,主要在打 They are billions 和皇牌空战 7。答应朋友的一个项目到现在也没动工太多,自己的项目也都废着。就在下午还收到一封邮件,当前版本的 Google Places SDK 已经被宣布 deprecated,Skyline 2.0 在使用的 Place Picker 特性也一同废弃,暂时从文档来看谷歌还没有提供一个价格合理且方便的替代 API。虽然 Skyline 2.0 在编写的时候留了个心眼做了一个基于 Mapbox API 的 fallback,但这么一搞我真的头都要大了,而且新版 Places SDK 的计费简直就是抢钱,而我真正想花钱使用的 Google Maps Unity SDK 又不开放给独立开发者和小公司使用。
才考完学校的科目没多久,我就又要为面试而复习准备了。朋友帮我内推的岗位是 iOS 的,而我这一年间除了 WWDC Scholarship 项目貌似并没有写太多 iOS 相关的内容,反而是都在忙乎着写 Android,Unity,Vuejs 的应用,因此现在又要赶着看 iOS。

2019.1.18

 • 

考完了,也回到了家,在长沙的期间老师对我也多有关照,希望这次能一把过了。
Vortex 投递到了 Product Hunt 上,但这次运气不太好的是没有被归类到默认列表里,因此得到的 vote 少的可怜,结合之前提交的几个作品一起看,感觉 PH 对于移动软件和游戏类默认的权重会低很多,也不会显示在主页列表上。
考完了自然开始算计后面要做的事情,原本想先打上一两天游戏放松下,但是盘点了下自己的好几个项目都拖太久了:

  • Skyline
    • 目前软件部分的位置更新代码是基于 GMS 的位置订阅 + RxJava2 来做的,后来写 Vortex 的时候用了 WorkManager,感觉这种后台执行的效果更好也更灵活一些,因此打算迁移到 WorkManager 上
    • 2.0 的官网目前的 Changelog 页面还是假的,我还在想这个页面是跳转到之前用户指南页面上比较好还是继续用 vue.js 和 markdown 解析器实现一个手动的生成器(即整个 changelog 就是一个 markdown 纯文本,使用 --- 操作符来分隔每个 release,虽然用户端访问时 CPU 会高一点但是方便我自己不需要服务器存这些结构数据了)
    • 2.0 的官网目前的 Presents 页面二维码功能能用了,但三维查看器还没做,这部分其实就是把 1.0 的 three.js 官网移植过来,之前的 1.0 主要内容就是写了一个基于 three.js 的运行时的 terrain mesh 生成器,然后基于 render texture 做了一个手机模型的 mockup,屏幕贴图的内容动态从地形相机更新。2.0 在此基础主要的改进会是:1)会基于 url 的坐标参数动态生成 2)提供平板和手机两个手机 mockup 随时切换。
    • Unity 的一些收尾问题,比如到目前 Present 状态下手势都是半禁用的,我需要在 Mapbox 之外自己再实现一个手势识别的逻辑接管这类动态的需求。
    • 上次拆包 B-Reel 的 Pixel 3 自带动态壁纸,发现他们的 wallpaper.xml 里面有一个神奇的字段:androidprv:supportsAmbientMode="true",关于这个 Ambient Mode 的文档近乎没有,只有 AOSP 的代码里能看出一点点相关的解释,即会在 Always On Display 的前几分钟展示动态壁纸,然后转为全黑的默认状态。我后来在 Vortex 里面也加了这个字段,感觉还挺棒,但 Vortex 是一个对解锁(UserPresent)事件不敏感的动态壁纸,而 Skyline 本身在这块就有一些相应的解锁动画,我不确定开启 Ambient Mode 后会不会对之前的解锁判断造成干扰,所以真要实现进去还是要费一些功夫。
  • Flint
    • 目前来看要做全平台同步最好的办法还是 Realm + Dropbox,这块之前只写了 iOS 的部分
    • 之前用的邮件收发库不支持 Gmail 验证,因此需要做一些适配
  • Shader Store
    • 也算上架三个动态壁纸了(Android 俩 Windows 一个),现在想做一个一劳永逸的全平台动态壁纸库,服务器只存文本格式的 shader 文件,不需要其他的素材,mesh 尽量都在 shader 内过程生成(比如用 SDF)
    • 客户端在展示的时候尽量调用手机能用的传感器传入 shader 的 uniform 里(比如 Android 上可以传入启动器的页面页码,电量,天气温度,陀螺仪,Windows / Mac 上可以传入鼠标坐标和网速之类),然后 shader 依据当前平台提供的可用数据做一些可视化
    • iOS 端只有生成 live photo 的功能,毕竟 iOS 太受限了
    • 为什么叫 Store 呢,因为和一个朋友聊了下后觉得这个东西也许可以做成类似于主题商店一样的东西
  • Epoch
    • 总感觉地形 Shader 太费资源了,但是目前自己又不会写,因此只能考虑在 overdraw 上下手把星球背面的 Mesh 找个办法在运行时 cull 掉,最近在看基于 SRP 的运行时解决方案

以及之前的博客里面提到过 Google Fi 送了一个 Google Photo Book 的兑换码,前几天终于寄到家了。照片集的名字填的是 Year of Pilgrimage,希望以后也能用这个名字做一款自传性质的游戏出来。
Google Photo Book "Year of Pilgrimage"

2019.1.11

 • 

又回到了长沙,如果考试过了延期毕业也就能结束了。
刚刚知道 Jason Mraz 今年五月份在上海有演唱会,然后 Yung Bae 貌似三月份北京上海深圳也有,再加上我已经买了五月份 Unite Shanghai 技术大会的票,总体感觉上海是个不错的地方,既然没办法密集地请假去上海不如直接在上海工作,因此来年工作估计主要往上海偏移看看了。
总体来说一月份到目前为止挺乱的,十二月不满股权最终分配和公司交涉未果,很不爽一月初办了手续就走了,然后在家复习考试内容,同时自己还有几个项目想做,受制于复习所以没动。然后中间也有朋友在和我聊外包和内推机会,我也很感激。面试也是要准备的,特别是我这种搭积木为特长的程序员,其实很难说出来到底自己的能力在哪里,而真的要刷算法这种硬通货也要等下半月了。
总的来说我的这三年就是不停地折腾,一时风光一时难过,一时高兴一时消沉,基本上每半年一个来回,倒也挺有趣的。

2018

 • 

Screenshot-2018-12-31-at-22.21.56
想打开后台写一篇 18 年的总结,然后发现 17 年的还留在草稿里面,过的也真是快啊。不过再看 17 年的很多担心的确也都解决了,因此倒也无需担心未来的很多事情。

1 月 | 拿到了百度的离职证明。Skyline 在 Google Play Store 应用总榜前五呆了一周,赚了 1.5 万刀。
2 月 | 处理售后,一直在修 Skyline 的 bug。被拉到一个区块链的项目里面莫名其妙地做了一会 Logo 和网页设计。知道了要延期毕业的消息。
3 月 | 回学校,和同学做一个学校的外包。
4 月 | 拍毕业照。做毕设。宜家 hackathon 第一名。和学校关于分数的事情扯皮。学校外包做的一言难尽。获得了 WWDC 奖学金。
5 月 | 面签被审查。每天都在刷大使馆结果。和同学继续做学校外包。湖南大学 Hackathon 第二名。
6 月 | 答辩。院级优秀毕设。又接了一个外包。上了 61 的 interview。
7 月 | 正式延期毕业。去上海玩。去北京看了 FKJ 的演奏会。
8 月 | 在家。和猫猫去三亚玩。
9 月 | 一个让所有人都不开心的事情。毁约腾讯校招 offer。
10 月 | 来北京加入新公司。
11 月 | 去洛杉矶,咕咕咕了丁老板的设计聚会。碰到了加州山火,在宾馆看了一周的火灾报道。在写 Skyline 2.0。见到了 Cee。黑五购物了一下。
12 月 | 参加陈叔婚礼。新公司进入了 YC 19W。回长沙一趟处理学校的事情。和猫猫一起去了上海看展,然后也去 Unity 上海总部参加了活动。因为股权分配问题从新公司离开了。

2018.12.23

 • 

Vortex 上架了。Vortex 是一个数据驱动的漩涡粒子动态壁纸,数据从 Google Awareness API 拿到,影响粒子的速度,颜色和噪声参数等。上架了一天后获得了些好评,还是很开心的,感觉到了一些意义。
不出意外的话接下来一个月要各地到处跑了,还好之前买了一个和 Cee 在 RavenTech 时候背的一样的大书包,如果想的话甚至能把 15 寸的外星人塞进去,基本上短途旅行是不需要再带我那个 28 寸的箱子了。缺点是重,冬天还穿的比较多的话背起来就比较难受了。
最近花钱还比较多,考虑把之前没写完的 Flint 自动记账软件写了,沿用之前的读取消费邮件/短信做匹配记账的逻辑,但是也想顺便学习下机器学习相关的内容,后期把正则匹配给替换掉。
Google Fi 前几天送了一个 Google Photos 故事书的促销码,最后我把这几年在路上拍的景色放了进去,做了一本书准备转运给我爸妈,考虑是这几年我在路上见到的许多东西都没有和他们说过或者看过,有一本照片集以后也好对照着和他们讲述我这几年的生活大体是怎样的,而我是一直觉得这种消息上的同步是很有必要的,特别是经历了创业公司的一些事情,我觉得主动的消息同步更是一种比较好的做法。再之,谁不喜欢惊喜呢。

2018.12.14

 • 

可爱的配色
事情颇多,个人的大项目一个都没来得及做,唯一做出来的是把之前写 Skyline 的时候验证想法的几个 Playground 套上了统一的 Skyline 2.0 风格 UI。水墨画风格的叫 Ink,星空长时曝光风格的叫 Vortex,这些配色还是挺可爱的。
好久没写自己听了什么了,最近值得一提的也就是 Ups & Downs 这首,之前在 Soulection 第 369 期里面听到过。算起来加上上个月的话也是看了几部电影,在电影院看了 Bohemian Rhapsody, 在小龙推荐下看了 Public Enemies 和 Lord Of War,然后重新看了遍 War Dogs,坐飞机的时候又重新看了十一/十三罗汉。这里面 War Dogs 和 Lord Of War 都是军火贩题材的电影,也是某天晚上和大家一起连着看的。我一直挺喜欢 War Dogs 这种放荡不羁的剧情,像是永远不会结束的旅行一样。时间一长我就发觉自己总是在复习之前的电影,每次我妈在发现我在家看《社交网络》或者《了不起的盖茨比》都会说重复看没意思,但对于我来说倒是挺乐在其中。
最近和某家公司的 Unity Leader 聊天说到 Unity 里架构设计的问题,我说自己就没怎么上过软件设计课,他说大学的时候没几个人会真正明白软件设计,真正的理解都是做项目踩坑理解出来的,做几个最后没办法维护的软件后自然就能真正明白当时软件设计课的内容。这个我倒是感触挺深的,毕竟大学初期写 iOS 外包怎么都写不死有大概率是因为 iOS 的 API 设计本身就足够周到同时也架构上避免了新手的错误,接触了 Unity 和 Android 编程后才发现一个写出后期无法维护的项目是一个多么容易的事情,然后自己就会重写,慢慢地让软件足够有条理地跑起来,对特定平台的编程模式也会有所见解。所以总的来说和看电影一样:其实写的平台和看的电影都没变,变的是自己罢了。软件架构和人物剧情也许没那么深刻,但自己的经历反射在上面,就让自己觉得历久弥新了。

2018.12.10

 • 

看到一个介绍 Mac Miller 逝世的视频 的下面评论说:“比他惨的人大有人在 明星就是容易感伤”云云,看的我莫名其妙。并非对其他人不敬,但我的确觉得虽然比他惨的人的确大有人在,却怕是很少有人能发行出同等的音乐吧,这里的关键并不是抠字眼一般的发行不发行音乐,而是作为个体对世界对他人的影响几何。当然这里也无意讨论是否一定要以对他人的影响作为评价个人价值的标准,只是作为一个他的听众来说,我觉得理应感谢他曾给别人带来的愉悦心情,而我也觉得需要说明让人产生悲伤的不只是面对悲惨的境遇时的同理心,还有多么才华横溢的人陷入了惨境无法自拔这种事情,越是能给别人带来欢乐之人内心却越在挣扎,这才是最令人唏嘘的事情。

2018.11.20

 • 

说两个好玩的事情。
第一个事情还蛮侦探的。最近在美国住在 Bell Canyon 附近,然后住处的路由器是 Google WI-FI。有天在外面玩我妈打电话给我说是不是我刷了我爸卡四笔共 2000 块钱,我说没啊最近都只用自己的卡,再一看我爸卡的消费记录是国内时间半夜,一个小时内连续四笔,每笔金额都差不多。自己以为是被盗刷了于是让我爸先去锁卡。然后我爸和银行客服沟通后说是优步扣的,我去看优步和 Paypal 都没有记录,又搜了下网络说有很多盗卡给别人提供低价打车服务的,因此觉得是不是遇到了啥盗刷套现或者幽灵车之类的事情,因此和 Uber 客服联系了下。
Uber 客服还没给我回信,我的一位也在 Bell Canyon 的同事和我说她今天查看了下她的银行卡发现也被刷了,而且模式很像:一小时内连刷四笔,四笔金额都差不多,而且时间就在我被盗刷后二十分钟内。我们就更摸不着头脑了,开始研究是不是有什么中间人或者奇怪的手段,不然不可能手法如此相像,气氛也有点奇怪了起来,感觉网络被做了什么手脚。
我的那位同事打了通电话给银行客服,客服说是 Lyft 的扣费,但是银行这边状态是拒绝交易了。然后我们回想起来貌似国内半夜的那个时候正是 LA 这边早上八九点,那天要一起去 LA 市内取车,因此我们都在不停地打车,但是都没有打到,最后是另外一位同事帮忙打到的。而信用卡盗刷消费每笔的金额差不多就是 Bell Canyon 到市内目的地的价格。
所以这个事情变成了:扣费应该是我们自己主观打车操作造成的,但是 Uber 和 Lyft 在那天早上不约而同都出现了没打到车但是扣费也没订单记录的问题。我们研究了下,感觉是不是 Google WI-FI 路由器的 Mesh Network 切换路由器导致状态没同步或者内建的防火墙拦截了什么不该拦截的请求。
不管怎么说至少不是奇怪的剧情走向了,而是变成了一个技术 bug 相关的问题,现在就希望 Uber 客服能早点退钱给我。🤔
第二个是:8012 年了,Unity 的 AudioSource 竟然还没有播放完成的 API。
这么一个简单必须的 API,竟然到现在还没有提供,因此搜遍论坛上得到大家普遍的最佳实践是:先获取 AudioClip 的长度,然后设置一个携程去做倒计时,在携程最后调用自己的回调。
因此为了一个简单的事件,就必须在引入 AudioSource 的类中再引入一个长度的倒计时,而且要在每次 AudioClip Re-Assign 的时候清零重新计算。这就是典型的我所痛恨的 Unity Pattern:为了一个简单的事情,在一个类里面引入不必要的 Flag 作为状态标识符,然后事情一多,多个 Flag 就开始打起来了,类变得非常混乱。
这个事情不是不能避免,但是对于很多新手来说,这种 API 设计就是在逼着大家去写 Shit Code,把所有东西都逼着写到 Update 里面重复检测,活生生写成面向过程的东西,而且系统提供的 API 缺乏很多必须的信息,导致如果不从头抛弃内建的音频系统(FMOD 和 Audio Mixer)的话,最后看起来比较简洁的代码背后的实现也是比较耗费资源的(比如做一个属性变动的观察,实际上只是把 Flag 标识符的代码写在一个全局的专门用来观察的地方罢了)。

2018.11.2

 • 

说说最近做了些啥

Skyline

Skyline 目前仍然在 alpha 封闭内测中,没有推到 beta 的原因是 1) 关键的地图黑屏 bug 还没有完全解决 2) 在一些 Android 定制系统(比如 MIUI)中会出现 UI 和稳定性上的问题,我估计需要去弄台对应的手机才能确切知道到底发生了什么,明天会去趟小米之家。
把手头一个 max 格式的上海的城市模型折腾了下变成标准材质,然后导出到 twinmotion 里面,效果还不错。twinmotion 是一个类似于 lumion 的建筑可视化渲染软件,目前看来视觉效果比 lumion 好的多,软件界面和逻辑也更好一些。如果 twinmotion 在这几天的实验里面效果不错,Skyline 2.0 的预告片估计会来得及完成。
上海模型渲染图:
2018-11-02-01.24.51
2018-11-02-01.24.56

Starry

Starry 是自己在实验 Unity 动态壁纸过程中的另外一个作品。Skyline 是 Android 动态壁纸,而 Starry 是 Windows 动态壁纸。这个项目基本上就是两天拿 WinForms 和 Unity 魔改的结果,但效果还不错,因此上架了 Microsoft Store,兑换码在这里
Starry 虽然上架了 Microsoft Store,但严格来说并不是一个 UWP 软件,而是一个 win32 软件,其 UWP 的外壳通过 Advanced Installer 转制得到的。后期 Starry 也许会加入更多的相机视角(这块是用 Cinemachine 做的转场)和一些基本的后期处理效果,也许不会,毕竟 Starry 只是一个试验性的东西,旨在证明 Unity 在主流平台魔改的可能性。
顺带一提,Starry 移植到 macOS 也并未难事,等这些事情都做完后我会写一篇文章专门说怎么调用两个桌面操作系统的 API 对 Unity 窗口进行调整,然后也许会在 Asset Store 发布一个针对 macOS 的动态壁纸 Toolkit。

一些其他项目的计划

准备更新下 portfolio,换用 Wordpress + Docker。
因为被 Ghost 2.0 恶心到了,只能本地写好再上传。在寻求 Mac 上的 Markdown 客户端过程中发现还是没有最满意的,于是又动了重写 Cetacea 的念头。
Epoch 做了惯常的依赖更新,整个系统仍然停留在 “模拟器” 的阶段。我也想多做一点,但是整个项目的规模太大,一天花上半小时根本没办法系统地做上什么。之前和别人聊天还谈到这个事情:
“你财富自由了准备干嘛呀”。
“我估计就去写 Epoch 了,有钱有时间,不用担心饿死”
“那你为啥不直接雇上几十个人帮你写”
“不不不,这个项目就是要靠自己写把整个宇宙都模拟下来,才有那种感觉”
虽然听起来很可笑但是的确就是这个样子,我也只能寄希望于我啥时候能天降横财让我财富自由去写 Epoch 了。

玩游戏

买了 Party Hard 2,相比第一代这个游戏真的是太难了,特别是标注眼睛的保镖,基本上见到就会游戏结束,导致真正的乐趣反而很容易就没了。
上个月还玩了休闲向的皮皮,记得在去合肥看猫猫的火车上都在打这个游戏。要分析的话,这个游戏做的成功的地方在于每局时间不会占用很长时间,到后期不花钱推关卡又很容易耗尽体力值,但是偶尔运气好了总能过关,这条让玩家惦记的线拿捏的很准。
貌似还玩了 Thumper 手机版,我倒是很好奇他的抗锯齿怎么做的。

喝水

在北京呆了一段时间,天气太干燥了,每天起床像是噎了钉子一样,说话特别疼。只能不停喝水,寄希望于补水会让喉咙好些。最近还吃了好几次满记甜品的白雪黑糯米。

听音乐

听了 Sun FlowerTime Moves Slow(这首之前在 Soulection 还是 Voyage Funktastique 里面作为 Mix 的第一首过),Come InsideVoyageBehaveSlinky Man

2018.10.30

 • 

这篇文章是在 Sublime Text 里面敲出来的。原因是我把 Ghost 从 0.11 升级到了 2.x 后发现 Ghost 2.0 内置的文本编辑器对中文拼音输入特别差,有点类似于 iOS 开发里面在 UITextField 没有做好对 Multistage Text Input 的支持的感觉(拼音输入有 Marked 和 Commited 两种 Stage),在拼音尚未完全输入的时候就自动格式化为纯文本了。至于升级 Ghost 的原因是愿愿说我的 RSS 挂了,我感觉像是之前的 Ghost 没有做好 escaping 于是决定升级大版本,结果还不能一次性升级到 2.0:
2018-10-30-11.19.43
总算是折腾好迁移之后进入后台发现那篇导致 RSS 挂掉的文章文字之间里面多了很多红点,不知道是 BOM 字符还是什么奇怪的东西,删除了之后终于能够输出格式正确的 RSS 了。
为了升级 Ghost 2.0 给当前在用的主题(魔改版 Daring)做了一些适配,顺便把主题色和 Banner 换了。
这次适配完我就不想再继续用 Ghost 了,把 MD 编辑器变为支持 MD Block 的富文本编辑器这个事情之前就让我一直没有升级到 1.x,结果 2.0 还是有这么多恶心的事(比如说富文本编辑器的 MD Block 插入图片不能像之前一样写好 ![]() 然后点击上传了,因为两栏预览功能貌似取消了,其次只能点击 Block 下方的插入图片按钮选择图片)