阅读 884

2020上、一切都在井然有序的进行着 | 掘金征文

勉强镇楼。

前言

简单自我介绍一下,我自名梦魇兽,大二的一介书生。

名字取自梦境,在个人博客有提到过。

个人爱好:

  • 民谣吉他
  • 写代码
  • 研究梦境
  • 游戏
  • 篮球

次序决定程度。

掘金在技术的学习上真的带给我很多东西,两年前来到这是因为 Flutter 。

不知道为何一到写这类文章的时候,就

2020的确是特别的不平凡,对我个人而言,上网课让我有了更多的时间投入到开发,这篇文章,也是我的第一篇总结。

一、年前遗留的问题

在2019末也就是我大二上学期的时候,由于上学不能大量分心的缘故,种种原因,我给之后的开发留下了一些极其难解决的需求与 bug 。

我自认在技术上我从来不是一个爱拖延的人,我只是觉得我应该清楚当下的时间我应该更多的去干什么事。

1、Android 镜像二次打包丢失 Capabilities

我们平时可能并不太会关心 unix 文件的 capabilities 属性,但这个属性的丢失,可能会导致非常严重的后果。

(1)起因

我花了大量的时间开发 Rom 的二次修改工具,在对 system.img 镜像的解压与二次生成中,丢失了一些文件原有的 capabilities 属性。

(2)导致问题

这直接导致二次修改后的安卓系统不能连接 adb ,不能 logcat ,这一表现是极难定位错误的,因为 log 也完全不能抓,而且只在个别设备上表现出来,我应该庆幸当时的手上的红米 note8 有这一问题的发生。

发生这以问题的时候我刚好临近考试,仍在几天不停的尝试后,暂时放弃了,花费的时间让我不得不裸考几门重要的课程。

(3)开始解决

在无数次的对比二次封装后的镜像信息后,都仍然没有发现与正常系统差异的地方。 对比方法:

ls -l system >x.txt
复制代码

通过ls命令查看文件信息然后将输出重定向到文件然后进行对比,方法是比较蠢的。

之后便进行了大量的 google ,几天、几周,最后终于在 ext4 这一储存库找到了答案,储存库截止目前的 star 只有 9 ,但它能做到在不解压 ext4 img 镜像的情况下查看内部文件的各种属性,也是从这,我找到了我遗漏的 capabilities 属性,最后添加终于得以解决。

有兴趣可以看我提的 issue。

2、想要用 Flutter 重写一个终端模拟器

这个想法的具体原因已经在之前的文章提过了,想法具体产生时间,可能在接触 Flutter 不久后就有了,也就是,一年前。

(1)起因

我一直想要我的程序可以在内部执行其他的二进制程序或 sh 脚本,并且能够拿到它的所有输出,在还在使用原生开发的时候,我是通过 javaruntime 相关的一系列来完成我的需求。

(2) 进行封装

在一番自行的封装后,我发现它的体验极其的不友好,不能保留一个持续打开的进程,简单说,我在执行一些需要 root 权限的程序时,发现我在同一次 app 的启动中,对于一些功能的使用,会反复的向 magisk root 管理程序申请 root ,而 magisk 在收到申请是会弹窗的,这一体验极其的不友好。

不仅如此,我发现已经有较久历史的 app - “冰箱”,至今仍有这个现象。

于是在一番尝试后,找到了一些开源的库,如 Android shell ,就很好的解决了这一问题,但随之后的开发,我会经常遇见我需要与已有的命令行进行交互,当时的我毫无思路,于是又跑去与这以需求无关的库区提 issue。例如上面的储存库,但我当时深知是自己的基础还差太多,不如先静下心慢慢往后学,再次放下。

(3)了解缓冲

在想法后的挺长一段时间,我又捡起了这个问题,死皮赖脸问了一个对这方面比较了解的同学,然后慢慢了解到,不管是 安卓原生 的 runtime ,还是 FlutterdartProcess,它们能拿到的输出,都来自管道,而管道,是有缓冲的,在我得知这一点后,也差不多刚好上完学校的 C 语言基础。

学校的各种课程极大的降低了我学习的速度。

(4)继续研究

在之后的一个时间点,Flutter 开放了对 dart:ffi 的使用,于是我又捡起了这个问题,终于在一些博客查到这终端模拟器底层的实现原理,随后投入大量的实践,终于初步在 Flutter 实现了可以与进程交互的终端模拟器,更让我意外的事,在很少的额外学习下,它可以在 Linux、Mac 上使用。

(5)持续优化

里面最难的一个点在于终端序列的重写,涉及到极其大量的字符串处理的算法,至今没能将它可以在显示或性能两个方面让它接近原生终端。

但还是在不停地优化下,重写了一小部分常用的终端序列,将它变成了我想要的样子。

它更多是由其他页面唤起,并传入自动运行的脚本,就像这样:

开源地址

文章----->Flutter终端模拟器实现-原理解析与集成

二、永远都会想着的事

代码写得如此垃圾,让本就不富裕的我,更加雪上加霜。

1、挣钱、挣钱、挣钱!

从小家境不怎么样,外加种种原因,导致 20 多岁的年纪依旧像一个小女孩的个子,所以我全心想着凭技术挣钱,上了大学也是我第一次正式得到自由学习的机会,不会再有家人反对,因为在学校之外的任何地方,都会觉得我整天在玩。

这是我上大学后一直都想着的事,我尝试了各种各样的方法以自己的技术获得收入,一天达不到我想要的我就永远不会懈怠我对各种技术的学习,尝试了以下方法:

  • 做 Rom 挣钱 :0 人气,精力分不下来,失败,总收入不超过 200 (不要笑我)。
  • 接外包:2020 上半年我没能在接到任何一个外包,失败,其实我更多因为根本就分不出时间去找各种各样的外包。
  • 作为个人开发者获取收入:上半年,在一边上网课一遍开发的情况下,不停地对功能的持续开发与维护,上半年收入 8 k+,项目至今总收入 15 k +,emmmmm,也挺少的,但对我来说意义非凡,真的意义非凡,也是第一次让我觉得,我很快就能够不靠他们了,很快了,也许……
  • 创业:这个有点大,导致在我能力可控之外,与朋友开了公司,我除了提供了项目在微信公众号、微信小程序、单片机的全部技术外,公司的事情全程摸鱼,陪他们一起跑了下腿,公司就有了,团队项目拿了学校赛道第一名,至于要不要真落实挣钱,我个人是不考虑的。

2、技术的学习

(1)对 Flutter 的持续学习

在掘金分享的绝大多数都是与 Flutter 学习相关的内容,所以,掘金见证着我的进步。我永远喜欢尝试新的东西。

尝试锻炼自己的表达能力,讲座宣讲 x2。

(2)对 Rom 开发的学习

很大原因是自己项目的功能就是能让人更方便的做 Rom 开发,所以想要持续维护,和新功能的开发,都需要自己不停地学习新的东西。

(3)杂项的技能

  • 对 git 的熟悉使用。
  • 学习搭建个人博客。
  • 对 Linux 的熟悉。
  • 对交叉编译的熟悉。
  • 代码的优化。

暂时只能想起这些了。

虽然现在仍有很多不规范的 “junk code”,但至少其中的一部分,我现在知道应该如何优化它。

三、遗憾

  • 由于经常集中精力于代码,长时间坐着,毫无悬念的,第三腰椎横突、腰肌劳损,最严重的时候,我坐上一个小时就完全受不了,然后,长时间的脱离不了推拿,截止目前 😶 。
  • 有较严重的焦虑,与较严重的失眠。

在需要长期吃药的选择下,我选择了自己调节,现在晚上睡不着我会一口干掉一罐啤酒,效果还挺好 🤣 。

四、分享给大家的经验

更多的想分享给同龄人吧。年长的前辈大都知道如何学习的,毕竟面临着生活。

1、不要给自己找借口

因为在我的学校,绝大部分人对技术的学习是不感冒的,一口一句我是考研的,每天边说考研边玩游戏,是的,这二者是不冲突,但,你的技术 0 进步。也有可能,是我没接触过太多学校里面的大佬。

  • 你需要想,你并不是一定能考上。
  • 考上研究生后的几年,也不一定能让你这个人配上你的文凭。

2、尽可能的利用我们已有的时间。

对我来说,我对这一事情的处理是非常失败的,并不是我花费大量的去玩,原因就是上面提到的,我的睡眠质量极差。

而对你们需要说的就是:如果真心想着在不断的提升自己的技术,就将你的游戏时间拿来学习,如果你的梦想就是玩游戏🤔 ,就当我没说。

(1)我的经历:

我在念高一放弃我的人生的时候,不上交手机,每天晚上熬夜玩王者荣耀,到白天上课会打上一整天的瞌睡,成绩一落千丈,后来种种的不甘心,我依旧不上交手机熬夜,但我通过 Aide 学习安卓原生开发,我想我可以没有成绩,但我需要会一些技术,这到让我变得特别轻松,经历了黑暗童年的我在那个时候每天都会很开心的笑,整天打瞌睡什么都不会还很开心,是班上公认的开心果,我会逗各种各样的人开心,我甚至把那当成我活着的意义。

再到高三成绩一落千丈的我毅然向老师申请要在最后一学期的最后两个月转入一个复习班与他们一起学习,从当时的我来看,这是一个极其迷惑的行为,有幸最后高考提升 200 分,从拼了命也只能考到的 300 到 进了锦城的 510 ,在复习班的那些天,没有什么朋友,每次周考后拿着大专都上不了的成绩,老会在周日拿到周考成绩的一整晚,什么也不想干,经常偷偷哭,然后放学一直去操场走到深夜。

拿到成绩后,我第一时间拿我收到的红包买了一台游戏本,自己还加了所有的钱将游戏本显卡加上了 1060 ,为的就是能在大学玩 4 年游戏,觉得自己的日子总算到头了,虽然由于个人兴趣我依然在学习着开发,但远远不及我玩游戏的时间。

再到大学,发现家里能提供的钱,甚至都不够基本的生活费,没有钱进行一切的社交,没钱买想买的衣服,没钱换手机,没钱买想买的琴,甚至买书,参加比赛,甚至学费都要推迟才能交上,我也没法为喜欢的人掏钱,从此以后,我再也不玩游戏,学校没用的课我一律不上,拼命接外包,30 元我花一整天都要,到100、200、1000、2000,不停学新技术,想尽一切办法挣钱,最后这所有的一切,彻底的改变了我这个人,让我开始变得焦虑,睡眠变得极差,脾气也不好,几乎也不笑了,最后连最喜欢的人也没留住,她讨厌我为此而改变的性格。也在那个时候,失去了唯一能让我感到开心的东西。

(2)对你想说:

所以,你也许跟我一样也是大二,即将步入大三,也许也是 21 岁,也许还没有体验生活上的艰难,但是,在之后的某一天,那些你都会面临,所谓的长大,所谓的生活,你都会一一体验。你现在浪费的时间,就可能是浪费本能让你过好的机会。

3、选择安静的环境

  • 自习室:我通常不会在寝室,经常在学校的奶茶店,咖啡店,有一些专门为学生提供的自习室,一坐就是一下午,一晚上,那儿,是我很向往的开发环境。

  • 图书馆:我们学校的这个地方给我的印象不好,占座情况严重,我甚至想随便坐下开始写代码,但冬冷夏热,我终究放弃了,但是如果你学校的图书馆能很好,也是个不错的选择。

4、放开眼界

  • 不能整天就吵着我要学 java ,学 python ,你得清楚学习那些会给你带来什么,了解一下大的技术更新,像我选择 Flutter,你可能认为这门技术连学校都不交,有啥学的,那就是真的错了。
  • 你可以信任老师,但不能依赖老师,习惯自己独立解决问题,才能真正的锻炼自己的能力。
  • 多跟喜欢技术的人交流,有的人虽然是同龄,但在技术上,你还是得叫他前辈。
  • 选择的权利永远在自己手上。

我的桌子

一堆单片机设备、电烙铁、万用表,还有一个自己开发的遥控车,一堆自己挣钱买的书,被妈妈以为的是拿来看电视的开发用的支架。

最后

承蒙时光不弃,感谢一切给予。

掘金征文 | 2020 与我的年中总结 征文活动正在进行中......