PHP jobs with Gearman and Supervisor

The problem

Often in a PHP project there could be operations that need to be executed asynchronously. Some example are: processing mail queues, indexing data, computation that requires long elaboration time.

A common behavior is handle those operations by using cron to execute processes in background. However, using cron requires expedients to avoid cross executions and forces us to implement some specific procedures and mechanism to store data needed to elaborate.

Solution: Gearman + Supervisor

The solution that involves Gearman and Supervisor, instead, don’t require any kind of data storage mechanism and supply a very simple way to develop processes in PHP.

Continua a leggere

Processi PHP con Gearman e Supervisor

Problema

Spesso in un progetto PHP capita di dover eseguire operazioni in modo asincrono. Alcuni esempi sono: lavorazione di code email, indicizzazione di dati, calcoli che richiedono lunghi tempi di elaborazione.

Prassi comune è gestire tali operazioni utilizzando cron per eseguire processi in backgroud. Tuttavia, utilizzare cron richiede espedienti per evitare l’accavallemento delle esecuzioni e ci costringe ad implementare procedure specifiche e meccanismi di stoccaggio dei dati necessari per l’elaborazione.

Soluzione: Gearman + Supervisor

La soluzione che concerne Gearman e Supervisor, invece, non richiede alcun meccanismo di data storage e fornisce un modo molto semplice per sviluppare processi in PHP.

Continua a leggere

Setup Doctrine 2 filters in Zend Framework 2

Scenario

Doctrine filter is a very powerfull tool that can be used to add conditional clauses at SQL level into our Doctrine 2 engine. This means that filters constraints will affect DQL queries, collections, lazy loading, etc.

How to setup and use filters in generic conditions is well explained in this article of official Doctrine documentation, but in a Zend Framework 2 project, the same operation is a bit different.

So, in this post, we will explain how to configure one or more filters into our Zend Framework 2 projects.

Continua a leggere

Configurare filtri Doctrine 2 in Zend Framework 2

Scenario

Un filtro di Doctrine è uno strumento molto potente che può essere utilizzato per aggiungere condizioni a livello SQL all’interno del nostro gestore di oggetti Doctrine 2. Ciò significa che i filtri influenzeranno il comportamento di query DQL, collezioni, recupero dati, ecc.

Come configurare ed utilizzare filtri in condizioni generali è ben spiegato in questo questo articolo della documentazione officiale di Doctrine, ma in un progetto basato su Zend Framework 2, la stessa operazione è un po’ diversa.

Così, in questo articolo, vedremo come configurare uno o più filtri nei nostri progetti sviluppati su Zend Framework 2.

Esempio esplicativo

Il seguente esempio è basato su quello riguardante un filtro “locale” mostrato nel manuale di Doctrine. Assumeremo di avere un progetto ZF2 funzionante sviluppato a partire da ZendSkeletonApplication con il modulo DoctrineORMModule configurato (fare riferimento ai manuali ufficiali per raggiungere questo obiettivo).

Innanzitutto, abbiamo bisogno di una classe interfaccia da utilizzare come segno distintivo per decidere quali entità saranno influenzate dal filtro. Quindi, se vorremo che un filtro sia applicato ad un’entità dovremo solo fargli implementare tale interfaccia. Ovviamente, possiamo anche utilizzare l’interfaccia per specificare quali metodi implementare nell’entità, se vogliamo. Questo può essere utile e vedremo un esempio in un prossimo articolo.

Continua a leggere

Get latest LibreOffice in Ubuntu

LibreOffice is actually the most famous Open Source Office Suite. Unfortunately, Ubuntu repositories often doesn’t contains latest versions of it.

If you like to have your LibreOffice always updated, you can simply execute following commands in your terminal:

$ sudo add-apt-repository ppa:libreoffice/ppa
$ sudo apt-get update
$ sudo apt-get dist-upgrade

At the end of the process, simply run LibreOffice from applications menu and have fun.

Nota: Questo articolo è disponibile anche in lingua italiana.