Below you will find pages that utilize the taxonomy term “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.