🌅
Another software engineering blog 🧙♂️#
Officially a Computer and Electrical Engineer, B.Sc. (nice!). I’ve also been a Network and Security, then Devops,
Site Reliability and more recently an AI, AWS and Go engineer. This is my blog, not a portfolio. Just some notes and
my most recent CI/CD and programming language which is Github Actions and Go. I’ve also used Jenkins, ArgoCD, Cloudbuild,
Python, Javascript but, I’m not going to talk about those.
My speciality du jour is building, deploying apps written in Go and Python and handling AWS, Kubernetes, OpenTelemetry or Prometheus metrics
for an end to end system such as for Generative AI (Large Language Models) applications.
While I am solely responsible for all this crap- I mean, content- I do have to thank Grok and Claude for helping make the
conversion fast and mostly painless. Also, thanks to my friends and family for supporting me and my wife.
The Icons :shipit:#
The site runs on Python 3.10 with the Pelican 4.8.0 microblog software and my custom Python Markdown 3.4.1 extension
for the Github Emojis. These are just the publicly available emojis which you can see around the pages. I find that
there are some really, really cool ones and thus without further ado.
Actually, this is no longer true. This is now a Go Hugo site. Which is why you don’t see most emojis yet.
At some point I will figure out what/how to get sweet Github Emojis or a better alternative going.
For now, we have Hugo’s emojis which are not bad.
The code is deployed based on Git ops. In other words, the Python code which generates html, is pushed to a main branch
integrated with Ci/Cd service Netlify
I use Jetbrains Pycharm, so this is done either by typing git push in the Terminal or Cmd-K in the IDE window. I
highly recommend it.
Other options considered for deployment were Google App Engine, Render and a VM on Digital
Ocean or a free Oracle VM.
We settled on Netlify because it works very nicely, can scale to a fullblown app with CDN and content managment and
more imporantly Netlify had Python 3.10 compatible images at the time.
This is a static HTML with some Javascript and a Pelican template. So, there is only one contributor, no
merging, PRs and other differences with a production distributed microservice or hybrid service
architecture. Netlify has a nice build image for Python and static sites. This is not a static site generator
like Jekyll or Hugo, but rather a microblog.
Again, the above is not true. This is a Go Hugo static microblog which is published via Github Actions to a Github Pages.
The conversion was done with the help of Grok to provide some handy Python scripts.
The Future 🔮#
I plan to add more content, add Github emojis back in using the proper Go templating.
I also plan to migrate to Hugo or another
static site generator.
Actually, this migration is done. This is now a Go Hugo site. Did I mention that?
The Links 🔗#
Here are some useful links:
A comprehensive Go microservice that fetches, consolidates, and analyzes hotel data from multiple sources. Features multi-source data aggregation, review crawling, and LLM-powered recommendation analysis.
Architecture Alpaca is a single microservice that:
Fetches hotel data from multiple sources (Amadeus, Expedia, Tripadvisor, Google, Booking.com) Consolidates hotel data into a unified schema Crawls reviews from multiple sources (Tripadvisor, Google, Expedia, Booking, hotel websites, etc.) Uses LLM (GPT-4, Claude, Grok) to analyze reviews for Quality and Quiet Generates intelligent recommendations based on review analysis Stores data in SQLite (default) with raw SQL Uses a generalized provider interface for easy API integration Processes data in concurrent batches with rate limiting Project Structure alpaca/ ├── alpaca/ │ ├── main.go # Main entry point - hotel data worker │ ├── generate_cities.go # City data generation utility (reference) │ ├── generated_top_cities.go # Generated top cities data (reference) │ ├── REVIEW_PROCESSING.md # Review processing documentation │ ├── models/ │ │ ├── hotel.go # Original Amadeus hotel models │ │ └── hotel_extended.go # Extended hotel models with recommendations │ ├── services/ │ │ ├── hotel_service.go # Hotel business logic (Amadeus) │ │ ├── hotel_service_extended.go # Extended hotel service (multi-source) │ │ ├── review_crawler.go # Review crawling from multiple sources │ │ ├── llm_service.go # LLM integration (GPT-4, Claude, Grok) │ │ └── recommendation_service.go # Recommendation orchestration │ ├── database/ │ │ └── database.go # SQLite database connection and schema │ └── utils/ │ └── constants.go # Constants and test data ├── go.mod # Go module definition ├── Dockerfile # Docker build configuration └── README.md # This file Features ✅ Simplified Architecture Single Microservice: One focused service for hotel data collection Raw SQL: No ORM overhead, direct SQL control SQLite First: Simple, file-based database (easy to migrate to Postgres/Redshift later) Generalized API Interface: Easy to add new hotel data providers ✅ Multi-Source Hotel Data Collection Amadeus API: Hotel list, search, and ratings data Expedia: Hotel listings and reviews (interface ready) Tripadvisor: Hotel data and reviews (interface ready) Google Places: Hotel data and reviews (interface ready) Booking.com: Hotel data and reviews (interface ready) Consolidated Schema: Unified hotel table with ratings from all sources ✅ Review Processing & LLM Analysis Multi-Source Review Crawling: Automatically fetches reviews from: Tripadvisor, Google, Expedia, Booking.com Hotel websites, Bing, Yelp LLM-Powered Analysis: Uses GPT-4, Claude, or Grok to analyze reviews Quality Detection: Identifies hotels with excellent service, cleanliness, amenities Quiet Detection: Identifies quiet, peaceful hotels away from noise Intelligent Recommendations: Combines quality and quiet analysis for recommendations Admin Override: Admin flag to enable/disable hotels regardless of analysis ✅ Advanced Processing Proper Pagination: Handles multi-page API responses automatically Concurrent Processing: Uses goroutines for parallel data fetching Rate Limiting: Respects API limits with configurable delays Error Handling: Graceful degradation and detailed error logging Invalid ID Tracking: Skips hotel IDs that consistently fail 🚀 Getting Started Prerequisites Go 1.23+ Amadeus API credentials (test or production) Environment Variables Create a .env file in the project root:
...
Building a Modern Application on AWS EKS with Pulumi: A Practical Journey The application leverages PostgreSQL for data persistence, Kafka for event streaming, and a mix of Go, Python, and JavaScript components, all deployed on AWS Elastic Kubernetes Service (EKS) using Pulumi in Go. The cluster runs in private subnets with VPC endpoints for a fully isolated setup.
The Go Code: Precision in Pulumi The backbone of our infrastructure is a meticulously structured Go program using the Pulumi AWS and EKS SDKs (github.com/pulumi/pulumi-aws/sdk/v6/go/aws and github.com/pulumi/pulumi-eks/sdk/v1/go/eks). We defined a VPC with private subnets using aws.ec2.Vpc and aws.ec2.Subnet, ensuring each subnet has a dedicated route table created via aws.ec2.RouteTable and associated with aws.ec2.RouteTableAssociation. This setup isolates traffic, with privateSubnets passed as a pulumi.StringArrayOutput to the EKS cluster for node placement.
...
DevOps de Noche 🌄 Today we will deploy Google Kubernetes Engine, Terraform Cloud worspaces and variable sets, Cloud Build triggers, Cloud Deploy Delivery Pipeline providing Continuous Delivery for Grafana and the sample (Google) microservices app via Skaffold.
☁️ Un repositorio y presentación para DevOps Days La Paz 2022 https://github.com/edamsoft-sre/DevOpsDeNoche
How to use the Terraform resources google_compute_network
google_compute_subnetwork
tfe_workspace
tfe_variable-set
cloud_build_trigger
google_clouddeploy_delivery_pipeline
google_container_cluster
google_container_node_pool
Private Google Kubernetes clusters with access control.
...
Part 1: Deploying FastAPI app to AWS Lambda with Docker image This will show how to build a Docker container that can be run by AWS Lambda from the Elastic Container Registry.
The steps to follow on AWS are currently manual - via the AWS Console and the ECR provided Docker commands to upload images.
In future release, we will automate this release cycle using CodeDeploy, or possibly another AWS service if that turns out to be a better fit (CodePipeline? CloudFormation?)
...
The logfile, old frenemy 💩 From time to time, shit happens. In this trying time, you will have no choice but to review some logs. Times have changed and whereas our tools of choice used to be egrep, Notepad++ or a good old Nagios handler. Now most likely you will be reading logs in a fancy colorful GUI running Grafana, Kibana, Datadog or whathaveyou replacement tool your employer has had the brilliant idea to use instead of industry best practices 😄
...
Useful Bash commands for DevOps work 🧰 So Bash is no longer the hottest ticket on the market. Happens. I may have seen the actual point where this peaked and let me tell you, that’s something. Still, there’s some cool stuff to be done with Bash.
For example, if you are writing a quick and dirty Terraform configuration, you can get really far with TF templates, HCL interpolation and well placed Bash commands:
...
Download Github Emojis locally En Emojis de Github para Pelican con Markdown armamos los hermosos íconos que se pueden ver por este blog. Bueno, en realidad bajamos el archivo json de Github con el diccionarios
#!python { _short_name_ : _http_url } y utilizamos los enlaces para armar tags img. Poco a poco hemos mejorado algunas cosas, como regualr el tamaño de los íconos 64x64 con CSS.
Para descargar los 1793 emojis de GitHub ©️ la operación toma mucho tiempo para tan solo 9.1M: como 15 minutos ⏱️
...
Primero, qué es software libre? Algunos diremos: el sistema operativo GNU/Linux. Ok, pero, y eso se come?
Resulta que sí. Detrás del éxito de las mega-empresas de tecnología que han revolucionado las comunicaciones, relaciones sociales y negocios Linux está presente casi exclusivamente.
Todo desde nuestro teléfono inteligente Android/iPhone, televisor inteligente, sistema de mensajes instantáneos, servicio de correo digital, videoconferencia, streaming de películas, en el fondo tienen su base en cientos o miles de servidores Linux, corriendo también mucho software libre escrito en lenguajes abiertos: Java (*), Python, Ruby, Bash y con APIs también generalmente abiertos.
...
Pelican blog with Python Markdown Pelican es un generador de microblogs estáticos en HTML/Python. Permite utilizar Markdown, RTF, y algunos otros formatos de texto para su contenido. La versión 4.8.0 es muy robusta e incluye scripts para subir el código a cualquier proveedor de nube y desplegar cambios, así como un servidor de desarrollo y un catálogo amplio de extensiones y temas.
Armé el blog inicialmente según [pelican-hosting-on-appengine.html](http://www.craigjperry. com/pelican-hosting-on-appengine.html), pero me demoré un poco, y ahora en lugar de Google AppEngine lo despliego mediante Netlify. Reto: Github Emojis en Pelican No se pueden utilizar emojis directamente en Pelican (es decir, con Python Markdown), pero existen varios plugins para lo mismo, y varios repositorios de los códigos Unicode en la web. Python también maneja Unicode directamente ¡¡lo cual es genial!!
...
Authors: Eric Arellano
Netlify $ The fastest way to build the fastest sites. Netlify es la plataforma PaaS/CICD/DNS con integración a Git(hub|lab) utilizada para desplegar este sitio web. En resumen:
Connect your repository Add your build settings Deploy your website Para ejecutar un app completo en Python o un static site puedes utilizar un número de librerías. Incluso Pelican tiene facilidades para usar Invoke o Make y gestionar diferentes contextos. Pero para este humilde blog en Pelican, el comando por defecto de Pelican y el build command sencillo de Netlify es perfecto.
...