搜索
Table_bottom

标签云
Table_bottom

分类
Table_bottom

声明
文章若未特別註明,皆採用 知识共享许可协议 請自覺遵守
Table_bottom

鏈。。。
Table_bottom

存档
Table_bottom

匆匆过客
41226
Table_bottom

功能
Table_bottom

記近日給某服務器裝系統

    學院打算重建學校的OJ,故而不知從哪弄了一臺(也許是新的)服務器。然而其上默認什麼都沒有,自然需要去給它裝一個系統。既然重建OJ的活給了某,那麼裝系統就也是我的事了。某思來想去,決定裝CentOS 6.4上去。

    那臺服務器是IBM X3630 M4,其上使用的是C105組建的(僞)RAID。一開始沒有想到它是這個情況,故而直接拿着USB設備就去裝了,結果到了分區那一步發現驅動有問題,直 接crash了。之後以“ibm c105 linux”爲關鍵詞Google了一下,發現了這個博客(這博客時靈時不靈)上提供了解決方案。其上有一個指向ibm某支持頁面的鏈接,在那個頁面 中有用於RHEL6的驅動,同樣也能用於CentOS。

    下載過驅動包(zip格式)之後,解壓到一個地方(最好跟安裝程序放一個設備中,比較好找)。之後在引導時加上linux dd參數,以便在安裝前可以手動加載驅動。驅動加載過後,原先識別爲兩塊的硬盤變成了一塊,高級磁盤選項中原先處於硬RAID中的那個設備消失,出現了一 個新的跟控制器中同名的普通設備。之後就是一般的安裝過程,網上教程一搜一大把,這裏就不贅述了。只不過安裝時候出現了一點小插曲:提示沒有ISO 9660設備。這樣就需要把iso文件複製過來。不過U盤格式化成了fat32,無法複製4G以上的文件。後來只好在移動硬盤上劃了一塊分區,將之格式化 成ext2,再寫引導複製文件安裝。

    總結一下注意事項,以供後人借鑑:

  • RAID有可能需要單獨驅動支持,在安裝之前先查看下說明。
  • 製作USB啓動盤需要注意是否需要複製iso文件。
  • 文件系統格式儘量使用ext2而不要用fat32。原因?fat32有4G的文件大小限制,ext2沒有。

某看如何學習漢語文:字詞

此篇來說一個錯位了的概念:詞。

自小時起,我們便時時聽到“詞”這個字眼。又由於英語文教育的較早進行,多數人在思維中便將漢語文的“詞”和英語(英文)中的“word”劃上了等號。

這樣就造成了一個令人糾結的現象:許多人將白話中的“詞”當作一個整體來記,導致漢語文學習難度增大許多。

但是,絕大多數白話“詞”的實質是字的組合,在此簡稱爲“字組”。

舉幾個例子:

  • 因此
    • 因,由於;此,這個。將兩個字的意義組合起來就是日常所用的意義。
  • 引申
    • 引,拉弓之義;申是“伸”的通假,表示張開。因此,“引申”就是將一個事物拉開,也就是將之擴展、擴大。
  • 知道
    • 知,明曉明白;道,法則。故“知道”就是明白道理,亦即瞭解。
  • ​文言
    • ​文,文章;言,所用之物。文言是爲文之言,即寫文章時所用的“語言”。從其名便可以看出文言是作文時用的,所以某一直對某些人認爲古人說話也是文言的思維感到十分好笑。​

一些人或許已經看出,上邊是在用文言來解讀白話。爲何如此做?原因如下:

  1. 漢字本身就是一個完整的意義符號。如同積木一般,以單個漢字作爲基礎進行組合便可以產生無以計數的變化。文言便是因此產生的。
  2. 古來漢文的寫作均是以文言的方式。不論新文化運動時期那些人多麼急切地想要拋棄“舊”的東西,作爲基礎的東西是不可能如此輕易扔掉的。故而他們造出的“白話文”也僅僅是加長版的文言而已。
  3. 經過一百年不斷對英語(英文)寫作的模仿以及對“俗”的追求,白話文漸漸變成今天這樣。然而萬變不離其宗,漢語文的根基漢字還在(雖然被文革前後的漢字簡化運動無理毀壞了許多),故漢文依然可以如此解析。

當然,也有少量的比如“佛陀”一類的音譯物、以及“紅塵”一類的多層引申物無法依上述手段分析理解(或理解困難)。所以,這些東西方可稱爲“詞”,要作爲整體來記憶理解。只不過這些東西在整體中的比例實在是太少,無法撼動漢語文的本質。

某看如何學習漢語文:總章

我國的漢語文教育可謂是下了很大功夫,但是收效卻並不怎樣。某暫依自己二十載的學習生涯及思考,總結出此系列文章。

首先一個問題:在十餘年學習生涯中我們整日唸叨“語文課”,那麼“語文”是什麼?

不知全國會如何,但是某去問自己的同班同學,十之八九完全沒有概念而只是記住了它。其實平時所稱的“語文”是“漢語文”的簡稱,只因在中國最廣大區域分佈的是全國最廣大民族——漢族。而如果有人去邊疆自治區的話,或許還會看到“藏語文”(由某在藏地的初中同學口中得知)等。

解決了爲何叫語文,那麼就有了下一個問題:漢字千千萬萬,爲何選取“語文”二字?

對這個問題某依然不知全國的情況會如何,但是自己同學中知曉上個問題答案的人大多知曉這個問題的答案:“語文”是“語言文字”的簡寫。但是,知道這個問題答案的人,卻並沒有多少人意識到對於漢語文來說,語言和文字其實是兩個東西:語言是說出的“話”,文字是寫下的“字”。

長期來我們受到西方的誤導,認爲文字只是語言的記錄形式,除此之外並無什麼意義。這樣的觀點在世界上得到了普遍的承認,爲何某卻“大言不慚”地說它是誤導?因爲世界上除了中國以及中華文化圈以外的地方用的全是純粹的表音文字(拼音文字)!

以英文爲例分析一下拼音文字:

英文一共26個字母,其中有元音字母aeiou共5個,輔音(半元音併入)21個。每個英文單詞均由這26個字母組成,正常情況下一個學習過一定時間英文的人看到一個單詞的拼寫就知道它改如何唸。

比如sig(不知道存在與否,隨手寫的)這個詞,看到它就知道當唸作[sɪɡ],但是完全不知道它的意義。如果想知道一個單詞的意義,便需要去查字典(活體字典或者書面字典)。

聽到一個英語句子或者單詞,學過一定時間英文的人便可以將其準確記錄下來——不論單詞是否以前見過或者記錄是否規範,至少記錄下來的東西可以在讀音上還原。

這就是拼音文字的特徵:文字(拼寫)記錄讀音,但是(不知道相關詞的情況下)從單詞的拼寫完全無法知道這個單詞是什麼意思。從這裏可以看出,對於拼音文字來說,牠們的書寫系統記錄的就是讀音,所以並沒有明顯的語言和文字的區別。這也就是“文字只是語言的記錄形式”這一觀點產生的根本原因。

英語文中一個現象(或許是偶然)與上述觀點不謀而合:它有語言這個詞(language),但是卻沒有文字這個詞(spelling是拼寫;writing是書寫,與spelling類似但更側重“寫”一些;character雖然也譯作文字但實際上是字符)。不知道歐洲其他語言是不是也是這樣,但是“語言學”管文字卻是真真切切發生的事情。

回到漢語文上來。這樣一分析拼音文字我們就會發現漢字並不是這樣的模式:漢字的每個字均有其意義,並不是單純的聲音記錄符號。而漢字與漢語的關係也與此不同:漢語中同一個音往往對應許許多多不同的漢字。

正是緣於此,進行漢語文的學習絕不能照搬英語文學習的方法。然而由於近代以來長久的歐洲中心論以及逆向種族主義的影響,我們的許多觀念錯了位,最終造成了現今的狀況。某願盡綿薄之力參與扶正華夏文明的事業,也希望諸位能及時指出錯誤以免危害後世。當然,無理由的口號性質“批評”某會當作耳旁風,還請諸君自尊自愛一些。

在後文中,某將儘可能保證文中的“語”“文”運用準確,對於總稱的地方寫作“語文”,皆可的地方用更傾向的說法並在括號中寫上另一說法。

自記初習Qt

百無聊賴,於是就拿出Qt Creator來學一下Qt(C++)。若有錯誤,還望指正。


Qt使用標準的C++,只是加入了預處理器(moc)以及一些宏。這就意味着可以使用任意的C++編譯器來編譯Qt程序。

文件

Qt圖形界面程序一般有三個文件,通常狀態下後綴名爲:.ui、.h、.cpp。

.ui文件是界面的設計文件,本質是xml文件。在構建時會依據其產生一些源文件以進行編譯。

.h文件是標準的c++頭文件,內部包含各類聲明等內容。需要特別注意的是,如果要使用Qt的信號/槽機制,需要在類聲明代碼塊首部分加入Q_OBJECT宏。

.cpp文件顯然是普通的C++程序源代碼。

從預設的組織結構看,Qt中的.h文件中僅僅寫聲明,定義在相應的.cpp文件中書寫。這點看起來比微軟的VS中那些亂七八糟的強許多。

然而打開進行編譯的臨時目錄,其中依據.ui文件自動生成的.h文件中卻包含了一些定義。不過這似乎是有意爲之,而且沒有直接暴露在編程者面前,也算是很不錯的做法。

信號/槽

相傳Qt最引以爲傲的就是它的“信號/槽”機制。該機制是一個解耦程度極高的組件通信方案,允許組件間在互不相知的狀態下進行通信。

如名稱所示,“信號”表示發送消息的部分,“槽”表示接收消息的部分。當一個信號發出時,其相關聯的槽會被立即(實際上仍有極其微小的延遲)調用。

信號或者槽連同它的參數類型表,一起被稱爲其“簽名”,意即其標識。Qt通過簽名類辨識信號或槽,也通過簽名來判斷一個信號是否能和槽相關聯。事實上,一個信號可和多個槽對應,一個槽也可和多個信號對應,甚至信號也可以引發另一個信號,這也就爲編程帶來了極大的靈活性。

爲了便於編程,Qt已對其組件(例如PushButton)定義好了一些信號(例如“按下”),編程時可直接使用。

信號

信號是一個不需要定義的函數。它應當在類中聲明,並在代碼中被引發。

聲明信號,只需在類聲明中寫入

signals:
    void 信號名( 參數類型表 );

除了聲明方法不同以及槽可以用於信號/槽機制通信外,槽的一切均和普通函數一致。

聲明槽,應當在類聲明中加入:

訪問方式 slots:
	返回值類型 槽名( 參數表 );

之後在相應的.cpp文件中定義即可。

其中訪問方式可爲public、protected、private中任一種,並會導致槽的作用域不同(和C++標準概念中一致)。

關聯信號和槽

關聯信號和槽的通常做法是

connect(發送者, SIGNAL(信號(參數類型表)), 接受者/*即槽所在*/, SLOT(槽(參數類型表)));

其中SIGNAL和SLOT均爲宏,其參數中實際上要寫的是信號或者槽的簽名。之前說過,我們可以將一個信號和另一個信號關聯起來,這只需將上面的槽換成信號即可。

其中信號的參數可以比槽的多,多餘的部分在槽被激活(調用)時會被忽略掉。

實際上,關聯信號與槽的方法還有一些變體,具體可參考我的這篇文章。

解除信號和槽的關聯

解除信號和槽的關聯需要用到disconnect函數,其使用方法和connect幾乎一致:

disconnect(發送者, SIGNAL(信號(參數類型表)), 接受者, SLOT(槽(參數類型表)));

實際上,該函數中除了發送者外,其餘部分均可以填“0”,表示“任意”。

手動發送信號

有時候Qt自帶的信號無法滿足我們的需求,這時候我們就需要知道如何手動發送自己定義的信號。

手動發送信號,只需要在想要發送信號的地方使用emit關鍵字發送你的信號:

emit 信號( 參數 );

實際上,emit是一個宏,並且其內容爲空。這也就意味着完全可以不使用emit來發送一個信號。但是個人推薦使用emit來明確標識這是一個信號。