From the blog

The Metaverse Minute: Auggie Awards edition

Not one, not two, but all of the experiments housed in the Petricore AR Experiments app were created using Unity’s AR Foundation. This whimsical collection of activities includes taking a family photo, petting a virtual dog, mixing paint colors from the real world, and more. This eclectic app is a celebration of AR. The AR Paint Bucket game is one of our experiments where a player places an AR paint bucket and has to grab colors from the real world to mix and match a given target color. Our inspiration for this was the TikTok trend of people trying to guess the color of mixing paint. We used Unity to develop the Paint Bucket game, relying primarily on AR Foundation. AR Foundation/Unity made it really easy to jump in and build something that’s fun quickly, which was our goal with these experiments. – Oliver Awat, Lead Designer & Senior Developer, Petricore

Read More

How To Create An HTML CSS Grid

An efficient and robust Javascript data grid is vital for building a data-intensive web app. The massive volumes of data generated by small and medium enterprises call out for the need of good JavaScript developer tools that can help you build web apps capable of handling millions of data points. Ext JS meets all your requirements ranging from building a simple HTML CSS grid to a more complex and sophisticated responsive HTML 5 data grid. Continue reading for step by step instructions on how to create an HTML5 grid. To keep things simple we are creating an app using just a single HTML file. You can put all the JavaScript code in the same file. The final JavaScript data grid we’ll build looks as follows: Step 1: Which Files do I Need to Import to Create HTML CSS Grid? As a first step, link the CSS stylesheet in your HTML 5 grid project. This file will import the CSS grid layout. Create an empty HTML file and add the following line anywhere in the header of the HTML file: Next, you need to include the Ext JS library to import the objects of the HTML CSS. Add this to the HTML file: Step 2: How do I Create the Data Model for the HTML CSS Grid? To set up the data grid in JavaScript, you need to define the data model with all the fields of our grid. This is defined in the onReady() method that you can add to the script section of the HTML file. Ext.onReady(function() { Ext.define(“com.extjsGrid.Sencha”, { extend: “Ext.data.Model”, fields: [“Product”, “Environment”, “Description”] }); The above code defines a grid model com.extjsGrid.Senchawith three data fields named Product, Environment and Description. Note this onReady() function is not complete yet. We still have to define the data store and display method inside it. Step 3: How do I Create the Data Store for the HTML CSS Grid? As a third step for creating the JavaScript data grid, you need to create a data store for our HTML 5 data grid. We’ll create a variable senchaStore that is tied to our com.extjsGrid.Sencha data model. We’ll populate the data grid using the data key of our JSON data store object. Append the onReady() method with the following code. var senchaStore = Ext.create(“Ext.data.Store”, { model: “com.extjsGrid.Sencha”, data: [ {‘Product’: ‘Ext JS’, ‘Environment’: ‘Javascript’, ‘Description’:’Ext JS is the most comprehensive JavaScript framework for building feature-rich, cross-platform web applications’}, {‘Product’: ‘React Grid’, ‘Environment’: ‘React’, ‘Description’:’React Grid by Sencha is a perfect modern enterprise-grade grid solution for React UI that comes with 100+ amazing data grid features.’}, {‘Product’: ‘Ext Angular’, ‘Environment’: ‘Angular’, ‘Description’:’ExtAngular provides the most complete set of components for building data-intensive web apps using Angular.’}, {‘Product’: ‘Ext React’, ‘Environment’: ‘React’, ‘Description’:’ExtReact is the most complete set of React components for building data-intensive web apps using React’}, {‘Product’: ‘ExtWebComponents’, ‘Environment’: ‘Javascript’, ‘Description’:’ExtWebComponents provides a framework-agnostic set of over 140+ UI components for application development.’} ] }); Step 4: How do I Display the HTML 5 Grid? You can display the HTML 5 data grid using the Ext JS panel. Add the following code after adding the data store of step 3. Ext.create(“Ext.grid.Panel”, { renderTo: document.body, store: senchaStore, title: “Sencha Products”, width: 1000, columns: [{ text: ‘Prodcut’, dataIndex: ‘Product’, autoSizeColumn: true }, { text: […]

Read More

Tkinter vs DelphiFMX in the Embarcadero Open Source Stream

We are starting something new, and I’m pretty excited about it. This is the first in a series of regular live streams discussing the latest in open source projects. Both projects sponsored by Embarcadero and key projects in the community. I will be the the host, and I’ll be joined by members of the community, developers involved in these open source projects, as well as members of Embarcadero and Idera’s Product Management. Our first stream, next week, is focused on Tkinter vs DelphiFMX for Python GUI development, so is squarely aimed at the Python developer. Thursday, Jun 2, 2022 at 10:00 AM CDT These streams serve multiple purposes: Collaborate for me with other project managers at Embarcadero and Idera to shape the roadmap and how we support these projects Share behind the scenes conversations with the community of these conversations Collaboratively shape the future of these open source projects Regular updates for what’s new with these projects and the community The goal is to rotate through projects each week and include a theme with the project. For example this week we are discussing the DelphiFMX for Python GUI library and comparing it with Tkinter, the existing de facto Python GUI library. This is a good opportunity to see gaps where DelphiFMX can improve, while seeing what DelphiFMX does to improve the life of the Python developer. Speaking of Python GUI development, we have a new . We will also look at some of the related projects for Python : Agenda for the stream: Tkinter vs. DelphiFMX Overview and comparison of the two libraries Where can DelphiFMX improve? What’s new in DelphiFMX Review Issues & Pull Requests Answer Questions Other feedback or contributors Plan roadmap for future changes Future streams will cover other projects in our Python Ecosystem, non-Python projects, and even community projects we love! This is the latest map of your Python Ecosystem. I’ve split it into two parts, the top half is projects for Python developers, and is the focus of the stream on June 2nd. We are planning on June 9th to focus on projects for Delphi developers that wrap Python libraries for simple Open Pascal based development. I’m really excited to show what we are working on there. Here is a list of some other open source libraries we may discuss in future streams: SonarDelphi Sonar-Delphi plugin used to analyze Delphi projects with SonarQube Bold for Delphi – A Model Driver Architecture (and ORM library) for Delphi Dev-C++ – A fast, portable, simple, and free C/C++ IDE C++ Arcade Games – 4 arcade games developed in C++Builder with FireMonkey for Windows, macOS, iOS and Android DelphiArcadeGames – 4 arcade games developed in Delphi with FireMonkey for Windows, macOS, iOS and Android DelphiBigNumbers – Really, really big integer and floating point numbers in Delphi Kastri – General purpose Delphi library skia4delphi – 2D GUI Library for VCL and FireMonkey Hashload Boss – Dependency Manager for Delphi and Lazarus And open to community suggestions As part of the live stream I will share more detailed documents about the project, but here are a few stats as a preview. Hope to see you online for the webinar on Thursday, Jun 2, 2022 at 10:00 AM CDT.

Read More

What Are Code Editors And What Is IDE Software?

Whether you’re new to programming or an expert developer, you need tools that make it easier to write and edit code. That’s why most developers these days use IDEs and code editors to simplify the process of coding and save time. An IDE software essentially consists of common development tools, such as a code editor, debugger, compiler, etc. In this article, we’ll discuss what exactly are IDEs and code editors and what you should look for in IDE software. We’ll also show you the best IDEs and code editors that you can use for your next project. What is IDE software? When we talk about IDE software (Integrated Development Environment) we mean a specialized software application that provides a set of tools required to write and test code. IDEs are becoming more and more popular as they make the process of coding/programming smooth and efficient. Additionally, IDEs help with faster coding and minimize bugs and coding mistakes. Most IDEs consist of a text editor or code editor, a compiler, and a debugger. Developers use the code editor to write and edit source code. The compiler then translates that source code into another programming language that a computer can understand. The debugger is used to test the software. Without IDEs, developers would have to use, configure, integrate and manage all of these tools separately. Some IDEs also come with other useful features, such as auto code completion, allowing developers to comment on lines of code, find references to other resources, and many more. What is a code editor? A code editor is also a software application that allows programmers to write and edit code. Code editors offer useful features, such as auto-complete, HTML tag highlight, syntax highlight, color-coding,  and many more to help programmers write and edit code more efficiently. Advanced code editors support a wide range of programming/coding languages, such as JavaScript, HTML, PHP, C++, Python, and more. What should you look for in IDE Software? Here are some of the key questions you should ask before choosing an IDE: Does your IDE offer features for faster and smarter coding? When you’re choosing an IDE, you should consider which features it offers for faster and smarter coding. Efficient IDEs like Embarcadero RAD studio offers features like auto code completion, auto code formatting, smart code navigation, auto code error detection, and more to save time and effort. Does the IDE software have an integrated toolchain? A powerful IDE like RAD Studio or Delphi is an integrated toolchain. This means the IDE provides you with all the tools (editors, compilers, and debuggers) you need for efficient software development, so you don’t have to search and buy any other additional tools or applications. Simply put, an IDE’s toolchain should include everything you need to create fully functional software. Does the IDE have efficient debugging capabilities? Good IDEs like RAD Studio or Delphi have powerful debuggers to help developers detect and fix bugs and errors in their code efficiently. RAD Studio and Delphi’s debuggers allow you to add breakpoints so that you can pause the program conditionally or at a specific location, trace the execution route of the code, inspect the current value of variables, and more. Good IDE software help you improve code quality A good IDE like RAD Studio is capable of […]

Read More

The Future of the GitLab Web IDE

Way back in April 2018, GitLab 10.7 introduced the Web IDE to the world and brought a delightful multi-file editor to the heart of the GitLab experience. Our goal was to make it easier for anyone and everyone to contribute, regardless of their development experience. Since its introduction, tens of millions of commits have been made from the Web IDE, and we’ve added features like Live Preview and Interactive Web Terminals to enhance the experience. Now, we’re excited to share some big changes we have in store for the Web IDE in coming milestones. What makes an IDE? Over the years, we’ve learned a lot about how you all are using the Web IDE. We’ve compared it to our Web Editor in the repository view. We’ve spoken to developers, designers, product managers, and technical writers alike. Almost universally, we hear that the Web IDE is great for small changes: a quick change to a config file, an update to a Markdown file, or a typo fix in a merge request. These lightweight changes make up the vast majority of the Web IDE usage. And for those use cases, it’s super convenient and intuitive. But to grow, and to really earn the moniker “IDE,” what are we missing? What keeps developers from making more complex changes in the Web IDE? What can we do to elevate the experience? We hear about missing features and functionality like a collapsible file panel that supports contextual actions and drag and drop or tighter integration with merge requests. We’ve learned that there’s no single feature that’s a deal-breaker for most developers; it’s the sum total of a lot of little user experience gaps. The Web IDE is built on top of the fantastic open source project, Monaco. What made Monaco a great choice as the foundation of the Web IDE is also what makes it more difficult to address all these concerns holistically. Monaco is just that: a foundation. We have to implement all these workflows and features ourselves. Meanwhile, another open source project has been laser-focused on delivering a lovable IDE on top of Monaco. Enter VS Code You may have heard of Visual Studio Code, or VS Code. With its dominant market share, chances are pretty good that you are even using it as your primary code editor. As it happens, VS Code core is also open sourced under the MIT license. While the core project isn’t a perfect drop-in replacement for the Web IDE, our Staff Frontend Engineer, Paul Slaughter, wanted to see if we could run it inside GitLab. Turns out, we can: In this video Paul Slaughter, Staff FE Engineer, walks Eric Schurter, Senior Product Manager, through the VS Code Web IDE proof of concept. See parts two, three, and four for closer looks at extensions, performance, and customization. As you can see in the videos above, Paul was able to build a proof of concept that brings the VS Code editing experience into the GitLab UI, running entirely in the browser. No additional infrastructure needed. Next, we asked ourselves the question: Do we want to continue to invest in implementing custom features for the Web IDE that ultimately deliver the same value as those already available in VS Code? Or do we embrace VS Code inside GitLab, and invest […]

Read More

When the pursuit of simplicity creates complexity in container-based CI pipelines

In a GitLab book club, I recently read “The Laws of Simplicity,” a great book on a topic that has deeply fascinated me for many years. The book contains an acronym that expresses simplicity generation approaches: SHE, which stands for “shrink, hide, embody.” These three approaches for simplicity generation all share a common attribute: They are all creating illusions – not eliminations. I’ve seen this illusion repeat across many, many realms of pursuit for many years. Even in human language, vocabulary development, jargon, and acronyms all simply encapsulate worlds of complexity that still exist, but can be more easily referenced in a compact form that performs SHE on the world of concepts. Any illusion has a boundary or curtain where in front of the curtain the complexity can be dealt with by following simple rules, but, behind the curtain, the complexity must be managed by a stage manager. For instance, when the magic show creates the spectre of sawing people in half, what appears to be a simple box is in fact an exceedingly elaborate contraption. Not only that, but the manufacturing process for an actual simple box and the sawing box are markedly different in terms of complexity. The manufacturing of complexity and its result are essentially the tradeoff for what would be the real-world complexity of actually sawing people in half and having them heal and stand up unharmed immediately afterward. To bring this into the technical skills realm, consider that when you leverage a third-party component or API to add functionality, you only need to know the parameters to obtain the desired result. The people maintaining that component or API must know the quantum mechanics detail level of how to perform that work in a reliable and complete way. Docker containers are a mechanism for embodying complexity, and are used in scaled applications and within container-based CI. When a CI/CD automation engineer uses container-based CI, it is possible to make things more complex and more expensive when attempting to do exactly the opposite. At its core, this post is concerned with how it can happen that pursuing a simpler world through containers can turn into an antipattern – a reversal of desired outcomes – many times, without us noticing that the reversal is affecting our productivity. The prison of a paradigm is secure indeed. The Second Law of Complexity Dynamics Over the years I have come to believe that the pursuit of reducing complexity has similar characteristics to The Second Law of Thermodynamics. The net result of a change between mass and energy results in the the same net amount of mass and energy, but their ratio and form have changed. In what I will coin “The Second Law of Complexity Dynamics,” complexity is similarly “conserved,” it is just reformed. If complexity is not eliminated by simplifying efforts, we reduce its impact in a given realm by changing the ratio of complexity and simplicity on each side of one or more curtains. But alas, complexity did not die, it just hid and is now someone else’s management challenge. It is important not to think of this as cheating. There is no question that hiding complexity carries the potential for massive efficiency gains when the world behind the hiding mechanisms becomes the realm of specialty skills and specialists. […]

Read More

Extend TMS WEB Core with JS Libraries with Andrew: Luxon

The last couple of posts covered FlatPickr, a popular and very capable datepicker JS Library.  We looked at many of its options, and looked at two completely different ways to add it to our TMS WEB Core projects.   What we didn’t really delve too much into is the whole area of date and time formats, timezones, internationalization, and the differences between date-handling in Delphi and JavaScript. Well, we did a little, but just enough to get through some examples.  This time out, we’ll go into a bit more detail and also introduce the latest JS Library to our repertoire – Luxon – which describes itself as “a powerful, modern, and friendly wrapper for JavaScript dates and times.”  I’m not at all sure that I buy the “friendly” bit, but it is indeed powerful and modern, so let’s see where it fits in. Motivation. Long-time Delphi developers are likely to be pretty familiar with TDateTime and its various advantages and shortcomings.  And even if you’re relatively new to Delphi and haven’t had much of an opportunity to interact with TDateTime, there’s not much there to trip you up and, by and large, it isn’t likely to garner much attention on its own. This is a good thing, of course. When dealing with JavaScript, however, the nice and comfy TDateTime is replaced with a rather sinister JavaScript date format that is none of these things.  Sure, it is easy enough to get started with a JavaScript date, but it really is an entirely different beast.  Moving between the two can be a challenge, and even just trying to do the tiniest bit of formatting can sometimes be a lot more trouble than might seem possible.  So in this post we’re going to go over a bunch of this kind of stuff.  Get it all out in one fell swoop, rip off the band-aid so to speak, so we can candidly and confidently move on to other topics, but have this in our back pocket when we need it.  And believe me, we’ll be needing it! Epic Epoch. Let’s dip our toe into the shallow end first and quickly go over what TDateTime is. Delphi uses the TDateTime class to encode, naturally, a date and a time.  It does this in a very simple way – by using a floating point number (specifically, a double) where the whole part of the number represents the number of days since 1899-12-30 and the fractional part of the number represents the time as a fraction of a day.  Noon would be represented as .5, 18:00 would be represented as .75, and so on.  The choice of 1899-12-30 is somewhat arbitrary, but I ran across this link which described it this way: It appears that the reason for Delphi starting at 30 Dec 1899 is to make it as compatible as possible with Excel while at the same time not adopting Excel’s incorrectness about dates. Historically, Excel played second fiddle to Lotus 1-2-3. Lotus (which may have got this error from Visicalc) incorrectly considered 1900 to be a leap year hence a value of 60 gives you 29 Feb 1900 in Excel but is interpreted as 28 Feb 1900 in Delphi due to Delphi starting 1 day before. From the 01 Mar 1901 the two date systems […]

Read More

An Introduction To App Builder Software For Mac

When choosing the best app builder software for Mac, we use many heuristics and yardsticks to measure and justify our decision. But the irony is if our decision is wrong, our company and our client also have to pay the price. We should be very logical and careful when choosing our development tools. There are many tools and routes available for Mac development. We should consider several things in deciding the best one. In this article we provide an overview of app builder software for Mac, discuss the benefits and how to make good choices when developing cross platform apps for the Mac. Why develop for Mac? macOS is a great environment, and as a developer, you have to build some apps for Mac. Although its market share is several times lower than Windows, its share percentage is snowballing. For example, IDC said that the average adoption of macOS devices is now 23% (Up from 17% in 2019) in the United States, which is a considerable boost. Furthermore, many pundits believe that Mac shipments grow twice as fast as overall PC shipments. Excellent performance by the M1 chip might be one reason behind this. Moreover, the purchasing power of Mac users is more than PC users, and everything is moving toward a bigger and better macOS ecosystem. That is why no developer can ignore Mac. Why should you avoid No Code solutions? If you search online for “app builder software for Mac,” you will find that there are many no-code solutions touted as the best tool in the world. However, this anti-programming mindset is not the right path to take. First of all, if you want to be a great swimmer, then why avoid swimming. Secondly, to date, programmers are not replaceable because the system cannot program their roles for all scenarios. Finally, you must love coding to be a great programmer and always be proud of your profession. Then and only then can you find excellent time-saving tools developed by great programmers. Delphi is at the pinnacle of such tools. What are the criteria for choosing the best app builder software for Mac? Basic options like database development and reporting, theming support, native look and feel, regular updates, etc., are essential to have in any development tool, and that is obvious. Still, there are many other capabilities we need to have in a modern macOS App Builder Software. Let us consider them. Is productivity essential for your development? If the answer to the above question is yes, let me assure you that the RAD Studio is an excellent productivity powerhouse that can help you develop elegant solutions quickly and easily. Why is cross-platform development essential, and what is the easiest way to do it? Cross platform development is vital because it is the way of life of today’s users. Customers expect to have apps for all popular devices they use. However, developing and maintaining an app for multiple devices is tedious and costly. The best way to solve this puzzle is through Delphi. With its cross-platform FireMonkey framework, you can develop a single codebase app to generate NATIVE apps for all devices without costing you an arm and a leg. Why do I think game and media development is necessary to a healthy tech ecosystem? Chip manufacturers are adding […]

Read More

What You Need To Know About TabOrder And Cross Platform Apps

Developers often get requests to create forms where it is crucial to pay attention to the position of a cursor after the Tab key is pressed at every point of the program execution. This can be particularly important when developing cross platform apps where following user’s expectations of how user interfaces should behave can help make your app seem professional. It can be important from different perspectives, including user experience, client’s requirements, and important things like functionality. Delphi provides wide opportunities for this thanks to the implementation of the “TabOrder” property. In this article, we offer you to take a closer look at the TabOrder property in Delphi, to analyze how it’s supported, how it can be used and to see whether there are any limitations. What is a taborder and what does it do? The TabOrder property has been a part of Delphi since the release of Delphi 1. In earlier versions of Delphi, TabOrder was a part of the VCL hierarchy while in newer versions it is a part of FMX with small changes in the hierarchy. When the Tab key is pressed, the focus moves from one control to the next one. Due to the peculiarities of their design, not all controls can receive focus (E.g. TLabel) and not all controls can participate in the tab navigation. Even controls that can receive focus must be explicitly included in the tab sequence. In VCL, TabOrder is defined in the TWinControl class that normally unites components that are derived ultimately from the TWinControl class and will have the TabOrder property. Below you can see a typical declaration of the TabOrder property in the TWinControl class. property TabOrder: TTabOrder read GetTabOrder write SetTabOrder; TTabOrder is defined as an Enumeration that can contain values from -1 to 32767. Controls with a TabOrder value that equals -1 will be skipped during the Tab Ordering when the tab key is pressed. How is taborder different in a cross-platform app? In FMX, TabOrder is a part of the TControl class and is declared similar to the TWinControl class in VCL as described above. There is one more property named TabStop which determines whether a control will receive focus or not depending on the TabStop property value. Controls with a TabStop value that is False will not receive focus regardless of their TabOrder value. This principle is similar to the cases when the TabOrder value equals -1. As per the Embarcadero documentation, the TabOrder property is indicated as the position of the control in its parent’s tab order. This means that each parent control will have its own list of Tab Orders. An ultimate parent form that has all controls sitting over it also contains a list of tab orders for all controls (except the ones which are children of other controls on the same form). The control on the parent form which has a TabOrder set to 0 will have focus when the form first appears. Initially, when you create components at the design time, the tab order is always the order in which controls were added to the form. The first control added to the form has a TabOrder value of 0, the second one’s value equals 1,  the third one has a value of 2, and so on. As we have seen […]

Read More

Everything You Should Know About Windows Subsystem for Android in Windows 11

Probably one of the most exciting new features of Windows 11 is the addition of the Windows Subsystem for Android (WSA). This enables your Windows 11 device to run Android applications that are available in the Amazon Appstore. This new feature is extremely beneficial for both end-users and developers. Similar to Windows Subsystem for Linux (WSL), WSA makes cross platform development of Android apps on Windows easier and more manageable. In this video, Jim McKeeth and Scott Hanselman will discuss everything about WSA from the perspective of developers. How to set up WSA and use it for cross platform development This webinar is hosted by Embarcadero’s Developer Advocate Jim McKeeth and Microsoft’s Partner Program Manager Scott Hanselman to discuss the newly added Windows Subsystem for Android feature in Windows 11 from the developer’s perspective. WSA is indeed a great advantage for end-users because it finally allows them to access their favorite apps using the Windows operating system via Amazon App Store. This also means that they do not need any third-party emulators like BlueStacks or NOX to access their apps straight from their PC. However, how does this feature weigh-in for app developers? Watch the video for a ton of Windows cross platform development tips The discussion will take a deep dive into WSA from the process of installation to the easiest way to configure WSA for Android for use in software development. See what is required to run WSA as well as what is required to target it from your Android development. WSA is available for public preview on Windows 11 and you will be asked to download the Amazon App Store from the Microsoft store to download your favorite apps. What is the Houdini software and how does it help cross platform development? The video will also briefly highlight Houdini, a 3D animation software application for app developers. We will also get details about ADB (Android Debug Bridge), a command-line tool included in the Android SDK development kit. With the help of the Android Debug bridge, you can install custom ROMs, mods, GApps, backup Android, flash official stock firmware, and install Android apps. Here, we will get some important ADB sideload commands. To know more about WSA in Windows 11, feel free to check the video below.  

Read More