Authentication: who are you? Proofs are passwords, codes and keys
2025-12-14
In many systems, various actions can only be performed as some kind of Identity. We must authenticate ourselves by proving who we are. Authentication fundamentally is just an answer to this question: who are you and can you prove it is true?
Bitcoin Core Code: C++, some Python and a Custom Build System
2025-08-23
As we have recently analyzed how the Bitcoin P2P Network works, let's delve into arguably its most important software component - the Bitcoin Core, the reference client and the reference implementation of all aspects of the Bitcoin system. With the main goal of having a few questions answered...
Bitcoin P2P Network: peer discovery, reachability and resilience
2025-04-05
Peer-to-Peer (P2P) Networks introduce a completely new set of challenges. In the traditional Client-Server Architecture, there is a server and client ... Things work completely differently in the Peer-to-Peer (P2P) Networks. These networks consist of equal peers that communicate directly with each other. Their goal is to be as decentralized as possible and not to have any single point of control or failure.
SQLite DB: simple, in-process, reliable, fast
2024-12-24
I love simplicity. Complexity is our eternal enemy and Simplicity is beautiful; rarely something is as simple as SQLite: a single-file, in-process database. It runs inside our application, there is no need for a separate database server.
MySQL and PostgreSQL: different approaches to solve the same problem
2024-11-11
Both databases solve the same problem: how to most effectively store and provide access to data, in an ACID-compliant way? ACID compliance might be implemented in various ways and SQL databases can vary quite substantially how they choose to go about it.
Kubernetes: maybe a few Bash/Python scripts is enough
2024-03-09
When it comes to the infrastructure of a software system, there are some features that are virtually always needed, independently of the project nature, and some that are additional, optional, or useful only in some projects and contexts ... Infrastructure is a crucial component of every software system: what do we need from it?
Modular Monolith and Microservices: Modularity is what truly matters
2023-11-26
Modularity is a crucial concept when designing and creating software. Independent of whether our chosen architecture style is to have a single unit of deployment - Monolith or multiple units of deployment - Microservices/Services. It is a quality that should be treated completely independent of how many deployable units of software we choose to have.
Unit, Integration, E2E, Contract, X tests: what should we focus on?
2023-11-04
When we write software, we intend it to be used in some, usually predefined and desirable, way. All software has some specification, either explicitly described or implicitly assumed. How do we know that it (software) works? We can test it manually, using all of its features and functionalities. Unfortunately, this approach breaks down pretty fast.
Index: a crucial data structure for search performance
2023-10-08
There are many variations and types of it, depending on the underlying database/search engine and its purpose, but the core concept is always the same: let's have an additional data structure that points to/references the original data and makes searching fast.
HTMX: simpler web-based app/system
2023-09-22
Nowadays, when we develop web-based app/system it is most likely built as SPA, which is a single page application. We should ask, why have we done that? Why have we switched from multi page applications, where the browser supported all of these functions out of the box, functions that we now need to recreate by writing custom JavaScript code?