2017/12/25

JavaScript 動態載入 JavaScript (CHT)

在載入 ExtJS 這種大型 JS 框架時,如果 Client 端網路速度不夠快,在首次載入時會空白畫面等很久,為了讓用戶端有更好的體驗,所以還是要有個進度條來刷個存在感,如此一來用戶也比較願意在自己的網站停留比較久的時間。

以下是程式碼範例:

2017/12/08

How to set dbExpress ODBC ConnectionString property and TLS support


New ODBC driver for dbExpress in XE2.

You can setting DSN in Data Source (ODBC).

If you want create DSN-less connection, you can to setup ConnectionString in TSQLConnection.params.

The connection string like below:

MS Access

VendorLib=odbcjt32.dll;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Your.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=17;coSafeMode=1

=== 2021/10/25 update ====

SQL SERVER

Standard Security with OleDB

ConnectionString=DRIVER={SQL Server};SERVER=HOST_NAME;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;

Standard Security with OleDB and Enable MARS

ConnectionString=DRIVER={SQL Server};SERVER=HOST_NAME;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;MultipleActiveResultSets=True

Standard Security with SQL Server Native Client 10

ConnectionString=DRIVER={SQL Server Native Client 10.0};SERVER=HOST_NAME;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;

Standard Security with SQL Server Native Client 11

ConnectionString=DRIVER={SQL Server Native Client 11.0};SERVER=HOST_NAME;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;

Standard Security with SQL Server Native Client 11 and Enable MARS

ConnectionString=DRIVER={SQL Server Native Client 11.0};SERVER=HOST_NAME;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;MARS_Connection=yes;

Standard Security with Azure SQL

DriverName=Odbc
IsolationLevel=ReadCommitted
RowSetSize=20
ConnectionString=DRIVER={SQL Server};
SERVER=SERVERNAME.database.windows.net;DATABASE=DB_NAME;UID=USER_NAME;PWD=PASSWORD;


MSSQL driver for dbExpress support TLS protocol with SQL SERVER 2008 and 2008 R2

SQL Server 2008

  1. Install and update to 2008 SP4
  2. Install KB4057114

SQL Server 2008 R2

  1. Install and update to 2008 R2 SP3
  2. Install KB4057113

上述步驟可以賦予 SQL Server 2008/2008 R2 以及「sqlncli10.dll」支援 TLS 加密通訊能力,如此便能使用它連接更高版本的 SQL Server,同時也讓 MSSQL for dbExpress (dbxmss.dll) 可以繼續使用,皆大歡喜!


和你分享 😉

See also

2017/12/05

免費、可商業使用的 Delphi 和 C++ Builder Tokyo 介紹及下載教學 (CHT)


之前提到過【免費、可商業使用的 Delphi 和 C++ Builder Berlin 介紹及下載教學

最近在 EMBT 推出 Tokyo 10.2 後,又再一次想來體驗看看。

安裝方式都差不多,就不再多重複說明,但要注意的地方是:

安裝時會發生 Operation Error 的問題,如下圖:

2017/11/29

First HelloWorld with Sencha ExtJS in WebBroker -- Delphi 3 以上適用 (CHT)


在 IDERA 買下 Sencha 後,一直很想知道要如何使用,在 EMBT 還沒有推出新的開發框架之前,先來自己體驗看看吧!

首先,先要有 HTML5 模板,它長這樣:

2017/11/27

Statistically compare performance : Step sum total and Aggregates sum total (CHT)


有時我們會需要加總 DataSet 裡的某個欄位資訊給使用者,讓使用者可以很快速的掌握全局。

加總的方法很多,在資料庫典型的作法是:

SELECT SUM(Field) FROM Table



在 Delphi 中,我們常用的作法是這樣:

2017/11/20

Delphi 往 Web 方向發展,然後呢?

11/17 (五) 聽了 Embarcadero 網路研討會後,大致上有幾個重點:

  • WebBroker 可以在 Linux 上運行 (已經實現)
  • RAD Studio IDE 將會增加 ExtJS 的前端框架
  • 可能支援 JavaScript code insight

ExtJS 開發在這次的研討會並沒有全面性的展示,講師表示會在下一次研討會裡專門講解。

目前後端沒有多作延伸,依然是以 WebBroker 為基底,來看看 WebBroker 在目前 Delphi 裡的框架位階:


由圖可知,WebBroker 是非常底層的框架,它囊括了 HTTP 必要的元素,如 Request, Response 等,非常陽春,但原料豐富,相對靈活性極佳……

2017/11/15

Service Oriented Architecture with WebBroker

在 Embarcadero Technologies Youtube 上看到一篇關於【從零打造以服務導向的WebBroker】,底下將它內嵌過來:



前半部描述的是 SOAP,把 TRemotable 和 SOAP API 的搭配交待得很清楚,輔以 TRemotable 後,SOAP 服務可以更直覺的開發。

2017/10/08

Forever without restarting IIS - ISAPI Loader



Eggcentric ISAPI Loader is update the ISAPI dll solution.

Update your ISAPI DLL while in USE and without restarting IIS!!

I have a name is "ZooISAPI.dll" in ISAPI DLL.

How to use?

Step 1: Rename "ZooISAPI.dll" to "ZooISAPI.run"


Step 2: Copy "ISAPILoader_NODEBUG.dll" or "ISAPILoader_DEBUG.dll" to same path.

Step 3: The file rename to "ZooISAPI.dll"
This time, run the ISAPI path (Original the ZooISAPI.dll), you could get ZooISAPI.run works.

Step 4: When update ISAPI dll. Rename the new version "ZooISAPI.dll" to "ZooISAPI.update", and  move to IIS ISAPI path.
Step 5: Sleep(10000);   :P


Step finish: The ISAPI Loader will unload the .run and rename it to .backup and then rename the .update to .run and then load the .run
Yeah!! Update our ISAPI DLL while in USE and without restarting IIS, forever!!




See also:

2017/10/01

DBX framework 初探 (二) - In FireDAC


上回介紹了 DBX framework 的好處,我們來看看實作的程式碼:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := SQLConnection1.DBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;

由上面的原始碼可以看出,DBX framework 是建立在 dbExpress 上,但 FireDAC 的 TFDConnection 沒有內建 DBX framework,難道魚和熊掌不可兼得嗎?


當然可以!


FireDAC 是個海納百川的元件組 (雖然我對它沒有愛),和 dbExpress 結合倒也不是件難事。

使用的元件組是:
  • TFDConnection.
  • TFDPhysTDBXDriverLink.

FireDAC 的連線精靈很方便,只需注意:
  • Driver ID = TDBX (DBX4) or DBX (DBX v1~v3)
  • DriverName = 參考 dbExpress 區的 Driver Name (如 MSSQL、IBLite 等)

若有購買 dbExpress 3rd driver,在 FireDAC 包裝下,可以直接使用 TFDQuery,再也不用 TSQLQuery, TDataSetProvider, TClientDataSet 三個元件、三個步驟了。
































哎呀,被你發現還有後續內容啦。


FDConnection 包裝 dbExpress 後,利用 TFDCustomConnection.CliObj,DBX 元件組便可以利用它,再透過轉型的方式重現。


CliObj = Call Level Interface Object. (白話文是:切到【手動排檔】模式)


它的包裝單元很豐富,表格如下:

Driver  Wrapping class and unit 
Advantage  TFDSConnection, FireDAC.Phys.ADSWrapper.pas 
dbExpress (v <= 3)  ISQLConnection 
InterBase, Firebird  TIBDatabase, FireDAC.Phys.IBWrapper.pas 
MySQL  TMySQLSession, FireDAC.Phys.MySQLWrapper.pas 
Microsoft SQL Server  TODBCConnection, FireDAC.Phys.ODBCWrapper.pas 
Microsoft Access TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
IBM DB2 TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Sybase SQL Anywhere TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
ODBC TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Oracle TOCIService, FireDAC.Phys.OracleWrapper.pas 
PostgreSQL  TPgConnection, FireDAC.Phys.PgWrapper.pas 
SQLite  TSQLiteDatabase, FireDAC.Phys.SQLiteWrapper.pas 
TDBX (v >= 4)  TDBXConnection, FireDAC.Phys.TDBX.pas 
DataSnap TDBXConnection, FireDAC.Phys.TDBX.pas
MongoDB TMongoConnection, FireDAC.Phys.MongoDBWrapper.pas


之後只要改一行文字即可,如以下紅字內容:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := TObject(FDConnection1.CliObj) as TDBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;


警告:效能控請小心服用!


結語:
DBX framework 打從問市以來一直在傳達「以貼近底層的方式發揮程式最大效能」的概念。

但現實的程式設計市場是以【包裝便利】取勝。


從多數 Delpher 對 BDE、ADO 至死不渝,可以看出 Delphi 市場的真實偏好。
官方 FireDAC 的出現,可以看出 Delphi 對市場的妥協。



好的產品不一定賣,會賣的一定是對消費者有價值的產品。


對我們來說,能夠簡化工作量的才是有價值的工具。
在 DBX framework 是加重工作量,而 FireDAC 能簡化開發工作量,對多數的 Delphier 來說,這才是有價值的。

同樣是開發產品的我們,DBX framework 歷史教訓值得學習 ── 要做有價值的產品。

然而,DBX framework 所帶來架構設計上的轉變是不容忽視的,秘密就在……




文內表格裡的彩蛋,您發現了嗎?




See also:

2017/09/26

DBX framework 初探


DBX 框架在官方手冊裡有句話引起我的注意:
Currently, using a TDBXValue is the fastest way to pass a parameter, because these are the internal objects used to manage parameter lists.

新的 DBX 系列元件,如 TDBXCommand, TDBXReader 等,似乎和以前的 TDataSet 有所區別,和 TDataSet 的耦合性相當低。

架構相當底層,和直接呼叫 Driver API 大概只有一線之隔,這也是效能最好的原因。

但也因為如此,手刻程式碼相對變多,以前 TDataSet 會幫忙做的,像是 Params、FieldDefs 自動產生功能等,現在都要自己做,程式碼巨量增加,這成就感還不錯。

【效能】和【程式碼增加】一舉兩得,若你在視程式數量效能為績效的公司,強烈建議使用。(笑)


2017/09/24

Delphi 自動化 JSON 格式相容性分析


Delphi 自動化產出的 JSON 格式一直被詬病著,因為它的 JSON 格式在起始處一定會強制寫入「Meta Data」,它看起來像是:
"table":[["EmpNo",6,0,0,0,4,0,0,false,false,0,false,false], ["LastName",1,1,0,20,21,0,0,false,false,0,false,false]]
這般的格式,所以導致其它平台要和它相容很困難。


然而,你以為只是單純的「多了一隻怪手」的問題嗎?

2017/09/01

DataSnap REST + JS framework = full stack development (CHT)


ExpressWeb Framework, IntraWeb, UniGUI, Raudus, Elevate Web Builder, Kitto, Delphi MVC Framework...

Delphi 這麼多 Web Solution 中,你用過哪幾種?

2017/08/20

DataSnap REST API Authorization with PHP


About Authentication with DataSet REST JavaScript client.
In connection.js:

1
2
3
4
5
function setCredentials(user, password)
{
   connectionInfo.authentication = convertStringToBase64(user + ":" + password);
   var testCreds = new DSAdmin(connectionInfo).GetPlatformName();
}

connectionInfo.authentication will send user and password to DataSnap DSAuthenticationManager.OnUserAuthenticate.

Well, how to send it?

2017/08/17

Why I Choose Delphi! (CHT)


扣除使用 C++ Builder 的時間,我實際使用 Delphi 的時間點是 2012 年,它帶我看到了不一樣的世界,見識到世界各地的高手使用 Delphi 創造出他們引以為豪的產品,並且無私的分享他們的學習知識,使我的技術能力得以跟隨他們的能力提升。

最最讓我喜歡的是 Delphi framework,創造應用程式之快,程式碼之洗練真的沒有任何的 framework 能出其右。

你能想像要做一個資料庫應用程式,只需要在畫布上帶出「TDataSet」,「TDataSource」, 「TDBGrid」三個元件,就完成了嗎?而且還不需要任何的程式碼!

光是這三個元件,就足以創造出無數的應用,幾乎任何需要使用資料庫的場合,都是從這個基底出發的。

2017/08/11

Delphi Zlib 與 SynLZ 的壓縮比較


原本使用 Zlib 作為主要的壓縮處理,但是效率實在不能算是滿意。

於是找了使用「組合語言」寫出來的 SynLZ (mORMot),效能據說非常好,就來比較看看。

首先找了一個 45 MB 大小的文字檔進行壓縮。

運作程式圖


底下是比較結果:

2017/08/09

ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)

Delphi 跨平台資料庫程式設計火速上手,是本關於整合 Delphi 的跨平台技術打造 2-Tier 架構的跨平台 APP 的入門技術書。

全書沒有需要理解的技術知識,只講套路。

力求短時間把製作 APP 的工法熟悉,未來要開發其它的應用程式也能舉一反三。

底下是本書章節:

  • OpenSSL創造自己的金鑰    8
  • OpenSSL for Windows    8
  • 建構支援HTTPS的DataSnap Server    10
  • 第一次執行    13
  • 結論    17
  • DataSnap REST連線模式介紹    18
  • 持久連線模型    18
  • 多次連線模型    18
  • 不知該選哪一種時    19
  • DataSnap共享資料庫連線設計    20
  • 範例資料庫及ODBC資料來源    21
  • 建立可移殖到IIS的DataSnap Server專案    23
  • 建構DataSnap Client    27
  • 正式UI佈局    35
  • 本章總結    43
  • 多次連線模式DataSnap伺服器端設計    44
  • 為服務加入驗證    50
  • 建立資料庫連線元件    51
  • 增加資料庫查詢服務:FetchDataSet    53
  • 增加更新資料服務:ApplyUpdateData    56
  • 多次連線模式DataSnap客戶端設計    59
  • DataSnap客戶端模組設計    63
  • 實作客戶端Fetch Data    70
  • 實作客戶端ApplyUpdate Data    74
  • 原生連線API設計    76
  • 資料壓縮的必要性    95
  • 多連線模式章節總結    96
  • Professional和Community Edition社群版    96
  • Community Edition / Professional的DataSnap framework    98
  • 資料庫連結元件    100
  • DataSnap Bridge架構說明    101
  • DS Bridge Server建立 (使用FireDAC)    104
  • 建立資料連結元件 (FireDAC)    107
  • 建立第一個API:FetchData    109
  • 建立第二個API:ExecSQLCommand    113
  • DS Bridge Client建立 (使用FireDAC)    117
  • 建立與DS Bridge Server端的連線    119
  • 加入設計時期欄位    124
  • 圖像欄位的重建    125
  • 資料綁定 (LiveBindings)    126
  • 在設計時期切換分頁    129
  • 修改資料    135
  • 展示    138
  • 結語    139
  • 附錄    140
  • FDMemTableHelperUnit.pas    140

 


如果您對本書有興趣,或是想嚐試在行動裝置開發屬於自己的 APP 應用,可以在以下商城購買:



本書的 Example:Download

論 Firebird Embedded 最小部署與 SQLite 的比較 (CHT)


最近看嵌入式資料庫,找到 SQLite 和 Firebird embedded (emb) 的比較,SQLite 相當輕巧,搭配優良的開發工具,在部署時甚至不需要打包 sqlite3.dll 引擎。

真不甘心,Firebird embedded 也有最小配置啊!

就來整理一下,Firebird embedded 到底可以有多小吧!

最小配置:
  • fbembed.dll (視連接 Driver 可能需要改名為 fbclient.dll 或 gds32.dll)
  • icudt30.dll
  • icuin30.dll
  • icuuc30.dll

使用【最小配置】就可以連線 Firebird emb 資料庫。

但是會有副作用──在【每次】連線時會產生Log,並紀錄於「firebird.log」檔案,內容大致如下:

2017/07/30

FMX的設計硬傷,如何做出正確的跨平台UI設計?


最近再一次體驗Delphi在行動平台上的開發,接觸了許多官方和部落客的教學文章,做出來的APP卻總覺得只算是差強人意,視覺上有驚艷,但是體驗卻跟不上視覺所帶來的強烈感受。

大部分功能單一的元件沒有問題,複合功能多的用起來會有【可以用,但有說不上來的怪怪感】,整理起來不脫以下情形:

2017/07/26

一山不容二虎之 EDBClient - Key violation 記事



關聯式資料庫裡有個很基本的特性:PRIMARY KEY 條件約束。




一個資料表只能有一個 PRIMARY KEY 條件約束,並且任何加入 PRIMARY KEY 條件約束的資料行都不可接受 Null 值。因為 PRIMARY KEY 條件約束保證唯一的資料,它們通常是定義在識別欄位上。

-- 摘自 TechNet : PRIMARY KEY 條件約束 章節

Delphi 的 TClientDataSet 也受到資料庫的約束,但為了可以在前端就可以檢查資料唯一性,避免和後端資料庫無謂的資料傳遞,【EDBClient : Key violation】,就是針對唯一性所帶出的例外訊息。

而我卻踩到了這個地雷,使用者反應在存檔的時候會跳出上面的錯誤視窗。

存檔的程式內容簡略如下:

2017/07/07

Delphi in Web Development: WebBroker + EasyUI (01)


I have been received many demand about web development for long time.

But, I don't wont to use ASP.NET develop the web project.

Maybe we can design web page in Delphi WebBroker. And our need a good front framework.

2017/07/05

簡單的重試機制及 DUnit 應用,使用 Delphi XE



Simple retry mechanism in Delphi』裡寫出很簡單的重試機制。

運氣還不錯,老版本也可以使用。

比較有趣的地方是,在Daniele Spinetti 所提交的 Github,有為這個單元製作一個 DUnit Test 專案。

2017/06/29

JSON Parse in Delphi XE (03)

前情提要:

這篇要說明 JSON 格式在 Delphi 裡是怎麼被理解的。

JSON 名詞解釋:
JSON(JavaScript Object Notation),這世界上有兩大資料交換語言

2017/06/27

JSON Parse in Delphi XE (02)

JSON Parse in Delphi XE (01) 裡提到因為文字轉碼失敗引發的錯誤

今天就來試著解決這個問題

首先的判斷是:

Indy 的 BUG?

那就來看看其它的軟體是否能被正確顯示:

2017/06/26

JSON Parse in Delphi XE (01)

在 Delphi.ktop 的主題中,看到了【JSON求教】這一篇

如果在 XE 裡面要實現,是不是也是這麼簡單?

想到了,就開始來實作吧!

2017/06/23

How to use URLEncode in Delphi

URL編碼,也稱【百分號編碼(Percent-encoding)】

由於 URL 不能直接接受 UTF8 文字,所以要先轉成百分號編碼後,如此網址才能順利送給 HTTP Server

從 Indy 加入 Delphi 後,就可以用 IdURI.TIdURI 單元進行編碼

以【大 匠 之 風】為例,可以得到如下的結果:

2017/06/17

Web page design tool in Delphi



Delphi 在2009 版開始把 WebSnap 廢棄後,自此就再也沒有自帶「網頁設計工具」。

有的話也只剩下自帶的 IntraWeb Evolution 版本。

以及 3rd party 的 UniGui 等類似 IntraWeb 的 Web Application 工具。

它們是 Form Mode,把 Web Application 視為一種在瀏覽器下呈現的 EXE,在執行時期動態吐出 HTML 編碼 (TForm to HTML),在服務器上線後完全無法修改網頁文字,如果要改,又得回到設計模式下重新編譯再上架。

2017/06/09

Delphi DataSnap REST server and HTML5 client

緣起:

前一陣子和網頁前端開發者合作一個網站的開發,使用 Delphi 開發 REST Service 非常的快,兩三下就完成交差。但就在這時,前端工程師卻問了我一個問題:

你的 REST API 要怎麼用 JavaScript 連?



也許有什麼好方法可以讓前端也能快速存取 REST 方法。這讓我想到從 XE 開始,DataSnap REST Application 就有內建 JavaScript 套件和 2 個 Boilerplate,也許可以從官方文件中吸取一些知識。

2017/06/07

自製簡單版加總計算 -- 使用 ClientDataSet

最近接到同事發來的一個問題,說是【在表單的某處增加一個加總欄位後,這支程式的速度就下降了】。

「 TClientDataSet 就可以做到的功能,但它的效能有這麼差嗎?」

2017/06/06

讀書心得 -- GUI 設計大家談

博客來
應用程式開發的過程,不論是桌面或是行動平台,除了背景之外,使用最多的就是圖標了。

這本書方向是在寫 Code 之前的準備,目標是先找好相關的素材。

除了方便自己回顧外,如果有美工協作,雞同鴨講的情況就少很多,主要的內容像是:

2017/06/04

賀!慶祝 Delphi 邁向 22 年,萌代言人【神野甘音】初登場!

Delphi,伴我走過近 10 年的時光 (裝嫩中),日日夜夜陪伴著我,在我心目中,一直以為我的女朋友 Delphi 長成這樣:


又或是這樣

2017/05/09

Connect SQL Server from FireDAC in Ubuntu

FireDAC + Ubuntu + SQL Server the Frame Diagram photo

Now, We could connection database from Ubuntu to SQL Server use Delphi 10.2 FireDAC.

The SQL Server in AWS and Ubuntu version comparison.  For AWS version have support all feature like for Windows version. It's best solution!

If you would understand more about it. You can go to the URL:
Ubuntu(FireDAC)を使ってMS SQL Server(RDS)に接続する。[JAPAN]
Connect to Microsoft SQL Server (FireDAC)

 

仍然建議使用三方元件 -- 2024/02/15 更新

因為官方連結已失效,故參考 EMBT docs 重新整理本篇。

FireDAC 要在類 Unix (Unix-like) 系統上連結 MSSQL,一定要使用 ODBC:

  • UnixODBC (libodbc.dylib)
  • FreeTDS (libtdsodbc.dylib) ODBC driver (MAC)
  • SQL Server 的 Microsoft ODBC Driver 11 (Linux)

原始主文是以 AWS 的 SQL Server 為主軸,然而在 stackoverflow 上則有網友表示 FireDAC 在這方面還很有問題,會建議採用 Devart Driver (SDAC 或 dbExpress Driver
for SQL Server)。

See Also

 

2017/04/24

Is there a "formal" design pattern to DataSnap?

English version:

Is there a "formal" design pattern to DataSnap?
We learn REST DataSnap framework from technical documents in Embarcadero site.

Usually let us feel about:

  1. Very slow!
  2. Unstable!

But, I tried 50000 clients concurrent calling EchoString process into myself DataSnap Service.

......Don't worry.

All process is normal end. It's fine!

My REST DataSnap is strong!


So...Why always have "unstable" infomation appear in many website.
.
.
.
.
.
.
.
.
.
.
.
.
.

Oh! Because "HTTP persistent connection"!

About "HTTP persistent connection", In wiki is:

HTTP persistent connection, also called HTTP keep-alive, or HTTP connection reuse, is the idea of using a single TCP connection to send and receive multiple HTTP requests/responses, as opposed to opening a new connection for every single request/response pair. The newer HTTP/2 protocol uses the same idea and takes it further to allow multiple concurrent requests/responses to be multiplexed over a single connection.

Multiple connections V.S. Persistent connection


Although "HTTP persistent connection" have advantages about "Reduced latency in subsequent requests (no handshaking)".

But, The advantages is "disadvantages": Connection count is little in REST DataSnap Service!

Because each client is hold in service, this is hard pressure!

If client lose connection from service when network unstable, and then affect memory usage continuously grows, final crash.


More than "HTTP persistent connection" same "More Energy consumption" in mobile device!

The App connection closed when into sleep mode from mobile device.

When re-open, we will get: wrong window.

A error info is like it.

About problem, 
we can used "Heartbeat packet mode" is fine solution.

Heartbeat packet mode:
Send a message from each sec to service, it like heartbeat behavior, so named it.


But it's energy consumption more!


..........

conclusion:


DataSnap framework features is flexibility!

Have a "formal design" in DataSnap framework?

Any can solve problem are all great formal design!

When you think "DataSnap is bad", please think differently, what is Correct Design?

Maybe you will discover the new continent!

中文版本:實作 REST DataSnap,你用對方法了嗎?

看似好棒棒的 DataSnap 框架,這裡頭的眉眉角角還真是不少。


官方所給的 REST DataSnap DMEO,一直被詬病的有兩點:
  1. 太慢
  2. 不穩

2017/04/05

Linux 後端開發初體驗,使用Delphi 10.2 Tokyo

掩飾不住內心的喜悅,今天一裝完 Delphi 10.2 Tokyo,馬上就來試試看 Linux 最可能的應用:Web Application 開發!

在 PAServer 安裝好後,在 Target Platforms 上增加了 【64-bit Linux】編譯選項,環境部署也只不過是數秒的時間。

體驗完 Hello World in Linux Console Mode,接著就是實作一個 Web Broker吧!

但單純只出現一個【Hello WebBroker】實在不能表達我現在的喜悅。

那麼,就搭配 JQuery Mobile 來個前端整合試試看!

成果如下圖:


在 Linux 上實現 Debug WebBroker。成功!

掩飾不住內心的喜悅,在 Linux 上終於有了解決方案,Delphier 總算是一吐局限在 Windows 平台的悶氣了!

2017/03/27

為 Delphi 10.2 練手,IntraWeb 和 EasyUI 的結合實作

我一直以為 IW 只有 Application Mode 和 (Integrated) Page Mode。

在 IW14 版,新增了 Content Handlers 特色後,當時還不是很了解這功能可以帶來什麼好處。

但在看了【IntraWeb 之 EasyUI 篇】後,才恍然大悟,原來前端可以這麼簡單開發:


我再也不用為了改一個字而整個服務停機啦!


接下來,我也依樣畫葫蘆,做了一個簡單的展示:

後端及資料庫: Delphi 10.1 + IntraWeb 14.1.4 + Firebird 2.5
前端: EasyUI (JQuery components) 1.5.1


2017/03/23

DIY 修正 JSON.ToString 的處理

你在 JSON 的轉碼上也遇到問題了嗎?


在 Delphi 初期支援 JSON 版本,JSON相關類別有個【ToString】的函式,對於異質平台間的轉換需求上,替我們省下了不少時間。

But!人生最重要的就是這個 But!

2017/03/21

IntraWeb 未來也要支援 Linux 了!

IntraWeb 隨著 Delphi 支援 Linux 後,更加令人期待它未來的發展!

IntraWeb 在 14 版之後的異變相當大,尤其是 Page Mode 設計上。

在 Delphi 10.2 準備正式發佈時,IntraWeb 官網上也馬上提出新的 Roadmap,除了宣告最低支援開發工具版本之外,還要增加對 Linux 的支援。

Delphier 可以服務的地方就更多了,不再僅是支援 Windows-base。


一起來提升我們的競爭力吧!

see also:

2017/03/18

10.2 出現後,這個訊息註定讓 Delphier 幾家歡樂幾家愁啊

早在 XE4 時期,在線上手冊就出現這麼一段話:
dbExpress, which is described in this tutorial, is being deprecated.

當時 FireDAC 並不完全成熟,還在想何時才能完全取代 dbExpress 還是未知數,更何況 BDE 現在還活得頭好壯壯啊!

2017/03/10

Delphi 10.2 正式名稱為【Tokyo】!


【Delphi 終於正式要重新支援 Linux 】了!

上一次支援 Linux 已是 2002 年的事


上一次支援 Linux 的產品叫【Kylix】(199x - 2002),CLX Framework,和 VCL framework 可以相容,採 re-compile 方式編譯同一個專案以達到跨平台,那時主打【DataSnap】和【dbExpress】三層架構和資料庫連結技術。

2017/02/25

Delphi 對 Linux Server 重啟支援:開始之前

Image courtesy of Jim McKeeth.

Delphi 10.2 開始對 Linux Server 進行支援,也就是說,FireUI 在這個版本還沒有辦法支援 Linux 圖形介面。

2017/01/14

Open dbExpress update, RAD Studio 10.1 Berlin is supported!

[2017/01/17]
Updated!
Please see " Open dbExpress update - 2017.01.17 version "
===============
I have always thought, Open dbExpress is a very cool product, using ODBC to reach a variety of connection database, and the open source code, allowing more people to maintain.

Do not worry about this product like DBX4MySQL, terminate the support of the incident.

However, Open dbExpress after 2014, also in a tragic situation of unmanned maintenance. Until 2016, support for RAD Studio is limited to XE2.

Continued in the discussion area to see whether people continue to ask whether the continuity of the Open dbExpress support.

Now, I'm happy to announce that Open dbExpress has been revived to support RAD Studio 10.1 Berlin.

Please note! XE3 ~ Seattle not yet supported.

Test MS SQL Server and MS Access can connect and get the data.

Known Issues:

1. Install dbxoodbc240.bpl, click IDE DataExplorer in the tree-node for dbExpress, will output [Duplicates not allowed.] Error message. This looks like an IDE bug.

Duplicates not allowed when click Data Explorer.
Workaround: Remove dbxoodbc240.bpl. Re-install the Open dbExpress package when needed.

2. The version is not updated. This means that the version of the problem still exists.

3. I do not have administrative privileges for this project, so I can not publish this project at Sourceforge. So I put in my personal space for download, if you have permission to upload, you are welcome to upload directly to the update to Sourceforge Open dbExpress.

Finally, download the link here:
Download Open dbExpress 2017.01.14 supported RAD Studio 10.1 Berlin.


Enjoy.