From the blog

How what we learned at KubeCon EU 2022 will impact our product roadmaps

After two years of only virtual KubeCon events, the GitLab product team was excited to participate in and meet colleagues, partners, and more from our industry at KubeCon EU 2022, held in Valencia, Spain. We were present with four product leaders, a software developer, and a UX researcher. This post summarizes our primary takeaways from the conference, an experience that will affect our roadmaps. We will discuss the following topics: Internal platforms and GitOps Secrets management Infrastructure integrations WebAssembly a.k.a. WASM There were 32 topic types and several 0-day events at KubeCon. Many talks focused on a few tools. Many Cloud Native Computing Foundation (CNCF) projects had their community meetings during these days. Some talks were given IRL, and others were broadcast virtually with live Q&A. There were a variety of topics and approaches. There were many talks about the various aspects of cluster management, too. However, we left this topic out on purpose because at GitLab we want to focus on the software developers and provide one DevOps platform to support their work. Cluster management is one step away from this focus. Still, we noticed some remarkable patterns as highlighted by the four elements of our list. You’re invited! Join us on June 23rd for the GitLab 15 launch event with DevOps guru Gene Kim and several GitLab leaders. They’ll show you what they see for the future of DevOps and The One DevOps Platform. Internal platforms and GitOps Companies want their developers to focus on their core business. They create internal platforms to hide the complexity of Day 0-2 operations from their software engineers and still allow the “shift left” movement of DevOps. These platforms often involve the welding of several tools. Many talks presented how the given team or company approached their platform problem and what tools they used, and one could often feel the 18-month sweat of a whole platform team trying to come up with a solution. These platforms use either a push- or pull-based model for deployments. No single approach is emerging due to legacy applications and different requirements. While there is a definition of GitOps provided by the OpenGitOps initiative, several presenters offered their own definitions, including of pull-based deployments. We fielded a large-scale survey related to secrets at KubeCon, and learned that users would like help with the Pipeline Authoring workflow. Besides the wiring of the tools, the industry is still looking for a unified approach to multi-tenancy (there might not be one), and sometimes integrating security processes seems overly challenging. How does this affect our roadmap? There is a lot of potential in building a platform used as the starting point for internal platforms. Imagine a “tool” that shortens the time required to create an internal platform to days or weeks instead of a whole year. This is the GitLab vision of The One DevOps platform. As a result, we don’t plan any changes in our direction. We will continue investing in the recently started Deployment direction to provide all the building blocks for a platform in a single tool and are already actively looking for integrated experiences across our offering. We’re working on a CI/CD Component Catalog that includes CI templates. This will support the Pipeline Authoring workflow. Secrets management One of the things that often came up in our […]

Read More

A Step-By-Step Guide To Making Mobile Cross Platform Apps

These days, many app developers are looking into building their mobile apps to cater to multiple platforms. It is essential to create an app that will be able to operate on multiple platforms like Android, iOS, Windows and so on. Creating cross platform apps can be a very challenging process, especially for mobile devices, but it can bring many advantages. Despite the challenges, picking the right software development platform, especially one which has a low code ideology such as RAD Studio Delphi, is not an insurmountable hill to climb. The right IDE software mitigates a lot of the difficulty and helps you create apps with the minimum of required effort from you and with the maximum efficiency. Using a highly capable tool such as RAD Studio and the Firemonkey FMX framework for cross platform apps means you can focus on one code base for your app even if it’s going to run on multiple mobile targets such as iOS and Android. This guide will give you some pointers in creating a cross-platform app that will be able to run on multiple platforms. You will also learn how to make your app highly efficient, which is an essential part of mobile app development. Working smarter, not harder is the whole philosophy behind RAD Studio Delphi. Let’s start by discussing what building cross platform apps actually entail. What do we mean by development of cross platform apps? Cross-platform development is a process that will allow you to create an app that will be able to run on multiple platforms. The most common examples of cross-platform apps are mobile apps, which are basically software applications designed to run on mobile devices. This is a direct opposition to proprietary app development which is developed specifically to only run on a single platform. These kinds of apps often use a technology which is supplied by the hardware manufacturer and can lock the developer into that mobile hardware vendor’s ‘ecosystem’ where they provide the development tools, the hardware on which you must develop and even the app store through which you must distribute your app. These vertical development solutions can seem attractive since the vendor often streamlines the process to market – as long as that market is the one they exclusively control. Going down that route can often mean inadvertently creating cross platform apps which cannot actually work on another hardware platform without substantial rewrites, sometimes total re-engineering of the solution. Meanwhile, the idea behind genuine cross-platform development is to save developers a lot of time and effort while providing them with the most options for expansion across different hardware vendors. It will also allow developers to market their apps in a more efficient way, as they can reach out to a wider pool of potential users. Ideally, you can minimize the effort it takes to manage code while simultaneously cutting back on costs, since you’d only need one development team. Picking a tool which maximizes the idea of a single code base for the app, with minimal changes required to target another platform, is the smart choice. What is the secret to efficiently targeting multiple device types with mobile cross platform apps? What’s the secret? Choosing the right cross platform development frameworks. These are the building blocks that will help you develop your app […]

Read More

10 Unsupervised Machine Learning Algorithms: What Are They And How To Create Them

Machine Learning is one of the hottest software development topics right now. The algorithms and techniques which enable machine learning have begun to really mature and have graduated from ‘interesting ideas’ into providing genuine power and permitting capabilities in our apps which can sometimes seem magical just as much as they are useful. Python has very quickly emerged as a de facto language for machine learning. There is rich set of machine learning libraries available for Python providing the ability to do everything from image recognition to complicated scientific analyses. How to use machine learning libraries to Delphi Did you know that it’s simple to use some truly excellent Python libraries to boost your Delphi app development on Windows? All that wonderful array of Python machine learning goodness is also easily available to you as a Delphi programmer. Adding Python to your Delphi code toolbox can enhance your app development by bringing in new capabilities that allow you to provide innovative and powerful solutions to your app’s users, combining the best of Python with the supreme low-code and unparalleled power of native Windows development that Delphi provides. Are you looking for how to build a GUI for a powerful Unsupervised Machine Learning library?  You can build a state-of-the-art unsupervised learning solution with scikit-learn on Delphi. This article will demonstrate how to create a Delphi GUI app dedicated to the scikit-learn library. Watch this video by Jim McKeeth for a thorough explanation of why you can love both Delphi and Python at the same time: What is the scikit-learn machine learning library? scikit-learn logo (source: scikit-learn.org). scikit-learn is an open-source Python machine learning library. scikit-learn has simple and efficient tools for predictive data analysis that are built on top of SciPy, NumPy, and Matplotlib. Support vector machines, random forests, gradient boosting, k-means, and DBSCAN are among the algorithms available in scikit-learn for classification, regression, and clustering. In this article, we will specifically talk about clustering algorithms. What is unsupervised machine learning? Unsupervised learning, also known as unsupervised machine learning, analyzes and clusters unlabeled datasets using machine learning algorithms. Without human intervention, these algorithms uncover hidden patterns or data groupings. Its ability to detect similarities and differences in data makes it an ideal solution for exploratory data analysis, cross-selling strategies, customer segmentation, and image recognition (source: IBM Cloud Education, 2020). What is clustering and how does it relate to machine learning? Clustering is a type of unsupervised learning problem. Cluster analysis is another name for this technique. It is frequently used as a data analysis technique for discovering interesting patterns in data, such as customer groups based on their behavior. There are numerous clustering algorithms available, and there is no single best clustering algorithm for all cases. Instead, it is a good idea to experiment with various clustering algorithms and different configurations for each algorithm. A cluster is frequently a dense area in the feature space where examples from the domain (observations or rows of data) are closer to the cluster than to other clusters. The cluster may have a sample or point feature space as its center (the centroid), as well as a boundary or extent (source: Brownlee, machinelearningmastery.com, 2020). A comparison of the clustering algorithms in scikit-learn (source: scikit-learn.org). What is the difference between supervised and unsupervised machine learning? The following infographic created by AltexSoft may […]

Read More

How To Detect And Extract Text In Images With Amazon Textract

Text is everywhere! Text is not always where we want it, or in the format we need. We often find ourselves needing the text from images. You might have a scanned document containing financial information like an invoice you want to input into an accounts system, or maybe you are building an archive of photographs that you want to index against any text detected? Whatever your use case, if you need to get some text from an image, you can achieve this with ease in Delphi programming software using Amazon Textract using the latest version of Appercept AWS SDK for Delphi. What is Amazon Textract and what does it do? Amazon Textract provides text detection and analysis for image documents. Textract can analyse the relationships between detected text objects and provide information relating to forms, financial, and identity documents. Let’s detect some text… program DetectText; {$APPTYPE CONSOLE} implementation uses AWS.Textract; var Client: ITextractClient; Request: ITextractDetectDocumentTextRequest; Response: ITextractDetectDocumentTextResponse; begin Request := TTextractDetectDocumentTextRequest.Create; Request.Document := TTextractDocument.FromFile(‘C:image.png’); Client := TTextractClient.Create; Response := Client.DetectDocumentText(Request); if Response.IsSuccessful then begin for var LBlock in Response.Blocks do WriteLn(Format(‘Detected %s: %s’, [LBlock.BlockType, LBlock.Text])); end; end. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 program DetectText;   {$APPTYPE CONSOLE}   implementation   uses   AWS.Textract;   var   Client: ITextractClient;   Request: ITextractDetectDocumentTextRequest;   Response: ITextractDetectDocumentTextResponse;   begin   Request := TTextractDetectDocumentTextRequest.Create;   Request.Document := TTextractDocument.FromFile(‘C:image.png’);     Client := TTextractClient.Create;   Response := Client.DetectDocumentText(Request);   if Response.IsSuccessful then   begin     for var LBlock in Response.Blocks do       WriteLn(Format(‘Detected %s: %s’, [LBlock.BlockType, LBlock.Text]));   end; end. Is there an example of using Amazon Textract? To help you experiment and get started, check out the Textract demo in the AWS SDK for Delphi Samples repository. About Appercept AWS SDK for Delphi Appercept AWS SDK for Delphi is available exclusively on GetIt with active Enterprise or Architect subscriptions for Embarcadero Delphi or RAD Studio. You can install the SDK through the GetIt Package Manager within Delphi or RAD Studio if you have an active subscription.

Read More

What Are The Best UI Frameworks For Windows App Development And How To Add The Wow Factor To Them

The recent version of Microsoft Windows brought a vast of important upgrades and changes which also made a huge impact on the entirety of windows app development. When developing a Windows application, one of the first things to consider is the User Interface. There are a great number of UI frameworks to choose from and each comes with its own strengths and weaknesses. In this webinar, Embarcadero MVP Ian Barker will deep dive into some of the best UI frameworks for Windows and the advantage of using them for application development. He will also share some methods of creating the best User Interface possible. The challenges of using Windows 11 and the use of its native Win UI3 Library While the interface of Windows 11 is undeniably appealing, it can also be slightly terrifying for some users. The changes made in Windows 11 are all visually recognizable. One of which is the new centered toolbar. Although the new toolbar is set in the center by default, this can still be configured and placed back on the left side which we are all very familiar with. There is also a new type of Windows behavior known as Windows Snapping that allows you to align your programs up so they are more organized. Windows comes with its own UI library. The newest generation is the Win UI3 which can be used to build production-ready desktop/Win32 Windows apps. Despite being a native GUI library for Windows, Win UI 3 is notably more complex compared to other UI frameworks. If you are looking for Windows 11-friendly UI frameworks that are more manageable, Delphi’s VCL and FireMonkey (FMX) libraries are surely a perfect fit. How to add a “WOW” factor to your VCL and FMX Apps Ian Barker will also discuss how to make the user interface of your VCL or FireMonkey apps more visually appealing. There are cool things you can do with the FireMonkey and with the VCL that can emulate Window’s Fluent UI design system and some of its behaviors. You can also take advantage of third-party suppliers such as the StyleControls VCL which provides the whole set of components allowing you to produce fluent UI interfaces. Skia4Delphi can also turbo-charge your FireMonkey and VCL apps. Skia4Delphi is an open source 2D graphics library that provides common APIs that work across a variety of hardware and software platforms. We can also recall Barker creating a Star Trek-inspired data dashboard using the Skia4Delphi library. To know more about the best UI frameworks for Windows 11 development, feel free to watch the video below.

Read More

Benchmark Study: Which Target Platforms Do Electron And Delphi Support?

Which target platforms do Delphi and Electron support? The “Discovering The Best Cross-Platform Framework Through Benchmarking” whitepaper evaluates two frameworks supporting multi-platform desktop application development: Delphi and Electron. Delphi Delphi, encapsulated in the Rapid Application Development (RAD) Studio IDE, is Embarcadero Technologies’ flagship product. A proprietary version of the Object Pascal language, Delphi features graphical application development with “drag and drop” components, a WYSIWYG viewer for most mobile platforms, and robust style options including platform-standard and unique palettes that provide a fully customized look and feel. Among other features, included libraries provide GUI controls, database access managers, and direct access target platform hardware and platform operating systems. The Delphi FireMonkey (FMX) framework will compile projects to native code for 32-bit and 64-bit Windows, macOS, Android, iOS, and Linux, allowing users to develop and maintain one codebase reaching most of the market. Delphi has been available for over 25 years. Electron Electron is an open-source (MIT License), Chromium-based framework that utilizes web technologies to build desktop applications on Windows, macOS, and Linux. It is developed and maintained by GitHub, a subsidiary of Microsoft. Electron combines the Chromium-based rendering engine with a Node.js server environment. As such, the user interface for an Electron application is available via HTML5 and CSS. Generally, Electron works with most Javascript frameworks such as Angular, Vue.js, and React. The HTML5, CSS, and Javascript-based technologies found in Chromium provide a rich ecosystem of user customization familiar to any web developer. Despite its relatively young age of five years, its community boasts open source packages for database access, operating system interactions, and other common tasks. Benchmark Metrics This post is part of a series of blog posts that look more closely at each of the individual metrics used in the study, and how Delphi and Electron each fared on these metrics. The first can be found here. Download the complete whitepaper here Benchmark Category: Flexibility Framework flexibility was examined qualitatively through research and conversation with experts in Delphi and Electron and sought to analyze the application of each framework to business problems and requirements. Delphi’s major advantage in the flexibility category is its ability to deploy one body of source code to any major desktop or mobile platform as a native binary executable, maximizing application market reach while minimizing maintenance/upgrade headaches due to code duplication. The framework supports projects of every scale from logic controllers for industrial automation to world-wide inventory management and functions within every tier from database-heavy back-ends to client-side services. Finally, Delphi’s standard libraries provide simplified access to most database products , fully support Unicode and other modern standards, and broaden access to operating system functionality on every platform as well as I/O devices and sensors. Electron is an open-source framework targeting all desktop operating systems through its Chromium base. It typically focuses on web-centric, client-side applications but can accomplish middle-tier and database services using runtimes and libraries like node.js and node-postgres. Hardware access and limited operating system interactions are provided by node.js libraries and Electron’s Chromium core ensures compliance with modern Unicode standards. After reviewing both frameworks, Delphi holds the lead in the flexibility category due to its flexible and automated deployment to all major platforms, scalability to every level of development, and visual design system. Electron enjoys a lower barrier-to-entry and more development tool options but requires manual […]

Read More

3 keys to success for product operations

It is official. Product operations is a thing. A quick Google search will pull up a long list of articles singing the praises of everything product operations has to offer, from making product managers more efficient to data collection and synthesis. When I first took on product operations at GitLab, there wasn’t a lot of definition or guidance on the topic. I understood what product operations meant because I’d been “doing it” as an inseparable part of my product management and product leadership roles for some years. But I’d never had the opportunity to focus solely on product operations. As excited as I was, I was also nervous. GitLab was accelerating toward an IPO and both the product management team and the product were in hyper growth mode. And, to boot, the all-remote, cross-functional teams were in motion, sync and async, day and night, all around the globe. So, I reached out to peers who had already started their product operations journey and leveraged the perspective, progress, and learnings they generously shared. And, in doing so, I realized everyone was doing it a bit differently. Now, two and a half years later, product operations is a thing at GitLab. And the most common question I get from peers reaching out to me is: How can I set up product operations for success at my organization? To answer this question, I will assume we all want to be product-led and customer-centered, and “success” would be product operations helping us get there. I’ll also assume we agree with the sentiment that’s evolved defining product operations responsibility to fall into these core areas: tools, data, experimentation, strategy, and trusted advisor. While there is no one formula, I will share three keys that opened doors for product operations to make an impact and grow with GitLab. 1. Empower product operations as its own function, with an equal seat alongside other value-driving functions At GitLab, we run product operations as an independent function under the product umbrella. The direct line of responsibility to the head of all product ensures product operations has awareness, alignment, and accountability to the macro needs of the product and the business. This also allows product operations to maintain a broad and unbiased view, as well as the right level of influence, to develop strategies/tactics serving the product and the business without favor toward any particular group. This Silicon Valley Product Group article by Marty Cagan provides more helpful context on the why of this approach. 2. Make product operations a people-first operation Before product operations can deliver on efficiencies and tools that are useful for the product and the business, product operations must understand all of its internal customers. The first year product operations took shape at GitLab, much of my energy was focused on building relationships, not only with product team members but across the whole organization. Becoming a trusted advisor runs deeper than just delivering data, it’s about sensing pain and building bridges. A product operations team that leads with empathy will elevate the organization rather than just serve the organization. 3. Drive adoption of product operations strategies by providing opportunities for team ownership At GitLab, everyone can contribute. Leveraging this mindset for product operations led to more impactful and better-designed iterations to the problems we were trying […]

Read More

Lingo: A Go micro language framework for building Domain Specific Languages

Domain Specific Languages (DSL) are small, focused languages with a narrow domain of applicability. DSLs are tailored towards their target domain so that domain experts can formalize ideas based on their knowledge and background. This makes DSLs powerful tools that can be used for the purpose of increasing programmer efficiency by being more expressive in their target domain, compared to general purpose languages, and by providing concepts to reduce the cognitive load on their users. Consider the problem of summing up the balances of different bank accounts in a CSV file. A sample CSV file is provided in the example below where the first column contains the name of the account holder and the second column contains the account balance. name, balance Lisa, 100.30 Bert, 241.41 Maria, 151.13 You could solve the problem of summing up balances by using a general-purpose language such as Ruby as in the code snippet below. Apart from the fact that the code below is not very robust, it contains a lot of boilerplate that is irrelevant to the problem at hand, i.e., summing up the account balances. #!/usr/bin/env ruby exit(1) if ARGV.empty? || !File.exist?(ARGV[0]) sum = 0 File.foreach(ARGV[0]).each_with_index do |line, idx| next if idx == 0 sum += Float(line.split(‘,’)[1]) end puts sum.round(2) Below is an example AWK script that solves the same problem. AWK is a DSL that was specifically designed to address problems related to text-processing. #!/usr/bin/awk -f BEGIN{FS=”,”}{sum+=$2}END{print sum} The Ruby program has a size of 208 characters, whereas the AWK program has a size of 56. The AWK program is roughly 4x smaller than its Ruby counterpart. In addition, the AWK implementation is more robust by being less prone to glitches that may appear in the CSV file (e.g., empty newlines, wrongly formatted data-fields). The significant difference in terms of size illustrates that DSLs, by being more focused on solving specific problems, can make their users more productive by sparing them the burden to write boilerplate code and narrowing the focus of the language on the problem at hand. Some popular DSLs most software developers use on a regular basis include Regular Expressions for pattern matching, AWK for text transformation or Standard Query Language for interacting with databases. Challenges when designing Domain Specific Languages Prototyping, designing and evolving DSLs is a challenging process. In our experience this is an exploratory cycle where you constantly prototype ideas, incorporate them into the language, try them out in reality, collect feedback and improve the DSL based on the feedback. When designing a DSL, there are many components that have to be implemented and evolved. At a very high level there are two main components: the language lexer/parser and the language processor. The lexer/parser is the component that accepts input as per the language definition which is usually specified specified by means of a language grammar. The parsing/lexing phase produces a syntax tree which is then passed onto the language processor. A language processor evaluates the syntax tree. In the example we saw earlier, we ran both the Ruby and AWK interpreters providing our scripts and the CSV file as input; both interpreters evaluated the scripts and this evaluation yielded the sum of all the account balances as a result. Tools such as parser generators can significantly reduce the effort of lexer/parser development by means […]

Read More

Bookmarks and Navigator are available for RAD Studio 11!

Bookmarks and Navigator, originally known as the Parnassus plugins, are some of our most-requested IDE addons. We’re very glad to let you know they are now available in GetIt for RAD Studio 11. To install, go to the Tools menu in the IDE, GetIt Package Manager, and select the IDE Plugins section in the category selector on the left: Bookmarks is a developer-favourite addon that replaces the editor’s inbuilt bookmarks, with an unlimited number of bookmarks, a handy shortcut (Ctrl+B), avoids overwriting bookmarks accidentally, caret bookmarks for quick toggling of location and reverse/stack navigation, a docked window showing bookmark context, and more. Navigator is a related plugin that helps you quickly navigate anywhere in your code: press Ctrl+G, and type to filter to show all useful elements in the current unit. You can type, for example, ‘prop Foo’ (or even shorter, ‘p f’ or even ‘f’ if you have few enough items to make this useful: it filters more as you type more) to find properties with Foo in their name, or find property read/write fields or methods related to that property… or to navigate to classes, records, enums and other types; unit sections like uses clauses; methods; variables, and more. Anything useful in your unit is shown in Navigator and is quickly accessible. It also adds a minimap to the IDE editor showing where you are in your code. RAD Studio 11 showing the Bookmarks and Navigator plugins both in use: bookmarks are shown in the editor and the docked window on the bottom right, while the Navigator plugin is providing the minimap on the right side of the editor and the floating navigation window where I’m searching for a method Bookmarks and Navigator are usually available immediately with the release, and that did not happen for RAD Studio 11. However, we have configured our internal build so that these plugins will always be available in future: that is, you can feel assured we have internal setup to not repeat the delay. The third Parnassus plugin, Debugger, should also come within a few days. The plugins are available for both RAD Studio 11.0 and 11.1; in fact, the screenshot above is taken with RAD Studio 11.0. Thankyou for your patience waiting for these plugins, and we hope you find the Delphi and C++Builder IDE even more productive and pleasant to use with these extensions! Don’t forget — they’re available right now in GetIt. Happy coding!

Read More

Windows 11 Win32 Debugging Patch for RAD Studio 11.1

There is a new patch (or hotfix) available for RAD Studio 11.1. The patch addresses an issue specific to debugging Win32 apps on Windows 11, where the IDE sometimes appears to freeze. Typical situations where you could observe the freeze include evaluating watches with side effects, opening the Threads view to switch threads, attaching to a process, and other common debugging actions. The issue is caused by getting the thread wait chain (GetThreadWaitChain()), which sometimes takes up to a minute. It is resolved by disabling the thread wait chain feature in the debugger. The exact cause of the thread wait chain delay is unknown but it appears to be related to a thread having a socket open, possibly where the thread is waiting to finish network IO. Thread wait chain information is disabled for Win32 on both Windows 10 and Windows 11. There is an environment variable to re-enable it if you need the feature: set DBK_ENABLE_WAITCHAIN=1 on a command prompt, and run RAD Studio (alternatively, set that environment variable globally for Windows.) Only Windows 11 is affected by the issue, so you only need to install the patch on Windows 11. Installation You can download this in GetIt (our recommended technique; also it will show as available on the Welcome Page when you start the IDE) or install manually after downloading from my.embarcadero.com (the zip file contains a batch file installer.) The RAD Studio 11.1 Welcome screen showing the ‘Patch available’ button. Click this to install patches, including this one. Remote Debugging Because this patches the debugger, if you do remote debugging you will also need to update PAServer on the remote machine. The patch installer replaces the (your RAD Studio install location)PAServersetup_paserver.exe file, but you’ll need to copy that over to the remote machine and install it. There are full details in the patch readme.  

Read More