News, Blogs, and Tips

Implementing AJAX and JSONP Support in RAD Server for ExtJS

Marco Cantu - 7 hours 32 min ago

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

Marco Cantu - Tue, 10/10/2017 - 08: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

Marco Cantu - Wed, 10/04/2017 - 08: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

Marco Cantu - Tue, 10/03/2017 - 03: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

Marco Cantu - Fri, 09/29/2017 - 02: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

IDE Fix Pack 6.0 released – dcc64 and 10.2 Update 1 support

Andy’s Blog and Tools - Thu, 09/28/2017 - 13:51

The new IDE Fix Pack version 6.0 is available. It supports Delphi 10.2 RTM and 10.2 Update 1. And after over a year of being in BETA testing without any bug reports, I also included all the Win64 compiler performance optimizations. Thus the jump to version 6.0 can finally be done as they make the Win64 compiler up to 50% faster.

Changelog:

  • Added: Win64 compile speed optimizations
  • Added: Delphi 10.2 Update 1 support
  • Added: Editor Block Completion UTF8 fix (Delphi 2009 only)

Download:

Name IDE Version File Size Downloads Added IDE Fix Pack 6.0 2009 (UP4) IDEFixPack2009Reg60.7z 181.51 KB 4 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) 2010 (UP5) IDEFixPack2010Reg60.7z 177.69 KB 6 times 2017-09-28 IDE Fix Pack 6.0 XE (UP1) IDEFixPackXEReg60.7z 163.8 KB 4 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE2 (UP4+HF1) IDEFixPackXE2Reg60.7z 245.8 KB 3 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE3 (UP2) IDEFixPackXE3Reg60.7z 200.12 KB 2 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE4 (UP1) IDEFixPackXE4Reg60.7z 202.69 KB 5 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE5 (UP2) IDEFixPackXE5Reg60.7z 201.89 KB 3 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE6 (UP1) IDEFixPackXE6Reg60.7z 344.64 KB 3 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE7 (UP1) IDEFixPackXE7Reg60.7z 359.65 KB 3 times 2017-09-28 IDE Fix Pack 6.0 (unsupported) XE8 (UP1) IDEFixPackXE8Reg60.7z 357.01 KB 2 times 2017-09-28 IDE Fix Pack 6.0 10 Seattle (RTM/UP1) IDEFixPackD10Reg60.7z 365.5 KB 8 times 2017-09-28 IDE Fix Pack 6.0 10.1 Berlin IDEFixPackD101Reg60.7z 363.27 KB 9 times 2017-09-28 IDE Fix Pack 6.0 10.2 (RTM/UP1) IDEFixPackD102Reg60.7z 363.43 KB 36 times 2017-09-28

Download (fastdcc):

Name IDE Version File Size Downloads Added fastdcc 6.0 2009 (UP4) fastdcc2009v60.7z 78.22 KB 2 times 2017-09-28 fastdcc 6.0 (unsupported) 2010 (UP5) fastdcc2010v60.7z 85.29 KB 2 times 2017-09-28 fastdcc 6.0 XE (UP1) fastdccXEv60.7z 87.24 KB 3 times 2017-09-28 fastdcc 6.0 (unsupported) XE2 (UP4+HF1) fastdccXE2v60.7z 123.66 KB 3 times 2017-09-28 fastdcc 6.0 (unsupported) XE3 (UP2) fastdccXE3v60.7z 131.59 KB 2 times 2017-09-28 fastdcc 6.0 (unsupported) XE4 (UP1) fastdccXE4v60.7z 134.15 KB 3 times 2017-09-28 fastdcc 6.0 (unsupported) XE5 (UP2) fastdccXE5v60.7z 133.84 KB 2 times 2017-09-28 fastdcc 6.0 (unsupported) XE6 (UP1) fastdccXE6v60.7z 171.41 KB 2 times 2017-09-28 fastdcc 6.0 (unsupported) XE7 (UP1) fastdccXE7v60.7z 183.62 KB 3 times 2017-09-28 fastdcc 6.0 (unsupported) XE8 (UP1) fastdccXE8v60.7z 183.06 KB 2 times 2017-09-28 fastdcc 6.0 10 Seattle (RTM/UP1) fastdccD10v60.7z 183.33 KB 3 times 2017-09-28 fastdcc 6.0 10.1 Berlin fastdccD101v60.7z 182.82 KB 4 times 2017-09-28 fastdcc 6.0 10.2 (RTM/UP1) fastdccD102v60.7z 182.97 KB 11 times 2017-09-28
Categories: News, Blogs, and Tips

Delphi and RAD Studio Roadmap Update Published

Marco Cantu - Tue, 09/19/2017 - 01: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

Marco Cantu - Thu, 09/14/2017 - 07: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

Marco Cantu - Wed, 09/13/2017 - 06: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

Marco Cantu - Fri, 09/08/2017 - 06: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

Marco Cantu - Wed, 09/06/2017 - 08: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

Marco Cantu - Wed, 09/06/2017 - 07: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

Marco Cantu - Fri, 09/01/2017 - 02: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

Marco Cantu - Wed, 08/23/2017 - 01: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

Marco Cantu - Wed, 08/16/2017 - 01: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

Debugger Callstack Resolver released

Andy’s Blog and Tools - Tue, 08/15/2017 - 09:03

Debugger Callstack Resolver is a Delphi IDE plugin that I wrote in 2011 to make the IDE’s CPU View more readable. It colors different instructions, resolves absolute and memory address jump and call targets and shows their function name if available. It also uses the *.jdbg to show more information (the dcc32 compiler’s jdbg files are for the debug build of the compiler and haven’t match the deployed version since jdbg files exist)

This plugin supports Delphi 2009 – 10.1 Berlin.

[Download]

Categories: News, Blogs, and Tips

Creators Update BPL Loading Issue and Tokyo Release 1

Marco Cantu - Mon, 08/14/2017 - 03: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

Quality Portal and Tokyo Release 1

Marco Cantu - Fri, 08/11/2017 - 04:05

The RAD Studio 10.2.1 release (earlier this week) was focused on bug fixing. You can find the list of issues that have been addressed at http://edn.embarcadero.com/article/44763. The list includes 186 customer reported issues there were either fixed or cannot be reproduced any more -- so they also got fix, even if "indirectly" (that is, while fixing some related bug). If we include also duplicate items, expected behavior, and issues we decided not to fix (for some reason) or are not applicable any more, the total of Quality Portal bugs closed is 241.

This list of bugs and these counts don't include bugs reported internally and closed. All bugs touched by the release are 402 (including all resolutions). While there are a few relevant issues not handled (and we are evaluating how and when to release a fix for those) and a few only partially done (we opened a Phase 2 bug for Android performance) a lot if the issues that were resolved improve support of the latest versions of iOS and Xcode, Creators Update (with BPL loading -- more on this in a separate blog post) and Android performance and quality (including the June hot fix).

If we look at the overall status, this is the 30 days status (captured today):

Having pushed out a release, this is very favorable. This is the more realistic 365 days (1 year) status report (this includes bugs only, not feature requests):

What the graph tells is that we need to (literally) double our effort to address bugs and improve the product quality, but both Tokyo and Tokyo Release 1 made a good dent.

The last thing I want to draw your attention to is the list of most voted issues before Release 1:

We did address many of the issues with the highest number of votes in that list:

- Non-functional debugger with Creators Update (which is by itself a Windows issue)

- Android Tokyo app are super slow (data is in the report, but we need to and will do more to address this)

- StringToJString leak

- iOS 10.3

Among those left open, the Chinese VK is very tricky (and regional), IDE DPI awareness is bordering a feature request and something we are making steps towards (we did fix a few more HighDPI VCL issues in Tokyo Release 1) and the C++ linkers issue was addressed, at least in part (we are making more tests and might officially close it).

RAD Studio and Delphi and C++Builder customers keep pushing us to focus more on quality. Over the last couple of years QPS (Quality, Performance, Stability) was and still is today a top priority in our development effort. Some new features like Linux support were really important, therefore we need to keep striking a good balance between features, quality, and bug fixing. But quality is key.

Categories: News, Blogs, and Tips

Delphi Tokyo Release 1 or 10.2.1 is Now Available

Marco Cantu - Tue, 08/08/2017 - 04:03

You can read more about the release and its rationale in the PM article published in the community:

https://community.embarcadero.com/article/16556-rad-studio-10-2-1-released-today

For the actual release information docWiki page, including how to obtain the release, what's new, known issues, visit:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/10.2_Tokyo_-_Release_1

For a more detailed of issues fixed in this release, see the EDN article at:

http://edn.embarcadero.com/article/44763

We had to put a significant effort into some of the issues, like those caused by Creators Update and changes in iOS, so very happy to make this new version of Delphi and C++ Builder available to our customers. 

Categories: News, Blogs, and Tips