寶子們,這裡是 Bo2SS 的新系列,主要分享平時的一些思考,有生活中的,也有技術上的。相比之前的技術長文,這個系列整體的風格是比較輕快的。(友情提示:文末有多倉庫分支管理腳本的示例,滑到最後,看看你是否需要?)
“該回家的回家,不要出來了。該回家的回家,不要出來了……”
周二早上 7:30,我被不停播放的喇叭聲吵醒,我的第一反應是看眼小區群。
沒錯,喜提 “隔離大禮包” 了。
近日伙食#
本來啊,都沒想過自己工作日會有時間做飯,一般也就周末下下廚,犒勞一下自己。
但是隔離第一天,晚上視頻家人的一句 “外賣多不衛生”,再加上當天點的外賣確實難吃,於是我決定從第二天起,親自下廚。
先說說我體會到的自己下廚的好處,多了去了:
-
好吃(管夠),有儀式感(幸福感的來源之一),讓家人覺得我過得很好(事實如此)……
-
更重要的是,我還意外發現,在這個過程中,我可以在更高的維度上思考問題,不陷入細節。
本來做點家常便飯並不需要花費太多的腦力,所以大腦還留有一些思考的餘地。
而且相比坐在電腦前,做飯時的大腦又少了各種無用信息的干擾,反而可以更加集中精力地思考問題的關鍵。
話說回來,其實我們在洗澡、上廁所時,也很容易獲得靈感,這其中的道理是類似的。
正可謂 “有得必有失”,既然得到了這麼多好處,我們肯定也要失去點什麼?對,我們要多花些時間和精力。
但其實做上面的美食花不了多少時間。
這裡我先對比一下自己做飯和點外賣的時間消耗數據:
自己做飯 | 點外賣 | 獲勝方(時間更短者) | |
---|---|---|---|
1. 選購 | 在美團買菜上選購兩荤兩素 | 在美團外賣上點餐 | 基本持平 |
2. 下樓取 | 一次就可以取完一天的 | 兩餐要取兩次 | 自己做飯 |
3. 製作 | 煮飯 + 炒菜 | 無需製作 | 點外賣 |
4. 收場 | 洗碗 | 幾乎不需要 | 點外賣 |
看起來點外賣更勝一籌,但其實煮飯 + 炒菜的時間可以做到 “忽略不計”:
-
煮飯:借助Stretchly休息提醒工具,自己平時工作的節奏是,每半小時休息 20 秒,每 1 個半小時休息 4 分鐘,所以在 4 分鐘休息的時候就可以去提前煮飯。
-
炒菜:選擇美團買菜裡的象大廚或者農耕記快手菜,製作過程可以控制到 10~20 分鐘。
-
快手菜裡面給你準備好了洗乾淨的、切好的食材(如果不放心,可以自己再洗一遍),還有油和調料(如果不放心,可以用自己的油和調料,調料一般用生抽、鹽代替就夠了),另外還給你準備好了炒菜步驟指南,你只需要像拼樂高積木一樣按部就班地動動鏟子就可以了。
-
注意選擇保質期是幾天而不是幾個月的,這樣菜一般都是新鮮的。
-
再看看洗碗這個新增項目:
-
我可以選擇在飯後或者 4 分鐘休息時間來做,利用好碎片化時間。
-
有時候嫌油多,可以先給碗過過水,泡一泡,再洗。
-
另外,我還發現,洗碗時,手一前一後擦碗的動作,和健身中推(練胸)和拉(練背)的動作效果一致,所以洗碗還可以彌補一點我平日本該有的運動量(的確,据觀察,自己的胸肌和背闊肌沒有明顯減弱的跡象🐶)。
除了時間消耗,剛剛還提到了要多花些精力,這是無法避免的,尤其是剛開始學炒菜。
但是正可謂 “有失必有得”,消耗了時間和精力,也總能換來另外的價值。
近日娛樂#
吃著自己做的菜,再看看紅軍的歷史,巴適得很。
最近在看的是高希希導演的這部《毛澤東》,我特別喜歡青年毛澤東演員侯京健的那股神氣。
說說我很喜歡的幾幕~
1)外出求學
一天,表兄文運昌到毛澤東家裡來,告訴他可以去湘鄉縣立高等小學堂去讀書,那裡可以學到很多新知識。
毛澤東當時在父親給找的糧行裡當學徒,但是自己對做生意並不感興趣,所以徵求父親的同意。
他的父親其實只想毛澤東趕緊掙點錢養家,家裡還有兩個弟弟和一個妹妹,可沒想過還要花錢供他去讀書。
不過在毛澤東的極力勸說下,他的父親最後還是勉強答應了。
於是毛澤東,走出故鄉,並寫下一首七絕詩 “孩兒立志出鄉關,學不成名誓不還。埋骨何須桑梓地,人生無處不青山” 送給父親。
17 歲的毛澤東雖然上的是小學一年級,但是他不懂就學,不懂就問,學得非常快。
2)開書店
當時毛澤東一行人為了傳播新思想,開了一個書店(文化書社)。
但是書店的啟動資金比較有限,財務提議除了賣一些文化相關的書,還可以賣一些暢銷書、俗書,增加收入。
這個建議被毛澤東否決了,他認為開書店的目的是為了集結志同道合之人,把認同他們思想的人聚攏。而如果賣暢銷書、俗書,那就不好分辨進來的讀者了。
這一點對我寫公眾號也很有啟發,我不希望去寫一些博人眼球的內容,更希望在這裡能慢慢地和大家分享自己的思考,結交一些趣味相投的人。
另外,毛澤東放在今天也一定是 “流量大咖”,當時這個書社開張他還請到了湖南省省長來剪彩。
3)毛澤東被排擠
毛澤東的 “農村包圍城市” 戰略和游擊作戰十六字方針(“敵進我退,敵駐我擾,敵疲我打,敵退我追”)屢試不爽,幫助紅軍打了好多勝仗。
但遠在上海的中央黨委急於立功,認為紅軍有進攻大城市的實力,所以多次下達進攻大城市的命令。
中央的命令難違,但毛澤東知道紅軍目前的實力還不夠,所以很多時候是做做樣子。
不過毛澤東也因此背上了 “逃跑主義” 右傾分子的名號,不斷被中央排擠。
直到第五次反圍剿,中央派博古(比較年輕,沒有什麼實戰經驗)擔任總書記,李德擔任軍事顧問(德國人,為了保密,起了個中文名),他們的 “碉堡對碉堡” 硬碰硬戰略導致紅軍損失慘重。
在這之後,毛澤東又慢慢回歸正位。
4)飛奪瀘定橋
我在畢業後的川西之旅中,經過過瀘定橋,底下的大渡河,聽水流聲都能讓我背脊發涼。
而當時敵人為了防止紅軍過河,提前把板子都掀掉了,只剩下鐵索。
紅軍為了渡河,是頂著對岸的機槍,一隊人衝鋒,踩著繩索吸引火力,一隊人鋪橋板子,一隊人遞板子,後面人再渡河。
據說當時在南京的蔣介石問手下,他們為什麼不直接炸橋呢?手下回答他們根本沒想到紅軍還會邊鋪板子、邊前進。
蔣介石嘆了口氣,說道,“和毛澤東打仗,就不能以常規思路預判他們的行動”。不過後來他還是沒料到紅軍會翻越雪山,從而讓紅軍會師了。
看毛澤東打仗,總會讓我想起諸葛亮(之前寫過一篇聊三國的:歷史 | 如果《三國演義》人物來應聘互聯網,你會選誰呢?),看似差距懸殊的較量,他們總能順勢應變、絕處逢生,十分精彩。
另外,關於這部劇的視頻資源,我更喜歡在西瓜視頻上看,因為這裡的彈幕超級多,看起來很有氛圍。
-
時不時有人給你介紹一下出場的這個人的事跡。比如我看到國民党的薛岳,那當然是把他當作我們的敵人,但彈幕一說他是抗日名將,頓時又會心生敬畏🫡。
-
也有人會發表對某件事的不同看法,或者可能被忽略的背景……
而bilibili則相對清靜,可能是上架較晚的緣故。
好啦,前面說的是生活中的一些體會,下面來聊點技術上的思考。
近日思考:多倉庫分支管理自動化 V1.0#
姑且叫它 V1.0 吧,因為除了現在做的自動創建分支能力,一定還可以延伸出很多能力,等需要時再迭代。
最終結果:自動給多個倉庫創建分支🌲。
-
自動化前:分別去每個倉庫,填寫相關參數,點擊按鈕。
-
自動化後:~~ 分別去每個倉庫,~~ 填寫相關參數,點擊按鈕。
不知道你們有沒有遇到這樣的情況,每次產品到了新的階段,需要給代碼創建新的分支,比如用於測試。
如果是給一個倉庫創建一個分支也還好,但我們組相關的倉庫多達五六個,所以我們需要給每一個倉庫做這樣一個簡單又枯燥的重複操作(創建分支),作為程序員,我不允許有這樣的情況發生。
於是,我借助持續集成工具 Jenkins(方便他人使用)和 Shell 腳本語言,實現了上述過程的自動化。
現在我只需要 2 步就可以輕鬆完成上面的過程:
1)進入 Jenkins 項目,填寫 2 個構建參數:當前版本、上一版本。
⚠️:
-
我們的分支名是基於版本名的;
-
我們會基於上個版本的 release 分支創建當前版本的 test 分支。
2)點擊 Build 按鈕,等待結果。
這裡我用自己的兩個 Github 倉庫做了試驗,相關日誌如下:
✌️:日誌清晰展示了操作的過程和結果。
⚠️:我們要操作的倉庫是在 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,對這個系列有什麼建議,歡迎寶子們留言,咱們下周次見~