Skip to main content

專輯分享 - 前方的路

· 2 min read

今天來分享的是我一聽就中的一張專輯,是來自胖虎的「前方的路」,這張的歌是之前我完全沒有聽過的,但因為被我朋友推薦,就全部聽完了。

奔向未來

整首歌就像是歌名這樣,一直在說著大人的世界,有時候還是會想要回到小時候,但是我們真的沒辦法。我們也不能一直在想著以前應該怎樣怎樣,好好面對現實才是對的。我最喜歡的一首是「向過去說再見」,這首用著快樂的旋律唱著現實的歌詞,如同我前面說所的不能一直卡在「後悔」這件事。

我最喜歡的一段:

過了今天反正還會有明天
到底什麼時候才會想改變
人生就像沒有盡頭的畫面
永遠看不到終點

因為現實也確實是如此,取自我朋友的一句話「我們每個人就像是電影裡面的演員」,要好好的演好每一天,快樂的過每一天才是最重要的。

好好整理音樂

· 3 min read

最近我發現到我聽的音樂開始多了起來,主要是因為常常會有人推薦或是我剛好聽到真的很棒的,我就會把整張專輯聽起來,所以音樂就多到我快無法管理了。

各種自架服務

我第一個想到的一定是有什麼可以自己架起來,像是 Spotify 那樣的軟體,但是很顯然的我沒找到。不管是哪一款用起來就是都不滿意,而且用起來不順手或是手機端 UI/UX 很爛,所以我就直接放棄了這條路。

但音樂這種東西不管理是真的不行,我最常聽音樂的地方是 Youtube,但我覺得我有必要保留一份本地的檔案,我會這樣說是因為之前我有一首很喜歡的歌在 Spotify 上直接沒辦法播,前一天還好好的過一天就直死了,我不把音樂收藏起來哪天就不見了。

夢回兩千年初

我想到我小時候用電腦的時候常常會用音樂播放器,就有什麼專輯、作者等等的分類方式,所以我就想到不如找回來看看吧!我問了一下 GenAI,我就得到了目前電腦端最好用的軟體 Clementine,使用上非常的直覺,但這裡我沒有要教怎麼用,大概自己摸個幾分鐘就會用了。

clementine 截圖

手機端目前我使用的是 Auxio,整個畫面非常的簡單但是又功能又都沒有少,但目前我沒辦法確定會不會一直用這款,因為這個不像是電腦端的功能那麼全面,就像歌詞目前還沒有辦法顯示。

這裡應該會有人想知道我怎麼同步的,其實方法就是使用 Syncthing,我還有筆電也是用這個軟體,非常的穩定好用。

我現在才想到那麼多服務沒想到最好用的早在我小時候就準備好了,只是那個時候我不聽音樂所以不知道而已,這一切都那麼的完美,而且那種音樂就在自己手裡的感覺真的很好,不再有被消失的問題。

大戰系統程式 - SIC/XE 指令分析

· 10 min read

系統程式這門課應該是所有資工系必修的課,這門課連我自己都覺得有點硬,我會這麼說是因為網路上的資料真的不多,而且連 GenAI 也常常給出錯的答案。因此我決定寫個筆記,給我自己也給未來的大二生看。

如果你不知道這門課在學什麼,簡單來說就是跟組合語言有關的東西,像編譯、組譯、連結等等,而這些都有非常多的細節,理解後非常有趣。

下方的內容如果有錯誤,歡迎來信更正!

基礎指令分析

下方的題目取自席家年教授的練習題,如有侵權請來信告知!

題目 PDF 下載

針對每條指令我們要處理的問題如下:

  • 助憶碼
  • 指令格式
  • Target Address
  • 被改變的目標
  • 內容值

分析最重要的就是這張資料表,放在這方便對照:

分析所需的資料表

9080

第一題我們來分析最簡單的指令,雖然說是最簡單的但是如果其它題目熟悉之後,反而常常會忘掉這種指令要怎麼解。

先拆成二進位,我們可以從得到 1001 0000 1000 0000。我們馬上可以發現到長度是 16 位元,再看到上方提供的資料可以知道是格式二。

按照我提供的資料表可以發現到前六碼是運算碼,接著四碼是 r1 再接著四碼是 r2。

前六碼為 1001 00,需要注意如果只有六個位元,則我們要補到八個位元,補完後為 1001 0000,可以得到十六進位的 90。然後再看到 SIC/XE 部分指令那邊,使用 opcode 去對,就可以得到 ADDR r1, r2 這個助憶碼。

而 r1 和 r2 分別是多少呢?把 r1 換成十進位得到 8,r2 得到 0,有了這兩個之後再去剛剛的部分指令表下方的暫存器區,使用編號去對應就可以知道 r1 是 PC,而 r2 是 A。

現在我們可以來回答問題了:

  • 助憶碼就是上方的 ADDR r1, r2
  • 指令格式是 2
  • 被改變的目標可以在 SIC/XE 部分指令表的 Effect 發現是 r2,也就是 A
  • 內容值就是把 r1 跟 r2 加在一起,也就是 12345A + 003000,可以得到 12645A

032600

同樣的先換成二進位 0000 0011 0010 0110 0000 0000,得到長度是 24,而 24 對應到的格式有兩種,可能是 SIC 或格式三。

那我們要怎麼知道是哪一種?我們可以直接去看第七跟第八個位元,如果是 00 則是 SIC 指令,而這裡是 11,因此確定是格式三。

確定了之後就看著表格,取出前六位分析,得到十六進位的 00,助憶碼就是 LDA m

這題可以發現到在運算碼之後還有一個六位元的 nixbpe,而這裡就是最麻煩的地方,在看的時候要分成 ni 和 xbp 去看,而 e 我們先不管它,這個只有在組譯的時候會用到,這篇用不到。

ni 有三種可能,分別如下:

  • 10 indirect 間接定址
  • 11 direct 直接定址
  • 01 immediate 立即定址

這裡是 11,可以知道是直接定址。

xbp 和我們最後計算出來的 Target Address(TA)有關,算法如下

  • 假設 x 為 1,則我們就先把 X 暫存器的值記起來
  • b 和 x 做法相同
  • p 和 x 的做法也相同,但這裡的 P 指的是 PC 暫存器

現在我們先把 PC 的值計起來,得到 003000

接著還有一位 e,那個直接不理它跳過就好。

現在和上題一樣,把剩下的 12 位元轉換成十六進位得到 600,再把 600003000 加起來就是 TA。

而我們還有一個內容值要看,這裡和定址模式有關:

  • 間接定址代表我們要在記憶體 dereference 兩次,換句話說就是我們要先用位址去找到值,再拿值當位址找一次。
  • 直接定址代表我們直接去位址找值
  • 立即定址代表算出來的 TA 就是值,不用找

現在我們可以來回答問題了:

  • 助憶碼就是上方的 LDA m
  • 指令格式是 3
  • TA 為 003600
  • 定址模式為直接定址
  • 被改變的目標是 A,可以參考 SIC/XE 部分指令表
  • 內容值可以在 003600 這格記憶體找到,答案為 103000

03C300

接下來的題目除非有比較特別的地方,不然都跟前面那題的解法相同。

這題和上題比較不同的是 xbp 的地方,可以發現到是 110,因此我們可以知道要把 x 和 b 的值加起來,之後再拿後 12 位換成十六進位之後加上去,TA 可以得到 6390

答案:

  • 助憶碼 LDA m
  • 指令格式是 3
  • TA 為 6390
  • 定址模式為直接定址
  • 被改變的目標是 A
  • 內容值可以在 6390 這格記憶體找到,答案為 C303

022030

ni 可以發現到是 10,可以發現到是間接定址。

內容值要拿兩次,TA 在計算過後可以得到 3030,先看一次 3030 的值為 003600,之後再對位址看一次得到內容值 103000

答案:

  • 助憶碼 LDA m
  • 指令格式是 3
  • TA 為 3030
  • 定址模式為間接定址
  • 被改變的目標是 A
  • 內容值為 103000

010030

ni 可以發現到是 01,發現到是立即定址。

內容值就是 TA,也就是 30

答案:

  • 助憶碼 LDA m
  • 指令格式是 3
  • TA 為 30
  • 定址模式為立即定址
  • 被改變的目標是 A
  • 內容值為 30

003600

這題可以發現到 ni 是 00,也就是說這題是一種 SIC 指令。

如果 x 為 1 則稱為索引定址,但這張練習卷沒有這種模式,處理方法就是 TA 要再加上 X 暫存器的值。而像這題的 X 為 0,就直接當成前面講過的直接定址即可。

答案:

  • 助憶碼 LDA m
  • 指令格式是 SIC
  • TA 為 3600
  • 定址模式為直接定址
  • 被改變的目標是 A
  • 內容值為 103000

0310C303

這題換成二進位之後發現到長度有 32 碼,是格式四的指令。

答案:

  • 助憶碼 LDA m
  • 指令格式是 4
  • TA 為 C303
  • 定址模式為直接定址
  • 被改變的目標是 A
  • 內容值為 003030

012FFE

這題可以發現到最後的 12 位是 1111 1111 1110,需要注意如果開頭是 1,像這題的情況就需要做負數處理。

做法是先把這個數字做一次二的補數,之後再把數字加上負號,其於的步驟都相同,只是最後的 12 位位址是負的。

這題的 TA 計算為 3000 + (-2),得到 2FFE

答案:

  • 助憶碼 LDA m
  • 指令格式是 3
  • TA 為 2FFE
  • 定址模式為立即定址
  • 被改變的目標是 A
  • 內容值為 2FFE

6BC300

這題其實如果有照我前面的指示應該不會有問題,但是最一開始的助憶碼要記得補兩個零,不然就會發現到找不到指令。

前六碼是 0110 10,如果你直接換成十六進位會發現找不到指令,因為要補零變成 0110 1000 得到 68,對應到的助憶碼為 LDB m

答案:

  • 助憶碼 LDB m
  • 指令格式是 3
  • TA 為 6390
  • 定址模式為直接
  • 被改變的目標是 B
  • 內容值為 C303

大戰系統程式 - SIC 及 SIC/XE 組譯

· 14 min read

繼上一篇指令分析,這篇要做的是組譯,組譯指的是我們寫完的組合語言變成機器語言的過程。

和之前的指令分析一樣,有非常多的細節要注意。這裡的練習分寫 SIC 和 SIC/XE,有些地方不同且 SIC/XE 還有多東西要處理。

下方的內容如果有錯誤,歡迎來信更正!

SIC 組譯

下方的題目取自席家年教授的練習題,如有侵權請來信告知!

題目 PDF 下載

下方為練習卷 練習卷

而我們要做的第一件事就是幫每條指令寫上位址,有些指令會發現沒有在 SIC 指令表內,而這些不在表內的指令稱為組譯指示,也就是說是寫給組譯看的,並不會實際產生程式碼,但這不代表不會佔用位址空間。

位址標記符號指令運算元
2100EX2START2100
2100TSTLDAONE
2103STADATA
2106LDXONE
2109LDCHSTR,X
210CSTCHCX
210FRSUB
2112DATARESW1
2115ONEWORD1
2118STRBYTEC'01'
211ACXRESB1
ENDTST

上方這張表多了位址這個欄位,而欄位的計算重點如下:

  • 位址開始從 START 指令的運算元開始
  • START 後的第一條指令的位址和 START 相同,因為 START 不會佔用位址空間
  • 位址是使用 byte 做為計數,而 SIC 表內的每條指令都佔用 24 個 bit,也就是 3 個 byte,因此可以發現到表內指令的位址皆為 +3
  • 所有的運算元皆使用十進位,除了 START 之外
  • RESW 代表此處保留指定數量的 word,一個 word 代表三個 byte
  • WORD 代表此處要有一個長度為 word 的整數,運算元即為整數的值
  • RESB 代表此處保留指定數量的 byte
  • BYTE 的運算元 C'01' 的 01 代表的是字元,因此此處可以知道有兩個字元,也就是兩 byte

算出所有的位址之後就下以完成「標記符號位址表(SYMTAB)」這個表格

標記符號位址
EX22100
TST2100
DATA2112
ONE2115
STR2118
CX211A

接著我們要開始寫目的程式,但在寫之前要先把在 SIC 表內的指令轉成目的碼,其實就是把我前一篇指令分析的步驟倒過來。

標註指令運算元位址目的碼
EX2START21002100
TSTLDAONE2100002115
STADATA21030C2112
LDXONE2106042115
LDCHSTR,X210950A118
STCHCX210C54211A
RSUB210F4C0000
DATARESW12112
ONEWORD12115000001
STRBYTEC'01'21183031
CXRESB1211A
ENDTST211B

上方這張表多了目的碼這個欄位,而欄位的計算重點如下:

  • 指令可以透過 SIC 指令表取得對應的 opcode,而 opcode 就是前八位二進位
  • 如果運算元有 ,X 表示要使用索引定址,則我們把二進位的第九位設為 1
  • 其於的 15 位則可以參考標記符號位址表填入
  • BYTE 直接把字元換成 ASCII 再換成十六進制寫入
  • WORD 直接寫入運算元換成十六進制的值即可,但要記得保留前面的 0,總共要有六位。

下面以 LDCH STR,X 這條指令為例:

我們取得 LDCH 的 opcode 為 50,二進位為 0101 0000,這代表前八位。因為有 ,x,因此要使用索引定址,我們把第九位設為 1,反之為 0

最後把剩下的 STR 的位址 2118 轉為二進位,得到 010 0001 0001 1000,可以發現到第一組只有三位,因為只有 15 位。

接著把所有的二進位組合起來 0101 0000 1 010 0001 0001 1000,再換回十六進位就可以得到 50A118

目的程式

接下來真的可以開始寫目的程式了,目的程式要一行一行的寫,且所有的地方都以十六進位表示。這邊特別提一下,正常的程式不會有 ,,這裡是為了清楚顯示才加的。

第一行是表頭紀錄,要依序寫入的資訊如下:

  • 開頭字母 H
  • 六格的程式名稱,如果不足則直接補空格
  • 六格的開始位址,如果不足則直接補零
  • 六格的程式長度,如果不足則直接補零

以這份程式為例,表頭紀錄如下:

H,EX2☐☐☐,002100,00001B

值得注意的是程式長度的算法就是 END 位址減掉 START 的位址

接下來會有數行的本文紀錄,要依序寫入的資訊如下:

  • 開頭字母 T
  • 六格的開始位址,如果不足則直接補零
  • 兩格的程式長度,如果不足則直接補零。這個可以最後再寫
  • 從上到下的目的地,連續往後寫不加空格,直到遇到指令沒有目的碼,則直接重新開始一行

以這份的程式為例,可以寫出兩行如下: T,002100,12,002115,0C2112,042115,50A118,54211A,4C0000 T,002115,05,000001,3031

最後一行是結束紀錄,但是這裡因為剛好遇到有指令沒有目的碼,因此可以直接不寫 END。

這裡就完成了 SIC 的指令組譯了。

SIC/XE 組譯

大部分的步驟都和 SIC 組譯相同,我會特別針對不同的地方點出來,相同的地方我不會再提。

題目 PDF 下載

下方為練習卷 SIC/XE 組譯練習卷

和 SIC 大部分相同,先把位址寫一寫,寫完的結果如下:

位址標記符號指令運算元
0START0
0BBLDB#BB
-BASEBB
3LDAKK
6+STANN
AKKWORD15
DBUFRESB4096
100DLDA@NN
1010STABUF,X
1013NNRESW1
1016ENDBB

特別注意到 +STA,這個代表的是它佔了四個 byte,因此計算的時候要 +4。

接著我們就直接寫目的碼,寫完如下:

位址標記符號指令運算元目的碼
0TESTSTART0
0BBLDB#BB692FFD
-BASEBB
3LDAKK032004
6+STANN0F101013
AKKWORD1500000F
DBUFRESB4096
100DLDA@NN022003
1010STABUF,X0FC00D
1013NNRESW1
1016ENDBB

在開始之前請確保已經學會了指令分析,因為很多東西我不會再提。這裡我會選幾條需要講解的來做,其它的做完可以參考上方。

LDB #BB

同樣的先找到 LDB 的 opcode 68,之後就可以發現到運算元前面有個 # 的符號,這和 ni 有關,可以參考下方的整理:

  • 無符號 11
  • # 01
  • @ 10

因此這裡可以知道 ni 要是 01

而我們還有 xbp 要決定,決定的方法如下:

  • x 只有運算元指定的時候才使用
  • b 參考 p
  • p 只要是運算元是標記符號就使用,但需要注意如果 TA 會超出範圍 2048PC2047-2048 \leq PC \leq 2047,則換成 b。
  • 如果是格式四則全為 0

最後還有一個 e,這個的決定就是運算子前面有沒有 + 號,如果有的話就會變成格式四。

但到這裡我們只決定了 nixbpe,我們還有最後的 12 位要算。還記得之前做指令分析的時候會把最後 12 位加上 xbp 之類的暫存器的位址嗎?這裡我們要反算,我們要讓算出來的值剛好落在我們想要的地方。

這裡我們的目標是 BB,也就是 0 這個位址,而 PC 此時是多少呢?PC 指的是下一行的位址,在這裡是 3,因此我們就知道這 12 byte 要是 -3,這樣一來才能跟 PC 做抵銷,來到達我們想要的地。注意一下 -3 要使用二的補數來表達。

而這樣我們就全部都有了,我們就能寫出 0110 1001 0010 1111 1111 1101,換成十六進位就是 692FFD

+STA NN

這條可以發現到前面有 + 號,因此要使用格式四的方式來寫,也就是說會有 32 位,寫出來的目的碼也會明顯比較長。

除此之外,xbp 都應該要是 0

LDA @NN

這條沒有什麼特別的,但可以發現到運算元前面有 @,也就是說 ni 要是 10

STA BUF,X

這條可以發現到有一個 ,X,可以知道 xbp 的 x 要設為 1。除此之外還會發現到後 12 位算完會超出範圍,這個時候就要把 p 改為 0 且把 b 改為 1

這個時候的後 12 位就不是在使用 PC 去做計算,而是要使用 BASE 所在的位址,也就是 0

因為剛好是零,因此後 12 位就剛好是 BUF 的位址。

目的程式

當寫完全部的目的碼之後就可以開始寫目的程式,第一行的表頭紀錄和 SIC 一樣,如下:

H,TEST☐☐,000000,001016

接下來一樣會有數行的本文紀錄,跟之前完全一樣,如下:

T,000000,0D,692FFD,032004,0F101013,00000F

T,00100D,06,022003,0FC00D

再接下來會有一個跟 SIC 不同的地方,稱為修正紀錄。為什麼會需要這個紀錄是因為有時候我們使用的定址是直接寫死的,也就是說不是用 PC 之類的方法算出來的,而是直接寫死某個地方,但程式會被放在記憶體的哪裡我們不知道,因此寫死的位址就會在運作的時候出錯。

以這題為例,可以發現到 +STA NN 的 xbp 都是 0,也就是說它的位址寫死了,因此它就需要修正。

每一個需要修正的指令都要一行修正紀錄,內容依序寫入:

  • 開頭字母 M
  • 六格要修正的指令後 20 位或後 12 位所在的位址
  • 兩格要修正的位數,位數要再除於四
  • 符號 +
  • 六格 START 位址的標記符號

以這份的程式為例,修正紀錄如下:

M,000007,05,+,TSET☐☐

這裡的長度其實只會有兩種可能,如果是格式三就一定是 3,如果是格式四就一定是 5。

結束紀錄如下,就填上 BB 代表的位址即可:

E,000000

再見

· 2 min read

今天來分享一首歌,是張震嶽的「再見」,這首有聽過的人應該不少,每次聽到這首歌我真的都會想哭,歌詞裡面寫的非常真實。

懷念的鐵花村

鐵花村聽過的人可能不多,但如果有去過台東就一定會知道這個地方。我在 2023 年的時候跟我家人去過,那個時候聽了嵐馨樂團,這是個我國中就滿喜歡的團,知道的人應該非常少,但是裡面的歌曲情感真的很深,我非常喜歡。這個地方有著我國中到高中這段時間的回憶,因為鐵花村常常會有各種歌手或是樂團的表演,但這一切終就是過去,我聽到要關閉的時候,當時心情是真的很複雜。

不知道哪天就走了

後來不管是我認識朋友或是去了什麼地方,我就會想著會不會有天這一切就突然沒了,更甚者可能我們也不一定看的到明天。這些都讓我更加的珍惜每次跟朋友或家人出去玩,聊天的那種快樂我都會很珍惜。可能這就是所謂失去才會有學習吧!

久違的 CTF

· 3 min read

昨天去參加了一場校內的 CTF,上次打都快兩年了吧,那是 SCIST 的期未考。今天有點找回當初學資安的熱情,那種解題的時候卡住又突然打通的感覺,我非常久沒有那種爽感。

超好吃的便當

感謝主辦提供的午餐,這間我高中的時候其實有吃過,但我有點忘了味道,今天一吃就又整個回憶起來,那個醬汁真的非常好吃,燒臘也真的很棒,我很喜歡。

南台燒臘 叉燒便當

油雞相對來講有點普,有可能是我本來就不太喜歡吃油雞 南台燒臘 油雞便當

早上的練習題

其它題其實不難,但有個真的我沒想到的題目,這題的重點其實是去 /etc/shadown 看內容,然後就會發現最後一行有點怪怪的,有個名為 ctfuser 的使用者,接著把後面的 base64 的東西解開就能拿到 flag。

但這題我花了一個多小時,題目名稱是「How do ssh work?」,我就去把所有跟 ssh 有關的檔案看一次,但我是沒有找到任何的 flag,其實我一開始就馬上看到 /etc/shadown 這個檔案,但我當時沒有想到那個 ctfuser 的 hash 不太一樣,就錯過了最佳的時機,但就練習題而已,當個經驗。

how do ssh work 的 shadown 截圖

挑戰賽

滿多題目真的不難,但還是有些我沒成功解開,主要是 web 和 pwn,web 的題目是真的有點難,主要是我沒想到的點,但 web 本來就是這樣。pwn 的話我應該要能全解的,因為以前在 SCIST 練過,但因為真的太久了所以就忘了,有點可惜,我一定要複習好。

我解得最順的是封包分析,因為這我平常就有在做,而且整個網路安全的熟悉度是最高的(以前被各種協議虐過)。

最後的成績也不錯,不過中間有一度快被超過去,但好小問題

計分表結算截圖

獎狀與紅包

AI 繪圖 - 腦中的畫面

· 2 min read

老實說我覺得這個時候發 AI 繪圖都晚了,因為早在 2022 年就開始非常多人在用 AI 繪圖,但因為當時就真的沒有用到也沒有動力特別去研究,而且當時還要各種提示詞。但在 2025 年一切都不同了,我們可以直接把我們想要畫的用說的說出來,當然也是不說每次都一試就中,還是要很多的微調。

想換大頭貼了

我先前有過兩代大頭貼,都是我用 Minecraft 的地圖加上 Mine-imator 還有 Photoshop 之類的工具用出來的,但老實說我覺得也該換換風格了,而且我自己也不再像以前那麼常玩,比較難想出非常符合的圖,所以這次我就使用 AI 來幫我畫畫出我腦中的畫面。

下面兩幅是我在調整的過程中我最喜歡的兩張,其中一張是做為之後的大頭貼使用的:

穿躍時空的我第一張 穿躍時空的我第二張

我自己是非常喜歡,因為有把我腦中的圖片非常完美的給畫出來。我所使用的是最新的 Copilot,可能這篇文之後又會再有更強的模型出現,但我應該不會重新生成這兩張了,因為真的非常的美。

理想生活

· 3 min read

最近幾周真的忙到快要爆開,因為學校的檢定出題工作不知道為什麼的突然就落在我身上,我只是個 TA 但感覺像是個雜工的感覺,但沒辦法就先把這些做完吧。昨天我看到一部影片,我其實有點羨慕就是了,我一直以來嚮往的理想世界就像是影片那樣,可以過的很 chill,不是每天一堆垃圾事砸得暈頭轉向。就像我之前提到的我覺得人類一直在往一個錯的方向發展,一直做些看似有用但實際上沒用的事。我認為人類真正的生活應該就是我們讓地球本身來養我們,只有這樣人類才能提升到另個維度。

引用片中的一句話:true wealth is clearly not in money but in the land that nourishes

回到以前 20 世紀的嘻皮士,他們不也是想要這樣嗎,我們到底在忙什麼到底在準備什麼?我們不停的告訴自己我們在讓社會進步,但實際有嗎?我們似乎變得比以前更辛苦,上不完的班做不完的事,這樣真的有比最早的人類幸福嗎?這個問題值得我們好好思考。

我自己也不確定十年後回頭看這篇文章,我會不會覺得當初說什麼幹話。在台灣,真的要過的那麼 chill 是真的有點難,因此我的想法是如同這篇講的,我打算在未來讓自己得到越來越多的自由,這樣就足夠了,可以快樂的過每天才是最重要的。

影片真的推薦每個人去看看,中文字幕有些部分出了點問題沒翻到,但不影響影片的核心理念。

所有人都必需看的午夜福音

· 20 min read

又是一個美好的晚上,剛忙學校的一堆破事之後,我就來看個片休息一下。我先是看了我朋友推薦的《黑鏡》第七季第四集,非常的好看而且跟我的想法滿合的,但這裡我不會爆雷,想看的人自己去想辦法看吧。因為我想要推薦的是一部 2020 年推出的動畫《午夜福音》,光看片名其實很難想到這部片到底是在講什麼,一開始我也是。我會知道這部片是因為剛好看到黑卡雜誌在推薦,影片版在這裡

這部片每一集主角都會使用一個名為「宇宙模擬器」的東西,每次都會穿越到不同的星球,之後跟這個星球的人做互動還有採訪,而這些對話也是取自真實的 Podcast 錄音。

星球穿越畫面

每個人對於「爆雷」的定義都不同,加上這部片我覺得沒有什麼主角最後死掉這種不能講的點,因此我會把我的想法最直接的寫下來。

看不懂?

我在看一部片之前我都會先去看觀後心得,我不確定是不是只有我這樣。這部我發現到亞洲人相對比較難理解到其中的意思,有些想法其實是非常的抽象,我自己第一次看就能理解到大部分其中的意思,因為我平常的想法就會比較跳躍一點點,這跟每個人成長的經歷有關,所以如果發現到看不懂、很瘋狂也都沒關係,一切都是非常的正常。

第一集

這集我覺得非常的能描述到對於「drug」的想法,在台灣通常會翻譯成「毒品」,但老實說我非常不喜歡這個翻譯,因為就像是裡面所說的一切的物質都是中性的,這就是所謂的「物質中性論」,但我也相信在台灣這種病態的反毒宣導之下本來就很難有正常的想法,但我也不會說是錯的還是對的,因為每個人的定義本來就不同。

我最喜歡的是裡面的熱氣球比喻和最後的殭屍比喻,不管是使用了什麼樣的東西之後常常就會發現到原來這個世界不是以前想的那樣,對我來說我自己本來就常常看國外的東西,因此我會覺得物質本來就沒有好與壞,我一直會對現在的教育等等提出質疑,就像是 zero trust 的那句話一樣「永不信任」,我對任何的事物都會保持著懷疑,不論是誰說的,我也覺得這才是每個人應該都要有的能力,但我想不會有哪個政府會想要有人對他 zero trust。

在殭屍世界的快樂畫面 在殭屍世界的快樂畫面

第二集

這集就開始到了非常抽象的地方,這集在講的是死亡的話題,其實這個話題在後面還會一直出現。死亡這個東西我以前是非常的害怕的,如果認識現實世界我的話就會知道平常我都笑笑著,但小時候如果我家人跟我說他們有一天會走,我其實是會直接哭出來的那種人,如果我不說應該是非常難想像的。我國中的時候我還記得我看了場演講,我很喜歡的一句話是「動物死後被人類吃掉,而人類死亡之後又讓新的植物有了養份,動物又吃了植物」完成了整個輪迴。我國中的時候心裡一直想著這句話,但我其實沒有到很能理解,與其說是理解不如說是感受,第一次我在看這集的時候我又想到那個時候的記憶。

我現在對於死亡的看法也是輪迴,物質在這個世界上本來就不毀的,因為人類終就只是一堆原子而已,而這些原子組成了我們的肉體,但有天我們死後這些原子就進行重組,組成什麼不重要,重要的是我們的意識從來就沒有真正活過也沒有真正死過。影片裡面從一開始到最後就一直都有輪迴的示意,我看著就會一直想到我有天也會離開這個世界上,其實一切都會有離開的那天,但並不會真正的消失。我很喜歡裡面的一句話是「愛意味著你能讓另一個人多快樂」,這個定義真的十分的完美。

第二集有一段是在講基督的意義,但這部分我自己不太能感受到,因為我自己沒有特定的宗教,我有我自己對這個世界的理解,可能有某些地方符合特定的宗教,但我真的不喜歡我說我自己是某個特定的宗教,因為宗教其實是特定的人對於這個世界的看法所做的解讀,我更喜歡自己來理解這個世界。

第三集

這集主要聚焦巫術上面,老實說連我都覺得有點難懂,因為這方面我是完完全全沒有接觸過,但後面有一段我特別印象深刻是開悟只是第一步,後面還有很多的事要做,我雖然不太懂裡面的太陽體之類的意思,因為我自己也沒有學過巫術。我覺得就算我真的去試著理解大概也是錯的,但我也才發現到就算我真的想通了很多東西,還是有很多事要做。

最後的巨人打架就像是新的自我,那個已經想通很多事的自己醒來的樣子,一定會跟本來的意識打架,因為原來的框架內太久了會很難適應這樣的全新世界,我自己是不太有這種感覺,因為我一直很清楚知道我自己在做什麼和我要做什麼,片中也有提到很多 2000 後的小孩其實也不知道自己想要幹麻,在亞洲一定是更嚴重,老實說我也有過迷失方向,是在我高三的時候,但後來我才發現到一切都是最好的安排,所以我就去做我想要做的事,研究我想要研究的東西,高三那次說是我迷失,不如說是我本來的路被其它的人弄的不清楚,太過於執著我想要的事。

這集我很喜歡的點是雖然有點不懂,但是聽著對話加上畫面確實讓人有十足的想象。

機械鋼琴手指

第四集

在我 2024 年暑假的時候,我去成大上了三星期的資安課程,那個時候我有認識到一個還不錯的女生,真的滿好聊天的。但在剛開始的時候,我確實發現自己有個問題,就是我會一直想要講話,給對方的時間不足。我怎麼發現的?因為我可以感覺她一直在找空檔想要插入對話。從那個時候開始我就一直在練習傾聽,這對於我想說真的是個要練習的東西,以前我的會把資訊一直倒出來,但後來人跟人的聊天我才發現到不太能這樣。這集一直在一個很重要的部分就是「傾聽」,有一個觀點我很喜歡是其實冥想也是一種練習,只是我們聽的是這個空間,沒有真正的聲音但是其實是可以做到傾聽的。傾聽也讓我知道我的家人其實有時候也是有想要說的東西,但是被我插話打斷了,不只我的家人還有我的朋友也是,學會之後真的就像片裡說的一樣,是另一種呼吸方式。

另外一個重點是原諒,這點我也是非常的有感,老實說我跟我家人有時候一定會有矛盾的那個,但每次我們總是都會互相的理解還有原諒,這點我做的應該是還不錯的,我自己不太會不去原諒一個人,就算跟我吵的再怎麼兇我還是都會想要原諒或者說是寬恕,這兩者我感覺有點差別,我會更傾向於後者。

第五集

這集我的感受應該可以排進第二深,我自己的理解是我們人類現在其實就像是在個監獄裡面一樣,世界上不停的有戰爭,就連人跟人之間都會打架,但其實我們人類要升級到新的維度的方法就是放下這一切,好好的相處,就像是影片裡面的人一樣一再地輪迴,每次都會有新的收獲,所以每次又都能再做的更好。我很喜歡我之前看到的一句話是「人類其實沒有進化」,我們的思想還是跟最一開始的原始人一樣,會想要使用暴力去取得到想要的東西,但其實很多時間這是不必的,我們要的應該是大家一起進步。

我自己的對這集的體驗可以分成兩個時間點,去年這部我看了兩次,那時候的感受其實沒有很深刻,有點像是看完電影的感覺,過一陣子之後就會覺得那只是一部影片。而這次我再重看會讓我覺得根本就是這世界,是天與地的差別。我自己其實是非常和平主義的人,我什麼事都用討論的就用討論的,再不然就用吵的也好,反正就不要動手,因為對我來說吵架也就一種討論,只不過看起來比較激烈罷了。

老實說看完這集的時候因為現實世界還是有很多要忙的事,我沒有辦法一直在思考的狀態,我還是需要回來做該做的事。我寫這集的心得的時候是五月十一日的半夜三點多,在那之前我還在處理學校的作業,真的滿痛苦的因為我知道那不是我喜歡的東西,但這個世界大部分的人類就是設計了這些以為能進步,但實際上沒有什麼幫助的事物。

意識的連接

第六集

這集我看的時候覺得非常的 chill,從一開始帶到主角所在的世界,我是真的滿想要實際去看看的,但也是只是動畫裡的世界,現實不可能有那樣。那個畫面會讓我想到小時候玩瑪利歐銀河的關卡,那種世界的震撼感有得比。

當然重點在後面的冥想,我本身就有練習過一段時間,雖然說我大部分都會直接睡著,我平常真的很多事,如果有時間我想要練習的時候,往往都真的很累了,常常就直接睡著。我也希望有天真的能做到冥想但是又不讓自己睡著。我自己覺得我比較接近片中所講的狀態反而是我騎車或者玩歐卡這種遊戲的時候。因為不用特別專心,但是又可以讓大腦不會進入休息模式,我自己也是這樣想通很多問題,不管是心靈相關的還是我在研究的課題等等,真的滿有用的。

第七集

我之前就一直覺得瑪利歐的畫面設計真的非常的迷幻,如果你不知道我的意思的話,可以仔細地去的觀察這集的畫面,我自己是非常喜歡這種設計,這也是為什麼我會一直玩瑪利歐的原因。

話題其實也是一個在台灣近幾年我覺得相對比較多人在關心,就是臨終的話題,我其實很開心能和我家人討論臨終的問題,他們其實是很願意聊的,小時候我家人也跟我聊過,主要是他們如果過世後想要怎麼樣處理等等,氣氛其實也是很放鬆的這樣。裡面有些部分在台灣比較難想像,像是特別幫屍體做防腐處理,這個我自己是沒有聽過就是了。

這集就算是進入最後一集前的小休息吧。

第八集

我每次只要看到這一集一定都會流淚,裡面的很多畫面我其實非常的有感覺。看著自己的家人變老,想著曾經的回憶,總是會回到那些過去的快樂時光。這集我每次看的感受都是相同的,因為那個就是我最底層的想法和體驗,這不時就會重新回來這集,因為我曾經被這個社會沖走,我很喜歡裡面的一句話是「順著河流走」,我曾經被其它的人影響,跑偏了我自己的路,差點錯過我最重要的事物,差點忘了我想要的是什麼。我自己感覺很多跟我同年齡的人,其實也不知道自己想要什麼或者為什麼要做這個做這個做那個,我很慶幸我一直以來都知道自己正在做什麼和要什麼,這也是為什麼我會很喜歡這個世界帶給我的一切。

我自己很喜歡裡面的一句話是「愛一直都存在著」,就算以後這個世界怎麼了,但是愛就是不會消失,就算到整個宇宙分裂也是如此。

小熊在背後畫下媽媽與兒子 愛其實一直都存在

反覆回味

我記得我大概兩三年前我就有看過第一次,那次其實很多東西都不懂的,主要是我自己的想法和心靈狀態一直受到社會期待的影響,但後來我才開始跟一些我能聊這方面東西的人聊,我才慢慢的能理解這個作品到底想要說的是什麼,以及像為什麼我們會在這裡等等這種很根本,這是在亞洲不會有人跟我說要思考的問題,而最近會重看也是因為有了對這個世界更深的感受,回來看的感覺有點不一樣,我覺得最有感覺的是第五集,那種體驗真的很描述,就是心態對於那集的看法就是不同。最後一集不用說一定是最好看的,那種直擊內心的感覺看了才會懂。

我未來還是會不定時回來看這部,我會寫這篇有一部分是因為我想要記下我現在的想法,未來我的想法應該會再到其它的維度,希望我能有不同的想法。

Linux 第一個要學會的東西

· 5 min read

話說在前面,這篇不是教學文,只是我覺得一定要讓每個踏入 Linux 世界的初學者一定要會的東西:「script」。

我來到 Linux 的世界也快要兩年了,時間真的過的很快,高中畢業那年,我決定把我的電腦換成 Linux 當主要作業系統。當然,有時我也是會到 Windows 打個遊戲,因為支援性還是有差。在 Linux 這條路上,我覺得有樣東西我一定要推薦給每個剛入坑的人,不管是學校上課要用還是你要個人使用,麻煩請先學會寫 script。

不能再逃了

我先說我自己是非常不喜歡為了一件小事就特別寫一個程式,除非是真的沒有辦法,像是之前我的 Google 相簿匯出檔整理真的太多,我才會特別寫 Python 的腳本來用。不喜歡的原因有點兩點:第一點是很怕寫錯把資料用壞,第二是因為我覺得寫程式的時間,都夠我手動用完全部了。一直到我學會了 script 之後,我才發現並非如此。

要我說說學會之前跟之後的差別,大概就像是從從腳踏車換到摩托車一樣,就是差那麼多。但為什麼我要突然開始學怎麼寫腳本呢?有趣的是,的是因為生成式 AI 常常會給我一些建議。因為像是重複的複製檔案這種煩人但是又不難的事情,我問生成式 AI 就會直接推薦我寫一個 script,看久了我就覺得不如來學一下好了。

學會就遇到雜事一堆

就在我還在學會怎麼寫的時候,我就遇到了一堆事要處理。我們教授給了一堆題目要我出,出題是件非常麻煩的事,因為每題都要準備很多的東西。我之前有過了一套可以跑 generator 跟 solution 來生測資的軟體,但是要複製東複製西的,非常的麻煩,而且萬年的爛 ZeroJudge 對於檔案的命名又有很特別的規定,所以我就自己寫了一個 script 來處理重新命名測資跟複製程式碼,那種點一下就好的感覺是真的很爽,後來我才發現到原來寫這個這麼的簡單,是之前我的心魔一直覺得很可怕,但其實不然。

我相信很多人遇到我上面要處理的東西,應該就是手動處理吧!但接下來的東西可就麻煩多了,因為我自架了一套伺服器,功能真的滿多的,而伺服器其中一個很重要的部分就是備份。之前處理備份,我都是寫一份檔案來檢查哪些檔案備份了?幾號備份?等等的資訊,後來我就直接寫個 script,現在我只要插上硬碟,輸入 bash backup.sh <路徑> 之後去看部影片,就處理完了全部都自動化,超級開心。

接下來我處理的是讓我 script 的語法大幅進步的腳本,因為我要使用 gpg 來加密大量的檔案,如果我一個一個輸入大概會輸入到死,所以我就研究怎麼樣傳參數等等。寫完之後加解密一樣只要一行,全部幫我處理到好。

投資

我發現到這就像是個投資一樣,前面學的時候真的要花一點時間,一直瘋狂的除錯。但只要你學會之後,什麼事都很輕鬆,就像不會有人不學怎麼騎摩托車一樣,因為學會可是終身受用阿!一起來加入 script 的行列吧。