Tag: 2014
Atrápalo Tech 2014 figures
It’s almost a year ago since I started working at Atrápalo. The team has done an amazing job learning and applying all the changes in our software development process including the new architecture, testing practices, Scrum changes, branching strategy, releasing process, bugfixing, and so much more. Changing the way ourselves work is probably the most difficult part from a “status quo” change.
I will like to thank everyone in the team that has done the effort to make it possible. I know it’s not easy and sometimes not fun at first. There is still so much to do and 2015 is going to be even so much funnier. Following, there are just some figures about 2014. Thanks to the Atrapalo Team.
Tag: 5.3
Zend PHP 5.3 Demo Certification Test: More than 20.000 views!
During the PHP Barcelona Conference 2010, Enrico Zimuel and me prepared a presentation about a demo on the Zend PHP 5.3 Certification with the support of Zend Europe. Today, we are celebrating more than 20.000 views at Slideshare.net. Thanks to everyone!
Tag: active-monitoring
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Tag: aggregates
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tag: agile
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Techpump, mentorizando start-ups y CTOs
Ayudar a otros es algo que me hace feliz, me llena. Especialmente, si a quien ayudas es gente comprometida, son buenos alumnos y los resultados se ven pronto. Dejadme que os comparta cómo estoy ayudando a Techpump y a su CTO, Chavi.
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Detalles sobre Scrum: ¿Cómo atacar el sprint?
Os presento un pequeño ejercicio que llevo utilizando un mes y que me está dando buenos resultados a la hora de ilustrar la importancia de cómo atacar el sprint y la obsesión por entregar valor lo antes posible.
“Es lunes, perteneces a un equipo de Scrum de 6 personas. Habéis acabado el planning meeting y habéis enviado un mail con el commitment. Montáis la ScrumBoard y os queda de la siguiente manera”.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) Review
Happy new year to everyone! Today it’s January, 1st and I have finished reading “Extreme Programming Explained: Embrace Change, 2nd Edition”. If you love software development and agile practices, this book was the rules changer in the agile methodologies and software development in general. As I have done with other book reviews, here are my remarks. Buy it, seriously. You will fill the gaps about agile practices, so if you are doing Xp, Scrum, Kanban, Lean, etc. everything will gear together.
¿Cuál es el verdadero objetivo de TDD?
A todos aquellos que habéis pensado: “¡Demostrar que mi código funciona!”, lo siento, estáis equivocados. Aunque está asociado al 2º valor principal del desarrollo de software (según Robert C. Martin).
Robert C. Martin Clean Code Collection Review (Part II)
Hace una semana, publicaba un pequeño resumen y mis apuntes sobre el libro “Clean Coder” de Robert C. Martin (ver parte I). Hoy hago lo propio con el resumen del libro de la misma colección, “Clean Code”.
Os dejo cosas que subrayé y anoté del libro que me parecieron interesantes, espero que lo disfrutéis.
Tech Team Engagement
Me gustaría compartir con vosotros una de mis antiguas presentaciones sobre motivación de equipos técnicos que pude dar en la PHP Barcelona Conference hace algunos años. Me gusta ver que muchos conceptos todavía son vigentes. Si tenéis alguna duda sobre ella no dudéis en enviarme un tweet.
Introducción a Scrum y Agile
Hoy, me gustaría rescatar una presentación sobre Scrum y Agile que hice en la BetaBeers Barcelona. Una hora de Scrum en vena con dinámicas prácticas, overview de toda la metodología, ejemplos, etc. ¡Espero que la disfrutéis!
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: agile-manifesto
Tag: agile-methodologies
Tag: ajax
Javascript Apps, APIs, AJAX and CORS
If you are developing Javascript applications that make AJAX calls directly to an API that you don’t control, you will probably experiment issues with CORS. If you take a look to your console, the following message will appear:
XMLHttpRequest cannot load http://foo/bar. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8100’ is therefore not allowed access.
Tag: anemic-domain-model
No necesitáis consultoría sobre DDD: Caso Motor de Reservas
Cuando una empresa me contacta para hacer consultoría, monto un Skype para entender mejor las necesidades y la situación en la que se encuentra. Normalmente, hablo con un par de técnicos y/o el CTO que me cuentan sus dificultades. Tengo varias de éstas al mes. Algunas son empresas grandes (50 developers o más) y más pequeñas (menos de 10 developers). Como no me gano la vida haciendo consultoría, soy muy imparcial con lo que necesitan y sobretodo con lo que no necesitan. En sus dificultades, algunos patrones se repiten (miedos, prejuicios, presiones, modas, etc.). Me gustaría resumir cómo fue una de esas video conferencias por si podéis estar en la misma situación.
Tag: anonymous-class
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: ansible
GitHub + Ansible: deploy your public SSH keys to your servers
When I work with some mates in a side project, I need to give them access to the server. This is a quick tip about how to easily do it using GitHub and Ansible. The solution is simple and elegant.
Setup your MacOS (or other OS) development team with Ansible
Imagine that a new developer joins your team, installing everything needed for developing, including the application being developed is not an easy o fast task. I’m sure you have a wiki process, a markdown file in your repo or something similar. For a normal PHP web application, there is so much to do: installing PHP, composer and global tools, npm and/or bower, mysql, redis, etc. or setting up you Docker/Vagrant environment if you choose an isolated environment.
I remember when GitHub released Boxen in 2012. A tool for managing Mac development boxes with love. It’s based in Puppet. The main idea is use Puppet for provisioning not remote machines or servers but you local Mac. Let’s see a silly idea about how to do it with Ansible.
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tag: ansistrano
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tag: apache
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Tag: apache-cordova
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Tag: apache-dumper
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Tag: appcelerator
Adding a custom font on a titanium window title
If you are working with Titanium and you need to customize the font you are using as a title in a window, there is no predefined solution to do this, but there is a trick, the “titleControl” window property with a label control.
Introducción a Appcelerator Titanium
Uno de los productos que está funcionando mejor para el desarrollo de aplicaciones nativas para móviles utilizando Javascript es Titanium Appcelerator. Aprovecho para colgar una de las presentaciones al respecto que hice en la BetaBeers de Barcelona.
Tag: application-service
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: application-services
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Tag: aprender-a-leer
Cómo conseguir que tu equipo técnico lea: Club de lectura
Un software craftsman lee. Lee mucho.
A título individual, leer desarrolla nuestras habilidades técnicas, afianza lo que sabemos con ejemplos y experiencias de los autores, matiza conceptos complejos y abre nuevos horizontes hacia nuevas disciplinas. A nivel de equipo, sube el listón global, ayuda a ejecutar el roadmap técnico del departamento y mejora el entusiasmo general incitando la innovación.
Desarrollar el hábito de la lectura técnica, no es fácil. Es lectura densa, compleja y en inglés. Con este post, me gustaría presentar una dinámica genial para introducir la lectura en tu equipo técnico, los clubs de lectura. Fácil de montar y con muy buenos resultados. Ya me lo diréis.
Tag: architectural-style
Event Sourcing is not a messaging integration pattern
tl;dr: If you are sending messages to RabbitMQ to communicate one application to another, you are not doing Event Sourcing. You’re just doing messaging ;)
In the last two months, I’ve seen different nice talks using DDD, CQRS or Event Sourcing in the talk title. However, after watching the content, I think there are some general misunderstandings about some of the concepts. The most important one, in my honest opinion, is calling Event Sourcing to sending messaging to other applications using a broker. Event Sourcing is not about that. Let me explain a bit more.
Tag: arquitectura-distribuida
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Tag: async
Gracias, PulpoCon 2019: Eventos, Mensajería y otras fábulas
Rigor Talks – PHP – #27 – Distributing Domain Events using RabbitMQ (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este sexto video de la serie, vamos a distribuir los eventos, que tenemos persistidos en base de datos, hacia un sistema de colas como RabbitMQ. Veremos algunas consideraciones y trucos a tener en cuenta.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: atrapalo
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
Adiós Atrápalo
Después de más de 2 años trabajando en Atrápalo, ha llegado el momento de partir a nuevos horizontes. Los que ya me conocéis un poco sabéis cómo soy: llegar, simplificar y marchar. Mis objetivos se han cumplido y es hora de ayudar a otros equipos. Después de estos dos años, Atrápalo es una compañía respetada técnicamente por la comunidad de Barcelona. En 2015, consiguió se le premiara por esa evolución.
Cada integrante del equipo técnico ha hecho un trabajo increíble adoptando las nuevas dinámicas y prácticas de trabajo, tanto en desarrollo, UX y Sistemas. Casi siempre, un equipo grande es una desventaja, normalmente es lento, pero me ha sorprendido cómo un equipo de casi 100 personas, aplicando Scrum, eXtreme Programming y otras buenas prácticas ha conseguido reducir deuda técnica muy rápidamente. Lo que me lleva a la frase que repito entre amiguetes: “There is no legacy code, just legacy teams”.
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Atrápalo Tech 2014 figures
It’s almost a year ago since I started working at Atrápalo. The team has done an amazing job learning and applying all the changes in our software development process including the new architecture, testing practices, Scrum changes, branching strategy, releasing process, bugfixing, and so much more. Changing the way ourselves work is probably the most difficult part from a “status quo” change.
I will like to thank everyone in the team that has done the effort to make it possible. I know it’s not easy and sometimes not fun at first. There is still so much to do and 2015 is going to be even so much funnier. Following, there are just some figures about 2014. Thanks to the Atrapalo Team.
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Hola Atrápalo
La semana pasada os anunciaba mi salida de Emagister. Hoy, 20 de Febrero, es mi primer día en Atrápalo como CTO. Me han atrapado. Estoy muy ilusionado por trabajar en una empresa tan conocida, con una misión y visión tan clara (“ser líderes en el sector de ocio y turismo”), con un posicionamiento y marca reconocidos, así como más de 10 años de historia y presencia en 10 países.
Desde su fundación en el 2000, no ha parado de crecer y convertirse en un referente del ecommerce copando el “top of mind” de los usuarios interesados en ofertas sobre vuelos, restaurantes, viajes, actividades, cruceros, etc.
Tag: autoayuda
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: autoconocimiento
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: autoload
Saved 500 Kbytes of autoload classmap with autoload-dev at @AtrapaloEng
This week, at Atrápalo, we have reviewed our autoloading Composer configuration to use PSR-4 and split production classmap from development classmap to save some space in our Opcache. The result, 500 Kbytes less. Let’s see some details.
Tag: backtracking
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Tag: barcelona
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Bibliografía y recursos para meterse en el movimiento SoftwareCraftsmanship
Durante este último fin de semana, se ha organizado la Barcelona Software Craftsmanship (28 y 29 de Septiembre). Ha estado muy bien y recomiendo que estéis atentos a los eventos que va a ir organizado esta asociación. Les deseo los mejores éxitos.
Es posible que todavía no os suene el movimiento o no hayáis tenido tiempo de profundizar, así que os intento arrojar un poco de luz y pasar material para que os podáis poner rápidamente al día. Por favor, completar las listas con vuestros comentarios (he intentado añadir lo básico pero me dejo mucho material).
Tag: barcelona-conference
Zend PHP 5.3 Demo Certification Test: More than 20.000 views!
During the PHP Barcelona Conference 2010, Enrico Zimuel and me prepared a presentation about a demo on the Zend PHP 5.3 Certification with the support of Zend Europe. Today, we are celebrating more than 20.000 views at Slideshare.net. Thanks to everyone!
Tag: battleship
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Tag: book
Domain-Driven Design Destilado
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Tag: bounded-context
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Tag: bounded-contexts
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Tag: bowling-scoring
Kata: Bowling Game
Tag: brew
Setup your MacOS (or other OS) development team with Ansible
Imagine that a new developer joins your team, installing everything needed for developing, including the application being developed is not an easy o fast task. I’m sure you have a wiki process, a markdown file in your repo or something similar. For a normal PHP web application, there is so much to do: installing PHP, composer and global tools, npm and/or bower, mysql, redis, etc. or setting up you Docker/Vagrant environment if you choose an isolated environment.
I remember when GitHub released Boxen in 2012. A tool for managing Mac development boxes with love. It’s based in Puppet. The main idea is use Puppet for provisioning not remote machines or servers but you local Mac. Let’s see a silly idea about how to do it with Ansible.
Tag: buenas-practicas
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Tag: capistrano
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tag: certification
MySQL 5.6 Developer Certification Beta Exam Review
Last friday, I did the MySQL 5.6 Developer Certification Beta Exam. This is the exam that Oracle is launching because of the new MySQL 5.6 Developer certification that will replace the old MySQL 5.0 certification in 2014. I don’t know if I’m certified yet because in beta, all candidate exams have to be reviewed in order to analyse how difficult it was, what questions were not appropriated, typos, etc.) before going live.
Zend PHP 5.3 Demo Certification Test: More than 20.000 views!
During the PHP Barcelona Conference 2010, Enrico Zimuel and me prepared a presentation about a demo on the Zend PHP 5.3 Certification with the support of Zend Europe. Today, we are celebrating more than 20.000 views at Slideshare.net. Thanks to everyone!
Tag: change-management
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Techpump, mentorizando start-ups y CTOs
Ayudar a otros es algo que me hace feliz, me llena. Especialmente, si a quien ayudas es gente comprometida, son buenos alumnos y los resultados se ven pronto. Dejadme que os comparta cómo estoy ayudando a Techpump y a su CTO, Chavi.
Tag: check-style
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Tag: clean-code
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #11 – Immutability (Spanish)
Hola Amigos del Rigor! Continuamos con un video sobre inmutabilidad. Vamos a ver cómo poder hacer que nuestras clases, especialmente aquellas con las que modelamos Value Objects pueden ser inmutables.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #2 Self-Encapsulation (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar un ejemplo del concepto de “Self-Encapsulation” y la relación que guarda con las “Guard Clauses” que vimos en la Rigor Talk anterior. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #1 Guard Clause (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar lo que son las cláusulas de guarda y cómo ayudan a tener un código un poco más legible. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Remove non used PHP files in your project
When a project gets bigger, specially when using a framework, it’s mandatory to have some processes that help you in removing code that is not used anymore such as models, classes, template files, etc.
That is not an easy task, however the benefits or removing non used coded are tons (code coverage, development speed, bugs, etc.). But what’s the best approach to detect that a template file is not used anymore in your PHP project?
Robert C. Martin Clean Code Collection Review (Part II)
Hace una semana, publicaba un pequeño resumen y mis apuntes sobre el libro “Clean Coder” de Robert C. Martin (ver parte I). Hoy hago lo propio con el resumen del libro de la misma colección, “Clean Code”.
Os dejo cosas que subrayé y anoté del libro que me parecieron interesantes, espero que lo disfrutéis.
Tag: clean-coder
Robert C. Martin Clean Code Collection Review (Part I)
Me gustaría compartir la review de otro libro que ha caído esta semana. En realidad, son es una colección de 2 libros de Robert C. Martin que te puedes comprar en formato Kindle por 15,99 € (dos libros de Robert C. Martin por ese precio ya vale la pena), el pack lo podéis encontrar en amazon. En este post (de una serie de dos) os quiero hablar de “The Clean Coder”.
Tag: clean-coders
Los 331€ mejor invertidos – CleanCoders Videos
Hoy, después de un fin de semana de maratón de los últimos 3 capítulos sobre TDD de CleanCoders, de Robert C. Martin (@unclebobmartin), he acabado de verme todos los 21 capítulos. Empecé hace un mes y medio, he intentado ver cada día uno antes de salir del trabajo y también los fines de semana.
Tag: clojure
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Tag: club-de-lectura
Cómo conseguir que tu equipo técnico lea: Club de lectura
Un software craftsman lee. Lee mucho.
A título individual, leer desarrolla nuestras habilidades técnicas, afianza lo que sabemos con ejemplos y experiencias de los autores, matiza conceptos complejos y abre nuevos horizontes hacia nuevas disciplinas. A nivel de equipo, sube el listón global, ayuda a ejecutar el roadmap técnico del departamento y mejora el entusiasmo general incitando la innovación.
Desarrollar el hábito de la lectura técnica, no es fácil. Es lectura densa, compleja y en inglés. Con este post, me gustaría presentar una dinámica genial para introducir la lectura en tu equipo técnico, los clubs de lectura. Fácil de montar y con muy buenos resultados. Ya me lo diréis.
Tag: cluster
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: code-sniffer
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Tag: code-structure
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Tag: coding
Kata: Bowling Game
Kata: Prime Factors
Context
Although quite short, this kata is fascinating in the way it shows how “if” statements become “while” statements as the number of test cases increase. It’s also a wonderful example of how algorithms sometimes become simpler as they become more general.
Level
Easy / 40 minutes
Tag: coding-standard
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Tag: command
Gracias, PulpoCon 2019: Eventos, Mensajería y otras fábulas
Tag: command-bus
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: command-handler
Rigor Talks – PHP – #26 – Distributing Domain Events using REST (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este quinto video de la serie, vamos a empezar a discutir manera de distribuir los eventos. El primer método es quizá menos conocido, REST. Veremos qué beneficios tiene y algunos trucos para implementarlo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #25 – Persisting Domain Events (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este cuarto video, vamos a ver cómo implementar la persistencia de Eventos de Dominio, para qué es útil y cuáles son sus beneficios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #24 – Domain Events III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este tercer video, veremos la segunda alternativa para disparar un evento de dominio: un publisher estático. Veremos sus puntos fuertes y flojos.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #23 – Domain Events II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este segundo video, veremos la primera alternativa para disparar un evento de dominio: acumularlos en la entidad. Veremos sus puntos fuertes y flojos.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #22 – Domain Events I (Spanish)
Hola Amigos del Rigor! Arrancamos una miniserie de videos sobre Domain Events. En este primer video, veremos cómo modelar un evento de dominio e introduciremos las diferentes manera de dispararlos. En los siguientes, veremos en detalle dichas alternativas, así como su relación con la persistencia y la distribución.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: complexity
Tag: composer
Saved 500 Kbytes of autoload classmap with autoload-dev at @AtrapaloEng
This week, at Atrápalo, we have reviewed our autoloading Composer configuration to use PSR-4 and split production classmap from development classmap to save some space in our Opcache. The result, 500 Kbytes less. Let’s see some details.
Working at the same time in a project and its dependencies: Composer and path type repository
With the Domain-Driven Design, Microservices and API explosion, I see more teams working in a base project, such as a Web, and integrating other private packages they develop in a different repository. For example, working on the Web and an API client for a external REST service at the same time.
For example, at @AtrapaloEng, our sales development team (checkout process, purchases, orders, payments, etc.) integrates different payment methods into the web so users, specially Latam ones, can be happier using their preferred payment methods. They create a repository for each of the new payment methods we support as a external package. Sometimes a developer in the team must work with different projects at the same time, the Web and the payment method in development.
In this scenario, one option is work on the payment package, tag, push, go to the base project and update dependencies with Composer. As you can see, it’s a bit slower, how we can improve this process? Composer to the rescue!
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
iPackagist, the Packagist Client for iPhone
Packagist is a Composer package repository. It aggregates all sorts of PHP packages that are installable with Composer. You can use Composer to manage your project or libraries’ dependencies. Read more at http://packagist.org</a>.
**
Tag: comunicacion
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: conference
See you at @dpcon 2016
Tag: constructor
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
Good ORMs do not call __construct a.k.a. where to fire my Domain Events
tl;dr: Entity constructor should be called once in its entire life. That’s why good ORMs don’t use constructor to reconstitute objects from the database. Good ORMs use reflection, deserialization or proxies. So, fire your Domain Events in the constructor.
Last week, I saw a presentation about going from coupled-to-framework code to a Domain-Driven Design approach in a sample application. It was a good talk. However, in my honest opinion, there were some mistakes that are important to address. In order not to troll, I have checked with the speakers to write this post ;).
One of the mistakes, that I would like to point is where a Domain Event about “a new product was created” should be trigger specifically inside the Product Entity.
Speakers were showing a “Video” Entity with a named constructor called “create”. They were calling _new _inside the named constructor and then firing the event. I mean, the Domain Event was not fired inside of the real constructor. Let’s see the code we’re talking about (the whole repository can be found here):
Tag: constructor-method
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: consultancy
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Tag: context-map
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Tag: context-mapping
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Tag: continuous-deployment
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Tag: continuous-integration
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: cors
Javascript Apps, APIs, AJAX and CORS
If you are developing Javascript applications that make AJAX calls directly to an API that you don’t control, you will probably experiment issues with CORS. If you take a look to your console, the following message will appear:
XMLHttpRequest cannot load http://foo/bar. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8100’ is therefore not allowed access.
Tag: coupled-code
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: coverage
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: cqrs
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Tag: craftsmanship
Bibliografía y recursos para meterse en el movimiento SoftwareCraftsmanship
Durante este último fin de semana, se ha organizado la Barcelona Software Craftsmanship (28 y 29 de Septiembre). Ha estado muy bien y recomiendo que estéis atentos a los eventos que va a ir organizado esta asociación. Les deseo los mejores éxitos.
Es posible que todavía no os suene el movimiento o no hayáis tenido tiempo de profundizar, así que os intento arrojar un poco de luz y pasar material para que os podáis poner rápidamente al día. Por favor, completar las listas con vuestros comentarios (he intentado añadir lo básico pero me dejo mucho material).
Tag: crecimiento
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: csshx
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: cto
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Techpump, mentorizando start-ups y CTOs
Ayudar a otros es algo que me hace feliz, me llena. Especialmente, si a quien ayudas es gente comprometida, son buenos alumnos y los resultados se ven pronto. Dejadme que os comparta cómo estoy ayudando a Techpump y a su CTO, Chavi.
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: curve-adoption
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Tag: custom-font
Adding a custom font on a titanium window title
If you are working with Titanium and you need to customize the font you are using as a title in a window, there is no predefined solution to do this, but there is a trick, the “titleControl” window property with a label control.
Tag: custom-types
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Tag: dashboard
New PHP OPCache Dashboard
If you are not using any PHP opcache accelerator, you should. If you are using APC, you should move to OPCache. If you are already using it, you should use opcache-dashboard also.
Tag: database
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Tag: ddd
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Domain-Driven Design Destilado
No necesitáis consultoría sobre DDD: Caso Motor de Reservas
Cuando una empresa me contacta para hacer consultoría, monto un Skype para entender mejor las necesidades y la situación en la que se encuentra. Normalmente, hablo con un par de técnicos y/o el CTO que me cuentan sus dificultades. Tengo varias de éstas al mes. Algunas son empresas grandes (50 developers o más) y más pequeñas (menos de 10 developers). Como no me gano la vida haciendo consultoría, soy muy imparcial con lo que necesitan y sobretodo con lo que no necesitan. En sus dificultades, algunos patrones se repiten (miedos, prejuicios, presiones, modas, etc.). Me gustaría resumir cómo fue una de esas video conferencias por si podéis estar en la misma situación.
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Event Sourcing is not a messaging integration pattern
tl;dr: If you are sending messages to RabbitMQ to communicate one application to another, you are not doing Event Sourcing. You’re just doing messaging ;)
In the last two months, I’ve seen different nice talks using DDD, CQRS or Event Sourcing in the talk title. However, after watching the content, I think there are some general misunderstandings about some of the concepts. The most important one, in my honest opinion, is calling Event Sourcing to sending messaging to other applications using a broker. Event Sourcing is not about that. Let me explain a bit more.
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
“Implementing Domain-Driven Design” Workshop in Barcelona
Since 2012 and after two years reading and working with Domain-Driven Design approaches, in 2014, Christian (@theUniC) and me went to Berlin to get trained by Vaughn Vernon, author of “Implementing Domain-Driven Design” book. The training was fantastic, all the concepts that were going around on their minds up to that moment, got stuck into the ground in the 3 days IDDD workshop. However, they were the only two PHP developers there in a room full of Java and .NET. That was quite funny.
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
“Hexagonal Architecture with PHP” was published in phparch|magazine
This week, the php|architect magazine has published an article of mine about “Hexagonal Architecture with PHP”. Here’s the introduction:
“With the rise of DDD (domain-driven development), architectures promoting domain-centric designs are becoming more popular. This is the case with Hexagonal Architecture, also known as Ports and Adapters, that seems to have been rediscovered recently by PHP developers. Invented in 2005 by Alistair Cockburn, one of the Agile Manifesto authors, the Hexagonal Architecture allows an application to be equally driven by users, programs, automated tests, or batch scripts, while being developed and tested in isolation from its eventual run-time devices and databases. This results in infrastructure-agnostic web applications that are easier to test, write, and maintain. Let’s see how to apply it using real PHP examples.”
I would like to share with you some thought, the cover and the code repository.
Tag: ddd-in-php
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
Tag: decorator
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: decoupling
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: delivery
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Tag: demeter
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: dependencies
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Working at the same time in a project and its dependencies: Composer and path type repository
With the Domain-Driven Design, Microservices and API explosion, I see more teams working in a base project, such as a Web, and integrating other private packages they develop in a different repository. For example, working on the Web and an API client for a external REST service at the same time.
For example, at @AtrapaloEng, our sales development team (checkout process, purchases, orders, payments, etc.) integrates different payment methods into the web so users, specially Latam ones, can be happier using their preferred payment methods. They create a repository for each of the new payment methods we support as a external package. Sometimes a developer in the team must work with different projects at the same time, the Web and the payment method in development.
In this scenario, one option is work on the payment package, tag, push, go to the base project and update dependencies with Composer. As you can see, it’s a bit slower, how we can improve this process? Composer to the rescue!
Tag: deploy
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tag: deployment
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: desarrollo
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: desarrollo-profesional
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: developer
Por dónde empiezo: 7 ideas para ponerme al día
Estos días he estado haciendo entrevistas a muchos perfiles. Por si no lo sabéis, en Atrapalo, tenemos unas 15 posiciones abiertas para incorporar desarrolladores PHP de todos los perfiles, juniors y seniors con muchas ganas de pasárselo bien, aprender y aportar a un equipo que encara una nueva etapa excitante. Durante estas entrevistas, me he encontrado con desarrolladores cuyas circunstancias les han llevado a trabajar sólo en start-ups (“don’t worry be crappy”) o pequeñas empresas (“long live wordpress, drupal y joomla”), este post, con todo el cariño, es para ellos y su futuro.
Tag: developers
Tech Team Engagement
Me gustaría compartir con vosotros una de mis antiguas presentaciones sobre motivación de equipos técnicos que pude dar en la PHP Barcelona Conference hace algunos años. Me gusta ver que muchos conceptos todavía son vigentes. Si tenéis alguna duda sobre ella no dudéis en enviarme un tweet.
Tag: devops
Adiós Atrápalo
Después de más de 2 años trabajando en Atrápalo, ha llegado el momento de partir a nuevos horizontes. Los que ya me conocéis un poco sabéis cómo soy: llegar, simplificar y marchar. Mis objetivos se han cumplido y es hora de ayudar a otros equipos. Después de estos dos años, Atrápalo es una compañía respetada técnicamente por la comunidad de Barcelona. En 2015, consiguió se le premiara por esa evolución.
Cada integrante del equipo técnico ha hecho un trabajo increíble adoptando las nuevas dinámicas y prácticas de trabajo, tanto en desarrollo, UX y Sistemas. Casi siempre, un equipo grande es una desventaja, normalmente es lento, pero me ha sorprendido cómo un equipo de casi 100 personas, aplicando Scrum, eXtreme Programming y otras buenas prácticas ha conseguido reducir deuda técnica muy rápidamente. Lo que me lleva a la frase que repito entre amiguetes: “There is no legacy code, just legacy teams”.
Tag: digital-transformation
Techpump, mentorizando start-ups y CTOs
Ayudar a otros es algo que me hace feliz, me llena. Especialmente, si a quien ayudas es gente comprometida, son buenos alumnos y los resultados se ven pronto. Dejadme que os comparta cómo estoy ayudando a Techpump y a su CTO, Chavi.
Tag: distribution
Rigor Talks – PHP – #27 – Distributing Domain Events using RabbitMQ (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este sexto video de la serie, vamos a distribuir los eventos, que tenemos persistidos en base de datos, hacia un sistema de colas como RabbitMQ. Veremos algunas consideraciones y trucos a tener en cuenta.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #26 – Distributing Domain Events using REST (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este quinto video de la serie, vamos a empezar a discutir manera de distribuir los eventos. El primer método es quizá menos conocido, REST. Veremos qué beneficios tiene y algunos trucos para implementarlo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: docker
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: doctrine
Rigor Talks – PHP – #25 – Persisting Domain Events (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este cuarto video, vamos a ver cómo implementar la persistencia de Eventos de Dominio, para qué es útil y cuáles son sus beneficios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: dod
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Tag: domain-driven-design
Domain-Driven Design Destilado
Good ORMs do not call __construct a.k.a. where to fire my Domain Events
tl;dr: Entity constructor should be called once in its entire life. That’s why good ORMs don’t use constructor to reconstitute objects from the database. Good ORMs use reflection, deserialization or proxies. So, fire your Domain Events in the constructor.
Last week, I saw a presentation about going from coupled-to-framework code to a Domain-Driven Design approach in a sample application. It was a good talk. However, in my honest opinion, there were some mistakes that are important to address. In order not to troll, I have checked with the speakers to write this post ;).
One of the mistakes, that I would like to point is where a Domain Event about “a new product was created” should be trigger specifically inside the Product Entity.
Speakers were showing a “Video” Entity with a named constructor called “create”. They were calling _new _inside the named constructor and then firing the event. I mean, the Domain Event was not fired inside of the real constructor. Let’s see the code we’re talking about (the whole repository can be found here):
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
See you at @dpcon 2016
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
“Implementing Domain-Driven Design” Workshop in Barcelona
Since 2012 and after two years reading and working with Domain-Driven Design approaches, in 2014, Christian (@theUniC) and me went to Berlin to get trained by Vaughn Vernon, author of “Implementing Domain-Driven Design” book. The training was fantastic, all the concepts that were going around on their minds up to that moment, got stuck into the ground in the 3 days IDDD workshop. However, they were the only two PHP developers there in a room full of Java and .NET. That was quite funny.
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: domain-event
Gracias, PulpoCon 2019: Eventos, Mensajería y otras fábulas
Tag: domain-events
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #28 – Sending Domain Events to Elastic (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver una de las alternativas para hacer esto, el envío síncrono a Elastic por cada eventos disparado.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #27 – Distributing Domain Events using RabbitMQ (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este sexto video de la serie, vamos a distribuir los eventos, que tenemos persistidos en base de datos, hacia un sistema de colas como RabbitMQ. Veremos algunas consideraciones y trucos a tener en cuenta.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #26 – Distributing Domain Events using REST (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este quinto video de la serie, vamos a empezar a discutir manera de distribuir los eventos. El primer método es quizá menos conocido, REST. Veremos qué beneficios tiene y algunos trucos para implementarlo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #25 – Persisting Domain Events (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este cuarto video, vamos a ver cómo implementar la persistencia de Eventos de Dominio, para qué es útil y cuáles son sus beneficios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #24 – Domain Events III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este tercer video, veremos la segunda alternativa para disparar un evento de dominio: un publisher estático. Veremos sus puntos fuertes y flojos.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #23 – Domain Events II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este segundo video, veremos la primera alternativa para disparar un evento de dominio: acumularlos en la entidad. Veremos sus puntos fuertes y flojos.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #22 – Domain Events I (Spanish)
Hola Amigos del Rigor! Arrancamos una miniserie de videos sobre Domain Events. En este primer video, veremos cómo modelar un evento de dominio e introduciremos las diferentes manera de dispararlos. En los siguientes, veremos en detalle dichas alternativas, así como su relación con la persistencia y la distribución.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Good ORMs do not call __construct a.k.a. where to fire my Domain Events
tl;dr: Entity constructor should be called once in its entire life. That’s why good ORMs don’t use constructor to reconstitute objects from the database. Good ORMs use reflection, deserialization or proxies. So, fire your Domain Events in the constructor.
Last week, I saw a presentation about going from coupled-to-framework code to a Domain-Driven Design approach in a sample application. It was a good talk. However, in my honest opinion, there were some mistakes that are important to address. In order not to troll, I have checked with the speakers to write this post ;).
One of the mistakes, that I would like to point is where a Domain Event about “a new product was created” should be trigger specifically inside the Product Entity.
Speakers were showing a “Video” Entity with a named constructor called “create”. They were calling _new _inside the named constructor and then firing the event. I mean, the Domain Event was not fired inside of the real constructor. Let’s see the code we’re talking about (the whole repository can be found here):
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Event Sourcing is not a messaging integration pattern
tl;dr: If you are sending messages to RabbitMQ to communicate one application to another, you are not doing Event Sourcing. You’re just doing messaging ;)
In the last two months, I’ve seen different nice talks using DDD, CQRS or Event Sourcing in the talk title. However, after watching the content, I think there are some general misunderstandings about some of the concepts. The most important one, in my honest opinion, is calling Event Sourcing to sending messaging to other applications using a broker. Event Sourcing is not about that. Let me explain a bit more.
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Tag: domain-services
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Tag: drupal
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Tag: dummy
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: dumper
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Tag: economia-del-software
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Tag: elastic
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #28 – Sending Domain Events to Elastic (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver una de las alternativas para hacer esto, el envío síncrono a Elastic por cada eventos disparado.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
Tag: emagister
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: embeddables
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Tag: engagement
Tech Team Engagement
Me gustaría compartir con vosotros una de mis antiguas presentaciones sobre motivación de equipos técnicos que pude dar en la PHP Barcelona Conference hace algunos años. Me gusta ver que muchos conceptos todavía son vigentes. Si tenéis alguna duda sobre ella no dudéis en enviarme un tweet.
Tag: entities
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: entity
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: entity-manager
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: event-dispatcher
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: event-sourcing
Event Sourcing is not a messaging integration pattern
tl;dr: If you are sending messages to RabbitMQ to communicate one application to another, you are not doing Event Sourcing. You’re just doing messaging ;)
In the last two months, I’ve seen different nice talks using DDD, CQRS or Event Sourcing in the talk title. However, after watching the content, I think there are some general misunderstandings about some of the concepts. The most important one, in my honest opinion, is calling Event Sourcing to sending messaging to other applications using a broker. Event Sourcing is not about that. Let me explain a bit more.
Tag: eventsourcing
Tag: examples
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Tag: experimentation
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Tag: extreme-programming
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Thanks Ron Jeffries – “Extreme Programming Installed” Book Review
I though that it was difficult to read a better book about XP than “Extreme Programming Explained” by Kent Beck. Then, “Extreme Programming Installed” by Ron Jeffries came to me. Last week, I finished it. Ron goes into the detail about the how-to in each XP detail. So, if you want to start with XP, read the explain one, but if you need to go deeper, the installed one is your book.
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) Review
Happy new year to everyone! Today it’s January, 1st and I have finished reading “Extreme Programming Explained: Embrace Change, 2nd Edition”. If you love software development and agile practices, this book was the rules changer in the agile methodologies and software development in general. As I have done with other book reviews, here are my remarks. Buy it, seriously. You will fill the gaps about agile practices, so if you are doing Xp, Scrum, Kanban, Lean, etc. everything will gear together.
Tag: fake
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: filter-branch
Fixing commit TYPOs in git history with filter-branch
Last week, we tried at Atrapalo to migrate from our own git repository to Github. That should be easy, is just a matter of three commands already explained in Github’s guide. The main problem appears when you have some sort of issue with your commits, so messages like “invalid author email” raises when trying to push your changes.
Tag: fluent-interface
“new” and fluent interfaces
Last week, I was with some friends and we were talking about fluent interfaces and I show them something that they didn’t know. I got surprised about it because it was introduced in PHP 5.4.
Tag: flush
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: focus
Tag: framework
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Tag: games
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Tag: gestion-de-equipos
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: git
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Fixing commit TYPOs in git history with filter-branch
Last week, we tried at Atrapalo to migrate from our own git repository to Github. That should be easy, is just a matter of three commands already explained in Github’s guide. The main problem appears when you have some sort of issue with your commits, so messages like “invalid author email” raises when trying to push your changes.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: github
GitHub + Ansible: deploy your public SSH keys to your servers
When I work with some mates in a side project, I need to give them access to the server. This is a quick tip about how to easily do it using GitHub and Ansible. The solution is simple and elegant.
Fixing commit TYPOs in git history with filter-branch
Last week, we tried at Atrapalo to migrate from our own git repository to Github. That should be easy, is just a matter of three commands already explained in Github’s guide. The main problem appears when you have some sort of issue with your commits, so messages like “invalid author email” raises when trying to push your changes.
Tag: gravatar
iGravatar, the Gravatar client for iPhone
iGravatar is your iPhone app for managing your Gravatar account. You will be able to upload new pictures from your iPhone library or directly from your camera, assign pictures to your email addresses and so on. Sync your contacts picture in case they have a Gravatar account!
Tag: guard-clause
Rigor Talks – PHP – #1 Guard Clause (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar lo que son las cláusulas de guarda y cómo ayudan a tener un código un poco más legible. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: guard-clauses
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: hexagonal-architecture
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
“Hexagonal Architecture with PHP” was published in phparch|magazine
This week, the php|architect magazine has published an article of mine about “Hexagonal Architecture with PHP”. Here’s the introduction:
“With the rise of DDD (domain-driven development), architectures promoting domain-centric designs are becoming more popular. This is the case with Hexagonal Architecture, also known as Ports and Adapters, that seems to have been rediscovered recently by PHP developers. Invented in 2005 by Alistair Cockburn, one of the Agile Manifesto authors, the Hexagonal Architecture allows an application to be equally driven by users, programs, automated tests, or batch scripts, while being developed and tested in isolation from its eventual run-time devices and databases. This results in infrastructure-agnostic web applications that are easier to test, write, and maintain. Let’s see how to apply it using real PHP examples.”
I would like to share with you some thought, the cover and the code repository.
Tag: hiring
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Tag: hook
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Tag: httpkernelinterface
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Tag: humbug
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: id
Doctrine 2.5, DDD, Entities and Identities
If you’re developing applications in a Domain-Driven Design style and using Doctrine 2.5, you may be struggling with implementing your entities identities, I mean, UserId, ProductId, and so on. Embeddables are cool, but limited. Surrogates are not necessary anymore. Here are some short tips and examples about how to proceed.
Tag: identity
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Tag: if
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Tag: immutability
Rigor Talks – PHP – #11 – Immutability (Spanish)
Hola Amigos del Rigor! Continuamos con un video sobre inmutabilidad. Vamos a ver cómo poder hacer que nuestras clases, especialmente aquellas con las que modelamos Value Objects pueden ser inmutables.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: impactjs
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Tag: inmutabilidad
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: integracion-continua
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Tag: internals
Subscribe yourself to PHP internals
On January, 31st, I was in the Barcelona PHP Day. Albert Casademont (@acasademont) was giving his talk about PHP 7. He talked about features, benchmarks and internals. He said that he was subscribed to the PHP Internals mailing list and I thought that more developers should too. However, it’s not so easy to get there.
Tag: ionic
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Tag: ionic-framework
Javascript Apps, APIs, AJAX and CORS
If you are developing Javascript applications that make AJAX calls directly to an API that you don’t control, you will probably experiment issues with CORS. If you take a look to your console, the following message will appear:
XMLHttpRequest cannot load http://foo/bar. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8100’ is therefore not allowed access.
Tag: iphone
iPackagist, the Packagist Client for iPhone
Packagist is a Composer package repository. It aggregates all sorts of PHP packages that are installable with Composer. You can use Composer to manage your project or libraries’ dependencies. Read more at http://packagist.org</a>.
**
iGravatar, the Gravatar client for iPhone
iGravatar is your iPhone app for managing your Gravatar account. You will be able to upload new pictures from your iPhone library or directly from your camera, assign pictures to your email addresses and so on. Sync your contacts picture in case they have a Gravatar account!
Tag: javascript
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Javascript Apps, APIs, AJAX and CORS
If you are developing Javascript applications that make AJAX calls directly to an API that you don’t control, you will probably experiment issues with CORS. If you take a look to your console, the following message will appear:
XMLHttpRequest cannot load http://foo/bar. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8100’ is therefore not allowed access.
Introducción a Appcelerator Titanium
Uno de los productos que está funcionando mejor para el desarrollo de aplicaciones nativas para móviles utilizando Javascript es Titanium Appcelerator. Aprovecho para colgar una de las presentaciones al respecto que hice en la BetaBeers de Barcelona.
Tag: jenkins
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: juego
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: junnior
Por dónde empiezo: 7 ideas para ponerme al día
Estos días he estado haciendo entrevistas a muchos perfiles. Por si no lo sabéis, en Atrapalo, tenemos unas 15 posiciones abiertas para incorporar desarrolladores PHP de todos los perfiles, juniors y seniors con muchas ganas de pasárselo bien, aprender y aportar a un equipo que encara una nueva etapa excitante. Durante estas entrevistas, me he encontrado con desarrolladores cuyas circunstancias les han llevado a trabajar sólo en start-ups (“don’t worry be crappy”) o pequeñas empresas (“long live wordpress, drupal y joomla”), este post, con todo el cariño, es para ellos y su futuro.
Tag: kata
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Kata: Bowling Game
Kata: Prime Factors
Context
Although quite short, this kata is fascinating in the way it shows how “if” statements become “while” statements as the number of test cases increase. It’s also a wonderful example of how algorithms sometimes become simpler as they become more general.
Level
Easy / 40 minutes
Tag: kent-beck
Thanks Ron Jeffries – “Extreme Programming Installed” Book Review
I though that it was difficult to read a better book about XP than “Extreme Programming Explained” by Kent Beck. Then, “Extreme Programming Installed” by Ron Jeffries came to me. Last week, I finished it. Ron goes into the detail about the how-to in each XP detail. So, if you want to start with XP, read the explain one, but if you need to go deeper, the installed one is your book.
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) Review
Happy new year to everyone! Today it’s January, 1st and I have finished reading “Extreme Programming Explained: Embrace Change, 2nd Edition”. If you love software development and agile practices, this book was the rules changer in the agile methodologies and software development in general. As I have done with other book reviews, here are my remarks. Buy it, seriously. You will fill the gaps about agile practices, so if you are doing Xp, Scrum, Kanban, Lean, etc. everything will gear together.
Courage on TDD (“Test Driven Development: By Example” – Part II)
La segunda parte del prólogo de “Test Driven Development: By Example” es casi aún mejor (podéis ver la primera parte aquí). 34$ bien invertidos.
Test Driven Development: By Example
Siguiendo con mi andadura de lecturas técnicas, esta semanas voy a estar con “Test Driven Development: By Example”. El enfoque del libro es totalmente práctico pero el prólogo me ha parecido tan simple, claro y delicioso que no he podido hacer otra cosa que compartirlo con vosotros para que os animéis con TDD y a la lectura de este fantástico libro.
Tag: kibana
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #28 – Sending Domain Events to Elastic (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver una de las alternativas para hacer esto, el envío síncrono a Elastic por cada eventos disparado.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Tag: kpi
Legacy Code and Teams Series: Training Sessions and Technical Committee
(Next: Legacy Code and Teams Series: Composer)
When talking with some friends about how we are improving Atrápalo legacy code and development process, they asked for creating a presentation and give a talk about the steps we are following, hows, whys, and so on. It sound to me interesting so I would like to help sharing my experiences, not just the Atrápalo ones because when working at Emagister we did something quite similar with Christian, Eber, Dario, Lluís, Jordi, Jose Luís and the rest of the team with great results.
Before jumping into a talk, I would like to start a serie of posts about my way dealing with legacy projects. I’m really interested in listening from you and your comments in order to enrich the final result. So, any suggestion or experience is really welcomed.
Tag: legacy-code
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Legacy Code and Teams Series: Training Sessions and Technical Committee
(Next: Legacy Code and Teams Series: Composer)
When talking with some friends about how we are improving Atrápalo legacy code and development process, they asked for creating a presentation and give a talk about the steps we are following, hows, whys, and so on. It sound to me interesting so I would like to help sharing my experiences, not just the Atrápalo ones because when working at Emagister we did something quite similar with Christian, Eber, Dario, Lluís, Jordi, Jose Luís and the rest of the team with great results.
Before jumping into a talk, I would like to start a serie of posts about my way dealing with legacy projects. I’m really interested in listening from you and your comments in order to enrich the final result. So, any suggestion or experience is really welcomed.
Tag: legacy-teams
Legacy Code and Teams Series: Training Sessions and Technical Committee
(Next: Legacy Code and Teams Series: Composer)
When talking with some friends about how we are improving Atrápalo legacy code and development process, they asked for creating a presentation and give a talk about the steps we are following, hows, whys, and so on. It sound to me interesting so I would like to help sharing my experiences, not just the Atrápalo ones because when working at Emagister we did something quite similar with Christian, Eber, Dario, Lluís, Jordi, Jose Luís and the rest of the team with great results.
Before jumping into a talk, I would like to start a serie of posts about my way dealing with legacy projects. I’m really interested in listening from you and your comments in order to enrich the final result. So, any suggestion or experience is really welcomed.
Tag: libros-tecnicos
Cómo conseguir que tu equipo técnico lea: Club de lectura
Un software craftsman lee. Lee mucho.
A título individual, leer desarrolla nuestras habilidades técnicas, afianza lo que sabemos con ejemplos y experiencias de los autores, matiza conceptos complejos y abre nuevos horizontes hacia nuevas disciplinas. A nivel de equipo, sube el listón global, ayuda a ejecutar el roadmap técnico del departamento y mejora el entusiasmo general incitando la innovación.
Desarrollar el hábito de la lectura técnica, no es fácil. Es lectura densa, compleja y en inglés. Con este post, me gustaría presentar una dinámica genial para introducir la lectura en tu equipo técnico, los clubs de lectura. Fácil de montar y con muy buenos resultados. Ya me lo diréis.
Tag: liderazgo
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: list
Some “basuritas”: PHP, list() and objects
Tag: local-environment
Setup your MacOS (or other OS) development team with Ansible
Imagine that a new developer joins your team, installing everything needed for developing, including the application being developed is not an easy o fast task. I’m sure you have a wiki process, a markdown file in your repo or something similar. For a normal PHP web application, there is so much to do: installing PHP, composer and global tools, npm and/or bower, mysql, redis, etc. or setting up you Docker/Vagrant environment if you choose an isolated environment.
I remember when GitHub released Boxen in 2012. A tool for managing Mac development boxes with love. It’s based in Puppet. The main idea is use Puppet for provisioning not remote machines or servers but you local Mac. Let’s see a silly idea about how to do it with Ansible.
Tag: logger
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: macos
Setup your MacOS (or other OS) development team with Ansible
Imagine that a new developer joins your team, installing everything needed for developing, including the application being developed is not an easy o fast task. I’m sure you have a wiki process, a markdown file in your repo or something similar. For a normal PHP web application, there is so much to do: installing PHP, composer and global tools, npm and/or bower, mysql, redis, etc. or setting up you Docker/Vagrant environment if you choose an isolated environment.
I remember when GitHub released Boxen in 2012. A tool for managing Mac development boxes with love. It’s based in Puppet. The main idea is use Puppet for provisioning not remote machines or servers but you local Mac. Let’s see a silly idea about how to do it with Ansible.
Tag: magazine
“Hexagonal Architecture with PHP” was published in phparch|magazine
This week, the php|architect magazine has published an article of mine about “Hexagonal Architecture with PHP”. Here’s the introduction:
“With the rise of DDD (domain-driven development), architectures promoting domain-centric designs are becoming more popular. This is the case with Hexagonal Architecture, also known as Ports and Adapters, that seems to have been rediscovered recently by PHP developers. Invented in 2005 by Alistair Cockburn, one of the Agile Manifesto authors, the Hexagonal Architecture allows an application to be equally driven by users, programs, automated tests, or batch scripts, while being developed and tested in isolation from its eventual run-time devices and databases. This results in infrastructure-agnostic web applications that are easier to test, write, and maintain. Let’s see how to apply it using real PHP examples.”
I would like to share with you some thought, the cover and the code repository.
Tag: may-the-rigor-be-with-you
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: mentor
Por dónde empiezo: 7 ideas para ponerme al día
Estos días he estado haciendo entrevistas a muchos perfiles. Por si no lo sabéis, en Atrapalo, tenemos unas 15 posiciones abiertas para incorporar desarrolladores PHP de todos los perfiles, juniors y seniors con muchas ganas de pasárselo bien, aprender y aportar a un equipo que encara una nueva etapa excitante. Durante estas entrevistas, me he encontrado con desarrolladores cuyas circunstancias les han llevado a trabajar sólo en start-ups (“don’t worry be crappy”) o pequeñas empresas (“long live wordpress, drupal y joomla”), este post, con todo el cariño, es para ellos y su futuro.
Tag: mentoring
Techpump, mentorizando start-ups y CTOs
Ayudar a otros es algo que me hace feliz, me llena. Especialmente, si a quien ayudas es gente comprometida, son buenos alumnos y los resultados se ven pronto. Dejadme que os comparta cómo estoy ayudando a Techpump y a su CTO, Chavi.
Tag: messaging
Event Sourcing is not a messaging integration pattern
tl;dr: If you are sending messages to RabbitMQ to communicate one application to another, you are not doing Event Sourcing. You’re just doing messaging ;)
In the last two months, I’ve seen different nice talks using DDD, CQRS or Event Sourcing in the talk title. However, after watching the content, I think there are some general misunderstandings about some of the concepts. The most important one, in my honest opinion, is calling Event Sourcing to sending messaging to other applications using a broker. Event Sourcing is not about that. Let me explain a bit more.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Tag: metrics
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: microservices
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Tag: middleware
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: migrating
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Tag: migration
First tests with #PHP7 in production at @AtrapaloEng
On Monday, Badoo blogged about its migration to PHP7 (https://techblog.badoo.com/blog/2016/03/14/how-badoo-saved-one-million-dollars-switching-to-php7/</a>). Those are great results! At @AtrapaloEng, we’re running already tests in production to perform the same step. We could have started some months before, but we’ve been struggling with the php-msgpack extension and its (un)support for PHP7. We hope to deploy PHP7 in all our server during this week but we would like to share with you what we have seen so far. What we have done is adding another FPM node with the same capabilities as the current ones running in production with PHP 5.6. The new node is getting the same amount of traffic as the other ones. No special configurations or tweaks such as Huge Pages, just PHP7 upgrade. Data after more than 24 hours running.
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Tag: mitch-lacey
Tag: mock
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: mockery
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Tag: monolith
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Tag: monolithic-repository
Working at the same time in a project and its dependencies: Composer and path type repository
With the Domain-Driven Design, Microservices and API explosion, I see more teams working in a base project, such as a Web, and integrating other private packages they develop in a different repository. For example, working on the Web and an API client for a external REST service at the same time.
For example, at @AtrapaloEng, our sales development team (checkout process, purchases, orders, payments, etc.) integrates different payment methods into the web so users, specially Latam ones, can be happier using their preferred payment methods. They create a repository for each of the new payment methods we support as a external package. Sometimes a developer in the team must work with different projects at the same time, the Web and the payment method in development.
In this scenario, one option is work on the payment package, tag, push, go to the base project and update dependencies with Composer. As you can see, it’s a bit slower, how we can improve this process? Composer to the rescue!
Tag: monolito
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Tag: monolog
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: multiple-terminals
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: mutant-testing
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: mvp
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Tag: mysql
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
MySQL 5.6 Developer Certification Beta Exam Review
Last friday, I did the MySQL 5.6 Developer Certification Beta Exam. This is the exam that Oracle is launching because of the new MySQL 5.6 Developer certification that will replace the old MySQL 5.0 certification in 2014. I don’t know if I’m certified yet because in beta, all candidate exams have to be reviewed in order to analyse how difficult it was, what questions were not appropriated, typos, etc.) before going live.
Tag: mysql-5.6-certification
MySQL 5.6 Developer Certification Beta Exam Review
Last friday, I did the MySQL 5.6 Developer Certification Beta Exam. This is the exam that Oracle is launching because of the new MySQL 5.6 Developer certification that will replace the old MySQL 5.0 certification in 2014. I don’t know if I’m certified yet because in beta, all candidate exams have to be reviewed in order to analyse how difficult it was, what questions were not appropriated, typos, etc.) before going live.
Tag: named-constructor
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
Good ORMs do not call __construct a.k.a. where to fire my Domain Events
tl;dr: Entity constructor should be called once in its entire life. That’s why good ORMs don’t use constructor to reconstitute objects from the database. Good ORMs use reflection, deserialization or proxies. So, fire your Domain Events in the constructor.
Last week, I saw a presentation about going from coupled-to-framework code to a Domain-Driven Design approach in a sample application. It was a good talk. However, in my honest opinion, there were some mistakes that are important to address. In order not to troll, I have checked with the speakers to write this post ;).
One of the mistakes, that I would like to point is where a Domain Event about “a new product was created” should be trigger specifically inside the Product Entity.
Speakers were showing a “Video” Entity with a named constructor called “create”. They were calling _new _inside the named constructor and then firing the event. I mean, the Domain Event was not fired inside of the real constructor. Let’s see the code we’re talking about (the whole repository can be found here):
Tag: named-constructors
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: new
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
“new” and fluent interfaces
Last week, I was with some friends and we were talking about fluent interfaces and I show them something that they didn’t know. I got surprised about it because it was introduced in PHP 5.4.
Tag: new-challenge
Hi @xing_bcn and @xing_de!
After leaving Atrápalo, it’s time to jump to a new challenge. As I explained, I need to get out of my confort zone and check other things that will make me learn new things. Some of you already know, but for the rest, the chosen company is Xing. So, I’m more than happy to announce that I’m the next B2B Head of Engineering at @xing. I’d like to share some thoughts about the reasons that took me here.
Tag: newbie
Por dónde empiezo: 7 ideas para ponerme al día
Estos días he estado haciendo entrevistas a muchos perfiles. Por si no lo sabéis, en Atrapalo, tenemos unas 15 posiciones abiertas para incorporar desarrolladores PHP de todos los perfiles, juniors y seniors con muchas ganas de pasárselo bien, aprender y aportar a un equipo que encara una nueva etapa excitante. Durante estas entrevistas, me he encontrado con desarrolladores cuyas circunstancias les han llevado a trabajar sólo en start-ups (“don’t worry be crappy”) o pequeñas empresas (“long live wordpress, drupal y joomla”), este post, con todo el cariño, es para ellos y su futuro.
Tag: nmap
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: notifier
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: objects
Some “basuritas”: PHP, list() and objects
Tag: oop
“new” and fluent interfaces
Last week, I was with some friends and we were talking about fluent interfaces and I show them something that they didn’t know. I got surprised about it because it was introduced in PHP 5.4.
Tag: opcache
New PHP OPCache Dashboard
If you are not using any PHP opcache accelerator, you should. If you are using APC, you should move to OPCache. If you are already using it, you should use opcache-dashboard also.
Remove non used PHP files in your project
When a project gets bigger, specially when using a framework, it’s mandatory to have some processes that help you in removing code that is not used anymore such as models, classes, template files, etc.
That is not an easy task, however the benefits or removing non used coded are tons (code coverage, development speed, bugs, etc.). But what’s the best approach to detect that a template file is not used anymore in your PHP project?
Tag: oracle
MySQL 5.6 Developer Certification Beta Exam Review
Last friday, I did the MySQL 5.6 Developer Certification Beta Exam. This is the exam that Oracle is launching because of the new MySQL 5.6 Developer certification that will replace the old MySQL 5.0 certification in 2014. I don’t know if I’m certified yet because in beta, all candidate exams have to be reviewed in order to analyse how difficult it was, what questions were not appropriated, typos, etc.) before going live.
Tag: packagist
Working at the same time in a project and its dependencies: Composer and path type repository
With the Domain-Driven Design, Microservices and API explosion, I see more teams working in a base project, such as a Web, and integrating other private packages they develop in a different repository. For example, working on the Web and an API client for a external REST service at the same time.
For example, at @AtrapaloEng, our sales development team (checkout process, purchases, orders, payments, etc.) integrates different payment methods into the web so users, specially Latam ones, can be happier using their preferred payment methods. They create a repository for each of the new payment methods we support as a external package. Sometimes a developer in the team must work with different projects at the same time, the Web and the payment method in development.
In this scenario, one option is work on the payment package, tag, push, go to the base project and update dependencies with Composer. As you can see, it’s a bit slower, how we can improve this process? Composer to the rescue!
iPackagist, the Packagist Client for iPhone
Packagist is a Composer package repository. It aggregates all sorts of PHP packages that are installable with Composer. You can use Composer to manage your project or libraries’ dependencies. Read more at http://packagist.org</a>.
**
Tag: pair-programming
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Tag: pdca
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Tag: pear
Tag: performance
Saved 500 Kbytes of autoload classmap with autoload-dev at @AtrapaloEng
This week, at Atrápalo, we have reviewed our autoloading Composer configuration to use PSR-4 and split production classmap from development classmap to save some space in our Opcache. The result, 500 Kbytes less. Let’s see some details.
First tests with #PHP7 in production at @AtrapaloEng
On Monday, Badoo blogged about its migration to PHP7 (https://techblog.badoo.com/blog/2016/03/14/how-badoo-saved-one-million-dollars-switching-to-php7/</a>). Those are great results! At @AtrapaloEng, we’re running already tests in production to perform the same step. We could have started some months before, but we’ve been struggling with the php-msgpack extension and its (un)support for PHP7. We hope to deploy PHP7 in all our server during this week but we would like to share with you what we have seen so far. What we have done is adding another FPM node with the same capabilities as the current ones running in production with PHP 5.6. The new node is getting the same amount of traffic as the other ones. No special configurations or tweaks such as Huge Pages, just PHP7 upgrade. Data after more than 24 hours running.
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Tag: personal
AlterEgo, el juego de Desarrollo Personal para iPhone
AlterEgo es un excitante juego de autoconocimiento. Enfréntate a tí mismo en partidas de 10 retos (de los 60 disponibles) que te harán avanzar en conocerte y vivir más equilibrado tanto con tu familia, amigos y pareja. Cada reto representa un ejercicio, tarea o reflexión en la que tendrás que trabajar. Quizás necesites varios días para superar un reto pero no te rindas. Para más información, visita la Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_personal)
Tag: php
Consultoría en Opositatest: Monolito o Microservicios
El pasado Marzo, Christian Soronellas y yo estuvimos en A Coruña ayudando al equipo de Opositatest con algunos de sus retos. Me gustaría compartir con vosotros cómo ha sido el proceso de principio (contacto, precio, preparación, contenido y seguimiento) así como daros a conocer Opositatest. Si estáis buscando un equipo con retos interesantes, vivís por A Coruña o podéis trabajar en remoto, vale la pena que habléis con ellos. Podéis revisar la oferta aquí.
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #2 Self-Encapsulation (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar un ejemplo del concepto de “Self-Encapsulation” y la relación que guarda con las “Guard Clauses” que vimos en la Rigor Talk anterior. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #1 Guard Clause (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar lo que son las cláusulas de guarda y cómo ayudan a tener un código un poco más legible. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Some “basuritas”: PHP, list() and objects
See you at @dpcon 2016
Saved 500 Kbytes of autoload classmap with autoload-dev at @AtrapaloEng
This week, at Atrápalo, we have reviewed our autoloading Composer configuration to use PSR-4 and split production classmap from development classmap to save some space in our Opcache. The result, 500 Kbytes less. Let’s see some details.
First tests with #PHP7 in production at @AtrapaloEng
On Monday, Badoo blogged about its migration to PHP7 (https://techblog.badoo.com/blog/2016/03/14/how-badoo-saved-one-million-dollars-switching-to-php7/</a>). Those are great results! At @AtrapaloEng, we’re running already tests in production to perform the same step. We could have started some months before, but we’ve been struggling with the php-msgpack extension and its (un)support for PHP7. We hope to deploy PHP7 in all our server during this week but we would like to share with you what we have seen so far. What we have done is adding another FPM node with the same capabilities as the current ones running in production with PHP 5.6. The new node is getting the same amount of traffic as the other ones. No special configurations or tweaks such as Huge Pages, just PHP7 upgrade. Data after more than 24 hours running.
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Rendimiento con Domain Events, Proyecciones y principios de CQRS
Cuando desarrollamos una aplicación nueva, todo va muy rapidito. Hay poco tráfico, pocas queries y si hay alguna más “dura” usamos alguna cache como Memcached o Redis. Pero a medida que agregamos más funcionalidad a una página, el número de queries a base de datos u otras infraestructuras va creciendo. Hasta que sin saber cómo, haces 300 queries, y no es broma, en la ficha de algún producto.
El problema es que estamos acostumbrados a hacer muchas queries de lectura y muy pocas de escritura en estructuras bastante normalizadas. Eso escala mal en base a nueva funcionalidad. Un buen approach en busca del máximo rendimiento es la consistencia eventual, estructuras desnormalizadas y proyecciones.
Os dejo el video de la formación de @AtrapaloEng sobre cómo el uso de Eventos de Dominio y el uso de conceptos de CQRS nos pueden ayudar enormemente a mejorar el rendimiento de nuestras aplicaciones.
Setup your MacOS (or other OS) development team with Ansible
Imagine that a new developer joins your team, installing everything needed for developing, including the application being developed is not an easy o fast task. I’m sure you have a wiki process, a markdown file in your repo or something similar. For a normal PHP web application, there is so much to do: installing PHP, composer and global tools, npm and/or bower, mysql, redis, etc. or setting up you Docker/Vagrant environment if you choose an isolated environment.
I remember when GitHub released Boxen in 2012. A tool for managing Mac development boxes with love. It’s based in Puppet. The main idea is use Puppet for provisioning not remote machines or servers but you local Mac. Let’s see a silly idea about how to do it with Ansible.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Atrápalo Tech 2014 figures
It’s almost a year ago since I started working at Atrápalo. The team has done an amazing job learning and applying all the changes in our software development process including the new architecture, testing practices, Scrum changes, branching strategy, releasing process, bugfixing, and so much more. Changing the way ourselves work is probably the most difficult part from a “status quo” change.
I will like to thank everyone in the team that has done the effort to make it possible. I know it’s not easy and sometimes not fun at first. There is still so much to do and 2015 is going to be even so much funnier. Following, there are just some figures about 2014. Thanks to the Atrapalo Team.
Subscribe yourself to PHP internals
On January, 31st, I was in the Barcelona PHP Day. Albert Casademont (@acasademont) was giving his talk about PHP 7. He talked about features, benchmarks and internals. He said that he was subscribed to the PHP Internals mailing list and I thought that more developers should too. However, it’s not so easy to get there.
Domain-Driven Design: Code Structure and Application Services Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Code Structure and Application Services. Que la disfrutéis.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
“Hexagonal Architecture with PHP” was published in phparch|magazine
This week, the php|architect magazine has published an article of mine about “Hexagonal Architecture with PHP”. Here’s the introduction:
“With the rise of DDD (domain-driven development), architectures promoting domain-centric designs are becoming more popular. This is the case with Hexagonal Architecture, also known as Ports and Adapters, that seems to have been rediscovered recently by PHP developers. Invented in 2005 by Alistair Cockburn, one of the Agile Manifesto authors, the Hexagonal Architecture allows an application to be equally driven by users, programs, automated tests, or batch scripts, while being developed and tested in isolation from its eventual run-time devices and databases. This results in infrastructure-agnostic web applications that are easier to test, write, and maintain. Let’s see how to apply it using real PHP examples.”
I would like to share with you some thought, the cover and the code repository.
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Zend PHP 5.3 Demo Certification Test: More than 20.000 views!
During the PHP Barcelona Conference 2010, Enrico Zimuel and me prepared a presentation about a demo on the Zend PHP 5.3 Certification with the support of Zend Europe. Today, we are celebrating more than 20.000 views at Slideshare.net. Thanks to everyone!
iPackagist, the Packagist Client for iPhone
Packagist is a Composer package repository. It aggregates all sorts of PHP packages that are installable with Composer. You can use Composer to manage your project or libraries’ dependencies. Read more at http://packagist.org</a>.
**
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: php-cs-fixer
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Tag: php7
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
First tests with #PHP7 in production at @AtrapaloEng
On Monday, Badoo blogged about its migration to PHP7 (https://techblog.badoo.com/blog/2016/03/14/how-badoo-saved-one-million-dollars-switching-to-php7/</a>). Those are great results! At @AtrapaloEng, we’re running already tests in production to perform the same step. We could have started some months before, but we’ve been struggling with the php-msgpack extension and its (un)support for PHP7. We hope to deploy PHP7 in all our server during this week but we would like to share with you what we have seen so far. What we have done is adding another FPM node with the same capabilities as the current ones running in production with PHP 5.6. The new node is getting the same amount of traffic as the other ones. No special configurations or tweaks such as Huge Pages, just PHP7 upgrade. Data after more than 24 hours running.
Tag: phparch
“Hexagonal Architecture with PHP” was published in phparch|magazine
This week, the php|architect magazine has published an article of mine about “Hexagonal Architecture with PHP”. Here’s the introduction:
“With the rise of DDD (domain-driven development), architectures promoting domain-centric designs are becoming more popular. This is the case with Hexagonal Architecture, also known as Ports and Adapters, that seems to have been rediscovered recently by PHP developers. Invented in 2005 by Alistair Cockburn, one of the Agile Manifesto authors, the Hexagonal Architecture allows an application to be equally driven by users, programs, automated tests, or batch scripts, while being developed and tested in isolation from its eventual run-time devices and databases. This results in infrastructure-agnostic web applications that are easier to test, write, and maintain. Let’s see how to apply it using real PHP examples.”
I would like to share with you some thought, the cover and the code repository.
Tag: phpcpd
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: phpcs
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: phploc
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: phpmd
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: phpspec
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Tag: phptherightway
Por dónde empiezo: 7 ideas para ponerme al día
Estos días he estado haciendo entrevistas a muchos perfiles. Por si no lo sabéis, en Atrapalo, tenemos unas 15 posiciones abiertas para incorporar desarrolladores PHP de todos los perfiles, juniors y seniors con muchas ganas de pasárselo bien, aprender y aportar a un equipo que encara una nueva etapa excitante. Durante estas entrevistas, me he encontrado con desarrolladores cuyas circunstancias les han llevado a trabajar sólo en start-ups (“don’t worry be crappy”) o pequeñas empresas (“long live wordpress, drupal y joomla”), este post, con todo el cariño, es para ellos y su futuro.
Tag: phpunit
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #11 – Immutability (Spanish)
Hola Amigos del Rigor! Continuamos con un video sobre inmutabilidad. Vamos a ver cómo poder hacer que nuestras clases, especialmente aquellas con las que modelamos Value Objects pueden ser inmutables.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Some “basuritas”: PHP, list() and objects
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Tag: planning
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Tag: port-forwarding
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
Tag: pragmatismo
No necesitáis consultoría sobre DDD: Caso Motor de Reservas
Cuando una empresa me contacta para hacer consultoría, monto un Skype para entender mejor las necesidades y la situación en la que se encuentra. Normalmente, hablo con un par de técnicos y/o el CTO que me cuentan sus dificultades. Tengo varias de éstas al mes. Algunas son empresas grandes (50 developers o más) y más pequeñas (menos de 10 developers). Como no me gano la vida haciendo consultoría, soy muy imparcial con lo que necesitan y sobretodo con lo que no necesitan. En sus dificultades, algunos patrones se repiten (miedos, prejuicios, presiones, modas, etc.). Me gustaría resumir cómo fue una de esas video conferencias por si podéis estar en la misma situación.
Tag: precommit
Write your git hooks in PHP and keep them under git control
Last month, in the PHP Barcelona Monthly Talk, I was talking with some mates about the GitHub migration we have recently done at Atrápalo. They were interested in branches, deployments, code reviews and so on. However, they were specially surprised about who we are dealing with pre-commit hooks at Atrápalo. Let’s see if there’s more people out there interested in the subject.
Tag: primer-factor
Kata: Prime Factors
Context
Although quite short, this kata is fascinating in the way it shows how “if” statements become “while” statements as the number of test cases increase. It’s also a wonderful example of how algorithms sometimes become simpler as they become more general.
Level
Easy / 40 minutes
Tag: process-manager
Gracias, PulpoCon 2019: Eventos, Mensajería y otras fábulas
Tag: product-backlog
Make your product owner or CEO watch this video
Tag: product-owner
Make your product owner or CEO watch this video
Tag: product-ownership
Make your product owner or CEO watch this video
Tag: production
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
Tag: project-management
Tag: prophecy
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Tag: provision
GitHub + Ansible: deploy your public SSH keys to your servers
When I work with some mates in a side project, I need to give them access to the server. This is a quick tip about how to easily do it using GitHub and Ansible. The solution is simple and elegant.
Tag: queue
Rigor Talks – PHP – #27 – Distributing Domain Events using RabbitMQ (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este sexto video de la serie, vamos a distribuir los eventos, que tenemos persistidos en base de datos, hacia un sistema de colas como RabbitMQ. Veremos algunas consideraciones y trucos a tener en cuenta.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: rabbitmq
Rigor Talks – PHP – #27 – Distributing Domain Events using RabbitMQ (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este sexto video de la serie, vamos a distribuir los eventos, que tenemos persistidos en base de datos, hacia un sistema de colas como RabbitMQ. Veremos algunas consideraciones y trucos a tener en cuenta.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Tag: raspberry
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: rasperry-pi
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: realtime
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #28 – Sending Domain Events to Elastic (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver una de las alternativas para hacer esto, el envío síncrono a Elastic por cada eventos disparado.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: refactoring
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #20 – Application Services and Command Handlers (Spanish)
Hola Amigos del Rigor! Vamos con una entrega más. En esta ocasión, vamos a ver la diferencia entre Application Services y Command Handlers, así como algún truco sobre Command Handlers para decorarlos y facilitar tareas como el Logging o la gestión de Transacciones.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #19 – Refactor Use Case VI (Spanish)
Hola Amigos del Rigor! Después de explicar el principio de Tell-Don’t-Ask, continuamos con la serie de los videos de refactoring. En este video, vamos a ver cómo extraer dependencias como Loggers, Servicios para enviar notificaciones o similares usando una primera aproximación sencilla con un EventDispatcher.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #2 Self-Encapsulation (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar un ejemplo del concepto de “Self-Encapsulation” y la relación que guarda con las “Guard Clauses” que vimos en la Rigor Talk anterior. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #1 Guard Clause (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar lo que son las cláusulas de guarda y cómo ayudan a tener un código un poco más legible. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Tag: remote-machines
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: reporting
Rigor Talks – PHP – #31 – Viewing Domain Events with Kibana (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a configurar Kibana para montar gráficos y ver la información de los eventos que hemos enviado a Elastic de una forma que negocio flipe :)
Rigor Talks – PHP – #30 – Sending Domain Events to Elastic III (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación.
En este vídeo, vamos a ver la cómo enriquecer el evento de dominio antes de enviarlo a Elastic. Agregaremos información sobre la request, memoria, etc. para traquear si algún servidor está procesando menos eventos de un cierto tipo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #29 – Sending Domain Events to Elastic II (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver la segunda alternativa para enviar todos los eventos juntos de una vez, después de ejecutar el command handler. Reducimos números de peticiones mejorando el rendimiento.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #28 – Sending Domain Events to Elastic (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events pero esta vez con un caso práctico de uso muy interesante para marcarse un tanto con negocio. Vamos a enviar los eventos de dominio contra un Elastic para que podamos finalmente agregar un Kibana y tener métricas en tiempo real de lo que ocurre en nuestra aplicación. En este vídeo, vamos a ver una de las alternativas para hacer esto, el envío síncrono a Elastic por cada eventos disparado.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: repositories
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: repository
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #17 – Refactor Use Case V (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. Los Application Services deben coordinar pero no contener lógica de negocio. En este video, veremos varios trucos para mover la lógica de negocio del Application Service hacia Entidades y Repositorios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Firing Domain Events in the __constructor
After my post about “Good ORMs do not call __construct a.k.a. where to fire my Domain Events”, nice discussions (and trolling) are happening in the Barcelona Engineering Slack Channel. Thanks to everyone for the feedback, ideas and concerns. You are more than welcome! The main concerns are:
- How do I fetch an Entity from ElasticSearch, using new and without firing the Event?
- How do I create stubs on the Entity that is firing the Domain Event?
- What are pros and cons of firing the Domain Event in the __constructor or in the named constructor?
So, I’ll take the original code as a starting point, and I’ll suggest different strategies to answer those questions.
Tag: rest
Rigor Talks – PHP – #26 – Distributing Domain Events using REST (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este quinto video de la serie, vamos a empezar a discutir manera de distribuir los eventos. El primer método es quizá menos conocido, REST. Veremos qué beneficios tiene y algunos trucos para implementarlo.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Domain-Driven Design: Bounded Context Integration (Spanish)
Os dejo el video de la charla que impartí el pasado 25 de Octubre de 2014 en la Barcelona Software Craftsmanship.
Tag: retro
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Tag: return
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Tag: rewriting-history
Fixing commit TYPOs in git history with filter-branch
Last week, we tried at Atrapalo to migrate from our own git repository to Github. That should be easy, is just a matter of three commands already explained in Github’s guide. The main problem appears when you have some sort of issue with your commits, so messages like “invalid author email” raises when trying to push your changes.
Tag: rigor-talks
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #2 Self-Encapsulation (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar un ejemplo del concepto de “Self-Encapsulation” y la relación que guarda con las “Guard Clauses” que vimos en la Rigor Talk anterior. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #1 Guard Clause (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar lo que son las cláusulas de guarda y cómo ayudan a tener un código un poco más legible. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: rob-jeffries
Thanks Ron Jeffries – “Extreme Programming Installed” Book Review
I though that it was difficult to read a better book about XP than “Extreme Programming Explained” by Kent Beck. Then, “Extreme Programming Installed” by Ron Jeffries came to me. Last week, I finished it. Ron goes into the detail about the how-to in each XP detail. So, if you want to start with XP, read the explain one, but if you need to go deeper, the installed one is your book.
Tag: robert-c-martin
Los 331€ mejor invertidos – CleanCoders Videos
Hoy, después de un fin de semana de maratón de los últimos 3 capítulos sobre TDD de CleanCoders, de Robert C. Martin (@unclebobmartin), he acabado de verme todos los 21 capítulos. Empecé hace un mes y medio, he intentado ver cada día uno antes de salir del trabajo y también los fines de semana.
¿Cuál es el verdadero objetivo de TDD?
A todos aquellos que habéis pensado: “¡Demostrar que mi código funciona!”, lo siento, estáis equivocados. Aunque está asociado al 2º valor principal del desarrollo de software (según Robert C. Martin).
Robert C. Martin Clean Code Collection Review (Part II)
Hace una semana, publicaba un pequeño resumen y mis apuntes sobre el libro “Clean Coder” de Robert C. Martin (ver parte I). Hoy hago lo propio con el resumen del libro de la misma colección, “Clean Code”.
Os dejo cosas que subrayé y anoté del libro que me parecieron interesantes, espero que lo disfrutéis.
Robert C. Martin Clean Code Collection Review (Part I)
Me gustaría compartir la review de otro libro que ha caído esta semana. En realidad, son es una colección de 2 libros de Robert C. Martin que te puedes comprar en formato Kindle por 15,99 € (dos libros de Robert C. Martin por ese precio ya vale la pena), el pack lo podéis encontrar en amazon. En este post (de una serie de dos) os quiero hablar de “The Clean Coder”.
Tag: rollback
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Tag: ror
Hi @xing_bcn and @xing_de!
After leaving Atrápalo, it’s time to jump to a new challenge. As I explained, I need to get out of my confort zone and check other things that will make me learn new things. Some of you already know, but for the rest, the chosen company is Xing. So, I’m more than happy to announce that I’m the next B2B Head of Engineering at @xing. I’d like to share some thoughts about the reasons that took me here.
Tag: router
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Tag: ruby
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
Tag: ruby-on-rails
Hi @xing_bcn and @xing_de!
After leaving Atrápalo, it’s time to jump to a new challenge. As I explained, I need to get out of my confort zone and check other things that will make me learn new things. Some of you already know, but for the rest, the chosen company is Xing. So, I’m more than happy to announce that I’m the next B2B Head of Engineering at @xing. I’d like to share some thoughts about the reasons that took me here.
Tag: sagas
Gracias, PulpoCon 2019: Eventos, Mensajería y otras fábulas
Tag: scrum
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Detalles sobre Scrum: ¿Cómo atacar el sprint?
Os presento un pequeño ejercicio que llevo utilizando un mes y que me está dando buenos resultados a la hora de ilustrar la importancia de cómo atacar el sprint y la obsesión por entregar valor lo antes posible.
“Es lunes, perteneces a un equipo de Scrum de 6 personas. Habéis acabado el planning meeting y habéis enviado un mail con el commitment. Montáis la ScrumBoard y os queda de la siguiente manera”.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Make your product owner or CEO watch this video
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Introducción a Scrum y Agile
Hoy, me gustaría rescatar una presentación sobre Scrum y Agile que hice en la BetaBeers Barcelona. Una hora de Scrum en vena con dinámicas prácticas, overview de toda la metodología, ejemplos, etc. ¡Espero que la disfrutéis!
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: scrum-board
Deliveritis Aguda - CTO Summit Valencia 2019
El pasado 4 de Julio, asistí como ponente al 1er CTO Summit en Valencia (https://ctosummit.geekshubs.com/) organizado por Chaume y el equipo de Geekshubs (https://geekshubs.com/).
Como CTOs, nos perdemos en las dinámicas, métodos y hypes olvidando cuál es nuestro verdadero objetivo (ganar $$$) y cómo conseguirlo (delivery de rápido, regular y de calidad a producción).
En esta presentación, repasaremos algunos de los trucos y observaciones resultantes de mi experiencia como consultor y CTO de algunas empresas .com para encaminar al equipo hacia esa obsesión de entregar valor lo antes y lo más rápido posible. Que la disfrutéis!
Aquí os dejo la charla en video, las slides y una entrevista que me hicieron después.
Tag: security
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
Tag: self-encapsulation
Rigor Talks – PHP – #2 Self-Encapsulation (Spanish)
Hola Amigos del Rigor! En este video voy a enseñar un ejemplo del concepto de “Self-Encapsulation” y la relación que guarda con las “Guard Clauses” que vimos en la Rigor Talk anterior. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: self-shunt
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: semantic-constructor
Rigor Talks – PHP – #6 – Named Constructors IV (Spanish)
Hola Amigos del Rigor! Acabamos con la serie sobre “Named Constructors” con el último video de los cuatro. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #5 – Named Constructors III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el tercer de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #4 – Named Constructors II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre “Named Constructors” con el segundo de los cuatro videos. He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #3 – Named Constructors I (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre “Named Constructors”. También conocidos como “Semantic Constructors” o “Constructor Methods”. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: sequences
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Tag: shu-ha-ri
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Tag: silex
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
RESTGames – More than katas
Today, Christian (@theUniC) and I (@buenosvinos) would like to introduce you “REST Games“: Games based in REST Services for learning and practicing coding.
Its goal is to provide some coding challenges that go beyond katas. You will have to implement a small JSON REST API that will play a well known multiplayer game, such as battleship, connect-4, tic-tac-toe, etc. The best part comes when two mates develop the same JSON REST API and you can use our referees programs two make them play one against the other. Who will win?
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Domain-Driven Design: Domain Events and BC Integration Webcast at @AtrapaloEng (Spanish)
Siguiendo con la formación de DDD en Atrápalo, os dejo la sesión de formación sobre Domain Events y BC Integration. Que la disfrutéis.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: simplify
Tag: smashtech
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Tag: software
Bibliografía y recursos para meterse en el movimiento SoftwareCraftsmanship
Durante este último fin de semana, se ha organizado la Barcelona Software Craftsmanship (28 y 29 de Septiembre). Ha estado muy bien y recomiendo que estéis atentos a los eventos que va a ir organizado esta asociación. Les deseo los mejores éxitos.
Es posible que todavía no os suene el movimiento o no hayáis tenido tiempo de profundizar, así que os intento arrojar un poco de luz y pasar material para que os podáis poner rápidamente al día. Por favor, completar las listas con vuestros comentarios (he intentado añadir lo básico pero me dejo mucho material).
Tag: software-design
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: software-development-cost
¿Cuál es el verdadero objetivo de TDD?
A todos aquellos que habéis pensado: “¡Demostrar que mi código funciona!”, lo siento, estáis equivocados. Aunque está asociado al 2º valor principal del desarrollo de software (según Robert C. Martin).
Tag: softwarecraftsmanship
Los 331€ mejor invertidos – CleanCoders Videos
Hoy, después de un fin de semana de maratón de los últimos 3 capítulos sobre TDD de CleanCoders, de Robert C. Martin (@unclebobmartin), he acabado de verme todos los 21 capítulos. Empecé hace un mes y medio, he intentado ver cada día uno antes de salir del trabajo y también los fines de semana.
Tag: solid
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tag: sprint
Detalles sobre Scrum: ¿Cómo atacar el sprint?
Os presento un pequeño ejercicio que llevo utilizando un mes y que me está dando buenos resultados a la hora de ilustrar la importancia de cómo atacar el sprint y la obsesión por entregar valor lo antes posible.
“Es lunes, perteneces a un equipo de Scrum de 6 personas. Habéis acabado el planning meeting y habéis enviado un mail con el commitment. Montáis la ScrumBoard y os queda de la siguiente manera”.
Tag: spy
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: srp
Domain-Driven Design: Logging with Domain Events Webcast at @AtrapaloEng (Spanish)
Cuando trabajamos con aplicaciones DDD-style (aunque para las otras también aplica), una de las preguntas clásicas es como ejecutar tareas relacionadas con infraestructura desde las zonas más internas como Value Object o Entidades, sin violar la dependencias hacia capas superiores e incluso el SRP. Un ejemplo es logar información como acciones de usuario (tipo intento de acceso al sistema, alta de usuario, baja de usuario, etc.). El pasado Viernes, orientamos la formación de @AtrapaloEng sobre este tema. Os dejo el video y los ejercicios. Formación práctica basada en el proyecto de LastWishes con múltiples ejercicios resueltos in live coding.
Domain-Driven Design: Aggregates Webcast at @AtrapaloEng (Spanish)
En Atrápalo, estamos haciendo formación semanal sobre DDD. Estoy grabando todos los screencast y los iré publicando semana a semana. El primero sobre Strategical no lo pudimos grabar pero gran parte del contenido lo podéis encontrar en la sesión que grabé en la Monthly Talk en Octubre de 2014. A continuación, os dejo la sesión de formación sobre Aggregates, al final hay discusión sobre SOLID, especialmente SRP. Que la disfrutéis.
Tag: ssh
Accessing securely production services with SSH port forwarding
We’ve already talked about how to deploy your public SSH keys into your server using Ansible and GitHub. This time, I just want to share a simple approach to have access to your production services (MySQL, Elastic, RabbitMQ, etc.) without exposing publicly your services. You have different alternatives, probably the most common are using a VPN or use SSH port forwarding. Let’s see an example of the last one.
Tag: ssh-copy-id
3 commands for working with remote machines
These days I’m playing a bit with 5 Raspberries 2B (4 cores and 1 GB of RAM) in order to build a Docker cluster. There are different options: Docker Swarm over Consul/Etcd/Zookeper, Kubernetes by Google, etc. I just want to share some interesting commands for working with remote machines that have helped me to build such a cluster: ssh-copy-id, nmap and csshx.
Tag: ssh-key
GitHub + Ansible: deploy your public SSH keys to your servers
When I work with some mates in a side project, I need to give them access to the server. This is a quick tip about how to easily do it using GitHub and Ansible. The solution is simple and elegant.
Tag: stack
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Tag: stackphp
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Tag: stand-up
“Scrum, no eres tú, soy yo”: Charla en la #geekdeveloperday organizada por @geekhubs
El pasado 2 de Noviembre estuve en Madrid. GeeksHubs Academy organizaba el II Geek Developer Day y me invitaron a dar una charla sobre Scrum y la manera de mejorar la implementación en las empresas. Aquí os dejo el video y las slides.
Tag: stub
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: style
Code Style: If and return
When contributing to opensource code at GitHub, I found some mistakes, or improvements when writing code, that are repetead over and over again for newbies and not so newbies developers. I’ll try to write some posts about this, but for not, let’s start with some “if” and “return” statements cases.
Tag: svn
Guía para el desarrollo PHP Profesional
Os dejo un material de hace un tiempo (16 de mayo de 2011) pero todavía bastante válido.
Como me gusta decir, PHP es fácil de aprender y difícil de dominar. Es una de las opciones más rápidas y efectivas para la creación y mantenimiento de aplicaciones web de todo tipo. Su simplicidad es la ventaja tecnológica #1 que tiene sobre sus principales competidores aunque no implica que su uso sea sólo orientado al desarrollo de aplicaciones simples. Con PHP podemos crear sistemas avanzados y potencialmente muy complejos. Para poder garantizar la escalabilidad de estos últimos necesitamos un ciclo de desarrollo y un equipo técnico alineado para hacer más con menos. En esta ponencia, vamos a repasar las características principales de PHP y cómo mejorar nuestro ciclo de desarrollo a través de herramientas y buenas prácticas.
Tag: symfony
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Deploying Symfony (and PHP) apps with Ansistrano
For a long time, Capifony was, without any doubt, the facto option for deploying Symfony2 applications. Capifony is a ruby gem based in Capistrano v2, an open source tool for running scripts on multiple servers with a deployment flow built-in. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications. At that time, alternatives were shell scripting or Fabric. Now there’s a better one, Ansistrano.
Migrating progressively to Symfony without pain with StackPHP
In the previous post, I talked about how to migrated to Symfony without pain using Apache Dumper. The idea was to generate Symfony routes in an Apache configuration file or .htaccess so it can be included in your virtual host. By including a fallback route to your current framework entry point, you can create new routes in Symfony without touching your previous framework. You can develop normally your new Symfony app, just defining new routes or the same old ones and regenerating the routes file.
This approach has some small pitfalls. Each time a new Symfony route is created, the Apache configuration file with the routes must be regenerated. If you’re creating many routes, this can be annoying. As explained in the previous post, there is another option that fixes this issue and have more features, Stack. Now, it’s like in Atrápalo, let’s see how it’s working.
Migrating progressively to Symfony without pain
Atrápalo is a travel e-commerce website founded in 2000. Based in Barcelona, Spain, it sells flights, trips, tickets, booking restaurants, car renting, etc. to 10 different countries. It’s a 9000 world Alexa ranking and it’s running PHP. Since 2014, we are pushing hard in order to evolve technically using best practices, agile methodologies and distributed architectures. One of the key aspects is the framework.
We are currently migrating to Symfony in order to speed up the development process and reduce the maintenance costs. We are doing it progressively, step by step, without rewriting the whole application, no green-field project, without any dedicated team neither. All developers are involved in this process, and by policy, each new feature is developed using Symfony while the old features remain served by the old framework.
I would say this process is going quite smoothly, without pain. Based on some emails and tweets I have received, here are some tricks about how we are doing it. Hope it helps!
Remove non used PHP files in your project
When a project gets bigger, specially when using a framework, it’s mandatory to have some processes that help you in removing code that is not used anymore such as models, classes, template files, etc.
That is not an easy task, however the benefits or removing non used coded are tons (code coverage, development speed, bugs, etc.). But what’s the best approach to detect that a template file is not used anymore in your PHP project?
Tag: tactician
Rigor Talks – PHP – #21 – Command Bus (Spanish)
Hola Amigos del Rigor! Perdonad por el retraso pero estuve preparando la certificación de AWS Certified Solutions Architect – Associate que al final conseguí la semana pasada.
En este video, vamos a continuar evolucionando los Command Handlers y su contexto de ejecución presentando el Command Bus. Veremos cuáles son sus objetivos y para qué nos resulta útil. Por último, hablaremos sobre Tactician.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: tdd
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Guía para el Desarrollo Profesional PHP (edición 2014)
Rascando por Youtube, encontré este vídeo de 2014, de una presentación que hice en LaSalle inspirada por otra que hice en Castellón en 2011. La idea es hacer un overview del ecosistema PHP y puntos importantes a la hora de montar un ciclo de desarrollo basado en esta tecnología. Que la disfrutéis.
Economía del Desarrollo de Software – PHP Barcelona – Marzo 2015
Aquí os dejo las slides y el video de mi charla sobre “Economía del Desarrollo de Software” impartida en la Barcelona PHP Monthly Talk de Marzo y en la SmashTech “I’m a Developer”.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Unit Testing y TDD no son lo mismo
Resumiendo y sin entrar en volver a explicar los conceptos de TDD. Hacer Unit Testing es escribir Unit Tests, hacer TDD es seguir la metodología (3 reglas, ciclos cortos, diseño emergente, etc.)
kata/php: PHP skeleton for doing coding katas
Something a bit annoying when doing a kata is setting up the environment so you can start. Typically, you need composer, define dependencies, setting up the autoloading policy, creating some folders and so on. All this work is not necessary anymore. I have created a silly but useful project in packagist in order to start with your kata in just one command.
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) Review
Happy new year to everyone! Today it’s January, 1st and I have finished reading “Extreme Programming Explained: Embrace Change, 2nd Edition”. If you love software development and agile practices, this book was the rules changer in the agile methodologies and software development in general. As I have done with other book reviews, here are my remarks. Buy it, seriously. You will fill the gaps about agile practices, so if you are doing Xp, Scrum, Kanban, Lean, etc. everything will gear together.
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
PHP Trait testing
I’d like to know how you test your traits and what’s your favourite way to do it. I have found two different approaches that I want to share with you. Please comment if you apply different techniques or have different opinions.
Courage on TDD (“Test Driven Development: By Example” – Part II)
La segunda parte del prólogo de “Test Driven Development: By Example” es casi aún mejor (podéis ver la primera parte aquí). 34$ bien invertidos.
Test Driven Development: By Example
Siguiendo con mi andadura de lecturas técnicas, esta semanas voy a estar con “Test Driven Development: By Example”. El enfoque del libro es totalmente práctico pero el prólogo me ha parecido tan simple, claro y delicioso que no he podido hacer otra cosa que compartirlo con vosotros para que os animéis con TDD y a la lectura de este fantástico libro.
¿Cuál es el verdadero objetivo de TDD?
A todos aquellos que habéis pensado: “¡Demostrar que mi código funciona!”, lo siento, estáis equivocados. Aunque está asociado al 2º valor principal del desarrollo de software (según Robert C. Martin).
Kata: Bowling Game
Kata: Prime Factors
Context
Although quite short, this kata is fascinating in the way it shows how “if” statements become “while” statements as the number of test cases increase. It’s also a wonderful example of how algorithms sometimes become simpler as they become more general.
Level
Easy / 40 minutes
Robert C. Martin Clean Code Collection Review (Part II)
Hace una semana, publicaba un pequeño resumen y mis apuntes sobre el libro “Clean Coder” de Robert C. Martin (ver parte I). Hoy hago lo propio con el resumen del libro de la misma colección, “Clean Code”.
Os dejo cosas que subrayé y anoté del libro que me parecieron interesantes, espero que lo disfrutéis.
Tag: team
Tech Team Engagement
Me gustaría compartir con vosotros una de mis antiguas presentaciones sobre motivación de equipos técnicos que pude dar en la PHP Barcelona Conference hace algunos años. Me gusta ver que muchos conceptos todavía son vigentes. Si tenéis alguna duda sobre ella no dudéis en enviarme un tweet.
Tag: tech
Tech Team Engagement
Me gustaría compartir con vosotros una de mis antiguas presentaciones sobre motivación de equipos técnicos que pude dar en la PHP Barcelona Conference hace algunos años. Me gusta ver que muchos conceptos todavía son vigentes. Si tenéis alguna duda sobre ella no dudéis en enviarme un tweet.
Tag: tech-lead
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Tag: technical-committee
Legacy Code and Teams Series: Training Sessions and Technical Committee
(Next: Legacy Code and Teams Series: Composer)
When talking with some friends about how we are improving Atrápalo legacy code and development process, they asked for creating a presentation and give a talk about the steps we are following, hows, whys, and so on. It sound to me interesting so I would like to help sharing my experiences, not just the Atrápalo ones because when working at Emagister we did something quite similar with Christian, Eber, Dario, Lluís, Jordi, Jose Luís and the rest of the team with great results.
Before jumping into a talk, I would like to start a serie of posts about my way dealing with legacy projects. I’m really interested in listening from you and your comments in order to enrich the final result. So, any suggestion or experience is really welcomed.
Tag: tell-dont-ask
Rigor Talks – PHP – #18 – Tell-Don’t-Ask (Spanish)
Hola Amigos del Rigor! Hacemos un parada en la serie de los videos sobre refactoring para explicar el principio de Tell-Don’t-Ask. Lo hemos ido utilizando en los videos anteriores pero no lo había presentado formalmente.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: test-class
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: test-doubles
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Test Doubles
Last week, another awesome cleancoders episode was published. It comes in two parts. I really recommend to buy it. Let’s review the most important concept taught in the first one: Test Doubles.
Tag: testing
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
PHP Trait testing
I’d like to know how you test your traits and what’s your favourite way to do it. I have found two different approaches that I want to share with you. Please comment if you apply different techniques or have different opinions.
Tag: the-scrum-field-guide
Tag: titanium
Adding a custom font on a titanium window title
If you are working with Titanium and you need to customize the font you are using as a title in a window, there is no predefined solution to do this, but there is a trick, the “titleControl” window property with a label control.
Introducción a Appcelerator Titanium
Uno de los productos que está funcionando mejor para el desarrollo de aplicaciones nativas para móviles utilizando Javascript es Titanium Appcelerator. Aprovecho para colgar una de las presentaciones al respecto que hice en la BetaBeers de Barcelona.
Tag: training
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
“Implementing Domain-Driven Design” Workshop in Barcelona
Since 2012 and after two years reading and working with Domain-Driven Design approaches, in 2014, Christian (@theUniC) and me went to Berlin to get trained by Vaughn Vernon, author of “Implementing Domain-Driven Design” book. The training was fantastic, all the concepts that were going around on their minds up to that moment, got stuck into the ground in the 3 days IDDD workshop. However, they were the only two PHP developers there in a room full of Java and .NET. That was quite funny.
Tag: training-sessions
Legacy Code and Teams Series: Training Sessions and Technical Committee
(Next: Legacy Code and Teams Series: Composer)
When talking with some friends about how we are improving Atrápalo legacy code and development process, they asked for creating a presentation and give a talk about the steps we are following, hows, whys, and so on. It sound to me interesting so I would like to help sharing my experiences, not just the Atrápalo ones because when working at Emagister we did something quite similar with Christian, Eber, Dario, Lluís, Jordi, Jose Luís and the rest of the team with great results.
Before jumping into a talk, I would like to start a serie of posts about my way dealing with legacy projects. I’m really interested in listening from you and your comments in order to enrich the final result. So, any suggestion or experience is really welcomed.
Tag: trait
PHP Trait testing
I’d like to know how you test your traits and what’s your favourite way to do it. I have found two different approaches that I want to share with you. Please comment if you apply different techniques or have different opinions.
Tag: transaction
Rigor Talks – PHP – #25 – Persisting Domain Events (Spanish)
Hola Amigos del Rigor! Continuamos con la serie sobre Domain Events. En este cuarto video, vamos a ver cómo implementar la persistencia de Eventos de Dominio, para qué es útil y cuáles son sus beneficios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Si los videos os gustan, no olvidéis suscribiros a mi canal. Espero que os guste!
#MayTheRigorBeWithYou
Tag: translation
Domain-Driven Design Destilado
Tag: typo-commits
Fixing commit TYPOs in git history with filter-branch
Last week, we tried at Atrapalo to migrate from our own git repository to Github. That should be easy, is just a matter of three commands already explained in Github’s guide. The main problem appears when you have some sort of issue with your commits, so messages like “invalid author email” raises when trying to push your changes.
Tag: unclebob
Los 331€ mejor invertidos – CleanCoders Videos
Hoy, después de un fin de semana de maratón de los últimos 3 capítulos sobre TDD de CleanCoders, de Robert C. Martin (@unclebobmartin), he acabado de verme todos los 21 capítulos. Empecé hace un mes y medio, he intentado ver cada día uno antes de salir del trabajo y también los fines de semana.
Tag: unit-testing
No necesitáis consultoría sobre DDD: Caso Motor de Reservas
Cuando una empresa me contacta para hacer consultoría, monto un Skype para entender mejor las necesidades y la situación en la que se encuentra. Normalmente, hablo con un par de técnicos y/o el CTO que me cuentan sus dificultades. Tengo varias de éstas al mes. Algunas son empresas grandes (50 developers o más) y más pequeñas (menos de 10 developers). Como no me gano la vida haciendo consultoría, soy muy imparcial con lo que necesitan y sobretodo con lo que no necesitan. En sus dificultades, algunos patrones se repiten (miedos, prejuicios, presiones, modas, etc.). Me gustaría resumir cómo fue una de esas video conferencias por si podéis estar en la misma situación.
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #12 – Mutant Testing (Spanish)
Hola Amigos del Rigor! Unit Testear nuestro código con un 100% de coverage no es suficiente. En este video, vamos a ver cómo aplicar “Mutant Testing” a nuestro código para mejorar la calidad de nuestros tests unitarios.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #11 – Immutability (Spanish)
Hola Amigos del Rigor! Continuamos con un video sobre inmutabilidad. Vamos a ver cómo poder hacer que nuestras clases, especialmente aquellas con las que modelamos Value Objects pueden ser inmutables.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #10 – Self-Shunt III (Spanish)
Hola Amigos del Rigor! Vamos a con el último de los tres videos sobre el patrón de testing “Self-Shunt”. En este video, veremos un truco muy sencillo para poder testear cadenas de invocaciones que incumplen la ley de Demeter.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #9 – Self-Shunt II (Spanish)
Hola Amigos del Rigor! Vamos a con el tercer de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos una implementación alternativa del “Self-Shunt” sólo para PHP7 usando clases anónimas.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #8 – Self-Shunt (Spanish)
Hola Amigos del Rigor! Vamos a con el segundo de los cuatro videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. En este video, veremos un atajo para implementar “Test Classes” usando un patrón conocido como “Self-Shunt”.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #7 – Test Class (Spanish)
Hola Amigos del Rigor! Vamos a arrancar un serie de 4 videos sobre patrones de “Unit Testing”, especialmente, para código acoplado. Aquí os dejo el primero.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Integración Continua y Deployment Continuo
Os dejo por aquí, una de mis charlas impartida en la asignatura “Técnicas para el desarrollo de software en producción” dentro del Máster en Tecnologías Informáticas de la Universidad de La Rioja. Se grabó hace un año (26/11/2015), pero no lo había encontrado hasta hace unas semanas. Espero que sea útil.
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
Unit Testing y TDD no son lo mismo
Resumiendo y sin entrar en volver a explicar los conceptos de TDD. Hacer Unit Testing es escribir Unit Tests, hacer TDD es seguir la metodología (3 reglas, ciclos cortos, diseño emergente, etc.)
Tag: use-case
Rigor Talks – PHP – #16 – Refactor Use Case IV (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a mejorar la calidad de los tests unitarios acabando de agregar assests que faltaban e introduciendo un Spy. Con esto, nos aseguraremos que aún teniendo 100% de cobertura en los tests, tenemos que esta atentos a invocaciones que no tienen retorno, como logging, notifiers, publishers de eventos, etc.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #15 – Refactor Use Case III (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a acabar de testear por completo todo el Application Service del video anterior utilizando técnicas que vimos en los videos anteriores como Test Classes o Self-Shunt. En el siguiente video veremos cómo enriquecer nuestro dominio moviendo parte de la lógica a las entidades.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #14 – Refactor Use Case II (Spanish)
Hola Amigos del Rigor! Seguimos con la serie sobre los videos de refactoring. En éste, vamos a testear parte del Application Service que extrajimos en el video anterior. Aprovecharemos para mejorar el código con algunos casos no contemplados en el código original.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Rigor Talks – PHP – #13 – Refactor Use Case I (Spanish)
Hola Amigos del Rigor! Hoy es mi cumpleaños, 34 primaveras. He traído donuts a la oficina, pero como no podéis acceder a ellos :(, aquí os dejo un regalito para vosotros! Arranco una nueva serie de videos sobre Refactoring de código acoplado. En este video, vamos a ver cómo refactorizar código escrito directamente en el controlador web de cualquier framework donde se mezcla lógica de negocio y detalles de infraestructura.
Lo sacaremos a un Application Service, invertiremos todas las dependencias y lo dejaremos listo para poderlo testear.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: uuid
Consulta sobre DDD #1: Pregunta sobre las entidades en DDD (Identidad y UUID)
A raíz del libro “Domain-Driven Design in PHP” y los videos que tengo en Youtube, semanalmente, me van llegando consultas sobre temas de relacionados. Son bastante interesantes y me gustaría compartirlas así como mis respuestas. A los autores de los mails les he pedido permiso para publicar la conversión. Las iré agregando en la medida que pueda. La primera es de Álex sobre Entidades, Identidad y UUIDs.
Tag: value-object
Rigor Talks – PHP – #11 – Immutability (Spanish)
Hola Amigos del Rigor! Continuamos con un video sobre inmutabilidad. Vamos a ver cómo poder hacer que nuestras clases, especialmente aquellas con las que modelamos Value Objects pueden ser inmutables.
He creado una lista de reproducción pública con los videos que vaya publicando. La podéis encontrar aquí. Espero que os guste!
#MayTheRigorBeWithYou
Tag: value-objects
“Domain-Driven Design in PHP” (@dddbook) is finished
Today, Keyvan, Christian and me are very happy to announce that “Domain-Driven Design in PHP” book is 100% complete. 380 pages and around 1400 readers so far.
Thanks
Thanks, thanks, thanks.
Thanks to everyone that has supported us in this project.
Thanks to Christian and Keyvan. We don’t need words to understand each other.
Thanks to our families and friends. Love is what you need to keep pushing.
Thanks to Edd Mann for helping at the beginning with the language implementation details ;).
Thanks to Matthias Noback for his suggestions and his foreword.
Thanks to Vaughn Vernon for being pragmatic and inspiring.
Thanks to Ricard Clau, Albert Casademont, Victor Guardiola and Jordi Abad for your contributions.
Thanks to Natalye Childress for non stopping asking about uppercase or lowercase. With your work, the book can be read.
Thanks to everyone that committed fixes, you are great: Jonathan Wondrusch, César Rodríguez, Yannick Voyer, Oriol González, Henry Snoek, Tom Jowitt, Sascha Schimke, Sven Herrmann, Daniel Abad, Luis Rovirosa, Luis Cordova, Raúl Ramos, Juan Maturana, Nil Portugués, Nikolay Zujev, Fernando Pradas, Raúl Araya, Neal Brooks, Hubert Béague, Aleksander Rekść, Sebastian Machuca, Nicolas Oelgart, and Marc Aube.
Dot: Puzzles for smart masses
I have always been interested in games, just for fun, nothing serious. A game is IMHO the most difficult piece of software to write. Think for a second. It needs support for user input devices (mouse, keywords, gamepads, etc.), graphics (2D or 3D), sounds and music, physics, AI, networking when playing with more players and it has to perform really, really fast. That’s not the typical PHP web, is it? Today, I would like to present my first really small and silly game, and probably the last one :) for iOS/Android and the technologies behind it. Hope you like it.
Domain-Driven Design: Entities and Value Objects Webcast at @AtrapaloEng (Spanish)
Siguiendo con las formaciones de DDD de Atrápalo, os dejo el video sobre Entities y Value Objects.
Tactical Domain-Driven Design Screencast at PHPBarcelona (Spanish)
Os dejo el video sobre DDD Tactical Design que hice en la Monthly Talk de PHPBarcelona. Nos dio tiempo a charlar un poco de estrategia, ver los Value Objects, Entities y algo de Repositories. La charla está basada en el libro que Christian, Keyvan y yo estamos escribiendo en leanpub: “Domain-Driven Design with PHP by Examples”. En los últimos 30 minutos hablo sobre cómo estamos gestionando la Integración Continua en Atrápalo.
Tag: vaughn-vernon
Domain-Driven Design Destilado
“Implementing Domain-Driven Design” Workshop in Barcelona
Since 2012 and after two years reading and working with Domain-Driven Design approaches, in 2014, Christian (@theUniC) and me went to Berlin to get trained by Vaughn Vernon, author of “Implementing Domain-Driven Design” book. The training was fantastic, all the concepts that were going around on their minds up to that moment, got stuck into the ground in the 3 days IDDD workshop. However, they were the only two PHP developers there in a room full of Java and .NET. That was quite funny.
Tag: velocity
Detalles sobre Scrum: ¿Cómo atacar el sprint?
Os presento un pequeño ejercicio que llevo utilizando un mes y que me está dando buenos resultados a la hora de ilustrar la importancia de cómo atacar el sprint y la obsesión por entregar valor lo antes posible.
“Es lunes, perteneces a un equipo de Scrum de 6 personas. Habéis acabado el planning meeting y habéis enviado un mail con el commitment. Montáis la ScrumBoard y os queda de la siguiente manera”.
Tag: video-tutorials
#MayTheRigorBeWithYou: Presentamos las “Rigor Talks”
Amigos del rigor! Hola! Siguiendo la senda de los más grandes como CleanCoders.com o CodelyTV a.k.a. #cosaMuyFina, tengo el placer de presentaros las “Rigor Talks”. Videos cortos de entre 5 y 10 minutos, en Español, que iré publicando de forma periódica con aquellos trucos sobre desarrollo de software que veo que se repiten en las consultorías que hago por esos mundos. Los videos están hechos con todo el cariño y amor para que os resulten útiles en vuestro día a día.
A fecha de hoy, tengo 12 ya grabados que iré publicando en YouTube y en el blog de forma regular. Para muestra de los primeros videos que iremos publicando (Guard Clauses, Self-Encapsulation, Named Constructors, Test Class, Self-Shunt, Inmutabilidad y Mutant Testing). Os dejo una imagencilla ;)
Tag: virtualbox
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Tag: window-title
Adding a custom font on a titanium window title
If you are working with Titanium and you need to customize the font you are using as a title in a window, there is no predefined solution to do this, but there is a trick, the “titleControl” window property with a label control.
Tag: workshop
Awesome two days helping @Lowpost_es team
I have recently visited Valencia in order to help my friends at Lowpost. It was great and I had a lot of fun! I would like to tell you a bit about how it was.
Who is Lowpost?
Lowpost is a cool start-up that are focused in Content Marketing. Lowpost connects companies that need interesting content with authors that can write about such topics. Authors bet for the open jobs and then they deliver the content to the final customer. Everything around such process is managed by the Lowpost platform.
As a start-up, they have grown quite fast, so their code. They started with Drupal, as many start-ups, and then they added a Silex application. You know that testing is difficult, however, doing unit testing for Drupal is a challenge.
What we did?
“Implementing Domain-Driven Design” Workshop in Barcelona
Since 2012 and after two years reading and working with Domain-Driven Design approaches, in 2014, Christian (@theUniC) and me went to Berlin to get trained by Vaughn Vernon, author of “Implementing Domain-Driven Design” book. The training was fantastic, all the concepts that were going around on their minds up to that moment, got stuck into the ground in the 3 days IDDD workshop. However, they were the only two PHP developers there in a room full of Java and .NET. That was quite funny.
Tag: xing
Entrevista en @CodelyTV
Aquí os dejo la entrevista que me hizo Javier Ferrer, la cara visible de CodelyTV, en Julio de 2016. A parte del video, se curró la transcripción de las cosas más relevantes. Me gustaría agradecerle personalmente el buen trato y el interés.
Hi @xing_bcn and @xing_de!
After leaving Atrápalo, it’s time to jump to a new challenge. As I explained, I need to get out of my confort zone and check other things that will make me learn new things. Some of you already know, but for the rest, the chosen company is Xing. So, I’m more than happy to announce that I’m the next B2B Head of Engineering at @xing. I’d like to share some thoughts about the reasons that took me here.
Tag: xp
Techne 2018 - Primeros Pasos Liderando Equipos Técnicos
Dentro de pocas semanas, se celebrará la edición Techne Forum 2019 (https://techneforum.com/). Vale la pena que visitéis la web y os animéis a participar. Sea como sea, en la edición anterior (Octubre 2018), me invitaron a hacer la keynote. El motto de aquella edición era “Primeras veces…” y quise compartir algunos trucos a la hora de liderar equipos técnicos.
Tenía pendiente compartir el video que se publicó hace poco. Aprovecho también para dejarlos las slides y la descripción de mi charla.
Si creéis que la tecnología es complicada, probad a llevar personas. En serio! Hay cantidades ingentes de material (libros, videos, cursos, etc.) disponibles para aprender el nuevo framework de turno, sin embargo, a lo que liderar equipos técnicos se refiere, la lista es bastante más corta.
Es fácil practicar en casa con una máquina virtual o un container, pero es más difícil convencer a tu hija de 6 años que se comporte como ese miembro de tu equipo que se queja por todo, es caprichoso, no comparte con los compañeros y no sabe pedir ayuda cuando se queda atascado… un momento! Jejeje!
En esta charla, vamos a repasar bibliografía de referencia, técnicas y trucos para liderar equipos, cómo relacionarte con tu CEO, algunas tendencias del mercado que podéis aprovechar y muchas cosas más que espero os sirvan de ayuda.
Smash Tech: PHP 2014
El pasado día 28 de Mayo, participé en Smash Tech como ponente impartiendo una master class de 2 horas sobre el ecosistema PHP y en lo que se debe prestar atención para el 2015. Con los 50 asistentes que pagaron la entrada, repasamos desde Metodologías de desarrollo: Agile, Scrum y Extreme Programming. Sobre ésta última pivotó la gran mayoría de la presentación, viendo cómo se resuelven las dinámicas de TDD, Integración Continua, Coding Standards, etc.
Thanks Ron Jeffries – “Extreme Programming Installed” Book Review
I though that it was difficult to read a better book about XP than “Extreme Programming Explained” by Kent Beck. Then, “Extreme Programming Installed” by Ron Jeffries came to me. Last week, I finished it. Ron goes into the detail about the how-to in each XP detail. So, if you want to start with XP, read the explain one, but if you need to go deeper, the installed one is your book.
Adiós Emagister – 8 reflexiones sobre gestión de equipos
Hoy, 14 de Febrero, es mi último día en Emagister. Después de casi 4 años ha llegado el momento de decir adiós y marchar hacia nuevas aventuras y retos profesionales. Con este post, quiero compartir algunos consejos e ideas basados en mi experiencia en la gestión del equipo técnico que espero que os resulten útiles.
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series) Review
Happy new year to everyone! Today it’s January, 1st and I have finished reading “Extreme Programming Explained: Embrace Change, 2nd Edition”. If you love software development and agile practices, this book was the rules changer in the agile methodologies and software development in general. As I have done with other book reviews, here are my remarks. Buy it, seriously. You will fill the gaps about agile practices, so if you are doing Xp, Scrum, Kanban, Lean, etc. everything will gear together.
Tag: zend
Remove non used PHP files in your project
When a project gets bigger, specially when using a framework, it’s mandatory to have some processes that help you in removing code that is not used anymore such as models, classes, template files, etc.
That is not an easy task, however the benefits or removing non used coded are tons (code coverage, development speed, bugs, etc.). But what’s the best approach to detect that a template file is not used anymore in your PHP project?
Zend PHP 5.3 Demo Certification Test: More than 20.000 views!
During the PHP Barcelona Conference 2010, Enrico Zimuel and me prepared a presentation about a demo on the Zend PHP 5.3 Certification with the support of Zend Europe. Today, we are celebrating more than 20.000 views at Slideshare.net. Thanks to everyone!