From the blog

How To Come Up With Software Ideas?

Coming up with the right software ideas is important. Without the right concept, you cannot effectively address the issues of your target consumers. As a result, your application will miserably fail on the market. How can you come up with effective and productive software ideas? How can you find the real problem and the need of users? Which IDE software can help you quickly turn your idea into reality? In this post, you will find all the details. How can I come up with successful software ideas? Coming up with the right software idea can be tricky. You might have a lot of concepts in your mind. But only a few of them will be successful. To find the best software idea, you need to ask yourself the following questions: 1. Am I focusing on a real problem or need? Successful software ideas begin with identifying the real problems and needs. What are the issues people are facing in the real world? Is there a need for a solution? These are some of the questions that you should ask yourselves. There are different sources for finding the real problems and needs. Here are a few of them: Personal problems and needs: Successful software ideas are often generated from personal issues. Are you tired of constantly facing a problem and finding nothing to solve it? It’s the right time to come up with a great software idea. External problems: These are the issues that the people around you face. Are they frustrated with the complexity of an existing solution? What features are they looking for? These are some of the things that you should keep a close eye on. Maslow’s hierarchy of needs: Maslow’s hierarchy of needs is a theory of motivation. It helps you define the urgency of needs based on their importance to survival and happiness. It focuses on five categories of human needs that dictate an individual’s behavior. They are physiological needs, safety needs, love, and belonging needs, esteem needs, and self-actualization needs. 2. How can I qualify each need for finding effective software ideas? The second step is to qualify your needs by applying Michael Skok’s 4Us approach [1]. It will help you identify whether the issue is unavoidable, urgent, unworkable, or underserved. Unavoidable problems are those that you cannot change. But you have to accept them. On the other hand, urgent needs require a timely solution, which might not be the best. However, it serves the needs because of the urgency. Unworkable issues are problems that you cannot fix with your best effort. For instance, you have spent a lot of time trying to find a solution. But it doesn’t work out. Underserved problems refer to the issues without an obvious solution. They can be a great source for finding your next software idea. Now, take each problem from your list. Ask yourself whether it is unavoidable, urgent, unworkable, or underserved. You should cross off problems that have 4 ‘NO’s. You are doing the right thing if you get a definite ‘YES’ for most questions. Otherwise, you have to revise your software ideas. 3. Do I need to narrow down possible solutions to determine the best software idea? Most problems around you have solutions. However, they haven’t been found yet. This is a great opportunity for […]

Read More

TMS WEB Core and More with Andrew: PWA

Welcome to our new TMS Blog Series, TMS WEB Core and More with Andrew.  In this bi-weekly series, we’ll be looking at many aspects of developing TMS WEB Core projects, including packaging options with PWA, Miletus and Electron.  We’ll look at the support available for deploying projects on various platforms, including in particular Raspberry Pi.  And we’ll be looking at a few development environments where TMS WEB Core can be used, including Visual Studio Code. The other blog series, Extending TMS WEB Core with JS Libraries with Andrew, will return to its regular weekly cadence now that we’ve gotten through the Tabulator miniseries, continuing with taking a stroll through the Slick Carousel JS library next week. To start off this new series, we’re going to have a look at creating PWAs – Progressive Web Apps. We’ll have a look at what they are and what they aren’t.  We’ll create one using the existing TMS WEB Core project template.  And we’ll convert our ongoing Actorious project into a PWA.  We’ll also have a look at some challenges with PWAs, particularly deploying updates, and have a look at some other tools that can help us out along the way. So What’s a PWA? Briefly, PWAs are essentially just your typical modern website designed with HTML, CSS, and JavaScript, much like what we’re already creating with our TMS WEB Core projects. The thinking behind PWA, in part, is that apps should try to support as many devices as possible in order to reach the largest numbers of users.  And to degrade gracefully on devices that lack the latest standards, while offering the best experiences possible when device support is available.  Some of the same thinking behind responsive web design. In practical terms, there are a few reasons why having your app upgraded to function as a PWA may be of interest to you. Some App Stores allow PWAs directly, rather than native apps.  Notably, this isn’t necessarily the case for Apple’s App Store.  Some have made it through using various PWA app-builder-type tools, so it is conceivably possible, but not really their thing. And then there’s Microsoft, who might very well add your PWA app to their App Store without even telling you.  Strange times! PWA apps include functionality that makes it possible for them to work offline to some degree.  Whether this makes sense for your project naturally depends on the kinds of data your app is dealing with.  Storing reference information is a good use of this kind of function, and perhaps collecting data while not connected may also be feasible. Because PWA apps contain additional information about themselves, it is also often possible for the app to appear as a regular app in desktop environments, and as pseudo-apps in mobile devices, even without App Store support.  Some of this you can just do separately anyway, but as a PWA app this support becomes an integral part of the project. So what does it mean then, technically, for a website to qualify as a PWA app?  There are usually three basic qualifications listed.  In practice, though, you’ll want to use something like Google Chrome’s Lighthouse app (part of its built-in developer tools) to analyze your app.  It will let you know if you’ve come up short.  We’ll have a look at […]

Read More

More new TMS WEB Core v2.0 features

Today we focus on two more new framework features in the new TMS WEB Core v2.0 release. It concerns the support for the different material icons types and the new component for dealing with CSS classes at design-time, TWebCSSClass. Material icons types Google Material icons is a library consolidating over 2500 glyphs for use in web applications. For some time, Google material icons offers different types of its icons. These types are: baseline, outlined, two-tone, rounded and sharp. TMS WEB Core controls offering direct support to use such Material Icons with the property MaterialGlyph now also feature the MaterialGlyphType property for selecting one of these 5 types.  Manipulate CSS classes at design-time The TWebCSSClass is a non-visual component that gives design-time (but obviously also run-time) access to a wide range of CSS class properties. You can drop the component on the form, see all available CSS properties in the Object Inspector, change these, st the TWebCSSClass.CSSClassName property and then set this CSSClassName value to the control’s various Element*ClassName properties to have the CSS style applied to the control.  A video is better than thousand words Watch the new video our colleague Dr. Holger Flick to show you everything in detail how you can take advantage of these new TMS WEB Core v2.0 features!  And start exploring TMS WEB Core v2.0! Experience for yourself how fast you can start building your web client application front-end with TMS WEB Core and the typical Delphi RAD component based development. Download the free & fully-function trial version now. Hesitating about the back-end server that fits best with TMS WEB Core? Explore TMS XData, our flag-ship robust and high performance REST API server building library!

Read More

How to migrate Atlassian Bamboo Server’s CI/CD infrastructure to GitLab CI, part one

When I faced a task of migrating from Atlassian Bamboo Server to GitLab CI/CD, I was not able to find any comprehensive information regarding something similar. So I designed a process on my own. This demo shows how to migrate a CI/CD structure for an existing multi-component application from a discontinued Atlassian Bamboo Server to GitLab CI/CD (Community Edition). The accompanying repository is https://gitlab.com/iLychevAD/ci-cd-for-a-multi-component-app. In this first part of a two-part series, you will find a description of the current state of affairs – i.e., how the CI/CD has been organized within Bamboo Server, how the Bamboo Build and Deploy plans are designed for bootstrapping infrastructure and deploying the components of the application, and the architecture of the application itself. And in part two, we’ll take a deeper look at the virtues of GitLab CI/CD. Initial state (Note: This is not a description of some particular project but more a kind of compilation of several projects I worked on.) The application solution allows the client to fulfill a particular business purpose (the nature of which is not relevant here and thus not specified) and consists of more than 50 discrete components (further referred to as applications or just apps or components). I refrain from calling them microservices as each of them looks more like a full-fledged application communicating with other siblings using REST API and messages in Kafka topics. Some of them expose a web UI to external or internal users and some are just utility parts serving the needs of other components or performing internal operations, etc. Code for each app is stored in its own Git repository (further just repo). So, a multi-repo approach is used for them. Each app may be written in different languages and packaged as one or several OCI-images for deployment. Each app repo looks like: 📦 ┣ 📂src

Read More

TMS BIZ Update: What’s new in XData, Aurelius and Sparkle

We’re happy to announce the release of new versions of TMS Aurelius (5.9), TMS XData (5.6) and TMS Sparkle (3.20) There are very interesting new features in those releases, and also some upcoming changes in the TMS Business product line, which will now be named “TMS BIZ”.  In case you are curious, you can check the new released features in the what’s new section of the product documentation: TMS XData 5.6 what’s new. TMS Aurelius 5.9 what’s new. TMS Sparkle 3.20 what’s new. We are then inviting you for the webinar TMS BIZ Update: What’s new in XData, Aurelius and Sparkle, to happen on July, 21st, 3:00 PM UTC Time. You will learn in details about the new features (in action) and the new TMS BIZ editions. REGISTER for the TMS BIZ Update: What’s new in XData, Aurelius and Sparkle webinar now!

Read More

Tackle a Plan of Actions and Milestones with GitLab’s risk management features

Software is an essential part of everyday life. More and more organizations are being forced to push software to consumers faster for a better customer experience. But increasing software delivery speed cannot come at the expense of security. This adds more pressure on internal development, security, change management, operations, and site reliability teams. Shifting left to find security vulnerabilities earlier within the DevOps process is a critical aspect of ensuring security scales with the pace of development. But U.S. federal government operations go a step further with the implementation of the National Institute of Standards and Technology (NIST) Risk Management Framework (RMF). The RMF, implemented with standards such as NIST 800-53, NIST 800-171, and NIST 800-37 all require careful consideration of security vulnerabilities identified as properly managed risks. This is further recommended with NIST 800-160 and NIST 800-161. However, practically speaking, not even the most diligent IT team can ensure full compliance with every requirement. This is when risk management becomes more critical as it has to be continuously monitored and evaluated through the software development lifecycle (SDLC). Generally, the prescribed methodology is to prepare a plan and document the tasks necessary to resolve risks, along with the resources required to do so. Due to interdependencies with other software components, milestones may also be needed to track the work. This is embodied in the Plan of Actions and Milestones (POA&M) process. GitLab and the POA&M process There are two aspects of identifying and managing vulnerabilities. First, there has to be a quick and relatively easy way to identify new vulnerabilities and zero-day exploits as they become public. Second, it should be possible to check for existing vulnerabilities periodically – ideally in an automated or ad-hoc way as new information becomes available and internal or external auditor reviews are conducted. NIST provides a sample POA&M template to help organizations track the actions needed. But in our experience, the mental load to manage another separate document can be an added burden on all the teams, not to mention confusing as new versions of the information become available. GitLab provides numerous resources to assist with this process. Using GitLab to identify vulnerabilities GitLab has multiple types of security and compliance scanners that evaluate source code in various ways. These scanners are capable of finding security weaknesses introduced in new code, vulnerable dependencies, container images, and non-compliant licenses from third-party code. These scans can run against every commit on every feature branch – before any code is merged or deployed into production.  As potential security issues are found, GitLab provides an aggregated view of the findings both in the developer workflow and in dedicated vulnerability management tools. GitLab’s Vulnerability Reports allow security teams the ability to triage and manage vulnerabilities for individual projects or across groups of projects. From here, security teams can evaluate vulnerabilities, track remediation progress, or dismiss any false positives.   This provides a direct way to find, catalog, and manage vulnerabilities. As this process moves further along, and vulnerabilities are characterized as a risk, GitLab provides a one-click process to convert and link the vulnerability with a work management item known as an Issue in GitLab. This can become a central location where, as per the POA&M process, it can be assigned to the Directly Responsible Individual (DRI), with due dates and milestones.  The Issue can also […]

Read More

Reimagining community with digital twin technology

By bringing models into 3D, architects and urban planners are better equipped to solve challenges around shifting landscapes, climate change, transportation, and more.  While a digital twin by definition is any virtual copy of a physical asset, process or system, an urban digital twin is a virtual representation of an entire urban environment’s physical assets. Urban digital twins play a critical role in the  larger global movement toward smart cities. A “smart city” is a community that uses electronic means to collect valuable data surrounding the use and performance of its utilities, mobility patterns, and infrastructure by using tools like Internet of Things (IoT) sensors to record activities and changes in the urban environment. Urban digital twins often serve as the systems within which this data is represented and visualized. They are created by aggregating large sets of map and model data, visualized in real-time. Because of this, urban digital twins offer an ability to look at the future state of an urban environment in a more accurate context than a collection of traditional building models would allow. They are also helping designers reimagine and further democratize the planning process. According to ABI Research, more than 500 cities around the globe will have deployed digital twins by 2025. Currently, many cities are actively making the effort to digitally replicate their urban landscapes and explore the roles digital twins will play in their communities.  One of those cities is Trondheim. The fourth largest city in Norway, Trondheim is located on the shore of Trondheim Fjord. Founded by Viking King Olav Tryggvason in 997, the city has a rich Nordic history. Like many cities around the world, Trondheim’s geographic features necessitate densifying the existing urban landscape to allow for growth. This presents a notable design challenge, especially when coupled with the effort to preserve the city’s longstanding beauty and charm.  In 2020, local architects went to work on modeling a vision for the future of their city in the Trondheim 2050 competition. The competition was a part of the city’s larger effort to create comprehensive strategic plans for its growth across the next several decades, by inviting different perspectives and increasing public engagement with the planning process. To model what Trondheim might look like in 2050, Martin Vitsø, Geodata Specialist for the City of Trondheim,  turned to Unity.

Read More

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