PHP es el lenguaje de programación de mayor aceptación entre las aplicaciones web. La gran mayoría de los CMS orientados al mundo de la web están desarrollados sobre PHP.
Preparado para correr sobre un servidor web, aunque en mucha menor medida también se puede utilizar en entorno de terminal. Tiene una curva de aprendizaje muy baja, es muy permisivo con los errores, es interpretado, no compilado y orientado a objetos, entre otras cosas.
Aunque sea un lenguaje muy aceptado por los principiantes, es muy atacado por muchos experimientados en la programación. No obstante es uno de mis lenguajes preferidos. Y sobre todo, al desarrollar para la web, siendo prácticos, es una de las primeras y mejores soluciones balanceando entre el conjunto de lenguajes disponibles.
Continuando con los resúmenes sobre patrones de diseño del software llegamos al patrón Object Pool, que traducido significa Grupo de Objetos.
Este patrón está orientado a mejorar el rendimiento de la creación de objetos con alto coste temporal o espacial. Es decir, es para mejorar el uso de los recursos. Se genera una serie de objetos al inicio del programa, o la primera vez, para ir cogiendo los objetos del pool, y después devolverlos para que otros procesos o módulos del programa los reutilicen sin tener que volver a crearlos.
Este patrón del diseño del softwarees un patrón para optimizar los recursos, para reducir el coste espacial, y probablemente también el coste temporal de nuestros programas. El patrón Flyweight o Peso Mosca se basa en la optimización de recursos disminuyendo la cantidad de información que tiene cada objeto.
Es decir, cuando tenemos muchos objetos similares con información muy parecida, conviene desacoplar la información común y agruparla en nuevos objetos, reduciendo los originales.
Siguiendo con el repaso en PHP de los patrones de diseño del software, llegamos al patrón Fachada o Facade en inglés. Es bien sencillo, consiste simplemente en poner una clase u objeto en medio, para que se encargue de simplificar el manejo en conjunto del programa.
Es decir, suele haber tareas complejas, con varios pasos, o en las que intervienen varios elementos. Entonces, para simplificar todo, se llama a la clase de fachada para simplificar la programación y mantenimiento.
Siguiendo la serie de codekatas sobre patrones de diseño del software llegamos a un patrón para añadir funcionalidades a un código ya existente a base de objetos llamados decoradores. Este post trata de lo que se llama el patrón Decorador/Decorator en inglés.
Se puede usar para decorar transacciones económicas, líneas de teléfono, clientes, etc.. es decir, se puede aplicar a muchos conceptos. Pero vamos a suponer que estamos pintando por pantalla coches, tendremos un coche básico, y queremos decorarlo. Al grano, que es más fácil ver el código que explicarlo..
Siguiendo con la recopilación de codekatas sobre patrones del diseño software llegamos al patrón Composite. Este patrón es una forma de reutilizar código fuente, haciendo objetos que sean compuestos de otros, como su nombre indica.
Estos conceptos se pueden usar por ejemplo en las ventas que pueden ser combinaciones de varias ventas, en figuras geométricas compuestas, en aplicación de reglas de precios, productos simples o compuestos, etc.. Por ejemplo, aplicando descuentos, puede ser que tengamos descuentos simples y descuentos que puedan ser la acumulación de otros varios. Un producto puede ser simple, o puede ser un pack de una combinación de otros productos. Una figura puede ser simple, o puede ser una combinación de varias figuras simples. Y así suma y sigue según el escenario en curso..
Otro patrón de diseño del software es el llamado Puente o Bridge en inglés. Se trata de una forma de refactorizar los códigos fuentes para que tengan bajo acoplamiento y alta cohesión, distribuyendo las características y haciendo más manejable todo el programa en su conjunto.
Es más fácil verlo para entender en qué consiste exactamente.
Este patrón de diseño de software es el de Adaptador, se puede usar para conectar con otros sistemas. Simplemente utiliza una interfaz para definir un contrato de uso que luego se reutiliza implementando clases que la implementan.
Por ejemplo, supongamos que queremos guardar cadenas de caracteres. Este guardar, es lo que queremos hacer, independientemente de si se hace en memoria, en un fichero, una base de datos Postgres/Mysql/etc.. entonces cada implementación del guardado, es un adaptador, porque adapta conectando el sistema informático con el destino del guardado de forma transparente.
Una forma de distribuir, reutilizar en otros proyectos, o desplegar aplicaciones completas PHP, es empaquetando estos programas en ficheros .phar. Estos ficheros .phar son el equivalente de Java de los empaquetados .jar.
En PHP no es habitual empaquetar los proyectos completos, pero facilita las cosas si lo hacemos cuando es interesante. Es decir, empaquetando todo en un fichero .phar se facilita el despliegue en producción, la distribución para reutilizar en otros proyectos, el uso desde línea de comandos, su configuración en servidor, etcétera.. estos ficheros .phar se pueden usar como ficheros normales .php en los includes o requires.
Este es un howto o codekata para serializar y deserializar objetos de información en PHP. La idea es la misma que en este otro post sobre serializar en Java. Serializar en programación es un proceso por el cual los objetos programados, las clases, se puede poner en series de datos, de forma que así representan toda su información para que la transmitamos por red, a ficheros, entre procesos..
Este es un pequeño howto para darle una vuelta de tuerca al tema de los repositorios, Doctrine, nombres de tablas, Symfony, etcétera. Doctrine es un ORM que facilita mucho el manejo de los datos en BD. De casa viene configurado para usarse de forma que una tabla corresponde a una entidad, pero esto se puede hacer dinámico fácilmente.
Supongamos entonces que estamos usando una BD relacional Mysql, tenemos entonces que una entidad se asocia a una tabla. Y podemos tener el supuesto de que queramos dividir los datos en tablas por mes.
EasyAdmin es un vendor preparado para proyectos Symfony con el que en muy poco tiempo se pueden construir paneles de control completos y funcionales para tus proyectos. Implementa en muy pocos comandos la generación completa de las operaciones básicas CRUD: crear, listar, actualizar y borrar.. mostrando pantallas para cada acción, además de mostrar un menú responsive todo 100% personalizable.
Por otro lado CKEditor es un editor WYSIWYG con el que se puede editar contenido, con formato al estilo de los procesadores de texto, pero en el mismo navegador. Tendremos disponibles una serie de botones para dar estilo a los textos, párrafos, etc.. botones como los de la imagen de arriba, todo dentro de la misma página web y sin instalar nada.
Este es un sencillo howto para hacer algo que cuesta un poco encontrar por Internet con EasyAdmin en las últimas versiones, así que aquí tienes un eco y enlaces a más documentación. Se trata exactamente de las configuraciones que hace falta en un proyecto para que funcionen juntos CKEditor y EasyAdmin.
Me remito a un post anterior para crear desde cero un panel completo con EasyAdmin 2. De la 3 en adelante es todavía más fácil y todas las configuraciones se aplican desde PHP. Este post es para la versión de EasyAdmin 3.
Este es un codekata de copia y pega en PHP para procesar lotes de información particionados y repartidos entre varios núcleos de una misma CPU utilizando los conceptos de computación paralela. Es decir, si tenemos un proceso pesado que corre de forma iterativa, y se puede dividir en lotes, entonces se puede procesar en paralelo para aumentar la velocidad.
Esta división y procesado en varios subprocesos de forma simultanea, se puede hacer fácilmente en PHP usando las funciones nativas de pcntl que tenemos disponibles desde PHP 4: https://www.php.net/manual/es/function.pcntl-fork.php