Noutați

5 Tips for managing monorepos in GitLab

GitLab was founded 10 years ago on Git because it is the market leading version control system. As Marc Andressen pointed out in 2011, we see teams and code bases expanding at incredible rates, testing the limits of Git. Organizations are experiencing significant slowdowns in performance and added administration complexity working on enormous repositories or monolithic repositories.  Why do organizations develop on monorepos?  Great question. While some might believe that monorepos are a no-no, there are valid reasons why companies, including  Google or GitLab (that’s right! We operate a monolithic repository), choose to do so. The main benefits are:  Monorepos can reduce silos between teams, streamlining collaboration on design, development, and operation of different services because everything is within the same repository. Monorepos help organizations standardize on tooling and processes. If a company is pursuing a DevOps transformation, a monorepo can help accelerate change management when it comes to new workflows or the rollout of new tools. Monorepos simplify dependency management because all packages can be updated in a single commit. Monorepos offer unified CI/CD and build processes. Having all services in a single repository means that you can set up one system of pipelines for everyone. While we still have a ways to go before monorepos or monolithic repositories are as easy to manage as multi-repos in GitLab, we put together five tips and tricks to maintain velocity while developing on a monorepo in GitLab. 1. Use CODEOWNERS to streamline merge request approvals CODEOWNERS files live in the repository and assign an owner to a portion of the code, making it super efficient to process changes. Investing time in setting up a robust CODEOWNERS file that you can then use to automate merge request approvals from required people will save time down the road for developers.  You can then set your merge requests so they must be approved by Code Owners before merge. CODEOWNERS specified for the changed files in the merge request will be automatically notified. 2. Improve git operation performance with Git LFS A universal truth of git is that managing large files is challenging. If you work in the gaming industry, I am sure you’ve been through the annoying process of trying to remove a binary file from the repository history after a well-meaning coworker committed it. This is where Git LFS comes in. Git LFS keeps all the big files in a different location so that they do not exponentially increase the size of a repository. The GitLab server communicates with the Git LFS client over HTTPS. You can enable Git LFS for a project by toggling it in project settings. All files in Git LFS can be tracked in the GitLab interface. GitLab indicates what files are stored there with the LFS icon. 3. Reduce download time with partial clone operations Partial clone is a performance optimization that allows Git to function without having a complete copy of the repository. The goal of this work is to allow Git to better handle extremely large repositories. As we just talked about, storing large binary files in Git is normally discouraged, because every large file added is downloaded by everyone who clones or fetches changes thereafter. These downloads are slow and problematic, especially when working from a slow or unreliable internet connection. Using partial clone with a […]

Read More

Top 5 Tools In My Web App Development Toolkit

There is no denying that web and mobile apps are the part and parcel of all businesses, whether small or large. Organizations rely on these apps to reach out to their customers, automate their business processes, keep track of sales, monitor employee performance, and even make future strategic decisions. Naturally, this makes web app development a critical process for any software engineer. In the context of web application development, it is important to know about the best Javascript tools to speed up the entire process of app creation. These tools are now a key to accelerating development and reducing the time-to-market. Developers can now spend more time on meeting the requirements of their clients and less time writing boilerplate code. When it comes to tools for Javascript app development, Sencha Ext JS is not just a complete framework for web and mobile app building. It also includes the most important tools required in all stages of app creation. Whether you are designing the app, creating its user interface, writing its business logic, designing its database schema, or packaging it for the end-user, Sencha Ext JS has an automated solution for you. Here is a list of the top 5 must-have tools, which are indispensable for any developer. Continue reading to discover why these tools are important and why you should include them in your app development toolkit. 1. What is Sencha Architect in Web App Development? Sencha Architect is an app builder with a visual interface. You can use Sencha Architect to develop cross-platform HTML 5 web applications for the desktop. As Ext JS is also a complete Javascript mobile app framework, you can use Sencha Architect while building mobile apps. One of the most awesome features of Sencha Architect is that it empowers you to build your apps using drag and drop features. This way you don’t have to spend much time on manual coding. Much of the boilerplate code is generated for you. Moreover, the generated code is optimized for high performance. The automatic code generation feature is available for desktop as well as mobile apps. Configurations and properties of many Ext JS UI components can be altered using a visual WYSIWYG window. This eliminates the chances of code errors that developers often make and helps speed up the overall development time. 2. What is Sencha Themer? While the default styles and themes provided by Ext JS are awesome, they may not be compatible with your organization’s color schemes. Sencha provides an easy solution to customizing all styles, color schemes, and themes with Sencha Themer. Sencha Themer, like Sencha Architect, is also a visual tool with a graphical interface. It enables you to style Ext JS apps without writing a single piece of code. Additionally, you can create custom themes and reuse them in other apps. Sencha Themer also includes a smart color palette, which enables you to apply different color combinations to different component states. The color palette with its progressively lighter and darker color shades makes it very easy to choose the base, body background, and font colors. What’s more, Sencha Themer has a font management option. You can quickly select the fonts of your choice in your app. Additionally, you can add web fonts from Google fonts. 3. How Does Sencha Cmd Accelerate Web App […]

Read More

SerializeReference improvements in Unity 2021 LTS

SerializeReference includes support for polymorphism, which means that a field can be assigned to an instance of a class that derives from the field type. In fact, we support the field type as “System.Object” which is the root base class of every C# class. But this opens up the possibility of a successfully compiled project missing the definitions of classes that were previously available and had been saved into a scene or asset file. In some cases, classes can go missing when source files are removed, classes are renamed, or classes are moved to another assembly. When loading a SerializedReference host object, the fully qualified type name of each managed reference object is examined and must be resolved back to a valid class type in order to instantiate it. In previous versions of Unity, missing classes could put the entire “host” object into an error state without loading any of the valid managed reference objects. So if you had a “host” with an array of 15 managed reference objects, but a single object could not be resolved, then you would not see any of them in the Inspector. There would be an error logged in the console – even though the host object was not visually marked as being in an error state when inspected – and all the edits made would be silently discarded. In Unity 2021, we now instantiate all loadable managed reference objects and replace the missing ones by null. This gives users an opportunity to see more of the state of the host object, and to facilitate the resolution of missing types. Meanwhile, if the missing type is restored while the host object is loaded, then the triggered Domain Reload will restore the managed reference objects, and all fields referencing it will be updated properly. This is an example of how objects with missing types appear in the Inspector: In 2020.3, the Fruit class is missing yet the Inspector does not show any array elements, and there is no indication of an error: In 2021.3, the Inspector warns you that the missing Fruit objects appear as null entries, whereas the Sandwich objects continue to be displayed: The error messages in the console related to missing types have also been updated so that they’re less repetitive – they simply identify which host objects have missing types. Here’s an error message in 2020.3: Compare it to this warning message in 2021.3:

Read More

Revisit your marketing strategy: B2B buyer behavior is changing

As a B2B marketer, you know that the sales rep relationship remains critical to closing deals in the B2B world. But how can you support that relationship-building process in a world where hybrid events are more common? Let’s take a step back and appreciate just how much B2B event marketing has changed.  By necessity during the pandemic, events made a rapid transition from in-person to virtual, and that served the purpose of maintaining a connection with buyers. The rapid rise of video conferencing technology allowed marketers to continue delivering events remotely, albeit in a more restricted way than pre-pandemic.  But events are evolving, resisting the call to return to previous in-person-only formats and instead adopting a more refined hybrid approach. The key benefit of this approach is being able to reach a wide audience, regardless of geography, timezone and other factors. What sets hybrid events apart from remote events is embracing the tools available to enhance the event experience with real-time 3D interactive applications. These can be experienced by both in-person and remote attendees. Maintaining a focus on the all-important B2B buyer journey, marketers can provide buyers in a hybrid event the opportunity to self-educate on products in a way that moves beyond conventional marketing methods such as leaflets and videos. With real-time 3D technology, it’s possible to provide custom-selected supporting information to the buyer, for example, including a personalized sales presentation in a follow-up email that displays the exact product configuration they showed an interest in, along with a quote. Simultaneously, your sales team is equipped with that same data about the preferences of each buyer, placing them in an ideal position to discuss individual needs in the follow-up sales call. Wondering what a virtual showroom really looks like? Check out the story behind one of the world’s top manufacturers for woodworking machinery, who worked with their agency partner to create a fully interactive showroom that not only caters to remote visitors, but also supports the buyer self-serve journey by providing additional product information within the experience. Do your events engage everyone, including in-person and remote attendees? Do they give you the opportunity to gather meaningful insight into what your customers really want?

Read More

Change the look & feel of your chart empowered application with a few clicks!

TMS FNC Chart had a lot of customization options in terms of appearance and overall look & feel, and with a lot of property settings the result was achievable yet time consuming. In v2.0 we went the extra mile and bundled all your highly appreciated feedback into a very exciting new feature: “Global Appearance”. “Global Appearance” is a feature that allows you to customize your component with only a few lines of code, or a few clicks at designtime. Changing the overall look & feel of the chart can now be done in a couple of seconds! Global appearance is a bundle of the following settings and customization options: Monochrome color scheme Excel color scheme Custom/Extendable color list Global font color, name & size Various descendant class types for nicer finetuning To find out more about “Global Appearance”, I invite you to look at this video below. Feedback is important! The above result is based on feedback, your feedback. Sending us suggestions for new features, shortcomings & ideas to improve our products overall are always appreciated. We analyze the feedback and see what is feasible and in which time frame. Then we go ahead and assign a team of experienced developers to the task, which always results in the best possible implementation. Have some ideas? don’t hesitate to contact us and/or leave a comment below.

Read More

Discover The Power And Capabilities Of The FireDAC Data Access Library

FireDAC is a powerful multi-device data access library with a unique set of Universal Data Access Components for developing multi-device database applications for Delphi and C++Builder. It is interesting to note that FireDAC is not just limited to windows application development as it offers complete cross-platform support for RAD Studio. This means that FireDAC can be used on all different platforms including 32 and 64bit Windows, macOS, iOS, Android, and Linux. In this video, Cary Jensen of Jensen Data Systems will walk us through the FireDAC library and why it quickly became the preferred data access mechanism in RAD Studio. What are the Benefits of Using FireDAC? The webinar will provide us with an overview of FireDAC and how it relates to other RAD Studio data access mechanisms. Cary will discuss all the notable basic and advanced features of FireDAC and will guide us through the process of migrating applications to FireDAC from an existing data access mechanism. RAD Studio includes a number of Data Access Mechanisms including dbGo which is used for ActiveX data components, IBExpress for Interbase, the Borland database engine or BDE, dbExpress, and even the myDB which is based on the client data set. Like all the aforementioned frameworks, FireDAC represents the TDataSet interface. Specifically, there is a large number of capabilities introduced into the Tdataset class and those capabilities are found in every one of the data access mechanisms in RAD studio. Interestingly, everything you can do with the BDE is supported by FireDAC. So if you are familiar with using both the BDE and the TdataSet, then you already know how to use this framework. What makes FireDAC so powerful? FireDAC, however, is not just simply similar to BDE. For instance, FireDAC is notably SQL-friendly. It is internally structured a lot like those you find in frameworks like the .NET data set. FireDAC goes beyond the dataset because it implements many other advanced features. It implements aggregates, group states, filtered navigation, and more. To top it all off, FireDAC has client-side indexes. The webinar will also discuss FireDAC’s power and practicality and why it became a top choice among other data access mechanisms. Aside from its complete cross-platform support, FireDAC also has exceptional support for databases. It supports most of the major commercial and open-source databases. Cary will also show a number of demonstrations including the process of migrating applications using ODBC and Side-by-Side Deployment. To learn more about this powerful data access mechanism, feel free to watch the webinar below. You can download a free trial of RAD Studio Delphi today and try the power of FireDAC for yourself.

Read More

How To Come Up With Software Ideas?

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

Read More

TMS WEB Core and More with Andrew: PWA

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

Read More

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

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

Read More

More new TMS WEB Core v2.0 features

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

Read More