Documenting a personal journey through software engineering, AI, and programming. This blog features deep dives, practical guides, and recent learnings for both seasoned and aspiring developers.
Every time our team started a new full-stack app, we faced the same problem: rebuild the same architecture from scratch. Authentication, database access, UI shell, AI integration — all the plumbing that has nothing to do with the actual business logic. It started with internal tools, but we quickly realized the patterns apply to any full-stack web application — whether it's a customer-facing…
Integration tests are essential for catching bugs that unit tests miss—but they come with a notorious problem: shared state . When tests share a database, they become flaky, order-dependent, and painful to debug. What if each test could start with a clean slate, with exactly the data it needs, without manual cleanup or complex fixtures? That's what pytest-scenarios does. The Problem Consider…
About this blog Welcome to 'My Software Engineering Journey' blog , a personal blog where I document my adventures in the world of code. Here, I dive deep into topics I'm passionate about, especially within software engineering, AI, programming languages, code examples, coding practices, recent learnings and more. From deep dives into performance and efficiency to practical guides…
This post captures a practical way to implement a React application using TanStack Router. It focuses on maintainability, predictable data flows, and ergonomics for both reading and writing code. 🔗 GitHub Repository 🚀 Live Preview Note: The guidelines and recommendations in this guide are based on our real-world experience building a new internal application as the Sales Apps Team at MongoDB .…
Golang is one of the most useful technologies I've recently learned. Golang has pretty nice support for networking, command line, or logging out of the box—you don't need any dependency. But there are libraries making developers' life even easier. I've already talked about creating REST service in go , today I'd like to focus on creating a command line tool. Flags Command…
Cypress is a testing framework for anything running on a web browser. I am using it to test this site and I've talked before about it in the post "This is Sapper" . In this post I won't explain how to use Cypress , they have a pretty nice documentation: Getting started with Cypress . I will stick to the parameterized tests topic. Parameterized tests : Also known as dynamic tests, it is…
Lately I've been working with two different technology stacks almost in parallel, in both cases we were using them to develop REST services. During this time I've come up with some conclusions and opinions I'd like to share. A disclaimer, few months ago, I had several years of experience with Java and 0 days of professional experience with Golang. Actual project examples Few months…
I started working with React few year ago, always the project creation was from scratch, not using any template/scaffolding. Regarding bundlers normally I used either Webpack at work or Parcel for personal projects. Few months ago, I wanted to start a personal project to keep track of my travel expenses. I was in a kind of rush because at that time, I was almost in the middle of my gap year,…
I was about to start yet another personal project, it consists of a SPA (Single Page Application) for a travel journal. Some time ago I tried Parcel , I really loved how simple it was to create a simple project from scratch, using Typescript + React stack. I’ve decided to create this template or base project, so next time I want to create a new SPA with my favorite frontend stack, I will only have…
I explained in previous article Example how to create custom Maven Plugin which overrides site lifecycle . I have created another example to demonstrate how to override default Maven build lifecycle . Default build lifecycle is used to construct your software project, for example, it is executed when you run mvn install in a jar type project. You can find source code example at…
Maven has lots of plugins to assist you in project construction, testing, packaging and deployment. For example if you want to compile C++ code instead of Java, you can use native-maven-plugin . But what if you need something more specific? Then you can create a custom Maven plugin. I will explain how to create a simple custom maven plugin to generate static blog site from Markdown files. I know…
I'm starting a new project in C++, but I've run into a couple of questions before starting: Which build system should I use? Which unit testing framework? Tip : If you just want a project template so you can have a C++ project skeleton ready in seconds, just go to uuid-cpp and follow the instructions in README.md . Choosing Build System ( Meson ) I have used before Make , Maven , Scons ,…
Introduction Since C++17 new filesystem abstractions will be added to C++ environment. So far they are available as Experimental C++ Features . If you want to dig more about this new library, here it is the final draft of File System Technical Specification . Gettting started with Experimental Filesystem Features C++17 (g++) We just have to "tell" compiler that: we write C++17 ( -c++1z ) and it…
Use case We have several server applications in the same development environment, each application is bundled in a Docker container, e.g: "Container A" and "Container B" . With Docker those applications have the same IP address. One way to differentiate and access to an specific application is exposing different ports. If we want to call to "Application A" we will do: GET…
If you are developing from a Windows environment to a Unix target environment, most likely you have had this issue: You install source files in Windows format in your Unix environment. Windows and Unix systems use different line endings: Windows uses carriage return and line feed ( \r\n ), while Unix uses just line feed ( \n ). This difference can cause issues with scripts, code, and configuration…
First time I designed a REST API I made several mistakes, of course. Following I'm going to explain common mistakes and what I've learned about REST URL with examples. REST Basics Using URL s for get resources. Using verbs for modify resources. The verbs are provided by the HTTP protocol. The verbs have a direct equivalency with CRUD (Create, Read, Update, Delete). To access to an…
Introduction I am more and more worried about building, dependency management and distribution of my projects. I'd like to find a tool that unifies those processes with independence of the language. I know several tools which almost fit to what I'm looking for, like SCons , Autotools , Ant , Maven and lately Gradle . I've made several projects with Gradle, but always they were Java…
Embedded Databases These are databases that do not require a server, are embedded within the application itself, and are usually stored in local files. This, combined with the fact that they often have a mode where data is kept in memory, can result in very high performance. However, this high degree of coupling to the application means they perform worse when shared between multiple applications…
Recently I've had to serialize/deserialize some data in Java binary format. Lately I use JSON or XML formats. I remember that to serialize Java objects they must implement the Serializable interface, but I had also read in Internet other way, implementing the Externalizable interface, then, which interface must I implement? It depends on what you want such as everything in the life. When…
C++11 has added many improvements to help us developing multi-thread systems. I'm going to talk about Mutex . In previous C++11 compiler versions , we can get a pthread mutex, but we must initialize it and destroy it in old C style, in the end you must do more things than just lock/unlock. With C++11 Mutex Class , we just lock/unlock the object. #include <mutex> std::mutex mtx; void…
When debugging an executable that uses a library generated with libtool 1 , you might encounter the following error: $ gdb ./tests-mylib "tests-mylib": not in executable format: File format not recognized libmylib.so : is a dynamic library generated with libtool. tests-mylib : is an executable that uses the mylib library. For those thinking I forgot to add the -g compilation option, this…
A C++ struct is an element that groups attributes with different types so we can manipulate them all together using same reference. It is like a class with public visibility by default for functions and attributes. If we want to work in a lower level, closer to machine, it might be useful to understand how that data structure is stored in memory and how to control that mapping. Struct example It…
Below is an explanation of how to replace punctuation symbols with whitespace in Python. import re, string def remove_punctuation(text): return re.sub('[%s]' % re.escape(string.punctuation), ' ', text) Calling the previous function: >>> remove_punctuation("El perro, de San Roque, no tiene rabo; ni nunca lo ha tenido.") We will get this output: 'El perro de San Roque no…
In many languages, such as Spanish, there are characters that do not have ASCII representation, such as á , which does have representation in Unicode . To avoid problems or for simplification, an equivalence has been established between Unicode and ASCII characters. Below I'll show you a piece of Python code that performs this conversion. # -*- coding: utf-8 -*- from unicodedata import…
Below we'll see how to remove HTML tags from a character string. With Python Function responsible for removing HTML tags: main.py import re def strip_tags(value): return re.sub(r'<[^>]*?>', '', value) Let's test an HTML fragment with the strip_tags function: Example usage import re def strip_tags(value): return re.sub(r'<[^>]*?>', '', value)…
When we install a package in most Linux distributions, the package system installs other packages needed by the package that we are installing. If we uninstall the package, its dependencies might not be uninstalled; these unused dependencies are called orphaned packages. Let's see how to remove orphaned packages. Archlinux pacman -Rsn $(pacman -Qdtq) How does the command work? pacman -Qdt…