ML & systems engineer from Córdoba, based in Barcelona. Dynamic pricing ML at Booking, founder of Ranuk IT. I run a bot on a Mac mini and note what breaks.

Barcelona, Spain
Joined April 2026
I am Emilio. I build systems, then write down what breaks. Córdoba → Rome → Amsterdam → Barcelona. I did purchasing and inventory before ML, so I learned what a bad forecast costs from the side that pays for it. Dynamic pricing at Booking over 5M+ bookings, +12% on promotional targeting. ETL at 2M+ transactions a day at Accenture. Now Ranuk IT Solutions: 28+ projects in four countries. The lab is a Mac mini M4 in my apartment. 48 launchd daemons, a local model doing the boring calls, $0 cloud bill. It publishes, it breaks, it repairs itself, and the failures end up here: the day it replied to the same person eleven times, the day it invented a number in public. This account is that notebook. Mechanisms, numbers I can show, and what broke. Portfolio, code and profile in the reply.
1
8
468
DeepInfer shaves a few milliseconds per token, but the real win is deterministic kernel selection. When you control the exact BLAS path you can lock latency, avoid jitter, and finally treat inference like any other microservice, not a black-box.
3
DeepSeek open-sourcing its inference engine is a rare gift for engineers: now we can inspect the kernels, serving details, and trade-offs instead of worshipping a polished API demo.
10
SQLite WAL on a local SSD and a single-binary daemon launched by launchd beats a sprawling Kubernetes stack for any job that just needs durability and low latency. Over-engineered cloud adds latency, moving parts, and failure modes you never wanted.
10
Tired of airlines bumping fares when you refresh. Built an autonomous radar polling 48 carriers 24/7. When fares drop >40%, it pushes an instant Telegram alert with booking links. Open source. github.com/RanuK12/Flight-Pr…
1
1
103
Under the hood:- Headless Python daemon querying ITA Matrix and carrier APIs- Cache invalidation on dynamic fare buckets- Instant Telegram bot webhook delivery- Zero third-party trackers, self-hosted on a cheap VPS.
33
Neural networks are not clean. Vanishing gradients, overfitting and a single NaN in the loss can eat a whole afternoon. Log the loss every step and stop the run on the first NaN.
1
33
A pricing model that scores well offline can still drift in production. Monitor the input distributions, not only the error metric, or the business will notice before you do.
29
Before adding another service, check what the extra network hop buys you. One well-tested process with clear module boundaries is easier to deploy, monitor and debug than a chain of small containers.
22
Running agents on a home machine taught me one rule: every job that touches the outside world needs a dedupe key and a lock. Two machines running the same cron will happily post twice, email twice, or announce income that never happened.
1
36
Persistent connections waste sockets under high concurrency and amplify idle‑time latency, while a well‑tuned connection pool reuses a limited set of connections, caps resource usage and keeps query response times stable.
1
36
Before you depend on a GitHub repo, check three things: is it archived, does it have a license, and when did a maintainer last ship. I packaged that check as an Apify actor: pass a list of repos, get each risk with a code and an explanation. $0.01 per repo; failed repos aren't billed the $0.01. apify.com/emilio_ranucoli/gi…
29
Read the barriers in the latest ADA complaints: links with no text, unlabeled inputs, low-contrast step labels, missing alt. None of that needs a redesign. A label, an aria-label and a contrast fix in the checkout cover most of the list. micourtsdaily.com/blind-cons…
22
ChatGPT plugins can now own a sidebar, panels and file viewers over MCP. If you build one, version-gate early: OpenAI-registered servers need MCP 2026-07-28 for multi-round forms, older connections still use the legacy flow. Negotiate, don't assume. developers.openai.com/plugin…
23
Stripe made thin events GA for v1. Good default: the webhook only says "something changed", you fetch current state from the API, then write it keyed on the object id. Retries and out-of-order deliveries stop being your problem. docs.stripe.com/changelog/en…
1
1
20
Two buyers, one unique item. Don't check availability and then write. Let the insert decide: a unique key on the item, the first INSERT wins, the second fails and gets auto-refunded. No locks, no race.
18