2021年22周: Github Project Board 统计

践行过敏捷实践的团队都用过白板吧,使用最多的有 Trello,Jira,最近 Github 也出了个 Project,由于和 Github 的血亲关系,很多团队开始转向 Github Project。

Github Project 基本还原了 Trello 的主要功能,但是缺乏丰富的插件,目前还没有看到 Github 开放接口来支持插件。没有插件的 Board 没有统计功能,甚至一个迭代做了多少张卡都需要自己数一数。

苦于此,第一时间能想到的是 Github API,尝试了一番,能很容易拿到 MovedColumnsInProjectEvent。当卡片移动时,移动的信息将记录在卡中。但是看不出来是从那个 column 移动到那个 column。最终在文档发现,projectColumnName 信息在 preview API 中才会出现。preview API 需要在 headers 里面添加

Accept: application/vnd.github.starfox-preview+json

注:Preview API 不稳定,可能随时被删除。

GraphQL Client 中的文档并不全,可见在使用 API 时,还是要以官方文档为主。GraphQL 查询脚本如下所示:

{
  repository(owner: "zddhub", name: "gpkit") {
    milestones(first: 20) {
      nodes {
        title
        issues(last: 100, states: CLOSED) {
          nodes {
            title
            url
            timelineItems(itemTypes: [MOVED_COLUMNS_IN_PROJECT_EVENT, ADDED_TO_PROJECT_EVENT], first: 100) {
              nodes {
                __typename
                ... on MovedColumnsInProjectEvent {
                  createdAt
                  projectColumnName
                }
                ... on AddedToProjectEvent {
                  createdAt
                  projectColumnName
                }
              }
            }
          }
        }
      }
    }
  }
}

注意这里使用 Milestone 来跟踪项目的进度,对没有使用 Milestone 的项目,也可以直接查 issues 获得类似结果。

搞清楚了 API,剩下的就简单了,顺便学习了一下 deno, 一个小的统计功能就生成了,目前支持两个指标:

  • Cycle Time:卡从开始做(Doing)到完成(Done)所用的时间。
  • Lead Time: 代码提交到部署上生产所用的时间。

统计的准确性需要卡片正确的拖动来配合,源码在这里,欢迎参考使用。

2021年21周: 小孩发烧

疫情影响,凡是发烧的病人,都得做核算检测,只能看急症科。

很感叹,我小时候发烧,乡村大夫开两块钱的药,吃上几顿就痊愈了,现在动辄好几百,还不见好。

真是有什么别有病,没什么别没钱!

2021年20周: 卸载 Sophos

当新系统 macOS Big Sir version 11.3.1 (20E241) + Sophos version 10.0.4, 遇上 Charles (v4.6.1), 不出两分钟,操作系统直接关闭,连黑屏的机会都没有。 在没关机的两分钟内,iOS Simulator 模拟器 Wifi 连不上网。而且稳定复现。

如何来修这个问题呢?

一番折腾后发现,卸载 Sophos 后 Charles 和模拟器正常工作,此时再安装 Sophos 发现安装不上,直接 Failed,也没有多余的 log。再次探索一番发现,Sophos 有两个进程 com.sophos.endpoint.networkextensioncom.sophos.endpoint.scanextension 仍然在运行,重启或者强杀都无济于事。要论流氓,杀毒软件绝对首当其冲,卸载是卸不干净的。

原来这两个程序被放在 /Library/SystemExtensions 下,强删失败。一番查询后发现,原来是 SIP(System Integrity Protection )阻止了删除操作。

重启系统,按住 Command + R 进入恢复模式后,Utilities -> Terminal 后,

csrutil disable

重启后,顺利删除了 /Library/SystemExtensions 目录下的执行文件,Sophos 的两个流氓进程也消失不见。再次安装 Sophos 成功,Charles 重新工作。

最后不要忘记了 enable SIP

2021年18周: 赶进度

节前项目进度比较紧,基本上处于一个赶进度的状态。