Marco Cantu

Syndicate content
Techie Italian Blogging on Delphi and More
Updated: 54 min 14 sec ago

Delphi 10.2 has been Released Today

Wed, 03/22/2017 - 08:27

Today Embarcadero has released Delphi, C++Builder and RAD Studio 10.2, also known as Tokyo.  The new version of the product includes our new Delphi 64-bit compiler for Linux, and much more.

Given a lot of the content of the release has already been discussed, I'm not going to add much, only a few links:

What's New in RAD Studio 10.2: https://www.embarcadero.com/products/rad-studio/whats-new-in-10-2-tokyo

Blog announcement: https://delphiaball.co.uk/2017/03/22/rad-studio-10-2-available-today-linux-delphi/

The DocWiki main page: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/What%27s_New

List of customer reported issues fixed (over 500): http://edn.embarcadero.com/article/44747

Delphi Linux Server support video: https://youtu.be/2wiD3F-nGZ8

​The Feature Matrix: https://www.embarcadero.com/docs/rad-studio-feature-matrix.pdf

Official launch webinar with PM next Monday: https://community.embarcadero.com/blogs/entry/launch-webinar-10-2-tokyo

I'll write again covering Delphi 10.2 in more details, for now let me say:

"Delphi for Linux is now available, Delphi is getting more traction, Delphi is back!"

 

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #51

Wed, 03/22/2017 - 02:03

It has been quite some time from the last installment, and there is a lot to cover -- although I did blog about a summary of the coming Delphi for Linux related news separately.

Embarcadero News

The company has released a new version of InterBase, read more at https://delphiaball.co.uk/2017/03/09/interbase-2017-now-available/

Nick explains he is moving to a new role inside the company (and also covering his new book, see also below) at https://community.embarcadero.com/blogs/entry/flotsam-and-jetsam-118

Delphi DNA infographic at https://community.embarcadero.com/blogs/entry/delphi-s-dna-infographic

Tokyo Beside Linux

While the focus of the coming release is Delphi Linux support, there is more to it. Here are some anticipations:

Previewing RAD Server Multi-Tenancy Support in 10.2 by Sarina at https://community.embarcadero.com/blogs/entry/previewing-rad-server-multi-tenancy-support-in-10-2

What's New in C++Builder 10.2: Part 1 - The Linker by David at https://community.embarcadero.com/blogs/entry/what-s-new-in-c-builder-10-2-part-1-the-linker

Previewing FireMonkey Features in RAD Studio 10.2 by Sarina at https://community.embarcadero.com/blogs/entry/fmx-features-preview-10-2

​RAD Studio 10.2 Tokyo & MariaDB by Fernando (in Portoguese) at https://community.embarcadero.com/blogs/entry/rad-studio-10-2-tokyo-mariadb-1

​Delphi 10.2 Tokyo Beta Blogging: Editing data in TFDMemTable during design-time by Holger at https://flixengineering.com/archives/398

UI Changes in the IDE's View menu by David at https://community.embarcadero.com/blogs/entry/ui-changes-in-the-ide-s-the-view-menu

Books

Always great to have new Delphi books, even more if the author is Nick: https://plus.google.com/u/0/+NickHodges/posts/HW6Bbx3j7g7?cfem=1

More Technical Blog Posts

Delphi/Object Pascal at #9 in Tiobe March 2017 index - Swift enters top 10 by DavidI at https://community.embarcadero.com/index.php?option=com_easyblog&view=entry&id=10531&Itemid=191. The actual Tiobe Index information is at https://www.tiobe.com/tiobe-index/ and there you can see Delphi/Object Pascal got one notch up to the 9th position. Even if I don't think this is a real representation of use of programing languages, relative growth -- within the sane index -- is certainly a positive sign.

TListView OwnerDraw compat with Windows UI & VCL Styles by Rodrigo at https://theroadtodelphi.com/2017/03/09/tlistview-ownerdraw-compat-with-windows-ui-vcl-styles/

Generics, modules and typeinfo by Stefan at http://delphisorcery.blogspot.it/2017/02/generics-modules-and-typeinfo.html

The Old Vic by Steffen at http://fixedbycode.blogspot.it/2017/03/the-old-vic.html

Embed Facebook SDK for Android in your Delphi mobile app (Part 2) by Allen at https://blog.grijjy.com/2017/01/30/embed-facebook-sdk-for-android-in-your-delphi-mobile-app-part-2/

Quickly Auto Generate iOS, OSX, And Android Headers For Delphi And C++Builder by Eli at https://community.embarcadero.com/blogs/entry/quickly-auto-generate-ios-osx-and-android-headers-for-delphi-and-c-builder -- This is extremely important for calling more native APIs than we expose or use other native third party libraries on different platforms

Perform Low Code Calculations Using LiveBindings In Delphi FireMonkey On Android And IOS by Eli at https://community.embarcadero.com/blogs/entry/perform-low-code-calculations-using-livebindings-in-delphi-firemonkey-on-android-and-ios

Official quartic equation using Delphi Firemonkey by Haruyuki at https://community.embarcadero.com/blogs/entry/official-quartic-equation-using-delphi-firemonkey

Libraries and Third Party

Redux Delphi at https://github.com/pierrejean-coudert/ReduxDelphi

​My Future plans for GExperts by Thomas at https://blog.dummzeuch.de/2017/03/19/my-future-plans-for-gexperts/

Conclusion

That's a lot of links for sure, but all of them are worth reading and looking to. I know, I need to keep this more frequent, but busy getting Delphi 10.2 out of the door. Stay tuned.

Categories: News, Blogs, and Tips

Delphi for Linux is Coming

Fri, 03/17/2017 - 10:49
Does Linux Matter?

I'm personally going to switch my current server from Windows to Linux, and save quite some money in the process, but this is what other developers told us: https://community.embarcadero.com/blogs/entry/why-is-delphi-for-linux-important

Getting Ready

In case you want to get back to Linux and get ready, here are a few resources:

Free O'Reilly Linux Survival book: http://www.oreilly.com/programming/free/ten-steps-to-linux-survival.csp

Installing and configuring Ubuntu for Delphi development (by Pawel):

https://community.embarcadero.com/blogs/entry/installing-ubuntu-16-04-on-vmware-for-delphi-dev

https://community.embarcadero.com/blogs/entry/preparing-ubuntu-16-04-lts-for-linux-development-with-upcoming-delphi-10-2-part-2

Technical Details

I've done three blog posts with technical information about Delphi Linux compiler, RTL, database access, and web technologies:

http://blog.marcocantu.com/blog/2017-february-delphi-linux-compiler.html

http://blog.marcocantu.com/blog/2017-march-delphi-linux-rtl-units.html

http://blog.marcocantu.com/blog/2017-march-delphi-linux-database-web.html

More information can be found watching the Linux Boot Camp replay:

https://community.embarcadero.com/article/16483-delphi-for-linux-boot-camp-replay

A Great Video

And finally Jim created a great "Get ready" video, available on YouTube and below:

 

 

 

Categories: News, Blogs, and Tips

Delphi for Linux Database and Web Development

Fri, 03/10/2017 - 09:42

Following my blog post on the compiler and the one on the RTL, this third post covers the focus of our Linux solution, building database web applications and web services. This blog post covers the feature we are expecting to release for the coming Delphi version including support for the server-side applications on the Linux platform

Database Access via FireDAC

Given Delphi's database access support has been a key tenet of the product since day one, the fact that the core database RTL is fully supported and available on Linux should not be surprising. TDataSet, the TFields hierarchy, and all of the remaining core DB technologies will be available.

In terms of actual database access, it will be provided by the FireDAC framework, available along with most of the database drivers we ship on Windows. There will be a few exceptions, including Windows-specific databases like Microsoft Access. Our support will start with MySQL -- almost the standard on Linux -- but include also Interbase, FireBird, ProgressSQL, and many others. Enterprise-grade databases like Oracle and Microsoft SQL Server will also be covered.

The solution is going to include also local tables access via FDMemTable and mapping of database data to XML and JSON, something often handy when building web services and web solutions.

The Web Technologies

The focus of the Delphi support for Linux is in building server side applications, which mostly ends up being HTTP-based solutions -- although via Indy we support also the development of non-HTTP Internet servers. All of the web technologies in active development on Windows will come to Linux, including:

1. WebBroker core foundations, with the direct support for building stand-alone console apps and Apache modules. All of the core elements of WebBroker -- mapping of request and response, actions, etc -- are going to be supported, along with some of the old-school HTML producer components

2. DataSnap servers, again deployed via Apache WebBroker or standalone. You should be able to migrate recent DataSnap servers to Linux.

3. The development of EMS modules for RAD Server, our newest REST service development technology. In fact, RAD Server itself is going to support Windows and Linux deployment.

Apache Demo and Conclusion

This is overall what we are expecting to deliver, but some details are still in flux, so don't take anything from this blog post as a promise. To conclude, I wanted to share this screenshot of a running Apache module, its source code, and its configuration -- detailed images added below.

In this image you can see on the left -- or the first detailed image -- the source code of the WebBroker Apache project file (generated by the wizard) and the module with a very simple action returning a string, on the right -- or the second detailed image -- above the configuration for Apache on Linux, with the module loading lines and the configuration (mapping the handler to a path), while below it you can see a browser running on Windows and pointing to the given URL. End result is you can see the simple one line of HTML text in Chrome.

While the actual result of this project -- one line of HTML -- is not terribly thrilling, the ability of creating Linux Apache modules with Delphi certainly is. Looking forward to deploy my server side code on Linux.

PS. I know that is not even legal HTML, but keeping the code as simple as possible was the goal here. I'll soon show you some real dynamic web pages deployed on Linux via Delphi. Stay tuned.

Categories: News, Blogs, and Tips

Delphi for Linux RTL units

Thu, 03/02/2017 - 10:57

I want to follow up my blog post covering the Delphi Linux compiler with a second one focused on the RTL units that are going to be available in Delphi for the Linux platform.

The System Name Space

These are the units part of the System name space that are available for the Linux platform (in alphabetic order):

SysInit.pas

System.Bindings.Consts.pas: this and following units have Live Bindings support

System.Bindings.CustomScope.pas

System.Bindings.CustomWrapper.pas

System.Bindings.EvalProtocol.pas

System.Bindings.EvalSys.pas

System.Bindings.Evaluator.pas

System.Bindings.Expression.pas

System.Bindings.ExpressionDefaults.pas

System.Bindings.Factories.pas

System.Bindings.Graph.pas

System.Bindings.Helper.pas

System.Bindings.Manager.pas

System.Bindings.ManagerDefaults.pas

System.Bindings.Methods.pas

System.Bindings.NotifierContracts.pas

System.Bindings.NotifierDefaults.pas

System.Bindings.ObjEval.pas

System.Bindings.Outputs.pas

System.Bindings.Search.pas

System.Bluetooth.Components.pas

System.Bluetooth.pas

System.Character.pas: this unit has Unicode support at the codepoint level

System.Classes.pas: basic classes for TComponent etc

System.ConvUtils.pas: convert units of measurement

System.DateUtils.pas: dates processing

System.pas: the core unit 

System.Diagnostics.pas

System.Generics.Collections.pas: as the name says, generic collections

System.Generics.Defaults.pas

System.Hash.pas: hashing support has been extended with file hashing

System.HelpIntfs.pas

System.IniFiles.pas: these clone the Windows INI files

System.Internal.DebugUtils.pas

System.Internal.ExcUtils.pas

System.Internal.JSONHlpr.pas

System.Internal.StrHlpr.pas

System.Internal.VarHlpr.pas

System.IOUtils.pas: support for modern file system access (input/output utilities)

System.JSON.BSON.pas: this and the following units have JSON and BSON streaming support

System.JSON.Builders.pas

System.JSON.Converters.pas

System.JSON.pas

System.JSON.Readers.pas

System.JSON.Serializers.pas

System.JSON.Types.pas

System.JSON.Utils.pas

System.JSON.Writers.pas

System.JSONConsts.pas

System.Linux.Bluetooth.pas

System.Masks.pas

System.MaskUtils.pas

System.Math.pas: Core mathematical functions

System.Math.Vectors.pas

System.Messaging.pas

System.Net.FileClient.pas: the "Net" units implement the HTTP client library

System.Net.HttpClient.pas

System.Net.HttpClient.Linux.pas

System.Net.HttpClientComponent.pas

System.Net.Mime.pas

System.Net.Socket.pas

System.Net.URLClient.pas

System.NetConsts.pas

System.NetEncoding.pas

System.RegularExpressions.pas: these units have RegEx support

System.RegularExpressionsAPI.pas

System.RegularExpressionsConsts.pas

System.RegularExpressionsCore.pas

System.RTLConsts.pas

System.Rtti.pas: Core RTTI access unit, or reflection support

System.Sqlite.pas

System.StartUpCopy.pas

System.StdConvs.pas

System.StrUtils.pas: core string processing utilities

System.SyncObjs.pas: threads synchronization

System.SysConst.pas

System.SysUtils.pas: the most classic system utilities

System.Tether.AppProfile.pas: AppTethering support

System.Tether.Comm.pas

System.Tether.Consts.pas

System.Tether.Manager.pas

System.Tether.NetworkAdapter.pas

System.Tether.TCPProtocol.pas

System.Threading.pas: this unit defines the Parallel Programming Library (or PPL)

System.TimeSpan.pas

System.Types.pas

System.TypInfo.pas: the more traditional RTTI access

System.UIConsts.pas

System.UITypes.pas

System.VarCmplx.pas: these units offer limited variants support

System.VarConv.pas

System.Variants.pas

System.VarUtils.pas

System.Zip.pas: compression support

System.ZLib.pas

System.ZLibConst.pas

Other Name Spaces

There are other RTL name spaces, though:

- XML support via native OmniXML

- SOAP support

- REST client library support

Linux and Posix APIs

The LinuxAPI name space with units for kernel definitions and Curl, plus dozens of units implementing the Posix API:

Posix.ArpaInet.pas

Posix.Base.pas

Posix.Dirent.pas

Posix.Dlfcn.pas

Posix.Errno.pas

Posix.Fcntl.pas

Posix.Fnmatch.pas

Posix.Grp.pas

Posix.Iconv.pas

Posix.Langinfo.pas

Posix.Limits.pas

Posix.Locale.pas

Posix.NetDB.pas

Posix.NetIf.pas

Posix.NetinetIcmp6.pas

Posix.NetinetIn.pas

Posix.NetinetIp6.pas

Posix.NetinetTCP.pas

Posix.NetinetUDP.pas

Posix.Pthread.pas

Posix.Pwd.pas

Posix.Sched.pas

Posix.Semaphore.pas

Posix.Signal.pas

Posix.StdDef.pas

Posix.Stdio.pas

Posix.Stdlib.pas

Posix.String_.pas

Posix.StrOpts.pas

Posix.SysMman.pas

Posix.SysSelect.pas

Posix.SysSocket.pas

Posix.SysStat.pas

Posix.SysStatvfs.pas

Posix.SysSysctl.pas

Posix.SysTime.pas

Posix.SysTimes.pas

Posix.SysTypes.pas

Posix.SysUio.pas

Posix.SysUn.pas

Posix.SysWait.pas

Posix.Termios.pas

Posix.Time.pas

Posix.Unistd.pas

Posix.Utime.pas

Posix.Wchar.pas

Posix.Wctype.pas

Posix.Wordexp.pas

There is More Than RTL

This list does not include units outside of the core RTL. which include FireDAC, DataSnap, EMS, WebBroker, Indy, and DunitX.

The new version of Delphi is bringing to the Linux platform a lot of technology. True, there is no ready-to-use GUI support, but there is lot of keep developers happy.

 

 

 

 

 

Categories: News, Blogs, and Tips

Case Study Webinar Tomorrow about my Mini Figures Mobile App

Wed, 02/22/2017 - 09:23

Embarcadero has asked me to give a webinar covering my experience in building and publishing my Mini Figures Mobile App, which is actually available on 3 Stores (iOS Apple, Android Google, and Windows Desktop Microsoft).

The description says "available on mobile, using many Delphi and RAD Studio technologies" and this is only partially true. In any case, I'll cover some of the lessons I learned publishing store apps, I'll show some of the technologiues used in FireMonkey, but also on the server -- there is a figure trading function backed by a WebBroker application.

Sign up at https://attendee.gotowebinar.com/rt/5624342105136125443

If you are looking into publishing store apps, this should be interesting. But even if not, learning how an idea of my 11yo son, initially developed over a weekend, turned into an interesting revenue generator -- at least for him -- should be instructive. In short, we put the app on the store to simplify sharing with his friends and would not expect having a quarter million downloads!

For more info on the app, refer to its Facebook page at https://www.facebook.com/myminifigures/ or download it from:

Categories: News, Blogs, and Tips

Key Traits of the Coming Delphi For Linux Compiler

Fri, 02/17/2017 - 10:32

Embarcadero is about to release a new Delphi compiler for the Linux platform. Here are some of the key technical elements of this compiler, and the few differences compared to Delphi compilers for other platforms.

Linux Intel 64-bit

Before we get to language specific features, let me clarify once more the target platform, as Delphi for Linux is a bit vague. The compiler produces Intel 64-bit executables for Linux. This is a key difference, for example, compared to the old Kylix project compiler, that was 32-bit. The new compiler does not include Linux ARM platforms, which we are considering for the future.

Another related element is that the compiler is based on the LLVM compilers architecture, like all the most recent new Delphi compilers (iOS 32 bit, Android 32 bit, and iOS 64-bit). The advantage is that it will provide some significant optimization on the generated code. The disadvantage is that compiling and linking an application takes considerable more time than when using the Windows compilers.

In the rare case you need platform specific code and when calling platform APIs, you can use the {IFDEF LINUX64}.

Object Pascal Language Compatibility

Getting to the language specifics, the level of language compatibility is going to be very high. Almost all of the classic Pascal-based languages features, OOP features, RAD support capabilities, modern Pascal features (generics, anonymous methods, reflection, attributes) are going to work the same. Some beta testers have been able to port significantly complex libraries in a fairly smooth way.

What you might find a little more trouble in is porting some "older" code, like code that is not Unicode enabled or relies heavily on Windows-ism. Below are some of the specific differences. The only area that is not meant to be fully compatible is memory management, given the new compiler is based on Automatic Reference Counting, as explained later.

Core Data Types and LongWord Blues

I'm not going to list all of the core data types that remain the same, as the list is very long, but let's look at what's specific to this compiler. Being a 64-bit compiler, all pointers are going to be 64-bit, while Integer stay 32-bit -- this is the behavior of all other Delphi 64-bit compilers (and most other programming languages, BTW).

The only caveat is for the LongWord type. This is a data type often used when making operating system calls, so the decision that was taken some time ago was to keep it matching the underlying OS. So, for example, on iOS the same API declaration with LongWord compiles to a 32-bit or 64-bit data type depending on the compiler you are using. On Windows, however, Microsoft made a non-standard decision to keep LongWord the same size of an Integer. This implies the Windows 64-bit platforms works differently from the Linux 64-bit platform in regard of this data type. For reference, among other sources, see the long type in C language on different platforms at https://en.wikipedia.org/wiki/Integer_(computer_science)#Long_integer and the first answer at http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows.

You might have to revisit you code using LongWord and decide to keep that data type or use a different one (Integer, UInt32, NativeUInt...) depending on your goal. We have done and are still doing a significant revision of the RTL to make sure we are not misusing this type. In same cases, however, we are going to keep code that behaves differently depending on the platform, particularly when changing core RTL classes would cause a lot of legitimate Windows code working for 20 years not to compile any more.

Strings and Encodings

Since Delphi 2009 the Object Pascal language string type has defaulted to UTF-16 Unicode and 2-byte Char data type. Needless to say the Linux compiler follows the same path. Since 10.1 Berlin, all compilers (including the mobile ones) received full support for the UTF8String type and also (for direct low-level processing) the RawByteString type. The Linux compiler includes these data types, and in fact the UTF8String was added to mobile mostly because we anticipated it as a key requirement for Linux. A significant part of the HTTP-based traffic uses UTF-8 and supporting this representation as a native type -- beside supporting encoding to it -- was considered a requirement for the Linux project.

It is true, however, that some other string types like AnsiString are not supported. This is mostly a "Windows-centric" data type. If you are still using strings and PChar for managing generic data structures, it is really time to move to TBytes and PByte instead -- or enable pointer math for all data structures. Also the support for the old Pascal ShortString type is limited. Declaring a string [20] variable on Linux will fail. The other string type that is not supported is WideString. This is the old pre-Unicode non-reference counted UTF-16 type used for Windows COM platform integration. In fact, any COM-specific type and feature is missing on Linux, like on all other non-Windows Delphi platforms.

Notice that the TEncoding support is available, so you can read and write text files in any format you want. What you are not directly able to do is process an AnsiString in memory with the standard language support. But you can have an array of bytes (TBytes) representing text in any format in memory, and read and write it on disk, or receive and send via a socket connection, and you can use the TEncoding support for conversions.

Linux Defaults to 1-Based String Access

What about string access via the [] operator? As you might know, there is a compiler default you can change per-project, per-unit, or even per-code fragment that determines if the compiler treats the string access operator with a 1-based Pascal-classic notation or the 0-based notation most programming languages use. While mobile compilers default to 0-based, for Linux we decided to stick with the traditional Windows model, on the ground developers are mostly likely to migrate existing Windows server side code to Linux. The recommendation is to try to use clean, agnostic code, but if you prefer forcing a given string access model for all of your Delphi code, just use the $ZEROBASEDSTRINGS directive in your projects. Just as a reminder all RTL string functions and the newer string helper methods stays the same regardless of the platform and this setting. The first group uses a 1-based logic, the second a 0-based logic. Your pick.

Here Comes ARC

The other notable change from the Windows compiler is that on the Linux platform (as in any new platform) we have decided to use the Automatic Reference Counting (ARC) model for memory management. This is the model Delphi uses for all mobile compilers plus the iOS simulator one. The long term plan is to shift the entire Delphi ecosystem in that direction -- probably keeping the VCL world on the traditional memory model. This is the reason not-picking ARC for Linux would have been very confusing, as given you need testing when adopting a new platform this is the least disruptive moment for such a transition.

Feedback from beta testers has been fairly positive on this, and migration of existing code and libraries has not bumped into big hiccups. Now I don't have room in this blog post to revisit the best practices for ARC migration, but I'll try to have some more extensive material on this in the future.

Shameless plug: My Object Pascal Handbook (and particularly the Berlin revised edition) has some good material on this.

More Information? Delphi Linux BootCamp is Coming!

For more information, sign up to the boot camp (which is actually a one hour webinar) scheduled for March 1st in 3 times zones. For more information and to sign up see https://community.embarcadero.com/blogs/entry/delphi-linux-boot-camp

Categories: News, Blogs, and Tips

22 Years of Delphi and it Still Rocks

Tue, 02/14/2017 - 04:04

To celebrate another year of success for Delphi. I dug a bit in my archive. Here are a few old images, mostly ads from Borland, before and after the product release. You can find a higher resolution version of these images at https://goo.gl/photos/WeWa3wEL9xDYAp179. Here are smaller versions, with some comments.

It is interesting to notice how the original business value (increased productivity for developers) is still true today with a totally changed landscape, mobile, and all. We could re-use some of the original ads, as they make sense today. The other things I noticed is that most of the other tools that were popular back than, have long been forgotten. Delphi, on the other hand, is still popular.

The Original Product Box The Trio of the Thickest Delphi 1 Books

Mine, Charlie's and Pacheco/Teixeira where the 3 classic books covering Delphi in all of its angles, and became classic books, all with many editions for following versions. I guess I have them all...

Before Delphi, Was Turbo Pascal

Before Delphi came along, the language, its earlier (and different) OOP model and Windows integration were already there. But Delphi had a new object model in the language, the concept of components, and a new library, including strong database access, and it was a breaking change from previous Turbo Pascal products.

And Borland had a magazine, here you can see the editor:

Here Comes Delphi

Delphi RAD to ROI. We should use this more today!

Visual Basic done Right... The RADical performance... ready for Windows 95. Development got easier (with the family of Borland tools). Even if the product was a bit simpler (with the product matrix fitting a single page) it was powerful.

And magazines focused to it, for which I occasionally wrote articles.

Delphi Prizes

And Delphi won many prices, celebrated when Delphi 2 shipped. See the Jolt Award announcement ("Borland is back") and description:

Delphi 2 and Delphi 3

The easy of VB with the power of C++. On Time and on Budget. Power and performance. And some reviews.

 

Delphi and a Duck: an anticipation of things to come...

More "Recent" Versions

Delphi 4 (pushing rocks?), Delphi 5 and the Net (meaning Internet... but kind of cryptic), Delphi 6, Kylix (Linux we are coming back real soon!), Delphi 7, Delphi 8 and .NET (ugh!). And a big push towards modeling!

Delphi BirthDay Page

I still and always have Delphi 1 launch information at a page of my regular web site, http://www.marcocantu.com/delphibirth/. But enough of history, I'll start blogging on the Delphi language coming back to Linux tomorrow!

 

Categories: News, Blogs, and Tips

RAD Studio and Natively Compiled Code

Mon, 02/06/2017 - 03:38

In today's development landscape, natively compiled code is making a significant comeback, even if in a fairly different variety of scenarios. RAD Studio has always been focused on it and developers using Delphi and C++Builder probably experience its advantages without even noticing them.

Natively Compiled Code: A Comeback?

Let me clarify the terms first. I refer to natively compiled code as code that is compiled (at some time of the process) into machine code the target CPU can execute. As you start your application, there i no further conversion to take place. I mean, like the output of a traditional compiler producing a binary executable, but not only.

For several years most of the focus has been on execution environments (.NET, Java, the various JavaScript engines) that would either interpret and execute the source code or most often an intermediate optimized format (ByteCode, IL, etc). Most of these systems benefit from some JIT (just-in-time) compiler so that each method is executed and compiled only once after loading the application.

Now while this model is still extremely popular (and it is going to remain mainstream, I'm not suggesting the opposite), there are many signs of a significant comeback of natively compiled code:

  • Apple platforms and iOS in particular have been pushing the "native only" mantra, basically disallowing execution environments other than JavaScript. Odd drawback is pushing developers to package two versions of their applications (32-bit and 64-bit) into a IPA package. Their alternative model is allowing for compilation of bitcode into binary on their own backend systems -- so you are submitting BitCode and Apple converts it to binary before the users download the app.
  • Android has started implementing an "installation-time" compilation (ART), compiling Java ByteCode to binary when the application is downloaded. This "compilation" happens on the user devices, depending on the device CPU and OS version. Beside making it very time consuming to do a system update (as all apps needs to be recompiled), this is making Java apps execution faster.
  • Also on Android it might come to a surprise but most of the best-selling apps are not written mostly in Java, but in C++ using the NDK. Which is the same model Delphi and C++Builder use. If you don't believe me, read for example Microsoft as they said (one year ago):

    "Platform defining, cross-platform, new trendy applications such as Facebook Moments, Dropbox, Office, Skype, popular games (e.g. Fruit Ninja, Clash of Clans, EA Sports titles) are all written in cross-platform C++.  Talking more numbers if you take a look at the top 50 android applications a vast chunk of them (~75%) of them leverage C++."
  • On the Windows platform, most applications have always been native, despite Microsoft pushing .NET for a long time even Office and their mainstream applications are natively compiled and likely mostly written in Visual C++, even if there are exceptions in which Delphi is used ;-). But the trend to opening more native apps has become even more significant after Microsoft opened the Windows Desktop Bridge, with many companies previously trying to build native WinRT apps and now back the business as usual to support Windows 10 with traditional applications -- although to be honest some of them are actually .NET-based. A good example is Telegram, written in C++, which seems to have scrapped UWP WinRT plans in favor of a Desktop Bridge approach. We are witnessing a large number of Delphi (and C++Builder) applications landing to the Windows Store via the bridge.
  • Web services space is also seeing significant migration from scripting (PHP, Ruby) to more efficient solutions in terms of processing. The original idea of "let's throw more hardware at it" doesn't always scale as expected. If you need to 2x machines (like 4 machines instead of 2) no big deal. But when you need 10x machines and the system is huge, 100 servers instead of 10 might push you to rethink the strategy. Including the fact that these servers can be power-hungry and power-consumption has become a significant decision factor. Although limited, some migration to natively compiled server side code has been happening -- or at least, migration from less efficient scripting solutions to more efficient execution environment solutions.
By Why Natively Compiled?

There are many reasons for this push towards natively compiled apps, at very different levels. There are also many reasons this is considered far from ideal, and (as you've seen in the list above) it happens different levels, not always in the development phase and with classic development tools. Anyway, some of the reasons include:

  • performance, better optimization of compiled code, often combined with non-GC memory management (but not always) -- even if JITers create very fast code, they take a hit often at application start time, giving a bad first impression. In case of true scripting, compiled code also implies syntax checking it and writing more robust applications, but also here technologies vary (for example TypeScript does improve the robustness of JavaScript, even if it remains interpreted). Truly the optimization fo teh JITer for a specific machine can end up being even better than a general purpose more CPU-agnostic compiler. So I know this can be debated at length.
  • improved security due to the fact there isn't an execution environment that might be exploited, and again because the code is binary. A related issue is better IP protection, given reverse engineering is significantly more complex on natively compiled code (even if there are notable obfuscation solutions, they often fall a bit short and they don't apply to all languages alike -- JavaScript being fairly weak on this respect)
  • a reason for compiling code upfront (compared to BitCode or Android installation JIT) is full control on the application: if the code being executed by your customers is different from what you wrote, even testing it becomes fairly less deterministic
  • more on the business side, the fact your company might already have existing natively compiled code that you can even move to new platforms without doing a full rewrite (for Windows 10 Store, but even in the mobile space) ca be a significant advantage
  • single source can be native, despite claims (in the mobile space, mostly) that native code ends up being written with different languages, IDEs, and tool chains, there are technologies that allow a good balance of natively compiled code, native platforms support, and code reuse. Visual C++ is one of those (despite the fact that it has no cross-platform framework) and Microsoft is using it for their mobile apps -- and not Xamarin, it seems, while Qt and RAD Studio (on the C++ or Delphi side) offer also higher-end cross platform libraries, covering platform features and also UIs.
Conclusion

While I know things are way more complex than I've tried to depict in this blog post -- and sorry if I skipped or missed some relevant details -- my point was to underline the fact that "execution environment" are not the only model you should consider, they are not they way to the future, but the present is and the future will continue to be a mix of natively compiled and intermediate compilation or scripting. While a few years back things were more one sided, there are now even more signals that natively compiled code has a place and it is going to stay and receive continuous investment, both by the platforms vendors (Apple, Google) in terms of post-development tuning and by development tools vendors focused on the natively compiled space.

This is a reason Delphi and C++Builder have and will keep having their role, bringing natively compiled applications to Windows 10 (Store included), the mobile space, and soon also the Linux platform -- as we saw optimizing server side code execution is also relevant. Having different options and solutions for different projects remains critical for developers. Don't rule out natively compiled code, if you thing it is just going away, you might want to reconsider.

And if you have been staying on the natively compiled side, keep appreciating its value and virtues. Alternative options do have merit, for sure, but natively compiled code has a place. And not a small one!

Categories: News, Blogs, and Tips

Delphi Blogs of the Week #50

Mon, 01/30/2017 - 14:40

Another review of announcements, news, blog post, webinars, and anything else related to Delphi that I feel important to share.

Embarcadero News

Embarcadero competition, Delphi 10.2 T-Shirt Graphic Contest: Read more at https://community.embarcadero.com/competitions/11-delphi-10-2-t-shirt-challenge

​Rebooting the Podcast with Nick Hodges at https://community.embarcadero.com/blogs/entry/rebooting-the-podcast-with-nick-hodges

Events and Webinars

An Internet of Things (IoT) BootCamp 2017 by Embarcadero is scheduled for next week, see https://community.embarcadero.com/blogs/entry/iot-bootcamp-2017. This is a 4 days event, with webinars each day, covering a set of diverse topics, from interfacing with IoT devices to communicating with Arduino boards, from creating federated IoT systems to collecting data in a central database, from creating custom Arduino boards to using Visuino for programming them. The subtitle "Build a RESTful Network of IoT Devices with Arduino and RAD Server" gives a technical overview of what will be included. Dates are February 6th to 9th.

The webinar "Migrating Delphi - Case Studies" is scheduled for tomorrow, January 31st. Register at https://attendee.gotowebinar.com/rt/6553483306659174913

Notable Blog Posts

Windows Media Player in Delphi by Craig at http://chapmanworld.com/windows-media-player-in-delphi/

DprojNormalizer by Uwe at http://www.uweraabe.de/Blog/2017/01/24/dprojnormalizer-for-xe7-and-xe8/

Using Facebook SDK native framework for iOS and Android for Social Login and more (Part 1), a long and extremely interesting blog post from a technical point of view by Allen Drennan at https://blog.grijjy.com/2017/01/23/using-facebook-sdk-native-framework-for-ios-and-android-for-social-login-and-more-part-1/

And by the same author, Using the Google Cloud Platform APIs at https://blog.grijjy.com/2017/01/13/using-the-google-cloud-platform-apis/

And on a similar tone, FireBase Cloud Messaging with Delphi 10.1 Berlin update 2 by Jordi at http://thundaxsoftware.blogspot.it/2017/01/firebase-cloud-messaging-with-delphi.html

Delphi Code Monkey: One month after Diving Back into Delphi... http://delphicodemonkey.blogspot.it/2017/01/one-month-after-diving-back-into-delphi.html

Podcast Streaming - FireMonkey Demo by Sarina at https://community.embarcadero.com/blogs/entry/streaming-your-podcast-firemonkey-demo

TCalendarView Custom Painting by Pawel at https://community.embarcadero.com/blogs/entry/tcalendarview-custom-painting

50 Posts in This "Weekly" Series

Even if I'm not keeping this with a weekly schedule, the series of post has been ongoing with some regularity (every 2 or 3 weeks) and I got to the 50th installment. I plan continuing, as I think the fast paced flow of social media is hard ot keep up with, and all of us end up missing notable news like those I summarize here. Let me know what's your take.

Categories: News, Blogs, and Tips

January Updates in RAD Studio GetIt Package Manager

Wed, 01/25/2017 - 04:11

I guess I should turn this into a regular blog post, here are some more updates in GetIt package manager, after those in December. I'm listing updates for Berlin, only some of them are also in older versions. More are coming shortly.

RAD & Installer

There is now a second tool to build installations, beside InstallAware, called RAD & Installer. This tool is an expert for creating installation script from the IDE, more than an installation tool in itself. This is the "Installer" category in GetIt now:

TMS IDE Plugin Pack

After a nice collection of trial version of their component packages (see last blog post), TMS has added to GetIt a free collection of IDE enhancements. This is not a trial, but free working software. Quite nice, I have to say.

Updates and More

Updates to TurboPack libraries including VirtualTreeView, SysTools, Mustangpeak Virtual Shell Tools and other packages. Also, there are 2 or 3 additional submissions begin worked on, so keep an eye to GetIt (and possibly to an update of this blog post).

As you can see above, there are currently 114 entries in GetIt for RAD Studio Berlin, as the system has been growing in content over time.

Jan 25h Update 

We now have also an additional Trial component, JAM Software ShellBrowser, the 115th entry.

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #49

Sun, 01/22/2017 - 03:35

The first list of interesting links and blog post of 2017, focused on Delphi development.

Embarcadero Updates

Press release "Embarcadero Announces RAD Studio Desktop Bridge Support for Windows 10 Deployments" including a comment by Kevin Gallo, corporate vice president for the Windows developer platform at Microsoft at http://www.businesswire.com/news/home/20170110005908/en

This press release got also referenced by SD Times at http://sdtimes.com/swift-announces-new-project-lead-embarcadero-updates-rad-studio-and-spare5-relaunches-as-mighty-ai-sd-times-news-digest-jan-11-2017/

There is Debugger Hotfix for macOS Sierra and the iOS Simulator for 10.1 Berlin. Information at https://community.embarcadero.com/blogs/entry/debugger-hotfix-for-macos-sierra-and-the-ios-simulator and download at http://cc.embarcadero.com/item/30680

Blog Posts

World First! A Linux web service written in Delphi by Craig at http://chapmanworld.com/2017/01/12/world-first-a-linux-web-service-written-in-delphi/

Got a link to this fairly interesting blog on Delphi: https://blog.grijjy.com/

Did you ever use Bold? Check out http://boldfordelphi.blogspot.it/2017/01/help-me-to-make-bold-open-source-project.html

I don't know who write this and don't agree in full (and it stirred some discussion), but I found it interesting: https://medium.com/@srcstorm/pascal-independent-language-for-2017-a5a25f7c62d8#.n88868sta

A Delphi wrapper for Slack API by Andrea at https://blog.andreamagni.eu/2017/01/introducing-sdriver-a-delphi-wrapper-for-slack-api/

Integrating with you favorite CRM/ERP web based client -- or poor mans integration? -- by Steffen at http://fixedbycode.blogspot.it/2017/01/integrating-with-you-favorite-crmerp.html

Webinars and More

Check out 2017 upcoming Delphi webinars at https://community.embarcadero.com/article/16466-upcoming-2017-webinars

In particular, there is a new BootCamp focused on Arduino and IoT early February, that looks pretty interesting. More information to come.

 
Categories: News, Blogs, and Tips

Fun with Delphi Contest: NASA API Mashup

Fri, 01/20/2017 - 01:20

Embarcadero is promoting a contest for applications that leverage OpenData, in particular the NASA API (available at https://api.nasa.gov/index.html). Given the large amount of data available, there is room for building many different applications. Also, you can submit Windows or Mobile applications, as long as it is built with RAD Studio.

Full announcement and competition details are at:

https://community.embarcadero.com/competitions/8-fun-with-delphi-nasa-api-mashup

We have a sample application on GitHub at https://github.com/EmbarcaderoPublic/FunWithRADStudio/ with a video at https://youtu.be/pARtydMW_GQ and accept submissions on GitHub and with a companion video. All of the information is at the page above.

While this isn't strictly tied to my "Fun Side of Delphi" old material, there is a clear relationship in terms of thinking out of the box and coming up with amusing demos, which also include some technical challenge.

We are waiting for your submission, a nice prize, and visibility in the Delphi community. So, start browsing the APIs and get to coding... submissions are due by the end of the month.

Categories: News, Blogs, and Tips

Answering the Question: Do I have Berlin Update 2?

Mon, 01/09/2017 - 01:44

There is a glitch in RAD Studio Berlin Update 2: For some users the About Box indicates the wrong version number in the "Installed Updates" field.

An example is below:

So how do you know if you actually have Update 2 installed? An easy way is to keep an eye to the Splash Screen, which was updated with the fireworks:

The more official way is to check in the About Box the actual version number. As you can see in the first image above:

Berlin Update 2 has version number 24.0.25048.9432

Berlin Update 1, instead, had version number 24.0.24468.8770

The first release (RTM) of Berlin was 24.0.22858.6822

 

Categories: News, Blogs, and Tips

My Year in Cities 2016

Sat, 12/31/2016 - 03:36

Following a long tradition of this blog, dating back to 2006 (and continued in each of the following years), here is my year 2016 seen through the cities I've been to. The rule is: Places I've visited in 2016 for at least one night (plus some relevant daily trips), in chronological order. At times, the reason for the trip is listed. In bold are cities or countries I've been to for the first time.

  • Piacenza, Italy, is where I live
  • Assisi, Perugia, Italy
  • Berlin, Germany (RAD Studio Berlin Launch)
  • Cannes, France (Film Festival)
  • Courmayeur Mont Blanc, Italy
  • Trip to Germany and Denmark
    • Zurich, Switzerland
    • Erfurt, Germany
    • Berlin, Germany
    • Hamburg, Germany
    • Middelfart, Denmark
    • Billund (Legoland) Denmark
    • Bad Salzschlirf, Germany
  • Courmayeur Mont Blanc, Italy
  • Koeln, Germany (Delphi Tage)
  • Rome, Italy (ITDevCon)
  • Viareggio, Italy (Lucca Comics)
  • Duesseldorf, Germany (EKON)
  • Frankfurt, Germany (Delphi Developer Days)
  • Zeist, Netherlands (SDN Event)

While I've been traveling quite a bit, my trips this year have been limited to Europe. Hope to be able to get back to the US to meet my coworkers next year, and I already have some other long trips planned for 2017. Stay tuned. 

Have a great 2017 full of happiness (and traveling!).

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #48

Fri, 12/30/2016 - 02:08

It has been a long time, but here is another roundup of notable blog posts in the Delphi space.

Updates

Debugger Hotfix for iOS32 (for RAD Studio 10.1 Berlin) at https://community.embarcadero.com/blogs/entry/debugger-hotfix-for-ios32

Technical Blogs

Optical Barcode Recognition Library For FireMonkey In Delphi 10 Berlin On Android at http://www.fmxexpress.com/optical-barcode-recognition-library-for-firemonkey-in-delphi-10-berlin-on-android/

Conditional Uses Clause Considered Harmful at http://www.uweraabe.de/Blog/2016/11/06/conditional-uses-clause-considered-harmful/

Changing the color scheme of an Android style at https://community.embarcadero.com/blogs/entry/changing-the-color-scheme-of-an-android-style

The Best Windows Support RAD Studio 10.1.2 Berlin at https://community.embarcadero.com/article/news/16448-rad-studio-berlin-anniversary-edition-support-for-windows-10-anniversary-update-and-the-windows-store

Running Delphi applications on Raspberry Pi 3 at https://fixedbycode.blogspot.it/2016/12/running-delphi-applications-on.html

Introducing SubHub (a complete, real world Delphi + RAD Server project): https://www.code-partners.com/introducing-subhub/

Towards Linux

Running Delphi VCL code on Linux via Wine, at http://kriscode.blogspot.it/2016/10/how-i-use-linux-to-write-software-for.html

Preparing for Linux at https://community.embarcadero.com/blogs/entry/preparing-for-linux

Configure Delphi and RedHat or Ubuntu for Linux Development at: https://community.embarcadero.com/blogs/entry/configure-delphi-and-redhat-or-ubuntu-for-linux-development

InterBase on Linux at https://delphiaball.co.uk/2016/12/13/interbase-on-linux/

Setting up SUSE Linux Enterprise Server/openSUSE Server for the Delphi on Linux Beta at http://fixedbycode.blogspot.it/2016/12/setting-up-suse-linux-enterprise.html (with some beta info shared under permission)

Open Source Projects and Libraries

Interfacing with Slack from Delphi: https://github.com/andrea-magni/SlackDriver/tree/master/Source

Some CodeRage 2016 code at https://github.com/EmbarcaderoPublic/CodeRage2016

Delphi LeakCheck at https://bitbucket.org/shadow_cs/delphi-leakcheck/

FireMonkey snow effect: https://github.com/thachngopl/SnowFallEffect

And finally a video with this effect on YouTube, as a way to celebrate the winter season and wish you a great 2017:

Categories: News, Blogs, and Tips

New GetIt Packages: AQTime, InstallAware, Redis, ErrorSoft, Component Trials by TMS and Others and Much More

Tue, 12/27/2016 - 13:35

There are many additional packages recently added to the GetIt Package Manager for Berlin, from free tools and components, to trial versions of paid ones. The list include AQTime, which was until recently an integrated third-party tool and it is available now for Berlin as part of the core product. Similarly, there is now also InstallAware, an updated version of NexusDB, some new free tools (including a Redis Client by Daniele Teti).

Finally, there is a fairly long list of trial versions of paid components, including many from the large TMS offering. You can now try these components directly from the IDE. The following images provide more details.

Berlin Add-On Value Tools    More Free Component Libraries

 

Trial Versions of Popular Third-Party Components Great Games with Full Source Code

More Coming

More libraries of components are added over time, and the entire TurboPack list has been updated with the latest versions. Overall, there are 58 different entries for Components and Libraries, outside fo the "Internet of Things" collection. Feel free to email me if you have libraries or tools available for inclusion.

Categories: News, Blogs, and Tips

Microsoft mentioning RAD Studio Desktop Bridge Support

Wed, 12/21/2016 - 02:13

It is a fairly interesting time to see Microsoft promote RAD Studio Berlin Update 2 support for the "Centennial" bridge, as the only IDE providing this capability out of the box.

First, Microsoft Windows Developer account tweeted about it at https://twitter.com/windowsdev/status/807978252820221952 (see below):

Second, RAD Studio has been mentioned in the blog post "Conversion options for bringing your existing desktop app to the Universal Windows Platform using the Desktop Bridge" at https://blogs.windows.com/buildingapps/2016/12/08/conversion-options-bringing-existing-desktop-app-universal-windows-platform-using-desktop-bridge, Towards the middle of the long post you can read:

"Additionally, Embarcadero has announced support for the Desktop Bridge in RAD Studio, which lets you directly output a Windows app package through the build process."

And third and even more relevant RAD Studio in mentioned in the official MSDN documentation at https://msdn.microsoft.com/windows/uwp/porting/desktop-to-uwp-root#convert.

For more information on our side, you can refer to:

- The new desktop Bridge landing page: https://www.embarcadero.com/products/rad-studio/windows-10-store-desktop-bridge

- The blog post (and webinar recording) by Pawel: https://community.embarcadero.com/blogs/entry/appx-development-for-windows-10-store (the video is at https://youtu.be/hEOk3Ztm-8g)

- My blog post offering an overview: https://community.embarcadero.com/article/news/16448-rad-studio-berlin-anniversary-edition-support-for-windows-10-anniversary-update-and-the-windows-store

There are more and more of our customers publishing Delphi and C++Builder applications on Windows Store, let us know of any relevant application that gets published so we can track it. As a reference, my "My MiniFigures" store app has been had 420 downloads so far, but I'm sure you can beat it!

Categories: News, Blogs, and Tips