2022年第四季度工作总结

目录

一个月以来都不想写工作总结,其实是因为确实没有做什么工作。 因为沉迷新入的网络游戏而耽误了工作,荒废了编程,浪费了金钱,消耗了身体。 但为了保持一直以来的习惯,我依然要写这篇季度工作总结,期望能让自己走出当前不对劲的状态。

计划完成情况

四个月时间只有一小段用来工作,做了一项任务,还没有完成。

核心任务

  • 工作流
    • 🚧 目标:❌ 支持服务的断点重启,✔️ 支持动态更新服务中的工作流树形结构
    • 开发
      • ✔️ 设计并实现工作流定义、状态的序列化
      • ❌ 实现工作流树形结构的动态更新功能
      • ❌ 实现命令行客户端的等待重试功能

主要任务

  • 产品制作平台
    • ❌ 消息库:部署消息转存程序(Linux服务器/天擎算法)
    • ❌ 应用:在 CMADaaS 上使用当前消息对接方式开展批量绘图测试
    • 🚧 设计:重新设计适合 CMADaaS 平台的绘图任务调度方案(是否使用 ploto 方式,或者重新设计?)
    • ❌ 探讨:构思产品制作平台的设计方案,满足不同产品制作任务的需求
  • 模式产品库
    • ❌ 设计:参考现有规定设计产品库文件名规范,确定产品区分方式(目录 + 文件名 vs 文件名)
    • ❌ 开发:基于 CMADaaS 对象存储开发产品库
    • ❌ 应用:将 CMADaaS 绘图算法生成的图片产品保存到模式产品库

工具开发

  • reki
    • ❌ 测试:开发多环境测试代码 (CMA-PI,Linux,Cloud)
    • ❌ 文档:完善文档,为已开发功能撰写用户文档
  • meda
    • ❌ 调研:调研业界主流 Python 气象绘图包,撰写调研报告(是否合作开展)
    • ❌ 设计:明确预期目标和开发形式,争取形成初步的合作开发机制
    • ❌ 开发:从仿制业务图形开始,逐渐确定项目设计方向
  • nuwe-cmaddas-python(待定)
    • ❌ 待定:是否继续开发?
    • ❌ 文档:完善文档,为已开发功能撰写用户文档
    • ❌ 开发:仿照业务检索程序开发新功能
  • mofis
    • ❌ 随意发挥

其他任务

  • 分布式调度技术

    • ❌ 试验:分析批量试验数据,开展更多试验
    • ❌ 总结:将已测试结果整理为技术文档
    • ❌ 应用:寻找其他应用场景(较难)
  • 年终

    • ✔️ 总结:完成全年工作总结
    • ❌ 计划:组织内部讨论,制定明年及未来几年的工作方向
      • ❌ 数据管理
      • ❌ 研发支撑
      • ❌ 系统建设与运行维护

工作

工作流开发

第四季度为工作流工具项目 takler 开发工作流序列化功能,将工作流对象表示成 JSON 字符串,并开发了简易的 JSON 格式工作流加载功能,实现了动态加载工作流。 该功能分成两步实现,首先将工作流对象及其属性转为 dict 对象,再将 dict 对象序列化为 JSON 字符串。

一个简单工作流的示例:

|- flow1
  |- task1
    event event1
    event event2
  |- task2
    trigger ./task1:event1 == set
  |- task3
    trigger ./task1:event2 == set

转成的 JSON 字符串如下所示:

{
  "name": "flow1",
  "state": {
    "status": 1,
    "suspended": false
  },
  "class_type": {
    "module": "takler.core.flow",
    "name": "Flow"
  },
  "children": [
    {
      "name": "task1",
      "state": {
        "status": 1,
        "suspended": false
      },
      "class_type": {
        "module": "takler.tasks.shell.shell_script_task",
        "name": "ShellScriptTask"
      },
      "user_parameters": [
        {
          "name": "TAKLER_SCRIPT",
          "value": "/g11/wangdp/project/work/workflow/takler-project/takler/playground/tasks/shell/11-03-event-flow/scripts/task1.takler"
        },
        {
          "name": "SLEEP",
          "value": 10
        }
      ],
      "events": [
        {
          "name": "event1",
          "initial_value": false,
          "value": false
        },
        {
          "name": "event2",
          "initial_value": false,
          "value": false
        }
      ],
      "task_id": null,
      "aborted_reason": null,
      "try_no": 0
    },
    {
      "name": "task2",
      "state": {
        "status": 1,
        "suspended": false
      },
      "class_type": {
        "module": "takler.tasks.shell.shell_script_task",
        "name": "ShellScriptTask"
      },
      "user_parameters": [
        {
          "name": "TAKLER_SCRIPT",
          "value": "/g11/wangdp/project/work/workflow/takler-project/takler/playground/tasks/shell/11-03-event-flow/scripts/task2.takler"
        },
        {
          "name": "SLEEP",
          "value": 30
        }
      ],
      "trigger": "./task1:event1 == set",
      "task_id": null,
      "aborted_reason": null,
      "try_no": 0
    },
    {
      "name": "task3",
      "state": {
        "status": 1,
        "suspended": false
      },
      "class_type": {
        "module": "takler.tasks.shell.shell_script_task",
        "name": "ShellScriptTask"
      },
      "user_parameters": [
        {
          "name": "TAKLER_SCRIPT",
          "value": "/g11/wangdp/project/work/workflow/takler-project/takler/playground/tasks/shell/11-03-event-flow/scripts/task3.takler"
        },
        {
          "name": "SLEEP",
          "value": 30
        }
      ],
      "trigger": "./task1:event2 == set",
      "task_id": null,
      "aborted_reason": null,
      "try_no": 0
    }
  ],
  "user_parameters": [
    {
      "name": "TAKLER_HOME",
      "value": "/g11/wangdp/project/work/workflow/takler-project/takler/playground/tasks/shell/11-03-event-flow/takler_home"
    },
    {
      "name": "TAKLER_INCLUDE",
      "value": "/g11/wangdp/project/work/workflow/takler-project/takler/playground/tasks/shell/11-03-event-flow/include"
    }
  ]
}

当前 JSON 字符串不够简洁,需要进一步简化,尽量减少序列化后的字母个数。 另外 ecFlow 具有部分更新的功能,对于节点树的小更新,不返回全部状态,只返回有更新的部分,会极大降低服务端与客户端的通讯量。 下一步要进一步完善当前的全量更新方式,并尝试开发增量更新方式。

去年 12 月底开始更新文档,进展不多。 下一步要继续完善工具软件的文档,提供详尽的使用说明,同时构建更复杂的业务系统,测试工具的可靠性。 当前的开发状态不太适合推广使用,今年第一季度倒是可以内部分享下技术细节,思考后续如何发展团队。

信息化工程

信息化工程项目依然没有显著的进展。 虽然跑通了通过消息队列触发任务的算法,但单个算法显然不具备扩展性,因此改为由 CMADaaS 自带的数据源驱动进行触发。 但今年 1 月测试发现,数据源驱动发送了大量的消息,既包括原始文件本身,也包括处理后的单要素文件,导致同一时段启动了大量的算法,而算法实际只需要原始文件的单个消息。 接下来需要进一步与 NMIC 沟通,选择合适的数据源触发后续任务,同时要考虑即将构建的产品服务平台采用哪种方案调度产品制作任务(算法),有没有可能自行搭建基于消息队列的产品制作系统。

对于信息化系统工程项目,我个人一直存在摇摆不定的问题,不想深入使用 CMADaaS 的技术,又找不到将技术合理融入的方式,所以项目进展及其缓慢。 从各种规划文件来看,未来气象系统业务软件 必须 基于 CMADaaS(及相关平台)平台使用组件化方式搭建,而且也明确规定了什么类别的组件由哪些单位负责进行开发,严禁重复开发。 当前就站在一个分叉口,是全面依托 CMADaaS 技术构建一套“全新”的业务系统,还是坚守 HPC 平台保持技术上的独立性? 这个问题我想了几年也没想明白,而现在规划已经出台,业务系统集成于 CMADaaS 平台已成为唯一选择,新建平台必须考虑如何将自己融入到 CMADaaS 之中才有可能通过业务化评审。 在当前业务系统中,模式同化、积分部分不可能迁移到云平台,模式前处理短期内也和云平台无关,模式产品制作就成了云化改造的目标。 虽然去年设计了几版方案,但都没有详细展开,下一步应该完善这几版方案设计,按照基础设施能提供的功能,设计可行的技术方案,争取参与到产品制作平台的建设之中。

总结

2022 年第四季度工作总结就只有一句话:什么都没做

算上这一个月,从 2022 年 10 月到 2023 年 1 月整整四个月时间都因为新入的网络游戏而荒废掉。 沉迷游戏不仅浪费了金钱,挥霍了身体,也耽误了个人和部门的工作,逐渐变成单位的隐身人,对游戏之外的事情变得漠不关心,陷入一种危险的状态中。 虽然我能意识到现在的状态不对劲,需要有所改变,但就像我从来都控制不住自己晚睡的恶习一样,成瘾性的东西很难戒掉。 我必须要寻找其他兴趣点,不能将所有空闲和不空闲的时间都用来玩网络游戏,也不能再持续熬夜晚睡下去。 即使找不到明确的工作方向或者提不起兴趣去开展工作,也不能再将精力全部投入到游戏中,看看书,刷刷剧也是可以的。

下一步工作计划

核心任务

  • 工作流
    • 目标:支持服务的断点重启,支持动态更新服务中的工作流树形结构
    • 开发
      • 完善工作流序列化功能
      • 实现工作流树形结构的动态更新
      • 实现命令行客户端等待重试功能

主要任务

  • 分布式调度技术
    • 试验:分析批量试验数据,开展更多试验
    • 总结:将已测试结果整理为技术文档
  • 产品制作平台
    • 应用:在 CMADaaS 上使用数据源驱动方式开展批量绘图测试
    • 开发:推进数据处理算法开发与测试
    • 开发:推进集合预报算法开发
    • 探讨:构思产品制作平台的设计方案,满足不同产品制作任务的需求
  • 模式产品库
    • 文档:合作编制产品清单
    • 设计:参考现有规定设计产品库文件名规范,确定产品区分方式(目录 + 文件名 vs 文件名)
    • 开发:基于 CMADaaS 对象存储开发产品库
    • 应用:将 CMADaaS 绘图算法生成的图片产品保存到模式产品库

工具开发

  • meda
    • 调研:调研业界主流 Python 气象绘图包,撰写调研报告
    • 合作:明确预期目标和开发形式,争取形成合作开发机制
    • 开发:设计 API 接口,从仿制业务图形开始,逐渐确定项目开发内容
  • reki
    • 开发:重构代码,统一 API 接口标准
    • 文档:完善注释和文档,撰写用户手册,汇总示例程序
    • 测试:开发多环境测试代码 (CMA-PI,Linux,Cloud)
  • nuwe-cmaddas-python
    • 开发:尝试指导同事接手开发,面向业务系统开发检索功能
    • 文档:撰写用户文档
  • mofis
    • 随意发挥

其他任务

  • 年度计划
    • 计划:制定全年工作计划
    • 研讨:组织内部讨论,制定明年及未来几年的工作方向
      • 数据管理
      • 研发支撑
      • 系统建设与运行维护

展望

去年将工作聚焦于工作流工具开发不知道是不是一个恰当的决策,但我之前工作没有成果的问题就是缺乏持之以恒的精神,所以工作流依然是今年的核心工作,要尽快完成可以使用的雏形版本推广使用。 其他工具项目也有类似的问题,能指导同事做的要着手指导同事继续开发下去,形成支撑工具的开发团队,需要自己做的要撰写说明文档,在博客和公众号上多发示例文章,做好推广工作。

今年青年基金项目结题,信息化系统工程项目也要验收,所以这两个项目一定要拿出匹配项目经费的成果,尤其需要在青年基金项目上投入更多的精力,毕竟去年基本没有进展。

连续两个季度总结都有拖延,再加上最近四个月没有做什么工作,也就没什么展望了。收收心,好好工作吧。

参考

2022年第三季度工作总结