Writing on software development, system design, linux and in general tech.

I have been writing since 2020, mostly around tech and my career.
In total I have written 148 posts. I hope you enjoy them.

  • # projects# engineering

    I built my own in-house Newsletter system

    Discover how I transformed the need for a newsletter system, sparked by Revue's shutdown, into a fulfilling side project. Dive into the my journey of conceptualizing, breaking down, and building a custom newsletter system that seamlessly integrates with my website's content workflows.

  • # linux

    SystemD Timers vs. Cron Jobs

    Explore the world of task scheduling in Linux as we compare the classic Cron Jobs with the modern SystemD Timers. Learn when to use each method and how to set them up to automate your Linux system tasks effectively.

  • # engineering

    Incremental Static Regeneration: Dynamic Websites with SSR and Cache Headers

    Step into the world of web development magic as we unravel the fascinating tale of Incremental Static Regeneration (ISR). Join me on this journey where we'll explore how to leverage Server-Side Rendering (SSR) with smart cache headers to build dynamic websites that load with lightning speed. Buckle up โ€“ we're about to give your website a turbo boost!

  • # engineering# nodejs

    Running SSL on Localhost

    In today's digital landscape, security is paramount. Secure Sockets Layer (SSL) is a crucial technology that encrypts data transmitted between a user's browser and a website, ensuring confidentiality and integrity. But did you know you can also enable SSL for your localhost development environment? This guide will walk you through the process step by step.

  • # docker

    Reduce Docker Image Size Like a Pro

    Dive into the realm of Docker image optimization and learn how to sculpt sleek and efficient images that won't weigh down your containers. Join me on this journey as we unravel practical techniques and step-by-step methods to trim the excess fat, from choosing the right base image to mastering multi-stage builds. Let's embark on a quest to craft Docker images that are both agile and powerful.

  • # security

    The Dangers Lurking in Free Public WiFi

    Picture this: you're sitting at a cozy cafรฉ, sipping on your latte, and surfing the internet on the free public WiFi. Seems harmless, right? But hold on a sec โ€“ let's talk about the not-so-friendly company you're sharing that network with. Join me as we unravel the risks of using that enticing, but potentially treacherous, free public WiFi.

  • # astro

    Set Up Draft Pages Effectively in Astro with Config-Driven Content Authoring

    Learn how to harness the power of content collections in Astro to manage draft pages effortlessly. Discover how to exclude draft content from production while enabling local content creation, all guided by a smart configuration setup.

  • # javascript# security

    Write Secure JavaScript Applications

    Dive into the realm of writing secure JavaScript applications. Uncover practical strategies to shield your web apps from XSS and CSRF vulnerabilities, ensuring robust and safe software in an interconnected world.

  • # engineering

    What's the Best Programming Language for Game Development?

    If you're interested in the game development industry and want to know more about the best programming language to use, you've come to the right place.

  • # javascript

    Multi-Threaded JavaScript with Web Workers

    Are you tired of slow and unresponsive web applications? Do you want to improve the performance of your JavaScript code without sacrificing user experience? Look no further than JavaScript's Web Workers API. In this article, we'll explore the basics of web workers and how they can help you create multi-threaded web applications.

  • # javascript

    Asynchronous JavaScript Programming: A Guide to Promises, Async/Await, and Generators

    Asynchronous programming is essential in JavaScript to handle time-consuming operations and provide a better user experience. This article will provide a detailed guide to mastering asynchronous JavaScript programming with Promises, Async/Await, and Generators.

  • # javascript

    Event Handling in JavaScript: Understanding Delegation and Propagation

    Event handling is an essential part of JavaScript programming. Whether it's a simple click event or a complex user interface interaction, understanding how events work is crucial to writing effective and efficient code. In this article, we'll explore advanced event handling concepts in JavaScript, including delegation and propagation. By mastering these concepts, you'll be able to write more maintainable and scalable code.

  • # javascript

    Partial Application in JavaScript

    In JavaScript, partial application is a powerful technique that allows you to create new functions by fixing some, but not all of the arguments of an existing function. This technique can help you write cleaner, more concise code, and improve the reusability of your functions. In this article, we'll explore what partial application is, how it works, and how to use it in your own code.

  • # javascript

    JavaScript Design Patterns for Better Code Organization and Maintainability

    JavaScript has become a popular programming language for building complex web applications, but with its increasing complexity, maintaining and organizing code can be a daunting task. However, using design patterns can help you structure your code for better organization and maintainability. In this article, we will explore some of the most common JavaScript design patterns and how to implement them in your code.

  • # javascript

    Boosting Your Website's Performance with JavaScript Code Optimization

    JavaScript is a crucial component of modern web development, and its performance can have a significant impact on user experience. By optimizing your JavaScript code, you can improve your website's loading speed, reduce memory usage, and enhance overall performance. In this article, we'll discuss some advanced techniques for optimizing your JavaScript code and achieving optimal performance.

  • # astro

    Seamless Error Tracking: Integrating Sentry with Astro

    Learn how to enhance your Astro-powered website's reliability by seamlessly integrating Sentry for error tracking. Discover step-by-step instructions to integrate Sentry's browser package for frontend errors and utilize the toucan-js package for API endpoints. Elevate your website's user experience through effective error monitoring and resolution.

  • # system design

    Finding Your Way: Understanding Service Discovery and Service Mesh

    Join me on this tech-savvy adventure as we delve into the fascinating world of service discovery and service mesh. In this blog, we'll navigate through the complexities of distributed systems, exploring how service discovery acts as a compass, guiding applications to find and communicate with each other seamlessly. Get ready to unravel the mysteries of service mesh and understand how it empowers us to control, secure, and optimize the flow of information between microservices.

  • # system design

    Building Resilient Systems: A Guide to Designing for Fault Tolerance

    Join me on a journey into the world of building robust and resilient systems. In this blog, we'll explore the art of designing for fault tolerance, where we'll discover how to prepare our applications to gracefully handle failures and bounce back stronger. So, grab a seat and get ready to fortify your systems against unforeseen challenges.

  • # system design

    Designing for Scalability: Building a Flexible and Future-Proof System

    Join me on an exciting journey into the world of scalable system design. In this blog, we'll explore the art of crafting flexible and future-proof architectures that can handle the growing demands of your application. So grab a cup of coffee, and let's dive into the realm of scalability, where we'll unlock the secrets to building systems that stand the test of time.

  • # system design

    High Availability Architectures: Uninterrupted Services for a Seamless Experience

    Discover the world of high availability architectures and how they ensure your services are always up and running, no matter the circumstances. Join me as we explore the art of building resilient systems that guarantee 24/7 uptime and deliver a seamless experience to users.

  • # system design

    Distributed Tracing and Observability in Your System

    Dive into the world of distributed tracing and observability to gain valuable insights into your system's performance and behavior. In this blog, we'll embark on a human-to-human exploration of tracing techniques and observability tools that empower you to understand the intricate interactions among your microservices. From tracing spans to logging and monitoring, we'll uncover the key components that illuminate the path to a more observable and controllable system.

  • # system design

    Observability and Monitoring: Illuminating the Inner Workings of Large Systems

    Join me on an illuminating journey into the world of observability and monitoring when building large systems. In this blog, we'll demystify the art of understanding, visualizing, and diagnosing the intricate inner workings of complex systems. Get ready to shed light on hidden issues, gain insights, and ensure smooth sailing for your projects.

  • # system design

    Consistent Hashing in Distributed Systems: Navigating Data Distribution with Finesse

    Welcome to the captivating world of consistent hashing in distributed systems! In this blog, we'll explore the elegant technique of consistent hashing that empowers distributed systems to distribute and balance data with finesse. Join me as we unravel the magic behind consistent hashing and discover how it enables seamless scalability and fault tolerance in modern distributed architectures.

  • # system design

    Exploring the Event-Driven Architecture

    In the world of software engineering, architectures play a significant role in determining how a system will behave and perform. One such architecture that has gained popularity in recent years is event-driven architecture (EDA). It is a paradigm that enables developers to build systems that are more scalable, flexible, and responsive.

  • # system design

    Understanding Pub-Sub Messaging

    Pub-Sub messaging is a popular messaging pattern used in modern software development. This pattern enables effective communication between multiple software components that need to exchange messages in a decoupled way. In this article, we will dive deep into the concept of pub-sub messaging and explore how it is used in real-world scenarios.

  • # database

    Solving the N+1 Select Query Problem in Database

    Are you tired of seeing slow database queries in your application? One of the most common causes of this issue is the N+1 select query problem. In this article, we will explore what this problem is and how you can solve it to improve the performance of your application.

  • # database

    Maximizing Query Speed with Database Indexes

    In this article, we will take a closer look at what a database index is and how it works, and we will explore why it is an essential tool for improving the performance of your database queries.

  • # linux

    Mastering Intermediate Linux Commands for Efficient Server Management

    As a Linux server administrator, you may have already learned the basics of Linux commands. However, to manage your server more efficiently, you need to dive deeper into the lesser-known, but equally important intermediate-level commands. In this article, we will cover some of the intermediate-level Linux commands that will help you become a more proficient Linux sysadmin.

  • # linux

    Essential Linux Commands for Server Maintenance at Home

    As a Linux system administrator, it's essential to have a good grasp of the command-line interface. In this blog, we'll explore some of the most common and useful commands used for maintaining a Linux server at home. From handling files to networking, these commands will help you streamline your work and keep your server running smoothly.

  • # linux# docker

    Build Your Own Docker with Linux Namespaces, cgroups, and chroot: Hands-on Guide

    Take a practical approach to containerization as we guide you through the step-by-step process of building your own Docker-like environment using Linux namespaces, cgroups, and chroot. Dive into the code and command examples to gain a deeper understanding of how these technologies work together to create isolated and efficient containers.

  • # linux

    How to Create a Restricted Environment with the Linux chroot Command

    The Linux operating system is known for its flexibility and robustness. One of the many powerful tools available in Linux is the chroot command, which can be used to create a restricted environment within the existing file system. This can be useful in a variety of scenarios, such as testing new software or isolating sensitive data. In this article, we'll explore how to use the chroot command in Linux and provide practical examples to help you get started.

  • # linux

    Linux Control Groups: Fine-Tuning Resource Allocation for Optimal System Performance

    Explore the power of Linux control groups (cgroups) and how they revolutionize resource management in your Linux environment. Uncover the secrets of cgroups to effectively allocate system resources, limit process usage, and optimize performance for your applications and services.

  • # linux

    Linux Namespaces: Isolating Your System for Enhanced Security and Performance

    Discover the power of Linux namespaces and how they enable you to create isolated environments within your system. Dive into this comprehensive guide to understand the concept of namespaces, their benefits, and how they enhance security and performance in your Linux environment.

  • # linux

    FZF: The Ultimate Linux Productivity Tool

    Are you tired of endlessly scrolling through terminal output or file listings? Look no further than fzf! This powerful command-line tool allows you to quickly and efficiently search and select from lists of files, processes, command history, and much more. In this article, we'll explore what fzf is and how you can use it to level up your Linux productivity game.

  • # security

    Mastering App Security: 7 Crucial Risks Every Developer Must Mitigate

    In the world of software development, ensuring the security of your applications is paramount. From protecting user data to safeguarding against malicious attacks, developers must be aware of the potential risks and take proactive measures to mitigate them. In this comprehensive guide, we will explore seven key security risks that every developer should know when building their app. Get ready to enhance your app's resilience and protect your users' sensitive information.

  • # linux# security

    Exploding your system: The deadly Fork Bomb in Linux

    Are you familiar with the term 'fork bomb' in Linux? If not, it is a potentially dangerous command that can severely impact system performance and stability. In this article, we will explore what a fork bomb is, how it works, and how to protect your Linux system from its harmful effects.

  • # linux

    Linux bzip2 and gzip Compression Utilities: An Overview of File Compression

    In the world of Linux, bzip2 and gzip are two popular compression utilities that allow you to compress and decompress files. They are efficient, fast, and easy to use, making them an essential part of any Linux user's toolkit. In this article, we'll give you an overview of bzip2 and gzip, explain how they work, and provide examples of their usage.

  • # linux

    Beyond ext4 โ€” Exploring Linux File Systems Btrfs and ZFS

    Linux is known for its flexibility and customizability, which is largely due to its file systems. While the ext4 file system is commonly used in Linux distributions, there are other options available that offer unique features and advantages. Two of the most notable alternatives are Btrfs and ZFS. In this article, we will explore these file systems and see what makes them stand out from the crowd.

  • # linux

    Linux Package Management: A Guide to apt, dnf, and pacman

    Linux package management can be daunting for new users. With multiple package managers like apt, dnf, and pacman, it can be overwhelming to understand how they work and which one to use. In this article, we'll provide an overview of these package managers and their features to help you get started with Linux package management.

  • # engineering

    Mastering Debugging in VSCode: A Beginner's Guide

    Debugging is an essential part of a software developer's workflow, helping to identify and resolve issues in the code. VSCode, one of the most popular code editors in the development community, provides a robust and user-friendly debugging experience. In this article, we'll take a deep dive into how to set up and use the VSCode debugger to debug Node.js applications.

  • # engineering

    Mastering Debugging: Tips and Techniques for Software Engineers

    Debugging is an essential part of the software development process. It can be frustrating, but with the right techniques, it can also be a rewarding challenge. By following the tips and techniques outlined in this article, software engineers can improve their debugging skills and become more efficient problem solvers.

  • # engineering

    Mastering Google: Advanced Tips for Software Engineers

    As a software engineer, your ability to find and use information quickly can make all the difference. But with the vast amount of information available online, it can be overwhelming to find what you need. In this article, weโ€™ll go beyond the basics and explore advanced techniques to help you become a Google master.

  • # engineering

    How to Google like a Pro as a Software Engineer: Beginner's Guide

    Google is an invaluable tool for software engineers, but knowing how to search effectively is key to finding the right information quickly. In this article, I'll share some tips and tricks to help you Google like a pro and become a more efficient and effective developer.

  • # git# engineering

    Git Beyond Basics: 7 Uncommon Git Commands Every Developer Should Know

    Git is one of the most popular version control systems used by developers worldwide. However, most developers only use a handful of Git commands in their daily work. In this article, we will explore some uncommon Git commands that can help improve your workflow and productivity. These commands will help you to work more efficiently, troubleshoot issues, and collaborate more effectively with your team.

  • # engineering# nextjs# astro

    Embracing the Future: Migrating from Next.js to Astro

    Discover the exciting transformation of migrating a website from Next.js to Astro. Join me as we explore the motivations behind this switch, the benefits of Astro's HTML-first approach, and the valuable insights gained along the way. Embrace the future of web development and unlock new possibilities for your own projects.

  • # engineering

    Demystifying Go-URLs: Unleashing the Power of Shortened URLs

    Explore the world of Go-URLs and discover how they are used in various contexts. From shortening long URLs to enabling deep linking and tracking, Go-URLs offer a powerful way to optimize and enhance your web experiences. Join us on this journey as we unravel the mysteries of Go-URLs and delve into their practical applications.

  • # javascript

    Integration Testing in JavaScript with Jest and Nock: A Beginner's Guide

    Integration testing is an essential part of the software development process, and it ensures that all the components of your application work together as expected. In this article, we'll explore the basics of integration testing in JavaScript and show you how to use Jest and Nock to write effective tests that simulate real-world scenarios.

  • # javascript

    Unit Testing in JavaScript: How to Ensure Code Quality and Catch Bugs Early

    Unit testing is a critical aspect of software development that ensures code quality, improves maintainability, and catches bugs early. In this article, we'll explore the basics of unit testing in JavaScript, including what it is, why it's important, and how to write effective unit tests using popular testing frameworks.

  • # nodejs

    Building and Publishing TypeScript NPM Packages: A Step-by-Step Guide

    Learn how to create and publish your own Npm packages using TypeScript. This comprehensive guide covers everything from setting up your project with TypeScript, using tsup for building, vitest for testing, and semantic release for versioning and publishing. Take your TypeScript projects to the next level and share your code with the world!

  • # system design

    Snowflake ID: Generating Unique IDs for Distributed Systems

    In modern distributed systems, generating unique IDs is crucial for data consistency and scalability. Snowflake ID is a type of unique identifier that is widely used in distributed systems for generating IDs with high precision, scalability, and availability. In this blog post, we will discuss what Snowflake ID is and how it works, and explore its use cases and benefits.

  • # javascript

    Array and Object Manipulation in JavaScript: Advanced Techniques

    Arrays and objects are fundamental data structures in JavaScript. They are used extensively in modern web development to store and manipulate data. In this blog post, we will explore advanced techniques for manipulating arrays and objects in JavaScript. We will cover topics such as flattening arrays, merging objects, filtering and mapping arrays, and much more. By the end of this post, you will have a deeper understanding of JavaScript's array and object manipulation capabilities.

  • # javascript

    Mastering Iterators and Generators in JavaScript: A Beginner's Guide

    JavaScript's ability to handle data manipulation and iteration has been enhanced with the introduction of iterators and generators. These powerful features allow developers to write more concise and efficient code for handling complex data structures. In this article, we'll explore what iterators and generators are, how they work, and how to use them in your code to simplify data manipulation. Whether you're a beginner or an experienced JavaScript developer, this guide will provide you with the foundational knowledge you need to master iterators and generators in JavaScript.

  • # javascript

    Mastering the Art of Currying in JavaScript: A Beginner's Guide

    Are you tired of dealing with multiple function arguments in your JavaScript code? Currying is here to simplify your life! Learn how to use this powerful technique to create reusable and flexible functions in JavaScript.

  • # javascript

    Functional Programming in JavaScript: An Introduction

    Learn the basics of functional programming in JavaScript, a paradigm that emphasizes immutability, higher-order functions, and pure functions. Discover how to create more reliable and maintainable code by following this programming style.

  • # javascript

    Understanding Pure Functions in JavaScript: A Comprehensive Guide

    Pure functions are one of the most important concepts in functional programming. In JavaScript, they play a critical role in creating maintainable and predictable code. In this article, we will explore what pure functions are and how they work in JavaScript, along with some code examples.

  • # javascript

    The Power of Immutability in JavaScript

    Immutability is a concept that has been gaining a lot of attention in the world of programming, and JavaScript is no exception. Immutability refers to the ability to create data structures that cannot be changed after they are created. In this blog, we will explore what immutability is and why it is important, along with some examples of how to achieve it in JavaScript.

  • # javascript

    Demystifying Higher Order Functions in JavaScript

    Higher Order Functions are an essential aspect of functional programming in JavaScript. They allow developers to write more concise and reusable code, making it easier to manage complex codebases. In this blog post, we will take a deep dive into Higher Order Functions and explore their potential uses.

  • # javascript

    Demystifying Closures and Lexical Scopes in JavaScript

    JavaScriptโ€™s closure and lexical scope features can be confusing for many developers, especially those coming from other programming languages. However, understanding these concepts is essential to write efficient and reliable code. In this article, we will dive deep into closures and lexical scoping in JavaScript, explore their nuances, and provide practical examples to help you grasp the concepts with ease.

  • # linux

    How to Use the Linux Socat Command for Bidirectional Data Transfer Between Network Connections

    The Linux socat command provides a powerful and flexible solution for bidirectional data transfer between network connections. In this article, we'll explore how to use the socat command in Linux and provide practical examples to help you get started.

  • # linux

    How to Use the Linux Shred Command for Secure File Deletion

    Deleting a file from your computer's hard drive doesn't actually erase the data, leaving it open to recovery by unauthorized individuals. The Linux `shred` command provides a simple and effective solution to securely delete files from your computer's hard drive. In this article, we'll explore how to use the `shred` command in Linux and provide practical examples to help you get started.

  • # linux

    How to Use the Linux Netcat Command for Network Communication and Testing

    The Linux 'nc' command, also known as Netcat, is a versatile networking tool that can be used for a variety of tasks such as network communication, port scanning, file transfer, and network testing. It provides a simple and effective way to connect and interact with other networked devices. In this article, we'll explore how to use the 'nc' command in Linux and provide practical examples to help you get started.

  • # linux

    A Beginner's Guide to Using the Linux Mount Command for File System Management

    The Linux mount command is a powerful tool that allows you to attach file systems to your system's file hierarchy. In other words, you can use the mount command to access the contents of a file system, which may be stored on a local hard drive, network server, or even a CD or USB drive. In this article, we will cover the basics of using the mount command to mount and unmount file systems on Linux systems.

  • # linux

    Splitting and Concatenating Files on Linux Made Easy with the split Command

    The Linux operating system is a favorite among developers, system administrators, and power users due to its flexibility, security, and stability. One of the many built-in utilities available in Linux is the split command, which is used to split large files into smaller, more manageable parts or join multiple smaller files into a single, larger file. In this article, we'll explore how to use the split command for file splitting and concatenation, and provide practical examples to help you get started.

  • # linux

    How to Use the Linux lsof Command for Listing Open Files and Processes

    The Linux lsof command is a powerful tool that allows you to view information about open files and processes on your system. In this article, we'll explore how to use the lsof command in Linux and provide practical examples to help you get started.

  • # linux

    Tracing the Network Path with the Linux Traceroute Command

    Have you ever wondered how your network traffic reaches its destination? The Linux traceroute command is a powerful tool that allows you to analyze the network path between your device and a destination server. In this article, we'll explore how to use the Linux traceroute command for network path analysis.

  • # linux

    Mastering Disk Imaging and Cloning with Linux's dd Command

    The Linux dd command is a powerful tool for disk imaging and cloning, allowing users to create exact copies of disks or partitions for backup, recovery, or migration purposes. Though it may seem daunting at first, the dd command is straightforward and easy to use once you understand its basic syntax and options. In this blog post, we'll explore how to use the dd command to create disk images and clone disks or partitions on Linux systems.

  • # linux

    Mastering Batch Processing with Linux xargs Command

    Batch processing tasks can be time-consuming and cumbersome when performed manually. This is where the Linux xargs command comes in handy. It enables you to efficiently process a large number of files or inputs in one go, saving you time and effort. This article introduces you to the Linux xargs command, its syntax, and practical examples of how it can be used for batch processing.

  • # linux

    Simplify Text Processing with the Linux Awk Command

    Are you tired of manually processing and manipulating text files on Linux? The awk command is a powerful tool that can automate these tasks and save you time and effort. In this article, we'll explore the basics of using the Linux awk command for text processing and manipulation.

  • # linux

    Mastering Text Manipulation with the Linux sed Command

    The Linux sed command is a powerful tool for text manipulation. It allows you to search for patterns in text and replace or delete them. With sed, you can automate repetitive tasks and transform text in complex ways. In this article, we'll provide an overview of the sed command and show you how to use it to manipulate text.

  • # linux

    Streamline Your Linux Output with the Tee Command

    Do you find yourself constantly redirecting output to multiple files or commands on Linux? The tee command is a useful tool that allows you to send output to multiple destinations simultaneously. In this article, we'll explore how to use the Linux tee command for redirecting output to multiple destinations.

  • # linux

    Mastering the Linux Tar Command: A Guide to Archive Creation and Extraction

    Have you ever needed to compress multiple files into one convenient package for easier transfer or storage? The Linux tar command is a powerful tool that can create and extract archive files quickly and efficiently. In this article, we'll guide you through the process of using the tar command for archive creation and extraction.

  • # linux

    Mastering the Art of File and Directory Search with Linux's Find Command

    Linux is known for its command-line interface and powerful tools that help users perform various tasks efficiently. One such tool is the 'find' command, which lets users search for files and directories with ease. While the command might seem a bit intimidating at first, it can save users a lot of time and effort in finding files and directories scattered across the system. In this blog post, we will guide you through the basics of using the Linux find command and its various options.

  • # linux

    Mastering Linux grep Command for Searching Text Files and Directories

    Searching for text within large files or directories can be a tedious task, especially if you have to do it manually. Fortunately, Linux offers a powerful tool that can make this process easier and more efficient: the grep command. In this article, we will explore how to use the Linux grep command to search for text within files and directories.

  • # linux

    Simplify Your File Synchronization and Backup with Linux Rsync Command

    Keeping your files synchronized across multiple devices and creating backups can be a daunting task, especially if you have a large number of files to manage. Fortunately, the Linux rsync command can help make this process more manageable and efficient. In this article, we'll explore the rsync command and learn how to use it for file synchronization and backups.

  • # linux

    Mastering Process Monitoring and Management with htop Command in Linux

    When it comes to process monitoring and management on Linux, the htop command is a powerful tool that can help you keep track of all the processes running on your system, and even take action to manage them. With its intuitive interface and advanced features, htop is an essential tool for any Linux system administrator or power user.

  • # networking

    Discover the Power of Subnets: The Ultimate Guide

    Subnets play a crucial role in networking by dividing an IP network into smaller subnetworks. They enable efficient use of IP address space and enhance network security. In this article, weโ€™ll dive deep into subnets, discussing everything from their basics to advanced concepts, and explore how to use them to their fullest potential.

  • # system design

    Exploring the Differences Between HTTP/2 and HTTP/3

    As the internet continues to evolve, so does the protocol that powers it - HTTP. HTTP/2 and HTTP/3 are two of the latest versions of HTTP, both designed to improve web performance and security. In this article, we'll explore the differences between HTTP/2 and HTTP/3 and how they impact the modern web.

  • # system design

    Exploring HTTP/2 Server Push: An Efficient Way to Speed Up Your Web Applications

    HTTP/2 Server Push is an innovative feature of the HTTP/2 protocol that allows web developers to proactively push resources to clients before they even request them. This feature helps in reducing page loading time and enhancing the overall performance of web applications.

  • # system design

    WebSocket: Real-time Communication Made Easy

    Are you tired of relying on traditional HTTP requests for real-time communication in your web applications? Look no further than WebSocket! This powerful protocol allows for two-way communication between a client and server, enabling real-time data transfer without the need for constant requests and responses.

  • # system design

    Understanding Message Queues: The Key to Building Reliable and Scalable Systems

    Message queues have become a fundamental part of modern software systems, allowing developers to build distributed, reliable, and scalable applications. In this article, we will explore the concept of message queues, their architecture, and their use cases in both technical and layman terms. Whether you are building a simple application or a complex system, understanding message queues is essential to designing a robust and efficient solution.

  • # system design

    Understanding Back Pressure in Message Queues: A Guide for Developers

    Are you tired of dealing with message queues that slow down or crash under heavy loads? Back pressure is a common issue that many developers face when working with message queues. But fear not! This guide will explain everything you need to know about back pressure, including how it works, why it's important, and how to master it.

  • # system design

    What is a Cache and How Does it Speed Up Your Applications?

    Caching is a powerful technique used by software engineers to speed up their applications. But what exactly is a cache, and how does it work? In this article, we'll dive into the technical details of caching, explain how it can improve the performance of your applications, and provide real-world examples to help you better understand this essential concept.

  • # system design

    Race Conditions: Understanding and Avoiding Them

    Race conditions can cause unpredictable and hard-to-reproduce bugs in software systems. In this article, we'll explain what race conditions are, why they occur, and how you can design your system to avoid them.

  • # system design

    Understanding Remote Procedure Call (RPC) in Distributed Computing

    Remote Procedure Call (RPC) is a popular mechanism used in distributed computing to allow programs running on different machines to communicate with each other. This article will explain what RPC is, how it works, and provide real-world examples of its applications.

  • # system design

    Understanding Representational State Transfer (REST)

    Learn what Representational State Transfer (REST) is and how it has become the de facto standard for building web APIs today.

  • # system design# networking

    What is UDP and When to Use it? A Comprehensive Guide

    UDP is a lesser-known protocol when compared to TCP, but it plays a vital role in network communication. If you are looking to learn about UDP and its use cases, you have come to the right place. Read on to explore the ins and outs of UDP and when it should be used.

  • # system design# networking

    Demystifying TCP: A Comprehensive Guide to Transmission Control Protocol

    TCP is a fundamental protocol of the internet, and understanding how it works is essential for anyone who wants to know more about networking. In this article, we will demystify TCP and explain how it works in both technical and layman terms.

  • # system design# database

    Understanding Federation in Databases: Definition, Types and Use Cases

    Learn about how federated databases enable the efficient management of distributed systems by allowing for seamless data access and sharing across multiple databases and data sources.

  • # system design# database

    Exploring Sharding in Databases: Partitioning Your Data for Better Scalability

    Sharding is a method of breaking up a large database into smaller, more manageable pieces, allowing for greater scalability and performance. This technique involves distributing data across multiple machines, reducing the load on any one server and enabling faster and more efficient queries. In this article, weโ€™ll dive into the concept of sharding and explore how it can be implemented to improve the performance and scalability of your database system.

  • # system design# database

    Master-Slave Replication: Scaling Your Database for High Availability

    As businesses grow, their databases can become overloaded and slow, leading to a poor user experience. To address this issue, database administrators can use a system called master-slave replication, which allows for multiple copies of a database to be distributed across different servers. In this article, we'll explore the concept of master-slave replication, how it works, and why it's important for achieving high availability in your database.

  • # system design# database

    Exploring Master-Master Replication in Databases: How It Works and Its Benefits

    Master-master replication is a powerful technique that can help you improve the availability and scalability of your database system. But what exactly is master-master replication, and how does it work? In this article, we'll explore the details of this technique, including its benefits and some real-world examples.

  • # system design

    The Power of a CDN: Delivering Lightning-Fast Content

    Do you want your website to load faster for users all over the world? A Content Delivery Network (CDN) is the solution you've been looking for. This article will explore what a CDN is and how it works to speed up your website, giving you a competitive edge in today's fast-paced online world.

  • # system design

    Balancing the Load: Understanding Load Balancers and Their Types

    Dealing with a heavy traffic load on your website or application? Learn about load balancers and how they distribute traffic to keep your online presence running smoothly. Discover the differences between Layer 4 and Layer 7 load balancers and find the right solution for your needs.

  • # networking

    Unlocking the Secrets of SSL Certificates: How They Keep Your Data Safe Online

    Are you curious about how SSL certificates work to secure your online transactions? In this article, we'll explore the technicalities of SSL certificates, including how they encrypt data and the various types available for website owners.

  • # system design# networking

    VPN Explained: Understanding Virtual Private Networks

    Learn about the basic principles and use cases of VPNs, and how they help keep your internet traffic secure and private.

  • # system design

    Unlocking the Power of Forward Proxies: Simplified

    Discover what a forward proxy is and how it can be used to enhance network security, increase browsing speed, and more. Get a clear understanding of this powerful technology and its real-world applications.

  • # system design

    Reverse Proxies: A Beginner's Guide to Unlocking Their Power

    A reverse proxy is an intermediary server that sits between your client and servers, routing client requests to the appropriate server. In this article, we will explain what a reverse proxy is and its benefits, both in technical terms and real-world examples.

  • # system design

    Latency vs Throughput: Balancing the Two Sides of System Performance

    When it comes to optimizing the performance of a system, two key metrics come into play: latency and throughput. But what exactly are these two metrics, and how do they differ? In this article, we'll explore the definitions and real-world examples of latency and throughput, and show you how to balance them for optimal system performance.

  • # system design

    Balancing the Tradeoff: Availability vs Consistency

    In the world of computing, a delicate balance must be struck between two important concepts: Availability and Consistency. But what exactly do these terms mean and how do they impact your systems? Read on to find out!

  • # system design

    Performance vs Scalability: Understanding the Key Differences

    Performance and Scalability, two crucial components of any system design, yet often misinterpreted. In this article, we will dive into the technicalities of both concepts and understand the key differences, helping you make informed decisions for your system's success.

  • # security

    Zero Day Attacks: Understanding the Unannounced Threats

    Discover the dangerous world of zero day attacks and learn how they can exploit vulnerabilities in software to cause harm to businesses and individuals alike. From the definition to real-life examples, this article covers all you need to know about zero day attacks.

  • # security

    Denial of Service Attacks: What They Are and How to Protect Against Them

    Discover the basics of Denial of Service (DoS) attacks and learn how to safeguard your website and online presence from these malicious attacks.

  • # networking

    Understanding DHCP Server - The Essential Guide

    DHCP, or Dynamic Host Configuration Protocol, is a crucial component of modern network infrastructure. In this article, we'll explore what a DHCP server does and how it helps manage IP addresses dynamically in a network.

  • # networking

    Understanding Recursive DNS: A Comprehensive Guide

    Learn about Recursive DNS, how it works and its benefits. Discover why Recursive DNS is important for improving the speed and reliability of domain name resolution and enhancing internet security.

  • # cloudflare# homelab

    Unleash the Power of Self-Hosted Services with Cloudflare Tunnels

    Say goodbye to complicated port forwarding and hello to effortless access to your self-hosted services with Cloudflare Tunnels. Discover how to configure and use this game-changing technology.

  • # cloudflare# homelab

    Dynamic DNS Made Easy with Cloudflare API

    Get rid of the hassle of manual IP updates for your domain with our step-by-step guide on how to create a DDNS using Cloudflare DNS API. Effortlessly keep your domain pointing to your dynamic IP address with just a few simple scripts.

  • # system design

    Concurrency vs. Parallelism: Understanding the Key Differences

    Concurrency and parallelism are often used interchangeably, but they refer to distinct concepts in computer science. In this article, we will break down the differences between concurrency and parallelism, explore the benefits and drawbacks of each, and provide real-world examples to help you better understand these concepts.

  • # performance# database

    Navigating Your Database Efficiently: Cursor Based Pagination vs Offset Based

    Take control of your database performance with cursor based pagination. Learn why it's a better option compared to offset based pagination.

  • # performance

    The Importance of 99th Percentile Latency in System Performance

    Latency is a crucial metric for measuring the performance of any system, and understanding the 99th percentile is crucial for determining real-world performance. In this article, we'll delve into what the 99th percentile means and how it is calculated, with examples to help you understand this essential metric.

  • # golang# homelab

    Installing the Latest Version of Golang on Your Raspberry Pi

    Get started with developing in Golang on your Raspberry Pi. This comprehensive guide will show you how to install the latest version of Golang on your Raspberry Pi, making it a powerful development tool.

  • # nodejs# homelab

    Get Up and Running with the Latest Version of Node.js on Raspberry Pi

    Do you want to run the latest version of Node.js on your Raspberry Pi? This guide will take you through the process of installing the latest version of Node.js on armhf architecture using binary packages.

  • # engineering

    Mastering Dotfiles Management with GNU Stow

    If you're a software developer or a power user who works with a UNIX-like operating system, you might have heard about dotfiles. Dotfiles are hidden configuration files that are used to customize the behavior of applications or the shell environment. In this article, we'll explore what dotfiles are, and how to manage them using the GNU Stow project.

  • # linux

    Effortlessly Manage Torrent Downloads with Headless qBittorrent on Linux

    Learn how to install qBittorrent on a Linux server without a GUI and run it in the background with SystemD for a seamless torrenting experience.

  • # homelab

    Revamp Your Old Android Phone into a Mini Linux Server

    Turn your old Android phone into a portable Linux server with the Linux Deploy app. Learn how to set up a Debian server on your device and use it to host websites, run scripts, and more!

  • # linux

    Running a Service in the Background with SystemV in Linux: A Comprehensive Guide

    Take control of your background services with SystemV in Linux. Learn how to write a SystemV init script, install and start the service, and control its behavior with this comprehensive guide.

  • # linux

    Keep Your Services Running in the Background with SystemD

    Do you want your Linux services to keep running even after you log out of your system? SystemD makes it easy to run services in the background. In this guide, we'll show you how to create a SystemD service, start and stop it, and monitor its status.

  • # linux

    Init Systems Unveiled โ€” Understanding the Differences between SystemD and SystemV

    Get a comprehensive understanding of SystemD and SystemV init systems in Linux. Explore the similarities and differences between these two init systems, with explanations to help you make an informed decision.

  • # linux

    Effortlessly Download Torrents on Your Server with Aria2

    Don't wait hours for torrents to download on your server. Aria2 is a lightweight, open-source download manager that can handle torrents with ease. In this guide, we'll show you how to install and set up Aria2 on your server, download torrent files, and manage downloads.

  • # linux# security

    Stay Secure โ€” Essential SSH Security Practices for Linux Servers

    Protect your Linux server from potential threats by following best practices for SSH security. Learn about using strong passwords, disabling root login, enabling public key authentication, and more in our comprehensive guide.

  • # linux# security

    Protect Your Linux Server with UFW Firewall: A Step-by-Step Guide

    Ensure the security of your Linux server by setting up a firewall. UFW (Uncomplicated Firewall) is a user-friendly firewall that's easy to set up and configure. In this guide, we'll walk you through the process of installing UFW, creating firewall rules, and managing firewall rules in Linux.

  • # homelab

    Building My First Home Lab

    Finally after waiting for a long time, I started building my first Home lab and here's how I got started with it.

  • # cloudflare# security

    How to protect your website from attacks using Cloudflare WAF and Rate Limiting

    In this article, I will explain how I was able to protect my website from attackers and how you can too using Cloudflare WAF and rate limiting.

  • # cloudflare# devops

    How to setup Cloudflare proxy for your website hosted on Vercel or Netlify

    In this article, I will show you how to properly set up Cloudflare proxy for any of your website which is hosted on some other service like Vercel or Netlify.

  • # nextjs

    How I automatically generate a dynamic sitemap in Next.js

    Learn how to generate a dynamic sitemap on build time automatically in Next.js with Contentlayer

  • # bash# postgres

    3 simple steps to create a local backup of Postgres database using Bash script

    In this article, I will show you how I back up the Postgres database hosted on Supabase (ideally can be anywhere) to the local system and automate this process.

  • # security

    Add a Honeypot in your Forms to avoid Spam Submissions

    Learn how to quickly add a spam filter to reduce spam submissions in any of your forms on your website.

  • # react

    How to add fuzzy search to your React app using Fuse.js

    Learn how to create a reusable useSearch hook in react using Typescript to add searching functionality in your app

  • # oss

    Open Source alternatives you must try - Part 2

    List of open source alternatives for Comment systems and virtual meetings

  • # oss

    Open Source alternatives you must try - Part 1

    List of open source alternatives for Analytics and No-code tools

  • # projects

    Journey into "how to professionally say" project

    Join me in the journey of this project which got way more traction than expected

  • # javascript# nodejs