Marco Cantu

Syndicate content
Techie Italian Blogging on Delphi and More
Updated: 2 min 9 sec ago

GetIt Packages Project Dependencies

Tue, 06/21/2016 - 01:50

A new feature of RAD Studio 10.1 Berlin that has gone mostly unnoticed is the ability to have project dependencies to GetIt packages. This makes is much easier to share projects that depend on third party libraries.

Since its introduction last year, the GetIt Package Manager has been continuously updated and extended with more capabilities. Since the beginning, the GetIt architecture allowed for dependencies: if library A depends on library B, when installing A you'll be prompted to install the dependent library B first. Now in Delphi and C++Builder 10.1 Berlin the mechanism has been extended so that a specific project can declare which libraries it depends on (this is not an automatic mechanism). Before looking to the solution, let me recap the issue at stake. Suppose that another developer send you a Delphi project, in my scenario one that uses the VirtualTreeView component. You open it, and if you don't have the package installed, you'll end up with an error like:

Now suppose that before sending me the project, the developer has opened the new GetIt Dependencies tab of the Project Options and set the proper dependencies, as below:

 

Now as I receive the project and open it, if I don't have the package installed, I'll be prompted to download it:

In theory, this will automatically trigger the download of the package. In practice, this triggers an error and and up making the dependencies unstable. So my recommendation is to select No, let the project open, eventually click Cancel if you receive an error that a component is not found, close all forms (but not the project), open the Project Options and install all missing packages, as below:

Now open your project forms, compile your projects and you should be up and running.

As you can see from reading above, there are still some hiccups in the process, but this is a very important new feature for the GetIt package manager, and I felt it was worth sharing despite the pending issues. If you go for a partially manual process, using the GetIt Dependencies page of the Project Options, everything should work fine.

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #44

Mon, 06/20/2016 - 08:04

Another round of blog posts covering news and blogs related with Delphi and RAD Studio.

Official Embarcadero News

A new PM has joined the RAD Studio PM team, with a specific focus on C++Builder. Great to have David Millington on board. You can read http://community.embarcadero.com/blogs/entry/hello-from-the-new-c-product-manager and https://parnassus.co/joining-embarcadero-c-product-manager/.

Speaking of another David, don't miss http://community.embarcadero.com/blogs/entry/calculating-how-i-am-and-how-many-years-i-have-been-married-using-delphi-and-c-builder

Finally, the GetIt Package Manager is going to have an increasingly important role, as you can read at http://community.embarcadero.com/blogs/entry/partner-collaboration-using-getit

​Technical Blog Posts

Variable Item Height with TListView in 10.1 Berlin by Sarina at http://community.embarcadero.com/blogs?view=entry&id=8574

The new "build with" and powered by" logos, at http://community.embarcadero.com/article/articles-support/171-rad-studio/16411-get-the-new-powered-by-built-with-and-built-for-logos

More from Uwe on his Package Magician at http://www.uweraabe.de/Blog/2016/06/19/package-magician-and-search-paths/

Jim is covering all of the cool apps submissions we received at http://community.embarcadero.com/blogs?view=blogger&layout=listings&id=390

Pawel on proximity apps at http://community.embarcadero.com/blogs?view=entry&id=8584

Projects and Libraries

FireBase is becoming critical for Android developers, great that Daniele Spinetti has a Delphi library to interface it at https://github.com/spinettaro/Firebase4Delphi

​Speaking of mobile, a FireMonkey sprite engine is available at https://github.com/dimsa/ShadowEngine

​And Events

In case you haven't seen it, Cary and Nick are teaming for Delphi Developer Days 2016: http://caryjensen.blogspot.it/2016/06/delphi-developer-days-2016-with-nick.html

That's all for this round...

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #44

Mon, 06/20/2016 - 07:53

Another round of blog posts covering news and blogs related with Delphi and RAD Studio.

Official Embarcadero News

A new PM has joined the RAD Studio PM team, with a specific focus on C++Builder. Great to have David Millington on board. You can read http://community.embarcadero.com/blogs/entry/hello-from-the-new-c-product-manager and https://parnassus.co/joining-embarcadero-c-product-manager/.

Speaking of another David, don't miss http://community.embarcadero.com/blogs/entry/calculating-how-i-am-and-how-many-years-i-have-been-married-using-delphi-and-c-builder

Finally, the GetIt Package Manager is going to have an increasingly important role, as you can read at http://community.embarcadero.com/blogs/entry/partner-collaboration-using-getit

​Technical Blog Posts

Variable Item Height with TListView in 10.1 Berlin by Sarina at http://community.embarcadero.com/blogs?view=entry&id=8574

The new "build with" and powered by" logos, at http://community.embarcadero.com/article/articles-support/171-rad-studio/16411-get-the-new-powered-by-built-with-and-built-for-logos

More from Uwe on his Package Magician at http://www.uweraabe.de/Blog/2016/06/19/package-magician-and-search-paths/

Jim is covering all of the cool apps submissions we received at http://community.embarcadero.com/blogs?view=blogger&layout=listings&id=390

Pawel on proximity apps at http://community.embarcadero.com/blogs?view=entry&id=8584

Projects and Libraries

FireBase is becoming critical for Android developers, great that Daniele Spinetti has a Delphi library to interface it at https://github.com/spinettaro/Firebase4Delphi

​Speaking of mobile, a FireMonkey sprite engine is available at https://github.com/dimsa/ShadowEngine

​And Events

In case you haven't seen it, Cary and Nick are teaming for Delphi Developer Days 2016: http://caryjensen.blogspot.it/2016/06/delphi-developer-days-2016-with-nick.html

That's all for this round...

Categories: News, Blogs, and Tips

Weak and Unsafe Interface References in Delphi 10.1 Berlin

Thu, 06/16/2016 - 07:32

Delphi 10.1 Berlin adds a couple of features to the Delphi language, bridging gaps between platforms and extending the Win32/Win64 interface reference model. This is not the only change to the language, but clearly the most relevant one. Another, focused on mobile, is the introduction of the native UTF8String type on all platforms, mobile compilers included.

But let me get back to the way references to interfaces work on the desktop compilers. By default, all references to interfaces use reference counting. As you assign a variable to the interface the reference count is increased, as the variable is set to nil or goes out of scope, the reference count is decreased. When the reference count gets to zero the object is deleted from memory. That is not actually always true, as the actual behavior is implemented by each class, so you can write a class that implements an interface and ignores the reference counting mechanism.

Anyway, getting back to the common scenarios in which reference count is active, you can have code like the following, which relies on reference counting to dispose the temporary object:

procedure TForm3.Button2Click(Sender: TObject); var one: ISimpleInterface; begin one := TObjectOne.Create; one.DoSomething; end;

What if the object has a standard reference count implementation and you want to create an interface reference that is kept out of the total count of references? You can now achieve this by adding the [unsafe] attribute to the interface variable declaration, changing the code above to:

procedure TForm3.Button2Click(Sender: TObject); var [unsafe] one: ISimpleInterface; begin one := TObjectOne.Create; one.DoSomething; end;

Not that this is a good idea, as the code above would cause a memory leak. By disabling the reference counting, when the variable goes out of scope nothing happens. There are some scenarios in which this is beneficial, as you can still use interfaces and not trigger the extra reference. In other words, an unsafe reference is treated just like... a pointer, with no extra compiler support.

Now before you consider using the unsafe attribute for having a reference without increasing the count, consider that in most cases there is another better option, that is the use of weak references. Weak references also avoid increasing the reference count, but they are managed. This means that the system keeps track of weak references, and in case the actual object gets deleted, it will set the weak reference to nil. With an unsafe reference, instead, you have no way to know the status of the target object (a scenario called dangling reference).

In which scenarios are weak reference useful? A classic case is that of two object with cross-references. In such a case, in fact, the object would artificially inflate the reference count of the other objects, and they'll basically remain in memory forever (with reference count set to 1), even when they become unreachable.

As an example consider the following interface, accepting a reference to another interface of the same type, and a class implementing it with an internal reference:

type ISimpleInterface = interface procedure DoSomething; procedure AddObjectRef (simple: ISimpleInterface); end; TObjectOne = class (TInterfacedObject, ISimpleInterface) private anotherObj: ISimpleInterface; public procedure DoSomething; procedure AddObjectRef (simple: ISimpleInterface); end;

If you create two objects and cross-reference them, you end up with a memory leak:

var one, two: ISimpleInterface; begin one := TObjectOne.Create; two := TObjectOne.Create; one.AddObjectRef (two); two.AddObjectRef (one);

Now the solution available in Delphi 10.1 Berlin is to mark the private field anotherObj as weak:

private [weak] anotherObj: ISimpleInterface;

Now the reference count is not modified when you pass the object as parameter to the AddObjectRef call, it stays at 1, and it goes back to zero when the variables go out of scope, freeing the objects from memory.

Now there are many other cases in which this feature becomes handy, and there is some real complexity in the underlying implementation. It is great feature, but one that takes some effort to fully master. Also, it does have some runtime cost, as weak references are managed (while unsafe ones are not).

Categories: News, Blogs, and Tips

Closing the Class Helpers Private Access Loophole

Wed, 06/08/2016 - 07:16

As many of you know, Embarcadero made a change to the Delphi compiler in 10.1 Berlin to close an existing bug that allowed access to private data of any class via a class helper. Developers who were leveraging this hack would need a migration strategy.

Private is... Private

For quite some time, there was a bug in the Delphi compiler that ended up allowing class helper methods to access private fields of the class they helped, regardless of the unit in which the class was declared. This “hack” basically broke OOP encapsulation rules. To enforce visibility semantics, class and record helpers in most recent versions of Object Pascal compilers (starting with 10.1 Berlin) cannot access private members of the classes or records that they extend. Notice that protected members, on the other hand, are accessible to class helpers, exactly like they are to derived classes.

(By the way, this issue was covered last month also by Craig at http://chapmanworld.com/2016/05/03/the-encapsulation-bug-that-was-a-feature/)

A number of developers found this hack quite handy for accessing private fields and methods of the class library or component they use and we got complaints during the beta and after the product release about this change. We spent a lot of time evaluating different options and solutions... but could not find any better option. The request of "leave this bug open, it is a feature we rely upon" does make sense, but ultimately allowing access to private fields in libraries implies going against the main pillar of object-oriented programming and the last 20 years of computer languages. Not only that, in practical terms it means having to maintain some sort of compatibility of the private portion of core library classes in the future, avoid changing any behavior. The reason these private features are private is exactly to allow developer freedom to change them in the future!

We also got requests to leave this as a temporarily switch, but that would have only delayed the decision (and the code update) to the next release, while leaving the bug open.  Another point I heard a lot was about other programming languages allowing the same type of private access. C++ has a "friend class" construct, but the difference there is you grant friendship to another class, while that other class cannot just claim friendship and access private data. Imagine Facebook would allow any person to claim friendship (not be granted friendship) and access your information at will.

Other languages like Java and C# allow access to private fields via reflection... which is exactly what Delphi also allows, and has allowed for many years now since extended RTTI was introduced. Now the question becomes: if this is possible anyway, why don't let developers do it the easy way? The issue is developers should not be encouraged to access private data and they should clearly express their intention in code, clearly indicating what they are doing. To me, using RTTI satisfies these requirements better.

Again, this is not a decision that was taken lightly. We even invited a former R&D engineer, who originally added class helpers to the language, to share his opinion with us and in the beta forums. That resulted in some very interesting conversations. 

But is Private Always Needed?

An important point that was highlighted by this change in the compiler, is that in some cases libraries keep access to some information private without a full evaluation of the scenarios in which developers might need access to those fields or methods. During the beta, developers pointed out fields or methods they really needed to access to, and the team either moved some fields to protected, added additional access properties (still keeping the data private), or introduced more flexibility in other ways. These are specific titles of QP issues that have been addressed during the beta (but there have been many more in this and the previous releases):

Private access issue: TCustomForm.FTextHeight

Private access issue: TBitmap.FAlphaFormat

Private access issue: VCL TBitmap.FImage / TBitmapImage.FDib

TListView: It should be possible to define own calls for TListColumn

Mark CreateRoot method in ShellCtrls virtual and elevate visibility Root fields

FMX TTreeViewItem needs protected ChildrenOffset

TRTTIParameter.Parent not pointing to correct TRttiMethod instance (affects Spring4D)

Change visibility specifiers in all style hook classes

Private access issue: TStyleManager.FSystemStyle

​We are more than willing to keep evaluating more cases in which exposing a private member makes sense, and the same you should probably ask to other library vendors.

But What About my Code?

Most of Delphi developers have been able to move their code to 10.1 Berlin easily, as they were not leveraging this hack or did it only occasionally and were able to bypass the problem. There are others who are experiencing bigger problems. What are the options?

One option is to consider if changes already done to the RTL or VCL libraries have already made the private access redundant. At times this is the case (and more often that some people think). If this is not the case, you might also want to consider if that is really needed. If it does, apply one of the workarounds below and file a quality portal report asking Embarcadero to open access that specific information.

The cleaner solution for private access is generally the use of RTTI. Something like

RTTIContext.GetType('classname').GetField('fieldname').GetValue(anObject)

might do the trick. Beside the extra code (which can be simplified and embedded in a class helper!) the drawback is the significantly slower performance. However, you can also keep the RTTI context and the TRttiField object around for optimization. This is a small working VCL-based code snippet (even if not a terribly useful one):

var rttiCtx: TRTTIContext; begin ShowMessage (rttiCtx.GetType(TForm).GetField('FClientWidth').GetValue (self).ToString);

If you need a fast, direct solution a real hack is to declare a data structure matching the class and doing a hard type cast among the two classes. Or just get the field position in the class structure and do a pointer-based access. These approaches are clearly not recommended, but (in corner cases) they offer top performance.

For some alternative coding styles and some discussions, you can see among other sources:

http://stackoverflow.com/questions/37351215/how-to-access-a-private-field-from-a-class-helper-in-delphi-10-1-berlin

http://stackoverflow.com/questions/36716363/how-to-access-private-methods-without-helpers

http://stackoverflow.com/questions/31972202/accessing-private-fields-from-a-class-helper

Compatibility versus Evolution

Even if this is a very specific scenario, having to do more with a bug than with a feature, the issue we faced while deciding for a direction to take in this case is one between maintaining perfect compatibility with all existing code and evolving the tool. In many cases the two can coexist (and Delphi has one of the best track records with 20 years of backwards compatibility), but in same scenarios you have to privilege one over the other. In this case the call was to fix a really critical bug. I know some of you would disagree...

Categories: News, Blogs, and Tips

Webinar Video about Submitting Apps to Mobile Stores

Mon, 06/06/2016 - 03:59

A video fragment of last week Mobile Development webinar with my portion of the recording, covering submitting apps to the Apple App Store and the Google Play Store, is available on YouTube, at https://youtu.be/-JNGEvKbfeU. While it is not a detailed step by step tutorial -- that could take hours -- it highlights the main steps and issues when submitting mobile apps built with RAD Studio to the two most popular app stores.

All other sections of the same webinar are in the EmbarcaderoTech YouTube channel (https://www.youtube.com/user/EmbarcaderoTechNet) and include the complete webinar video (https://www.youtube.com/watch?v=sukeR4IZi1Q) or the various fragments.

 

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #43

Fri, 06/03/2016 - 05:51

Another round of news and links related with Delphi, including some old one I had to research for my part of the mobile webinar this week.

Blog Post of the Week

Not sure if I want to start a regular "blog post of the week" contest, but if I were this week winner would definitely be Jim's "Delphi DNA" blog post, that you can read at http://delphi.org/2016/06/what-is-delphis-dna/. It is honestly a great, terse, summary of why Delphi is a great tool and deserves to be considered even in today's development tools landscape (clearly much different from 20 years ago). It is the unique combination of components, compilers, APIs, database access glued together by productivity and programming power that makes Delphi (and C++Builder) what it is.

Runner up blog post (as I noticed only a few) is Uwe's latest on package management, at http://www.uweraabe.de/Blog/2016/06/01/there-can-only-be-one-at-a-time/.

MVP and Cool App Contest

Quite a few things happening around the MVP program and other Developer Relations initiatives. We have new MVPs listed at http://delphi.org/2016/05/more-new-mvps/. Great news the team in growing with several new well known Delphi experts from all over the world.

The fist winner of the cool app content is... http://community.embarcadero.com/article/news/16234-1password-for-windows-is-the-1st-winner-of-the-cool-app-contest-2, and that is possible because http://community.embarcadero.com/blogs?view=entry&id=8513 -- there is also a video at https://www.youtube.com/watch?v=CkUF42OPKvE

​From Webinars

Myself and the rest of the team is spending some time on webinars these days. After the RAD Server real case scenario and overview, we did a mobile webinar yesterday, and now there is a coming in depth view of the RAD Server retails app coming.

From that work, Sarina blogged about the UI of the retail app at http://community.embarcadero.com/blogs/entry/iot-retail-application-example-home-screen-design

​I haven't blogged (but might do), but had to find back this link for an assets generator for Delphi mobile apps, at http://riversoftavg.com/blogs/index.php/2014/02/03/creating-icons-and-launchers-for-delphi-mobile-applications/ (would be nice to have an update with all the newest icons resolutions, but it does save a lot of time).

Yesterday webinar notes are at  http://community.embarcadero.com/blogs/entry/june-2-webinar-getting-started-building-mobile-applications-for-ios-and-android including a large number of links David I has collected. I covered (in 10 minutes) submitting apps to mobile stores (Play Store and App Store).

Coming

That's all for now. I do have several blog posts in the pipeline, and always too little time. Let's see what I can cover. Next week, I'll also stop by at the Delphi event in Piacenza, see http://community.embarcadero.com/all-events/viewevent/679-italian-delphi-day-2016.

Categories: News, Blogs, and Tips

Faster Compilation for Delphi Win32 Generics in 10.1 Berlin

Wed, 05/25/2016 - 02:57

While the Delphi compiler is recognized as an extremely fast compiler, when it comes to generics it can significantly slow down, along with the linker. The latest version of Delphi offers a significant improvement.

During the development of 10.1 Berlin Delphi’s R&D team, and in particular the compiler team, looked into areas in which we could improve the compiler quality, both in terms of code generation and in terms of compiler speed. Out of many improvements, one worth calling out it the significantly faster compilation for code involving a large number of generic data types.

This wasn’t actually a single fix, but a collection of 6 different compiler optimizations, each of which contributes to the overall improvement. Ranging from small to very large projects, we have internal test cases that show different gains for each of these individual optimizations – well, in general, as there are individual optimizations that make compilation slower in given scenarios.

As an example, one of our customers (thanks, Guenther) had submitted a demo (and actually even a demo generator) as part of https://quality.embarcadero.com/browse/RSP-11865. That demo code on Win32 in 10 Seattle takes on average 25 seconds for a full build. The same exact code compiles in 10.1 Berlin in less than 10 seconds. That is, it is taking only 40% of the original time – a 150% improvement.

Other code scenarios, specifically those not so extreme, will see a more moderate advantage, but the changes are applicable to almost all code and both the compiler and the linker. As a more real-world scenario, I downloaded the latest Spring4D library, and compiled the Win32 version of the Spring.Tests projects of 10 Seattle and 10.1 Berlin, and got the following numbers:

  • 10 Seattle: 6.01 seconds
  • 10.1 Berlin: 4.50 seconds

As a further test (although less significant because it is very fast) I also compiled the Demo.Spring.Collections.Stack demo and saw the following timing:

  • 10 Seattle: 1.02 seconds
  • 10.1 Berlin: 0.70 seconds

The summary is there is a consistent improvement in compiling code with generics, in this real-world cases the compilation is about 30% faster. I had a chat with Stefan Glienke, and he confirmed seeing similar numbers. 

There is a caveat, though. The original request was to speed up the Win64 compiler, and that hasn’t actually seen a significant gain in this cycle, I only see a 10% improvement in that case. That clearly means we still have a lot of room for improvement, and need to keep focusing on the compiler performance (but without forgetting code generation quality and performance of the compiled code, of course).

In any case, 10.1 Berlin represents a good step in the right direction in terms of compilation of Delphi code with generics and I hope this is appreciated.

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #42

Mon, 05/23/2016 - 03:29

This is a new installment of my occasional (mostly monthly) collection of relevant Delphi links.

Embarcadero News

Company focus is summarized in this video, "Inspire. Develop. Excel.": http://community.embarcadero.com/article/news/16231-inspire-develop-excel

As you have seen also in this blog, we have officially lunched a new product, RAD Server, a new offer of existing enterprise level technologies (EMS, BeadonFencing, IotT remoting, etc). Read more at https://www.embarcadero.com/products/rad-server. Notice that the complete evaluation software is already included in RAD Studio 10.1 Berlin at the Enterprise level, along with the all of the specific development tools. You can also read http://community.embarcadero.com/article/news/16233-embarcadero-unveils-rad-server-for-c-builder-and-delphi-service-based-application-back-ends

If you missed RAD Studio 10.1 Berlin launch webinar, the replay in on YouTube at https://www.youtube.com/watch?v=1CHPXbUeSJ8

​Technical Blog Posts

A summary of RAD Studio 10.1 Berlin FireUI Live Preview articles, videos, apps and docs by David I at http://community.embarcadero.com/blogs?view=entry&id=8495

InterBase Array Fields and FireDAC, by Stephen at https://delphiaball.co.uk/2016/04/29/interbase-array-fields-firedac/

Comparison of Database access frameworks in Delphi (in which FireDAC has a big role) at https://ultimatedelphi.wordpress.com/2016/04/14/database-connectivity-frameworks-in-delphi/

A Delphi Guy Walks Into Google, by Allen Bauer at http://blog.therealoracleatdelphi.com/2016/05/random-stuff-about-working-at-google-or.html

A Delphi mobile app used to track Bolzano city elections, at http://www.andreamagni.eu/wp/2016/05/viktor-a-delphi-mobile-app-used-in-bolzano-during-elections-of-mayor-and-city-council/

The new TBufferedFileStream class: https://delphiaball.co.uk/2016/04/29/faster-filestream-tbufferedfilestream/

Third-Party Related News

Using Advantage Database Server with 10.1 Berlin by Joachim at https://www.jd-engineering.de/using-ads-with-delphi-10-1-berlin/

Interesting project by Daniele to support Google's FireBase in Delphi at https://github.com/spinettaro/Firebase4Delphi 

And Finally...

Verity Stob has a new column about the Sons of Kahn, covering last 6 months of news around RAD Studio. And punctuation. And misspelled Wookeys. See http://www.theregister.co.uk/2016/05/20/verity_sons_of_khan_witch_of_wookey/

And, finally, don't miss this months offers: Upgrade from very old versions of RAD Studio and free mobile pack if you buy Delphi or C++Builder Professional! See https://www.embarcadero.com/radoffer

Categories: News, Blogs, and Tips

RAD Server Launched, Webinar on Thursday

Wed, 05/18/2016 - 00:52

Last week my team at Embarcadero has launched a new product, RAD Server, which combines several Enterprise-grade technologies in a single, much cheaper offering. RAD Server, in fact, combines the REST API hosting offered by EMS, with IoT integration (ThingPoint) and the proximity awareness offered by BeaconFence.

The idea behind RAD Server is to make the development of REST APIs and other related services extremely simple, much like Delphi and RAD Studio do for the client side. Having a ready-to-use, turn-key solution which can scale at a very low price, can be a nice and effective way for developers to implement a modern, REST-based, multi-tier solution for both mobile and desktop applications.

Here are some relevant links about the launch and some further reading about the technologies included in RAD Server:

- The official press release can be found on the community site: http://community.embarcadero.com/article/news/16233-embarcadero-unveils-rad-server-for-c-builder-and-delphi-service-based-application-back-ends

- The new product page is at https://www.embarcadero.com/products/rad-server

- The launch webinar, next Thursday (May 19th), "Introducing RAD Server - Walk Through an example Real World Scenario in Creating a Modern Retail Customer Experience Solution" (where I'll have a small part) -- register at https://attendee.gotowebinar.com/rt/8032550740830239489 

The technology behind RAD Server is very powerful, and we'll have more information about it soon, in terms of blog posts and webinars, but you can already read the core features of the REST API hosting solution in this EMS white paper by Cary Jensen: http://forms.embarcadero.com/EMSMiddlewareWP. While the current version has several extensions, the core concepts apply.

 

 

 

Categories: News, Blogs, and Tips

Ribbon Controls in RAD Studio 10.1 Berlin

Mon, 05/09/2016 - 04:28

A few Delphi and C++Builder developers who moved to 10.1 Berlin are wondering what happened to the VCL Ribbon controls and how to get them. Here is the full story.

A Tale of the Fluent UI (or Office UI)

Let me start from the beginning, while trying to keep the story short. The Ribbon VCL controls offer an implementation, natively done in the VCL with no external dependencies, of Microsoft Fluent UI (also know as Office UI). Given Microsoft has a patent on this UI (debatable, I know) using the controls required to accept a license from Microsoft, originally available at https://msdn.microsoft.com/en-us/office/aa973809.aspx. In the past RAD Studio installation alerted that accepting that license was required for legally using the controls.

Later on, Microsoft built an actual SDK (in Windows 7 and above, also back ported to Vista) to support building applications with the Fluent UI. So far so good. Afterwards, they retired the original license. Any developer who had already accepted Microsoft Fluent UI license can still build a clone UI, but developers cannot obtain that license any more. You can see this reported, among others, in Wikipedia at https://en.wikipedia.org/wiki/Ribbon_(computing):

The Microsoft Ribbon Licensing Page has been retired, therefore it is no longer possible to license the ribbon control from Microsoft.

This is why we had to pull the Ribbon VCL controls from the core RAD Studio product, as we have no way to grant all customers a license or indicate how to obtain one. This doesn't mean we are removing the controls completely. While we don't expect to have the Ribbon VCL controls as part of the product and covered by support, we are in the process of making the Ribbon controls available in the GetIt Package Manager, for any developer who has a valid license with Microsoft (something you have to determine yourself, of course). This was supposed soon after the 10.1 Berlin release, should be coming shortly.

Ribbon Future Options for RAD Studio Developers

Overall, though, this change of direction from Microsoft (which actually happens a few years back), requires rethinking the use of these controls. I'd offer 3 alternatives:

  • If you have a license and want maximum compatibility with existing code, you can keep using the existing Ribbon controls. Shortly we'll make the official package available on GetIt. We are also assessing how to keep fixing bugs and updating this library over time. This might involve the community.
  • You can switch to using an implementation of the Ribbon SDK from Microsoft. One set of VCL controls wrapping that implementation and called Ribbon Framework is available in the https://github.com/TurboPack/RibbonFramework library and it is already hosted in GetIt (and was hosted also for 10 Seattle). This has no legal limitations, and the team might also need help to keep this project moving. And thanks to Joachim Marder and the team behind these controls
  • You can consider moving away from the Ribbon UI. But this is more of a UI discussion I don't really want to focus on in this blog post.

As it should be clear from reading this blog post, it was never our intention to stop supporting the VCL Ribbon controls, but we don't have a way to do this legally for all of our customers. I know other component vendors have different interpretations of the legal status, but we did check with several sources (including directly with Microsoft) and we are convinced that there isn't another option. Once the VCL Ribbon controls will be made available in GetIt, consult with your legal counsel about using them.

Categories: News, Blogs, and Tips

RAD Studio Quality Update After 10.1 Berlin

Mon, 05/02/2016 - 06:38

The release of RAD Studio 10.1 Berlin marks another step towards improving the overall product quality and the company process of managing customer reported issues.

Issues Fixed in Berlin

Let me focus on 10.1 Berlin first. As we stated publicly (see slide below), in this release the team fixed 744 customer reported issues. The total number of internal issues fixed is more than 2,500 (which includes those 744), as most issues are reported internally.

This is 30% to 50% higher than recent releases, as Malcolm pointed out in his blog. Notice that these 744 are either bugs fixed or that don't reproduce, likely due to some other fix. The count doesn't include duplicates (issues reported by more than one person) or reports we decided not to fix because they are as expected, considered documentation issues, or other cases. With those, the overall number would be over a thousand.

April Hot-fixes to the Rescue

Despite the effort for fixing bugs, some new issues slipped in the release. In particular there were a couple of rather significant regressions for which we have already released two hot fixes:

Bugs Status and Quality Portal

Having said this, it is worth trying to make some assessment about the status of bugs, and particularly publicly reported bugs and feature requests. While not everything has been synchronized between the internal and the public system, most of the information should be updated now. Looking to Quality Portal issues reported as bugs, there are 4,595 entries of which 67% are either closed or resolved. This is good progress. Feature requests are mostly open, as they started coming in a few months back, when plans for 10.1 Berlin had already been done.

Given the project page for RAD Studio on the Quality Portal hasn't got a real picture of the quality status, I've been creating an alternative page, currently at https://quality.embarcadero.com/secure/Dashboard.jspa?selectPageId=13100 (viewing the page requires you to login to the system). A snapshot of the current status is below. The plan is to add similar widgets to the main project page.

Categories: News, Blogs, and Tips

RAD Studio 10.1 Berlin Launch Webinar Replay

Wed, 04/27/2016 - 09:45

The replay of last week launch webinar of RAD Studio, Delphi and C++Builder 10.1 Berlin by RAD Product Managers (myself included) is available on YouTube.

Some information about the webinar replay is also at http://community.embarcadero.com/blogs/entry/webinar-replay-introducing-rad-studio-delphi-and-c-builder-10-1-berlin

The YouTube video is available at https://www.youtube.com/watch?v=1CHPXbUeSJ8 

Categories: News, Blogs, and Tips

Some RAD Studio 10.1 Berlin Blogs and Videos

Wed, 04/27/2016 - 08:08

Here is a first batch of blogs posts and videos about RAD Studio 10.1 Berlin. More are coming, including an in-depth webinar next week.

10.1 Berlin New Installer and IDE

Great Installation Experience with new RAD Studio 10.1 Berlin at http://community.embarcadero.com/blogs/entry/great-installation-experience-with-new-rad-studio-10-1-berlin and follow the video at https://www.youtube.com/watch?v=4zt1TnYttds

Where is the ActiveX Project Type for Delphi 10.1 Berlin? at http://delphi.org/2016/04/where-is-the-activex-project-type-for-delphi-10-1-berlin/

Using the Floating Form Designer in Delphi at https://delphiaball.co.uk/2016/04/19/delphi-floating-form-designer/

New in FireMonkey for 10.1 Berlin

Customizing the style for a user interface control in RAD Studio 10.1 Berlin at http://community.embarcadero.com/write-blog-post/entry/customizing-the-style-for-a-specific-component

Introducing FireUI App Preview in RAD Studio 10.1 Berlin at http://community.embarcadero.com/write-blog-post/entry/rad-studio-fireui-app-preview-berlin. Also how to add components to the preview is explained at http://steema.com/wp/blog/2016/04/19/rad-studio-10-1-berlin-add-teechart-to-fireui-live-preview/. And a video on FireUI Mobile Previews offering a live preview at a glance at https://www.youtube.com/watch?v=D-CnrFdKM5M and also how to configure at https://www.youtube.com/watch?v=XEVMgCgWRLw

Accessing the Address Book on iOS and Android at https://delphiaball.co.uk/2016/04/22/accessing-address-book-ios-android-taddressbook/ and also at http://community.embarcadero.com/blogs/entry/using-the-new-taddressbook-component-on-ios-and-android-in-rad-studio-10-1-berlin and in a video at https://www.youtube.com/watch?v=UIgCg2qG3kc

What’s New Roundup For FireMonkey In #Delphi 10.1 Berlin On Android, Windows, OSX, And IOS at http://www.fmxexpress.com/whats-new-roundup-for-firemonkey-in-delphi-10-1-berlin-on-android-windows-osx-and-ios/

TListView design mode covered in a video at https://www.youtube.com/watch?v=vaQ-OtbAEh0

IoT and the coming RAD Server...

New IoT components videos at https://www.youtube.com/watch?v=lh8B6aIcO-Q and https://www.youtube.com/watch?v=tQlYAlvfpPQ. And the blog post at http://community.embarcadero.com/blogs/entry/try-to-use-iot-component-ti-sensortag-1-0-with-device-on-10-1-berlin

Swagger documentation for REST APIs at https://delphiaball.co.uk/2016/04/22/swagger-yaml-delphi

10.1 In-Depth Webinar Coming

Tune if for next week webinar: Fire up your business and users with RAD Studio 10.1 Berlin's “Enterprise Strong” Desktop, Mobile, Database, Server, Cloud and IoT Solutions. See http://community.embarcadero.com/all-events/viewevent/661-webinar-fire-up-your-business-and-users-with-rad-studio-10-1-berlin-s-enterprise-strong-desktop-mobile-database-server-cloud-and-iot-solutions

And stay tuned for more information about the 10.1 Berlin version Delphi, C++Builder and RAD Studio.

Categories: News, Blogs, and Tips

RAD Studio 10.1 Berlin Released Tuesday

Thu, 04/21/2016 - 02:41

As you probably know by now, Embarcadero has released Delphi, C++Builder and RAD Studio 10.1 Berlin on Tuesday, at a live event in the German capital city.

The Event in Berlin

This is a picture I took at the very start of the public event.

And this is a picture Matthias took of myself while presenting:

There was also a partners event, in which I gave more of a sales oriented overview. Some partners are always amused about how much I gesticulate, but I'm Italian, what can I do about it (Thanks, Richard)

And in the evening we did a joint launch session, in which we showed a comparison of the old and new installer, IoT components installation, FireUI App Preview on device, Beacon Fencing in action, and a Bluetooth controlled model car.

Remarkably, I was able to do all of these sessions even after my Mac decided to stop booting (SDD at fault). Thanks again to Matthias and Daniel for borrowing me their Macs -- and good I had all of my VMs in an external drive with me. 

The 10.1 Berlin Product Release

Here is some initial information and a number of relevant links, more will follow in the coming days from the entire team at Embarcadero. I'll probably blog about language features and other technical elements of the release.

The Embarcadero web site has been updated with information about the release, and you can find the more technical details in the feature matrix, or in the What's New page of the docwiki. There is also a press release on BusinessWire. There is also a detailed announcement by David I in the Embarcadero community site.

The Launch Webinar, Today

There has been a flurry of blogs and videos about the new features of the product, I'll offer a overview in a future blog post. For now, make sure you attend one of the sessions of todays's webinar (3 PM Central Europe, 11 AM Pacific, tomorrow morning in Asia) where I'll be online with the other PM answering your questions after the session.

PS: Did I mention there is a 10% introductory discount over the next 30 days? For both new licenses and updates

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #41

Mon, 04/18/2016 - 04:50

Another couple of weeks since my last posts collection, here is some references to interesting links -- waiting for tomorrow event in Berlin

The unexpected blog post of the month goes to The Delphi Open Tools API Book at http://www.davidghoyle.co.uk/WordPress/?page_id=1110 (very interesting, although I had very ltitle time to look into the actual content).

Technical Blog Posts

The hirearchical tree (by we should probably say graph) of all FireMonkey objects, at http://community.embarcadero.com/blogs/entry/inheritancetree-fmx-r101 from one of the developers

Database Application Tools for FireDAC that ship with our products by David I at http://community.embarcadero.com/blogs/entry/database-application-tools-for-firedac-that-ship-with-our-products-check-them-out

Using C++11 Lambda functions with the C++Builder Parallel Programming Library also by David I at http://community.embarcadero.com/write-blog-post/entry/using-c-11-lambda-functions-with-the-c-builder-parallel-programming-library

Interfacing A IoT Water Leak Sensor Via Bluetooth With Firemonkey In Delphi 10 Seattle On Android (article by FMX Express) at http://www.fmxexpress.com/interfacing-a-iot-water-leak-sensor-via-bluetooth-with-firemonkey-in-delphi-10-seattle-on-android/

Third Party Tools

Visual Arduino programming for kids and professionals using Visuino by Mitov Software - powered by Embarcadero Delphi (and summarized by David I ) at http://community.embarcadero.com/blogs/entry/visual-arduino-programming-for-kids-and-professionals-using-visuino-by-mitov-software-powered-by-embarcadero-delphi

Upgraded SVG Component Library For Firemonkey In Delphi 10 Seattle On Android And IOS (article by FMX Express) at http://www.fmxexpress.com/upgraded-svg-component-library-for-firemonkey-in-delphi-10-seattle-on-android-and-ios/

A tutorial "On Data Files and Configuration in Delphi Programs" (by Warren Postma) at http://delphicodemonkey.blogspot.fr/2016/04/on-data-files-and-configuration-in.html

Other Blogs Posts

Getting ready for Linux, just in case (by Warren Postma)... http://delphicodemonkey.blogspot.fr/2016/04/linux-essentials-for-delphi-developers.html

Google, Chrome and Delphi by Allen Bauer at http://blog.therealoracleatdelphi.com/2016/04/google-chrome-and-delphi.html

Conclusion

Again, stay tuned to tomorrow event (on social media like Twitter if you cannot be there) and the webinar on Thursday.

Categories: News, Blogs, and Tips

New highlights of RAD Studio webinar and the Berlin event

Fri, 04/08/2016 - 03:23

On April 21st, Embarcadero is running a webinar offering an overview of the latest release of the development tools products and their directions. I'll be hosting it with Sarina DuPont: "RAD Studio Product Managers Marco Cantu' and Sarina Dupont will cover the overall product directions and provide details about today's product and its future".

The webinar will be repeated 3 times during the day, for different time zones, covering Delphi, C++Builder, and RAD Studio. You can sign up at https://attendee.gotowebinar.com/rt/8114586402052971010.

Two days before, on April 19th, there will be a public event with the same focus in Berlin, Germany. I'll be in Berlin to give a keynote session at the event, followed by in-depth technical sessions in German language. The program is available at https://de.xing-events.com/RAD-Studio-Berlin.html. If you live in the area, you're more than welcome, and I'll be available for the entire day to discuss anything Delphi or RAD Studio related (and don't miss the evening part of the event).

There are great new features coming to the product, so don't miss these opportunities to learn about them. Of course, you can buy RAD Studio or Delphi or C++Builder today (check out our great offers) with update subscription, to get your hands on the product today (if you are not already on 10 Seattle) and receive new releases in the future.

Categories: News, Blogs, and Tips

Embarcadero Cool App Contest

Tue, 04/05/2016 - 01:19

Embarcadero has started a contest for "cool apps" with monthly winners. you can read all of the information at:

http://community.embarcadero.com/article/news/16221-join-our-club-of-elite-embarcadero-developers-show-us-your-cool-apps

There are submission rules, you basically have to submit a short video of the app, and you can use any technology (mobile, desktop, multitier, anything).  Submit your cool apps to share the fame as an elite Embarcadero developer.

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #40

Wed, 03/23/2016 - 07:16

Another collection of links to blogs posts, news, and other tidbits of interest to Delphi and RAD Studio developers.

Official Embarcadero Updates

The company has a new web site at https://www.embarcadero.com/ exclusively focused on development tools. Database management tools have been moved to the parent company web site, http://www.idera.com. This is part of Embarcadero new Dedicated Developer Strategy.

New Webinar on Updating from Delphi 2007 to Delphi 10 Seattle, tomorrow, by Jim McKeeth at http://community.embarcadero.com/blogs/entry/webinar-from-delphi-2007-to-10-seattle-easy

​Top 10 Ways to Monetize on Windows 10 at http://community.embarcadero.com/article/technical-articles/16216-top-ten-ways-to-monetize-windows-10-with-rad-studio

If you live in Germany, you might be interested in this special event April 19th in Berlin, https://www.amiando.com/RAD-Studio-Berlin.html 

Technical Blog Posts

Meet the new Embarcadero MVPs by Jim at http://delphi.org/2016/03/meet-the-new-embarcadero-mvps/

White paper on new JSON features in 10 Seattle, by Pawel at http://community.embarcadero.com/blogs/entry/new-json-features-in-rad-studio-10-seattle-whitepaper

​Nick got back to periodic summaries at http://www.codingindelphi.com/blog/flotsam-and-jetsam-112/

What's your favorite Delphi Demo by Jim at http://delphi.org/2016/03/what-is-your-favorite-delphi-demo/

Expand your toolkit with GetIt at https://ultimatedelphi.wordpress.com/2016/03/06/expand-your-development-tool-kit-with-getit/

Windows 10 Components in 10 Seattle by Jordi at http://thundaxsoftware.blogspot.it/2016/03/testing-new-windows-10-components-of.html

Not strictly Delphi, but very interesting post, "The Definitive Guide on Win32 to NT Path Conversion", by Google at http://googleprojectzero.blogspot.it/2016/02/the-definitive-guide-on-win32-to-nt.html

More Tidbits and Third Parties

A new Delphi REST library at http://www.andreamagni.eu/wp/2016/03/introducing-mars-curiosity-a-new-delphi-rest-library/

DataSnap filters compendium by Daniele at http://www.danieleteti.it/datasnap-filters-compendium-updated-to-delphi-10-seattle/

Pascal Analyzer, http://www.peganza.com/products.html#PAL

That's all for this week.

Categories: News, Blogs, and Tips

Considerations on StackOverflow 2016 Developer Survey

Mon, 03/21/2016 - 03:46

The popular StackOverflow site has released the results of their developers survey. which includes some interesting information -even if it skewed towards web developers. You can read the complete results at  http://stackoverflow.com/research/developer-survey-2016.

In this blog post I want to share some considerations about the data, well-aware that the self-selected audience is very much geared towards web development or (to be more precise) full-stack developers (30%) while only 7% claim to be "desktop developers" -- which is RAD Studio core audience.

The most popular language is JavaScript, which is not surprising given the focus, although it is also the most popular back-end development technology, way ahead of Java and PHP. The developers age and their experience is also a bit different than those in our surveys, and varies quite a bit by country. Roughly 50% of the developers who answered (or, maybe, who had time to answer) have less than 5 years experience as developers and in their 20ies; also a large percentage (45% has a site reputation below 100). This is more of a reflection of the StackOverflow users than of the developers at large. My impression is older developers favor different online communities, if any, but this is really a side issue.

Looking into the actual data, with JavaScript leading and JavaScript libraries on client and server side (Angular.js, Node.js) on the rise, it was nice to see that while Delphi was not listed as an option, it was the most typed entry in the "others" category, with over 650 respondents typing the tool name: 

A trend I've seen discussed online is the fact that developers using OS X are growing over those using Linux, a result probably influenced by the fact taht a Mac is needed for iOS development. Windows remains by far the OS most used by developers (around 50%). A fun fact is that VisualBasic also wins a catecory, that for the most dreaded technology. One think I wasn't too happy to read is that the most popular development environment is... Notepad++, but clearly given the web developer audience editors have a more higher role than IDEs. Delphi gets a "write in" mention also in this category.

Finally, I could not avoid noticing the age distribution of the Star Trek fans vs. the Star Wars fans. I would probably have been interesting to correlate age also with developer technologies, but this is what we have:

 

Categories: News, Blogs, and Tips