Noutați

How Can You Develop Apple Apps On Windows

So, what do you need for Apple app development on Windows? What if you could use a single IDE instead of combining different IDE software or tools from different vendors that will take more space and resources from your workstation, potentially all working in different ways which will add massively to your learning curve? What you need is a cross-platform development like Delphi which can create applications for Windows, macOS, Android, iOS and Linux, all from the same single codebase and in the same IDE. Delphi offers a native development environment that works efficiently on the Windows OS and can deploy apps to Android, iOS, macOS, Linux, and of course, Windows. Including Delphi what you need is a macOS device—either you get a real one or rent it in the cloud. And if you are using a Windows device, you will have to go with the latter. Alternatively, you can use one of the VM solutions like Parallels to run Windows and Delphi on a macOS device. What is Delphi, really?  Delphi is one of the fastest ways to write, compile, package and deploy cross-platform native applications on Windows, macOS, iOS, Android, and Linux. In our case, we are working with Windows, so Delphi harnesses the power of its cross-platform FireMonkey framework to allow you to write Apple software on Windows hardware.  The commonplace argument on similar IDEs being inefficient or not as ‘smart’ as other Windows tools for developers may cross your mind. However, note that comparing Delphi with others is like calling a ‘c’ function in a java programming—Delphi is 5 times faster in building native apps with one codebase for Windows, Android, Linux and Apple Operating systems (iOS, macOS). And its latest version, Delphi 11.1 has newer, better features. What are the features of Delphi and what are the “7 steps to cross platform development success”? 1. Design an alluring desktop and mobile app user interface  Use Delphi’s award-winning VCL framework for Windows and the FireMonkey (FMX) visual framework for cross-platform responsive UIs. Enjoy the new high-DPI compatible IDE on 4k+ screens. Use VCL Styles at design time! Prototype stylish UIs even faster by seeing immediately at design time how your styled forms and controls will look when running. FireMonkey design-time guidelines: Prototype faster with visual lines and enhanced margin and padding support. Multi-monitor and multi-window improvements: design and edit code for the same form at the same time in multiple windows. Rapidly design your master responsive UI layout once, then easily customize it. platform-and-device-specific views without duplicating design effort. Use the visual design menu to easily drag and drop visual and non-visual components from the palette. Connect user interface elements to data sources using the LiveBindings Designer. 2. Code smarter and faster Utilize the powerful, versatile, and easy-to-learn Object Pascal language and customize the IDE to meet your coding style. Use Code Insight™ for code completion via a modern Language Server Protocol based on your code while libraries help you code quickly and accurately. Get hints and tips from inline documentation as you code. Keep development agile with the VCL designer, Agile refactoring, and Live Templates. Integrate with version control systems including Git, Subversion, and Mercurial. 3. Debugging is made easier and faster using the right IDE software Add conditional breakpoints to quickly pause program execution at […]

Read More

Extend TMS WEB Core with JS Libraries with Andrew: Tabulator Part 1: Introduction

So far, we’ve covered some hugely important and popular JavaScript libraries, like jQuery, Bootstrap and FontAwesome.  We’ve also explored other very important but somewhat lesser-known JavaScript libraries, like Luxon and CodeMirror.  And also some considerably smaller and less widely used JavaScript libraries like Interact.js, BigText.js and Showdown.js. Today we’re going to introduce what has quickly become my favorite JavaScript library, Tabulator, which accurately describes itself as “Easy to use, simple to code, fully featured, interactive JavaScript tables.”  Over the next handful of posts we’ll go into far more detail about how to make the most of it in your TMS WEB Core projects. Why Tabulator? Tabulator is neither wildly popular (yet!) nor particularly obscure. And it has perhaps the misfortune of falling into a hugely popular category of JavaScript libraries – defined with terms like grids or tables. If you were to do a Google search for a new JavaScript grid control, you might run through 10 or 20 before Tabulator even comes up on the list. On the other hand, if you search for a JavaScript ‘data grid’ on GitHub, it might come up second or third. But as with any popular JavaScript library category, there are plenty of criteria you can use to filter out which ones might be the best candidates for your projects. When I’m looking for something, these are the kinds of things I typically consider. Price per user or per developer, licensing terms, and so on? Any development activity in the past year?  Does the developer respond to questions? Are there dependencies?  Like jQuery or other JavaScript environments like React or Angular. How good/complete is the documentation?  Is there plenty of example code available? Style vs. substance and needs vs. wants.  Does it just look pretty or is it actually useful? When the dust settles, you might well reach the same conclusion I have, and give Tabulator a try. But even if you find another control that is more suited to your needs, or perhaps you’re already quite happily using another control, there’s still a lot of interesting ground to cover (and some fun examples) when it comes to using any of these kinds of controls in a TMS WEB Core project.  Motivation. The need for a grid-like control in a modern web application is usually self-evident. Displaying data for the user to see in tabular form, along with maybe some options to filter or sort that data in ways that are easy and convenient, is either something you need in your project, or something you don’t. A better question for our purposes might be what the motivation is for a Delphi developer to use a new and potentially unfamiliar JS library.  Particularly when it comes to providing functionality that we might already have decades of experience with, using popular, reliable, capable, and easy-to-use Delphi VCL components of various flavors. Naturally, this need arises when moving to a different environment – the web – where our preferred set of controls may not be as readily available.  At the same time, this shift to the web also brings with it opportunities to change how these kinds of applications are developed, for better and for worse.    TDataSet vs. The Web. When we covered all those JSON examples (see Part 1 and Part 2), one of […]

Read More

Implementing a facial recognition library in a TMS WEB Core project

Trying to implement facial recognition in your applications can be a daunting task. With the use of TMS Web Core and the vast amount of available JavaScript libraries, this can be made much easier. There is no need for complex functions or algorithms. Just include the library in your HTML and you can access all the functionality. To showcase this, we’ve made a demo with the following library: face-api. This library contains a lot of different functionality that you can use. You can detect faces and match them with previously created models. But you can also use it to detect the age, sex and expressions of the person. You can even draw landmarks on the detected face. You can find the demo here (requires a webcam installed). WebGL vs WebAssembly The library that we used, gives us the option to use WebGL or WebAssembly. whilst WebGL is really fast it does have a initial warm-up time. the first detection of a face will take 5000-6000ms and every subsequent detection will be around 100ms. Performance is also heavily dependent on the installed GPU, as having a dedicated GPU really boosts the performance. Meanwhile, WebAssembly uses the CPU. We recently did some experimentation with this technology. You can read all about it in this blogpost. WebAssembly doesn’t have the initial warm-up time, but every detection takes about 700-900ms. As we only do one detection when logging in, we’ve opted to use WebAssembly .  In the following chart we only used one model to start face recognition (the demo uses 7 models to get all necessary data). this chart also doesn’t take the warm-up time in account. But it should give you a fair comparison between different systems and set-ups.  picture taken from Tensorflow.js which is used in the back-end of the face-api library. Integrating the Face-Api using external classes People who use TMS WEB Core will already know that you can use asm blocks to write JavaScript in Pascal methods. But you can also use the external keyword to wrap classes and functions from libraries. These external classes and methods can then be used directly in your Pascal code, negating the need to use asm blocks. This makes it also very easy to integrate these libraries in different applications as you’ll only need to include the pas file in your project.  Here you can find an example of a procedure: procedure LoadAgeGenderNetModel(AURL: string); async; external name ‘faceapi.nets.ageGenderNet.load’; And this is a example of such a class: TFaceMatcher = class external name ‘faceapi.FaceMatcher’ (TJSObject) public constructor new; overload; constructor new(AInput: TJSObject); overload; labeledDescriptors: TJSArray; function FindBestMatch(Descriptor: TJSObject): TFaceMatch; external name ‘findBestMatch’; function ToJSON: JSValue; external name ‘toJSON’; class function FromJSON(AJSON: TJSObject): TFaceMatcher; external name ‘fromJSON’; end To use this method you also need to add the following code right under the interface {$mode objfpc} {$modeswitch externalclass} Demo For our demo we have used facial recognition to use as authentication. When we can’t match the face, the application will ask to register yourself. This data will be saved in an indexedDb. The model to test against will be updated and stored in local storage. When a face is recognized, we will fetch the data of that person and display it in another form. except for opening forms and writing/reading from the databases, the actual detecting […]

Read More

TMS WEB Core v2.0 has landed

We’re excited that after many months of hard development work, TMS WEB Core v2.0 is available for you!  All active registered TMS WEB Core v2.0 users get this new release free. TMS WEB Core brings improvements to the web client development experience from your Delphi IDE in many areas! pas2js compiler update & RTL update The latest version of the pas2js compiler, responsible for transpiling the Object Pascal code to JavaScript running in the browser, and updated RTL is integrated now, bringing even better Delphi compatibility New components Various new components have been added: – TWebDropDownControl, TWebEditDropDownControl: flexible control that can be used to show any other control in its dropdown part– TWebCheckListBox: VCL-like check listbox– TWebDBListControl: DB-aware Bootstrap styled list control with optional DB field template– TWebSearchEdit: edit control with embedded search and clear button– TWebEditBtn: edit control with attached button– TCountryComboBox, TWebCountryListBox,TWebCountryDropDown: various controls to show list of countries in the world to pick from, including list of countries with official country flagsTWebXLSX: Microsoft Excel XLSX file import & export component Component enhancementsThere is too much to list here in detail. Many new features have been added to existing components, the most important shown here: – Add controls checkbox/button/progressbar in TWebStringGrid, TWebTableControl cells– Add nodes with checkbox or radiobutton in TWebTreeView– Perform filtering on items in the TWebListControl– New ListSource/ListField property in TWebDBComboBox to load items from a dataset– Row selection in TWebTableControl+ many more… Framework improvementsThe underlying framework has been enhanced and extended: – TCanvas VCL compatible brush style support added,– Material icons style support– Touch & wheel events in TWebElementActionList– Multi-language support in TWebMessageDlg()+ many more… IDE integration improvements Improved interaction with web projects from the Delphi IDE:– Improved live-preview from context menu on form units in the IDE project manager– Delete entire folder from project via IDE project manager New browser APIs exposedNew web browser APIs easily accessible from your Object Pascal code:– Speech recognition component: TWebSpeechRecognition– Classes for multi-screen API use In the coming days and weeks, we’ll unveil via video more details about the new features in TMS WEB Core v2.0. Today, you can already learn about the new dropdown controls, the new country list controls and the TWebCheckListBox in the video from our chief evangelist Dr. Holger Flick: Another interesting source of information is the replay of the recently held webinar with CTO Bruno Fierens walking through all new features of TMS WEB Core v2.0: Meanwhile, our team is also hard at work to bring all new components, new features of TMS WEB Core for Delphi to TMS WEB Core for Visual Studio Code v2.0. You can expect this update also very soon! If you are interested in web client development using Delphi, also have a look at the recent series of blogs from Andrew Simard that covers how to use external JavaScript libraries easily from TMS WEB Core. In the past weeks, Andrew covered how to integrate the impressive Tabulator JavaScript control in a TMS WEB Core project. The series starts here. TMS WEB Core v2.0 couldn’t have been created without all your valuable feedback in the past months and years! We are extremely thankful for all your help steering the development. And we continue to count on you driving further future developments of TMS WEB Core! We invite experienced TMS WEB Core developers having […]

Read More

Check Out These Amazing Skia4Delphi Cross Platform Apps

Skia4Delphi is indeed a revolutionary tool that offers tons of possibilities. This third-party library can be used effectively in Delphi to transform the GUI of your VCL apps into something more visually appealing. It comes with many useful components that can be applied beautifully for any Windows application development. Aside from desktop applications, Skia4Delphi can also be used to turbocharge your FireMonkey FMX cross platform apps that allow you to provide a comprehensive 2D API to all other platforms including Android and more. What else can Skia4Delphi do for mobile applications? Based on the recently concluded Skia4Delphi Webinar, we have learned the things that Ski4Delphi can do and all its potential to supercharge your apps’ user interfaces. This free-to-access library provides major components/controls like TSkLottieAnimation, TSkPaintBox, and TSkSvg that all work like a charm. The previous webinar showed us some cool demos showcasing Skia4Delphi’s huge potential. These include the use of Skia Shaders that can level up your interface with its beautiful 3D animations, an interactive Breakout-inspired game, a Star-trek-inspired data dashboard demo, and a great number of mobile demos. In this short video that was taken from the recently concluded Skia4Delphi webinar, Jim McKeeth will show us some demos of using Skia4Delphi in some mobile applications. These include a beautifully rendered Splash Screen animation, a feature that allows you to sign a document using the TskPaintbox control, and a feature that allows users to generate PDF documents and a QR Code. To learn more about these Skia demos and to see what exactly this amazing library is capable of, feel free to watch the video below.

Read More

How To Create A Grid In JavaScript

In this technological era, we are generating massive volumes of data. It is estimated that the data that is generated daily is of the order of a mind-blowing quintillion bytes per day! Hence, it’s no wonder that software apps, which can handle millions of data records are of paramount importance. In this context, a JavaScript grid that allows users to manipulate and work with tabular data is key. It is this reason that many data scientists and developers often ponder how to create a grid in JavaScript quickly and easily. Sencha Ext JS allows you to create data-intensive HTML 5 apps using JavaScript. You can effortlessly create cross-platform web and mobile apps for all modern devices. This is an easy-to-follow JavaScript grid tutorial that enables you to create a JavaScript grid effortlessly. Continue reading to discover how you can create a data grid using JavaScript and HTML. All you have to do is create an empty .html file and follow the four steps given below.  Why Should I Opt For Sencha Ext JS JavaScript Grid? Sencha Ext JS provides the fastest JavaScript grid. It empowers you with an incredibly fast speed and enables you to process millions of records within milliseconds. Experiments with performance benchmarks have shown that Ext JS grid beats all its competitors in terms of initial load time, filtering speed, and scrolling speed. Additionally, by using Sencha’s grid, you can completely revamp your HTML5 grid. The Sencha Ext JS JavaScript grid is 100% configurable. You can easily design a grid to fulfill all your clients’ requirements. You can add various data visualizations such as line charts, pie charts, bar charts, and more to the grid. This goes a long way to help your clients to understand their data. Moreover, you can also add other UI components to the grid. How To Create A Grid In JavaScript: What Are The Steps? You can easily create a grid in JavaScript using a single HTML file. Create an empty grid.html file and follow the steps given below. Once you complete these 4 steps, you’ll see a grid that looks as follows: In the above JavaScript grid, there are only three columns for the country, population, and population growth. However, you can extend the grid and add more columns and rows to the data table. Step 1: What Do I Need To Import For Creating A Grid In JavaScript? To create a JavaScript grid in a single HTML file, import the Ext JS library and stylesheets. You can add the following code anywhere in the header of the HTML file: Step 2: How Do I Define The Model For Creating A Grid In JavaScript? To build a grid using Ext JS, you need to create a model. In the code below, the name of the model is com.extjsGrid.Sencha and it extends Ext.data.Model. This code defines a model for three columns namely country, population and population growth. All three columns are specified using the field key. Ext.define(“com.extjsGrid.Sencha”, { extend: “Ext.data.Model”, fields: [“Country”, “Population”, “PopGrowth”] }); Step 3: How Do I Define The Data Store For JavaScript Grid? The data store holds all the data values for the grid. In the code below, senchaStore is a variable that stores all the data of the grid. To fill up the grid, specify one row of […]

Read More

How To Explain A Cross Platform App Builder To Your Boss

You have been working on a new cross-platform app using a cross platform app builder, and you’re just about done with it. You’ve tested it on your own devices, tweaked the interface until it’s perfect, and you’re ready to share it with the world! But now you have to explain it to your boss. Here’s how to do it without blowing their minds or making them skeptical about your skills as a developer.  What is a cross platform app builder? A cross platform app builder is a software development tool that enables developers to build iOS and Android apps using the same codebase. This can save time and hassle by allowing developers to create apps that work on both platforms without rewriting code or relying on third-party tools.  A cross platform app builder is also great for larger projects where multiple team members must work on the same codebase without creating various files for every platform.  A good starting point is Delphi Community Edition if you’re looking to build a cross-platform app. It’s free to try and use and has plenty of features to get you started.  Defining a cross platform app builder When you’re trying to convince your boss to invest in a cross platform app builder, it can be tough to explain just how valuable the tool can be. Here’s a guide on how to do just that.  Define the Problem Before you can even start explaining how a cross platform app builder can help, you must first understand the problem. In most cases, companies are looking for ways to reduce costs and increase efficiency.  By using a cross platform app builder, you can give your team the ability to create mobile and desktop applications for different platforms with ease. This makes it easier to manage and scale your business operations.  Emphasize the Benefits Once you’ve defined the problems, it’s time to start highlighting the benefits of using a cross platform app builder. First and foremost, this tool can save your company money in the long run. By using one codebase for more than 3 or 4 platforms, the company can avoid all the costly development costs that come with customizing each application separately. Additionally, a cross platform app builder can make it easier for your team to collaborate and share information across different platforms. This ultimately leads to increased efficiency and better communication within your business operations.  The different types of cross platform app builder Cross platform app builder allows developers to create mobile and web applications deployed on different platforms, including iOS, Android, Windows, macOS and Linux. There is various app builder out there, so it can be difficult for developers to choose the right one.  In this blog post, we’ll discuss the three most common types of cross platform app builders and give you tips on how to explain them to your boss.  The first type of cross platform app builder is called a hybrid builder. Hybrids combine features from iOS and Android app builders, making it easy for developers to create mobile apps that look and feel like their existing web applications. Hybrids also allow you to use code from either platform, giving you more flexibility when building your app.  The second type of cross platform app builder is creating native but also multi-platform applications that can […]

Read More

How to leverage modern software testing skills in DevOps

Testing is a critical step in the software development lifecycle but also the part of the process most DevOps teams trip over. The solution — test automation — has been talked about for years but has been far easier said than done. However, with new technologies on the rise, test automation is taking off. DevOps teams need to be prepared with modern software testing skills. Here’s how to get started. The benefits of automated software testing In GitLab’s 2021 Global DevSecOps Survey of over 4,000 developers, security professionals, and operations team members, respondents agreed on one universal truth: Software testing is the biggest reason why development is delayed. It’s critical to get software testing right because it’s financially disastrous to get it wrong. How much money do software mistakes add up to? Somewhere in the trillions. Yes, with a “t.” DevOps.com reported that software failures in companies’ operations systems cost a total of almost $1.6 trillion in the U.S. in 2019 alone. But testing has traditionally been difficult to do efficiently and not particularly popular with developers. The solution? Test automation combined with modern software testing skills. It’s a hands-on start DevOps teams looking to up their test game need to take a step back… into manual testing. (The irony is not lost on us.) A manual testing mindset can actually improve all facets of automated software testing. As devs perform basic tests on their code as it’s being written, channeling their inner manual tester can be helpful. Whether it’s looking at the requirements again or running failed fixes one more time, that attention to detail should be brought into how automated test cases are built and executed. Take the modern view Once developers have incorporated some old-school habits into their test cases, it’s time to consider some fresh perspectives, up to and including a deep understanding of the organization’s goals and objectives. According to Modern Testing, there are key principles of modern testing that every developer needs to be aware of for successful testing at any stage: Job one is to make the business better. Rely on trusted resources like Lean Thinking and the Theory of Constraints. Fail fast but focus on success. Always be the customer when testing. Do data-driven work. Testers are evangelists. Get certified As the saying goes, every little bit helps. Though it is not required, a training program or certification course in software testing can enhance team capabilities. If there’s interest in this option, research courses online that might fit. From beginners to experienced testers, there’s something for everyone. Not sure where to start? Teams can explore the International Software Testing Qualifications Board (ISTQB) Foundation Level Certification for CTFL certification. This is required before taking any other certifications (see the full list of ISTQB prerequisites). After CTFL, there are many interesting certification options. The American Software Qualifications Board, which offers the ISTQB certifications, is another great resource and has a helpful Software Testing Career Road Map. Embrace new technologies Artificial intelligence and machine learning are at the core of test automation, so a thorough understanding of the technologies is a key modern software testing skill to have onboard. If AI/ML is already in use, ask to shadow or “apprentice” those working with it. Organize a Q&A for the DevOps team with an expert, and […]

Read More

Why we’re sticking with Ruby on Rails

When David Heinemeier Hansson created Ruby on Rails (interview), he was guided by his experience with both PHP and Java. On the one hand, he didn’t like the way the verbosity and rigidness of Java made Java web frameworks complex and difficult to use, but appreciated their structural integrity. On the other hand, he loved the initial approachability of PHP, but was less fond of the quagmires that such projects tended to turn into. It seems like these are exclusive choices: You either get approachable and messy or well-structured and hard to use, pick your poison. We used to make a very similar, and similarly hard, distinction between server-class operating systems such as Unix, which were stable but hard to use, and client operating systems such as Windows and MacOS that were approachable but crashed a lot. Everyone accepted this dichotomy as God-given until NeXT put a beautiful, approachable and buttery-smooth GUI on top of a solid Unix base. Nowadays, “server-class” Unix runs not just beautiful GUI desktops, but also most phones and smart watches. So it turned out that approachability and crashiness were not actually linked except by historical accident, and the same turns out to be true for approachability and messiness in web frameworks: They are independent axes. And these independent axes opened up a very desirable open spot in the lower right hand corner: an approachable, well-structured web framework. With its solid, metaprogrammable Smalltalk heritage and good Unix integration, Ruby proved to be the perfect vehicle for DHH to fill that desirable bottom right corner of the table with Rails: an extremely approachable, productive and well-structured web framework. When GitLab co-founder Dmitriy Zaporozhets decided he wanted to work on software for running his (and your) version control server, he also came from a PHP background. But instead of sticking with the familiar, he chose Rails. Dmitry’s choice may have been prescient or fortuitous, but it has served GitLab extremely well, in part because David succeeded in achieving his goals for Rails: approachability with good architecture. Why modular? In the preceding section, it was assumed as a given that modularity is a desirable property, but as we also saw it is dangerous to just assume things. So why, and in what contexts, is modularity actually desirable? In his 1971 paper “On the Criteria to be Used in Decomposing Systems into Modules”, David L. Parnas gave the following (desired) benefits of a modular system: Development time should “be shortened because separate groups would work on each module with little need for communication.” It should be possible to make “drastic changes or improvements in one module without changing others.” It should be possible to study the system one module at a time. The importance of reducing the need for communication was later highlighted by Fred Brooks in The Mythical Man Month, with the additional communication overhead one of the primary reasons for the old saying that “adding people to a late software project makes it later.” We don’t need microservices Modularity has generally been as elusive as it is highly sought after, with the default architecture of most systems being the Big Ball of Mud. It is therefore understandable that designers took inspiration from arguably the largest software system in existence: the World Wide Web, which is modular by necessity, […]

Read More

Faces of Unity – Archana Rao

What are your personal values, and what Unity values do you gravitate towards the most? My personal values are anchored in encouraging diverse views while operating with a high degree of ethics and accountability. I love all the Unity values, but I especially connect with Go Bold, as it relates to staying curious and hungry. I’m never satisfied! There is always room to go faster, do bigger things, and make more impact. Can you share any fun facts about yourself? I love to learn and need constant challenges, so my career has been an unusual zigzag path through roles in engineering, business development, and IT. I grew up in a small town in India and always wanted to be an engineer, although I would never have dreamed that I’d be a CIO one day. Despite my small-town origins, I was lucky to receive tremendous encouragement from my parents, teachers, friends, and mentors. I would not be here without them. I hope to pay this forward, and love to invest in building, mentoring, and growing diverse teams. When I was little, I was really, really scared of dogs. I got chased by a large dog as a kid and that scarred me quite a bit. But, thanks to the insistence of my kids and husband (who had a lovely Labrador growing up!), we now have two amazing dogs: Cleo, our happy-go-lucky 10-month-old Labradoodle, and Rusty, our effervescent Golden Retriever. They are the loves of my life, and I now really enjoy meeting dogs and basking in their loyalty and joie de vivre.

Read More