It's been a while since I've shared any professional updates here. As some of you might know, I stepped down as CTO of Gasolina Móvil (now Alias Payments) in 2022 after more than seven years building what became one of Puerto Rico's largest mobile payment platforms. What started as a simple idea (let people pay for gas with an app) turned into a complex fintech operation spanning multiple…
Ha pasado tiempo desde que he compartido actualizaciones profesionales por aquí. Como algunos ya saben, dejé mi posición como CTO de Gasolina Móvil (ahora Alias Payments) en el 2022 después de más de siete años construyendo lo que se convirtió en una de las plataformas de pagos móviles más grandes de Puerto Rico. Lo que empezó como una idea simple, que la gente pueda pagar la gasolina con un app,…
Recientemente lanzamos aqui.pr , un proyecto que me tiene super entusiasmado y del que quería compartir un poco más. Todos lo hemos vivido, entras a un site de noticias para leer algo que te interesa y te bombardean con anuncios, videos que se reproducen solos y popups que se meten en el medio. La experiencia es tan frustrante que muchos terminamos abandonando antes de leer lo que queríamos o nos…
Llevo años experimentando con Value Objects (VO) en varios lenguajes, desde JavaScript y TypeScript hasta Python y, más recientemente, Go. Llevo dos años sumergido en Go por lo que he tenido la necesidad de implementar Value Objects en este lenguaje. Abajo comparto el acercamiento que he estado usando recientemente con bastante éxito. Esta implementación cumple con todos mis requisitos: Es…
Weekly demo days started as an experiment: a regular time when anyone can demo anything to the rest of the team. No slides allowed, no status reports, just a live demo. The format was straightforward: 3 to 4 engineers would each get up to 15 minutes to demonstrate their work in progress or whatever they like. Attendees can ask questions and the facilitator is responsible for maintaining a…
BBOT (BEE·bot) is a powerful recursive internet scanner designed for reconnaissance, bug bounties, and attack surface management. Think of it as your all-in-one tool information gathering and security assessment. I prefer running BBOT through Docker for consistent behavior across environments: # BBOT: Automated reconnaissance framework bbot() { docker run --rm -it \ -v "$HOME/.bbot:/root/.bbot" \…
Todos los negocios usan software que es casi-casi perfecto, pero siempre falta algo. Siempre hay una parte de algún proceso que depende de una hoja de Excel que se envía por email o se comparte en Google Drive y que nadie sabe exactamente quien modificó o quien tiene la última versión. Como esto hay muchos paper cuts que hacen que los negocios pierdan el tiempo dándole la vuelta a soluciones de…
Requires: Django >= 5.1 There’s plenty of information out there on how to scale Django to handle numerous requests per second, but most of it doesn’t really apply to the kind of software I work on. For the past few years, I’ve been developing custom software for smaller organizations. All my deployments have fewer than 100 users and operate on a single AWS instance. Initially, I chose PostgreSQL…
Bug bounty programs have emerged as a crucial cybersecurity measure, allowing organizations to harness the skills of the security community in identifying and resolving vulnerabilities before malicious actors can exploit them. While many opt for popular bug bounty platforms, these can come with hefty price tags. In this blog post, we’ll explore the steps to establish a successful and…
Hace mas de siete años y sin avisar me llamó Arnaldo para contarme de un invento que tenía. La idea era simple, vamos a hacer un app para que la gente pueda pagar la gasolina. Inmediatamente me pareció una buena idea. Estaba seguro que los consumidores les encantaría poder pagar en la bomba. Ahí, en esa misma llamada acordamos hacer el app y ver qué pasaba. Desde cero Dos o tres semanas más tarde…
En mi trabajo escribo principalmente TypeScript sobre Node.js y aunque no es mi lenguaje favorito, no me molesta, tiene muchas cosas buenas. Para el tipo de proyecto que trabajo, el tener un “ type system ” es altamente valioso. También escribo bastante Python (de mis lenguajes favoritos) para “scripts” locales y otras cosas que no necesariamente terminan en un ambiente de producción. Algún día…
Getting application logging right is crucial for every software project. When done correctly it makes the maintainers work a lot simpler. There’s no worst feeling than getting an error report and searching for logs to try to understand what happened and not finding a single entry. This is especially bad with difficult to reproduce production errors. Like everything else, having good logs requires…
En el post anterior mencioné brevemente que mis value objects implementan un método estático create que utilizo para crear instancias sin temor a excepciones. Este método devuelve un objeto llamado Result que sirve para envolver el resultado de llamar al método create . En este post vamos a ver cómo funciona Result y al final vamos a hablar un poco de Maybe que es muy similar. Create Vamos directo…
Este es el tercer post en esta serie sobre arquitectura de software. En los posts anteriores he hablado de mi experiencia aprendiendo sobre este tema y sobre algunos de los problemas que he enfrentado en situaciones donde no hay una arquitectura clara. En este post espero empezar a introducir algunas ideas y técnicas concretas que he usado para comenzar a resolver mis problemas. Estados ilegales…
En este post menciono functional programming (FP) y object-oriented programing (OOP) en el contexto de JavaScript (JS). Hablo de mis experiencias con los dos paradigmas en un proyecto bastante grande. El título del post no es FP vs OOP y no tengo en interés en ese tipo de discusión. Las ideas de FP llevan varios años tomando fuerza en el mundo de JS. Mi interés en el tema llegó algunos años antes…
¿Dónde está el programa? Esa fue la pregunta que hice a un programador de nuestro equipo. ¿Dónde está el código que describe como funciona nuestra aplicación? No pudo contestar y no esperaba que pudiera. En el proyecto que estábamos trabajando, la respuesta era bastante complicada. El programa estaba en todas partes y en ninguna a la misma vez. Cuando comenzamos en este proyecto, lo primero que…
Decided to write this blog post because I couldn’t find any documentation or online examples like the one I’m sharing here. Every example I’ve seen the user-defined type guard is used to replace the whole type definition and not specific properties. Here’s the code without type guard. interface Config { foo: string; bar: string; } class Thing { name: string; config?: Config; constructor(name:…
Hey, si tu o alguien que conoces maneja un website escrito en Español y producido en Puerto Rico, estaría super cool que lo marcan con el idioma y región correcta. <html lang="es-PR"> Esto ayudaría mucho a http://tesoro.pr en varios inventos futuros. Por mi parte todavía estoy pensando cómo manejar el tema en este site. Lo mismo escribo en Español que en Inglés. Links con más información técnica:…
Antes de empezar Reporté este bug dos veces con la intención de que se resolviera el problema y se protegiera la información de los ciudadanos. La primera vez que reporté el problema recibí confirmación de que sería atendido, pero ocho meses más tarde el problema no había sido resuelto. Recientemente, reporté el bug por segunda vez e hice énfasis en el riesgo potencial de este tipo de…
From an application security perspective databases are the most valuable parts of our systems. They store the data that gives value to our apps and companies. This data which has been entrusted to us by our users should be kept safe and away of the hands of criminals. Every developer I talk to is very aware of this. Their MySQL, PostgreSQL and MongoDB databases are treated with caution and…
Con cierta frecuencia amigos, familiares y personas en Twitter o Facebook me preguntan sobre cómo aprender a programar. Algunos me dicen “quiero aprender hacer apps” refiriéndose a las aplicaciones en teléfonos móviles y otros me dicen que quieren hacer un website para su negocio. Mi respuesta casi automática es la que creo que muchos otros programadores tienen, enviar unos cuantos enlaces a uno…
En abril pasado mi amigo Froilan Irizarry publicó un blog post hablando de sobre como convertirse en un “senior developer” y hace unos días en Facebook me encontré con un post preguntando “¿Cuál ha sido su estrategia para sobresalir en el campo laboral?” Ambas publicaciones me hicieron pensar en cual es mi respuesta a esta pregunta de sobre como mejorar y sobresalir en la industria de desarrollo…
A few days ago I released my first ever “real” swift app. The app is called MongoDB.app and it’s just a thin wrapper around the official MongoDB binaries that you can download from their site. The app will add a status menu icon which will allow you to start and stop a local MongoDB server visually. All data saved by the server will be stored to ~/Documents/MongoData . The idea was to create the…
Hace mas de dos años he estado interesado en aprender Python . Este lenguaje se caracteriza por ser fácil de escribir y sobre todo fácil de leer. Tiene la capacidad de mezclar poder con friendliness . Hace poco menos de un mes decidí que ya era tiempo de añadir esta herramienta a mi arsenal así que me compré unos cuantos libros y desde entonces he estado sumergido en el mundo de Python. He…