From the blog

Powerful Business Management iOS & Android App

Wood and timber has been a flourishing industry for thousands of years. Some of the oldest traces of early mankind include evidence that we were using wood to make our lives easier; as tables, for leverage on the slabs of Stonehenge, bridge pillars in ancient muddy causeways. Even arrows to helps us obtain meat and food bowls in which to prepare and consume it. The dragon-headed Viking long ships and the more curlicue Mayflower which braved towering seas, the vast beams of old English Tudor houses, and even the great William Shakespeare’s original Globe theater were all made from this versatile material which, quite literally, grows on trees. It’s a relationship which has stood the test of time with very little change while the world around it began to buzz with the sound of electricity and engines. Into this dominion of wood and its products there is room for some modernity. The business of wood, like any, has bills to pay and inventory to manage and what better way to do that down in the wilds of a lumber yard than to have a handheld mobile device which can go where more clunky desktops and laptops might be a hinderance rather than a help. 3LOG LIMS integrates the LIMS System into easy, powerful mobile access LIMS is powerful business management software for the timber and wood products industries. As stated by the developer, “It combines the features of a log or timber accounting system with support for silviculture, wood procurement, contractor payables, vendor and contract management, log and wood products inventory, sales and consumption, business planning, querying, reporting, and accounting. LIMS has proven its capabilities at over 500 sites in North America. Companies from single mills to big names in the forestry industry are using 3LOG software every day. With LIMS, you can configure the system to work the way your company works, and then easily add new business activities without additional programming. For example, if you decide to start trading logs or fiber from a mill that previously only consumed wood, you simply add the customer and your contract and accounting rules, and start entering transactions. The features are already in the system, without additional programming.” Of course, it’s written using RAD Studio Delphi with the flexible yet powerful FireMonkey FMX framework. The 3Log Website Website 3LOG LIMS Apple App Store 3LOG LIMS Google Play 3LOG LIMS Screenshot Gallery RAD Studio Delphi makes writing cross-platform apps much easier and allows you maximum code-reuse to harness the full native power of your user’s devices. Why not download a trial today?

Read More

Framework for creating modern web applications

TMS WEB Core is our framework for creating modern web client applications based on the modern SPA web application architecture. You can develop your web client application using the famous Delphi efficient & productive RAD component based methodology and the fully object oriented and strongly typed Object Pascal language. TMS WEB Core can be used on 3 IDEs: Delphi, Lazarus and Visual Studio Code. TMS WEB Core comes with perpetual license and 1 year of FREE updates & support. Subscriptions can be extended for another year at 70% discount! Get full access to: Web client development from Delphi or the free Lazarus & Visual Studio Code IDE Classic web client apps Progressive web applications Electron or Miletus based cross-platform desktop applications (Win/macOS/Linux) Supports FNC components 70% discount for renewals Yearly renewal only 115 EUR* instead of regular 395 EUR. Full online technical support through TMS Support Center. *The renewal price is 70% discount applied to the new license price at the moment of renewal Act now: Find out more about our Web framework and get your license today! NOTE: If you purchase TMS WEB Core, you get an additional discount of 20% on:

Read More

Modernize Your JavaScript Grids With Sorting, Grouping, And Filtering

When it comes to displaying information there are few JavaScript components as important, or as useful as the Grid. It is one of the primary tools developers use to display, and, more importantly, allow users to view, sort, and interact with large data sets. As a tool, JavaScript Grids allow developers to modernize and accelerate business processes by simplifying the way their users work with data. Grids allow us to render large sets of information without lagging or freezing. They also help considerably reduce the amount of time we spend managing our data. In this article, we will show you how to improve your JavaScript Grids with sorting, grouping, and filtering using Sencha Ext JS. Now, let’s dive in. What is Sencha Ext JS? Sencha Ext JS is a powerful framework for developing cross-platform web and mobile applications. It supports over 150 UI elements, including grids, pivot grids, and D3 adapters. It helps you to develop data-intensive apps quickly and conveniently. How can I Turbocharge my JavaScript Grids with Sorting? One of the reasons the grids are so necessary is that they allow us to determine exactly how data is viewed. With Ext JS Grids, your options are almost unlimited — you can sort your data either by configuration or under program control. You also can perform both single-column and multi-column sorting. Here is an example of single-column sorting: To create the sorting shown above, you have to follow these steps: 1. First, you have to specify the view of the app. Then extend Grid, and specify title and items. Ext.define(‘MyApp.view.Main’, { extend: ‘Ext.grid.Grid’, title: ‘Reykjavik Flight Departures’, items: [{     docked: ‘top’,     xtype: ‘toolbar’,     items: [{         text: ‘Sort on destination’,         handler: function(button){             // Sort under program control             button.up(‘grid’).getStore().sort(‘to’);         }     }] }], 2. Next, you have to sort the data via configuration. store: {       // Sort via store configuration     sorters: [{         property: ‘airline’     }],       type: ‘store’,     autoLoad: true,     fields: [{name: ‘date’,type: ‘date’,dateFormat: ‘j. M’}],     proxy: {type: ‘ajax’,url: ‘departures.json’,reader: {rootProperty: ‘results’}} }, 3. Then you have to define the columns. For more information on how to do this check the source code. 4. Finally, add this code: Ext.application({ name: ‘MyApp’, mainView: ‘MyApp.view.Main’ }); Source Code: You can play with the code on Fiddle. Next, let’s look at multiple-column sorting. All you have to do to achieve this is add multiple sorters via configuration. Here is an example: Source Code: You can find the source code right here. How can I Turbocharge my JavaScript Grids with Grouping? Grids have a grouped config that allows you to conveniently group columns. Here is an example of how to make it happen: To create the grouping shown above, simply follow these steps: 1. Specify the view of the app and title. Also, extend the Grid. Ext.define(‘MyApp.view.Main’, {     extend: ‘Ext.grid.Grid’,     title: ‘Reykjavik Flight Departures’, 2. Set grouped to true. grouped: true, 3. Now, you have to specify the columns. You can find everything on the source code. 4. Next, you have to define the store. store: {         type: ‘store’,         autoLoad: true,         fields: [{name: ‘date’,type: ‘date’,dateFormat: ‘j. M’}],         proxy: {type: ‘ajax’,url: ‘departures.json’,reader: {rootProperty: ‘results’}}     }     }); 5. Then add this code: […]

Read More

The State of Mobile App Security 2021

Published June 24, 2021 WRITTEN BY ED TITTEL. Ed Tittel is a long-time IT industry writer and consultant who specializes in matters of networking, security, and Web technologies. For a copy of his resume, a list of publications, his personal blog, and more, please visit www.edtittel.com or follow @EdTittel The ever-increasing popularity and use of smartphones dwarfs that of more conventional computing devices, such as desktop, laptops, tablets and so forth. Here are some numbers to put things in perspective: according to Statista the total number of mobile devices should reach 17.71B by 2024, up from just over 14B such devices in use in 2020. The same source puts the size of the installed base of PCs worldwide at 1.33B in 2019, with a slight decline over the period from 2013-2019. Interestingly, Microsoft recently claimed 1.3B “active Windows 10 users” which tells us the overwhelming majority of PC users seem to favor their operating system. Putting Mobile Devices Into Proportion The real impact of this comparison, of course, is that mobile devices outnumber PCs by over an order of magnitude. In addition, that balance continues to swing to favor mobile devices ever more firmly. Mobile devices run mobile apps. Indeed this simple observation makes mobile app security crucial, simply because most of the human race (mobile devices currently outnumber humans by almost 2 to 1) uses such devices and the apps to go with them to communicate, access the Internet, and get on with the business of living. The Continuing Sad State of Mobile App Security Even as mobile apps keep proliferating, and more and more users rely on them to learn, work and play, the state of mobile app security can only be described as deplorable. On the one hand, App Annie reported that mobile app usage grew 40% year-over-year in Q2 2020 as compared to the preceding year. On the other hand, security firm Synopsys entitled its most recent survey Peril in a Pandemic: The State of Mobile App Security. The company found that significant causes for concern about the security in mobile apps were both abundant and alarming, primarily owing to three major factors: Commonly used apps that displayed well-known open source vulnerabilities Unsecured and unencrypted sensitive data in mobile application code that present potential points for information leakage and unwanted access and disclosures Frequent assignment of higher levels of access and permission to mobile apps than the “principle of least privilege” (PLP) would allow All of these unsafe programming or administrative practices leave mobile apps overly open to attack and potential compromise. The report analyzed over 3,000 mobile apps and reported some scary statistics – namely: 63% of apps included known security vulnerabilities, with an average of 39 vulnerabilities per app, of which 44% were rated “high risk,” 94% of which had publicly documented fixes, and 73% of which has been reported two or more years ago. Thousands of sensitive data items were exposed in the application code, including over 2K passwords, tokens and keys, over 10K email addresses, and nearly 400K IP addresses and URLs. Use of overly powerful device permissions showed just over 33K instances of normal permissions, with just over 15K of sensitive permissions, and just over 10K of permissions “not intended for third-party use.” What Can (and Should) Mobile Developers Be Doing? […]

Read More

Powerful Enterprise-Grade Real-Time Streaming For IoT

Did you know how easy it is with RAD Studio Delphi to add powerful, enterprise-grade real-time streaming to and from IoT devices? We’re going to show you how to get your apps to talk to IoT devices securely and in a robust fashion in just a few easy steps. IoT and Delphi – linking the “internet of things” IoT is very popular these days and the number of connected devices are growing at unprecedented rate. We can find “things” connected to the internet and used for all sorts of applications in our homes, offices, industry and commerce. In fact, they’re so ubiquitous we sometimes don’t even notice them and the form factor they take can be non-obvious too, taking such ephemera as ‘smart’ dog collars, luggage tags, or even automated egg monitors in chicken farms. These physical devices usually have integrated software to allow them to communicate with each other and of course to provide useful information to humans. Many are designed to do that with little to no human intervention. I took a look at a small internet search for “connected devices” to see what would come up: Google Home Voice Controller Amazon Echo Plus Voice Controller Amazon Dash Button August Doorbell Cam August Smart Lock Kuri Mobile Robot Belkin WeMo Smart Light Switch Footbot Air Quality Monitor Flow by Plume Labs Air Pollution Monitor Nest Smoke Alarm IoT devices have a common theme IoT devices have two things in common: Capability to connect to the internet. After all, it’s the “I” in “IoT”. Having some inbuilt technology to provide their functionality such as sensors, functional software and the connectivity. The market for IoT devices is increasing surprisingly. We have now reached the stage where there are more IoT devices than humans. What is IPWorks IoT? IPWorks IoT is a light-weight library which you can use in your Delphi and C++ builder applications to easily integrate IoT communication protocols. It supports all of the common protocols. IPWorks has a long history and has been a very reliable framework for over 25 years now. These IoT components are based on those IPWorks framework so you don’t have to worry about their security and reliability. Another great feature is the components do not depend on any external libraries or similar dependencies. Also the components are thread safe which is an added bonus when dealing with multiple devices with potentially simultaneous flows of real-time data. The icing on the cake is that IPWorks has a great active online knowledge base. Where can I get IoT components for Delphi? You can get IPWorkis IoT from Getit libraries: https://getitnow.embarcadero.com/trial-ipworks-iot-2020-delphi-edition/ How do I implement MQTT with IPWorks IoT? MQTT stands for MQ Telemetry Transport. MQTT is the OASIS standard for IoT messaging. MQTT is basically designed for low resources scenarios such as microcontrollers. MQTT use less bandwidth than other protocols such as HTTP. Message headers are smaller and the overhead in sending/receiving them is correspondingly lightweight too. MQTT is bidirectional. Also it allows message broadcasting. Messaging is very reliable. There are three levels of QoS. At most once (0) At least once (1) Exactly once (2) MQTT is very useful in unreliable networks. With MQTT persistent sessions, you can reduce the bandwidth and response time. Also you can setup TLS and transfer data securely. IPWorks […]

Read More

Introducing TMS XData Query Builder and more!

We’re excited to announce TMS XData 5.2 version with several new great features. TMS XData is the more straightforward way to take your Delphi app to the cloud, allowing you to create secure, robust REST servers along with a huge ecosystem around it. Here are the major features in this release, which also includes several minor improvements and bug fixes. XData Query Builder XData allows you to easily query entities from automatic entity set endpoints using a full query syntax. For example, to query customers which name is “Paul” or birthday date is lower then August 1st, 1940, ordered by name in descending order, you can write a code like this: Customers := Client.List(‘$filter=(Name eq ”Paul”) or (Birthday lt 1940-08-01)&$orderby=Name desc’); But now you don’t need to worry to write the raw query syntax anymore. The new XData Query Builder allows you to build such filter using a fluent interface which already does some validation (like checking for correct property names) before the data is sent to the server: Customers := Client.List( CreateQuery .From(TCustomer) .Filter( (Linq[‘Name’] = ‘Paul’) or (Linq[‘Birthday’] < EncodeDate(1940, 8, 1)) ) .OrderBy('Name', False) .QueryString ); You can build logical expressions and projections in a similar way you would do with TMS Aurelius criteria. Receive DTO objects in URL query string Service operations can now receive DTOs (Delphi objects) from the query string of the request URL (as long the DTO only have properties of scalar types). In this case, each DTO property will be a separated query param. Suppose you have a class TCustomerDTO which has properties Id and Name, then you can declare the method like this: [HttpGet] function FindByIdOrName(Customer: TCustomerDTO): TList; And have your Customer parameter be received from a request URL like this: GET /CustomerService/FindByIdOrName?Id=10&Name='Paul'. XData queries in service operations Now, in addition to send queries to automatic CRUD entity set endpoints, you can also benefit from XData query mechanism in service operations. You can now easily receive and process XData query syntax like $filter, $orderby, $top and $skip in service operations, even for DTOs, and create Aurelius criteria from it. You can declare a service like this: type IMyService = interface(IInvokable) [HttpGet] function List(Query: TXDataQuery): TList; Which means clients can now invoke the endpoint passing the same $filter, $orderby, $top and $skip parameters, like this: GET /MyService/List/?$filter=Name eq 'Foo'&$orderby=Name&$top=10&$skip=30 Or, of course, passing the raw filter string with TXDataClient: Customer := Client.Service .List('$filter=Name eq 'Foo'&$orderby=Name&$top=10&$skip=30'); Or even using the brand new XData query builder fluent interface: Customer := Client.Service.List( CreateQuery.From(TCustomer) .Filter(Linq['Name'] eq 'Foo') .OrderBy('Name') .Top(10).Skip(30) .QueryString ); From server-side, you can create an Aurelius criteria automatically from the passed XData query: function TMyService.List(Query: TXDataQuery): TList; begin Result := TXDataOperationContext.Current .CreateCriteria(Query).List; end; Not only that, you can even create a criteria from a query based on a DTO object: function TMyService.List(Query: TXDataQuery): TList; begin Result := TXDataOperationContext.Current .CreateCriteria(Query, TCustomerDTO).List; end; In the example above, even though you are creating a criteria for the TCustomer class, the query will be validated based on the TCustomerDTO class. This means XData will only accept queries that use properties from TCustomerDTO. For example, if the filter string is $filter=Status eq 2, even if the Status property exists in TCustomer, if it does not exist in class TCustomerDTO the query will not be accepted and an error "property […]

Read More

Turbocharge Your Business Process Form Input Fields With Ext JS

Forms are a vital part of any digital product that we see today. They are a great way to interact with the users and record their input. They also play a significant role in capturing valuable user feedback as well. Due to its benefits and use cases, many application developers look for quick and easy ways to create business process forms and focus more of their energy on implementing business logic over the design. In this blog post, we’ll look at how we can make use of Sencha Ext JS and quickly create impressive process forms for our own use cases. Which types of fields are available for creating forms with Sencha Ext JS? Sencha Ext JS has an entire namespace Ext.form.field dedicated to providing form controls. It has a standard set of field types that you can use to create an end-to-end form panel. These field types include Checkbox, ComboBox, Date, Display, File, Hidden, HtmlEditor, Number, Radio, Text, TextArea, and Time. For detailed information about these fields, check out their individual documentation. How can I do validations based on field types? Client-side validations are equally important as server-side schema and data validations. They help in the identification of incorrect or insufficient information before making API calls to the server. Hence, resulting in lesser network traffic due to correct API calls. Sencha Ext JS supports two types of validations namely built-in and custom validations. Ext JS has its own set of apparent validation rules for some field types. For instance, in a Date field, if incorrect data is entered which can not be actually converted into the Date instance, Ext JS internally detects it and provides meaningful hints and error messages for the user to rectify their data. With Ext JS, it is fairly easy to change the location of the error message. The following code snippet will move the error message from the default tooltip to a piece of text under the field itself. { xtype: ‘datefield’, fieldLabel: ‘Date of Birth’, name: ‘birthDate’, msgTarget: ‘under’, // location of the error message invalidText: ‘”{0}” bad. “{1}” good.’ // custom error message text } The resulting error message will look like follows. While built-in validations are smooth, straightforward, and time-saving, they can be used every time with every field type. Some validation requirements cannot be met using these built-in validation rules. The simplest way to implement a custom validation is to use the Text Field’s regex configuration to apply validation rules and the maskRe configuration to limit which characters can be typed into the field. Following is an example of a Text Field that validates a time. { xtype: ‘textfield’, fieldLabel: ‘Last Login Time’, name: ‘loginTime’, regex: ‘/^([1-9]|1[0-9]):([0-5][0-9])(sm)$/i’, maskRe: ‘/[ds:amp]/i’, invalidText: ‘Not a valid time. Must be in the format “12:34 PM”.’ } The best part about Ext JS is that it allows you to create reusable validation classes that you can use in your application multiple times without duplicating the code. Following is an example of a validation class that does exactly the same thing i.e. it validates time, but with reusable configurations. // custom Vtype for vtype:’time’ var timeTest = ‘/^([1-9]|1[0-9]):([0-5][0-9])(sm)$/i’; Ext.apply(Ext.form.field.VTypes, { // vtype validation function time: function(val, field) { return timeTest.test(val); }, // vtype Text property: The error text to display when the validation function returns false timeText: ‘Not […]

Read More

[Webinar] Deciphering the Enigma of Project Upgrades

Embarcadero’s users understand the scalability and stability of C++ and Delphi programming, and depend on the decades of innovation those languages bring to development. Ninety of the Fortune 100 and an active community of more than three million users worldwide have relied on Embarcadero’s award-winning products over the past 30 years. Icons by Icons8.com. © 2020 EMBARCADERO INC. ALL RIGHTS RESERVED

Read More

Add The Powerful Angular Web Framework To Your Delphi Apps

Angular is an extremely popular and powerful web application design framework. It’s a development platform for creating highly efficient and sophisticated single-page apps. Angular is built on TypeScript which is a strongly-typed super-set of JavaScript. The TypeScript framework shares a parentage with Delphi since the project is headed by Microsoft’s Anders Hejlsberg who we all know better as the original creator of Delphi. Anders is still very active in the TypeScript project. TypeScript was designed to overcome some of the shortcomings of JavaScript and in particular to try and use the lessons learned with Delphi’s superb type system to help prevent very common and subtle errors which crop up frequently in JavaScript when developers accidentally misuse an object. What sort of features does Angular include? It’s a component-based framework for building scalable web applications. TypeScript has a collection of well-integrated libraries that cover a wide variety of features, including routing, forms management, client-server communication, and more TypeScript has a suite of developer tools to help you develop, build, test, and update your code With Angular, you’re taking advantage of a platform that can scale from single-developer projects to enterprise-level applications. Angular is designed to make updating as easy as possible, so you can take advantage of the latest developments with a minimum of effort. Best of all, the Angular ecosystem consists of a diverse group of over 1.7 million developers, library authors, and content creators. What can we do with Angular and Delphi? Of course many things we can do using Delphi, one of them is by serving Angular application using it, so let’s create simple web application using Angular. Here are the steps: Running Angular with Delphi Run application and point your browser to http://localhost:8080/index.html , you should see something like the image below: Easy isn’t it ? Please check updated code here https://github.com/checkdigits/horse-API-Demo

Read More

Visualize Our Astounding Planet’s Journey Around The Sun

No matter how big, successful or important we may, or may not, become in our lives we are all just tiny ants in a vast Cosmos. It’s humbling and useful to remember when you’re having a bad Monday or a terrific Tuesday that we’re each just one of 7.5 billion people hurtling around the Sun. That circuit of the Sun, of course, has fascinated humankind for thousands of years, provoking ancient British Iron Age people to build Stonehenge and Egyptian pharaohs to worship it as the deity Ra. In the English language we even have a day of the week named after it. Our whole wide world in the palm of your hand So with this solar preoccupation it’s perhaps no surprise that there is a striking mobile app from Belgian developer MICRI Consult based in Oostende which helps us to visualize the Earth, its position in space relative to the Sun and how the shadow of night glides across our globe’s surface. It’s at once both a terrific teaching aid for children and adults alike, a useful reference for the physics and astronomical data involved and a beguilingly addictive game too. That’s a pretty clever trick to pull off in a mobile app! How is this native Android app produced? Written in the richly powerful cross-platform FireMonkey FMX framework using RAD Studio Delphi, the Earth Positions app really helps us picture anything we could ever want or need to know about the relationship between the Sun and our blue planet home. Learning is made more fun through clever use of educational games and smooth, rich video animations to engage little learners and the bigger ones too! Great stuff by MICRI Consult What does the Earth Positions app do? The app has three main feature animations The Geographical game, where you have to guess a location on a 3D-earth, which rotates and tumbles to display that location in the middle. This game contains 4 levels (beginner, skillful, advanced and expert), 5 continents (Africa, America, Asia, Europe and Oceania) and 5 groups (capitals, large cities, airports, towns and other). Users can get up to 3 hints and depending on the level, you may have to choose between 3, 6, 9 or 12 possibilities. It contains more than 3000 locations, of which 243 capitals and 108 large cities. Day and night, showing the shape of the night over the earth for any given date and time. It also shows the time at different earth positions and the city lights of the capitals and large cities at night. At the start, the animation shows the current day, but you can select any date to observe how shape of the night changes during the seasons, e.g. March 21, June 21, September 21 and December 21. The earth orbiting around the sun, showing the actual date for each position, the seasons and the special orbit positions of the earth. You can also select any date to indicate it on the orbit. Google Play Earth Positions Screenshot Gallery Do you want to produce a beautiful app with high-performance, native power – RAD Studio can help you do it. Why not download a trial today?

Read More