加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

实现实时定位的技术

发布时间:2021-02-21 17:39:33 所属栏目:外闻 来源:互联网
导读:水工业的现代化能力受到限制。但是,正如我们在许多其他关键任务行业中所看到的那样,当新技术广泛应用于日常运营中时,它们可以并且正在不断改善这种状况。通过基于云的技术创建的工业物联网(IoT),使人们可以远程访问和实时了解该行业,在这个行业,许多严

水工业的现代化能力受到限制。但是,正如我们在许多其他关键任务行业中所看到的那样,当新技术广泛应用于日常运营中时,它们可以并且正在不断改善这种状况。通过基于云的技术创建的工业物联网(IoT),使人们可以远程访问和实时了解该行业,在这个行业,许多严格的法规和溢价,使公用事业公司质疑,是否可以作出重大现代化的同时,实现合规。

这个过程很复杂,没有单一的解决方案可以解决这个问题,但是添加的基于云的平台可以提供远程可见性和实时手动数据输入,可以简化这个过程中耗时且容易出错的部分。尽管许多公用事业公司质疑合并基于云的监控和手动数据输入平台的风险,但结果表明,不使用这些平台实际上会让你在质量和运营问题上面临更大的风险。


 

另外,把宏都定义到一起,这意味随便改点东西,都会需要修改宏头文件,而这个头文件就会成为程序世界的中心,修改公共宏文件几乎会引起整个系统的所有源文件rebuild,这简直就是AOE团灭啊。所以更好的方式是分而治之,去集中式。

我们知道c/c++的编译单元是source file(.c/.cpp),编译的第一步是预处理,所有include都会展开替换,所以我们要避免引入任何不必要的头文件,也应该把本编译单元用到的头文件都include进来,这就是所谓的头文件自给自足。这点很重要,但很多人会不以为然,甚至有些人会自作聪明的搞一个allincluded.h,把常用的一些头文件全部include进来,然后沾沾自喜的自认为一劳永逸的完美的解决了问题,包含不必要的头文件会增加编译时间,会增加依赖,我们不仅应该避免错误的包含,还应该精心设计和划分文件,使得每个文件的功能足够内聚单一。

缩写

慎用缩写,相比缩写带来的含混不清,我宁愿多敲几下键盘,如果要缩写请符合惯例遵从常规,比如AI,比如App,比如cfg,但是你把threshold缩写成threshod,把Item缩写成Iem,我特木真的搞不懂你是拼错了还是缩错了?

遵从标准

我遇到过一些项目,每个模块单独定义自己的int32,float,char,void,比如定义MoKuaiA_int32,MoKuaiB_int32,MoKuaiC_CHAR,不仅如此,它还把inline,true,false,VOID,const,case,static等一众关键字全部redefine了,令人匪夷所思的是它竟然把标准C API全部重定义一遍,令人发指的是它竟然不让你用语言的标准写法。

我一直搞不懂为什么要这样做?如果你只是需要解决不同体系结构下long等整型的长度差异,我想偷偷告诉你,c库头文件stdint.h已经从标准层面统一解决了这个问题,里面int8_t/16_t/32_t/64_t,还有uint8_t等等应有尽有。

这样的做法是很不好的,会让符合标准的写法寸草不生,建议不要这么做。

宏是c的一个有效武器,在有些情况下确实行之有效,我是宏的中间派,我既反对禁用宏,也反对滥用宏,inline可以部分替代宏,但不能完全替代宏。

但我见过一些项目,到处都是宏,全大写,至少1/3的代码都是各种花里胡哨的宏,你review代码的时候,不停的跳来跳去,看了一眼,哦,就这样啊,然后切回来,频繁的上下文切换是低效的,它打断了你的思路,让你看代码有种撒尿撒到一半憋回去的感觉。其实很多时候完全没有必要,不需要整这些虚头巴脑的。

命名

命名有一些指引,比如类/结构体应该用名词,函数应该用类似动词或者doSomething这样的动宾结构,这些规矩都是耳熟能详的。

我主张命名应该简明扼要,不要罗里吧嗦,要准确的表达出它要做的事情,如果你碰到命名困难,你可能需要考虑你的类定义或者接口划分是否合适。

命名是接口的一部分,很重要,好的命名是自注释的。

如果你没有思路,那我建议你参考一下STD C/C++ API,毕竟这些接口历经几十年没有大的变化,算是经受住了历史的考验,比如malloc/free/atoi,stl 容器的成员函数也有点意思:size(), capacity(),resize(),reserve(),push(),pop(),top(),back(),很干脆,不废话,我觉得很好。

所以,如果你编写的是某某管理器,比如ItemManager,我建议你直接取名add(),remove(),而不用AddItem(),RemoveItem(),因为你本身就是Item的Manager,操作的必然是Item,而且从参数上也能体现出来,少即是多,多不如少。

扩展性

开闭原则是应对扩展性的rule,人无远虑必有近忧,说的是我们不能局限于眼前,但也请不要盲目迷信扩展性,戏太多也是病。

知乎有一篇神贴讲的是如何把helloworld搞成一个big project,当你想给别人项目挑刺的时候,你可以用扩展性说事,但我建议你离开口闭口扩展性的人远一点,据我观察,这种人大多比较虚伪而且很水。

避免特例

linus大神分享过他心中的好代码,说的是针对链表的操作,他更喜欢统一性的处理方式,而不是做特例化的处理,我想这个例子很有代表性,它其实代表一种理念,那就是自始至终,我们的头脑里必须优先考虑normal化的处理方式,当然这其实是一个比较高层次的要求,菜鸟互啄可以先跳过这一层要求。

高效而鲁棒

有很多避免运行低效的做法,比如减少拷贝,提高局部性,buffer/cache,空间时间置换,内联,分支预测,判断前置,计算延迟,无锁技术。

提高鲁棒性的关键是面向failed编程,不信任/零信任设计,假设依赖的上下文,上下游都是不可靠的,方法很多,不一一列举了。

最后



 

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读