About:

Krystian Safjan is the author of the blog 'Krystian Safjan's Blog'.

Website:

Specializations:

Subscribe to RSS:
Index versioning is essential for RAG systems to ensure answer reliability, compliance, and effective debugging, as it tracks changes in the document corpus and retrieval processes.
The author critiques traditional test coverage metrics, arguing that they can create a false sense of security. Instead, they advocate for a behavioral auditing approach using GitHub Copilot's Agent Mode to identify untested funct...
This tutorial provides a step-by-step guide on using Git worktrees to manage multiple workflows in a coding project, particularly when integrating AI tools like GitHub Copilot for refactoring tasks. It explains how to set up separ...
The blog post introduces Python 3.8's Protocols, which enhance static typing through structural subtyping, allowing type checkers to verify methods and attributes rather than class inheritance. It provides examples of defining pro...
The blog post discusses the two primary methods for running code concurrently in Python: threading and multiprocessing. It explains the Global Interpreter Lock (GIL) and how it affects the execution of threads, making threading su...
The blog post explains Python's async/await syntax for writing concurrent code, allowing multiple I/O operations to run without blocking. It covers the concept of cooperative multitasking, where tasks yield control during waits, a...
The article explains the use of orphan branches in Git, specifically how to create a new branch with no history using the command 'git checkout --orphan <branch>'. It details the process of setting up an orphan branch for publishi...
The blog post introduces Python's concurrent.futures module, which simplifies parallel programming by providing a unified interface for executing code concurrently. It explains the use of ThreadPoolExecutor for I/O-bound tasks and...
The article explains the use of the asterisk (*) in Python function signatures, which enforces that all arguments following it must be keyword-only. It discusses its introduction in Python 3.0, useful extensions, specific use case...
Learn to evaluate Retrieval-Augmented Generation systems using RAGAS metrics and MLflow, including setup, configuration, and analysis of results.
The post discusses how to use the OpenAI Python package with local Ollama models, highlighting its compatibility and ease of use. It explains how to set up the OpenAI client for local projects and introduces LiteLLM as an alternat...
The blog post discusses the use of Git worktrees, which allow multiple working directories to be created from a single repository, each linked to different branches while sharing the same object store. This setup enables developer...
The blog post discusses how to manage Homebrew upgrades on macOS without encountering password prompts for packages that require admin rights. It explains the difference between formulae and casks, and provides practical strategie...
The blog post discusses the evolution of type hints in Python, tracing their development from PEP 484 in Python 3.5 to the latest enhancements in Python 3.13. It highlights key features introduced in each version, such as the typi...
In the AI era, developers must prioritize decision-making and understanding over mere coding, as unfinished projects and flawed AI tests pose significant challenges.
The post discusses the challenges of traditional Agile methodologies in software development, particularly the inefficiencies of Scrum and Kanban. It introduces 'Shape Up,' a product development approach by Basecamp that emphasize...
MLflow's RAGAS integration enables evaluation of RAG pipelines without code modifications, offering static and predict function approaches for flexibility and ease of use.
The post discusses how to create a polished multi-notebook report using Quarto, a tool for rendering Jupyter notebooks. It outlines two methods: creating a structured book-like report with navigation and chapter numbering, and emb...
The blog post explains the differences between shallow and deep copying in Python, detailing how the `copy` and `deepcopy` functions work. It highlights the implications of each method, including when to use them based on object c...
The Language Server Protocol (LSP) standardizes communication between code editors and language-specific analysis engines, reducing duplicated work across various editors and programming languages. It utilizes JSON-RPC for efficie...
The post discusses CSS variables (custom properties) and their utility in web design, highlighting their syntax, practical applications such as dynamic theming and design consistency, and limitations like older browser support. It...
The author discusses the challenges of using Makefiles for cross-platform Python projects, particularly when collaborating with teammates on different operating systems. They experienced issues with compatibility on Windows, leadi...
This post provides a step-by-step guide on how to downgrade a project's virtual environment from Python 3.11 to 3.10 using the 'uv' tool. It includes instructions for installing the desired Python version, pinning the project to t...
This guide outlines the steps to publish a Python CLI tool to Homebrew, including creating a tap repository and generating a Ruby formula.