Alejandro Celaya | Blog

Software development, agile methodologies and open source projects.

  • Delay constructor execution by using ServiceManager lazy services

    16 November 2018  —  Comments

    A couple years ago I wrote a post about how to improve PHP applications performance by using zend-servicemanager lazy services.

    In that article I explained how the ServiceManager takes advantage of the proxy design pattern to delay the creation of services, when they are marked as lazy.

    That can improve performance if the object is resource consuming, but that is not the only advantage behind proxies.

    A use case

    Some days ago I was working on a new feature for Shlink, an open source project I maintain.

    The feature consisted on adding support to geolocate IP addresses by using GeoLite2, an IP address database which is updated every month.

  • Demonstrating the interoperability and decoupling of Zend Expressive

    14 July 2018  —  Comments

    I have written a lot of posts about Zend Framework in general and Zend Expressive in particular, but I have noticed that I have never talked about one of the things that, from my point of view, makes Expressive so game-changing, Interoperability.

    Some context

    In the past, PHP frameworks used to be very big libraries, which tried to provide solutions to any possible problem in order to retain users.

    At that time, you had to decide which framework you wanted to use, by weighing pros and cons. People ended up saying "I prefer framework foo, because it has a better templating system", "ok, but framework bar has a better performance and its dependency injection approach is delightful".

  • Mutation testing with infection in big PHP projects

    17 February 2018  —  Comments

    There's no doubt that having tests in a project allows you to find potential bugs earlier and more easily.

    Lots of OSS projects require a minimum code coverage in order to accept new pull requests from contributors, and proprietary projects also tend to have some sort of continuous integration workflow which requires certain metrics to be fulfilled in order to get builds passing.

    However, the code coverage can lead to a false sense of security, which makes you think that if certain class has a 100% code coverage, it is also 100% bug-free.

    This is not always true, since you could be calling a method and yet not being properly testing its output or its real behavior. The code coverage will mark it as covered, but you might introduce a bug and still have a green test.

  • AcMailer 7.0, the most important release in a long time

    09 December 2017  —  Comments

    A couple hours ago I have released the seventh major version of a module I created more than 4 years ago.

    It was born as an abstraction to send emails in Zend Framework 2 applications, but trying to make the process simpler than directly working with the lower-level zend/mail component.

    I initially created it to use it in my own project, but at some point decided to publish it as a packagist package to ease others to use it.

  • How to simulate a socket connection with AWS Simple Queue Service

    26 November 2017  —  Comments

    At some point, any enterprise project will probably need a message queue.

    A message queue is used to publish information (usually known as messages) that a different "node" (usually known as worker) will consume in order to perform a specific action.

    It is frequently used in web applications to pass information to background workers that consume the queue and perform long tasks, but it is also an important part when applying concepts like Event Sourcing to your architecture.

    It is also really important when working with microservices, since it is a way to enable data exchange between each service.