Charting the Path: Planning Your Migration to Microservices

Summary Chapter 2 of Sam Newman’s Monolith to Microservices is a masterclass in the art of thoughtful planning before diving into the technicalities of a microservices migration. This chapter underscores a key principle: microservices should never be the end goal but rather a deliberate means to achieve broader business and technical objectives. Defining the Why Behind Microservices Newman begins by dismantling the myth that microservices are a silver bullet for every system. Instead, he emphasizes the importance of aligning the migration with tangible outcomes, such as: ...

December 19, 2024 · 4 min · Hector Yeomans

Transforming Software Systems: A Blog Series on Monolith to Microservices

The Journey to Just Enough Microservices In software architecture, one question looms large over those managing complex systems: How do you rearchitect an existing system without stopping all other work on it? This question, posed in the foreword of Sam Newman’s Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith, resonates deeply with me. It encapsulates the core tension between maintaining product delivery and investing in technical evolution—a balancing act that every engineering team struggles to perfect. ...

December 8, 2024 · 5 min · Hector Yeomans

Importing INE Shapefiles into a Spatialite Database

In this post, we’ll walk through the process of importing Mexico’s National Electoral Institute (INE) shapefiles into a Spatialite database. We’ll be using macOS and QGIS for this tutorial. Setting Up Spatialite First, let’s install Spatialite using Homebrew: brew install spatialite-tools Once installed, create a new Spatialite database by running: spatialite ine.db You should see output indicating the Spatialite version and supported extensions. SpatiaLite version ..: 5.1.0 Supported Extensions: - 'VirtualShape' [direct Shapefile access] - 'VirtualDbf' [direct DBF access] - 'VirtualText' [direct CSV/TXT access] - 'VirtualGeoJSON' [direct GeoJSON access] - 'VirtualXL' [direct XLS access] - 'VirtualNetwork' [Dijkstra shortest path - obsolete] - 'RTree' [Spatial Index - R*Tree] - 'MbrCache' [Spatial Index - MBR cache] - 'VirtualFDO' [FDO-OGR interoperability] - 'VirtualBBox' [BoundingBox tables] - 'VirtualSpatialIndex' [R*Tree metahandler] - 'VirtualElementary' [ElemGeoms metahandler] - 'VirtualRouting' [Dijkstra shortest path - advanced] - 'VirtualKNN2' [K-Nearest Neighbors metahandler] - 'VirtualGPKG' [OGC GeoPackage interoperability] - 'VirtualXPath' [XML Path Language - XPath] - 'SpatiaLite' [Spatial SQL - OGC] PROJ version ........: Rel. 9.4.0, March 1st, 2024 GEOS version ........: 3.12.1-CAPI-1.18.1 RTTOPO version ......: 1.1.0 TARGET CPU ..........: x86_64-apple-darwin23.0.0 the SPATIAL_REF_SYS table already contains some row(s) SQLite version ......: 3.45.3 Enter ".help" for instructions SQLite version 3.45.3 2024-04-15 13:34:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" Downloading INE Shapefiles Visit the INE transparency portal: https://pautas.ine.mx/transparencia/mapas/ ...

July 14, 2024 · Hector Yeomans

How to Use GORM and Golang Migrate.

Introduction This guide demonstrates how to set up and use GORM with Golang Migrate to manage your PostgreSQL database. Follow along to see the code in action and get your environment running. Prerequisites Go installed on your system. Docker installed and running. Project Structure Here is the final directory structure: . ├── .env ├── Makefile ├── cmd │ └── cli │ └── main.go ├── docker-compose.yml ├── go.mod ├── go.sum └── internal ├── db │ └── migrations │ ├── 20240608192206_create_users_table.down.sql │ └── 20240608192206_create_users_table.up.sql ├── models │ └── models.go └── repositories └── repositories.go 8 directories, 10 files Step 1: Initialize Your Project 1. Initialize the Go module: ...

June 7, 2024 · Hector Yeomans

Convert node package with Typescript and Rollup

I already had a library that I wanted to convert to Typescript. I picked Rollup.js to do my build process. First I installed the following packages: > npm i -E -D rollup typescript @rollup/plugin-commonjs\ @rollup/plugin-node-resolve rollup-plugin-typescript2\ rollup-plugin-peer-deps-external I ended up with: * [email protected] * [email protected] * [email protected] * [email protected] * @rollup/[email protected] * @rollup/[email protected] Then I created a tsconfig.json: { "compilerOptions": { "outDir": "build", "module": "esnext", "target": "es5", "lib": ["es6", "dom", "es2016", "es2017"], "sourceMap": true, "allowJs": false, "declaration": true, "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true }, "include": ["src"], "exclude": ["node_modules", "build"] } Also a rollup.config.js: ...

May 30, 2020 · 2 min · Hector Yeomans