pretty code

2025年6月23日 星期一

shell script 真的很難 debug

可能我還不習慣 debug shell script?

上星期五想要檢查一個 list 檔案的每個項目是否存在於另一個 log 中,殊不知一個這麼簡單的東東,我到今天下班前才有空把它搞定,雖然也是因為我今天根本沒時間靜下心來思考的緣故?

總之,我的架構是用 cat list 取得所有項目,然後再把它應用在 for loop 中,不確定這樣是不是大家常用的做法,但至少我覺得這樣的語法我比較不會忘記XD

下面是我回家模擬的結果。


雖然我知道原本的錯誤是誤把 \r 也餵進 grep 的 pattern,但我一時之間也無法解釋第一個 inst_b 怎麼會印的跟我想的不一樣?

改天再來想想 ...

2025/06/23 洗完澡更新

詢問 Bard 的結果,這個語法我應該記不住XD

#!/bin/bash

list=list.txt
source=hier.txt

while IFS= read -r pattern; do
    pattern=`echo $pattern | tr -d '\r'`
    echo $pattern
    grep -E $pattern $source
    echo -----------
done < $list

2025年6月22日 星期日

Vim Regex Pattern by Google Gemini

底下是 Gmini 整理的。 

Vim Regex Pattern 詳細跳脫規則

Vim 的正規表達式語法非常強大,但它的轉義規則與 Perl 或 Python 等語言的標準正規表達式略有不同,尤其是在處理特殊字符時。Vim 將某些特殊字符分為 "魔法" (magic) 和 "非魔法" (nomagic) 兩種模式。

你可以使用不同的前綴來控制正規表達式的魔法模式:

  • \M: 設定為 全魔法 (very magic) 模式。所有的特殊字符都視為魔法,不需要額外轉義。這是最像 Perl/PCRE 的模式。
  • \m: 設定為 魔法 (magic) 模式 (Vim 預設)。大部分特殊字符是魔法的,少數需要轉義。
  • \v: 設定為 極魔法 (very magic) 模式。所有的特殊字符都視為魔法,不需要額外轉義。這是最推薦使用的模式,因為它與常見的正規表達式引擎行為最接近,減少了混淆。
  • \V: 設定為 非魔法 (very nomagic) 模式。所有的特殊字符都視為普通字符,需要轉義才能具備特殊含義。

推薦:始終使用 \v 開頭的正規表達式,它讓你的模式更直觀。

使用 \v (極魔法) 時的常用特殊字符和其含義:

字符說明範例 (\v)匹配範例
.匹配任何單個字符 (換行符除外)\v.imVim, aim
*匹配前一個項目 0 次或多次\vgo*dgod, good, gooood
+匹配前一個項目 1 次或多次\vgo+dgood, gooood (不匹配 god)
?匹配前一個項目 0 次或 1 次\vcolou?rcolor, colour
{n}精確匹配前一個項目 n 次\va{3}aaa
{n,}匹配前一個項目至少 n 次\va{2,}aa, aaa, aaaa
{n,m}匹配前一個項目 n 到 m 次 (包含)\va{2,4}aa, aaa, aaaa
()分組,創建子匹配\v(ab)+ab, abab
``或 (OR) 邏輯`\v(cat
[]字符集,匹配方括號內的任何一個字符\v[abc]a, b, c
[^]負向字符集,匹配方括號內之外的任何一個字符\v[^aeiou]匹配任何非元音字母
^匹配行的開頭 (當它是模式的第一個字符時)\v^The匹配以 "The" 開頭的行
$匹配行的結尾 (當它是模式的最後一個字符時)\vend$匹配以 "end" 結尾的行
\b匹配單字邊界 (word boundary)\v\bword\b精確匹配單字 "word"
\<匹配單字的開頭\v\<word匹配 "word" 在單字開頭
\>匹配單字的結尾\vword\>匹配 "word" 在單字結尾
\s匹配任何空白字符 (space, tab, newline, etc.)\vhello\sworldhello world
\S匹配任何非空白字符\v\S+word, abc
\d匹配任何數字字符 ([0-9])\v\d{3}123, 456
\D匹配任何非數字字符\v\Da, !
\w匹配任何單字字符 (字母、數字、底線)\v\w+variable_name, 123
\W匹配任何非單字字符\v\W!, @
\( \)普通括號 (分組)\v(abc)匹配 abc 並捕獲
`\`普通豎線 (或)`\vabc\
\{ \}普通花括號 (量詞)\vabc\{匹配 abc{
\+普通加號\v1\+11+1
\?普通問號\vwhat\?what?
\.普通點號\vfile\.txtfile.txt
\[ \]普通方括號\v\[bracket\][bracket]

關於轉義 (Escaping):

  • 當使用 \v (very magic) 模式時,幾乎所有你希望作為字面意義匹配的特殊字符,都需要在其前面加上一個反斜槓 \ 進行轉義。 這包括 . * + ? | ( ) [ ] { } ^ $ \ 等。
  • 反斜槓本身 (\) 在正規表達式中也是特殊字符,所以如果你要匹配字面意義上的反斜槓,你需要寫 \\

例外 (通常不需要轉義的字面字符,除非在特定上下文中):

  • 字母和數字通常不需要轉義。
  • 逗號 ,、破折號 -、等號 = 等非正規表達式特殊字符在模式中通常不需要轉義。

總結

在 Vim Script 中使用正規表達式時,為了清晰和與其他語言習慣保持一致,強烈建議在模式字串的開頭加上 \v (very magic)。這樣,你就只需要記住那些本身就具有特殊意義的字符(如 . * ( [ 等)需要用 \ 來轉義,如果想讓它們作為字面字符匹配。

第一次覺得 AI 有幫助

昨天快篩一條線後,今天終於回了父母家一趟,所以放假這兩天其實都沒什麼在碰 Vim!

晚上回來後,想說來替 Vim 加一個功能好了XD


但是很多時候,我們好奇的是這根訊號它又被穿到哪個 module or cell 了!

如果是 cell 那還好辦,畢竟 pin 不會太多。

假設是另一個 module 或是 hard macro,此時 pin 的個數便會很多,甚至在一頁內都看不到 instantiation 的地方?

雖然可以用搜尋的方式找到分號,接著找右大括號,然後用 % 跳到左大括號,如此一來,我們就可以看到 instantiation 的 module name or cell name 了!

不過,如果可以比照 module 一樣處理,工作當然更方便。

可惜,這次用 Google 搜尋 Vim script 關鍵字都不順利,Vim help 又不好閱讀,於是直接詢問 Gemimi,想不到比我用 Google 快?

結論就是我又可以豐富我的 vimrc 了XD


2025/06/23 更新

今天去辦公室馬上拿真實的 netlist 來測試,果然還不錯,除了要稍微修改 regex 外,畢竟,真實的 netlist pin 很多,我原本的假設不一定成立!

不過,重點還是 [".", "(", ")"] 這 3 個字元是否存在於 hightlight 那行,假設有任一個存在,我就當作是 instantiation 語法!

目前使用的感想還行XD

2025年6月17日 星期二

老人安置

最近幫媽媽處理一些親屬老人安置補助的東東,記錄一下避免忘記。

假設符合一定條件,這個補助計畫網頁文字為「低收入戶、中低收入失能及保護安置老人接受長期照顧機構安置補助計畫」,假設是新北市政府 114 ~ 115 年度,養護類安置費,每個月 2 萬 4 千元,假設中途因病住院,30 日內都可以保留並仍予補助。



這個金額最早沒那麼多,陸續有調整,108 年度為 2 萬 2 千元。

另根據「低收入戶及中低收入戶傷病住院看護費用補助」說明,符合資格者,一天可請領看護費用 1,800,目前看護行情一天至少 2,800。


假設是喪葬費,最高 3 萬元整,亦可以參加聯合公祭,可用「113 年度新北市聯合奠祭實施計畫」關鍵字查詢,內有項目細節可看。

2025年6月14日 星期六

Kobo 網頁又改版了

我想這個標題未來應該會一直出現XD

不得不說,人家讀墨網站就沒有那麼多問題,就你 Kobo 喜歡將 HTML  改來改去,真是腦袋有洞?


罵歸罵,還是要看一下如何修改,雖然我現在已經很少看工作以外的書了?


這次顯示購買記錄一頁有幾個項目的地方又從一行改從跨行了?

幸好,Javascript 的 regex 似乎可以支援跨行,即使我沒有加上 m 選項?

總之,現在可以就好了,我也懶得查了?

畢竟,現在國事如麻,百廢待興呀XD

期待的功能終於有人實做了

之前一直覺得是不是哪邊文件沒看清楚?不然沒道理 Yosys 合成出來的都是 escaped identifier 的名稱,這樣看起來確實是不好看!

剛剛本想直接 trace code,想說還是先用關鍵字在 issues 查一下,果然目前是沒有 rename 這樣的機制。

幸好,有一位強者提交了這個功能,等到通過後,我就可以拿 Yosys 綜合 ORFS 裡的一些專案得到一個相對大型的 netlist 來用,不然想要開發或測試一些功能都不方便。

目前還是只能看到醜醜的 escaped identifier!

看到這樣的結構,想開發一些功能都沒勁了XD

2025年6月12日 星期四

第二次確診記錄

約莫是五個星期前感冒過一次,那次原本以為是確診,但跑了好幾家才買到的快篩測試後卻不是?不過我篩的時候已經是 8 ~ 9 天後的事了。

那次咳嗽大概是一個星期多才變比較少,一天下來也是會偶爾咳個幾下,印象中以前感冒不會拖那麼久,但不排除是以前有看醫生的緣故?哭哭,我從小看到大的醫生已經退休,公司附近的診所評價都很差,不太可能為了這個上台北看病。

上星期五下班開始,體感好像咳嗽又變嚴重,好像六還是日開始有流鼻水,星期一咳嗽達到巔峰狀態,好險只持續一天,當然睡覺的咳嗽還是一直持續,晚上不好睡覺。

星期二下班時看老婆都沒吃飯,一問之下才知道她已經肌肉痠痛一整天,也已經去我看到評價不好的診所看過病,不過醫生不覺得是流感故也沒幫她做快篩。

一整天也不說,下班時打電話也不說,害我只好三兩下把飯扒完,開車去一個我查到評價還可以的診所。

由於又繞了一圈去停車,等到我走路回去時看診人數已經爆滿,還好我老婆已看完在等快篩結果中,不過為了讓老婆早點回去休息,故我自己也沒機會看病。

篩的結果不是流感,不過醫生覺得應該是新冠,想知道的話自行購買快篩確認,因為不影響他開藥的決定XD

還好這次購買很順利,不用像上次一樣要跑多家才買到。

回到家老婆累到洗完澡就睡了,反正快篩有多買,順便來測一下好了?

滴完後,只不過把東西轉頭丟到垃圾桶的光景,無意間一瞄之下,居然是兩條線?這也太快了吧,上一次確診快篩時也沒那麼快出現兩條線?


不過單從顏色來看,似乎沒有很深?

由於隔天老婆要去南部出差,她中午又跟同事吃飯草草結束我電話,故我也不知她近況如何?

昨天還沒下班就聽到位子傳來老婆的訊息震動聲,等跟同事討論完回到位子一看,原來她也中獎了,不過她更誇張,據她本人說法,一滴下去,流過去馬上兩條線。


還好電話中聽起來精神還可以,除了下午一直拉肚子以及輕微想吐!

虧我上星期五下班後在家也一直戴口罩,沒想到她還是中了,雖然我一直覺得是她傳染給我的XD

在家也戴口罩,出門及上班也一直戴,即使是一盒 300 的口罩,我的耳朵也已快承受不住。