The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,854 other subscribers

Archive for the ‘Delphi’ Category

Using httpbin to test http/https requests

Posted by jpluimers on 2015/09/15

StackOverflow user Kenneth Reitz has written a great on-line and free httpbin tool that responds to many kinds of http/https requests including the standaard http request methods (or verbs) used by REST: get, post (for http 1.0) and patch, put, delete (for http 1.1).

These verbs are not supported: head (http 1.0) and trace, options, connect (http 1.1).

The site is geared towards JSON (as most the responses are in JSON, except for one XML response and a few TEXT responses), but even if your environment does not use JSON, it is very useful as you basically get an echo of information on what you pass to it.

Except one endpoint (/encoding/utf8), none of the response encodings can be determined by the request. This is a pity as sometimes it is good to see how a specific encoding works for JSON, but it is very hard to support encodings well, so I can understand the support is not there (or not there yet).

There are many examples on the site, which I won’t list.

There are at least two sites hosting them. The original supports HTTP and HTTPS only, but the ngHttp2 people also support HTTP2 and SPDY:

What I do list are the endpoints as copied from the site on 20141228:

Read the rest of this entry »

Posted in .NET, Delphi, Development, HTTP, Internet protocol suite, REST, Software Development, TCP | Leave a Comment »

Workaround for Delphi 2010 compiler error “E2076 This form of method call only allowed for class methods” when it infers a generic parameter type.

Posted by jpluimers on 2015/09/10

Generic support in Delphi took a very long time to get stabilised. Which means that compilers older than Delphi XE2 are hardly usable for code using generics. XE did get better, but Delphi 2010 and especially Delphi 2009 were hopeless.

A while ago, I bumped into another subtle error “E2076 This form of method call only allowed for class methods” when back-porting to Delphi 2010 the code like below calling the Spring4D unit Spring.SystemUtils which has a TEnum class that includes this TEnum.GetName<T> method:

    class function GetName<T>(const value: T): string; overload; static;

In Delphi XE and up, you do not have to specify the generic parameter T: the compiler automatically infers it.

In Delphi 2010, you have to, otherwise you will get the (totally unrelated!) error “E2076 This form of method call only allowed for class methods“.

Example code:


uses
Spring.SystemUtils;
procedure Test;
var
RuntimeError: TRuntimeError;
Name: string;
begin
RuntimeError := reNone;
// in the Spring.SystemUtils unit:
// class function TEnum.GetName<T>(const value: T): string;
// Workaround in Delphi 2010 (also works in Delphi XE+, but these do not require the Generic type to be specified).
Name := TEnum.GetName<TRuntimeError>(RuntimeError);
// Delphi 2010 does infer the type of the generic parameter, but then barfs with error E2076.
// Delphi XE+ infers the parameter type and do not generate an error: no need to explicitly specify the generic type:
Name := TEnum.GetName(RuntimeError); // Delphi 2010: [DCC Error] : E2076 This form of method call only allowed for class methods
end;

–jeroen

Posted in Delphi, Delphi 10 Seattle, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

Delphi: rolling your own code or (dis)trusting the libraries that ship with Delphi?

Posted by jpluimers on 2015/09/09

Over the two decades I’ve come across a lot of Delphi projects.

All of them have one thing in common: even for functionality available in the Delphi libraries, much of that code was self-written.

You even see this in big libraries that have shipped with Delphi bit not originate from the Delphi team. Take Indy: lots of “roll your own” in it.

I’ve made some thoughts about that, and see these main causes with the points below.

What’s your thought on this?

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Delphi 10 Seattle, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Event, QC, Software Development | 1 Comment »

Rudy’s Delphi Corner – Pitfalls of converting, on converting from C/C++ to Delphi

Posted by jpluimers on 2015/09/02

If ever in need to translate C/C++ headers or code to Delphi, this refernece by Rudy Velthuis – a dentist with a strong interest in programming – is the best I could find: Rudy’s Delphi Corner – Pitfalls of converting.

It is written in a pretty version agnostic way, and covers the vast majority of conversion topics.

And it has been updated over time numerous times.

–jeroen

Posted in Borland C++, C, C++, C++ Builder, Delphi, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 10 Comments »

Android NDK Beginner’s Guide – Free Learning | PACKT Books

Posted by jpluimers on 2015/08/31

For Delphi and Android developers that want a deeper insight in the NDAK: only free today

https://www.packtpub.com/packt/offers/free-learning

Android NDK Beginner’s Guide

Get deep insight into the Android Native Development Kit for building complex apps. Using this practical step-by-step tutorial, highlighted with comments and tricks, discover how to run C/C++ code embedded in a Java application or in a standalone application. You will create a real native application starting from project creation through to full implementation of native API and the porting of existing third-party libraries. Grab this eBook whilst it’s free today!

–jeroen

Posted in Delphi, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »

New Delphi product version: will it be Seattle or 10? It might be both! radstudiodemos/code/…/branches now has RADStudio_Seattle branch, docwiki URLs with Seattle exists and nice YouTube preview image!

Posted by jpluimers on 2015/08/30

Two recent observations: that lead me into thinking Embarcadero is changing the Delphi and RAD Studio version suffix to Seattle.

Thanks to Achim Kalwa for getting that to my attention in Looks like Delphi XE9 will have support for Windows 10 RT: …

It led me to my observation that until now, sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches always had the real product name as banch name.

On 20150817 this branch got added:

http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Seattle/

Today, Horacio Filho who observed the Seattle part in the new documentation URL http://docwiki.embarcadero.com/Libraries/Seattle/en/Main_page which currently is only accessible only for the groups writer, l10n, RADBeta, ConnectBeta, Employee.

The docwiki URLs historically also use the real product names in the URL.

In fact there is a little trick: removing the product name portion of a docwiki URL usually brings you to the most recent documentation (which might be more up to date and provide more information even for older products). So removing the XE7/ part of http://docwiki.embarcadero.com/Libraries/XE7/en/Main_Page will usually bring you to the most recent documentation http://docwiki.embarcadero.com/Libraries/en/Main_Page.

If they both Seattle URLs still use product names, then the new Delphi version is called Seattle is added.

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Development, Software Development | 1 Comment »

GoF Patterns in Delphi | Implementations of the famous Gang of Four Design Patterns in Delphi language – via Nick Hodges

Posted by jpluimers on 2015/08/20

Thanks to Nick Hodges for having Delphi-losophy | Flotsam and Jetsam #88 point me to GoF Patterns in Delphi | Implementations of the famous Gang of Four Design Patterns in Delphi language.

–jeroen

Posted in Delphi, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | 2 Comments »

Installing FireDAC 8 for Delpi 2007

Posted by jpluimers on 2015/08/19

Installing FireDAC 8 for Delpi 2007

Installation

  1. Obtain 29458_firedac_xe4_update_2_for_rad_studio_delphi_c_ent_ult_arch.zip from a registered Delphi XE4 or higher license: http://cc.embarcadero.com/item/29458:
  2. Extract it into FireDAC_8.0.5.3365.exe.
  3. Run FireDAC_8.0.5.3365.exe with the /showide parameter as described in http://support.embarcadero.com/article/42970:
  4. FireDAC_8.0.5.3365.exe /showide
    1. (When not running as Administrator: elevate to Administrator)
    2. Welcome screen: press next
    3. License screen: accept, then press next
    4. Destination selection screen: keep C:\Program Files (x86)\Embarcadero\FireDAC, then press next
    5. Select components screen: keep the selection (Full installation), then press next
    6. Select IDEs screen: choose Delphi 2007 (but not Delphi 2006), then press next
    7. Select Demo Databases screen: keep the settings (do not choose Interbase / Firebird server as then you have to provide the credentials for the server), then press next
    8. Start menu screen: keep Embarcadero FireDAC, then press next
    9. Ready to install screen: press install
    10. After installation: press finish, then read the readme
      1. or later browse to <file:///C:/Program%20Files%20(x86)/Embarcadero/FireDAC/Readme.html>
      2. That’s what actually tells you:

The installer automatically installs FireDAC in the Delphi XE4 and C++ Builder XE4 IDEs. For older versions of the IDEs, you can run the installer with the /SHOWIDE command line parameter.

After installation

To fix this when starting Delphi:

[Window Title]
Error

[Content]
Can't load package C:\Users\Public\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl.
The specified module could not be found.
Do you want to attempt to load this package the next time a project is loaded?

[Yes] [No]

The actual BPL sometimes is in C:\Users\<username>\AppData\Local\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl

The cause is that the BPL gets loaded from %BDSCOMMONDIR% which on some systems points to

  • %PUBLIC%\Documents\RAD Studio\5.0

and on others points to

  • %LOCALAPPDATA%\Documents\RAD Studio\5.0

This seems to be the case on machines where more different Windows users are using Delphi.

The installer does not fully recognize this distinction, so copies the BPL to %LOCALAPPDATA%\Documents\RAD Studio\5.0\Bpl and registers it as being in %PUBLIC%\Documents\RAD Studio\5.0\Bpl.

On these machines there is a difference between the definition of BDSCOMMONDIR in these registry keys:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
    • points to C:\Users\Public\Documents\RAD Studio\5.0
  • HKEY_CURRENT_USER\Environment
    • points to C:\Users\<username>\AppData\Local\Documents\RAD Studio\5.0

Solution

reg delete "HKCU\Software\Borland\BDS\5.0\Known Packages" /v "%PUBLIC%\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl" /f
reg add "HKCU\Software\Borland\BDS\5.0\Known Packages" /v "%BDSCOMMONDIR%\Bpl\AnyDAC_Dcl_D11.bpl" /t REG_SZ /d "Embarcadero FireDAC Components" /f

–jeroen

via: jeroenp / BeSharp.net / source / Native / Delphi / Documentation / Install-FireDAC-8-in-Delphi-2007.md — Bitbucket.

Posted in Delphi, Delphi 2007, Delphi XE4, Development, Software Development | 4 Comments »

Fuzzing in addition to Unit Tests – via: David Millington G+

Posted by jpluimers on 2015/08/11

I need to give this link from Jonathan Lange which was shared by David Millington some thought:

Embedded in Academia : How to Fuzz an ADT Implementation.

There they add fuzzers to help testing an ADT: in this case an Abstract Data Type in the form of  a red-black tree.

And then see if it can be added to DUnit and NUnit or MSTest/VSTest in some way.

In the original post by Jonathan Lange, an important remark was made by Eric Castelijn:

… the downside being that having non deterministic tests means having test failures that are hard to repeat

When fuzzing multiple or composite values, the chances that you will hit interesting edge cases semi-reliably will drop dramatically, in my experience

–jeroen

via “This post has two points. First, you should write ADT fuzzers. It is often….

Posted in .NET, .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, .NET 4.5, C#, C# 2.0, C# 3.0, C# 4.0, C# 5.0, C# 6 (Roslyn), Delphi, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »

Delphi: turn off column or line block selection mode – via: Default IDE Shortcut Keys; Delphi Programming

Posted by jpluimers on 2015/07/30

The Default IDE Shortcut Keys – Delphi Programming was a good starting point to find out how to disable column or line blocks.

Since the table there is incomplete (even the Embarcadero documentation is wrong as some shortcuts can turn on and off a mode), here are the relevant shortcuts keys:

Ctrl + O + C Turns on/off blockcolumn selection mode Delphi 5 and up
Ctrl + O + K Turns on/off block selection mode Delphi 5 and up
Ctrl + O + L Selects current line (and turns off block selection mode) Delphi 5 and up

This is especially useful when the block selection is stuck (this happens every now and then: it’s a known bug).

–jeroen

Posted in Delphi, Delphi 10 Seattle, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 5, Delphi 6, Delphi 7, Delphi 8, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 6 Comments »