加密狗总结

为了树莓派上的加密,折腾了差不多两个月—从清明节到端午节,终于到了快解决的时候了

错误

记录自己走过的弯路

其实前面也有几次似乎看到了解决的曝光,比如可能是动态库引起,动态库的循环调用引起,烧无驱模式有问题,80文件有问题,LDK版本太低…,但却以失败告终,现在才发现,这些都只是可能,以为之类的猜想,包括由此而进行的漫无目的的测试,那时走过的弯路有哪些呢?

  1. 在工控机上可以,树莓派上不行—就坚持认为加密狗有问题,最适合解决这问题的就是他们
  2. 加密狗厂商的各种不配合,也为自己找到了理由,而没做到:好的提问能解决问题的一半;
  3. 自己程序有点规模了,茫茫代码中自认为没时间,没把握找到问题所有,却不知道从最小化测试环境开始;
  4. 当采用最小化测试环境时,也只是在原有代码中通过注释部分代码查找,每次得出的结论都没法定位问题,甚至与上一次的自相矛盾;
  5. 整个测试流程没有自动化,很烦琐且费时间。

简单的说就种解决问题的方法就是碰运气

摸索

记录自己做的好的地方

为什么这次有真解决问题的感觉呢,那是因为建立在方法论的基础上:

  1. 从最小验证开始:在树莓派上写一个hello, world;
  2. 再写一个ROS的listener,再在此基础上迭代;
  3. 测试流程自动化:如果这个测试过程会超过2次,就应该自动化(重构),它大大加快了我的测试进度
  4. 在等待自动化测试的时候,让我有时间思考下一步应该做什么;

改进

自己应该改进的地方

  • 一定要腾出时间来思考:代码面前了无秘密,代码中都是细节,细节是魔鬼
  • 没有主动去找原因:不为失败找理由,要为成功找方法
  • 自己思考不能乱,不能停
  • 思考为什么工控机上行,而树莓派上不行就可以大致排除
    1. 动态库引起
    2. 动态库的循环调用引起
  • 不要想着一步就所有问题都解决,先啃最难的:核心代码能加密就可以了,其它不能解决就算了—缩小目标;
  • 不要过度设计:自动化脚本能用就行,有过度设计的部分先记下来,完成手头工作后再总结;
  • 缩小范围验证有两种,但目标都是逼近对方以解决问题:有条件的话可以双向进行,看哪种方法可以更快逼近
    1. 现有代码部分注释做减法
    2. 从hello world开始做加法

正解

目前有效的方法,应该是最小规模上的小步迭代

  1. 验证树莓派上hello world加密
  2. 验证静态库、动态库和循环调用
  3. 验证树莓派上ROS版的hello world加密
  4. 验证ROS的订阅模式
  5. ……

可能现在说来这些步骤有点“事后诸葛亮”,但如果每次迭代都建立在好的提问上呢—我这一步能验证什么?我下一步要怎么做?
看来方法论有多重要啊

以后还真要多反思,有没有更好的方法,能不能做的更好