jueves, 20 de octubre de 2022

Creación de una API Rest con Spring Boot (Utilizando MySQL y JPA) - Parte 1: Implementación de un Modelo

¡Hola a todos!

Sé que en estos momentos, el blog va a cambiar notablemente la temática original del post; máxime de que en estos momentos se dedicará a realizar mis aportes en el campo del Desarrollo de Software. No obstante, durante los próximos artículos que se harán en el blog, serán transformados de una manera clara y precisa durante los vídeos de mi canal de YouTube, refutando lo anteriormente dicho al inicio de este párrafo; no se trata de hacer un descarado copy-paste de cualquier artículo que uno encuentra por ahí, porque, esto ya es de conocimiento público, que todo material será previamente preparado y redactado en este blog.

De acuerdo con el párrafo anterior, vamos a desarrollar una API Rest con el framework de Spring Boot.

Nosotros crearemos un proyecto a nivel elemental para familiarizarnos con el framework de Spring Boot, que consiste principalmente en la implementación de un CRUD, ahora bien; para los que se sienten un poco novatos en este asunto, les tendremos un breve resumen sobre estas siglas:

"Un CRUD, viene del acrónimo en inglés Create (Crear), Read (Leer), Update(Actualizar), y Delete (Borrar), son las funciones o tareas básicas de una base de datos, o bien de una capa de persistencia de datos perse" 

En este artículo nos concentraremos en el diseño de la etapa del Modelo, que consiste nada más y nada menos que un POJO (Plain Old Java Object), un POJO es un archivo Java que contiene clases, atributos y sus respectivoas Getters y Setters, para lograr ahondar mas el tema de los Getters y Setters, los dejaré en un futuro a corto plazo, las explicaciones sobre la Programación Orientada a Objetos en dónde tocaremos este tema.

Antes de arrancar con el tema, vamos a crear un nuevo proyecto desde el sitio web https://start.spring.io/, siguiendo las siguientes indicaciones que les diré a continuación, para la creación de proyecto en mención, por ahora nos dedicaremos a crear esto basándose en el gestor de dependencias de Maven. 

Después de escribir este sitio web, nos aparece una imagen de este aspecto:

Fig 1. Spring Initializr 

Después de encontrarnos con este sitio web en dónde nos vamos a familiarizar en futuros proyectos con Spring Boot, pero para este primer programa; procederemos con seleccionar los siguientes componentes o requisitos:

  • Project: Maven project
  • Language: Java (Versión 17 siendo la más recomendada)
  • Spring Boot: 2.7.4 version

Después de seleccionar los requisitos principales, procederemos a seleccionar los siguientes metadatos: 

Fig 2. Metadatos

Nosotros como vamos a desarrollar el proyecto utilizando el gestor de dependencias de Maven, nos ubicaremos en el área de Dependences, o bien presionando Ctrl+B (Haciendo clic en Add dependencies nos vendría bien), para seleccionar las siguientes dependencias para dar el primer paso:

Fig. 3 - Listado de dependencias (faltaba incluir la de Spring Web)

Al finalizar la selección de las dependencias que vamos a utilizar para nuestro primer proyecto en Spring Boot, existen dos formas de "generarlo", uno es haciendo uso del comando Control+Enter, o bien, haciendo clic en el botón "Generate" que se ve a continuación. Posterior al suceso, nos dirigiremos hacía el explorador de archivos (en el caso de que tengas Windows), y extraeremos el archivo comprimido con el nombre de la carpeta matriz del proyecto, en este caso, se llamará basicCrud.
 
Fig 4. - Localización del archivo basicCrud, y su posterior extracción
 
Después de haber realizado el proceso de extracción, ahora bien vamos a relocalizar nuestro directorio, en dónde podamos tener más facilidad de acceso, en este caso es el escritorio de Windows, ¿Con qué editor o entorno de desarrollo vamos a trabajar lo suficientemente cómodos para este proyecto que apenas vamos a comenzar? ¡Piénselo dos veces antes de surcar en el pleno Mar de los Sargazos a dónde uno va a saber por dónde iniciar, pues nada, yo les recomendaría IntelliJ IDEA pero hay que descargar desde la versión Community, de esta parte, se los explicaré en otro vídeo más adelante, por lo tanto, procederemos a abrir IntelliJ Idea que es ese ícono de color negro con azul rey, y aparece una ventana de la siguiente forma:
 
Fig 5. - Ventana principal de IntelliJ IDEA Community edition
 
Hacemos clic en "Open" y buscaremos la carpeta de nuestro proyecto, en dónde se ha relocalizado, no obstante, en IntelliJ nos aparece una advertencia de la siguente forma en dónde nos induce al usuario que, si es confiable o no la carpeta o el directorio en dónde vamos a trabajar:
 
Fig 6 - Ventana de advertencia que nos avisa al usuario si el proyecto es confiable o no

Como nuestro proyecto fué generado directamente desde el sitio web de Spring, no hace falta decir que hay que hacer clic en "Trust project" para darnos la sensación de seguridad al respecto, más sin embargo, seguiremos con el desarrollo de nuestro proyecto, pero, en este caso y concretamente en este vídeo nos enfocaremos en la parte de la creación de la parte del Modelo o "UserModel".

En la parte lateral del IntelliJIDEA, nos aparecen todos los archivos generados a través de la página web de Spring, muchos de ustedes no están familiarizados con los archivos que están en esta sección, la imagen que aparece abajo nos dice lo siguiente y explicaré con pocas palabras que hace cada archivo, solamente los más destacables:

Fig 7. - Cuadro izquierdo que aparece en el IntelliJ IDEA

  • SRC: Es un directorio en dónde tienes alojado el código fuente del aplicativo en Spring Boot, dentro de SRC está las carpetas main y resources, en el main es dónde aparece el archivo BasicCrudApplication en dónde podemos ejectuar, en la carpeta de "resources", ahí nos aparece el archivo "aplication.properties" en dónde nos vamos a poner la configuración para que nuestro aplicativo pueda correr sin mayores inconvenientes; en todo caso, es el inicio de nuestro proyecto que es, un formulario CRUD.
  • Test: La carpeta test contiene los archivos necesarios para realizar las diferentes pruebas unitarias de acuerdo con lo que solicita o emplea el desarrollador.
  • Mvnw.cmd y mvnw: Son los ejecutables del proyecto de Spring boot, empleados bajo el gestor de dependencias de Maven, el primero es exclusivamente para la plataforma Windows, y la última para sistemas UNIX (Linux y Mac).
  • Pom.xml: Este archivo en partícular, es el directo responsable de "almacenar y agregar mas" las dependencias en el gestor de Maven, es un archivo del tipo xml, cuya estructura es en parte similar al HTML, el contenido de este pom.xml se muestra a continuación:     
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.toadsdewin</groupId>
<artifactId>basicCrud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>basicCrud</name>
<description>This is the first project for YouTube</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
La configuración del aplication.properties se hace de la siguiente manera:        
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:3306/crudYT
spring.datasource.username=root
spring.datasource.password= d3w1n@c0st4-0721
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
Nota al lector: la base de datos crudYT debe crearse primero antes de ejecutar el aplicativo web para evitar traumatismos innecesarios, en todo caso, se debe contar primero con conocimientos previos en bases de datos tipo MySQL.
 
Crearemos luego el archivo UserModel dando a conocer algunas de las siguientes anotaciones, en el archivo UserModel aparecen dos entidades llamados @Entity y @Table, en dónde esta última se refiere a lo que conocemos como un POJO (Plain Old Java Object), en dónde tendremos sus respectivos atributos, métodos, getters y setters, la palabra Entity nos viene siendo como el Modelo o la Entidad de nuestro proyecto en Spring Boot.
 
Otras anotaciones para tener en cuenta son @Id , @GeneratedValue, y @Column, en la primera anotación nos viene a deducir que se trata del identificador de una tabla, que contiene su respectiva llave primaria (de ahí partimos del modelo entidad relación que se viene más adelante), la anotación Column nos dice que el apartado Id, es una columna del tipo única y que no contenga valores nulos, el GenerationType suele dejar en Auto, nuestro POJO, nos aparece de la siguiente forma:
 
package com.toadsdewin.basicCrud.UserModel;
import javax.persistence.*;

@Entity
@Table(name = "users")
public class UserModel
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false, length = 10)
private Long id;

private String name;
private String surname;
private String country;
private String occupation;
private Integer age;
private Integer phoneNumber;

public UserModel()
{
name = "John";
surname = "Doe";
occupation = "Developer";
age = 30;
phoneNumber= 5551234;
}
public UserModel (String name, String surname, String occupation, Integer age, Integer phoneNumber)
{
this.name = name;
this.surname = surname;
this.occupation = occupation;
this.age = age;
this.phoneNumber = phoneNumber;
}

public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public String getCountry() {
return country;
}
public String getOccupation() {
return occupation;
}
public Integer getAge() {
return age;
}
public Integer getPhoneNumber() {
return phoneNumber;
}

public void setId(Long id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public void setSurname(String surname) {
this.surname = surname;
}

public void setCountry(String country) {
this.country = country;
}

public void setOccupation(String occupation) {
this.occupation = occupation;
}

public void setAge(Integer age) {
this.age = age;
}

public void setPhoneNumber(Integer phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
Luego, el comando para ejecutar nuestro aplicativo es el siguiente, desde la terminal que incluye en el IntellijIDEA:
 ./mvnw.cmd spring-boot:run
Después de ejecutar nuestro aplicativo, sin ningún atisbo de error; ya damos por terminado la primera parte del proyecto en sí, en los siguientes artículos (vídeos) procederemos a explicar y hacer la parte de los repositorios y servicios en sí, nos vemos en otro post.
 

sábado, 30 de abril de 2022

El drama de los NINI o NEET en general

Muy buenas noches para todos los lectores.

En esta entrada, hoy les hablaré sobre una problemática muy común y a la vez demasiado crónico para una sociedad no solo la colombiana sino que ha traspasado fronteras; se trata sobre los ninis, pero, para adentrar más a fondo sobre la problemática de los ninis; en primer lugar vamos a preguntar lo siguiente ¿Qué es y por qué surgieron los ninis?

En el común denominador, a los ninis se les suelen tachar de vagos, zánganos y de cualquier clase de sinónimos degradantes sin antes conocer el porqué de ellos que se encuentran en este estado de incertidumbre. Los NINI's vienen del acrónimo Ni estudian Ni trabajan, que a su vez provienen del vocablo inglés NEET cuyo significado es Not in Education, Employment, or Training.

Hay muchas razones por el cual las personas se convierten o acaban siendo parte de los NEET, y son múltiples, una de ellas es la negativa de los procesos de contratación, la frustración de haber pasado una indeterminada cantidad de currículums, o bien sabido el abandono de los procesos académicos o muy desgraciadamente, el estilo de vida ocioso y pésima crianza y permisividad de sus padres o tutores a la hora de criarlos, lo que en un abrir y cerrar de ojos se convertirán en unos parásitos quiénes les gustó aquel estilo de vivir sin preocupaciones.

Los NINIs suelen ser personas que en promedio su nivel académico rozan en el nivel profesional y por ende se mantienen firmes a la hora de buscar el empleo deseado, y tratan de mantenerse activos realizandose actividades domésticas o bien, tienden a realizar actividades de cuidado y de crianza en el caso de que estos se vuelvan papás o tienden a cuidar a estos últimos ya siendo de la tercera edad.

No obstante, en una nota de prensa de un reconocido noticiero colombiano, he visto un desconcertante caso de un joven de Santa Marta de 21 años quién se manifiesta tan descaradamente y despreocupado que "Le gusta mantenerse en ese estilo de vida y que no le preocupa nada en absoluto, ya que mis papás me mantienen". Lo peor de todo es que éste personaje desertó de sus estudios de bachillerato para darse la gran vida, y sin esperar nada a cambio. ¿Increíble no?

Si el estado, las empresas privadas y hasta la misma sociedad no se hacen cargo de los NEET, se volverán un perfecto caldo de cultivo para ser atractivos de los grupos delincuenciales, trata de personas y otros males. Muchas personas NEET tienen la voluntad amplia de trabajar y de ser así, contar con empleos para paliar la problemáticas, pero, que no sean trabajos cortoplacistas y que vuelvan a repetir el círculo vicioso de los Ninis.

Para finalizar, según un dato obtenido por la OCDE, el porcentaje de los jóvenes NEET en Colombia ronda el 29.8% , luego sigue Turquía con el 28.8%.

Un saludo para todos los presentes

sábado, 2 de abril de 2022

Día del autismo, más que concientización; aceptación.

Muy buenas noches, y dependiendo de su zona horaria correspondiente,

Cada 2 de abril, se conmemora una vez más en lo que se denomina el día internacional de la concientización del autismo, pero, más de que el común denominador o el pueblo llano sepa entender y sustentar sobre lo que es en verdad el autismo, voy a partir de ahí a sabiendas de que la persona que está escribiendo este artículo, es una persona con condición del espectro autista.

El autismo es una condición neurológica que se manifiesta durante los primeros años de vida, aunque suelen ocurrir discrepancias, o bien, no todas las personas que son del espectro se manifiestan de todas formas, por ejemplo, hay personas que temprano que tarde, desarrollan el habla muy por encima de los tres o cuatro años de edad, o en casos severos no van a desarrollar la capacidad del habla, aunque de todas maneras; los autistas no verbales suelen comunicarse mediante aparatos electrónicos como tablets u ordenadores con sintetizadores de voz, o también con cuaderno y bolígrafos.

Tenemos rituales y conductas estereotipadas y a cada rato nos regulamos mediante movimientos repetitivos u stimmings por el cual no es objetivo de alarma por parte de los padres de familia y/o especialistas en el tema, aunque por más que nos autoregulemos, las reacciones adversas son el pan nuestro de cada día, podríamos pasar de un lago sereno a Chernobil en cero coma. Hasta que se calmen las olas del penoso desastre.

Las personas que pertenecemos o bien, que somos de la condición del espectro autista, tenemos nuestra propia voz y merecemos ser escuchados, orientados y a su vez que nos brinden espacios de acuerdo a nuestras habilidades fuertes a la hora de conseguir un buen empleo; gran parte de las personas dentro del espectro autista está en la situación de paro, o desempleadas en el argot local.

Para finalizar este artículo con relación a la conmemoración del día del autismo que se da anualmente cada 2 de abril, os quiero aclarar lo siguiente; muchas personas dentro del espectro podemos tener una vida relativamente normal, siempre y cuando sea en el marco del respeto, y que se tenga firme las herramientas necesarias y auxilios no sólo a nivel educativo, sino adecuaciones u orientaciones a nivel laboral y social para que personas como nosotros no se sientan excluidas dentro de una sociedad que, tristemente, es sumamente excluyente y capacitista.

Un saludo para todos.

domingo, 31 de mayo de 2020

El poder del abrazo

Apreciados lectores, muy buenos días, tardes y noches; indiferente de su zona horaria en dónde estén viviendo actualmente. He decidido hacer un hiatus sobre mis vivencias durante el programa de Autism at Work en SAP para dar espacio a un tema, que para mí es de vital importancia; y en épocas de coronavirus pasó a un segundo plano, dicha temática es el abrazo y su poder que se cierne sobre ello.

Un abrazo, visto desde el significado de la Real Academia de la Lengua Española, es una definición bastante simplona que es la "Acción y efecto de ceñir entre dos personas". Es muy polisémca esta palabra, puede ser para encausar una causa o atrapar un negocio, o muchos más. En todo caso el abrazo es una manifestación de aprecio, cariño y de amistad siempre y cuándo se tenga el consentimiento entre las partes, aunque no faltan los abrazos sorpresa entre amigos, familiares o conocidos.

Centrando en la esencia de este presente artículo, el pode que tiene de dar y recibir un abrazo es enorme, por un lado ayuda a calmar la ansiedad de la persona que está afligida, y a su vez transmite seguridad y confianza de su respectivo destinatario. Asimismo, un abrazo puede interpetarse como una manifestación de camadería plena, y de que esa persona importa, pero mucho (para que puedas entender, si la persona a la que va a abrazar el mensaje significa aprecio, protección y mucho pero mucho entendimiento).

No todas las personas suelen ser muy receptivas a la hora de recibir un abrazo, no porqué la persona sea fría y distante, sino que quiere mantener su propia intimidad, o se limitan a un amistoso apretón de manos. Aunque, para una persona que, a lo largo de su vida ha tenido carencias afectivas por parte de su familia y conocidos, el hecho de recibir y dar un abrazo, es sorprendente y puede dar a manifestaciones de infinita alegría.

Como colofón a este mensaje, le diré lo siguiente; aprecia lo que tienes y rodéate de personas que te importen y de por sí, de y recibe un fuerte abrazo, es muy bueno para tu salud mental; ¡Yo sé por qué se los digo!

El abrazo, es la mejor medicina para combatir la tristeza, y el desasosiego. Una vez realizado esa manifestación, siendo así las cosas cambian de otro color.

¡Un fuerte abrazo a todos!

lunes, 6 de enero de 2020

Autism at Work en SAP - Prólogo

Muy buenas noches para todos los presentes.

Después de una prolongada ausencia de posts en este blog, por cuenta de cosas que en verdad me han cambiado para bien, y asimismo se dió una gran apertura a un sinfín de procesos laborales, tanto vigentes como concluidos; sin importar su resultado, aqui va el primer relato de la serie de posts que serán publicado en estos días:

En aquel tiempo, y con el objetivo de alcanzar un empleo de calidad, y más, con el hecho de ser una persona con condición del espectro autista; tenía el deber persistente en seguir buscando esa vacante, pero antes; os quiero aclarar lo siguiente, conozco Java desde tiempo atrás y lo he estado perfeccionando a tal punto de que la programación se me ha convertido en una virtud, y más siendo ingeniero electrónico, al parecer tengo las ventajas aunque también pueda que tenga serias fallas en cosas que no he visto pero que, aún las seguiré documentando.

Fue en la primera semana del mes de Octubre del presente año (2019), mientras estaba revisando como de costumbre mis redes, hasta que apareció un post directamente anunciado de la Liga Colombiana del Autismo, rezando la siguiente frase:
Vacante para personas en el espectro autista
A lo que pensé sin chistar dos veces: ¡Me postularé para esta vacante, pero para Experiencia del Consumidor (su traducción en inglés sería Customer Experience), además de que se necesita con mucha importancia, un buen dominio del inglés; y la cerezita del pastel, sin experiencia de ninguna categoría.

Antes de poder verificar, si la vacante que aparece ahí, es del todo cierta; he corroborado por medio de LinkedIn que si es verdad, y que al parecer  pertenece a una persona quién se desempeña en el Departamento de Recursos Humanos en SAP,  pero... ¡Sorpresa! necesitaba un registro previo a una plataforma en esa misma compañía denominado SucessFactors, y sin más, me registré ahí con todos los datos pertinentes, y también anexé mi hoja de vida. Pero no todo terminó ahí con este primer eslabón.

Pasados unos días de haber registrado en el SucessFactors de SAP, para aplicar dicha vacante, se me ha entrado una llamada de, al parecer una de las psicólogas que trabaja en LICA, que más tarde será la que cambió mi propia vida.

El día de la entrevista por Skype.

Era un 11 de octubre a las 11:30 de la mañana, con una ropa mucho más formal para la ocasión; tuve el acontecimiento más importante de mi propia existencia, y es la entrevista por Skype a quién conocí de forma preliminar a la que pertenece al área de HR en SAP y la psicóloga que pertenece a la Liga Colombiaa del Autismo, entre nosotros los tres nos hablamos sobre las expectativas que se tenían sobre la vacante que se estaba ofertando en SAP,  de lo que se hará durante las dos semanas de entrenamiento, y de la posibilidad de ser contratados en la misma compañía, a término indefinido durante los dos años de contrato.

Después de la entrevista, he estado teniendo nuevas expectativas de lo que depara de aquí en adelante, como son; las actividades que se van a realizar aunque esto se vió en el transcurso del día 28 de octubre, fecha en el que nos reunimos con los siete muchachos restantes, de eso se hablará en entradas más adelante.

Antes de iniciar esta arriesgada aventura por Bogotá, he tenido que vivir varios meses de mucha resistencia por parte de politicastros, quiénes en su afán de rellenar "contratos", con la condición de buscar su voto por X o Y candidato a las pasadas elecciones del 27 de octubre del 2019, razón por el cual he tenido varios percances con familiares de primer grado, quiénes en su desespero, van a contatarme con una certificación laboral falsa; mi ética profesional no está ni será puesta en venta.

Día de elecciones y el prólogo de este viaje a Bogotá.

Para ese día, se acontecieron dos eventos uno no tan importante, y otro que sí es de verdad el que más me importó ese día; mi viaje a la capital para iniciar el proceso en SAP; volviendo al primer evento que no es tan importante como son las elecciones locales, lo que sí es de vital importancia (por lo menos) es la obtención del certificado electoral; que puede servir para muchas cosas. Pero, no voy a extender más esta temática.

Ya con el equipaje listo del día anterior, y minutos mas tarde de ir a las urnas, emprendí el viaje con mi padre (quién me acompañó solamente por dos días) hacia la capital, para valga la redundancia, iniciar con el proceso, llegamos pasado a la hora de los telediarios; y nos pusimos a averiguar todas las prendas para el clima frío (ya tenía mi ropa aunque con otras prendas de más no estaba nada mal) para dar paso y estar bien preparado.

Durante ese día sólo se habló de las elecciones locales, y la recién electa alcaldesa de Bogotá celebró su victoria haciendo demostraciones de afecto con su pareja quién actualmente ostenta de Senadora de la República, a más tardar las 8 de la noche de ese mismo día.

Este ha sido el prólogo de lo que se relatará de acá en adelante, del como fué mi procedimiento en SAP.