Code

Type-Inference in Generic Methods

Due to an interesting code example, behind which Kim Madsen first suspected a possible bug in the Delphi compiler, I took a closer look at the calling behavior of overloaded methods that also contain generic type parameters. I was surprised by the possible bug since I use overloads with combinations of generic and non-generic methods in current projects without any obvious errors.

Here is a simplified version of Kim’s code:

TFoo = class(TObject)
  public
    function DoSomething(SomeObject: TValue): string; overload;
    function DoSomething<T>(SomeObject: T): string; overload;
  end;

TBar = class(TObject)
end;

//...

var Foo := TFoo.Create;
var Bar := TBar.Create;

Foo.DoSomething(Bar);

Which of the two possible variants of DoSomething should be called by Foo.DoSomething(Bar)?

At a first glance, I was inclined to say that the non-generic variant, i.e. function DoSomething(SomeObject: TValue): string; should be called, since after all no type parameter is specified and therefore the first variant matches best.

But in fact, the generic, second variant is called. I initially suspected „TValue“ of „blocking“ the overload resolution here, since TValue is actually an „artificial“ RTTI.driven type.

Stefan Glienke came up with the correct hint:

Generic parameters are actually optional and the type is automatically inferred by the type of the variable that is passed. This „type inference“ takes precedence over overload resolution and thus produces a better match than the „TValue“ method.

Type-inference of generic methods is documented here btw.

So the following code actually calls a generic implementation, although no type parameter is specified in the call:

function DoSomething<T>(SomeObject: T): string;
//...
Foo.DoSomething(Bar); //<T> is inferred from "Bar"

Here is a Gist with full code to try:

https://gist.github.com/omonien/24b9b4ba64d46bdfa478615e8e9b0ae6

MVP des Jahres 2019 – DACH Region – Das Ergebnis

Wir haben alle Stimmen der, in der vergangenen Woche durchgeführten, Abstimmung zum MVP des Jahres 2019 für die deutschsprachige Region ausgezählt und der Gewinner steht nun fest:

MVP Emblem

Uwe Raabe

Nach dem klar war, dass Uwe die Abstimmung gewonnen hatte, ist er sozusagen vom Wahl-Komitee zurückgetreten, so dass mir nun die Aufgabe bleibt, Uwe zu würdigen.

Zunächst einmal möchte ich erwähnen, dass Uwe mit 32% der Stimmen deutlich vor dem Zweitplatzierten lag, der 21% der Stimmen erzielen konnte.

Uwes Wahl ist sicherlich ein Resultat seines unermüdlichen Einsatzes, um der Delphi-Community seine beiden wichtigsten Tools, MMX Code Explorer und Project Magician kostenlos zur Verfügung stellen zu können. Beide Tools gehören sozusagen zum Standard-Werkzeugkasten eines jeden Delphi Entwicklers.

Daneben ist Uwe auch regelmäßig in Webinaren, insbesondere bei der Coderage anzutreffen.

Ich habe Jim McKeeth nun Uwe als unseren Kandidaten für den weltweiten MVP des Jahres 2019 vorgeschlagen.

Also: Daumen drücken 🙂

Embarcadero MVP des Jahres 2019 – DACH Region

Uwe Raabe und ich sind die MVP Koordinatoren der DACH Region und haben u.a. die Aufgabe, einen MVP des Jahres auszuwählen.

Da wir dies nicht irgendwie ausklüngeln wollen, haben wir uns entschlossen, der Delphi Community die demokratische Möglichkeit zu geben, den MVP des Jahres zu wählen.

Auf dieser Seite könnt ihr ab sofort, bis zum kommenden Freitag, den 13. Dezember 2019, eure Stimme für den MVP abgeben, der euch im – schon fast vergangenen – Jahre 2019 am meisten beeindruckt hat, dessen Blogs ihr am informativsten fandet oder von dem ihr einfach denkt, er soll Titel für dieses Jahr erhalten.

Was gewinnt der MVP des Jahres? Ganz viel Ruhm – mit „h“ 🙂

Jim McKeeth, sozusagen der MVP Oberaufseher, wird entsprechende Posts verfassen und den Gewinner damit entsprechend würdigen. Flugreisen, Fernseher oder Millionen von Dollar zu spendieren, davon konnten wir Jim leider nicht überzeugen …

Die Abstimmung erfolgt anonym. Jeder, der sich der Embarcadero Community zugehörig fühlt, hat eine Stimme. MVPs können selbstverständlich mit abstimmen und dürfen sich natürlich auch selbst wählen.

Uwe und ich sind auch wählbar – auch wenn wir uns hier eher als Organisatoren sehen.

Das Ergebnis werden wir nach Ablauf der Abstimmung hier veröffentlichen. Wir werden nur den Sieger benennen, also kein Ranking erstellen.

Update: die Abstimmung ist inzwischen beendet. Das Ergebnis findet sich hier.

Publishing Delphi Apps to the Microsoft Store Episode 2

As promised my first video tutorial about the Microsoft Store, here are some additional steps I would like to share with you:

  • Publishing 32 & 64-bit packages
  • Version numbers
  • MS really reads Privacy URLs 🙂

This is the link to version 1.0.1 of HashExpert.

Publishing Delphi Apps to the Microsoft Store Episode 2

As promised my first video tutorial about the Microsoft Store, here are some additional steps I would like to share with you:

  • Publishing 32 & 64-bit packages
  • Version numbers
  • MS really reads Privacy URLs 🙂

This is the link to version 1.0.1 of HashExpert.

From REST to Database

There are frequently questions about how to get the results of a REST query (JSON) into a database table. This can of course be done manually, by using the „while not EOF do“ approach, but there are actually components in Delphi that make this job relatively easy and flexible.

So I created a video, demonstrating how to take the JSON response of a REST request and insert it into a database table.

I am using TFDMemTable, TFDQuery, and TFDBatchmove to move the data from the original TRESTResponse into an SQLite table – just by using FireDAC components.

Source code is available on BitBucket.

From REST to Database

There are frequently questions about how to get the results of a REST query (JSON) into a database table. This can of course be done manually, by using the „while not EOF do“ approach, but there are actually components in Delphi that make this job relatively easy and flexible.

So I created a video, demonstrating how to take the JSON response of a REST request and insert it into a database table.

I am using TFDMemTable, TFDQuery, and TFDBatchmove to move the data from the original TRESTResponse into an SQLite table – just by using FireDAC components.

Source code is available on BitBucket.

Publishing Delphi Apps to the Microsoft Store

In this video, I will guide you through the steps to get your Delphi app published in Microsoft’s App Store. For this demonstration, I will use a Firemonkey app, but technically the same thing would work with VCL apps as well.

This is the appx that I published and got certified by Microsoft. It’s a simple Hash calculator. Nothing too fancy, but useful enough to successfully pass Microsoft’s verification procedures: Microsoft Store – HashExpert

Publishing Delphi Apps to the Microsoft Store

In this video, I will guide you through the steps to get your Delphi app published in Microsoft’s App Store. For this demonstration, I will use a Firemonkey app, but technically the same thing would work with VCL apps as well.

This is the appx that I published and got certified by Microsoft. It’s a simple Hash calculator. Nothing too fancy, but useful enough to successfully pass Microsoft’s verification procedures: Microsoft Store – HashExpert

CData: Connecting to WordPress from Delphi

In this episode of my „Delphi Quick Thoughts“ series, I am demonstrating how to connect to a WordPress site from Delphi. I am using CData’s WordPress Enterprise connector for that.

https://www.cdata.com/firedac/

CData has more than one hundred „Enterprise Connectors“ that connect to almost every data source, that you can imagine: SAP, Twillio, WordPress, ActiveDirectory, SalesForce – just to name a few. These Connectors are implemented as FireDAC drivers. In other words, you can talk to all of these data sources by using SQL Queries and/or Stored Procedures, you don’t have to learn new syntaxes and components but just check the available schema and methods.

For WordPress, for example, check the docs here:
http://cdn.cdata.com/help/FWE/fire/pg_connectingtowordpresswebdesktop.htm

You can download the sources that I used in the video here.
Note: I left the app id and secret in the sources for your references but changed them on my server, so the app won’t be able to connect to my server anymore. You will need your own WordPress instance that is.

Wir benutzen Cookies um die Nutzerfreundlichkeit der Webseite zu verbessen. Durch Deinen Besuch stimmst Du dem zu.