一秒记住【笔趣阁】biquge365.net,更新快,无弹窗!
对于国平的安排,韩学涛没什么不满的。
毕竟自己刚来,资历最浅,坐哪儿都行,没所谓。他挺淡然。
可等他把资料码好,随手翻开一本,才看了两行,那点淡然就全没了——心里头一下子被惊喜塞满了。
北斗地面段的接口协议、数据格式规范、时间同步标准,全是在外面找不着的好东西。这会儿就堆在桌上,半人高一摞,随便翻,随便看。
他来西昌,不就是为了这个么?
真是得来全不费工夫。
旁边李哥顺手递过来一个U盘,他点了点头,接过来往桌角一搁,连多看一眼的工夫都没给。那玩意儿能比眼前这堆宝贝重要?
先看资料再说。
往工位前一坐,他抄起最上面那本《北斗一号地面段数据接口规范V2.3》,翻开就一头扎进去了。
协议条款写得特别细。每条数据格式的定义、每个字段的字节长度、每种异常状态码的触发条件,密密麻麻铺了上百页。他读得入了迷,碰到关键的地方就掏出本子记几笔,有时候闭着眼睛琢磨一阵,脑子里跟搭一座精密的钟表似的——每想通一个齿轮的咬合,他心里就暗叫一声好。想通了再接着往下翻,那种豁然开朗的痛快,比吃了一顿大餐还舒坦。
一抬头,窗外天都黑透了。
办公室里人走得差不多了,灯也灭了大半。韩学涛扫了一眼角落,看见三组靠墙那儿支着一张钢丝床,枕头被子都有,一看就是有人长住的。
他想了想,拎着工牌去后勤领了一张同样的床,又拐到小卖部买了一桶泡面。开水房冲了面,端着碗回到工位,把碗搁在资料旁边,边吃边看。
吃完了,他把钢丝床在工位旁边撑开,躺上去接着翻。困了就合眼眯一觉,醒了就继续看。
第二天一早,李哥和小周推门进来,一眼就看见角落里多了一张床,再一看,韩学涛已经坐在工位上了,面前摊着翻了一半的文档,手边一杯茶正冒着热气。
我去,看文档也能熬通宵?
李哥下意识瞥了一眼昨天递过去的U盘——还在桌角搁着,位置动都没动过。电脑屏幕黑着,主机电源灯也没亮。他跟小周对了个眼神。
“这新人什么路数?电脑都不带开的?”
“不会写代码吧?光靠看文档能看出花来?”小周压着声音说。
李哥没接话,走到自己工位放下包,又忍不住回头瞅了一眼那个U盘。犹豫了一下,还是没拿回来——反正任务已经甩出去了,完不完得成,那是他自己的事。
韩学涛压根没留意他俩在嘀咕什么。手里的资料已经翻到第五本了,讲的是北斗地面站跟卫星之间的时间同步协议,里头星上时钟源和地面参考钟的偏差校正机制写得尤其详细。他用铅笔在页边勾了好几道线,时不时在草稿纸上推两行算式......
这一看,就是三天。
第四天天刚蒙蒙亮,他合上最后一本资料的封底,把整摞文档齐了齐边角,往桌角一推,长长吐出一口气。
然后才伸手拿起那只搁了三天的U盘,插进电脑主机。
李哥正端着茶杯路过,看见这一幕,手一抖,茶水差点泼出来。
三天了,您总算想起这茬了。这会儿才开始改bug,按这进度再搭三天也未必下得来。他叹了口气,也没说什么,回到自己工位坐下了。
韩学涛打开U盘里的脚本文件,代码一屏一屏地往下滚。
他上下翻了不到两分钟,光标就停在了一个函数段落上——那一段处理的是原始观测数据里时间戳字段的解析逻辑,几十行的循环嵌套,注释里写的是李哥的名字。
他盯着那段代码看了几眼,手指往键盘上一落,噼里啪啦敲了十几行,保存,编译,运行。
屏幕上的进度条唰唰跑完,跳出一行绿色的提示:Datacleanedsuccessfully.0errors.
韩学涛转头喊了一声:“李哥,搞定了。”
李哥正仰头喝水,被这一声呛得直咳嗽,放下杯子抹了把嘴:“你说什么?搞定了?”
他三步并作两步冲过来,弯腰凑到韩学涛的屏幕前。电脑开机都不到十分钟,这小子敲了几个字,就告诉我搞定了?
他一排一排地往下扫,手指在屏幕上扒拉着翻出运行日志,最后一行明明白白写着:处理记录数24768条,错误数0。
李哥的眼镜差点从鼻梁上滑下来。心跳都漏了一拍。
“你怎么改的?”他惊呆了。
韩学涛手指点了点屏幕:“资料里写得很清楚,北斗单星原始时间戳是毫秒级的,单帧最大计数值超过65535。你这个脚本为了省内存,把时间戳塞进了16位整型变量里,数据量一大了自然溢出崩溃。我换成无符号长整型,又加了两个溢出判断分支,就好了。”
他说得云淡风轻的,跟解释一加一等于二似的。而李哥盯着那几行代码,嘴巴微微张着,半天没合拢。
当年这个bug他前前后后折腾了一个礼拜,才算勉强“解决”了——其实根本没根治,就是绕了个弯子,让脚本每隔两周才崩一次,好歹能凑合用。他一直以为是数据量太大导致的性能瓶颈,还琢磨过要不要申请加内存。
结果根子就在这儿。
李哥直起身,慢慢摘下眼镜擦了擦,又看了一眼屏幕上那十几行代码,心里头忽然涌上一阵恍惚——前三年像是白活了一样。
韩学涛把U盘从接口里拔出来,随手递过去:“改好了,收起来吧。”
李哥愣愣地接过来,张了张嘴想说点什么,韩学涛已经转回自己电脑前,点开了桌面上“全量历史脏数据清洗”那个文件夹。
这是于主任交给他的任务。
脏数据清洗这活儿,相当让人头疼。
说白了就是北斗地面站从双星接收到的原始观测数据里,混着各种乱七八糟的东西——信号中断时候的无效帧、卫星仰角太低时记录的不稳定值、设备重启那一瞬间触发的错误码。这些东西不清干净,后面的平差解算根本跑不起来。
三组日常就是写各种规则脚本,一条一条地筛,把这个文件的异常行删掉,把那个字段的越界值置空。
活儿杂、量大、还枯燥。
一个批次跑下来少说大半天,中间还经常因为漏了某种异常类型报错中断。
韩学涛翻开余国平给他的那堆资料里中间某一本,停在其中一页。
那一页写的是北斗原始数据帧结构定义,里面有一个字段被加粗标了出来:数据质量标识码。规范里写得明明白白,这个码由星上自主判读生成,一共八位,每一位代表一个维度的健康状态。某位是1,就说明对应维度的数据不可用。
他盯着这一页看了大概两分钟,然后关掉文档,打开清洗脚本编辑器,把原本那几百行筛查逻辑全选、删除、清空。
重新写了一个主循环。
核心逻辑简单清晰:先读每个数据帧头部的质量标识码;质量码不是零的直接跳过,连后面的字段都懒得解析;质量码全是零的,整帧完整保留。出口处再加一行简单的统计输出,把每类质量码对应的帧数自动汇总成表。
总共就写了二十来行。
保存,运行。
进度条稳稳地往前走,速度比原先那个逐字段筛查的脚本快了不知道多少倍。韩学涛靠在椅背上,看着屏幕上的数字一个一个往上跳,顺手端起搪瓷缸喝了口水。
而那边李哥攥着U盘回了工位,坐下来第一件事不是干活,是发呆。
他盯着显示器,脑子里翻来覆去就一个念头:那个bug困扰了自己整整三年,结果人家翻了翻资料就解决了。三年通宵熬出来的东西,在别人那儿就是几行代码的事儿。
他本来想好了今天要调的一个思路,现在那个思路也变得模糊了。整个人像被抽空了似的,目光空空洞洞地望着屏幕上那个一闪一闪的光标。
就这么呆坐了半小时。
李哥终于动了动,使劲搓了把脸,从抽屉里摸出饭卡,起身去食堂小卖部买了两罐红牛。走回来坐定,拉开拉环,仰头灌了一大口。
目光无意间往旁边一瞥,正好看见韩学涛的屏幕上跳出一行字:数据清洗完成。
总计处理记录数:1847329条。有效保留:1526641条。异常剔除:320688条。清洗用时:00:27:43。
李哥嘴里的红牛还没咽下去,“噗”地一口全喷在自己键盘上。
“全量脏数据清洗?”他声音都变了调,红牛顺着下巴往下淌也顾不上擦,“你……半个小时就搞完了?”