programación

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

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

API Platform, Symfony: añadiendo funcionalidades fácilmente

2021-09-12 - Categorías: General / PHP / Symfony

Jugueteando con esta joya del software, la API Platform, podemos construir una API Restful en muy poco tiempo. Lo siguiente que podemos necesitar es disparar acciones cuando ocurren cosas con los elementos de la API. Pero no vamos a editar las acciones de GET, POST, PUT, PATCH o DELETE, porque esto viene hecho, y es estándar su comportamiento. Si no que vamos a engancharnos a los eventos de dichas acciones, a post-procesar la información o a implementar nuevos endpoints en este post.

Es decir, una API Restful puede ser una cosa bastante simple, en la que sólo almacenamos información que podemos editar remotamente. Se pueden añadir puntos de entrada con lógica nueva y controlable desde el exterior. Pero es más interesante, que después de recibir peticiones, hagamos tareas aparte de las básicas CRUD: crear, listar, actualizar y borrar.

Por lo menos tenemos tres formas de lanzar estas acciones nuevas:

  • Añadiendo nuevos puntos de entrada para procesar, no recomendable.
  • Programando tareas que se ejecuten cada cierto tiempo.
  • Enganchándonos a los eventos de la API en las peticiones.
Continuar leyendo..

Refactorizando un Singleton usando Static

2021-09-07 - Categorías: General / PHP
PHP-testing-POST

Uno de los patrones de diseño del software que tenemos disponible es el Singleton. Según las buenas prácticas es un patrón del que tenemos que huir, porque viola varios principios del desarrollo. Para más información me remito a los principios STUPID vs SOLID.

Según podemos encontrar por Internet, hay un gran debate entre usarlo o no. Sólo se ve que sea la buena opción cuando necesitamos usar un sistema de cacheado de la información de forma global, registros de información global o sistemas en los que manejamos procesos debiendo controlar su cantidad.

Una forma de salvar la situación es el uso de Static en favor de tener información global, mejorando así también el rendimiento, aunque la idea de Singleton es subyacente a la forma de uso de Static. Otra forma de salvar la situación, es controlar la creación del objeto externamente, no internamente en la clase, delegando esta responsabilidad.

Continuar leyendo..

PHP: clase estándar para crawlear webs o consultar APIs RESTful

2021-08-09 - Categorías: PHP
Networking Earth

Este post es un howto o codekata para consultar sistemas remotos en PHP mediante CURL. Podemos encontrar que con muy pocas líneas consultamos una página web, igualmente a como hacen nuestros navegadores, aunque sin visualizarlas.

De esta forma, podemos conectar con sistemas remotos como APIs RESTful, no sólo websites, y lo que es cada vez más habitual, para interactuar o construir aplicaciones distribuidas entra varios servidores conectados a una red. También se puede usar para crawlear websites así como hacen los principales buscadores o herramientas SEO..

Este post se puede complementar con este otro post sobre APIs RESTful.

También con este otro con algo sobre refactorización.

Continuar leyendo..

© 2024 JnjSite.com - MIT license

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