Skip to content

火花

在山間迴響的煙火聲蓋過了我的聲音,我對渺小的自己很失望,但我之所以沒有被逼到絕望,只因為我對大自然與煙火抱有崇高的敬意,就只是如此平凡的理由。

不過,我們必須把自己的畫作展示出來讓某人買下,選用的畫框想必會大幅改變畫作給人的印象。完全放棄任何商業性的行為,說不定會改變自己作品本來的意義,那樣等於是完全沒有保護作品。

我們早已過了會自作多情的年紀;我們已經到了就連假裝自作多情而招來惡評,都視為一種工作的年紀。

而且,我早已隱約的察覺,我們的工作也在漸漸減少。過去令我恐懼、讓我成長的後輩們也已邁向新的人生了。我可以肯定的說,我們那彷彿永無止境的無藥可醫的歲月,絕非只是荒唐的騷動。我們是真的感到恐懼,我們打從心底恐懼父母、戀人日漸老去,一切將會再也來不及。我們是真心害怕自己主動結束夢想,彷彿舉世皆為陌生人的頁晚一再來臨。

劇場這些年來累積的笑聲,都被這骯髒的牆壁吸收,觀眾一笑,牆壁也會跟著一起笑。

耗費長時間一直在做沒有必要的事情很可怕吧?在僅此一次的寶貴人生中,挑戰或許會完全沒有結果的事情很可怕吧。排除無謂的徒勞,也就等於是在迴避危險。無論是膽小、自作多情或是無藥可救的笨蛋都行,總之只有敢站上充滿風險的舞台,全力向顛覆常識去挑戰的人,才能夠成為相聲師。透過這耗費漫長時光的莽撞挑戰,我認為我已得到自己真正的人生。

Classic Shell Scripting 讀書筆記 (八)

  • DevOps

ksh 與 bash 的擴展與相容性

模式匹配的擴展

bash 要先啟用 extglob 選項才支援此功能

正則的 ^$ 在 Shell 的模式匹配沒有等同物,我們可以想像,在 Shell 的模式匹配中, ^$ 已經自動帶在前後文了,若在模式前後加上 * 則可以停用此功能

括弧展開

源自於 csh 的功能,ksh 跟 bash 都支持此用法,可以巢狀化

Read More »Classic Shell Scripting 讀書筆記 (八)

RSA 所使用的數學

  • Quote

此文節錄《碼書:編碼與解碼的戰爭》的附錄

此書提供了許多簡單易懂的技術描繪(可惜台灣沒有再版了)


如下是 RSA 加密與解密過程的數學描述:

一、愛麗絲挑選兩個巨大的質數 pq。這兩個質數應該要非常龐大,不過,為了簡化說明,我們假設愛麗絲所挑選的是 p=17,q=11。這兩個數字必須保存好,不讓任何人知道。

二、愛麗絲把這兩個質數相乘,得到另一個數字 N。在此例,N=187。她又再挑一個數字 e,假設 e=7,數字 e 和數字 (p-1)×(q-1)必須互質,也就是說,它們不可以有共同的因數

三、愛麗絲公佈 e 和 N,這兩個數字一起,被稱為公開鑰匙(所選取的 e 值可以跟其他人的一樣,但 N 值必須是獨一無二的)

四、加密訊息時,必須先把訊息轉換成一個數字 M。例如,文字被轉換成 ASCII 二進位數字時,我們可以把這些二進位想成一個十進位數字。接著根據如下的公式,就可以把 M 加密成密碼文 C

五、假設巴伯想送愛麗絲一個吻,就單單一個字母 X。X 的 ASCII 碼是 1011000,換算成十進位數字是 88,因此 M=88

六、巴伯查詢愛麗絲的公開鑰匙,發現 N=187, e=7。這兩個數字等於提供了他加密訊息給愛麗絲所需的公式。套入公式:

用電子計算機運算這個式子反而費事,因為它的顯示版容不下這麼大的數字。事實上,模算術的指數函數有一個計算訣竅:

巴伯把密碼文 C=11 寄送給愛麗絲

七、我們知道模算術裡的指數函數是單向函數,要從 C=11 逆向求出原始訊息 M 是非常困難的事。所以,依芙沒有辦法解譯這則訊息。

八、愛麗絲可以解譯這則訊息,因為她有特別的資訊:她知道 p 和 q 的值。她會利用下面的公式計算出一個 d 值,即她的私人鑰匙:

d 值的演算並非輕而易舉的工作,不過一種稱為歐基里德演算法的技巧可以幫愛麗絲又快又簡單地求出 d 值

九、愛麗絲利用下面的公式解譯訊息:


瑞維斯特、薛米爾和艾多曼創造了一個特殊的單向函數,只有持有特別資訊(p 和 q)的人才能求回原值。每個人都挑選不一樣的 p 和 q,等於把這個函數個人化,任何人都可以用 N 值加密訊息,但只有知道 d 值的人可以解密訊息

碼書:編碼與解碼的戰爭

  • Quote

鑰匙的重要性遠高於演算法,這就是密碼學上顛撲不破的真理……密碼系統的安全性不在於防止敵人洞悉密碼演算法,鑰匙的保密才是決定密碼安全性的唯一關鍵

每種密碼法都可視為一種演算法(algorithm)——再加上一把鑰匙(key)的組合結果。鑰匙是用來指定特定加密程序的演算細節

(替代法的)鑰匙的定義可以更簡單,制定密碼字母集時,發信人可以選用一個鑰匙字(keyword)/鑰匙片語(keyphrase),而不必將全部的字母隨機重排……例如,選用 JULIUSCAESAR 當鑰匙片語,再以這些字母當密碼字母集的起始字母,接著,把字母集的其他字母,依照原有順序,接到鑰匙片語的後面,就能造出密碼字母集

舊約聖經含有一些蓄意的、明顯的密碼應用例子,讓中世紀的修士深深著迷。例如,舊約聖經就有幾段以「atbash 法」加密的文字。Atbash 是一種傳統的希伯來文替代式密碼法:要替換字母時,先記下他在字母集的順序編號,再取從字母及後頭倒數過來順序相同的字母取代。以英文為例,第一個字母 a,就以最後一個字母 Z 來代替。事實上,atbash 這個字就暗示了它所描述的替代法。它包含希伯來文字母的 aleph,跟著的是最後一個字母 taw,再來是第二個字母 beth,最後是倒數第二個字母 shin

……簡易的方法來增強單套字母替代法的安全性,其中一種方法是引進「虛元」(nulls),亦即不代表任何字母,像空格一樣不具任何意義的字母或符號。例如我們可以在 1 到 99 之間任選 26 個數字來替代明文字母,剩餘 73 個不代表任何字母的數字,則以不同的頻率隨意散至在密碼文之間……這些虛元會干擾頻率分析法的應用

另一個扶助岌岌可危的單套字母替代法的辦法是使用代碼字 (codewords)。code 這個字在日常語言有非常廣泛的含義,常被用來描述任何祕密通訊方法……它其實有特定的意義,專指某種形式的替代法……讓整個單字改由另一個單字或符號替代

在技術上,代碼法 (code) 指的是單字或片語層面的替代法;密碼法 (cipher) 指的是字母層面的替代法。因此,密碼加密 (encipher) 指的是用密碼法改寫訊息;代碼加密(encode)則是用代碼法改寫訊息。同理,解譯密碼 (decipher) 是還原以密碼法加密的訊息,解譯代碼 (decode) 則是還原以代碼法加密的訊息

……仔細檢視代碼法,我們會發現它有兩大缺點,不如密碼法實用……要達到同樣的彈性,得先定義數千個可能會用到的明文單字代碼。這樣一本代碼簿恐怕會有好幾百頁……(攜帶不易)……再者,代碼簿被敵人俘獲的後果會非常悽慘,發信人和收信人必須再度重新編撰一本全新的代碼簿

Read More »碼書:編碼與解碼的戰爭

Classic Shell Scripting 讀書筆記 (七)

  • DevOps

進程

程式 (program) 的一個實例 (instance),由 fork()execve() 等系統調用所起始、執行、直到下達 exit() 系統調用為止

UNIX 支援多進程,由文本切換實現(context switch),進程本身不管文本切換,也沒有必要在程式裡撰寫撤回控制權給操作系統的處理

系統內核的調度器(scheduler)負責管理進程的執行,並參考進程的優先權決定順序

平均負載(load average)

在任何瞬間,等待執行的進程平均數,當平均負載持續地超出可用 CPU 的承載時,表示系統已經超載

由於會一直變化,uptime 指令分別回報最後一分鐘、五分鐘、十五分鐘的估值

建立進程

UNIX 最大的貢獻,就是能輕易建立進程

很多進程由 Shell 啟動——每個命令行的第一個單詞代表要執行哪個程序,且保證具備以下事項:

  • 內核本文(kernel context),存在內核的數據結構,紀錄進程的資訊,方便管理與控制進程
  • 一個私有的(private)、被保護的(protected)的虛擬位址空間,確保進程間不互相干擾。其可以是主機的可定址空間,可能受限於 Swap 、其他執行中工作的大小、系統調校參數的設置等
  • 三個皆以開啟的文件描述代碼(標準輸入、標準輸出、標準錯誤輸出)
  • 起始於交談模式 Shell 的進程,會有一個控制終端(controlling terminal),扮演三個標準文件數據流的默認來源與目的地
  • Shell 展開命令行中的參數,省去程序的負擔且提供統一性
  • 記憶體中的一個環境變量區域(environment space)會存在,透過函式庫調用取得

進程編號

編號為 0 的進程稱為 kernel、sched 或 swapper,可能不會顯示在 ps 列表中

進程的形式是樹狀的,除了 kernel 以外,每個進程都有父進程,及零至多個子進程

編號為 1 的進程稱為 init,對於父進程過早消失(die)的進程,其父進程會重新被指派給 init

系統在正常關機時,進程的刪除是編號由大到小依次執行的,直到剩下 init 為止,當 init 結束,系統終止

Read More »Classic Shell Scripting 讀書筆記 (七)

大師的刻意練習

  • Quote

註:以下節錄來自各個不同訪談

藝術中重要的是差異,不是相似。每個個別表現都是一種藝術形式;如此說來,何不栽培每根手指成為一個藝術家,培養出其特殊天賦,而不是使其順應刻意算計來破壞這些個別特徵的訓練系統?那種訓練系統只會拉平所有手指的層級,使其成為無生氣的機器。

大家『用巴哈的音樂』來達成某些技法目的的說法,令人心碎不已。他們似乎從未想過詮釋巴哈,只把他當成是一種技法升降梯,希望藉此達到一流的音樂高度。我們甚至也聽過大家以同樣不懷好意的方式來談蕭邦,但巴哈這位大師中的大師,還是最大的苦主。

正確來理解,技法就是藝術,必須當成藝術來學習。音樂中的所有技法,無一不是音樂本身。

在所有樂器中,鋼琴的天生表現力最低,學生最重要的便是去理解其抗拒的本質。鋼琴的動作純粹是機械性的,每個個別音符都沒有意義……按下個別音符的是個孩子還是帕德瑞夫斯基都沒有差別——音符本身沒有表現力。至於小提琴、人聲和除了風琴以外的所有樂器,個別音符發出或拉響後還可以變化,這種更動包含著情感表達的一切廣博可能。

因此我們彈鋼琴時,唯一的表現途徑是各音符在一連串音符或和弦中的關係………了解這點的學生少之又少。他們的心力似乎多半放在讓一連串特定音符中的所有聲響盡量相向,如同一個模子刻出來的硬幣。他們以鋼琴為唯一的樂器,從來沒想過向表現潛能比鋼琴卓越無數的人聲或其他樂器學習。

目睹一個災難事故時,呼吸不可能不顯現出內心的刺激和激動。喜悅、憤怒、恐懼、愛、寧靜、悲傷——這些情緒在在有不同的呼吸模式,一位訓練有素的演員必須非常密切地研究這點。

你希望做音樂嗎?如果是,那就想著音樂,不論何時都只思考音樂,甚至深入到最末微的技法細節。你的抱負是彈好音階、八度音、雙音和顫音嗎?那麼請無論如何集中心思到這上頭,心無旁鶩,不過如果後來你想以自己機械性的動作表達活力時,可別訝異自己除了報時木偶般的笨拙動作外,什麼也做不到。

Read More »大師的刻意練習