RSSAmplifier

Blog

My software engineering journey

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.

carlosvin.github.ioRSS feed ↗28 posts

Latest posts

Building AI-Promptable Full-Stack Apps: A Reproducible Architecture

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…

Isolated Integration Tests with pytest-scenarios

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

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…

TanStack Router: Opinionated Guidelines for Production React Apps

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 .…

Easily creating a golang command line tool

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…

Parameterized Tests in Cypress

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…

Golang over Java for REST services

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…

Create a PWA with Create React App: Lessons Learned

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,…

Create SPA with React + Typescript + Parcel

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…

Custom Maven Plugin - Override default build lifecycle

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…

Example how to create custom Maven Plugin

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…

Choosing a Modern C++ stack

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 ,…

Filesystem in C++17

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…

Multi-Domain Docker Containers

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…

Convert files formats - Windows to Unix

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…

REST URLs

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…

Build C++ project with Gradle

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 Java Databases - Performance Comparison

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…

Java serialization ways: Performance Comparison

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…

Mutex C++

C++11 has added many improvements to help us developing multi-thread systems. I&#x27;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&#x2F;unlock. With C++11 Mutex Class , we just lock&#x2F;unlock the object. #include <mutex> std::mutex mtx; void…

Android Studio Portable Download

If you want to use Android Studio without installation, as a portable software, here you have the link to last portable version of Android Studio .

Debugging library generated with libtool

When debugging an executable that uses a library generated with libtool 1 , you might encounter the following error: $ gdb .&#x2F;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…

C++ Struct memory alignment

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…

Git Proxy Configuration

Working with Git through a corporate proxy can be challenging. Here&#x27;s a quick guide to configure Git proxy settings. Configure HTTP Proxy git config --global http.proxy http:&#x2F;&#x2F;<username>:<password>@<ip_host>:<port> Configure HTTPS Proxy git config --global https.proxy https:&#x2F;&#x2F;<username>:<password>@<ip_host>:<port> Disable Proxy git config --global --unset http.proxy git…

Replace punctuation symbols in Python

Below is an explanation of how to replace punctuation symbols with whitespace in Python. import re, string def remove_punctuation(text): return re.sub(&#x27;[%s]&#x27; % re.escape(string.punctuation), &#x27; &#x27;, 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: &#x27;El perro de San Roque no…

Text Normalization in Python

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&#x27;ll show you a piece of Python code that performs this conversion. # -*- coding: utf-8 -*- from unicodedata import…

Remove HTML Tags

Below we&#x27;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&#x27;<[^>]*?>&#x27;, &#x27;&#x27;, value) Let&#x27;s test an HTML fragment with the strip_tags function: Example usage import re def strip_tags(value): return re.sub(r&#x27;<[^>]*?>&#x27;, &#x27;&#x27;, value)…

Remove orphaned packages (Linux)

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&#x27;s see how to remove orphaned packages. Archlinux pacman -Rsn $(pacman -Qdtq) How does the command work? pacman -Qdt…