本文为 2022 年 7 月作业日子总结。

研发编码

近来编码,根本都是事务、自动化测验相关的,在写代码时,主要考虑便捷性,快速出成果。功能方面不怎样考虑。像写C++,假如没有什么特殊的要求,字符串都是用string类型,触及格局化,则仍是用数组,结合sprintf,但最终仍是用string,由于拼装比较便利。另一方面,也不怎样纠结字节大小,一般数字用int存储,也不考虑深复制仍是浅复制,准则便是,怎样写代码快就怎样来。像实现web服务器,对外提供接口,优先考虑 golang,解析json文件亦然。

C++

某个txt文件,运用=分割字段和值,需读取解析出来。运用了C++的getline函数,但当文件格局为\r\n结束时,会犯错,会把\r当成一般字符读取,导致值紊乱,而结束符为\n时正常。为了运用那套代码,在读取一行字符串时,判别最终一字符,假如为\r则删去。

int readInputFile(std::string filename)
{
   std::string str;
   std::ifstream ifs1(filename);
​
   if (!ifs1.is_open())
   {
     printf("open [%s] failed: %s\n", filename.c_str(), strerror(errno));
     return -1;
   }
​
   while (getline(ifs1, str))
   {
     if ((int)str.size() == 0 || str.at(0) == '[' || str.at(0) == ';' || str.at(0) == '#')
       continue;
     if (str.at((int)str.size()-1) == 0x0d) str.pop_back();
​
     std::vector<std::string> linestr = splitString(str, "=");
     int len = (int)linestr.size();
     if (len != 2)
     {
       continue;
     }
​
     std::string key;
     std::string value;
     key = linestr[0];
     value = linestr[1];
​
     if (key.compare("foo") == 0)
     {
       printf("foo = [%s]\n", value.c_str());
      
     }
     // ... 其它字段
   }
   return 0;
}

go

某工程需要运用测验数据,但又不想直接在代码中固定。可在指定目录运用特殊的文件名称以作差异,随机读取其中一个作为测验用例数据。思路:

  • 先获取契合要求的文件数量N;
  • 再从[0, N)中取一随机数,得到某个文件的索引,运用包math/rand即可;
  • 再读取该文件。

如此一来,不必再修正代码,而是添加不同测验用例文件即可到达意图。

func CmdCmd() {
    fmt.Println("test...")
    fmt.Printf("file: %v\n", getTestFileData("postcase_"))
    fmt.Printf("file: %v\n", getTestFileData("getcast_"))
    fmt.Printf("file: %v\n", getTestFileData("update_"))
}
// 固定测验目录
var testdata = "testdata"
// 获取指定目录N个指定文件格局中的随机一个,回来内容
func getTestFileData(patten string) (ret string) {
    ret = ""
    //  获取目录下所有契合的文件数量
    files, err := com.GetAllFilesOneDir(testdata)
    if err != nil {
        return
    }
    var myfiles []string
    for _, item := range files {
        if strings.Contains(item, patten) {
            myfiles = append(myfiles, item)
        }
    }
    // 防止随机数函数小于0犯错
    if len(myfiles) == 0 {
        return
    }
​
    // 随机一个
    rand.Seed(time.Now().UnixNano())
    randidx := rand.Intn(len(myfiles))
    // fmt.Printf("files: %d %d %d\n", len(files), len(myfiles), randidx)// 读取之
    buffer, err := com.ReadFile(myfiles[randidx])
    ret = string(buffer)
​
    // ret = myfiles[randidx]return
}

作业记录

在国产化工控机移植任务中,由于 onvif 视频播映有问题,最终定位到 gsoap 版本不兼容,于是重新编译,花了必定的时刻。后机缘巧合下,拿到一台前前前前店主的相机进行测验,开机的LED灯状态没变化,依然是我规划的红灯、黄灯,绿灯的顺序,所幸还记得默许IP、默许账号,不需要额定的帮忙。离开那家公司时,大锤才三个月,现在他妹妹都两岁半了,时刻过得真快。

主任工找了我一次,苦口婆心共享了编码、测验心得,并问我如何做好测验,如何管理代码,由于有个较重要较要害的工程要交接,——这也是主任担心的原因,我受宠若惊,也诚惶诚恐,如履薄冰,这是个应战,也是个时机。

日子记录

月初,网购了几种不同的甲由药,都一一试了,战果颇丰,铲除几回后,半夜就没再会小强处处散步了。但不知道能坚持多久。

中旬,在大锤多次要求下,办了一张小区的游水卡,共30次,但下个月底过期,所以周末又多了一个事:带大锤和大妞去游水——当然现在更多的是玩水。

天气越来越热,用电量持续上升,但又不能天天呆家里,当然也不能长时刻呆户外。某个周末全家去公园,天空时而放晴,时而下雨,看完荷花盛开,又爬小山坡听松涛阵阵,顺便找蝉壳和松果,让大锤大妞知道夏天的气味。

这段时刻,看到新闻报道有较多负面的事:打人,取不出钱,篡改数据,烂尾,断供,停贷。我的不幸,是在上一年利率处于较高(可能是最高)水平时买房。我的幸运,是当初没有在五象入手期房而是购买二手房、现在有份稳定的作业(尽管是外包,尽管薪酬延后近一个月发),所以现在有地方住,有钱交房贷。我和爸爸妈妈通话谈了这些事,爸爸妈妈说得最多的是没有剩余的钱支撑,但不必忧虑他俩日子,管好我自己,孙子的钱不能太省。高枕无忧,我对作业的情绪,可谓比家人还好,叫加班二话没有,叫搬东西二话不说,熬夜写代码是常事。

思想方面

互联网太泛了,聚集了不同的观点的人,可发表不同的观点。我重视但很少参加网上的事,目前我的重点是:努力作业写代码,顺便写点文章,偶尔看书提升自己,教育小孩,带小孩玩,买菜,做家务。人的精力有限,挑主要的做即可。

我在网上共享了软考的事,很人质疑,但没过多回复,由于没必要。如质疑证书真假,对我而言,能靠证书评职称或许有补贴就好,不必对外交待。如质疑技能,大可看写的文章和 github 的代码。如质疑我不明白带小孩,我也无须过多辩解和证明,小孩高兴即可(当然不听话时该打还得打)。

业余研讨

掘金渠道上个月的日更活动得了全勤奖,共发表31篇文章,奖品在月末如期收到,大锤和大妞喝上新鲜果汁了,我的拖鞋码数也契合,后面收拾些东西,和电饭煲一起寄回老家。

方案实现一个播映器,开始设想中,运用 Qt、ffmpeg、SDL编写,把以前写的YUV播映、H264裸码流播映、各种格局转化功能等加进去。目前迫切需要的是音视频分离,音视频截取功能。主要是要把下载的音乐、儿歌转成音频,减少小孩看手机的时机。