Blog logoJustZht

Blog logo

2019.2.9

 • 

和猫猫聊最近上映的《流浪地球》电影,给猫猫推荐了几本之前自己看过的小说,顺便翻出来了 07 年科幻大会的纪念册。纪念册是我大表姐当时在成都帮我带的。
我表姐是真的铁杆科幻迷,现在她家应该还有 02 年左右的科幻世界杂志,以前也经常借我科幻书看。后来我去读寄宿制学校,就渐渐不再看科幻了,而表姐作为家里这一辈的长女,自然压力也大很多,我作为排行最小的男生,大家庭里自然有允许我随意出去闯荡的共识,但在我表姐身上,就会有很多琐事和赡养的责任压着,也许因此到最后她回到了家乡定居结婚。小城市自然眼界受限,很久以前表姐经常追美剧,还带我看 Glee,现在自然时间没有以前多了。
很久之前我算是个原教旨主义的小科幻迷,对刘慈欣和三体系列火起来之后冒出来的各种妖魔鬼怪感到恶心,颇有点像是爆红的小众乐队的粉丝的心态,而后来我觉得原教旨是很难区分界限的,而对于本土科幻生态变好中出来的奇怪事物心态也不用如此严苛,我也没必要因为先看过什么就让自己显得高人一等。大学这几年我也在很多事情上表现出了类似的反省,加上我开始信奉时间都应该用于创造,因此最后我到了另外一个极端的态度,就是我几乎不表态,我觉得主动发声毫无意义,在朋友圈和推特上也不怎么说话了,有适合说出来的事情我就在博客上写写,有人想来看就来看,我也不会主动让别人接受我的主见。但最近半年我个人经历的事情之后,再想起来表姐之前的那些科幻杂志,我觉得我还有这么一个奢侈的接受外界事物和评论的机会,而很多人也许都没有我这样的闲时间去折腾什么服务器,Netflix 和 Youtube 或者在一个对新观念开放的城市呆着,因为现实的引力实在是太重了,而科幻这种东西怕是最脱离现实的一件事了。到最后,我也没必要对自己那么严苛,倒是可以对外界的表态更有主见一些。

IMG_5213

2019.2.8

 • 

小学的时候在素描老师家学画画,在门口削铅笔时一个高中或者大学模样的女生上来探头看老师不在又走了,过会老师从屋内出来问我发生了什么,我说:“有个女的走了”。素描老师笑着说,“不要说女的,要说女生”。

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 标识符的代码写在一个全局的专门用来观察的地方罢了)。