2015年5月15日 星期五

DELPHI上WEB辛苦談

當初要把DelphiWEB是一個選項,不是個必然。可以選擇C# 或是 Java。幾經考慮之後,還是利用DelphiWEB,但幾個問題橫在眼前

1.      Delphi本身不能直接橋接IIS,只能使用ISAPI,但這技術似乎過時。
2.      DelphiNative語言,無記憶體自動回收架構。
3.      DelphiNative語言,要Compile之後才能分發。

左思右想之後,只有取巧利用C#IISDelphi橋接口,將來自Browser需求利用C#轉呼叫由Delphi 做成的COM SERVERC#負責Session 管理,Delphi提供服務。如此一來,就輕易解決上WEB的架構。

無記憶體自動回收架構】這問題在傳統上是相當嚴重,因為Server 需長期運行,如果有記憶體遺漏,很快就會造成Server死當。後來,幾經折騰COM SERVER改成Single Instance之後,這問題就不嚴重了。因為,每個使用者都是獨立,反而系統更穩定。

Compile之後才能分發】這問題會帶來版本及分發安全的問題,不過,後來實作一個系統分發之後,這問題變成小問題。

2015年5月8日 星期五

Delphi COM 的再認識

在發展delphi 上WEB的過程,由於整個專案是利用DOT NET 呼叫Delphi 的COM Server。因此,很自然就研究起Delphi 的COM架構。不過,也遭遇了幾個困難:
1. COM+ 跟 COM的註冊是截然不同。
2. COM的 TYPE LIBRARY 如何繼承。
3. COM的 Instance 的選擇。

   由於透過IIS呼叫,一定要是COM+的註冊方式,但Delphi 內建的 COM註冊程式只支援COM,不支援COM+,因此,專案的一開始,單單這問題就搞了快一個月。

   由於希望每個專案能有自己的COM SERVER,最終是一台電腦可獨立運行多個專案,但問題是,每個專案都是由模板專案產生,但TYPE LIBRARY要不同。如此一來必須是繼承,才能達到目標,但第一次摸索delphi 的TYPE LIBRARY繼承要花了一點時間,不過,也因此感受到delphi在這方面支援不錯。

   基於過往的使用經驗,很自然選擇ciMultiInstance(Delphi Create COM 中的一個選項)。 但問題來了,delphi 的MultiInstance 是要自己實作,這問題找了資料之後很快就突破了,真正問題在上線之後。

   再經過一年左右奮戰終將專案完成,懷著戰戰兢兢的心情既期待又怕受傷害的心情,測式上線。剛開始無異狀,因上線人數不多,但人數一多COM SERVER會死當。這下心情跌到谷底。因為,這種Run time 的錯誤特別難抓。想想這問題不僅底層須解決,讓問題更複雜是:客戶買了這產品回去,還會自行加工。那如何避免Server如何死當,不僅底層程式碼必須注意,客戶也要有足夠的知識避免,那這教育訓練成本未免太高了,於是思索如何讓每個Server 都是獨立不會互相干擾,當成是研發的方向,而且就算Coding 不到位也無妨,果然一試之後,COM Server 再也不當,甚至比NET 研發更穩當。

PS: 不過,獨立的COM SERVER研發也帶來別的挑戰。不過,這不是本次文章的主題,故不在此深述。

2015年5月7日 星期四

2015年5月DELPHI XE8發表會感想

昨天去參加捷康XE8發表會,會中李維大師說明了許多XE8的新功能,特別是在IOT(Internet of Things)的部分。XE8為了讓開發者方便作業,除了貼心的加了新元件外。也為設計環境做了許多方便性的改善,讓程式人員可以快速方便的完成程式設計。

在整場會議中,李大師解說了一些DELPHI底層的工作,其實這才是一個開發系統的重點。這些在外面看不到,不起眼的地方,其實就是整個系統運作的關鍵。通常我們都是設一設元件屬性,在事件寫一些程式去做元件的變動和處理。但是這些元件是如何運作的,就比較少人去瞭解了。當元件達不到我們的目標時,我們就會覺得元件功能不足,但是往往是我們沒有瞭解元件,不瞭解這些元件的設計初衷。誤用或是不知如何去善用這些元件來達成我們的目標。

以前學程式設計時,總是學語法,學結構,才開始寫自己的程式。不過昨天上課後,對學程式這件事有了不同的看法。電腦世界的變化太快了,以前可以用幾個語法來解決的程式,現在是要用一大堆的元件才能完成目標。用元件來組合程式是很快,站在別人的程式上架構系統也很省力。但是如何去理解別人設計的元件,反而成為最重要的核心工作了,這些都是要花時間才能打下根基,讓自己的工作更順利。

另外還有一件事應該說一下,以前學程式,不會就問前輩,因為電腦就是處理計算問題,有BUG也好解決。現在元件不但多,而且深入的領域都不同,特別是IOT都有和硬體做溝通,很多程式都和藍芽有關。所以現在學程式,要先GOOGLE一下自己的問題,整理思考,並在DELPHI試過之後,才能提出比較好的問題。對要解題教導你的前輩而言,這也是一種尊重。

急著想解決問題是人的常態,但未經思考的問題,往往只是顯示自己不成熟。

2015年4月6日 星期一

Source Code VS Help

前一陣子有朋友發表了一個有趣的說法,他說程式目前有二種理解方法。一種像.NET,微軟會給你一大堆的文件(Help),例如MSDN。你要瞭解.NET,就必須看這些文件才知道.NET在做什麼,你可以如何使用.NET來達成你的目標。
另一種是C和PASCAL,基本上不會有什麼Help,但是會附上Source Code,你要瞭解它,就必須從Source Code的執行過程中去體會程式的奧妙,吸收成為你的知識,然後才能使用這種語言。
感覺Delphi就像以前的師父教徒弟,領進門後就看徒弟的天資適不適合吃這行飯了。做的久了,看的程式多了,就可以建立起自己的Coding方式,發展自己的思考邏輯。習慣了,就可以很深人的去應用這些基礎的知識,來解決面臨的問題。
相對的,有Help就可以快速入門,可以大量的產生出簡單的應用,大量的招募人員來大量學習。不過因為程式被包在一個個的DLL中,程式人員只能用HELP來引用這個DLL,但是這個DLL在做什麼?為什麼可以這樣做?確是一個黑箱。一但微軟放棄開發(從以前的Foxpro、VBScript等)。就必須重新學新的,一切重頭開始。

不過筆者心裡想,如果Embarcadero沒有附予Delphi新生命,那PASCAL不是也和FoxPro一樣?要追上APP和HTML的世界,一樣要重新學新語言吧?我覺得語言的發展和延伸性應該被踢除在Source Code和Help的比較之外,任何一種語言如果沒有延續先前語言的精神,在新的應用領域內做開發,對投入的程式人員,都是一種沒有未來的切身之痛。
不過筆者還是喜歡Source code勝過Help(如果一定要二者選其一的話啦,因為在討論時,發表者說給Source code了,那有美國時間再寫Help)。因為Source Code是一種真實的存在,可以瞭解程式為什麼是這樣,而不是照我們的想法走。有了思考,程式人員的價值才會產生出來。現在這個世界,最不需要的就是ME TOO,特別是沒有複製成本的程式業。希望投入這個程式不歸路的人員都能有自己的思路和看法,讓程式世界多彩多姿。

2015年3月27日 星期五

Delphi的引用問題

前一陣子有朋友問到,我給的IncMonth(Date:String;IncValue:integer):String;這個函數和原廠提供的function IncMonth(const DateTime: TDateTime; NumberOfMonths: Integer = 1): TDateTime;相衝突。不知道要如何解決。
其實解決這問題很簡單,要使用Delphi的函數,只要加上引用的來源 SysUtils. IncMonth()就行了。當Delphi的來源取得順序不如我們想的,就加上來源,就可以解決了。

2015年3月18日 星期三

2015Delphi新版本技術研討參加後感想

今天參加 2015 RAD Studio 新版本技術發展方向研討會,聽到了難得一見的李維大師對目前Delphi的發展方向做了說明。
從李維大師的介紹和說明中,可以感覺到Embarcadero這家公司為了物聯網,積極的投入人力在這方面做研發。除了讓程式人員可以在原本的Delphi上開發iOS和Android外,也開始讓一份Source Code可以支援32和64bit版本的作業環境。更好的是,可以在設計時就看到程式在不同Size大小螢幕上的表現,這讓開發者可以節省不少設計時間。
會場中也用XE8做了和Beacon連接的展示,感覺在應用上提供了很好的介面,也很方便做開發,看樣子只要選了XE8,剩下的就是好的創意點子了。
難怪Delphi最近的使用者排名上升的蠻快的,也許五月份XE8正式出版時,可以像先前Delphi3和Delphi5時一樣,在程式設計領域看到一陣旋風。

2015年3月7日 星期六

Delphi近來排名上升快速

剛剛去看了一下2015年2月的 TIOBE的程式語言排行榜 ,沒想到Delphi的上升速度挺快的,從一月的20名一下上升到11名(如下圖,也可參考上述網站)
感覺真的不錯,比起前幾年Delphi被Borland賣掉,沒有未來的情況,現在真的覺得當初沒有放棄Delphi是正確的選擇。
TIOBE網站中還提到JavaScript是2014年度程式榮譽榜的第一名,我想是因為HTML5的發佈,大大提高了JavaScript的網頁影響力有關吧。
看來用JavaScript來做Web系統,和以前用Delphi開發的資料庫系統做連接,交互完成個別善常的領域是不錯的選擇。特別Delphi在APP的應用上也大獲好評,我想以後應該會有更多人學Delphi,以後找Delphi同好應該比現在更容易吧。