From the blog

How Does UI Design Approach Differ Between Delphi And Electron? Benchmarking Study

How much effort does a developer have to put in to build a great-looking, intuitive and functional user interface? Much depends on how much the IDE or framework the developer is using facilitates the process through a WYSIWYG (What You See is What You Get) approach, ready-made visual design components, libraries and tools, and a low-code approach that automates as much of the repetitive parts of the process as possible. When businesses choose a software framework they begin a long-term relationship for the duration of their application’s lifecycle. Given the strategic consequences of this decision, businesses must carefully consider how frameworks enhance developer productivity, business functionality,application flexibility, product performance, the long-term viability of that framework, and the inherent security in each framework’s design and technology. The ideal framework demonstrates strength in each category by minimizing product time-to-market, reducing maintenance costs, supporting product variety, and facilitating a superior customer experience. The “Discovering The Best Cross-Platform Framework Through Benchmarking” whitepaper evaluates two frameworks supporting multi-platform desktop application development: Delphi and Electron. This is the second in a series of blog posts looking more closely at each of the 26 individual metrics used in the study, and how Delphi and Electron each fared on these metrics. The first can be found here. Download the complete whitepaper here Benchmark Category: Developer Productivity Developer productivity is the measure of effort and code required for developers to complete typical development tasks. Productivity directly impacts product time-to-market and long-term labor costs so tools that increase developer productivity have substantial impacts on business timelines and bottom lines. Productivity can be realized in two distinct ways – reduced coding requirements due to native libraries, and IDE tools like code-completion and visual design.IDEs with greater library breadth generally result in fewer lines of code per application and produce a clean, lean codebase that minimizes opportunities for bugs or maintenance problems later in the product life cycle. Benchmark Metric 2/26: UI Design Approach UI Design Approach Metric: Does the framework’s IDE allow for graphical/visual application creation and provide a “What You See Is What You Get” (WYSIWYG) view model? IDEs that support development through “drag and drop” components or other visual methods allow users to engage different methods of thought and creativity as they work. Visual creation through WYSIWYG editors preclude businesses from needing every version of physical hardware to view platform-native styling. Benchmarking Results Delphi Score: 5 (out of 5) Delphi’s RAD Studio IDE offers a What-You-See-Is-What-You-Get (WYSIWYG) design experience with drag-and-drop components for visual GUI design. The designed GUI can be viewed using native Android/iOS/Windows/macOS styling or custom styles and can simulate application appearances within mobile devices of varying screen sizes. Components can also be resized and have their properties adjusted in the Object Inspector without touching code, allowing rapid prototyping through visual development. Delphi also offers the ability for a developer to edit the UI using a simple YAML style language definition. Electron Score: 3 (out of 5) Electron lacks a native IDE but can be developed using text editors and command line tools, Electron doesn’t include a WYSIWYG design experience or drag-and-drop components by default. The UI can be created using HTML5 and CSS styling. Unless the developer chooses an IDE like Visual Studio, Electron applications must be compiled and run to view the project’s GUI. Download […]

Read More

13 Things About Native Windows Development You May Not Know

Software development is an exciting journey. Choosing the best development tools can considerably save us from many troubles down the road. Although every developer has some considerations regarding native windows development, there might be some exciting points you may not have known. So let us explore them together. 1. Are all native development tools equal? Not all native development tools are equal. On one end of the spectrum, there are time-tested native windows development solutions. On the other end, there are recently born scripted tools without any proven success history. Designing the right development tool can take decades of hard work and passion. Longevity – the ability for a product to last over an extended period of time – is often a true indicator of the quality and fitness of the development solution. People ‘vote with their feet’ . A poor but well-marketed product can often make a noisy and exciting splash when it hits the headlines but over time you find that the new Best Thing Ever, when the initial honeymoon period is over, quickly submerges under the seas of reality versus sales hype until it suffocates and eventually dies. Picking the quieter, long-lived solutions turns out to be the smart choice. The stability of the solution comes from a development tool having gone through the battle-hardening of many coders hammering it late into the night, fighting the demons of software development for real. 2. What is the “Hello World” program size? Comprehensively comparing native windows development tools can be difficult, but we can do a simple litmus test. Just find out the minimum size of the “Hello World” program that you can ship to your client. If its exe size is enormous and needs many accompanying files to run, it is a warning sign of possible problems. Every byte counts and every additional file we have to distribute with our software will require support, maintenance, and updates. Make sure to take into account the size of any supporting downloads required to make an app work on the target machine. A tiny executable package which required nearly a gigabyte of additional runtimes is a beast in disguise. 3. Does Productivity Matter? In any software project, Developers’ productivity matters. RAD studio is an acronym for Rapid Application Development. It has proved its ease of use and the productivity increase it imbues in developers who use it since Windows 3.1 – that’s 25+ years of service! No native Windows development tool can come close to Delphi RAD studio productivity. In addition, it has excellent time-saving features like an elegant IDE, Refactoring, Code Insight, VCL, Rest Debugger, LiveBindings Designer, compilation speed, backward compatibility, DB Connectivity, to name a few. 4. Is it essential to protect the source code? Source code might contain business secrets, so we should protect it. There are tools available to decompile JavaScript-based and .Net software easily and quickly. The developer can obfuscate it, but it is not foolproof and, it might also slow down execution. This leakage is a problem even if we do not care about our intellectual rights. Our client’s data and business secrets are at risk, which might lead to dire consequences. Compare this to Delphi and C++ Builder which both generate processor-native machine code, striping metadata, making decompiling almost useless and extremely difficult to […]

Read More

Directions & Geocoding with GeoApify in TMS FNC Maps

TMS FNC Maps v2.4 adds support for a new geocoding and directions service in addition to the existing supported directions services from Azure, Bing, Google, Here, MapBox and OpenRouteService. GeoApify The GeoApify API service provides geocoding, reverse geocoding and directions. This service can be used in combination with all supported mapping services in TMS FNC Maps. Specifically in combination with the OpenLayers mapping service this is a worthwhile free alternative to comparable services. Geocoding A geocoding request converts a text address to a geographic latitude & longitude coordinate. The coordinate can then be used to display a location on the map. With the following code we are going to look up the location of “Baker Street, London” and display it on the center of the map with a marker and a title that contains the address.Note that this example uses the asynchronous method with a callback. procedure TForm1.Button1Click(Sender: TObject); var Item: TTMSFNCGeocodingItem; begin TMSFNCGeocoding1.APIKey := ‘abc123’; TMSFNCGeocoding1.Service := gsGeoApify; TMSFNCGeocoding1.GetGeocoding(‘Baker Street, London’, procedure(const ARequest: TTMSFNCGeocodingRequest; const ARequestResult: TTMSFNCCloudBaseRequestResult) begin if (ARequestResult.Success) and (ARequest.Items.Count > 0) then begin Item := ARequest.Items[0]; TMSFNCMaps1.BeginUpdate; TMSFNCMaps1.SetCenterCoordinate(Item.Coordinate.ToRec); TMSFNCMaps1.AddMarker(Item.Coordinate.ToRec, Item.Address); TMSFNCMaps1.EndUpdate; end; end ); end; Reverse Geocoding A reverse geocoding request converts a latitude & longitude coordinate to a text address. The text address can then be used to display an address associated with a location on the map. With the following code we are going to track a click on the map, retrieve the address for that location and display it on the map with a marker and a title that contains the address Note that this example uses the synchronous method that provides an immediate result without a callback. procedure TForm1.TMSFNCMaps1MapClick(Sender: TObject; AEventData: TTMSFNCMapsEventData); var Address: string; begin TMSFNCGeocoding1.APIKey := ‘abc123’; TMSFNCGeocoding1.Service := gsOpenRouteService; Address := TMSFNCGeocoding1.GetReverseGeocodingSync(AEventData.Coordinate.ToRec); TMSFNCMaps1.BeginUpdate; TMSFNCMaps1.SetCenterCoordinate(AEventData.Coordinate.ToRec); TMSFNCMaps1.AddMarker(AEventData.Coordinate.ToRec, Address); TMSFNCMaps1.EndUpdate; end; Directions A directions request provides step by step directions between a start and end location. The directions data can then be used to display a route on the map. Additional options can be configured for the directions request, including: waypoints, alternative routes and language. With the following code we are going to retrieve driving directions between New York and Philadelphia. On the map, a marker is displayed at both the start and end location, a polyline displays the route and a label displays the distance and duration of the route.In the TListBox on the step by step directions are displayed for each step in the route directions.Note that this example uses the asynchronous method with a callback. procedure TForm1.Button1Click(Sender: TObject); var cStart, cEnd: TTMSFNCMapsCoordinateRec; begin cStart.Latitude := 40.68295; cStart.Longitude := -73.9708; cEnd.Latitude := 39.990821; cEnd.Longitude := -75.168428; TMSFNCDirections1.APIKey := ‘abc123’; TMSFNCDirections1.Service := dsGeoApify; TMSFNCDirections1.GetDirections(cStart, cEnd, procedure(const ARequest: TTMSFNCDirectionsRequest; const ARequestResult: TTMSFNCCloudBaseRequestResult) var it: TTMSFNCDirectionsItem; I: Integer; p: TTMSFNCOpenLayersPolyline; Hours, Minutes: string; begin TMSFNCOpenLayers1.ClearPolylines; ListBox1.Clear; if ARequestResult.Success then begin if ARequest.Items.Count > 0 then begin TMSFNCOpenLayers1.BeginUpdate; it := ARequest.Items[0]; TMSFNCOpenLayers1.AddMarker(it.Legs[0].StartLocation.ToRec, ‘New York’, DEFAULTWAYPOINTMARKER); TMSFNCOpenLayers1.AddMarker(it.Legs[0].EndLocation.ToRec, ‘Philadelphia’, DEFAULTENDMARKER); Hours := IntToStr(Round(it.Duration / 60) div 60); Minutes := IntToStr(Round(it.Duration / 60) mod 60); p := TTMSFNCOpenLayersPolyline(TMSFNCOpenLayers1.AddPolyline(it.Coordinates.ToArray)); p.StrokeColor := gcBlue; p.StrokeOpacity := 0.5; p.StrokeWidth := 5; p.&Label.Text := FloatToStr(Round(it.Distance / 1000)) + ‘ km, ‘ + Hours + ‘ h ‘ + Minutes + ‘ min’; TMSFNCOpenLayers1.ZoomToBounds(it.Coordinates.Bounds.ToRec); TMSFNCOpenLayers1.EndUpdate; ListBox1.Clear; for I := 0 to it.Steps.Count – 1 do begin ListBox1.Items.Add(it.Steps[I].Instructions) end; end; end; end ); end; Available Now The TMS FNC Maps v2.4 update is available now for Delphi & Visual Studio Code (with TMS WEB Core). You can download the latest version and start using the new features right […]

Read More

Everything You’ve Ever Wanted to Know About UI Components

Building an attractive user face is an important requirement for any application for promoting positive user engagement. In modern application designing, components play a key role in achieving reusability and compatibility across multiple platforms. In simple terms, a component is a logical grouping that represents a particular web element that does a specific task that you can re-use across your application. UI components are the major building blocks of any application. Today, many component libraries provide a wide range of UI components for anything you need to visualize in your UI.  For example, Ext Js Kitchen Sink consists of simple components such as Buttons, DataView, Login Forms to more sophisticated components like Grid, Trees, Charts, and Calendar. Let’s explore in this article everything you have ever wanted to know about UI components. Usually, a UI component is a child component of a parent UI component. Users’ basic UI components include rendering a template, showing and hiding, enabling and disabling, and centering in the main container. Users can also do advanced functions based on the component, such as changing the size and position, drag and drop, floating, docking other components, etc. For example, all Sencha UI components are children of the parent class Ext. Component. Therefore, all the components inherit every function of a parent component.  UI components make UI building an easy task for web developers. UI components libraries allow developers to drag and drop the component they want without writing any code to help accelerate the development. However, developers also get the flexibility to customize the components according to the way they want. Such reusable components help organize a UI and maintain consistency across the entire application. It also means components help standardize a UI.  Buttons components are basic UI components frequently used in the application among all the UI components. They help you take any action, such as directing the page to another page and making a choice. Developers not only can include basic button functionality but also, there are offers a wide range of button components, from basic to advanced. For example, Ext Js Button components include Menu buttons that can drop a menu upon clicking the button, Split buttons with icons and texts, buttons containing a link, and segmented buttons. Developers can make use of such advanced button components to provide more capabilities for the UI. To make a component functional, data binding is an essential requirement. You can use component configs to bind data. When you connect the data with the component config, it automatically reflects any update to data. Components can do different types of data binding.  For example, Ext Js Dynamic data binding enables dynamically generating data in components. Two-way data binding is another capability Ext Js provides. In two-way data binding, when one component changes, another component will automatically change accordingly. Other data binding components can include connecting formulas, binding associations, changing the components state, chaining combo boxes based on the data, and chaining selections. In addition, you can do remote data binding to render data from external data sources. All these data binding helps realize data utilization the way developers want.  A grid is an important UI component that helps render millions of data efficiently on a web page without affecting the application performance. You can build tables with advanced functionalities […]

Read More

5 Tell-Tale Signs You Need to Get a New JavaScript Grid

A Data Grid is a user interface element that you’ve most likely seen before. It’s a table-based component that shows data in a table format. Each data item is represented as a row with columns indicating the field of items.  Grids have been in functionality for a very extended period of time, especially on desktops, but they’re becoming increasingly ubiquitous in the UI of web apps. Every computer that takes part in a data grid must execute a certain software.  The program serves as the system’s administrator and handles numerous grid-based activities.  To be more specific, the software divides up the work into smaller chunks and distributes it across the computers, allowing everyone to work on their projects simultaneously.  The results of sub-projects are collected and combined to fulfill a larger-scale project after their completion.  It is possible to exchange information about which subtasks each computer is currently working on and how to consolidate and deliver results thanks to the software. In this article, we will go through the various benefits and features Ext JS offers as a JavaScript grid, and the drawbacks it can cause in your projects.  We will also highlight the ways to optimize Ext JS  to improve performance. Why Should You Use Sencha Ext JS? Extended JavaScript is abbreviated as ExtJS. It is a Sencha JavaScript framework based on Yahoo User Interface (YUI). It’s essentially a modern-looking desktop application development platform.  This tutorial will deal with problems with Ext JS grid performance, its benefits, limitations, and methods for improving your website performance through the Ext JS grid we are using. Because of the computational complexities, very high costs are associated with new implementations of grids that most firms and software engineers today choose for existing system solution approaches.  So It’s no surprise that many third-party JS data grids are available in both free and premium editions.  However, choosing which one to utilize can be difficult in and of itself. So how do you go about doing that? After ensuring that a grid fits the features and performance criteria, which can be easily analyzed by Sencha’s own JS Grid Performance Analyzer, developers are more likely to use the widget in their applications if it comes with detailed documentation that lays down all functionalities and provides examples. What Are the Useful Features of Ext JS? The latest version of Ext JS provides the following features: Grids, pivot grids, forms, charts, and trees are among the rich UI widgets available that can also be customized. There exists compatibility of code between new and previous versions of Ext JS. A versatile tool for layout management aids in the organization of data and a display of that content and data across a variety of browsers on various devices having different sized screens. The advanced data package separates the data layer from that of the widgets of UI.  The data package enables data gathering on the client-side using models presenting high functionality with capabilities like being able to sort and filter through data. Protocol agnostic can obtain information from any source at the back end regardless of the protocol. Themes that can be altered.  Multiple theme options are provided that are out of the box for widgets belonging to Ext JS, consistent throughout platforms. What Interesting Benefits Can You Acquire from Ext […]

Read More

This Is How Technology Is Changing Windows IDE’s Treatment

While the idea of integrated development environments (IDE software) dates back to 1983 when Borland launched TurboPascal, the first-ever editor-compiler integration, many believe the IDE wave really started with Microsoft’s Visual Basic and Delphi in the 1990s. Long vbefore even those early days, early developers would save their code on a variety of hard-copy mediums such as the IBM punch card machine o,r punched paper tape, turn it in over to a machine/computer operator, and wait, sometimes for hours, for the printout to return before the developer would know whether or not their program was successful and if, it was, what the output generated looked like. The next generation was an improvement, with such advances as time-sharing terminals, where the software developer could save their code on a remote computer The programmer still often had to wait several hours before their code could be compiled, executed and the results arrive back. Luckily things progressed rapidly until the advent of the personal computer era meant we developers could write, compile and execute our code all on one machine with the immediate gratification if it worked – or woe and angst when it didn’t. Did the rise of the Internet make IDEs essential? However, the explosive growth of the internet accelerated the need for rapid application development (RAD); developers and businesses sought ways to abstract their ideas to higher languages, develop and deploy software faster, and ultimately become more productive. The success of Microsoft Windows highly graphical user interface offered – and demanded – solutions which were more instant and where the visual elements of the program’s user interface could be seen while designing, prior to deployment Hence the advent of Visual Basic and Delphi IDEs where screen design was WYSIWYG and a more tactile, responsive, intuitive experience. Developers could now think of code in graphical terms and visually design applications by leveraging the drag and drop feature in these IDEs. While the development of the first Windows IDEs was met with great enthusiasm from developers, how they were treated will quickly pale in comparison to how we treat a Windows IDE today.  What are the key elements of an IDE? Continuous advancement in technology has brought about massive improvements to the Windows IDEs. Over the years, we have seen integrated environments with features such as; Programmable editors Code refactoring engines Team collaboration systems Object and data modeling Build environments Debuggers Unit testing  Static and dynamic program analysis. Do Windows IDEs target Android/IOS/macOS/Linux and Windows? With advances in technology, the Windows IDE now targets not just apps for Windows but also those of Android, iOS, macOS and Linux. For example, Delphi can compile to native 32-bit or 64-bit code for Windows using the VCL framework and compile to 32-bit or 64-bit code for Windows, macOS, Android, iOS, and Linux using the FMX framework. The key takeaway here is that all the apps are native apps not some kind of bloated interpretive virtual app environment framework. The native close to the metal nature of Delphi and C++ Builder apps means they run at the full speed of the underlying hardware with almost nothing between the device’s internals other than the operating system. This means they are scary fast and ridiculously reliable with great resistance to operating system changes in shared components that brings about […]

Read More

FNC WX Docx: Generating Word documents made easy!

In need of an intuitive way to generate Docx files with Delphi without having to install Microsoft® Word? TMS has you covered! With the latest release of TMS FNC WX Pack, we’ve added the new TTMSFNCWXDocx component which lets you generate Docx files on all platforms.  We’ve added a lot of functionality to offer maximum flexibility and allow you to customize the document requirements.  You can add:  formatted text tables images table of contents headers footers bookmarks links page numbering Everything you’ll need to build your documents. It’s even possible to export the document structure to a JSON template. A template that can easily be modified and used to perform actions like mail merging. Creating a document The creation of the document is intuitive. you can work with predefined methods and properties to customize your document. You can see how to create a document in this video: Building a template Building a template is as simple as adding the fields you want to edit later and just set the ID of that field. You can later use this ID to search the document for the desired field. Using a template After creating a template you can use following code to generate an invoice. This is a code snippet from the advanced demo. This code loops over a dataset and creates for every customer their invoices.  Customers.First; while not Customers.Eof do begin id := Customers.FieldByName(‘CustNo’).AsInteger; AsText(TMSFNCWXDocx1.FindByID(‘CustNo’) as TTMSFNCWXDocxChild).Text := IntToStr(id); AsText(TMSFNCWXDocx1.FindByID(‘Contact’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Contact’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Company’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Company’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Phone’) as TTMSFNCWXDocxChild).Text :=Customers.FieldByName(‘Phone’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘FAX’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘FAX’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Addr1’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Addr1’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Addr2’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Addr2’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Zip’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Zip’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘City’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘City’).AsString; AsText(TMSFNCWXDocx1.FindByID(‘Country’) as TTMSFNCWXDocxChild).Text := Customers.FieldByName(‘Country’).AsString; t := AsTable(TMSFNCWXDocx1.FindByID(‘Items’) as TTMSFNCWXDocxChild); toPay := 0; orders.Filtered := False; Orders.Filter := ‘CustNo = ‘ + IntToStr(id); Orders.Filtered := true; Orders.First; t.Rows.Clear; while not Orders.Eof do begin tr := t.AddRow; tc := tr.AddCell; p := tc.AddParagraph; p.AddText(Orders.FieldByName(‘ItemNo’).AsString); tc := tr.AddCell; p := tc.AddParagraph; p.AddText(Orders.FieldByName(‘Description’).AsString); tc := tr.AddCell; p := tc.AddParagraph; p.AddText(Orders.FieldByName(‘ItemsTotal’).AsString); tc := tr.AddCell; p := tc.AddParagraph; p.AddText(Orders.FieldByName(‘ItemPrice’).AsString); tc := tr.AddCell; p := tc.AddParagraph; p.AddText(Orders.FieldByName(‘ItemTotalPrice’).AsString); toPay := toPay + Orders.FieldByName(‘ItemTotalPrice’).AsFloat; Orders.Next; end; AsText(TMSFNCWXDocx1.FindByID(‘TotalToPay’) as TTMSFNCWXDocxChild).Text := FloatToStr(toPay); TMSFNCWXDocx1.GetDocxAsFile(TPath.Combine(pth,’Invoice’ + IntToStr(id) + ‘.docx’)); Customers.Next; end; This will generate the following document on the right from the template on the left. Available Today! The TTMSFNCWXDocx component is available in the latest update, available today. So go ahead and download the latest version of the TMS FNC WX Pack. The TMS FNC WX Pack is part of the FNC family, so as a reminder, below is an overview of what FNC has to offer. TMS FNC Components can be used simultaneously on these frameworks TMS FNC Components can be used simultaneously on these operating systems/browsers TMS FNC Controls can be used simultaneously on these IDEs

Read More

Delphi Versus Electron Benchmarking Study – Development Time Metric

When businesses choose a software framework they begin a long-term relationship for the duration of their application’s lifecycle. Given the strategic consequences of this decision, businesses must carefully consider how frameworks enhance developer productivity, business functionality,application flexibility, product performance, the long-term viability of that framework, and the inherent security in each framework’s design and technology. The ideal framework demonstrates strength in each category by minimizing product time-to-market, reducing maintenance costs, supporting product variety, and facilitating a superior customer experience. The “Discovering The Best Cross-Platform Framework Through Benchmarking” whitepaper evaluates two frameworks supporting multi-platform desktop application development: Delphi and Electron. This is the first in a series of blog posts looking more closely at each of the 26 individual metrics used in the study, and how Delphi and Electron each fared on these metrics. Download the complete whitepaper here Benchmark Category: Developer Productivity Developer productivity is the measure of effort and code required for developers to complete typical development tasks. Productivity directly impacts product time-to-market and long-term labor costs so tools that increase developer productivity have substantial impacts on business timelines and bottom lines. Productivity can be realized in two distinct ways – reduced coding requirements due to native libraries, and IDE tools like code-completion and visual design.IDEs with greater library breadth generally result in fewer lines of code per application and produce a clean, lean codebase that minimizes opportunities for bugs or maintenance problems later in the product life cycle. Benchmark Metric 1/26: Development Time Development Time Metric: Total hours spent writing the fully functional application from scratch. This measurement assesses the value a framework’s productivity tools add to an average developer with no prior task knowledge. Comprehensive documentation, plentiful native libraries, code completion, and other IDE tools will allow the developer to design and build the benchmark application more efficiently than would be the case in a “standard” text editor. Benchmarking Results Delphi Score: 3 (out of 5) One expert Delphi developer completed the Unicode Reader in 23.3 hours using the RAD Studio IDE. Application modification with internal tests took 8.33 hours for a total development time of 31.63 hours. Five other Delphi developers gave estimates for the original application ranging from 24 to 50 hours, averaging 38.8 hours. Electron Score: 5 (out of 5) One expert Electron developer completed the Unicode Reader in 20 hours using Angular for the RSS reader GUI and node-postgres, a collection of node.js modules, for the database interactions. However, application modification with internal tests took an additional 47.8 hours – 28.6 hours to code the tests and 19.2 hours to troubleshoot issues on three platforms until acceptance criteria were met – for a total of 67.8 hours. Three other Electron estimates for the Unicode Reader ranged from 80 to 120 hours with a mean of 100 hours. Download the complete whitepaper here

Read More

Delphi Versus Electron Benchmarking Study – UI Design Approach

When businesses choose a software framework they begin a long-term relationship for the duration of their application’s lifecycle. Given the strategic consequences of this decision, businesses must carefully consider how frameworks enhance developer productivity, business functionality,application flexibility, product performance, the long-term viability of that framework, and the inherent security in each framework’s design and technology. The ideal framework demonstrates strength in each category by minimizing product time-to-market, reducing maintenance costs, supporting product variety, and facilitating a superior customer experience. The “Discovering The Best Cross-Platform Framework Through Benchmarking” whitepaper evaluates two frameworks supporting multi-platform desktop application development: Delphi and Electron. This is the second in a series of blog posts looking more closely at each of the 26 individual metrics used in the study, and how Delphi and Electron each fared on these metrics. The first can be found here. Download the complete whitepaper here Benchmark Category: Developer Productivity Developer productivity is the measure of effort and code required for developers to complete typical development tasks. Productivity directly impacts product time-to-market and long-term labor costs so tools that increase developer productivity have substantial impacts on business timelines and bottom lines. Productivity can be realized in two distinct ways – reduced coding requirements due to native libraries, and IDE tools like code-completion and visual design.IDEs with greater library breadth generally result in fewer lines of code per application and produce a clean, lean codebase that minimizes opportunities for bugs or maintenance problems later in the product life cycle. Benchmark Metric 1/26: UI Design Approach UI Design Approach Metric: Does the framework’s IDE allow for graphical/visual application creation and provide a “What You See Is What You Get” (WYSIWYG) view model?11 IDEs that support development through “drag and drop” components or other visual methods allow users to engage different methods of thought and creativity as they work. Visual creation through WYSIWYG editors preclude businesses from needing every version of physical hardware to view platform-native styling. Benchmarking Results Delphi Score: 5 (out of 5) Delphi’s RAD Studio IDE offers a What-You-See-Is-What-You-Get (WYSIWYG) design experience with drag-and-drop components for visual GUI design. The designed GUI can be viewed using native Android/iOS/Windows/macOS styling or custom styles and can simulate application appearances within mobile devices of varying screen sizes. Components can also be resized and have their properties adjusted in the Object Inspector without touching code, allowing rapid prototyping through visual development. Delphi also offers the ability for a developer to edit the UI using a simple YAML style language definition. Electron Score: 3 (out of 5) Electron lacks a native IDE but can be developed using text editors and command line tools, Electron doesn’t include a WYSIWYG design experience or drag-and-drop components by default. The UI can be created using HTML5 and CSS styling. Unless the developer chooses an IDE like Visual Studio, Electron applications must be compiled and run to view the project’s GUI. Download the complete whitepaper here

Read More

5 Ways To Make Use Of AI In Your Windows And Mobile Apps

AI is one of the most significant trends in the app development industry. We can witness that artificial intelligence is coursing into every regular activity of ours whether it is medicine, finance, production, cyber security through mobile and desktop applications. In this article, you will learn how to transform your Windows development as well as that of other desktops such macOS or Linux, or for mobile applications by harnessing the power of artificial intelligence using Embarcadero’s Delphi FireMonkey technology. Artificial intelligence empowers you and your business to achieve more by providing intelligent solutions to complex problems. Delphi is a strongly typed, event-driven programming language with a rich ecosystem of frameworks and components. With the Delphi FireMonkey framework, you can build native and cross-platform applications from a single code base, and you can easily target: Windows iOS Android macOS Linux Web   Should I use AI in my Windows and mobile apps? There is a trend in Microsoft Windows desktop applications towards using AI. For instance, the Cortana visual assistant can improve and become more helpful over time if you use it. Moreover, the Microsoft Office applications can learn what you do and give recommendations and fixes to your document. The Outlook email and calendar management app has recently incorporated some great use of machine learning to send out an innovative summary of tasks on which you have promised a follow-up. It’s becoming obvious that you should definitely consider using machine learning and AI in your apps to add powerful and innovative additional functionality. Microsoft also provides Cognitive Services that allow AI, specifically machine learning, algorithms to be deployed on the powerful and popular Azure cloud computing. You can easily connect your Delphi FireMonkey apps to these cognitive services.  By using cloud-provided AI APIs, you can spend more time building your business logic rather than creating the needed service from scratch. 1. Use Google Cloud AI APIs Google offers a variety of AI APIs that you can easily connect to Google’s online services and accomplish machine learning tasks in the cloud and fetch the data using REST endpoints. For instance, Google Document AI API is one such service which provides the ability to parse structured information from unstructured or semi-structured documents using state-of-the-art Google AI such as natural language, computer vision, translation, and AutoML. Google Vision AI API is another set of services that you can utilize to detect objects or extract text from the document with world-class accuracy. Here you can check out this tutorial which shows you how to deploy powerful AI vision tools on Windows and Mobile. 2. Integrate APILayer AI APIs APILayer is one of the market-leading services that offer a wide variety of productivity-boosting Web APIs, cloud-based micro-service applications for developers and companies of any size. LanguageLayer is part of the APILayer set, and it provides powerful language detection AI API. It supports 173 languages and you can access this service via REST API. Here is a tutorial where you can learn how to integrate this LanguageLayer API into your Delphi FireMonkey application. 3. Integrate DeepAI APIs You can integrate DeepAI APIs into your Delphi applications. So, you can use DeepAI API to process images and videos to get data about the demographics of people present, faces detected. Moreover, you even flag media that contains nudity so […]

Read More