LiveBindings for VCL Developers – Webinar!

LiveBindings for VCL Developers [Webinar]

Visual LiveBindings is a technology that allows you to bind your data and objects (model) to the UI making. While LiveBindings is a key part of FireMonkey development, it is often overlooked by VCL developers.

A while ago I started a series of blogs on LiveBindings and how to use them with existing VCL applications. Covering seven blog posts, I looked at

  1. LiveBinding to DataSets
  2. LiveBinding to Objects
  3. Creating LiveBindings via Code
  4. Master Detail relationships (and objects as properties)
  5. Advanced Master Detail Relationships
  6. Mashing up Master Detail on different sources
  7. Helpful classes for LiveBindings

Following a high amount of demand and questions, you now have you chance to see me present live on this topic and ask your LiveBindings questions. Join me on Wednesday 31st August at 10am GMT.

Register now via community.embarcadero.com

The webinar will be followed by the live Q&A session.

Delphi Boot Camp

Delphi Boot Camp, 100% discount on Starter Edition and Marco’s Book!

Delphi Boot Camp - 5th to 9th September 2016
Delphi Boot Camp – 5th to 9th September 2016

Following on from the recent success of the C++ Builder Boot Camp, attended by programmers from 128 countries, its Delphi Boot Camp time!!

Delphi Boot Camp

Join Embarcadero experts and leading community MVP’s for 5 workshops from Monday 5th September to Friday 9th September.

Focusing on getting stared and using the FMX framework to create cross platform ready code, Delphi Boot Camp is a great way to learn new skills and ask leading experts direct questions on application development.

Date Session Presenters
5th Sept Introduction to Delphi: The IDE and Your First App David I
6th Sept Getting to Know the Delphi Language Marco Cantu
7th Sept Building Effective User Interfaces with FireMonkey Jim McKeeth  & Daniele Tetti
8th Sept Game Development with Delphi Eli M
9th Sept Stepping up to Mobile and Database Development Jim McKeeth
Register Now!

100% Discount on Delphi Starter Edition

To help you with your study at boot camp. Embarcadero are also making Delphi Starter Edition available with 100% discount! All you need to do is register, download and install your Delphi license! But don’t stop there!

Marco Cantu’s Object Pascal hand book!

The final part of the Boot Camp is the programming book! Delphi is the home to modern Object Pascal programming and you can get up to speed with the modern Delphi / Object Pascal language with the help of Marco Cantu’s awesome handbook.

Marco Cantu is the Delphi Product Manager and world leading Delphi expert. His ever popular Object Pascal handbook is available as a free e-download for the duration of the course to anyone on Starter edition! All you need to do is register, download and install the Delphi Starter Edition  and then visit Code Central registered user downloads. To get you there quicker, click  http://cc.embarcadero.com/item/30605.

See you online and happy coding!

InterBase – Webinar – The Ultimate Embedded Database

InterBase – The Ultimate Embedded Database

InterBase is the ultra-fast, scalable award winning multi-platform embeddable SQL database with commercial grade data security, disaster recovery and change synchronization.

Join me on the 28th July to explore why OEM, ISV and VAR’s the world over are using InterBase to:

  • Secure their application data
  • Improve their product with commercial grade features
  • Support best practice in data protection
  • Lower their support demands
  • Reduce their cost and improve profitability

Register Now

InterBase_IoTA_2015_AwardWinner

InterBase XE7 Update 6

InterBase XE7 – Update 6

InterBase XE7 update 6 is now available for general release. The patch is available for server-based Editions of InterBase XE7 only on Windows and Linux for both 32bit and 64bit

For notes on previous InterBase XE7 updates please select the links below

What’s fixed in InterBase XE7 – Update 6?

In short. no new features, just a few bug fixes to the InterBase core kernel and IBConsole: See full list here

  • Windows 10 update deletes Files in AppData Directory
  • Deadlock at database header page when enabling database shadowing
  • IBConsole does not show proper value for “Page Buffers” in Database Properties form
  • IBConsole Trigger editor fixes
  • Change View Subscription causes columns in a group by to be null
  • Database corruption during fast expansion of single table from multiple clients

Downloading latest InterBase XE7

Embarcadero CodeCentral “Registered Users” can download the patch binaries (Server/Desktop/Developer/Trial) for Windows and Linux, and, ToGo Edition. You can find the downloads at http://cc.embarcadero.com/reg/interbase

For new users, the trial and developer editions are available for free at http://www.embarcadero.com/products/interbase/downloads

InterBase Array Fields and FireDAC

InterBase Array Field

The IoT Award Winning database InterBase, has for a long time supported the ability to store data in an array field type. This was originally introduced as a new field type to reduce API calls and speed up data write time for a specific Boeing project many years ago. Writing each value into an array can also simplified the data model as well as benefiting database performance.

While array field in InterBase have been around for a long time, they have not aways been that easy to access from the components layer reducing their adoption.

With the growth of IoT, and the ability to store multiple data points per record becoming much more common place today, the ability to work with data in the InterBase array field type using FireDAC components has been added to 10.1 Berlin.

Explore the sample in depth, and get the link the sample below. Continue reading InterBase Array Fields and FireDAC

Faster FileStream with TBufferedFileStream

Buffering the File Stream in Delphi / C++ Builder

Part of the very fast FireDAC database component library is TFDFileStream,a class that allows high performance access to trace files, (TFDMoniFlatFileClientLink), text data file reading (TFDBatchMoveTextReader / TFDBatchMoveTextWrtiter), SQL Script file reading (TFDScript) and data serialization to file (TFDMemTable etc). Well, it seems it was too good to keep hidden and with the release of 10.1 Berlin, this has been moved from  FireDAC.Stan.Util to System.Classes and has been renamed to TBufferedFileStream.

TBufferedFileStream is a TFileStream descendant that optimises multiple consecutive small writes or reads. In other words, TBufferedFileStream adds buffering support to TFileStream.

As TBufferedFileStream descends from TFileStream it is a simple replacement to add it into your applications and gain the speed benefits it brings.

Read more for code example..

Continue reading Faster FileStream with TBufferedFileStream

Swagger / YAML and self documenting RESTful API’s

Get your Swagger on with Delphi

So you want to build a new REST server (using Delphi or C++) and want it to become really popular and easily used by other developers. Imagine….

  • Your building a new REST server,
  • You have to document the API’s
  • You have to keep the documentation updated
  • To aid adoption of your services you want to create examples for other developers to connect into your server quickly

With the release of RAD Studio 10.1 Berlin, it is now possible to do all the above thanks to the new documentation attributes used in EMS packages that create YAML documentation that can be used with Swagger.

What is YAML?

YAML: (rhymes with “camel”) YAML Ain’t Markup Language

In short, YAML is a human friendly data serialization standard for all programming languages that is a subset of JSON.

Both JSON and YAML aim to be human readable data interchange formats. However, JSON and YAML have different priorities. JSON’s foremost design goal is simplicity and universality. Thus, JSON is trivial to generate and parse, at the cost of reduced human readability. It also uses a lowest common denominator information model, ensuring any JSON data can be easily processed by every modern programming environment.

In contrast, YAML’s foremost design goals are human readability and support for serializing arbitrary native data structures. Thus, YAML allows for extremely readable files, but is more complex to generate and parse. In addition, YAML ventures beyond the lowest common denominator data types, requiring more complex processing when crossing between different programming environments.

YAML can therefore be viewed as a natural superset of JSON, offering improved human readability and a more complete information model. This is also the case in practice; every JSON file is also a valid YAML file. This makes it easy to migrate from JSON to YAML if/when the additional features are required.

What is Swagger?

Swagger is a simple yet powerful representation of your RESTful API, and as part of the open tools initiative (joining November 2015) it is backed by members such as Microsoft, Google, PayPal and IBM.

Using a YAML document, you can create Swagger instance of your API.

With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment making it a great choice to make your REST server easily integrated and used by others.

With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability.

Creating YAML with Delphi / C++ Builder

To gain the benefits of Swagger you need to create the YAML documentation; this is achieved using a number of new attributes defined on the custom API’s you are creating. The three core Custom API Documentation attributes are:

In addition there are two additional documentation elements that allow you to define EndPointObjects that are used by your API. This way you define structures that are returned, rather than just returning simple types.

Custom API Documentation Sample

With Rad Studio 10.1 Berlin, in the samples, there is a new demo that covers the above custom api documentation attributes. If you want to open it in the IDE, choose “Open a sample project” and browse to the following folder and open the APIDocDelphiAttributes.bpl package (cpp equivalents also available, swap Delphi for CPP in names).

 \Samples\Delphi\Database\EMS\APIDocAttributes

As this sample uses InterBase, you need to make sure you have started InterBase. If its not running, use the IBServerManager to make sure its running. 

Rather than cover each of the attributes here, and repeat the documentation, I’ll leave you explore the links above to read up on these attributes, instead I want to use this sample to explore the YAML using Swagger UI, but first lets get the YAML document by running the sample.

Getting YAML from EMS Sample

Compile and run (F9) the sample project and choose Open Browser. You should now see a call to http://localhost:8080/version showing version 2.1 or higher.EMS Version

To get the documentation from the server, navigate to http://localhost:8080/api where you will see the different documentation types supported. EMS API

This shows 2 currently. apidoc.yaml and apidoc.json. Add these to the end of the API url to see how they look. e.g. http://localhost:8080/api/apidoc.yaml

EMS APIDoc YAML
http://localhost:8080/api/apidoc.yaml returning YAML from use with Swagger from EMS

YAML to Swagger UI

So you have a YAML document.. now what? Swagger UI is a great tool for reading the YAML document and giving you interactive HTML documentation for your RESTful API.

You can download the latest Swagger UI from GitHub onto your development machine https://github.com/swagger-api/swagger-ui

Download Swagger UI
Download Swagger UI

Unzip the download on your development machine / vm. In there locate the dist folder and open the index.html

A note on CORS

Now before we go any further, your need to be aware of CORS – Cross Origin Resource Sharing. In short, because we will want to enable PUT, POST, DELETE from outside the core domain, we need to allow CORS (or you will not be able to call EMS)

You can either update the EMS configuration to allow CORS or install the following google chrome plugin. If you install the plugin, once you have the SwaggerUI index.html page open, you need to make sure its enabled. (i’ve sometimes found I’ve had to disable and re-enable it to get it to work).

Enabling CORS using Google Chrome Plugin
Enabling CORS using Google Chrome Plugin

Loading the YAML into Swagger

Copy the URL for the YAML document and post it into your SwaggerUI/dist/index.html page, and choose Explore.

The sample (pet store) documentation in SwaggerUI will now be replaced with the documentation form the EMS server.

You can now browse and invoke the API calls directly from the SwaggerUI interface. The example creates a category called Sample Tag (which you can see listed) All the other categories cover the default features of EMS, including User security, and the new ThingPoint EdgeModule API’s

Visualising YAML in Swagger UI
Visualising YAML in Swagger UI

You can now explore the categories, review the documentation model that defines the structure being return (thanks to the EndPointObjectXXX attributes)Viewing Swagger UI exposed Methods

… and once you fill in any defined parameters you can “Try It Out”. This shows the URL called, and also the response body!

Trying out Swagger UI
Trying out Swagger UI

That is it! How simple to test you RESTful API than by using YAML and Swagger UI.

You can now explore Swagger.IO and learn about the other languages that you can create connections into your EMS server with 🙂

Accessing the address book on iOS and Android

Address Book development on iOS and Android

Accessing the Address Book on iOS and Android is a common request for many developers building line of business applications; quickly followed by “and how do I dial a phone number from code“. In this post I will explore how to explore the mobile Address Book using a common code base that works on iOS and Android using TAddressBook. (list to samples and documentation at the bottom of this article)

TAddressBook

With the launch of RAD Studio 10.1 Berlin, Delphi, C++ Builder,  comes a new component, TAddressBook, that enables easy access to the Address Book on iOS and Android.

The TAddressBook lives under Services section of the tool palette and consists of two and has very little in the way of Component properties. It does however have two events that are very useful, and a number of run time methods to call.

TAddressBook Component Events
TAddressBook Component Events

The two events provide notification when the address book has been changed (outside the application) and the result of the application asking for access to the address book.

Continue reading Accessing the address book on iOS and Android

Programming with Delphi & InterBase