Últimas entradas del blog

Cómo empaquetar aplicaciones PHP para su distribución en un sólo fichero .PHAR

2022-01-24 - Categorías: PHP

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.

Continuar leyendo..

PHP: serializando objetos a un fichero

2022-01-23 - Categorías: PHP
Serializando y deserializando en PHP..

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..

Continuar leyendo..

Cómo usar con Doctrine de PHP nombres de tablas dinámicos

2022-01-23 - Categorías: General / PHP / Symfony
Objetos relacionados base de datos

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.

Continuar leyendo..

Comunicación bidireccional entre procesos distribuidos con RMI de Java

2021-12-19 - Categorías: Java
Java

Para el que lo pueda necesitar, este es un codekata, howto o apunte para implementar la comunicación bidireccional entre Clientes y Servidores usando RMI, lo que se llama implementar callbacks hacia los clientes. Es una vuelta de tuerca al post anterior sobre la implementación del RMI de Java, Remote Method Invocation.

Este post es una ampliación para usar clientes y servidores con RMI de Java, de forma que tanto el servidor como el cliente actúan invocando métodos remotos en el cliente y servidor.

Continuar leyendo..

Exponiendo y consumiendo servicios remotos RMI de Java

2021-12-19 - Categorías: Java
Java

Esto es un codekata, apunte o resumen sobre esta funcionalidad de Java. Resumiendo, Java RMI es una funcionalidad que viene implementada de casa, mediante la cual podemos conectar servicios distribuidos, de forma que las funciones programadas se pueden ejecutar desde cualquier programa en cualquier servidor.

Es decir, RMI significa Remote Method Invocation, entonces tenemos que mediante estos mecanismos podemos declarar funciones en objetos de Java, y exponerlos a la Red para ser utilizados por procesos remotos. Se consigue de esta forma transparente para el programador, que se lancen acciones en servidores remotos. Así se puede escalar los procesos entre varios servidores, distribuyendo la carga y funcionalidades.

Es más fácil leer el fuente que explicarlo, al grano..

Continuar leyendo..

Java: organizando el código fuente en paquetes, directorios, ficheros y clases

2021-12-19 - Categorías: Java
Java

Sencillo codekata, apunte, resumen, o como queramos llamarlo, sobre cómo funciona la organización del código fuente en paquetes de Java. Esto se hace a base de nombres de directorios y ficheros. Es decir, un directorio es un package. Dentro de cada directorio, cada clase puede tener visibilidad de su mismo directorio o subdirectorios. Se organizan a base de la concatenación de nombres de directorio con subdirectorios y ficheros. Aparte de esto, dentro de cada fichero .java, debe haber una clase con el mismo nombre.

Sin más teoría, vamos al grano.. que es más fácil verlo con código.

Continuar leyendo..

UUIDs: cómo identificar las cosas en programación

2021-12-16 - Categorías: General

Una buena práctica de programación es no usar los IDs de las bases de datos para identificar las cosas en los proyectos. Si no más bien usar un propio sistema de identificación, de forma que nosotros elijamos el identificador que va a tener un objeto antes de guardarlo en la base de datos, y sobre todo antes de enviarlo a sistemas remotos para su almacenaje.

Esto se aconseja hacer, por ejemplo, con los llamados UUIDs. Si en Sistemas Distribuidos es el mismo UUID para el mismo objeto de información en varios sistemas, se evitan muchos problemas. Porque tener que transmitir IDs distintos, y tener que casarlos constantemente entre los distintos sistemas informáticos es un problema..

Continuar leyendo..

Cómo poner un editor de texto avanzado en una web fácilmente

2021-12-12 - Categorías: CSS / HTML / PHP / Symfony
EasyAdminCKEditor

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.

Continuar leyendo..


Java: diferencias entre ArrayList y HashMap

2021-11-14 - Categorías: General / Java
Arrays colecciones vectores

Este es un codekata, apunte, de copia y pega con algo de código fuente sobre el uso de ArrayList y HashMap. Esto son dos tipos de datos básicos que nos provee Java, que será el siguiente punto de partida cuando tengamos que manejar colecciones de datos de información.

En Java tenemos que definir el tipo de dato y la forma de funcionamiento que queremos que tenga internamente, para obtener un comportamiento mejor de una forma o de otra. Tenemos que a partir de los vectores básicos, el siguiente paso será usar tipos de datos como los ArrayList, HashMap, LinkedList, HashSet, Iterator.. cada uno internamente está construido de una forma.

Continuar leyendo..

Una CPU con varios núcleos, PHP y la computación paralela

2021-11-14 - Categorías: General / PHP

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

Continuar leyendo..

PHPUnit: cómo testear cualquier código legacy en PHP

2021-11-03 - Categorías: General / PHP

Este es un codekata para programar tests de las páginas web legacy. El tratar de testear código legacy en PHP puede parecer bien complicado. Puede no haber casi encapsulamiento en objetos, estando todo construido a base de scripts embebidos entre el HTML, CSS y JavaScript. Una web legacy es el caso más complejo, pero este codekata también sirve para cualquier otro código en servicios web, scripts sueltos, encapsulado en objetos, dividido por capas o arquitecturas hexagonales.

Estos códigos legacy se pueden testear de varias formas. Se pueden establecer tantos puntos de control como queramos. Como mínimo podemos crear tests de aceptación, funcionales, crawleando, creando tantos tests como queramos sobre los casos de uso. Pero si queremos obtener la cobertura visualizando cada línea de código por la que ha pasado la ejecución, no podemos crawlear la web y ya está. Así PHPUnit no obtendrá la cobertura del código ejecutado. Además, se puede también establecer puntos de control, atendiendo al contenido de las respuestas, navegando por el HTML de dichas respuestas.

Continuar leyendo..

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.