Marco Cantu

Syndicate content
Techie Italian Blogging on Delphi and More
Updated: 1 hour 54 min ago

New on Embarcadero Academy: CodeRage Replays and my New Course and Bundle

Mon, 11/20/2017 - 08:10

Embarcadero Academy is an independent online training site available at https://www.embarcaderoacademy.com/. The site has an overall agreement with Embarcadero as a key destination for online training for the company development tools products.

The academy site co-hosted the CodeRage XII conference the other week and it is not offering the complete set of replays. All you need to do is create an account on the platform and sign up for the free CodeRage course at https://www.embarcaderoacademy.com/p/coderage-xii.

On my part, I added a new course on Anonymous Methods and a course bundle on Modern Delphi Language including the courses on interfaces, generics, and anonymous methods. This bundle includes 6 hours of content. Also, all of the courses have a 20% special CodeRage discount until the end of November.

There are many other great classes on Delphi by Alister and non-Delphi classes as well. It is also now possible to take the Delphi certification exams on the academy site. There are other ideas floating around to improve the academy, like live online classes and subscriptions: more than willing to get your feedback (that I can share with the academy site team) or suggestions to me for other topics to cover in future additional courses.

Categories: News, Blogs, and Tips

Explaining Tasks in Delphi Parallel Library... by Creating too Many Tasks

Thu, 11/16/2017 - 09:19

Recently, I wrote some new demo for Delphi PPL (Parallel Programming Library), while doing some research for an online class -- which is available since last week on the Embarcadero Academy site ("Anonymous Methods in Delphi"), along with a new overall bundle of my classes ("Master Modern Delphi Language Techniques").

In the past I've used different ways to explain tasks and compare them to threads. Tasks are lightweight and managed more efficiently, than threads. The PPL creates a thread pool and assigns pending tasks (and their code) to a pool of threads that depends on your CPU cores and current workload. But these descriptions might still explain tasks and threads as fairly similar in scope. Now let's look at this source code snippet:

procedure TForm12.btn100sClick(Sender: TObject); var tasks: array of ITask; Value: Integer; I: Integer; begin SetLength(tasks, 100000); Value := 0; for I := Low (tasks) to High (tasks) do begin tasks[I] := TTask.Create (procedure () begin TInterlocked.Increment (Value); end); tasks[I].Start; end; TTask.WaitForAll (tasks); Memo1.Lines.Add(Value.ToString); end;

As you can see this event handler creates not hundred, but hundred thousand tasks. Each of them has an extremely simple operation to complete -- fairly nonsensical, I know. But you can create 100,000 tasks and they'll all done done in less than a second, on my computer. Consider creating 100,000 threads! that would create a significant extra overhead. By running this code, the tasks are assigned to a few threads in a pool, as you can see in the debugger:

Small demo and pretty much useless code, but I think it does a good job in highlighting the lightweight and flexible nature of nature of tasks, when compared to threads.

Categories: News, Blogs, and Tips

CodeRage XII Starts Today (With European Schedule)

Tue, 11/07/2017 - 02:34

The online CodeRage conference by Embarcadero starts today: https://community.embarcadero.com/article/16578-coderage. Registration is still oepn at https://register.gotowebinar.com/register/7990350396754529539.

With dozens of session based on central US time zones, it is easy to get confised. So I've amended the official calendar for those based in Europe (warning, in case of last minute schedule changes, I won't probably be able to udpate it). Here are thre three PDFs for the 3 days with UTC+1 or Central Europe Time zone times:

Tuesday Nov 7thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeTueNov7.pdf

Wednesday Nov 8thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeWedNov8.pdf

Thursday Nov. 9thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeThuNov9.pdf

Remember you can sign-up and follow the event also on the Embarcadero Academy site at https://www.embarcaderoacademy.com/

I'll be "live tweeting" any even vaguely Delphi-related CodeRage information https://twitter.com/delphitweetday. Follow the account if you don't do already!

Categories: News, Blogs, and Tips

CodeRage XII is Next Week

Fri, 11/03/2017 - 02:05

Next week, from Tuesday November 7th to Thursday November 9th will see the 12th edition of Embarcadero's yearly online conference, called "CodeRage" since the CodeGear days. This event goes beyond all other webinars and sessions, in scope, breadth and focus, and is really an online multi-day event. While most sessions will be available afterwards, I really recommend you to plan attending live and get involved into the Q&A and discussion and social media conversations around the conference. Reserve your time and don't be shy asking your boss some free time to attend the conference -- it will be so much cheaper than going to a real one!

You can see the temporary program at:  https://community.embarcadero.com/blogs/entry/coderage-xii-sessions-and-schedule

I won't comment on all of the sessions, but I'm going to mention a few highlight and list mine:

  • Two guess industry luminaries will be giving sessions, Robert Martin (aka Uncle Bob) is speaking on "The Clean Coder - An Introduction to Software Professionalism" and Steven McConnell (of "Code Complete" fame) is speaking on "Managing Technical Debt".
  • RAD Studio product address by the PM team (Sarina, David, and myself) in which we will provide hints (and screenshots) of new features to come in RAD Studio 10.2.2 -- Tuesday 9AM Central US Time or 4PM in Central Europe.
  • Many sessions by well-known Delphi gurus including Ray Konopka (he'll also provide some interesting previews), Cary Jensen, Brian Long, Bob Swart, Danny Wind, Olaf Monien.... and many many others
  • Sessions by most Embarcadero SC at all latitudes, covering many ways to use RAD Studio
  • Detailed covered of many third party tools (including FMX Linux, Arduino integration, reporting, DB tools, UI controls and libraries, code migration, and much much more)
  • Technical sessions by the PM team (David, Sarina, myself, and Sandeep for Sencha). Specifically, I'm giving a session titled "Introduction to Ext JS for Delphi Developers" in which I'll provide some initial information on Ext JS and the use of the Sencha Architect IDE for building the front end of a RAD Server web service -- Tuesday 11AM Central US Time or 6PM in Central Europe.

Finally notice that this year the online conference will be hosted both on GoToWebinar and on Embarcadero Academy at https://www.embarcaderoacademy.com/p/coderage-xii, where you can already sign up and see the detailed schedule.

Categories: News, Blogs, and Tips

Delphi Blogs of the Month #56

Fri, 10/27/2017 - 07:59

While clearly difficult to have a weekly summary, Iv'e fully retitled this installment, although the URL stays as part of the original weekly sequence. Let's get started.

Embarcadero News

A Busy Summer at https://community.embarcadero.com/article/16572-a-busy-summer

Embarcadero Academy Debuts with Online Courses for Developers of All Levels press release at http://www.businesswire.com/news/home/20170918005798/en/Embarcadero-Academy-Debuts-Online-Courses-Developers-Levels

New in 10.2.1: Debug visualisers for Delphi generics at https://community.embarcadero.com/blogs/entry/new-in-10-2-1-debug-visualisers-for-delphi-generics

Build iOS 11 ready apps with RAD Studio 10.2.1 at https://community.embarcadero.com/blogs/entry/build-ios-11-ready-apps-with-rad-studio-10-2-1

Updating IDE Subversion DLLs to address security issues at https://community.embarcadero.com/blogs/entry/updating-ide-subversion-dlls-to-address-security-issues

Blog Posts

Working with big data databases in Delphi - Cassandra, Couchbase and MongoDB (Part 3 of 3) at https://blog.grijjy.com/2017/09/21/working-with-big-data-databases-in-delphi-cassandra-couchbase-and-mongodb-part-3-of-3/

Debugging RTL/VCL Code with CodeSite at http://www.davidghoyle.co.uk/WordPress/?p=1754 and the follow up ,Notify Me of Everything - Part 2, at http://www.davidghoyle.co.uk/WordPress/?p=1761

5 Minute Snack: Reading floats with StrToFloat and TFormatSettings independent of system region settings at https://flixengineering.com/archives/612

Easily Make Asynchronous REST Calls In Delphi 10.2.1 Tokyo On Android, iOS, macOS, and Windows 10 at https://community.embarcadero.com/blogs/entry/easily-make-asynchronous-rest-calls-in-delphi-10-2-1-tokyo-on-android-ios-macos-and-windows-10

Face Detection on Android and iOS at https://blog.grijjy.com/2017/09/11/face-detection-on-android-and-ios/

Experimenting with Neural Networks - Part 1 (and following in subsequent posts) - http://chapmanworld.com/2017/09/20/experimenting-with-neural-networks-part-1/

Adding a Custom Icon to a FireMonkey Button at https://community.embarcadero.com/blogs/entry/adding-a-custom-icon-to-a-firemonkey-button

RAD Studio 10.2: Windows 10 VCL UWP/WinRT Support at https://community.embarcadero.com/blogs/entry/rad-studio-10-2-windows-10-vcl-uwp-winrt-support

Amazon DynamoDB with Delphi (video) at https://community.embarcadero.com/blogs/entry/amazon-dynamodb-with-delphi

5 Minute Snack: Is a package installed? The Package Manager icons tell you! https://flixengineering.com/archives/618

Third Party Libraries

TLanguage localization tool: https://delphitipsandtrick.blogspot.it/2017/10/delphi-tlanguage-localizaton-tool.html

Not new but fairly interesting.... Python for Delphi at https://github.com/pyscripter/python4delphi and you can read about it at http://www.atug.com/andypatterns/pythonDelphiTalk.htm

Delphi RNL ("Realtime Network Library") at https://github.com/BeRo1985/rnl

Use this RFID library in Delphi at https://github.com/islog/liblogicalaccess/wiki/Use-this-RFID-library-in-Delphi

Built with Delphi

Roselt Color Picker in Windows Store: https://www.microsoft.com/en-za/store/p/roselt-color-picker/9nq8c70flp0r?rtc=1

Smart IDE for OpenSCAD at https://github.com/senCille/senCilleSCAD/wiki

 

That's all for this month.

Categories: News, Blogs, and Tips

Implementing AJAX and JSONP Support in RAD Server for ExtJS

Thu, 10/19/2017 - 06:36

Idera recently acquired Sencha (https://www.sencha.com/) and has added the company products to the Embarcadero business unit, which produced RAD Studio and also the RAD Server web service technology. A natural question arises on how to use the two products together. While there are several options, in this blog post I want to highlight the simple and direct integration of RAD Server and FireDAC with an ExtJS client based on Sencha’s data model architecture. Most of the considerations in this blog post would equally apply to using WebBroker or DataSnap to build the web service..

A Simple Test

As first step, I’ve created a simple blank RAD Server application. What this does is to expose standard REST endpoints like “version”. In an ExtJS client build with the Architect IDE, I’ve added a button, picked the Tap event, and written code like the following:

onButtonTap: function(button, e, eOpts) { Ext.Ajax.request({ url: 'http://192.168.1.102::8080/version', cors: true, success: function(response, opts) { var obj = Ext.decode(response.responseText); console.dir(obj); button.setText (obj.server); }, }); }

What this code does is make a call to the version REST API, create a JavaScript object with the resulting JSON (decode), display the data on the browser console, and display the server field as button text.

Defining a Data Model

This just proves that the JavaScript application can invoke RAD Server. Next I moved to the data processing. ExtJS has the concept of a data model, so using the visual tool I created a simple one like the following:

Ext.define('MyEmployeeApp.model.EmployeeData', { extend: 'Ext.data.Model', requires: [ 'Ext.data.field.Field' ], fields: [ { name: 'first_name' }, { name: 'last_name' }, { name: 'phone_ext' }, { name: 'dept_no' }, { name: 'job_country' } ] }); Returning JSON from RAD Server

Next, I had to define a data store. First I used an AJAX data store and to keep things simple I wrote a custom method in RAD Server to expose a plain JSON data structure, built using the TJSONObject and TJSONArray classes. In this code EmployeeTable is a TFDQuery dropped in the data module along with a connection to the classic InterBase employee demo database:

procedure TEmployeeDataResource1.Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); var empDataObj: TJSONObject; data: TDataSet; emplArray: TJSONArray; emplObj: TJSONObject; aField: TField; begin data := EmployeeTable; data.Open; empDataObj := TJSONObject.Create; emplArray := TJSONArray.Create; while (not data.EOF) do begin emplObj := TJSONObject.Create; for aField in data.Fields do begin emplObj.AddPair(LowerCase(aField.FieldName), aField.AsString); end; emplArray.Add(emplObj); data.Next; end; empDataObj.AddPair ('employee', emplArray); AResponse.Body.SetValue(empDataObj, True); end;

This is the resulting JSON in a browser:

With this code and the use of an AJAX call, the JavaScript application by default ends up with with cross-server invocation security problems, when executed in the browser. There is  however a fairly simple solution in RAD Server, which is set a single line in the EMS.INI file, with a configuration like:

[Server.APICrossDomain] ;# Write here the domains allowed to call the API. Used for Cross-Domains CrossDomain=*

This is fairly over-permissive, in production you’d want to indicate a specific domain rather than *. With this setting and possibly even some proxy configuration in your web server,  you can handle the cross-domain resource access.

Implementing JSONP in RAD Server

The alternative options (a little older and considered less secure) is to implement a JSONP server. You can read the documentation here: http://docs.sencha.com/extjs/6.5.2/modern/src/JsonP.js-1.html.

In short, rather than returning JSON data, a JSONP call returns the JavaScript source code of a function that includes the JSON text as a parameter. The name of the function to call is passed in a parameter named “callback” in a regular GET HTTP call. A common implementation is to check for that parameter and return JSONP (that is, JavaScript) in the specific case, JSON if the parameter is not present. It actually takes less time to read the code than the description. In the code above, the last line becomes:

var callBackParam: string; strStream: TStringStream; begin ... // check for JSONP request if ARequest.Params.TryGetValue ('callback', callBackParam) then begin strStream := TStringStream.Create ( callBackParam + '(' + empDataObj.ToString + ');'); AResponse.Body.SetStream(strStream, 'text/javascript', True); end else AResponse.Body.SetValue(empDataObj, True); end; Defining Storage in ExtJS

Now that we have a proper source of either JSON or JSONP data (both work at the same URL), we can define a data storage for them in ExtJS. Again, using Architect this can be done by setting a few properties, and here is the resulting code for AJAX:

Ext.define('MyApp.store.MyJsonStore', { extend: 'Ext.data.Store', requires: [ 'MyApp.model.MyModel', 'Ext.data.proxy.Ajax', 'Ext.data.reader.Json' ], constructor: function(cfg) { var me = this; cfg = cfg || {}; me.callParent([Ext.apply({ storeId: 'MyJsonStore', autoLoad: true, model: 'MyApp.model.EmployeeData', proxy: { type: 'ajax', url: 'http://192.168.1.102:8080/EmployeeData/', reader: { type: 'json', rootProperty: 'employee' } } }, cfg)]); } });

The rootProperty is the name of the core JSON object, under which there is the actual data. It could be a more complex and nested sequence. With this configuration, you can use the Architect IDE to load the data and preview it:

The configuration of a JSONP data store is very similar, as listed below:

Ext.define('MyEmployeeApp.store.MyJsonPStore', { extend: 'Ext.data.Store', requires: [ 'MyEmployeeApp.model.EmployeeData', 'Ext.data.proxy.JsonP', 'Ext.data.reader.Json' ], constructor: function(cfg) { var me = this; cfg = cfg || {}; me.callParent([Ext.apply({ storeId: 'MyJsonPStore', model: 'MyEmployeeApp.model.EmployeeData', proxy: { type: 'jsonp', url: 'http://192.168.1.102:8080/EmployeeData/', reader: { type: 'json', rootProperty: 'employee' } } }, cfg)]); } }); An EXtJS Grid for the UI

Now that we have a model and a data store (or actually two), we can wire up the user interface. For this simple case, I’ve just added a grid to the UI, added 5 columns to it, and tied each column to each field in the data model:

{ xtype: 'grid', height: '100%', width: '100%', store: 'MyJsonPStore', columns: [ { xtype: 'gridcolumn', width: 70, dataIndex: 'first_name', text: 'First Name' }, { xtype: 'gridcolumn', width: 80, dataIndex: 'last_name', text: 'Last Name' }, { xtype: 'gridcolumn', width: 80, dataIndex: 'phone_ext', text: 'Phone' }, ....

With this configuration, you can preview your grid at design time in the Architect IDE, as shown here:

And finally, this is the final application running in a browser, with the ability to sort and rearrange the columns in a very sophisticated JavaScript grid in the browser, powered by the InterBase employee database and a RAD Server web service:

Summary

In summary the data flow is: InterBase database, FireDAC connection and SQL query, REST server method with custom JSON processing, ExtJS data storage, ExtJS grid for the UI. And something you can put together in 15 minutes!

While there are several different options on the table for using ExtJS and RAD Studio web services together, and more will be made available by Embarcadero in the future to further simplify the process, as you can see accessing to data produced by a Delphi application from an ExtJS client is reasonably simple.

Categories: News, Blogs, and Tips

Talking at ITDevCon 2017, Tomorrow

Tue, 10/10/2017 - 07:46

The conference is organized by Embarcadero partner BitTime and their consulting company BitTime Professionals at their office in Franscati, near Rome, and all of the information is at:

http://www.itdevcon.it/

Well, it might be a little late to join, but I realized I forgot mentioning the event on my blog, so here it goes. If you plan attending, I'll be there tomorrow afternoon and also join the dinner. See the final agenda at http://www.itdevcon.it/agenda

I'll be giving a keynote on the status of RAD Studio, but also two technical sessions covering FireDAC CData Enterprise connectors and offering an introduction to Sencha's ExtJS and Architect tool, along with demos of integration with Delphi powered back ends. Would be interesting, and I'll make sure to share my demos with everyone -- and possibly repeating them at the coming CodeRage online conference next month.

Categories: News, Blogs, and Tips

My Courses on the New Embarcadero Academy

Wed, 10/04/2017 - 07:21

The online training site Embarcadero Academy, an independently-run but Embarcadero affiliated training web site, was launched a couple of weeks ago: http://www.businesswire.com/news/home/20170918005798/en/Embarcadero-Academy-Debuts-Online-Courses-Developers-Levels. The academy features classes on different topics, but a lot of them are focused on Delphi programming. You can see the list of Delphi classes here:

https://www.embarcaderoacademy.com/courses/category/Delphi

The site has paid online classes by several Delphi experts and it is going to be expanded rapidly with new content and options (live training, beside self-paced tutorials, subscriptions, etc). The classes are mostly video oriented and, in my case, they are slide free and focused on code.

I have currently 3 classes listed, two on interfaces (and there is a bundle to get both at once, as shown in the image) and one on generics. Another one on anonymous methods is in the works. As you can see my initial effort is to focus on the most recent and more complex features of the Object Pascal language, with content that matches my book but is presented in a different way. What I do, in fact, is building the example step by step, showing the feature but also reasoning on alternative coding options and ideas. I plan expanding my contribution completing the advanced area (RTTI, reflection, attributes), and add more core topics (properties and events, classes and objects, etc) and possibly even beginners Pascal material. Ideas are welcome. As an example, the bundle shown and linked here with the two classes on interfaces and my ebook, is currently priced at 29 US$. See https://www.embarcaderoacademy.com/p/interfaces-in-delphi-intro-to-advanced for more information.

Categories: News, Blogs, and Tips

Why I Choose Delphi Summary

Tue, 10/03/2017 - 02:58

Over the summer, there has been a number of blog posts on the "Why I Choose Delphi?" topic. While providing personal ideas, they do have common themes and I think there are very interesting to read, for anyone who is using Delphi today (or used it in the past). Here is the list of the blogs I noted, and I migh have missed others, let me know:

David Harper: https://csvelocity.wordpress.com/2017/07/27/why-i-choose-delphi/

Andre Celestino: http://www.andrecelestino.com/why-i-choose-delphi/

Frank Lauter: http://delphiprofi.blogspot.it/2017/08/whyichoosedelphi.html

Ryan Potts: https://rpottsoh.github.io/Why-I-Choose-Delphi/

Jim McKeeth:  https://community.embarcadero.com/blogs/entry/why-i-keep-choosing-delphi and http://delphi.org/2017/08/why-i-keep-choosing-delphi/

Steffen Nyeland: https://fixedbycode.blogspot.it/2017/08/why-i-keep-preferring-delphi.html

Ray Konopka: https://delphibydesign.com/why-i-choose-delphi/

Jens Fudge: https://community.embarcadero.com/blogs/entry/why-i-choose-delphi

 Robert Calco: http://www.hitcompileandrun.com/2017/08/why-i-choose-delphi.html

"T Theobald":  http://borkedcode.com/wp/?p=1511

Categories: News, Blogs, and Tips

InterBase 2017 Update 1 and Delphi

Fri, 09/29/2017 - 01:56

A few months after the InterBase 2017 release, Embarcadero has just made available InterBase 2017 Update 1. If you are an existing InterBase user, this is a nice update the install, given it has some performance improvements, bug fixes, and new features, as explained in the announcement article I just publsihed at:

https://community.embarcadero.com/article/16575-interbase-2017-update-1-is-now-available

InterBase is a great embedded database, and the IBLite/IBToGo versions come included with RAD Studio for all supported platforms (desktop and mibile). The Windows developer edition of the full RDMBS (a fast, hassle free, fully powered SQL engine) is also included in RAD Studio and helps power the RAD Server database. Not only InterBase is on par with most competing (and often more expensive) solution, but it has unique features like ChangeViews that can be leveraged to greatly optimize the data traffic, something even more important in today's mobile and distributed world.

While RAD Studio Tokyo ships with the previous version, InterBase XE7, the InterBase 2017 versions of the developer server and IBLite/IBToGo are available in GetIt -- currently still the original release, Udpate 1 will be made available early next week. Read the linked article above for current download links and more information on this version of InterBase.

 

Categories: News, Blogs, and Tips

Delphi and RAD Studio Roadmap Update Published

Tue, 09/19/2017 - 00:03

The article with the new roadmap slides is available at:

https://community.embarcadero.com/article/16563-rad-studio-roadmap-september-2017

The roadmap is updated with the 10.2.1 actual release and the specific 10.2.2 plans, along with the focus areas for 10.3 next year.

Categories: News, Blogs, and Tips

Visiting Delphi Conference in Poland Next Week

Thu, 09/14/2017 - 06:28

On September 21st and 22nd (next Thursday and Friday) I'll be attending and giving sessions at a Delphi conference in Poland. The conference is organized by the local Embarcadero partner, BSC Polska. You can find more information at the "Zlot Programistow Delphi" web site,

http://delphi.pl/zlot/

(Site content is in Polish language, but session descriptions are also in English and several sessions -- those by foreign speakers like myself, Stefan, Primoz -- will be in English).

If you live in Poland, this would be a rather unique opportunity to get a lot of first class Delphi content and meet a few Delphi gurus and one of the product PMs (that is, me). So don't miss the opportunity for a chat, some tech info, and even an interesting evening called "Grill - Delphi and Fun". See you.

 

PS: There are other notable Delphi conferences in Europe next week, The Lab in Netherlands on Sept 19th (https://www.barnsten.com/nl/events/details?events_id=294) and ForenTage on Sept 23rd (and previous days) in Germany (https://forentage.de/). It's the first time in a few years I miss this German user groups conference, but I had a conflicting family event. David Milligton, one of the other RAD Studio PMs, is attending both conferences!

Categories: News, Blogs, and Tips

GetIt Content Update, September 2017

Wed, 09/13/2017 - 05:39

We keep adding a lot of open source libraries, trial components, and now also demos and database connectors to the GetIt package manager. As I wrote a couple of months back, we added also a lot of new categories to simplify navigating among the 241 packages listed today.

What was added over recent months to the GetIt package manager for 10.2 Tokyo?

  • AQTime Standard Embarcadero edition
  • FaceAPI library (for Microsoft Cognitive Services)
  • Grijjy Cloud Logger
  • NexuxDB Free Embedded Version
  • RAD Server Industry Template - Hospitality Survey Application
  • JCL and JVCL updates
  • 3DElite TCP Server-Client Library
  • Additional TMS trial components
  • Many /n Software trial components
  • BrilliantCode trial
  • FmxLinux trial
  • The 80 or so trial versions of CData Enterprise Connectors

More and more components are being added continuously, and we are open to submissions from the community and from partners.

 

Categories: News, Blogs, and Tips

12 Years of Blogging

Fri, 09/08/2017 - 05:42

Today marks the 12th year of my blog, blog.marcocantu.com (now also mirrored on community.embarcadero.com). It is easy for me to remember, as I started the blog on my birthday! And this is my blog post number 1422.

Lots of things happened in this 12 years, but I'm still mostly focused on Delphi, even if in a different role. And if you read the first post (http://blog.marcocantu.com/blog/startingblog.html) you'll see the core engine was written in Kylix -- the ancestor of the newly released Delphi 10.2 Tokyo with Linux support. You can read the 1420 blog posts in between by navigating the full archive at http://blog.marcocantu.com/archives.html.

To capture at a very high level these 12 years, I grabbed all pictures I used in blog post (at least those I uploaded a copy of) and made the collage below (you can expand it for higher resolution). And thanks to those who have been following my blog for these 12 years. Let's have another great year!

Categories: News, Blogs, and Tips

Using Delphi Parse API with Any Parse Server Hosting

Wed, 09/06/2017 - 07:45

The Parse web site (owned by Facebook) was retired earlier this year. This was a fairly popular BaaS (backend as a service) provider for mobile applications, but something you could use also from desktop apps. Delphi (and also C++Builder, btw) has included ready-to-use components for interfacing Parse APIs for quite some time. It was very easy to set up an account on the system and create an app. But the hosting was discontinued, and now what?

Additional Parse Hosting and the Delphi ParseProvider Component

While stopping the Parse web site, Facebook did you positive thing: they made the entire Parse server open source. So what happened is that many cloud hosting providers took that code and created compatible hosting services. By hosting the a fully API-compatible version of the Parse server, these providers made it possible to migrate client applications that were using parse with almost no effort. 

There was one additional issue to use these additional providers from Delphi. Given Parse applications were hosted on parse.com, the main domain name was hard-coded in our component. Now in Delphi Tokyo Release 1 (or 10.2.1) we have added a class helper that lets you easily change the URL provider. As you can read at https://quality.embarcadero.com/browse/RSP-13608 all you need to do is add the line:

ParseProvider1.BaseURL := '...';

In a future release, this will become a property of the component, but to preserve compatibility it was added as a runtime only feature for Tokyo updates.

An Actual Example

To check this does really work I did the following. First I went to one of the Parse server providers that offers a limited free account, https://www.back4app.com/. By entering my credentials, in a minute I could create a test app and manually enter a user on their web console. The console configuration listed all of the parameters needed to connect.

Second I create a VCL forms application, with a ParseProvider component, a BackendUsers component, a button and a memo. In the ParseProvider I copied the various required IDs:

object ParseProvider1: TParseProvider ApplicationID = 'esSv_______Whi' RestApiKey = 'mxBY______Wl6' MasterKey = 'kxW_____DHl' end

The BackendUsers component only configuration is the connection to the provider (which should be automatic). Third step I wrote the following code to refer to the proper URL and get the list of users:

procedure TForm12.FormCreate(Sender: TObject); begin   ParseProvider1.BaseURL := 'https://parseapi.back4app.com/'; end; procedure TForm12.Button1Click(Sender: TObject); var   aJSONArray: TJSOnArray; begin   aJSONArray := TJSOnArray.Create;   try     BackendUsers1.Users.QueryUsers([''], aJSOnArray);     Memo1.Lines.Add (aJSOnArray.ToString);   finally     aJSONArray.Free;   end; end;

You can see the result in the image below (sorry for the scanty UI):

That's all it takes. So you can indeed keep using a Parse Server as a backend for your Delphi desktop and mobile applications, as long as you can find a suitable provider... or you can even self-host the open source version of Parse on your own servers.

Categories: News, Blogs, and Tips

Hotfix for 10.2.1 Inherited VCL Forms Released

Wed, 09/06/2017 - 06:23

This hotfix addresses a bug introduced in RAD Studio 10.2.1 and reported as RSP-18792 in Quality Portal. The issue causes an inherited VCL form to fail to scale on high DPI displays. Actually the fix resolves also a couple of related problems.

The download is available at https://cc.embarcadero.com/item/30798

Notice that even if the changes is for only a few lines of source code, the download is over 80 MB, as we are updating all binary files (DCU, BPL) including that code. The list of files is included in the download page.

Categories: News, Blogs, and Tips

Delphi Blogs of the (Week) Month #55

Fri, 09/01/2017 - 01:21

This is my fairly regular (although now monthly) list of relevant links to blogs post, articles, news, and more from the Delphi community.

Embarcadero Updates

Idera has acquired Sencha to strengthen its developer tools business (aka Embarcadero). You can read the press release (http://www.businesswire.com/news/home/20170825005086/en/IDERA-Acquires-Sencha-Strengthen-Developer-Tools-Business) and articles like http://sdtimes.com/idera-sencha-acquisition-sdtimes.

Embarcadero released a hot fix for Tokyo 10.2.1 to resolve iOS AdHoc deployment: http://blog.marcocantu.com/blog/2017-august-hotfix-adhoc.html

Notable Blog Posts

Save Time With This Quick LiveBindings Trick For Delphi And C++Builder (by Eli): https://community.embarcadero.com/blogs/entry/learn-how-to-quickly-livebind-almost-any-control-with-this-tedit-trick-for-delphi-and-c-builder

Experiments in Uniform Memory Management (by Erik van Bilsen): https://blog.grijjy.com/2017/08/09/experiments-in-uniform-memory-management/

Delphi FMX Chess Game (although I'm eagerly waiting for more information) https://csvelocity.wordpress.com/2017/08/08/delphi-fmx-chess-game/

Cross-Platform Code Hooking (also by Erik van Bilsen): https://blog.grijjy.com/2017/07/26/cross-platform-code-hooking/

Windows Manifest Files (by Vincent Parrett): https://www.finalbuilder.com/resources/blogs/postid/753/windows-manifest-files

TNotifyEvent debouncing in Delphi (by Sergey Zhukov): https://www.code-partners.com/tnotifyevent-debouncing-in-delphi/ (althought it has been criticized as not really being on debouncing, it is an interesting read)

Use C++Builder to get Android current ringtone mode (by Haruyuki Mohri): https://community.embarcadero.com/blogs/entry/use-c-builder-to-get-android-current-ringtone-mode

Resizing a TViewPort3D (by Gustav Schubert): http://federgraph.blogspot.it/2017/08/resizing-t-viewport-3d.html

The Dark Side of Application.ProcessMessages in Delphi Applications (by Zarko Gajic): https://www.thoughtco.com/dark-side-of-application-processmessages-1058203 (re-opening a never ending debate on the use of Windows limited message based parallel processing vs. real threading solutions -- or maybe the debate is actually settled and threads just won?)

Cloud Based Unit Resolver For The Delphi RTL In Delphi 10.2 Tokyo (by FMX Express): http://www.fmxexpress.com/cloud-based-unit-resolver-for-the-delphi-rtl-in-delphi-10-2-tokyo/

Third Party Libraries and Components

Delphi base compatibility, Spine improvements, other stuff in Castle Game Engine (by Michalis): https://castle-engine.sourceforge.io/wp/2017/08/14/delphi-base-compatibility-spine-improvements-other-stuff/

JSKit - open-source Cross-platform JavaScript framework for Delphi and CrossVcl announcement (by Eugene) at https://plus.google.com/u/0/118397897778295642304/posts/ip2wGhNfskd?cfem=1. The library itself can be found at https://github.com/eugenekryukov/jskit

Kind of similarly, ​ScriptGate provides mutual calls between JavaScript and #Delphi and it's useful for Hybrid apps (by Hosokawa Jun): https://bitbucket.org/freeonterminate/scriptgate

GrijjyCloudLogger, remote logging for Windows, iOS, Android, macOS and Linux (by Allen Drennan) at https://blog.grijjy.com/2017/08/22/grijjycloudlogger-remote-logging-for-windows-ios-android-macos-and-linux/. The repository is at https://github.com/grijjy/GrijjyCloudLogger

​Must Have RAD Accessories – InnoSetup (by Craig Chapman): http://chapmanworld.com/2017/08/25/must-have-rad-accessories-innosetup/ (and part of a very nice series of classic Delphi components and tools)

Debugger Callstack Resolver released (by Andreas Hausladen): http://andy.jgknet.de/blog/2017/08/debugger-callstack-resolver-released/

Categories: News, Blogs, and Tips

RAD Studio 10.2.1 HotFix for iOS AdHoc Deployment

Wed, 08/23/2017 - 00:23

We released a hotfix to address a regression (reported as https://quality.embarcadero.com/browse/RSP-18813) in RAD Studio Tokyo Release 1 related with AdHoc deployment for iOS. The fix available for download is at:

https://cc.embarcadero.com/item/30797

The fix (which is a single file to add to your system) provides support for building iOS Ad Hoc Applications with RAD Studio 10.2.1 using Xcode 8.2, 8.3.2 or 8.3.3. Please ensure that RAD Studio 10.2.1 (Tokyo Release 1) is installed before applying this fix, it is not for the original 10.2 release.

Categories: News, Blogs, and Tips

Workaround for FMX Memory Leaks on Windows in 10.2.1

Wed, 08/16/2017 - 00:58

Many of our customers today write FireMonkey Windows applications. We recently got some customer reports on FMX memory leaks on Windows using RAD Studio 10.2 Release 1 (or Tokyo Release 1). The issue is reported at https://quality.embarcadero.com/browse/RSP-18774 and https://stackoverflow.com/questions/45588741/delphi-recompiling-application-with-10-2-1-causes-memory-leaks.

If you encounter such issues after installing 10.2.1, we recommend trying the workaround below. We will address this issue in the future.

To our knowledge, the memory leak doesn't happen during program execution, but on termination because a cleanup thread does not excute in time. Delphi MVP Stefan Glienke suggested a relatively simple workaround both on the Quality Portal bug report and in the StackOverflow page linked above. By calling CheckSynchronize (from System.Classes) you can have the application wait for the cleanup threads to execute. This does a quick sync, but does not cause any noticeable delay. 

There are different places where you can put this code, but the simplest one for me is a finalization block in the main form source code (no need to update the library units). This is an example of the code added to the end of the main form unit, along with activating memory leak reporting:



Another very good suggestion is to change the project file (the .dpr file), but your mileage might vary -- you can also consider fixing the library as this will fix all of your applications at once.

Categories: News, Blogs, and Tips

Creators Update BPL Loading Issue and Tokyo Release 1

Mon, 08/14/2017 - 02:10

As mentioned in the release notes of Tokyo 10.2.1, the latest release of RAD Studio addresses the issues caused by Windows 10 Creators Update and related with DLL and BPL loading. The issue is caused by a change (a bug!) in the DLL loading algorithm of the operating system, an issue that Microsoft has fixed in the new coming release of Windows 10, currently known as Fall Creators Update. I've already covered the problem in a past blog post, http://blog.marcocantu.com/blog/2017-june-delphi-packages-creators-update.html. There is also some discussion on the related Quality Portal bug report at https://quality.embarcadero.com/browse/RSP-17972.

Tokyo Release 1 Fixes the Issue

In this new post I don't want to get back to the technical information already discussed there, but focus on what's changed in Delphi Tokyo Release 1. In short, Embarcadero developers modified the compilers and linkers to emit a single export table section for each BPL, to avoid each section of the export table to cause the operating system to reload the same library once more.

As a experiment, on my primary system (which is running Windows 10 Creators Update) I took a very simple one button VCL application, activated runtime packages (which causes dependencies from the RTL and VCL packages) and started it in the debugger. I used Berlin 10.1.2 and Tokyo 10.2.1 side by side and you can clearly see the difference in the image below:

The Detailed Event Logs

In the detailed log for Tokyo 10.2.1 you can see that some unloading and reloading still happens (unloading is set in bold), but the same can be seen for some Microsoft system DLLs:

Thread Start: Thread ID: 3972. Process ProjectLoad.exe (2964) Process Start: C:\Users\marco\Documents\Embarcadero\Studio\Projects\Win32\Debug\ProjectLoad.exe. Base Address: $00400000. Process ProjectLoad.exe (2964) Module Load: ProjectLoad.exe. Has Debug Info. Base Address: $00400000. Process ProjectLoad.exe (2964) Module Load: ntdll.dll. No Debug Info. Base Address: $76EF0000. Process ProjectLoad.exe (2964) Module Load: KERNEL32.dll. No Debug Info. Base Address: $75320000. Process ProjectLoad.exe (2964) Module Unload: KERNEL32.dll. Process ProjectLoad.exe (2964) Module Load: KERNEL32.dll. No Debug Info. Base Address: $75320000. Process ProjectLoad.exe (2964) Module Load: KERNELBASE.dll. No Debug Info. Base Address: $74DE0000. Process ProjectLoad.exe (2964) Thread Start: Thread ID: 6872. Process ProjectLoad.exe (2964) Thread Start: Thread ID: 12820. Process ProjectLoad.exe (2964) Module Load: vcl250.bpl. Has Debug Info. Base Address: $50A80000. Process ProjectLoad.exe (2964) Module Load: rtl250.bpl. Has Debug Info. Base Address: $00C00000. Process ProjectLoad.exe (2964) Module Unload: rtl250.bpl. Process ProjectLoad.exe (2964) Module Load: SHLWAPI.dll. No Debug Info. Base Address: $75160000. Process ProjectLoad.exe (2964) Module Load: msvcrt.dll. No Debug Info. Base Address: $75DF0000. Process ProjectLoad.exe (2964) Module Load: combase.dll. No Debug Info. Base Address: $75BB0000. Process ProjectLoad.exe (2964) Module Load: ucrtbase.dll. No Debug Info. Base Address: $76200000. Process ProjectLoad.exe (2964) Module Load: RPCRT4.dll. No Debug Info. Base Address: $76C60000. Process ProjectLoad.exe (2964) Module Load: SspiCli.dll. No Debug Info. Base Address: $739C0000. Process ProjectLoad.exe (2964) Module Load: CRYPTBASE.dll. No Debug Info. Base Address: $739B0000. Process ProjectLoad.exe (2964) Module Load: bcryptPrimitives.dll. No Debug Info. Base Address: $750F0000. Process ProjectLoad.exe (2964) Thread Start: Thread ID: 1944. Process ProjectLoad.exe (2964) Module Load: SECHOST.dll. No Debug Info. Base Address: $755C0000. Process ProjectLoad.exe (2964) Module Load: GDI32.dll. No Debug Info. Base Address: $76DD0000. Process ProjectLoad.exe (2964) Module Load: gdi32full.dll. No Debug Info. Base Address: $76AC0000. Process ProjectLoad.exe (2964) Module Load: msvcp_win.dll. No Debug Info. Base Address: $753F0000. Process ProjectLoad.exe (2964) Module Load: USER32.dll. No Debug Info. Base Address: $74FB0000. Process ProjectLoad.exe (2964) Module Load: win32u.dll. No Debug Info. Base Address: $76060000. Process ProjectLoad.exe (2964) Module Load: COMDLG32.dll. No Debug Info. Base Address: $75AC0000. Process ProjectLoad.exe (2964) Module Load: SHCORE.dll. No Debug Info. Base Address: $76E60000. Process ProjectLoad.exe (2964) Module Load: WINSPOOL.DRV. No Debug Info. Base Address: $66030000. Process ProjectLoad.exe (2964) Module Load: SHELL32.dll. No Debug Info. Base Address: $73A90000. Process ProjectLoad.exe (2964) Module Load: bcrypt.dll. No Debug Info. Base Address: $72990000. Process ProjectLoad.exe (2964) Module Load: COMCTL32.dll. No Debug Info. Base Address: $6EF40000. Process ProjectLoad.exe (2964) Module Load: CFGMGR32.dll. No Debug Info. Base Address: $76020000. Process ProjectLoad.exe (2964) Module Load: Windows.Storage.dll. No Debug Info. Base Address: $76530000. Process ProjectLoad.exe (2964) Module Load: ADVAPI32.dll. No Debug Info. Base Address: $75230000. Process ProjectLoad.exe (2964) Module Load: AppCore.dll. No Debug Info. Base Address: $75310000. Process ProjectLoad.exe (2964) Module Load: POWRPROF.dll. No Debug Info. Base Address: $73A40000. Process ProjectLoad.exe (2964) Module Load: profapi.dll. No Debug Info. Base Address: $75150000. Process ProjectLoad.exe (2964) Module Load: OLEAUT32.dll. No Debug Info. Base Address: $76D20000. Process ProjectLoad.exe (2964) Module Load: ole32.dll. No Debug Info. Base Address: $760D0000. Process ProjectLoad.exe (2964) Module Load: oledlg.dll. No Debug Info. Base Address: $63220000. Process ProjectLoad.exe (2964) Module Load: rtl250.bpl. Has Debug Info. Base Address: $00D00000. Process ProjectLoad.exe (2964) Module Unload: rtl250.bpl. Process ProjectLoad.exe (2964) Module Load: rtl250.bpl. Has Debug Info. Base Address: $00D00000. Process ProjectLoad.exe (2964) Module Load: WS2_32.dll. No Debug Info. Base Address: $751C0000. Process ProjectLoad.exe (2964) Module Load: MPR.dll. No Debug Info. Base Address: $72B60000. Process ProjectLoad.exe (2964) Module Load: imagehlp.dll. No Debug Info. Base Address: $76C30000. Process ProjectLoad.exe (2964) Module Load: OLEACC.dll. No Debug Info. Base Address: $65270000. Process ProjectLoad.exe (2964) Module Load: OPENGL32.dll. No Debug Info. Base Address: $6E800000. Process ProjectLoad.exe (2964) Module Load: VERSION.dll. No Debug Info. Base Address: $73940000. Process ProjectLoad.exe (2964) Module Load: NETAPI32.dll. No Debug Info. Base Address: $71B10000. Process ProjectLoad.exe (2964) Module Load: WINHTTP.dll. No Debug Info. Base Address: $72AB0000. Process ProjectLoad.exe (2964) Module Load: SHFOLDER.dll. No Debug Info. Base Address: $73100000. Process ProjectLoad.exe (2964) Module Load: WSOCK32.dll. No Debug Info. Base Address: $729B0000. Process ProjectLoad.exe (2964) Module Load: GLU32.dll. No Debug Info. Base Address: $6FAA0000. Process ProjectLoad.exe (2964) Module Load: netutils.dll. No Debug Info. Base Address: $70000000. Process ProjectLoad.exe (2964) Module Load: IMM32.dll. No Debug Info. Base Address: $761D0000. Process ProjectLoad.exe (2964) Module Load: MSCTF.dll. No Debug Info. Base Address: $75470000. Process ProjectLoad.exe (2964) Module Load: UxTheme.dll. No Debug Info. Base Address: $6CBE0000. Process ProjectLoad.exe (2964) Module Load: dwmapi.dll. No Debug Info. Base Address: $6AD20000. Process ProjectLoad.exe (2964) Module Load: WTSAPI32.dll. No Debug Info. Base Address: $66E80000. Process ProjectLoad.exe (2964) Module Load: WINSTA.dll. No Debug Info. Base Address: $68D20000. Process ProjectLoad.exe (2964) Module Load: TextInputFramework.dll. No Debug Info. Base Address: $6D180000. Process ProjectLoad.exe (2964) Module Load: CoreMessaging.dll. No Debug Info. Base Address: $6CEC0000. Process ProjectLoad.exe (2964) Module Load: CoreUIComponents.dll. No Debug Info. Base Address: $6CF50000. Process ProjectLoad.exe (2964) Module Load: WinTypes.dll. No Debug Info. Base Address: $6FBE0000. Process ProjectLoad.exe (2964) Module Load: NTMARTA.dll. No Debug Info. Base Address: $71F10000. Process ProjectLoad.exe (2964) Module Load: USERMGRCLI.dll. No Debug Info. Base Address: $6CEB0000. Process ProjectLoad.exe (2964)

Compare the log above to the same for an application compiled with Berlin 10.1.2:

Thread Start: Thread ID: 3512. Process Project14.exe (6928) Process Start: C:\Users\marco\Documents\Embarcadero\Studio\Projects\Win32\Debug\Project14.exe. Base Address: $00400000. Process Project14.exe (6928) Module Load: Project14.exe. Has Debug Info. Base Address: $00400000. Process Project14.exe (6928) Module Load: ntdll.dll. No Debug Info. Base Address: $76EF0000. Process Project14.exe (6928) Module Load: KERNEL32.dll. No Debug Info. Base Address: $75320000. Process Project14.exe (6928) Module Unload: KERNEL32.dll. Process Project14.exe (6928) Module Load: KERNEL32.dll. No Debug Info. Base Address: $75320000. Process Project14.exe (6928) Module Load: KERNELBASE.dll. No Debug Info. Base Address: $74DE0000. Process Project14.exe (6928) Thread Start: Thread ID: 872. Process Project14.exe (6928) Thread Start: Thread ID: 12124. Process Project14.exe (6928) Thread Start: Thread ID: 5136. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02B80000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: vcl240.bpl. Has Debug Info. Base Address: $50A70000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: USER32.dll. No Debug Info. Base Address: $74FB0000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: win32u.dll. No Debug Info. Base Address: $76060000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: GDI32.dll. No Debug Info. Base Address: $76DD0000. Process Project14.exe (6928) Module Load: gdi32full.dll. No Debug Info. Base Address: $76AC0000. Process Project14.exe (6928) Module Load: msvcp_win.dll. No Debug Info. Base Address: $753F0000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: ucrtbase.dll. No Debug Info. Base Address: $76200000. Process Project14.exe (6928) Module Load: ADVAPI32.dll. No Debug Info. Base Address: $75230000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: msvcrt.dll. No Debug Info. Base Address: $75DF0000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: SECHOST.dll. No Debug Info. Base Address: $755C0000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: RPCRT4.dll. No Debug Info. Base Address: $76C60000. Process Project14.exe (6928) Module Load: SspiCli.dll. No Debug Info. Base Address: $739C0000. Process Project14.exe (6928) Module Load: CRYPTBASE.dll. No Debug Info. Base Address: $739B0000. Process Project14.exe (6928) Module Load: bcryptPrimitives.dll. No Debug Info. Base Address: $750F0000. Process Project14.exe (6928) Module Load: SHLWAPI.dll. No Debug Info. Base Address: $75160000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: combase.dll. No Debug Info. Base Address: $75BB0000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: OLEAUT32.dll. No Debug Info. Base Address: $76D20000. Process Project14.exe (6928) Module Load: ole32.dll. No Debug Info. Base Address: $760D0000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: SHELL32.dll. No Debug Info. Base Address: $73A90000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: CFGMGR32.dll. No Debug Info. Base Address: $76020000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: SHCORE.dll. No Debug Info. Base Address: $76E60000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: Windows.Storage.dll. No Debug Info. Base Address: $76530000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: AppCore.dll. No Debug Info. Base Address: $75310000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: POWRPROF.dll. No Debug Info. Base Address: $73A40000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: profapi.dll. No Debug Info. Base Address: $75150000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: COMDLG32.dll. No Debug Info. Base Address: $75AC0000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: COMCTL32.dll. No Debug Info. Base Address: $6EF40000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: WINSPOOL.DRV. No Debug Info. Base Address: $00930000. Process Project14.exe (6928) Module Unload: WINSPOOL.DRV. Process Project14.exe (6928) Module Load: WINSPOOL.DRV. No Debug Info. Base Address: $66030000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: oledlg.dll. No Debug Info. Base Address: $63220000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $02160000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: bcrypt.dll. No Debug Info. Base Address: $72990000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $01740000. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Unload: rtl240.bpl. Process Project14.exe (6928) Module Load: rtl240.bpl. Has Debug Info. Base Address: $00D20000. Process Project14.exe (6928) Module Load: imagehlp.dll. No Debug Info. Base Address: $76C30000. Process Project14.exe (6928) Module Load: WS2_32.dll. No Debug Info. Base Address: $751C0000. Process Project14.exe (6928) Module Load: VERSION.dll. No Debug Info. Base Address: $73940000. Process Project14.exe (6928) Module Load: MPR.dll. No Debug Info. Base Address: $72B60000. Process Project14.exe (6928) Module Load: SHFOLDER.dll. No Debug Info. Base Address: $73100000. Process Project14.exe (6928) Module Load: NETAPI32.dll. No Debug Info. Base Address: $71B10000. Process Project14.exe (6928) Module Load: WSOCK32.dll. No Debug Info. Base Address: $729B0000. Process Project14.exe (6928) Module Load: OPENGL32.dll. No Debug Info. Base Address: $6E800000. Process Project14.exe (6928) Module Load: OLEACC.dll. No Debug Info. Base Address: $65270000. Process Project14.exe (6928) Module Load: WINHTTP.dll. No Debug Info. Base Address: $72AB0000. Process Project14.exe (6928) Module Load: GLU32.dll. No Debug Info. Base Address: $6FAA0000. Process Project14.exe (6928) Module Load: IMM32.dll. No Debug Info. Base Address: $761D0000. Process Project14.exe (6928) Module Load: wkscli.dll. No Debug Info. Base Address: $73190000. Process Project14.exe (6928) Module Load: CSCAPI.dll. No Debug Info. Base Address: $6FA70000. Process Project14.exe (6928) Module Load: MSCTF.dll. No Debug Info. Base Address: $75470000. Process Project14.exe (6928) Module Load: UxTheme.dll. No Debug Info. Base Address: $6CBE0000. Process Project14.exe (6928) Module Load: dwmapi.dll. No Debug Info. Base Address: $6AD20000. Process Project14.exe (6928) Module Load: WTSAPI32.dll. No Debug Info. Base Address: $66E80000. Process Project14.exe (6928) Module Load: WINSTA.dll. No Debug Info. Base Address: $68D20000. Process Project14.exe (6928) Rebuilding Your Project Might not Be Enough

So if you have an application that uses runtime package in Tokyo on Creators Update, do you just need to rebuild it to have it load faster and be able to debug more smoothly? If you are only using runtime packages that come with RAD Studio, rebuilding is enough as the runtime package that ship with 10.2.1 have been re-compiled. If you are using additional packages of your own or for which you have the source code, you'll need to recompile also those packages -- even if they are binary compatible and would work. If you are using third party packages you don't have the source code for, you need to ask the third party vendor for a new version build with the compiler in Tokyo Release 1.

Conclusion: Can We Ask Microsoft for a Fix?

Needless to say, this compiler change shouldn't have been needed, would Microsoft had fixed the issue the introduced timely. Given how many users are affected, this should have been expected. Maybe there is still time to insist with Microsoft to release the fix they did for a future version to the current version of Windows... given how hard it is to skip a release these days.

All we at Embarcadero could do was to apply a "workaround" to the most recent release, Tokyo. We are considering providing the same fix for older versions like Berlin and Seattle -- although again this will require a large update from us and also a new build of all third party packages! 

 

Categories: News, Blogs, and Tips