General Theory

  • Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part III

    Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part III

    Logging and alerting become truly powerful only when they are embedded into a well-designed security architecture. Individual applications emitting logs or isolated detection rules provide only partial visibility. Modern organisations operate distributed systems composed of microservices, cloud infrastructure, container platforms, and external APIs. In such environments, security visibility requires a unified architecture capable of collecting, analysing, and responding to telemetry across the entire system. Designing Systems That Detect and Respond to Threats A secure observability architecture combines several layers. Applications generate structured logs. Infrastructure produces telemetry about hosts, containers, and network activity. These signals are collected and aggregated through centralized… Go to Post

  • Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part II

    Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part II

    Logging is the foundation of security visibility, but logs alone do not defend systems. A modern production environment may generate millions or even billions of log entries per day. Hidden within this massive stream of telemetry are the signals that reveal active attacks, compromised accounts, and data exfiltration attempts. Without intelligent processing, these signals remain buried inside an ocean of noise. Alerting transforms raw logs into actionable intelligence. It is the mechanism through which suspicious events are detected, prioritized, and escalated to the people or systems capable of responding. In a mature security architecture, logging produces the raw telemetry, while… Go to Post

  • Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part I

    Eyes Everywhere: Secure Logging and Alerting for Modern Systems – Part I

    Modern software systems generate an enormous stream of operational data. Every authentication attempt, database query, API request, container deployment, and network connection leaves a digital trace somewhere inside the infrastructure. Historically, developers treated these traces primarily as troubleshooting aids—temporary clues to diagnose bugs when something went wrong. In contemporary security engineering, however, logs serve a far more profound purpose. Logs are now a primary sensor layer for detecting attacks. The Role of Logging in Modern Security In early software systems, logging existed primarily to support debugging. Developers would emit messages describing program execution so they could understand failures during development… Go to Post

  • The Rise of “Vibe Coding” and Intuitive Software Development

    The Rise of “Vibe Coding” and Intuitive Software Development

    The world of software development is being reshaped by a new, more intuitive approach: “vibe coding.” This method, fueled by advancements in artificial intelligence, is moving the focus from writing syntactically perfect code to expressing the desired outcome in natural language. This deep-dive article explores the essence of vibe coding, spotlights the pioneering tools enabling this shift, and provides a framework for its integration across the entire Software Development Life Cycle (SDLC). Deconstructing the “Vibe”: What is Vibe Coding? At its core, vibe coding is a development practice where a human developer collaborates with an AI-powered coding assistant to generate,… Go to Post

  • Refactoring with GitHub Copilot: A Developer’s Perspective

    Refactoring with GitHub Copilot: A Developer’s Perspective

    Refactoring is like tidying up your workspace — it’s not glamorous, but it makes everything easier to work with. It’s the art of changing your code without altering its behavior, focusing purely on making it cleaner, more maintainable, and easier for developers (current and future) to understand. And in this day and age, we have a nifty assistant to make this process smoother: GitHub Copilot. In this post, I’ll walk you through how GitHub Copilot can assist with refactoring, using a few straightforward examples in JavaScript. Whether you’re consolidating redundant code, simplifying complex logic, or breaking apart monolithic functions, Copilot can… Go to Post

  • Decoding Big O: Analysing Time and Space Complexity with Examples in C#, JavaScript, and Python

    Decoding Big O: Analysing Time and Space Complexity with Examples in C#, JavaScript, and Python

    Efficiency matters. Whether you’re optimising a search algorithm, crafting a game engine, or designing a web application, understanding Big O notation is the key to writing scalable, performant code. Big O analysis helps you quantify how your code behaves as the size of the input grows, both in terms of time and space (meaning memory usage). Big O notation was introduced by German mathematician Paul Bachmann in the late 19th century and later popularised by Edmund Landau. It was originally part of number theory and later adopted into computer science for algorithm analysis. Big O notation gets its name from the letter “O,” which stands… Go to Post