Blog

Articles, “how-to” guides and tech news


  • Merge Sort: A Stable and Efficient Sorting Algorithm

    Merge Sort: A Stable and Efficient Sorting Algorithm

    Reading Time: 3 minutes Merge Sort is a powerful sorting algorithm that guarantees a stable and efficient sorting process, even for large datasets. It uses a divide-and-conquer approach, recursively breaking down the array into smaller sub-arrays before merging them back together in sorted order. In this article, I’ll explore how Merge Sort works, provide a…


  • Quick Sort: A Fast and Efficient Sorting Algorithm

    Quick Sort: A Fast and Efficient Sorting Algorithm

    Reading Time: 3 minutes Quick Sort is one of the most efficient sorting algorithms, widely used due to its superior performance on large datasets. It employs a divide-and-conquer approach to sort elements by partitioning the array into smaller sub-arrays. This article will explore how Quick Sort works, provide a detailed implementation, and discuss its time…


  • Insertion Sort: A Simple Yet Efficient Sorting Algorithm

    Insertion Sort: A Simple Yet Efficient Sorting Algorithm

    Reading Time: 3 minutes Insertion Sort is another fundamental sorting algorithm that is intuitive and easy to implement. It works similarly to how you might sort playing cards in your hands: by building a sorted section of the array one element at a time. In this article, I’ll explore how Insertion Sort works, provide a…


  • Selection Sort: A Simple and Effective Sorting Algorithm

    Selection Sort: A Simple and Effective Sorting Algorithm

    Reading Time: 3 minutes Sorting algorithms are crucial in computer science, and Selection Sort is a straightforward yet effective method to arrange elements in order. This article will explore how Selection Sort works, provide a detailed implementation, and discuss its time and space complexity. How Selection Sort Works Selection Sort is a comparison-based sorting algorithm…


  • Bubble Sort: A Classic Sorting Algorithm

    Bubble Sort: A Classic Sorting Algorithm

    Reading Time: 3 minutes Sorting is a fundamental concept in computer science, and Bubble Sort is one of the simplest and most intuitive sorting algorithms. Despite its simplicity, Bubble Sort provides valuable insights into the basics of sorting and algorithm optimization. In this post, I’ll delve into how Bubble Sort works, provide a detailed implementation,…


  • Structural Design Pattern: Adapter

    Structural Design Pattern: Adapter

    Reading Time: 4 minutes The software engineering landscape is dotted with a plethora of design patterns, each tailored to address specific recurring challenges. Among these is the Adapter pattern, a versatile solution that seamlessly connects otherwise incompatible interfaces. It’s a testament to the ingenuity of software design, allowing diverse classes to collaborate and enhancing both…


  • Building an OpenAI Assistant: A Step-by-Step Guide

    Building an OpenAI Assistant: A Step-by-Step Guide

    Reading Time: 11 minutes Today, we’re going to explore the capabilities of OpenAI‘s powerful GPT technology and how we can utilize it to create an assistant capable of summarising CVs with a single command. OpenAI Assistants harness the power of Generative Pretraining Transformer models (GPT), which are advanced machine-learning models designed to generate human-like text.…


  • Structural Design Pattern: Proxy

    Structural Design Pattern: Proxy

    Reading Time: 5 minutes In software design, efficiency and control are often paramount concerns. The Proxy Pattern emerges as a versatile solution, offering a means to manage object access and resource allocation effectively. Imagine a scenario where a resource-intensive object requires frequent access. Here, the Proxy Pattern acts as a surrogate, intercepting requests and controlling…


  • Structural Design Pattern: Flyweight

    Structural Design Pattern: Flyweight

    Reading Time: 5 minutes In modern software development, optimizing resource consumption is paramount for building efficient and scalable applications. One of the key challenges developers face is managing memory usage, especially when dealing with large datasets or graphical elements in user interfaces. In this article, we’ll delve into the Flyweight design pattern, a powerful technique…


  • Structural Design Pattern: Facade

    Structural Design Pattern: Facade

    Reading Time: 4 minutes In the landscape of software engineering, taming complexity is an ongoing struggle. As systems evolve, they inevitably become larger and more convoluted, making them increasingly challenging to manage. In such scenarios, design patterns emerge as invaluable tools, providing solutions to common design dilemmas. Among these patterns, the Facade Design Pattern shines…


  • Structural Design Pattern: Decorator

    Structural Design Pattern: Decorator

    Reading Time: 4 minutes In the field of software engineering, having codebases that are flexible and easily expandable is crucial. As software becomes more complex, the difficulty of incorporating new features and functionalities increases, all without making the code overly complex or disrupting its existing architecture. This article delves into the Decorator Design Pattern, a…


  • Structural Design Pattern: Composite

    Structural Design Pattern: Composite

    Reading Time: 4 minutes In software design, developers frequently encounter challenges when working with hierarchical structures or collections of objects that adhere to a common interface. Handling such structures efficiently and uniformly can be daunting. This is where the Composite pattern steps in, providing a solution that simplifies the management of complex object structures. The…


  • Structural Design Patterns: Bridge

    Structural Design Patterns: Bridge

    Reading Time: 5 minutes In the dynamic landscape of software development, adaptability and maintainability are crucial attributes of a well-designed system. As applications grow in complexity, managing dependencies and accommodating changes become increasingly challenging. This is where design patterns come to the rescue, offering proven solutions to recurring design problems. Among these patterns, the Bridge…


  • Revolutionize Angular Apps with Signals: guide with Practical Examples

    Revolutionize Angular Apps with Signals: guide with Practical Examples

    Reading Time: 7 minutes If you are familiar with Angular development, then you are likely aware of the latest addition to the framework known as Signals. Signals are a new reactive primitive that allows Angular to track changes to its model. In comparison to RxJS, signals offer a simpler and more performant solution that promises…


  • Authenticate Azure Function to Azure Storage Account using Managed Identity or application service principal

    Authenticate Azure Function to Azure Storage Account using Managed Identity or application service principal

    Reading Time: 7 minutes Azure Functions and Azure Storage Account are two of the most popular services offered by Microsoft Azure. Azure Functions is a serverless computing service that allows you to run event-driven code without having to manage any infrastructure. On the other hand, Azure Storage Account is a cloud-based storage solution that offers…


  • Strongly typed xUnit theory test data with TheoryData

    Strongly typed xUnit theory test data with TheoryData

    Reading Time: 5 minutes TheoryData class In xUnit, test methods can be decorated with attributes like [Fact] or [Theory]. When a test method is decorated with the [Theory] attribute, it means that the method is not testing a single case but instead testing a general rule that should hold true for multiple sets of data.…


  • How I prepared for the Professional Scrum Master Certification

    How I prepared for the Professional Scrum Master Certification

    Reading Time: 3 minutes The PSM I (Professional Scrum Master I) exam is a certification offered by Scrum.org to individuals who wish to demonstrate their understanding and knowledge of the Scrum framework and its principles. The exam is designed for individuals who are responsible for facilitating and coaching teams in the use of Scrum, including…


  • Comparing Hot and Cold observables

    Comparing Hot and Cold observables

    Reading Time: 5 minutes An observable is a pattern in programming that allows us to subscribe to a stream of data, such as a stream of mouse clicks or a stream of API responses. There are two main types of observables: hot observables and cold observables. Difference between hot and cold observables A hot observable…


  • Control the RuleSet executions with FluentValidation in .NET6

    Control the RuleSet executions with FluentValidation in .NET6

    Reading Time: 9 minutes FluentValidation is an open-source library for .NET that provides a fluent API for building validation rules for objects. It allows developers to express the rules for validating an object in a clear and readable way, making it easy to understand and maintain. In this article, we will explore FluentValidation and how…


  • Build a command line application in .NET 6 with System.CommandLine

    Build a command line application in .NET 6 with System.CommandLine

    Reading Time: 6 minutes Purpose of Command Line programs Command-line applications, or CLIs, can be a convenient and powerful way to perform simple tasks quickly and efficiently. Some reasons why it might be interesting to develop a command-line application include: CLIs can be faster to use than graphical user interface (GUI) applications, as the user…