pretty code

顯示具有 sed 標籤的文章。 顯示所有文章
顯示具有 sed 標籤的文章。 顯示所有文章

2024年11月17日 星期日

好久不知道什麼叫寫程式了

去年轉型搞影像處理,因為還在學習階段,大部分都是在研讀 github 作者的 code,頂多改改程式好符合自己的需求。

今年又來到新部門,除了寫個簡單移除電路小程式外,再來就是為了增進效率寫了個 netlist parser,之後又將它移植到 yosys 變一個指令測試 yosys 功能,然後就沒然後了?

最近因為資安警告信,購買的抄筆記也不敢用了,上網變得綁手綁腳,連查個英文單字都覺得很不順。

10 幾年前看到 Linux 論壇有人寫了一個 script 查詢 yahoo 單字,便用 BCB 6.0 寫了一個 GUI 版,後來也陸續加入了不少功能。

但之前只儲存英文 7000 單字,如果不在單字庫的需要另外開執行緒上網查詢,我想應該早已經不適用在現在的 yahoo dictionary 了?

還要拿出外接硬碟才能找到當年的程式碼,年紀大了,就是有點懶惰。

簡單用個 script 搞定就好,看起來還行,反正我也不介意詞性及例句XD


剛又查了一下,現在連譯典通都要訂閱了,一年 599 是不貴,但人就是懶,之後再看看吧…

2024/11/20 更新

IC Design 名詞可以不 google,但看文件不查單字還真冒險,很多時候,我以為的單字意思都跟真正的查詢結果不一致XD

星期一去公司後,想了一下,將星期日的做法 porting 到公司 WSL env,順便把網頁儲存下來,下次再查同一單字就不用上網了,既可以減少上網流量,查詢介面也比較清爽XD

用到今天為止,查了 40 幾個單字,順便加上簡單複習功能,之後再利用檔案時間軸來幫助記憶。

2024年9月15日 星期日

我不喜歡輸的感覺

Web App 最讓人詬病的就是動態產生網頁內容,尤其是用 Javascript 動態產生的,某種程度上都會大大增加 parsing 的困擾。

有時候只想快速得到一個結果,我還得先用一個類瀏覽器的函式庫取得內容,這不是我喜歡的解決問題方式。

以前曾在網路上看到某位號稱新店寶橋路正規表示法第一的網友,我決定來效法他的作法。

先點選小老婆 Top 50 撥放清單任一首歌,接著使用 Chrome 檢查功能進到 Elements 頁面,在 html tag 處按下滑鼠右鍵 -> Copy -> Copy element,將複製內容另存檔案為 Top_50.txt。


然後就沒有然後了。  

grep -E 'h3 .*aria-label' Top_50.txt | sed -En 's/^\s*<h3.*aria-label="(.* )上傳者.*">/\1/p'


01.郭静 - 陨落(电影《大红包》告白推广曲) (动态歌词) 
02.郭靜 - 夢在遠方 
03.今天起 
04.【純享版】尤長靖/郭靜《氧氣》 治癒系嗓音隔空吟唱太好聽!《天賜的聲音》ep7 純享版no noice /浙江衛視官方hd/ 
05.郭靜 claire kuo - 在樹上唱歌 (官方版mv) 
06.郭靜 claire kuo - 軟綿綿 (官方版mv) 
07.郭靜 - 像我這樣 
08.郭靜 claire kuo - 還有什麼好在意 whatever (官方版mv) 
09.郭靜 claire kuo - 回憶的閣樓 memories of us (官方版mv) 
10.郭靜 claire kuo - 該忘的日子 i am moving on (官方歌詞版) - 韓劇《雲畫的月光》片尾曲 
11.郭靜 claire kuo【深呼吸 take a breath】official lyric video 
12.郭靜 claire kuo - 想個不停 (官方版mv) 
13.郭靜 claire kuo - 不想有遺憾 don’t wanna miss you (官方歌詞版) - 衛視中文台戲劇「長不大的爸爸」插曲 
14.相思弦 
15.逆行的減法 
16.触碰你 
17.在曾有你的地方 
18.郭靜《只為遇見你》【只為遇見你 nice to meet you ost電視劇片頭曲】官方動態歌詞mv (無損高音質) 
19.像风 
20.單身美好 
21.我的小森林 
22.郭靜 claire kuo - 簡單 (官方版mv) 
23.愛情模樣 
24.沙漏 (網劇ᐸ時光教會我愛你ᐳ插曲) 
25.類似快樂的信 (電視劇《戀戀小酒窩》片尾曲) 
26.又是艷陽天 
27.郭靜 claire kuo【消耗寂寞 leave me hanging】official lyric video 
28.悸動 
29.亲爱的你 郭静 [动态歌词/lyrics] 
30.我想要有人為我傷心 
31.算不算 
32.『溫柔女聲』郭靜(guo jing)-拜你所傷(bai ni shuo ci)【我就祝福你,幸福快樂。】#流行歌曲 #動態歌詞 #lyrics #高音質 #好聽 
33.郭靜《一個人勇敢》【我的時代, 你的時代 go go squid2 dt / appledog's time ost電視劇插曲】官方動態歌詞mv (無損高音質) 
34.郭靜 claire kuo - 何日君再來(官方歌詞版)- 電視劇《回家》插曲 
35.郭靜 claire kuo - 小聲音 (官方版mv) 
36.郭靜claire kuo《我非獨自生活》官方版mv 
37.郭靜 claire kuo - 可惜 (官方歌詞版) - 中天電視劇「何以笙蕭默 」片頭曲、 民視偶像劇「星座愛情」獅子女片尾曲 
38.郭靜 claire kuo - 我不是你的那首情歌 not meant to be together (官方版mv) 
39.郭靜 claire kuo - 拍檔 partners (官方版mv) - 電視劇《後菜鳥的燦爛時代》片頭曲 
40.郭靜 claire kuo - 別去問他好嗎 don't let him know (官方版mv) 
41.郭靜 claire kuo - 忘了如何遺忘 how to forget (官方版mv) - 電視劇《聶小倩》片尾曲 
42.郭靜 claire kuo - 每一天都不同 (官方版mv) 
43.郭靜 claire kuo - 明白 (官方版mv) 
44.他爱的梦 
45.《陪你逐風飛翔 to fly with you》郭靜 claire kuo - 越走越遠 farther and farther🥀(英繁中文歌詞 eng lyrics)🤍陪你逐風飛翔 情感插曲 ost 
46.郭靜  claire《慶幸遇見你》【我可能遇到了救星 hi venus ost 電視劇插曲】official lyric video 
47.(mv) 郭靜 (guo jing) - 月亮會記得(yue liang hui ji de) (the moon will remember) ost. 小女霓裳 aka ni chang 
48.最精彩的豔遇 
49.郭靜 claire kuo《暖橘》【我的助理不簡單 never too late ost 電視劇插曲】official lyric video 
50.DuDu好 

最後在聽到第 26 首歌《又是艷陽天》時,搞定此事並寫完更新 Blog

2024/09/15 洗完澡更新

洗澡時才想到忘記補上今天現學現賣的技巧,使用 VIM 在每列前面補上 index。

雖然我也可以都用 VIM 搞定,但我現在只能想到 .recording 2 種方法,操作起來沒有那麼漂亮,故我還是拆成三動來記錄。

01. 先把上面抓到的歌名另存一個檔案,比如 Final_50.txt。 
02. Sed -Ei 's/(.*)/1. \1/g' Final_50.txt
03. 從第 2 列開始,使用區塊模式選取 1 這一個 column,可以用 ctrl + v + G 一口氣選取,然後按下 g + ctrl + a,便會幫每一列的數字自動加 1。
04. Sed -Ei 's/^([0-9]+{1,1}\..*)/0\1/g' Final_50.txt,這裡是幫 1 ~ 9 前面補上 0。

現在就剩下如何都用 VIM 搞定,我猜應該是朝自動向下填入方向去找尋對應指令。

2024/09/16 更新

殘念,這個增加數字的技巧是從 VIM 7.4.754 版本才開始,我們家的工作站版本居然比這還舊?不支援 true color 也就算了,什麼都沒有是怎樣!

另外,對於我這種 parsing 需求來說,也許使用油猴也是個不錯的選擇,改天再來嘗試。

2024/09/21 更新

其實小老婆好聽的歌還可以再追加幾首,有 50 幾首合我口味的歌,真是不簡單呀。

昨天從下午 1:30 開始就邊聽 Top 50 邊 review 這幾天寫的文件,一直到下午 4:30 才聽到《在曾有你的地方》,3 個小時也還聽不到 40 首,不知道為什麼開車時卻覺得很快就輪回一輪了?要不是顧及老婆感受,我應該可以一直聽這歌單不會膩吧XD

另外一個撥放清單的歌混合了我從前到現在聽過覺得好聽的歌,各國語言都有,到目前也才 157 首,一樣可以用我上面 regex 的技巧取出歌名,但在複製 HTML 時,要記得自己用滑鼠拉到最後,不然預設好像只顯示 100 首,另外最後面可能會有幾首是 YouTube 推薦的,但因為是同 CSS 設定,故目前無法有效過濾,也許得用 VIM 手動砍掉推薦影片後面的 HTML 吧。

2024年9月14日 星期六

一些 sed 指令備忘

sed 還是有一些細微處不太明白,但現階段這樣就夠我用了,還是老樣子,不要太早最佳化!

什麼時候該鑽研,什麼時候又該無視,坦白說很難拿捏?

我想當覺得用起來不太順時,應該就是需要改進的時候了。

sed -i 取代檔案用
sed -e 直接對 stdin 

不管哪個都可以用一般取代跟 \1。

2024年8月27日 星期二

2024 week 35 新玩意

01. the Linux way to solve problems

這兩天在查一個上禮拜聽同事學習分享時所討論到的問題,為了查這個問題,我需要將 RTL module 分開成個別檔案,才不會用 vim search 時過了頭看到錯的地方XD

之前雖然知道可以在 module 第一行用 V + /endmodule 複製整個 module code,但需要用 :tabe 貼上並儲存下來,故我之前用 vim 時都省略儲存下來的步驟,反正要看的 module 數量也不多,每次重作即可。

不要小看每天這樣重複選取複製的時間,累積下來也很可觀,如果可以,我還是習慣在下班時關掉工作站的所有工作階段,故還是要有個機制快速來產生我要 trace 的檔案。

即使是這樣的需求,用 C 語言寫也是很簡單的,最主要 line array 要宣告夠大,畢竟我已經在 RTL 看到不只超過一行長度的 wire 宣告。

但是既然現在都在 Linux 工作站做事,我們就要用 the linux way 來解決問題!也就是善用組合的力量。

查了一下,用 sed 可以跨行尋找 pattern,指令如下:

sed -n '/module XXX /,/endmodule/p'  RTL.v

注意 XXX module name 後面要空一格或是加上 port declaration 的左括號,這要看 RTL coding style,不然假設你有模組 XXX、XXX_1,則全部都會被複製下來。


感覺這個需求還蠻常用的,將整個 script 改寫成變數驅動並放進我的工作站工具箱中。注意,c shell 沒辦法宣告 array,故這裡還是建議使用 bash。

$@ 命令列參數
modules=("aa" "bb" "cc")  bash array
${#modules[@]} 取得陣列個數
unset modules[0] 移除陣列第一個元素


2024/08/29 更新

前天話才說完,今天就遇到不同 coding style 的 module declaration。

這個有點棘手,但不是因為現在這個 case 棘手,而是隨著這個衍生而來的 case 棘手。

綜合我目前看過的 coding style 至少有 3 種:

module pattern (xxx, xxx)
module pattern(xxx,xxx)
module pattern
(

如果下 module pattern\s*\(* 並不能解決 pattern 及 pattern_x 在 sed 一起出現的問題,但我現在想不到更好的方式只用一個 regex 就可以解決的。

2024年8月18日 星期日

每天都有新發現的 Linux

今天無意間看到一個 Youtube 推薦的駭客影片,雖然內容類似在解譯大陸牌子的網路攝影機 HTTPS 封包的內容,但在觀看的過程中,無意間發現作者使用了一個 "find ." 指令來列出現在目錄下的所有檔案,雖然我們可以用 ls -l 來印出檔案,但還需要再用 awk 取出檔名欄位,也無法列出子目錄的檔案,應該吧?

最近在整理別人的 code list 並加到 Synthesis TCL script 中,之前還傻傻的一個目錄一個目錄進去 ls,原來還有更快的方法,只要組合一堆指令,然後在根目錄打出這一串組合指令即可。

find . | sed -Ee 's/\.\/(.*)/\1/g' | awk -v var="$PWD" '{print var "/" $1}'

因為 "find ." 列出所有的檔案前面會包含 ".",雖然不影響結果,但看了就是不順眼XD

接著使用 sed 把 "." 去掉,最後再用之前這篇文章的做法,加上 $PWD 字串。


不得不承認 Linux 跟 vim 一樣,每天都能發現新玩意!

雖然我覺得一定還有其他做法,但等到下次發現新大陸時再說吧XD

2024/08/19 更新

原來用 "ls -1" 可以只列出檔案名稱並且 line by line 顯示。

所以我建了兩條 alias,一個配合 "ls -1",一個用 find 跨目錄搜尋。

因為用 alias 要跳脫,故把 fabs_name 簡化一下,不要把 "find ." 結果的 "/" 濾掉,將 "\/" 改放進括弧內 (\/.*) 也就是我們要取的 \1,這樣後面的 awk print 就可以簡化,不然很難懂XD


2024年7月15日 星期一

關於筆記軟體之心得

除了 10 幾年前考公務員時有認真讀書做過筆記,從小到大幾乎沒有任何做筆記的印象?

前年工作上為了學習 AI 作 defect detection,開始嘗試用 Evernote,後來因為轉研究結構光都是看 github 專案和一小部分論文,故也沒繼續做筆記了,已經忘了使用體驗的感覺了。

最近一本塗鴉隨筆用的 13K 筆記已經快寫完了,為了將這半年的一些重要東西記錄下來,便又開始了我的筆記之旅(之前每換一本 13K 筆記本,只會將重要頁面拍照留存)!

我選擇的是 Obsidian,標榜雙向連結以及卡片筆記盒的精神,看看兩年多前買的《卡片盒筆記》一書,終於可以開始學習了(翻開書本)? 

Obsidian 使用 Markdown 語法撰寫筆記,這對我來說是個好處,也是時候開始學習 Markdown 了,這就跟 Vim 一樣,日常生活中不常用的話,永遠就只會基本操作!

從上星期四開始安裝後,到今天已經把紙本筆記本重要的事項全部數位化完畢,感覺還蠻合我的胃口!

再試用一陣子便要訂閱了,畢竟我不算是個人使用,就試用到這個星期五好了,我的下一個筆記軟體應該就是它了!

Obsidian 好處

01. 使用 Markdown 語法。
02. Local Storage。
03. 使用 Node.js 便可以撰寫 plug-in。
04. 剪貼簿貼上圖片後選擇另存圖片還算方便。

目前對我來說大概就是這些好處吧。


以後的使用模式應該會是這樣,一般知識以及沒有 PO 上網疑慮的我應該還是會放 Blog,畢竟這樣存取才方便;Obsidian 跟工作有關的我也不方便同步到 Google Drive,就讓它存放在公司電腦上。

至於以後換工作或是 blogger 收了,那些知識可能也都不重要了…

後記

其實我平常寫 Blog 的方式也算是雙向連結,有更新的部分則會寫回到原本的文章裡,至於另開新文章的則是會找到舊文章的連結並貼上到新文章裡。

2024/07/16 更新

裝了 Theme 後,筆記看起來有質感多了,最主要是比較容易區分小標題!

我們可以在筆記軟體中按下 Ctrl + Shift + I(大寫 i) ,便可以叫出開發者工具,方便我們找到 CSS Class 來修改。

CSS 檔案則是位於 /Vault/.obsidian/themes/XXX/theme.css

如果是沒有設定過的 Class,可以比照下面方法來設定。

--hr-color_x: 128, 128, 128;
--hr-color: rgb(var(--hr-color_x));

2024/07/18 更新

卡片的最小單位就是一則筆記,這是卡片盒筆記的基本精神之一。

這樣的好處是容易組合成各種不同主題,也就是 bottom-up 的整理脈絡。就像 Verilog top module 什麼 RTL code 都沒有,只有 initial different modules。

2024/07/26 更新

如果是已經結構化的資料,使用 sed 加上 Markdown 語法也是一件很輕鬆的事。

比如說我想將之前 DC 查過的 command 轉成一篇筆記,我先前簡報備忘欄裡的格式是:

Command
      The description of command.

sed -Ei 's/(^[a-zA-Z])(.*)/## \1\2/g' cmd.txt

使用上述 sed 指令便可以把 cmd.txt 裡面的所有 Command 前面加上 ## 標題符號了。

\1 對應第一個括弧,以此類推。

2024年3月23日 星期六

這週新玩意

01. Verilog 奇怪語法

wire [63:0] data;
wire [7:0] array [7:0];

array [0] = data[0+:8] 前面指的是 base,後面指的是寬度,意思是從 base + width 的範圍,也就是等於 data[8:0]。

這個語法是從 Verilog 2001 開始的,請詳 4.2.1 Vector bit-select and part-select addressing。

02. sed

sed -i "s/abc/def/g" file_name

每次都會忘記,-i 表示要修改檔案,要把所有的 abc 取代成 def。

03. search cell name in cell files

grep -EH 'cell\s*\(\s*\"*sky130_fd_sc_hd__a22o_1' *.lib | sed 's/:\s*cell/ /g' | awk -v var="$PWD" '{print var "/" $1}'

為了在眾多檔案裡找到 cell 位在那個 cell libraries?利用上述語法,我可以得到完整的路徑,便可以貼到我的檔案去做後續的處理。


-EH 要看 grep 版本,我的 WSL 需要這兩個,E 表示 extend,H 表示顯示檔案名,記得工作站不需要。

sed 是把找到的檔案,將檔名跟搜尋 pattern 分開隔出空白。

awk 則是把 $PWD 環境變數傳進去,利用 print 組出完整檔案路徑。

2024年1月17日 星期三

神奇的正規表示法

每次都覺得正規表示法很神奇,換了一個工具就有該工具的眉角要注意!

最近沒有意外應該都會在 Linux 下工作,sed 是一個很常用的工具,常用來取代檔案的字串用。

sed 和 grep 一樣,有分 BRE 和 ERE 兩種模式,-E 則代表使用 ERE。

昨天看到一篇文章,剛好有個範例可以練習,沒想到一直試不成功。

下午在寫完簡報後,突然福至心靈的解決了,順便記錄一下。

有一個檔案內容如下:

<html><head><title>Hello World</title>
<body>Welcome to the world of regexp!</body></html>

想要使用 sed 取出非 HTML tag 的內容。

原本是使用 BRE 無法成功
sed -n 's/<.*>\([a-zA-Z !]+\)<\/.*>/\1/p' fileName

改使用 ERE 即可
sed -En 's/<.*>([a-zA-Z !]+)<\/.*>/\1/p' fileName

Note: 上面的 Rex 似乎要把整行都明確表示出來,否則達不到我們要的效果