Noutați

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

Manager of France’s .fr domain selects GitLab for its DevSecOps capabilities

Association Française pour le Nommage Internet en Coopération (Afnic) is a longstanding nonprofit in France that manages .fr domain names. Chosen 20 years ago by the French State to operate the .fr country code top-level domain, Afnic’s motto is “reliability first.” Afnic uses GitLab, The One DevOps Platform, to help sustain that motto through modernization of its software development environment. Afnic’s mission as the French National Top Level Domain Registry is to bring together public authorities, Internet users, and domain name professionals to build a secure and stable Internet, open to innovation and in which the French Internet community plays a leading role. Outages of such a digital service could prevent the provisioning of other services that rely on it and could thus have an impact on key economic and societal activities. Afnic started using GitLab about four years ago to build and secure the brand-new version of its Shared Registry System (SRS). The SRS is a platform that manages the domain names from the subscription of a domain name to the publication in the DNS database and all the updates during its life, including contacts, server names, and DNSSEC keys, according to Richard Coffre, Afnic’s principal product manager. Since the project began, all the technologies have changed. Previously, Afnic’s team was mainly using Java and Perl and now they use Kubernetes, Angular, the latest version of Java, and Docker, among others. Security is paramount, and the team is using private clouds. That means Afnic has its own data centers in France and in colocation facilities all over the world. Modernizing software development with automation and integration Afnic selected GitLab to automate and integrate processes during the deployment process. Previously, the majority of things were done manually and now Afnic’s team wants to follow DevSecOps philosophy and governance. They wanted one DevOps platform with state-of-the-art CI/CD capabilities, the ability to quickly onboard new developers, and features to improve compliance and monitoring functionality. Now, Gitlab is one of the core components of Afnic’s systems. The company’s use of GitLab expanded as they deployed new versions of Java and Docker and other technologies. “We wanted to take a big step to align our technology with the state of the market,” Coffre says, and after surveying the development team, the choice was GitLab. The team is integrating GitLab with Jira, which is providing a lot of value, he adds. Now, in addition to developers, Afnic’s database administrators and network administrators use GitLab. The team is using Docker for images and Ansible. Jira is used for ticketing issues and is linked to GitLab and Confluence as a wiki to create the documentation. What GitLab brings to the table The goal for Afnic is to increase automation and to have everything in the same place and for anyone to be able to get at the proper version anytime. “That’s the strength of GitLab,” Coffre says. “That’s also why we chose it because it’s one of the leaders. Like many modern source code management systems, GitLab allows our developers to concurrently create source code. But it does it easily, giving us the possibility to do it safely, remembering our motto.” Previously Afnic used only open source tools that they had to customize, which Coffre says was not efficient on a daily basis. To manage source code […]

Read More

GitLab provides small business with a professional, mature DevOps platform

Blonk is an international leader in the field of environmental and sustainability research in the agri-food sector. But as a small business without a QA team or a security team, the challenge was figuring out how to deliver professional software with only a few developers. Blonk used an external company to help set up what Bart Durlinger, product development manager, and software devevloper Pieter van de Vijver envisioned as its platform at the time. “They set up an environment on Amazon, a separate built server, a separate repository, and then some scripts in between to link it all together,” Durlinger recalls. “But when we decided to take more control, that was just too complex. We had too many different parts in many different places. We didn’t have the capacity at the time to really oversee how this should all work together.” That’s when the Blonk team started looking for platforms that offered a more integrated approach, with project management, CI/CD, repository, and version control features all in one place. Mature, with a modern vision of software development Blonk turned to GitLab after finding that the platform “had a lot of the things you need to have a professional delivery pipeline integrated into one solution,” says Durlinger. At the time, the consultancy was using GitHub, which was more expensive, he says. When Blonk started with GitLab, the platform was free, which was a big factor in its selection, van de Vijver says. “But it was also an up-and-coming startup with a vision of that CI/CD integration built into how you envisioned the whole service itself,” he says. “GitHub was more of a repository that might provide you with those things, but it required more manual setup.” Blonk liked that GitLab was a mature and stable solution “but still new enough to have a vision of how software is approached nowadays with easy setup and an integrated pipeline by default, and useful branching strategies by which you could support a multi-level, multi-stage deployment process easily,” Van de Vijver says. At the time Van de Vijver was the only one at Blonk with a background as a software developer, and another bonus was his familiarity with all the tools in GitLab. “By using GitLab, we could hit the ground running, and keep the scale small. You don’t have to worry about all kinds of CI/CD operations and integrations and the configuration of that but use it just out of the box,” he says. How Blonk is utilizing GitLab today Currently, Blonk has 38 GitLab premium licenses, about half of which are used by software developers. The rest are used by data scientists, consultants, project managers, and others, so there are different ways the platform is utilized within the company; that also means there are different levels of software literacy but that hasn’t been an issue. The software development team has been onboarding very junior developers over the past couple of months, and “never have I had questions of how to do stuff in GitLab, because the platform is very intuitive,” Durlinger says. The software development team has been integrated further into the core business, which also fits nicely with GitLab’s services, including the milestones Blonk uses as well as its repositories and project management strategies. “Also data scientists and methodology developers are now […]

Read More

GitLab extends Omnibus package signing key expiration by one year

GitLab uses a GPG key to sign all Omnibus packages created within the CI pipelines to insure that the packages have not been tampered with. This key is seperate from the repository metadata signing key used by package managers and the GPG signing key for the GitLab Runner. The Omnibus package signing key is set to expire on July 1, 2022 and will be extended to expire on July 1, 2023 instead. Why are we extending the deadline? The Omnibus package signing key’s expiration is extended each year to comply with GitLab security policies and to limit the exposure should the key become compromised. The key’s expiration is extended instead of rotating to a new key to be less disruptive for users who do verify package integrity checks prior to installing the package. What do I need to do? The only action that needs to be taken is to update your copy of the package signing key if you validate the signatures on the Omnibus packages that GitLab distributes. The package signing key is not the key that signs the repository metadata used by the OS package managers like apt or yum. Unless you are specifically verifying the package signatures or have configured your package manager to verify the package signatures, there is no action needed on your part to continue installing Omnibus packages. More information concerning verification of the package signatures is available in the Omnibus documentation. If you just need to refresh a copy of the public key, then you can find it on any of the GPG keyservers by searching for support@gitlab.com or using the key ID of DBEF 8977 4DDB 9EB3 7D9F C3A0 3CFC F9BA F27E AB47. Alternatively you could download it directly from packages.gitlab.com using the URL: https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg What do I do if I still have problems? Please open an issue in the omnibus-gitlab issue tracker. Sign up for GitLab’s twice-monthly newsletter

Read More

Cryptocurrency tracking in Delphi with FNC Chart

We, as developers, seek for new exciting APIs, new components that offer that little bit extra, or something completely new and mindblowing. As component developers, it’s a daily quest to put new and exciting features into our components, and offer them to our customers. Now, the FNC framework offers a lot of components to complete various tasks. Even when being excited to create a lot of new components, it’s often good to reflect on what has been done already and see where we can improve. TMS FNC Chart was the first FNC product and was an introduction into cross-platform, cross-framework and cross-IDE development. At the time it was released, VCL and FMX were supported. Later we added Lazarus, and TMS WEB Core support. More time was required to support multiple frameworks and operating systems and iron out all the differences. We immediately had an idea to create more UI components which resulted in the variety of FNC framework based component sets we have today. Meanwhile, we decided it was time to go back to the beginning, to our very first FNC product and see what can be improved. Today, we want to reveal some new and exciting features coming up in v2.0 as well as a small sample on what that means for you as a customer/developer. TMS FNC Chart v2.0  Coming up in v2.0 Inherited types: TTMSFNCChart was the only component available, and the series types had to be changed there, each time a new instance of TTMSFNCChart was used. In v2.0 we introduce inherited types, which means that there will be a descendant class type for each series type, for example: TTMSFNCBarChart, TTMSFNCLineChart, TTMSFNCPieChart, … . Using these new set of classes will preset the series type upon creation, adding new series will also be the correct type and there is a designtime preview that will resemble more what the chosen type should represent. Appearance & color themes: The chart displays various elements such as a title, x-axis, y-axis and each of those elements can be customized with a lot of properties. Changing the overal look & feel of the chart can take quite some time. In v2.0 we want to introduce a global appearance, which applies font name, color and the ability to up-scale all fonts in the chart in one go. Additionally, we also wanted to make the chart more color friendly and dynamic. 2.0 introduces a new custom color list, excel style and monochromatic colors. Data import: The chart can obviously visualize data. The data comes from various source types and currently, there are no helper methods of any kind to makes this possible. In v2.0 it will be possible to load data from CSV, JSON and predefined data arrays with a lot of customization options. Database support: In v2.0 we also bring read-only database support. The TTMSFNCChartDatabaseAdapter will be available as a separate component and will dynamically recognize fields as series with the flexibility of adding further customization.  Grid linking: In the TMS FNC UI Pack, we have the TTMSFNCGrid component. In v2.0 it will be possible to link the grid to the chart via the TTMSFNCChartGridAdapter component. An example based on cryptocurrency Cryptocurrency is hot topic and, in one way or another, keeps us occupied, interested at the very least. Looking up various known and […]

Read More