El proyecto del escriba del muro es un experimento para desarrollar un medio para la creación de formularios dinámicos con administración manual para la dinamización de canales e interacción con los usuarios. Lo he ido creando al vuelo, por lo que objetivos y funciones pueden cambiar en cada entrada.
Sigue leyendo Desarrollo de bots: Escriba del Muro. Parte 3Artículo: Los Cladogramas de Wikipedia
No he pensado este articulo como algo grande y complejo, sino como una forma de asimilar un nuevo conocimiento que encontré por pura casualidad. Me resultó muy interesante darme cuenta de que una de las funciones que mas disfruto en la Wikipedia en mis expediciones obsesivas compulsivas por leer sobre fósiles y seres vivos, no es simplemente gente escribiendo HTML crudo, sino que Wikipedia tiene un modulo especifico para ello.
Cladogramas con Module:Clade
This module is designed to be used with the clade template to draw phylogenetic trees or cladograms. The new template-module combination extends the feature available with the clade and cladex templates, while replicating the behaviour of the older templates written with the template language. This module is copied from the test version Module:Sandbox/Jts1882/CladeN, which was used with the template Template:CladeN to test the features during development.
Wikipedia. Module:Clade
A pesar de que soy un ávido lector de la wikipedia, nunca he prestado demasiada atención al formato de las paginas. De hecho, la única vez que me ha molestado una actualización ha sido en esta ultima, no hace mucho desde la publicación de esta entrada, en la que ya no parece una web de la era del 1.0 y no es tan sencilla como lo era antes. Estoy seguro que me acostumbraré como siempre, pero al menos aprovecho para quejarme un poco.
Es interesante notar que la plantilla de cladogramas existe desde el año 2009, porque recuerdo que en el pasado, no había uniformidad sobre el formato de cladogramas. En diferentes paginas habían diferentes estilos y aunque servian para entender el contenido que trataban de transmitir, no había uniformidad. Esto tal vez se deba a que en un principio, los contenidos eran copias de distintas fuentes con distintos formatos, por lo que con el tiempo, los artículos fueron estandarizándose tras diversas ediciones.
Aun así, me ha parecido mas curioso darme cuenta de que aunque la plantilla existe desde hace tanto, el modulo solo ha venido a existir desde febrero del 2017
Cladogramas en WordPress
Tras una breve búsqueda, no encontré nada similar al modulo de cladogramas de Wikipedia en WordPress. No estoy seguro de si la razón es porque no hay suficiente demanda o porque es algo tan simple que se puede replicar sin problemas con HTML puro, así que iré repasando lo que ofrece en modulo en esta misma pagina con el fin de evaluar los resultados.
El modulo de cladograma ofrece el siguiente resultado con el código propuesto:

Utilizaré primero algo de los bloques de Gutenberg para intentar replicar el resultado utilizando la plantilla propuesta en la pagina de plantilla:

Prueba en gutemberg:
Etiqueta A | Etiqueta 1 |
Sub Etiqueta A | Sub Etiqueta 1 |
Bueno, eso salio peor de lo que esperaba. Gutemberg ni siquiera permite agregar bordes a la tabla y menos combinar celdas.
Creo que es posible hacerlo con contenedores, pero tampoco es posible darles formato alguno, así que no lo registraré.
Por ultimo, intentaré escribirlo directamente con HTML, luego compartiré el código.
Etiqueta A | Etiqueta 1 | Hoja 1 |
Sub Etiqueta 1 | ||
Etiqueta B | Etiqueta 2 | Hoja 2 |
Sub etiqueta 2 |
<table>
<tr>
<td rowspan=2 style="text-align:center;vertical-align: middle;border-width: 0px 0px 10px 0px;">Etiqueta A</td>
<td style="text-align:center;vertical-align: middle;">Etiqueta 1</td>
<td rowspan=2 style="text-align:center;vertical-align: middle;">Hoja 1</td>
</tr>
<tr>
<td style="text-align:center;vertical-align: middle;border-width: 10px 0px 0px 10px;">Sub Etiqueta 1</td>
</tr>
<tr>
<td rowspan=2 style="text-align:center;vertical-align: middle;">Etiqueta B</td>
<td style="text-align:center;vertical-align: middle;border-width: 0px 0px 10px 10px;">Etiqueta 2</td>
<td rowspan=2 style="text-align:center;vertical-align: middle;">Hoja 2</td>
</tr>
<tr>
<td style="text-align:center;vertical-align: middle;">Sub etiqueta 2</td>
</tr>
</table>
Conclusiones
¡Es horrible mi compa, no lo haga!
En una siguiente entrega podría estar probando como utilizar el modulo Lua del propio Wikipedia para escribir cladogramas, pero hasta el momento de esta entrega, no parece existir una herramienta equivalente para WordPress.
Tutorial: CRUD REST API con NextJS. Parte 1
Pues se me ha antojado hacer un tutorial CRUD REST API con NextJS debido a que he terminado un proyecto con estas tecnologías.
Tabla de contenidos
Este tutorial esta relacionado con las tecnologías ReactJS, por lo que puedes encontrar mas sobre este tema siguiendo las etiquetas relacionadas. Aquí te dejo un post anterior.
Introducción
Una de las preguntas mas frecuentes que he encontrado en grupos y foros de programación es sobre como hacer un CRUD. Por supuesto, esto es algo que se ha explicado en muchos sitios, como videos, cursos online, Blogs, e incluso en la propia documentación de estas tecnologías. Debido a esto, mi interés es tomármelo con calma para tratar de explicar conceptos que se dejan de lado por la prisa que se tiene para aprender algo especifico para resolver algo especifico. Después de todo, una vez que pasa el apuro, es fácil terminar desorientado y no saber como hacer algo mas complejo por la falta de las bases. Repartiré este tutorial en diversas partes por el volumen de contenido que habrá y adicional a esto, compartiré el código y dejare un demo ejecutable para que se pueda ver el resultado en funcionamiento.
Glosario de la primera parte
Probablemente ya has repasado estos conceptos que están aquí, pero quiero hacer algunas observaciones sobre estos conceptos. Además de entender como funcionan, también es bueno saber como se llaman y cual es la forma correcta de escribirlos. Aunque se dice que la inteligencia artificial puede ayudarte en lo que sea, necesitarás saber como hacerle las preguntas correctas, para obtener las respuestas correctas. (Después de todo, ni en la ferretería saben de que hablas cuando pides el cosito del coso)
Observaciones sobre los acrónimos
Hay algunas cosas que saber sobre los acrónimos aquí citados. Por ejemplo, CRUD no es una palabra sino un acrónimo, por lo que se escribe todo en mayúsculas. La forma correcta de escribirlo en español es todo con mayúsculas y con redondas, si el medio lo permite, o cursivas según la RAE. La RAE recomienda utilizar las formas traducidas de las las siglas, de la misma forma en la que en español usamos ONU organización de las naciones unidas, en lugar de UNO United Nations Organization. Sin embargo, muchos de estos acrónimos ya están asentados, así que no es necesario traducirlos (al menos Google no devuelve ningún resultado útil de CLAB Crear Leer Actualizar Borrar).
CRUD
Acrónimo de Crear, Leer, Actualizar y borrar en sus siglas en ingles (Create, Read, Update, Delete) son las cuatro operaciones básicas del almacenamiento persistente. Puedes aplicarlo a diferentes situaciones como consultas SQL, Consultas API o representaciones de los datos en las interfaces de usuario. Su uso correcto en el lenguaje español esta citado en el apartado anterior de observaciones sobre los acrónimos.
API
Acrónimo de Application Programming Interface, se refiere a dos componentes de software comunicándose entre si mediante un conjunto de definiciones y protocolos. Para el uso de este proyecto, el protocolo es HTTP y las definiciones están establecidos por los Endpoint
Endpoint
Hay un montón de definiciones para esta palabra (que por cierto, no es un acrónimo sino una palabra en ingles) pero para este contexto, un web service endpoint es un servicio web que provee de acceso a un servicio a un cliente. Es el lugar donde el cliente consulta datos de un servidor.
REST
El acrónimo REST, Representational state transfer o transferencia de estado representacional, es un estilo de arquitectura de software que sigue los siguientes principios:
- Comunicación cliente-servidor
- Comunicación sin estado
- Cacheo
- Sistema por capas
- Código por demanda
- Interfaz uniforme
Hay que aclarar que REST tiene varios niveles, en los que, si no utiliza todos los criterios establecidos por el estándar REST, se llama RESTless y si lo hace, se llama RESTful. En el caso del proyecto CRUD REST API con NextJS presentado en este conjunto de entradas, el tipo REST seria RESTless porque solo usaremos el método POST de HTTP.

Next.js
Nextjs, NextJS, Next.js o Nextjs.org es un marco de desarrollo o framework que permite la representacion del lado del servidor. Esto significa que, a diferencia de ReactJS cuya primera carga es solo para iniciar la aplicacion, gran parte de los procesos se pueden implementar desde el lado del servidor. NextJS utiliza una arquitectura que diferencia frontend de backend.
Una cosa que quiero destacar es que NextJS es esencialmente un frontend que precarga datos desde el servidor, mientras que ReactJS lo hace desde el cliente, pero tiene la particularidad de que también permite montar un backend mediante API, algo que en este ejercicio vamos a hacer. Destaco esto porque el modelo cliente-servidor se suele definir a la ligera como que el cliente es el dispositivo del usuario y el servidor siempre es la nube.
ReactJS
ReactJS es una biblioteca (¿biblioteca?¿librería?¿marco de desarrollo? dejemos este tema para otra entrada) diseñada para crear interfaces de usuario. Si bien está diseñado para su uso en modelos de cliente como frontend, su versatilidad y facilidad de programación al crear componentes modulares lo hace un candidato perfecto para el modelo de renderizado desde el servidor que utiliza NextJS.
ORM
Mapeo de Objetos relacionales, es una técnica utilizada a modo de puente entre la programación orientada a objetos y una base de datos relacional. Esto es muy útil porque agrega una capa de transparencia al programador, que le permite centrarse en el desarrollo sin perder de vista el modelo de programación orientada a objetos.
Hay que recordar que esto agrega una capa de complejidad al sistema que se esta desarrollando debido a que es básicamente una traducción constante entre lenguaje de base de datos y programación orientada a objetos, con lo que la carga al servidor se incrementará, a diferencia de hacer las sentencias SQL a mano.
Sequelize
Sequelize es una libreria Typescript ORM para nodeJS con soporte para Oracle, Postgres, MySQL, MariaDB, SQLite and SQL Server. Es muy sencilla de utilizar y es muy eficiente. Para el caso de nuestro proyecto de CRUD REST API con NextJS, la utilizaremos con el soporte de SQLite, pero el mismo código se puede utilizar con MySQL.
SQLite
SQLite es un motor de base de datos. No es una aplicación independiente sino que funciona como una librería para una multitud de lenguajes de programación. Permite tener una base de datos compacta y fácil de usar y transportar que no depende de un servidor.
Un detalle que debo destacar es que SQLite no es una base de datos multiusuario a diferencia de MySQL. Una de las razones por las que no se suele utilizar SQLite es justamente esta, pues se teme que haya un congestionamiento o duplicacion de datos, pero tenemos que recordar que MySQL, aunque es multiusuario, en el desarrollo web se lo suele usar con un solo usuario desde un solo cliente, que es el servidor, para servirle datos al cliente final. Los mismos riesgos que corre SQLite los corre MySQL en esta situacion, pero son solventados con el hecho de que al ser un solo cliente, todas las consultas se hacen en secuencia.
CRUD REST API con NextJS
El objetivo de este tutorial es crear un CRUD REST API con NextJS sencillo, por lo que no se abarcaran temas como sesiones, autenticación, autorización y otros, aun así, quiero también explicar el uso de un ORM para la gestión de las bases de datos y un poco de bases de datos relacionales.
El problema a analizar es crear un sistema CRUD basico para demostracion de las tecnologias citadas, por lo que es necesario establecer las cosas que se necesitan y el objetivo a resolver. Para este proposito, se necesitan dos tablas, Usuarios y Personas
La tabla Usuarios contiene la informacion minima para la autorizacion y autenticación de un usuario, por lo que tiene los siguientes campos
- id_usuario
- password
- createdAt
- updatedAt
Hay que tener en cuenta que sequelize sigue ciertos patrones, que son mas fácilmente identificables en inglés, como por ejemplo, que los nombres de las tablas siempre están en minúsculas, separados por subguiones y en plural, por lo tanto, la tabla usuarios seria correctamente escrita como users. pero para esta practica, solo acataré que este en mayusculas y en plural, porque sequelize de todas formas cambiara el nombre de mi tabla a plural.
Sobre la libertad y la propiedad en internet
Si de algo me quejo del internet de hoy, es que se ha vuelto super cerrado. Esto no estoy seguro de si es bueno o no, debido a lo que estoy poniendo en consideración como un «internet abierto» es básicamente un conjunto de paginas públicas, preparadas para ser indexadas por Google o cualquier otro webcrawler que vaya peinando en internet. Podría ser Yahoo! o duckduckgo, quien sabe.
Esto en realidad es bastante curioso por cuanto aunque Google sea un practico monopolio, todavía era posible enfrentarlo con otro buscador, debido a que se podía indexar el internet libremente, bastaba con ir dando vueltas por ahí, indexando unas cosas si y otras no y se podía crear una base de datos consistente para servir al usuario lo que necesite. Pero las cosas han cambiado.
El problema hoy en día es que Facebook ha depredado a los foros y paginas web y las ha cerrado. Poco del contenido creado por los usuarios es indexable y lo poco que se puede encontrar, para poder verlo hay que registrarse o tener una cuenta en su plataforma y peor es el caso de Discord, que por su parte, ha depredado a los foros y los ha encerrado sin la posibilidad de indexarlos. Aunque en el caso de Telegram, hace lo mismo, los contenidos de sus canales no son indexables, aunque si se pueden ver libremente en internet.
De nuevo, esto realmente no se si es malo y probablemente solo sea una idealización de un internet infantil e inmaduro, pero me preocupa lo que sucedería con todos esos contenidos encerrados en esas plataformas si cayeran repentinamente… y realmente no es necesario que caigan repentinamente, Al menos Facebook no permite exportar las paginas como para poder rescatarlas en cualquier momento. Y Discord tiene un formato tan resumido e informal, que no se alguien crea que valga la pena rescatar algo aunque en su caso habrían bots que podrían encargarse del asunto.
Tal vez solo estoy siendo egoísta, pero no es como si no hubiese enfrentado esas situaciones, porque ya me ha sucedido cosas en las que he perdido gran parte de mi contenido sin opción a rescatarlo, sea por el colapso de una plataforma o una moderación injusta. Y en algunos casos, ni siquiera thewaybackmachine tiene recuerdos de aquellos trabajos perdidos. Y es injusto haber trabajado en eso y que esas paginas se hayan aprovechado de mi trabajo y al final simplemente me echen. Porque escribir aunque sea un solo mensaje, es trabajo al fin y al cabo.
¿Debería ofrecer una solución? No es como si no lo hubiese pensado. También he ofrecido proyectos federados, plataformas intercomunicadas y otras cosas, pero hay que ser sinceros. Todos quieren hablar y ser escuchados, pero nadie quiere pagar el bus para ir a la plaza. Estas empresas dan un lugar para que hablen hasta los niños. Un internet mas publico y abierto seria costoso para el individuo por lo que la actividad también se reduciría. Y lo que si aumentaría, serian los contenidos que buscan desesperadamente monetizar, algo de lo que el viejo y nostálgico internet “abierto” del pasado adoleció; anuncios abusivos por todas partes. Banners intrusivos y código malicioso, malware, etc. Internet es un lugar salvaje, no es diferente de la realidad y por eso se construyen ciudades amuralladas, cada una con sus propias leyes y habitantes. Después de todo, el costo para estar seguros es justamente, la libertad.
Desarrollo de bots: Escriba del Muro. Parte 2
El proyecto del escriba del muro es un experimento para desarrollar un medio para la creación de formularios dinámicos con administración manual para la dinamización de canales e interacción con los usuarios. Lo he ido creando al vuelo, por lo que objetivos y funciones pueden cambiar en cada entrada.
Sigue leyendo Desarrollo de bots: Escriba del Muro. Parte 2