周记:Fifteen

版权声明:听说这里让写版权声明~~~ https://blog.csdn.net/f_zyj/article/details/83040183

这一周是我工作以来最惊心动魄的一周,太刺激了!

原本,这周本不该有什么刺激的,就是使用 protobufprotobuf 进行数据的通信,虽然第一次用,但是总归算不上什么难事儿,遇见比较刁钻的 bugbug 也无非是当 messagemessage 内部嵌套 messagemessage 时,内部 messagemessage 的成员无法直接通过 set_xxxset\_xxx 进行赋值,原因是因为内部嵌套的 messagemessage 在经过 protocprotoc 编译后生成的代码里将他给 constconst 了,所以不能通过上述方式进行修改了。当然,虽然 protobufprotobuf 将他给 constconst 了,但是我们依然可以更改他的值,那就是通过指针进行修改,protocprotoc 内部的确提供了对应的指针,我们可以通过 mutable_aaa()mutable\_aaa() 来获取内部 messagemessage 的指针,然后就可以对它的成员进行赋值了。

上述问题,折腾了我一天,着实有些坑,不过还是自己学的不到家罢了(其实,只是大致浏览了一下 protobufprotobuf 的东西,毕竟实际用的时候,只需要关注它提供的接口,暂时并不需要我去写什么 messagemessage),弄完这个问题,也成功把数据的通信搞定了。

接着又在写一个类的时候,重载了构造函数,在默认的构造函数中我对几个指针进行了 newnew,在重载的函数中,刚好也需要同样的几行代码,想着代码应该多去复用,所以我偷懒的直接在重载的构造函数中调用了默认的构造函数,待到整个类都写好了以后,顺带在其他几个文件里调用了这个类,编译完美通过,但是在执行时报错了,好痛苦的说,运行时错误信息给的十分模糊,隐隐约约可以看到是指针的问题,我也可以肯定错误是出在某几个文件中,但是没法直接确定问题出在哪里。

于是乎,我开始将调用这个新类的文件的代码改回原来的样子,因为原来的代码肯定是没有这方面问题的,此时,大总管看到了,说,我可以将代码进行 gitgit 本地托管,这样可以任意将代码恢复到以前的某个状态。不过现在我只能费神费力的去往回改了,还好我有一周前的代码备份,所以只是将一周前的代码片段拷贝过来进行了略微的改动,最后确认了,问题就出在新写的类里,而此时类里的代码还是很少的,所以我一眼就咋嘛出滋味儿了,猜测是构造函数被重载的构造函数调用的锅,尝试修改了一下后发现果然是如此。

于是乎,回想到很久以前貌似也遇见过这种问题,只是自己给忘了,搞到这里,我十分开心,并且决定按照大总管的说法去用 gitgit 管理本地仓库,所以切到了项目根目录初始化了仓库,commitcommit 后我习惯性的重新彻底编译了一下,用的是自己写的 buildrunbuild-run 脚本……铛铛铛,惊险刺激的来了!!!

我的 CMakeLists.txtCMakeLists.txt 文件找不到了,我的 BuildBuild 文件找不到了,我他妈的项目根目录下所有文件都不见了……这时我才明白,我在错误的目录跑了 buildrunbuild-run 脚本,而该脚本有一句删除当前文件下所有文件的功能,顿时,天都感觉塌了!!!

思索了五秒人生,感觉我的人生轨迹可能又要发生大的改变了,我也许要失业了,想了很多,甚至想了失业以后干什么,重新去找工作还是等毕业以后回家给我爸帮忙……因为我知道那句命令执行以后就没法恢复了,估计只能跑路了。

这五秒,过得太慢,慢到我重新规划了未来的路……不过我不死心,抱着试一试的心态查看了当前文件下是否还有其他文件存在,看到竟然还有四个,. .. .git .gitignore.\ ..\ .git\ .gitignore,此时我才明白了,脚本中的删除命令并不会删除文件下的隐藏目录,而 gitgit 管理的本地仓库就是通过隐藏文件保存的,于是我查看了 gitgit 的日志,发现果然有一条几分钟前的 commitcommit,于是我喜出望外,将刚才的规划刨除脑外,将 gitgit 切到了上一次 commitcommit 的状态。

其实,我也不是瞎猫碰上了死耗子,因为命令行的提示符显示我在 gitgitmastermaster 的分支下,所以当时我就猜测 gitgit 没有被删除,一看,果然没有,感谢大总管的一句话救了我,当然也感谢我自己的行动力,如果没有及时听大总管的话,我可能就死翘翘了。当然,也是因为这句话,我才会在此时此刻切到项目的根目录,不过就算这次躲过了,以后肯定还是会遇见这个问题的,早遇见早填坑!!!

当然,这也不全怪我脚本,哪怕我是一条一条命令输入的,而不是直接跑脚本,我照样存在删掉项目的可能性,真要怪,就只能怪我不够细心,没有考虑到脚本的健壮性。

于是我痛定思痛,又花了一些时间强化了脚本,并且将 rmrm 命令给写了一个 rmsecurerm-secure 的版本,以后再也不会直接使用 rmrm 了。

此时,已经是周四了,但是我依然心有余悸。

周五早上补充了几个类的函数,然后写了几个槽函数,遇见了以前遇见的槽函数信号发生歧义的问题,很快就解决了。下午就继续思考如何让我离意外失业更远一些?大总管只是让我在本地用 gitgit 管理,但是如果我在项目根目录的更高一级的位置删除了不是照样不安全?虽然我写了安全版本的 rmsecurerm-secure,但是也存在电脑硬盘坏掉的可能性啊……最好的办法就是多在几个地方备份一下,但是问题来了,如果这样,就太麻烦了,每次都要在不同硬盘备份,太繁琐了。

不过,完全用不到如此麻烦啊……我既然都用 gitgit 本地管理了,为什么不直接上传到线上呢?当然不能上传到 githubgithub,公开公司的代码会被 dissdiss 的,私有仓库又要花钱,所以打算上传到 gitlabgitlab,但是害怕不允许上传到私人的 gitlabgitlab 账号,所以跟韬哥说,让韬哥给我在公司的账号下创建了一个私人仓库,并且把我添加到开发者里。

韬哥用好了以后,又出现坑了,一直 pushpush 不上,说是 mastermaster 分支权限不够,不能上传,所以我自己创建了分支,可是依然不行,最后 googlegoogle 说是可能因为仓库是空的,所以 mastermaster 并不真实存在,换言之就是,只有在仓库有东西以后才真正的出现了 mastermaster 的主分支,而我并没有权限去给这个空仓库上传文件来创建主分支,只能让韬哥在线上进行创建。创建好了以后,我可以 pushpush 自己创建的分支,但是无法合并到主分支,还是权限不够,于是韬哥又给我添加了权限以后,终于可以将分支合并到主分支了,也可以直接 pushpush 主分支。

此时,我并没有满意,我的强迫症犯了,总是担心代码真的安全了吗?虽然我在线上可以看到自己的代码,但是我始终不能放松,回到家以后,用自己的电脑拉下来整个仓库,然后打开,发现果然有最新的代码……安心了,我不会因为删库而失业了!

大概其,这就是传说中的 心有余悸 吧……

倦鸟
2018.10.13 17:02

阅读更多

扫码向博主提问

f_zyj

弱校 ACM 竞赛拓荒者,从零到区域赛银
  • 擅长领域:
  • ACM
  • 挑战程序设计
  • C/C++
去开通我的Chat快问
换一批

没有更多推荐了,返回首页