2019年2月15日 星期五

測試函數

測試函數


Ching-Tang Tseng
Hamilton, New Zealand
16 February 2019
ilikeforth@gmail.com
http://forthfornight.blogspot.com



我自建浮點運算系統、自建函數,建成之後,首先碰到的問題,就是會問自己建的到底對不對?

測試函數就成了自建系統後的必要工作,否則日後的應用會連自己也未必相信計算結果確實可靠。有許多人討論過測試方法,甚至於提供測試程式,但我鮮少利用,道理無它,那些資源,怎麼看都覺得薄弱不堪、有所欠缺。

我自覺比較可靠的測試方法,就是應該簡化成:直接取得一序列的函數值,直接繪圖顯示結果,目視就能判斷函數的功能正確與否。

不幸,我們通常使用的 FORTH 系統,發展的初始階段,通常不具有能夠順利繪圖的功能,因此,不易順利達到這樣的測試目的。

我在進入 64 位元環境後,全面改用 Linux 作業系統,使用 Lina64 作為解決問題的主要工具。取得的原始系統,除了沒有浮點運算的功能外,也沒有繪圖的功能,若要完成自己認定的打算,確實困難。

羅馬城不是一天建成的,我所使用的工具,更不是一到手就擁有一切。欠缺的功能,我慢慢地建,可用的資源,我慢慢地找、慢慢地試。整個系統沒有已經發展完成的一天,也沒有絕對完美的結果,並不是只有 Lina64 才是這樣,過去,我曾經用過的所有 FORTH 系統都是這樣。這是 FORTH 的本質,它恆在發展,沒有止境。

這次,我想完成以繪圖結果測試函數的程式。而且,我希望能夠辦到只執行一個 main 指令,系統就能完全自動達到目的。需要人工調整的工作,充其量,於測試不同函數時,可以只在程式中,重設測試上下限與函數名稱。 

這樣的要求,繪圖函數必須可由 FORTH 系統自己控制。也許需要透過一個數據檔案來傳遞大量函數值,因此就需要一套由 FORTH 自己設計出來的檔案操作程式。除此之外,FORTH 系統也要能夠將一序列的函數值自動存進檔案。 

這不是一般淺顯的程式設計問題,設計時,有一序列的規矩要遵循,能完成工作便是萬幸。

我從網上剪貼了單張常見的函數曲線圖,來源網頁已不可考,這張函數圖單純的只是用來供作自己體會函數圖形的樣式而已。希望在完成這份貼文時,能有我自己的發展成果。換句話說,程式我還沒有寫,但我心中早有腹案,我有自信能夠完成。





幾個測試成果:

























我自創的這套測試方式,由多個分開的檔案,分工做事,再總合於單一個檔案完成測試:

首先在數據產生程式 datagen.f 中,設定指定測試範圍與函數名稱。

無論測試範圍為多少,全部先行劃分成 1000 個點,然後計算出函數值,轉存入一個叫做 data.txt 的純文字數據檔案。

最後,將這個只有 1000 組數字的純文字數據檔案,交給繪圖程式 oneset.py 直接讀取使用,立即繪出圖形。

上述三個檔案的執行程序,可以在 Lina64 系統中,直接使用單一個叫做 main 的程式,總管所有的工作,一氣呵成,測試速度非常快,成果一目了然。

這些函數圖,都可以在程式中,先行修改、編寫出三項設定( 1. 在數據產生程式中給予指定測試範圍及 2. 測試函數名稱,3. 更換繪圖程式中的抬頭名稱。)後,只執行 fload main 載入程式,不用再作其他任何事情,一秒鐘內就完成顯示。

這樣的測試性能,除了表示 FORTH 程式語言的特質足夠優良外,更該感謝 Lina64 系統的設計者:Albert ven der Host,他建立了作業系統與 Lina64 之間的健全關係,否則,我不可能如此輕易地實現這樣的構想。

我在全程的測試過程中,曾經發現過許多問題,立刻回頭修正設計,拖了幾天,才在此貼出圖示成果。

回顧文首所述,別的測試方法,總令我覺得薄弱不堪、有所欠缺。這些顯示了設計得足夠健全的函數圖,是曾經歷過顯示不太健全後,回頭修改原始程式才完成的,這就是這種測試方法的妙處。不是所有的 FORTH 系統都具有這樣的性能,這也是為什麼目前我堅持只用 Lina64 FORTH 系統的主因。


展示完全正確的函數圖,不稀奇,也不能凸顯我所強調之測試重點的好處到底在那裡?

好處是透過這種技術,我就擁有常人不易獲得的可貴瑕疵對照圖。在這次發展這個技術的過程中,我獲得了許多這方面的寶貴資料,為數眾多,我單舉一例說明:


我在設計對數函數時,根據硬體數學運算處理器的基本工作原理,應該首先設計出以 2 為基底的對數函數 lb,它算是一個最基本的原生函數。隨後,以指數 e 為基底的對數函數 ln,及以 10 為基底的對數函數 log,才以次生函數的方式產生出來。

很不幸,我在進行測試時,顯示了下列這樣的函數圖。大部份函數值都是正確的,但出現了七個奇點,在這七個奇點的附近,函數值不正確,令我感到非常遺憾。




經過一番掙扎,不斷地驗證,耗了我八天的時間,我才再度確定原來所使用的演算法完全沒有問題。最後,只好強行在程式中插入了每次都將演算結果列印出來的審核程式,終於看到了出問題的地方,就只是最後一回的計算。於是,我確定了問題的根源,僅只是我自訂的演算極限最小值 epsilon 設定得不合理,原始的設定值是 1.0 * 10 ** -17 ,修正為 1.0 * 10 ** -16 後,所有的 lb 函數值就完全正確了。

一個 64 位元能表示的單整數是 19 位數:

-1 1 rshift .
9223372036854775807  OK
-1 1 rshift nlg .
19  OK

我憑此設計浮點數的四則運算時,必須犧牲一位數,也就是最精確值最多只能為 18 位數。有些函數於演算出函數值時,可能需要上百次的回算,系統中許多地方都要使用到的計算下限 epsilon 便不宜設定為太接近極限邊緣之負的 17 次方,必須再少一位數而為負的 16 次方。

數學運算處理器是使用 80 個位元來演算出結果,自然能比我只用 64 位元的演算結果更為精確幾位數。

我設計自己的浮點系統,其目的不在與硬體數學運算處理器的性能比高下,硬體製造廠商不會給我們詳細的演算技術資料,你只能跟著使用手冊中的說明,下命令來得到結果。

我若強行使用 128 位元來設計浮點系統,結果當然就能比硬體的好,但這不是我研發的目的,我的目的在要求自己完全能用純粹的軟體技術達到目的,我辦到了。

這樣的測試,是對自己設計之系統的最佳肯定方法,此後便能大方使用這套系統於數學計算方面的各種應用。我不想再浪費時間介紹自己的設計,我只想活用整套系統。因此,本網頁將暫停貼文,以便自己能有更多的時間研發我有興趣的問題。







2019年2月1日 星期五

春節摸彩程式展示

春節摸彩程式展示


Ching-Tang Tseng
Hamilton, New Zealand
2 February 2019







過年了,有個負責華人組織的朋友,請我設計一個亂數抽獎程式,在春節聯歡會上使用,今年的除夕是 2 月 4 日。我答應了,而且耗費了不少時間才落定程式。

本來,一個簡單到直接執行 『 100 rand . 』 就能解決的問題,何須如此大費周章地設計程式?

實踐才是檢驗真理的唯一標準,不要以為問題很簡單,就輕率地回答這個問題。身體力行做事情,才能真正體會出必須設計這個程式的道理。

在我個人現行使用的 FORTH 系統中,亂數產生程式是我自行建立的,建立的方法,以前在網文中已經談過許多次,這篇文章不擬再次討論,這一次,討論正確使用亂數的方法。

拿春節摸彩情況的實際要求,檢驗亂數產生程式的效果,很快就能發現,直接使用產生亂數的函數指令,不能解決抽出的獎號不得重複的問題。

假設參與抽獎的人數總共為 100 人,100 是個隨意假設的數字。在我自己設計的系統中,直接執行『 100 rand . 』,可以得到一個介於 0 到 99 之間隨機出現的數字。理論上,如果真夠隨機,那麼,執行 100 次這樣的指令,就能得出 100 個以混亂狀態出現的整套數字。在評鑑亂數產生程式的術語上,稱這種現象為『全週期』,也就是每個該出現的數字都出現過了。

我們在使用亂數產生函數 rand 時,必須認真看待它的性能,直接用,不會有全週期,亂用,甚至可能會遭遇到亂週期或根本沒有週期。產生這種現象的起因,在於亂數產生程式是根據系統單整數的處理範圍而設計的,基本上,它只在一個單整數的範圍內盡量的亂,然後才提供給別的場合使用。這麼一來,在 0 到 100 的範圍內以 rand 取得亂數時,所得亂數,算是次生亂數,不是原生亂數。

次生亂數的產生規則,有人採用只取原生亂數的最後幾位數字來獲得,單純地只用 mod 運算,就能達到目的。也有人採用只取原生亂數的前幾位數字來獲得,單純地使用 um* nip 運算,也能達到目的。這樣的產生規則,就造成了上述抽出獎號會重複的問題。舉取前兩位數字的例子來說,原生亂數在 64 位元的系統中為 18 位數,太多了,表示不便,我們改以只有五位數來等效說明,那麼,凡為 37xxx 的數字,如: 37125, 37998, 37452, ...等等等,總共有一千個,實際上是 18 位數,那就更多了。經過 100 rand 處理後,都會只得 37 。如此一來,原生夠亂的亂數,這樣使用,就不亂了。

我在實踐程式設計時,遭遇到這樣的問題,於是設計了解決問題的程式,其核心執行的部份,仍然使用 rand 亂數函數,這是一個活用亂數產生程式 rand 的實用範例。

最終落定的程式,使用了恰當的指令名稱,並標示指令執行前後,堆疊上數字的變化需求。因此,下列程式的執行內容,不需要解釋。總抽獎人數,就是那個可以被調整內容的 setting 變數,程式現成設定為 100 。



100 value setting

: LuckyArray
  create 1+ cells allot ( n -- )
  does>  swap cells  + ( n -- addr )
;

1000 LuckyArray table

0 value NewNumber
0 value LuckyAmount
0 value flag

: review ( -- )
  0 to flag    
  LuckyAmount 1+    1 
  do 
     NewNumber   I table @    =
     if -1 to flag   leave then 
  loop ;

: unique ( -- n )
  begin 
     setting rand 1+ to NewNumber    
     review    flag    0=
  until 
  1 +to LuckyAmount    
  NewNumber LuckyAmount table ! 
  NewNumber ;

: ListTable ( -- )
  cr 
  setting 1+ 1 
  do 
     i table @ 4 .R 
     i 10 mod 0=  
     if cr then 
  loop 
  cr ;

: reset ( -- )
  0 to NewNumber   0 to LuckyAmount   0 to flag
  setting 1+ 1 
  do 
     0 i table ! 
  loop
;

: >table ( n -- )
  1 +to LuckyAmount    LuckyAmount table !    
  ListTable 
;

: test  ( -- )
  reset 
  randomize
  ListTable cr cr 
  setting 1+ 1 
  do 
     unique drop 
  loop 
  ListTable cr cr
  reset
;

: main ( n --  ) 
  page    randomize 
  1+ 1 
  do 
     unique dup . (.) 
     400 ms 
     girlsay 
     key drop
  loop 
  ListTable
;

\ Usage:
\ 1. reset or test
\ 2. 3 main




上列程式完成測試後,我接受了新的設計要求,程式的執行畫面,必須在現場以投影機放大,顯示在螢幕上。抽出得獎的數字,應該同步以語音輸出。另外,需要配上前置簡短音樂,博取效果。

數字顯示時,同步以語音輸出,是我的系統原本就已擁有的性能,很容易完成。

顯示數字如果仍只採用慣常的顯示方式,字太小了,不夠清楚。於是,我花了點時間在網上搜索,安裝了一個簡易的大號字體顯示軟體,效果不是很好,但可以比不用時清楚。

每次抽出號碼前,都希望配上一些簡短的前置音樂,要尋找這樣的資源,比較耗時間。我在網上過濾了超過一千首以上的音樂,才勉強取得夠用的資源。後來,還試著自行擷取貝多芬第五交響曲中大約五秒鐘的震撼音樂,耗費了一些時間,完成設計。

FORTH 原本就是一種適合應用於即時控制的程式語言,文首的影音展示,告訴大家這樣的效果。但是,被控制的資源,不是 FORTH 的範疇,而且,網上擁有無數個能被這樣控制的資源,所以,它們都不在此處專門介紹。




2019年1月15日 星期二

因數分解美國總統


因數分解美國總統


Ching-Tang Tseng
Hamilton, New Zealand
16 January 2019
ilikeforth@gmail.com

這是一個展示能從傳統 FORTH 程式叫用 BASIC 式程式的精簡範例‧

題目很簡單:就是把英文字串的碼加總起來,當作該字串的特徵值‧然後,將此值進行澈底地因數分解,最後,列印出以全部質數連乘方式表示的結果‧

提供程式所需資料的來源,採用易於取得的歷任美國總統姓名作為輸入字串‧第 0 筆資料則故意安排為本文作者的姓名‧

為了顯示 FORTH 程式語言的傳承效果,本文刻意採用 35 年前(1983)古聖先賢 Martin Tracy 在其設計之 APPLE II MicroMotion FORTH-79 系統中的創作,來設計字串陣列的結構‧這樣的資料結構,照樣能適用於 35 年後今天正在使用中的 64 位元 Lina64 系統,此一特性凸顯出傳承效果的可貴‧資料結構的設計方法不是僅此一種,採用這樣的設計,純粹只是為了程式使用時很方便所做的選擇‧

由於提供程式使用的資料量有 46 筆,數量稍嫌過大,因此,將資料結構的宣告程式,以及全部輸入的字串資料,安排在另一個提供資料來源的 MartinTracyString.f 檔案中形成‧

從 factorize.f 主程式的內容中可以看得出來,BASIC 式程式的語法,有利於設計數學計算程式,但不利於設計字串輸出方面的程式‧因此,這部份的功能缺陷,仍然需要使用傳統 FORTH 的格式設計程式,然後,再在 BASIC 式程式中,強行利用 RUN 指令來執行 FORTH 指令,以達到彌補功能缺陷目的‧有些答案尾端帶有 * 1 的結果,那是為了美化輸出所做的例外安排‧

原始程式是全用傳統 FORTH 設計的‧原本執行因數分解的部分,由於閱讀困難,不易追蹤,因此,重新改寫成以 BASIC 方式執行的程式,程式便可一目了然‧後續主程式的部分,則完全不需改寫,也是其特色‧


1.      主程式 factorize.f


\ Designer: Ching-Tang Tseng
\ Date: 20190116, Hamilton, New Zealand

FLOAD MartinTracyString.f

VARIABLE LUCKY

5 integers N D P Q R

: FACTORIZE ( n -- )
  [[ N ]] !
  BASIC
\ 10 print " Enter integer number to be factorized "
\ 20 inputi N
30 print " " ; N ; " = "

\ Test if multiple of 2
40 let R = 2
50 let D = N mod R
60 if D = 0 then 80
70 goto 110
80 run R . ." * "
90 let N = N / R
100 goto -50

\ Test if multiple of 3
110 let R = 3
120 let D = N mod R
130 if D = 0 then 150
140 goto 200
150 run R . ." * "
160 let N = N / R
170 goto -120

\ Test of divisors 6P-1 and 6P+1 up to sqr(N)
\ Prime numbers are of the form 6P-1 or 6P+1
200 let Q = sqrt ( N ) + 1
210 for P = 6 to Q step 6

220 let R = P - 1
230 let D = N mod R
240 if D = 0 then 260
250 goto 300
260 run R . ." * "
270 let N = N / R
280 goto -230

300 let R = P + 1
310 let D = N mod R
320 if D = 0 then 340
330 goto 400
340 run R . ." * "
350 let N = N / R
360 goto -310

400 next P

500 if N > 1 then 530
510 run 1 .
520 goto 600
530 run N .

600 end ;

: STRING>PAD>NUMBER  ( addr cnt -- n )
  PAD 80 BLANK
  >R PAD R@ CMOVE
  0
  R> 0
  DO PAD I + C@
     DUP 32 =
         IF DROP ELSE + THEN
  LOOP ;

: MAIN ( -- )
  46 0                          \ 46 is adjustable
  DO
    I USP STRING>PAD>NUMBER LUCKY !
    CR ." ( " I . ." ) " I USP TYPE
    LUCKY @ FACTORIZE CR
  LOOP ;

 
2.      提供數據來源的資料程式 MartinTracyString.f


\ String array designed by Martin Tracy
\ APPLE II MicroMotion FORTH-79, Martin Tracy, 1983
\ Modified to fit AMDX86 ciforth 5.3.0 (Lina64), 20190116

: SARRAY ( cnt n -- )   \ cnt characters/array, total n arrays                 
  CREATE 1+ 0                                   ( cnt n -- )
  DO DUP C, 0 C, DUP ALLOT LOOP DROP
  DOES> DUP C@ 2 + ROT * + 1+ COUNT ;           ( n -- addr cnt )

: S! ( addr1 cnt1 addr2 cnt2 -- )                  
  DROP DUP 2 - C@
  ROT MIN >R DUP 1- R@ SWAP C! R> CMOVE ;

80 100 SARRAY USP

\ 0
S" Ching Tang Tseng"         0 USP S!

\ 1
S" George Washington"        1 USP S!

\ 2
S" John Adams"               2 USP S!

\ 3
S" Thomas Jefferson"         3 USP S!

\ 4
S" James Madison"            4 USP S!

\ 5
S" James Monroe"             5 USP S!

\ 6
S" John Quincy Adams"        6 USP S!

\ 7
S" Andrew Jackson"           7 USP S!

\ 8
S" Martin Van Buren"         8 USP S!

\ 9
S" William Henry Harrison"   9 USP S!

\ 10
S" John Tyler"              10 USP S!

\ 11
S" James K. Polk"           11 USP S!

\ 12
S" Zachary Taylor"          12 USP S!

\ 13
S" Millard Fillmore"        13 USP S!

\ 14
S" Franklin Pierce"         14 USP S!

\ 15
S" James Buchanan"          15 USP S!

\ 16
S" Abraham Lincoln"         16 USP S!

\ 17
S" Andrew Johnson"          17 USP S!

\ 18
S" Ulysses S. Grant"        18 USP S!

\ 19
S" Rutherford B. Hayes"     19 USP S!

\ 20
S" James A. Garfield"       20 USP S!

\ 21
S" Chester A. Arthur"       21 USP S!

\ 22
S" Grover Cleveland"        22 USP S!

\ 23
S" Benjamin Harrison"       23 USP S!

\ 24
S" Grover Cleveland"        24 USP S!

\ 25
S" William McKinley"        25 USP S!

\ 26
S" Theodore Roosevelt"      26 USP S!

\ 27
S" William Howard Taft"     27 USP S!

\ 28
S" Woodrow Wilson"          28 USP S!

\ 29
S" Warren G. Harding"       29 USP S!

\ 30
S" Calvin Coolidge"         30 USP S!

\ 31
S" Herbert Hoover"          31 USP S!

\ 32
S" Franklin D. Roosevelt"   32 USP S!

\ 33
S" Harry S. Truman"         33 USP S!

\ 34
S" Dwight D. Eisenhower"    34 USP S!

\ 35
S" John F. Kennedy"         35 USP S!

\ 36
S" Lyndon B. Johnson"       36 USP S!

\ 37
S" Richard Nixon"           37 USP S!

\ 38
S" Gerald Ford"             38 USP S!

\ 39
S" Jimmy Carter"            39 USP S!

\ 40
S" Ronald Reagan"           40 USP S!

\ 41
S" George H. W. Bush"       41 USP S!

\ 42
S" Bill Clinton"            42 USP S!

\ 43
S" George W. Bush"          43 USP S!

\ 44
S" Barack Obama"                   44 USP S!

\ 45
S" Donald John Trump"       45 USP S!

\ 46
S" Joe Biden"                     46 USP S!

3.      執行結果


ching@center:~$ cd lina64
ching@center:~/lina64$ ./f

AMDX86 ciforth 5.3.0
fload factorize.f
n : ISN'T UNIQUE                                               
D : ISN'T UNIQUE                                               
p : ISN'T UNIQUE                                                
 OK
main

( 0 ) Ching Tang Tseng
1396 = 2 * 2 * 349

( 1 ) George Washington
1659 = 3 * 7 * 79

( 2 ) John Adams
885 = 3 * 5 * 59

( 3 ) Thomas Jefferson
1550 = 2 * 5 * 5 * 31

( 4 ) James Madison
1211 = 7 * 173

( 5 ) James Monroe
1120 = 2 * 2 * 2 * 2 * 2 * 5 * 7 * 1

( 6 ) John Quincy Adams
1518 = 2 * 3 * 11 * 23

( 7 ) Andrew Jackson
1322 = 2 * 661

( 8 ) Martin Van Buren
1420 = 2 * 2 * 5 * 71

( 9 ) William Henry Harrison
2075 = 5 * 5 * 83

( 10 ) John Tyler
927 = 3 * 3 * 103

( 11 ) James K. Polk
1023 = 3 * 11 * 31

( 12 ) Zachary Taylor
1357 = 23 * 59

( 13 ) Millard Fillmore
1535 = 5 * 307

( 14 ) Franklin Pierce
1421 = 7 * 7 * 29 * 1

( 15 ) James Buchanan
1296 = 2 * 2 * 2 * 2 * 3 * 3 * 3 * 3 * 1

( 16 ) Abraham Lincoln
1403 = 23 * 61

( 17 ) Andrew Johnson
1344 = 2 * 2 * 2 * 2 * 2 * 2 * 3 * 7 * 1

( 18 ) Ulysses S. Grant
1397 = 11 * 127

( 19 ) Rutherford B. Hayes
1679 = 23 * 73

( 20 ) James A. Garfield
1405 = 5 * 281

( 21 ) Chester A. Arthur
1459 = 1459

( 22 ) Grover Cleveland
1539 = 3 * 3 * 3 * 3 * 19

( 23 ) Benjamin Harrison
1642 = 2 * 821

( 24 ) Grover Cleveland
1539 = 3 * 3 * 3 * 3 * 19

( 25 ) William McKinley
1515 = 3 * 5 * 101

( 26 ) Theodore Roosevelt
1789 = 1789

( 27 ) William Howard Taft
1731 = 3 * 577

( 28 ) Woodrow Wilson
1389 = 3 * 463

( 29 ) Warren G. Harding
1441 = 11 * 131

( 30 ) Calvin Coolidge
1411 = 17 * 83

( 31 ) Herbert Hoover
1343 = 17 * 79

( 32 ) Franklin D. Roosevelt
1898 = 2 * 13 * 73

( 33 ) Harry S. Truman
1278 = 2 * 3 * 3 * 71

( 34 ) Dwight D. Eisenhower
1778 = 2 * 7 * 127

( 35 ) John F. Kennedy
1233 = 3 * 3 * 137

( 36 ) Lyndon B. Johnson
1475 = 5 * 5 * 59

( 37 ) Richard Nixon
1225 = 5 * 5 * 7 * 7 * 1

( 38 ) Gerald Ford
986 = 2 * 17 * 29

( 39 ) Jimmy Carter
1127 = 7 * 7 * 23 * 1

( 40 ) Ronald Reagan
1198 = 2 * 599

( 41 ) George H. W. Bush
1254 = 2 * 3 * 11 * 19

( 42 ) Bill Clinton
1114 = 2 * 557

( 43 ) George W. Bush
1136 = 2 * 2 * 2 * 2 * 71

( 44 ) Barack Obama
1060 = 2 * 2 * 5 * 53

( 45 ) Donald John Trump
1529 = 11 * 139

(46) Joe Biden
768 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 3 * 1 
 OK



2019年1月1日 星期二

組合語言在電腦中產生機器碼的程序




組合語言在電腦中產生機器碼的程序



Ching-Tang Tseng
Hamilton, New Zealand
1 January 2019
ilikeforth@gmail.com






中英文名詞對照參考:



組合語言檔案: Assembly language file

組譯器:Assembler

目的檔:Object file

連結器:Linker

可執行檔: Executable file

靜態庫存檔:Static library file

動態庫存檔:Dynamic library file

機器程式碼:Machine code



2019元旦賀卡:








我的個人網訊資料總整理:




貼圖且可供線上討論的網頁,進入後點選正中央上方的 blog,便可參訪已貼圖片。

https://youaregood0.wixsite.com/website/blog


極座標繪圖原理說明網頁

https://how-are-we.webnode.tw/


ABC FORTH codes 貼文網頁

https://abcforth.page.tl/


我的第一個 Bloggger 網頁:FORTH:慶的世界

http://forthfortnight.blogspot.com/


我的第二個 Blogger 網頁:Jingle

https://jinglezola.blogspot.com/


\\\\\\\\\\\\\\\\\\\\


skype帳號:曾慶潭ChingTangTseng

https://web.skype.com/en/


Twitter帳號:CT Tseng

https://twitter.com/


FaceBook帳號:曾慶潭

https://www.facebook.com/home.php


\\\\\\\\\\\\\\\\\\\\\\


我的信箱:

ilikeforth@gmail.com

zolajingle@gmail.com

chingtangt@yahoo.com.tw

youaregood@mail.com


\\\\\\\\\\\\\\\\\\\\\\



轉貼文章:


台大教授顏元叔的演講:

被西方和日本欺壓了50年的中華民族,是強國重要呢還是自由民主重要?

打開天窗說亮話,中國的前途不在台灣(什麼叫做“台灣經驗”?可笑!),中國的前途不在港澳,不在海外華人,不在舔洋人後跟的學運民運小醜,中國的前途在中國大陸,在那13億心含“鴉片戰爭”之恥,心含“八年抗戰”之恨的中國人身上!

他們衣衫襤褸地制造出原子彈、氫彈、中子彈,他們蹲茅坑卻射出長征火箭和載人飛船,他們以捏泥巴的雙手舉破世界紀錄,他們磨破屁股奪回整打的奧運金牌,他們重建唐山成為得到聯合國頒獎的世界模範市……同胞們,他們為的是什麼?沒有別的:他們愛我“中華”,他們不能讓“中華”再隕落!

為什麼美國人那麼愛美國,為什麼日本人那麼愛日本,為什麼有些走向“世界公民”(可笑的癡夢!)的中國人就不愛中國?

愛我中華,不再只是口號,不再只是情緒,而是要像大陸50年來,苦心孤詣、胼手胝足地幹,不僅流汗甚至流血地幹、幹、幹!把大慶油田打出來,把北大荒墾出來,把葛洲壩、攔江堰築起來……難以屈指的各種建設,無數的建設,把中國建設起來,這才是愛中國!

中國已經被熱愛了50年;她將繼續被熱愛,被那群建國者,真正的建國者,所熱愛著,我手邊這部大陸編《新英漢辭典》,這部大陸版《辭源》,編得如此周全,印制如此精致,細小的鉛字用放大鏡看都劃劃清晰,而且從來沒有看到一個錯字:我為他們的心血表現而發抖;而我們台灣,50年來,有哪一部英漢辭典不是翻譯、剪貼、日作的!(慚愧哪、台灣經驗!)。

他們一輩子吃了兩輩子的苦

大陸上的人說,他們一輩子吃了兩輩子的苦。痛心的話,令人傷悲,卻也是一句令人肅然起敬的話。試問:不是一輩子吃兩輩子的苦,一輩子怎得兩輩子甚至三輩子四輩子的成就?50年前中國落後西方百年,50年後還落後10年20年(基礎科學若干部門已與西方比肩,甚至超前)。這不是一輩子吃兩輩子苦成就的? 50年前中國參加奧運亦總是扛著零蛋回,50年後中國的奧運成績已經揚名世界。誰敢再說中國人是“東亞病夫”?這就是“吃兩輩子苦”的成就!

我的老同學傅孝先留在大陸的姐姐,是搞化學研究的高級科學家,52歲就死了,是活活地給研究工作累死的!累死,多值得的死ㄚ!她不累死,千千萬萬的她與他們不累死,中國科學怎麼能迎頭趕上西方?中國的科研怎麼能出人頭地?“革命不是請客吃飯”,建設文明打造科教也是要死人的!尤其是要“超英趕美”搞建設;而不“超英趕美”,永遠跟在英美之後吃英美屁,中華怎麼振興、怎麼出頭? 所以50年來,中國大陸是“煉獄”。什麼是煉獄?就是經過火的洗禮,能夠升入天堂。

過了50年的苦難

中國過了50年的“煉獄”苦難,是過有提升功能的苦難,是過有建設性的苦難,是追求成就的苦難。 就像你要考上台大而一年不看電影的苦難,程度不同,性質則一。吃得苦中苦,方為人上人。苦出頭來的中國人,如今在人類中已經嶄露頭角了。所以50年的苦難不是負面的、消極的、毀滅性的;它是中國的大蛻變,政治蛻變、社會蛻變、精神蛻變(現在的中國人不再是“差不多先生”,而是競泳則爭半掌之長,射衛星不出毛病的“精準先生”了)。

我們在台灣,僥幸也不僥幸地躲過了這場“煉獄”的煎熬,50年隔岸觀火躲過了這場火的洗禮。就個人的福利言,我們是幸運者;就重建民族國家的責任言,我們是十足的逃兵!我們就像肢體殘障者站在路邊,看著一隊隊的男女好漢走上戰場,看著他們的屍體被抬回來,或者看著他們流血呻吟地爬回來,裹好創傷又沖上去。我們呢,隔岸觀火;而他們呢?他們拼搏,他們打仗,他們打的是我們的仗,打的是150年來的民族復興之仗,打的是為全體中國人爭一口氣的仗!而我們呢?我們還在訕笑他們的廁所沒有門,訕笑他們的所得低,甚至視他們為仇敵!我們究竟是什麼?是一群沒有良心的市儈?還是一群沒有人性的畜牲?

“中國之光”中國人共用

然而一個民族國家的羞辱,像霧一般落下來,中國人誰也無可取捨,你非承受不可(就算你入了美國籍,認同美國,為美國去中東作戰;你若戰死,你的仆告中仍然是“美籍華人”,而不會像別人一樣成為“美國人”)! 何必騙自己啊,昨日今日以及今後的三五萬日子裡,民族主義還都是當令的食品,不認同自己的民族只有做異族之奴。同理,一個民族國家的榮譽,也是無可取捨,它會像太陽一樣,你非被照射到不可。中國今後的光榮、苦盡甘來的光榮,你是無法拒絕而非接受一份不可,連反中國的中國人也將同浴于中國的光輝中!這就是說,我們在台灣的中國人管你是台獨、獨台、或統派、或無黨無派,一旦生為中國人,今後你將分得一份“中國之光”。

雖然我們沒有為這“中國之光”的誕生做出什麼貢獻;無功受祿,我們實在太僥幸了!僥幸之餘,我們至少要“吃果子拜樹頭”吧?總不能吃了果子,又對那棵樹冷嘲熱諷或視之為敵吧。這是什麼樣的一種肥心症、象皮病?

中國的問題很複雜,其實也很簡單,簡單得只有一個字:幹、幹、幹!多加三個字:苦幹、實幹、硬幹。因為中國缺乏的就是成就,要成就只有幹。幹、說來容易做來難。個人想幹、個人有惰性;團體想幹、團體會渙散。這時候,你自己擺脫不了惰性,就得有人鞭笞你;團體反側於渙散,就得有人嚴加管束。其實,就像你考大學,你自己督促不了自己,就得有師長有父母在後面鞭策,甚至補習班鞭策也是應該的,假使你想考上大學,而考上大學就是一切!就中國言,建設國家就是一切!於是,在中國的問題上,你就知道為什麼有集體主義之必要、社會主義之必要、權威專制之必要!

當然,假使中國有一萬年的悠閑時間來完成它的現代化,那麼一切慢慢來,隨各人今天做一點明天做一點,一萬年做不成,十萬年總可以做成吧。

可是,中國原已落後,而這是一個競爭白熱化的世界,我們哪能悠閑呢?我們不僅要快,而且要比別人快;不快不足以競爭,不比別人快不足以超速度迎頭趕上,而這就更顯出專制、集體、極權之必要!因為,只有這種精神,這種體制,才能團結一切的人,團結一切的意志,一切的力量,眾志成城,萬眾一心,處處攻關,力成大業。

就算是西方人笑諷中國人是“藍螞蟻”, 中國人為建國卻也必須要做“藍螞蟻”,必須是千千萬萬的藍螞蟻,像螞蟻一般單純一致,才能造就出比我們個人大千千萬萬倍的大堤壩。再造中華,必須是每個人捐棄一己之見,乃至捐棄一己之身,為的是中國這個大堤壩的建成。

要講求個人意志,要講求個人欲望,個人利害,必然是蟻群四下潰散,永遠建不成任何東西!而中國就是要建設,要成就;這就是此刻的中國!

我膽敢高呼:反民主!反自由!反西方民主!反西方自由!

抽象地說,自由民主絕非絕對之善;而落實在歷史的流程中,對此時此地的中國,它們絕對是相對之“惡”!因為,自由只會使中國渙散,民主只會使中國崩潰。有人也許會譏笑:中國人為何如何可憐,竟然承受不了自由民主之“福”!

我要反問以這種西方價值為價值的人:自由有什麼了不起!民主又好在哪裏!日本、德國的稱雄,是它們的民主自由超過英、美?英國如今衰微了,是它的自由衰微?民主衰微?美國今日超強,是它的自由超強?民主超強?而美國的自由民主擴散開來,正好變成美帝國主義的原動力!

不是煙草資本家有剝削的自由,台灣怎麼會變成美煙的垃圾場?“鴉片戰爭”還不是一個君主立憲篤信基督的英國做出來的“撒旦之戰”!而最重要的關鍵是:這些東西對中國有什麼好處?

曾經有學生問我:老師,中國民主重要還是強大重要? 我說:廢話,當然強大重要。

中國若不強大,而中國自由民主了,中國可沒有什麼東西可以保證,中國不還是清末民初一樣的中國、不還是次殖民地的中國、不還是“華人與狗不得入內”的中國!所以,中國人必須以一條褲帶束緊千萬億腰杆,中國人才得以自中國近代史中解放!自列強的囹圄桎梏中解放!中國才得以復興強大!

拿破侖早已叮囑西方世界,“讓這條龍睡吧,他一醒來,西方世界就麻煩了。”

西方人早已充分了解這13億“藍螞蟻”眾志成城的可怕,於是他們用“自由民主”的口號,不擇一切手段的分化、打散、切割、制造我們的內在矛盾,讓我們自己互相抵消。一些可憐可鄙亦可悲的蠢才,連這點簡單道理都看不透,一味地接受西方價值,試圖分裂中國,為西方的終極利益服務……讓西方繼續為世界之主,中國為奴,而尚自以為是為了中國好。

我告訴你們:

當西方人對你翹起拇指叫“好”時,你已是一個不折不扣的賣國賊!

除了你們這一小撮豬油蒙心的小醜之外,天下任何聰明人都深知“人不自私,天誅地滅”——民族利益就是我們最大的私;而為國自私,更是西方帝國主義的當行本色,美國人更是如此。

世界已被西方帝國主義dominate(主宰)二三百年,心頭被殖民的洋奴們、台灣的“日本人” 、香港的“英奴”們,難道你們的“婢妾惰性”如此深重,如此安於為奴現況,不想抬頭挺胸當主宰?

中國人要在世界之屋脊上

強大自主的中國這條路,中國會勇往直前的繼續走下去!中國已經強大,明日的中國也會更將強大;反省我的愛國情操,似乎濃烈得近乎瘋狂;其實,我只是一個“機會主義者”,只是一個識時務的人而已。歷史大趨勢這麼明明白白地擺在面前,我跟著它走,實在只是大潮流的跟屁蟲。但是,我樂於做這麼個小蟲子,因為今後中國歷史命運的完成,將正也是我一生夢想的實現;如今,我是每天喜孜孜的看著中國,把世界第一的金牌一塊塊摘下……。

PS: 看完這篇好觀念文章, 如您認為很有啟發強國思想, 請您廣傳吧, 祝福您