FORTH 活動
曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
16 November 2011
這個月的月初開始,我透過中華民國 Forth 語言協會的網站 FigTaiwan ,宣佈發起了一次 Forth 活動。主旨是讓參與活動者,能夠增進使用 Win32Forth 系統的能力,活動目標簡化成『語音輸出百家姓、千字文』。
訊息在上述網站刊出至今,我們已正式的活動了半個月,進展順利,我自己也從活動中獲得了許多益處。事實上,我們已令電腦中的 Win32Forth 系統將百家姓唸出來了。參與活動者能夠得到什麼東西?只能捫心自問,也可能只是垃圾一堆,請自己體會。
不幸,我抽空回頭檢視 FigTaiwan 網站固有訊息時,發現了宵小搞小動作的情況,許多過去曾經發佈過的 Forth 實作程式,被刻意的刪除了。今天,會發生這種事情,是早就在預料中的問題,我們必須面對社會上永遠存在的惡徒,做好準備工作。
我自己的網頁,自己完全能夠控制,資料都存在從來不上網的電腦中,這種作法,就是用來面對破壞問題的。 FigTaiwan 已經破壞的訊息,我可以在這裡逐步恢復。這次事件恰好給我一個機會,重新整理一些想貼出而不想拿掉的網文,第一篇,就是此次發起活動的公告,宵小刪除不掉,他的行為是自取其辱。
我就以控存資料從 1 開始的編號,一路恢復下去,將我想貼而不想被拿掉的網文,重新貼回我自己的這個網頁。
這一段是 2012 年存檔的舊文。
20131231 無恥之徒張燕南利用 FigTaiwan 網頁,指名道姓的胡扯我的事情,還敢硬傳給我。我就不客氣了,該向全世界講清楚就明白的講。很多 FORTH 高手早就跟我一樣,根本不對張燕南的任何網貼搭腔。再度見到這名網上惡徒的惡劣行徑時,該給他羞辱,不必客氣,否則,整個社群怎麼可能醒轉得過來?
經過了幾個月的靜候與觀察,我確定了搞小動作刪除我『發起FORTH活動公告』的宵小,就是 FigTaiwan 由陳爽安排的網管張燕南。張燕南之外,除了陳爽,沒有人有權力執行這個操作。陳爽,您會嗎?如果會,怎麼還來跟我活動?
我與國際友人仔細討論過網頁公司會否選擇性刪除資料的問題?大家一致回答,除非是違法資訊,那怕是妖佛圖或淫蕩照,公司必有行政規定,不能做這種事情,以免自毀信譽,甚至於租金未繳,網頁公司也絕不會選擇性刪文,懂吧?舉辦 Forth 活動公告,絕不違法。那麼,執行刪除 FigTaiwan 網頁內容的惡劣行為者,就是張燕南,絕非其他人,張燕南再拿任何藉口,解釋這是網頁公司的問題,絕對無人相信。
2012年起, FigTaiwan 是被一群喜歡散佈台獨謠言的惡徒所把持,陳爽是網頁的出資人,這一群人的行為令我作嘔。
我在經商期間,張燕南就不斷假藉 Forth 協會資訊管道,傳送各種算命圖片與妖佛照片,侵犯我的通訊郵箱,影響經商急件作業,那個年代,圖像、照片最耗記憶體,形成嚴重的問題,信箱爆滿時,每次打電話委請租用公司代為清理,一次要扣 15 元美金,屢次警告張燕南,他根本不理,迫不得已,我才發函請陳爽出面制止,竟然有效!後來詢問陳爽,他自己告訴我,根本就是陳爽出錢,顧了張燕南在 Forth 社群裡為非作歹,我卻只能被莫名其妙的告知他們亂來的關係。
從此之後,我熟記此人的惡劣行徑。此前,為了推廣 Forth ,我按捺住,沒找張燕南理論,但陳爽明確的知道此事,擺明了支持他為非作歹。張燕南在我開始使用臉書網頁時,曾要求與我連結,當時不疑有他,後來,家人與我共用網頁時,不耐煩於他經常亂傳台獨謠言新聞,主動將其刪除,我因不知此事,而將他重新連上,又過幾天,家人告知,他一直如此,我也只好由女兒教導,學會如何操作將這種宵小刪除連結的技術了,因不常做,最近又要做,仍得請女兒幫忙,不勝其煩。
四年前,我剛開始想學國際知名網站 comp.lang.forth 裡的 Forth 好手,也將有益的技術網文自行貼進 FigTaiwan 網頁,供大家永久參考時,試過許多次網貼操作,孰料難以如願,我曾在 comp.lang.forth 做過同樣事情,很容易完成。但兩相比較,完全不同,為何如此?
當時,這兩個網頁的操作功能完全相同,但 FigTaiwan 的貼網權力,是由張燕南把持著,我必須將全篇由 WORD 編版辛苦打成的底稿傳給張燕南,才能由他貼文,如此監管貼網權,我並不介意。但是,網文貼出後,竟然下標明示作者是張燕南,不介意也不行了,因為,大陸同胞看過我的個人網頁後,寫給我的來信中,強調那是張燕南已經貼過的著作,他們看過,我這個原作者反成了抄襲者,這種窩囊事情怎能用來教壞全體中國同胞?此事要在我後來貼文於自己的網頁,指明尊重創作權後許久,張燕南才自知無恥,而全面修改所有的舊版面。大家可以隨時回頭重新仔細閱讀張燕南在 FigTaiwan 曾經留下的網貼,他簡直就是一個連一句話都寫不清楚的網管,還敢竊佔我的創作,真是我的奇恥大辱。
今天,如果那一位熟手想到 comp.lang.forth 網頁上搜索 90 年代初期的任何舊資料,沒有找不到的可能。這一段我想導正社會風氣的不平之鳴,就順便教一教大家認識這種學習 Forth 的現代技巧,我以教訓惡徒張燕南的方式告訴大家,我自己有許多可貴的技術,來自那裡。您要是不信,現在就離開我的網頁前去實作,就算您學我這麼調皮,硬打一個『胡扯Forth』(『Babbling forth』)來搜索,該網站都能提供您一大堆有價值的資訊。但是,請看一看 FigTaiwan 網頁,能無恥侵犯別人的創作,惡意標示成為己有,要明指他丟臉後,才全面刪改舊資料的行為,只有 FigTaiwan 的網管張燕南才做得出來。 FigTaiwan 網頁因此就難以存在有用的資訊,甚至於舊垃圾也都不見了,就是這群惡徒使然。
陳爽出資資助他幹這種窩囊事情,為我所不恥,講不聽,只好收手不去貼技術網文了。我想,這許多年來,台灣大約也有許多好手,領教過這麼惡劣的網頁與網管,但都為了顧及日後 Forth 群體的發展與溝通,寧願忍氣吞聲,敢怒而不願言。難怪那裡不太容易見到有營養的內容。我個人有嫉惡如仇、擇善固執的壞脾氣,但並不鼓勵台灣的 Forth 同好跟我一樣,能忍受這些無恥行為的人,不必學我。
我在 FigTaiwan 網上還見過其他更多的惡劣現象,但若與我無關,便不想多言,侵犯到我,絕不客氣。
最近, 2012 年 8 月初,諶其騮也利用 Forth 管道,散佈台獨謠言新聞到我的臉書私人網頁領域,硬傳那種亂罵甚麼老蔣、小蔣的謠言新聞給我,我對亂罵任何人的訊息都沒有興趣,並表示這種訊息污染我的親朋好友視覺感受,於是網上當場制止,他還不理,一怒之下,想設法切除與他的連結,卻忘了該如何操作。搞了許久,竟然發現,不切他的連結時,瀏覽國際 Forth 論壇的操作,突然必須經過大陸簡體字的畫面才能前往,切除成功後就恢復正常,來往三次,屢試不爽。改試切除自己家人的連結,則無此現象,於是,警覺到諶其騮也有問題。
隔日澈底查驗他曾稱是好意,於 20110612 傳給我的一套所謂的 FORTRAN 科學程式庫資料夾,我收到下載後,仔細比對發現,資料夾的內容,實際上就是美國伊利諾州立大學網上公開供應的程式,那裡提供全套特殊函數的源程式,歡迎全球自由下載,好幾年前,我早就自己收集過了。諶其騮傳來的資料夾內,卻附帶了好幾個網頁自動執行檔,他未明說資料來源,只說是留學美國帶回來的,我深感困惑,為何要以這種方式解釋已經能夠自由遍佈全世界的資料?
我現在才因突然警覺而進行掃毒檢查,掃毒程式掃出了幾個病毒,殺光檔案,資料夾也清不掉。當初自己失查,曾將此資料夾複製到三台電腦內,這次,為了清理它,我花了一整天,心中難過無比。
這幾位老兄在 Forth 社群裡為非作歹,令我倒盡味口。諶其騮現仍從事於教書的工作,因此,我得請你特別注意自己的形象,萬勿在社會上自尋恥辱,讓自己在學生面前留下終身的難堪。如果你能乖乖的推廣 Forth ,不要以謠言新聞侵犯我,對於你的任何 Forth 發展打算與作為,就算我不想參與或支持,也絕對不會有任何異議。侵犯我,我就不客氣的回敬你。惡搞、散佈謠言新聞的人,怎能教得出正常的學生?
堂堂一個中正理工學院軍校畢業的陳爽,出資資助台獨思想濃厚的惡徒,在社會上為非作歹,他們在 FigTaiwan 論壇上,公開發言要刪我因反對以簡體字侵犯 FigTaiwan 網頁首頁而作的反擊言論時,別人看不順眼而支持我,並明白表示反對刪除,只剩大陸匪徒狂吠,記錄全都還在,陳爽竟然還公然表態要向匪徒靠攏,接受網頁淪陷,由簡體字控制。這樣的同學,比叛逃美國的張憲義還要令我覺得可恥,是從台灣本土直接出賣中華民國給台獨,我不恥與這幾個人為伍,他們把推廣 Forth 的組織搞成這個樣子,結果可想而知。
台灣的亂民越來越多,良民越來越少,亂民假藉民主而在社會上胡扯,高唱自由而到處亂來,不除掉他們,社會便永無寧日,國家將邁向滅亡。推廣 Forth ,原本單純,有了這些亂民,一切變色。
從無理刪除我的發起 Forth 活動公告,經我反應卻不處理,陳爽繼續放任這幾個亂民在社會上為非作歹之日起,我便下定決心,此後不再支持這批亂民任何事情。
今年開年會,為什麼只有那麼少的人參與?因為這個組織出了問題。陳爽為何要發信函通知我?年會議程中根本不安排我打算支持而提報的兩篇論文:『語音輸出百家姓、千字文』與『3D繪圖』,我也不知為何如此?欲成立那個組織之初,我最先提供身份證影本給陳爽,後來為什麼見不到我的支持?因為組織名稱根本不是中華民國之名,我不參加台灣推廣『什麼』的組織。當初我好心幫忙陳爽,打出一份籌款通知,準備邀請 Charles H. Moore 來台演講,結果騙了社會一筆款子, Charles H. Moore 在他自己的網頁上先向全世界公告,最後卻沒來,製造了國際笑話,我竟成了幫凶,誰該善了?這些事情,我看在眼裡,痛在心裡,不是只有我才難過,那麼少人參與年會,反應了甚麼事實?正人君子根本不想陪著你們亂搞。
惡徒必須搞清楚!這個世界,並不是只有你才有權力隨便侵犯別人,被侵犯的人,當然有權力把一切事實講清楚。我在網上為文的目的,不在揭發亂民的醜陋罪行,至少此前不肯這樣做。但對亂民的侵犯,則會毫不留情的反擊,這次就是。
不願與張憲義之流為伍者,就更不應與陳爽之流為伍。那怕他陳爽的 Forth 技術有多高超,我經常恭維,但我此後絕不再與這個無恥之徒談任何 Forth 技術,『萬事德為先,無德技為零』,這是我的堅持。以後,陳爽您可以專教台獨,希望您會因此而發達。張憲義賣國還得美金,您得甚麼?恐怕是不如刪網部隊裡的五毛,比刪一條網文得五毛的一半之價值都沒有吧?那是連兩毛五都值不上的可恥行為啊!
2012 年 8 月起,大陸原有一個未經我個人同意便轉貼網文的網站,明白了我個人的堅持,主動撤除了原來轉貼之我的幾篇網文,這樣做是對的。
台灣則仍有不肯撤掉轉貼我網文的網頁,而且反將貼文管制,要加入該網主的組織,成為其會員,才能閱讀,這樣做,看來反不如大陸的認知了。
台灣也有大方言明引用我網文資料的網頁,這是最有道德的作法,我則謝謝他們,並歡迎引用。我為文引用別人之資料時,也盡力清楚強調來源,外國人看不懂中文,但我仍舊盡力寫清楚,網上自動翻譯器,能譯得清楚。
我只是一名小小的創作者,對別人的侵犯,沒有太多的時間與能力老做無聊的反擊工作。但對過份的侵犯,我會毫不留情的說明侵犯者的罪行。
事實上,我停止更新網文的例行工作後,才是我個人享受自己創作的 ABC Forth 系統的開始。以前,只是創作出產品,這一段時日,則從事於讓產品性能更為成熟的工作。我若為推廣計,必須耗費時間來為大家準備資料,那有時間自行使用與享受 ABC Forth ?系統的性能便難以提升。這一陣子,我設計大型程式的速度加快了,也美化了系統內的許多地方,但都已不足再與外人道了。
這四年來的網文,文內到處都提出了我曾以程式實現的各種應用題目,隨便點一個,想學 Forth 的新手,可能都得學上一年半載才能跟得上,大多數人則都不能輕而易舉的實現相同設計。因為,除了 Forth ,我的應用題目,通常都另含技術,想學的人,仔細看清楚就能明白。
而且,請牢記住,我有能力為全世界任何 Forth 系統加裝 ABC Forth ,我已經做過,不要錯以為我只能為目前推廣標準的 Win32Forth 系統加裝此項功能而已,是為了推廣,我才暫時這樣做。更進一步強調,我也不是僅只會用 Win32Forth 系統而已,我可能比大多數人更能適應任何一種 Forth 系統。還有,平日裡,我就同時在使用各種不同的 Forth 系統,否則,何來論斷各種 Forth 系統性能的能力?又怎能輕易講得出某些不良的 Forth 系統,無法實現那些標準的基本功能?幾十年來,我早就筆記了許多幾列而已的精簡測試程式,就憑這樣的學習態度,適應 Forth 系統的能力,當然比大多數人強。
我已在每篇網文的最上方,都硬貼了中華民國國旗,來訪的讀者,您高興也好,不高興也罷,如果想從這裡學真技術,那就乖乖的看著國旗學,並且牢記住!中華民國是強調道德至上的國家,不得忘本!
教道德課,可以『有教無類』,教技術課,絕對要『有教有類』,否則,將來壞人滿街跑,社會上要再冤枉死掉很多同胞,非任何人所願見。
我拒絕繼續貼出公益性技術網文將近兩年了,大家以為這兩年我在幹什麼?睡覺?當然不是,是學會了更多的可貴技術。
您的人生能有幾個兩年?全台灣、甚至於全世界,想學 Forth 的上進者加總起來,又能有幾個兩年?惡徒在浪費大家可貴的人生!
幾位渴望進入 Forth 領域的人來信聯絡,結果,大家最後都說了『欲哭無淚』。我個人本領寥寥無幾,可以忽略,但是,您沒感覺到許多比我更高明的好手也都拒絕網貼了嗎?良民若不想消滅網上的惡徒,那您為什麼不該因他而受害?我也不知道該如何幫您不必『欲哭無淚』,所謂『民族自覺』大概講的就是解決這方面問題的論題吧?您若堅持不想自覺也可以,您請走您的陽關道,我過我的獨木橋,你不斷受害時,我看戲。
您覺得實在需要請教高手時,陳爽就在那裡,他應該是什麼都會,連台獨他都教。張燕南是連一句話都寫不清楚的人,他的任何網貼都可以見名就刪,不必浪費時間讀那種無聊訊息,而且我知道,他是不讀技術文獻的人,只讀半句就胡扯,甚至於胡扯我的文意,可能是他根本看不懂吧。
本人敢指名道姓痛斥無恥之徒張燕南,是他自己來挑釁所造成的!
一群無恥之徒,由陳爽出資,開了一個不要臉的網頁,顧用了張燕南這個宵小,多年來,長期亂搞,為我所不恥。因此,我再也不會去那個垃圾網頁鬼混,任何人想混,我則無權干涉,還想去胡扯的人,請便。
我貼示的上述罵文,是根本不能爭議的事實,張燕南耍賴慣了,必然狡辯,他的劣根性永遠不可能改變。
我要警告陳爽:請注意!我的罵文就是有版權的!張燕南在你那裡盜貼了我的網文,竟然還敢傳到我的信箱,明擺著要繼續挑釁。
張燕南在國際網頁上早已是個惡名昭彰、經常盜版、四處亂貼別人技術的網上惡徒,最近,又在 Win32Forth 國際論壇網頁,盜貼那份能讓中文正常顯示的修正指令,根本不說明出處,但是,貼了幾天也沒有人回應,台灣人當然都知道這個指令的來龍去脈了,我也不必多說。想看他惡行的人,現在就可以去看,無恥!
我向來言出必行,絕不可能再去那個垃圾網頁活動。我早就知道那裡貼不出有用的東西,除了少數幾個人還貼實務材料外,大部份均是垃圾。尤其是連一句話都寫不清楚的張燕南,他貼的東西,我看都不用看,包括他盜貼的這一份罵文也是,都是垃圾。不久前,有人虛心想學 Forth ,張燕南這個無恥之徒老大的不得了,公開給予新訪客胡說八道的訊息,給予『要他先學FFT』的侮辱。快速傅利葉轉換是數學技術,未必一定要與 Forth 程式語言相關。怎麼會有人無恥到只見都有 F 就胡扯,真亂!把新人都嚇跑了,網管可以這樣亂來嗎?陳爽應該縱容惡徒可以網上隨便亂侮辱人嗎?這些訊息都傳進我的信箱,看了怎不令我作嘔?
痛斥惡徒的同時,順便提醒想看的人,讓您看完罵文後,多少還能受點益處。一個不懂 Forth 真義的無恥之徒張燕南,經常在網上胡說八道,亂介紹系統來誤導群眾。最近,他自以為先進,好像別人都不知道網上有人公佈版號更大的 Win32Forth 系統似的,天下只有他才最先知道,還亂貼號稱他已修改出最新的系統了,要大家跟進。您若有心,現在就請轉到 Win32Forth 的論壇,可以見到有人發難,明言最新版本有嚴重問題,您看到了吧?請問,張燕南不亂?誰亂?
我明確試過各個版本,知道問題所在,但為何要公佈?我絕不與無恥之徒談任何技術,願意知道我的測試結果者,只能直接與我連絡來知道答案。
同理,大家已經很久見不到我再貼公益網文了,為什麼?有這些無恥的宵小,您若不消滅他,那麼,您為什麼不應因他而受害?
我當然有權貼或不貼任何網文,這裡是一個我個人絕對能夠完全掌握的個人網頁。很奇怪,我並不期望有很多的讀者來訪,甚至於明寫過,絕不歡迎台獨、民進黨、日本走狗來學技術,但天天就是都有不少人來訪,令我欲罷也不能,我貼罵文無益於人,但只有害於惡徒,大家卻仍喜歡看這麼多篇的綜合文章,非我所能阻止。
這些罵文形同 Forth 發展中的醜陋歷史,我可以永留網上,讓網上惡徒遺臭萬年,讀者想不想看?就請自行斟酌,我不勉強。繼續惹我,我就決定這麼辦,我一向是說得到就做得到,不信就試試看,以後不要怪我。
這幾天,那個無恥之徒張燕南繼續挑釁,不停的傳垃圾訊息到我的信箱,陳爽縱容他的垃圾網頁網貼這種無恥訊息。真要形容這種惡劣行徑,惡劣行為簡直就如同台灣人所說的,是在『朗塞口』,是拿著沾了大便的褲子到處甩來甩去、朗來朗去的意思。這是台獨、民進黨慣常的惡行技倆,張燕南就會如此。讀者若看此罵文,能順便學幾句難得見到的台灣罵人術語,也能增長見聞。
FigTaiwan 已成糞坑網頁,我怎麼可能再去沾那裡的臭氣?我已兩年不去瀏覽,真要去仔細掏糞,那裡絕對可以挖出無數的盜版網貼行為。別的不說,我從未同意過『FORTH期刊』的文章可以隨便網貼,鄧淵源來信問過我意見,我不便回答,他倒是非常遵守版權規矩,不做壞事沒有亂貼。陳爽與張燕南卻毫不尊重版權,讓別人亂貼『FORTH期刊』在那個糞坑網頁上,那裡成了朗塞口的臭床,如果我講了你才刪,難道我罵得還會錯嗎?
凡是『FORTH期刊』內單文的作者,如果自願公開,依理也得尊重我這個發行人的意見,您只佔有百分比的版權,仍不該亂貼。台灣的亂民長期亂慣了, FigTaiwan 也是一樣惡劣,我則保留永久的追訴權。 FigTaiwan 網站,是陳爽出資建網,網管是張燕南,這一群人還真偽大。
像張燕南這種宵小,如果不透過 Forth 管道,簡直是不可能跟我打得上交道的,原因無他,我就是絕對不與台獨、民進黨之流談任何技術。他來攀交,卻只顧不斷地散佈台獨媒體的謠言,竟然還好意思號稱要受害者自己隔離,這是那門子的胡扯亂行理論?跟現今台灣的台獨、民進黨流氓行徑完全一個樣子。
網上侵權是傷害並阻絕公益網文的主因,陳爽幹的就是自以為是的濫好人惡行。就算你顧的網管素質低劣,首從犯行的關係恆在,這樣的訊息,你陳爽必須知曉,我若不罵,你大概一輩子都將自詡於自己長期的濫好人惡行吧? 壞透了。中正理工學院怎麼會出一個像你這樣的學長?你現在跟那個張憲義、賀立維一個樣子。賀立維一生佔盡所有出身單位核能研究所栽培的好處,唸到電腦雜技的博士學位,現在卻倒過頭來胡說八道打擊自己的出身單位,是專為民進黨胡扯反核言論的另一惡徒,也跟陳爽鄰居過,言行都令人噁心,我能再尊重這幾個不像樣的學長嗎?
********************************************************************
控存資料 1
2011年10月27日,周四, ching <ilikefo...@gmail.com> 寫道:
發件人: ching <ilikefo...@gmail.com>
主题: [符式協會:2740] 發起FORTH活動!
收件人: "符式協會" <figtaiwan@googlegroups.com>
日期: 2011年10月27日,周四,下午3:08
Win32Forth 雖為現行推廣標準系統,看來能順利使用的人還很有限,因此,想藉此活動讓大家培養一些使用能力。
不限制任何人參與活動,包括爽兄及任何一位前輩,時間暫定為自本意見發佈後,一期三個月。
使用的基礎系統:固定為推廣標準之 Win32Forth V6.14 版系統,電腦及作業系統的版本則不予限制,可以是 XP 也可以是 W7 ,但為配合此次本人自定的主題,電腦必須具有語音輸出的基本功能。
本人此次返台,廣受許多會友的協助,深覺應該回饋一些我自己能辦到的貢獻給大家。戚桐欣老前輩,戚老饋贈了願意公開的中文語音輸出檔案,內容非常龐大,我不想辜負他的期望,故想令此貢獻進一步在我們的 Forth 領域發揮作用。
我也見到小葉與錢大哥及爽兄努力於古文的發展,見到他們的成果。我覺得能夠透過舉辦一次小小的活動,讓這些可貴的中國文化,簡單的藉 Forth 結合在一起,順便的教會大家一點點利用 Win32Forth 的皮毛技術。
目標很簡單:就是要電腦以受控方式,唸出『百家姓』與『千字文』。其他可能附加的功能,開始活動之後,再視情況增修改。
暫時就先公佈這樣的訊息,然後等待大家以真實姓名回應本人,總數達到十人,我就開辦。參與者可以私下接到我的領頭示範程式與說明文章,但參與者必須跟著實際使用程式,大家一同合作把成果建立起來,也增進自己對 Win32Forth 系統性能的一些認識。至於最後的成品是否公諸於世?以後由參與者表決決定。
活動的內容會有參與者彼此交換成果的要求,因此,也應該限制成參與者才可以互相享受的權力,活動期間,我會盡量協調其間的事務。大家都不是閒著沒事可幹的人,三個月應該足夠寬鬆了。
曾慶潭於紐西蘭
*************************************************
控存資料 2
FORTH操作音效卡
曾慶潭2008-12-3於紐西蘭
Ching-Tang Tseng
ilikeforth@gmail.com
http://forthfortnight.blogspot.com
0. 前言之前
經過四個月的努力,我在 6 月 29 日與中華民國 FORTH 語言學會聯絡時提及的構想──想要設計一個地震早期警報系統,其軟體程式已接近完成。為了實現這個構想,伴隨著主導計劃,有不少可貴的 Forth 程式逐個被落定。程式設計實耗時間實際上不多,研究資料與整理成果以便寫成文章,所須時間則相當可觀。
當初挑選的 Forth 系統主要是以 eForth32 為主,很慶幸做了正確的選擇,它對解決此類問題較為適當,本文是其一例。
剛開始進入這個主題時,就想先利用電腦設計出一個慢速可調示波器的功能,首先遇到的問題是系統不會劃任意兩點間的一條直線,我挑選了一個近期內的美國專利,純用高階定義方式與單純整數系統,令其實現。
接著預估會有信號處理的工作想做,而 Forth 的數值分析處理能力不太好,於是耗費了三個月的時間,在四個 Forth 系統上完成了 Tiny BASIC Compiler 的程式設計,讓 Forth 能像 BASIC 一樣的執行程式,而且發現這樣做呈現了特異性能,並完成了一篇 90 頁的中文文章。
eForth32 欠缺了不少傳統指令,例如: DO ..... LOOP指令群便付諸闕如,我堅信自 eForth 始,任何其他指令都能以高階定義方式完成,這是 Forth 基本精神,這個問題剛好做為對自己程式設計的考驗,於是博覽群書,終於全用高階定義技術,設計出了我要的東西。
有感於 Forth 不應自閉性的過日子,此類設計日後很可能需要與別的程式語言進行資料溝通,以形成共榮的系統。若能如此,則別的程式語言可能更會誇獎 Forth 的存在,於是,我在圖書館裡鑽研了一陣子,參考別的程式語言教學用書是如何介紹資料檔案的存取的?結果也完成了一份資料檔案標準存取格式的通用程式設計,可以毫無問題的與C或BASIC甚至於其他任何程式語言交換資料。近代的 Forth 系統中有 READ-FILE、WRITE-FILE ..... 等指令,但它們都還只是系統中的指令,要完完整整的做完資料檔案的存取工作,必須像我這樣的設計標準通用方法才行,而且要有根據,是參考專家寫的書籍得來的。
我已不再在職場上打轉,當然不可能像當年在台灣時闊綽的大買軟硬體來大肆發展自己的構想,軟體已進行到不得不碰硬體的時候,只好暫時打住,等待支援了。奉駿泉先生答應提供一套A/D轉換器助我發展,但要等到過舊曆年時才能帶來紐西蘭供我使用,我則未曾稍懈於此事,研究地震早期警報相關書籍及期刊論文,以及電容式水下麥克風與前置放大器、低通濾波器、甚至於音響信號接頭的標準接法,彙集資料,成果相當可觀。
紐西蘭是一個非常強調資源回收的國家,有許多的『機會商店』販賣仍可使用的回收物品,他們有私人開設的店面,也有救世軍、紅十字會、聖文森…等慈善單位所經營的商店,偶爾會有『機會』商品出售,售價大約是新品價格的十分之一以下,我須要材料維修物品時常去光顧。有一天我對舊的音效卡產生了一絲興趣,我非常痛恨微軟公司封閉資訊的作風,把世界上許多還很可以用的東西搞成是嚴重污染環境的來源,音效卡也是其中之一,我想我可以在這件事情上盡一點力,於是廉價收集了一些音效卡,著手設計程式,最後也完成了這個項目,值得為文一書,公開推介,在未有 A/D 卡之前,音效卡可以當作模擬硬體。
前述各個專題彙整後,總內容實在不小,將近是一本書的規模,而且我仍在整理積聚中,自覺值得留供自己永遠參考,至於是否要出版成書,以後再說。我已經不為獲利而寫文章了,更不可能印書當贈品,這個計劃若想真正全面實現,除了由政府支助外,不可能有人有興趣出錢幫忙完成,是個有利人類卻無利於個體的研究項目,根據我自己的經驗,書籍出版之後,如果沒有 300 本以上的基本銷售量,不可能收回印書的成本,因此,若無法達到可售出 300 本書的規模,我就不考慮發表而讓它自然廢棄,只留一套簡易硬體在我家後院長期試其性能,成為老來生活上的高級玩具,足矣。
當前 Forth 的推廣發展遭遇不少困難,其中一個主要因素,就是可供參考學習的材料相當缺乏。事實上 Forth 的推廣並不缺書,丁陳漢蓀老師,鄒靖寧老師,金城老師,奉駿泉先生 ... 等 Forth 先進,都曾在台灣出版過相關中文教材書籍,幾個書局也曾印行幾本好的 Forth 英文原文書籍,如果有心向學,這些資源相當足夠了,我個人便永遠保留這些書本,這次能完成這些 Forth 程式,必須參考這些書籍。
我雖十幾年不寫 Forth 程式了,但對台灣 Forth 同好例行性活動的關心則不曾稍減,這是一個我曾努力貢獻過心力的特殊環境,我也相信它會恆久存在,因此在情況許可時,我仍願再寫些文章來引起共鳴。根據我個人的經驗,使用一般 Forth 參考書籍進行推廣時,會有較缺乏應用實例的遺憾。這種情況對學習者而言,就好像學生考試時老是面對著『解釋名詞』,卻顧不了『應用問題』,而通常都是『應用問題』所佔的分數比較高,不是嗎?可是許多應用實例常具有時效性,通常只宜利用期刊發表,期刊的維持發行卻更為不易,連最有參考價值的 FORTH 空間 (FORTH DIMENSIONS) 都停刊了,可見一般。現在網路暫時霸佔了傳播媒體的最重份量,我不排斥它,有感於它可以頂替部份期刊的角色,現在又可以造福到全體中國人,我也只好很不情願的隨波逐流,自架了一個簡易純文字的個人 Blog 網頁:
http://forthfortnight.blogspot.com/
暫定有空時每兩個星期更新一次『慶的世界』網站上的文章,有興趣就來訪參觀吧,可是我得事先聲明,可能沒空回答問題,它暫時只是一個單向式的個人網站,我也沒空將其搞得花俏美觀,那不是目的所在。
1. 前言
一般而言,聲音信號在我們有興趣的各種物理量度訊號中算是快速類的了,舉凡工程上常強調的壓力、流量、溫度、速度、重量…等信號,其變化頻率都不太高,大約每秒量度一次也就夠了,普通聲音頻率要求,大約要高到每秒兩萬次,為防止取訊失真,取訊的頻率就應高過最高頻率的兩倍以上,因此,音效卡的設計,以能夠用 44.2 kHz的速率取得訊號為基本要求,所以屬快速訊號。當我們想將物理變化的訊號傳入電腦時,單只考慮取訊速度條件,若能處理聲訊,其他訊號也將不成問題,音效卡如能應用在這一方面,可具有不錯的潛在功能。
在訊號的解析度方面,我所用的音效卡雖只有 8 位元, A/D 轉換器最高 1/256 的分辨能力,工程應用上也很足夠了,具有百分之一以內精確度的儀錶是非常好的錶,所以在不苛求的情況下,音效卡應該很容易滿足一般要求。
如果能用音效卡做點事情,它潛在的最大好處是因被批量生產而價格低廉。而最大的潛在問題,則是為了防止仿冒而封閉了一切相關資訊,甚至於被製成晶片組,讓使用者想利用它來做點份外事,或想進一步了解其軟硬體特性時,均不得其門而入。
由此看來,音效卡在上市的第一天,我們就應該可以用 Forth 寫程式搞出一大堆像樣的產品來了,有許多因素使我們以前就未能及時做到此事,殊為可惜,但今天才做,其實也不嫌晚,它確實還能做些事情。也許生產銷售音效卡的廠商,應該看一看我們如何令其另有用途,而及早公開它的相關資訊,銷路也許更廣,獲利更多。
按我初始計劃的目標,只想取得 20Hz 以下低頻聲訊,信號抓取速率最高每秒 40 次也就可以大約不失真了,至於信號強度的配合,則純粹是硬體設計的問題,軟體只在配合,因此我對使用 Forth 操控音效卡深具信心,軟體方面只要選對系統,就可以完成。本文重點不擬強調聲訊知識,大約的討論就到此為止。
2. 軟硬體安排
熟悉 Forth 的人一定知道我為什麼一開始就不用 Win32Froth?根本原因就是它在 Intel 、 IBM 與 Microsoft 三家公司聯合搞出的現行暢銷個人電腦,已經不准你執行硬體輸出或輸入指令了,在 CPU 硬體方面有所謂的保護模式( Protection mode ),在後來的作業系統內有所謂的特權等級( Privilege level ),封死了程式語言執行輸出 / 輸入指令的功能,你硬要做,系統就恆給你一個『異常』( Exception )警告訊息,耗在那裡。詳細的細節不是本文論述的重點,以後有機會再另文探討,但我相信在接近這套電腦系統快要變成廢物以前,就會公布解決辦法,那些只想賺不道德錢的公司,一向都是如此待客的。寄生在這些作業系統下的 Forth 系統很無奈的被使用著,失去了 P@ 與 P! 類指令的 Forth ,套句台灣人的話形容它,就好像是『去給人家斷了腳筋』似的苟延殘喘,大半輩子有好多事情都不能作了,不是嗎?
要能執行硬體輸出 / 輸入的 Forth 系統依然不少,只要還能寄生在 Windows’ 98 以下的環境執行的 Forth 都可以列入此計劃的選擇考慮,甚至於包括曾經做為台灣推廣標準的 F83 及 F-PC Forth 兩個系統也都可以,我又為何硬要選 eForth32 呢?一方面是選擇前試用了它的一些性能,夠我所須,沒有版權問題,另一方面是我對 eForth 後續發展的一點好奇感,就如同前述提及的『解釋名詞』與『應用問題』區別,我個人很想找題目試其真正的性能,是否真的可以一貫到底?現在我相信它了,以 eForth 的方式這樣子搞 Forth ,一定可以搞出名堂,無庸置疑。
Rick VanNorman 把系統改得很快了,也提供了 Forth Assembler ,及與作業系統之間的現成指令,還有不少範例程式,我在接觸它的第一天就先執行一次標準的 meta-compiler 程式,又快又好,是真正的用 Forth 造 Forth ,它進行的過程相當完整,有些人誤把 meta-compiler 當一般 compiler 使用,那會使得一個能讓毛毛虫『蛻變』成美麗花蝴蝶的 meta-compiler 退化成『劣變』工具了。他也不甘寂寞的轉置此系統到 Os2 保護模式下執行,在 X P作業環境中也工作得很好,是一個純用 eForth 方式發展出來的成功範例,很值得用它。
讀者很難想像,我竟然是用 DOS3.3 的陽春系統完成所有設計的,我的電腦安裝了硬碟抽取盒,可以在新電腦上快速更換舊系統所須的硬碟,電腦硬體本身背負了歷史的包袱,能執行 XP 作業系統的電腦依然可以執行 DOS ,功能沒有減少,要試這個程式,只須另備一個簡易麥克風,及舊的音效卡。
在硬體方面的安排,此計劃原則上應以標準的 A/D 卡來發展才是正途,因為資料才有可能透通齊全,像標準 Forth 一樣,使用者可以完全沒有疑問的工作,採用音效卡是一時權宜之計,不適用於所有狀況,除非生產廠願意供給資料,我們才有可能順便為其創造新利潤。
舊的音效卡快要變成廢物了,資料也缺乏保密價值,有一些善心人士就公開了它的用法,我從網路上搜索了三天幾百個網頁後,取得唯一可茲參考的資料,獲得一篇很好的關鍵程式── “ Real time Signal Processing Code ”,將其改寫成 Forth 程式後,試用成功,試出了原程式的功能,也試出了我想要的一份音效卡,為尊重原創人的貢獻,理應說明出處:
作者:Ethan Brodsky
連絡信箱:ericbrodsky@psl.wisc.edu
3. 依據程式
/* sbsample C */
void writedsp( unsigned char value ) ;
unsigned char readdsp( void ) ;
int resetdsp( void ) ;
void turnspeakeron( void ) ;
void turnspeakeroff( void ) ;
unsigned char getsample( void ) ;
void outsample( unsigned char sample ) ;
#defined TRUE 1
#defined FALSE 0
/* -------------------- */
#include < conio.h>
#defined RESETPORT 0x226
#defined READPORT 0x22A
#defined WRITEPORT 0x22C
#defined POLLPORT 0x22E
void writedsp( unsigned char value )
{
while( inp(WRITEPORT) & 0x80 ) ;
outp( WRITEPORT, value ) ;
}
unsigned char readdsp( void ) ;
{
while( ! ( inp( POLLPORT ) & 0x80 ) ) ;
return( inp( READPORT ) ) ;
}
int resetdsp( void )
{
int i ;
outp( RESETPORT, 1 ) ;
outp( RESETPORT, 0 ) ;
i = 100 ;
while( ! &&( readdsp( ) = 0xAA ) ) i++ ;
return( i ) ;
}
void turnspeakeron ( )
{
writedsp( 0xD1 ) ;
}
void turnspeakeroff ( )
{
writedsp( 0xD3 ) ;
}
unsigned char getsample( void )
{
writedsp( 0x20 ) ;
return( readdsp( ) ) ;
}
void outputsample( unsigned char sample )
{
writedsp( 0x10) ;
writedsp( sample ) ;
}
4. Forth 對應程式
根據這個程式,幾乎已經獲得了幾個最重要的訊息,其中有重要的輸出入位址,以及幾個相關的控制碼,足供我們設計 Forth 程式時使用,改寫完成的 Forth 程式如下:
根據這個程式,幾乎已經獲得了幾個最重要的訊息,其中有重要的輸出入位址,以及幾個相關的控制碼,足供我們設計 Forth 程式時使用,改寫完成的 Forth 程式如下:
\ Sound Blaster card testing Forth words
\ eForth32 version
\ Author: Ching-Tang Tseng at Hamilton, New Zealand 2008-12-04
VARIABLE #DELAY 1 #DELAY !
: MS ( n - - ) FOR 300 FOR NEXT NEXT ;
HEX
0220 CONSTANT PORTBASE
PORTBASE 6 + CONSTANT RESETPORT
PORTBASE A + CONSTANT READPORT
PORTBASE C + CONSTANT WRITEPORT
PORTBASE E + CONSTANE POLLPORT
: RESETDSP ( - - )
1 RESETPORT PC!
0 RESETPORT PC!
100 FOR NEXT ;
: SB? ( - - )
RESETDSP
POLLPORT PC@ 80 AND
IF READPORT PC@ AA =
IF .” There it is! ” CR .” Sound Blaster Board detected.”
ELSE .” Nothing! System without Sound Blaster Board. ”
THEN
ELSE .” There is no response! ”
THEN ;
: WRITEDSP ( b - - )
WRITEPORT PC@ 80 AND 0=
IF WRITEPORT PC!
ELSE ABORT” Unable to write! ”
THEN ;
: READDSP ( - - b )
POLLPORT PC@ 80 AND
IF READPORT PC@
ELSE ABORT” Unable to read! ”
THEN ;
: GETSAMP ( - - b )
20 WRITEDSP
READDSP ;
: OUTSAMP ( b - - )
10 WRITEDSP
WRITEDSP ;
: .SB ( - - )
RESETDSP
PAGE
BEGIN
40 1 AT GETSAMP 10 U.R
#DELAY @ MS KEY?
UNTIL ;
: TURNSPON ( - - )
D1 WRITEDSP ;
: TURNSPOFF ( - - )
D3 WRITEDSP ;
DECIMAL
5. 測試結果與分析
上列 Forth 程式大部份是翻譯的結果,沒有甚麼好解釋的。唯一可以推介的一個指令則是『.SB』,從我在個人電腦上使用 Forth 以來,如此的設計方式屢試不爽地被加以應用,它可以在螢幕右上角固定位置,動態的顯示一個記憶體之內容,速度可調,非常適合用來觀察硬體的內容狀況有無變化?例如:另一個位址 046C ,它是電腦計時用的最根本位址,計數內容不斷地快速變化往上增加,無論新舊,那一台電腦都一樣,不信你自己舉一反三的試試看。
這樣的執行 Forth 程式,才能顯現所謂的 Real time control 效果,它是 Forth 應該具有的最基本精神,失去了這個功能,憑良心講,就不能成其為 Forth 了。現在,請問讀者,能不能體會出我為什麼不用 Win32Forth 來發展這個計劃的道理了?
實際應用這個程式時,有一些結果可以提供讀者參考。有一些音效卡執行 RESETDSP 及 SB? 指令時都無問題,可以通過測試,並被顯示系統中有音效卡存在,但隨後卻不能讀寫資料,無論我調整讀寫資料的速度如何?就是沒有結果,換句話說不具音效卡的功能,因我用的全是舊卡,只能透過三用電錶,測出麥克風輸入處,仍恆保有 5 伏的高電位狀況,但就是不工作,是卡壞了?或另有控制碼須執行?我也不得而知,這也是資料不透通所帶來的痛苦。幸好我仍試得了一片板子可供利用,因為它好,所以也不必在乎是否免費為這家廠商做廣告了,如此便可以鼓勵將來廠商盡量與我們合作,因此,故意要留下記錄如下:
『勁駒微電子股份有限公司銷售的 ESS ES1868 勁聲卡』
程式中端口基準位址 PORTBASE 暫設為 0220 ,隨著音效卡的硬體選址設定,此值亦可配合調變,根據一般音效卡隨卡附屬的說明手冊顯示,位址的範圍大約為:十六進制的220、230、240、250。卡上一般還有電玩搖桿( Joy stick )、中斷( IRQ )、記憶體直接存取( DMA )、喇叭輸出、光碟機介面 ... 等設定可供操作,本文不打算涉及太多,因為資料不夠完整,有興趣的讀者,請向原創人索取。
上列程式基本上可供測試系統中有無音效卡了,如果功能仍正常,進行用卡前歸原設定、取訊與播放亦可執行,其他的應用程式便能據此來設計,這些功能也暫時能滿足我個人所須,隨後發展的一些應用程式中,包含了一個模擬示波器的設計,它工作得很好,因程式事涉專利,不宜發佈於此,但若你有現成的可畫線指令,下列程式便可依樣設計出來:
上列 Forth 程式大部份是翻譯的結果,沒有甚麼好解釋的。唯一可以推介的一個指令則是『.SB』,從我在個人電腦上使用 Forth 以來,如此的設計方式屢試不爽地被加以應用,它可以在螢幕右上角固定位置,動態的顯示一個記憶體之內容,速度可調,非常適合用來觀察硬體的內容狀況有無變化?例如:另一個位址 046C ,它是電腦計時用的最根本位址,計數內容不斷地快速變化往上增加,無論新舊,那一台電腦都一樣,不信你自己舉一反三的試試看。
這樣的執行 Forth 程式,才能顯現所謂的 Real time control 效果,它是 Forth 應該具有的最基本精神,失去了這個功能,憑良心講,就不能成其為 Forth 了。現在,請問讀者,能不能體會出我為什麼不用 Win32Forth 來發展這個計劃的道理了?
實際應用這個程式時,有一些結果可以提供讀者參考。有一些音效卡執行 RESETDSP 及 SB? 指令時都無問題,可以通過測試,並被顯示系統中有音效卡存在,但隨後卻不能讀寫資料,無論我調整讀寫資料的速度如何?就是沒有結果,換句話說不具音效卡的功能,因我用的全是舊卡,只能透過三用電錶,測出麥克風輸入處,仍恆保有 5 伏的高電位狀況,但就是不工作,是卡壞了?或另有控制碼須執行?我也不得而知,這也是資料不透通所帶來的痛苦。幸好我仍試得了一片板子可供利用,因為它好,所以也不必在乎是否免費為這家廠商做廣告了,如此便可以鼓勵將來廠商盡量與我們合作,因此,故意要留下記錄如下:
『勁駒微電子股份有限公司銷售的 ESS ES1868 勁聲卡』
程式中端口基準位址 PORTBASE 暫設為 0220 ,隨著音效卡的硬體選址設定,此值亦可配合調變,根據一般音效卡隨卡附屬的說明手冊顯示,位址的範圍大約為:十六進制的220、230、240、250。卡上一般還有電玩搖桿( Joy stick )、中斷( IRQ )、記憶體直接存取( DMA )、喇叭輸出、光碟機介面 ... 等設定可供操作,本文不打算涉及太多,因為資料不夠完整,有興趣的讀者,請向原創人索取。
上列程式基本上可供測試系統中有無音效卡了,如果功能仍正常,進行用卡前歸原設定、取訊與播放亦可執行,其他的應用程式便能據此來設計,這些功能也暫時能滿足我個人所須,隨後發展的一些應用程式中,包含了一個模擬示波器的設計,它工作得很好,因程式事涉專利,不宜發佈於此,但若你有現成的可畫線指令,下列程式便可依樣設計出來:
\ Digital Oscilloscope Simulator
\ LOAD (1) STD.4 (2) SB.4 (3) FLD.4 then this program
\ Author: Ching-Tang Tseng at Hamilton, New Zealand 2008-12-04
: INITX0
RESETDSP PAGE
GMODE
0 X1 ! 300 Y1 ! AFTCAL COLOUR @ 0 0 EGA! ;
: ONEPAGE
640 0
DO I 300 GETSAMP - DRAW
#DELAY @ MS
LOOP ;
: SCOPE
INITX0
BEGIN
EGA ONEPAGE KEY?
UNTIL ;
6. 展望與結論
為了要實現我的目標,還有不少事情要做,回顧已經完成的工作,每當我階段性的完成一些程式後,似乎都感覺到這些程式都還有不少其他功能可以發揮,這就是設計應用程式比純討論系統或指令性能來得好的原因,因為它比較務實。
事實上,應用程式看起來都不太艱深,當作學習教材最為適當,它將 Forth 連接到我們生活的環境中去,應用程式發揮功能時,設計人更容易產生成就感、快感與滿足感,要讓 Forth 能延續發展,多創作各個領域的應用程式是很重要的,否則在系統創作者辛勤設計發佈產品後,無論產品有多好,在無人接續的情況,很快的都將壽終正寢,因為電腦科技進展的速度是很快的。
應用程式本質上也有弱點,大部份都屬於有時效性的問題,時過境遷或事過境遷後就不太有參考價值。另外,既然是應用程式,就應該是很值得直接應用了,通常也因此而事涉創作人的版權問題,這也是讀者不容易見到此類作品的主要原因,我個人則非常尊敬肯公開應用程式的作者,能發表這篇文章首先應該感謝的人就是 Ethan Brodsky ,想引用的人不必謝我,請直接去信鼓勵原創人便可。
設計應用程式時免不了可能得碰硬體,設計人就得有些機電方面的概念,通常此類人才不多,這大概也是可公開應用程式寥寥無幾的一個主要原因。本人是略有所知,可以常觸此事,例如:我用一個旋軸式可變電阻及定電壓直流電源,配上運算放大器設計了簡單電路,接通到音效卡的輸入端,如此便模擬了所有物理感測器的信號源,廢棄的音效卡就相當於可以用來設計信號擷取系統,由於沒有像麥克風輸入時的背景噪音,讀得的信號還更為穩定。
想搞語音分析者,上面的資料也很能協助提供分析所須的音源樣品來源了,取得信號後存成任何一種資料檔案的格式,對我們而言是毫無問題的,如果使用了其他裝置系統,遭遇到資料檔與後續應用或分析系統無法連上的情況時,本文提供的透通資料就深具價值。
Forth 是擅長執行即時性自動控制的程式語言,應用在這方面更為恰當,舉例而言:如果有海測船想用聲納測度海底狀況,用 Forth 設計邊開船邊測量,立即就取得結果的系統,比用其他任何方法要容易也更快速,當然也價廉,本文已經提供了這個答案。另提一個不吉利的建議,要發展找沉船的系統也一定比別人快,問題只在主事者願不願意接受 Forth ?
文末,我請我女兒協助,拍了一張數位照,顯示本文提及的示波器功能,我在照片中,也向所有讀者問好,螢幕上被停格畫面錄得的聲音花樣是:『大家好』的聲譜。
*************************************************
控存資料 3
有朋自遠方來
曾慶潭2009-03-20於紐西蘭
Ching-Tang Tseng
ilikeforth@gmail.com
http://forthfortnight.blogsopt.com
有朋自臺灣來,帶來了雙倍的承諾,以及更多的硬體支援,最樂之事卻是有機會再度與同道暢談 Forth 。人逢知己精神爽,彼此由衷的心得交換,不僅鼓舞了繼續努力實現夢想的胸懷,而且強烈的感受到,瞬間大增了在此領域的技術功力,並且獲得對現行發展 Forth 時,可供配套之軟、硬體應有的最新認識。真所謂,德不孤,必有鄰,原本在海外隻身奮鬥於 Forth 的處境,產生了幾近道不行,乘桴浮於海的念頭,有此一朋友的來到,完全改觀了!焉有不受激勵之理?
『Forth操作音效卡』一文刊出之後,得到了不少迴響,文中曾經提及老友奉駿泉先生承諾提供 A/D 轉換器一事,熟料奉兄有感於單片 A/D 卡供作『地震早期監測系統』發展所須稍嫌單薄,特別新購了兩套 A/D 裝置帶來紐西蘭,實現了雙倍的承諾。另外,又覺不必勉強硬要使用舊系統,亦可同時在現行電腦硬體與作業系統下進行此事,特別相贈了一個他自己公司發展出來的產品,是使用 USB 接頭為界面,一個小巧玲瓏的裝置,內附 Silab’s 8051F320 晶片,是一套也具有 A/D 功能的好東西,價格千元台幣左右。有此利器,實現夢想就不太遠了,更何況奉兄還指導了關鍵的應用方式,直接解決界面問題,接妥的系統,不單純是只能做目前計劃中的工作,幾乎擁有可供實驗室中直接執行抓取訊號的應用了。
我們在推廣 Forth 的同時,若有廠商協助及贈與,對於彼此的發展必然是相得益彰,奉兄是知己,遠勝於廠商,出錢出力支持 Fort h的發展已不知有幾次了,這一次除了感激外,更應以禮相待,君子以文會友,以友輔仁,特以行將付梓、不便外傳的兩篇文章:『美麗的詩篇』、『實現劃線 Forth 程式』,印妥成實體後相贈,知己才更珍惜這種技術產品,當天奉兄便開始展卷閱讀,他告訴我 Charles Moore 的習慣,就是公開了艱深、精彩設計後,從來就不寫相關文章的。
『實現劃線 Forth 程式』涉及別人專利,且此二文均因圖文並用,而不利於個人網頁的素文字刊出,網頁的初衷就不想浪費時間去搞花俏,有相當份量的文章也只宜以書出版,故均不外傳。
『美麗的詩篇』雖然僅只是述而不作,信而好古的產出,但以特殊方式詳述、剖析 Forth 程式語言發明人 Charles Moore 當初所設計的 Tiny BASIC compiler ,完整解說一個漂亮系統的設計技術。完成該文以後,便開始闡揚其特出方法,身體力行,以其中精華做為依據,將 Forth 改善成可以用中算符方式設計程式的系統。截至目前為止,已有許多具體的成果,新近的作品是一篇『 Forth 計算程式的新外貌』,昨天的突破則是將浮點亂數函數適當的加入了系統,短程的目標是在 Win32Forth 系統上完成具有浮點數字功能的中算符系統而後暫止,先供推廣之用,待其落定之後,長程目標則改在可以用Forth全面發展數值分析程式,供作學術教學或實際應用之須,到時就會有無限的發展空間。立定了志向,假以時日,必然能有所成。
如此發展出來的系統,具有如同 BASIC 程式語言一般的程式寫作方式,易寫、易用、易讀、易懂,幾近可以直接引用前人精彩的程式設計,配合 Forth 原有的完整功能,能作許多事情了,尤其是數值分析應用方面,更加方便可行。下列就節錄『 Forth 計算程式的新外貌』文章中的一段應用實例,可以看出此一系統的端倪。
***********************************************
2. 應用實例
數值分析程式實際上並不複雜,它期望系統能提供的性能,主要是在計算式子的表示方式上,要接近數學表示式的方式為最好。至於資料的輸出、輸入、程式執行迴路、或者是邏輯判斷後的條件分支能力…等問題,則都不是強調重點,能行就行。因此,我們要舉的實例,暫不考慮數學方面的複雜理論,避免類似需要疊代(iteration)計算的問題,也不需要舉許多分支情況的例子搞混了主題。
曲線調適(Curve fitting)問題,在數值分析技術中算得上是一個很有用的主題,如果 Forth 計算程式能將此一問題處理得很好,使程式的外貌易讀易懂,就可謂性能大大的改善了。
所謂曲線調適,是應用在將實驗數據妥善的匹配至理論數學式子的一種數值分析技術。有許多場合,一個自然現象可以用一個標準簡單的數學式子來表示,形同 y = f(x) 的數學函數,也就是 y 隨 x 變化的狀況由 y = f(x) 來決定。從事研究工作的人經常會對一個已經確定了 y = f(x) 關係的研究問題進行實驗,取得這種 y 與 x 間關係的許多組實驗值,接下來要做的工作就是曲線調適了。由於 y = f(x) 數學函數表示式通常僅表示一個現象的趨勢關係,函數式中每一項的前引係數均未定,必須靠實際的實驗來決定這些係數之值,曲線調適技術便發展出許多方法來處理實驗數據,以求得函數式子的所有係數。最後獲得的完整數學式子不只是將問題確定而已,這樣的數學式子,通常也代表了此後可以合理的運用,因為實驗時只做了有限個點的關係實驗,應用時則代表了可以用在指定範圍內的無窮多個點之情況,所以曲線調適也就成為實驗結束後非作不可的工作了。
要想仔細研究曲線調適的各種方法,很可以寫出一部洋洋大觀的專門書籍來,本文的目的不在這裡,相反的,此處完全不予探討,還得請讀者自行去參考相關書籍,任何數值分析的書籍都有這個主題,我們僅借用其中一個最簡單的研究結果作為代表,當作程式設計時的範例。
以最小平方差原理(Least-Squares Approximation)來達到曲線調適的目的,是此處想引用的例子,為了說明方便,我們也僅舉一個一階多項式的函數關係為例,以標準數學式表示如下:
y = a + b x
其中, a 與 b 均為未定係數,有待以最小平方差曲線調適後決定。原則上兩個未知數,只要兩組關係值就足供確定了。然而,實際的環境並非如此,為了減少各方面可能產生的誤差,我們必須進行更多的實驗,取得更多組的數據,然後以最小平方差原理,根據統計分析的技術結論,將誤差減至最小,如此決定的係數才有學術根據,才能研究與討論。
假設已經完成了 N 次的實驗,得到了 N 組 y 與 x 之間的關係數值,那麼,最小平方差分析後的結論,兩個係數 a 與 b 及標準誤差 D 可以寫成下列恆等式:
這三個式子是本文借來規劃程式設計的重要依據,因為從式子中可以看出要大量的使用運算符號,符號Σ是代表總合(Summation)的意思,因此如果作了十次實驗,得到十組y與x的相關數據,單只考慮求得 a 與 b 時,我們就得分別先求出十個 x 、 y 、 x 乘 y 、與 x 的平方總合後的結果,然後才能代入上列式子,進行乘法、減法、與除法計算,最後才能得到a與b的答案。這麼多的計算,如果要用傳統 Forth 來寫後算符式的程式,大多數人寧可放棄不做了,就算勉強做了還很容易出錯或搞得一團混亂,這就是 Forth 不適合用來發展數值分析程式設計的原因。
以『美麗的詩篇』文中解決中算符問題的方法為藍本,可以制定一些 Forth 設計計算程式時的新規矩,解決它不適合發展數值分析程式的問題。為了避免後續還得重新列印程式來配合說明,此處直接一次便將整個完整的曲線調適程式列印如程式二,先假設它可以執行,我們便根據這個程式來制定一些新規矩,再以這些新規矩當作程式設計規格,實現整個構想。請先從上到下瀏覽一遍這個程式,你很容易發現程式在數值分析方面的可讀性,幾乎與 BASIC 程式語言相等,它是 Forth 計算程式的新外貌!
為了要實現我的目標,還有不少事情要做,回顧已經完成的工作,每當我階段性的完成一些程式後,似乎都感覺到這些程式都還有不少其他功能可以發揮,這就是設計應用程式比純討論系統或指令性能來得好的原因,因為它比較務實。
事實上,應用程式看起來都不太艱深,當作學習教材最為適當,它將 Forth 連接到我們生活的環境中去,應用程式發揮功能時,設計人更容易產生成就感、快感與滿足感,要讓 Forth 能延續發展,多創作各個領域的應用程式是很重要的,否則在系統創作者辛勤設計發佈產品後,無論產品有多好,在無人接續的情況,很快的都將壽終正寢,因為電腦科技進展的速度是很快的。
應用程式本質上也有弱點,大部份都屬於有時效性的問題,時過境遷或事過境遷後就不太有參考價值。另外,既然是應用程式,就應該是很值得直接應用了,通常也因此而事涉創作人的版權問題,這也是讀者不容易見到此類作品的主要原因,我個人則非常尊敬肯公開應用程式的作者,能發表這篇文章首先應該感謝的人就是 Ethan Brodsky ,想引用的人不必謝我,請直接去信鼓勵原創人便可。
設計應用程式時免不了可能得碰硬體,設計人就得有些機電方面的概念,通常此類人才不多,這大概也是可公開應用程式寥寥無幾的一個主要原因。本人是略有所知,可以常觸此事,例如:我用一個旋軸式可變電阻及定電壓直流電源,配上運算放大器設計了簡單電路,接通到音效卡的輸入端,如此便模擬了所有物理感測器的信號源,廢棄的音效卡就相當於可以用來設計信號擷取系統,由於沒有像麥克風輸入時的背景噪音,讀得的信號還更為穩定。
想搞語音分析者,上面的資料也很能協助提供分析所須的音源樣品來源了,取得信號後存成任何一種資料檔案的格式,對我們而言是毫無問題的,如果使用了其他裝置系統,遭遇到資料檔與後續應用或分析系統無法連上的情況時,本文提供的透通資料就深具價值。
Forth 是擅長執行即時性自動控制的程式語言,應用在這方面更為恰當,舉例而言:如果有海測船想用聲納測度海底狀況,用 Forth 設計邊開船邊測量,立即就取得結果的系統,比用其他任何方法要容易也更快速,當然也價廉,本文已經提供了這個答案。另提一個不吉利的建議,要發展找沉船的系統也一定比別人快,問題只在主事者願不願意接受 Forth ?
文末,我請我女兒協助,拍了一張數位照,顯示本文提及的示波器功能,我在照片中,也向所有讀者問好,螢幕上被停格畫面錄得的聲音花樣是:『大家好』的聲譜。
*************************************************
控存資料 3
有朋自遠方來
曾慶潭2009-03-20於紐西蘭
Ching-Tang Tseng
ilikeforth@gmail.com
http://forthfortnight.blogsopt.com
有朋自臺灣來,帶來了雙倍的承諾,以及更多的硬體支援,最樂之事卻是有機會再度與同道暢談 Forth 。人逢知己精神爽,彼此由衷的心得交換,不僅鼓舞了繼續努力實現夢想的胸懷,而且強烈的感受到,瞬間大增了在此領域的技術功力,並且獲得對現行發展 Forth 時,可供配套之軟、硬體應有的最新認識。真所謂,德不孤,必有鄰,原本在海外隻身奮鬥於 Forth 的處境,產生了幾近道不行,乘桴浮於海的念頭,有此一朋友的來到,完全改觀了!焉有不受激勵之理?
『Forth操作音效卡』一文刊出之後,得到了不少迴響,文中曾經提及老友奉駿泉先生承諾提供 A/D 轉換器一事,熟料奉兄有感於單片 A/D 卡供作『地震早期監測系統』發展所須稍嫌單薄,特別新購了兩套 A/D 裝置帶來紐西蘭,實現了雙倍的承諾。另外,又覺不必勉強硬要使用舊系統,亦可同時在現行電腦硬體與作業系統下進行此事,特別相贈了一個他自己公司發展出來的產品,是使用 USB 接頭為界面,一個小巧玲瓏的裝置,內附 Silab’s 8051F320 晶片,是一套也具有 A/D 功能的好東西,價格千元台幣左右。有此利器,實現夢想就不太遠了,更何況奉兄還指導了關鍵的應用方式,直接解決界面問題,接妥的系統,不單純是只能做目前計劃中的工作,幾乎擁有可供實驗室中直接執行抓取訊號的應用了。
我們在推廣 Forth 的同時,若有廠商協助及贈與,對於彼此的發展必然是相得益彰,奉兄是知己,遠勝於廠商,出錢出力支持 Fort h的發展已不知有幾次了,這一次除了感激外,更應以禮相待,君子以文會友,以友輔仁,特以行將付梓、不便外傳的兩篇文章:『美麗的詩篇』、『實現劃線 Forth 程式』,印妥成實體後相贈,知己才更珍惜這種技術產品,當天奉兄便開始展卷閱讀,他告訴我 Charles Moore 的習慣,就是公開了艱深、精彩設計後,從來就不寫相關文章的。
『實現劃線 Forth 程式』涉及別人專利,且此二文均因圖文並用,而不利於個人網頁的素文字刊出,網頁的初衷就不想浪費時間去搞花俏,有相當份量的文章也只宜以書出版,故均不外傳。
『美麗的詩篇』雖然僅只是述而不作,信而好古的產出,但以特殊方式詳述、剖析 Forth 程式語言發明人 Charles Moore 當初所設計的 Tiny BASIC compiler ,完整解說一個漂亮系統的設計技術。完成該文以後,便開始闡揚其特出方法,身體力行,以其中精華做為依據,將 Forth 改善成可以用中算符方式設計程式的系統。截至目前為止,已有許多具體的成果,新近的作品是一篇『 Forth 計算程式的新外貌』,昨天的突破則是將浮點亂數函數適當的加入了系統,短程的目標是在 Win32Forth 系統上完成具有浮點數字功能的中算符系統而後暫止,先供推廣之用,待其落定之後,長程目標則改在可以用Forth全面發展數值分析程式,供作學術教學或實際應用之須,到時就會有無限的發展空間。立定了志向,假以時日,必然能有所成。
如此發展出來的系統,具有如同 BASIC 程式語言一般的程式寫作方式,易寫、易用、易讀、易懂,幾近可以直接引用前人精彩的程式設計,配合 Forth 原有的完整功能,能作許多事情了,尤其是數值分析應用方面,更加方便可行。下列就節錄『 Forth 計算程式的新外貌』文章中的一段應用實例,可以看出此一系統的端倪。
***********************************************
2. 應用實例
數值分析程式實際上並不複雜,它期望系統能提供的性能,主要是在計算式子的表示方式上,要接近數學表示式的方式為最好。至於資料的輸出、輸入、程式執行迴路、或者是邏輯判斷後的條件分支能力…等問題,則都不是強調重點,能行就行。因此,我們要舉的實例,暫不考慮數學方面的複雜理論,避免類似需要疊代(iteration)計算的問題,也不需要舉許多分支情況的例子搞混了主題。
曲線調適(Curve fitting)問題,在數值分析技術中算得上是一個很有用的主題,如果 Forth 計算程式能將此一問題處理得很好,使程式的外貌易讀易懂,就可謂性能大大的改善了。
所謂曲線調適,是應用在將實驗數據妥善的匹配至理論數學式子的一種數值分析技術。有許多場合,一個自然現象可以用一個標準簡單的數學式子來表示,形同 y = f(x) 的數學函數,也就是 y 隨 x 變化的狀況由 y = f(x) 來決定。從事研究工作的人經常會對一個已經確定了 y = f(x) 關係的研究問題進行實驗,取得這種 y 與 x 間關係的許多組實驗值,接下來要做的工作就是曲線調適了。由於 y = f(x) 數學函數表示式通常僅表示一個現象的趨勢關係,函數式中每一項的前引係數均未定,必須靠實際的實驗來決定這些係數之值,曲線調適技術便發展出許多方法來處理實驗數據,以求得函數式子的所有係數。最後獲得的完整數學式子不只是將問題確定而已,這樣的數學式子,通常也代表了此後可以合理的運用,因為實驗時只做了有限個點的關係實驗,應用時則代表了可以用在指定範圍內的無窮多個點之情況,所以曲線調適也就成為實驗結束後非作不可的工作了。
要想仔細研究曲線調適的各種方法,很可以寫出一部洋洋大觀的專門書籍來,本文的目的不在這裡,相反的,此處完全不予探討,還得請讀者自行去參考相關書籍,任何數值分析的書籍都有這個主題,我們僅借用其中一個最簡單的研究結果作為代表,當作程式設計時的範例。
以最小平方差原理(Least-Squares Approximation)來達到曲線調適的目的,是此處想引用的例子,為了說明方便,我們也僅舉一個一階多項式的函數關係為例,以標準數學式表示如下:
y = a + b x
其中, a 與 b 均為未定係數,有待以最小平方差曲線調適後決定。原則上兩個未知數,只要兩組關係值就足供確定了。然而,實際的環境並非如此,為了減少各方面可能產生的誤差,我們必須進行更多的實驗,取得更多組的數據,然後以最小平方差原理,根據統計分析的技術結論,將誤差減至最小,如此決定的係數才有學術根據,才能研究與討論。
假設已經完成了 N 次的實驗,得到了 N 組 y 與 x 之間的關係數值,那麼,最小平方差分析後的結論,兩個係數 a 與 b 及標準誤差 D 可以寫成下列恆等式:
a = ( Σ x․Σ x y – Σ x² ․Σ y ) / ( ( Σ x )² – N ․Σ x² )
b = ( Σ x ․Σ y – N ․Σ x y ) / ( ( Σ x )² – N ․Σ x² )
D = SQRT ( ( Σ ( y(i) - a - b x(i) ) ^ 2 ) / ( N - 2 ) )
這三個式子是本文借來規劃程式設計的重要依據,因為從式子中可以看出要大量的使用運算符號,符號Σ是代表總合(Summation)的意思,因此如果作了十次實驗,得到十組y與x的相關數據,單只考慮求得 a 與 b 時,我們就得分別先求出十個 x 、 y 、 x 乘 y 、與 x 的平方總合後的結果,然後才能代入上列式子,進行乘法、減法、與除法計算,最後才能得到a與b的答案。這麼多的計算,如果要用傳統 Forth 來寫後算符式的程式,大多數人寧可放棄不做了,就算勉強做了還很容易出錯或搞得一團混亂,這就是 Forth 不適合用來發展數值分析程式設計的原因。
以『美麗的詩篇』文中解決中算符問題的方法為藍本,可以制定一些 Forth 設計計算程式時的新規矩,解決它不適合發展數值分析程式的問題。為了避免後續還得重新列印程式來配合說明,此處直接一次便將整個完整的曲線調適程式列印如程式二,先假設它可以執行,我們便根據這個程式來制定一些新規矩,再以這些新規矩當作程式設計規格,實現整個構想。請先從上到下瀏覽一遍這個程式,你很容易發現程式在數值分析方面的可讀性,幾乎與 BASIC 程式語言相等,它是 Forth 計算程式的新外貌!
\ First-order least squares curve fitting demonstration program
\ by Ching-Tang Tseng 2009-2-24
\ ilikeforth@gmail.com http://forthfortnight.blogspot.com
LOAD CHING.4 \ 即程式三
20 FIXARRAY XX 20 FIXARRAY YY
FIXVAR A FIXVAR B FIXVAR D FIXVAR D1
FIXVAR A1 FIXVAR A2 FIXVAR B0 FIXVAR B1
: RESET-ALL
21 0
DO
{{ XX ( I ) = 0 }} {{ YY ( I ) = 0 }}
LOOP
{{ A = 0 }} {{ B = 0 }} {{ D = 0 }} {{ D1 = 0 }}
{{ A1 = 0 }} {{ A2 = 0 }} {{ B0 = 0 }} {{ B1 = 0 }}
;
: INPUT-DATA
{{ XX ( 1 ) = 0 }} {{ YY ( 1 ) = 0 }}
{{ XX ( 2 ) = 0.157 }} {{ YY ( 2 ) = 0.156 }}
{{ XX ( 3 ) = 0.314 }} {{ YY ( 3 ) = 0.308 }}
{{ XX ( 4 ) = 0.471 }} {{ YY ( 4 ) = 0.454 }}
{{ XX ( 5 ) = 0.628 }} {{ YY ( 5 ) = 0.587 }}
{{ XX ( 6 ) = 0.785 }} {{ YY ( 6 ) = 0.706 }}
{{ XX ( 7 ) = 0.942 }} {{ YY ( 7 ) = 0.808 }}
{{ XX ( 8 ) = 1.099 }} {{ YY ( 8 ) = 0.891 }}
{{ XX ( 9 ) = 1.256 }} {{ YY ( 9 ) = 0.950 }}
{{ XX ( 10 ) = 1.413 }} {{ YY ( 10 ) = 0.987 }}
{{ XX ( 11 ) = 1.550 }} {{ YY ( 11 ) = 0.999 }}
;
: RUN-COEFFICIENT
12 1
DO
{{ A1 = A1 + XX ( I ) }}
{{ A2 = A2 + ( XX ( I ) * XX ( I ) ) }}
{{ B0 = B0 + YY ( I ) }}
{{ B1 = B1 + ( YY ( I ) * XX ( I ) ) }}
LOOP
{{ D = ( A1 * A1 ) - ( 11 * A2 ) }}
{{ A = ( A1 * B1 ) - ( A2 * B0 ) }}
{{ A = A / D }}
{{ B = ( A1 * B0 ) - ( 11 * B1 ) }}
{{ B = B / D }}
;
: RUN-STANDARD-DEVIATION
{{ D = 0 }}
12 1
DO
{{ D1 = YY ( I ) - A - ( B * XX ( I ) ) }}
{{ D = D + ( D1 * D1 ) }}
LOOP
{{ D = SQRT ( D / ( 11 - 2 ) ) }}
;
: OUTPUT-DATA
CR ." Fitted equation is :"
CR ." y = " A FN. SPACE
B DUP 0<
IF FN. ." x"
ELSE ." + " FN. ." x"
THEN
CR ." Standard deviation of fit is : " D FN.
CR ." Finished. " CR
;
: CV \ Least squares Curve Fitting routing
RESET-ALL
INPUT-DATA
RUN-COEFFICIENT
RUN-STANDARD-DEVIATION
OUTPUT-DATA
;
程式二、一階最小平方差曲線調適Forth範例程式(CVFIT.4)
執行縮寫指令CV可以快速的得到曲線調適後的答案,列印如下:
Fitted equation is :
y = 0.104 + 0.661 x
Standard deviation of fit is : 0.070
Finished.
附註 : 20241025 重新整理後貼出。
沒有留言:
張貼留言