Translate

2019/03/20

Howto: create-react-app

在重新安裝 create-react-app 發生拒絕存取的訊息:



使用:
sudo chown -R $USER:$USER '/home/[USER_NAME]/.npm/'

即可解決這個問題。

create-react-app 屬於模板套件,必須先使用 npm 進行安裝。

完成後才使用它來建立新的專案。

例如:
create-react-app my-app

See also:

2019/03/19

Howto: Install NodeJS in Linux mint

Step 1 – Configure Node.js PPA
  • sudo apt-get install curl python-software-properties
  • curl -sL https://deb.nodesource.com/setup_11.x | sudo bash -

Step 2 – Install Node.js on Linux Mint
  • sudo apt-get install nodejs

Step 3 – Install Yarn using NPM
  • sudo npm install yarn -g

Step 4 – Check Node.js Version
  • node -v (11.12.0)
  • npm -v (6.7.0)
  • yarn -v (1.13.0)


See also:

2019/03/16

Solution: Socket Error 10054 in DataSnap

當產品鬧牌氣時就會很想巴下去(示意圖/翻攝自Pixabay)


使用 SQLConnection 連接 DataSnap 的開發者都知道這是一種長連接的作法。

但這個作法有個缺點,就是如果 Client 發生瞬斷情形,在獲取資料會觸發以下例外:

  • EIdSocketError 10054 : Connection reset by peer.
  • EOleException: Connection Closed Gracefully.

在網路上看到解決方式是:
設置心跳包,每分鐘進行連線一次。

這個方式可以確保連線不會被默默切斷,只是這方式卻不能避免網路異常所導致的斷線情形。

再加上異常補獲的方式就更好了。

以下便是我的範例解法:

2019/01/30

Test DevExtreme DataGrid data binding

DataGrid 是 DevExtreme 主打的元件之一,把 PHP 環境架設好之後,就拿了官方範例來使用。
範例都很佛的放在 Github 供人下載

範例 JS 的這段程式碼讓我覺得非常奇怪:
    var url = "php/service.php";
    var db = DevExpress.data.AspNet.createStore({
        key: "ID",
        loadUrl: url,
        insertUrl: url,
        updateUrl: url,
        deleteUrl: url
    });
後端使用了 PHP,卻在前端使用 AspNet 建構式。

除了 DevExtreme 主程式外,還需要額外下載 ASP.NET 外掛程式 (JavaScript)

再看看 PHP 是怎麼寫的:

2019/01/28

WebBroker and Unicode


以下的內容在 Delphi 10.2 (含)以上版本已經解決,新版使用者可以略過不看。

===========================================

出來江湖混,該還的還是要還。

前端寫久了,還是遇到了 Unicode 解析問題。

以 HTTP Method GET 為例:
http://{local}/action?id=許功蓋堃

已知:
Delphi 2009 以上的 string = UTF-16 格式。

而取得的內容是這樣的:
看到這個心都涼了半截

仔細攻略了 IdHTTPWebBrokerBridge 和 HTTPApp 兩個單元後,才發現裡頭大部份的函式及屬性都是 AnsiString 而非 String 基礎類別。

而 IdHTTPWebBrokerBridge 單元主要只應用在 HTTP Server 上,搬上 IIS 後就和它無關,所以可以直接忽略這個單元不看,雖然我也是看了它很久很久才驚覺這個答案。(眼神死)


接著再把注意力轉到 HTTPApp 單元,最關鍵的就在這句話:
一律使用 AnsiString,Unicode 都不 Unicode 了

ExtractHeaderFields 這個函式遇到要解析的內容僅僅只做了百分比符號轉換,還少做了一道Unicode / UTF-8 (UTF8) 編碼轉換的工作。

於是我們的 Unicode 文字就被轉成亂碼直出了。

現在,到底是該 Debug HTTPApp 還是有其它 3rd party 的解法呢?


2018/12/24

Delphi in Depth. Windows Message vs Thread.

程式很忙


同事最近遇到程式運作流程不如預想的情形,來找我幫忙解決。

研究程式碼的過程中,發現他用到大量的 PostMessage / SendMessage,這是相當有趣的走向,同事解說是在於在 Event call Event 時,有時會因為 UI 刷新造成互相干擾進而發生例外,所以才這樣寫。

PostMessage 和 SendMessage 兩者差異說明如下:
Non Blocking 和 Blocking,也等同 Asynchronous (非同步) 和 Synchronous (同步) 的關係。

PostMessage 的場合:主程式 (Main Thread) 執行到此句時會把 Message 放進 Message Queue 裡 (可以視為 Sub Thread) 依序排好,等待 Main Thread Idle 時才會把 Message Queue 依序派送到主程式的對應函式處理。

程式流程如下:

2018/11/29

JavaScript for WebBroker framework



前端網頁寫久了,還是覺得 Delphi JavaScript DataSnap framework 在 AJAX 上使用來得方便,官方範例的 ReverseString 是這樣寫的:

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

Delphi 跨平台資料庫程式設計火速上手,是本關於整合 Delphi 的跨平台技術打造 2-Tier 架構的跨平台 APP 的入門技術書。 全書沒有需要理解的技術知識,只講套路。 力求短時間把製作 APP 的工法熟悉,未來要開發其它的應用程式也能舉一反三。 底下...