pretty code

2024年9月5日 星期四

認真過每一天

下班前一個百思不解的問題,沒想到在洗澡時就讓我無意間想出來了?

前幾天在中央集權的框架中加入了一個地方自治的機制,雖然改動的不多,但我還真的蠻佩服我自己,當初只是為了不要大改別人家的專案才這樣設計,沒想到居然還有保留彈性的副作用,差點都以為自己是天才了,誰說一定要善用設計模式才是高手,只要認真過每一天,每天勤練感謝的正拳,總有一天,我們也能成為獵人協會會長XD

這個問題就是,雖然加入了地方自治的機制,但因為 DC license 有限,我也沒時間測試原本框架的功能是否正常,早上跑完自己想知道的頻率數據後,下午想說就來跑看看原始流程吧,沒想到還是出事了!

Tcl 變數其實跟 C 語言很像,使用前要先宣告。

前天為了兩者兼容,加了一段 if else 語法,下面是該語法示意:

if {"$::env(variable)" == "1") {
    set file_name "file_name_${varable}.log"
} else {
    set file_name "file_name.log"
}

殊不知當 variable 不存在時,此段語法會報錯,但不會影響 DC 繼續往下跑下去。

只要工作不會中斷,一切都好辦,將 else 往上提變成預設值,因為地方自治一定會有該變數,故不會有問題,而當跑中央集權框架時,因為有著預設值的關係,故變數不存在報錯也無妨。

雖然無妨,但那 Error 的字眼就掛在 DC log 中也是很礙眼,故下班前有稍微找一下如何檢查 Tcl 變數,但一直不懂為什麼要拿掉 $ 符號?

原來 info exists variable 的用法,variable 本來就不用加上 $,既然我們要檢查的是 env,當然就要從 $::env(variable) 變成 ::env(variable) 才行。

在曾有你的地方

小老婆歌迷也快滿兩年了,到現在還是覺得怎麼這麼可愛XD

一直以為我比較喜歡的是《夢在遠方》,但每當在車上聽到《在曾有你的地方》時,我都會跟老婆說我戀愛了!

不得不說,歌詞寫的也很棒,不需要看歌詞都知道在唱什麼,跟另外一首《七夕生蛋》不一樣?


不知不覺,距離人生第一次聽小老婆演唱會也過了一年有了,時間過得真快呀!

2024 week 36 新玩意

01. 跳板工作站顯目提醒

前幾天自己耍笨,以為工作站沒有安裝相關軟體,又麻煩老闆重傳一次檔案XD

但這樣下去不行,下次搞不好又會忘記跌股?年紀大了,不能依賴自己的記憶。

原本想要加一個 dispatcher,就是 shell 收到指令,都要先攔截進到這個 dispatcher,就可以趁機檢查工作站名稱並提醒自己,但不知道有沒有這種東西?

還好昨天突然想到可以用 prompt,就是那個 shell 提示。

Bash 要設定 $PS1,C Shell 則是要設定 $prompt,兩者顏色語法好像也不一樣?


02. DC 獨立男人

DC 可能因為一直改版,有些指令參數跟以前不一樣,一般都是進到 dc_shell,再用 man 指令查詢。不過,部門只有一套授權,所以當在 log 發現 Error 時,只能等到 DC 跑完才能查XD

前天因為沒什麼睡,昨天下午在完成老闆交代的任務後,就不勉強自己繼續看 Spec,而是上網查詢一下 csh 相關知識,終於讓我無意間看到好東東

alias dcman "man -M $SYNOPSYS/doc/syn/man"

之後就可以直接打 dcman create_clock 查詢了。

03. DC check tcl 語法

也是從同一個網站看來,前天加入自動化 build 不同參數 DC 時,很多錯誤都要等到執行到那邊才會知道,這也是將流程拆分成不同檔案的缺點,無法一目了然的看到並發現錯誤。我們可以用 DC 自帶的 tool 來檢查,只是不知道能不能從進入點 tcl 一直檢查到所有 tcl 檔案?早上進辦公室後在確認一下。

dcprocheck xxx.tcl

2024年9月4日 星期三

它抓得住我

我算是用 Blog 記錄一些瑣事的人,沒有它我都不會寫程式了,即使到今天,我寫任何程式沒有 Google 我都記不住函數的參數以及順序有哪些?

正所謂凡走過必留下痕跡,吾生平所為未嘗有不可對人言者XD

當然沒事還是不要去看謎片,看完真的空虛呀XD

儘管如此,當初居然未曾想到要替 Blog 搜尋留下統計資料?

沒關係,凡事都不嫌晚,只要開始就好!


老樣子,還是沒變,兵器榜排行第一還是大台北行政區圖?

第二名是很久以前,自己玩 Amazon VM 洗出來的XD

其他文章都是電子書相關的。

值得注意的是,Redfish 居然可以排進前十名,難道是我當初看走眼了嗎?這個東東已經要成為伺服器管理任務中的 Windows 嗎?

2024/09/24 更新

只有數字不會騙人,Redfish 根本沒有成為當紅炸子雞,一切只是我想太多!

2024年9月3日 星期二

天下大勢,分久必合,合久必分

之前將某 VLSI Synthesis 專案架構加到某個 Open Source 的框架當中,當時心裡就想,這樣其實會失去彈性,我個人是比較支持原本那樣的架構,不要走中央集權的模式。

果不其然,下午有個需求想知道某專案的上限在哪?這樣的需求還是要透過自動化處理比較 Smart,還好之前是用最低限度修改的方式將專案加入到框架當中,稍微想了一下,複製了幾個檔案,為了不要大改之前的東西並重複利用 config.mk 原本的內容,在某專案根目錄又加回了 Makefile,方便我在根目錄中觸發自動化流程。

此次修改最麻煩的是 C Shell 一些語法撰寫,我想一般人應該都比較熟悉 Bash,在不斷的 Google 下,終於順利將自動化流程跑起來,但也花了我一個半小時XD

本次快速重點

01. 不管是 Tcl or C Shell 變數都可以用 {} 包住,避免串接時失敗。
02. @ 是 C Shell 用來執行數學運算。
03. bc 是用來處理浮點數並格式化。


小專案單次合成雖然很快,但也要跑將近一個小時,本想晚上回到家吃完飯再用 VPN 連回公司確認一下是否有照我的想法一個接一個的自動化跑下去,無奈公司電腦網路在休眠時常常會無端斷線,只好明天再來看看結果如何?

經過這次事件,明白到自己還是缺少 C Shell 以及 Tcl 相關書籍,趕快買了 2 本書壓壓驚,Tcl 就算了,C Shell 的書還真是難找,只好找了一本快 30 年前的書XD

不得不說,O'Reilly 出版商真是有情有義,在 Google Play 買的書都沒有 DRM 保護,直接就可以下載,也算是節省了我一些時間。

有沒有人可以告訴我使用 Bash 跑商業 EDA tool 到底會不會有問題呀?我實在不想繼續考古下去了…

2024/09/04 更新

作夢都夢到自己在改 C Shell script,有沒有這麼可怕XD

害我半夜三點起來就沒睡了,趕緊把最近買的五本書使用自己開發的 kobofileserver 上傳到 Kobo Elipsa 電子書閱讀器上,然後就沒然後了XD

一直到剛剛都還在看著 PTT 追新聞,我也算是有情有義的男人吧XD


感謝網友 usimon 建議增加多檔上傳功能,原來這功能還真是好用,可能是我以前只會循序邏輯的執行事情吧XD

難道這就是傳說中的單核單執行緒先佔式多工老男人腦XD

2024/09/04 到公司後更新

恨呀,果然有問題,偏偏昨天 VPN 連不回來。

昨天犯了一個錯誤,都怪該死的 DC command 語法,害我不小心中招XD

{$clock} 因為在 Tcl 裡面,{} 就跟 Bash 的單引號一樣,是當純字串的,想單然爾,我昨天的心力都白費了。

解決方式也很簡單,跳脫大小括弧即可。

\{$clock\}

但是人生就是有那麼多 But,此招對 DC 這個聖鬥士無效,它就是需要 {},無奈之下,只好將該 command 改用 echo 自動化產生 Tcl script。

為了這個臭蟲,早上雖然提早來公司,但又花了我一個小時 debug,今天真不是我的天呀!

2024年9月1日 星期日

方恨少

我書讀得不多(學校的書),雜書倒是看了不少,要細數人生遺憾的幾件事情當中,以前不曾好好上學(認真唸書考試)應該可以算上一筆。

最近為了工作,買了幾本 VLSI 相關的電子書,才知道這類的書還真不是普通的貴,重點還有些年紀,有些書甚至還超過 20 年有!以前一直覺得 C/C++ 規格書已經夠貴了,這禮拜買的四本書,好幾本的價格都可以跟規格書比擬,我雖然沒細算,但應該介於 7,500 ~ 8,000 有吧?

有 3 本書在 Play 購買,一本在 Elsevier 購買 

有一本我可能只想看某幾節罷了,但還是買了下去,正所謂孩子的學習不能等,不過為了我這個學習的孩子,花的錢應該也可以買一部不錯的筆電了吧?這還只是 Blog 我有印象記錄下來的部分XD

早上無意間想到好讀網站,沒想到又開始繼續營運了,但我憑印象找了幾本看過的書都未曾看到下載處,我猜應該是熱心人士,憑著之前部分砍站的備份又讓他繼續下去吧?印象中 20 幾年前購買好讀 PDA 版 App 時,只需要台幣 500 元,還用電子郵件跟周劍輝博士聊了幾句查帳要翻一堆法規的需求,沒想到時光飛逝呀…

有時候不是讀者不支持正版,但就是有些書買不到正版電子書,即使除了車子之外,最大支出都在買書上的我(正常食衣住行不算),我猜也大概只有百分之九十幾以上是花錢購買的正版。

像我一直很想購買《黑豹列傳》電子書,每當人生低潮的時候,對話裡的一些大道理總會讓我再找到奮鬥的力量繼續下去,只可惜現在連漫畫書店都沒剩幾間了!

蝦皮等網站也不是買不到盜版 JPG 電子檔,重點還比隨便一本資訊電子書便宜,但個人還是想要支持正版,畢竟現在不是學生,只好放棄購買的念頭,改天寫信去出版社敲碗好了,估計 5 萬 ~ 10 萬內應該可以買到全 900 期?

無聊又抓了一下 Readmoo 和 Kobo 購書金額圖,順便看看 Kobo 網站開發團隊是否又無聊到去更改 CSS class name

Readmoo 最近五年購書金額統計

Kobo 最近五年購書金額統計

嗯,真是幹得好,這星期買的四本資訊電子書金額居然快跟 Kobo 今年目前已購書金額相當,真是錢到用時方恨少呀! 

2024/09/01 晚上更新

查了一下,原來是熱心讀者接手好讀網站,但我還是搞不懂為什麼找不到我以前看過的書?

剛才想要略表一點心意,一直以為是我哪裡操作錯誤,查了一下,原來是 Taiwan 不支持 Paypal?但我是用信用卡支持的不是?我還真有點搞混了!


2024/09/24 更新

信用卡帳單出來了,真是不忍直視呀!幸好 Google 匯出檔案還算容易,還是 Elsevier 比較乾脆,直接給電子檔。

要買資訊相關的電子書,我只推薦 manning,Elsevier 以及 O'Reilly 這三家。

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 就可以解決的。