最近碎碎念(work or life)

about last

Posted by 照蕴 on May 16, 2020

说来惭愧,已经挺久没更新blog了,一年来都挺忙,有时和朋友交流一些东西也没想到写点完整的总结,引以为鉴;

最近

听到朋友最多的就是焦虑,有前同事甚至问我为啥我没有过焦虑,其实他的焦虑我也懂,我又何尝没有过呢,不说而已,主要是我们能做什么呢?一方面焦躁不安无法静下来思考琢磨点东西,另一方面又积极的被裹挟到所谓当代后浪中,好像一夜间得到了外界觉得的认同甚至激动的连发票圈;其实当下的节奏和一些观念是比较浮,君为自己为所谓的后浪而感觉貌似久违的被认可被注目,殊不知正值当打之年的这一代只是被作为营销对象带进去而已,背后更多的是资本生意,被煽情得热情洋溢之后,第二天醒来,还不是该面对的各种压力依旧,尴尬的是当下总要以推翻所谓前人的观点方以为正确,结果就是,渲染了大量的师出有名与前所未有的使命感,所谓历史选择了我们,人性和大环境本质也没啥变化,一代人和一代人其实都差不了多少,没必要动辄上纲上线标榜先进;

其实正如一个朋友所说,我们需要的是希望,而非这些鸡汤,慎独内省者少,盲从浮躁者众;渲染和营造的很多主流观念更容易让很多赤手的同侪倍感压力,生活或工作,考自己之力的人欲得到更多就需要牺牲和扛着更多,还是相当公平的,冷暖自知,又何须来一波看似聚众煽情实则是商业运作的噱头呢,心态平衡好,或喜或悲便不需旁人的感同或知会,动心起念,有妄便有执,或执于妄,或嗜于欲望,足令智昏!这些年来,其实已经养成了对公*号文章的无感,阅题即过;

坦率说,3月的我也经历过低潮的心境,从2013年进入实验室到后面实习,工作的这些年来都没有过,乱如麻,耐心的老大和我说,在我们这边你可是高级开发,要学会自己快速调整,后续也恢复了;其实今年多了一些角度去体察自己的性情,性格特征与缺点,我也知道自己做事情很多时候处于兴趣驱动,积极时效率可以挺高,反之就很明显了,一个同事说那个状态:压力越来越大的时候,越想逃避,这样越来越低效,怎么走出这个循环确实很重要!

说了这么多,重要的是我们可以做什么呢,因为自己喜欢文科和安静的东西,所以从小养成的习惯便是通过看书写字,安静独处让自己得到舒缓,心态不那么浮躁;面对压力,自由的心态反而能摆脱束缚! 而另一方面,需要结合工作内容和兴趣,一个在某公司的朋友说他对科班的基础一般也不感兴趣,工作纯属应付和为了生活,诧异之余,我想起了自己的经历,基本是结合喜好,比如在学校的时候向往做SDK,实习和毕业都一直做SDK相关的技术和业务,特别是在Bmob,每天都有来自不同领域不同层次的开发者反馈,在这个位置就会思考如何改善和优化SDK,面向对象,设计模式都需要用的恰当,能体会到业务边界下的解耦和设计,这些都是和我兴趣吻合的,所以建议了朋友培养写代码和封装,设计,优化一个类库开始,体会OO的威力,写代码时也能思考后续的变动可能,用别人的SDK和类库也能思考如何实现,看到好的设计也能模仿借鉴,做到心中有数;

而最近技术相关,就是工作之余玩了一些逆向,弄脱壳,最近受到一篇文章的启发,可以修改编译Android源码并刷机在自己修改的环境中把内存dump出dex,也就是通用脱壳机的由来,最近开搞,另外工具相关无非就是Xposed,frida,subcydia那些了。

过去一年主要做的事情

去年做的事情还是挺多的

  1. 聚合系统的接手和逐步完善,python和bash脚本交叉用,打包工具是另外单独开发,经常要面对历史包袱解决挺多状况,应对各种渠道也有了相当的经验;
  2. 依赖于聚合打包业务公共SDK的维护,Android和iOS端因为业务变更都需要和后端同事经常做数据同步迁移的测试;
  3. iOS马甲包的业务经常被临危受命,需要研究别家的包,快速去找华强北的点弄越狱机,晚上学的比较晚,第二天赶紧脱壳并分析头文件以及machO可执行文件大致分析程序流程,定出包所用的游戏引擎类型切链接开关所在,提供给运营同事参考;也因为人少,可以充分接触到游戏的东西,直接在untiy里面改逻辑,加第三方webview插件等,后面来了一个伙伴分担了压力,也继续过了包;
  4. 马甲包的需要,自己折腾了一台腾讯云的服务器,自己写简单接口用于马甲包,也用来尝试服务端打微端Apk包;
  5. 给老东家的同事自己写了基于swing的跨平台Android渠道包合并工具,支持自定义业务参数等,效率还是可以的;另外就是iOS游戏盒子,以及义务业余帮他们维护iOS的SDK,其实后端云的业务是相对来钱慢的,所以尽力能帮就帮;
  6. 在实验室另一个师兄的建议下,接触到了年轻的晚届学生吧,提供一些学习路径和学习路线,从最基础开始,包括能提供我所在的后端云和游戏行业的SDK练手项目,那时候还做了挺长的沟通,自己写了文档,当作一件有意义的事情,嘿嘿!here!

接下来

说实话,有的时候实际情况总会跟不上变化,我也不会想到所谓很正确的规划,想的是结合兴趣继续晚点逆向或者有利于提升技术和整体理解的事情,比如再体验一边几大基础科目等;

技术之外便是希望能有其他的兴趣爱好来调剂~~,另外就是希望在认识层次有所提升。

一些想法

  1. 当下觉得的无用,或许只是时机未到

    去年买的一些文科的书没能看得下去,今年倒因为一些契机,学的飞快,也认识了圈内的前辈。技术的也是,兴趣也会变化,之前对逆向的也兴趣一般,今年很想玩这块的就拿起了那基本经典的书;

  2. 关于所谓专业程度,和多学点技能并不矛盾

    CVTE的朋友突然被分配做小程序,和我说怕荒废了Android,个人觉得其实并不矛盾,很多人容易陷入好像我自己天天有写点Android代码就不会脱离和生疏了这样的心理设定下, 其实还是看自己的学习能力和认知,一些记忆性的都会忘,不同人的区别在于忘记的部分能不快速找回来,其实我们学所谓技术,做相关的业务,主要在于改善自己的学习能力(特别是快速学习能力),后能触类旁通,在解决问题的综合能力,视野等方面有长足进步,也就是以前前辈所说的功夫在诗外吧;

    有段时间iOS的需求很多,基本都是一段时间没碰Android,切回去也没感觉卡顿,记忆性的找一下就快速回来了,思路一直还在,关键在于在比如客户端有没有通用的认知,比如Android和iOS,在一些开发模式的异同,包体结构,签名,证书等,AppStore生态等,还有如推送实现细节等;

    另外就是技术也不对立,甚至是共通的,所以我们最好也不要给自己设限;比如Android和前端,或者Android和iOS,如手头的业务,Android和旧版iOS都是共用一套前端页面,原生端中做好和H5交互即可,我也许要熟悉js和相关的类库,前端这些年确实变化飞快,最好是能学到一点原理性的思路和大致的实现就不会很慌了,比如虚拟Dom还有es一些新特性还是颇有趣味的;而Android和iOS,比如让你同时规划做两端的游戏盒子+推送,那你怎么根据业务去实现呢,比如设备Id,和业务需要的账号Id等,信息存在哪,上报的时机,两端尽量协同一致,这些都需要对两端相对熟悉; 想起来上周iOS端遇到一个很奇怪的Bug,为了方便过审用SafiriViewController代替UIWebView实现有浏览器的能力,但在不同的系统和设备,甚至在模拟器和真机,都有不同的表现,比如有的会左滑导致刷新,测试发现在不同设备上的页面View的层级不同,这就无法给这块区域加透明的View来消费手势,因为很少有人这么做,很小众的bug,一度怀疑不同版本不同设备的SafariViewController 的实现有差异;那解决的思路在于或者拿到页面结构解析判断不同的解决思路,后面发现左滑其实就是一个Done事件,还是参照Android的Webview,是否有钩子回调可以利用,禁止Done事件等,或者让回退栈置1则等效总算解决了那个问题;

    而除此之外,比如为了看别的包做的加固等处理,你需要去了解一下llvm,编译llvm等,iOS没有类似android包smali这样的中间代码(IR)的表示,只能直接上手修改汇编,这些也是科班的课,遇到了去温习一下即可,看llvm之类的可以顺便回顾一下编译器的几大流程,编译的前后端等,也是蛮有趣的;IDA可以分析Android so和iOS的machO文件,Firda可以同时hook掉Android包和iPA包,这些都是可以同时进行;只是iOS麻烦事情多一些,各种签名,证书,绑定设备等,加上闭源,有的时候为了找到一个旧版本的安装包,要费尽周折,系统,硬件,开发工具IDE和工具链,AppSotre生态,内购等都是苹果一家,互通的后门肯定是有,所以经常需要走点弯路,Android的就方便很多,比如签名验证之类的一般就只能交给开发者做,当然主流市场都会加固后才能上,很多东西也在和苹果和google的跟进了;

    而最好还是懂一些服务端的基础,这样对整体业务的把握和在和服务端同学沟通会更顺畅,写接口自己测,一些比如加解密的环境自己测试验证没问题再和服务端对接,问题的定位更加清晰,也不会麻烦到对方太多时间,特别是SDK这块,对外的技术对接,有的时候还要和对方对接后端接入的细节,在别人眼中,客户端和服务端都会找你,或许你还要做一个中转;

  3. 在业务面前一些思维和方法论

    在工作的前些年,我们关注的一般是技术实现,很少或者不太需要我们在业务的角度去思考,而到了一定的位置,就需要多注意后续的变动;比如做一个给运营同学用的打包工具,是做桌面端还是在线服务端拆包合并代码打包等,服务端调java,Apltool等都需要结合业务和后续可能的变化取舍;又如运营同学为了找游戏素材,需要在4399在线游戏盒子找其中的素材,如果是频繁的需求,那我们也不太可能教他检查元素的,可以写一个不限域名的资源(mp3,icon,图片素材等)的下载插件,这些都是一些衍生工具,就能省去很多麻烦且重复的事情;又如渠道包工程和母包工程,因为渠道方的特俗要求,可以特事特办,这时候要衡量是否后续都要这样,或者是否其他渠道的共性需求,如果是,那最好在公共SDK的抽象层添加接口;如果不是,遇到不好互相调用且公共SDK层支持的意义不大,仅仅一两个包需要的情况下,可以直接反射无妨,这些都需要权衡影响范围和预估后续需求变动,以此决定一些结构性的调整;技术实现是一方面,思路和思维也要同步跟上。

  4. 关于思考层次

    在学校的时候一个前辈和我说其实等你技术实现各方面ok后你就会和我在抽象上交流了,前阵子和一个朋友教练确实是如此,这个时候更多注意的是思路而非实现细节,这些进步依赖于经验的积累和反思总结,共勉;

  5. 力所能及利他

    即使从Bmob离职后,开发者找我的问题我都有尽力回复或者找到前同事帮忙解决,当年录制和剪辑的入门视频在B站也有很多观看和点赞,有的视频是小程序的同事录制我剪辑上传的,效果都很不错;这边的一些项目也在用着Bmob的基础服务,令我很开心的是在业界口碑还是不错,很多人也知道这个后端云平台,现在也义务维护着那边的iOS端的SDK,这些其实都是没涉及到利益的;只是觉得有意义,在很多地方都能看到Bmob的开发者,评价还不错,也是不枉当年周日和下班后都在帮忙调试开发者的问题那些心血了,这些也给我带来了一些所谓的好处吧,这些开发者有的遍布各大公司,比如之前都在某厂的猫哥,以及其他的伙伴都会问说是否要内推呀什么的,虽然当初做的时候没想到这些,现在自己一些东西也没想好,不过还是继续把有意义的东西做下去;

反省

  1. 稍忙业务下对技术思考的欠缺

    坦率说,在这边因为有的时候忙于业务,所以对技术的一些认知有的时候没有在Bmob时候思考的多,那时候一个朋友经常会找我一起交流一些很普适的问题,当然,时间也足够,在这边相对更多时候兼顾iOS和业务,无所谓好坏,只是希望后续自己在下班后能保持对一些基础技术的好奇心;

  2. 技术之外的部分

    在浏览器那边实习时,老大就经常拍我肩膀说你还是要多经历挫折呀小伙,我确实在其他方面不够坚韧和乐观,这些需要自己注意的;

行文略微仓促,其实还是那句话,做好手头做的,做好想做的,心态保持平和,这样就能在程序员希望的简单有序的世界中了,加油!

image