From the blog

What Is Angular Material Component, And Why Does It Matter?

It is quite likely that you have come across Angular, whether you have been a developer for a long time or are a total novice. Originally created in the TypeScript programming language, it immediately earned a reputation as a game-changer for application development. Its numerous features, such as the exceptional ability to reuse code and construct programs for any deployment target, are highly sought after in the industry. Angular is well-known for its incredible speed, which is now the fastest is the maximum speed possible on the web platform today. It stands out because it gives developers complete control over scalability and includes features like Web Workers and server-side rendering. When utilizing Angular as the main framework, Angular Material Components are frequently utilized to build data-sensitive web apps. These components are carefully developed and tested to assure their viability and seamless interaction. Although Angular is excellent for developing web apps, it lacks any pre-built components, which presents a challenge for developers who cannot afford the time and effort of generating them from scratch. To overcome this, they must rely on the professional community. Sencha’s ExtAngular is one of the most important tools for developing web applications. It’s a terrific tool that allows developers to create apps with flawlessly harmonized components that are also professionally tested to assure quality. Read on to find out more about Angular components and how you can build stunning web applications without additional effort and hassle. What is Angular Material Component? To really comprehend Angular Material Components, we must first investigate the Angular framework and its restrictions. Angular takes pride in being one of the most popular JavaScript frameworks for developing Web apps based on components, but its capability is restricted by its limitations, the most notable of which is the lack of pre-built components. This generates a lot of frustration among developers who don’t want to go through the trouble of creating these components from scratch, which is where Sencha’s ExtAngular comes in. It enables you to create and construct a web application at breakneck rates, with no additional trouble or lost productivity.  It not only includes 140+ pre-built and pre-tested user interface components, but it also includes support for a wide range of Sencha state-of-the-art tools like Sencha Themer and Sencha Fiddle, which enhance the elegance and aesthetics of your app while keeping the design fresh and adaptable. Angular can be utilized on mobile platforms, giving you more flexibility and eliminating the need to create native Android Java or Apple iOS Objective-C or Swift apps. However, you now need to create your own app, and you don’t want to spin the wheel or start from scratch. As a result, ExtAngular is required since it may minimize development time while increasing productivity and the capacity to sell applications more quickly. Why Does Sencha’s ExtAngular Matter? Grid, tree grid, pivot grid, charts, D3 visualizations, trees, calendar, buttons, menus, and more are among the 115+ components included in ExtAngular for Angular developers. All of the components have been thoroughly tested and are intended to operate together. ExtAngular helps developers get apps to market faster while lowering integration and maintenance costs and raising the overall productivity. Let us discuss some of the prominent features of ExtAngular below. How Grids and Data-Driven Documents Package Enables Development of Visually Compelling […]

Read More

Extend TMS WEB Core with JS Libraries with Andrew: introduction

  Welcome to the first post in a new series for the TMS Blog, “Extend TMS WEB Core with JS Libraries with Andrew “.  In this ongoing series we’ll look at how to quickly and easily incorporate third-party JavaScript libraries into TMS WEB Core projects.  Each week will typically focus on a particular JS library and the problem it is trying to solve.  A sample project will be included to showcase some of its key features and how they can be integrated into TMS WEB Core. And some additional commentary will offer insight as to what it is like to work with the particular JS library as most of those to be featured in this series are used regularly in my own projects. For those new to TMS WEB Core or new to JavaScript, we’ll spend the rest of this first post covering a lot of the basics of what this is all about.   So. Many. JS Libraries. It is quite possible to develop fantastic 100% pure JavaScript/HTML/CSS web applications using just TMS WEB Core and the included components, just as you would expect with any other popular web frameworks. When it comes to extending a project with additional functionality beyond the included components, you’ve got options. You can of course write code yourself. You can use components from vendors like TMS Software and others that are specifically designed for TMS WEB Core.  Or you can tap into the huge reservoir of both open source and commercial JavaScript libraries.  On GitHub for example there at least several thousand such JS libraries covering everything from the simplest little CSS tweaks to hugely complex and involved APIs for machine learning.  If you’ve run into a problem developing your web application and need a bit of functionality that just isn’t there, there’s a pretty good chance someone has come along and made a JS library to address it.  Here’s a bit of an idea about the categories of JS Libraries that are available. Helpers.  Provide developers with shortcuts for common tasks.  JQuery and Bootstrap fall in this category. Assets.  Icons, fonts, themes and so on that are likely to make a big impact on the look and feel of your web application.  FontAwesome is an example.   Bootstrap comes with icons as well. Controls.  Interactive UI elements that provide functionality roughly equivalent to what a Delphi component might offer.  There are countless date/time pickers, for example FlatPickr. Tools.  Similar to Helpers, these are used to extend or otherwise enhance the components core controls that you are already using.  Interact.js adds drag+resize functionality to any control, for example. Services.  These include libraries for connecting to external services or communications, and libraries that help with sending e-mail and SMS messages, that sort of thing. Devices.  Typically these are APIs that allow for interacting with local devices or other hardware. Anything to do with Raspberry Pi, for example, would fall into this category. In this series we’re going to start out by focusing on those JS libraries that can help us craft better looking and easier to use web applications, so typically the first four categories. While the last two categories, Services and Devices, are hugely popular and important, they’re also very specific in nature.  Coverage of these would likely be far less about JS and TMS […]

Read More

The Next Big Thing in Native Windows Development

What, precisely, do we mean by native app development? What is a native user experience or native developer experience? What are the pros of native app development? Why has Native Windows development come storming back on center stage and become such a hot topic? We want to briefly talk about native app development and explain why you should get in with the In Crowd. What is a native app? Native applications are not only defined by the look and feel or fonts. Yes, if you follow these UI guidelines, it looks great and smooth. But if your app is running on Windows, it should behave like other native Windows applications, and if it is another platform, for example Android, it should behave like Android apps. The app needs to look visually cultivated it also needs to keep up with the users’ expectations of how it should behave and contain certain core functionality. It is a problem if it does not behave like the other apps, doesn’t comply with widely established system behaviors, or does not give the performance they need. Native apps are not just about look and feel, they need to be an all-round, first-class good citizen of the operating system environment.  Native user interface controls achieve compliance and help meet the users’ expectations because they follow the system and behave as it should be, largely by allowing the operating system to enable their functionality with minimal additional code on top. For instance, in our case, standard Win32 UI controls, like how they react to clicks and animations and how the shadows and fonts behave when there is a window resizing. We need this because users have subconscious anticipations – “muscle memory” – from the application. If it resizes and animates differently, you risk losing a star in an online review or, perhaps worse, having your application uninstalled and your reputation permanently dented which in turns creates a barrier to the adoption and success of any future applications you might develop. What other benefits are there to using native components in our applications? Now let’s see another side of native applications. Except for these UI/UX, native applications also utilize system functions and hardware technologies present on the target system or device. Native applications can access this hardware directly, which gives much higher performance than apps which use layers of abstraction and support code to achieve similar but inferior functionality. To really create native applications for Windows, your selected development tool should allow you to utilize the system-defined UI controls and libraries. For instance, Delphi with the Visual Component Library (VCL) is the easiest and most stable platform with maximum native power for Windows desktop app development. What is native app development? Now you know the meaning and benefits of native applications. The development process of native applications starts with selecting the proper framework or library. More than two decades ago, there was not much abstraction, variety, or choice of code libraries because the standard operating system APIs were basic and easy to work with them directly. This is no longer the case. Currently, we have Visual Component Library, FireMonkey, Universal Windows Platform, Window Forms, and others. These frameworks and libraries are handy because they have implemented layers of abstraction but making the right choice means picking ones which have a light touch without […]

Read More

An Introduction To A JavaScript Web Framework

JavaScript is a universal language that supports event-driven, functional, and imperative programming. Its versatility makes it useful on both the server and client-side of the application. As a result, it has a considerable market share, and it is often regarded as the language of the web. Developers initially used it only for client-side applications, but nowadays, it can be utilized on the server-side as well. Software frameworks are essentially an abstraction layer over the language to provide generic functionality while giving developers room to customize based on their requirements. Moreover, developers often prefer frameworks due to their adaptability. With the help of frameworks, developers can create responsive applications with minimal effort. The framework ensures uniform styling throughout the website. This article will expand on how Sencha can help you achieve more as a developer with JavaScript web framework and many other useful tools. What is Sencha? Sencha is a complete JavaScript-based ecosystem comprised of the JavaScript web framework and different tools that ease cross-platform web and mobile application development. The JavaScript framework contains over 140 high-quality and well-optimized components. As a result, Sencha helps you create high-performing, interactive, and visually appealing designs for your application. What Does Sencha Have to Offer? Here are some of the services and features Sencha provides: Does it have Lifecycle Management Tools? Sencha comes with Sencha cmd tools that provide lifecycle management libraries. You can use Sencha Cmd to optimize code and build applications. It provides scaffolding, code minification, production build generation, and other basic development functionality. Using modern web technologies, Sencha cmd tools allow you to create a near-native app experience. The package management system also comes with Sencha cmd. It helps you share the framework code and packages across multiple applications. The code generation can scaffold whole applications and broaden those applications with new MVC or MVVM parts. Sencha Cmd also provides a lightweight webserver to serve files from localhost if no hosting service is available. A powerful logging highlight also facilitates investigation. Can it Accelerate Application Development? Sencha Architect is a visual application builder that helps you create Ext JS applications in an intuitive environment. You can easily use each Ext JS part in your application. Sencha Architect also allows you to see what your clients will see as you build your application. It saves design time by eliminating the need to type most standard code. Boilerplate speeds up the development of both desktop and mobile applications. This is because adjusting Ext JS UI part properties and designs in a WYSIWYG window limits human errors common to manual coding. In addition, Sencha Architect comes with a wide range of customizable components such as D3, Calendar, Pivot Grids, and Exporter for modern and classic toolkits. Even if nothing fits your design, we still have you covered. That is because, with Sencha Architect, you can design custom components and even build your framework extensions. You can also choose from our massive library of extensions. Then there is Sencha Themer. Themer is the Sencha application theming tool. You can create and import themes from Themer into your application using Architect. You can also alter the themes you have imported inside the application to match your design theme. Who is using Sench Ext JS? One customer is Icube. They are an industrial digitization company in Switzerland, […]

Read More

The Ultimate Cheat Sheet On Windows 10 App Development

Today is an exciting and dynamic time to be a developer. Technology advances seem to have accelerated and, with this, our software projects seem to paradoxically expand and shrink simultaneously. They expand because more devices and environments are becoming available to them. They shrink because we tend to use the same tools for developing all variants of our work. Past developers could have a single-minded focus on a particular environment or toolset. In contrast, today’s developers have to consider so many things before starting their Windows 10 App Development journey. So, let us discuss some of the crucial points along that voyage of development. What is the history of your IDE/Framework? Knowing about history is important because historical mistakes, missteps, and abject failures might repeat themselves. As a developer, we invest a lot of resources, both physical and emotional, in a project. If fundamental tools like programming language, IDE, or frameworks drastically change overnight, we must rebuild, almost from scratch, wasting almost all our investment. This repeated rebuilding can – and mostly likely will – increase costs for our clients too, and they won’t be happy either. Delphi has a great history in this regard. Upgrading older projects to newer ones is so straightforward that we can do it in no time. In less than a week, in my work, we recently upgraded a 2003 Windows (VCL) version project to 2022 multiplatform (FMX) project. Our customer was happy and surprised too. Unfortunately, most other tools do not follow the same policy, resulting a tragic graveyard of abandoned projects. If this is growth, then what is a disaster? It is wise to search for the backward compatibility history of a tool before devoting yourself to it. What sort of longevity does the tool provide? What stability does it give when moving from one version of the tool to another in terms of compatibility? It’s important to ask these questions, because if a company abandoned backward compatibility in the past, it would also happen with you in the future, and then it will be too late. Also, if your IDE has no history, ask yourself, is it wise to invest in it heavily? Nobody wants to be the pathfinder, the early adopter who is sacrificed to ensure those who come along later benefit from their trials and tribulations. Why does compilation speed matter? A finished software project is a compilation of hundreds or thousands of iterations of build, test, debug cycles. Pascal, in general, and Delphi, in particular, are famous for high-speed compilation. The specific structure of a Pascal program and multilevel optimizations applied by Delphi gives RAD studio an extreme edge in compilation speed and executable production process. For example, in one typical test, Delphi compiled one million lines of code in under 5 seconds. This super-fast compilation speed can be your friend in hard times of late-night iterative debugging and the seemingly common deadline congestions of a product release date. How to distinguish between Low-Code hype and the real thing? Like all new jargon, many companies misuse NoCode/LowCode words in the software industry. Fortunately, it is easy to distinguish between real and over-hyped tools. Every tool geared toward novice users and non-programmers is a lousy option. Ultimately, you have to write code to push things to their limits or customize […]

Read More

Everything You Need To Use AWS SES Natively In Your Apps

Email seems so old now when considering all the messaging options available. It is old, 50+ years old! It’s been the lifeblood of many business processes and is still as important today as it ever was. AWS has a plethora of great services, but they can be a little challenging for Windows app development. With that in mind, the next release of Appercept AWS SDK for Delphi 11.0 includes support for Amazon Simple Email Service (SES). Amazon SES is a reliable, scalable, and cost-effective email service and can be used for marketing campaigns, notifying users, or transactional emails. Let’s see how we can send a simple email… program SendEmail; {$APPTYPE CONSOLE} implementation uses AWS.SESV2; var Client: ISESV2Client; Destination: ISESV2Destination; EmailMessage: ISESV2Message; Request: ISESV2SendEmailRequest; Response: ISESV2SendEmailResponse; begin Destination := TSESV2Destination.Create; Destination.AddToAddress(‘world@example.com’); EmailMessage := TSESV2Message.Create(‘Announcing…’); EmailMessage.Body.Text := ‘Hello, World!’; Request := TSESV2SendEmailRequest.Create; Request.FromEmailAddress := ‘sender@example.com’; Request.Destination := Destination; Request.Content.Simple := EmailMessage; Client := TSESV2Client.Create; Client.SendEmail(Request); end. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 program SendEmail;   {$APPTYPE CONSOLE}   implementation   uses   AWS.SESV2;   var   Client: ISESV2Client;   Destination: ISESV2Destination;   EmailMessage: ISESV2Message;   Request: ISESV2SendEmailRequest;   Response: ISESV2SendEmailResponse;   begin   Destination := TSESV2Destination.Create;     EmailMessage := TSESV2Message.Create(‘Announcing…’);   EmailMessage.Body.Text := ‘Hello, World!’;     Request := TSESV2SendEmailRequest.Create;   Request.Destination := Destination;   Request.Content.Simple := EmailMessage;     Client := TSESV2Client.Create;   Client.SendEmail(Request); end. This is just the start. Why not start your next email marketing campaign with Amazon SES with tools written in Delphi? Or, seamlessly integrate email into your existing business applications built in Delphi? Appercept AWS SDK for Delphi is available exclusively with active Enterprise or Architect subscriptions for Embarcadero Delphi or RAD Studio. You can install the SDK through the GetIt Package Manager within Delphi or RAD Studio if you have an active subscription.

Read More

Data analytics & chart visualization in Delphi

Google Analytics helps to identify user browsing behavior. It is a powerful tool to analyze & monitor data and eventually adapt the content on your website to make sure users have a better experience. The purpose of this blog post is to capture realtime page visits on your website, analyze which browser is used and visualize it in a pie chart. The component capable of doing this is the TTMSFNCChart. At the end of this blog post, a sample is provided which allows you to see the code to retrieve the data from Google Analytics and how to configure the chart to display the results. Note that this sample also makes use of the component TTMSFNCCloudGoogleAnalytics which is part of the TMS FNC Cloud Pack. Retrieving the data After setting up Google Analytics, and setting up a connection via the TTMSFNCCloudGoogleAnalytics component, we call RetrieveData which asynchronously retrieves the data we are looking for. The code to properly setup the required data fields depends on a series of request parameters which are shown in the code snippet below. procedure TGoogleAnalyticsForm.GetReportData; begin … TMSFNCCloudGoogleAnalytics1.RequestData.UserMetrics := UM; TMSFNCCloudGoogleAnalytics1.RequestData.PageMetrics:= PM; TMSFNCCloudGoogleAnalytics1.RequestData.PlatformOrDeviceDimension := DM; TMSFNCCloudGoogleAnalytics1.RequestData.SystemDimension := SM; TMSFNCCloudGoogleAnalytics1.RequestData.PageDimension := PGM; TMSFNCCloudGoogleAnalytics1.RequestData.TimeDimension := TM; TMSFNCCloudGoogleAnalytics1.RetrieveData(StartDate, EndDate, MaxResults); end; Executing this request will display results in a VCL TStringGrid. Note that we can see the amount of time the user spends on each page and which browser and resolution is used. This is realtime data! Visualizing browser usage Whilst the grid shows the data after retrieval, it doesn’t give an easy visual interpretation. You need to look carefully which browser is used, which page is visited, etc .. whilst scrolling through the grid. This is where TMS FNC Chart comes into play. Dropping an instance of TTMSFNCChart on the form immediately gives an idea of its capabilities. For this particular sample, we will configure a pie chart, which is ideal for displaying percentage numbers. We start by analyzing the browser column inside the grid, and count the duplicate entries. d := TDictionary.Create; … for I := 1 to sgReport.RowCount – 1 do begin b := sgReport.Cells[6, I]; if d.ContainsKey(b) then d[b] := d[b] + 1 else d.Add(b, 1); end; … Then, once we collected the data inside the dictionary, we can start configuring the TTMSFNCChart instance. Step 1 is to clear the default series, add a new series and set the correct type. var p: TTMSFNCChartSerie; … TMSFNCChart1.BeginUpdate; TMSFNCChart1.Clear; p := TMSFNCChart1.Series.Add; p.ChartType := ctPie; TMSFNCChart1.EndUpdate; … Step 2 is to add points to the pie series. This is done by looping through the dictionary keys, which actually represent the browser, and retrieve the total value. Adding points in the chart is done with one of the multiple overloads, depending on the chosen type. For a pie chart, we use one of the AddPoint overloads, specifically to pass a value, color and a legend text. for k in d.Keys do begin if d.TryGetValue(k, v) then begin c := gcRed; if ci < Length(ca) then c := ca[ci]; p.AddPoint(v, c, Format(k + ' %.1f %%', [v / t * 100])); Inc(ci); end; end; The default look and feel of the pie chart is sufficient for displaying the results, but we also want to visualize the actual values in a separate legend. In TMS FNC Chart each visual element is fully customizable, via […]

Read More

View From The Tap – Bulgarian Firm Supports Country’s Market Leaders With Delphi And InterBase (Case Study)

Using InterBase and Delphi, Bulgarian software company Bonev Soft (BSoft) has made financial management and tax payments painless for the country’s industry leaders for over 20 years. BSoft’s flagship software, AJUR®, is an integrated management system for Windows very popular with government and non-government organizations in Bulgaria and around the world, across a number of vertical industries – from manufacturing and financial services through to power generation. More than 5,000 BSoft customers use AJUR to provide financial reports to tax authorities and various other stakeholders, and closely manage their supply chains. Among them are many of Bulgaria’s industry leaders. The View From The Tap Case Study explores how BSoft solved its scaling and efficiency challenges using a highly effective combination of Delphi and InterBase. Read The Case Study

Read More

Are You Getting The Most Out Of Your Windows App Development?

Windows 11 marks a visual evolution of the Windows operating system. As Windows moves forward, customers set a higher bar for desktop applications and massive demand for Windows app development. These customer expectations can be: Good performance on the low-cost app Native app user experience Complete matching with the latest design principles Support for modern window features like window snaps Support for shell integration or other native features support Easy to distribute on Microsoft Store Easy access to Windows App SDK or any other native libraries Great applications always meet these requirements.  Embarcadero Delphi Are you taking the right steps to build visually appealing modern Windows 11 Apps? While there are dozens of different technologies to build Windows applications, only a few of them offers all these capabilities built-in. For instance, Microsoft offers tools to make modern Windows apps with all the recent updates and features. But there is one more leading technology that has been thriving in Windows desktop development for more than 27 years now by providing the latest and freshest features and a unique graphical user interface development platform. It is Embarcadero Delphi! Since the beginning of Delphi with its Visual Component Library, it has been thriving in the Windows desktop app development industry. It offers hundreds of visual and non-visual components to build apps 5x or 10x faster than other GUI development tools. Delphi Cross-Platform Native App Development Are you using the latest Common Controls for Windows app development? Windows 11 brings beautiful UI innovations. By using new standard controls, you get the benefits of compatibility and accessibility for free. With Delphi and Visual Component Library, you can efficiently utilize modern controls. There are dozens of styles to quickly turn your futuristic UI to Windows 11 UI or even something unique. 2D & 3D Game Development with Delphi Why should you select Delphi for Windows app development? Delphi and its RAD Studio IDE profoundly improve developer productivity and product time-to-market. Not only that, developing one codebase to reach every desktop and mobile platform streamlines successive escapes and product maintenance. Delphi with Visual Component Library and FireMonkey framework gives you the best environment to quickly build any application, not only for Windows app development but also for cross-platform to Macs, iPhones, iPads, Linux computers and more.  WPF with the .NET framework offers small teams native entry to Windows applications and solid IDE but struggles to match Delphi’s productivity, IP security, and performance. Also, when you compare Electron, it gives a free alternative to Delphi and WPF and cross-platform capability like Delphi. Still, when it comes to productivity and security, it misses Delphi. Find out which is the best technology for Desktop Platform Moreover, according to that research paper, Delphi’s build time is better than Electron and WPF .NET for database connectivity. Besides, there is a clear indication that Delphi’s FireDAC database engine and network tools abstract layers of operations better than NodeJS, reducing developer effort and opportunities for error. Figure 2 – Delphi, WPF, and Electron comparison Are you using the best UI framework for Windows 11 Development? Compared to Microsoft’s technology stack, like C# WPF, or UWP, going with Delphi FireMonkey is one of the most reliable ones. It is not that they are unreliable, but they have a different approach to building the blocks and […]

Read More

Upcoming free webinar: Getting started with TMS FNC Maps

Did you know that on April 22, we celebrate the 2nd birthday of TMS FNC Maps? In full first COVID19 lockdown, we successfully launched TMS FNC Maps v1.0 after many man-months of development work. It is since its launch, a product that is unmatched in flexibility and features. TMS FNC Maps works fine for your VCL Windows applications, your FireMonkey Windows, macOS, iOS, Android and Linux applications, your TMS WEB Core web client applications, your Lazarus applications… You can use TMS FNC Maps from 4 IDEs: Delphi, C++Builder, Lazarus and Visual Studio Code. And with a single property switch, you select between Google Maps, Bing Maps, Here Maps, OpenLayers, Azure Maps, MapBox, Apple MapKit, TomTom maps.   In the past 2 years, we released non-stop a wave of new versions offering new features, improved performance and more flexibility.  Free webinar If you haven’t discovered our powerful TMS FNC Maps product yet, here is your chance to participate in our upcoming free webinar “Getting started with TMS FNC Maps“. On the agenda of this upcoming webinar on Apr 13 at 3PM UTC (17h00 CEST) we have: Why TMS FNC Maps: why did we create this product Introduction to included components, services, supported frameworks and IDEs and architecture Basic mapping techniques: location, bounds, pan, zoom, controls, views Working with markers: add markers, marker properties and custom markers Graphics on maps: circles, rectangles, polylines, polygons, HTML elements on maps + helper functions Geolocation & reverse geolocation: services, sync and async handling Directions: get directions with optional waypoints Overview of other advanced features Register for our free live interactive webinar on TMS Web Academy now! Read more Meanwhile, you can already prepare for the webinar and read all about TMS FNC Maps: TMS FNC Maps Hands-on video v1.0 TMS FNC Maps book availability Release v1.1 : Directions, Google Maps marker clusters Release v1.2 : Elevation, GPX import/expert, custom tile servers in OpenLayers Tile Layers support, Plus Codes, GPX export Release v1.3 : Google streetview support, toll roads settings  Release v1.4 : Apple MapKit support, integrated directions, map rotation Release v1.5 : static map image, toll cost calculation, timezone information Helper functions: distance calculation and working with Plus Codes Google heat maps Release v2.0 : route calculator & route editing, geodesic polylines Release v2.1 : Using overlay views Free geocoding & reverse geocoding with OpenStreetMap Nomatim Free route directions with OpenRouteService Release v2.4 : Google Places, address autocompletion & polyline symbols Directions and geocoding with GeoApify Add custom controls to your map with TMS FNC Maps for Delphi Calculate square meters of an area Detect if a point is in a coordinate based polygon in Delphi  Register now & participate We look forward to meet you online in our live webinar “Getting started with TMS FNC Maps” on April 13 at 3PM UTC (17h00 CEST). Learn about TMS FNC Maps and have all your questions answered during the webinar! Register here

Read More