Bo2SS

Bo2SS

#2 | 居家隔离的新发现(高效做饭、实现多仓库分支管理自动化……)

宝子们,这里是 Bo2SS 的新系列,主要分享平时的一些思考,有生活中的,也有技术上的。相比之前的技术长文,这个系列整体的风格是比较轻快的。(友情提示:文末有多仓库分支管理脚本的示例,滑到最后,看看你是否需要?)

“该回家的回家,不要出来了。该回家的回家,不要出来了……”

周二早上 7:30,我被不停播放的喇叭声吵醒,我的第一反应是看眼小区群。

没错,喜提 “隔离大礼包” 了。

image

近日伙食#

本来啊,都没想过自己工作日会有时间做饭,一般也就周末下下厨,犒劳一下自己。

image

image

image

image

image

image

image

但是隔离第一天,晚上视频家人的一句 “外卖多不卫生”,再加上当天点的外卖确实难吃,于是我决定从第二天起,亲自下厨。

先说说我体会到的自己下厨的好处,多了去了:

  • 好吃(管够),有仪式感(幸福感的来源之一),让家人觉得我过得很好(事实如此)……

  • 更重要的是,我还意外发现,在这个过程中,我可以在更高的维度上思考问题,不陷入细节

本来做点家常便饭并不需要花费太多的脑力,所以大脑还留有一些思考的余地。

而且相比坐在电脑前,做饭时的大脑又少了各种无用信息的干扰,反而可以更加集中精力地思考问题的关键。

话说回来,其实我们在洗澡、上厕所时,也很容易获得灵感,这其中的道理是类似的。

image

正可谓 “有得必有失”,既然得到了这么多好处,我们肯定也要失去点什么?对,我们要多花些时间和精力

但其实做上面的美食花不了多少时间。

这里我先对比一下自己做饭和点外卖的时间消耗数据:

自己做饭点外卖获胜方(时间更短者)
1. 选购在美团买菜上选购两荤两素在美团外卖上点餐基本持平
2. 下楼取一次就可以取完一天的两餐要取两次自己做饭
3. 制作煮饭 + 炒菜无需制作点外卖
4. 收场洗碗几乎不需要点外卖

看起来点外卖更胜一筹,但其实煮饭 + 炒菜的时间可以做到 “忽略不计”:

  • 煮饭:借助Stretchly休息提醒工具,自己平时工作的节奏是,每半小时休息 20 秒,每 1 个半小时休息 4 分钟,所以在 4 分钟休息的时候就可以去提前煮饭

  • 炒菜:选择美团买菜里的象大厨或者农耕记快手菜,制作过程可以控制到 10~20 分钟。

    • 快手菜里面给你准备好了洗干净的、切好的食材(如果不放心,可以自己再洗一遍),还有油和调料(如果不放心,可以用自己的油和调料,调料一般用生抽、盐代替就够了),另外还给你准备好了炒菜步骤指南,你只需要像拼乐高积木一样按部就班地动动铲子就可以了。

    • 注意选择保质期是几天而不是几个月的,这样菜一般都是新鲜的。

再看看洗碗这个新增项目:

  • 我可以选择在饭后或者 4 分钟休息时间来做,利用好碎片化时间。

  • 有时候嫌油多,可以先给碗过过水,泡一泡,再洗。

  • 另外,我还发现,洗碗时,手一前一后擦碗的动作,和健身中(练胸)和(练背)的动作效果一致,所以洗碗还可以弥补一点我平日本该有的运动量(的确,据观察,自己的胸肌和背阔肌没有明显减弱的迹象🐶)。

image

除了时间消耗,刚刚还提到了要多花些精力,这是无法避免的,尤其是刚开始学炒菜。

但是正可谓 “有失必有得”,消耗了时间和精力,也总能换来另外的价值。

近日娱乐#

吃着自己做的菜,再看看红军的历史,巴适得很。

image

最近在看的是高希希导演的这部《毛泽东》,我特别喜欢青年毛泽东演员侯京健的那股神气。

image

说说我很喜欢的几幕~

1)外出求学

一天,表兄文运昌到毛泽东家里来,告诉他可以去湘乡县立高等小学堂去读书,那里可以学到很多新知识。

毛泽东当时在父亲给找的粮行里当学徒,但是自己对做生意并不感兴趣,所以征求父亲的同意。

他的父亲其实只想毛泽东赶紧挣点钱养家,家里还有两个弟弟和一个妹妹,可没想过还要花钱供他去读书。

不过在毛泽东的极力劝说下,他的父亲最后还是勉强答应了。

于是毛泽东,走出故乡,并写下一首七绝诗 “孩儿立志出乡关,学不成名誓不还。埋骨何须桑梓地,人生无处不青山” 送给父亲。

17 岁的毛泽东虽然上的是小学一年级,但是他不懂就学,不懂就问,学得非常快。

2)开书店

当时毛泽东一行人为了传播新思想,开了一个书店(文化书社)。

但是书店的启动资金比较有限,财务提议除了卖一些文化相关的书,还可以卖一些畅销书、俗书,增加收入。

这个建议被毛泽东否决了,他认为开书店的目的是为了集结志同道合之人,把认同他们思想的人聚拢。而如果卖畅销书、俗书,那就不好分辨进来的读者了。

这一点对我写公众号也很有启发,我不希望去写一些博人眼球的内容,更希望在这里能慢慢地和大家分享自己的思考,结交一些趣味相投的人。

另外,毛泽东放在今天也一定是 “流量大咖”,当时这个书社开张他还请到了湖南省省长来剪彩。

3)毛泽东被排挤

毛泽东的 “农村包围城市” 战略和游击作战十六字方针(“敌进我退,敌驻我扰,敌疲我打,敌退我追”)屡试不爽,帮助红军打了好多胜仗。

但远在上海的党中央急于立功,认为红军有进攻大城市的实力,所以多次下达进攻大城市的命令。

中央的命令难违,但毛泽东知道红军目前的实力还不够,所以很多时候是做做样子。

不过毛泽东也因此背上了 “逃跑主义” 右倾分子的名号,不断被中央排挤。

直到第五次反围剿,中央派博古(比较年轻,没有什么实战经验)担任总书记,李德担任军事顾问(德国人,为了保密,起了个中文名),他们的 “碉堡对碉堡” 硬碰硬战略导致红军损失惨重。

在这之后,毛泽东又慢慢回归正位。

4)飞夺泸定桥

image

我在毕业后的川西之旅中,经过过泸定桥,底下的大渡河,听水流声都能让我背脊发凉。

而当时敌人为了防止红军过河,提前把板子都掀掉了,只剩下铁索。

红军为了渡河,是顶着对岸的机枪,一队人冲锋,踩着绳索吸引火力,一队人铺桥板子,一队人递板子,后面人再渡河。

据说当时在南京的蒋介石问手下,他们为什么不直接炸桥呢?手下回答他们根本没想到红军还会边铺板子、边前进。

蒋介石叹了口气,说道,“和毛泽东打仗,就不能以常规思路预判他们的行动”。不过后来他还是没料到红军会翻越雪山,从而让红军会师了。

看毛泽东打仗,总会让我想起诸葛亮(之前写过一篇聊三国的:历史 | 如果《三国演义》人物来应聘互联网,你会选谁呢?),看似差距悬殊的较量,他们总能顺势应变、绝处逢生,十分精彩。


另外,关于这部剧的视频资源,我更喜欢在西瓜视频上看,因为这里的弹幕超级多,看起来很有氛围。

  • 时不时有人给你介绍一下出场的这个人的事迹。比如我看到国民党的薛岳,那当然是把他当作我们的敌人,但弹幕一说他是抗日名将,顿时又会心生敬畏🫡。

  • 也有人会发表对某件事的不同看法,或者可能被忽略的背景……

bilibili则相对清静,可能是上架较晚的缘故。


好啦,前面说的是生活中的一些体会,下面来聊点技术上的思考。

近日思考:多仓库分支管理自动化 V1.0#

姑且叫它 V1.0 吧,因为除了现在做的自动创建分支能力,一定还可以延伸出很多能力,等需要时再迭代。

最终结果:自动给多个仓库创建分支🌲。

  1. 自动化前:分别去每个仓库,填写相关参数,点击按钮。

  2. 自动化后:~~ 分别去每个仓库,~~ 填写相关参数,点击按钮。


不知道你们有没有遇到这样的情况,每次产品到了一个新的阶段,需要给代码创建新的分支,比如用于测试。

如果是给一个仓库创建一个分支也还好,但我们组相关的仓库多达五六个,所以我们需要给每一个仓库做这样一个简单又枯燥的重复操作(创建分支),作为程序员,我不允许有这样的情况发生。


于是,我借助持续集成工具 Jenkins(方便他人使用)和 Shell 脚本语言,实现了上述过程的自动化。

现在我只需要 2 步就可以轻松完成上面的过程:

1)进入 Jenkins 项目,填写 2 个构建参数:当前版本、上一版本

image

⚠️:

  1. 我们的分支名是基于版本名的;

  2. 我们会基于上个版本的 release 分支创建当前版本的 test 分支。

2)点击 Build 按钮,等待结果

这里我用自己的两个 Github 仓库做了试验,相关日志如下:

image

✌️:日志清晰展示了操作的过程和结果。

⚠️:我们要操作的仓库是在 Configure > Source Code Management > Git > Repositories 里配置的。如果需要新增仓库,只需在配置里添加,无需修改脚本。


V1.0 的 Shell 脚本如下(里面有具体的说明):

# 主流程
main() {
  #1
    set +ex  # e:异常不退出;x:不显示执行的命令
    declare -a success_list  # 记录成功的仓库
    declare -a failure_list  # 记录失败的仓库
    echo "========================⚙️已完成准备工作⚙️========================\n"
    
    #2
    echo "========================🆒正式开始🆒========================"
    remote_hosts=`git remote`
    echo "🌿要操作的仓库有:\n${remote_hosts}\n"
    
    # ️遍历管理的远端仓库们,仓库在Source Code Management > Git > Repositories里添加
    # ⚠️可以通过Advanced > Name配置仓库别名,方便检查日志
    for remote_host in ${remote_hosts}; do
        CreateAndPushTestBranch ${remote_host}
    done
    
    #3
    echo "========================🌲输出结果🌲========================"
    echo "✅成功的有:${success_list[*]}"
    echo "❌失败的有:${failure_list[*]}"
    echo "\n\n"
}

# 创建并推送test分支
# 入参1:远端仓库别名
CreateAndPushTestBranch() {
    echo "========================💼开始操作仓库:$1💼========================"
    target_host=$1  # 记录仓库别名
    
    echo "1. 创建分支 git checkout -b"
    # current_version、last_version是构建参数,在General中定义
    git checkout -b test/${current_version} ${target_host}/release/${last_version}
  
    echo "2. 推送分支 git push"
    git push ${target_host} HEAD
    if [ $? -eq 0 ]; then
        success_list+="${target_host} "
        result="成功✅"
    else
        failure_list+="${target_host} "
        result="失败❌"
    fi

    echo "3. 清理分支 git branch -D"
    git -c advice.detachedHead=false checkout ${target_host}/release/${last_version} # -c advice.detachedHead=false,临时屏蔽detachedHead警告
    git branch -D test/${current_version}
    
    echo "\n👉${target_host}仓库创建并推送test/${current_version}分支:${result}\n"
}

main; exit

尾声#

保持思考,大胆实践,希望这篇文章对你有所帮助~

这里是 Bo2SS,对这个系列有什么建议,欢迎宝子们留言,咱们下次见~

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.