Gordon Li

Gordon L6149 has not set their biography yet

Posted by on in Blogs
在上次的文章中笔者说明了如何使用C++Builder 柏林版开发BeaconFence客户端App并且能在室内精确定位. 随后有人写信询问笔者是否可再说明如何链接后端查询功能或是链接到云端?   由于Delphi和C++Builder本来就对多层和云端开发有着良好的支持, 因此要让BeaconFence客户端App连结后端供查询或是推播功能, 那么可有许多选择, 例如可使用DataSnap, RAD Server, Amazon/MS的云端服务,以及许多其他第3方解决方案等. 本文将使用RAD Server做为说明范例的后端解决方案, 因为在Delphi/BCB中即内附开发版的RAD Server.   首先我们可在IDE中建立EMS Package:   接着建立Package的资源, 此资源可稍后输出让客户端呼叫使用:   选择建立数据模块型态的资源并为此资源取名为对您有义意的名称, 在本文中将使用” IoTBeaconFence范例POC”   接着选择您的资源要提供的服务种类, 例如下面笔者勾选了所有的功能以便提供完整的CRUD功能: 点选Finish按钮后Delphi/C++Builder便会建立相关的档案, 在建立的数据模块看到下面的程序代码: type   [ResourceName('IoTBeaconFence范例POC')]   TIoTBeaconFencePOCResource1 = class(TDataModule)   p...

Posted by on in Blogs
在上次的文章中筆者說明了如何使用C++Builder 柏林版開發BeaconFence客戶端App並且能在室內精確定位. 隨後有人寫信詢問筆者是否可再說明如何連結後端查詢功能或是連結到雲端?   由於Delphi和C++Builder本來就對多層和雲端開發有著良好的支援, 因此要讓BeaconFence客戶端App連結後端供查詢或是推播功能, 那麼可有許多選擇, 例如可使用DataSnap, RAD Server, Amazon/MS的雲端服務,以及許多其他第3方解決方案等. 本文將使用RAD Server做為說明範例的後端解決方案, 因為在Delphi/BCB中即內附開發版的RAD Server.   首先我們可在IDE中建立EMS Package:   接著建立Package的資源, 此資源可稍後輸出讓客戶端呼叫使用:   選擇建立資料模組型態的資源並為此資源取名為對您有義意的名稱, 在本文中將使用” IoTBeaconFence範例POC” 接著選擇您的資源要提供的服務種類, 例如下面筆者勾選了所有的功能以便提供完整的CRUD功能: 點選Finish按鈕後Delphi/C++Builder便會建立相關的檔案, 在建立的資料模組看到下面的程式碼: type   [ResourceName('IoTBeaconFence範例POC')]   TIoTBeaconFencePOCResource1 = class(TDataModule)   published ...

Posted by on in Blogs
在发表RAD Studio柏林版介绍到DataSnap功能时,英巴的文件只说柏林版的DataSnap除了改bug之外,就是开始移除Indy并改用THTTPClient等新的HTTP相关类别, 另外又隐约提到一个类别TDBXJSONStream,它可使用在DataSnap服务方法中. 第1次看到TDBXJSONStream时感觉有点陌生,但从它的名称可大约猜出它应该是一个使用在dbExpress(DBX?)应用中的相关类别并提供JSON串行流的功能(JSONStream?). 嗯, 我很好奇的在IDE中搜寻TDBXJSONStream,并在Data.DBXCommon程序单元中找到了它, TDBXJSONStream是一个新类别,我并没有在以前的版本中看到它.查看它的程序代码发现它提供了JSON Reader和Writer, 那么这代表它提了写入JSON对象和读取JSON对象的功能.     property Reader: TJSONReader read GetJSONReader;     property Writer: TJSONWriter read GetJSONWriter; 此外它又有一个TStream对象特性, OK, 那么它一定可以在此TStream对象中写入和读出JSON对象, 而这些功能也正是它的名称代表的意义.     property BaseStream: TStream read FBaseStream; 了解了它的功能之后我们就...

Posted by on in Blogs
在發表RAD Studio柏林版介紹到DataSnap功能時,英巴的文件只說柏林版的DataSnap除了改bug之外,就是開始移除Indy並改用THTTPClient等新的HTTP相關類別, 另外又隱約提到一個類別TDBXJSONStream,它可使用在DataSnap服務方法中. 第1次看到TDBXJSONStream時感覺有點陌生,但從它的名稱可大約猜出它應該是一個使用在dbExpress(DBX?)應用中的相關類別並提供JSON串列流的功能(JSONStream?). 嗯, 我很好奇的在IDE中搜尋TDBXJSONStream,並在Data.DBXCommon程式單元中找到了它, TDBXJSONStream是一個新類別,我並沒有在以前的版本中看到它.查看它的程式碼發現它提供了JSON Reader和Writer, 那麼這代表它提了寫入JSON物件和讀取JSON物件的功能.     property Reader: TJSONReader read GetJSONReader;     property Writer: TJSONWriter read GetJSONWriter; 此外它又有一個TStream物件特性, OK, 那麼它一定可以在此TStream物件中寫入和讀出JSON物件, 而這些功能也正是它的名稱代表的意義.     property BaseStream: TStream read FBaseStream; 瞭解了它的功能之後我們就可...

Posted by on in Blogs
Metric和Audits这2个功能早已经存在Delphi很多年了, Metric和Audits可以让我们检查和保证程序代码的撰写质量, 但就我个人所知经常使用Metric和Audits的开发人员却很少, 我也不知道为什么.    在我于各地进行Delphi相关的活动中,也认识了一些朋友, 他们可能是项目/产品经理, 因为他们通常都会询问一些类似的问题, 例如:   Delphi有没有工具确保外包程序代码的质量? Delphi有没有工具确定外包厂商有遵守我们的制定的程序代码规范? 如何寻找程序代码中的漏洞和弱点?   等问题. 事实上Metric和Audits就可以帮助开发人员确保程序代码的质量, 在柏林版中又加入了Toxicity功能可以帮助开发人员制定和搜寻程序代码规范. 例如我看过许多公司都规定一个函式长度不能超过多少行, 一个if叙述不能超过多少层, 以及函式的参数不能超过多少个等.     这些程序代码规范有的和日后维护的难易有关, 有的和执行效率有关, 都是非常实用的规范, 但在数万或是数十万行的程序代码中要如何验证巨量的程序代码呢?     在柏林版中开发人员可以在IDE中点选Tools|Options|Toxicity Metrics启动Toxicity的设定对话盒: 在Toxicity Metrics设定对话盒你可以看到我们可设定验证函式长度, 函式参数数目, if叙述层, 以及函式需要测试的独立执行路径数目等重要的程序代码质量数据.  ...

Posted by on in Blogs
Metric和Audits這2個功能早已經存在Delphi很多年了, Metric和Audits可以讓我們檢查和保證程式碼的撰寫品質, 但就我個人所知經常使用Metric和Audits的開發人員卻很少, 我也不知道為什麼.    在我於各地進行Delphi相關的活動中,也認識了一些朋友, 他們可能是專案/產品經理, 因為他們通常都會詢問一些類似的問題, 例如:   Delphi有沒有工具確保外包程式碼的品質? Delphi有沒有工具確定外包廠商有遵守我們的制定的程式碼規範? 如何尋找程式碼中的漏洞和弱點?   等問題. 事實上Metric和Audits就可以幫助開發人員確保程式碼的品質, 在柏林版中又加入了Toxicity功能可以幫助開發人員制定和搜尋程式碼規範. 例如我看過許多公司都規定一個函式長度不能超過多少行, 一個if敘述不能超過多少層, 以及函式的參數不能超過多少個等.     這些程式碼規範有的和日後維護的難易有關, 有的和執行效率有關, 都是非常實用的規範, 但在數萬或是數十萬行的程式碼中要如何驗證巨量的程式碼呢?     在柏林版中開發人員可以在IDE中點選Tools|Options|Toxicity Metrics啟動Toxicity的設定對話盒: 在Toxicity Metrics設定對話盒你可以看到我們可設定驗證函式長度, 函式參數數目, if敘述層, 以及函式需要測試的獨立執行路徑數目等重要的程式碼品質數據.     ...
BeaconFence在数个C++Builder/Delphi版本中就推出了, 我记得也在数年前的产品发表会中介绍过,当时Beaconfence身价不菲, 我也没机会用. 但从Seattle版本后Embarcadero大幅降低 Beaconfence的价格, 而且提供开发人员版,所以才有机会试用它.     日前一位使用C++Builder的朋友向我抱怨Beaconfence只有Delphi的范例, 没有C++Builder的范例, 他问我到底能不能用C++Builder开发Beaconfence? 能不能帮忙用C++Builder做一个Beaconfence的POC? 因此笔者特别商借了3个Beacon, 一个是插电式, 2个使用电池的Beacon:   藉由TBeaconMapFencing组件加载POC地点的布建架构图, ,再分别把3个Beacon设置在书房, 客厅和玄关处:   Berlin Update 2版Beaconfence我最喜欢的一点就是为TBeaconMapFencing组件加入了Extended Mode, 这个模式可以同时扫瞄iBeacon,AltBeacon和Eddystone 3种不同型式的Beacon, 又方便而且又稳定: 之后我们就可以藉由下面的C++程序代码根据用户的喜好设定TBeaconMapFencing组件的地图设定值: void TfmMainForm::ChangeOption(TFencingMapOption AOption, bool Shoul...
 BeaconFence在數個C++Builder/Delphi版本中就推出了, 我記得也在數年前的產品發表會中介紹過,當時Beaconfence身價不菲, 我也沒機會用. 但從Seattle版本後Embarcadero大幅降低 Beaconfence的價格, 而且提供開發人員版,所以才有機會試用它.   日前一位使用C++Builder的朋友向我抱怨Beaconfence只有Delphi的範例, 沒有C++Builder的範例, 他問我到底能不能用C++Builder開發Beaconfence? 能不能幫忙用C++Builder做一個Beaconfence的POC? 因此筆者特別商借了3個Beacon, 一個是插電式, 2個使用電池的Beacon:   藉由TBeaconMapFencing元件載入POC地點的佈建架構圖, ,再分別把3個Beacon設置在書房, 客廳和玄關處:   Berlin Update 2版Beaconfence我最喜歡的一點就是為TBeaconMapFencing元件加入了Extended Mode, 這個模式可以同時掃瞄iBeacon,AltBeacon和Eddystone 3種不同型式的Beacon, 又方便而且又穩定: 之後我們就可以藉由下面的C++程式碼根據使用者的喜好設定TBeaconMapFencing元件的地圖設定值: void TfmMainForm::ChangeOption(TFencingMapOption AOption, bool ShouldI...
Berlin Update 2的新功能之一就是提供了2個新的VCL元件: TCalendarView和TCalendarPicker  這2個元件可以讓開發人員藉由它們的Date特性值來處理日期資料:   不過這2個元件也仍然可以藉由Livebindings和資料庫中的欄位資料繫結,開發人員可以右擊滑鼠選擇Bind Visually:   於Live Bindings視窗中再點選元件下方的”…”啟動Bindable Memebers對話盒, 再於其中選擇要繫結Date特性:   最後再拖曳資料庫的日期欄位到此2個元件的Date特性即可. 例如下圖就是筆者在TCalendarView和TCalendarPicker人件中繫結和顯示MS SQL Server 2012中Northwind資料庫Employees資料表的BirthDate欄位資料:  TCalendarView和TCalendarPicker元件可以結合程式碼或是Live Bindings技術處理資料, 仍然保持和其他VCL元件一樣的直覺和好用的特性....
  • Page :
  • 1

Check out more tips and tricks in this development video: