General

Esta es la categoría general donde pongo los posts que no encajan con el resto de categorías. Y algunos posts, que aunque encajan en alguna otra categoría, también los he considerado de interés general en informática. Aquí puedes encontrar contenidos varios sobre utilidades como programas, sistemas operativos, herramientas de mantenimiento y cosas de este estilo que me han parecido interesantes.

PHP: cómo construir usando el patrón de diseño Decorator/Decorador

2022-02-02 - Categorías: General / PHP / Principios y patrones
Pieces, design patterns, principles, patrones de diseño

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

Continuar leyendo..

PHP: objetos compuestos, cómo usar el patrón Composite

2022-02-02 - Categorías: General / PHP / Principios y patrones
Pieces, design patterns, principles, patrones de diseño

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

Continuar leyendo..


PHP: el patrón Adaptador, cómo se implementa y cuándo usarlo

2022-01-31 - Categorías: General / PHP / Principios y patrones
Pieces, design patterns, principles, patrones de diseño

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.

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

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


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

ReactPHP, máximo rendimiento, asíncrono y con servidor web embebido

2021-10-28 - Categorías: General / PHP

En el mundo PHP hay una serie de proyectos muy interesantes, alrededor de lo que se llama ReactPHP. Este post es un codekata sobre cómo empezar con esta herramienta de trabajo en Sistemas Distribuidos. Se trata de cómo crear proyectos a base de microservicios, encapsulando un servidor web HTTP de alto rendimiento construido 100% en PHP dentro de cada microproyecto.

Este servidor web HTTP no está en desarrollo, como reza su web, y ya se está usando en millones de instalaciones en producción.

La idea principal no es nueva. Simplemente se usan loops, los clásicos bucles infinitos, en los que se establecen y procesan peticiones asíncronas, siempre tratando de sacar el máximo rendimiento. El cuello de botella normalmente está en los input/output que se hacen a ficheros, red, etc.. entonces se alcanza su máximo rendimiento no procesando linealmente, sino asíncronamente cada petición en un mismo núcleo de procesador al 100%.

Este sistema se puede balancear y escalar horizontalmente de igual forma que cualquier otro sistema, pero más fácil porque ya tenemos el servidor web embebido. Se eliminan entonces intermediarios, que siempre van a tener un coste de computación.

Si a esto le unimos la velocidad de las últimas versiones de PHP7+ 8+, con la compilación JIT Just In Time, tenemos un cócktel muy pero que muy interesante. Empezamos con el codekata?¿

Continuar leyendo..

PHPCPD: El detector de copy-paste de PHP

2021-10-28 - Categorías: General / PHP

Siguiendo con las herramientas para mejorar la calidad de los códigos fuentes en PHP, llegamos al detector de copia y pega de PHP. Esta herramienta revisa automáticamente los códigos fuentes, en busca del serio problema de repetición del código fuente.

Uno de los principios del desarrollo de software, es el llamado principio DRY. Las siglas vienen del Don’t Repeat Yourself. El principal problema de no aplicar el principio DRY, es que aumenta la deuda técnica de las aplicaciones, haciendo que sea muy costoso seguir construyendo o modificando.

Continuar leyendo..

© 2024 JnjSite.com - MIT license

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