前言

  有一个月过去,从这个月开始,我在博客下搭建了Journal来记录自己的生活日常。
  然而能够感觉到收效甚微,最近感觉自己有点太浮躁了。
  做事也没有条理,没有进行过规划,虽然一直想致力于开发出一个任务管理的APP让自己的生活步入正轨。
  然而不如意之事十有八九。
  最近研究了Flutter ,然而Flutter文章却一直托更了,甚是惭愧。
  如今真的感受到了考验,最初更新博客的热情也逐渐被生活磨平,想来也是个悲伤的故事。。
  正因为这些种种的原因,所以才会有那么多的Hexo博客只有寥寥无几的文章。
  我希望自己还是不忘初心,整理这个博客吧。

二月份总结

过年回家

  过年前凑巧有亲戚结婚,刚好2月1日是公司的年会,于是当晚参加完公司的年会之后,我就随同父母一起去了梅州。
  那段时间其实自己挺闲的,但是也没干啥,就是妥妥当当跟着走流程而已,也杨辉哥聊了自己的情况。
  然后我们就离开了,顺路回广州接上哥哥,然后一家人会家过年。

  过年期间,也没有做好什么,感觉去年努力学习Houdini的经历要更充实一些。
  大年初二我终于花了钱去电影院看了 《流浪地球》
  作为上映之前就开始关注的科幻电影,这次我终于为自己的信仰充值了,就是害怕这部电影扑街。
  万万没想到,这电影口碑甚好,如今已经破40亿了……
  另外大年初六的时候和高中的两位老同学去看了 《飞驰的人生》
  由于没有看过韩寒之前的作品,这一部给我的感觉很一般,而且结尾对我路人来说很突兀。
  最后到了2月13日,我就会深圳干活了。

移动端开发

  在年前的时候我就想学习安卓APP,开发一个任务管理的APP
  因为自己已经在这方面迟到了苦头了。
  这个问题也和自己的自控力有关,有时候因为没有规划,导致整天的时间浪费。
  因此我是十分想开发一个任务管理APP,将游戏的机制引入其中的,然而实现起来也似乎挺庞大的。
  为此我开始在过年的时间抽空开始看Android相关的开发教程。
  然而看到半路的时候,却发现半路杀出了 React Native ,基于前端框架,同时兼容 ios 和 Android 的神器。
  于是我立刻放弃了Android的原生开发,以至于为了学习 React Native 而去学习了 React
  当然 React 也只是摸了几个教程,最近的文章都有提到相关的情况。

  • 观看笔记 - Pluralsight React:The Big Picture
  • React - React 两日游有感
      最后最后我又发现2018年谷歌宣布的新技术,Flutter,于是我又去搞Flutter去了。
      最近弄 Flutter 确实让我搞得有点怀疑人生,毕竟 Flutter 还是新技术,注定会有很多的坑。
      所以我也经常会怀疑要不要学习一下 React Native ,最后我还是决定先把Flutter 相关的技术攻克了先。毕竟我还是很清楚自己的,自己太想依赖别人做好的东西直接调用了。

  为了弄好 Flutter App 开发,我决定开始模仿一些现有的APP去制作高仿效果,我相信这样才能将 Flutter 用得得心应手,目前还是使用不足,只是开发了个简单的 todo App,而且这个过程中的数据交互管理还一塌糊涂,我用了非常不优雅的方式强行将所有的BUG修复了,但是我觉得整个APP的开发简直是一场灾难。

gitLab_hook

  年后回到公司之后,我自己就逐渐淡出了 Ziva的研究与开发。
  一方面是我自己没有动力了,另一方面有同事接手了这方面的工作。
  另外公司内部也和动漫公司展开了Ziva的交流会,发现动漫公司虽然吹嘘得很厉害。
  其实他们的试验作品以及对Ziva的研究深度,还远远不如我们的深入。


  年后回到公司之后,我主要负责了 gitLab_hook 钩子的开发。
  其实公司想要弄的东西并不算复杂,但是后面我和胡盼的交流之后就弄得异常复杂。
  过程中还牵扯到了公司的服务器、路由。

  苏老板年前的时候就已经将相关的脚本代码交给了我,也和我讲解了一些实现原理。
  年前我弄明白了本地钩子(在服务器的Linux系统上)的作用,其实就是 git checkout 代码,实现将当前 git 的 push 复制到另一个目录下。
  然而苏老板还同时配置了 网页钩子 ,这个网页钩子的用法,我之前一直没有搞懂。
  年后回来弄了一下才清楚,原来是要在一台windows的电脑上利用Python开一个socket进行长连接的监听。
  而网页钩子正是将信息数据发送到了长连接之下,实现了数据的交互。
  通过长连接的监听可以对 本地钩子 复制目录下的文件进行预处理。
  而苏老板想要智能地实现将py脚本的pyc以及pyd自动编译处理到远程的终端上。

  最开始遇到的问题,git checkout 下的路径无法进行文件修改,而该路径就在 linux 系统上,为此我多次请教了胡盼。
  一开始我还以为监听的脚本问题,直到胡盼过来我才发现,我根本就没有权限对该目录进行任何编辑修改,然而 git 却做到了。
  虽然问题不明,我和胡盼都在查找资料,我很明显对 Linux 一无所知,根本无从下手。
  一开始怀疑是 Linux samba 共享文件管理系统的问题,但是根据网上的操作还是无法解决问题。
  于是经过一番摸索之后,发现是 Linux 的用户权限问题被限制了。
  于是一波三折之后总算是完成了最终还是解决了这个问题。
  后面还遇到了坑爹的网络问题,然后有经过了修改IP地址等一大通的操作之后才总算解决了。

  最后胡盼希望我能够实现将编译的信息输出到git终端上,胡盼提出建议让我去研究epoll相关的端口监听方案。
  于是为了实现这个效果,我又在网上弄来了python的socket和epoll并发监听方案。
  最后我是成功实现了epoll并发监听的处理,从而在 git push 的过程中触发linux的网页监听。
  如果是单次的上传的话,监听处理还算完美,可以实现在 git 终端上显示出编译的结果。
  但是如果是并发的 push ,那么监听端口需要多开epoll来确保信息的获取,而端口地址又必须保证 windows 和 linux 是一致的。
  最后发现了对同一个端口多开监听却不会造成报错的方法,但是信息的截取却是随机的,那么就可能造成并发处理的信息回馈混乱。
  最后胡盼说这堆这种情况只能去研究进程之间的通信,将相关的信息处理好。
  然而这么一大圈下来弄得实在是过于复杂了。
  最后苏老板说不必那么复杂,直接就沿用最开始的方案,发邮件去解决好了。
  于是我又花了一些时间将发送邮件的功能给实现了。

摄像机曲线显示

  在年前的时候,我给公司写了 Cam_Route_Manager 的插件,最后因为过于复杂而简化了。
  其实那个时候我还开发了 speed_visualizer 的插件。
  这个插件的原理是受到了蚂蚁教程的启发的。
  教程的第8集制作了坐标轴来可视化显示了 noise 函数的效果。
  原本我就打算这么实现的,不过苏老板说不能采用粒子发射的方案,必须要让曲线事先生成好,因为要看到后续的运动效果。
  因此我改变了制作思路,通过给 locator 添加表达式实现曲线的运动。
  表达式的实现原理也很简单,y轴的高度变化和相关属性绑定在一起,和X轴就加入一个固定的偏移值,那么 locator 的运动路径就是属性的运动曲线。
  于是通过记录 locator 每一帧的运动路径就可以获取到曲线所有的点。
  再次在 Stackoverflow 上找到了根据运动位置生成曲线的方法,从而实现曲线的预先生成。
  接下来就只是给曲线添加表达式,让其反方向偏移即可。
  如此一来整个坐标系以及曲线的运动都制作完成了。
  我还转么针对这个坐标系的定位而写了代码,实现自动定位到摄像机前的位置,并且带有父子约束而可以跟随摄像机的位置。
  后面摄像机那边还要求我添加上 位移速度 位移加速度 旋转速度 旋转加速度 四个属性。
  我查了物理上的运动公式,通过 mel 表达式实现每一帧取样计算,还专门添加了采样精度,来控制前后采样帧的阈值(越小越精确,但是太小为让数值变为零无法计算)

  上述的工作其实都是我1月份做的事情,而这个二月,摄像机小组希望能够一次过将四个属性的曲线同时生成出来。
  于是我有埋头开始改良自己的脚本。
  经过测试,我发现脚本的运行效率堪忧,原因是生成曲线的过程和拍屏一样。
  使用 cmds.currentTime( frame ,u= 1) 具体可以查询 cmds 的命令库,主要是开启 update 模式,导致每一帧都跑,严重降低了效率。
  我发现曲线的生成代码采用 xform 的方法来获取 locator 的坐标,这在复杂曲线的生成上是很有必要的。
  但是我运动的只是 locator ,这个过程没有层级关系的干扰,根本就不需要每一帧去换算它的世界坐标位置。
  于是我将 xform 的获取方法改为了 getAttr 的方法,而且 getAttr 有 time 属性可以指定到具体的帧数,连 currentTime 函数都省了。
  于是换了新的方案之后,曲线的生成速度快了无数倍。

  除此之外,我之前的插件是需要导入 visualizer 的ma文件来实现坐标系的生成,但是这么一来,每一次生成都需要导入一次文件,或者至少也需要将导入的文件进行复制。
  我在想有没有办法让ma文件以代码的形式加载进来。
  我想到ma文件的本质其实就是 mel 代码,于是我尝试复制 ma 的代码放到 脚本编辑器去运行。
  我首先先排除了一些肯定不需要的代码(比如开头生成摄像机的部分)
  然而经过我多次尝试,有一部分核心代码却总是报错。
  我的坐标系文件是由 曲线 locator 刻度模型 三个部分组成的。
  经过我层层剥离,我发现曲线层级之类的可以通过ma的代码生成出来,但是模型却做不多,而且模型相关的代码一执行就报错。
  而我发现报错的原因恐怕是 setAttr 中的多重面信息的读取出问题了。
  我尝试用一个最简单的三角面进行测试,却发现代码没有报错,却无法生成出可以看得见的模型,只有大纲类表中的空壳。
  我很无奈,于是在网上搜了如何通过代码来生成模型的方法。
  找了很多文章也没有好的方法,最后我发现靠谱的方案还是和我做 Ziva Panel 时边界面片的生成方案一样。
  都是采用一个面一个面生成,最后将所有的面合并并且将点缝合的方案。
  虽然我觉得这个非常愚蠢,但是我的确没有更好的选择了。
  我上提供了一种方法,可以根据三角面的点与面的信息对应生成出模型的方案。
  于是我又研究了好久来弄出 点 和 面 相互对应的信息的方法。
  原本想着模型不算太复杂,就数千个面而已,应该用cmds命令就可以轻松解决。
  没想到这样生成也需要卡顿数秒的时间,于是还是采用了 OpenMaya 的方案。
  幸好网上的答案将两个方案都提供了出来,我就不必又去手动实现了。
  最后效果是令人兴奋的,visualizer可以通过代码自动生成,不再需要导入这个繁琐的步骤了。

  另外因为刻度模型是固定的,无法显示大于5和小于-5的数值,所以我想出了缩放系数来缩放坐标系。(其实刻度模型也可以不固定,但是想到2017和2015的type不一样,感觉实现起来未必靠谱)
  于是通过修改 locator 的表达式来加入缩放因素。
  另外还专门为实现四个属性一次跑完写了一套代码。

月末回校

  月底的时候开学了,于是我决定回校上一个星期的课,顺便和老师说说情况什么的。
  结果没想到说了还麻烦了,后面就干脆不怎么和老师说了。
  后面就全靠自己自学了。
  在这段期间基本有空就在弄 Flutter 的代码,但是可以深刻感觉到自己学习的浮躁,完全没有当初PyQt的时候耐心。
  完全没有循序渐进,只是囫囵吞枣地看教程而已。

二月总结

  这个二月感觉自己过得很浮躁,虽然在公司的时候还算踏实。
  但是一旦是自己的自由时间状态就比较混乱,过年的时候看Android教程的时候也是差不多,只有 react 的学习还算让我满意,但是我也只是了解得很粗浅而已,况且最重要的路由我自己还没有亲手实现
  三月初我依然没能摆脱这样的状态,这让我意识到任务管理的APP的迫在眉睫,除此之外还真没有太好的想法了。
  我不清楚为什么在工作室和在公司的时候我可以放空自己专心学习。
  可能也只能说是环境的影响吧,无形的监督让我能够更加安心地学习。

三月学习计划

  • Flutter 开发

百度脑图链接