Blabla
!Ya estoy en youtube! suscribete a mi canal https://www.youtube.com/channel/UC6-tLGUyvfrb9ibuCipFQKg
Este es el mejor Blog en español dedicado a la tecnología Java, noticias, API's, Frameworks y toda mi experiencia.
Páginas
jueves, 31 de diciembre de 2020
martes, 29 de diciembre de 2020
El perfil de un ingeniero de software en demanda
Si eres un recién egresado y estás buscando un trabajo, seguramente te preguntarás que conocimientos, habilidades y actitud requieren las empresas. Te dejo un listado de lo más común en el mundo Java.
1.- Control de versiones
GIT y SVN, son las herramientas de control de versiones más demandado. ¿Quieres una guía rápida de GIT? Aquí tienes una entrada Guía rápida de Github
2.- Entorno de desarrollo integrado IDE
Eclipse o NetBeans, en este blog puedes buscar artículos sobre NetBeans, búscalos en las etiquetas.
viernes, 11 de diciembre de 2020
Como publicar mi proyecto Java EE en internet
Este 2021 inicio con un proyecto personal, para ello he desarrollado mi aplicación Java EE tomando como base Shopizer, y llegado la hora de publicarlo a internet me he encontrado con desafíos, le he dedicado muchas horas a investigar, por ello en esta entrada documento todo.
Conceptos que aprendí
Sitio Web, Aplicación Web, Hosting, Servidor en la nube (cloud), Servidor VPS,
Esta entrada trata sobre
Preparar un servidor virtual para desplegar aplicaciones Java EE y hacerlo accesible a Internet con un presupuesto de 50USD anual.
Lo primero que hice fue comprar el dominio, este lo compré en GoDaddy, no tuve mayores problemas. Luego voy por el Hosting, y aquí me encontré con muchas confusiones, probé con Wordpress para luego enterarme que Wordpress es un Hosting + CMS, algo que definitivamente no me sirve, yo solo tenía acceso a la aplicación CMS, olvídate de tener un MySQL, Wildfly y Apache.
Investigando descubrí que generalmente un Hosting es un ambiente preconfigurado para subir un sitio web y no una aplicación web. La mayoría de los Hosting vienen con un conjunto de software pre instalado y configurado para sitios web PHP.
Seguí investigando y encontré que lo que yo buscaba era un servidor web en la nube, en realidad podría tener mi propio servidor web en el departamento pero al hacer cálculos de costes no es muy conveniente que digamos.
Siguiendo con la historia, encontré un servidor en la nube muy bueno, viene pre configurado para la tecnología Java, Red Hat Openshift, ya viene instalado MySQL, Java, Tomcat o Wildfly. El problema es el costo, 50 USD mensual, estamos hablando de 600 USD anual. y pues se sale de mi presupuesto, mi presupuesto es de 50 USD anual. Jajajaja.
Seguí investigando y encontré que hay un servidor en la nube virtual, sin nada pre instalado mas que solo el SO, y el costo es de un poco menos de 50 USD anual. Estos son los conocidos Servidor VPS. Por ahora me encuentro en Chile así que elegí a mi proveedor https://www.hosty.cl/cloud-vps/
Una segunda buena opción erá https://www.digitalocean.com/products/droplets/ pero ligeramente más caro, 20 USD aprox más que hosty. Por el precio lo descarté, quizás en el futuro.
Una tercera opción que no me convence del todo es https://www.hostignition.com/index.php?page=jsp-servlets, no me terminar de convencer ya que viene pre configurado con Tomcat y sospecho no se puede instalar Wildfly, pero igual debería darle una revisada.
Conectarte al Servidor VPS
Un servidor VPS es como cualquier servidor, solo que está en la nube, en internet, tiene su SO, en mi caso elegí Ubuntu Server 18, y para acceder a el lo haces mediante un cliente SSH Putty. El proveedor te da la dirección IP, el puerto, y la contraseña del usuario root la cual puedes cambiar mas adelante. De entrada Putty no me pareció muy amigable, cuando llegué al login en ingresaba el password de mi usuario Linux, en la consola, el promt no dibuja los caracteres ingresados, por fortuna puedes copiar y pegar el password haciendo click derecho sobre la consola.
Instalando MySQL
Para instalar MySQL ejecutar el siguiente comando Ubuntu
sudo apt install mysql-server
Para verificar si el servicio de MySQL esta ejecutándose correctamente ejecutar el siguiente comando
sudo netstat -tap | grep mysql
Y deberías ver la siguiente salida
tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN 6874/mysqld
En caso de que el servicio no esté corriendo puedes iniciarlo ejecutando el siguiente comando
sudo systemctl restart mysql.service
Instalando Java
He decidido instalar OpenJDK ya que es la opción mas sencilla, para instalar, ejecutar los siguientes comandos.
sudo apt update
sudo apt install default-jdk
Instalando Apache Tomcat
Configurando el nombre del dominio web en Apache Tomcat
Para mostrar tu aplicación web cuando el usuario ingrese en su navegador el nombre de tu dominio deberás configurar el dominio en Apache Tomcat, aquí puedes leer una entrada exclusiva para saber como configurarlo. ¿Cómo configurar el nombre del dominio web en Apache Tomcat?
Configurando nuestro dominio
Pronto...
Seguridad
Pronto...
Y bueno... aun me queda mucho trabajo por hacer, instalar MySQL, Java, Wildfly, Apache Web, y configurar Wildfly con Apache Web.
Seguiré documentando...
lunes, 14 de septiembre de 2020
Ejercicios de Programación
Si te apasiona la programación, los desafíos, pues aquí te voy a dejar una lista de ejercicios, son ejercicios reales que se me han presentado en el trabajo.
No dejaré la solución pero puedes enviarme tu programa y lo revisaré cuando este libre.
Ejercicio 1.- Unificar rectángulos que se encuentran en una misma fila.
Ejercicio 2.- Buscar una sub lista dentro de una lista
miércoles, 2 de septiembre de 2020
Persistencia de Datos con JPA
viernes, 5 de junio de 2020
Guía del inversionista Mexicano
Tengo muy poca experiencia en Start Up... continuará
¿Como invertir en México?
domingo, 24 de mayo de 2020
Desarrollo de Aplicaciones con Java EE 8
Tabla de Contenidos
Capitulo 1: Introducción a Java EE
Capitulo 3: Persistencia de datos con JPA
Capitulo 4: Enterprise Java Beans
Capitulo 5: Contexto e Inyección de Dependencias
Capitulo 6:
domingo, 3 de mayo de 2020
Como usar c3p0 en JPA Hibernate
Integrar C3P0 en un proyecto Maven
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.3.6.Final</version>
</dependency>
hibernate-c3p0-5.3.6.Final.jar
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.11.jar
Si te preguntas como me he enterado de todos los jars necesarios, pues te diré que en el repositorio de maven está la lista de todas las dependencias. Tu buscas hibernate-c3p0-5.3.6.Final.jar y se te mostrará las dependencias necesarias para compilar y/o ejecutar.
Integrar C3P0 en un proyecto estándar
Para integrar c3p0 en un proyecto estándar debes descargar los jars por separados, los puedes descargar desde el repositorio de maven. Una vez descargados debes agregarlos al classpath de tu proyecto.Propiedades C3P0
Las propiedades más relevantes para c3p0 son:
viernes, 1 de mayo de 2020
Participemos en la transformación de nuestra sociedad
sábado, 25 de abril de 2020
Crear servicios REST en Java en 10 minutos
- La clase Persona implementa a la interface Serializable
- La clase Persona tiene un constructor sin parametros
Como podrás observar, esta es una clase común y corriente pero que tiene algunas anotaciones propias para el soporte de REST javax.ws.rs.*, las cuales serán reconocidas por el servidor de aplicaciones para finalmente exponer el servicio, analicemos para que esta cada una de ellas.
La anotación @Path indica la URL en la cual responderá este servicio, cabe mencionar que esta anotación se puede poner a nivel de clase y método, en este caso, al estar a nivel de clase, afecta a todos los servicios que definamos.
La anotación @Context permite inyectar un objeto de la clase UriInfo
Las anotaciones @Consumes y @Produces son para indicar que tipo de mensaje esperamos como entrada (consumes) y que tipo de mensaje vamos a responder (produces). En este caso, estamos indicando que esperamos JSON como entrada y que vamos a responder igualmente con JSON. La plataforma REST se encargar de parsear el mensaje JSon a objeto y viceversa.
La anotación @POST indica que nuestro método addPersona va a procesar las peticiones POST y la anotación @GET inicia que nuestro método getPersona va a procesar las peticiones GET.
El método getPersona devuelve la información de una persona en formato JSon
La anotación @Path("/{id}") y @PathParam("id") están relacionadas, nos permite obtener el id de la URL como un parámetro para nuestro método getPersona
Debemos extender la clase javax.ws.rs.core.Application para registrar nuestra clase que implementa nuestros servicios REST.
Observar que esta clase también tiene la anotación @javax.ws.rs.ApplicationPath("rest") donde rest formará parte de la URL http://localhost:8080/demo-rest-1.0-SNAPSHOT/rest/persona de nuestro servicio.
Hacemos un Clean Build y Ejecutamos. Netbeans se encarga de desplegar nuestra aplicación web e iniciar el servidor WildFly
Para probar nuestros servicios yo utilizo RestClient https://github.com/wiztools/rest-client/releases la versión GUI, restclient-ui-fat-3.7.1.jar
Las URL de nuestro servicio es http://localhost:8080/demo-rest-1.0-SNAPSHOT/rest/persona/ el cual se construye a partir de http://localhost:8080/{nombre_aplicacion}/rest/persona/
viernes, 10 de abril de 2020
¿Se nace inteligente o nos hacemos inteligentes?
Mi respuesta personal en base a mi experiencia, es un rotundo Por supuesto que la inteligencia se puede desarrollar pero hay que cultivarla, todos los días destinar un tiempo para ser más inteligentes que ayer. Quizás no logremos superar a aquellos que tienen una super inteligencia innata, pero si llegaremos a sentirnos más realizados, llegaremos a sentir que aportamos más valor a la sociedad y eso nos ayudará a ser más felices.
Tengo la dicha de ser Tío de dos sobrinos maravillosos y me siento responsable en su educación, voy a guiarlos en descubrir que tipo de inteligencia tienen, motivarlos y enseñarles como seguir desarrollando esa inteligencia. Creo es lo mínimo que puedo hacer para contribuir en crear una mejor sociedad.
Referencia
https://www.lavanguardia.com/vivo/psicologia/20161102/411487509406/nacemos-o-nos-hacemos-inteligentes.html
domingo, 29 de marzo de 2020
Habilitar Escritorio Remoto en Windows
3.- En la sección Otras acciones del grupo en el hogar. Ir a Cambiar configuración de uso compartido avanzado.
4.- En la sección Casa o trabajo, Uso compartido con protección de contraseña
Seleccionar la opción Desactiva el uso compartido con protección por contraseña.
Estamos en una red Hogar por lo que no es relevante tanta seguridad, esto facilitará el acceso
domingo, 22 de marzo de 2020
Reseña de la crisis del Coronavirus 2020
22 de Marzo del 2020
La Aerolinea mexicana Volaris se desplomó un 60% y está próxima a declararse en quiebra. La operadora de restaurantes Alsea, que opera pizzas Domino, Startbucks, MacDonalds, y otros restaurantes, también perdió cerca del 60%, aun no se declara en quiebra pero ha iniciado un cierre progresivo, dando vacaciones sin goce de sueldo a sus empleados. Así que el Coronavirus ha terminado por iniciar una crisis económica, no se sabe aun la magnitud ni cuando va a durar.
Es increíble pero el mundo puede cambiar en un par de meses, todos los planes a futuro se tienen que re evaluar, posponer o cancelar, porque en una crisis tu prioridad es sobrevivir. Pero algo muy importante que tienes que tener presente es mantener la calma, hay situaciones que no puedes controlar y no vale la pena desgastarse, ahorren energía para cuando llegue lo peor.
597,072 infectados en todo el mundo, 27,333 muertos, 131,007 recuperados. En México 717 infectados y 12 muertos. En Chile 1,700 infectados y 6 muertos.
Yo creo que estoy bien, aun no estoy contagiado, o al menos no presento los síntomas, estoy tomando las precauciones necesarias sin caer en la paranoia.
Ayer se decretó cuarentena, todos a encerrarse en casa, evitar salir salvo en casos excepcionales y con un permiso temporal. He realizado inventario de víveres y he decidido racionalizar. Lo más practico ha sido almacenar granos (arroz, frijoles, garbanzos y maíz) y papas. Estos víveres son los que más perduran en el tiempo, se vienen días muy difíciles y por ello he decido racionalizar, afortunadamente cuento con todo lo necesario para cocinar.
Las bolsas de todo el mundo han caído al menos un 40%, para los que tienen mucha liquidez pronto será una excelente oportunidad para comprar a aquellas empresas que sobrevivan a esta crisis, claro, si no es que el Coronavirus se los lleva. El dolar se ha disparado al ser una moneda de refugio, mientras siga siendo una moneda de refugio conviene tener un porcentaje de activos en dolares.
Todos los gobiernos del mundo están diseñando medidas para contrarrestar la crisis económica que se avecina, buscan apoyar a las personas más vulnerables, ya sea entregando bonos o subsidios para el pago de gastos básicos.
La infraestructura afortunadamente está funcionando, por infraestructura me refiero a la red eléctrica, el agua, el gas, el Internet. Hoy más que nunca el Internet cobra relevancia ya que permite el tele trabajo o trabajo remoto.
En estos momentos debemos apelar a nuestra humanidad, dejar el individualismo y apoyar a medida que podamos, la única manera de salir adelante es estando unidos.
11 de Abril del 2020
1,733,792 infectados en todo el mundo, 107,520 muertos. En México 3,844 infectados y 233 muertos. En Chile 6,927 infectados, 73 muertos. Yo la sigo librando, no estoy contagiado ni quiero estarlo. La cuarentena se ha extendido por otros 15 días, haber racionalizado mis víveres fue una excelente decisión, aun tengo comida para por lo menos 3 meses. El panorama es desolador, millones se han quedado sin empleo, Estados Unidos lidera en números de contagiados y muertos, China ya parece haber superado esta pandemia mientras que México y Chile recién están entrando a la etapa más critica. Desde mediados de Marzo he reducido mis gastos al mínimo, Netflix, Mens Health, mi plan de datos en México, la Tv, y todo lo que no sea necesario lo he cancelado. Fue una excelente decisión para optimizar mis recursos. También estamos buscando asegurar la sobre vivencia de la empresa vamos a tomar decisiones complejas, una de ellas es reducir los salarios, ante situaciones criticas se deben hacer sacrificios, sin sacrificios no podremos sobrevivir.
Las acciones que estoy tomando:
1.- Racionalización de mis víveres
2.- Consumo inteligente, granos, legumbres y cereales
3.- Mover mis reservas económicas a Bitcoin y diversificarme, una parte a México y otra en Chile.
4.- He actualizado mi seguro medico en caso de contagiarme
5.- Hacer ejercicio, principalmente cardio, ayuda a combatir el estress.
6.- Dormir mejor, ayuda a equilibrar el consumo de energía
Se promulga la ley de la protección al empleo
sábado, 21 de marzo de 2020
Java POS
En este curso te voy a entregar toda mi experiencia, tips, trucos y buenas practicas para que puedas integrar los dispositivos de venta a tu aplicación POS.
jueves, 9 de enero de 2020
Carta de un padre Azteca a su Hijo
miércoles, 1 de enero de 2020
Parseando un archivo XML con SAX Parser
SAX, también conocido como una API simple para XML, es usado para parsear (del archivo xml a objetos) documentos XML.
En este tutorial, vamos a aprender lo que SAX es, por qué, cuando y como debería de usarlo.
SAX es un API usado para parsear documentos XML. Está basado en eventos generados mientras va leyendo el documento. Metodos Callback reciben estos eventos. Una clase manejadora contiene estos metodos Callbacks.
El API es eficiente porque los eventos son desechados después de que los metodos Callbacks los han recibido y procesado. Por lo tanto, SAX es eficiente con el manejo de memoria, a diferencia de DOM, por ejemplo.
SAX vs DOM
DOM mantiene un Modelo de Objetos para el Documento. El parser DOM no trabaja sobre eventos. En realidad, carga todo el documento XML en memoria. SAX es más eficiente en el manejo de la memoria que DOM.
DOM tiene la ventaja de facilitar el realizar operaciones en todo el documento una vez que el documento ha sido cargado en memoria.
Nota: El archivo xml lo debes colocar en la raíz de tu proyecto
Y aquí tienes la clase
SAX Parser lee el archivo XML de arriba hacía abajo, de izquierda a derecha y dispara los siguientes eventos:
- Inicio del Documento
- Inicio de un Elemento
- Fin de un Elemento
- Fin del Documento