分类 技术 下的文章

git rebase:对一个分支执行变基操作。常用场景:commit压缩和并行分支合并

使用 rebase 压缩 commit

在日常开发过程中,经常无法保证commit的原子性,产生了多条相同功能点或含义的commit,这种情况下在进行code review时就会带来很多麻烦,且后续如果要回滚到某个时间点也会产生困扰,影响开发效率和部署的健壮性。此时可以使用git rebase命令来对多条连续的commit进行压缩操作,保证push到远程分支上的代码保持条理性和清晰性。

以一次实际开发过程为例,使用git rebase -i HEAD~5命令对最近5条commit做修改,注意这里列出的commit时间顺序和git log列出的时间顺序是相反的(git log是最上面最新,rebase是最下面最新):

- 阅读剩余部分 -

SkyWalking 作为一套 OpenTracing 标准的实现,其存储的数据结构也遵循 OpenTracing 的规范。

关于 OpenTracing 的语义标准,SkyWalking 的作者吴晟贡献了一篇翻译文献:OpenTracing官方标准-中文版,目前包含两个部分:

  1. specification.md, OpenTracing 标准正本
  2. semantic_conventions.md, 该文档描述,在常见场景下,Span进行tag、log操作时,key的使用习惯。

OpenTracing 标准提供了最基础的 APM 记录内容的语义,具体存储的数据结构下面以 SkyWalking 在ES 中的存储为例分析。

- 阅读剩余部分 -

1. 选择 Repo

nameserver: rocketmqinc/rocketmq-namesrv

broker: rocketmqinc/rocketmq-broker

查找过程中发现 rocketmqinc 官方还有一个单独的 rocketmq 仓库,但是已经很久没更新了,所以选择比较新的

2. 目录挂载映射

默认 rocketmq 日志和存储放在 home 目录,用户是 root,配置如下:

namesrv:

本机容器
/d/docker/mq/logs/root/logs
/d/docker/mq/store/root/store

broker:

本机容器
/d/docker/mq/logs/root/logs
/d/docker/mq/store/root/store
/d/docker/mq/conf/root/conf

这里一开始犯了个错误,把自定义的 broker.conf 所在 conf 目录映射到了 rocketmq 的 workspace 里,造成 conf 目录被替换,而我的配置文件只有一个 broker.conf,造成缺少其他配置文件无法启动 broker 的问题。

3. 配置 broker

本机的 conf 目录下建立自定义的 broker.conf 配置:

brokerClusterName = DefaultCluster
brokerName = broker-syf
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=10.208.203.69

这里需要注意的是 brokerIP,需要指定为你的内/外网 ip。比如我连接的网络本机内网 ip 是 10.208.203.69,后面才可以用 localhost 访问,否则默认的 172.x.x.x 是容器内网 ip,离开容器在外面是访问不到的。

同时在 docker-compose.yml 文件中手动指定我们刚刚创建的 broker.conf,根据映射关系在容器中的路径是 /root/conf/broker.conf,启动命令配置如下:

sh mqbroker -n namesrv:9876 -c /root/conf/broker.conf

完整的 docker-compose.yml 文件如下:

- 阅读剩余部分 -

首先生成一个 height*weight*3 的全零 numpy 矩阵,dtype 为 uint8。

将其 RGB 中的绿色(G)通道设置为 255(纯绿色)。

然后使用 Pillow 将其保存到本地图片,最后调用 ffmpeg 命令生成对应视频。

ffmpeg 命令行参数:

ffmpeg -framerate 24 -loop 1 -i .\cache.png -pix_fmt yuv420p -t 39.540 -vcodec libx264 green_1080p24.mp4 -y

完整代码:

- 阅读剩余部分 -

图像分割任务中,input 和 target 都是图片,此时做数据增广时如果用到随机变换,例如随机翻转和旋转,则需要保证两者随机值相同,否则分割 label 就不准确。

例如变换:

self.transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(90),
    transforms.CenterCrop(480),
    transforms.ToTensor(),
    transforms.ToPILImage()
])

在使用时如果直接

image = self.transform(image)
bulb = self.transform(bulb)

则输入图片和 label 会产生不同的翻转/旋转角,造成数据不对应的问题。

- 阅读剩余部分 -